:root{--color-primary-50: #EFF6FF;--color-primary-100: #DBEAFE;--color-primary-200: #BFDBFE;--color-primary-300: #93C5FD;--color-primary-400: #60A5FA;--color-primary-500: #3B82F6;--color-primary-600: #2563EB;--color-primary-700: #1D4ED8;--color-primary-800: #1E40AF;--color-primary-900: #1E3A8A;--color-neutral-0: #FFFFFF;--color-neutral-50: #F8FAFC;--color-neutral-100: #F1F5F9;--color-neutral-200: #E2E8F0;--color-neutral-300: #CBD5E1;--color-neutral-400: #94A3B8;--color-neutral-500: #64748B;--color-neutral-600: #475569;--color-neutral-700: #334155;--color-neutral-800: #1E293B;--color-neutral-900: #0F172A;--color-success-bg: #ECFDF5;--color-success-fg: #047857;--color-success-border: #A7F3D0;--color-warning-bg: #FFFBEB;--color-warning-fg: #B45309;--color-warning-border: #FDE68A;--color-danger-bg: #FEF2F2;--color-danger-fg: #B91C1C;--color-danger-border: #FECACA;--color-info-bg: #EFF6FF;--color-info-fg: #1D4ED8;--color-info-border: #BFDBFE;--color-text-primary: #1E293B;--color-text-secondary: #475569;--color-text-tertiary: #64748B;--color-text-disabled: #94A3B8;--color-text-inverse: #FFFFFF;--color-bg-page: #F8FAFC;--color-bg-container: #FFFFFF;--color-bg-elevated: #FFFFFF;--color-bg-hover: #F1F5F9;--color-bg-active: #E2E8F0;--color-border-base: #E2E8F0;--color-border-light: #F1F5F9;--color-border-strong: #CBD5E1;--color-status-pending-bg: #FFFBEB;--color-status-pending-fg: #B45309;--color-status-pending-border: #FDE68A;--color-status-accepted-bg: #ECFDF5;--color-status-accepted-fg: #047857;--color-status-accepted-border: #A7F3D0;--color-status-scheduled-bg: #EFF6FF;--color-status-scheduled-fg: #1D4ED8;--color-status-scheduled-border: #BFDBFE;--color-status-implemented-bg: #F0FDFA;--color-status-implemented-fg: #0F766E;--color-status-implemented-border: #99F6E4;--color-status-rejected-bg: #FEF2F2;--color-status-rejected-fg: #B91C1C;--color-status-rejected-border: #FECACA;--color-status-duplicate-bg: #F4F4F5;--color-status-duplicate-fg: #52525B;--color-status-duplicate-border: #E4E4E7;--color-priority-high-bg: #FEF2F2;--color-priority-high-fg: #B91C1C;--color-priority-high-border: #FECACA;--color-priority-medium-bg: #FFFBEB;--color-priority-medium-fg: #B45309;--color-priority-medium-border: #FDE68A;--color-priority-low-bg: #F1F5F9;--color-priority-low-fg: #475569;--color-priority-low-border: #E2E8F0;--color-chart-1: #2563EB;--color-chart-2: #E69F00;--color-chart-3: #009E73;--color-chart-4: #C2410C;--color-chart-5: #0E7490;--color-chart-6: #BE123C;--color-chart-7: #65A30D;--color-chart-8: #4338CA;--color-chart-9: #94A3B8;--color-chart-10: #A16207;--color-status-appr-approving-bg: var(--color-info-bg);--color-status-appr-approving-fg: var(--color-info-fg);--color-status-appr-approving-border: var(--color-info-border);--color-status-appr-approved-bg: var(--color-success-bg);--color-status-appr-approved-fg: var(--color-success-fg);--color-status-appr-approved-border: var(--color-success-border);--color-status-appr-rejected-bg: var(--color-status-rejected-bg);--color-status-appr-rejected-fg: var(--color-status-rejected-fg);--color-status-appr-rejected-border: var(--color-status-rejected-border);--color-status-appr-canceled-bg: var(--color-status-duplicate-bg);--color-status-appr-canceled-fg: var(--color-status-duplicate-fg);--color-status-appr-canceled-border: var(--color-status-duplicate-border);--color-status-apprnode-pending-bg: var(--color-status-pending-bg);--color-status-apprnode-pending-fg: var(--color-status-pending-fg);--color-status-apprnode-pending-border: var(--color-status-pending-border);--color-status-apprnode-approving-bg: var(--color-info-bg);--color-status-apprnode-approving-fg: var(--color-info-fg);--color-status-apprnode-approving-border: var(--color-info-border);--color-status-apprnode-approved-bg: var(--color-success-bg);--color-status-apprnode-approved-fg: var(--color-success-fg);--color-status-apprnode-approved-border: var(--color-success-border);--color-status-apprnode-rejected-bg: var(--color-status-rejected-bg);--color-status-apprnode-rejected-fg: var(--color-status-rejected-fg);--color-status-apprnode-rejected-border: var(--color-status-rejected-border);--color-status-apprnode-skipped-bg: var(--color-status-duplicate-bg);--color-status-apprnode-skipped-fg: var(--color-status-duplicate-fg);--color-status-apprnode-skipped-border: var(--color-status-duplicate-border);--color-status-att-leave-bg: var(--color-status-implemented-bg);--color-status-att-leave-fg: var(--color-status-implemented-fg);--color-status-att-leave-border: var(--color-status-implemented-border);--color-status-att-makeup-pending-bg: var(--color-status-pending-bg);--color-status-att-makeup-pending-fg: var(--color-status-pending-fg);--color-status-att-makeup-pending-border: var(--color-status-pending-border);--color-status-att-normal-bg: var(--color-success-bg);--color-status-att-normal-fg: var(--color-success-fg);--color-status-att-normal-border: var(--color-success-border);--color-status-att-late-bg: var(--color-warning-bg);--color-status-att-late-fg: var(--color-warning-fg);--color-status-att-late-border: var(--color-warning-border);--color-status-att-early-leave-bg: var(--color-warning-bg);--color-status-att-early-leave-fg: var(--color-warning-fg);--color-status-att-early-leave-border: var(--color-warning-border);--color-status-att-field-work-bg: var(--color-info-bg);--color-status-att-field-work-fg: var(--color-info-fg);--color-status-att-field-work-border: var(--color-info-border);--color-status-att-missing-punch-bg: var(--color-danger-bg);--color-status-att-missing-punch-fg: var(--color-danger-fg);--color-status-att-missing-punch-border: var(--color-danger-border);--color-status-att-rest-bg: var(--color-status-duplicate-bg);--color-status-att-rest-fg: var(--color-status-duplicate-fg);--color-status-att-rest-border: var(--color-status-duplicate-border);--color-status-att-unknown-bg: transparent;--color-status-att-unknown-fg: var(--color-text-secondary);--color-status-att-unknown-border: var(--color-border-light);--color-location-normal-bg: var(--color-success-bg);--color-location-normal-fg: var(--color-success-fg);--color-location-normal-border: var(--color-success-border);--color-location-failed-bg: var(--color-danger-bg);--color-location-failed-fg: var(--color-danger-fg);--color-location-failed-border: var(--color-danger-border);--color-risk-low-bg: var(--color-success-bg);--color-risk-low-fg: var(--color-success-fg);--color-risk-low-border: var(--color-success-border);--color-risk-normal-bg: var(--color-info-bg);--color-risk-normal-fg: var(--color-info-fg);--color-risk-normal-border: var(--color-info-border);--color-risk-watch-bg: var(--color-warning-bg);--color-risk-watch-fg: var(--color-warning-fg);--color-risk-watch-border: var(--color-warning-border);--color-risk-high-bg: var(--color-danger-bg);--color-risk-high-fg: var(--color-danger-fg);--color-risk-high-border: var(--color-danger-border);--color-risk-abnormal-bg: var(--color-danger-bg);--color-risk-abnormal-fg: var(--color-danger-fg);--color-risk-abnormal-border: var(--color-danger-border);--color-deviation-normal-bg: var(--color-risk-normal-bg);--color-deviation-normal-fg: var(--color-risk-normal-fg);--color-deviation-normal-border: var(--color-risk-normal-border);--color-deviation-watch-bg: var(--color-risk-watch-bg);--color-deviation-watch-fg: var(--color-risk-watch-fg);--color-deviation-watch-border: var(--color-risk-watch-border);--color-deviation-abnormal-bg: var(--color-risk-abnormal-bg);--color-deviation-abnormal-fg: var(--color-risk-abnormal-fg);--color-deviation-abnormal-border: var(--color-risk-abnormal-border);--color-budgetcheck-pass-bg: var(--color-success-bg);--color-budgetcheck-pass-fg: var(--color-success-fg);--color-budgetcheck-pass-border: var(--color-success-border);--color-budgetcheck-warn-bg: var(--color-warning-bg);--color-budgetcheck-warn-fg: var(--color-warning-fg);--color-budgetcheck-warn-border: var(--color-warning-border);--color-budgetcheck-blocked-bg: var(--color-danger-bg);--color-budgetcheck-blocked-fg: var(--color-danger-fg);--color-budgetcheck-blocked-border: var(--color-danger-border);--color-rule-matched-bg: var(--color-success-bg);--color-rule-matched-fg: var(--color-success-fg);--color-rule-matched-border: var(--color-success-border);--color-rule-missed-bg: var(--color-status-duplicate-bg);--color-rule-missed-fg: var(--color-status-duplicate-fg);--color-rule-missed-border: var(--color-status-duplicate-border);--color-rule-failed-bg: var(--color-warning-bg);--color-rule-failed-fg: var(--color-warning-fg);--color-rule-failed-border: var(--color-warning-border);--font-family-base: Inter, "Noto Sans SC", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-family-mono: JetBrains Mono, "Fira Code", ui-monospace, SFMono-Regular, Menlo, monospace;--font-size-xs: 12px;--font-size-sm: 13px;--font-size-base: 14px;--font-size-md: 16px;--font-size-lg: 20px;--font-size-xl: 24px;--font-size-2xl: 30px;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-line-height-tight: 1.35;--font-line-height-base: 1.55;--font-line-height-loose: 1.75;--space-0: 0px;--space-1: 2px;--space-2: 4px;--space-3: 8px;--space-4: 12px;--space-5: 16px;--space-6: 20px;--space-7: 24px;--space-8: 32px;--space-9: 40px;--space-10: 48px;--space-11: 64px;--radius-sm: 4px;--radius-md: 6px;--radius-lg: 8px;--radius-xl: 12px;--radius-full: 9999px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .05);--shadow-md: 0 2px 8px rgba(0, 0, 0, .08);--shadow-lg: 0 8px 24px rgba(0, 0, 0, .1);--shadow-popup: 0 6px 16px rgba(0, 0, 0, .08), 0 3px 6px -4px rgba(0, 0, 0, .12), 0 9px 28px 8px rgba(0, 0, 0, .05);--z-index-sticky: 1020;--z-index-dropdown: 1050;--z-index-modal: 1100;--z-index-toast: 1200;--size-control-height-sm: 28px;--size-control-height-base: 32px;--size-control-height-lg: 40px;--size-control-touch-min: 44px;--breakpoint-sm: 768px;--breakpoint-md: 1024px;--breakpoint-lg: 1440px;--breakpoint-xl: 1920px;--duration-fast: .12s;--duration-base: .2s;--duration-slow: .3s;--easing-standard: cubic-bezier(.4, 0, .2, 1);--icon-size-inline: 16px;--icon-size-button: 20px;--icon-size-standalone: 24px}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}html{-webkit-text-size-adjust:100%}body{font-family:var(--font-family-base);font-size:var(--font-size-base);line-height:var(--font-line-height-base);color:var(--color-text-primary);background:var(--color-bg-page);letter-spacing:0;-webkit-font-smoothing:antialiased}a{color:var(--color-primary-600);text-decoration:none}a:hover{color:var(--color-primary-700)}.th-mono{font-family:var(--font-family-mono);font-variant-numeric:tabular-nums}.th-muted{color:var(--color-text-tertiary)}.th-secondary{color:var(--color-text-secondary)}.th-link-btn{padding:0;border:0;background:none;color:var(--color-primary-600);cursor:pointer;font:inherit}.th-link-btn:hover{color:var(--color-primary-700)}:focus-visible{outline:none;box-shadow:0 0 0 3px var(--color-primary-200);border-color:var(--color-primary-500);border-radius:var(--radius-sm)}.th-skip-link{position:absolute;left:var(--space-3);top:calc(-1 * var(--space-10));z-index:var(--z-index-toast);padding:var(--space-3) var(--space-5);background:var(--color-bg-container);border:1px solid var(--color-border-base);border-radius:var(--radius-md);box-shadow:var(--shadow-lg);transition:top var(--duration-fast) var(--easing-standard)}.th-skip-link:focus{top:var(--space-3)}.th-scroll{overflow:auto}.th-scroll::-webkit-scrollbar{width:8px;height:8px}.th-scroll::-webkit-scrollbar-thumb{background:var(--color-neutral-300);border-radius:var(--radius-full)}.th-scroll::-webkit-scrollbar-track{background:transparent}.th-shell{min-height:100dvh;display:flex;flex-direction:column}.th-header{height:56px;flex:0 0 56px;display:flex;align-items:center;gap:var(--space-5);padding:0 var(--space-6);background:var(--color-bg-container);border-bottom:1px solid var(--color-border-base);position:sticky;top:0;z-index:var(--z-index-sticky)}.th-body{flex:1 1 auto;display:flex;min-height:0}.th-sider{width:200px;flex:0 0 200px;border-right:1px solid var(--color-border-base);background:var(--color-bg-container);padding:var(--space-4) var(--space-3);overflow-y:auto}.th-main{flex:1 1 auto;min-width:0;display:flex;flex-direction:column}.th-content{flex:1 1 auto;min-width:0;padding:var(--space-7) var(--space-9)}.th-content--fluid{padding:var(--space-7) var(--space-9) var(--space-10)}.th-tabbar{display:none}.th-page-title{font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);letter-spacing:-.01em;margin:0}.th-section-title{font-size:var(--font-size-md);font-weight:var(--font-weight-semibold);color:var(--color-text-primary);margin:0}.th-card{min-width:0;background:var(--color-bg-container);border:1px solid var(--color-border-base);border-radius:var(--radius-lg);padding:var(--space-6)}.th-card--flush{padding:0}.th-panel{background:var(--color-bg-container);border:1px solid var(--color-border-base);border-radius:var(--radius-lg)}.th-divider{height:1px;background:var(--color-border-base);border:0;margin:0}.th-stack{display:flex;flex-direction:column;gap:var(--space-6)}.th-row{display:flex;align-items:center;gap:var(--space-3)}.th-row--between{justify-content:space-between}.th-row--wrap{flex-wrap:wrap}.th-grow{flex:1 1 auto;min-width:0}.th-clamp-1{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.th-clamp-2{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.th-break{word-break:break-all}.th-skeleton-block{background:var(--color-bg-hover);border-radius:var(--radius-sm)}.th-error-detail{font-family:var(--font-family-mono);font-size:var(--font-size-sm);color:var(--color-text-tertiary);background:var(--color-bg-hover);border-radius:var(--radius-sm);padding:var(--space-3);word-break:break-all}.th-stale-bar{height:2px;background:var(--color-primary-600);animation:th-stale 1.1s var(--easing-standard) infinite}@keyframes th-stale{0%{transform:translate(-40%);width:40%}50%{transform:translate(60%);width:55%}to{transform:translate(140%);width:40%}}.th-fab{position:fixed;right:var(--space-8);bottom:var(--space-8);z-index:var(--z-index-dropdown);box-shadow:var(--shadow-lg);opacity:0;pointer-events:none;transform:translateY(var(--space-3));transition:opacity var(--duration-base) var(--easing-standard),transform var(--duration-base) var(--easing-standard)}.th-fab--visible{opacity:1;pointer-events:auto;transform:translateY(0)}.th-mobile-bar{position:fixed;left:0;right:0;bottom:0;z-index:var(--z-index-dropdown);padding:var(--space-3) var(--space-5);padding-bottom:calc(var(--space-3) + env(safe-area-inset-bottom));background:var(--color-bg-container);border-top:1px solid var(--color-border-base)}.th-icp-footer{flex:0 0 auto;padding:var(--space-5) var(--space-6);text-align:center;font-size:var(--font-size-xs);letter-spacing:.01em;background:var(--color-bg-container);border-top:1px solid var(--color-border-base)}.th-icp-footer__link{color:var(--color-text-tertiary);text-decoration:none;transition:color var(--duration-fast) var(--easing-standard)}.th-icp-footer__link:hover{color:var(--color-text-secondary)}.th-board{display:flex;gap:var(--space-5);overflow-x:auto;padding-bottom:var(--space-4);scroll-snap-type:x proximity}.th-board-col{width:288px;flex:0 0 288px;background:var(--color-bg-page);border:1px solid var(--color-border-base);border-radius:var(--radius-lg);display:flex;flex-direction:column;min-height:320px;scroll-snap-align:start}.th-board-col-head{position:sticky;top:0;z-index:var(--z-index-sticky);display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border-base);border-radius:var(--radius-lg) var(--radius-lg) 0 0;background:var(--color-bg-container)}.th-board-col-body{padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-4);overflow-y:auto;flex:1 1 auto;max-height:calc(100dvh - 320px)}.th-board-col--drop-disabled{opacity:.6}.th-board-col--drop-active{border-color:var(--color-primary-500);background:var(--color-primary-50)}.th-sug-card{background:var(--color-bg-container);border:1px solid var(--color-border-base);border-radius:var(--radius-md);box-shadow:var(--shadow-sm);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-3);cursor:pointer;transition:box-shadow var(--duration-fast) var(--easing-standard),border-color var(--duration-fast) var(--easing-standard)}.th-sug-card:hover{box-shadow:var(--shadow-md);border-color:var(--color-border-strong)}.th-sug-card__meta{display:flex;align-items:center;gap:var(--space-3);color:var(--color-text-tertiary);font-size:var(--font-size-sm)}.th-sug-card__drag{cursor:grab;color:var(--color-text-disabled)}.th-rank-badge{width:22px;height:22px;border-radius:var(--radius-full);display:inline-flex;align-items:center;justify-content:center;font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);background:var(--color-bg-hover);color:var(--color-text-tertiary)}.th-rank-badge--1{background:var(--color-status-pending-bg);color:var(--color-status-pending-fg)}.th-rank-badge--2{background:var(--color-bg-active);color:var(--color-text-secondary)}.th-rank-badge--3{background:var(--color-bg-hover);color:var(--color-text-secondary)}:root{--color-status-project-running-bg: var(--color-info-bg);--color-status-project-running-fg: var(--color-info-fg);--color-status-project-running-border: var(--color-info-border);--color-status-project-done-bg: var(--color-status-implemented-bg);--color-status-project-done-fg: var(--color-status-implemented-fg);--color-status-project-done-border: var(--color-status-implemented-border);--color-status-project-paused-bg: var(--color-status-pending-bg);--color-status-project-paused-fg: var(--color-status-pending-fg);--color-status-project-paused-border: var(--color-status-pending-border);--color-status-project-canceled-bg: var(--color-status-duplicate-bg);--color-status-project-canceled-fg: var(--color-status-duplicate-fg);--color-status-project-canceled-border: var(--color-status-duplicate-border);--color-status-stage-notstarted-bg: var(--color-bg-hover);--color-status-stage-notstarted-fg: var(--color-text-secondary);--color-status-stage-notstarted-border: var(--color-border-strong);--color-status-stage-inprogress-bg: var(--color-info-bg);--color-status-stage-inprogress-fg: var(--color-info-fg);--color-status-stage-inprogress-border: var(--color-info-border);--color-status-stage-done-bg: var(--color-success-bg);--color-status-stage-done-fg: var(--color-success-fg);--color-status-stage-done-border: var(--color-success-border);--color-status-stage-blocked-bg: var(--color-danger-bg);--color-status-stage-blocked-fg: var(--color-danger-fg);--color-status-stage-blocked-border: var(--color-danger-border);--color-status-stage-skipped-bg: var(--color-status-duplicate-bg);--color-status-stage-skipped-fg: var(--color-status-duplicate-fg);--color-status-stage-skipped-border: var(--color-status-duplicate-border);--color-status-task-todo-bg: var(--color-status-duplicate-bg);--color-status-task-todo-fg: var(--color-status-duplicate-fg);--color-status-task-todo-border: var(--color-status-duplicate-border);--color-status-task-doing-bg: var(--color-info-bg);--color-status-task-doing-fg: var(--color-info-fg);--color-status-task-doing-border: var(--color-info-border);--color-status-task-done-bg: var(--color-success-bg);--color-status-task-done-fg: var(--color-success-fg);--color-status-task-done-border: var(--color-success-border);--color-status-task-blocked-bg: var(--color-danger-bg);--color-status-task-blocked-fg: var(--color-danger-fg);--color-status-task-blocked-border: var(--color-danger-border);--color-priority-urgent-bg: var(--color-danger-bg);--color-priority-urgent-fg: var(--color-danger-fg);--color-priority-urgent-border: var(--color-danger-border);--color-status-receivable-pending-bg: var(--color-status-pending-bg);--color-status-receivable-pending-fg: var(--color-status-pending-fg);--color-status-receivable-pending-border: var(--color-status-pending-border);--color-status-receivable-partial-bg: var(--color-info-bg);--color-status-receivable-partial-fg: var(--color-info-fg);--color-status-receivable-partial-border: var(--color-info-border);--color-status-receivable-settled-bg: var(--color-success-bg);--color-status-receivable-settled-fg: var(--color-success-fg);--color-status-receivable-settled-border: var(--color-success-border);--color-status-receivable-overdue-bg: var(--color-danger-bg);--color-status-receivable-overdue-fg: var(--color-danger-fg);--color-status-receivable-overdue-border: var(--color-danger-border)}.th-status-tag{display:inline-flex;align-items:center;gap:var(--space-2);height:24px;padding:0 var(--space-3);border:1px solid transparent;border-radius:var(--radius-sm, 4px);font-size:var(--font-size-xs);line-height:1;white-space:nowrap}.th-status-tag--md{height:28px;font-size:var(--font-size-sm);padding:0 var(--space-4)}.th-num{font-family:var(--font-family-mono);font-variant-numeric:tabular-nums;letter-spacing:0}.th-amount{font-family:var(--font-family-mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.th-amount--dense{font-size:var(--font-size-xs)}.th-project-table .ant-table-tbody>tr>td{height:52px}.th-project-table .ant-table-cell--amount{text-align:right}.th-visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.th-grid-4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-5)}@media (max-width: 1439px){.th-grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 639px){.th-grid-4{grid-template-columns:minmax(0,1fr)}}.th-metric-card{text-align:start;cursor:pointer;display:flex;flex-direction:column;gap:var(--space-3);border:1px solid var(--color-border-base);min-width:0;transition:box-shadow var(--duration-fast) var(--easing-standard)}.th-metric-card:hover{box-shadow:var(--shadow-md)}.th-row-highlight>td{background:var(--color-primary-50)!important}.th-stage-timeline{padding-bottom:var(--space-3)}.th-stage-timeline__list{list-style:none;margin:0;padding:0;display:flex;align-items:flex-start;min-width:900px}.th-stage-timeline__item{flex:1 1 0;min-width:74px}.th-stage-node{position:relative;width:100%;background:transparent;border:0;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-1) var(--space-3);min-height:var(--size-control-touch-min);border-radius:var(--radius-md);transition:background-color var(--duration-fast) var(--easing-standard)}.th-stage-node:hover{background:var(--color-bg-hover)}.th-stage-node--selected{background:var(--color-primary-50)}.th-stage-node__rail{position:relative;display:flex;align-items:center;justify-content:center;width:100%;height:28px}.th-stage-node__dot{width:16px;height:16px;border-radius:var(--radius-full);border:2px solid var(--color-border-strong);background:var(--color-bg-container);z-index:1}.th-stage-node__dot--done{background:var(--color-success-fg);border-color:var(--color-success-fg)}.th-stage-node__dot--doing{background:var(--color-bg-container);border-color:var(--color-primary-600);box-shadow:0 0 0 3px var(--color-primary-200)}.th-stage-node__dot--blocked{background:var(--color-danger-fg);border-color:var(--color-danger-fg)}.th-stage-node__dot--skipped{border-radius:var(--radius-sm);transform:rotate(45deg);background:var(--color-status-duplicate-fg);border-color:var(--color-status-duplicate-fg)}.th-stage-node__rail:before,.th-stage-node__rail:after{content:"";position:absolute;top:50%;width:50%;height:0;transform:translateY(-1px);border-top:2px dashed var(--color-border-base)}.th-stage-node__rail:before{left:0}.th-stage-node__rail:after{right:0}.th-stage-timeline__item:first-child .th-stage-node__rail:before{border-top-color:transparent}.th-stage-timeline__item--last .th-stage-node__rail:after{border-top-color:transparent}.th-stage-timeline__item--DONE .th-stage-node__rail:after,.th-stage-timeline__item--DONE+.th-stage-timeline__item .th-stage-node__rail:before,.th-stage-timeline__item--IN_PROGRESS .th-stage-node__rail:before,.th-stage-timeline__item--BLOCKED .th-stage-node__rail:before{border-top-style:solid;border-top-color:var(--color-success-fg)}.th-stage-node__text{display:flex;flex-direction:column;align-items:center;gap:var(--space-1);text-align:center;line-height:var(--font-line-height-tight)}.th-stage-node__badge{font-size:var(--font-size-xs);color:var(--color-primary-700);background:var(--color-primary-50);border:1px solid var(--color-primary-200);border-radius:var(--radius-sm);padding:0 var(--space-2)}@media (max-width: 767px){.th-stage-timeline__list{flex-direction:column;align-items:stretch;min-width:0}.th-stage-node{flex-direction:row;align-items:center;justify-content:flex-start;gap:var(--space-4)}.th-stage-node__rail{width:28px}.th-stage-node__rail:before,.th-stage-node__rail:after{display:none}.th-stage-node__text{align-items:flex-start;text-align:start}}.th-aging-bar{display:flex;height:12px;border-radius:var(--radius-full);overflow:hidden;background:var(--color-bg-hover);margin:var(--space-3) 0}.th-aging-bar__seg{flex-basis:0;min-width:2px}.th-aging-bar__seg--empty{background:var(--color-border-base)}.th-aging-legend{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--space-3) var(--space-6)}.th-task-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:var(--space-4);margin:0}.th-task-meta dt{font-size:var(--font-size-xs);color:var(--color-text-tertiary)}.th-task-meta dd{margin:var(--space-1) 0 0;font-size:var(--font-size-sm)}:root{--punch-btn-size: 128px;--punch-btn-icon: 20px}.th-punch-btn.th-punch-btn{border-radius:var(--radius-full);cursor:pointer;box-shadow:var(--shadow-md);transition:background-color var(--duration-fast) var(--easing-standard),box-shadow var(--duration-fast) var(--easing-standard),transform var(--duration-fast) var(--easing-standard);background-color:var(--punch-btn-bg)}.th-punch-btn.th-punch-btn:disabled{background-color:var(--punch-btn-bg);cursor:not-allowed;box-shadow:none;transform:none}.th-punch-btn.th-punch-btn:hover:not(:disabled){background-color:var(--punch-btn-bg-hover, var(--punch-btn-bg));transform:translateY(-1px);box-shadow:var(--shadow-lg)}.th-punch-btn.th-punch-btn:active:not(:disabled){background-color:var(--punch-btn-bg-active, var(--punch-btn-bg));transform:translateY(0);box-shadow:var(--shadow-sm)}.th-punch-btn__reason{display:block;color:var(--color-text-secondary);text-align:center}.th-punch-hero,.th-cal{display:flex;flex-direction:column}.th-cal__head,.th-cal__row{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.th-cal__headcell{text-align:center;font-size:var(--font-size-xs);color:var(--color-text-secondary);padding-bottom:var(--space-2)}.th-cal__cell{min-width:0;min-height:72px;display:flex;align-items:stretch;justify-content:center;padding:var(--space-2) var(--space-1);background:none;border:1px solid var(--color-border-light);border-radius:var(--radius-sm);font:inherit;color:inherit;text-align:center;cursor:pointer;transition:background-color var(--duration-fast) var(--easing-standard)}.th-cal__cell:hover:not([aria-disabled=true]){background:var(--color-bg-hover)}.th-cal__cell--empty{border-color:transparent;cursor:default;background:none}.th-cal__cell--today .th-cal__dayno{box-shadow:0 0 0 1px var(--color-primary-600);border-radius:var(--radius-full)}.th-cal__cell--selected{background:var(--color-primary-50);border-color:var(--color-primary-300)}.th-cal__cell--muted{cursor:default;border-color:transparent}.th-cal__cell--muted:hover{background:none}.th-cal__cell-btn{display:flex;align-items:stretch;justify-content:center;width:100%;min-width:0;padding:0;background:none;border:0;font:inherit;color:inherit;text-align:center;cursor:pointer}.th-cal__cell-inner{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:2px;min-width:0;width:100%}.th-cal__dayno{display:inline-flex;align-items:flex-start;gap:2px;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium);padding:0 var(--space-1)}.th-cal__dot{flex:0 0 auto;width:6px;height:6px;margin-top:3px;border-radius:var(--radius-full)}.th-cal__status{font-size:var(--font-size-xs);max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.th-cal__times{font-size:var(--font-size-xs);color:var(--color-text-secondary);white-space:nowrap}.th-summary{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-5);padding:var(--space-4) var(--space-6)}.th-summary--sticky{position:sticky;top:var(--space-3);z-index:var(--z-index-sticky)}.th-summary__seg{display:inline-flex;align-items:baseline;white-space:nowrap}.th-att-two-col,.th-att-two-col--calendar{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-6);align-items:start}.th-att-abnormal{display:flex;flex-direction:column}.th-att-abnormal__row{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-3) 0;border-bottom:1px solid var(--color-border-light)}.th-att-abnormal__row:last-child{border-bottom:0}@media (min-width: 1024px){.th-att-two-col{grid-template-columns:minmax(0,420px) minmax(0,1fr)}.th-att-two-col--calendar{grid-template-columns:minmax(0,1fr) minmax(0,340px)}}@media (min-width: 768px) and (max-width: 1023px){:root{--punch-btn-size: 152px;--punch-btn-icon: 24px}}@media (max-width: 767px){:root{--punch-btn-size: min(42vw, 176px);--punch-btn-icon: 24px}.th-cal__cell{min-height:56px}.th-cal__status,.th-cal__times{display:none}.th-summary{gap:var(--space-4);padding:var(--space-3) var(--space-4)}}@media (max-width: 1023px){.th-sider{display:none}.th-content,.th-content--fluid{padding:var(--space-6) var(--space-5)}}@media (max-width: 767px){.th-header{padding:0 var(--space-4)}.th-content,.th-content--fluid{padding:var(--space-5) var(--space-4);padding-bottom:calc(var(--space-5) + var(--size-control-touch-min))}.th-tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:var(--z-index-sticky);background:var(--color-bg-container);border-top:1px solid var(--color-border-base);padding-bottom:env(safe-area-inset-bottom)}.th-board{flex-direction:column}.th-board-col{width:100%;flex:0 0 auto}.th-board-col-body{max-height:none}.th-icp-footer--app{padding-bottom:calc(var(--space-5) + var(--size-control-touch-min) + env(safe-area-inset-bottom))}}@media (hover: none){.th-touch{min-height:var(--size-control-touch-min);min-width:var(--size-control-touch-min)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}
