:root{--table:#ece9e0;--surface:#fff;--surface-2:#f6f4ed;--ink:#23282f;--ink-2:#6a7078;--line:#d9d5c9;--shadow:0 1px 3px #23282f14, 0 4px 14px #23282f0f;--sym:#c0463e;--sym-bg:#fbf1f0;--root:#3a6ea8;--root-bg:#eff4fa;--sol:#3e8e62;--sol-bg:#eef6f1;--force:#a97b22;--force-bg:#faf4e7;--next:#7b5ea7;--next-bg:#f4f0fa;--goal:#2f7e7e;--goal-bg:#eaf4f3;--res:#77803b;--res-bg:#f2f3e4}@media (prefers-color-scheme:dark){:root{--table:#171c25;--surface:#232a36;--surface-2:#1d232e;--ink:#e9e7e1;--ink-2:#99a1ac;--line:#333b49;--shadow:0 1px 3px #0006, 0 6px 18px #0000004d;--sym:#d8695f;--sym-bg:#3a2826;--root:#6d9ccb;--root-bg:#24303f;--sol:#5fae82;--sol-bg:#223429;--force:#cda04a;--force-bg:#38301c;--next:#a184ce;--next-bg:#2f2840;--goal:#5fb0ac;--goal-bg:#1f3433;--res:#a5af62;--res-bg:#2e3220}}*{box-sizing:border-box}body{background:var(--table);color:var(--ink);margin:0;font-family:PingFang TC,Noto Sans TC,Microsoft JhengHei,sans-serif;font-size:15px;line-height:1.6}button{font:inherit;cursor:pointer}input,textarea,select{font:inherit;color:var(--ink);background:var(--surface);border:1px solid var(--line);border-radius:8px;padding:5px 10px}input:focus-visible,textarea:focus-visible,select:focus-visible,button:focus-visible{outline:2px solid var(--force);outline-offset:1px}.mono{font-variant-numeric:tabular-nums;font-family:ui-monospace,SF Mono,Menlo,monospace}.app-header{background:var(--surface);border-bottom:1px solid var(--line);z-index:20;padding:12px 20px 0;position:sticky;top:0}.head-row{flex-wrap:wrap;align-items:baseline;gap:8px 16px;max-width:1280px;margin:0 auto;display:flex}.brand{letter-spacing:.06em;font-family:Songti TC,Noto Serif TC,serif;font-size:19px;font-weight:700}.brand small{color:var(--ink-2);letter-spacing:.12em;margin-left:8px;font-family:PingFang TC,sans-serif;font-size:11px;font-weight:400}.head-right{align-items:center;gap:8px;margin-left:auto;display:flex}.client-input{width:160px;font-size:13px}.chip{border:1px solid var(--line);color:var(--ink-2);background:var(--surface-2);border-radius:999px;padding:2px 10px;font-size:12px}button.chip:hover{color:var(--ink)}.chip.on{border-color:var(--force);color:var(--force);background:var(--force-bg)}nav.acts{gap:2px;max-width:1280px;margin:8px auto 0;display:flex;overflow-x:auto}nav.acts button{appearance:none;color:var(--ink-2);white-space:nowrap;background:0 0;border:none;border-bottom:3px solid #0000;align-items:baseline;gap:6px;padding:6px 12px 9px;display:flex}nav.acts button .no{font-family:ui-monospace,Menlo,monospace;font-size:11px}nav.acts button .t{font-size:14px}nav.acts button:hover{color:var(--ink)}nav.acts button[aria-selected=true]{color:var(--ink);border-bottom-color:var(--force)}nav.acts button[aria-selected=true] .t{font-weight:600}nav.acts button .badge{background:var(--surface-2);color:var(--ink-2);border-radius:8px;padding:0 6px;font-size:10px}main.stage-main{max-width:1280px;margin:0 auto;padding:18px 20px 80px}.stage-title{letter-spacing:.04em;margin:2px 0;font-family:Songti TC,Noto Serif TC,serif;font-size:21px}.stage-sub{color:var(--ink-2);margin:0 0 14px;font-size:13px}.scene{grid-template-columns:minmax(0,1fr) 260px;align-items:start;gap:16px;display:grid}@media (max-width:900px){.scene{grid-template-columns:1fr}}.felt{background:var(--surface-2);border:1px solid var(--line);border-radius:14px;min-height:180px;padding:16px}.felt-label{letter-spacing:.18em;color:var(--ink-2);margin-bottom:10px;font-size:11px}.spread{flex-wrap:wrap;gap:10px;display:flex}.card{background:var(--surface);border:1px solid var(--line);border-top:4px solid var(--line);width:168px;box-shadow:var(--shadow);text-align:left;border-radius:8px;padding:9px 11px 8px;font-size:13px;position:relative}button.card{appearance:none}button.card:hover{border-color:var(--ink-2)}.card.sel{outline:2px solid var(--force)}.card .cat{letter-spacing:.08em;color:var(--ink-2);font-size:10px}.card .name{margin:2px 0 6px;font-weight:600;line-height:1.35}.card .meta-row{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.fcode{background:var(--force-bg);color:var(--force);border-radius:4px;padding:1px 5px;font-family:ui-monospace,Menlo,monospace;font-size:10px}.card.sym{border-top-color:var(--sym)}.card.root{border-top-color:var(--root)}.card.sol{border-top-color:var(--sol)}.card.next{border-top-color:var(--next)}.card.goal{border-top-color:var(--goal)}.card.res{border-top-color:var(--res)}.card .kind{letter-spacing:.1em;font-size:10px;position:absolute;top:7px;right:9px}.card.sym .kind{color:var(--sym)}.card.root .kind{color:var(--root)}.card.sol .kind{color:var(--sol)}.card.next .kind{color:var(--next)}.card.goal .kind{color:var(--goal)}.card.res .kind{color:var(--res)}.card .x{color:var(--ink-2);background:0 0;border:none;padding:0 3px;font-size:12px;position:absolute;bottom:6px;right:8px}.card .x:hover{color:var(--sym)}.tag{letter-spacing:.05em;border-radius:4px;padding:1px 6px;font-size:10px}.tag.client{background:var(--sym-bg);color:var(--sym)}.tag.coach{background:var(--surface-2);color:var(--ink-2);border:1px solid var(--line)}.drawer{background:var(--surface);border:1px solid var(--line);border-radius:14px;margin-top:14px;padding:12px 16px 14px}.drawer-head{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:10px;display:flex}.drawer-head .title{letter-spacing:.06em;font-size:13px;font-weight:600}.drawer-head .count{color:var(--ink-2);font-size:12px}.drawer-head input[type=search]{flex:1;min-width:160px;max-width:280px;font-size:13px}.filters{flex-wrap:wrap;gap:6px;display:flex}.mini-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;max-height:320px;display:grid;overflow-y:auto}.mini{border:1px solid var(--line);border-left:3px solid var(--sym);background:var(--surface-2);color:var(--ink);text-align:left;border-radius:6px;justify-content:space-between;align-items:baseline;gap:6px;padding:5px 10px;font-size:12.5px;display:flex}button.mini:hover{border-color:var(--ink-2)}.mini.used{opacity:.35}.mini.g{border-left-color:var(--goal)}.mini.r{border-left-color:var(--res)}.mini .fcode{flex-shrink:0}.peek{color:var(--ink-2);border-radius:4px;padding:0 2px;font-size:13px}.peek:hover{color:var(--force)}.blocker-tag{background:var(--goal-bg);color:var(--goal);border:1px dashed var(--goal);border-radius:4px;margin-top:4px;padding:1px 6px;font-size:10px;display:inline-block}.from-list{color:var(--ink-2);margin-top:4px;font-size:10.5px;line-height:1.5}.from-list .cl{color:var(--sym)}.group-head{align-items:baseline;gap:8px;margin:12px 0 6px;font-size:12.5px;font-weight:600;display:flex}.group-head .bar-root{color:var(--root)}.group-head .bar-sym{color:var(--sym)}.group-note{color:var(--ink-2);margin:-2px 0 6px;font-size:11px;line-height:1.5}.sol-section{border:1px solid var(--line);background:var(--surface);border-left-width:4px;border-radius:10px;margin-bottom:10px;padding:8px 10px}.sol-section.root-sec{border-left-color:var(--root)}.sol-section.sym-sec{border-left-color:var(--sym)}.sol-section.tac-sec{border-left-color:var(--sol)}.sec-head{text-align:left;align-items:baseline;gap:8px;width:100%;margin-bottom:6px;display:flex}.sec-head.as-btn{appearance:none;cursor:pointer;background:0 0;border:none;padding:0}.sec-pill{letter-spacing:.12em;border-radius:5px;flex-shrink:0;padding:1px 8px;font-size:11px;font-weight:700}.sec-pill.root{background:var(--root-bg);color:var(--root)}.sec-pill.sym{background:var(--sym-bg);color:var(--sym)}.sec-pill.sol{background:var(--sol-bg);color:var(--sol)}.sec-sub{color:var(--ink-2);font-size:11px;line-height:1.4}.sec-caret{color:var(--ink-2);margin-left:auto;font-size:12px}.sec-warn{color:var(--sym);background:var(--sym-bg);border-radius:6px;margin:0 0 8px;padding:4px 8px;font-size:11px;line-height:1.5}.sol-section .crow{background:var(--surface-2)}.crow.sel{background:var(--force-bg);border-color:var(--force);outline:1.5px solid var(--force)}.sel-check{color:var(--force);font-weight:700}.picked-row{flex-wrap:wrap;gap:6px;margin-top:8px;display:flex}.picked-chip{border:1px solid;border-radius:999px;align-items:center;gap:4px;padding:2px 6px 2px 12px;font-size:12px;display:inline-flex}.picked-chip.sol{background:var(--sol-bg);border-color:var(--sol);color:var(--sol)}.picked-chip.tac{background:var(--surface-2);border-color:var(--sol);color:var(--ink);border-style:dashed}.picked-chip button{appearance:none;color:inherit;background:0 0;border:none;padding:0;font-size:12px}.picked-chip button:hover{text-decoration:underline}.picked-chip .rm{color:var(--ink-2);padding:0 4px}.picked-chip .rm:hover{color:var(--sym);text-decoration:none}.chip-budget{color:var(--ink-2);font-family:ui-monospace,Menlo,monospace;font-size:10.5px}.cols{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.cols.two{grid-template-columns:repeat(2,1fr)}.col{background:var(--surface-2);border:1px dashed var(--line);border-radius:12px;min-height:150px;padding:10px}.col.hot{border-color:var(--sym);border-style:solid}.col.have{border-color:var(--res);border-style:solid}.col-label{text-align:center;letter-spacing:.14em;color:var(--ink-2);margin-bottom:8px;font-size:12px}.col.hot .col-label{color:var(--sym);font-weight:600}.col.have .col-label{color:var(--res);font-weight:600}.col .card{width:100%;margin-bottom:8px}.rank-btns{gap:4px;margin-top:6px;display:flex}.rank-btns button{border:1px solid var(--line);background:var(--surface);color:var(--ink-2);border-radius:5px;padding:1px 7px;font-size:10.5px}.rank-btns button.on{border-color:var(--sym);color:var(--sym);background:var(--sym-bg)}.force-grid{grid-template-columns:repeat(3,1fr);gap:10px;max-width:540px;display:grid}.force-card{border:1px solid var(--line);background:var(--surface);text-align:center;color:var(--ink-2);border-radius:10px;padding:12px 8px 10px;transition:transform .4s,background .4s}.force-card .code{font-family:ui-monospace,Menlo,monospace;font-size:11px;display:block}.force-card .fname{font-size:15px}.force-card.lit{border-color:var(--force);background:var(--force-bg);color:var(--ink);box-shadow:var(--shadow)}.force-card.lit .fname{font-size:17px;font-weight:700}.force-card.lit .code{color:var(--force)}.force-card .hits{color:var(--force);margin-top:3px;font-size:11px;display:block}.force-card .quiz-low{color:var(--next);margin-top:3px;font-size:11px;display:block}.force-card.quiz-warn{border-style:dashed;border-color:var(--next)}@media (prefers-reduced-motion:no-preference){.force-card.lit{animation:.6s flipin}@keyframes flipin{0%{opacity:0;transform:rotateY(90deg)}to{opacity:1;transform:none}}}.contrast{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px;max-width:720px;margin-top:14px;padding:12px 16px}.contrast .row{border-bottom:1px dotted var(--line);grid-template-columns:150px 1fr;align-items:baseline;gap:10px;padding:7px 0;font-size:13px;display:grid}.contrast .row:last-child{border-bottom:none}.contrast .lbl{letter-spacing:.06em;font-size:12px}.contrast .lbl.g{color:var(--goal)}.contrast .lbl.c{color:var(--sym)}.contrast .lbl.h{color:var(--root)}.contrast .lbl.q{color:var(--next)}.scorechip{white-space:nowrap;background:var(--next-bg);color:var(--next);border-radius:5px;padding:1px 7px;font-family:ui-monospace,Menlo,monospace;font-size:11px}.scorechip.lowest{outline:1px dashed var(--next)}.detail{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:12px;max-width:520px;padding:14px 18px;font-size:13.5px}.detail .kind-line{letter-spacing:.1em;color:var(--ink-2);justify-content:space-between;margin-bottom:4px;font-size:11px;display:flex}.detail h3{margin:0 0 6px;font-size:17px;line-height:1.4}.detail.rootd{border-top:4px solid var(--root)}.detail.sold{border-top:4px solid var(--sol)}.detail.goald{border-top:4px solid var(--goal)}.detail.resd{border-top:4px solid var(--res)}.detail.symd{border-top:4px solid var(--sym)}.detail .sec{letter-spacing:.14em;color:var(--ink-2);margin:12px 0 4px;font-size:11px}.detail .md p{margin:5px 0}.detail .md ul,.detail .md ol{margin:4px 0;padding-left:20px}.detail .md li{margin:3px 0}.detail .md h4{margin:10px 0 4px;font-size:13px}.rail{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:12px 14px;position:sticky;top:96px}.rail .rail-title{letter-spacing:.1em;margin-bottom:2px;font-size:12px;font-weight:600}.rail .rail-sub{color:var(--ink-2);margin-bottom:10px;font-size:11px}.heat{align-items:center;gap:7px;margin:5px 0;font-size:12px;display:flex}.heat .code{width:22px;color:var(--ink-2);font-family:ui-monospace,Menlo,monospace;font-size:10.5px}.heat .fname{width:44px}.heat .bar{background:var(--surface-2);border-radius:4px;flex:1;height:8px;overflow:hidden}.heat .bar i{background:var(--force);border-radius:4px;height:100%;display:block}.heat .n{color:var(--ink-2);text-align:right;width:16px;font-family:ui-monospace,Menlo,monospace;font-size:11px}.heat.zero{opacity:.4}.rail .veil{color:var(--ink-2);border-top:1px solid var(--line);margin-top:10px;padding-top:8px;font-size:11px}.flow{align-items:flex-start;gap:10px;padding-bottom:6px;display:flex;overflow-x:auto}.stackcol{flex-direction:column;flex-shrink:0;gap:8px;width:180px;display:flex}.stackcol .lbl{letter-spacing:.14em;color:var(--ink-2);font-size:11px}.stackcol .card{width:100%}.flow .arrow{color:var(--ink-2);flex-shrink:0;padding-top:50px;font-size:18px}.link-tag{color:var(--ink-2);margin-top:4px;font-size:10.5px}.worksheet{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.ws-col{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:10px 12px}.ws-col .h{color:var(--sol);margin-bottom:6px;font-family:ui-monospace,Menlo,monospace;font-size:12px}.ws-col textarea{resize:vertical;background:0 0;border:none;width:100%;min-height:130px;padding:0;font-size:13px}.goal-anchor{border:1px solid var(--goal);background:var(--goal-bg);color:var(--goal);border-radius:8px;margin:0 8px 10px 0;padding:4px 12px;font-size:13px;display:inline-block}.btn{border:1px solid var(--line);background:var(--surface);color:var(--ink);border-radius:8px;padding:6px 16px;font-size:13px;display:inline-block}.btn:hover{border-color:var(--ink-2)}.btn.primary{background:var(--sol);border-color:var(--sol);color:#fff}.btn.gold{background:var(--force);border-color:var(--force);color:#fff}.btn.ghost-danger{color:var(--sym);border-color:var(--sym);background:0 0}.quiz-grid{grid-template-columns:repeat(3,1fr);gap:8px;max-width:540px;display:grid}.quiz-grid label{background:var(--surface);border:1px solid var(--line);border-radius:8px;align-items:center;gap:6px;padding:5px 10px;font-size:12.5px;display:flex}.quiz-grid input{text-align:right;width:58px;padding:2px 6px;font-size:13px}.crow{background:var(--surface);border:1px solid var(--line);border-left:4px solid var(--line);text-align:left;border-radius:7px;width:100%;margin-bottom:6px;padding:6px 10px;font-size:12.5px;display:block}button.crow:hover{border-color:var(--ink-2)}.crow.sel{outline:2px solid var(--force)}.crow.sym{border-left-color:var(--sym)}.crow.root{border-left-color:var(--root)}.crow.sol{border-left-color:var(--sol)}.crow.goal{border-left-color:var(--goal)}.crow.res{border-left-color:var(--res)}.crow .t-row{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.crow .t-row .name{font-weight:600;line-height:1.35}.crow .sub{color:var(--ink-2);white-space:nowrap;text-overflow:ellipsis;font-size:10.5px;overflow:hidden}.crow .sub .cl{color:var(--sym)}.stackcol.scroll{max-height:calc(100vh - 250px);padding-right:4px;overflow-y:auto}.sticky-detail{align-self:flex-start;max-height:calc(100vh - 130px);position:sticky;top:100px;overflow-y:auto}.origin-label{letter-spacing:.12em;color:var(--res);border-bottom:1px dashed var(--line);margin:8px 0 4px;padding-bottom:2px;font-size:10.5px}.budget-bar{background:var(--sol-bg);border:1px solid var(--sol);color:var(--ink);border-radius:10px;max-width:720px;margin:0 0 12px;padding:7px 14px;font-size:13px}.budget-bar b{color:var(--sol)}.empty-hint{color:var(--ink-2);text-align:center;padding:20px 0;font-size:13px}.overlay{z-index:50;background:#14182073;justify-content:center;align-items:flex-start;padding:60px 20px 20px;display:flex;position:fixed;inset:0}.panel{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);border-radius:14px;flex-direction:column;width:680px;max-width:95vw;max-height:80vh;padding:16px 18px;display:flex}.panel-head{align-items:baseline;gap:8px;margin-bottom:10px;display:flex}.panel-actions{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px;display:flex}.flash{color:var(--sol);font-size:12.5px}.entry-list{flex-direction:column;gap:8px;display:flex;overflow-y:auto}.entry{border:1px solid var(--line);background:var(--surface-2);border-radius:10px;align-items:center;gap:10px;padding:10px 12px;display:flex}.entry-main{flex:1;min-width:0}.entry-date{color:var(--ink-2);margin-left:8px;font-size:11px}.entry-sum{color:var(--ink-2);font-size:11.5px}.entry-actions{flex-shrink:0;gap:6px;display:flex}.entry-actions .btn{padding:3px 10px;font-size:12px}.custom-form{flex-wrap:wrap;gap:8px;margin-bottom:10px;display:flex}.custom-form input{flex:1;min-width:180px;font-size:13px}.custom-pool{border:1px dashed var(--force);background:var(--force-bg);border-radius:10px;margin-bottom:12px;padding:10px 12px}.custom-pool-item{flex-wrap:wrap;align-items:baseline;gap:6px;padding:3px 0;font-size:12.5px;display:flex}.custom-pool-item .entry-date{margin-left:auto}.client-group{letter-spacing:.08em;color:var(--goal);border-bottom:1px dashed var(--line);margin:10px 0 4px;padding-bottom:2px;font-size:12px;font-weight:700}@page{margin:2.54cm 3.18cm}@media print{.app-header,.drawer,.rail,.stage-sub,.no-print{display:none!important}body{color:#000;background:#fff;font-size:12pt}main.stage-main{max-width:none;padding:0}.scene{display:block}.print-only{display:block!important}}.print-only{display:none}.print-report{font-family:Songti TC,STSong,Noto Serif TC,PMingLiU,serif;font-size:13pt;line-height:1.9}.print-report h1{letter-spacing:.04em;margin:0 0 4pt;font-size:24pt}.print-report .pr-meta{color:#444;letter-spacing:.06em;border-bottom:2pt solid #000;margin:0 0 18pt;padding-bottom:10pt;font-size:11pt}.print-report h2{letter-spacing:.08em;border-left:5pt solid #333;margin:20pt 0 8pt;padding-left:10pt;font-size:16pt}.print-report h3{margin:12pt 0 4pt;font-size:13.5pt;font-weight:700}.print-report p,.print-report li{margin:4pt 0;font-size:13pt;line-height:1.9}.print-report ul{margin:4pt 0;padding-left:22pt}.print-report li{margin:6pt 0}.print-report section{break-inside:avoid;margin-bottom:6pt}.login-wrap{justify-content:center;align-items:center;min-height:100vh;padding:20px;display:flex}.login-card{background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);text-align:center;border-radius:16px;width:380px;max-width:92vw;padding:32px 36px}
