/* Lịch hôm nay (#today) — redesign v2. Ported from design handoff (design_handoff_today).
   Self-contained --td-* token set (dual theme), all rules scoped to #tab-today / .td2-*.
   Palette = handoff "theme.css v2"; kept scoped like weekplan.css so it can't clash. */
#tab-today{
  --td-font-serif:'Cormorant Garamond',Georgia,serif;
  --td-font-body:'Inter',-apple-system,system-ui,sans-serif;
  --td-font-mono:'JetBrains Mono',ui-monospace,Menlo,monospace;
  --td-font-kr:'Noto Sans KR','Apple SD Gothic Neo',sans-serif;
  --td-font-kr-serif:'Noto Serif KR',serif;
  --td-r-sm:6px;--td-r-md:9px;--td-r-lg:13px;
}
:root[data-theme="light"] #tab-today{
  --td-page:#EEF2F8;--td-page-top:#E3E9F2;--td-surface:#FFFFFF;--td-surface-2:#E8EDF5;--td-surface-3:#DDE4F0;--td-surface-4:#D2DBEB;
  --td-border:#CFD7E5;--td-border-soft:#DDE4F0;--td-border-iron:#CFD7E5;--td-border-strong:#B7C2D6;
  --td-ink:#0A1228;--td-ink-2:#4A5578;--td-ink-3:#6B7799;--td-ink-4:#A8B4D0;
  --td-primary:#2354E6;--td-primary-bright:#1A3FBF;--td-primary-soft:rgba(35,84,230,.10);
  --td-moss:#0DBF85;--td-moss-bright:#0A9E6E;--td-moss-soft:rgba(13,191,133,.12);
  --td-ember:#D89320;--td-ember-bright:#A86A08;--td-ember-soft:rgba(216,147,32,.14);
  --td-blood:#E63956;--td-blood-bright:#C01F3E;--td-blood-soft:rgba(230,57,86,.10);
  --td-shadow-card:0 1px 0 rgba(10,18,40,.02),0 8px 22px -12px rgba(10,18,40,.12);
  --td-shadow-pop:0 18px 44px -16px rgba(10,18,40,.20);
  --td-now:#E63956;
}
:root[data-theme="dark"] #tab-today{
  --td-page:#0A0A0A;--td-page-top:#121212;--td-surface:#1A1A1A;--td-surface-2:#050505;--td-surface-3:#242424;--td-surface-4:#2E2E2E;
  --td-border:#2A2A2A;--td-border-soft:#1F1F1F;--td-border-iron:#2A2A2A;--td-border-strong:#3A3A3A;
  --td-ink:#FFFFFF;--td-ink-2:#A8B4D0;--td-ink-3:#6B7799;--td-ink-4:#3D4866;
  --td-primary:#3A6BFF;--td-primary-bright:#6A90FF;--td-primary-soft:rgba(58,107,255,.16);
  --td-moss:#17E6A1;--td-moss-bright:#2EF5B8;--td-moss-soft:rgba(23,230,161,.13);
  --td-ember:#F5B544;--td-ember-bright:#FFC456;--td-ember-soft:rgba(245,181,68,.13);
  --td-blood:#FF5C7A;--td-blood-bright:#FF7D95;--td-blood-soft:rgba(255,92,122,.13);
  --td-shadow-card:0 1px 0 rgba(255,255,255,.03),0 10px 28px -16px rgba(0,0,0,.6);
  --td-shadow-pop:0 18px 48px -14px rgba(0,0,0,.62);
  --td-now:#FF5C7A;
}
#tab-today .mono{font-family:var(--td-font-mono);font-variant-numeric:tabular-nums}
#tab-today button{font-family:inherit}
:lang(ko) #tab-today .kr{font-family:var(--td-font-kr);letter-spacing:0}

/* ===================== LAYOUT SCOPE (#tab-today) ===================== */
.td2{max-width:1560px;margin:0 auto;padding:16px 22px 48px}

/* command bar */
.td2-bar{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.td2-brand{display:flex;align-items:center;gap:12px}
.td2-crest{width:38px;height:38px;border-radius:10px;background:radial-gradient(120% 120% at 30% 20%,var(--td-ember),transparent 72%),var(--td-surface-3);border:1px solid var(--td-border);display:grid;place-items:center;color:var(--td-ember-bright);font-family:var(--td-font-serif);font-weight:700;font-size:20px;flex:0 0 38px}
.td2-brand .t{line-height:1.15}
.td2-brand h1{margin:0;font-family:var(--td-font-serif);font-size:26px;font-weight:600;letter-spacing:.01em}
.td2-brand .sub{font-family:var(--td-font-mono);font-size:11px;color:var(--td-ink-3);letter-spacing:.06em;text-transform:uppercase}
.td2-spacer{flex:1}
.td2-live{display:inline-flex;align-items:center;gap:7px;font-family:var(--td-font-mono);font-size:11.5px;color:var(--td-ink-3);padding:0 4px}
.td2-live .pulse{width:8px;height:8px;border-radius:50%;background:var(--td-moss);box-shadow:0 0 0 0 var(--td-moss);animation:td2pulse 2.4s infinite}
.td2-live b{color:var(--td-ink-2);font-weight:600}
@keyframes td2pulse{0%{box-shadow:0 0 0 0 color-mix(in oklch,var(--td-moss) 60%,transparent)}70%{box-shadow:0 0 0 7px transparent}100%{box-shadow:0 0 0 0 transparent}}
.td2-icbtn{width:36px;height:36px;border-radius:var(--td-r-sm);border:1px solid var(--td-border);background:var(--td-surface);color:var(--td-ink-2);cursor:pointer;display:grid;place-items:center;font-size:15px;transition:120ms}
.td2-icbtn:hover{border-color:var(--td-border-strong);color:var(--td-ink)}
.td2-icbtn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--td-primary-soft);border-color:var(--td-primary)}

/* date nav */
.td2-datenav{display:flex;align-items:center;gap:2px;background:var(--td-surface);border:1px solid var(--td-border);border-radius:var(--td-r-sm);padding:3px;box-shadow:var(--td-shadow-card)}
.td2-datenav button{background:transparent;border:0;color:var(--td-ink-2);width:34px;height:34px;border-radius:4px;cursor:pointer;font-size:18px;font-family:var(--td-font-mono)}
.td2-datenav button:hover{background:var(--td-surface-3);color:var(--td-ink)}
.td2-datenav .lbl{padding:0 15px;text-align:center;min-width:150px}
.td2-datenav .lbl .dow{font-family:var(--td-font-serif);font-size:18px;font-weight:600;line-height:1.05;color:var(--td-ink)}
.td2-datenav .lbl .dt{font-family:var(--td-font-mono);font-size:11px;color:var(--td-ink-3);letter-spacing:.03em}
.td2-btn{display:inline-flex;align-items:center;gap:7px;height:40px;padding:0 15px;border-radius:var(--td-r-sm);border:1px solid var(--td-border);background:var(--td-surface);color:var(--td-ink);font-size:13px;font-weight:600;cursor:pointer;transition:120ms;white-space:nowrap;box-shadow:var(--td-shadow-card)}
.td2-btn:hover{border-color:var(--td-border-strong);background:var(--td-surface-3)}
.td2-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--td-primary-soft);border-color:var(--td-primary)}
.td2-btn .ic{font-size:14px;opacity:.8}
.td2-btn.today{color:var(--td-primary-bright);border-color:color-mix(in oklch,var(--td-primary) 45%,var(--td-border))}
.td2-tgl{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 12px;border-radius:var(--td-r-sm);border:1px solid var(--td-border);background:var(--td-surface);color:var(--td-ink-2);font-size:12.5px;font-weight:600;cursor:pointer;user-select:none}
.td2-tgl .k{font-family:var(--td-font-mono);font-size:11px;letter-spacing:.02em}
.td2-tgl .on{color:var(--td-ink)}.td2-tgl .off{color:var(--td-ink-4)}

/* ===================== GLANCE KPIs ===================== */
.td2-kpis{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:16px}
.td2-kpi{position:relative;background:var(--td-surface);border:1px solid var(--td-border);border-radius:var(--td-r-lg);padding:15px 16px 14px;box-shadow:var(--td-shadow-card);overflow:hidden;display:flex;flex-direction:column;gap:2px}
.td2-kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--kc,var(--td-ink-3))}
.td2-kpi .kh{display:flex;align-items:center;gap:8px;font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--td-ink-3)}
.td2-kpi .kh .d{width:9px;height:9px;border-radius:50%;background:var(--kc,var(--td-ink-3))}
.td2-kpi .kv{font-family:var(--td-font-serif);font-size:44px;font-weight:600;line-height:1;color:var(--td-ink);margin-top:6px}
.td2-kpi .kv small{font-family:var(--td-font-mono);font-size:14px;font-weight:500;color:var(--td-ink-3);margin-left:3px}
.td2-kpi .ksub{font-family:var(--td-font-mono);font-size:11.5px;color:var(--td-ink-3);margin-top:5px}
.td2-kpi.run{--kc:var(--td-moss)}
.td2-kpi.run .kv{color:var(--td-moss-bright)}
.td2-kpi.late{--kc:var(--td-ember)}
.td2-kpi.flag{--kc:var(--td-blood)}
.td2-kpi.done{--kc:var(--td-primary)}
.td2-kpi.cov{--kc:var(--td-ink-4)}
.td2-kpi.alarm{background:color-mix(in oklch,var(--kc) 8%,var(--td-surface));border-color:color-mix(in oklch,var(--kc) 38%,var(--td-border))}
.td2-kpi.alarm .kv{color:var(--kc)}
.td2-kpi.late.alarm .kv{color:var(--td-ember-bright)}
.td2-kpi.flag.alarm .kv{color:var(--td-blood-bright)}
/* mini coverage sparkline in cov kpi */
.td2-covbar{display:flex;align-items:flex-end;gap:1.5px;height:34px;margin-top:9px}
.td2-covbar span{flex:1;background:var(--td-ink-4);border-radius:1px;min-height:2px;opacity:.55}
.td2-covbar span.g{background:repeating-linear-gradient(45deg,var(--td-blood-soft),var(--td-blood-soft) 2px,transparent 2px,transparent 4px);border:1px solid color-mix(in oklch,var(--td-blood) 45%,transparent);opacity:1;height:100%!important}
.td2-covbar span.now{background:var(--td-moss);opacity:1}

/* ===================== TIMELINE HERO ===================== */
.td2-panel{background:var(--td-surface);border:1px solid var(--td-border);border-radius:var(--td-r-lg);box-shadow:var(--td-shadow-card);margin-bottom:16px;overflow:hidden}
.td2-phead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 16px;border-bottom:1px solid var(--td-border)}
.td2-phead .pt{font-family:var(--td-font-serif);font-size:20px;font-weight:600;color:var(--td-ink)}
.td2-phead .ptk{font-family:var(--td-font-mono);font-size:11px;color:var(--td-ink-3);letter-spacing:.04em}
.td2-legend{display:flex;align-items:center;gap:14px;margin-left:auto;flex-wrap:wrap}
.td2-legend .lg{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;color:var(--td-ink-3);white-space:nowrap}
.td2-legend .lg i{width:12px;height:12px;border-radius:3px;flex:0 0 12px}
.td2-legend .lg i.run{background:var(--td-moss)}
.td2-legend .lg i.sched{background:var(--td-surface-4);border:1px solid var(--td-border-strong)}
.td2-legend .lg i.done{background:var(--td-primary)}
.td2-legend .lg i.late{background:var(--td-ember)}
.td2-legend .lg i.flag{background:var(--td-blood)}
.td2-legend .lg i.gap{background:repeating-linear-gradient(45deg,var(--td-blood-soft),var(--td-blood-soft) 2px,transparent 2px,transparent 4px);border:1px dashed color-mix(in oklch,var(--td-blood) 45%,transparent)}

.td2-tlscroll{overflow-x:auto;overflow-y:hidden}
.td2-tl{position:relative;min-width:940px;padding:6px 16px 0}
.td2-axis{position:relative;height:20px;margin-left:0}
.td2-axis .tk{position:absolute;top:0;transform:translateX(-50%);font-family:var(--td-font-mono);font-size:10px;color:var(--td-ink-4)}
.td2-axis .tk.mj{color:var(--td-ink-3);font-weight:600}
.td2-lanes{position:relative}
.td2-gaps{position:absolute;inset:0;pointer-events:none;z-index:0}
.td2-gaps .gap{position:absolute;top:0;bottom:0;background:repeating-linear-gradient(45deg,var(--td-blood-soft),var(--td-blood-soft) 3px,transparent 3px,transparent 6px);border-left:1px dashed color-mix(in oklch,var(--td-blood) 40%,transparent);border-right:1px dashed color-mix(in oklch,var(--td-blood) 40%,transparent)}
.td2-grid{position:absolute;inset:0;pointer-events:none;z-index:0}
.td2-grid .v{position:absolute;top:0;bottom:0;width:1px;background:var(--td-border-soft)}
.td2-grid .v.mj{background:var(--td-border)}
.td2-lane{position:relative;height:34px;margin-bottom:5px;z-index:1}
.td2-blk{position:absolute;top:2px;bottom:2px;border-radius:5px;border:1px solid var(--bc,var(--td-border-strong));background:color-mix(in oklch,var(--bc) 20%,var(--td-surface));display:flex;align-items:center;gap:6px;padding:0 8px;cursor:default;overflow:hidden;min-width:26px;transition:120ms}
.td2-blk:hover{filter:brightness(1.08);box-shadow:0 4px 14px -6px var(--bc);z-index:5}
.td2-blk .bd{width:7px;height:7px;border-radius:50%;background:var(--bc);flex:0 0 7px}
.td2-blk .bn{font-size:11.5px;font-weight:600;color:var(--td-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.td2-blk .bt{font-family:var(--td-font-mono);font-size:10px;color:var(--td-ink-3);white-space:nowrap;margin-left:auto}
.td2-blk.run{--bc:var(--td-moss);background:var(--td-moss-soft);border-color:color-mix(in oklch,var(--td-moss) 55%,transparent)}
.td2-blk.run .bn{color:var(--td-moss-bright)}
.td2-blk.sched{--bc:var(--td-ink-3);background:var(--td-surface-3);border-color:var(--td-border-strong)}
.td2-blk.done{--bc:var(--td-primary);background:color-mix(in oklch,var(--td-primary) 13%,var(--td-surface));border-color:color-mix(in oklch,var(--td-primary) 40%,transparent)}
.td2-blk.late{--bc:var(--td-ember);background:var(--td-ember-soft);border-color:var(--td-ember)}
.td2-blk.late .bn{color:var(--td-ember-bright)}
.td2-blk.flag{--bc:var(--td-blood);background:var(--td-blood-soft);border-color:var(--td-blood);box-shadow:0 0 0 1px var(--td-blood)}
.td2-blk.flag .bn{color:var(--td-blood-bright)}
.td2-blk.dim{opacity:.5}
.td2-nowline{position:absolute;top:-4px;bottom:0;width:2px;background:var(--td-now);z-index:6;pointer-events:none}
.td2-nowline::before{content:"";position:absolute;top:-3px;left:-4px;width:10px;height:10px;border-radius:50%;background:var(--td-now);box-shadow:0 0 8px var(--td-now)}
.td2-nowline .nl{position:absolute;top:-22px;left:50%;transform:translateX(-50%);font-family:var(--td-font-mono);font-size:10px;font-weight:700;color:var(--on-now,#fff);background:var(--td-now);border-radius:20px;padding:2px 8px;white-space:nowrap;box-shadow:0 3px 8px -3px var(--td-now)}
.td2-tlfoot{display:flex;justify-content:space-between;font-family:var(--td-font-mono);font-size:10px;color:var(--td-ink-4);padding:2px 16px 10px}

/* ===================== BODY GRID (rail + groups) ===================== */
.td2-body{display:grid;grid-template-columns:1fr 372px;gap:16px;align-items:start}

/* attention rail */
.td2-rail{position:sticky;top:14px;background:var(--td-surface);border:1px solid var(--td-border);border-radius:var(--td-r-lg);box-shadow:var(--td-shadow-card);overflow:hidden}
.td2-rail .rh{display:flex;align-items:center;gap:9px;padding:13px 15px;border-bottom:1px solid var(--td-border);background:color-mix(in oklch,var(--td-blood) 7%,var(--td-surface))}
.td2-rail .rh .rt{font-family:var(--td-font-serif);font-size:19px;font-weight:600;color:var(--td-ink)}
.td2-rail .rh .rc{margin-left:auto;font-family:var(--td-font-mono);font-size:12px;font-weight:700;color:var(--on-cta,#fff);background:var(--td-blood);border-radius:20px;padding:2px 9px;min-width:24px;text-align:center}
.td2-rail .rh .rc.ok{background:var(--td-moss);color:var(--td-surface-2)}
.td2-rail .rbody{display:flex;flex-direction:column;gap:9px;padding:12px;max-height:calc(100vh - 120px);overflow-y:auto}
.td2-alert{position:relative;border:1px solid var(--ac);border-left-width:4px;border-radius:var(--td-r-md);background:color-mix(in oklch,var(--ac) 8%,var(--td-surface));padding:11px 12px;display:flex;flex-direction:column;gap:7px}
.td2-alert.late{--ac:var(--td-ember)}
.td2-alert.flag{--ac:var(--td-blood)}
.td2-alert .a1{display:flex;align-items:center;gap:8px}
.td2-alert .tag{font-family:var(--td-font-mono);font-size:9.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--on-cta,#fff);background:var(--ac);border-radius:4px;padding:2px 7px}
.td2-alert .uid{font-family:var(--td-font-mono);font-size:11px;font-weight:600;color:var(--td-ink-2);background:var(--td-surface-2);border:1px solid var(--td-border-soft);border-radius:4px;padding:1px 7px;white-space:nowrap}
.td2-alert .over{margin-left:auto;font-family:var(--td-font-mono);font-size:11px;font-weight:700;color:var(--ac)}
.td2-alert .a2{display:flex;align-items:baseline;gap:8px}
.td2-alert .who{font-size:14px;font-weight:600;color:var(--td-ink)}
.td2-alert .who.none{color:var(--td-ember-bright);font-style:italic}
.td2-alert .tm{font-family:var(--td-font-mono);font-size:11.5px;color:var(--td-ink-3);margin-left:auto}
.td2-alert .rsn{font-size:12px;color:var(--td-ink-2);line-height:1.4}
.td2-alert .rsn b{color:var(--ac)}
.td2-alert .acts{display:flex;gap:6px;margin-top:2px}
.td2-alert .mini{font-size:11px;font-weight:600;color:var(--td-ink-2);background:var(--td-surface-2);border:1px solid var(--td-border);border-radius:5px;padding:5px 10px;cursor:pointer;transition:100ms}
.td2-alert .mini:hover{border-color:var(--ac);color:var(--td-ink)}
.td2-alert .mini.pri{background:var(--ac);border-color:var(--ac);color:var(--on-cta,#fff)}
.td2-rail .empty{padding:26px 16px;text-align:center;color:var(--td-ink-3);font-size:13px}
.td2-rail .empty .big{font-family:var(--td-font-serif);font-size:20px;color:var(--td-moss-bright);margin-bottom:4px}

/* status groups (left) */
.td2-groups{background:var(--td-surface);border:1px solid var(--td-border);border-radius:var(--td-r-lg);box-shadow:var(--td-shadow-card);overflow:hidden}
.td2-grp{overflow:hidden}
.td2-ghead{display:flex;align-items:center;gap:10px;padding:11px 16px;border-bottom:1px solid var(--td-border);border-top:1px solid var(--td-border);background:var(--td-surface-2)}
.td2-grp:first-child .td2-ghead{border-top:0}
.td2-ghead .gd{width:11px;height:11px;border-radius:50%;background:var(--gc,var(--td-ink-3))}
.td2-ghead .gt{font-family:var(--td-font-serif);font-size:20px;font-weight:600;color:var(--td-ink)}
.td2-ghead .gk{font-family:var(--td-font-mono);font-size:11px;color:var(--td-ink-3);letter-spacing:.04em}
.td2-ghead .gn{margin-left:auto;font-family:var(--td-font-mono);font-size:13px;font-weight:700;color:var(--td-ink);background:var(--td-surface-2);border:1px solid var(--td-border);border-radius:20px;padding:3px 11px}
.td2-grp.run .gd{background:var(--td-moss)}
.td2-grp.run .td2-ghead{background:var(--td-moss-soft)}
.td2-grp.run .gn{color:var(--td-moss-bright)}
.td2-grp.sched .gd{background:var(--td-ink-3)}
.td2-grp.done .gd{background:var(--td-primary)}

/* ===== unified row board ===== */
.td2-rows{display:flex;flex-direction:column}
.td2-row{display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px;padding:11px 16px 11px 18px;border-bottom:1px solid var(--td-border-soft);position:relative;transition:background 100ms}
.td2-row:last-child{border-bottom:0}
.td2-row::before{content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--sc,var(--td-ink-4))}
.td2-row:hover{background:var(--td-surface-2)}
.td2-row .rdot{flex:0 0 9px;width:9px;height:9px;border-radius:50%;background:var(--sc,var(--td-ink-4))}
.td2-row.st-run .rdot{animation:td2pulse 2.4s infinite}
.td2-row .racct{flex:0 0 auto;display:flex;align-items:center;gap:8px;min-width:150px}
.td2-row .uid{font-family:var(--td-font-mono);font-size:11px;font-weight:600;color:var(--td-ink-2);background:var(--td-surface-3);border:1px solid var(--td-border-soft);border-radius:4px;padding:2px 7px;white-space:nowrap}
.td2-row .code{font-family:var(--td-font-mono);font-size:11.5px;color:var(--td-ink-3);letter-spacing:.02em}
.td2-row .rwho{flex:1 1 150px;min-width:108px;font-size:14.5px;font-weight:600;color:var(--td-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.td2-row .rwho.none{color:var(--td-ember-bright);font-style:italic;font-weight:500}
.td2-row .rtime{flex:0 0 auto;min-width:132px;font-family:var(--td-font-mono);font-size:12.5px;color:var(--td-ink-2);display:inline-flex;align-items:center;gap:6px}
.td2-row .rtime .arw{color:var(--td-ink-4)}
.td2-row .rtime .ovn{font-family:var(--td-font-mono);font-size:9.5px;font-weight:700;color:var(--td-ember);background:var(--td-ember-soft);border-radius:4px;padding:1px 5px}
.td2-row .rctx{flex:0 0 auto;margin-left:auto;display:flex;align-items:center;justify-content:flex-end;gap:9px;min-width:210px}
.td2-row .rbadge{font-family:var(--td-font-mono);font-size:9.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:3px 9px;border-radius:20px;white-space:nowrap}
.td2-row .metric{font-family:var(--td-font-mono);font-size:12.5px;color:var(--td-ink-2);white-space:nowrap}
.td2-row .metric b{color:var(--td-primary-bright);font-weight:700}
.td2-row .metric .lv{color:var(--td-ink-3)}
.td2-row .prog{flex:0 0 84px;height:6px;border-radius:3px;background:var(--td-surface-4);overflow:hidden}
.td2-row .prog i{display:block;height:100%;background:linear-gradient(90deg,var(--td-moss),var(--td-moss-bright))}
.td2-row .pctxt{font-family:var(--td-font-mono);font-size:11.5px;font-weight:600;color:var(--td-moss-bright);min-width:34px;text-align:right}
.td2-row .live{display:inline-flex;align-items:center;gap:5px;font-family:var(--td-font-mono);font-size:9.5px;font-weight:700;color:var(--td-moss-bright);text-transform:uppercase;letter-spacing:.06em}
.td2-row .live .p{width:6px;height:6px;border-radius:50%;background:var(--td-moss);animation:td2pulse 2.4s infinite}
/* row status colors */
.td2-row.st-run{--sc:var(--td-moss);background:color-mix(in oklch,var(--td-moss) 5%,transparent)}
.td2-row.st-run:hover{background:color-mix(in oklch,var(--td-moss) 9%,transparent)}
.td2-row.st-sched{--sc:var(--td-ink-3)}
.td2-row.st-done{--sc:var(--td-primary)}
.td2-row.st-late{--sc:var(--td-ember);background:var(--td-ember-soft)}
.td2-row.st-late:hover{background:color-mix(in oklch,var(--td-ember) 18%,transparent)}
.td2-row.st-flag{--sc:var(--td-blood);background:var(--td-blood-soft)}
.td2-row.st-flag:hover{background:color-mix(in oklch,var(--td-blood) 14%,transparent)}
.td2-row.st-muted{--sc:var(--td-ink-4);opacity:.6}
.td2-emptyrow{padding:16px;text-align:center;color:var(--td-ink-3);font-size:13px;font-style:italic}
/* status badge colors (shared) */
.sb-active{color:var(--td-moss-bright);background:var(--td-moss-soft)}
.sb-scheduled{color:var(--td-ink-3);background:var(--td-surface-3)}
.sb-late{color:var(--td-ember-bright);background:var(--td-ember-soft)}
.sb-completed{color:var(--td-primary-bright);background:var(--td-primary-soft)}
.sb-approved{color:var(--td-moss-bright);background:var(--td-moss-soft)}
.sb-flagged{color:var(--td-blood-bright);background:var(--td-blood-soft)}
.sb-rejected{color:var(--td-ink-3);background:var(--td-surface-3)}
.sb-cancelled{color:var(--td-ink-4);background:transparent;border:1px solid var(--td-border)}

/* toast */
.spin{display:inline-block;animation:td2spin .8s linear infinite}
@keyframes td2spin{to{transform:rotate(360deg)}}

@media (prefers-reduced-motion:reduce){#tab-today *{animation:none!important;transition:none!important}}
@media (max-width:1160px){
  .td2-kpis{grid-template-columns:repeat(3,1fr)}
  .td2-kpi.done{grid-column:span 1}
  .td2-body{grid-template-columns:1fr}
  .td2-rail{position:static;order:-1}
  .td2-rail .rbody{max-height:none}
}
@media (max-width:640px){
  .td2{padding:12px 12px 40px}
  .td2-kpis{grid-template-columns:repeat(2,1fr)}
  .td2-brand h1{font-size:22px}
}
