/* ── shell：登入畫面的底（#veil-pass；登入框本身在 auth.css）、外框（桌機左側欄＋主欄，手機上方列）、側欄的樹、手機小卡列、＋新增 ── */
#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)}

.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-2)}
/* 2026-10-05 A2 多一個頁籤（每人）：放不下就讓頁籤換到下一行（名字不被擠窄）；窄手機頁籤自成一行、三顆平分 */
.topbar .row1{flex-wrap:wrap;row-gap:var(--sp-1)}
.topbar .row1 .brand{flex:0 0 auto}
@media (max-width:480px){.topbar .toptabs{flex:1 0 100%;margin-left:0}.topbar .toptabs button{flex:1 1 0}}
.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;align-items:center;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}
/* 小卡列也是樹：每一層一個 .ckids、每包一個 .crow（拖移只在同一層裡換）；子項目的卡比較淡 */
.ckids{display:flex;align-items:center;gap:var(--sp-3);flex:0 0 auto}
.crow{display:flex;align-items:center;gap:var(--sp-2);flex:0 0 auto}
.crow .ckids{padding-left:var(--sp-2);border-left:2px solid var(--side2)}
.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}
.crow .crow .vchip{background:none;border:1.5px solid var(--side2)}
.vchip.is-closed{color:var(--side-text2);text-decoration:line-through}
.vchip.vmore{background:none;border:1.5px dashed var(--side-text2);color:var(--side-text)}
.chip-add{flex:0 0 auto;width:var(--tap);min-height:var(--tap);border-radius:50%;border:1.5px dashed var(--side-text2);background:none;color:#fff;font-size:var(--fs-lg);font-weight:800;line-height:var(--lh-tight)}
.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)}
.dot.closed{background: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:330px 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)}
  .brand-row{display:flex;align-items:center;gap:var(--sp-1);padding:var(--sp-6) var(--sp-4) var(--sp-4) var(--sp-8)}
  .brand-row .brand{flex:0 1 auto}
  .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{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);margin:var(--sp-6) var(--sp-4) var(--sp-1) var(--sp-8);
    font-size:var(--fs-sep);font-weight:800;color:var(--side-text2);letter-spacing:.04em}
  .side-add{flex:0 0 auto;width:var(--tap);min-height:var(--tap);border-radius:var(--r-md);border:1.5px dashed var(--side2);background:none;color:var(--side-text);font-size:var(--fs-lg);font-weight:800;line-height:var(--lh-tight)}
  .side-add:hover{color:#fff;border-color:var(--side-text2)}
  /* 側欄的樹：每一層一個 .vkids、每包一個 .vrow（拖移只在同一層裡換）；最多畫三層 */
  .vlist{padding:0 var(--sp-3) 0 var(--sp-2)}
  .vkids{display:flex;flex-direction:column;gap:2px}
  .vkids .vkids{margin-left:var(--sp-7);padding-left:var(--sp-1);border-left:2px solid var(--side2)}
  .vrow{display:flex;flex-direction:column;gap:2px;border-radius:var(--r-md)}
  .vline{display:flex;align-items:stretch;min-width:0}
  .vtog,.vtog-sp{flex:0 0 26px}
  .vtog{display:flex;align-items:center;justify-content:center;border:0;background:none;color:var(--side-text2);border-radius:var(--r-sm);min-height:var(--tap);padding:0}
  .vtog svg{transition:transform var(--dur) var(--ease)}
  .vtog[aria-expanded="true"] svg{transform:rotate(90deg)}
  .vtog:hover{color:#fff;background:var(--side2)}
  .vitem{flex:1;min-width:0;display:grid;grid-template-columns:12px minmax(0,1fr);gap:var(--sp-4);align-items:center;padding:var(--sp-2) 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)}
  .vitem.is-closed .vn{text-decoration:line-through;color:var(--side-text2)}
  .vtxt{min-width:0}
  .vitem .vn{display:block;font-weight:600;font-size:var(--fs-body);line-height:var(--lh-tight);overflow-wrap:anywhere}
  .vitem .vs{display:block;font-size:var(--fs-cap);color:var(--side-text2);line-height:var(--lh-tight)}
  .vitem .vp{display:block;font-size:var(--fs-cap);color:var(--side-text2);line-height:var(--lh-tight)} /* A3：預定 n 人，已招 m 人 */
  .vitem .vl{margin-right:var(--sp-2);padding:0 var(--sp-1);border:1px solid var(--side2);border-radius:4px}
  .vmore{margin:0 0 var(--sp-1) 44px;min-height:var(--tap);border:1.5px dashed var(--side2);border-radius:var(--r-md);background:none;color:var(--side-text);
    font-size:var(--fs-cap);font-weight:700;text-align:left;padding:0 var(--sp-4)}
  .vmore:hover{border-color:var(--side-text2);color:#fff}
  .sidefoot{margin-top:auto;padding:var(--sp-6) var(--sp-8) var(--sp-8);border-top:1px solid var(--side2);font-size:var(--fs-foot);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-foot)}
  .main{padding:var(--sp-9) var(--sp-10) 60px}
}
.side :focus-visible,.topbar :focus-visible{outline-color:#fff}

