/* ==================================================================
   TEAM 27 OS — design system v1
   01 TOKENS            10 SWEEP TABLES        19 MIND MAP (MAP tab)
   02 RESET + BASE      11 TASK ROWS + CB      20 NOTES CAPTURE
   03 TEXT UTILITIES    12 STAGE STEPS         21 EMPTY STATES
   04 SHELL + HEADER    13 KANBAN              22 PALETTE + TOAST
   05 TAB BAR           14 PLAN + WEEK LIST    23 LOGIN + MODAL
   06 SCREEN + PAGE-H   15 TEAM GRIDS          24 FOCUS + SCROLLBARS
   07 PANELS            16 PIVOTS              25 RESPONSIVE
   08 STATS + BARS      17 BUTTONS             26 REDUCED MOTION
   09 CHIPS + AVATARS   18 INPUTS + SWITCH
   ================================================================== */

/* ---------- 01 TOKENS ---------- */
:root{
  color-scheme:light;
  --bg:#f6f6f8; --surface:#ffffff; --sunken:#efeff2; --raised:#ffffff;
  --line:#e5e5ea; --line-soft:#ededf1; --line-strong:#d6d6de;
  --tx1:#18181d; --tx2:#5b5b66; --tx3:#7c7c88; --tx4:#a3a3af;
  --accent:#7c3aed; --accent-strong:#6d28d9; --accent-ink:#6d28d9;
  --accent-soft:#f1eafd; --accent-tint:#faf8ff; --accent-ring:rgba(124,58,237,.25);
  --ok:#047857; --ok-fill:#10b981; --ok-bg:#e6f5ef; --ok-mut:#a7dcc6;
  --warn:#b45309; --warn-fill:#f59e0b; --warn-bg:#fbf1df; --warn-ring:rgba(245,158,11,.30);
  --bad:#dc2626; --bad-strong:#b91c1c; --bad-bg:#fdeceb; --bad-ring:rgba(220,38,38,.22);
  --bad-line:#f2c4c2;
  --info:#2563eb; --info-bg:#e9f0fe;
  --node-purple:#a855f7; --node-blue:#3b82f6; --node-green:#10b981;
  --node-amber:#f59e0b; --node-pink:#ec4899; --node-red:#ef4444; --node-slate:#64748b;
  --map-dot:#e6e6ec;
  --font-ui:"Segoe UI Variable Text","Segoe UI",-apple-system,BlinkMacSystemFont,Roboto,"Helvetica Neue",Arial,sans-serif;
  --font-mono:ui-monospace,"Cascadia Code","SF Mono",Consolas,"Liberation Mono",monospace;
  --text-xs:11px; --text-sm:12px; --text-md:13px; --text-base:14px;
  --text-lg:16px; --text-xl:18px; --text-2xl:22px; --text-3xl:28px;
  --s0:2px; --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:20px; --s6:24px; --s7:32px; --s8:48px;
  --r-sm:6px; --r-md:8px; --r-lg:10px; --r-xl:12px; --r-2xl:16px; --r-full:999px;
  --shadow-xs:0 1px 2px rgba(16,16,20,.05);
  --shadow-sm:0 1px 3px rgba(16,16,20,.07),0 1px 2px rgba(16,16,20,.05);
  --shadow-md:0 4px 12px rgba(16,16,20,.10),0 2px 4px rgba(16,16,20,.06);
  --shadow-lg:0 12px 32px rgba(16,16,20,.16),0 4px 8px rgba(16,16,20,.08);
  --shadow-node:0 2px 6px rgba(16,16,20,.18);
  --t-fast:120ms cubic-bezier(.3,.7,.4,1);
  --t-med:160ms cubic-bezier(.3,.7,.4,1);
  --header-h:52px; --tabs-h:41px;
  /* LEGACY ALIASES — the JS still writes inline style="color:var(--g)" etc.
     These keep untouched inline styles resolving to the new semantics.
     Remove once the JS inline styles are cleaned up. */
  --g:var(--ok); --g2:var(--tx2); --g3:var(--tx3); --g4:var(--line); --gvdim:var(--tx4);
  --tamber:var(--warn); --tred:var(--bad); --twhite:var(--tx1);
  --tblue:var(--info); --tpurple:var(--accent-ink); --tpink:var(--node-pink);
  --tbg:var(--surface); --tpanel:transparent;
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#101013; --surface:#17171b; --sunken:#101013; --raised:#1d1d23;
  --line:#26262d; --line-soft:#1f1f26; --line-strong:#35353e;
  --tx1:#ededf1; --tx2:#a4a4b0; --tx3:#82828e; --tx4:#5b5b66;
  --accent:#7c3aed; --accent-strong:#8b5cf6; --accent-ink:#b3a0f7;
  --accent-soft:rgba(139,92,246,.16); --accent-tint:rgba(139,92,246,.07);
  --accent-ring:rgba(167,139,250,.30);
  --ok:#34d399; --ok-fill:#10b981; --ok-bg:rgba(16,185,129,.14); --ok-mut:rgba(16,185,129,.40);
  --warn:#fbbf24; --warn-fill:#f59e0b; --warn-bg:rgba(245,158,11,.13); --warn-ring:rgba(245,158,11,.28);
  --bad:#f87171; --bad-strong:#f87171; --bad-bg:rgba(239,68,68,.14); --bad-ring:rgba(239,68,68,.28);
  --bad-line:rgba(239,68,68,.35);
  --info:#60a5fa; --info-bg:rgba(59,130,246,.15);
  --map-dot:#222229;
  --shadow-xs:0 1px 2px rgba(0,0,0,.35);
  --shadow-sm:0 1px 3px rgba(0,0,0,.40);
  --shadow-md:0 4px 14px rgba(0,0,0,.45);
  --shadow-lg:0 16px 40px rgba(0,0,0,.55);
  --shadow-node:0 2px 8px rgba(0,0,0,.50);
}

/* ---------- 02 RESET + BASE ---------- */
*{margin:0;padding:0;box-sizing:border-box}
html,body{height:100%}
body{background:var(--bg)}
[hidden]{display:none !important}
img,svg{display:block}
[data-act] svg{pointer-events:none}
button{font-family:inherit;color:inherit}
b,strong{font-weight:600}
kbd{
  font-family:var(--font-ui);font-size:10px;font-weight:600;color:var(--tx2);
  background:var(--sunken);border:1px solid var(--line-strong);border-bottom-width:2px;
  border-radius:4px;padding:1px 5px;
}
.app{
  height:100dvh;display:flex;flex-direction:column;overflow:hidden;
  background:var(--bg);color:var(--tx1);
  font-family:var(--font-ui);font-size:var(--text-md);line-height:1.5;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
.app ::selection{background:var(--accent-soft);color:var(--tx1)}
:root[data-theme="dark"] .app ::selection{background:rgba(139,92,246,.35);color:var(--tx1)}
.num,.s-num,.s-r,.hrcell,.mx,.age,.est,#clock,.stat-v,.wk-dates{font-variant-numeric:tabular-nums}

/* ---------- 03 TEXT UTILITIES (kept names, new meanings) ---------- */
.dim{color:var(--tx2)}
.vdim{color:var(--tx3)}
.lit{color:var(--tx1);font-weight:500}
.amb{color:var(--warn)}
.err{color:var(--bad-strong)}
.blue{color:var(--info)}
.glow{}                                   /* retired effect — intentional no-op */
.tblink,.tblink2{opacity:1 !important}    /* blinking retired — no-op */

/* ---------- 04 SHELL + HEADER ---------- */
header.thead{
  flex:none;display:flex;align-items:center;gap:14px;
  height:var(--header-h);padding:0 var(--s4);
  background:var(--surface);border-bottom:1px solid var(--line);
}
.brand{display:flex;align-items:center;gap:9px;font-size:var(--text-base);font-weight:600;white-space:nowrap;color:var(--tx1)}
.brand-mark{
  width:24px;height:24px;border-radius:7px;background:var(--accent);color:#fff;
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none;
}
.brand .os{color:var(--tx3);font-weight:500;font-size:var(--text-sm)}
.thead .hr{margin-left:auto;display:flex;gap:6px;align-items:center;min-width:0}
.hbtn{
  height:28px;padding:0 9px;border:0;border-radius:var(--r-sm);background:none;
  color:var(--tx2);font-size:var(--text-sm);font-weight:500;cursor:pointer;
  display:inline-flex;align-items:center;gap:6px;white-space:nowrap;
  transition:background var(--t-fast),color var(--t-fast);
}
.hbtn:hover{background:var(--sunken);color:var(--tx1)}
.hbtn.icon{width:28px;padding:0;justify-content:center}
.hbtn svg{width:14px;height:14px}
.viewas{display:flex;align-items:center;gap:6px;font-size:var(--text-xs)}
.viewas .vlab{color:var(--tx3);font-weight:600;letter-spacing:.04em}
select.vsel{
  height:26px;padding:0 6px;font:inherit;font-size:var(--text-xs);font-weight:500;
  color:var(--tx1);background:var(--surface);border:1px solid var(--line-strong);
  border-radius:var(--r-sm);cursor:pointer;max-width:150px;
}
.viewas.sim select.vsel{border-color:var(--warn-fill);background:var(--warn-bg);color:var(--warn)}
.syncchip{display:inline-flex;align-items:center;gap:6px}
.syncchip .syncdot{width:6px;height:6px;border-radius:var(--r-full);background:var(--ok-fill);flex:none}
.syncchip.busy .syncdot{background:var(--warn-fill);animation:pulse 1.2s ease-in-out infinite}
.syncchip.errd{color:var(--bad-strong)}
.syncchip.errd .syncdot{background:var(--bad)}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.35}}
.clockwrap{display:flex;align-items:baseline;gap:8px;padding:0 6px;font-size:var(--text-sm);color:var(--tx2);white-space:nowrap}
.clockwrap .hdate{color:var(--tx3)}
.userchip{
  display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 4px;
  border:0;background:none;border-radius:var(--r-full);cursor:pointer;
}
.userchip:hover .av{border-color:var(--accent)}

/* ---------- 05 TAB BAR (8 tabs) ---------- */
nav.ttabs{
  flex:none;display:flex;align-items:stretch;gap:2px;padding:0 var(--s3);
  height:var(--tabs-h);background:var(--surface);border-bottom:1px solid var(--line);
  overflow-x:auto;overflow-y:hidden;scrollbar-width:none;
}
nav.ttabs::-webkit-scrollbar{display:none}
.ttab{
  position:relative;flex:none;display:inline-flex;align-items:center;gap:6px;
  padding:0 var(--s3);border:0;background:none;cursor:pointer;white-space:nowrap;
  font-size:var(--text-md);font-weight:500;color:var(--tx2);
  transition:color var(--t-fast);
}
.ttab:hover{color:var(--tx1)}
.ttab.on{color:var(--tx1);font-weight:600}
.ttab.on::after{
  content:"";position:absolute;left:10px;right:10px;bottom:-1px;height:2px;
  background:var(--accent);border-radius:1px;
}
.ttab .fk{display:none}                 /* hotkeys documented in the palette */
.ttab .warn{color:inherit}
.ttab .warn::after{                     /* attention dot replaces " !" */
  content:"";display:inline-block;width:6px;height:6px;margin-left:6px;
  border-radius:var(--r-full);background:var(--bad);vertical-align:middle;
}

/* ---------- 06 SCREEN + VIEW + PAGE HEADER ---------- */
.tscreen{flex:1;overflow-y:auto;overflow-x:hidden;background:var(--bg)}
.tview{max-width:1180px;margin:0 auto;padding:var(--s5) var(--s5) var(--s8);animation:view-in var(--t-med) both}
.tview.wide{max-width:none;padding:var(--s3)}
@keyframes view-in{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}
.page-h{padding:2px 0 var(--s4)}
.page-title{font-size:var(--text-2xl);font-weight:650;letter-spacing:-.01em;color:var(--tx1)}
.page-sub{font-size:var(--text-sm);color:var(--tx3);margin-top:3px}

/* ---------- 07 PANELS (.tbox) + statline + kv ---------- */
.tbox{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);
  padding:14px 16px;margin-bottom:var(--s4);
}
.tbox-title{
  display:flex;gap:10px;align-items:baseline;flex-wrap:wrap;
  margin:-14px -16px 12px;padding:11px 16px;
  border-bottom:1px solid var(--line-soft);
  font-size:var(--text-xs);font-weight:600;letter-spacing:.06em;color:var(--tx2);
}
.tbox-title .r{margin-left:auto;font-weight:500;letter-spacing:.02em;color:var(--tx3)}
.tbox.gold{background:var(--accent-tint);border-color:var(--accent-soft)}
.tbox.gold>.tbox-title{color:var(--accent-ink);border-bottom-color:var(--accent-soft)}
.tbox.danger{border-color:var(--bad-line)}
.tbox.danger>.tbox-title{border-bottom-color:var(--bad-line)}
.rule{display:none}
.statline{display:flex;gap:12px;padding:6px 4px;font-size:var(--text-md);align-items:center;min-height:30px}
.sl-k{flex:0 0 110px;font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;color:var(--tx3)}
.sl-v{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kv{display:flex;gap:12px;padding:8px 4px;align-items:center;flex-wrap:wrap;font-size:var(--text-md)}
.kv .k{flex:0 0 180px;font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;color:var(--tx3)}
.rules-pre{
  font-family:var(--font-mono);font-size:var(--text-sm);line-height:1.7;color:var(--tx2);
  background:var(--sunken);border-radius:var(--r-md);padding:12px 14px;
  white-space:pre;overflow-x:auto;
}
.scrollx{overflow-x:auto}
.scrollx>.minw{min-width:640px}

/* ---------- 08 STAT TILES + PROGRESS BARS ---------- */
.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px;margin-bottom:var(--s4)}
.stat{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:12px 14px;display:flex;flex-direction:column;gap:5px;min-height:92px;
}
.stat-k{font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;color:var(--tx3)}
.stat-v{font-size:var(--text-xl);font-weight:600;color:var(--tx1);line-height:1.2}
.stat-v .u{font-size:var(--text-sm);font-weight:500;color:var(--tx3);margin-left:2px}
.stat-sub{font-size:var(--text-sm);color:var(--tx2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stat .bar{margin-top:auto}
.stat.warn .stat-v{color:var(--warn)}
.stat.bad .stat-v{color:var(--bad-strong)}
.stat.ok .stat-v{color:var(--ok)}
/* the one bar component — <span class="bar"><i style="width:42%"></i></span> */
.bar{
  position:relative;display:inline-block;flex:none;width:120px;height:4px;
  border-radius:2px;background:var(--line);overflow:hidden;vertical-align:middle;
}
.bar>i{position:absolute;left:0;top:0;bottom:0;background:var(--ok-fill);border-radius:2px;transition:width var(--t-med)}
.bar.amber>i{background:var(--warn-fill)}
.bar.red>i{background:var(--bad)}
.bar.accent>i{background:var(--accent)}
.bar.lg{height:6px;border-radius:3px;width:100%}
.bar.auto{width:100%}
.bar.sm{width:64px}

/* ---------- 09 CHIPS + AVATARS ---------- */
.av{
  width:22px;height:22px;border-radius:var(--r-full);flex:none;
  background:var(--sunken);border:1px solid var(--line);color:var(--tx2);
  font-size:10px;font-weight:600;letter-spacing:.02em;
  display:inline-flex;align-items:center;justify-content:center;
  transition:border-color var(--t-fast);
}
.av.struck{opacity:.45;text-decoration:line-through}
.pc{
  display:inline-flex;align-items:center;font-size:10px;font-weight:600;letter-spacing:.06em;
  border-radius:var(--r-full);padding:2px 8px;white-space:nowrap;
}
.pc-admin{color:var(--accent-ink);background:var(--accent-soft)}
.pc-manager{color:var(--info);background:var(--info-bg)}
.pc-member{color:var(--tx2);background:var(--sunken)}
.statec{
  display:inline-flex;align-items:center;gap:6px;
  font-size:var(--text-xs);font-weight:600;letter-spacing:.02em;white-space:nowrap;
  border-radius:var(--r-full);padding:2px 9px;
  background:var(--sunken);
  background:color-mix(in srgb,currentColor 9%,transparent);
}
.statec .dot{width:6px;height:6px;border-radius:var(--r-full);background:currentColor;flex:none}
.pri{
  display:inline-flex;align-items:center;justify-content:center;flex:none;
  min-width:30px;padding:2px 7px;border-radius:var(--r-full);
  font-size:10px;font-weight:700;letter-spacing:.04em;white-space:nowrap;
}
.pri-p0{background:var(--bad);color:#fff}
.pri-p1{background:var(--warn-bg);color:var(--warn)}
.pri-p2{background:var(--info-bg);color:var(--info)}
.due{
  font-size:var(--text-xs);font-weight:600;color:var(--warn);background:var(--warn-bg);
  border-radius:var(--r-full);padding:2px 8px;white-space:nowrap;flex:none;
}
.due.ovd{color:var(--bad-strong);background:var(--bad-bg)}
.est{font-size:var(--text-xs);color:var(--tx3);white-space:nowrap;flex:none}
.tchip{font-size:var(--text-xs);font-weight:600;color:var(--warn);white-space:nowrap;flex:none}
.pips{letter-spacing:3px;font-size:10px;white-space:nowrap}
.cnt{color:var(--tx3);font-size:var(--text-sm);white-space:nowrap}

/* ---------- 10 SWEEP TABLES ---------- */
.sweep-row{display:flex;align-items:center;gap:10px;padding:7px 8px;font-size:var(--text-md);border-radius:var(--r-md)}
.sweep-row+.sweep-row{box-shadow:0 -1px 0 0 var(--line-soft)}
.sweep-row.head{
  font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;color:var(--tx3);
  padding-bottom:5px;border-bottom:1px solid var(--line);border-radius:0;box-shadow:none;
}
.sweep-row.head+.sweep-row{box-shadow:none}
.sweep-row.click{cursor:pointer;transition:background var(--t-fast)}
.sweep-row.click:hover{background:var(--sunken)}
.s-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.s-num{flex:0 0 6ch;text-align:right;white-space:nowrap}
.s-state{flex:0 0 17ch;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.s-c4{flex:0 0 4ch}.s-c5{flex:0 0 5ch}.s-c6{flex:0 0 6ch}.s-c7{flex:0 0 7ch}
.s-c8{flex:0 0 8ch}.s-c9{flex:0 0 9ch}.s-c10{flex:0 0 10ch}.s-c11{flex:0 0 11ch}
.s-c12{flex:0 0 12ch}.s-c14{flex:0 0 14ch}.s-c16{flex:0 0 16ch}
.s-r{text-align:right}.s-ctr{text-align:center}
.mx{flex:0 0 10ch;text-align:center}
.mx-y{color:var(--ok);font-weight:700}
.mx-n{color:var(--tx4)}
.cellbtn{cursor:pointer;border-bottom:1px dashed transparent;transition:border-color var(--t-fast)}
.cellbtn:hover{border-bottom-color:var(--line-strong)}
.lock{color:var(--tx4);cursor:not-allowed}

/* ---------- 11 TASK ROWS + CHECKBOX + OPS + AREAS ---------- */
.trow{
  display:flex;align-items:center;gap:10px;padding:6px 8px;min-height:36px;
  border-radius:var(--r-md);transition:background var(--t-fast);
}
.trow:hover{background:var(--sunken)}
.trow .tname{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.trow.x{color:var(--tx3)}
.trow.x .tname{text-decoration:line-through;color:var(--tx3)}
.trow.future .tname{color:var(--tx2)}
.trow[draggable="true"]{cursor:grab}
.trow.dragging{opacity:.45}
.trow.dragover{box-shadow:0 -2px 0 0 var(--accent)}
/* checkbox — JS emits an EMPTY <span class="cb">; states via classes */
.cb{
  position:relative;flex:none;width:18px;height:18px;border-radius:5px;cursor:pointer;
  border:1.5px solid var(--line-strong);background:var(--surface);
  display:inline-flex;align-items:center;justify-content:center;
  transition:border-color var(--t-fast),background var(--t-fast);
}
.cb::before{content:"";position:absolute;inset:-8px}   /* 34px touch target */
.cb:hover{border-color:var(--accent)}
.cb.lock{border-style:dashed;cursor:not-allowed;background:transparent}
.cb.lock:hover{border-color:var(--line-strong)}
.cb.lock svg{width:10px;height:10px;color:var(--tx4)}
.trow.x .cb,.cb.done{background:var(--ok-fill);border-color:var(--ok-fill)}
.trow.x .cb::after,.cb.done::after{
  content:"";width:5px;height:9px;margin-top:-2px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);
}
.trow.x .cb.lock{opacity:.7}
.rslabel{font-size:var(--text-xs);color:var(--tx3);white-space:nowrap;flex:none}
.rslabel.err{color:var(--bad-strong);font-weight:600}
.ops{margin-left:auto;display:flex;gap:2px;align-items:center;opacity:0;transition:opacity var(--t-fast)}
.trow:hover>.ops,.area-h:hover>.ops,.sweep-row:hover>.ops{opacity:1}
.ops button{
  border:0;background:none;color:var(--tx2);font:inherit;font-size:var(--text-sm);
  padding:3px 7px;border-radius:var(--r-sm);cursor:pointer;white-space:nowrap;
  display:inline-flex;align-items:center;gap:4px;
  transition:background var(--t-fast),color var(--t-fast);
}
.ops button:hover{background:var(--sunken);color:var(--tx1)}
.ops button.opx:hover{background:var(--bad-bg);color:var(--bad-strong)}
.ops button svg{width:13px;height:13px}
.area-h{
  display:flex;align-items:center;gap:10px;padding:9px 8px 5px;margin-top:6px;
  font-size:var(--text-md);font-weight:600;color:var(--tx1);border-radius:var(--r-md);
}
.area-h:hover{background:var(--sunken)}
.area-h .arrow{
  flex:none;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;
  color:var(--tx3);cursor:pointer;border-radius:4px;transition:transform var(--t-fast);
}
.area-h .arrow svg{width:12px;height:12px}
.area-h .arrow.open{transform:rotate(90deg)}
.area-h .grip{color:var(--tx4);cursor:grab;flex:none}
.area-h .grip svg{width:12px;height:12px}
.area-h .cnt{font-weight:400}
.area-h .cnt.push{margin-left:auto}
.area-body{margin:0 0 6px 9px;padding-left:14px;border-left:2px solid var(--line-soft)}
.repbox{
  display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:4px 0 8px;
  border:1px dashed var(--line-strong);border-radius:var(--r-md);
  padding:6px 10px;font-size:var(--text-sm);color:var(--tx2);
}
.addrow{display:flex;gap:8px;padding:6px 8px;align-items:center;color:var(--tx4);font-size:var(--text-md)}
.addrow input{flex:1}

/* ---------- 12 STAGE STEPS — the signature component ----------
   6 segments, 14×6px, 3px gap, 34px-tall invisible tap zones.
   passed = muted green · current = amber + ring · blocked-current = red + ring
   upcoming = neutral · done row = all solid green · read-only = no hover */
.steps{display:inline-flex;align-items:center;gap:3px;flex:none;margin:0 2px}
.steps .st{
  position:relative;width:14px;height:6px;border-radius:3px;
  background:var(--line);cursor:pointer;
  transition:background var(--t-fast),box-shadow var(--t-fast);
}
.steps .st::before{content:"";position:absolute;inset:-8px -2px}
.steps .st:hover{background:var(--tx4)}
.steps .st.was{background:var(--ok-mut)}
.steps .st.was:hover{background:var(--ok-fill)}
.steps .st.cur{background:var(--warn-fill);box-shadow:0 0 0 2px var(--warn-ring)}
.steps .st.cur.blkst{background:var(--bad);box-shadow:0 0 0 2px var(--bad-ring)}
.trow.x .steps .st.was,.trow.x .steps .st.cur{background:var(--ok-fill);box-shadow:none}
.steps.ro .st,.steps.ro .st:hover{cursor:default;background:var(--line)}
.steps.ro .st.was{background:var(--ok-mut)}
.steps.ro .st.cur{background:var(--warn-fill);box-shadow:none}
.steps.ro .st.cur.blkst{background:var(--bad)}

/* ---------- 13 KANBAN ---------- */
.board{
  display:flex;gap:12px;align-items:flex-start;overflow-x:auto;
  padding:2px 2px 10px;scroll-snap-type:x proximity;
}
.bcol{
  flex:1 1 180px;min-width:180px;scroll-snap-align:start;
  background:var(--sunken);border:1px solid transparent;border-radius:var(--r-xl);
  padding:8px;min-height:160px;transition:border-color var(--t-fast),background var(--t-fast);
}
.bcol-h{
  display:flex;align-items:center;gap:6px;padding:2px 6px 8px;white-space:nowrap;
  font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;color:var(--tx2);
}
.bcol-h .cnt{
  margin-left:auto;font-size:10px;font-weight:600;line-height:18px;padding:0 7px;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-full);color:var(--tx2);
}
.bcol.blk{background:var(--bad-bg)}
.bcol.blk .bcol-h{color:var(--bad-strong)}
.bcol.blk .bcol-h .cnt{color:var(--bad-strong);border-color:var(--bad-line)}
.bcol.dragover{border-color:var(--accent);background:var(--accent-soft)}
.bcard{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-xs);padding:10px 12px;margin-bottom:8px;cursor:grab;
  font-size:var(--text-md);transition:border-color var(--t-fast),box-shadow var(--t-fast);
}
.bcard:hover{border-color:var(--line-strong);box-shadow:var(--shadow-sm)}
.bcard.locked{cursor:default}
.bcard .bt{display:block;font-weight:500;line-height:1.4;margin:2px 0 8px;overflow-wrap:anywhere}
.bcard.x .bt{text-decoration:line-through;color:var(--tx3)}
.bcard .bt.amb{color:var(--warn)}
.bcard .age{float:right;font-size:var(--text-xs);color:var(--tx3)}
.bcard .age.old{color:var(--warn);font-weight:600}
.bcard .bl{float:right;color:var(--tx4);visibility:hidden;margin-left:6px}
.bcard .bl svg{width:11px;height:11px}
.bcard.locked:hover .bl{visibility:visible}
.bcard .av{width:18px;height:18px;font-size:9px}
.bcard.dragging{opacity:.45}

/* ---------- 14 PLAN — two-column layout + the week list ---------- */
/* pinned project goal */
.wkgoal .wkgoal-text{font-size:var(--text-lg);font-weight:600;line-height:1.5;color:var(--tx1)}
.wkgoal .wkgoal-text.unset{color:var(--tx3);font-weight:400}
.wkgoal .wkgoal-own{font-size:var(--text-sm);color:var(--tx3);margin-top:6px}
/* the week list */
.termhead{
  display:flex;align-items:baseline;gap:10px;padding:18px 2px 8px;
  font-size:var(--text-xs);font-weight:600;letter-spacing:.06em;color:var(--tx3);
}
.termhead:first-of-type{padding-top:2px}
.termhead .tname{font-size:var(--text-base);font-weight:650;letter-spacing:-.01em;color:var(--tx2)}
.termhead.on .tname{color:var(--accent-ink)}
.termhead .push{margin-left:auto}
.weeks{display:flex;flex-direction:column;gap:10px}
.wk{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);transition:border-color var(--t-fast)}
.wk:hover{border-color:var(--line-strong)}
.wk.now{border-color:var(--accent);box-shadow:var(--shadow-sm)}
.wk.now:hover{border-color:var(--accent)}
.wk.past .wk-h{opacity:.72}
.wk-h{display:flex;align-items:center;gap:12px;padding:12px 16px;cursor:pointer;min-height:48px}
.wk.now .wk-h{cursor:default}
.wk-dates{flex:none;width:110px;font-size:var(--text-xs);font-weight:600;letter-spacing:.03em;color:var(--tx3);white-space:nowrap}
.wk.now .wk-dates{color:var(--accent-ink)}
.wk-chip{
  flex:none;font-size:10px;font-weight:700;letter-spacing:.08em;color:#fff;
  background:var(--accent);border-radius:var(--r-full);padding:2px 9px;white-space:nowrap;
}
.wk-title{flex:1;min-width:0;font-size:var(--text-base);font-weight:500;color:var(--tx1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wk-title.unset{color:var(--tx3);font-weight:400}
.wk-prog{flex:none;display:flex;align-items:center;gap:8px;font-size:var(--text-xs);color:var(--tx2);white-space:nowrap}
.wk-prog .bar{width:64px}
.wk-caret{flex:none;width:14px;height:14px;color:var(--tx3);transition:transform var(--t-fast)}
.wk.open .wk-caret{transform:rotate(90deg)}
.wk-body{border-top:1px solid var(--line-soft);padding:8px 12px 12px}
.wk-body .subhead{font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;color:var(--tx3);padding:8px 4px 4px}

/* ---------- 15 TEAM GRIDS ---------- */
.attcell{flex:0 0 5ch;display:flex;justify-content:center;cursor:pointer}
.attstrip{flex:0 0 118px;display:flex;gap:2px;align-items:center}
.attcell.ro{cursor:default}
.att{
  width:20px;height:20px;border-radius:var(--r-full);flex:none;
  display:inline-flex;align-items:center;justify-content:center;
  font-size:10px;font-weight:700;
}
.st-p{background:var(--ok-bg);color:var(--ok)}
.st-s{background:none;border:1.5px solid var(--warn-fill);color:var(--warn)}
.st-b{background:var(--warn-fill);color:#fff}
.st-e{background:var(--info-bg);color:var(--info)}
.st-u{background:var(--bad);color:#fff}
.st-n{background:none;border:1.5px dashed var(--line-strong);color:var(--tx4)}
.hrcell{flex:0 0 5ch;text-align:right;white-space:nowrap;font-size:var(--text-md)}
.sel15{display:inline-flex;gap:4px}
.sel15 button{
  width:28px;height:28px;border:1px solid var(--line-strong);border-radius:var(--r-sm);
  background:var(--surface);color:var(--tx2);font:inherit;font-size:var(--text-sm);cursor:pointer;
  transition:background var(--t-fast),color var(--t-fast),border-color var(--t-fast);
}
.sel15 button:hover{border-color:var(--accent);color:var(--tx1)}
.sel15 button.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.daygrid{display:inline-flex;gap:3px;white-space:nowrap}
.daygrid .on,.daygrid .off{
  width:18px;height:18px;border-radius:var(--r-full);font-size:9px;font-weight:700;
  display:inline-flex;align-items:center;justify-content:center;
}
.daygrid .on{background:var(--accent-soft);color:var(--accent-ink)}
.daygrid .off{background:var(--sunken);color:var(--tx4)}
.daygrid .tg{cursor:pointer}
.daygrid .tg:hover{outline:1.5px solid var(--accent);outline-offset:0}

/* ---------- 16 PIVOTS (segmented control) ---------- */
.pivots{
  display:inline-flex;gap:2px;background:var(--sunken);border:1px solid var(--line);
  border-radius:9px;padding:2px;margin-bottom:14px;
}
.pv{
  height:26px;padding:0 12px;border:0;border-radius:7px;background:transparent;
  color:var(--tx2);font-size:var(--text-sm);font-weight:500;cursor:pointer;white-space:nowrap;
  transition:color var(--t-fast),background var(--t-fast);
}
.pv:hover{color:var(--tx1)}
.pv.on{background:var(--surface);color:var(--tx1);font-weight:600;box-shadow:var(--shadow-xs)}

/* ---------- 17 BUTTONS ---------- */
.tbtn{
  height:32px;padding:0 14px;border-radius:var(--r-md);cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;
  font:inherit;font-size:var(--text-md);font-weight:500;
  background:var(--surface);color:var(--tx1);border:1px solid var(--line-strong);
  transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast);
}
.tbtn:hover{background:var(--sunken)}
.tbtn:active{background:var(--line-soft)}
.tbtn svg{width:14px;height:14px}
.tbtn.primary,.tbtn.gold{background:var(--accent);border-color:var(--accent);color:#fff}
.tbtn.primary:hover,.tbtn.gold:hover{background:var(--accent-strong);border-color:var(--accent-strong)}
.tbtn.danger{background:transparent;color:var(--bad-strong);border-color:var(--bad-line)}
.tbtn.danger:hover{background:var(--bad);border-color:var(--bad);color:#fff}
.tbtn.ghost{background:transparent;border-color:transparent;color:var(--tx2)}
.tbtn.ghost:hover{background:var(--sunken);color:var(--tx1)}
.tbtn.sm{height:26px;padding:0 10px;font-size:var(--text-sm);border-radius:7px}
.tbtn.icon{width:32px;padding:0}
.tbtn.icon.sm{width:26px}
.tbtn.block{width:100%}

/* ---------- 18 INPUTS + SELECTS + SWITCH ---------- */
.tin{
  font:inherit;font-size:var(--text-md);color:var(--tx1);background:transparent;
  border:none;outline:none;caret-color:var(--accent);min-width:0;
}
.tin::placeholder{color:var(--tx4)}
.tin.boxed{
  height:32px;padding:0 10px;background:var(--surface);
  border:1px solid var(--line-strong);border-radius:var(--r-md);
  transition:border-color var(--t-fast),box-shadow var(--t-fast);
}
.tin.boxed:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}
.tin.inline{border-bottom:1px solid var(--line-strong);border-radius:0;padding:2px 0;min-width:8ch}
.tin.inline:focus{border-bottom-color:var(--accent)}
select.tsel{
  height:28px;padding:0 8px;font:inherit;font-size:var(--text-sm);color:var(--tx1);
  background:var(--surface);border:1px solid var(--line-strong);border-radius:7px;cursor:pointer;
}
select.tsel:focus{border-color:var(--accent);outline:none}
.formrow{display:flex;gap:10px;align-items:center;flex-wrap:wrap;padding:6px 0}
.formrow .fk{font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;color:var(--tx3)}
.switch{
  position:relative;width:36px;height:20px;flex:none;border:0;cursor:pointer;
  border-radius:var(--r-full);background:var(--line-strong);
  transition:background var(--t-med);
}
.switch::after{
  content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;
  border-radius:var(--r-full);background:#fff;box-shadow:var(--shadow-xs);
  transition:transform var(--t-med);
}
.switch[aria-pressed="true"]{background:var(--accent)}
.switch[aria-pressed="true"]::after{transform:translateX(16px)}

/* ---------- 19 MIND MAP (MAP tab) ---------- */
.map-viewport{
  position:relative;overflow:hidden;user-select:none;touch-action:none;cursor:grab;
  height:calc(100dvh - var(--header-h) - var(--tabs-h) - 24px);min-height:420px;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);
  background-image:radial-gradient(circle,var(--map-dot) 1px,transparent 1px);
  background-size:24px 24px;
}
.map-viewport.panning{cursor:grabbing}
.map-canvas{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}
.map-edges{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
.map-edges path{fill:none;stroke-width:2;stroke-linecap:round;opacity:.55}
.map-nodes{position:absolute;left:0;top:0}
.mm-node{
  position:absolute;height:40px;min-width:96px;padding:0 18px;
  display:flex;align-items:center;justify-content:center;white-space:nowrap;
  border-radius:var(--r-full);background:var(--node-c,var(--node-purple));
  color:#fff;font-size:14px;font-weight:500;
  box-shadow:var(--shadow-node);cursor:pointer;
  transition:box-shadow var(--t-fast);
}
.mm-node:hover{box-shadow:0 4px 10px rgba(16,16,20,.24)}
.mm-node.sel{box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--accent-ring),var(--shadow-node)}
.mm-node .mm-rename{
  background:transparent;border:none;outline:none;color:#fff;font:inherit;
  width:100%;text-align:center;caret-color:#fff;
}
.mm-node .mm-rename::placeholder{color:rgba(255,255,255,.6)}
.mm-collapse{
  position:absolute;right:-10px;top:50%;transform:translateY(-50%);
  width:20px;height:20px;border-radius:var(--r-full);cursor:pointer;
  background:var(--surface);border:1.5px solid var(--line-strong);color:var(--tx2);
  font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center;
  box-shadow:var(--shadow-xs);transition:border-color var(--t-fast),color var(--t-fast);
}
.mm-collapse:hover{border-color:var(--accent);color:var(--accent-ink)}
.mm-collapse svg{width:10px;height:10px}
.mm-bar{
  position:absolute;z-index:6;transform:translate(-50%,calc(-100% - 12px));
  display:flex;align-items:center;gap:6px;padding:6px 10px;
  background:var(--raised);border:1px solid var(--line);border-radius:var(--r-full);
  box-shadow:var(--shadow-md);
}
.mm-sw{width:18px;height:18px;border-radius:var(--r-full);border:0;cursor:pointer;flex:none;padding:0}
.mm-sw.on{box-shadow:0 0 0 2px var(--raised),0 0 0 3.5px var(--tx2)}
.mm-bar .div{width:1px;height:16px;background:var(--line);flex:none}
.mm-bar button.act{
  width:24px;height:24px;border:0;border-radius:var(--r-sm);background:none;color:var(--tx2);
  display:flex;align-items:center;justify-content:center;cursor:pointer;
  transition:background var(--t-fast),color var(--t-fast);
}
.mm-bar button.act:hover{background:var(--sunken);color:var(--tx1)}
.mm-bar button.act.del:hover{background:var(--bad-bg);color:var(--bad-strong)}
.mm-bar button.act svg{width:13px;height:13px}
.map-tools{position:absolute;top:12px;right:12px;z-index:5;display:flex;gap:6px;align-items:center}
.map-tools .tbtn{box-shadow:var(--shadow-xs)}
.map-zoom{
  height:32px;display:flex;align-items:center;padding:0 10px;
  background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-md);
  font-size:var(--text-xs);font-weight:600;color:var(--tx2);
}
.map-empty{
  position:absolute;inset:0;z-index:4;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:12px;text-align:center;
  color:var(--tx3);font-size:var(--text-md);padding:24px;
}
.map-empty svg{width:48px;height:48px;opacity:.35}

/* ---------- 20 NOTES CAPTURE ---------- */
.capture{
  display:flex;align-items:center;gap:10px;margin-bottom:14px;
  background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-lg);
  padding:4px 6px 4px 14px;box-shadow:var(--shadow-xs);
  transition:border-color var(--t-fast),box-shadow var(--t-fast);
}
.capture:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}
.capture input{flex:1;height:38px;font-size:var(--text-base);border:0;background:none;outline:none;color:var(--tx1)}
.capture input::placeholder{color:var(--tx4)}

/* ---------- 21 EMPTY STATES ---------- */
.empty{padding:18px 12px;text-align:center;font-size:var(--text-md);color:var(--tx3)}
.empty-lg{
  padding:40px 20px;display:flex;flex-direction:column;align-items:center;gap:10px;
  text-align:center;color:var(--tx3);font-size:var(--text-md);
}
.empty-lg svg{width:36px;height:36px;opacity:.35}
.empty-lg .tbtn{margin-top:4px}

/* ---------- 22 COMMAND PALETTE + TOAST ---------- */
.cmdk{
  position:fixed;inset:0;z-index:100;background:rgba(12,12,16,.42);
  display:flex;align-items:flex-start;justify-content:center;padding:12vh 16px 16px;
}
.cmdk-box{
  width:min(600px,100%);background:var(--raised);border:1px solid var(--line);
  border-radius:var(--r-xl);box-shadow:var(--shadow-lg);overflow:hidden;
  animation:view-in var(--t-med) both;
}
.cmdk-in{display:flex;align-items:center;gap:10px;padding:0 16px;border-bottom:1px solid var(--line-soft)}
.cmdk-in svg{width:15px;height:15px;color:var(--tx3);flex:none}
.cmdk-in input{flex:1;height:48px;font:inherit;font-size:15px;background:none;border:0;outline:none;color:var(--tx1)}
.cmdk-in input::placeholder{color:var(--tx4)}
.cliout{
  max-height:320px;overflow-y:auto;padding:12px 16px;
  font-family:var(--font-mono);font-size:var(--text-sm);line-height:1.65;
  white-space:pre-wrap;color:var(--tx2);
}
.cliout .cerr{color:var(--bad-strong)}
.cliout .cdim{color:var(--tx3)}
.cmdk-hint{
  display:flex;gap:14px;align-items:center;padding:8px 16px;
  border-top:1px solid var(--line-soft);font-size:var(--text-xs);color:var(--tx3);
}
.toast{
  position:fixed;left:50%;bottom:24px;transform:translateX(-50%) translateY(6px);
  z-index:120;pointer-events:none;opacity:0;
  background:var(--tx1);color:var(--bg);font-size:var(--text-sm);font-weight:500;
  padding:8px 14px;border-radius:var(--r-md);box-shadow:var(--shadow-md);
  max-width:min(480px,calc(100vw - 32px));white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  transition:opacity var(--t-med),transform var(--t-med);
}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.toast.err{background:var(--bad-strong);color:#fff}
:root[data-theme="dark"] .toast{background:#ededf1;color:#17171b}
:root[data-theme="dark"] .toast.err{background:var(--bad);color:#17171b}

/* ---------- 23 LOGIN + MODAL ---------- */
.tlogin{
  position:fixed;inset:0;z-index:90;background:var(--bg);
  display:flex;align-items:center;justify-content:center;padding:24px;overflow:auto;
}
.loginbox{
  width:min(380px,100%);background:var(--surface);border:1px solid var(--line);
  border-radius:var(--r-2xl);box-shadow:var(--shadow-lg);padding:28px;
}
.login-mark{
  width:40px;height:40px;border-radius:11px;background:var(--accent);color:#fff;
  font-size:16px;font-weight:700;display:flex;align-items:center;justify-content:center;
  margin:0 auto 14px;
}
.login-title{font-size:var(--text-xl);font-weight:650;text-align:center;color:var(--tx1)}
.login-sub{font-size:var(--text-sm);color:var(--tx3);text-align:center;margin:3px 0 18px}
.lrow{display:flex;flex-direction:column;gap:6px;padding:7px 0}
.lrow .k{font-size:var(--text-xs);font-weight:600;letter-spacing:.05em;color:var(--tx2)}
.loginbox select.tsel,.loginbox .tin.boxed{width:100%;height:36px}
.loginbox .tbtn{width:100%;height:36px;margin-top:12px}
.loginbox .tbtn.ghost{margin-top:6px}
.loginfoot{text-align:center;color:var(--tx4);font-size:var(--text-xs);padding-top:16px}
.overlay{
  position:fixed;inset:0;z-index:95;background:rgba(10,10,14,.45);
  display:flex;align-items:center;justify-content:center;padding:20px;
}
.modal{
  width:min(480px,100%);background:var(--raised);border:1px solid var(--line);
  border-radius:14px;box-shadow:var(--shadow-lg);padding:20px;
  animation:view-in var(--t-med) both;
}

/* ---------- 24 FOCUS + SCROLLBARS + MISC ---------- */
:where(button,select,a,[tabindex]):focus-visible{outline:2px solid var(--accent);outline-offset:2px}
input:focus-visible{outline:none}
.app *{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent}
.app ::-webkit-scrollbar{width:8px;height:8px}
.app ::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:4px}
.app ::-webkit-scrollbar-track{background:transparent}
@media (hover:none){
  .ops{opacity:1}
  .bcard .bl{visibility:visible}
}

/* ---------- 25 RESPONSIVE ---------- */
@media (max-width:900px){
  .stat-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}
  .kv .k{flex:0 0 140px}
}
@media (max-width:700px){
  .bcol{flex:0 0 210px;min-width:210px}
  .wk-prog .bar{display:none}
}
@media (max-width:600px){
  .hide-sm{display:none !important}
  .thead{gap:8px;padding:0 10px}
  .clockwrap{display:none}
  .viewas .vlab{display:none}
  .tview{padding:14px 12px 40px}
  .sl-k{flex:0 0 92px}
  .statline .sl-v{white-space:normal}
  .wk-h{flex-wrap:wrap;row-gap:4px}
  .wk-dates{width:auto}
  .wk-title{flex-basis:100%;order:5;white-space:normal}
}
@media (max-width:480px){
  .hide-xs{display:none !important}
  .tbox{padding:12px;border-radius:var(--r-lg)}
  .tbox-title{margin:-12px -12px 10px;padding:9px 12px}
  .stat-grid{grid-template-columns:repeat(2,1fr);gap:8px}
  .page-title{font-size:var(--text-xl)}
  .ttab{padding:0 10px}
  .kv .k{flex:0 0 110px}
  .map-viewport{height:calc(100dvh - var(--header-h) - var(--tabs-h) - 16px);border-radius:var(--r-lg)}
  .loginbox{padding:22px 18px}
}

/* ---------- 26 REDUCED MOTION ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none !important;transition:none !important}
}
