:root{
  --bg-base:#121212;--bg-sidebar:#141414;--bg-card:#1a1a1a;--bg-elevated:#1e1e1e;
  --bg-active:rgba(255,255,255,.06);--bg-hover:rgba(255,255,255,.04);--bg-input:rgba(255,255,255,.03);
  --text-primary:rgba(255,255,255,.88);--text-secondary:rgba(255,255,255,.55);--text-muted:rgba(255,255,255,.4);--text-dim:rgba(255,255,255,.25);
  --border-default:rgba(255,255,255,.09);--border-light:rgba(255,255,255,.06);--border-medium:rgba(255,255,255,.14);--border-input:rgba(255,255,255,.08);
  --accent:#4fc3f7;--accent-soft:rgba(79,195,247,.08);--accent-border:rgba(79,195,247,.15);
  --color-green:#81c784;--color-green-soft:rgba(129,199,132,.1);
  --color-orange:#ffb74d;--color-orange-soft:rgba(255,183,77,.1);
  --color-red:#ef5350;--color-red-soft:rgba(239,83,80,.08);
  --color-slate:#90a4ae;
  --radius-sm:.25rem;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.625rem;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg-base);color:var(--text-primary);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans TC","PingFang TC","Microsoft JhengHei",sans-serif;font-size:14px;line-height:1.55}
a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}
.proto-banner{background:repeating-linear-gradient(45deg,rgba(255,183,77,.10),rgba(255,183,77,.10) 10px,rgba(255,183,77,.05) 10px,rgba(255,183,77,.05) 20px);color:var(--color-orange);font-size:.8rem;padding:.35rem 1rem;border-bottom:1px solid rgba(255,183,77,.2);display:flex;gap:1rem;justify-content:space-between;flex-wrap:wrap}
.topbar{height:3.5rem;display:flex;align-items:center;gap:1rem;padding:0 1.25rem;background:var(--bg-sidebar);border-bottom:1px solid var(--border-light)}
.topbar .brand{font-weight:700;letter-spacing:.02em}
.topbar .brand span{color:var(--accent)}
.topbar .spacer{flex:1}
.topbar .user{color:var(--text-secondary);font-size:.875rem}
.shell{display:flex;min-height:calc(100vh - 3.5rem - 1.8rem)}
.sidebar{width:15rem;flex-shrink:0;background:var(--bg-sidebar);border-right:1px solid var(--border-light);padding:1rem .5rem}
.nav-group{font-size:.75rem;color:var(--text-muted);padding:.75rem .75rem .25rem;letter-spacing:.05em}
.nav-item{display:flex;align-items:center;gap:.5rem;padding:.45rem .75rem;border-radius:var(--radius-md);color:var(--text-secondary);font-size:.875rem}
.nav-item:hover{background:var(--bg-hover);text-decoration:none;color:var(--text-primary)}
.nav-item.active{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-border)}
.nav-item.fake{opacity:.55;cursor:default}
.nav-item.fake:hover{background:none;color:var(--text-secondary)}
.nav-foot{margin-top:1.5rem;border-top:1px solid var(--border-light);padding-top:.75rem}
.main{flex:1;min-width:0;padding:1.25rem 1.5rem 3rem}
.crumb{font-size:.8rem;color:var(--text-muted);margin-bottom:.25rem}
h1{font-size:1.5rem;margin:.1rem 0 1rem;font-weight:600}
h2{font-size:1.25rem;margin:1.75rem 0 .75rem;font-weight:600}
h3{font-size:1rem;margin:0 0 .5rem;font-weight:600}
.muted{color:var(--text-muted)}
.secondary{color:var(--text-secondary)}
.text-sm{font-size:.875rem}
.text-xs{font-size:.75rem}
.dark-card{background:var(--bg-card);border:1px solid var(--border-light);border-radius:var(--radius-xl);padding:1rem 1.25rem}
.dark-card:hover{border-color:var(--border-default)}
.row{display:flex;gap:1rem;flex-wrap:wrap}
.row>.grow{flex:1;min-width:16rem}
.between{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap}
.stack>*+*{margin-top:1rem}
/* 確認三件事 */
.confirm-box{border:1px solid var(--accent-border);background:var(--accent-soft);border-radius:var(--radius-xl);padding:1rem 1.25rem;margin-bottom:1.5rem;display:grid;grid-template-columns:1fr 20rem;gap:1.25rem}
.confirm-box h3{color:var(--accent)}
.confirm-box ol{margin:.25rem 0 0;padding-left:1.25rem}
.confirm-box li{margin:.35rem 0}
.confirm-box li b{color:var(--text-primary)}
.confirm-box textarea{width:100%;min-height:7.5rem}
.confirm-box .hint{font-size:.75rem;color:var(--text-muted);margin-top:.25rem}
@media (max-width:1100px){.confirm-box{grid-template-columns:1fr}}
/* 表單 */
label.form-label{display:block;color:var(--text-secondary);margin-bottom:.3rem}
.req{color:var(--color-red);margin-left:.15rem}
input,select,textarea{background:var(--bg-input);border:1px solid var(--border-input);color:var(--text-primary);border-radius:var(--radius-md);padding:.5rem .65rem;font:inherit;font-size:.875rem}
input:hover,select:hover,textarea:hover{border-color:rgba(255,255,255,.15)}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent)}
select option{background:var(--bg-elevated)}
.field{margin-bottom:1rem}
.field input,.field select,.field textarea{width:100%}
.field .help{font-size:.75rem;color:var(--text-muted);margin-top:.25rem}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 1rem}
.radio-row{display:flex;gap:1rem;flex-wrap:wrap}
.radio-card{flex:1;min-width:12rem;border:1px solid var(--border-default);border-radius:var(--radius-lg);padding:.65rem .8rem;cursor:pointer}
.radio-card.on{border-color:var(--accent);background:var(--accent-soft)}
.radio-card b{display:block}
.radio-card span{font-size:.75rem;color:var(--text-muted)}
/* 按鈕 */
.btn{display:inline-flex;align-items:center;gap:.4rem;border:1px solid var(--border-medium);background:transparent;color:var(--text-primary);padding:.45rem .9rem;border-radius:var(--radius-md);font:inherit;font-size:.875rem;cursor:pointer;white-space:nowrap}
.btn:hover{background:var(--bg-hover);text-decoration:none}
.btn-primary{background:var(--accent);border-color:var(--accent);color:#0b1a22;font-weight:600}
.btn-primary:hover{background:#6dcff9}
.btn-text{border-color:transparent;color:var(--accent);padding:.3rem .5rem}
.btn-danger{border-color:rgba(239,83,80,.4);color:var(--color-red)}
.btn-sm{padding:.25rem .6rem;font-size:.8rem}
.btn[disabled]{opacity:.45;cursor:not-allowed}
/* 標籤／徽章 */
.status-badge{display:inline-flex;align-items:center;gap:.375rem;white-space:nowrap;border-radius:999px;padding:2px 10px;font-size:.8rem;font-weight:500}
.status-badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.sb-idle{background:rgba(148,163,184,.15);color:#94a3b8}
.sb-active{background:rgba(99,102,241,.15);color:#818cf8}
.sb-success{background:rgba(52,211,153,.15);color:#4ade80}
.sb-warning{background:rgba(251,146,60,.15);color:#fb923c}
.sb-danger{background:rgba(248,113,113,.15);color:#f87171}
.tag-code{display:inline-flex;align-items:center;font-size:.8rem;font-weight:600;padding:1px .55rem;border-radius:var(--radius-sm);background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent-border);white-space:nowrap}
.tag-version{display:inline-flex;align-items:center;font-size:.75rem;font-weight:500;padding:1px .5rem;border-radius:var(--radius-sm);background:var(--bg-active);color:var(--text-secondary);border:1px solid var(--border-light);white-space:nowrap}
.tag-new{display:inline-flex;align-items:center;font-size:.7rem;font-weight:600;padding:0 .4rem;border-radius:var(--radius-sm);background:rgba(255,183,77,.12);color:var(--color-orange);border:1px solid rgba(255,183,77,.3);margin-left:.35rem;white-space:nowrap;vertical-align:middle}
.sev{display:inline-block;min-width:4.5rem;text-align:center;font-size:.75rem;font-weight:600;padding:1px .4rem;border-radius:var(--radius-sm)}
.sev-c{background:rgba(239,83,80,.18);color:#ff8a80}
.sev-h{background:rgba(255,183,77,.15);color:var(--color-orange)}
.sev-m{background:rgba(255,241,118,.10);color:#fff176}
.sev-l{background:rgba(144,164,174,.15);color:var(--color-slate)}
/* 倒數 chip */
.cd{display:inline-flex;flex-direction:column;align-items:flex-start;border-radius:var(--radius-md);padding:.2rem .5rem;font-size:.75rem;line-height:1.3;border:1px solid var(--border-light);min-width:6.8rem}
.cd b{font-size:.8rem}
.cd-done{color:var(--color-green);background:var(--color-green-soft);border-color:rgba(129,199,132,.25)}
.cd-ok{color:var(--text-secondary);background:var(--bg-active)}
.cd-warn{color:var(--color-orange);background:var(--color-orange-soft);border-color:rgba(255,183,77,.3)}
.cd-danger{color:#ff8a80;background:var(--color-red-soft);border-color:rgba(239,83,80,.35)}
.cd-wait{color:var(--text-muted);background:transparent;border-style:dashed}
/* hint bar */
.hint-bar{display:flex;align-items:center;gap:.5rem;padding:.55rem 1rem;font-size:.8rem;border:1px solid transparent;border-radius:var(--radius-md)}
.hint-bar--info{background:rgba(79,195,247,.06);border-color:rgba(79,195,247,.12);color:#4fc3f7}
.hint-bar--warn{background:rgba(255,183,77,.06);border-color:rgba(255,183,77,.15);color:#ffb74d}
.hint-bar--error{background:rgba(239,83,80,.06);border-color:rgba(239,83,80,.15);color:#ef5350}
.hint-bar--success{background:rgba(129,199,132,.06);border-color:rgba(129,199,132,.15);color:#81c784}
/* 表格 */
.table-wrap{background:var(--bg-card);border:1px solid var(--border-light);border-radius:var(--radius-xl);overflow:auto}
table{border-collapse:collapse;width:100%}
th{font-size:.75rem;font-weight:600;color:var(--text-muted);text-align:left;padding:.6rem .75rem;border-bottom:1px solid var(--border-default);white-space:nowrap;background:var(--bg-elevated)}
td{padding:.6rem .75rem;border-bottom:1px solid var(--border-light);vertical-align:middle;font-size:.875rem}
tr:last-child td{border-bottom:none}
tbody tr:hover td{background:var(--bg-hover)}
tr.clickable{cursor:pointer}
.nowrap td{white-space:nowrap}
th.newcol,td.newcol{background:rgba(255,183,77,.035)}
th.newcol{color:var(--color-orange)}
/* 篩選列 */
.toolbar{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap;margin-bottom:.75rem}
.toolbar .search{position:relative}
.toolbar .search input{padding-left:1.9rem;width:16rem}
.toolbar .search::before{content:"";position:absolute;left:.65rem;top:50%;width:.6rem;height:.6rem;border:1.5px solid var(--text-muted);border-radius:50%;transform:translateY(-60%)}
.chip-filter{display:inline-flex;gap:.25rem;align-items:center;border:1px solid var(--border-default);border-radius:999px;padding:.2rem .3rem .2rem .7rem;font-size:.8rem;color:var(--text-secondary)}
.chip-filter .opt{padding:.1rem .5rem;border-radius:999px;cursor:pointer}
.chip-filter .opt.on{background:var(--accent-soft);color:var(--accent)}
/* mini stat */
.mini-stat{padding:.6rem .8rem;border-radius:var(--radius-md);border:1px solid var(--border-light);min-width:9rem;cursor:pointer}
.mini-stat:hover{border-color:var(--border-default)}
.mini-stat.active{border-color:var(--accent-border);background:var(--accent-soft)}
.mini-stat .n{font-size:1.25rem;font-weight:600}
.mini-stat .l{font-size:.75rem;color:var(--text-muted)}
.mini-progress-bar{height:.5rem;border-radius:999px;overflow:hidden;background:var(--bg-active)}
.mini-progress-fill{height:100%;border-radius:999px;background:linear-gradient(90deg,var(--accent),var(--color-green))}
.mini-progress-bar.complete .mini-progress-fill{background:var(--color-green)}
/* 分頁籤 */
.tabs{display:flex;gap:.25rem;border-bottom:1px solid var(--border-default);margin-bottom:1rem;flex-wrap:wrap}
.tab{padding:.55rem 1rem;color:var(--text-secondary);border-bottom:2px solid transparent;margin-bottom:-1px;font-size:.875rem;cursor:pointer}
.tab:hover{color:var(--text-primary);text-decoration:none}
.tab.on{color:var(--accent);border-bottom-color:var(--accent)}
/* 時間軸 */
.timeline{position:relative;padding-left:1.75rem}
.timeline::before{content:"";position:absolute;left:.55rem;top:.4rem;bottom:.4rem;width:2px;background:var(--border-default)}
.tl-node{position:relative;padding-bottom:1.25rem}
.tl-node::before{content:"";position:absolute;left:-1.5rem;top:.3rem;width:.85rem;height:.85rem;border-radius:50%;border:2px solid var(--border-medium);background:var(--bg-card)}
.tl-node.done::before{border-color:var(--color-green);background:var(--color-green)}
.tl-node.now::before{border-color:var(--color-red);background:var(--color-red);box-shadow:0 0 0 4px rgba(239,83,80,.18)}
.tl-node.wait::before{border-style:dashed}
.tl-head{display:flex;gap:.6rem;align-items:center;flex-wrap:wrap}
.tl-head b{font-size:.95rem}
.tl-body{margin-top:.35rem;font-size:.85rem;color:var(--text-secondary)}
.kv{display:grid;grid-template-columns:8rem 1fr;gap:.35rem .75rem;font-size:.875rem}
.kv dt{color:var(--text-muted)}
.kv dd{margin:0}
/* dialog */
.overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);display:none;align-items:flex-start;justify-content:center;padding:4vh 1rem;z-index:50;overflow:auto}
.overlay.open{display:flex}
.dialog{background:var(--bg-elevated);border:1px solid var(--border-default);border-radius:var(--radius-xl);width:min(46rem,100%);box-shadow:0 20px 60px rgba(0,0,0,.5)}
.dialog-head{padding:1rem 1.25rem;border-bottom:1px solid var(--border-light);display:flex;justify-content:space-between;align-items:center}
.dialog-body{padding:1.25rem}
.dialog-foot{padding:.85rem 1.25rem;border-top:1px solid var(--border-light);display:flex;justify-content:flex-end;gap:.5rem}
.x{background:none;border:none;color:var(--text-muted);font-size:1.25rem;cursor:pointer}
.view{display:none}
.view.on{display:block}
.note-proto{font-size:.75rem;color:var(--color-orange);margin:.5rem 0}
.missing{color:#ff8a80}
.ok{color:var(--color-green)}
.src{display:inline-block;font-size:.72rem;padding:0 .4rem;border-radius:var(--radius-sm);border:1px solid var(--border-default);color:var(--text-secondary);white-space:nowrap}
.src-sc{border-color:rgba(79,195,247,.3);color:#81d4fa}
.src-risk{border-color:rgba(206,147,216,.35);color:#ce93d8}
.src-ver{border-color:rgba(129,199,132,.35);color:#a5d6a7}
.src-party{border-color:rgba(255,183,77,.35);color:#ffcc80}
.src-ev{border-color:rgba(144,164,174,.4);color:#b0bec5}
.src-none{border-color:rgba(239,83,80,.35);color:#ff8a80}
details.doc{background:var(--bg-card);border:1px solid var(--border-light);border-radius:var(--radius-xl);margin-bottom:1rem}
details.doc[open]{border-color:var(--border-default)}
details.doc>summary{list-style:none;cursor:pointer;padding:1rem 1.25rem}
details.doc>summary::-webkit-details-marker{display:none}
details.doc .doc-body{padding:0 1.25rem 1.25rem}
.reminder{display:flex;gap:1rem;align-items:flex-start;border:1px solid rgba(255,183,77,.3);background:rgba(255,183,77,.05);border-radius:var(--radius-xl);padding:.9rem 1.1rem}
.reminder .big{font-size:1.5rem;font-weight:700;color:var(--color-orange);line-height:1}
.reminder--calm{border-color:var(--border-light);background:var(--bg-card)}
.reminder--calm .big{color:var(--text-primary)}
.reminder .big small{display:block;font-size:.7rem;font-weight:500;color:var(--text-muted);margin-top:.2rem}
.loc-label{display:inline-block;font-size:.75rem;color:var(--text-muted);border:1px dashed var(--border-medium);border-radius:var(--radius-sm);padding:0 .45rem;margin-bottom:.5rem}
.index-card{display:block;color:inherit}
.index-card:hover{text-decoration:none;border-color:var(--accent-border)}
.index-card h3{color:var(--accent)}
/* FR-155 追加 */
.layout{display:grid;grid-template-columns:1fr 20rem;gap:1.25rem}
@media (max-width:1100px){.layout{grid-template-columns:1fr}}
.matrix td.c{text-align:center}
.chk{display:inline-block;width:1rem;height:1rem;border:1px solid var(--border-medium);border-radius:3px;vertical-align:middle;cursor:pointer}
.chk.on{background:var(--accent);border-color:var(--accent)}
.chk.on::after{content:"✓";color:#0b1a22;font-size:.75rem;font-weight:700;display:block;text-align:center;line-height:1rem}
.chk.dis{opacity:.4;cursor:not-allowed}
.switch{display:inline-flex;align-items:center;gap:.5rem;cursor:pointer}
.switch i{width:2.2rem;height:1.2rem;border-radius:999px;background:var(--bg-active);position:relative;border:1px solid var(--border-medium)}
.switch i::after{content:"";position:absolute;top:.1rem;left:.1rem;width:.9rem;height:.9rem;border-radius:50%;background:var(--text-muted)}
.switch.on i{background:var(--accent-soft);border-color:var(--accent)}
.switch.on i::after{left:1.1rem;background:var(--accent)}
.avatar{display:inline-flex;width:1.8rem;height:1.8rem;border-radius:50%;background:var(--bg-active);align-items:center;justify-content:center;font-size:.75rem;color:var(--text-secondary);margin-right:.5rem}
.pill-row{display:flex;gap:.35rem;flex-wrap:wrap}
.pill{font-size:.72rem;padding:0 .45rem;border-radius:var(--radius-sm);border:1px solid var(--border-default);color:var(--text-secondary);white-space:nowrap}
.pill.on{border-color:var(--accent-border);color:var(--accent);background:var(--accent-soft)}
.ask{border:1px solid var(--accent-border);background:var(--accent-soft);border-radius:var(--radius-xl);padding:.9rem 1.1rem;margin-bottom:1.25rem}
.ask h3{color:var(--accent);margin-bottom:.35rem}
.ask ol{margin:0;padding-left:1.2rem}
.ask li{margin:.25rem 0}
.sel-row{display:flex;align-items:center;gap:.5rem}
.sel-row select{min-width:11rem}
