:root,:root[data-theme=light]{color-scheme:light;--page: #f4f7fc;--page-glow-a: rgba(15,98,190,.06);--page-glow-b: rgba(180,83,9,.04);--surface: #ffffff;--surface-2: #edf2f9;--band: #0d2f5a;--band-ink: #f2f7ff;--band-ink2: #8fa5c4;--ink: #0f1d2e;--ink2: #46586f;--muted: #93a3b8;--grid: #e4ebf4;--axis: #c6d2e1;--border: rgba(13,47,90,.1);--sheen: rgba(255,255,255,0);--rev: #0f62be;--rev-fc: #86b6ef;--rev-deep: #123f73;--cost: #d2542a;--head: #0e8f63;--accent: #d97706;--accent-ink: #b45309;--crit: #d03b3b;--good: #067647;--gap-track: #edf2f9;--seq-1: #cfe0f6;--seq-2: #9cc0ee;--seq-3: #4e8fdd;--seq-4: #1f5fa8;--glow-rev: none;--shadow: 0 1px 2px rgba(16,24,40,.05)}:root[data-theme=dark]{color-scheme:dark;--page: #08182b;--page-glow-a: rgba(76,155,240,.1);--page-glow-b: rgba(242,163,22,.05);--surface: #0f2439;--surface-2: #16314b;--band: #061423;--band-ink: #eaf1fa;--band-ink2: #7b8fa8;--ink: #eaf1fa;--ink2: #b3c4d9;--muted: #7b8fa8;--grid: #142b44;--axis: #2c486b;--border: rgba(220,235,255,.1);--sheen: rgba(255,255,255,.03);--rev: #4c9bf0;--rev-fc: #1f5fa8;--rev-deep: #4c9bf0;--cost: #f0764a;--head: #2bb489;--accent: #f2a316;--accent-ink: #f2a316;--crit: #e66767;--good: #3fd39c;--gap-track: #16314b;--seq-1: #15406e;--seq-2: #1f5fa8;--seq-3: #3987e5;--seq-4: #86b6ef;--glow-rev: 0 0 20px rgba(76,155,240,.35);--shadow: 0 1px 2px rgba(0,0,0,.4)}*{margin:0;padding:0;box-sizing:border-box}[hidden]{display:none!important}html,body,#root{height:100%}body{background:radial-gradient(900px 480px at 12% -8%,var(--page-glow-a),transparent 60%),radial-gradient(720px 420px at 92% 12%,var(--page-glow-b),transparent 55%),var(--page);color:var(--ink);font-family:Fira Sans,Noto Sans TC,system-ui,-apple-system,sans-serif;font-size:14px;line-height:1.5}#root{display:flex;flex-direction:column}.num{font-family:Fira Code,Noto Sans TC,monospace}.shell{max-width:1392px;margin:0 auto;padding:0 48px 64px}.band{background:var(--band);padding:34px 0 0;border-bottom:1px solid var(--border);margin-bottom:26px}.band{--accent: #e8971f}:root[data-theme=dark] .band{--accent: #f2a316}.band .inner{max-width:1392px;margin:0 auto;padding:0 48px}header.masthead{display:flex;align-items:flex-end;justify-content:space-between}.masthead-title{display:flex;align-items:center;gap:18px}.masthead .eyebrow{font-family:Fira Code,monospace;font-size:11px;font-weight:500;letter-spacing:.32em;color:var(--accent);margin-bottom:8px}.masthead h1{font-size:28px;font-weight:700;letter-spacing:.02em;color:var(--band-ink)}.masthead .meta{text-align:right;color:var(--band-ink2);font-size:13px}.masthead .brand{display:flex;align-items:center;gap:12px;align-self:center}.axim-logo{--logo-track: var(--axis);--logo-arc: var(--rev);--logo-needle: var(--ink)}.masthead .axim-logo{--logo-track: rgba(242,247,255,.28);--logo-arc: var(--rev-fc);--logo-needle: var(--band-ink)}:root[data-theme=dark] .masthead .axim-logo{--logo-track: var(--surface-2);--logo-arc: var(--rev)}.masthead .brand-word{font-size:30px;font-weight:500;letter-spacing:-.02em;line-height:1;color:var(--band-ink)}.masthead .brand-word .brand-dot{color:var(--rev-fc)}:root[data-theme=dark] .masthead .brand-word .brand-dot{color:var(--rev)}@media(max-width:960px){header.masthead{flex-wrap:wrap;row-gap:12px}.masthead .brand-word{display:none}.masthead-title{gap:14px}}.meta-top{display:flex;align-items:center;justify-content:flex-end;gap:14px;margin-bottom:4px}.year-switch{display:inline-flex;align-items:center;gap:12px;font-size:21px;font-weight:600;color:var(--band-ink)}.year-switch .arrow{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;border:0;font:inherit;font-size:13px;padding:6px;margin:-6px;color:var(--band-ink2);cursor:pointer}.year-switch .arrow:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}.year-switch--page{color:var(--ink)}.year-switch--page .arrow{color:var(--ink2)}.year-switch--page .arrow:focus-visible{outline-color:var(--rev)}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:9px;cursor:pointer;background:transparent;border:1px solid var(--border);color:var(--band-ink2);transition:color .2s,border-color .2s}.theme-toggle:hover{color:var(--band-ink);border-color:var(--band-ink2)}.export-btn{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 14px;border-radius:9px;cursor:pointer;text-decoration:none;font-size:13px;font-weight:600;font-family:inherit;background:var(--accent);border:1px solid transparent;color:#14100a;transition:filter .2s}.export-btn:hover{filter:brightness(1.08)}.export-btn svg{width:15px;height:15px}.export-btn.ghost{background:transparent;border:1px solid var(--border);color:var(--band-ink2)}.export-btn.ghost:hover{color:var(--band-ink);border-color:var(--band-ink2);filter:none}.export-btn:disabled{opacity:.6;cursor:progress}nav.tabs{display:flex;gap:26px;padding-top:22px}nav.tabs a{display:inline-flex;align-items:center;gap:7px;text-decoration:none;color:var(--band-ink2);font-weight:500;padding-bottom:13px;border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .2s}nav.tabs a:hover{color:var(--band-ink)}nav.tabs a.active{color:var(--band-ink);border-bottom-color:var(--accent)}nav.tabs svg{width:15px;height:15px}header.masthead .btn.ghost{color:var(--band-ink2)}header.masthead .btn.ghost:hover{color:var(--band-ink);border-color:var(--band-ink2)}.tile,.card,.runway-card{background:linear-gradient(180deg,var(--sheen),transparent 42%),var(--surface);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}.card{padding:20px 24px}main[data-view=dashboard] .card{padding:20px 24px 14px}.btn{display:inline-flex;align-items:center;gap:7px;height:34px;padding:0 14px;border-radius:9px;cursor:pointer;text-decoration:none;font:600 13px/1 Fira Sans,Noto Sans TC,sans-serif;background:var(--accent);border:1px solid transparent;color:#14100a;transition:filter .2s}.btn:hover{filter:brightness(1.08)}.btn.ghost{background:transparent;border:1px solid var(--border);color:var(--ink2)}.btn.ghost:hover{color:var(--ink);border-color:var(--axis);filter:none}.btn.blue{background:var(--rev);color:#fff}:root[data-theme=dark] .btn.blue{color:var(--page)}.btn.danger-ghost{background:transparent;border:1px solid var(--border);color:var(--crit)}.btn.sm{height:28px;padding:0 10px;font-size:12px}.btn svg{width:15px;height:15px}.page-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px}.page-head h2{font-size:18px;font-weight:700}.page-head .sub{color:var(--muted);font-size:13px;margin-top:2px}.page-head .actions{display:flex;gap:10px}table.data{width:100%;border-collapse:collapse;font-size:13.5px}table.data th{text-align:left;font-weight:500;color:var(--muted);font-size:12px;padding:10px 12px;border-bottom:1px solid var(--grid)}table.data td{padding:12px;border-bottom:1px solid var(--grid);color:var(--ink)}table.data tr:last-child td{border-bottom:none}table.data tr:hover td{background:var(--surface-2)}table.data td.r,table.data th.r{text-align:right}table.data .rowact{display:flex;gap:8px;justify-content:flex-end}.tag{display:inline-block;padding:2px 9px;border-radius:99px;font-size:11.5px;font-weight:600}.tag.blue{background:color-mix(in srgb,var(--rev) 15%,transparent);color:var(--rev)}.tag.amber{background:color-mix(in srgb,var(--accent) 15%,transparent);color:var(--accent-ink)}.tag.green{background:color-mix(in srgb,var(--good) 15%,transparent);color:var(--good)}.tag.gray{background:var(--surface-2);color:var(--muted)}.layout{display:grid;grid-template-columns:1fr 380px;gap:16px;align-items:start}.layout.no-drawer{grid-template-columns:1fr}.drawer h3{font-size:15px;font-weight:700;margin-bottom:4px}.drawer .hint{font-size:12px;color:var(--muted);margin-bottom:14px}.field{margin-bottom:14px}.field label{display:block;font-size:12.5px;font-weight:600;color:var(--ink2);margin-bottom:6px}.field input[type=text],.field input[type=number],.field input[type=month],.field select,.field textarea{width:100%;height:36px;padding:0 12px;border-radius:8px;border:1px solid var(--axis);background:var(--surface);color:var(--ink);font:400 13.5px Fira Sans,Noto Sans TC,sans-serif}.field textarea{height:72px;padding:8px 12px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid var(--rev);outline-offset:1px;border-color:transparent}.field .suffix{font-size:12px;color:var(--muted);margin-top:4px}.radio-row{display:flex;flex-direction:column;gap:8px}.radio-card{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--border);border-radius:9px;cursor:pointer}.radio-card.on{border-color:var(--rev);background:color-mix(in srgb,var(--rev) 7%,transparent)}.radio-card b{font-size:13px;color:var(--ink)}.radio-card p{font-size:12px;color:var(--muted)}.drawer .form-actions{display:flex;gap:10px;margin-top:18px}.custom-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.custom-grid .cg{font-size:11px;color:var(--muted)}.custom-grid input{width:100%;height:30px;padding:0 8px;border-radius:6px;border:1px solid var(--axis);background:var(--surface);color:var(--ink);font:400 12px Fira Code,monospace}.layout-snap{display:grid;grid-template-columns:280px 1fr;gap:16px;align-items:start}@media(max-width:700px){.layout-snap{grid-template-columns:1fr}}.page-snapshots .hint{font-size:12px;color:var(--muted);margin-bottom:14px}.month-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px}.month-cell{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:none;font:inherit;font-size:13px;text-align:left;width:100%;display:block;padding:10px 12px;border-radius:9px;border:1px solid var(--border);cursor:pointer;color:var(--ink2)}.month-cell:focus-visible{outline:2px solid var(--rev);outline-offset:1px}.month-cell .st{display:block;font-size:11px;margin-top:2px}.month-cell.built .st{color:var(--good)}.month-cell.est .st{color:var(--ink2)}.month-cell.sel{border-color:var(--rev);background:color-mix(in srgb,var(--rev) 9%,transparent);color:var(--ink)}.addrow{display:flex;gap:10px;align-items:flex-end;margin-top:16px;padding-top:16px;border-top:1px solid var(--grid)}.addrow .field{margin:0;flex:1;max-width:300px}table.data input[type=number].salary-input{width:120px;height:30px;padding:0 10px;border-radius:6px;border:1px solid var(--axis);background:var(--surface);color:var(--ink);font:500 13px Fira Code,monospace;text-align:right}table.data input[type=number].salary-input:focus{outline:2px solid var(--rev);outline-offset:1px;border-color:transparent}.statline{display:flex;gap:26px;padding:12px 0 2px;font-size:13px;color:var(--ink2)}.statline b{color:var(--ink);font-weight:600}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.tile{padding:18px 20px 15px;position:relative}.tile .top{display:flex;justify-content:space-between;align-items:center}.tile .label{font-size:13px;color:var(--ink2)}.tile .icon{color:var(--muted)}.tile .icon svg{width:18px;height:18px}.tile .value{font-size:33px;font-weight:600;letter-spacing:-.01em;margin-top:6px}.tile .value .unit{font-size:15px;font-weight:500;color:var(--ink2);margin-left:3px}.tile .sub{font-size:12px;color:var(--muted);margin-top:3px}.tile .sub .up{color:var(--good);font-weight:600}.tile.warn{border-top:2px solid var(--accent)}.tile.warn .value{color:var(--accent-ink)}.tile.warn .icon{color:var(--accent)}.tile .sub .need{color:var(--accent-ink);font-weight:500}.runway-card{padding:20px 24px 22px;margin-top:14px}.runway-head{display:flex;justify-content:space-between;align-items:baseline}.runway-head h2{font-size:15px;font-weight:600}.runway-head .pct{font-size:13px;color:var(--ink2)}.runway-head .pct strong{font-size:19px;color:var(--ink);font-weight:600}.runway{margin-top:14px}.runway .toprow{display:flex;justify-content:space-between;font-size:12px;color:var(--ink2);margin-bottom:6px}.runway .toprow .todaymark{padding-left:7px;border-left:2px solid var(--accent)}.runway .toprow strong{color:var(--ink);font-weight:600}.runway .bar{display:flex;height:30px;border-radius:8px;overflow:hidden;background:var(--gap-track)}.runway .seg{height:100%;transform-origin:left center}.runway .seg+.seg{margin-left:2px}.runway .seg.actual{background:linear-gradient(90deg,var(--rev-deep),var(--rev));box-shadow:var(--glow-rev)}.runway .seg.forecast{background:var(--rev-fc);opacity:.9}.runway .flags{display:flex;margin-top:9px;font-size:12px;color:var(--ink2)}.runway .flag{white-space:nowrap;text-align:center}.runway .flag strong{color:var(--ink);font-weight:600}.runway .flag.gap strong{color:var(--accent-ink)}.cards{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:14px}.card.wide{grid-column:1 / -1}.card-head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:4px}.card-head h2{font-size:15px;font-weight:600}.card-head .note{font-size:12px;color:var(--muted)}.legend{display:flex;gap:16px;font-size:12px;color:var(--ink2);margin:6px 0 4px;flex-wrap:wrap}.legend .key{display:inline-flex;align-items:center;gap:6px}.legend .swatch{width:10px;height:10px;border-radius:3px;display:inline-block}.legend .linekey{width:14px;height:0;border-top:2px solid;display:inline-block}.legend .tick{width:12px;height:0;border-top:2px solid var(--ink);display:inline-block}svg text{font-family:Fira Code,monospace}svg text.zh{font-family:Noto Sans TC,sans-serif}.axis-label{font-size:10.5px;fill:var(--muted)}.direct-label{font-size:11px;fill:var(--ink2);font-weight:600}svg path.grow{transform-box:fill-box;transform-origin:50% 100%}.gantt{width:100%;border-collapse:collapse;margin-top:8px;font-size:12.5px}.gantt th{font-family:Fira Code,monospace;font-weight:500;color:var(--muted);font-size:10.5px;padding:4px 2px;text-align:center}.gantt th.pname,.gantt td.pname{text-align:left;width:128px;padding-right:8px;color:var(--ink2);font-weight:500;white-space:nowrap;font-family:Fira Sans,Noto Sans TC,sans-serif}.gantt th.ptotal,.gantt td.ptotal{text-align:right;width:86px;padding-left:8px;color:var(--ink);font-weight:600;white-space:nowrap;font-family:Fira Code,monospace;font-size:12px}.gantt td{padding:2px}.gantt .cell{height:22px;border-radius:5px;background:transparent}footer,footer.page-footer{margin-top:26px;color:var(--muted);font-size:12px;display:flex;justify-content:space-between;border-top:1px solid var(--grid);padding-top:14px}footer .num{font-size:11.5px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}.band{flex-shrink:0}.tabs{display:flex;gap:4px;flex:1}.tab{position:relative;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:transparent;color:var(--band-ink2);font-size:14px;padding:10px 16px;cursor:pointer;border-radius:6px 6px 0 0;transition:color .15s ease}.tab:hover{color:var(--band-ink)}.tab.active{color:var(--band-ink);font-weight:600}.tab-underline{position:absolute;left:8px;right:8px;bottom:0;height:2px;background:var(--accent);border-radius:2px}.app-main{flex:1;width:100%;max-width:1392px;margin:0 auto;padding:0 48px 64px;color:var(--ink)}.chart svg{display:block;width:100%;height:auto}.chart [tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.chart-tooltip{background:var(--surface);border-radius:8px;padding:12px 16px;box-shadow:var(--shadow);border:1px solid var(--border);font-size:13px}.tooltip-title{font-weight:600;color:var(--ink);margin-bottom:8px;display:flex;align-items:center;gap:8px}.badge-estimate{font-size:11px;font-weight:600;color:var(--accent-ink);background:color-mix(in srgb,var(--accent) 10%,transparent);padding:2px 6px;border-radius:3px}.tooltip-row{display:flex;align-items:center;gap:8px;color:var(--ink2);margin:4px 0}.tooltip-row .num{margin-left:auto;font-weight:600;color:var(--ink)}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;flex-shrink:0}.error-banner{background:color-mix(in srgb,var(--crit) 12%,transparent);border:1px solid color-mix(in srgb,var(--crit) 30%,transparent);border-radius:8px;padding:10px 14px;color:var(--crit);font-size:13px;margin-bottom:14px}.error-banner p{margin:2px 0}.error-banner p:first-child{margin-top:0}.error-banner p:last-child{margin-bottom:0}.glass{background:color-mix(in srgb,var(--surface) 72%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}.card-glow{position:relative;overflow:hidden}.card-glow:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;background:radial-gradient(220px circle at var(--glow-x, 50%) var(--glow-y, 50%),color-mix(in srgb,var(--rev) 18%,transparent),transparent 65%);opacity:0;transition:opacity .25s}.card-glow:hover:before{opacity:1}@media(prefers-reduced-motion:reduce){.card-glow:before{display:none}}.stats .card-glow{display:flex;flex-direction:column}.stats .card-glow .tile{flex:1}.page-dashboard{display:flex;flex-direction:column;gap:24px}.tile .label em{font-style:normal;font-size:11px;color:var(--muted)}.report-config{padding:20px 24px;display:flex;flex-direction:column;gap:12px}.report-config h3{margin:0;font-size:16px}.report-config h4{margin:8px 0 0;font-size:14px;color:var(--ink2)}.report-config label{display:flex;flex-direction:column;gap:6px;font-size:13px;color:var(--ink2)}.report-config textarea{min-height:80px;resize:vertical;font-family:inherit;font-size:14px;padding:8px 10px;border-radius:8px;border:1px solid var(--axis);background:var(--surface-2);color:var(--ink)}.action-row{display:flex;gap:8px;align-items:center}.action-row input{flex:1;padding:6px 10px;border-radius:8px;border:1px solid var(--axis);background:var(--surface-2);color:var(--ink);font-size:13px}.saved-hint{font-size:12px;color:var(--good)}.tenant-panel{z-index:40;width:260px;padding:16px;display:flex;flex-direction:column;gap:12px;color:var(--ink);animation:confirm-fade-in .15s ease-out}.tenant-panel .hint{margin:-4px 0 0;font-size:12px;color:var(--muted)}.coef-fields{display:flex;align-items:flex-end;gap:8px}.coef-fields .field{flex:1;margin-bottom:0}.coef-sep{padding-bottom:6px;color:var(--muted)}.tenant-gear-trigger[data-state=open]{border-color:var(--accent);color:var(--accent-ink)}.confirm-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:color-mix(in srgb,var(--band) 60%,transparent);animation:confirm-fade-in .15s ease-out}.confirm-content{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:90vw;max-width:380px;animation:confirm-fade-in .15s ease-out}@keyframes confirm-fade-in{0%{opacity:0}to{opacity:1}}
