/* ── shell：通行碼畫面、外框（桌機左側欄＋主欄，手機上方列）、側欄清單、手機小卡列、＋新增 ── */
#veil-pass{position:fixed;inset:0;background:var(--side);display:flex;align-items:center;justify-content:center;padding:var(--sp-8);z-index:var(--z-pass)}
.passbox{background:var(--surface);border-radius:var(--r-lg);padding:var(--sp-10) var(--sp-9);width:100%;max-width:380px;box-shadow:var(--shadow)}
.passbox h1{margin:0 0 var(--sp-1);font-size:var(--fs-xl);font-weight:900;line-height:var(--lh-tight);white-space:nowrap}
.passbox p{margin:0 0 var(--sp-7);color:var(--ink-2);font-size:var(--fs-sm)}
.passbox input{width:100%;min-height:var(--tap);padding:var(--sp-4) var(--sp-5);border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);font-size:var(--fs-body)}
.passbox button{margin-top:var(--sp-5);width:100%;min-height:var(--tap);border:0;border-radius:var(--r-md);background:var(--ink);color:var(--bg);font-weight:700;font-size:var(--fs-body)}
.passbox button:disabled{opacity:.6;cursor:wait}
.passerr{color:var(--bad-ink);font-size:var(--fs-cap);margin-top:var(--sp-3);min-height:1.5em}

.shell{min-height:100vh;min-height:100dvh}
.side{display:none}
.topbar{position:sticky;top:0;z-index:var(--z-top);background:var(--side);color:var(--side-text);padding:var(--sp-3) var(--sp-6) 0}
.topbar .row1{display:flex;align-items:center;gap:var(--sp-3)}
.brand{font-weight:900;font-size:var(--fs-lg);line-height:var(--lh-tight);color:#fff;display:flex;align-items:center;gap:var(--sp-3);white-space:nowrap;min-width:0}
.brand .bi{width:26px;height:26px;border-radius:7px;background:var(--money);display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.brand .bi svg{width:16px;height:16px}
.toptabs{display:flex;gap:var(--sp-1);margin-left:auto;flex:0 0 auto}
.toptabs button{background:none;border:0;color:var(--side-text2);font-weight:700;font-size:var(--fs-sm);padding:0 var(--sp-4);min-height:var(--tap);border-radius:7px;white-space:nowrap}
.toptabs button[aria-selected="true"]{background:var(--side2);color:#fff}
.chipstrip{display:flex;gap:var(--sp-3);overflow-x:auto;padding:var(--sp-3) 0 var(--sp-4);scrollbar-width:none;overscroll-behavior-x:contain}
.chipstrip::-webkit-scrollbar{display:none}
.vchip{flex:0 0 auto;display:flex;align-items:center;gap:var(--sp-2);background:var(--side2);border:0;color:var(--side-text);
  border-radius:var(--r-pill);padding:0 var(--sp-6);min-height:var(--tap);font-size:var(--fs-sm);font-weight:600;white-space:nowrap}
.dot{display:inline-block;width:10px;height:10px;border-radius:50%;flex:0 0 auto;background:var(--ok)}
.dot.bad{background:var(--bad)} .dot.warn{background:var(--warn)} .dot.ok{background:var(--ok)}
.dot.none{background:none;border:2px solid var(--side-text2)}

.main{padding:var(--sp-6) var(--sp-6) 96px;max-width:1240px;margin:0 auto}

@media (min-width:1000px){
  .shell{display:grid;grid-template-columns:260px minmax(0,1fr)}
  .topbar{display:none}
  .side{display:flex;flex-direction:column;position:sticky;top:0;height:100vh;overflow-y:auto;background:var(--side);color:var(--side-text)}
  .side .brand{padding:var(--sp-8) var(--sp-8) var(--sp-6)}
  .nav{display:flex;align-items:center;gap:var(--sp-4);margin:1px var(--sp-4);padding:0 var(--sp-5);min-height:var(--tap);border-radius:var(--r-md);border:0;background:none;
    color:var(--side-text);font-weight:600;font-size:var(--fs-body);text-align:left;width:calc(100% - 20px)}
  .nav:hover{background:var(--side2)}
  .nav[aria-selected="true"]{background:var(--side2);color:#fff}
  .nav .n{margin-left:auto;font-size:var(--fs-cap);color:var(--side-text2)}
  .sidesep{margin:var(--sp-7) var(--sp-8) var(--sp-2);font-size:var(--fs-cap);font-weight:800;color:var(--side-text2);letter-spacing:.04em}
  .vlist{display:flex;flex-direction:column;gap:2px;padding:0 var(--sp-4)}
  .vitem{display:grid;grid-template-columns:12px 1fr;gap:var(--sp-4);align-items:center;padding:var(--sp-3) var(--sp-4);min-height:var(--tap);border-radius:var(--r-md);
    border:0;background:none;color:var(--side-text);text-align:left;cursor:grab}
  .vitem:hover{background:var(--side2)}
  .vrow{display:flex;flex-direction:column;gap:2px;border-radius:var(--r-md)}
  .vkids{display:flex;flex-direction:column;gap:2px;margin-left:var(--sp-7);padding-left:var(--sp-2);border-left:2px solid var(--side2)}
  .vrow .vitem{width:100%}
  .vitem .vn{display:block;font-weight:600;font-size:var(--fs-body);line-height:var(--lh-tight)}
  .vitem .vs{display:block;font-size:var(--fs-cap);color:var(--side-text2);line-height:var(--lh-tight)}
  .addside{margin:var(--sp-4) var(--sp-4) 0;min-height:var(--tap);border:1.5px dashed var(--side2);border-radius:var(--r-md);background:none;
    color:var(--side-text2);font-weight:600;font-size:var(--fs-sm)}
  .addside:hover{color:#fff;border-color:var(--side-text2)}
  .sidefoot{margin-top:auto;padding:var(--sp-6) var(--sp-8) var(--sp-8);border-top:1px solid var(--side2);font-size:var(--fs-cap);color:var(--side-text2)}
  .sidefoot button{background:none;border:0;color:var(--side-text2);text-decoration:underline;padding:0 var(--sp-1);min-height:var(--tap);font-size:var(--fs-cap)}
  .main{padding:var(--sp-9) var(--sp-10) 60px}
  .fab{display:none}
}
.side :focus-visible,.topbar :focus-visible{outline-color:#fff}

.fab{position:fixed;right:var(--sp-7);bottom:calc(var(--sp-7) + env(safe-area-inset-bottom));z-index:var(--z-fab);border:0;border-radius:var(--r-pill);
  background:var(--ink);color:var(--bg);font-weight:800;padding:0 var(--sp-8);min-height:52px;box-shadow:0 6px 20px rgba(0,0,0,.25);font-size:var(--fs-body)}
