  /* main.css — layered as: reset/base → :root tokens → tab modules → polish/overlay.
     Keep new component colors on `var(--*)`; see docs/DESIGN_SYSTEM.md. */
  *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
  /* Kill the default mobile tap overlay (a black rectangle that ignores
     border-radius) so press feedback follows each component's own shape. */
  /* Reserve scrollbar space at all times so locking body scroll (when a
     modal opens) does NOT cause the page to shift horizontally as the
     scrollbar disappears. Paired with body.modal-locked below. */
  html{-webkit-tap-highlight-color:transparent;scrollbar-gutter:stable}
  /* Soft-keyboard inset variables live in `:root` with design tokens below;
     utils.js keeps them in sync via VisualViewport. */
  /* M5: 100vh on mobile Safari reports the *maximum* visible area including the
     address bar, which pushes content behind the toolbar. Prefer 100dvh (dynamic
     viewport) and fall back to 100vh for browsers that don't support dvh. */
  body{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;padding:24px 16px 88px;background:var(--bg-0);color:var(--text-1);font-family:var(--font-sans);font-size:var(--fs-14);line-height:1.5;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
  /* Modal-open body lock — set by Modal.open() in js/modal.js. position:fixed
     is the iOS-safe pattern (overflow:hidden alone doesn't stop scroll on
     iOS Safari). The Modal utility writes top:-scrollY inline so the page
     visually stays put; on unlock it restores scrollY via window.scrollTo. */
  body.modal-locked{position:fixed;left:0;right:0;width:100%;overflow:hidden}
  button{cursor:pointer;font-family:inherit;border:none;-webkit-tap-highlight-color:transparent}button:hover{filter:brightness(1.12)}
  .task-item .ta-btn:hover,.task-item .task-checkbox:hover,.task-item .task-chevron:hover{filter:none}
  /* Keyboard-focus outline. Modern browsers render `outline` so it follows
     the focused element's own `border-radius` automatically — no need (or
     correctness) in setting `border-radius:inherit` here, which would
     override each rounded control's own corners with the parent's (usually
     zero) value, producing a sharp rectangle on focused chips/pills. */
  *:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
  .task-checkbox:focus-visible{border-radius:50%}
  .toggle:focus-visible{border-radius:10px}
  input,select,textarea{font-family:inherit}
  ::selection{background:rgba(26,140,255,.25);color:var(--text-1)}
  /* Scrollbar — themed via tokens; light-theme override at body.light-theme below.
     A second hardcoded ::-webkit-scrollbar rule used to live below this and silently
     shadowed it at equal specificity (4px wide, hex color); removed so this wins. */
  *::-webkit-scrollbar{width:8px;height:8px}
  *::-webkit-scrollbar-track{background:transparent}
  *::-webkit-scrollbar-thumb{background:var(--bg-3);border-radius:4px}
  *::-webkit-scrollbar-thumb:hover{background:var(--border-strong)}
  input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none}input[type=number]{-moz-appearance:textfield}
  @keyframes pulse{0%,100%{opacity:1}50%{opacity:.55}}
  @keyframes pop{0%{transform:scale(1)}50%{transform:scale(1.15)}100%{transform:scale(1)}}
  @keyframes slideIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
  @keyframes checkPop{0%{transform:scale(1)}40%{transform:scale(1.25)}100%{transform:scale(1)}}
  /* Task-card insertion: slides in when window._lastAddedTaskId matches.
     Two stacked animations: slideIn (transform/opacity) AND a backdrop halo
     (taskJustAdded) that pulses --accent-bg, then decays to default. The
     halo gives the eye a clear target after the slide settles, especially
     on long lists where the new card lands offscreen-bottom and the
     scrollIntoView only just got us there. */
  .task-item--enter{animation:slideIn .24s ease-out both,taskJustAdded 1.4s ease-out .24s both}
  @keyframes taskJustAdded{
    0%   {box-shadow:0 0 0 0 var(--accent-bg),inset 0 0 0 2px var(--accent-border);background:var(--accent-bg)}
    35%  {box-shadow:0 0 0 6px transparent,    inset 0 0 0 2px var(--accent-border);background:var(--accent-bg)}
    100% {box-shadow:0 0 0 0  transparent,    inset 0 0 0 0 transparent;            background:var(--bg-1)}
  }
  @media (prefers-reduced-motion:reduce){
    .task-item--enter{animation:none}
  }

  :root{
    --kb-inset:0px;--vv-height:100dvh;
    /* Typography */
    --font-sans:-apple-system,BlinkMacSystemFont,"Inter","Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
    --font-mono:"SF Mono",ui-monospace,Menlo,Consolas,monospace;
    /* Surface colors — cool graphite/slate canvas for an Intel "Pentium" tech
       feel. --bg-0 matches index.html theme-color + manifest theme/background
       (#0a1019). Tuned to preserve AA text contrast against the cool base. */
    --bg-0:#0a1019;
    --bg-1:#111a27;
    --bg-2:#182536;
    --bg-3:#213348;
    /* --border lifted off --bg-3 so card edges stay visible in active states.
       --border-subtle keeps a near-invisible divider where intended. */
    --border:#2a3c52;
    --border-subtle:#1d2c3e;
    --border-strong:#38506b;
    /* Text — cool off-white, high-contrast on the slate --bg-0. --text-3 holds
       AA (~4.7:1 on #0a1019); --text-4 is non-text use (dividers, dots). */
    --text-1:#e9eff7;
    --text-2:#aab8cc;
    --text-3:#8593a8;
    --text-4:#647285;
    /* Accents — brand primary is electric Intel blue, paired with a cyan to
       form the iconic blue→cyan "Pentium" gradient. */
    --accent:#1a8cff;
    --accent-bg:rgba(26,140,255,.14);
    --accent-border:rgba(26,140,255,.34);
    /* Brand gradient — primary "+ Add", FAB, active nav, header mark. */
    --brand-grad:linear-gradient(135deg,#1a8cff 0%,#14b4e0 50%,#18d4e6 100%);
    --brand-grad-soft:linear-gradient(135deg,rgba(26,140,255,.18),rgba(24,212,230,.16));
    --text-on-brand:#04121f;
    --success:#2ecf73;
    --success-bg:rgba(46,207,115,.13);
    --success-border:rgba(46,207,115,.32);
    --warning:#ffb02e;
    --warning-bg:rgba(255,176,46,.14);
    --warning-border:rgba(255,176,46,.32);
    --danger:#ff5247;
    --danger-bg:rgba(255,82,71,.14);
    --danger-border:rgba(255,82,71,.34);
    --purple:#9b7bff;
    --purple-bg:rgba(155,123,255,.14);
    --purple-border:rgba(155,123,255,.32);
    --pink:#ff4d8d;
    /* Aliases — priority chips, hovers, semantic dots (see DESIGN_SYSTEM.md).
       Hues stay distinct (red / amber / blue / slate) for fast scanning. */
    --prio-urgent:var(--danger);
    --prio-high:var(--warning);
    --prio-normal:var(--accent);
    --prio-low:var(--text-3);
    --accent-hover:#3d9eff;
    /* Subtle theme-adaptive hover wash for low-emphasis controls (icon
       buttons, chip removers, menu cells) — replaces scattered hardcoded
       rgba(255,255,255,…) overlays so light theme behaves too. */
    --hover-soft:rgba(255,255,255,.06);
    /* Text/icon on saturated brand/success/warning fills (dark navy reads better
       on the bright blue/cyan/green/amber than white). */
    --text-on-accent:#04121f;
    --text-on-inverse:#fff;
    --starred:var(--warning);
    --panel-dot-tasks:var(--pink);
    --quick-accent:var(--accent);
    /* Phase colors (back-compat) — cool, tech tints. */
    --work:var(--accent);--work-glow:rgba(26,140,255,.4);--work-bg:#0d1c30;--work-border:#1c3a5a;
    --short:var(--success);--short-glow:rgba(46,207,115,.4);--short-bg:#0c241a;--short-border:#1a4a32;
    --long:var(--warning);--long-glow:rgba(255,176,46,.4);--long-bg:#241c0b;--long-border:#4a3a18;
    /* Life-area category accents — cool/tech variants for cohesion. */
    --cat-bodyMindSpirit:#9b7bff;
    --cat-relationships:#ff6b6b;
    --cat-community:#ffb02e;
    --cat-jobLearningFinances:#2ecf73;
    --cat-interests:#18d4e6;
    --cat-personalCare:#ff66b3;
    --cat-general:#8a9bb5;
    /* Radii */
    --r-sm:6px;--r-md:10px;--r-lg:14px;--r-xl:20px;
    /* Surface gradients — soften flat fills so panels/sidebar read as rounded,
       lightly-lit cards rather than hard boxes. A faint top→bottom wash plus a
       hairline top highlight gives depth without heavy borders. */
    --surface-grad:linear-gradient(180deg,#16212f,#0f1825);
    /* Faded dividers — fade out at both ends and stay translucent through the
       middle so a panel/sidebar edge reads as a soft seam, not a hard box line.
       `-h` is the horizontal twin for the top bar's lower edge.
       Use as `border-image: var(--divider-fade) 1`. */
    --divider-fade:linear-gradient(180deg,transparent,color-mix(in srgb,var(--border-subtle) 70%,transparent) 14%,color-mix(in srgb,var(--border) 55%,transparent) 50%,color-mix(in srgb,var(--border-subtle) 70%,transparent) 86%,transparent);
    --divider-fade-h:linear-gradient(90deg,transparent,color-mix(in srgb,var(--border-subtle) 70%,transparent) 8%,color-mix(in srgb,var(--border) 50%,transparent) 50%,color-mix(in srgb,var(--border-subtle) 70%,transparent) 92%,transparent);
    /* Spacing — 4-pt baseline. Migrate components incrementally; literals in
       legacy rules continue to work. */
    --space-1:2px; --space-2:4px; --space-3:6px; --space-4:8px;
    --space-5:10px;--space-6:12px;--space-7:14px;--space-8:16px;
    --space-9:24px;
    /* Fluid type ramp — clamp() so phones see the floor, big screens scale up,
       no value drops below 11px (the smallest accessible body text). */
    --fs-12:clamp(11px,0.4vw + 10px,12px);
    --fs-13:clamp(12px,0.5vw + 11px,13px);
    --fs-14:clamp(13px,0.6vw + 12px,15px);
    --fs-16:clamp(14px,0.8vw + 12px,16px);
    --fs-20:clamp(18px,1.5vw + 14px,22px);
    --fs-48:clamp(36px,6vw + 12px,52px);
    /* Animation easing language — unified across all transitions */
    --ease-out:cubic-bezier(0.16,1,0.3,1);
    --ease-in-out:cubic-bezier(0.45,0,0.55,1);
    --dur-fast:120ms;
    --dur-base:200ms;
    --dur-slow:320ms;
    /* Modal/overlay open transition — sits between base UI feedback and slow
       emphasis. Used by .modal-overlay (and .cmdk-overlay for its faster fade
       via --dur-fast). One token = one place to retune all modal motion. */
    --dur-modal:240ms;
    /* Elevation shadow language — one shadow depth per surface tier */
    --shadow-card:0 1px 3px rgba(0,0,0,.18),0 1px 2px rgba(0,0,0,.12);
    --shadow-raised:0 4px 16px rgba(0,0,0,.22),0 1px 4px rgba(0,0,0,.14);
    --shadow-overlay:0 16px 48px rgba(0,0,0,.42),0 4px 12px rgba(0,0,0,.22);
    /* Z-index stratification. Migrate hardcoded values as surfaces are touched.
       Dialog sits above modal so app-confirm/prompt overlays render over a task
       detail modal. Toast sits above dialog so destructive-action toasts remain
       visible. Cmdk sits above toast so the palette never gets occluded. */
    --z-sticky:5;
    --z-popover:100;
    --z-fab:500;
    --z-modal:1000;
    --z-dialog:9200;
    --z-toast:1200;
    --z-overlay:1450;
    --z-cmdk:1500;
    --z-skip-link:9999;
    /* Ring-time warn/done — token-driven so light-theme can override them.
       Amber + red clear AA against the dark --work-bg. */
    --ring-warn-color:#ffb02e;
    --ring-done-color:#ff5247;
    color-scheme:dark;
  }
  /* Life-area chip/stripe tokens via data-cat-id — no inline style= (CSP). */
  [data-cat-id="bodyMindSpirit"]{--sv-cat:var(--cat-bodyMindSpirit);--md-cat:var(--cat-bodyMindSpirit);--ui-chip-dot:var(--cat-bodyMindSpirit);--cat-stripe:var(--cat-bodyMindSpirit)}
  [data-cat-id="relationships"]{--sv-cat:var(--cat-relationships);--md-cat:var(--cat-relationships);--ui-chip-dot:var(--cat-relationships);--cat-stripe:var(--cat-relationships)}
  [data-cat-id="community"]{--sv-cat:var(--cat-community);--md-cat:var(--cat-community);--ui-chip-dot:var(--cat-community);--cat-stripe:var(--cat-community)}
  [data-cat-id="jobLearningFinances"]{--sv-cat:var(--cat-jobLearningFinances);--md-cat:var(--cat-jobLearningFinances);--ui-chip-dot:var(--cat-jobLearningFinances);--cat-stripe:var(--cat-jobLearningFinances)}
  [data-cat-id="interests"]{--sv-cat:var(--cat-interests);--md-cat:var(--cat-interests);--ui-chip-dot:var(--cat-interests);--cat-stripe:var(--cat-interests)}
  [data-cat-id="personalCare"]{--sv-cat:var(--cat-personalCare);--md-cat:var(--cat-personalCare);--ui-chip-dot:var(--cat-personalCare);--cat-stripe:var(--cat-personalCare)}
  [data-cat-id="general"]{--sv-cat:var(--cat-general);--md-cat:var(--cat-general);--ui-chip-dot:var(--cat-general);--cat-stripe:var(--cat-general)}
  body.light-theme{
    color-scheme:light;
    /* Cool silver/white canvas — clean tech surface with a faint blue tint. */
    --bg-0:#eef2f8;--bg-1:#ffffff;--bg-2:#f5f8fc;--bg-3:#dde5f0;
    /* Light-theme border lifted off --bg-3 to keep card edges visible. */
    --border:#cdd8e6;--border-subtle:#dde5f0;--border-strong:#bcc9da;
    /* Light surface gradients — keep panels bright, just a whisper of cool wash. */
    --surface-grad:linear-gradient(180deg,#ffffff,#f7faff);
    /* Brand on light: a deeper Intel blue so accent text/fills clear AA on white. */
    --accent:#0a6fd6;
    --accent-bg:rgba(10,111,214,.10);
    --accent-border:rgba(10,111,214,.30);
    --brand-grad:linear-gradient(135deg,#0a6fd6 0%,#0a9bcf 50%,#0aa6c4 100%);
    --brand-grad-soft:linear-gradient(135deg,rgba(10,111,214,.10),rgba(10,166,196,.10));
    /* Cool-grey text tuned to clear AA on the silver --bg-0. */
    --text-1:#0e1726;--text-2:#46566b;--text-3:#46566b;--text-4:#6a7a90;
    --work-bg:#eaf3fd;--work-border:#cbe1f7;
    --short-bg:#eafaf1;--short-border:#cdeedc;
    --long-bg:#fff6e6;--long-border:#fbe4ba;
    --success:#1f9d57;
    --success-bg:rgba(31,157,87,.12);
    --success-border:rgba(31,157,87,.30);
    --warning:#b5781a;
    --warning-bg:rgba(181,120,26,.13);
    --warning-border:rgba(181,120,26,.30);
    --danger:#cf3b34;
    --danger-bg:rgba(207,59,52,.12);
    --danger-border:rgba(207,59,52,.30);
    --purple:#6b4ed6;
    --purple-bg:rgba(107,78,214,.12);
    --purple-border:rgba(107,78,214,.30);
    --pink:#c43d72;
    --text-on-brand:#fff;
    --text-on-accent:#fff;
    --cat-bodyMindSpirit:#6b4ed6;
    --cat-relationships:#cf3b34;
    --cat-community:#b5781a;
    --cat-jobLearningFinances:#1f9d57;
    --cat-interests:#0a8ba6;
    --cat-personalCare:#bd3a78;
    --cat-general:#5a6b80;
    /* Ring-time on light --work-bg needs deeper hues to clear AA at large-text
       thresholds (3:1). Burnt amber + brick red both pass. */
    --ring-warn-color:#b5781a;
    --ring-done-color:#bf322b;
    --accent-hover:#0860bb;
    --hover-soft:rgba(14,23,38,.06);
    --prio-low:var(--text-4);
  }

  .shdr{display:flex;align-items:center;gap:8px;margin-bottom:12px}
  .sdot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
  /* Sdot color semantic variants */
  .sdot--quick{background:var(--quick-accent)}
  .sdot--sw{background:var(--purple)}
  .sdot--chimes{background:var(--accent)}
  .sdot--accent{background:var(--accent)}
  .sdot--history{background:var(--purple)}
  .sdot--long{background:var(--long)}
  .sdot--work{background:var(--work)}
  .sdot--short{background:var(--short)}
  /* ── Utility/semantic classes used to retire HTML inline style="..." ── */
  /* Layout */
  .row-flex{display:flex;align-items:center;gap:6px}
  .row-flex--gap-5{display:flex;gap:5px}
  .row-flex--gap-8{display:flex;align-items:center;gap:8px;width:100%;justify-content:space-between}
  .row-flex--end{display:flex;gap:6px;align-items:flex-end}
  .col-stretch{display:flex;flex-direction:column;align-items:flex-start;gap:6px;padding:12px 0 14px}
  .col-stretch--top{border-top:1px solid var(--border);margin-top:6px}
  .col-stretch--bot{border-bottom:1px solid var(--border)}
  .grow-120{flex:1 1 120px}
  .grow-100{flex:1 1 100px}
  .full-w{width:100%}
  .qa-fields-grid{display:flex;flex-wrap:wrap;gap:8px;width:100%;margin-top:4px}
  /* Typography */
  .text-hint{font-size:11px;color:var(--text-3);line-height:1.5;max-width:100%}
  .text-hint--block{font-size:11px;color:var(--text-3);line-height:1.5;margin:0 0 10px}
  .text-status{font-size:11px;font-weight:600;color:var(--text-3)}
  .text-italic-hint{font-size:11px;color:var(--text-3);margin-top:4px;font-style:italic}
  /* Phase colors (initial render — JS may swap on phase change) */
  .text-work{color:var(--work)}
  .text-short{color:var(--short)}
  .text-long{color:var(--long)}
  /* Cards */
  .card--work-phase{background:var(--work-bg);border:1px solid var(--work-border);margin-top:12px}
  .card--short-phase{background:var(--short-bg);border:1px solid var(--short-border);margin-top:12px}
  .card--long-phase{background:var(--long-bg);border:1px solid var(--long-border);margin-top:12px}
  .panel--timer-sub{padding:var(--space-8)}
  /* Modal field utilities */
  .mdName-input{flex:1;font-size:14px;font-weight:700}
  .app-dlg-msg--p{margin:0;font-size:14px;line-height:1.5}
  .app-dlg-msg--label{display:block;margin:0 0 10px;font-size:13px;white-space:pre-wrap;line-height:1.45}
  .app-prompt-textarea{width:100%;min-height:88px}
  .text-12-muted{color:var(--text-3);font-size:12px}
  .text-danger{color:var(--danger)}
  .text-3{color:var(--text-3)}
  .text-4{color:var(--text-4)}
  .mt-0{margin-top:0}
  .calfeed-worker-list{font-size:11px;line-height:1.6;padding-left:18px;color:var(--text-3)}
  .calfeed-worker-note{font-size:11px;color:var(--text-3)}
  .progress-bar{width:0%}
  .ts-color{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:5px;vertical-align:middle}
  /* Stopwatch layout classes (replaces inline styles) */
  .sw-body{text-align:center}
  .sw-display{font-size:42px;font-weight:800;color:var(--text-1);letter-spacing:3px;font-variant-numeric:tabular-nums;margin-bottom:12px}
  .sw-buttons{display:flex;gap:10px;justify-content:center}
  .sw-laps{margin-top:10px;display:flex;flex-direction:column;gap:3px;max-height:120px;overflow-y:auto}
  /* margin:0 defends against browser default h2/h3 margins — section labels
     are now real headings (h2.slbl) but visually identical. */
  .slbl{margin:0;font-size:11px;font-weight:500;letter-spacing:3px;text-transform:uppercase;color:var(--text-3)}
  .scnt{font-size:10px;color:var(--text-4);margin-left:auto}
  .small-btn{background:transparent;color:var(--text-4);font-size:9px;letter-spacing:1px;border:1px solid var(--border-subtle);border-radius:var(--r-sm);padding:4px 10px;margin-left:6px}

  .stitle{display:flex;align-items:center;gap:8px;margin-bottom:12px;cursor:pointer;user-select:none}
  .stitle.stitle-static{cursor:default}
  .sarrow{margin-left:auto;color:var(--text-4);font-size:12px;transition:transform var(--dur-base) var(--ease-out)}
  .sbody{overflow:hidden;transition:max-height .35s ease}
  /* Settings tab uses a static (non-collapsing) body — the tab itself is the
     toggle, so the legacy max-height accordion is opted out via this class. */
  .sbody.sbody-static{overflow:visible;max-height:none!important;transition:none}
  /* Settings body acts as a query container so the section grid + spacing
     adapt to the *panel* width rather than the viewport. The .container at
     line 850 caps app width at 960px, so on a 1920px monitor the panel is
     ~928px regardless; @container avoids a hard breakpoint here. */
  #settingsBody{container-type:inline-size;container-name:settings}
  .srow{display:flex;align-items:center;gap:12px;margin-bottom:10px;flex-wrap:wrap}
  .srow--full{display:block}
  .notif-status{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 10px;border-radius:var(--r-sm);font-size:var(--fs-12);line-height:1.45}
  .notif-status--ok{background:color-mix(in srgb, var(--success) 12%, transparent);border:1px solid color-mix(in srgb, var(--success) 30%, transparent);color:var(--text-1)}
  .notif-status--warn{background:color-mix(in srgb, var(--warning) 12%, transparent);border:1px solid color-mix(in srgb, var(--warning) 30%, transparent);color:var(--text-1)}
  .notif-status--err{background:color-mix(in srgb, var(--danger) 10%, transparent);border:1px solid color-mix(in srgb, var(--danger) 28%, transparent);color:var(--text-1)}
  .notif-status-btn{flex-shrink:0;padding:4px 10px;border-radius:6px;border:1px solid var(--accent);background:transparent;color:var(--accent);font-size:11px;font-weight:600;cursor:pointer}
  .notif-status-btn:hover{background:var(--accent);color:var(--text-on-accent)}
  .sr-lbl{font-size:10px;color:var(--text-3);letter-spacing:1px;min-width:120px}
  .sinput{width:56px;padding:6px 8px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-1);font-size:var(--fs-13);font-family:inherit;text-align:center;outline:0}
  .sinput:focus{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-bg)}
  select.sinput{width:auto;min-width:140px;text-align:left;padding-right:24px}
  .sunit{font-size:10px;color:var(--text-3)}
  .toggle{width:44px;height:26px;border-radius:13px;background:var(--bg-3);position:relative;cursor:pointer;transition:background var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out);border:1px solid var(--border-strong)}
  .toggle.on{background:var(--accent-bg);border-color:var(--accent-border)}
  .tknob{width:18px;height:18px;border-radius:50%;background:var(--text-2);position:absolute;top:3px;left:3px;transition:left var(--dur-base) var(--ease-out),background var(--dur-base) var(--ease-out)}
  .toggle.on .tknob{left:calc(100% - 21px);background:var(--accent)}

  .fl{display:block;font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;color:var(--text-3);margin-bottom:6px}
  .fi{padding:7px 8px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-1);font-size:12px;font-family:inherit;outline:0}
  .fi:focus{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-bg)}
  .fi-w{width:100%}.fi-n{width:48px}.fi-s{min-width:110px;width:auto;cursor:pointer;padding-right:24px}

  .iform{display:flex;flex-wrap:wrap;gap:var(--space-4);align-items:flex-end;padding:var(--space-6);background:var(--bg-1);border-radius:var(--r-md);border:1px solid var(--border-subtle);margin-bottom:10px}
  .iadd{padding:7px 14px;background:var(--success);border:none;border-radius:var(--r-sm);color:var(--text-on-accent);font-size:11px;font-weight:700;letter-spacing:1px}
  .iadd:hover{filter:brightness(1.08)}
  .iprev{padding:7px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-3);font-size:14px}
  .ilist{display:flex;flex-direction:column;gap:5px}
  .iitem{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:var(--r-sm);background:var(--bg-2);border:1px solid var(--border-subtle);transition:background var(--dur-slow) var(--ease-out),border-color var(--dur-slow) var(--ease-out)}
  .iitem.flash{background:var(--accent-bg);border-color:var(--accent-border)}
  .idot{width:7px;height:7px;border-radius:50%;background:var(--text-4);flex-shrink:0;transition:background var(--dur-slow) var(--ease-out),box-shadow var(--dur-slow) var(--ease-out)}
  .idot.active{background:var(--accent);box-shadow:0 0 6px color-mix(in srgb,var(--accent) 45%,transparent)}
  .idot.flash{background:var(--accent-hover);box-shadow:0 0 10px color-mix(in srgb,var(--accent) 55%,transparent)}
  .iinfo{flex:1;min-width:0}.iname{font-size:11px;font-weight:600;color:var(--text-2);word-break:break-word}
  .imeta{font-size:var(--fs-12);color:var(--text-3);margin-top:1px}
  .istat{text-align:right;flex-shrink:0}.ifires{font-size:13px;font-weight:700;color:var(--accent)}.ifires.flash{color:var(--accent-hover)}
  .inext{font-size:var(--fs-12);color:var(--text-3);margin-top:1px}
  .irm{width:22px;height:22px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border-subtle);border-radius:var(--r-sm);color:var(--text-4);font-size:11px;flex-shrink:0}
  .iempty{text-align:center;padding:10px 0;color:var(--text-4);font-size:10px;letter-spacing:1px}

  .task-form{display:flex;gap:8px;margin-bottom:12px}
  .task-input{flex:1;padding:9px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-1);font-size:12px;font-family:inherit;outline:0}
  .task-input:focus{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-bg)}
  .task-input::placeholder{color:var(--text-4)}
  /* .task-add canonical rule lives near the design-system primary buttons
     (line ~716). The legacy green-gradient rule that lived here was dead
     code — superseded by the cascade — and removed to avoid future
     confusion about which color the Add button should be. */
  /* Reserve vertical space so the first paint (empty taskList) matches the
     populated render that arrives once app.js executes — otherwise the FAB,
     footer and surrounding chrome shift down noticeably when N tasks land. */
  .task-list{display:flex;flex-direction:column;gap:6px;min-height:50vh;contain:layout}
  /* Mini-timer: body padding keeps content above the floating pill */
  body:has(.mini-timer.visible){padding-bottom:calc(80px + env(safe-area-inset-bottom,0px))}
  /* Task tags: cap width to prevent horizontal overflow when task has many tags */
  .task-tags-inline{display:flex;flex-wrap:wrap;gap:4px;max-width:100%}
  .task-tags-inline .tag-chip{max-width:100%;white-space:normal;word-break:break-word}
  /* Nested task tree */
  .task-chevron{width:16px;height:16px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:var(--text-3);cursor:pointer;transition:transform var(--dur-base) var(--ease-out);font-size:9px;user-select:none}
  .task-chevron:hover{color:var(--text-2)}
  .task-chevron.collapsed{transform:rotate(-90deg)}
  .task-chevron.leaf{visibility:hidden}
  .task-add-sub-btn{width:auto;height:24px;padding:0 8px;display:flex;align-items:center;justify-content:center;gap:3px;background:var(--success-bg);border:1px solid var(--success-border);border-radius:var(--r-sm);color:var(--success);font-size:11px;font-weight:700;letter-spacing:.5px;line-height:1;transition:background var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out);cursor:pointer;font-family:inherit}
  .task-add-sub-btn:hover{background:color-mix(in srgb,var(--success) 18%,transparent);color:var(--success);border-color:color-mix(in srgb,var(--success) 40%,var(--border))}
  .task-own-time{font-size:8px;color:var(--text-4);letter-spacing:1px}
  .task-subtask-form{display:flex;gap:6px;padding:8px 12px;background:var(--bg-0);border:1px dashed var(--border);border-radius:var(--r-sm);animation:slideIn var(--dur-fast) var(--ease-out)}
  .task-sub-input{flex:1;padding:6px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-1);font-size:11px;font-family:inherit;outline:0}
  .task-sub-input:focus{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-bg)}
  .task-sub-btns{display:flex;gap:4px;flex-shrink:0}
  .task-sub-btn{padding:6px 12px;border-radius:999px;font-size:10px;font-weight:700;letter-spacing:1px;border:none;font-family:inherit;cursor:pointer}
  .task-sub-add{background:var(--accent);color:var(--text-on-accent)}
  .task-sub-cancel{background:var(--bg-2);color:var(--text-3);border:1px solid var(--border)}
  .task-breadcrumb{font-size:9px;color:var(--text-3);letter-spacing:1px;margin-right:6px;opacity:.7}

  /* ========== ClickUp-style Task Manager ========== */
  /* Lists (projects) bar */
  .lists-bar{display:flex;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-5) var(--space-6);background:var(--bg-1);border-radius:var(--r-md);border:1px solid var(--border-subtle);margin-bottom:10px;align-items:center}
  /* .list-chip base + active states consolidated with `.ui-chip` in the design-system block */
  .list-chip .lc-dot{width:8px;height:8px;border-radius:50%}
  .list-chip .lc-count{font-size:9px;opacity:.7;padding:1px 5px;background:rgba(0,0,0,.3);border-radius:8px}
  .list-chip .lc-rm{margin-left:4px;opacity:0;color:var(--danger);font-size:10px;transition:opacity var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out)}
  .list-chip:hover .lc-rm{opacity:.5}
  .list-chip .lc-rm:hover{opacity:1;color:var(--danger)}
  .list-chip .lc-edit{margin-left:4px;opacity:0;color:var(--text-3);font-size:10px;transition:opacity var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out);cursor:pointer}
  .list-chip:hover .lc-edit{opacity:.5}
  .list-chip .lc-edit:hover{opacity:1;color:var(--accent)}
  .list-chip--all{font-style:italic}
  .list-add{padding:6px 10px;background:transparent;border:1px dashed var(--border-strong);border-radius:var(--r-sm);color:var(--text-3);font-size:11px;font-weight:600;cursor:pointer;font-family:inherit}
  .list-add:hover{border-color:var(--accent);color:var(--accent)}
  .list-new-form{display:flex;gap:6px;align-items:center}
  .list-new-input{padding:5px 8px;background:var(--bg-2);border:1px solid var(--accent-border);border-radius:var(--r-sm);color:var(--text-1);font-size:11px;font-family:inherit;outline:0;width:120px}

  /* Task toolbar: search, filter, sort, view */
  .task-toolbar{display:flex;gap:var(--space-3);flex-wrap:wrap;padding:var(--space-4) var(--space-5);background:var(--bg-1);border-radius:var(--r-md);border:1px solid var(--border-subtle);margin-bottom:10px;align-items:center}
  .task-search{flex:1;min-width:140px;padding:6px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;color:var(--text-2);font-size:11px;font-family:inherit;outline:0}
  .task-search:focus{border-color:var(--accent-border)}
  .task-tb-sel{padding:6px 8px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:10px;font-family:inherit;cursor:pointer;outline:0}
  .task-tb-sel:focus{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-bg)}
  /* (Old .view-toggle removed — view switching is now the always-visible
     .view-tabs strip.) */

  /* ── Compact filter bar ─────────────────────────────────────────────────
     Replaces the five stacked scroll strips. Four triggers; each opens a
     bottom sheet (lists/views, tags, view+sort) or expands inline search.
     Labels reflect live filter state via syncFilterBar(). */
  .filter-bar{
    display:flex;align-items:center;gap:6px;
    margin:0 0 8px;padding:4px;
    background:var(--bg-1);
    border:1px solid var(--border-subtle);
    border-radius:var(--r-md);
  }
  .fb-btn{
    display:flex;align-items:center;gap:6px;
    padding:8px 12px;min-height:40px;
    background:var(--bg-2);
    border:1px solid var(--border);
    border-radius:var(--r-sm);
    color:var(--text-2);font-size:12px;font-weight:600;
    font-family:inherit;cursor:pointer;transition:background var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out);
    min-width:0;
    -webkit-user-select:none;user-select:none;
  }
  .fb-btn:hover{
    background:var(--bg-3);color:var(--text-1);
    border-color:var(--border-strong);
  }
  /* .active = this trigger has a filter applied — accent-tinted so an applied
     filter reads at a glance, clearly distinct from a plain hover. */
  .fb-btn.active{
    background:var(--accent-bg);color:var(--accent);
    border-color:var(--accent-border);
  }
  .fb-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .fb-btn .fb-ic{font-size:14px;opacity:.85;flex-shrink:0}
  .fb-btn .fb-lbl{
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  }
  /* Lists trigger grows to absorb slack; tags trigger is content-sized; the
     search icon stays square; the view trigger hugs the right edge. */
  .fb-btn#fbLists{flex:1 1 auto}
  .fb-btn#fbTags{flex:1 1 0;min-width:0}
  .fb-btn--icon{flex:0 0 auto;justify-content:center;padding:8px 12px}
  .fb-btn--view{
    flex:0 0 auto;
    position:relative;
    gap:10px;
    padding-inline-end:12px;
  }
  /* "+ Filter" builder trigger — subtle accent so the add affordance reads as
     an action, distinct from the neutral view/list triggers. */
  .fb-btn--addfilter{flex:0 0 auto;color:var(--accent)}
  .fb-btn--addfilter .fb-ic{font-weight:700}
  .fb-btn--addfilter:hover{border-color:var(--accent-border);background:var(--accent-bg)}
  /* Badge anchored so adding a digit never shifts label width */
  .fb-btn--view .ft-count{
    position:absolute;top:6px;right:6px;
    background:var(--accent);color:var(--text-on-accent);
    font-size:10px;font-weight:700;
    min-width:18px;height:18px;padding:0 5px;border-radius:9px;
    display:inline-flex;align-items:center;justify-content:center;
  }
  @media (max-width:480px){
    .filter-bar{
      display:grid;
      grid-template-columns:1fr 1fr;
      grid-template-rows:auto auto;
      gap:8px;
      align-items:stretch;
    }
    .fb-btn#fbLists{grid-column:1;grid-row:1;flex:none;width:100%;justify-content:flex-start;}
    .fb-btn#fbTags{grid-column:2;grid-row:1;flex:none;width:100%;justify-content:flex-start;}
    .fb-btn#fbSearch{grid-column:1;grid-row:2;flex:none;width:100%;min-height:44px;}
    .fb-btn#fbView{grid-column:2;grid-row:2;flex:none;width:100%;min-height:44px;justify-content:flex-start;}
  }

  /* ── Filter/options sheets ─────────────────────────────────────────────
     Reuse the .modal-overlay bottom-sheet chrome; just widen content
     spacing and let the chips wrap to full width (no clipping). */
  .sheet .modal-body{display:flex;flex-direction:column;gap:6px}
  .sheet-section-lbl,.tags-sheet-lbl{
    font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;
    color:var(--text-3);margin:8px 0 2px;
  }
  .sheet-section-lbl:first-child,.tags-sheet-lbl:first-child{margin-top:0}
  /* Inside a sheet, lists/views/tags wrap and show full labels — overriding
     the mobile horizontal-scroll + edge-fade mask used elsewhere. */
  .sheet .smart-views,
  .sheet .lists-bar{
    flex-wrap:wrap!important;overflow:visible!important;
    -webkit-mask-image:none!important;mask-image:none!important;
    background:transparent;border:0;padding:0;margin:0;
  }
  .sheet .smart-views--collapsed .sv-chip{display:inline-flex!important}
  .sheet .sv-chip,
  .sheet .list-chip{flex-shrink:1;white-space:normal}
  .sheet .task-toolbar{background:transparent;border:0;padding:0;margin:0;flex-direction:column;align-items:stretch;gap:8px}
  .sheet .sv-chip:not(.sv-chip--cat){
    font-size:12px;font-weight:500;text-transform:none;letter-spacing:0;
    background:var(--bg-2);border-color:var(--border);color:var(--text-2);
    padding:8px 14px;line-height:1.25;
  }
  .sheet .sv-chip:not(.sv-chip--cat):hover{
    background:var(--bg-3);color:var(--text-1);border-color:var(--border);
  }
  .sheet .sv-chip:not(.sv-chip--cat).active{
    background:var(--bg-3);color:var(--text-1);border-color:var(--border-strong);
    font-weight:600;
    box-shadow:none;
  }

  /* Compact today banner (when shown) */
  .today-banner-compact{
    padding:8px 12px!important;
    background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 6%,transparent),color-mix(in srgb,var(--success) 4%,transparent))!important;
    border-radius:8px!important;
    margin-bottom:8px!important;
    gap:8px!important;
  }
  .today-banner-compact .tb-num{font-size:20px!important;line-height:1!important}
  .today-banner-compact .tb-lbl{font-size:10px!important;opacity:.8}
  .today-banner-compact .tb-divider{width:1px;background:var(--border);opacity:.5}

  /* Status badge */
  .status-badge{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:9px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;cursor:pointer;transition:.15s;border:1px solid;font-family:inherit;white-space:nowrap;background:transparent;color:inherit}
  .status-badge:hover{filter:brightness(1.15)}
  .status-open{background:var(--accent-bg);color:var(--text-2);border-color:var(--accent-border)}
  .status-progress{background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);border-color:var(--accent-border)}
  .status-review{background:var(--purple-bg);color:var(--purple);border-color:var(--purple-border)}
  .status-blocked{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-border)}
  .status-done{background:var(--success-bg);color:var(--success);border-color:var(--success-border)}

  /* Priority flag */
  .priority-flag{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:4px;cursor:pointer;transition:.15s;font-size:11px;line-height:1;font-family:inherit;border:none;background:transparent;flex-shrink:0}
  .priority-flag:hover{background:var(--hover-soft)}
  .priority-urgent{color:var(--prio-urgent)}
  .priority-high{color:var(--prio-high)}
  .priority-normal{color:var(--prio-normal)}
  .priority-low{color:var(--prio-low)}
  .priority-none{color:var(--text-4)}

  /* Date chip (single component — list, board, palette) */
  .date-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:999px;font-size:10px;font-weight:600;letter-spacing:.02em;white-space:nowrap;background:var(--bg-2);color:var(--text-2);border:1px solid var(--border)}
  .date-chip--overdue{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-border);animation:pulse 2.5s ease-in-out infinite}
  .date-chip--today{background:var(--warning-bg);color:var(--warning);border-color:var(--warning-border)}
  .date-chip--soon{background:var(--accent-bg);color:var(--accent);border-color:var(--accent-border)}
  .date-chip--future{background:var(--bg-2);color:var(--text-3);border-color:var(--border);font-weight:500}

  /* Tag chips */
  .tag-chip{display:inline-flex;align-items:center;padding:1px 6px;border-radius:999px;font-size:8px;font-weight:700;letter-spacing:1px;text-transform:uppercase;background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-border)}

  /* Task row extended (clickable open detail) */
  .task-item.clickable{cursor:pointer}
  .task-item.clickable:hover{background:var(--bg-2)}
  .task-item.completed{opacity:.55}
  .task-item.completed .task-name{text-decoration:line-through}
  .task-item.overdue{border-left-color:var(--danger)!important}
  .task-meta-row{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:4px}
  /* Time-tracked pill — inline after the task name when the user is
     filtering or sorting by duration / completion. Tabular figures so
     digits line up across rows. */
  .task-duration-pill{display:inline-flex;align-items:center;margin-left:6px;padding:1px 6px;font-size:10px;color:var(--text-3);background:var(--bg-2);border:1px solid var(--border-subtle);border-radius:999px;font-variant-numeric:tabular-nums;white-space:nowrap}
  /* .task-checkbox is defined further below in the themed component block —
     the legacy 18px/hex-bordered rule that used to live here was dead code
     (shadowed by source order) and has been removed. */
  .task-estimate{font-size:9px;color:var(--text-3);letter-spacing:.5px}
  .task-desc-preview{font-size:10px;color:var(--text-3);font-style:italic;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}

  /* Task Detail Modal — state-driven (transition), not one-shot (animation).
     The overlay stays mounted at all times; only opacity/visibility/pointer-events
     change with .open. This eliminates the display:none → display:flex flip
     that races the keyframe in the same frame (the historical jitter cause).
     backdrop-filter is deferred via .backdrop-ready (set on transitionend) so
     the GPU does not composite a blur layer during the open transition. */
  .modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:rgba(0,0,0,.75);z-index:var(--z-modal);display:flex;align-items:flex-start;justify-content:center;padding:40px 16px;padding-bottom:calc(40px + var(--kb-inset, 0px));overflow-y:auto;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--dur-modal) var(--ease-out),visibility 0s linear var(--dur-modal)}
  .modal-overlay.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity var(--dur-modal) var(--ease-out),visibility 0s linear 0s}
  .modal-overlay.backdrop-ready{backdrop-filter:blur(4px)}
  @keyframes fadeIn{from{opacity:0}to{opacity:1}}
  .modal{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-lg);width:100%;max-width:560px;box-shadow:var(--shadow-overlay);transform:translateY(-20px);opacity:0;transition:transform var(--dur-modal) var(--ease-out),opacity var(--dur-modal) var(--ease-out)}
  .modal-overlay.open .modal{transform:translateY(0);opacity:1}
  /* Side-peek drawer (≥900px): the task editor docks to the right edge as a
     full-height panel so the task list stays visible behind it (Linear "peek"
     model) instead of a centered dialog that blocks the list. Narrow / touch
     keep the centered dialog + bottom-sheet behaviour untouched. Scoped to
     #taskModal so other modals (bulk import, confirm) stay centered. */
  @media (min-width:900px){
    #taskModal.modal-overlay{justify-content:flex-end;align-items:stretch;padding:0;overflow:hidden;background:rgba(0,0,0,.45)}
    #taskModal .modal{width:480px;max-width:46vw;height:100%;max-height:100%;border-radius:0;border-top:none;border-right:none;border-bottom:none;display:flex;flex-direction:column;transform:translateX(100%);opacity:1}
    #taskModal.modal-overlay.open .modal{transform:translateX(0)}
    #taskModal .modal-head,#taskModal .modal-foot{flex-shrink:0}
    #taskModal .modal-body{max-height:none;flex:1 1 auto}
    body.light-theme #taskModal.modal-overlay{background:rgba(15,23,42,.32)}
  }
  /* prefers-reduced-motion: collapse modal/overlay transitions to ~instant.
     Modal.open's onOpen callback still fires correctly under reduced motion
     thanks to its transitionend listener + 400ms safety timeout fallback. */
  @media (prefers-reduced-motion:reduce){
    .modal-overlay,
    .modal-overlay.open,
    .modal-overlay .modal,
    .modal-overlay.open .modal,
    .cmdk-overlay,
    .cmdk-overlay.open,
    .what-next-overlay,
    .what-next-overlay.open{
      transition-duration:.01ms!important;
    }
  }
  .modal-head{display:flex;align-items:center;gap:10px;padding:var(--space-7) var(--space-9);border-bottom:1px solid var(--border-subtle)}
  .modal-close{margin-inline-start:auto;width:28px;height:28px;background:transparent;border:1px solid var(--border-strong);border-radius:6px;color:var(--text-3);font-size:14px;cursor:pointer;font-family:inherit}
  .modal-close:hover{color:var(--danger);border-color:var(--danger-border)}
  .modal-body{padding:16px 18px;max-height:70vh;max-height:min(70vh, calc(var(--vv-height, 70dvh) - 160px));overflow-y:auto}
  .mfield{margin-bottom:14px}
  .mfield-lbl{display:block;font-size:9px;color:var(--text-3);letter-spacing:1.5px;text-transform:uppercase;font-weight:700;margin-bottom:6px}
  .mfield-in{width:100%;padding:8px 12px;background:var(--bg-0);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-1);font-size:12px;font-family:inherit;outline:0;box-sizing:border-box}
  .mfield-in:focus{border-color:var(--accent-border);box-shadow:0 0 0 2px var(--accent-bg)}
  .mfield-textarea{width:100%;padding:8px 12px;background:var(--bg-0);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:11px;font-family:inherit;outline:0;box-sizing:border-box;min-height:80px;resize:vertical;line-height:1.5}
  .mfield-row{display:flex;gap:10px;flex-wrap:wrap}
  .mfield-row > .mfield{flex:1;min-width:130px;margin-bottom:0}
  .mfield-chips{display:flex;gap:6px;flex-wrap:wrap}
  .mfield-chip-btn{padding:5px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:10px;font-weight:600;letter-spacing:.5px;cursor:pointer;font-family:inherit;transition:background var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out)}
  .mfield-chip-btn.active{background:var(--accent-bg);color:var(--accent);border-color:var(--accent-border)}
  .mfield-chip-btn:hover:not(.active){color:var(--text-1);border-color:var(--accent-border)}
  .tags-editor{display:flex;gap:4px;flex-wrap:wrap;align-items:center}
  .tag-edit-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;font-size:9px;font-weight:700;letter-spacing:1px;text-transform:uppercase;background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-border)}
  .tag-edit-chip .tag-rm{cursor:pointer;color:var(--danger);margin-left:2px;background:transparent;border:0;padding:0;font:inherit}
  .tag-edit-chip .tag-rm:focus-visible{outline:2px solid var(--accent);outline-offset:1px;border-radius:3px}
  .tag-input{padding:3px 8px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-md);color:var(--text-2);font-size:10px;font-family:inherit;outline:0;width:80px}
  .modal-stat{display:flex;gap:12px;padding:10px 14px;background:var(--bg-0);border-radius:var(--r-sm);margin-bottom:14px;font-size:10px;color:var(--text-3);letter-spacing:.5px}
  .modal-stat b{color:var(--text-2);font-weight:700}
  .modal-foot{display:flex;gap:8px;padding:12px 18px;border-top:1px solid var(--border-subtle);justify-content:flex-end}
  .mfoot-btn{padding:7px 16px;border-radius:var(--r-sm);font-size:10px;font-weight:700;letter-spacing:1px;border:none;cursor:pointer;font-family:inherit}
  .mfoot-save{background:var(--accent);color:var(--text-on-accent)}
  .mfoot-save:hover{background:var(--accent-hover)}
  .mfoot-del{background:var(--danger-bg);color:var(--danger);border:1px solid var(--danger-border)}
  .mfoot-cancel{background:var(--bg-2);color:var(--text-3);border:1px solid var(--border)}

  /* Kanban Board View */
  .board-view{display:flex;gap:10px;overflow-x:auto;padding-bottom:8px;min-height:300px}

  /* Subtask disclosure on a board card */
  .board-subs-toggle{
    display:flex;align-items:center;gap:6px;width:100%;margin-top:8px;
    padding:6px 8px;min-height:32px;
    background:var(--bg-2);border:1px solid var(--border);
    border-radius:var(--r-sm);color:var(--text-2);
    font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:background var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out);text-align:start;
  }
  .board-subs-toggle:hover{background:var(--bg-3);color:var(--text-1)}
  .board-subs-toggle .bst-caret{transition:transform .15s;display:inline-block}
  .board-subs-toggle.expanded .bst-caret{transform:rotate(90deg)}
  .board-card-subs{display:flex;flex-direction:column;gap:5px;margin-top:6px;padding-left:8px;border-left:2px solid var(--border)}
  .board-mini-card{
    padding:6px 8px;background:var(--bg-1);border:1px solid var(--border-subtle);
    border-radius:var(--r-sm);cursor:pointer;transition:background var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out);border-left:3px solid var(--border-strong);
  }
  .board-mini-card:hover{background:var(--bg-2);border-color:var(--border-strong)}
  .board-mini-card:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
  .board-mini-card.priority-urgent-card{border-left-color:var(--danger)}
  .board-mini-card.priority-high-card{border-left-color:var(--warning)}
  .board-mini-card.priority-normal-card{border-left-color:var(--accent)}
  .board-mini-card.priority-low-card{border-left-color:var(--text-3)}
  .board-mini-card.done .board-mini-name{text-decoration:line-through;opacity:.6}
  .board-mini-name{font-size:11px;font-weight:600;color:var(--text-1);display:flex;align-items:baseline;gap:5px;word-break:break-word}
  .board-mini-name .bmc-check{color:var(--success);font-weight:700}
  .board-mini-meta{display:flex;gap:5px;flex-wrap:wrap;align-items:center;margin-top:5px}
  .board-mini-meta .bmc-subs{font-size:10px;color:var(--text-3);opacity:.85}

  /* Small "today" badge */
  .due-today-banner{font-size:9px;padding:2px 8px;background:var(--warning-bg);color:var(--ring-warn-color);border:1px solid var(--warning-border);border-radius:var(--r-md);letter-spacing:.5px}

  /* ========== Personal Life Manager Additions ========== */
  /* Today summary banner */
  .today-banner{display:flex;gap:10px;padding:12px 14px;background:linear-gradient(135deg,color-mix(in srgb,var(--accent) 10%,transparent),color-mix(in srgb,var(--success) 6%,transparent));border:1px solid var(--work-border);border-radius:var(--r-md);margin-bottom:10px;align-items:center;flex-wrap:wrap}
  .tb-item{flex:1;min-width:90px;display:flex;flex-direction:column;gap:2px}
  .tb-num{font-size:22px;font-weight:800;color:var(--text-1);font-variant-numeric:tabular-nums;line-height:1}
  .tb-num.overdue{color:var(--danger)}
  .tb-num.today{color:var(--ring-warn-color)}
  .tb-num.done{color:var(--success)}
  .tb-lbl{font-size:8px;color:var(--text-3);letter-spacing:2px;text-transform:uppercase;font-weight:600}
  .tb-divider{width:1px;align-self:stretch;background:var(--border)}

  /* Smart view chips — toggle/collapse behaviours only here; base pill visuals
     are shared with `.sv-chip` in the design-system block further down so
     sheets and scroll strips render the same chip language. */
  .smart-views--collapsed .sv-chip:not(.active):not(.sv-chip-pinned){display:none}

  /* Star button */
  .task-star{width:20px;height:20px;background:transparent;border:none;color:var(--text-4);font-size:14px;line-height:1;cursor:pointer;transition:color var(--dur-base) var(--ease-out);flex-shrink:0;padding:0;display:flex;align-items:center;justify-content:center}
  .task-star:hover{color:var(--starred)}
  .task-star.starred{color:var(--starred)}

  /* Subtask progress bar on parent tasks */
  .subtask-progress{display:inline-flex;align-items:center;gap:6px;font-size:9px;color:var(--text-3);letter-spacing:.5px}
  .sp-bar{width:40px;height:3px;background:var(--border-subtle);border-radius:2px;overflow:hidden}
  .sp-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--success));transition:width var(--dur-slow) var(--ease-out)}
  .sp-text{font-weight:700}

  /* Recurring badge */
  .recur-badge{font-size:8px;padding:1px 5px;background:var(--purple-bg);color:var(--purple);border:1px solid var(--purple-border);border-radius:var(--r-sm);letter-spacing:.5px;font-weight:700}

  /* Reorder buttons */
  .task-reorder{display:flex;flex-direction:column;gap:1px;flex-shrink:0}
  .task-rorder-btn{width:16px;height:12px;background:transparent;border:none;color:var(--text-4);font-size:9px;line-height:1;cursor:pointer;padding:0;transition:color var(--dur-base) var(--ease-out);display:flex;align-items:center;justify-content:center}
  .task-rorder-btn:hover{color:var(--text-3)}
  .task-rorder-btn:disabled{opacity:.3;cursor:default}

  /* Quick-add hint */
  .qa-hint{font-size:8px;color:var(--text-4);letter-spacing:.5px;padding:3px 2px 0;font-style:italic}
  .qa-hint code{background:var(--bg-1);padding:1px 4px;border-radius:3px;color:var(--accent);font-family:monospace;font-size:9px;font-style:normal}

  /* Quick date buttons in modal */
  .quick-dates{display:flex;gap:4px;flex-wrap:wrap;margin-top:6px}
  .qd-btn{padding:4px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:9px;font-weight:600;letter-spacing:.5px;cursor:pointer;font-family:inherit;text-transform:uppercase}
  .qd-btn:hover{background:var(--bg-3);color:var(--text-1);border-color:var(--accent-border)}

  /* Recurrence selector */
  .recur-options{display:flex;gap:4px;flex-wrap:wrap}
  .recur-opt{padding:5px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);color:var(--text-2);font-size:10px;font-weight:600;letter-spacing:.5px;cursor:pointer;font-family:inherit}
  .recur-opt.active{background:var(--purple-bg);color:var(--purple);border-color:var(--purple-border)}
  .recur-opt:hover:not(.active){color:var(--text-1);border-color:var(--accent-border)}

  /* Floating Mini Timer (shown on all tabs except Timer tab) */
  .mini-timer{position:fixed;bottom:16px;right:16px;z-index:var(--z-fab);display:none;align-items:center;gap:10px;padding:10px 14px;background:color-mix(in srgb,var(--bg-2) 95%,transparent);backdrop-filter:blur(8px);border:1px solid var(--border);border-radius:var(--r-md);box-shadow:var(--shadow-raised);transition:border-color var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out);font-family:inherit;user-select:none}
  .mt-open-btn{display:flex;align-items:center;gap:10px;background:transparent;border:0;padding:0;margin:0;color:inherit;font:inherit;cursor:pointer;text-align:left;min-width:0}
  .mt-open-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-sm)}

  /* Floating quick-add button. Hidden on desktop where Cmd/Ctrl+N + the
     visible task input cover the same job; appears on touch/narrow viewports
     so mobile users have a thumb-reachable quick-capture from any tab. */
  .quick-add-fab{
    position:fixed;bottom:calc(20px + env(safe-area-inset-bottom,0px));right:20px;
    z-index:var(--z-fab,1100);display:none;align-items:center;justify-content:center;
    width:56px;height:56px;border-radius:50%;border:0;cursor:pointer;
    background:var(--brand-grad);color:var(--text-on-brand);
    box-shadow:0 8px 24px rgba(26,140,255,.40),0 2px 6px rgba(0,0,0,.25);
    font-family:inherit;font-size:0;line-height:1;
    transition:transform .15s ease,box-shadow .15s ease,background .15s ease;
  }
  .quick-add-fab:hover,.quick-add-fab:focus-visible{outline:0;transform:translateY(-2px);box-shadow:0 12px 28px rgba(0,0,0,.4),0 3px 8px rgba(0,0,0,.3)}
  .quick-add-fab:active{transform:translateY(0)}
  .quick-add-fab-icon{font-size:32px;font-weight:400;line-height:1;display:inline-block;padding-bottom:3px}
  /* Scroll-direction auto-hide: slides the FAB off-screen while the user is
     scrolling down through the task list, revealing the rows it would
     otherwise cover. Restored as soon as the user scrolls up or stops. */
  .quick-add-fab.scroll-hidden{transform:translateY(140%);opacity:0;pointer-events:none}
  /* Press-state ripple feel without an extra element. */
  .quick-add-fab.flash{animation:fabFlash .35s ease}
  @keyframes fabFlash{0%{transform:scale(1)}50%{transform:scale(.92)}100%{transform:scale(1)}}
  .mini-timer.visible{display:flex;animation:fadeIn .25s}
  .mini-timer:hover{border-color:var(--accent-border);transform:translateY(-1px)}
  .mini-timer.work{border-left:3px solid var(--work)}
  .mini-timer.short{border-left:3px solid var(--success)}
  .mini-timer.long{border-left:3px solid var(--long)}
  .mt-phase-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
  .mt-phase-dot.work{background:var(--work);box-shadow:0 0 8px var(--work-glow)}
  .mt-phase-dot.short{background:var(--short);box-shadow:0 0 8px var(--short-glow)}
  .mt-phase-dot.long{background:var(--ring-warn-color);box-shadow:0 0 8px var(--long-glow)}
  .mt-phase-dot.running{animation:pulse 1.5s infinite}
  .mt-info{display:flex;flex-direction:column;gap:1px;min-width:0}
  .mt-label{font-size:8px;color:var(--text-3);letter-spacing:1.5px;text-transform:uppercase;font-weight:700}
  .mt-time{font-size:16px;font-weight:800;color:var(--text-1);font-variant-numeric:tabular-nums;letter-spacing:1px}
  /* Warn/done use the same themed tokens as .ring-time so light-mode contrast
     stays readable; previously hardcoded to dark-mode-tuned hex values. */
  .mt-time.warn{color:var(--ring-warn-color);animation:pulse 1s infinite}
  .mt-time.done{color:var(--ring-done-color)}
  .mt-btn{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;border:none;font-size:11px;cursor:pointer;transition:filter var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out);flex-shrink:0;color:var(--text-on-accent);font-family:inherit}
  .mt-play{background:var(--success)}
  .mt-pause{background:var(--accent)}
  .mt-btn:hover{filter:brightness(1.15);transform:scale(1.05)}
  .mt-open{font-size:9px;color:var(--text-3);letter-spacing:1px;padding-left:4px;border-left:1px solid var(--border)}

  .log-list{display:flex;flex-direction:column;gap:4px;max-height:200px;overflow-y:auto}
  .log-item{display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:var(--r-sm);background:var(--bg-1);font-size:10px;border:1px solid var(--border-subtle)}
  .log-dot{width:5px;height:5px;border-radius:50%;flex-shrink:0}
  .log-name{flex:1;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .log-dur{color:var(--accent);font-weight:700;flex-shrink:0}
  .log-time{color:var(--text-4);flex-shrink:0;font-size:9px}
  .log-empty{text-align:center;padding:12px 0;color:var(--text-4);font-size:10px}

  .stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
  .stat-box{text-align:center;padding:12px 8px;background:var(--bg-1);border-radius:var(--r-lg);border:1px solid var(--border-subtle)}
  .stat-val{font-size:24px;font-weight:800;color:var(--text-1)}.stat-lbl{font-size:8px;letter-spacing:2px;text-transform:uppercase;color:var(--text-3);margin-top:4px}
  .stat-val.wc{color:var(--work)}.stat-val.bc{color:var(--short)}.stat-val.tc{color:var(--long)}
  .history{display:flex;gap:3px;flex-wrap:wrap;margin-top:12px;justify-content:center}
  .hblock{width:14px;height:14px;border-radius:4px}.hw{background:var(--work);opacity:.8}.hs{background:var(--short);opacity:.6}.hl{background:var(--long);opacity:.6}



  /* History Archive */
  .hist-day{padding:var(--space-6);background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-md);margin-bottom:var(--space-4);cursor:pointer;transition:border-color var(--dur-base) var(--ease-out)}
  .hist-day:hover{border-color:var(--accent-border)}
  .hist-day-hdr{display:flex;align-items:center;gap:var(--space-5)}
  .hist-day-date{font-size:var(--fs-12);font-weight:600;color:var(--text-1);flex:1}
  .hist-day-stats{display:flex;gap:var(--space-6);font-size:var(--fs-12);color:var(--text-3)}
  .hist-day-stat{display:flex;align-items:center;gap:var(--space-2)}
  .hist-day-detail{margin-top:var(--space-5);padding-top:var(--space-5);border-top:1px solid var(--border-subtle);display:none;animation:slideIn var(--dur-base) var(--ease-out)}
  .hist-day.open .hist-day-detail{display:block}
  .hist-day-section{margin-bottom:var(--space-4)}
  .hist-day-section-title{font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--text-4);margin-bottom:var(--space-2)}
  .hist-goal{font-size:var(--fs-12);color:var(--text-2);padding:2px 0}
  .hist-log{font-size:var(--fs-12);color:var(--text-3);padding:2px 0}
  .hist-task{font-size:var(--fs-12);color:var(--text-3);padding:2px 0}
  @keyframes savePulse {
    0% { transform: scale(0.9); opacity: 0; }
    50% { transform: scale(1.05); opacity: 1; }
    100% { transform: scale(1); opacity: 1; }
  }
  .save-indicator{position:fixed;bottom:16px;right:16px;font-size:9px;color:var(--success);letter-spacing:2px;text-transform:uppercase;opacity:0;transition:opacity .3s;pointer-events:none}
  .save-indicator.show{opacity:1;animation:savePulse 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards}

  .clear-hist-btn{background:var(--danger-bg);color:var(--danger);border:1px solid var(--danger-border);border-radius:var(--r-sm);padding:6px 14px;font-size:9px;letter-spacing:1px;margin-top:8px}

  /* Quick Timers */
  .qt-form{display:flex;gap:6px;flex-wrap:wrap;padding:10px;background:var(--bg-1);border-radius:var(--r-md);border:1px solid var(--border-subtle);margin-bottom:8px;align-items:flex-end}
  .qt-presets{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
  .qt-preset{padding:5px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:999px;color:var(--text-3);font-size:10px;font-weight:600;letter-spacing:1px;transition:background var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out)}
  .qt-preset:hover{background:var(--bg-3);color:var(--accent)}
  .qt-list{display:flex;flex-direction:column;gap:8px;max-height:400px;overflow-y:auto}
  .qt-item{display:flex;align-items:center;gap:10px;padding:12px;border-radius:var(--r-md);background:var(--bg-1);border:1px solid var(--border-subtle);transition:background var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out)}
  .qt-item.running{border-color:var(--accent-border);background:var(--work-bg)}
  .qt-item.done{border-color:var(--danger-border);background:color-mix(in srgb,var(--danger) 6%,var(--bg-1))}
  .qt-item.flash{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 12%,var(--bg-1));animation:pulse .4s 4}
  .qt-btn{width:34px;height:34px;border-radius:50%;font-size:13px;flex-shrink:0;display:flex;align-items:center;justify-content:center;transition:.15s}
  .qt-play{background:var(--success);color:var(--text-on-accent)}
  .qt-pause{background:var(--accent);color:var(--text-on-accent)}
  .qt-restart{background:var(--warning);color:var(--text-on-accent)}
  .qt-info{flex:1;min-width:0}
  .qt-label{font-size:12px;font-weight:600;color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .qt-time{font-size:22px;font-weight:800;letter-spacing:2px;font-variant-numeric:tabular-nums;margin-top:2px;color:var(--text-1)}
  .qt-time.running{color:var(--work)}
  .qt-time.warn{color:var(--ring-warn-color);animation:pulse 1s infinite}
  .qt-time.done{color:var(--ring-done-color)}
  .qt-progress{height:3px;margin-top:6px;background:var(--border-subtle);border-radius:2px;overflow:hidden}
  .qt-bar{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-hover));transition:width .5s linear}
  .qt-bar.done{background:var(--danger)}
  .qt-actions{display:flex;gap:4px;flex-shrink:0}
  .qt-act{width:24px;height:24px;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border-subtle);border-radius:var(--r-sm);color:var(--text-4);font-size:11px;transition:color var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out)}
  .qt-act:hover{color:var(--text-2);border-color:var(--accent-border)}

  /* Log delete button */
  .log-del{width:18px;height:18px;display:flex;align-items:center;justify-content:center;background:transparent;border:none;color:var(--text-4);font-size:10px;opacity:0;transition:opacity var(--dur-base) var(--ease-out);cursor:pointer;flex-shrink:0}
  .log-item:hover .log-del{opacity:1}
  .log-del:hover{color:var(--danger)}

  /* Phase nav hint */
  .phase-nav-hint{text-align:center;font-size:9px;color:var(--text-4);letter-spacing:2px;margin-top:10px;text-transform:uppercase}

  /* =================================================================== */
  /* =========== DESIGN SYSTEM OVERLAY (polish pass) =================== */
  /* =================================================================== */

  /* Container: max-width for desktop, centered */
  .container{max-width:960px;width:100%}

  /* Brand logo mark (now in the sidebar). The old centered .header / .header h1
     rules were removed with the ClickUp shell; brand text uses
     .sidebar-brand-title. .header-logo / .header-mid / .header-date /
     .what-next-pill are still used (sidebar brand + top bar). */
  .header-logo{width:32px;height:32px;border-radius:8px;display:block;flex-shrink:0}
  .header-line{display:none}
  .header-mid{display:flex;flex-direction:column;align-items:center;gap:8px;margin-top:6px}
  .header-date{font-size:13px;color:var(--text-3);letter-spacing:0;font-family:var(--font-sans);min-height:1.2em}
  .what-next-pill{font-size:11px;font-weight:600;padding:6px 14px;border-radius:999px;border:1px solid var(--border);background:var(--bg-2);color:var(--accent);cursor:pointer;font-family:inherit;transition:background .15s,border-color .15s}
  .what-next-pill:hover{background:var(--accent-bg);border-color:var(--accent-border)}

  /* Header AI status — model load / ready */
  /* Outer min-width pins the chip to its widest realistic state. The widest
     label content is "100%" (4 chars, tabular-nums) which measures ~26px at
     the chip's 11px font. With 7px dot + 5px gap + 20px horizontal padding +
     2px border, that's ~62px. Use 64px to absorb sub-pixel rounding so the
     content swap from "100%" → "AI" → "✓" never reflows the .header-utils
     row, which would shift the theme toggle and Cmd-K button.  */
  .ai-chip{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:5px;flex-shrink:0;height:38px;min-width:64px;padding:0 10px;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--bg-1);color:var(--text-2);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;transition:background .15s,border-color .15s}
  .ai-chip:hover{background:var(--bg-2);border-color:var(--border-strong)}
  .ai-chip-dot{width:7px;height:7px;border-radius:50%;background:var(--text-4);flex-shrink:0}
  .ai-chip--syncing .ai-chip-dot{background:var(--warning);animation:pulse 1.2s infinite}
  .ai-chip--ok .ai-chip-dot{background:var(--success)}
  .ai-chip--err .ai-chip-dot{background:var(--danger)}
  /* First-run "setup" badge — a small pulsing dot in the top-right of the
     chip until the user downloads the embedding model.
     Signals "this is actionable" without being loud. Auto-removed by JS
     when the chip leaves the idle state. */
  .ai-chip--firstrun{border-color:var(--accent-border);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 8%,transparent)}
  .ai-chip--firstrun::after{
    content:"";position:absolute;top:5px;right:5px;
    width:8px;height:8px;border-radius:50%;
    background:var(--accent);
    box-shadow:0 0 0 2px var(--bg-1);
    animation:aiFirstrunPulse 1.8s infinite;
  }
  @keyframes aiFirstrunPulse{
    0%,100%{transform:scale(1);opacity:1}
    50%{transform:scale(1.25);opacity:.7}
  }
  /* Inner label uses a 4ch reservation (matches "100%") so content swaps
     don't shrink the chip below the outer min-width and produce a visible
     label-jitter even within the pinned shell. */
  .ai-chip-label{font-variant-numeric:tabular-nums;min-width:4ch;text-align:center}
  .ai-chip-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0;clip-path:inset(50%)}
  .sys-info-ok{color:var(--success)}
  .sys-info-warn{color:var(--warning)}
  .install-help-panel{margin-top:10px;padding:12px 14px;border-radius:var(--r-sm);background:var(--bg-1);border:1px solid var(--border-subtle);font-size:13px;color:var(--text-1)}
  .install-help-title{font-weight:600;margin-bottom:6px;color:var(--text-1)}
  .install-help-steps{margin:0 0 8px;padding-left:20px;line-height:1.6;color:var(--text-2)}
  .install-help-steps li{margin-bottom:2px}
  .install-help-close{padding:5px 12px;border-radius:6px;border:1px solid var(--border);background:transparent;color:var(--text-2);font-size:12px;cursor:pointer}
  .install-help-close:hover{background:var(--bg-2);color:var(--text-1)}
  .sw-precache-banner{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px;margin-bottom:10px;border-radius:var(--r-sm);background:color-mix(in srgb, var(--warning) 12%, transparent);border:1px solid color-mix(in srgb, var(--warning) 35%, transparent);font-size:12px;color:var(--text-1);flex-wrap:wrap}
  .sw-precache-banner-btn{padding:4px 10px;border-radius:6px;border:1px solid var(--warning);background:transparent;color:var(--warning);font-size:11px;font-weight:600;cursor:pointer}
  .sw-precache-banner-btn:hover{background:var(--warning);color:var(--text-on-accent)}
  .sw-precache-banner-btn--ghost{border-color:var(--border);color:var(--text-3)}
  .sw-precache-banner-btn--ghost:hover{background:var(--bg-2);color:var(--text-1)}

  /* Main timer card — inside Focus tab panel */
  .card{position:relative;width:100%;margin-bottom:14px;padding:24px;border-radius:var(--r-md);display:flex;flex-direction:column;align-items:center;gap:18px}
  .ring-wrap{position:relative;width:220px;height:220px;display:flex;align-items:center;justify-content:center}
  .ring-svg{width:220px;height:220px;transform:rotate(-90deg)}
  .ring-bg{fill:none;stroke:var(--bg-3);stroke-width:6}
  .ring-fg{fill:none;stroke-width:6;stroke-linecap:round;transition:stroke-dashoffset 1s linear}
  .ring-center{position:absolute;display:flex;flex-direction:column;align-items:center;gap:4px}
  .pips{display:flex;gap:10px;margin-top:4px}
  .ctrls{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}

  /* Panel surfaces — rounded, softly-lit cards. A faint top→bottom gradient plus
     an inset top highlight reads as depth instead of a flat box; the border is
     kept near-invisible so corners do the shaping, not a hard outline. */
  .panel{background:var(--surface-grad);border:1px solid var(--border-subtle);border-radius:var(--r-xl);padding:16px;margin-bottom:14px;box-shadow:var(--shadow-card),inset 0 1px 0 rgba(255,255,255,.03)}
  .task-search-bar{margin-bottom:10px;padding:8px 10px;background:var(--surface-grad);border:1px solid var(--border-subtle);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}

  /* Section labels — stop yelling */
  .slbl{font-size:12px;font-weight:600;letter-spacing:.01em;text-transform:none;color:var(--text-1);font-family:var(--font-sans)}
  .scnt{font-size:11px;color:var(--text-3);margin-left:auto;letter-spacing:0;font-family:var(--font-sans)}
  .shdr{display:flex;align-items:center;gap:10px;margin-bottom:14px}
  .sdot{width:8px;height:8px;border-radius:50%;flex-shrink:0;box-shadow:none}

  /* Nav tabs — cleaner */
  .nav-tabs{display:flex;gap:var(--space-2);width:100%;margin-bottom:var(--space-7);background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--space-2);box-shadow:var(--shadow-card)}
  .nav-tab{flex:1;padding:10px 4px;background:transparent;border:none;border-radius:var(--r-sm);color:var(--text-3);font-size:var(--fs-12);font-weight:600;letter-spacing:.02em;text-transform:none;cursor:pointer;transition:background var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out);display:flex;flex-direction:column;align-items:center;gap:var(--space-2);font-family:inherit;position:relative}
  .nav-tab-icon{font-size:16px;line-height:1;filter:grayscale(.6);transition:filter var(--dur-base) var(--ease-out)}
  .nav-tab:hover:not(.active){color:var(--text-2);background:var(--accent-bg)}
  .nav-tab-badge{position:absolute;top:4px;right:8px;min-width:14px;height:14px;padding:0 4px;background:var(--accent);color:var(--text-on-accent);border-radius:7px;font-size:9px;font-weight:700;letter-spacing:0;display:flex;align-items:center;justify-content:center;line-height:1}

  /* Buttons — consistent, clean */
  .btn, .btn-primary, .btn-pause, .btn-ghost, .btn-skip, .btn-danger {font-family:var(--font-sans);font-size:12px;font-weight:600;letter-spacing:0;text-transform:none;padding:10px 18px;border-radius:999px;transition:.15s;cursor:pointer;}
  .btn-sm {padding:6px 14px !important;font-size:11px !important;}
  .btn-primary{background:var(--brand-grad);color:var(--text-on-brand);border:none;}
  .btn-primary:hover{filter:brightness(1.06)}
  /* Secondary — neutral bordered (ghost / neutral actions) */
  .btn-secondary{background:var(--bg-2);color:var(--text-1);border:1px solid var(--border)}
  .btn-secondary:hover{background:var(--bg-3);border-color:var(--border-strong)}
  /* Success fill — quick-timer play, goal add accents */
  .btn-success{background:var(--success);color:var(--text-on-accent);border:none;font-weight:600}
  .btn-success:hover{filter:brightness(1.08)}
  .btn-pause{background:var(--warning);color:var(--text-on-accent);border:none;}
  .btn-skip{background:transparent;color:var(--text-2);border:1px solid var(--border);font-size:11px;padding:8px 14px}
  .btn-danger{background:transparent;color:var(--danger);border:1px solid var(--danger-border);font-size:11px;padding:8px 14px}
  .btn-ghost{background:transparent;color:var(--text-2);border:1px solid var(--border)}

  /* Today banner — heroic hero */
  .today-banner{padding:18px 20px;background:linear-gradient(135deg,var(--bg-1),var(--bg-2));border:1px solid var(--border);border-radius:var(--r-lg);margin-bottom:14px}
  .tb-num{font-size:32px;font-weight:700;letter-spacing:-.02em;font-family:var(--font-sans);color:var(--text-1)}
  .tb-num.overdue{color:var(--danger)}
  .tb-num.today{color:var(--warning)}
  .tb-num.done{color:var(--success)}
  .tb-lbl{font-size:11px;color:var(--text-3);letter-spacing:.02em;text-transform:none;font-weight:500;margin-top:2px}
  .tb-divider{background:var(--border)}

  /* ── Shared chip primitive (list-style pills + Settings preview) ──────── */
  /* `.list-chip` shares this base (its own dedicated base was retired in favour
     of this primitive) — without it list chips fall back to bare <button>s with
     centered text and no pill shape. */
  .ui-chip,
  .list-chip{
    box-sizing:border-box;display:inline-flex;align-items:center;gap:6px;
    padding:var(--space-3) var(--space-6);min-height:32px;border-radius:999px;
    font-size:12px;font-weight:500;line-height:1.25;letter-spacing:0;text-transform:none;
    font-family:inherit;border:1px solid var(--border);background:var(--bg-2);color:var(--text-2);
  }
  button.ui-chip,button.list-chip{cursor:pointer;transition:background var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out)}
  .ui-chip:focus-visible:not(.ui-chip--preview){outline:2px solid var(--accent);outline-offset:2px}
  .ui-chip--dot::before{
    content:"";width:8px;height:8px;border-radius:50%;
    background:var(--ui-chip-dot,var(--text-3));flex:0 0 auto;opacity:.9;
  }
  .ui-chip--preview,.ui-chip.ui-chip--preview{
    pointer-events:none;user-select:none;cursor:default;
    background:var(--bg-2);border-color:var(--border);color:var(--text-2);
  }

  /* Smart view chips — calmer */
  .smart-views{
    display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-bottom:10px;
    background:var(--bg-1);border:1px solid var(--border-subtle);padding:5px;border-radius:12px;
  }
  .sv-chip{background:var(--bg-1);color:var(--text-3);font-size:var(--fs-12);font-weight:500;letter-spacing:0;text-transform:none;padding:8px 14px;display:inline-flex;gap:6px;align-items:center;border:1px solid var(--border-subtle);border-radius:999px;cursor:pointer}
  .sv-chip:hover{background:var(--bg-2);color:var(--text-1);border-color:var(--border)}
  /* Active state lifted from a subtle bg-3 swap to a clear accent-tinted
     pill — matches the primary-action visual language and makes the
     current view legible at a glance, especially on light theme. */
  .sv-chip.active{
    background:color-mix(in srgb,var(--accent) 16%,transparent);color:var(--accent);
    border-color:var(--accent);font-weight:600;
  }
  .sv-chip:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .sv-icon{font-size:13px}
  .sv-count{font-size:10px;font-weight:600;background:var(--bg-3);color:var(--text-3);padding:1px 6px;border-radius:999px}
  .sv-chip.active .sv-count{background:var(--accent);color:var(--text-on-accent)}

  /* Category filter chips (#tagsBar) carry their own --sv-cat colour (set
     inline in refreshClassificationUi) so the active category is unmistakable
     and colour-matches the row stripes / settings. A colour dot makes the
     palette legible before selection. The generic smart-view .sv-chip.active
     is intentionally left on the accent treatment. */
  .sv-chip--cat::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--sv-cat,var(--text-3));flex:0 0 auto;opacity:.55;transition:opacity .12s}
  .sv-chip--cat:hover::before{opacity:.9}
  .sv-chip--cat.active{background:color-mix(in srgb,var(--sv-cat) 18%,transparent);border-color:var(--sv-cat);color:var(--sv-cat);font-weight:600}
  .sv-chip--cat.active::before{opacity:1}
  .sv-chip--cat.active .sv-count{background:var(--sv-cat);color:var(--text-on-accent)}

  /* Lists bar */
  .lists-bar{background:var(--bg-1);border:1px solid var(--border-subtle);padding:8px 10px;border-radius:12px;}
  .list-chip{background:var(--bg-2);border-color:var(--border);color:var(--text-2);font-size:12px;font-weight:500;letter-spacing:0;text-transform:none}
  .list-chip:hover{background:var(--bg-3);color:var(--text-1)}
  .list-chip.active{background:var(--bg-3);color:var(--text-1);border-color:var(--border-strong)}
  .list-chip .lc-count{background:transparent;color:var(--text-3);font-size:10px}
  .list-add{color:var(--text-3);font-size:12px;font-weight:500}

  /* Toolbar */
  .task-toolbar{background:var(--bg-1);border:1px solid var(--border-subtle);padding:8px 10px;border-radius:12px;}
  .task-search{background:var(--bg-2);border-color:var(--border);color:var(--text-1);font-size:13px;padding:8px 12px;border-radius:var(--r-sm)}
  .task-search::placeholder{color:var(--text-4)}
  .task-search:focus{border-color:var(--accent-border);background:var(--bg-2)}
  .task-tb-sel{background:var(--bg-2);border-color:var(--border);color:var(--text-1);font-size:var(--fs-13);font-weight:500;letter-spacing:0;padding:8px 12px;border-radius:var(--r-md)}
  .task-tb-sel:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-color:var(--accent-border)}

  /* Task input */
  .task-form{gap:8px}
  .task-input{background:var(--bg-2)!important;border-color:var(--border)!important;color:var(--text-1)!important;font-size:14px!important;padding:11px 14px!important;border-radius:var(--r-sm)!important;font-weight:400}
  .task-input::placeholder{color:var(--text-4)}
  .task-input:focus{border-color:var(--accent-border)!important;outline:none}
  /* Canonical Add button — primary action in the design system. min-height
     hits the 44px WCAG 2.5.5 AAA tap target on all viewports (mobile rule
     at line ~1419 sets 46px to be safe). */
  .task-add{
    padding:11px 18px;min-height:44px;
    background:var(--brand-grad);color:var(--text-on-brand);
    font-weight:700;font-size:var(--fs-13);letter-spacing:.01em;text-transform:none;
    border:0;border-radius:999px;
    box-shadow:0 2px 8px rgba(26,140,255,.30);
    transition:filter var(--dur-fast) var(--ease-out),box-shadow var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out);
  }
  .task-add:hover{box-shadow:0 4px 16px rgba(26,140,255,.42);filter:brightness(1.06)}
  .task-add:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
  .task-add:active{transform:scale(.97);box-shadow:0 1px 4px rgba(26,140,255,.20);filter:none}
  body.light-theme .task-add{box-shadow:0 2px 8px rgba(10,111,214,.24)}
  body.light-theme .task-add:hover{box-shadow:0 4px 16px rgba(10,111,214,.34)}

  /* Quick-add hint — example tokens reuse the live-parse-preview chip styles
     (.qpc--*) so users learn by recognition: the chip color they see while
     typing matches the chip color in the hint row. */
  .qa-hint{
    display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);
    font-size:var(--fs-12);color:var(--text-3);
    padding:var(--space-3) var(--space-2) var(--space-5);
    line-height:1.6;
  }
  .qa-hint-lbl{color:var(--text-4);font-weight:500;font-size:var(--fs-12);text-transform:uppercase;letter-spacing:.06em}
  .qa-hint-tokens{display:inline-flex;flex-wrap:wrap;gap:var(--space-2);align-items:center}
  /* Legacy code-tag styling preserved for any other surfaces still using it. */
  .qa-hint code{background:var(--bg-2);color:var(--text-2);padding:2px 6px;border-radius:4px;font-size:11px;border:1px solid var(--border)}
  /* Disclosure button shown when the syntax hint is hidden (default state).
     Subtle text-link styling — discoverable but doesn't clutter the form. */
  .qa-hint-reveal{
    background:transparent;border:none;padding:6px 2px;margin:0;
    color:var(--text-3);font-family:inherit;font-size:var(--fs-12);
    cursor:pointer;text-decoration:underline;text-decoration-color:var(--border-strong);
    text-underline-offset:3px;text-decoration-thickness:1px;
    transition:color .12s,text-decoration-color .12s;
    -webkit-user-select:none;user-select:none;
  }
  .qa-hint-reveal:hover{color:var(--text-1);text-decoration-color:var(--accent)}
  .qa-hint-reveal:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

  /* "More options" disclosure: opens the configurable inline quick-add panel.
     Subtle until tapped — the form should read as one-line by default. */
  .qa-more-toggle{
    display:inline-flex;align-items:center;gap:4px;
    background:transparent;border:none;padding:6px 2px;margin:0;
    color:var(--text-3);font-family:inherit;font-size:var(--fs-12);
    cursor:pointer;-webkit-user-select:none;user-select:none;
  }
  .qa-more-toggle:hover{color:var(--text-1)}
  .qa-more-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
  .qa-more-chevron{font-size:9px;line-height:1;transition:transform .2s}
  .qa-more-toggle[aria-expanded="true"] .qa-more-chevron{transform:rotate(180deg)}
  
  .qa-actions-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-top:12px;margin-bottom:4px;}

  /* Configurable quick-add panel — fields are rendered by renderQuickAddPanel().
     Hidden until user expands. Each field is its own sub-block separated by a
     dashed rule for clean delimitation. */
  .qa-more-panel{
    display:flex;flex-direction:column;gap:var(--space-5);
    padding:var(--space-6) var(--space-4);
    margin:var(--space-3) 0 var(--space-2);
    background:var(--bg-1);border:1px solid var(--border-subtle);
    border-radius:var(--r-md);
  }
  .qa-more-panel[hidden]{display:none}
  .qa-more-field{display:flex;flex-direction:column;gap:var(--space-3)}
  .qa-more-field-lbl{
    font-size:var(--fs-12);color:var(--text-3);
    letter-spacing:.04em;text-transform:uppercase;font-weight:600;
  }
  .qa-more-field-control{display:flex;flex-wrap:wrap;gap:var(--space-3);align-items:center}
  .qa-more-empty{
    color:var(--text-4);font-size:var(--fs-12);font-style:italic;
    margin:0;padding:var(--space-3) 0;
  }
  .qa-more-empty a{color:var(--accent);text-decoration:underline;cursor:pointer}
  .qa-field-chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-2);cursor:pointer;padding:6px 10px;background:var(--bg-2);border-radius:999px;border:1px solid var(--border);min-height:36px}
  /* Chip wraps the checkbox in a <label>, so keyboard focus on the inner
     checkbox should light up the visible chip — focus-visible on a hidden
     checkbox is invisible to users. */
  .qa-field-chip:focus-within{outline:2px solid var(--accent);outline-offset:2px;border-color:var(--accent-border)}
  .qa-field-chip-cb{cursor:pointer}

  /* Live parse-token preview — visible while user is typing, shows what
     quick-add tokens were detected so users trust the parser. */
  /* Tap-to-set quick-property pills under the input (Due / Priority / List).
     Discoverable alternative to learning @ / # / ~ token syntax. */
  .qa-quickset{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
  .qa-quickset:empty{display:none}
  .qs-pill{
    display:inline-flex;align-items:center;gap:5px;max-width:100%;
    padding:5px 12px;border-radius:999px;
    background:var(--bg-1);border:1px dashed var(--border-strong);
    color:var(--text-3);font-size:var(--fs-12);font-weight:600;cursor:pointer;
    transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
  }
  .qs-pill::before{content:'+ ';opacity:.7}
  .qs-pill:hover{background:var(--bg-3);border-color:var(--accent);color:var(--text-1)}
  .qs-pill--set{
    border-style:solid;border-color:var(--accent-border);
    background:var(--accent-bg);color:var(--accent);
  }
  .qs-pill--set::before{content:''}
  .qa-parse-chips{
    display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);
    padding:var(--space-3) var(--space-2);
    margin-block-start:var(--space-2);
    font-size:var(--fs-12);color:var(--text-3);
    border-block-start:1px dashed var(--border-subtle);
    animation:fadeIn .12s ease-out;
  }
  .qa-parse-chips[hidden]{display:none}
  .qpc-name{
    font-weight:600;color:var(--text-1);
    max-width:75%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  }
  .qpc-list{display:inline-flex;flex-wrap:wrap;gap:var(--space-2)}
  .qpc{
    display:inline-flex;align-items:center;gap:4px;
    padding:2px 8px;border-radius:999px;font-size:var(--fs-12);font-weight:600;
    background:var(--bg-2);border:1px solid var(--border);color:var(--text-2);
    white-space:nowrap;line-height:1.4;
  }
  button.qpc{
    appearance:none;font:inherit;cursor:pointer;
  }
  .qpc--danger {background:var(--danger-bg); border-color:var(--danger-border); color:var(--danger)}
  .qpc--warning{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning)}
  .qpc--accent {background:var(--accent-bg); border-color:var(--accent-border); color:var(--accent)}
  .qpc--muted  {background:var(--bg-2);      border-color:var(--border);        color:var(--text-3)}
  .qpc--tag    {background:var(--purple-bg); border-color:var(--purple-border); color:var(--purple)}
  .qpc--star   {background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning)}
  /* Active search operator pill (tag:foo / is:overdue / etc.) shown beneath
     the search input. Removable via the inline × so the user can drop a
     single operator without retyping the whole query. */
  .qpc--filter {background:var(--accent-bg); border-color:var(--accent-border); color:var(--accent)}
  .qpc-rm{
    appearance:none;background:transparent;border:0;color:inherit;
    font-size:14px;line-height:1;padding:0;margin-left:2px;cursor:pointer;
    opacity:.7;display:inline-flex;align-items:center;justify-content:center;
    width:14px;height:14px;border-radius:50%;
  }
  .qpc-rm:hover{opacity:1;background:var(--hover-soft)}
  /* Unified active-filter bar — one row, one source of truth for every
     filter currently narrowing the visible task list. Sits between the
     search row and the view-toggle / Filters button. */
  .active-filters-bar{
    display:flex;flex-direction:column;
    gap:8px;padding:8px 10px;margin:6px 0 0;
    background:var(--bg-1);border:1px solid var(--border-subtle);border-radius:8px;
    font-size:12px;
  }
  .active-filters-bar .af-main-row{
    display:flex;flex-wrap:wrap;gap:6px;align-items:center;width:100%;
  }
  .active-filters-bar[hidden]{display:none}
  .active-filters-bar .qpc{cursor:default}
  .active-filters-bar .qpc-rm{cursor:pointer}
  .active-filters-bar .af-label{
    color:var(--text-3);font-size:11px;letter-spacing:.4px;text-transform:uppercase;
    font-weight:600;margin-right:2px;
  }
  .active-filters-bar .af-footer-row{
    display:flex;justify-content:flex-end;width:100%;padding-top:2px;border-top:1px solid var(--border-subtle);
    margin-top:2px;
  }
  .active-filters-bar .af-clear-all{
    appearance:none;background:transparent;border:1px solid var(--border-subtle);
    color:var(--text-2);font:inherit;font-size:11px;font-weight:500;
    padding:3px 10px;border-radius:999px;cursor:pointer;margin-left:0;
    transition:color .15s,border-color .15s,background .15s;
  }
  .active-filters-bar .af-clear-all:hover{color:var(--text-1);border-color:var(--text-3);background:var(--hover-soft)}
  /* Chip variants per filter source, all using the same dot-pill shape
     so the bar reads consistently regardless of which surface added the
     filter. Hue distinguishes the source at a glance. */
  .qpc--view  {background:var(--accent-bg); border-color:var(--accent-border); color:var(--accent)}
  .qpc--list  {background:var(--success-bg);border-color:var(--success-border);color:var(--success)}
  .qpc--search{background:var(--bg-2);     border-color:var(--border);        color:var(--text-2)}

  /* Daily momentum tile — top of the Tasks panel. Three slots: progress
     ring (done / total due today), streak (consecutive days with ≥1 done
     task), and a 7-day sparkline of completions. Compact horizontal row on
     desktop; stacks on narrow viewports. Tappable cells route into the
     matching smart-view filter. */
  .daily-momentum{
    display:flex;align-items:center;gap:14px;flex-wrap:wrap;
    padding:10px 14px;margin:0 0 10px;
    background:linear-gradient(135deg,var(--accent-bg) 0%,var(--bg-1) 60%);
    border:1px solid var(--border-subtle);border-radius:var(--r-md,10px);
    font-size:13px;color:var(--text-1);
    /* Reserve the rendered height so the first paint already matches the
       populated tile — otherwise renderDailyMomentum unhides a previously
       display:none element and the entire task list jumps down ~60px. */
    min-height:60px;box-sizing:border-box;
  }
  /* When the tile is hidden (no tasks / archive view) keep its slot in the
     layout — visibility:hidden instead of display:none — so toggling never
     reflows neighboring content. */
  .daily-momentum[hidden]{display:block;visibility:hidden}
  .dm-cell{
    display:flex;align-items:center;gap:8px;cursor:pointer;
    padding:4px 8px;border-radius:8px;transition:background .15s;
    background:transparent;border:0;color:inherit;font-family:inherit;font-size:inherit;
  }
  .dm-cell:hover{background:var(--hover-soft)}
  .dm-cell:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .dm-cell-label{color:var(--text-3);font-size:11px;letter-spacing:.4px;text-transform:uppercase;font-weight:600}
  .dm-cell-value{font-size:18px;font-weight:600;color:var(--text-1);line-height:1}
  .dm-cell-value--accent{color:var(--accent)}
  .dm-cell-value--success{color:var(--success)}
  .dm-cell-value--warn{color:var(--warning)}
  .dm-ring{width:36px;height:36px;flex:0 0 36px;position:relative}
  .dm-ring svg{transform:rotate(-90deg);width:100%;height:100%}
  .dm-ring-bg{stroke:var(--border-subtle);stroke-width:4;fill:none}
  .dm-ring-fg{stroke:var(--accent);stroke-width:4;fill:none;stroke-linecap:round;transition:stroke-dashoffset .4s ease}
  .dm-ring-text{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;color:var(--text-1)}
  .dm-spark{display:flex;align-items:flex-end;gap:3px;height:28px}
  .dm-spark-bar{width:8px;background:var(--accent);border-radius:2px 2px 0 0;min-height:2px;transition:height .25s}
  .dm-spark-bar--zero{background:var(--border-subtle)}
  .dm-divider{width:1px;align-self:stretch;background:var(--border-subtle);margin:2px 0}
  @media (max-width:640px){
    .daily-momentum{gap:10px;padding:8px 10px;font-size:12px;min-height:50px}
    .dm-cell-value{font-size:16px}
    .dm-divider{display:none}
  }
  .qpc--recur  {background:var(--purple-bg); border-color:var(--purple-border); color:var(--purple)}
  .qpc--due    {background:var(--accent-bg); border-color:var(--accent-border); color:var(--accent)}
  .qpc--spell  {background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning); font-style:italic}

  /* Depth border colors refined */
  .task-item.depth-1{border-left:2px solid var(--accent-border)}
  .task-item.depth-2{border-left:2px solid var(--success-border)}
  .task-item.depth-3{border-left:2px solid var(--warning-border)}
  .task-item.depth-4{border-left:2px solid var(--purple-border)}

  /* Task checkbox — larger, more obvious */
  .task-checkbox{width:22px;height:22px;border:2px solid var(--border-strong);border-radius:7px;background:transparent;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .2s;cursor:pointer;padding:0}
  .task-checkbox:hover{border-color:var(--success);background:var(--success-bg)}
  .task-checkbox.checked{background:var(--success);border-color:var(--success);color:var(--text-on-accent);font-weight:700;font-size:13px;animation:checkPop .3s ease-out}
  @keyframes checkPop{0%{transform:scale(1)}50%{transform:scale(1.2)}100%{transform:scale(1)}}

  /* Star — prominent when starred */
  .task-star{width:24px;height:24px;font-size:16px;border-radius:var(--r-sm);color:var(--text-4)}
  .task-star:hover{background:var(--bg-3);color:var(--warning)}
  .task-star.starred{color:var(--warning)}
  .task-star.starred:hover{color:var(--warning)}

  /* Play button */
  .task-play{width:28px;height:28px;border-radius:8px;font-size:11px;flex-shrink:0}
  .task-play.go{background:var(--success);color:var(--text-on-accent)}
  .task-play.stop{background:var(--danger);color:var(--text-on-inverse)}

  /* Status badge — readable, not SHOUTY */
  .status-badge{font-size:11px;font-weight:500;letter-spacing:0;text-transform:capitalize;padding:3px 10px;border-radius:999px}
  .status-open{background:transparent;color:var(--text-3);border-color:var(--border)}
  .status-progress{background:var(--accent-bg);color:var(--accent);border-color:var(--accent-border)}
  .status-review{background:var(--purple-bg);color:var(--purple);border-color:var(--purple-border)}
  .status-blocked{background:var(--danger-bg);color:var(--danger);border-color:var(--danger-border)}
  .status-done{background:var(--success-bg);color:var(--success);border-color:var(--success-border)}

  /* Priority — now a numbered flag (P1-P4), Todoist-style */
  .priority-flag{width:auto;height:auto;padding:0 2px;font-size:11px;font-weight:700;font-family:var(--font-sans);border-radius:3px}
  .priority-urgent::before{content:'P1 '}
  .priority-high::before{content:'P2 '}
  .priority-normal::before{content:'P3 '}
  .priority-low::before{content:'P4 '}
  .priority-urgent{color:var(--danger)}
  .priority-high{color:var(--warning)}
  .priority-normal{color:var(--accent)}
  .priority-low{color:var(--text-3)}

  /* Tags */
  .tag-chip{font-size:11px;padding:2px 8px;letter-spacing:0;text-transform:none;font-weight:500;background:var(--bg-3);color:var(--text-2);border-radius:999px;border:none}

  /* Recurring badge */
  .recur-badge{font-size:10px;padding:2px 7px;letter-spacing:0;font-weight:500;background:var(--purple-bg);color:var(--purple);border-color:var(--purple-border)}

  /* Subtask progress */
  .subtask-progress{font-size:11px;color:var(--text-3);gap:8px}
  .sp-bar{width:56px;height:4px;background:var(--bg-3);border-radius:2px}
  .sp-fill{background:linear-gradient(90deg,var(--accent),var(--success))}
  .sp-text{font-weight:600;color:var(--text-2)}

  /* Task actions */
  .task-actions{gap:4px}
  .task-add-sub-btn{background:transparent;border-color:var(--border);color:var(--text-3);font-size:11px;padding:4px 10px;height:26px;font-weight:500;letter-spacing:0}
  .task-add-sub-btn:hover{background:var(--success-bg);border-color:var(--success-border);color:var(--success)}
  .task-rm{width:26px;height:26px;font-size:14px;color:var(--text-4);border-color:transparent;border-radius:var(--r-sm)}
  .task-rm:hover{color:var(--danger);background:var(--danger-bg)}

  /* Empty state */
  .task-empty{padding:48px 16px;color:var(--text-4);font-size:14px;letter-spacing:0;text-transform:none}

  /* Modal — cleaner */
  .modal{background:var(--bg-1);border-color:var(--border);border-radius:var(--r-lg)}
  .shortcuts-help-modal{width:100%;max-width:640px}
  .shortcuts-help-body{display:grid;gap:var(--space-9)}
  .shortcuts-help-group-title{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin-bottom:var(--space-4);font-weight:600}
  .shortcuts-help-grid{display:grid;grid-template-columns:minmax(140px,max-content) 1fr;gap:var(--space-3) 14px;font-size:13px;line-height:1.55}
  .shortcuts-help-kbd{font-family:var(--font-mono);background:var(--bg-2);border:1px solid var(--border-subtle);padding:2px 8px;border-radius:var(--r-sm);color:var(--text-1);font-size:12px;white-space:nowrap}
  .shortcuts-help-val{color:var(--text-2)}
  .modal-head{border-color:var(--border);padding:18px 20px}
  .modal-body{padding:20px}
  .mfield-lbl{font-size:11px;color:var(--text-3);letter-spacing:0;text-transform:none;font-weight:500;margin-bottom:6px}
  .mfield-in{background:var(--bg-2);border-color:var(--border);color:var(--text-1);font-size:14px;padding:10px 12px;border-radius:var(--r-sm)}
  .mfield-in:focus{border-color:var(--accent-border)}
  .mfield-textarea{background:var(--bg-2);border-color:var(--border);color:var(--text-1);font-size:13px;line-height:1.5}
  .mfield-chip-btn{background:var(--bg-2);border-color:var(--border);color:var(--text-2);font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;padding:7px 12px}
  .mfield-chip-btn.active{background:var(--accent-bg);color:var(--accent);border-color:var(--accent-border)}
  .mfield-chip-btn.mfield-chip-btn--cat{border-radius:999px}
  .mfield-chip-btn.mfield-chip-btn--cat:not(.active){
    border-color:color-mix(in srgb,var(--md-cat,var(--border)) 32%,var(--border));
    color:var(--md-cat,var(--text-2));
    background:var(--bg-2);
  }
  .mfield-chip-btn.mfield-chip-btn--cat.active{
    background:color-mix(in srgb,var(--md-cat,var(--accent)) 18%,transparent);
    color:var(--md-cat,var(--accent));
    border-color:var(--md-cat,var(--accent));
  }
  .qd-btn{background:var(--bg-2);border-color:var(--border);color:var(--text-2);font-size:11px;letter-spacing:0;text-transform:none;padding:6px 12px;font-weight:500}
  .qd-btn:hover{background:var(--bg-3);color:var(--text-1)}
  .recur-opt{background:var(--bg-2);border-color:var(--border);color:var(--text-2);font-size:12px;letter-spacing:0;text-transform:none;padding:7px 12px;font-weight:500}
  .recur-opt.active{background:var(--purple-bg);color:var(--purple);border-color:var(--purple-border)}
  .modal-foot{padding:14px 20px;border-color:var(--border);gap:8px}
  .mfoot-btn{font-size:12px;letter-spacing:0;text-transform:none;padding:9px 18px;font-weight:600}
  .mfoot-save{background:var(--accent);color:var(--text-on-accent)}
  .mfoot-save:hover{background:var(--accent-hover)}
  .mfoot-cancel{background:var(--bg-2);border:1px solid var(--border);color:var(--text-2)}
  .mfoot-del{background:transparent;border:1px solid var(--danger-border);color:var(--danger)}
  .mfoot-del:hover{background:var(--danger-bg)}

  /* Board view */
  .board-col{
    flex:0 0 240px;display:flex;flex-direction:column;gap:var(--space-3);
    background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-lg);
    padding:var(--space-5);max-height:600px;
  }
  .board-col-hdr{display:flex;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-2) var(--space-4);border-bottom:1px solid var(--border);margin-bottom:var(--space-2)}
  .board-col-hdr .cc-count{margin-left:auto;font-size:var(--fs-12);color:var(--text-3);background:var(--bg-2);padding:var(--space-1) var(--space-4);border-radius:var(--r-sm)}
  .board-col-body{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:var(--space-3)}
  .board-card{
    cursor:pointer;background:var(--bg-2);border:1px solid var(--border);
    border-radius:var(--r-md);padding:10px 12px;border-left-width:3px;border-left-color:var(--border-strong);
  }
  .board-card:hover{background:var(--bg-3);border-color:var(--border-strong)}
  .board-card-name{font-size:13px;color:var(--text-1);font-weight:500;line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}
  .board-card.priority-urgent-card{border-left-color:var(--danger)}
  .board-breadcrumb{font-size:10px;color:var(--text-3);margin-bottom:4px}
  .board-card.priority-high-card{border-left-color:var(--warning)}
  .board-card.priority-normal-card{border-left-color:var(--accent)}
  .board-card.priority-low-card{border-left-color:var(--text-3)}
  .board-col-empty{font-size:var(--fs-12);color:var(--text-4);text-align:center;padding:var(--space-9) 0;font-style:italic}
  /* ClickUp-style status-coloured column tops (keyed off the col's data-status,
     set in renderBoard). The header pill already carries the same hue. */
  .board-col{border-top-width:3px}
  .board-col[data-status="open"]{border-top-color:var(--text-4)}
  .board-col[data-status="progress"]{border-top-color:var(--accent)}
  .board-col[data-status="review"]{border-top-color:var(--purple)}
  .board-col[data-status="blocked"]{border-top-color:var(--danger)}
  .board-col[data-status="done"]{border-top-color:var(--success)}
  .board-col-hdr .cc-count{font-weight:600;min-width:22px;text-align:center}

  /* Mini timer — refined */
  .mini-timer{background:var(--bg-1);border-color:var(--border);padding:10px 14px;border-radius:999px;box-shadow:var(--shadow-raised)}
  .mini-timer.work{border-left:3px solid var(--accent)}
  .mini-timer.short{border-left:3px solid var(--success)}
  .mini-timer.long{border-left:3px solid var(--warning)}
  .mt-label{font-size:10px;color:var(--text-3);letter-spacing:0;font-weight:500;text-transform:none}
  .mt-time{font-size:15px;font-weight:600;color:var(--text-1);font-family:var(--font-mono);letter-spacing:0}

  /* Banner */
  #banner{background:var(--bg-1)!important;border-color:var(--border)!important;border-radius:var(--r-md)!important;padding:12px 16px!important}

  /* Remove yell-case on scattered labels */
  .fl{font-size:11px;font-weight:500;letter-spacing:0;text-transform:none;color:var(--text-3)}
  .fi{background:var(--bg-2);border-color:var(--border);color:var(--text-1);font-size:13px;padding:8px 10px;border-radius:var(--r-sm)}
  .sr-lbl{font-size:13px;color:var(--text-2);letter-spacing:0}
  .sinput{background:var(--bg-2);border-color:var(--border);color:var(--text-1);font-size:14px}
  .sunit{font-size:11px;color:var(--text-3)}

  /* Main timer card (on Focus tab) */
  .main-card{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-card)}
  .card--work-phase .ring-time,.card--work-phase .ring-label{color:var(--work)}
  .card--short-phase .ring-time,.card--short-phase .ring-label{color:var(--short)}
  .card--long-phase .ring-time,.card--long-phase .ring-label{color:var(--long)}
  .ring-time{font-family:var(--font-mono);font-size:var(--fs-48);font-weight:700;letter-spacing:-.02em;color:var(--text-1)}
  .ring-label{font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--text-3);font-weight:600}
  .phase-nav-hint{font-size:11px;color:var(--text-4);letter-spacing:0;text-transform:none;font-weight:400}
  .tab{font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;padding:10px 0}

  /* Settings */
  .stitle{padding:0}
  .stitle .slbl{font-size:13px}
  .srow{padding:10px 0;border-bottom:1px solid var(--border)}
  .srow:last-child{border-bottom:none}
  /* Srow layout modifiers — replaces inline style= overrides in HTML */
  .srow--spread{justify-content:space-between;gap:10px}
  .srow--col{flex-direction:column;align-items:flex-start;gap:10px;padding:14px 0 0;border-top:1px solid var(--border);margin-top:10px}
  .srow--no-top{margin-top:0;padding-top:0;border-top:none}
  .srow--col-stretch{flex-direction:column;align-items:stretch;gap:8px;padding:14px 0 10px;border-top:1px solid var(--border);margin-top:10px}
  /* Sr-lbl size modifiers */
  .sr-lbl--lg{font-size:13px}
  .sr-lbl--section{font-size:12px;letter-spacing:.06em}
  /* Panel padding modifier for tasks panel */
  .panel--tasks{padding:14px}
  /* Tags bar wrap spacing */
  .tags-bar-wrap{margin-bottom:8px}
  /* Fieldset toolbar reset — border/padding/margin browser defaults */
  .task-toolbar-row{border:0;padding:0;margin:0;display:flex;gap:8px;flex-wrap:wrap}
  .sdot--tasks{background:var(--panel-dot-tasks)}
  /* Plugin panel containers (sync, calfeeds) fill available row width */
  .srow-full{width:100%}
  /* System info text block */
  .system-info{font-size:11px;color:var(--text-3);line-height:1.6;font-variant-numeric:tabular-nums}
  /* PWA status label */
  .pwa-status{font-size:11px;color:var(--text-3);letter-spacing:0;text-align:right;max-width:200px}

  /* Toggle switch — clean */
  /* Toggle is now a <button role="switch">. Reset native button chrome and
     keep the switch visuals. WCAG 2.5.8 minimum: 24x24 — bumped to 44x24 so
     mobile taps are forgiving. */
  .toggle{
    appearance:none;-webkit-appearance:none;
    width:44px;height:24px;padding:0;border:1px solid var(--border-strong);
    border-radius:999px;background:var(--bg-3);
    position:relative;cursor:pointer;transition:.2s;
    flex-shrink:0;
  }
  .toggle.on{background:var(--accent);border-color:var(--accent)}
  .toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .tknob{width:18px;height:18px;background:white;border-radius:50%;position:absolute;top:2px;left:2px;transition:.2s;pointer-events:none}
  .toggle.on .tknob{left:22px}

  /* Interval (repeating chime) rows */
  .iitem{background:var(--bg-2);border-color:var(--border);border-radius:var(--r-md)}
  .iprev,.iadd{background:var(--accent);color:var(--text-on-accent);font-weight:600;font-size:12px;padding:8px 14px;border-radius:var(--r-sm);letter-spacing:0;text-transform:none}
  .iempty{color:var(--text-4);font-size:13px;letter-spacing:0;text-transform:none;padding:20px}

  /* Small buttons */
  .small-btn{font-size:11px;color:var(--text-3);letter-spacing:0;text-transform:none;padding:5px 12px;border-color:var(--border)}
  .small-btn:hover{color:var(--text-1);background:var(--bg-2)}

  /* Log */
  .log-item{padding:8px 0;border-bottom:1px solid var(--border);font-size:12px}
  .log-name{color:var(--text-1);font-size:12px}
  .log-dur,.log-time{font-size:11px;color:var(--text-3);letter-spacing:0}
  .log-empty{color:var(--text-4);font-size:13px;padding:20px;text-align:center}

  /* Stats */
  .stat-grid{gap:10px;margin-top:8px}
  .stat-box{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-lg);padding:14px}
  .stat-val{font-size:28px;font-weight:700;letter-spacing:-.02em;font-family:var(--font-sans)}
  .stat-lbl{font-size:11px;color:var(--text-3);letter-spacing:0;text-transform:none;font-weight:500;margin-top:4px}

  /* Quick timers */
  .qt-item{background:var(--bg-1);border-color:var(--border);border-radius:var(--r-md);padding:12px 14px}
  .qt-item.running{background:linear-gradient(135deg,var(--bg-2),var(--accent-bg));border-color:var(--accent-border)}
  .qt-label{font-size:13px;color:var(--text-1);font-weight:500}
  .qt-time{font-size:20px;font-weight:700;color:var(--text-1);font-family:var(--font-mono);letter-spacing:-.01em}
  .qt-time.running{color:var(--accent)}
  .qt-time.warn{color:var(--warning)}
  .qt-time.done{color:var(--danger)}
  .qt-preset{background:var(--bg-2);border-color:var(--border);color:var(--text-2);font-size:12px;font-weight:500;letter-spacing:0;padding:6px 14px;border-radius:999px}
  .qt-preset:hover{background:var(--bg-3);color:var(--text-1)}

  /* Task desc preview */
  .task-desc-preview{font-size:12px;color:var(--text-3);font-style:normal;letter-spacing:0}
  .task-link-badge{background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-border);font-size:10px;font-weight:600;letter-spacing:0;text-transform:none;padding:1px 7px;border-radius:999px}
  .task-estimate{font-size:11px;color:var(--text-4);letter-spacing:0}

  /* Tabs (phase) on Focus */
  .tabs{display:flex;margin-bottom:var(--space-8);background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--space-2);gap:var(--space-2)}
  .tab{flex:1;text-align:center;color:var(--text-3);background:transparent;border:none;border-radius:var(--r-sm);cursor:pointer;font-family:inherit}

  /* Drag-and-drop */
  .task-item[draggable="true"]{cursor:grab}
  .task-item[draggable="true"]:active{cursor:grabbing}
  /* Legacy native-drag visuals (.dragging, .drop-above, .drop-below) replaced
     by Sortable.js classes: .task-item--ghost (placeholder slot in flow),
     .task-item--chosen (the row your finger is on), .task-item--dragging
     (the floating ghost while moving). The legacy classes are kept defined
     in case any external integration still adds them, but they now point at
     the Sortable equivalents so we don't carry dead styles. */
  .task-item.dragging,
  .task-item--dragging{opacity:.85;box-shadow:var(--shadow-overlay);transform:scale(1.02)}
  .task-item--ghost{opacity:.35;background:var(--accent-bg)!important;border:1px dashed var(--accent-border)!important}
  .task-item--chosen{box-shadow:0 0 0 2px var(--accent-border) inset}
  .board-col.drop-target{background:var(--accent-bg);border-color:var(--accent-border)}
  /* Board card drag state — mirrors task-item--* tokens so the Sortable
     ghost/chosen/dragging classes render consistently across surfaces. */
  .board-card--dragging{opacity:.85;box-shadow:var(--shadow-overlay);transform:scale(1.02)}
  .board-card--ghost{opacity:.35;background:var(--accent-bg)!important;border:1px dashed var(--accent-border)!important}
  .board-card--chosen{box-shadow:0 0 0 2px var(--accent-border) inset}
  /* Card header is the drag-handle surface; cursor cue distinguishes it from
     the children container (which only acts as a drop target). */
  .board-card-header{cursor:grab;display:flex;flex-direction:column;gap:4px}
  .board-card-header:active{cursor:grabbing}
  /* Children container is the nested-Sortable drop target for indent-by-drop.
     Empty/collapsed containers stay invisible until a drag is in flight, then
     surface a slim dashed strip so the user can clearly aim at "nest here". */
  .board-card-children{display:flex;flex-direction:column;gap:5px;margin-top:6px;min-height:0}
  .board-card-children:not(.is-empty):not(.is-collapsed){padding-left:8px;border-left:2px solid var(--border)}
  .board-card-children.is-empty,
  .board-card-children.is-collapsed{min-height:0}
  body.board--dragging .board-card-children.is-empty,
  body.board--dragging .board-card-children.is-collapsed{
    min-height:24px;margin-top:6px;border:1px dashed var(--border-strong);border-radius:var(--r-sm);
    background:var(--bg-2);opacity:.75;
  }
  body.board--dragging .board-card-children.is-empty::before,
  body.board--dragging .board-card-children.is-collapsed::before{
    content:'Nest here';display:block;font-size:10px;color:var(--text-3);text-align:center;padding:4px;
  }
  /* Generic column swatch for non-status group modes (list / priority / due)
     where the header has no STATUSES.cls badge to lean on. */
  .board-col-swatch{display:inline-block;width:10px;height:10px;border-radius:50%;margin-right:6px;background:var(--text-3);flex-shrink:0}
  .board-col-title{font-size:var(--fs-12);font-weight:600;color:var(--text-1)}
  .drag-handle{cursor:grab;color:var(--text-4);font-size:14px;padding:0 2px;flex-shrink:0;user-select:none;width:12px;display:flex;align-items:center;justify-content:center}
  .drag-handle:hover{color:var(--text-2)}
  .drag-handle:active{cursor:grabbing}

  /* Section headers (when grouping) */
  /* Group headers stick to the top of the scroll context so context is never
     lost when scrolling through long grouped lists. */
  .task-section{
    position:sticky;top:0;z-index:5;
    margin:16px 0 8px;padding:8px 12px;
    background:var(--bg-1);
    -webkit-backdrop-filter:saturate(140%) blur(6px);
    backdrop-filter:saturate(140%) blur(6px);
    border:1px solid var(--border);border-radius:var(--r-sm);
    display:flex;align-items:center;gap:var(--space-4);
    cursor:pointer;user-select:none;
  }
  .task-section:first-child{margin-top:0}
  .task-section:hover{background:var(--bg-3)}

  /* Long-list affordance: a 2px scroll-progress bar that fills as the user
     scrolls through a 50+ task list. Auto-hidden on shorter lists. */
  .task-list-progress{
    position:sticky;top:0;z-index:6;
    width:100%;height:2px;background:transparent;
    margin-block-end:var(--space-2);
    border-radius:1px;overflow:hidden;
  }
  .task-list-progress-bar{
    height:100%;width:0%;
    background:linear-gradient(90deg,var(--accent),var(--purple));
    transition:width .12s linear;
  }

  /* Density segmented control. Three radio-buttons styled as one pill. */
  .density-seg{display:inline-flex;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-md);padding:2px;gap:2px}
  .density-seg-btn{
    padding:5px 10px;border-radius:calc(var(--r-md) - 4px);
    background:transparent;color:var(--text-3);
    font-size:var(--fs-12);font-weight:600;letter-spacing:.02em;
    border:1px solid transparent;cursor:pointer;transition:.15s;
  }
  .density-seg-btn:hover{color:var(--text-1)}
  .density-seg-btn.on,.density-seg-btn[aria-checked="true"]{
    background:var(--bg-0);color:var(--text-1);border-color:var(--border-strong);
    box-shadow:var(--shadow-card);
  }
  .density-seg-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
  .ts-chevron{color:var(--text-3);font-size:10px;transition:transform .2s;width:12px;display:inline-flex;justify-content:center}
  .ts-chevron.collapsed{transform:rotate(-90deg)}
  .ts-label{font-size:13px;font-weight:600;color:var(--text-1);letter-spacing:0;flex:1;display:flex;align-items:center;gap:8px}
  .ts-count{font-size:11px;color:var(--text-3);font-weight:500}
  .ts-color{width:10px;height:10px;border-radius:50%;flex-shrink:0}

  /* Completion celebration */
  @keyframes taskDonePop{0%{transform:scale(1)}30%{transform:scale(1.03);background:var(--success-bg)}100%{transform:scale(1)}}
  .task-item.just-done{animation:taskDonePop .5s ease-out}
  @keyframes confetti{0%{opacity:1;transform:translateY(0) scale(1)}100%{opacity:0;transform:translateY(-30px) scale(.3)}}
  .done-sparkle{position:absolute;pointer-events:none;font-size:18px;animation:confetti .6s ease-out forwards}

  /* Calendar view */
  .cal-feed-alert{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:8px;padding:8px 12px;border-radius:var(--r-sm);background:color-mix(in srgb, var(--warning) 12%, transparent);border:1px solid color-mix(in srgb, var(--warning) 35%, transparent);font-size:12px}
  .cal-feed-alert-msg{color:var(--text-1);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cal-feed-alert-btn{flex-shrink:0;padding:4px 10px;border-radius:6px;border:1px solid var(--warning);background:transparent;color:var(--warning);font-size:11px;font-weight:600;cursor:pointer}
  .cal-feed-alert-btn:hover{background:var(--warning);color:var(--text-on-accent)}
  .calendar{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px}
  .cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;gap:8px}
  .cal-title{font-size:16px;font-weight:700;color:var(--text-1);flex:1;text-align:center}
  .cal-nav{width:34px;height:34px;border-radius:var(--r-sm);background:var(--bg-2);border:1px solid var(--border);color:var(--text-2);font-size:16px;cursor:pointer;font-family:inherit}
  .cal-nav:hover{background:var(--bg-3);color:var(--text-1)}
  .cal-today-btn{padding:0 14px;height:34px;border-radius:var(--r-sm);background:var(--accent-bg);border:1px solid var(--accent-border);color:var(--accent);font-size:12px;font-weight:600;cursor:pointer;font-family:inherit}
  .cal-weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin-bottom:6px}
  .cal-weekday{font-size:11px;color:var(--text-3);text-align:center;font-weight:600;padding:6px 0}
  .cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}
  .cal-day{min-width:0;min-height:80px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:6px;display:flex;flex-direction:column;gap:3px;cursor:pointer;transition:.15s;position:relative}
  .cal-day:hover{border-color:var(--border-strong);background:var(--bg-3)}
  .cal-day.other-month{opacity:.35}
  .cal-day.today{border-color:var(--accent);background:linear-gradient(135deg,var(--bg-2),var(--accent-bg))}
  .cal-day.today .cal-daynum{color:var(--accent);font-weight:700}
  .cal-day.selected{border-color:var(--accent);box-shadow:inset 0 0 0 2px color-mix(in srgb, var(--accent) 45%, transparent)}
  .cal-day.drop-target{border-color:var(--accent);background:var(--accent-bg)}
  .cal-daynum{font-size:12px;font-weight:600;color:var(--text-2)}
  .cal-task{min-width:0;max-width:100%;font-size:10px;padding:2px 6px;border-radius:4px;background:var(--bg-3);color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;border-left:2px solid var(--accent)}
  .cal-task:hover{background:var(--border-strong)}
  .cal-task.p-urgent{border-left-color:var(--danger)}
  .cal-task.p-high{border-left-color:var(--warning)}
  .cal-task.p-normal{border-left-color:var(--accent)}
  .cal-task.p-low{border-left-color:var(--text-3)}
  .cal-task.done{opacity:.4;text-decoration:line-through}
  .cal-task-more{font-size:10px;color:var(--accent);text-align:center;padding:2px 4px;border:none;background:transparent;cursor:pointer;font-family:inherit;width:100%}
  .cal-task-more:hover{text-decoration:underline}
  .cal-day-agenda{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}
  .cal-agenda-head{font-size:13px;font-weight:700;color:var(--text-1);margin-bottom:8px}
  .cal-agenda-list{display:flex;flex-direction:column;gap:6px;max-height:min(40vh,320px);overflow-y:auto}
  .cal-agenda-row{display:grid;grid-template-columns:8px 64px 1fr auto auto;align-items:center;gap:8px;font-size:12px;padding:6px 8px;border-radius:var(--r-sm);background:var(--bg-2);border:1px solid var(--border)}
  .cal-agenda-task{cursor:pointer}
  .cal-agenda-task:hover{background:var(--bg-3)}
  .cal-agenda-task.done{opacity:.45;text-decoration:line-through}
  .cal-agenda-dot{width:8px;height:8px;border-radius:50%;background:var(--accent)}
  .cal-agenda-time{color:var(--text-3);font-variant-numeric:tabular-nums;font-size:11px}
  .cal-agenda-title{color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .cal-agenda-src{color:var(--text-3);font-size:10px;white-space:nowrap}
  .cal-agenda-mk{font-size:10px;padding:2px 6px;border-radius:4px;border:1px solid var(--border);background:var(--bg-3);color:var(--text-2);cursor:pointer}
  .cal-agenda-empty{font-size:12px;color:var(--text-3);padding:8px 4px}

  /* Command Palette (Cmd+K) — same state-driven pattern as .modal-overlay,
     just snappier (var(--dur-fast)) and fade-only (no transform). Backdrop
     blur deferred via .backdrop-ready so the GPU does not composite during fade. */
  .cmdk-overlay{position:fixed;inset:0;background:rgba(0,0,0,.6);z-index:var(--z-cmdk);display:flex;align-items:flex-start;justify-content:center;padding:80px 16px 16px;padding-bottom:calc(16px + var(--kb-inset, 0px));opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--dur-fast) var(--ease-out),visibility 0s linear var(--dur-fast)}
  .cmdk-overlay.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity var(--dur-fast) var(--ease-out),visibility 0s linear 0s}
  .cmdk-overlay.backdrop-ready{backdrop-filter:blur(6px)}
  .cmdk-panel{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-lg);width:100%;max-width:560px;box-shadow:var(--shadow-overlay);overflow:hidden;max-height:min(90vh, var(--vv-height, 90dvh))}
  .cmdk-input{width:100%;padding:16px 18px;background:transparent;border:none;color:var(--text-1);font-size:15px;font-family:inherit;outline:0;border-bottom:1px solid var(--border)}
  .cmdk-input::placeholder{color:var(--text-4)}
  .cmdk-results{max-height:420px;overflow-y:auto;padding:6px}
  .cmdk-section{font-size:10px;color:var(--text-3);padding:10px 10px 4px;font-weight:600;letter-spacing:.04em;text-transform:uppercase}
  .cmdk-item{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:var(--r-sm);cursor:pointer;transition:.1s;font-size:13px;color:var(--text-1)}
  .cmdk-item.active{background:var(--accent-bg);color:var(--accent)}
  .cmdk-item:hover{background:var(--bg-2)}
  .cmdk-icon{width:22px;height:22px;display:flex;align-items:center;justify-content:center;font-size:13px;color:var(--text-3);flex-shrink:0}
  .cmdk-item.active .cmdk-icon{color:var(--accent)}
  .cmdk-desc{font-size:11px;color:var(--text-3);margin-left:auto}
  .cmdk-kbd{font-family:var(--font-mono);font-size:10px;background:var(--bg-2);border:1px solid var(--border);padding:1px 6px;border-radius:4px;color:var(--text-3);margin-left:auto}
  .cmdk-empty{text-align:center;padding:32px;color:var(--text-4);font-size:13px}

  /* ========== FINAL POLISH OVERRIDES ========== */
  .tag-edit-chip{background:var(--bg-3);color:var(--text-2);border:none;font-size:11px;padding:3px 10px;letter-spacing:0;text-transform:none;font-weight:500;border-radius:999px}
  .tag-edit-chip .tag-rm{color:var(--text-4);font-size:12px}
  .tag-edit-chip .tag-rm:hover{color:var(--danger)}
  .tag-input{background:var(--bg-2);border-color:var(--border);color:var(--text-1);font-size:12px;padding:4px 10px;border-radius:999px}

  .export-btn{font-size:12px;font-weight:500;letter-spacing:0;text-transform:none;padding:9px 14px;border-radius:var(--r-sm);background:var(--bg-2);color:var(--text-2);border:1px solid var(--border)}
  .export-btn:hover{background:var(--bg-3);color:var(--text-1)}
  .export-txt,.export-md,.export-csv,.export-clip{background:var(--bg-2);color:var(--text-2);border:1px solid var(--border)}
  .export-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}

  .save-indicator{background:var(--success-bg)!important;color:var(--success)!important;font-size:11px!important;letter-spacing:0!important;text-transform:none!important;padding:6px 12px!important;border-radius:999px!important;border:1px solid var(--success-border)!important;bottom:90px!important;right:16px!important;font-weight:500!important}

  .hist-day-section-title{font-size:11px;letter-spacing:0;text-transform:none;color:var(--text-3);font-weight:500;margin-bottom:6px}

  .clear-hist-btn{background:transparent;color:var(--text-3);border:1px solid var(--border);font-size:11px;font-weight:500;letter-spacing:0;text-transform:none;padding:6px 14px;border-radius:var(--r-sm)}
  .clear-hist-btn:hover{color:var(--danger);border-color:var(--danger-border)}

  /* Ensure datetime pickers show readable */
  input[type="date"].mfield-in,input[type="datetime-local"].mfield-in{color-scheme:dark}
  body.light-theme input[type="date"].mfield-in,body.light-theme input[type="datetime-local"].mfield-in{color-scheme:light}

  .qa-hint{line-height:1.8}

  /* Pomodoro pips - colorized */
  .pip{width:10px;height:10px;border:1.5px solid var(--border-strong)}
  .pip:hover{transform:scale(1.2)}
  .pip.done{background:var(--accent);border-color:var(--accent);box-shadow:0 0 8px var(--accent-border)}
  .pip.current{border-color:var(--accent)}

  /* Ring background refined */
  .ring-bg{stroke:var(--bg-3)!important}

  /* Chrome sub-timer style polish */
  .ilist{margin-top:10px;display:flex;flex-direction:column;gap:6px}
  .iform{margin-top:10px}

  /* Modal Stats row */
  .modal-stat{background:var(--bg-2);color:var(--text-2);font-size:12px;padding:10px 14px;border-radius:var(--r-sm);letter-spacing:0;text-transform:none;line-height:1.5}
  .modal-stat b{color:var(--text-1)}

  /* Log dot + dur */
  .log-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}

  /* Archive blocks */
  .archive-day{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-md);padding:10px 14px;margin-bottom:8px;cursor:pointer}
  .archive-day:hover{background:var(--bg-3)}
  .archive-day-hdr{display:flex;align-items:center;gap:10px}
  .archive-day-date{font-size:13px;font-weight:600;color:var(--text-1)}
  .archive-day-summary{font-size:11px;color:var(--text-3);margin-left:auto}

  /* ===== Final micro-fixes ===== */
  /* Repeating chime + Quick timer ADD buttons */
  .iadd{background:var(--accent);color:var(--text-on-accent);font-weight:600;padding:9px 14px;font-size:12px;letter-spacing:0;text-transform:none;border-radius:var(--r-sm)}
  .iadd:hover{background:var(--accent-hover)}
  .iprev{background:var(--bg-2);color:var(--text-2);border:1px solid var(--border);font-size:13px;padding:9px 12px;border-radius:var(--r-sm)}
  .iprev:hover{background:var(--bg-3);color:var(--text-1)}

  /* Goal add button */
  .goal-add{background:var(--accent);color:var(--text-on-accent);font-weight:600;padding:9px 14px;font-size:12px;letter-spacing:0;text-transform:none;border-radius:var(--r-sm)}
  .goal-add:hover{background:var(--accent-hover)}

  /* Calendar day readability in light theme */
  body.light-theme .cal-task{background:var(--bg-3);color:var(--text-1);border:1px solid var(--border)}
  body.light-theme .cal-day.today{background:var(--accent-bg)}
  body.light-theme .cal-day{background:var(--bg-1)}
  body.light-theme .cal-day:hover{background:var(--bg-2)}

  /* Stat value colors in light theme */
  body.light-theme .stat-val.wc{color:var(--accent)}
  body.light-theme .stat-val.tc{color:var(--warning)}
  body.light-theme .stat-val.bc{color:var(--success)}

  /* Mini-timer pause/play use same on-accent text as other solid buttons */
  .mt-btn{color:var(--text-on-accent);font-weight:700;font-size:12px}
  .mt-pause{background:var(--accent)!important}
  .mt-play{background:var(--success)!important}

  /* Light theme ring */
  body.light-theme .ring-bg{stroke:var(--border-subtle)!important}

  /* Light theme banner */
  body.light-theme #banner{background:var(--bg-1)!important;border-color:var(--border)!important}

  /* Modal overlay in light */
  body.light-theme .modal-overlay{background:rgba(15,23,42,.2)}

  /* Done-sparkle visibility in both themes */
  .done-sparkle{filter:drop-shadow(0 0 6px var(--success))}

  /* Consistent scrollbar color in light */
  body.light-theme *::-webkit-scrollbar-thumb{background:var(--border-strong)}

  /* Ensure number/date inputs match dark mode */
  .fi,.fi-n,.fi-s,.fi-w{color-scheme:dark}
  body.light-theme .fi,body.light-theme .fi-n,body.light-theme .fi-s,body.light-theme .fi-w{color-scheme:light}
  .sinput{color-scheme:dark}
  body.light-theme .sinput{color-scheme:light}

  .tab.active.work{background:var(--accent);color:var(--text-on-accent)}
  .tab.active.short{background:var(--success);color:var(--text-on-accent)}
  .tab.active.long{background:var(--warning);color:var(--text-on-accent)}

  /* Light theme tab label when active (dark text on light button) */
  body.light-theme .tab.active.work,body.light-theme .tab.active.short,body.light-theme .tab.active.long{color:var(--text-on-accent)}

  /* ================================================================= */
  /* ========= NEUROSCIENCE-BACKED TASK ROW (v2) ===================== */
  /* • Cognitive Load Theory — minimize extraneous load                 */
  /* • Progressive Disclosure — hide until needed                       */
  /* • Fitts's Law — large checkbox, whole row clickable                */
  /* • Preattentive processing — color stripe signals priority          */
  /* ================================================================= */
  .task-item{
    background:var(--bg-1);
    border:1px solid var(--border);
    border-left:3px solid var(--border);
    border-radius:var(--r-md);
    padding:0;gap:0;margin-bottom:4px;
    transition:background .12s,border-color .12s;
    position:relative;display:flex;flex-direction:column;align-items:stretch;
  }
  .task-item:hover{background:var(--bg-2);border-color:var(--border-strong)}
  .task-item.priority-urgent-item{border-left-color:var(--danger)}
  .task-item.priority-high-item{border-left-color:var(--warning)}
  .task-item.priority-normal-item{border-left-color:var(--accent)}
  .task-item.priority-low-item{border-left-color:var(--text-4)}
  .task-item.starred-task{border-left-color:var(--starred)}
  .task-item.starred-task:hover{background:linear-gradient(90deg,var(--warning-bg),var(--bg-2))}
  .task-item.overdue{border-left-color:var(--danger)!important;border-left-width:3px!important}
  .task-item.active-task{
    background:linear-gradient(90deg,var(--accent-bg) 0%,var(--bg-1) 40%);
    border-color:var(--accent-border);
    border-left-color:var(--accent)!important;
  }
  .task-item.completed{opacity:.45}
  .task-item.completed .task-name{text-decoration:line-through;color:var(--text-3)}
  .task-item.completed .task-signals,.task-item.completed .task-row-secondary-wrap{display:none}
  .task-sig.sig-habit{background:var(--purple-bg);color:var(--purple);font-size:10px;font-weight:600}
  .task-checkbox--habit{border-color:var(--purple-border)}
  .task-checkbox--habit:hover{border-color:var(--purple);background:var(--purple-bg)}

  .task-row-primary{
    /* column-gap (not gap) keeps a tight horizontal rhythm: chevron+checkbox
       cluster snug to the title, while .task-row-actions pushes itself to the
       trailing edge via margin-inline-start:auto. */
    display:flex;align-items:center;column-gap:var(--space-5);
    padding:11px 14px;min-height:48px;cursor:pointer;
  }
  .task-row-primary .task-checkbox{
    width:22px;height:22px;min-width:22px;
    border:2px solid var(--border-strong);border-radius:7px;
    background:var(--bg-2);
    display:flex;align-items:center;justify-content:center;
    color:transparent;font-weight:700;font-size:13px;
    transition:all .15s;cursor:pointer;padding:0;flex-shrink:0;
  }
  .task-row-primary .task-checkbox:hover{border-color:var(--success);background:var(--success-bg);transform:scale(1.08)}
  .task-row-primary .task-checkbox.checked{background:var(--success);border-color:var(--success);color:var(--text-on-accent);animation:checkPop .3s ease-out}

  .task-row-primary .task-chevron{
    width:18px;height:18px;min-width:18px;
    background:transparent;border:none;
    color:var(--text-3);font-size:10px;
    display:flex;align-items:center;justify-content:center;
    cursor:pointer;padding:0;border-radius:4px;
    transform:rotate(90deg);transition:transform .15s,color .15s;
  }
  .task-row-primary .task-chevron:hover{color:var(--text-1);background:var(--bg-3)}
  .task-row-primary .task-chevron.collapsed{transform:rotate(0deg)}
  .task-chevron-spacer{width:0;min-width:0;display:none}

  .task-main{flex:1;min-width:0;display:flex;align-items:center;gap:10px;overflow:hidden}
  .star-pin{color:var(--starred);font-size:13px;flex-shrink:0;filter:drop-shadow(0 0 4px color-mix(in srgb,var(--starred) 40%,transparent))}
  .task-main .task-name{
    /* Bumped to weight 600 for hierarchy: title vs. signals/actions. */
    font-size:var(--fs-14);font-weight:600;color:var(--text-1);line-height:1.3;
    overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
    flex:1;min-width:0;
  }
  .task-item.has-children .task-name{font-weight:700}

  .task-signals{display:flex;align-items:center;gap:var(--space-3);flex-shrink:0;font-size:var(--fs-12);color:var(--text-3)}
  .task-sig{font-size:var(--fs-12);font-weight:500;padding:2px 8px;border-radius:999px;white-space:nowrap;background:var(--bg-3);color:var(--text-3)}
  .task-sig.sig-subs{font-family:var(--font-mono);font-size:10px;padding:2px 7px}
  .task-sig.sig-recur{background:var(--purple-bg);color:var(--purple);padding:2px 6px;font-size:10px}
  .task-sig.sig-active{background:var(--accent-bg);color:var(--accent);font-weight:600;font-family:var(--font-mono)}

  /* ===== ACTIONS — soft-visible by default, full opacity on hover ===== */
  /* Hybrid disclosure: shows affordance always (so users know it's there)  */
  /* but de-emphasized at rest (so it doesn't compete with content)         */
  .task-row-actions{
    display:flex;align-items:center;gap:var(--space-1);
    margin-inline-start:auto;
    opacity:.35;transition:opacity .15s;
    flex-shrink:0;
  }
  .task-item:hover .task-row-actions,
  .task-item:focus-within .task-row-actions{opacity:1}
  @media (hover:none){.task-row-actions{opacity:1}}

  .ta-btn{
    width:28px;height:28px;background:transparent;border:none;
    color:var(--text-3);font-size:13px;border-radius:var(--r-sm);cursor:pointer;
    display:flex;align-items:center;justify-content:center;transition:all .12s;padding:0;
  }
  .ta-btn:hover{background:var(--bg-3);color:var(--text-1)}
  .ta-btn.ta-star.on{color:var(--warning)}
  .ta-btn.ta-star.on:hover{background:var(--warning-bg)}
  .ta-btn.ta-play{color:var(--success)}
  .ta-btn.ta-play:hover{background:var(--success-bg)}
  .ta-btn.ta-play.on{color:var(--danger);background:var(--danger-bg)}
  .ta-btn.ta-del:hover{color:var(--danger);background:var(--danger-bg)}
  .ta-btn.ta-sub:hover{color:var(--success);background:var(--success-bg)}
  .task-item.active-task .task-row-actions .ta-play,
  .task-item.starred-task .task-row-actions .ta-star{opacity:1!important;pointer-events:auto!important}

  .ta-btn.ta-more{font-size:16px;line-height:1;color:var(--text-3)}
  .ta-btn.ta-more:hover{background:var(--bg-3);color:var(--text-1)}
  .ta-btn.ta-move{color:var(--text-2)}
  .ta-btn.ta-move:hover{background:var(--bg-3);color:var(--text-1)}
  .ta-btn.ta-move:disabled{opacity:.3;cursor:default}
  .ta-btn.ta-move:disabled:hover{background:transparent;color:var(--text-2)}

  /* Reorder mode: keep the arrange controls visible (no hover gating) and tint
     the rows so it's obvious the list is in an editing mode. */
  body.reorder-mode .task-row-actions{opacity:1!important}
  body.reorder-mode .task-item{cursor:default}
  body.reorder-mode .task-item .task-name{cursor:default}

  /* ⋯ overflow popover */
  .task-action-menu{
    position:fixed;z-index:var(--z-popover,100);min-width:172px;padding:6px;
    background:var(--bg-1);border:1px solid var(--border);
    border-radius:10px;box-shadow:0 12px 32px rgba(0,0,0,.5);
    display:flex;flex-direction:column;gap:2px;animation:fadeIn .12s;
  }

  /* Dropdown — small selection popover with optional bottom-sheet variant
     on narrow viewports. Same visual base as .task-action-menu, plus an
     inline trigger button + hidden shadow-select that keeps the existing
     save-detail logic (which reads gid('mdRecur').value etc.) working
     unchanged. */
  .dropdown-popover{
    position:fixed;z-index:var(--z-popover,100);
    background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-md);
    box-shadow:var(--shadow-overlay);
    min-width:200px;max-width:320px;max-height:60vh;
    overflow:hidden;display:flex;flex-direction:column;
    animation:fadeIn .12s ease-out;
  }
  .dropdown-sheet{
    position:fixed;left:0;right:0;bottom:0;z-index:var(--z-modal);
    background:var(--bg-2);border-top:1px solid var(--border);
    border-radius:16px 16px 0 0;
    box-shadow:var(--shadow-overlay);
    max-height:70vh;padding-bottom:calc(8px + env(safe-area-inset-bottom,0px));
    display:flex;flex-direction:column;
    animation:slideIn .2s ease-out;
  }
  .dropdown-search{
    width:100%;padding:10px 12px;background:transparent;border:none;
    border-bottom:1px solid var(--border);color:var(--text-1);
    font:inherit;outline:0;
  }
  .dropdown-list{overflow-y:auto;padding:4px 0;flex:1}
  .dropdown-item{
    display:flex;align-items:center;gap:8px;width:100%;
    padding:8px 12px;background:transparent;border:none;
    color:var(--text-1);font:inherit;font-size:13px;text-align:left;cursor:pointer;
  }
  .dropdown-item:hover,.dropdown-item.is-highlight{background:var(--bg-3)}
  .dropdown-item.is-selected{color:var(--accent);font-weight:600}
  .dropdown-swatch{width:10px;height:10px;border-radius:50%;flex-shrink:0;display:inline-block}
  .dropdown-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dropdown-trigger{
    display:inline-flex;align-items:center;gap:6px;width:100%;
    padding:8px 12px;background:var(--bg-0);border:1px solid var(--border);
    border-radius:var(--r-sm);color:var(--text-1);font:inherit;font-size:12px;
    cursor:pointer;min-height:32px;font-family:inherit;
  }
  .dropdown-trigger:hover{border-color:var(--accent-border)}
  .dropdown-trigger-label{flex:1;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .dropdown-trigger-caret{opacity:.6;flex-shrink:0}
  .dropdown-shadow-select{display:none!important}
  .task-action-menu .tam-item{
    display:flex;align-items:center;gap:10px;width:100%;
    padding:10px 12px;min-height:40px;
    background:transparent;border:none;border-radius:7px;
    color:var(--text-1);font-size:13px;font-family:inherit;
    cursor:pointer;text-align:start;
  }
  .task-action-menu .tam-item:hover,
  .task-action-menu .tam-item:focus-visible{background:var(--bg-3);outline:none}
  .task-action-menu .tam-item.tam-danger{color:var(--danger)}
  .task-action-menu .tam-item.tam-danger:hover{background:var(--danger-bg,rgba(229,72,77,.12))}
  .task-action-menu .tam-ic{width:18px;text-align:center;flex-shrink:0;opacity:.85}
  .task-action-menu .tam-hdr{
    padding:6px 12px 4px;font-size:11px;font-weight:600;letter-spacing:.04em;
    text-transform:uppercase;color:var(--text-2);
  }

  /* Reorder-mode toggle inside the View sheet */
  .reorder-toggle{
    display:flex;align-items:center;gap:10px;width:100%;
    padding:12px 14px;min-height:44px;
    background:var(--bg-2);border:1px solid var(--border);
    border-radius:10px;color:var(--text-1);font-size:13px;font-weight:500;
    font-family:inherit;cursor:pointer;transition:.15s;text-align:start;
  }
  .reorder-toggle:hover{background:var(--bg-3);border-color:var(--border-strong)}
  .reorder-toggle.active{background:var(--accent);color:var(--text-on-accent);border-color:var(--accent)}
  .reorder-toggle .reorder-toggle-ic{font-size:16px;opacity:.85}

  .task-cat-stripe{box-shadow:inset 3px 0 0 0 var(--cat-stripe, transparent)}
  .task-item--pareto{box-shadow:0 0 0 1px rgba(255,176,46,.35),var(--shadow-card)}
  .task-item--tracking .task-name::before{
    content:'';display:inline-block;width:6px;height:6px;margin-right:6px;vertical-align:middle;
    border-radius:50%;background:var(--accent);box-shadow:0 0 6px var(--accent);
  }
  .habits-hidden-notice{
    font-size:11px;color:var(--text-3);padding:6px 4px 10px;
    text-align:center;
  }
  .habits-hidden-notice .habits-hidden-link,
  .habits-hidden-notice .btn-habits-link{
    background:none;border:none;color:var(--accent);text-decoration:underline;cursor:pointer;font:inherit;padding:0;
  }
  /* ===== DENSITY MODES =====
     Comfortable: roomy, secondary row visible always (no hover required).
     Cozy: default — secondary row (status, tags) always visible; density from padding.
     Compact: tight rows, smaller checkbox — secondary row always visible so status
              is not clipped under the checkbox. */
  .task-list--comfortable .task-row-primary{padding:14px 16px;min-height:56px;column-gap:var(--space-6)}
  .task-list--comfortable .task-item{padding-block-end:2px}
  .task-list--cozy .task-row-primary{padding:11px 14px;min-height:48px}
  .task-list--compact .task-row-primary{padding:6px 10px;min-height:36px;column-gap:var(--space-4)}
  .task-list--compact .task-name{font-size:var(--fs-13)}
  .task-list--compact .task-row-primary .task-checkbox{width:18px;height:18px;min-width:18px;border-width:1.5px}
  .task-list--compact .task-sig{padding:1px 6px;font-size:11px}
  .task-list--compact .task-row-secondary{padding:0 10px 6px 36px}
  /* Cozy & compact: always expand the status row. Collapsed 0fr left only the
     top of the badge visible under the checkbox (unreadable sliver). */
  .task-list--cozy .task-row-secondary-wrap,
  .task-list--compact .task-row-secondary-wrap{grid-template-rows:1fr}
  .task-row-secondary-wrap{
    display:grid;grid-template-rows:0fr;transition:grid-template-rows .2s var(--ease-out);
    overflow:hidden;
  }
  .task-item:hover .task-row-secondary-wrap,
  .task-item:focus-within .task-row-secondary-wrap{grid-template-rows:1fr}
  @media (prefers-reduced-motion:reduce){
    .task-row-secondary-wrap{transition:none}
  }
  .task-row-secondary{
    display:flex;align-items:center;gap:8px;flex-wrap:wrap;
    padding:0 14px 10px 52px;font-size:12px;color:var(--text-3);
    overflow:hidden;min-height:0;
  }
  .task-list--comfortable .task-row-secondary-wrap{grid-template-rows:1fr}
  @media (hover:none){
    .task-row-secondary-wrap{grid-template-rows:1fr}
    /* On touch devices, list chip Edit (✎) and Remove (✕) icons stay visible
       and meet a comfortable tap area — hover-only reveal is unreachable here */
    .list-chip .lc-edit,
    .list-chip .lc-rm{
      opacity:.7;font-size:13px;
      min-width:32px;min-height:32px;padding:0 6px;
      display:inline-flex;align-items:center;justify-content:center;
      border-radius:6px;
    }
    .list-chip .lc-edit:active,
    .list-chip .lc-rm:active{opacity:1;background:var(--bg-3)}
  }
  .task-row-secondary:empty{display:none}
  .task-row-secondary .status-badge{font-size:10px;padding:2px 8px;min-height:auto}
  /* status-badge is now always visible — keyboard users couldn't reach the
     legacy hover-only chip. The class is kept for backward-compat callers
     that haven't been re-rendered. */
  .task-row-secondary .status-badge.hidden-status{display:inline-flex;opacity:.65}
  .task-tags-inline{display:inline-flex;gap:4px;flex-wrap:wrap}
  .task-tags-inline .tag-chip{font-size:10px;padding:1px 7px;background:var(--bg-3);color:var(--text-3);border:none}
  .task-desc-inline{font-size:11px;color:var(--text-4);font-style:italic;max-width:300px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

  @media (max-width:640px){
    .task-row-primary{padding:10px 12px;gap:8px;min-height:52px}
    .task-row-actions{opacity:1;pointer-events:auto;gap:0}
    .ta-btn{width:36px;height:36px;font-size:15px}
    .ta-btn.ta-sub,.ta-btn.ta-star:not(.on){display:none}
    .task-item.starred-task .ta-star{display:flex}
    .task-row-secondary{padding:0 12px 8px 46px;font-size:11px}
    .task-sig{font-size:10px;padding:1px 6px}
    .task-signals{gap:4px}
  }

  /* ================================================================= */
  /* ================== MOBILE OPTIMIZATION (≤640px) ================== */
  /* ================================================================= */

  /* iOS zoom prevention — inputs MUST be ≥16px */
  @media (max-width:640px){
    input,select,textarea{font-size:16px!important}
    .task-input,.mfield-in,.mfield-textarea,.task-search,.task-tb-sel,.goal-input,.sinput,.fi,.list-new-input,.tag-input,.task-sub-input,.cmdk-input{font-size:16px!important}
  }

  @media (max-width:640px){
    /* Safe-area padding for iPhone notches/home indicator */
    body{padding:env(safe-area-inset-top,12px) 12px calc(60px + env(safe-area-inset-bottom,0px))}

    .container{max-width:100%}

    /* Header - smaller on mobile */
    .header{margin-bottom:14px}
    .header h1{font-size:18px}
    .header-logo{width:26px;height:26px}
    .header-date{font-size:12px;margin-top:2px}

    /* Banner (active-task tracker) - compact */
    #banner{padding:8px 10px!important;margin-bottom:8px!important}
    #bannerTask{font-size:12px!important}
    #bannerTime{font-size:13px!important}

    /* Nav tabs - icon only on mobile, smaller */
    .nav-tabs{padding:3px;gap:1px}
    .nav-tab{padding:8px 2px;min-height:48px;font-size:10px;gap:2px}
    .nav-tab-icon{font-size:16px}
    .nav-tab span:last-child{font-size:10px;letter-spacing:0}
    /* Theme + Ask / palette button */
    #themeToggleBtn{width:40px!important;height:40px!important;min-width:40px}
    #cmdKBtn.header-icon-btn--cmdk{width:auto!important;height:auto!important;min-width:56px!important;min-height:44px!important;padding:0 10px!important}
    .ai-chip{height:36px;padding:0 6px;min-width:36px;justify-content:center}
    .ai-chip-label{font-size:10px}
    body:has(.mini-timer.visible){padding-bottom:calc(88px + env(safe-area-inset-bottom,0px))!important}
    /* FAB visible on touch/narrow viewports. Lifts above the mini-timer when
       both are showing so they don't stack on top of each other. The
       soft-keyboard inset class hides the FAB so it doesn't float over the
       keyboard while the user is already typing somewhere else. */
    .quick-add-fab{display:flex}
    body:has(.mini-timer.visible) .quick-add-fab{bottom:calc(92px + env(safe-area-inset-bottom,0px))}
    html.kb-open .quick-add-fab{display:none}
    /* The inline add-task cluster is owned by #quickAddSheet on mobile (the FAB
       relocates it there); hide the inline anchor so it doesn't double up. When
       the node is moved into the sheet it's no longer inside the anchor, so it
       shows there. */
    #quickAddAnchor{display:none}

    /* Panel - tighter padding, still softly rounded */
    .panel{padding:12px;margin-bottom:10px;border-radius:var(--r-lg)}

    /* Today banner - row layout, no 2x2 */
    .today-banner{padding:12px 8px;margin-bottom:10px;gap:4px!important;flex-wrap:nowrap!important}
    .tb-item{flex:1!important;min-width:0!important;text-align:center;padding:0 2px}
    .tb-num{font-size:22px!important}
    .tb-lbl{font-size:10px!important;white-space:normal;word-break:keep-all;line-height:1.15}
    .tb-divider{display:none!important}

    /* Smart views - horizontal scroll instead of wrap. mask-image fades the
       right edge so users SEE that more chips exist beyond the viewport;
       without it, "Fo..." cut-offs read as visual bugs rather than scroll
       affordances. */
    .smart-views{padding:4px;overflow-x:auto;flex-wrap:nowrap!important;scrollbar-width:none;-webkit-overflow-scrolling:touch;touch-action:pan-x;-webkit-mask-image:linear-gradient(90deg,black 0,black calc(100% - 28px),transparent 100%);mask-image:linear-gradient(90deg,black 0,black calc(100% - 28px),transparent 100%)}
    .smart-views::-webkit-scrollbar{display:none}
    .sv-chip{white-space:nowrap;flex-shrink:0;padding:10px 12px;min-height:40px;font-size:13px}
    .sv-icon{font-size:14px}
    .sv-count{font-size:11px;padding:1px 7px}

    /* Lists bar - horizontal scroll, same fade affordance as smart-views. */
    .lists-bar{overflow-x:auto;flex-wrap:nowrap!important;scrollbar-width:none;gap:6px;padding:8px;-webkit-overflow-scrolling:touch;touch-action:pan-x;-webkit-mask-image:linear-gradient(90deg,black 0,black calc(100% - 28px),transparent 100%);mask-image:linear-gradient(90deg,black 0,black calc(100% - 28px),transparent 100%)}
    .lists-bar::-webkit-scrollbar{display:none}
    .list-chip{white-space:nowrap;flex-shrink:0;padding:8px 12px;min-height:40px;font-size:13px}
    .list-add{flex-shrink:0;padding:8px 12px;min-height:40px;font-size:13px}

    /* Toolbar — stack into 2 rows: search full-width, then selects+views */
    .task-toolbar{flex-direction:column!important;gap:6px!important;padding:8px;align-items:stretch!important}
    .task-search{width:100%;min-height:44px;font-size:16px!important;padding:10px 12px!important}
    .task-toolbar-row{display:flex;gap:6px;width:100%;flex-wrap:wrap}
    .task-tb-sel{flex:1;min-width:0;min-height:44px;font-size:13px!important;padding:8px 10px!important}
    .view-toggle{width:100%;justify-content:space-between;display:flex!important}
    .view-toggle button{flex:1;min-height:40px;font-size:13px;padding:8px 12px}

    /* Task input + Add button - bigger */
    .task-form{flex-direction:row;gap:6px;padding:0}
    .task-input{flex:1;min-height:46px;font-size:16px!important;padding:11px 14px!important}
    .task-add{min-height:46px;padding:0 16px;font-size:14px;white-space:nowrap}

    /* Quick-add hint - hide on mobile (takes too much space) */
    .qa-hint{display:none}

    /* Task item - vertical stack: checkbox+play top, name+meta below */
    .task-item{padding:10px 12px;gap:8px;flex-wrap:wrap;align-items:flex-start}
    .task-item > *{flex-shrink:0}
    /* WCAG 2.5.5 minimum tap target — 24x24 was below the AAA threshold and
       a magnet for mis-taps on dense lists (#17 in UX audit). */
    .task-item .task-checkbox{width:28px;height:28px;min-width:28px;min-height:28px}
    .task-item .task-star{width:30px;height:30px;min-width:30px;font-size:15px}
    .task-item .task-play{width:34px;height:34px;min-width:34px;font-size:12px}
    .task-name-col{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
    .task-name{font-size:14px;white-space:normal!important;overflow:visible!important;text-overflow:unset!important;word-break:break-word}
    .task-meta-row{width:100%;gap:6px;margin-top:4px;flex-wrap:wrap}
    .task-actions{width:auto;margin-left:auto;gap:4px;flex-shrink:0}
    .task-add-sub-btn{padding:6px 10px;height:30px;font-size:11px;min-width:50px}
    .task-rm{width:30px;height:30px;min-width:30px;font-size:15px}
    .status-badge{padding:4px 10px;font-size:11px;min-height:24px}
    .priority-flag{font-size:12px;padding:2px 4px;min-height:20px}
    .date-chip{padding:4px 10px;font-size:11px;min-height:24px}
    .tag-chip{padding:3px 10px;font-size:11px;min-height:22px}
    .recur-badge{padding:3px 9px;font-size:11px;min-height:22px}

    /* Task chevron (for collapsible children) - touch size */
    .task-chevron{width:26px;height:26px;min-width:26px;font-size:12px}
    /* Drag grip is a real touch target on mobile: bigger hit area, and
       touch-action:none so dragging it reorders instead of scrolling the list.
       Sortable scopes drags to this handle, so swipe-to-move/delete on the rest
       of the row still works. */
    .drag-handle{display:flex;width:34px;min-width:34px;height:34px;font-size:18px;touch-action:none;color:var(--text-3)}

    /* Subtask indent - less on mobile */
    .task-item.depth-1{margin-left:14px!important}
    .task-item.depth-2{margin-left:28px!important}
    .task-item.depth-3{margin-left:42px!important}
    .task-item.depth-4{margin-left:42px!important}  /* cap to prevent horizontal squeeze */

    /* Modal - bottom-sheet style. The keyboard-inset padding-bottom lifts
       the sheet above the soft keyboard so input fields and Save/Close
       chrome stay visible without the user scrolling. */
    .modal-overlay{align-items:flex-end;padding:0 0 var(--kb-inset, 0px) 0!important}
    /* Mobile bottom-sheet initial state — translateY(100%) parks the modal
       below the viewport. The transition declared by the desktop .modal rule
       above still applies; .modal-overlay.open .modal { transform:translateY(0) }
       (also declared above) drives the slide. Opacity stays at 1 on mobile so
       the sheet appears solid as it slides in (no fade compounding the slide). */
    .modal{width:100%!important;max-width:100%!important;max-height:92vh;max-height:calc(var(--vv-height, 92dvh) - 8px);border-radius:16px 16px 0 0;transform:translateY(100%);opacity:1}
    /* Bottom-sheet drag-handle affordance — telegraphs "swipe down to close"
       on mobile per iOS / Android sheet conventions. The header wears the
       handle so dragging the body's scroll area doesn't dismiss accidentally. */
    .modal-head{padding:18px 16px 14px;position:sticky;top:0;background:var(--bg-1);z-index:2;border-bottom:1px solid var(--border);touch-action:none;cursor:grab}
    .modal-head::before{
      content:"";position:absolute;top:6px;left:50%;transform:translateX(-50%);
      width:36px;height:4px;border-radius:999px;background:var(--border-strong);
      opacity:.7;
    }
    .modal-head:active{cursor:grabbing}
    .modal-body{padding:14px 16px;padding-bottom:calc(100px + env(safe-area-inset-bottom,0px));-webkit-overflow-scrolling:touch}
    .modal-foot{position:sticky;bottom:0;background:var(--bg-1);padding:12px 16px calc(12px + env(safe-area-inset-bottom,0px));z-index:2;border-top:1px solid var(--border);box-shadow:0 -4px 12px rgba(0,0,0,.3);flex-wrap:wrap;gap:6px}
    .mfoot-btn{flex:1;min-height:44px;font-size:14px;padding:11px 14px}
    .mfoot-del{flex:1;max-width:120px}
    /* Modal fields stack on mobile */
    .modal-body .mrow{grid-template-columns:1fr!important;gap:10px!important}
    .mfield-in{min-height:44px;font-size:16px!important;padding:11px 13px!important}
    .mfield-chip-btn{min-height:40px;padding:9px 14px;font-size:13px}
    .mfield-chip-group{flex-wrap:wrap;gap:6px}
    .qd-btn,.recur-opt{min-height:36px;padding:8px 12px;font-size:12px}
    .modal-close{width:36px;height:36px;min-width:36px;font-size:18px}
    .mdtitle-in{font-size:16px!important;min-height:44px}

    /* Calendar — narrower day cells, smaller labels */
    .calendar{padding:10px}
    .cal-head{margin-bottom:8px;gap:4px}
    .cal-title{font-size:14px}
    .cal-nav{width:36px;height:36px;min-height:36px;font-size:14px}
    .cal-today-btn{height:36px;padding:0 12px;font-size:12px}
    .cal-weekday{font-size:10px;padding:4px 0}
    .cal-weekdays,.cal-grid{gap:2px}
    .cal-day{min-height:54px;padding:3px;gap:1px}
    .cal-daynum{font-size:11px}
    .cal-task{font-size:9px;padding:1px 4px;border-radius:2px}
    .cal-task-more{font-size:9px;padding:1px}

    /* Board view — narrower columns, horizontal scroll snap */
    .board-view{gap:8px;padding:0;scroll-snap-type:x mandatory}
    .board-col{min-width:78vw!important;width:78vw!important;max-width:78vw!important;scroll-snap-align:start;flex-shrink:0}
    .board-col-hdr{padding:10px 12px}
    .board-card{padding:10px 12px}
    .board-card-name{font-size:13px;-webkit-line-clamp:3}
    .board-col-body{padding:8px}
    .hm-grid{max-width:220px}

    /* Pomodoro timer card — smaller ring */
    .ring-wrap{width:180px;height:180px}
    .ring-svg{width:180px;height:180px}
    .ring-time{font-size:40px}
    .ring-label{font-size:11px}
    .card{padding:18px;gap:14px}
    .ctrls .btn{min-height:44px;padding:10px 22px;font-size:13px}
    .tabs{padding:3px;gap:1px}
    .tab{padding:10px 0;font-size:12px;min-height:40px}
    .phase-nav-hint{font-size:10px;line-height:1.4}

    /* Quick Timers presets - smaller pills */
    .qt-preset{padding:7px 12px;font-size:13px;min-height:38px}
    .qt-form{flex-wrap:wrap;gap:6px}
    .iform{flex-wrap:wrap;gap:6px}
    .qt-item,.iitem{padding:10px 12px;flex-wrap:wrap}
    .qt-time{font-size:18px}
    .iadd,.qt-add{min-height:40px;padding:9px 14px}

    /* Mini-timer - respect safe-area, smaller on mobile */
    .mini-timer{bottom:calc(12px + env(safe-area-inset-bottom,0px))!important;right:12px!important;padding:6px 10px!important;gap:8px!important}
    .mt-time{font-size:12px}
    .mt-label{font-size:9px}
    .mt-btn{width:28px;height:28px;min-width:28px;font-size:11px}
    /* Hide mini-timer in calendar view (it overlaps the grid) */
    body.cal-active-mobile .mini-timer{opacity:.35;transform:scale(.85);transform-origin:bottom right}
    body.cal-active-mobile .mini-timer:hover,body.cal-active-mobile .mini-timer:active{opacity:1;transform:scale(1)}

    /* Save indicator - tiny dot-pill, bottom-left, well out of the way */
    .save-indicator{bottom:calc(68px + env(safe-area-inset-bottom,0px))!important;left:10px!important;right:auto!important;font-size:10px!important;padding:3px 9px!important;border-radius:999px!important}
    .save-indicator.show{opacity:.9!important}

    /* Cmd+K - bottom sheet on mobile. Keyboard-inset padding lifts the
       palette above the soft keyboard so the input + conversation stay
       visible when the user is typing. */
    .cmdk-overlay{padding:0 0 var(--kb-inset, 0px) 0!important;align-items:flex-end}
    .cmdk-panel{width:100%;max-width:100%;border-radius:16px 16px 0 0;max-height:min(80vh, var(--vv-height, 80dvh))}
    .cmdk-input{font-size:16px!important;padding:16px;min-height:56px}
    .cmdk-results{max-height:min(60vh, 55dvh)}
    .cmdk-item{padding:12px;min-height:44px;font-size:14px}
    /* Lift the minimized-Ask pill clear of the fixed bottom action bar. */
    .ask-dock-pill{bottom:calc(80px + env(safe-area-inset-bottom))}

    /* Settings - stacked rows. The .srow padding/gap declared here would be
       shadowed by the later .srow override in the @media (max-width:640px)
       "PASS 2: COMPREHENSIVE MOBILE UX POLISH" block (search for SETTINGS:
       tighter rows), so only .sr-lbl survives here. */
    .sr-lbl{font-size:14px;flex:1;min-width:0}
    .sinput{min-height:44px;font-size:16px!important;width:72px!important;text-align:center}
    select.sinput{width:auto!important;min-width:100px;text-align:left;padding-right:24px!important;text-overflow:ellipsis}
    /* Mobile toggle inherits desktop 44×26 size for a 44px-wide touch target
       (WCAG 2.5.5). Only the flex-shrink override is needed so the toggle
       doesn't compress inside a constrained .srow. */
    .toggle{flex-shrink:0}

    /* Data tab */
    .stat-box{padding:12px}
    .stat-val{font-size:24px}
    .stat-lbl{font-size:10px}
    .stat-grid{grid-template-columns:repeat(3,1fr);gap:6px}
    .export-row{gap:6px}
    .export-btn{padding:10px 12px;font-size:12px;min-height:40px;flex:1;min-width:calc(50% - 3px)}

    /* Log items */
    .log-item{padding:10px 0;flex-wrap:wrap}
    .log-name{font-size:13px}

    /* Section headers (group mode) */
    .task-section{padding:10px 12px;min-height:44px}
    .ts-label{font-size:13px}

    /* Tag-edit-chip remove button - bigger touch target */
    .tag-edit-chip .tag-rm{padding:0 4px;font-size:14px}
  }

  /* Very narrow phones - further adjust */
  @media (max-width:360px){
    .nav-tab span:last-child{display:none}
    .nav-tab{min-height:44px}
    .tb-num{font-size:20px!important}
    .tb-lbl{font-size:9px!important}
    /* Earlier passes attempted an icon-only Add by hiding `.task-add span` and
       injecting `+` via ::before — but the button label is bare text, not a
       span, so the hide-rule was dead and the ::before stacked on top of the
       existing "+ Add" producing "+ + Add" at <360px. Keep the full label. */
    .view-toggle button{font-size:12px;padding:6px 8px}
  }

  /* ================================================================= */
  /* ========== PASS 2: COMPREHENSIVE MOBILE UX POLISH =============== */
  /* ================================================================= */
  @media (max-width:640px){

    /* === HEADER: tighter, less vertical space === */
    .header{margin-bottom:8px}
    .header h1{font-size:16px;letter-spacing:0}
    .header-date{font-size:11px}

    /* === NAV TABS: single compact row, theme/cmdK icon-only === */
    .nav-tabs{padding:2px;gap:0;margin-right:6px}
    .nav-tab{padding:6px 2px;min-height:44px;font-size:9px}
    .nav-tab-icon{font-size:15px;margin-bottom:1px}
    /* Touch targets: WCAG 2.1 AAA recommends ≥44px for header icon buttons */
    #themeToggleBtn{width:44px!important;height:44px!important;min-width:44px;font-size:15px}
    #cmdKBtn.header-icon-btn--cmdk{width:auto!important;height:auto!important;min-width:56px!important;min-height:44px!important;padding:0 10px!important;font-size:12px!important}
    .ai-chip{height:44px;min-width:44px;padding:0 8px}
    .ai-chip-label{font-size:9px}

    /* === SMART VIEWS: force horizontal scroll, no clipping === */
    .smart-views{
      overflow-x:auto;overflow-y:hidden;
      flex-wrap:nowrap!important;
      scrollbar-width:none;-webkit-overflow-scrolling:touch;
      padding:6px 2px;gap:4px;
      scroll-snap-type:x proximity;
      mask-image:linear-gradient(to right,transparent 0,black 8px,black calc(100% - 20px),transparent 100%);
      -webkit-mask-image:linear-gradient(to right,transparent 0,black 8px,black calc(100% - 20px),transparent 100%);
    }
    .smart-views::-webkit-scrollbar{display:none}
    .sv-chip{flex-shrink:0;scroll-snap-align:start;padding:8px 10px;min-height:36px;font-size:12px;gap:5px}
    .sv-icon{font-size:13px}
    .sv-count{font-size:10px;min-width:14px;text-align:center}

    /* === LISTS BAR: horizontal scroll, same edge-fade as smart-views above
       so the cutoff reads as scrollable rather than broken. === */
    .lists-bar{
      overflow-x:auto;flex-wrap:nowrap!important;scrollbar-width:none;gap:4px;padding:6px;
      mask-image:linear-gradient(to right,transparent 0,black 8px,black calc(100% - 20px),transparent 100%);
      -webkit-mask-image:linear-gradient(to right,transparent 0,black 8px,black calc(100% - 20px),transparent 100%);
    }
    .lists-bar::-webkit-scrollbar{display:none}
    /* Touch target: 44px min so list chips comfortably tap on mobile */
    .list-chip,.list-add{flex-shrink:0;padding:10px 12px;min-height:44px;font-size:13px}

    /* === TOOLBAR: collapsed into search + 2 compact rows === */
    .task-toolbar{padding:6px;gap:5px!important}
    .task-search{min-height:40px;padding:9px 12px!important;font-size:14px!important}
    .task-toolbar-row{gap:5px}
    .task-tb-sel{min-height:36px!important;padding:6px 8px!important;font-size:12px!important}
    .view-toggle{display:flex!important;width:100%}
    .view-toggle button{flex:1;min-height:34px!important;font-size:12px;padding:6px 8px}

    /* === TASK INPUT: prominent, always visible === */
    .task-form{padding:0;gap:6px}
    .task-input{min-height:44px!important;font-size:16px!important;padding:10px 14px!important}
    .task-add{min-height:44px!important;padding:0 18px!important;font-size:14px;font-weight:600}

    /* === TASK ROWS: tighter, better typography === */
    .task-item{margin-bottom:6px}
    .task-row-primary{padding:10px 12px;gap:10px;min-height:52px}
    .task-main .task-name{font-size:15px;line-height:1.35;white-space:normal!important;overflow:visible!important;text-overflow:unset!important}
    .task-row-primary .task-checkbox{width:24px;height:24px;min-width:24px}
    .task-sig{font-size:10px;padding:2px 7px;font-weight:500}
    .task-signals{gap:4px;flex-wrap:wrap}
    .task-row-actions{opacity:.6;gap:4px}
    /* Bumped from 34→40 — compromise between Apple HIG 44pt and density of multiple per-task actions */
    .ta-btn{width:40px;height:40px;font-size:14px}
    .task-row-secondary{padding:0 12px 8px 48px;gap:6px;font-size:10px}
    .task-tags-inline .tag-chip{font-size:10px;padding:1px 6px;max-width:100%;white-space:normal;word-break:break-word}

    /* === TIMER TAB: smaller ring so everything fits === */
    .ring-wrap{width:200px;height:200px;margin:0 auto}
    .ring-svg{width:200px;height:200px}
    .ring-time{font-size:44px;letter-spacing:1px}
    .ring-label{font-size:10px;letter-spacing:2px}
    .card{padding:16px;gap:14px}
    .ctrls{margin-top:4px}
    .ctrls .btn{min-height:44px;padding:10px 28px;font-size:14px;font-weight:600}
    .tabs{padding:3px;gap:2px;background:var(--bg-2)}
    .tab{padding:11px 6px;font-size:11px;min-height:44px;color:var(--text-2)}
    .tab:not(.active){opacity:.75}
    .phase-nav-hint{font-size:10px;padding:4px 8px;line-height:1.4;opacity:.7}

    /* === QUICK TIMERS form: + ADD inline with inputs === */
    .qt-form{flex-wrap:wrap;gap:6px;align-items:flex-end}
    .qt-form > div:first-child{flex:1 1 100%}
    .qt-form > div:nth-child(2){flex:0 1 auto;display:flex;gap:6px}
    .qt-form > div:nth-child(3){flex:1 1 auto}
    .qt-form .iadd{flex:0 0 auto;min-height:40px!important;padding:9px 16px!important;align-self:flex-end;white-space:nowrap}
    .qt-presets{gap:5px;padding:6px 0}
    .qt-preset{padding:7px 10px;font-size:12px;min-height:36px;min-width:44px;flex-basis:calc(20% - 5px)}

    /* === REPEATING CHIMES: label input needs full width === */
    .iform{flex-wrap:wrap;gap:6px;align-items:flex-end}
    .iform > div:first-child,.iform > div:first-child[style]{flex:1 1 100%!important}
    .iform > div:not(:first-child){flex:1 1 auto}
    .iform select.fi-s{width:100%!important;padding-right:24px!important;min-width:120px}
    .iprev{width:40px;height:40px;min-width:40px}
    .iform .iadd{min-height:40px!important;padding:9px 16px!important;flex:0 1 auto;white-space:nowrap}

    /* === QUICK TIMER form: force label full width on mobile === */
    .qt-form > div:first-child,.qt-form > div:first-child[style]{flex:1 1 100%!important}

    /* === TIMER section card (the big ring card) - center and contain === */
    [data-tab="focus"] .card{padding:14px 12px}

    /* === TOOLS: Stopwatch display smaller === */
    #swDisplay{font-size:36px!important;letter-spacing:2px!important;margin-bottom:14px!important}
    [data-tab="tools"] button[data-action="swToggle"],[data-tab="tools"] button[data-action="swLap"],[data-tab="tools"] button[data-action="swReset"]{min-height:44px;padding:10px 18px!important;font-size:13px!important;flex:1}

    /* === DATA tab: destructive buttons clearly styled === */
    button[data-action="clearLog"],
    button[data-action="resetStats"],
    button[data-action="clearArchive"]{color:var(--danger)!important;border:1px solid var(--danger-border)!important;background:var(--danger-bg)!important}

    /* === SETTINGS: tighter rows, clearer sections === */
    .sbody{padding:10px 0 14px}
    .srow{padding:10px 2px;gap:10px}
    .sr-lbl{font-size:14px}
    /* Background audio info row - don't let mini-timer cover it */
    .srow[style*="flex-direction:column"]{padding-bottom:18px}

    /* === MINI-TIMER: smaller, bottom-center on mobile instead of right === */
    .mini-timer{
      bottom:calc(10px + env(safe-area-inset-bottom,0px))!important;
      right:10px!important;left:auto;
      padding:5px 9px!important;gap:6px!important;
      max-width:48vw;
      font-size:11px;
    }
    .mt-time{font-size:11px}
    .mt-label{font-size:8px;letter-spacing:.5px}
    .mt-btn{width:26px;height:26px;min-width:26px;font-size:10px}

    /* === SAVE INDICATOR: floating toast near the nav bar === */
    .save-indicator{
      top:auto!important;
      bottom:calc(70px + env(safe-area-inset-bottom,0px))!important;
      left:10px!important;right:auto!important;
      transform:none;
      font-size:10px!important;padding:4px 10px!important;
      border-radius:999px!important;
    }
    .save-indicator.show{opacity:.9!important}

    /* === TODAY BANNER: prevent flex overflow causing wrap === */
    .today-banner{padding:10px 6px}

    /* === BOARD: column width tweaks === */
    .board-col{min-width:82vw!important;width:82vw!important;max-width:82vw!important}
    .board-col-hdr{padding:8px 10px;font-size:12px}
    .board-card{padding:8px 10px}

    /* === CALENDAR: day cell height === */
    .cal-day{min-height:52px;padding:2px}
    .cal-task{font-size:9px;line-height:1.2;padding:1px 3px}

    /* === MODAL: fields stack cleaner === */
    .modal-body{padding:12px 14px;padding-bottom:calc(88px + env(safe-area-inset-bottom,0px))}
    .mfield-in{min-height:44px;font-size:16px!important;padding:10px 12px!important}
    .mfield-chip-btn{min-height:38px;padding:8px 12px;font-size:13px}
    .qd-btn,.recur-opt{min-height:36px;padding:7px 11px;font-size:12px}
    .mfoot-btn{min-height:44px;padding:10px 14px;font-size:14px;font-weight:600}
    .mfoot-save{flex:1.3!important}
  }

  /* === Even narrower (≤360px, iPhone SE 1st gen, small Android) === */
  @media (max-width:380px){
    .nav-tab{padding:6px 1px}
    .nav-tab span:last-child{font-size:9px}
    .ring-wrap{width:180px;height:180px}
    .ring-svg{width:180px;height:180px}
    .ring-time{font-size:38px}
    .tb-num{font-size:18px!important}
    .today-banner{padding:8px 4px}
    .board-col{min-width:85vw!important;width:85vw!important}
    .qt-preset{flex-basis:calc(25% - 5px);font-size:11px;padding:6px 6px}
    /* Calendar day cells stay comfortably tappable on small phones */
    .cal-day{min-height:60px;padding:3px}
    .cal-task{font-size:10px;padding:2px 4px}
  }

  /* === Smallest phones (≤320px iPhone SE / older Android): widen board to near-full-bleed === */
  @media (max-width:320px){
    .board-col{min-width:88vw!important;width:88vw!important;max-width:88vw!important}
    .header h1{font-size:15px}
  }

  /* Classification editor mobile rules live further down (after base styles)
     so the cascade resolves the way you'd expect. See the @media block
     near the .class-mgr-* base rules. */

  /* === Native form controls: keep date/time/datetime pickers inside their containers ===
     Android Chrome's native picker is wider than the input by default, which can
     overflow narrow modals. iOS Safari is fine but constraining is a no-op there. */
  input[type="date"],input[type="time"],input[type="datetime-local"]{
    max-width:100%;box-sizing:border-box;
  }

  /* === Landscape phones / short viewports: reclaim vertical space ===
     Triggers on phones rotated to landscape (≈667×375) and on the iPhone SE
     in landscape (568×320). Goal: keep primary actions reachable without scrolling. */
  @media (orientation:landscape) and (max-height:500px){
    /* Pomodoro ring shrinks so controls + tabs stay above the fold */
    .ring-wrap,.ring-svg{width:140px!important;height:140px!important}
    .ring-time{font-size:30px!important;letter-spacing:1px}
    .ring-label{font-size:9px!important}
    .card{padding:12px;gap:10px}
    .ctrls{margin-top:2px}
    /* Nav and headers shrink */
    .nav-tab{min-height:38px!important;padding:4px 2px!important}
    .header{margin-bottom:6px!important}
    .header h1{font-size:14px}
    /* Modals: don't reserve 100px of bottom padding when there's barely 500px of height */
    .modal{max-height:96vh!important}
    .modal-body{padding-bottom:calc(60px + env(safe-area-inset-bottom,0px))!important}
    /* Today banner stays one short row */
    .today-banner{padding:6px 8px!important;gap:4px!important}
    .tb-num{font-size:16px!important}
    .tb-lbl{font-size:9px!important}
  }

  /* ================================================================= */
  /* ========== PASS 3: RADICAL MINIMALISM ========================== */
  /* Principle: hide chrome by default. Show only what's necessary,  */
  /* reveal the rest on demand via focus/hover/tap.                  */
  /* ================================================================= */

  /* --- ALL SCREENS: de-emphasize panel chrome on tasks tab --- */
  .panel[data-tab="tasks"] > .shdr{
    padding-bottom:8px;margin-bottom:4px;
    opacity:.6;
  }
  .panel[data-tab="tasks"] > .shdr .slbl{font-size:11px;font-weight:500;letter-spacing:1px;text-transform:uppercase;color:var(--text-3)}
  .panel[data-tab="tasks"] > .shdr .sdot{display:none}
  .panel[data-tab="tasks"] > .shdr .scnt{font-size:10px;color:var(--text-4);font-weight:400}

  /* Quick-add hint: hidden until input is focused */
  .qa-hint{
    max-height:0;overflow:hidden;opacity:0;padding:0!important;margin:0;
    transition:max-height .25s ease,opacity .2s,padding .2s;
  }
  .task-form:focus-within + .qa-hint{
    max-height:200px;opacity:1;padding:8px 2px 12px!important;
  }

  /* Today banner: make it VERY subtle when shown — it's supplementary info */
  .today-banner-compact{
    background:transparent!important;
    border:none!important;
    padding:4px 8px!important;
    margin-bottom:6px!important;
    opacity:.75;
  }
  .today-banner-compact:hover{opacity:1}
  .today-banner-compact .tb-num{font-size:16px!important;font-weight:600}
  .today-banner-compact .tb-lbl{font-size:9px!important;letter-spacing:.5px;text-transform:uppercase;opacity:.7}

  /* Smart views: show only "All" + the active chip + overflow indicator */
  /* Other chips visible on hover/tap-scroll */
  .smart-views{
    opacity:.85;
  }
  .smart-views:hover,.smart-views:focus-within{opacity:1}

  /* --- MOBILE: the big simplification --- */
  @media (max-width:640px){
    /* HIDE the panel border/background on tasks — let tasks breathe */
    .panel[data-tab="tasks"]{
      background:transparent;border:none;padding:4px 0!important;
    }
    /* HIDE the Task Manager title entirely — redundant; we're on the Tasks tab */
    .panel[data-tab="tasks"] > .shdr{display:none}

    /* Compact Add Task — smaller, tighter */
    .task-form{gap:6px;margin-bottom:2px}
    .task-input{min-height:40px!important;font-size:15px!important;padding:9px 12px!important;background:var(--bg-2);border:1px solid var(--border)}
    .task-add{min-height:40px!important;padding:0 14px!important;font-size:13px;font-weight:600;min-width:56px}

    /* Smart views: always visible on mobile (it's the main navigation) but tighter */
    .smart-views{margin-top:6px;margin-bottom:4px}
    .sv-chip{padding:6px 9px!important;min-height:32px!important;font-size:11px!important}

    /* Today banner: ULTRA-compact, only shown when has meaningful data */
    .today-banner-compact{padding:2px 0!important;gap:10px!important;margin-bottom:4px!important;justify-content:flex-start!important}
    .today-banner-compact .tb-item{display:flex;align-items:baseline;gap:4px}
    .today-banner-compact .tb-num{font-size:13px!important;font-weight:600}
    .today-banner-compact .tb-lbl{font-size:10px!important;letter-spacing:0;text-transform:none;opacity:.7}
    .today-banner-compact .tb-divider{display:none}

    /* Task rows: minimal padding, cleaner type */
    .task-item{padding:0;margin-bottom:2px;background:var(--bg-2);border:1px solid transparent;border-radius:8px}
    .task-item:hover{background:var(--bg-2)}
    .task-row-primary{padding:12px 14px;gap:12px;min-height:48px}
    .task-main .task-name{font-size:15px;font-weight:500;line-height:1.3}
    .task-row-primary .task-checkbox{width:20px;height:20px;min-width:20px}
    /* On mobile: always show actions because no hover */
    .task-row-actions{opacity:.5!important;gap:0!important}
    .task-row-actions:hover{opacity:1!important}
    .ta-btn{width:32px;height:32px;font-size:13px}
    /* Status row always visible on mobile (was display:none with no .expanded toggle) */
    .task-row-secondary-wrap{display:grid!important;grid-template-rows:1fr!important}
    .task-row-secondary{padding:0 14px 8px 46px!important}

    /* Signals (date chip, recur icon): single small indicator only */
    .task-signals{gap:3px}
    .task-sig{font-size:9px;padding:2px 6px}
    /* Hide list dot indicator on mobile — redundant when only 1 list */
    .task-sig.sig-list{display:none}

    /* Quick-add hint: hidden by default, shown on focus */
    .qa-hint{font-size:10px!important;line-height:1.5!important}

    /* Lists bar already hides when 1 list (JS). When shown, make it subtle */
    .lists-bar{padding:4px;gap:4px;background:transparent;border:none;margin-bottom:4px}
    .list-chip{padding:5px 9px;min-height:30px;font-size:11px;opacity:.8}
    .list-chip.active{opacity:1}
    .list-add{opacity:.6;font-size:11px}

    /* Filters panel when open: tighter too */
    #filtersPanel{margin-top:2px!important;padding:8px!important;gap:5px!important}
  }

/* ── P2P Sync panel ── */
.sync-off-state,.sync-active{display:flex;flex-direction:column;gap:16px}
.sync-desc{color:var(--text-2);font-size:13px;line-height:1.5}
.sync-desc+.sync-desc{font-size:10px;color:var(--text-4);margin-top:-4px}
.sync-status-row{display:flex;align-items:center;gap:8px;font-size:13px;font-weight:600}
.sync-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.sync-dot--off{background:var(--text-3)}
.sync-dot--loading,.sync-dot--waiting,.sync-dot--connecting{background:var(--warning);animation:pulse 1.2s infinite}
.sync-dot--connected{background:var(--success)}
.sync-dot--error{background:var(--danger)}
.sync-my-code-block,.sync-connect-block{display:flex;flex-direction:column;gap:6px}
.sync-my-code-block label,.sync-connect-block label{font-size:12px;font-weight:600;letter-spacing:.01em;text-transform:none;color:var(--text-1);font-family:var(--font-sans)}
.sync-code{font-family:var(--font-mono);font-size:18px;font-weight:700;letter-spacing:.15em;color:var(--accent);padding:10px 14px;background:var(--bg-1);border-radius:8px;border:1px solid var(--border)}
.sync-input-row{display:flex;gap:8px}
.sync-input-row input{flex:1;background:var(--bg-1);border:1px solid var(--border);border-radius:8px;padding:10px 14px;color:var(--text-1);font-family:var(--font-mono);letter-spacing:.1em;font-size:14px}
.sync-input-row input:focus{outline:none;border-color:var(--accent)}
.sync-code-actions{display:flex;gap:6px;flex-wrap:wrap}
.sync-input-hint{font-size:11px;color:var(--text-3);line-height:1.5;margin-top:2px}
.sync-input-hint code{font-family:var(--font-mono);background:var(--bg-2);padding:1px 5px;border-radius:4px;border:1px solid var(--border);color:var(--text-2)}
.sync-input-hint--err{color:var(--warning)}
.sync-disable{align-self:flex-start;margin-top:4px;color:var(--text-3);font-size:12px}

/* ── New modal fields (v4) ── */
/* Checklist */
.cl-progress{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.cl-bar{height:4px;background:var(--accent);border-radius:2px;transition:width .3s}
.cl-progress{background:var(--bg-2);border-radius:2px;height:4px;flex:1;overflow:hidden;position:relative}
.cl-pct{font-size:11px;color:var(--text-3);white-space:nowrap}
.cl-item{display:flex;align-items:center;gap:8px;padding:4px 0;border-bottom:1px solid var(--border)}
.cl-item.cl-done .cl-text{text-decoration:line-through;color:var(--text-3)}
.cl-check{width:18px;height:18px;border-radius:4px;border:1px solid var(--border);background:var(--bg-2);cursor:pointer;font-size:10px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.cl-check.on{background:var(--success);border-color:var(--success);color:var(--text-on-inverse)}
.cl-text{flex:1;font-size:13px}
.cl-rm{background:none;border:none;color:var(--text-3);cursor:pointer;font-size:14px;padding:0 4px;opacity:.5}
.cl-rm:hover{opacity:1;color:var(--danger)}
.cl-add{display:flex;gap:8px;margin-top:8px}
.cl-input{flex:1;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:6px 10px;color:var(--text-1);font-size:13px}
.cl-input:focus{outline:none;border-color:var(--accent)}

/* Task notes */
.note-add{display:flex;flex-direction:column;gap:6px;margin-bottom:10px}
.note-input{background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:8px 10px;color:var(--text-1);font-size:13px;resize:vertical;font-family:inherit}
.note-input:focus{outline:none;border-color:var(--accent)}
.note-item{display:flex;gap:8px;padding:6px 0;border-bottom:1px solid var(--border);font-size:12px}
.note-time{color:var(--text-3);white-space:nowrap;flex-shrink:0}
.note-text{flex:1;color:var(--text-1);line-height:1.5;white-space:pre-wrap}
.note-rm{background:none;border:none;color:var(--text-3);cursor:pointer;opacity:.5;font-size:13px;flex-shrink:0}
.note-rm:hover{opacity:1;color:var(--danger)}

/* Blocker chips */
.blocker-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:4px}
.blocker-chip{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-4);background:var(--danger-bg);border:1px solid var(--danger-border);border-radius:999px;font-size:11px;color:var(--danger)}
.blocker-chip.resolved{background:var(--success-bg);border-color:var(--success-border);color:var(--success)}
.blocker-chip button{background:none;border:none;cursor:pointer;color:inherit;padding:0;font-size:12px;opacity:.7}
.blocker-chip button:hover{opacity:1}
.blocker-add-row{display:flex;gap:6px;margin-top:6px}
.blocker-sel{flex:1;font-size:12px}

/* ── Intelligence panel ── */
.intel-tools-panel.panel{background:transparent;border:none;box-shadow:none;padding:0;margin-bottom:14px}
.intel-panel-root{width:100%}
.intel-card{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px 16px 14px;box-shadow:var(--shadow-raised)}
.intel-card-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--border)}
.intel-card-titles{display:flex;flex-wrap:wrap;align-items:center;gap:8px;min-width:0}
.intel-card-h3{font-size:15px;font-weight:700;color:var(--text-1);letter-spacing:-.02em;margin:0;line-height:1.2}
.intel-card-badge{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:4px 8px;border-radius:999px;background:var(--bg-3);color:var(--text-3);border:1px solid var(--border)}
.intel-card-body{display:flex;flex-direction:column;gap:12px}
.intel-status{font-size:12px;padding:6px 10px;border-radius:6px;margin-bottom:8px;font-weight:500}
.intel-status-chip{margin:0;max-width:100%;font-size:11px;font-weight:600;border-radius:999px;padding:6px 12px;flex-shrink:0}
.intel-status--idle{color:var(--text-3);background:var(--bg-2);border:1px solid var(--border)}
.intel-status--ok{color:var(--success);background:var(--success-bg);border:1px solid var(--success-border)}
.intel-status--error{color:var(--danger);background:var(--danger-bg);border:1px solid var(--danger-border)}
.intel-status--syncing{color:var(--warning);background:var(--warning-bg);border:1px solid var(--warning-border);animation:pulse 1.2s infinite}
.intel-desc{font-size:12px;color:var(--text-3);line-height:1.5;margin-bottom:0}
.intel-desc-short strong{color:var(--text-2)}
.intel-lead{margin:0 0 10px;font-size:13px;color:var(--text-2);line-height:1.5}
.intel-feature-grid{display:grid;grid-template-columns:1fr;gap:10px;margin:10px 0 12px}
@media(min-width:480px){.intel-feature-grid{grid-template-columns:repeat(2,1fr)}}
@media(min-width:900px){.intel-feature-grid{grid-template-columns:repeat(3,1fr)}}
.intel-feature{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:12px;min-height:44px}
.intel-feature-ic{flex-shrink:0;display:flex;color:var(--accent);margin-top:1px}
.intel-feature-ic .intel-action-icon{width:18px;height:18px}
.intel-feature-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.intel-feature-txt strong{font-size:12px;color:var(--text-1);font-weight:600}
.intel-feature-sub{font-size:10px;color:var(--text-3);line-height:1.35}
.intel-details{margin-top:8px;font-size:12px;color:var(--text-3)}
.intel-details summary{cursor:pointer;font-weight:600;color:var(--accent);user-select:none}
.intel-details-body{margin-top:8px;line-height:1.5}
.intel-desc .intel-nogen{font-size:11px;opacity:.85}
.intel-toolbar-row{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 2px}
.intel-tool-btn{display:inline-flex;align-items:center;gap:8px;padding:8px 12px;border-radius:10px;font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;border:1px solid var(--border);background:var(--bg-2);color:var(--text-2);transition:background .15s,border-color .15s}
.intel-tool-btn .intel-action-icon{width:16px;height:16px;flex-shrink:0}
.intel-tool-btn:hover{background:var(--bg-3);border-color:var(--border-strong)}
.intel-tool-btn--primary{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}
.intel-action-grid{display:grid;grid-template-columns:1fr;gap:10px;margin-top:4px}
@media(min-width:520px){.intel-action-grid{grid-template-columns:repeat(2,1fr)}}
.intel-action-btn{display:flex;align-items:flex-start;gap:12px;width:100%;min-height:48px;padding:12px 14px;border-radius:12px;font-size:12px;font-family:inherit;text-align:left;cursor:pointer;border:1px solid var(--border);background:var(--bg-2);color:var(--text-1);transition:background .15s,border-color .15s,opacity .15s}
.intel-action-btn:hover:not(:disabled){background:var(--bg-3);border-color:var(--border-strong)}
.intel-action-btn:disabled{opacity:.45;cursor:not-allowed}
.intel-action-btn .intel-action-icon{width:20px;height:20px;flex-shrink:0;margin-top:1px;color:var(--accent)}
.intel-action-btn-text{display:flex;flex-direction:column;gap:3px;min-width:0}
.intel-action-btn-lbl{font-weight:700;font-size:12px}
.intel-action-btn-sub{font-size:10px;color:var(--text-3);line-height:1.35}
.intel-action-btn--primary{background:var(--accent-bg);border-color:var(--accent-border)}
.intel-action-btn--primary .intel-action-icon{color:var(--accent)}
.intel-section-hdr{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 12px;margin-top:4px;margin-bottom:8px}
.intel-section-title{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-2)}
.intel-section-hint{font-size:11px;color:var(--text-3)}
.intel-hint{font-size:11px;color:var(--text-3);line-height:1.6;padding:8px;background:var(--bg-2);border-radius:6px;border:1px solid var(--border)}
.intel-hint-foot{margin:0;padding:10px 12px;border-radius:10px}
.intel-progress-wrap{margin-bottom:0}
.intel-progress-track{height:8px;background:var(--bg-3);border-radius:999px;overflow:hidden}
.intel-progress-bar{height:100%;background:var(--accent);border-radius:999px;transition:width .3s}
.intel-progress-info{font-size:11px;color:var(--text-3);display:flex;gap:8px;justify-content:space-between}
.intel-start-list{margin:8px 0 10px 1.1em;padding:0;font-size:12px;line-height:1.55;color:var(--text-2)}
.intel-start-list li{margin:4px 0}

/* Bulk import modal */
.bulk-import-hint{font-size:12px;color:var(--text-3);line-height:1.5;margin:0 0 10px}
.bulk-import-hint code{font-size:11px;background:var(--bg-3);padding:2px 6px;border-radius:4px;color:var(--text-2)}
.bulk-import-warn{color:var(--warning)}
.bulk-import-label{display:block;font-size:10px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin-bottom:6px}
.bulk-import-textarea{min-height:220px;font-family:var(--font-mono);font-size:12px;line-height:1.45}
.bulk-import-modal .modal-body{padding-top:8px}
.bulk-import-progress{
  margin-top:10px;padding:8px 10px;border-radius:var(--r-sm);
  background:var(--accent-bg);border:1px solid var(--accent-border);color:var(--accent);
  font-size:12px;font-weight:600;
}
.bulk-import-progress[hidden]{display:none}
#bulkImportConfirm:disabled{opacity:.45;cursor:not-allowed}

/* Routing fieldset — replaces the old single auto-organize checkbox. Sits
   between the textarea and the modal footer so it reads as "this is how
   the next Add tasks click will route the parsed lines". */
.bulk-route{
  margin:14px 0 0;padding:10px 12px 12px;border-radius:var(--r-sm);
  border:1px solid var(--border);background:var(--bg-2);
}
.bulk-route[hidden]{display:none}
.bulk-route-legend{
  padding:0 6px;font-size:10px;font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;color:var(--text-3);
}
.bulk-route-modes{display:flex;flex-direction:column;gap:6px;margin-top:4px}
.bulk-route-mode{
  display:flex;align-items:flex-start;gap:10px;padding:8px 10px;
  border-radius:var(--r-sm);border:1px solid transparent;cursor:pointer;
  transition:background .15s,border-color .15s;
}
.bulk-route-mode:hover{background:var(--bg-3)}
.bulk-route-mode:has(input:checked){background:var(--bg-3);border-color:var(--accent-border)}
.bulk-route-mode input[type=radio]{margin-top:2px;flex-shrink:0;cursor:pointer}
.bulk-route-mode-body{display:flex;flex-direction:column;gap:2px;font-size:12px;color:var(--text-2)}
.bulk-route-mode-body strong{color:var(--text-1);font-size:13px;font-weight:600}
.bulk-route-hint{font-size:11px;color:var(--text-3);line-height:1.4}
.bulk-route-panel{display:flex;flex-direction:column;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.bulk-route-panel[hidden]{display:none}
.bulk-route-field{display:flex;align-items:center;gap:10px;font-size:12px;color:var(--text-2)}
.bulk-route-field-lbl{min-width:64px;font-size:11px;font-weight:600;color:var(--text-3);text-transform:uppercase;letter-spacing:.04em}
.bulk-route-select{
  flex:1;font:inherit;font-size:12px;padding:6px 8px;border-radius:var(--r-sm);
  border:1px solid var(--border);background:var(--bg-1);color:var(--text-1);
}
/* Per-task list — one row per parsed line. Scrolls inside the modal body so
   long pastes don't push the footer off-screen. */
.bulk-route-rows{
  list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px;
  max-height:min(40vh,320px);overflow-y:auto;padding-top:10px;border-top:1px solid var(--border);
}
.bulk-route-rows[hidden]{display:none}
.bulk-route-row{
  display:grid;grid-template-columns:1fr auto auto;gap:8px;align-items:center;
  padding:6px 8px;border-radius:var(--r-sm);background:var(--bg-1);border:1px solid var(--border);
}
.bulk-route-row-name{font-size:12px;color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bulk-route-row .bulk-route-select{font-size:11px;padding:4px 6px;min-width:104px}
@media (max-width:640px){
  .bulk-route-row{grid-template-columns:1fr;gap:6px}
  .bulk-route-row .bulk-route-select{width:100%}
}
.intel-dup-section{font-size:12px;margin-top:8px;padding:8px;background:var(--bg-2);border:1px solid var(--border);border-radius:8px;max-height:200px;overflow-y:auto}
.intel-dup-hdr{font-weight:700;margin-bottom:6px;color:var(--text-2)}
.intel-dup-row{display:flex;flex-wrap:wrap;align-items:center;gap:6px;padding:6px 0;border-bottom:1px solid var(--border);font-size:11px}
.intel-dup-pair{flex:1;min-width:120px;color:var(--text-1)}
.intel-dup-sim{font-variant-numeric:tabular-nums;color:var(--accent)}
.task-dup-badge{background:var(--warning-bg);color:var(--ring-warn-color);border:1px solid var(--warning-border)!important}
.task-sig.sig-pareto{background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-border);font-weight:600;letter-spacing:.01em}

/* ===== Shared icon library (SVG, monochrome, inherits currentColor) ===== */
.ui-ic{display:inline-block;vertical-align:-0.18em;flex-shrink:0;color:currentColor}
[data-icon]{display:inline-flex;align-items:center;justify-content:center;line-height:0}
/* Contextual sizing — outer span controls the footprint, SVG fills it */
.sv-icon .ui-ic{width:13px;height:13px}
.nav-tab-icon .ui-ic{width:17px;height:17px}
.mv-ic .ui-ic{width:14px;height:14px}
.ft-icon .ui-ic{width:13px;height:13px}
.sig-cat-ic .ui-ic{width:11px;height:11px}
.task-enhance-btn .ui-ic{width:15px;height:15px}
.cmdk-icon .ui-ic{width:15px;height:15px;vertical-align:-0.22em}
/* On narrow screens the sv-chips need their wrapper to not override SVG sizing */
@media(max-width:640px){.sv-icon .ui-ic{width:12px;height:12px}}
@media(max-width:380px){.sv-icon .ui-ic{width:12px;height:12px}}
/* sig-cat inline icon alignment on task cards */
.sig-cat-ic{display:inline-flex;align-items:center;margin-right:3px;vertical-align:-0.15em;color:currentColor}
/* breakdown category icon */
.breakdown-cat-ic{display:inline-flex;align-items:center;margin-right:4px;vertical-align:-0.2em;color:var(--accent)}
/* smart-add chip inline icon */
.sa-chip-ic{display:inline-flex;align-items:center;margin-right:3px;vertical-align:-0.15em}
/* update banner + quota warning */
.update-banner-msg,.quota-warning-msg{display:inline-flex;align-items:center;gap:6px}
/* empty state icon wrapper */
.empty-ic{display:flex;justify-content:center;line-height:0;color:var(--text-3)}
.empty-ic .ui-ic{width:32px;height:32px}
.done-sparkle .ui-ic{width:22px;height:22px;color:var(--accent)}
.task-search-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;width:100%}
.task-search-row .task-search{flex:1;min-width:140px}
.task-search-semantic{font-size:11px;color:var(--text-3);display:flex;align-items:center;gap:5px;white-space:nowrap;cursor:pointer;user-select:none}
.task-search-semantic--disabled{opacity:.65;cursor:not-allowed}
.task-search-semantic--disabled input{cursor:not-allowed}
/* What-Next overlay — same state-driven pattern as .modal-overlay / .cmdk-overlay.
   Stage 3 of the modal-system unification: routes through js/modal.js so all
   overlays share one open/close mechanism. */
.what-next-overlay{position:fixed;inset:0;background:rgba(5,10,18,.72);z-index:var(--z-overlay);display:flex;align-items:flex-start;justify-content:center;padding:max(16px, env(safe-area-inset-top)) 12px calc(24px + var(--kb-inset, 0px));overflow:auto;opacity:0;visibility:hidden;pointer-events:none;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);transition:opacity var(--dur-fast) var(--ease-out),visibility 0s linear var(--dur-fast)}
.what-next-overlay.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity var(--dur-fast) var(--ease-out),visibility 0s linear 0s}
.what-next-panel{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-lg);max-width:440px;width:100%;padding:16px 18px;box-shadow:var(--shadow-overlay);margin-top:8vh}
.what-next-hdr{display:flex;justify-content:space-between;align-items:center;font-weight:700;font-size:15px;margin-bottom:6px}
.what-next-x{background:none;border:none;color:var(--text-3);cursor:pointer;font-size:16px;padding:4px}
.what-next-sub{font-size:12px;color:var(--text-3);margin:0 0 12px;line-height:1.45}
.what-next-ctx{display:grid;grid-template-columns:1fr 1fr;gap:8px 12px;margin-bottom:12px;font-size:11px;color:var(--text-3)}
.what-next-ctx label{display:block;margin-bottom:4px}
.what-next-body{display:flex;flex-direction:column;gap:6px}
.what-next-item{display:flex;flex-direction:column;align-items:flex-start;text-align:left;width:100%;padding:10px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:8px;cursor:pointer;font-family:inherit;color:inherit}
.what-next-item:hover{border-color:var(--accent)}
.wn-name{font-weight:600;font-size:13px}
.wn-meta{font-size:11px;color:var(--text-3)}
.md-similar-wrap{margin-top:4px}
.similar-acc-trigger{width:100%;display:flex;justify-content:space-between;align-items:center;padding:8px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:8px;color:var(--text-1);font-size:12px;font-weight:600;cursor:pointer;font-family:inherit}
.similar-acc-chevron{font-size:10px;opacity:.7;transition:transform .2s}
/* Rotation tracks the sibling panel's `.open` state. The toggle JS only
   touches the panel — without this, the chevron had a transition declared
   but no state ever firing it. */
.md-similar-wrap:has(.similar-acc-panel.open) .similar-acc-chevron{transform:rotate(180deg)}
.similar-acc-panel{display:none;max-height:200px;overflow-y:auto;margin-top:6px}
.similar-acc-panel.open{display:block}
.md-similar-tasks{display:flex;flex-direction:column;gap:4px}
.similar-task-row{display:flex;justify-content:space-between;align-items:center;gap:8px;width:100%;padding:8px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;font-size:12px;cursor:pointer;font-family:inherit;color:inherit;text-align:left}
.similar-task-row:hover{border-color:var(--accent)}
.st-name{flex:1}
.st-sim{font-size:11px;color:var(--accent);font-variant-numeric:tabular-nums}
.md-cluster-btn{margin-top:8px;width:100%}
.intel-muted{font-size:12px;color:var(--text-3)}

/* Category signal chip */
.sig-cat{
  background:color-mix(in srgb,var(--cat-color,var(--text-2)) 18%,transparent);
  color:var(--cat-color,var(--text-1));
  border:1px solid color-mix(in srgb,var(--cat-color,var(--text-3)) 35%,transparent);
  border-radius:4px;padding:1px 5px;font-size:10px;
}
.sig-values{color:var(--ring-warn-color);font-size:12px;cursor:help}

/* Breakdown */
.intel-breakdown-section{margin-top:8px;padding-top:12px;border-top:1px solid var(--border)}
.breakdown-row{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px}
.breakdown-cat{flex:1;text-transform:capitalize;font-weight:500}
.breakdown-count{color:var(--text-3)}
.breakdown-badge{padding:1px 6px;border-radius:999px;font-size:10px;font-weight:700}
.breakdown-badge.urgent{background:var(--danger-bg);color:var(--danger)}
.breakdown-badge.high{background:color-mix(in srgb,var(--warning) 16%,transparent);color:var(--warning)}

/* ── Schwartz values grid ── */
.schwartz-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:4px}
@media(min-width:480px){.schwartz-grid{grid-template-columns:repeat(3,1fr)}}
@media(min-width:720px){.schwartz-grid{grid-template-columns:repeat(4,1fr)}}
.schwartz-card{padding:10px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:10px;cursor:pointer;transition:border-color .15s,background .15s;user-select:none;min-height:44px}
.schwartz-card:hover{border-color:var(--accent);background:var(--bg-3)}
.schwartz-card.selected{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,transparent)}
.schwartz-card-top{display:flex;align-items:center;gap:5px;margin-bottom:3px}
.schwartz-icon{font-size:14px;flex-shrink:0}
.schwartz-name{font-size:11px;font-weight:700;text-transform:capitalize;flex:1;color:var(--text-1)}
.schwartz-rank{font-size:10px;font-weight:800;color:var(--accent);background:color-mix(in srgb,var(--accent) 15%,transparent);border-radius:999px;padding:1px 5px;flex-shrink:0}
.schwartz-short{font-size:10px;color:var(--text-3);line-height:1.3}
.schwartz-selected-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.schwartz-sel-chip{padding:3px 10px;background:color-mix(in srgb,var(--accent) 15%,transparent);border:1px solid color-mix(in srgb,var(--accent) 30%,transparent);border-radius:999px;font-size:11px;font-weight:600;color:var(--accent);text-transform:capitalize}

/* ── Pending ops preview (confirmation dialog) ── */
.pending-ops-wrap{background:var(--bg-2);border:1px solid var(--border);border-radius:10px;padding:12px;margin:10px 0}
.pending-hdr{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--border)}
.pending-title{font-size:12px;font-weight:700;color:var(--text-1);text-transform:uppercase;letter-spacing:.06em}
.pending-toggle-all{background:none;border:none;color:var(--text-3);cursor:pointer;font-size:11px;text-decoration:underline;padding:4px 0}
.pending-toggle-all:hover{color:var(--accent)}
.pending-list{display:flex;flex-direction:column;gap:10px;max-height:320px;overflow-y:auto;margin-bottom:10px;-webkit-overflow-scrolling:touch}
/* Cards must not flex-shrink: the list is a height-capped flex column, and
   .pending-simple-card sets overflow:hidden (which zeroes its automatic
   flex min-size). Without this, a long batch collapses every card to a thin
   sliver and clips the text instead of scrolling. */
.pending-list>*{flex-shrink:0}

.pending-task-card{background:var(--bg-1);border:1px solid var(--border);border-radius:8px;padding:10px 12px}
.pending-card-head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px}
.pending-card-head-lbl{display:flex;align-items:flex-start;gap:10px;cursor:pointer;margin:0;flex:1;min-width:0}
.pending-card-title{font-size:13px;font-weight:700;color:var(--text-1);line-height:1.3;word-break:break-word}
.pending-card-badge{font-size:10px;font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;background:var(--bg-3);border:1px solid var(--border);border-radius:999px;padding:3px 8px;flex-shrink:0}

.pending-change-list{display:flex;flex-direction:column;gap:4px}
.pending-change-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;cursor:pointer;margin:0;transition:border-color .15s}
.pending-change-row:hover{border-color:var(--accent-border)}
.pending-change-row--warn{border-color:var(--warning);background:rgba(230,126,34,.08)}
.pending-field-check{margin:0;flex-shrink:0;cursor:pointer;width:16px;height:16px;min-width:16px;accent-color:var(--accent)}
.pending-field-lbl{flex:0 0 100px;font-size:11px;font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:.03em}
@media(min-width:520px){.pending-field-lbl{flex:0 0 120px}}
.pending-field-vals{display:flex;flex-wrap:wrap;align-items:center;gap:6px;flex:1;min-width:0;font-size:12px;color:var(--text-1)}
.pending-field-val{word-break:break-word}
.pending-field-from{color:var(--text-3)}
.pending-field-to{color:var(--text-1);font-weight:500}
.pending-field-arrow{color:var(--text-4);font-weight:600;flex-shrink:0}
.pending-confidence-pill{font-size:10px;font-weight:700;padding:2px 7px;border-radius:999px;background:var(--accent-bg);border:1px solid var(--accent-border);color:var(--accent);flex-shrink:0}
.pending-rationale{display:block;font-size:11px;font-style:italic;color:var(--text-3);line-height:1.4;word-break:break-word;margin-top:8px}
.pending-rationale--card{padding:6px 10px 4px;margin:0 0 6px;border-left:2px solid var(--accent-border);background:color-mix(in srgb,var(--accent) 6%,transparent)}

.wn-why{display:block;font-size:11px;font-style:italic;color:var(--text-3);margin-top:4px;line-height:1.35}



.pending-simple-card{background:var(--bg-1);border:1px solid var(--border);border-radius:8px;padding:0;overflow:hidden}
.pending-simple-card--danger{border-color:var(--danger);background:color-mix(in srgb,var(--danger) 8%,var(--bg-1))}
.pending-simple-row{display:grid;grid-template-columns:auto auto minmax(0,1fr);align-items:center;gap:10px;padding:10px 12px;cursor:pointer;margin:0;color:var(--text-1)}
.pending-simple-row:hover{background:var(--bg-2)}
.pending-simple-ic-wrap{flex-shrink:0;display:flex;color:var(--accent);margin-top:1px}
.pending-simple-ic-svg{display:block}
.pending-simple-text{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1}
.pending-simple-title{font-size:12px;font-weight:700;color:var(--text-1);line-height:1.35}
.pending-simple-target{font-size:12px;color:var(--text-2);word-break:break-word}
.pending-simple-detail{font-size:11px;color:var(--text-3);word-break:break-word}
/* CHANGE_LIST previews: stacked block layout (must not rely on cramped 3-col grid). */
.pending-move-card{background:var(--bg-1);border:1px solid var(--border);border-radius:8px;padding:0;overflow:hidden}
.pending-move-head{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;margin:0;cursor:pointer;box-sizing:border-box;min-height:60px;color:var(--text-1)}
.pending-move-head:hover{background:var(--bg-2)}
.pending-move-head .pending-op-master{margin-top:4px}
.pending-move-ic-wrap{flex-shrink:0;display:flex;color:var(--accent);margin-top:3px}
.pending-move-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:8px}
.pending-move-title{font-size:15px;line-height:1.5;font-weight:700;color:var(--text-1);word-break:break-word}
.pending-move-route{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;font-size:13px;line-height:1.55;font-weight:500;color:var(--text-2)}
.pending-move-route .pending-field-from{color:var(--text-3)}
.pending-move-route .pending-field-to{color:var(--text-1);font-weight:600}
.pending-move-route .pending-confidence-pill{margin-left:2px}

.pending-route-vals{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:12px;color:var(--text-1);line-height:1.35}
.pending-list-summary{margin:0 0 10px;padding:8px 10px;font-size:11px;line-height:1.45;color:var(--text-2);background:var(--bg-1);border:1px solid var(--border);border-radius:6px}
.pending-empty-hint{margin:0;padding:14px 12px;font-size:12px;line-height:1.45;color:var(--text-2);background:var(--bg-1);border:1px dashed var(--border);border-radius:8px;text-align:center}
.pending-list .pending-simple-text,.pending-list .pending-card-title,.pending-list .pending-field-lbl,.pending-list .pending-field-val{overflow:visible;max-width:100%}

.pending-section-danger{margin-top:12px;padding-top:12px;border-top:1px dashed var(--border)}
.pending-section-danger-hdr{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.pending-section-danger-ic{display:flex;color:var(--danger)}
.pending-section-danger-title{font-size:12px;font-weight:800;color:var(--danger);text-transform:uppercase;letter-spacing:.04em}
.pending-section-danger-copy{font-size:11px;color:var(--text-3);margin:0 0 8px;line-height:1.4}
.pending-danger-ack-lbl{display:flex;align-items:flex-start;gap:8px;font-size:12px;color:var(--text-1);cursor:pointer;margin-bottom:10px}
.pending-danger-ack-lbl input{margin-top:2px;accent-color:var(--danger);flex-shrink:0}
.pending-danger-list{display:flex;flex-direction:column;gap:8px}

.pending-op-master{margin:0;flex-shrink:0;cursor:pointer;width:18px;height:18px;min-width:18px;accent-color:var(--accent);margin-top:2px}

.pending-actions{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}

/* ── Smart Add (ambient AI on task input) ── */
.task-input-wrap{position:relative;flex:1;display:flex;align-items:center;gap:4px;
  background:var(--bg-1);border:1px solid var(--border);border-radius:8px;padding-right:4px;overflow:hidden}
.task-input-wrap .task-input{flex:1;min-width:0;padding:9px 8px 9px 12px!important;background:transparent!important;border:none!important;color:inherit;font-size:inherit;font-family:inherit;outline:0;border-radius:0!important;text-overflow:ellipsis}
.task-input-wrap .task-input::placeholder{color:var(--text-4)}
.task-enhance-btn{flex-shrink:0;background:var(--accent-bg);border:1px solid var(--accent-border);border-radius:6px;padding:4px 8px;font-size:14px;color:var(--accent);cursor:pointer;transition:background .15s,transform .1s;line-height:1}
.task-enhance-btn:hover{background:color-mix(in srgb,var(--accent) 22%,transparent);transform:scale(1.08)}
.task-enhance-btn:disabled{opacity:.6;cursor:wait}
/* Subtle "?" syntax-hint button next to the task input. Visually quiet so
   it doesn't compete with the enhance / voice buttons, but always visible
   so new users discover the quick-add syntax. */
.task-syntax-hint-btn{
  background:transparent!important;border-color:var(--border-subtle)!important;
  color:var(--text-3)!important;font-weight:700;
  width:26px;height:26px;padding:0!important;
  display:inline-flex;align-items:center;justify-content:center;
}
.task-syntax-hint-btn:hover{color:var(--accent)!important;border-color:var(--accent-border)!important;background:color-mix(in srgb,var(--accent) 8%,transparent)!important}

/* Syntax cheatsheet popover anchored beneath the task input. Positioned
   absolutely in the document so it can overflow the panel without being
   clipped, but stacks above modals via z-index parity with .cmdk-overlay. */
.task-syntax-popover{
  position:absolute;z-index:var(--z-popover,1200);
  min-width:320px;max-width:min(420px,calc(100vw - 16px));
  background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-md);
  box-shadow:0 12px 36px rgba(0,0,0,.3),0 3px 8px rgba(0,0,0,.2);
  padding:12px 14px;font-size:12px;line-height:1.55;
  animation:fadeIn .12s ease;
}
.task-syntax-popover-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.task-syntax-popover-head strong{font-size:13px;color:var(--text-1)}
.task-syntax-popover-close{
  appearance:none;background:transparent;border:0;color:var(--text-3);
  font-size:18px;line-height:1;padding:0 4px;cursor:pointer;border-radius:4px;
}
.task-syntax-popover-close:hover{color:var(--text-1);background:var(--hover-soft)}
.task-syntax-popover-tbl{
  display:grid;grid-template-columns:minmax(160px,max-content) 1fr;gap:6px 12px;
}
.task-syntax-popover-tbl code{
  font-family:var(--font-mono,monospace);background:var(--bg-2);
  border:1px solid var(--border-subtle);padding:2px 7px;border-radius:6px;
  color:var(--text-1);font-size:11px;white-space:nowrap;
}
.task-syntax-popover-tbl span{color:var(--text-2);align-self:center}
.task-syntax-popover-example{
  margin-top:10px;padding-top:10px;border-top:1px solid var(--border-subtle);
  color:var(--text-3);font-size:11px;
}
.task-syntax-popover-example code{
  font-family:var(--font-mono,monospace);background:var(--bg-2);
  border:1px solid var(--border-subtle);padding:1px 6px;border-radius:4px;
  color:var(--text-1);
}
/* Voice button active/recording state */
.task-voice-btn.on{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger);animation:voice-pulse 1.2s ease-in-out infinite}
@keyframes voice-pulse{0%,100%{box-shadow:0 0 0 0 rgba(231,76,60,.3)}50%{box-shadow:0 0 0 6px rgba(231,76,60,0)}}
.smart-add-preview{margin-top:6px;padding:8px 10px;background:color-mix(in srgb,var(--accent) 6%,transparent);border:1px solid color-mix(in srgb,var(--accent) 20%,transparent);border-radius:8px;display:flex;flex-direction:column;gap:6px}
.smart-add-hint{font-size:10px;color:var(--text-3);font-weight:600;letter-spacing:.04em;text-transform:uppercase}
.smart-add-empty{font-size:12px;color:var(--text-3);font-style:italic}
.sa-chips{display:flex;flex-wrap:wrap;gap:5px}
.sa-chip{display:inline-flex;align-items:center;padding:3px 9px;background:var(--bg-2);border:1px solid var(--border);border-radius:999px;font-size:11px;font-weight:500;cursor:pointer;transition:border-color .15s,background .15s;user-select:none;white-space:nowrap}
.sa-chip:hover{border-color:var(--danger);background:var(--danger-bg)}
.sa-chip.sa-p-urgent{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger)}
.sa-chip.sa-p-high  {background:color-mix(in srgb,var(--warning) 14%,transparent);border-color:var(--warning-border);color:var(--warning)}
.sa-chip.sa-p-low   {color:var(--text-3)}

/* Recently intel-modified task highlight */
.task-item.intel-modified{animation:intelFlash 1.2s ease-out 1}
.task-item.intel-modified .task-row-primary::before{
  content:'✨';position:absolute;left:-18px;top:50%;transform:translateY(-50%);
  font-size:10px;opacity:0;animation:intelFadeOut 3s forwards
}
@keyframes intelFlash{0%{background:color-mix(in srgb,var(--accent) 18%,transparent)}100%{background:transparent}}
@keyframes intelFadeOut{0%,70%{opacity:.8}100%{opacity:0}}
@keyframes intel-spin{to{transform:rotate(360deg)}}
.is-spin{animation:intel-spin 900ms linear infinite;transform-origin:center;display:inline-block;vertical-align:middle}

/* Smart add chip tooltips on hover (desktop) */
.sa-chip[data-tip]:hover::after{
  content:attr(data-tip);
  position:absolute;bottom:calc(100% + 4px);left:50%;transform:translateX(-50%);
  background:var(--bg-1);color:var(--text-1);
  font-size:10px;padding:4px 8px;border-radius:4px;border:1px solid var(--border);
  white-space:nowrap;z-index:100;pointer-events:none;
}
.sa-chip{position:relative}

/* ══════════ MOBILE ≤640px — INTELLIGENCE / PENDING ══════════ */
@media (max-width:640px){
  /* Pending ops: breathable rows + taller scroll viewport on small phones */
  .pending-ops-wrap{padding:10px;margin:8px 0}
  .pending-list{max-height:min(50vh,420px);gap:12px}
  .pending-confidence-pill{font-size:11px;padding:3px 8px;line-height:1.35}
  .pending-task-card{padding:9px 10px}
  .pending-change-row{min-height:52px;line-height:1.45;padding:11px 12px}
  .pending-field-lbl{flex:0 0 100%}
  .pending-field-vals{width:100%}
  .pending-simple-row{min-height:52px;line-height:1.45;padding:11px 12px}
  .pending-move-head{min-height:56px;padding:14px}
  .pending-move-title{font-size:16px;line-height:1.45}
  .pending-move-route{font-size:14px;line-height:1.5}

  .pending-actions{flex-direction:column;gap:6px}
  .pending-actions button{width:100%;min-height:42px}

  /* Schwartz grid: 2-col always on mobile (not 3) */
  .schwartz-grid{grid-template-columns:repeat(2,1fr)!important;gap:5px}
  .schwartz-card{padding:7px 9px}
  .schwartz-name{font-size:11px}
  .schwartz-short{font-size:10px;-webkit-line-clamp:2;display:-webkit-box;-webkit-box-orient:vertical;overflow:hidden}

  /* Smart add preview: horizontal scroll fallback for many chips */
  .smart-add-preview{padding:7px 9px;gap:5px}
  .smart-add-hint{font-size:9px}
  .sa-chips{gap:4px;overflow-x:auto;flex-wrap:wrap;scrollbar-width:none;max-height:80px;overflow-y:auto}
  .sa-chips::-webkit-scrollbar{display:none}
  .sa-chip{font-size:11px;padding:4px 10px;flex-shrink:0;min-height:36px}

  /* Sparkles / mic / ? beside task input — WCAG touch targets; don't clip */
  .task-input-wrap{overflow:visible}
  .task-enhance-btn,.task-syntax-hint-btn{
    min-width:44px;min-height:44px;padding:8px;
    display:inline-flex;align-items:center;justify-content:center;
    touch-action:manipulation;
  }

}

/* ══════════ NARROW ≤380px — additional squeeze ══════════ */
@media (max-width:380px){
  .schwartz-card{padding:6px 8px}
  .schwartz-short{display:none}
  .breakdown-row{font-size:11px}
}

/* ══════════ HOVER-CAPABLE (desktop) ══════════ */
@media (hover:hover){
  .pending-simple-card .pending-simple-row:hover{background:var(--bg-2)}
}

/* ══════════════════════════════════════════════════════════════════════════ */
/* SYSTEM STATUS BANNERS (offline, update, quota warnings)                    */
/* ══════════════════════════════════════════════════════════════════════════ */

/* Offline indicator — shown at top of screen when navigator.onLine=false */
.offline-indicator{
  position:fixed;top:0;left:0;right:0;z-index:5000;
  background:color-mix(in srgb,var(--warning) 92%,transparent);color:var(--text-on-inverse);
  padding:6px 12px;text-align:center;font-size:12px;font-weight:600;
  backdrop-filter:blur(8px);
  letter-spacing:0.02em;
}
body:has(.offline-indicator:not([hidden])){ padding-top:30px; }

/* Update-available banner — bottom of screen, dismissable */
.update-banner{
  position:fixed;bottom:16px;left:50%;transform:translateX(-50%);
  z-index:5000;display:flex;align-items:center;gap:10px;
  background:var(--bg-2);border:1px solid var(--accent);
  padding:10px 14px;border-radius:10px;
  box-shadow:0 10px 40px color-mix(in srgb,var(--accent) 35%,transparent);
  font-size:13px;color:var(--text-1);
  max-width:calc(100vw - 32px);
  animation:updateSlideIn .3s ease-out;
}
@keyframes updateSlideIn{from{transform:translate(-50%,20px);opacity:0}to{transform:translate(-50%,0);opacity:1}}
.update-banner button{
  padding:6px 12px;background:var(--accent);color:var(--text-on-accent);
  border:none;border-radius:6px;font-size:12px;font-weight:700;
  font-family:inherit;cursor:pointer;
}
.update-banner .update-dismiss{
  background:transparent;color:var(--text-3);font-weight:400;padding:6px 8px;
}
.update-banner .update-dismiss:hover{color:var(--text-1)}
.update-banner .update-changelog{color:var(--accent);font-size:12px;text-decoration:underline;margin-right:4px}
.update-banner .update-changelog:hover{filter:brightness(1.15)}

/* Storage quota warning */
.quota-warning{
  position:fixed;bottom:16px;left:50%;transform:translateX(-50%);
  z-index:5001;background:color-mix(in srgb,var(--danger) 92%,transparent);color:var(--text-on-inverse);
  padding:10px 14px;border-radius:10px;
  font-size:12px;display:flex;gap:8px;align-items:center;
  box-shadow:0 10px 40px rgba(192,57,43,.35);
  max-width:calc(100vw - 32px);
}
.quota-warning button{
  padding:4px 10px;background:color-mix(in srgb,var(--text-on-inverse) 22%,transparent);color:var(--text-on-inverse);
  border:none;border-radius:5px;font-size:11px;font-weight:600;
  font-family:inherit;cursor:pointer;
}
.quota-warning button:hover{background:color-mix(in srgb,var(--text-on-inverse) 32%,transparent)}
.quota-warning--proactive{background:color-mix(in srgb,var(--warning) 92%,transparent);box-shadow:0 10px 40px color-mix(in srgb,var(--warning) 40%,transparent);flex-wrap:wrap}

/* Stack persistent banners so they don't sit directly on top of each other.
   .update-banner and .quota-warning are both anchored bottom-center and
   previously collided pixel-for-pixel when both surfaced (e.g. storage full
   + new SW available). Now the quota warning floats above the update banner. */
body:has(.update-banner) .quota-warning{
  bottom:calc(72px + env(safe-area-inset-bottom,0px));
}

/* Mobile tweaks */
@media (max-width:640px){
  .update-banner,.quota-warning{
    bottom:auto;top:110px;left:8px;right:8px;transform:none;
    flex-wrap:wrap;max-width:none;
  }
  /* Mobile: same stacking rule, but the banners flip to top-anchored, so the
     quota warning floats below the update banner (visually above content). */
  body:has(.update-banner) .quota-warning{
    top:calc(110px + 56px);
    bottom:auto;
  }
  /* If a sync-incoming bar is across the top (top:0, ~50px tall), shift the
     update/quota stack below it so they don't sit underneath. */
  body:has(.sync-incoming-bar) .update-banner,
  body:has(.sync-incoming-bar) .quota-warning{
    top:calc(110px + 60px);
  }
  body:has(.sync-incoming-bar):has(.update-banner) .quota-warning{
    top:calc(110px + 60px + 56px);
  }
  .offline-indicator{font-size:11px}
}

/* ══════════════════════════════════════════════════════════════════════════ */
/* CALENDAR FEEDS — iCal import UI                                            */
/* ══════════════════════════════════════════════════════════════════════════ */

.calfeeds-list{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}
.calfeed-empty{font-size:11px;color:var(--text-4);font-style:italic;padding:8px 0}

.calfeed-row{
  display:flex;align-items:center;gap:10px;
  padding:8px 10px;background:var(--bg-2);
  border:1px solid var(--border);border-radius:6px;
}
.calfeed-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0}
.calfeed-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.calfeed-label{font-size:12px;font-weight:600;color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.calfeed-btn{
  width:28px;height:28px;background:transparent;border:1px solid var(--border);
  border-radius:4px;color:var(--text-3);font-size:12px;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
}
.calfeed-btn:hover{background:var(--bg-3);color:var(--text-1)}
.calfeed-btn.calfeed-rm:hover{color:var(--danger);border-color:var(--danger-border)}

.calfeed-add-wrap{margin:10px 0;border:1px dashed var(--border);border-radius:6px;padding:0}
.calfeed-add-toggle{
  padding:10px 12px;font-size:12px;font-weight:600;color:var(--text-2);
  cursor:pointer;list-style:none;user-select:none;
}
.calfeed-add-toggle::-webkit-details-marker{display:none}
.calfeed-add-body{padding:0 12px 12px;display:flex;flex-direction:column;gap:6px}
.calfeed-submit{margin-top:10px;width:100%}

.calfeed-lbl{font-size:11px;color:var(--text-3);margin-top:6px;letter-spacing:0.02em}
.calfeed-in{
  padding:8px 10px;background:var(--bg-0);border:1px solid var(--border);
  border-radius:4px;color:var(--text-1);font-size:13px;font-family:inherit;outline:0;
}
.calfeed-in:focus{border-color:var(--accent)}
.calfeed-color{width:40px;height:28px;padding:0;border:1px solid var(--border);border-radius:4px;background:transparent;cursor:pointer}
.calfeed-ta{
  padding:8px 10px;background:var(--bg-0);border:1px solid var(--border);
  border-radius:4px;color:var(--text-1);font-size:11px;font-family:ui-monospace,monospace;outline:0;
  resize:vertical;min-height:80px;
}
.calfeed-hint{font-size:10px;color:var(--text-4);margin:4px 0 0;line-height:1.5}
.calfeed-status{font-size:10px}
.calfeed-status--error{color:var(--danger)}
.calfeed-status--ok{color:var(--success)}
.calfeed-status--warn{color:var(--text-3);line-height:1.35}
.calfeed-status--warn strong{font-weight:600;color:var(--warning)}
.calfeed-worker-close{float:right;margin-bottom:8px}
.calfeed-hint code{background:var(--bg-3);padding:1px 4px;border-radius:3px;font-size:10px}

.calfeed-mode-tabs{display:flex;gap:4px;margin:8px 0 4px;border-bottom:1px solid var(--border)}
.calfeed-mode{
  padding:6px 10px;background:transparent;border:none;border-bottom:2px solid transparent;
  color:var(--text-3);font-size:11px;font-weight:600;font-family:inherit;cursor:pointer;
}
.calfeed-mode.active{color:var(--accent);border-bottom-color:var(--accent)}

.calfeed-mode-panel{display:flex;flex-direction:column;gap:4px}

.calfeed-sync-row{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin-top:8px;padding-top:8px;border-top:1px solid var(--border);
}

.calfeed-worker-panel{
  margin-top:12px;padding:12px;background:var(--bg-2);
  border:1px solid var(--accent);border-radius:6px;
}
.calfeed-code{
  background:var(--bg-0);padding:10px;border-radius:4px;
  font-size:10px;line-height:1.5;overflow-x:auto;
  font-family:ui-monospace,monospace;color:var(--text-2);
  border:1px solid var(--border);margin:8px 0;
  white-space:pre;
}

/* External calendar events in the calendar view */
.cal-task.cal-feed-event{
  background:rgba(255,255,255,0.03);
  border-left:3px solid var(--accent);
  font-style:italic;
  opacity:0.9;
}
.cal-feed-time{font-weight:700;color:var(--text-3);font-style:normal;font-size:10px}

/* Mobile tweaks */
@media (max-width:640px){
  .calfeed-row{padding:10px}
  .calfeed-btn{width:32px;height:32px}
  .calfeed-in,.calfeed-ta{font-size:14px!important}
  .calfeed-code{font-size:9px}
}

/* ══════════════════════════════════════════════════════════════════════════ */
/* EXPORT SECTIONS — grouped Data tab layout                                  */
/* ══════════════════════════════════════════════════════════════════════════ */
.export-section{
  margin-top:14px;padding-top:14px;
  border-top:1px solid var(--border);
}
.export-section:first-of-type{border-top:none;margin-top:8px;padding-top:0}
.export-section-head{
  font-size:11px;font-weight:700;letter-spacing:0.08em;
  color:var(--text-2);text-transform:uppercase;margin-bottom:4px;
}
.export-section-desc{
  font-size:11px;color:var(--text-4);line-height:1.5;
  margin:0 0 8px;
}

/* Data-tab — consistent panel rhythm so Stats / Log / Archive / Export sit
   as visually sibling cards rather than colliding stacked sections. */
.panel-data{margin-bottom:14px}
.panel-data:last-of-type{margin-bottom:0}
.archive-list{max-height:400px;overflow-y:auto}
.archive-actions{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}

/* Export button color variants — replaces inline styles for maintainability. */
.export-btn.export-json{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}
.export-btn.export-ics{background:var(--purple-bg);border-color:var(--purple-border);color:var(--purple)}
.export-btn.export-import{cursor:pointer;background:var(--success-bg);border-color:var(--success-border);color:var(--success)}
.export-btn.export-backup{background:color-mix(in srgb,var(--success) 14%,transparent);border-color:var(--success-border);color:var(--success)}
.export-btn.export-restore{cursor:pointer;background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}
.export-btn.export-encrypted{background:color-mix(in srgb,var(--purple) 14%,transparent);border-color:var(--purple-border);color:var(--purple)}
.export-btn.export-encrypted-restore{cursor:pointer;background:var(--purple-bg);border-color:var(--purple-border);color:var(--purple)}
.export-btn.export-btn--copied,.export-btn--copied{color:var(--success)!important;border-color:var(--success-border)!important;background:var(--success-bg)!important}
.export-row-secondary{margin-top:8px}

/* v24 — priority stripe via data-priority (replaces .priority-*-item on row) */
.task-item[data-priority="urgent"]:not(.starred-task){border-left-color:var(--danger)}
.task-item[data-priority="high"]:not(.starred-task){border-left-color:var(--warning)}
.task-item[data-priority="normal"]:not(.starred-task){border-left-color:var(--accent)}
.task-item[data-priority="low"]:not(.starred-task){border-left-color:var(--text-4)}
.task-sig.sig-streak{background:var(--accent-bg);color:var(--accent);font-weight:600}

.task-tb-check{
  display:inline-flex;align-items:center;gap:6px;font-size:11px;color:var(--text-3);
  cursor:pointer;user-select:none;white-space:nowrap;
}
.task-tb-check input{accent-color:var(--accent)}

/* Settings navigation bar — jump-links + inline filter. Sticky at the top
   of the Settings panel so the user can land on the exact section without
   scrolling through every prior block. Hides the jump pill when the filter
   is active so the user's focus stays on the search results. */
.set-nav{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:8px 10px;margin:0 0 10px;
  background:var(--bg-1);border:1px solid var(--border-subtle);border-radius:var(--r-md,10px);
  position:sticky;top:0;z-index:5;
}
.set-nav-jump{display:flex;gap:6px;flex-wrap:wrap;flex:1}
.set-nav-btn{
  appearance:none;background:transparent;border:1px solid var(--border-subtle);
  color:var(--text-2);font:inherit;font-size:12px;font-weight:500;
  padding:8px 14px;border-radius:999px;cursor:pointer;
  transition:background .15s,color .15s,border-color .15s;
  white-space:nowrap;min-height:40px;display:inline-flex;align-items:center;
}
.set-nav-btn:hover{color:var(--text-1);border-color:var(--text-3)}
.set-nav-btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px;color:var(--text-1)}
.set-nav-btn.active{background:var(--bg-3);border-color:var(--border-strong);color:var(--text-1)}
.set-nav-filter{position:relative;flex:0 0 220px;max-width:100%}
.set-nav-filter-input{width:100%;font-size:12px;padding:6px 28px 6px 10px}
.set-nav-filter-clear{
  position:absolute;right:6px;top:50%;transform:translateY(-50%);
  background:transparent;border:0;color:var(--text-3);cursor:pointer;
  font-size:16px;line-height:1;padding:2px 6px;border-radius:4px;
}
.set-nav-filter-clear:hover{color:var(--text-1);background:rgba(255,255,255,.06)}
/* Hide section headings that have no matching rows beneath them, and
   highlight rows whose label matched. The hide-row class is applied by JS
   to .srow / .set-section-body > * containers. */
.set-section.set-section--hidden{display:none}
.srow.srow--filter-hidden{display:none!important}
.srow.srow--filter-match{outline:1px solid var(--accent-border);outline-offset:-1px;border-radius:6px}
@media (max-width:640px){
  /* Sticky nav respects safe-area-inset-top so it doesn't tuck behind the
     iPhone notch / Android status bar when scrolled. max() keeps the 8px
     floor on devices that report 0 inset. */
  .set-nav{padding:max(8px, env(safe-area-inset-top, 0px)) 8px 8px;gap:8px;border-radius:8px;flex-direction:column;align-items:stretch}
  .set-nav-jump{
    overflow-x:auto;flex-wrap:nowrap;
    scrollbar-width:none;-ms-overflow-style:none;
    /* Snap so users land cleanly on a section button instead of stopping
       between two. Mandatory snap is fine here because the buttons are
       small and equal-importance. */
    scroll-snap-type:x mandatory;
  }
  .set-nav-jump .set-nav-btn{scroll-snap-align:start}
  .set-nav-jump::-webkit-scrollbar{display:none}
  .set-nav-filter{flex:1}
}

/* Settings + task modal accordions */
.set-section,.md-section{
  border:1px solid var(--border);border-radius:var(--r-md);
  margin-bottom:10px;background:var(--bg-1);
}
.set-section-sum,.md-section-sum{
  font-size:var(--fs-13);font-weight:600;color:var(--text-1);
  padding:12px 14px;cursor:pointer;list-style:none;
  display:flex;align-items:center;min-height:44px;
}
.set-section-sum::-webkit-details-marker,.md-section-sum::-webkit-details-marker{display:none}
/* Disclosure chevron for collapsible <details> summaries. The native marker
   was disabled above; without this the summary reads as a static heading
   rather than a collapsible disclosure. Rotates 180° when open. */
.set-section-sum::after,.md-section-sum::after{
  content:"";width:0;height:0;margin-left:auto;
  border-left:4px solid transparent;border-right:4px solid transparent;
  border-top:5px solid var(--text-3);
  transition:transform .2s;
}
.set-section[open] .set-section-sum::after,.md-section[open] .md-section-sum::after{
  transform:rotate(180deg);
}
.set-section-body,.md-section-body{padding:4px 14px 14px}
.set-section-body .srow:first-child{margin-top:0}
.md-section-body .mfield:first-child{margin-top:0}

/* Container queries on the settings panel.
   Container declared on #settingsBody (see .sbody.sbody-static block).
   These adapt to actual panel width — important because the app's outer
   .container caps at 960px, and a foldable inner display or split-pane
   desktop can put the panel at any width in between. Variants like
   .srow--col / .srow--col-stretch / .srow--full / .srow--spread continue
   to win because they appear later in the cascade and the container query
   only touches base .srow + .sr-lbl + .set-section-body padding. */
@container settings (min-width:560px){
  /* Tablet+ panel: more breathing room and wider label column so the
     eye can scan labels in a column instead of zig-zagging. */
  .set-section-body{padding:var(--space-5) var(--space-8) var(--space-8)}
  .set-section-body .sr-lbl{min-width:200px}
  .set-section-body .srow{gap:var(--space-6);margin-bottom:var(--space-5)}
}
@container settings (min-width:880px){
  /* Wide-panel (≈desktop, single-column app layout): extra label width
     and section separation so the long flat list feels deliberate, not
     dense. */
  .set-section-body .sr-lbl{min-width:240px}
  .set-section{margin-bottom:var(--space-6)}
}

.class-mgr-block{margin-bottom:16px}
.class-mgr-hdr{font-size:11px;font-weight:700;letter-spacing:.06em;color:var(--text-3);text-transform:uppercase;margin-bottom:8px}
.class-mgr-preview-hint{font-size:11px;color:var(--text-3);margin:0 0 8px;line-height:1.45}
.class-mgr-chip-preview-bar{display:flex;flex-wrap:wrap;gap:8px;padding:10px 12px;margin:0 0 14px;background:var(--bg-1);border:1px solid var(--border-subtle);border-radius:12px;align-items:center}
.class-mgr-row{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:8px;
  padding:10px;border-radius:var(--r-sm);background:var(--bg-2);border:1px solid var(--border);
}
.class-mgr-row--hidden{opacity:.55}
/* Desktop control sizing — consistent 13px font + 32px min-height across
   input/selects/buttons so the row reads as a single component. The label
   input gets a touch more prominence via slightly larger font + weight,
   matching the mobile hierarchy. */
.class-mgr-in{flex:1 1 160px;min-width:0;padding:7px 10px;border-radius:6px;border:1px solid var(--border);background:var(--bg-1);color:var(--text-1);font-family:inherit;font-size:14px;font-weight:500;min-height:34px}
.class-mgr-sel{padding:7px 24px 7px 10px;border-radius:6px;border:1px solid var(--border);background:var(--bg-1);color:var(--text-1);font-size:13px;font-family:inherit;min-height:34px;max-width:140px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}
.class-mgr-sel-color{flex:1 1 180px;max-width:min(100%,240px);font-size:13px}
.class-mgr-btn{
  padding:7px 12px;font-size:13px;border-radius:6px;border:1px solid var(--border);
  background:var(--bg-1);color:var(--text-2);cursor:pointer;font-family:inherit;
  min-height:34px;
}
.class-mgr-btn:hover{border-color:var(--accent-border);color:var(--text-1)}
.class-mgr-id{font-size:11px;color:var(--text-4);padding:3px 8px;background:var(--bg-3);border-radius:4px;font-family:var(--font-mono);letter-spacing:.02em}

/* === Classification editor on mobile (must come AFTER the base flex rules
   above so this @media block actually wins the cascade — earlier mobile
   override sat above the base rule and was silently overridden) ===
   7 children get grouped into 4 logical rows by functional role so the
   surface has clear hierarchy:
     Row 1 — label              (identity, prominent: 15px / 600)
     Row 2 — icon + color       (appearance, 1fr + 2fr split)
     Row 3 — Hide / ↑ / ↓       (actions, 3 equal columns)
     Row 4 — id badge           (metadata footnote, subtle, centered)
   Heights normalized to 40/44px so touch targets are consistent and the
   row reads as one coherent component instead of seven stacked. */
@media (max-width:640px){
  .class-mgr-cat{margin-bottom:12px}
  .class-mgr-row{
    display:grid;
    grid-template-columns:1fr 1fr 1fr;
    gap:8px;
    padding:12px;
  }
  .class-mgr-row > *{max-width:none;min-width:0}
  .class-mgr-row > .class-mgr-in{
    grid-column:1 / -1;
    font-size:15px;font-weight:600;
    min-height:44px;padding:10px 12px;
  }
  .class-mgr-row > .class-mgr-sel:not(.class-mgr-sel-color){
    grid-column:1 / 2;
    font-size:13px;min-height:40px;padding:8px 24px 8px 10px;
  }
  .class-mgr-row > .class-mgr-sel-color{
    grid-column:2 / -1;
    font-size:13px;min-height:40px;padding:8px 24px 8px 10px;
  }
  .class-mgr-row > .class-mgr-btn{
    grid-column:span 1;
    min-height:40px;padding:8px 4px;font-size:13px;
  }
  .class-mgr-row > .class-mgr-id{
    grid-column:1 / -1;
    justify-self:center;
    font-size:11px;padding:4px 10px;
    opacity:.7;
  }
}
.class-mgr-add{margin-top:4px}
.class-mgr-cat{margin-bottom:8px}
.class-mgr-cat--hidden{opacity:0.55}

/* Life-area card surface — visually identical to the Lists manager rows
   (.lists-mgr-*) so the two settings surfaces read as siblings. The dense
   editor (label/icon/color/reorder/details) lives in .class-mgr-editor, hidden
   until the card's Edit button reveals it. */
.class-mgr-card{
  display:flex;flex-wrap:wrap;align-items:center;gap:10px;
  padding:10px;border-radius:var(--r-sm);background:var(--bg-2);border:1px solid var(--border);
}
.class-mgr-card-dot{flex:0 0 12px;width:12px;height:12px;border-radius:50%;display:inline-block}
.class-mgr-card-meta{flex:1 1 200px;min-width:0;display:flex;flex-direction:column;gap:2px}
.class-mgr-card-name{font-size:13px;font-weight:600;color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.class-mgr-card-desc{font-size:11px;color:var(--text-3);line-height:1.45;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}
.class-mgr-card-desc--empty{font-style:italic;color:var(--text-4)}
.class-mgr-card-count{flex:0 0 auto;font-size:11px;color:var(--text-3);padding:2px 8px;background:var(--bg-3);border-radius:999px}
.class-mgr-editor{margin-top:6px;padding:10px;border-radius:6px;border:1px solid var(--border);background:var(--bg-1)}
.class-mgr-editor > .class-mgr-row{margin-bottom:0}
@media (max-width:520px){
  .class-mgr-card{flex-direction:column;align-items:stretch}
  .class-mgr-card-meta{flex:1 1 auto}
  .class-mgr-card-count{align-self:flex-start}
}

.class-mgr-details{margin-top:4px;border-radius:6px;border:1px solid var(--border);background:var(--bg-1);padding:0 8px 8px;font-size:12px;color:var(--text-2)}
.class-mgr-details > summary{cursor:pointer;padding:6px 0;font-size:11px;color:var(--text-3)}
.class-mgr-details[data-empty="1"] > summary{color:var(--accent)}
.class-mgr-focus-p,.class-mgr-ex{margin:6px 0 0}
.class-mgr-cv{margin:6px 0 0 18px;padding:0}
.class-mgr-field{display:flex;flex-direction:column;gap:4px;margin-top:8px}
.class-mgr-field-lbl{font-size:11px;color:var(--text-3);font-weight:600;letter-spacing:.02em;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.class-mgr-field-lbl em{font-style:normal;color:var(--text-3);font-weight:400}
.class-mgr-field-lbl code{font-size:10px;background:var(--bg-2);padding:1px 4px;border-radius:3px}
.class-mgr-ta{font-family:inherit;font-size:12px;line-height:1.4;width:100%;resize:vertical;padding:6px 8px;border-radius:6px;border:1px solid var(--border);background:var(--bg-2);color:var(--text-1);min-height:32px}
.class-mgr-ta:focus{outline:none;border-color:var(--accent)}
.class-mgr-details-actions{margin-top:8px;display:flex;justify-content:flex-end}
.class-mgr-reclass{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0 4px}
.class-mgr-hint{font-size:11px;color:var(--text-3)}

/* Settings -> Lists manager. Visually parallel to the Classifications rows
   so the two surfaces feel like siblings, not alternatives. */
.lists-mgr-row{
  display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:8px;
  padding:10px;border-radius:var(--r-sm);background:var(--bg-2);border:1px solid var(--border);
}
.lists-mgr-dot{flex:0 0 12px;width:12px;height:12px;border-radius:50%;display:inline-block}
.lists-mgr-meta{flex:1 1 200px;min-width:0;display:flex;flex-direction:column;gap:2px}
.lists-mgr-name{font-size:13px;font-weight:600;color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lists-mgr-desc{font-size:11px;color:var(--text-3);line-height:1.45;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical}
.lists-mgr-desc--empty{font-style:italic;color:var(--text-4)}
.lists-mgr-count{flex:0 0 auto;font-size:11px;color:var(--text-3);padding:2px 8px;background:var(--bg-3);border-radius:999px}
.lists-mgr-del:disabled{opacity:.4;cursor:not-allowed}
.lists-mgr-add{margin-top:8px}
@media (max-width:520px){
  .lists-mgr-row{flex-direction:column;align-items:stretch}
  .lists-mgr-meta{flex:1 1 auto}
  .lists-mgr-count{align-self:flex-start}
}

.wn-cal-hint{display:block;margin-top:4px;font-size:11px;color:var(--text-3);font-style:italic}
.cal-ev-mk-task{margin-left:6px;padding:2px 6px;font-size:10px;border-radius:4px;border:1px solid var(--border);background:var(--bg-2);color:var(--text-2);cursor:pointer}
.cal-ev-mk-task:hover{border-color:var(--accent-border);color:var(--text-1)}

.md-habit-log{font-size:12px;color:var(--text-2)}
.habit-log-sum{margin-bottom:8px;font-size:12px;color:var(--text-3)}
.habit-log-list{list-style:none;margin:0;padding:0;max-height:160px;overflow-y:auto}
.habit-log-list li{
  display:flex;justify-content:space-between;gap:10px;padding:6px 0;border-bottom:1px solid var(--border);
  font-variant-numeric:tabular-nums;
}
.habit-log-list li:last-child{border-bottom:none}

/* Per-task session history list — one row per timer session recorded into
   t.sessionEntries. Visually parallel to .habit-log-list so the two
   read as siblings inside the Tracking section. */
.md-sessions{font-size:12px;color:var(--text-2)}
.md-sessions-list{list-style:none;margin:0;padding:0;max-height:200px;overflow-y:auto}
.md-sessions-item{
  display:flex;align-items:center;gap:10px;padding:6px 0;
  border-bottom:1px solid var(--border-subtle);
  font-variant-numeric:tabular-nums;
}
.md-sessions-item:last-child{border-bottom:none}
.md-sessions-ts{flex:1;color:var(--text-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.md-sessions-dur{font-weight:600;color:var(--text-1)}
.md-sessions-tag{
  font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  padding:2px 6px;border-radius:999px;
  background:var(--warning-bg);color:var(--warning);border:1px solid var(--warning-border);
}
.md-sessions-item--partial .md-sessions-dur{color:var(--warning)}
.md-sessions-more{padding:6px 0;color:var(--text-3);font-size:11px;font-style:italic;text-align:center}

.iprev .ui-ic{width:16px;height:16px}

.filters-summary{font-size:11px;color:var(--text-3);line-height:1.35;flex:1 1 140px;min-width:120px}
.task-search-clear{
  flex-shrink:0;width:30px;height:30px;border-radius:8px;background:var(--bg-2);border:1px solid var(--border);
  color:var(--text-2);font-size:18px;line-height:1;display:flex;align-items:center;justify-content:center;
}
.task-search-mode-pill{
  flex-shrink:0;font-size:10px;padding:3px 8px;border-radius:999px;background:var(--accent-bg);color:var(--accent);font-weight:600;
}
.today-banner .tb-snooze{
  margin-left:auto;font-size:11px;padding:5px 10px;border-radius:8px;background:var(--bg-2);border:1px solid var(--border);color:var(--text-2);
}
.swipe-tip-banner{
  display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 14px;margin-bottom:12px;
  border-radius:var(--r-md);border:1px solid var(--border);background:var(--bg-1);font-size:12px;color:var(--text-2);
}
.swipe-tip-dismiss{font-size:11px;padding:5px 12px;border-radius:8px;background:var(--accent);color:var(--text-on-inverse);border:none}
.cmdk-foot{font-size:11px;color:var(--text-4);padding:8px 12px;border-top:1px solid var(--border)}

/* Backup import delta preview (built into showImportConfirm — app confirm modal body) */
.import-delta-title{font-weight:700;margin-bottom:8px}
.import-delta-grid{
  display:grid;
  grid-template-columns:auto auto auto;
  column-gap:14px;
  row-gap:4px;
  font-size:13px;
  margin:4px 0 10px;
}
.import-delta-colhead{font-weight:600;color:var(--text-3);font-size:11px;text-transform:uppercase;letter-spacing:.4px}
.import-delta-num{font-variant-numeric:tabular-nums}
.import-delta-note{font-size:12px;color:var(--text-3);margin-bottom:8px}
.import-delta-warn{
  font-size:12px;color:var(--warning);
  padding:8px 10px;background:color-mix(in srgb,var(--warning) 10%,transparent);
  border-radius:var(--r-sm);
}

.export-toast{
  /* Bottom-right corner so the toast never sits over the task list / task input.
     The mobile @media block below re-centers horizontally on narrow viewports
     where a corner anchor reads as cramped. Modals (.modal-overlay,
     .cmdk-overlay, .what-next-overlay) are deliberately separate and stay
     center-screen — only auto-dismiss toasts move. */
  position:fixed;bottom:calc(16px + env(safe-area-inset-bottom,0px));right:calc(16px + env(safe-area-inset-right,0px));left:auto;transform:translateY(16px);z-index:9000;
  padding:10px 18px;border-radius:10px;background:var(--bg-2);border:1px solid var(--border);color:var(--text-1);
  font-size:13px;opacity:0;pointer-events:none;transition:opacity .2s ease,transform .2s ease;max-width:min(90vw,420px);text-align:center;
}
.export-toast.show{opacity:1;transform:translateY(0)}
/* Lift above the mini-timer pill when it's visible (mini-timer occupies the
   same bottom-right corner at bottom:16px right:16px and is ~48px tall). */
body:has(.mini-timer.visible) .export-toast{bottom:calc(76px + env(safe-area-inset-bottom,0px))}

/* Action toast — like .export-toast but carries an inline action button
   (Undo). Anchored top-center: a completion confirmation that drops in from
   the top edge, clear of the bottom-right FAB / mini-timer stack. */
.action-toast{
  position:fixed;top:calc(12px + env(safe-area-inset-top,0px));left:50%;right:auto;bottom:auto;
  transform:translateX(-50%) translateY(-16px);z-index:9100;
  display:inline-flex;align-items:center;gap:var(--space-5);
  padding:10px 12px 10px 18px;border-radius:999px;
  background:var(--bg-1);border:1px solid var(--border-strong);color:var(--text-1);
  font-size:var(--fs-13);box-shadow:var(--shadow-overlay);
  opacity:0;pointer-events:none;transition:opacity .18s ease,transform .18s ease;
  max-width:min(90vw,420px);
}
/* Stay non-interactive on the host even when visible — only the inline
   .action-toast-btn (Undo) needs to catch taps. Otherwise the pill
   silently swallows clicks on whatever task row sits behind it. */
.action-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.action-toast .action-toast-btn{pointer-events:auto}
/* Dismiss × — always pointer-events:auto so users can clear the toast even
   when the surrounding pill is non-interactive (action-toast host stays
   pointer-events:none so taps pass through to content underneath). */
.toast-dismiss{
  appearance:none;-webkit-appearance:none;
  pointer-events:auto;
  display:inline-flex;align-items:center;justify-content:center;
  width:24px;height:24px;margin-left:6px;padding:0;
  background:transparent;border:0;border-radius:50%;
  color:var(--text-3);font-size:18px;line-height:1;cursor:pointer;
  transition:background .12s,color .12s;
}
.toast-dismiss:hover{background:var(--bg-3);color:var(--text-1)}
.toast-dismiss:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* Lay out the label + dismiss × inline-row now that the toast has a child
   button (was bare text via textContent before). flex keeps the existing
   bottom-right anchor and padding/border untouched. */
.export-toast{display:flex;align-items:center;gap:8px}
.export-toast-lbl{flex:1;min-width:0;text-align:inherit}
.export-toast .toast-dismiss{pointer-events:auto;margin-left:2px}
/* When a modal or command palette is open, lift the bottom-anchored auto-
   dismiss toasts above the modal's sticky footer so feedback isn't hidden
   behind it. Modals are flex-start anchored with a sticky .modal-foot at the
   viewport bottom; without this the toast and the foot collided. */
body:has(.modal-overlay.open) #exportToast,
body:has(.cmdk-overlay.open)  #exportToast{
  bottom:calc(96px + env(safe-area-inset-bottom,0px));
}
@media (max-width:640px){
  /* On mobile the FAB owns the bottom-right (56px circle at right:20px) and
     the save indicator owns the bottom-left dot column. The plain export-toast
     anchors bottom-LEFT, stacked above the save indicator, so it never collides
     with the FAB and never lands in the center thumb-zone. The action toast
     stays top-center (see top-level rule) — it never competes for the bottom. */
  .export-toast{
    left:calc(10px + env(safe-area-inset-left,0px));right:auto;
    bottom:calc(112px + env(safe-area-inset-bottom,0px));
    transform:translateY(16px);
    max-width:min(calc(100vw - 88px),360px);
    text-align:left;
  }
  .export-toast.show{transform:translateY(0)}
  .action-toast{
    left:50%;right:auto;
    top:calc(10px + env(safe-area-inset-top,0px));bottom:auto;
    transform:translateX(-50%) translateY(-16px);
    max-width:min(calc(100vw - 24px),420px);
  }
  .action-toast.show{transform:translateX(-50%) translateY(0)}
  /* Re-declare the mini-timer-aware lift inside the mobile block so the
     mobile baseline (above) doesn't get clobbered by the desktop-defaulted
     rule at the top level. FAB lifts to bottom:92px when mini-timer is
     visible (see .quick-add-fab rule); the export-toast clears that column. */
  body:has(.mini-timer.visible) .export-toast{bottom:calc(140px + env(safe-area-inset-bottom,0px))}
  /* When a modal/palette is open the desktop modal-open lifts (above) push
     bottom higher than our mobile baseline; re-declare so they still win. */
  body:has(.modal-overlay.open) #exportToast,
  body:has(.cmdk-overlay.open)  #exportToast{bottom:calc(160px + env(safe-area-inset-bottom,0px))}
}
.action-toast-lbl{color:var(--text-1);font-weight:500}
.action-toast-btn{
  appearance:none;-webkit-appearance:none;
  background:var(--accent);color:var(--text-on-accent);
  border:1px solid var(--accent);
  padding:6px 14px;border-radius:999px;
  font-size:var(--fs-12);font-weight:700;letter-spacing:.03em;
  cursor:pointer;transition:filter .12s;
}
.action-toast-btn:hover{filter:brightness(1.1)}
.action-toast-btn:focus-visible{outline:2px solid var(--text-1);outline-offset:2px}
@media (prefers-reduced-motion:reduce){
  .action-toast{transition:opacity .01ms}
}
.sync-incoming-bar{
  position:fixed;top:0;left:0;right:0;z-index:8500;display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:12px;
  padding:12px 16px;background:var(--bg-2);border-bottom:1px solid var(--warning);font-size:13px;box-shadow:0 4px 24px rgba(0,0,0,.25);
}
.sync-incoming-inner code{font-family:var(--font-mono);font-size:12px;color:var(--accent)}
.sync-incoming-actions{display:flex;gap:8px;align-items:center}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* Noscript fallback — CSP forbids inline styles so the panel below relies on these classes. */
.noscript-panel{max-width:560px;margin:48px auto;padding:24px;background:var(--bg-2);border:1px solid var(--border);border-radius:var(--r-lg);color:var(--text-2);font:14px/1.55 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}
.noscript-h1{margin:0 0 12px;font-size:20px;color:var(--text-1)}
.noscript-p{margin:0 0 12px;color:var(--text-3)}
.noscript-src{margin:0;color:var(--text-3);font-size:12px}
.noscript-link{color:var(--accent)}
  /* Tactile press feedback — replaces the killed mobile tap-highlight. Tiny
     scale on :active gives every primary button a "felt" response on touch.
     Honors prefers-reduced-motion via the global override. */
  .task-add:active,
  .nav-tab:active,
  .ta-btn:active,
  .density-seg-btn:active,
  .action-toast-btn:active,
  .first-task-btn:active,
  .what-next-pill:active,
  .header-icon-btn:active,
  .toggle:active,
  .small-btn:active,
  .sv-chip:active{transform:scale(.97);transition:transform .08s}

  /* === ELEVATION HIERARCHY === */
  .panel{box-shadow:var(--shadow-card)}
  .card.main-card{box-shadow:var(--shadow-raised);border-color:var(--border-strong)}
  .modal{box-shadow:var(--shadow-overlay)}
  .cmdk-panel{box-shadow:var(--shadow-overlay)}
  /* .task-add — canonical styles live in the Tasks section above */
  .task-item--pareto{
    border-left-width:4px!important;
    border-left-color:var(--warning)!important;
    background:linear-gradient(90deg,rgba(255,176,46,.06) 0%,transparent 40%)
  }
  .task-item--pareto:hover{background:linear-gradient(90deg,rgba(255,176,46,.10) 0%,var(--bg-2) 40%)}
  .task-item--pareto .task-row-primary::after{
    content:'';
    position:absolute;
    inset-inline-end:0;
    top:0;
    bottom:0;
    width:3px;
    background:linear-gradient(180deg,var(--warning),transparent);
    opacity:.35;
    pointer-events:none
  }

  /* === NAV TAB ACTIVE STATE STRENGTHENED === */
  .nav-tab.active{
    background:var(--accent-bg);
    color:var(--accent);
    border:1px solid var(--accent-border);
    border-radius:8px
  }
  .nav-tab.active .nav-tab-icon{filter:none;color:var(--accent)}
  body.light-theme .nav-tab.active{
    background:rgba(10,111,214,.10);
    color:var(--accent);
    border-color:rgba(10,111,214,.28)
  }

  /* === UNIFIED EASING LANGUAGE === */
  .task-item,.sv-chip,.nav-tab,.list-chip,
  .btn,.btn-primary,.btn-pause,.btn-ghost,.btn-skip,.btn-danger,
  .task-add,.modal,.cmdk-panel,.action-toast{
    transition-timing-function:var(--ease-out);
    transition-duration:var(--dur-base)
  }
  .task-checkbox,.ta-btn,.toggle,.task-rm{
    transition-timing-function:var(--ease-out);
    transition-duration:var(--dur-fast)
  }

  /* === TIMER RING PULSE WHEN RUNNING === */
  @keyframes ringPulse{
    0%,100%{filter:drop-shadow(0 0 6px var(--work-glow))}
    50%{filter:drop-shadow(0 0 14px var(--work-glow))}
  }
  @keyframes ringPulseShort{
    0%,100%{filter:drop-shadow(0 0 6px var(--short-glow))}
    50%{filter:drop-shadow(0 0 14px var(--short-glow))}
  }
  @keyframes ringPulseLong{
    0%,100%{filter:drop-shadow(0 0 6px var(--long-glow))}
    50%{filter:drop-shadow(0 0 14px var(--long-glow))}
  }
  .ring-wrap.ring-running.work .ring-fg{animation:ringPulse 2.4s ease-in-out infinite}
  .ring-wrap.ring-running.short .ring-fg{animation:ringPulseShort 2.4s ease-in-out infinite}
  .ring-wrap.ring-running.long .ring-fg{animation:ringPulseLong 2.4s ease-in-out infinite}

  /* === STAGGERED PANEL PAGE-LOAD ENTRY === */
  @keyframes panelEnter{
    from{opacity:0;transform:translateY(12px)}
    to{opacity:1;transform:translateY(0)}
  }
  [data-tab]:not([hidden]):not([data-panel-entered]) .panel,
  [data-tab]:not([hidden]):not([data-panel-entered]) .card.main-card{
    animation:panelEnter var(--dur-slow) var(--ease-out) both
  }
  [data-tab]:not([hidden]):not([data-panel-entered]) .panel:nth-child(1){animation-delay:0ms}
  [data-tab]:not([hidden]):not([data-panel-entered]) .panel:nth-child(2){animation-delay:40ms}
  [data-tab]:not([hidden]):not([data-panel-entered]) .panel:nth-child(3){animation-delay:80ms}
  [data-tab]:not([hidden]):not([data-panel-entered]) .panel:nth-child(4){animation-delay:120ms}

  /* === RADIUS NORMALIZATION === */
  .iform{border-radius:var(--r-md)}
  .qt-form{border-radius:var(--r-md)}
  .lists-bar{border-radius:var(--r-md)}
  .task-toolbar{border-radius:var(--r-md)}
  .smart-views{border-radius:var(--r-md)}
  .hist-day{border-radius:var(--r-md)}
  .sinput{border-radius:var(--r-sm)}
  .small-btn{border-radius:var(--r-sm)}
  .irm{border-radius:var(--r-sm)}
  .qt-act{border-radius:var(--r-sm)}
  .mfield-chip-btn{border-radius:var(--r-sm)}
  .board-col{border-radius:var(--r-lg)}
  .tab{border-radius:calc(var(--r-sm) + 2px)}
  .modal-close{border-radius:var(--r-sm)}

  /* === UNIFIED CHIP SYSTEM === */
  .status-badge,.date-chip,.recur-badge{
    padding:3px 9px;
    font-size:var(--fs-12);
    font-weight:600;
    border-radius:999px;
    letter-spacing:0;
    display:inline-flex;
    align-items:center;
    gap:4px;
    line-height:1.4
  }
  .tag-chip{
    padding:2px 8px;
    font-size:var(--fs-12);
    font-weight:500;
    border-radius:999px;
    letter-spacing:0
  }
  .list-chip .lc-count,.sv-count{
    font-size:10px;
    font-weight:600;
    padding:1px 6px;
    border-radius:999px;
    line-height:1.4
  }

  /* === CONSISTENT HOVER GRAMMAR === */
  button:hover{filter:none}
  .small-btn:hover,.export-btn:hover,.clear-hist-btn:hover{filter:brightness(1.06)}

  /* === ENHANCED ACTION TOAST === */
  .action-toast{
    border-radius:var(--r-lg);
    padding:12px 14px 10px 18px;
    gap:var(--space-5);
    box-shadow:0 8px 28px rgba(0,0,0,.40),0 2px 6px rgba(0,0,0,.24);
    border-color:var(--border-strong);
    flex-direction:column;
    align-items:stretch
  }
  .action-toast-header{display:flex;align-items:center;gap:var(--space-5)}
  .action-toast-lbl{flex:1;font-size:var(--fs-13);font-weight:600}
  .action-toast-btn{align-self:flex-start}
  .action-toast-progress{height:3px;border-radius:999px;background:var(--border);overflow:hidden;margin-top:2px}
  .action-toast-progress-bar{height:100%;background:var(--accent);border-radius:999px;transition:width 0.1s linear}
  .action-toast-kbd-hint{font-size:10px;color:var(--text-3);font-family:var(--font-mono);margin-top:1px}

  /* === TYPOGRAPHIC PROPORTION === */
  .slbl{font-size:var(--fs-13);font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-2)}
  .scnt{font-size:var(--fs-12);color:var(--text-3);font-weight:500}
  .task-empty-title{font-size:var(--fs-20);font-weight:700;letter-spacing:-.01em}

  /* === FOCUS RING: matches component shape === */
  *:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
  .sv-chip:focus-visible,.list-chip:focus-visible,.status-badge:focus-visible,
  .date-chip:focus-visible,.tag-chip:focus-visible,.task-add:focus-visible,
  .btn:focus-visible,.btn-primary:focus-visible,.btn-ghost:focus-visible,
  .btn-skip:focus-visible,.btn-danger:focus-visible,.action-toast-btn:focus-visible,
  .what-next-pill:focus-visible{border-radius:999px}
  .ta-btn:focus-visible,.nav-tab:focus-visible,.task-checkbox:focus-visible,
  .modal-close:focus-visible,.header-icon-btn:focus-visible{border-radius:var(--r-sm)}

  /* === LOADING STATE LANGUAGE === */
  .ai-chip--syncing .ai-chip-dot,.track-banner-pulse,.sync-dot--loading,.mt-phase-dot.running{
    animation-name:pulse;
    animation-duration:1.4s;
    animation-timing-function:ease-in-out;
    animation-iteration-count:infinite
  }
  .intel-action-btn:disabled,.task-add:disabled,.btn:disabled,.btn-primary:disabled{
    opacity:.45;
    cursor:not-allowed;
    pointer-events:none
  }

  @media (prefers-reduced-motion:reduce){
    .task-add:active,.nav-tab:active,.ta-btn:active,.density-seg-btn:active,
    .action-toast-btn:active,.first-task-btn:active,.what-next-pill:active,
    .header-icon-btn:active,.toggle:active,.small-btn:active,.sv-chip:active{
      transform:none
    }
    .ring-wrap.ring-running .ring-fg,
    [data-tab]:not([hidden]):not([data-panel-entered]) .panel,
    [data-tab]:not([hidden]):not([data-panel-entered]) .card.main-card{
      animation:none
    }
  }

  /* Skip-to-content: hidden until a keyboard user tabs into it from page load. */
  .skip-link{position:absolute;inset-block-start:-44px;inset-inline-start:8px;background:var(--accent);color:var(--text-on-accent);padding:8px 14px;border-radius:var(--r-sm);font-weight:700;font-size:13px;letter-spacing:.02em;z-index:var(--z-skip-link);transition:inset-block-start .15s;text-decoration:none}
  .skip-link:focus,.skip-link:focus-visible{inset-block-start:8px;outline:2px solid var(--text-1);outline-offset:2px}
.drag-handle{cursor:grab;color:var(--text-4);font-size:15px;padding:0 2px;user-select:none;line-height:1;flex-shrink:0}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:0.01ms!important;animation-iteration-count:1!important;transition-duration:0.01ms!important}
}

/* ══════════════════════════════════════════════════════════════════════════ */
/* Command palette                                                            */
/* ══════════════════════════════════════════════════════════════════════════ */
.cmdk-input-row{display:flex;align-items:center;gap:0;border-bottom:1px solid var(--border)}
.cmdk-input-row .cmdk-input{border-bottom:none;flex:1}
.cmdk-find-hint{
  margin:0;padding:8px 14px;font-size:12px;line-height:1.45;color:var(--text-3);
  border-bottom:1px solid var(--border);background:var(--bg-2);
}
.cmdk-find-hint kbd{
  font-family:var(--font-mono);font-size:10px;background:var(--bg-1);border:1px solid var(--border);
  padding:1px 5px;border-radius:3px;color:var(--text-2);
}
.cmdk-find-hint strong{color:var(--text-2);font-weight:600}

/* Source badge + bulk-destructive warning inside the pending-ops preview */
.pending-source-badge{
  display:inline-block;margin-left:8px;padding:2px 8px;font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  background:var(--accent-bg);color:var(--accent);border-radius:999px;vertical-align:middle;
}
.pending-mass-warn{
  margin:0 0 10px;padding:10px 12px;font-size:12px;line-height:1.5;color:var(--text-1);
  background:rgba(241,196,15,.08);border:1px solid rgba(241,196,15,.35);border-radius:8px;
}


/* ═══ Layout / IA: track banner, timer sub-nav, first-task CTA ═══ */
/* (.header-nav-bar removed — primary nav now lives in .app-sidebar.) */
.header-utils{display:flex;align-items:center;gap:6px;flex-shrink:0}
.header-icon-btn{
  min-width:36px;height:36px;padding:0 10px;border-radius:10px;
  background:var(--bg-2);border:1px solid var(--border);color:var(--text-2);
  font-size:12px;font-weight:600;transition:background .15s,border-color .15s;
}
.header-icon-btn:hover{background:var(--bg-3);color:var(--text-1)}
.header-icon-btn--cmdk{
  display:inline-flex;align-items:center;justify-content:center;gap:5px;
  padding:0 8px;min-width:36px;
}
.header-icon-btn--cmdk .cmdk-btn-ic{display:inline-flex;align-items:center;flex-shrink:0}
.header-icon-btn--cmdk .cmdk-btn-txt{display:none;font-size:12px;font-weight:600;letter-spacing:0.02em}
.header-icon-btn--cmdk .cmdk-btn-kbd{
  font-family:var(--font-mono);font-size:10px;line-height:1.15;letter-spacing:.02em;
}
@media (max-width:640px){
  .header-icon-btn--cmdk{min-height:44px;padding:0 10px}
  .header-icon-btn--cmdk .cmdk-btn-txt{display:inline}
  .header-icon-btn--cmdk .cmdk-btn-kbd{display:none}
}
/* HTML5 `hidden` attribute. !important ensures this wins over class rules
   that set display: flex / grid. JS toggles via el.hidden = false to show:
   once the attribute is removed the rule no longer matches, and any
   class-based display rule (or el.style.display assignment) takes effect. */
[hidden]{display:none !important}
.track-banner{
  width:100%;margin:0 0 12px;padding:8px 12px;
  background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-md);
  font-size:12px;
}
/* When multiple global status banners are visible (reindex + offline + tracking),
   stack them with a gap instead of overlapping in the header band. */
.track-banner:not([hidden]) + .track-banner:not([hidden]),
#embedReindexBanner:not([hidden]) + #onlineStatus:not([hidden]),
#onlineStatus:not([hidden]) + .container .track-banner:not([hidden]){
  margin-top:6px;
}

.tags-sheet-empty{font-size:12px;color:var(--text-3);margin:0 0 8px}
.task-tags-bar-wrap{margin-top:4px}
.md-sessions-legacy-hint{font-size:12px;color:var(--text-3);margin:0;line-height:1.45}
.track-banner-inner{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.track-banner-pulse{width:8px;height:8px;border-radius:50%;background:var(--success);animation:pulse 1.2s ease-in-out infinite}
.track-banner-label{font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--text-3)}
.track-banner-task{font-weight:600;color:var(--text-1)}
.track-banner-time{font-variant-numeric:tabular-nums;color:var(--text-2)}
.md-name-strong{font-weight:700}
.sw-lap{
  display:flex;justify-content:space-between;gap:8px;
  font-size:12px;padding:4px 0;border-bottom:1px solid var(--border);
  color:var(--text-2);
}
.sw-lap:last-child{border-bottom:none}
.sw-display{font-variant-numeric:tabular-nums}
.timer-subnav{
  display:flex;gap:4px;flex-wrap:wrap;width:100%;max-width:720px;
  margin:0 0 10px;padding:4px;background:var(--bg-1);border:1px solid var(--border);
  border-radius:var(--r-md);
}
.timer-sub-btn{
  flex:1;min-width:72px;padding:8px 10px;border-radius:8px;
  background:transparent;border:none;color:var(--text-3);
  font-size:11px;font-weight:600;letter-spacing:.04em;transition:background .15s,color .15s;
}
.timer-sub-btn:hover{color:var(--text-1);background:var(--bg-2)}
.timer-sub-btn.active{
  color:var(--text-1);background:var(--bg-2);
  box-shadow:inset 0 0 0 1px var(--border-strong);
}
.first-task-btn{
  display:inline-block;margin:var(--space-4) 0;padding:10px 16px;border-radius:var(--r-sm);
  background:var(--accent-bg);color:var(--accent);border:1px solid var(--accent-border);
  font-size:var(--fs-13);font-weight:600;font-family:inherit;cursor:pointer;
  min-height:40px;
}
.first-task-btn:hover{filter:brightness(1.08);background:var(--accent);color:var(--text-on-accent);border-color:var(--accent)}
.first-task-btn:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.habit-template-row{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:var(--space-3) 0}
.habit-template-row .habit-template-btn{margin:0;padding:8px 14px;font-size:var(--fs-12)}

/* Empty-state internal layout — class-driven so it stays theme-aware and
   token-consistent across views (no-tasks-yet / no-filter-match / archive). */
.task-empty-icon{
  display:flex;justify-content:center;line-height:0;
  color:var(--text-3);opacity:.6;
  margin-block-end:var(--space-4);
  font-size:28px;
}
.task-empty-icon .ui-ic{width:32px;height:32px}
.task-empty-welcome{margin:14px auto 16px;max-width:520px;text-align:left;background:var(--bg-1);border:1px solid var(--border);border-radius:var(--r-md);padding:14px 18px}
.task-empty-welcome-title{font-weight:700;color:var(--text-1);margin-bottom:8px;font-size:14px}
.task-empty-welcome-list{margin:0 0 10px;padding-left:18px;color:var(--text-2);font-size:13px;line-height:1.6}
.task-empty-welcome-list li{margin-bottom:4px}
.task-empty-welcome-dismiss{padding:5px 12px;border-radius:6px;border:1px solid var(--border);background:transparent;color:var(--text-2);font-size:12px;cursor:pointer}
.task-empty-welcome-dismiss:hover{background:var(--bg-2);color:var(--text-1)}
.stats-empty-hint{margin:8px 0 0;padding:8px 12px;border-radius:var(--r-sm);background:var(--bg-2);color:var(--text-3);font-size:12px;line-height:1.5;text-align:center}
.task-empty-title{
  font-size:var(--fs-16);font-weight:600;color:var(--text-1);
  margin-block-end:var(--space-3);
}
.task-empty-help{
  font-size:var(--fs-13);color:var(--text-2);
  margin-block:var(--space-3);
  line-height:1.5;
}
.task-empty-help strong{color:var(--text-1);font-weight:600}
.task-empty-tip{
  font-size:var(--fs-12);color:var(--text-3);
  margin-block:var(--space-3);
  line-height:1.5;max-width:42ch;margin-inline:auto;
}
.task-empty-example{
  font-family:var(--font-mono);font-size:var(--fs-12);color:var(--text-3);
  margin-block-start:var(--space-5);line-height:1.6;
}
.task-empty-example-tokens{color:var(--accent);margin-inline-start:6px}
.mfield--readonly{
  background:var(--bg-0)!important;cursor:default!important;color:var(--text-2);
  border-color:var(--border)!important;
}
body.light-theme .mfield--readonly{background:var(--bg-2)!important}
.filter-display-lbl{font-size:10px;color:var(--text-3);letter-spacing:.1em;text-transform:uppercase;margin-right:6px;flex-shrink:0}
.task-toolbar-display{
  display:flex;flex-direction:column;align-items:stretch;gap:10px;width:100%;
}
.task-toolbar-display-head{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px;width:100%;
}
.task-toolbar-display-head .density-seg{flex:1 1 auto;min-width:min(100%,240px)}
.sheet .task-toolbar-display .density-seg{width:100%}
.task-toolbar-display-checks{
  display:flex;flex-wrap:wrap;flex-direction:column;gap:10px;align-items:flex-start;width:100%;
}
@media (min-width:520px){
  .task-toolbar-display{flex-direction:row;flex-wrap:wrap;align-items:center}
  .task-toolbar-display-checks{flex-direction:row;flex-wrap:wrap;align-items:center;margin-left:auto;width:auto}
}

button.hist-day{display:block;width:100%;font:inherit;cursor:pointer;background:inherit}
.app-dlg{max-width:420px}
.app-dlg-msg{color:var(--text-1)}
.app-dlg-overlay{z-index:var(--z-dialog)}


/* ───── G-17 stats-by-life-area ───── */
.stats-by-area{margin-top:12px;padding:10px 12px;background:var(--card-2,rgba(255,255,255,.03));border:1px solid var(--border);border-radius:var(--r-sm,6px)}
.sba-title{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);margin-bottom:8px}
.sba-row{display:grid;grid-template-columns:14px 1fr 100px 90px;align-items:center;gap:8px;padding:3px 0;font-size:12px}
.sba-dot{width:10px;height:10px;border-radius:50%;display:inline-block;box-shadow:0 0 0 1px color-mix(in srgb, currentColor 35%, transparent)}
.sba-lbl{color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sba-bar{position:relative;height:6px;background:var(--border);border-radius:3px;overflow:hidden}
.sba-bar-fill{display:block;height:100%;border-radius:3px}
.sba-val{color:var(--text-3);font-variant-numeric:tabular-nums;text-align:right;font-size:11px}

/* ───── G-14 focus streaks + heatmap ───── */
.focus-streak{margin-top:12px;padding:12px;background:var(--card-2,rgba(255,255,255,.03));border:1px solid var(--border);border-radius:var(--r-sm,6px)}
.streak-row{display:flex;align-items:baseline;gap:8px;margin-bottom:10px}
.streak-num{font-size:28px;font-weight:700;color:var(--accent);line-height:1;font-variant-numeric:tabular-nums}
.streak-lbl{font-size:12px;color:var(--text-2)}
.streak-best{margin-left:auto;font-size:11px;color:var(--text-3)}
.hm-grid{display:grid;grid-template-columns:repeat(8,1fr);gap:3px;width:100%;max-width:260px;margin:0 auto}
.hm-cell{display:block;aspect-ratio:1;border-radius:2px;background:var(--border)}
.hm-l1{background:rgba(26,140,255,.25)}
.hm-l2{background:rgba(26,140,255,.5)}
.hm-l3{background:rgba(26,140,255,.75)}
.hm-l4{background:rgba(26,140,255,1)}

/* ───── G-15 session note prompt ───── */
.session-note-prompt{margin-top:12px;padding:12px;background:var(--card-2,rgba(255,255,255,.03));border:1px solid var(--border);border-radius:var(--r-sm,6px);display:flex;flex-direction:column;gap:8px}
.snp-lbl{font-size:12px;color:var(--text-2)}
.snp-input{font:inherit;color:var(--text-1);background:var(--input-bg,rgba(0,0,0,.2));border:1px solid var(--border);border-radius:4px;padding:6px 8px;resize:vertical;min-height:40px}
.snp-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.snp-save{background:var(--accent);color:var(--text-on-accent);border:none;padding:6px 12px;border-radius:4px;font:600 12px inherit;cursor:pointer}
.snp-skip{background:transparent;color:var(--text-2);border:1px solid var(--border);padding:6px 12px;border-radius:4px;font:12px inherit;cursor:pointer}
.snp-off{margin-left:auto;font-size:11px;color:var(--text-3);display:inline-flex;align-items:center;gap:4px}

/* ───── G-7 focus-on-list mode ───── */
.app-focus-list .smart-views,
.app-focus-list .lists-bar,
.app-focus-list .today-banner{display:none !important}
/* removed focus-list absolute badge to prevent UI overlap with the Menu button */

/* ───── G-18 today-view calendar events ───── */
.today-cal-events{margin:8px 0 4px;padding:8px 10px;background:var(--card-2,rgba(255,255,255,.03));border:1px solid var(--border);border-radius:var(--r-sm,6px)}
.tce-head{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);margin-bottom:6px}
.tce-list{display:flex;flex-direction:column;gap:4px}
.tce-row{display:grid;grid-template-columns:8px 60px 1fr auto;align-items:center;gap:8px;font-size:12px}
.tce-dot{width:8px;height:8px;border-radius:50%}
.tce-time{color:var(--text-2);font-variant-numeric:tabular-nums;font-size:11px}
.tce-title{color:var(--text-1);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tce-feed{color:var(--text-3);font-size:10px}

/* ───── G-4 bulk-select edit mode ───── */
.app-bulk-mode .task-item{cursor:pointer}
.app-bulk-mode .task-item::before{content:"";display:inline-block;width:16px;height:16px;border:1.5px solid var(--border-strong);border-radius:5px;margin-right:8px;flex-shrink:0;background:var(--bg-2);vertical-align:middle;transition:background .12s,border-color .12s}
/* Selected row: subtle accent tint + a solid accent left-bar (overrides the
   category stripe at .task-cat-stripe while selected — selection wins). All
   token-based so it adapts to the light theme. */
.app-bulk-mode .task-item.task-bulk-selected{background:var(--accent-bg);border-color:var(--accent-border);box-shadow:inset 3px 0 0 0 var(--accent)}
.app-bulk-mode .task-item.task-bulk-selected::before{background:var(--accent);border-color:var(--accent);box-shadow:inset 0 0 0 2px var(--bg-0)}
/* Anchored to the TOP (Files/Mail-style selection bar) so it never collides
   with the bottom-right FAB + mini-timer stack, and stays put while scrolling. */
.bulk-bar{position:fixed;left:50%;top:calc(8px + env(safe-area-inset-top,0px));bottom:auto;transform:translateX(-50%);z-index:1200;display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 12px;background:var(--bg-2);border:1px solid var(--border);border-radius:16px;box-shadow:0 4px 18px rgba(0,0,0,.4);max-width:calc(100vw - 32px);flex-wrap:wrap}
.bulk-count{font-size:12px;color:var(--accent);font-weight:600;margin-right:6px}
.bulk-btn{background:transparent;color:var(--text-1);border:1px solid var(--border);padding:5px 10px;border-radius:14px;font:600 11px inherit;cursor:pointer}
.bulk-btn:hover{background:var(--card-2,rgba(255,255,255,.05))}
.bulk-close{background:transparent;border-color:transparent;font-size:14px;color:var(--text-3)}
.bulk-sel{background:var(--card-2,rgba(255,255,255,.05));color:var(--text-1);border:1px solid var(--border);padding:4px 8px;border-radius:14px;font:11px inherit}

/* ───── G-25 prefers-contrast: more (high-contrast accessibility theme) ───── */
@media (prefers-contrast: more) {
  :root {
    --border: rgba(255,255,255,.55);
    --text-3: rgb(200, 211, 224);
  }
  .task-item, .session-note-prompt, .focus-streak, .stats-by-area, .today-cal-events, .bulk-bar { border-width:1.5px }
  .task-checkbox, .qt-btn, .bulk-btn, .snp-save, .snp-skip, .export-btn { outline:1px solid currentColor; outline-offset:1px }
  :focus-visible { outline:2px solid currentColor; outline-offset:2px }
  .sba-bar { background: rgb(34, 34, 34); }
}

/* ───── G-12 voice button styling ───── */
.task-voice-btn{}
.task-voice-btn.on{color:var(--danger);animation:pulseVoice 1.2s ease-in-out infinite}
@keyframes pulseVoice{0%,100%{opacity:1}50%{opacity:.55}}
@media (prefers-reduced-motion: reduce){
  .task-voice-btn.on{animation:none}
}

/* ───── G-7 visible focus-on-list toggle in the lists bar ───── */
.list-focus-toggle{background:transparent;color:var(--text-3);border:1px solid var(--border);padding:4px 10px;border-radius:14px;font:11px inherit;cursor:pointer;margin-left:6px}
.list-focus-toggle.on{background:rgba(26,140,255,.12);color:var(--accent);border-color:rgba(26,140,255,.4)}
.list-focus-toggle:hover{background:var(--card-2,rgba(255,255,255,.05))}

/* ───── G-21 share-target: incoming-share confirmation + input flash ───── */
.quickadd-flash{animation:quickaddFlash 1.4s ease-out;outline:2px solid var(--accent);outline-offset:2px}
@keyframes quickaddFlash{
  0%{box-shadow:0 0 0 0 rgba(26,140,255,.7)}
  70%{box-shadow:0 0 0 12px rgba(26,140,255,0)}
  100%{box-shadow:0 0 0 0 rgba(26,140,255,0)}
}
@media (prefers-reduced-motion: reduce){
  .quickadd-flash{animation:none}
  /* New animations from the recent UX wave — pulses, scale-flashes, and
     popover fade-in all disabled so users who opted out of motion don't
     see the chip throbbing or the FAB bouncing on every tap. */
  .ai-chip--firstrun::after{animation:none}
  .quick-add-fab.flash{animation:none}
  .task-syntax-popover{animation:none}
  .dm-ring-fg{transition:none}
  .dm-spark-bar{transition:none}
}
.share-in-banner{position:fixed;top:12px;left:50%;transform:translateX(-50%);z-index:1300;display:flex;align-items:center;gap:10px;padding:8px 14px;background:rgba(26,140,255,.12);color:var(--accent);border:1px solid rgba(26,140,255,.4);border-radius:999px;font-size:12px;font-weight:600;box-shadow:0 4px 14px rgba(0,0,0,.4);max-width:calc(100vw - 32px)}
.share-in-x{background:transparent;border:none;color:inherit;font-size:14px;cursor:pointer;padding:0 4px;opacity:.7}
.share-in-x:hover{opacity:1}

/* Checklist & Related tasks styling */
.mclg-group {
  display:flex;flex-direction:column;gap:6px;margin-bottom:12px;
  background:var(--bg-2, rgba(255,255,255,.02));border:1px solid var(--border);border-radius:8px;padding:8px;
}
.mclg-head { display:flex;align-items:center;gap:8px; }
.mclg-name { flex:1; background:transparent; border:none; color:var(--text-1); font-weight:600; font-size:14px; outline:none; }
.mclg-rm { background:transparent; border:none; color:var(--danger); cursor:pointer; font-size:14px; padding:0 4px; }
.mclg-items { list-style:none; padding:0; margin:0; display:flex; flex-direction:column; gap:4px; }
.mclg-items li { display:flex; align-items:center; gap:8px; }
.mclg-item-cb { accent-color:var(--accent); width:16px; height:16px; cursor:pointer; }
.mclg-item-txt { flex:1; background:var(--bg-1); border:1px solid var(--border); border-radius:4px; color:var(--text-1); padding:4px 8px; font-size:13px; }
.mclg-item-txt.done { text-decoration:line-through; color:var(--text-3); opacity:0.7; }
.mclg-item-x { background:transparent; border:none; color:var(--text-3); cursor:pointer; font-size:14px; padding:0 4px; }
.mclg-item-x:hover { color:var(--danger); }

/* Ghost Action Buttons */
.mclg-add-group, .mclg-add, .related-add {
  font-family: inherit;
  display:inline-flex;align-items:center;justify-content:center;
  background:color-mix(in srgb,var(--accent) 12%,transparent);border:1px solid color-mix(in srgb,var(--accent) 30%,transparent);border-radius:6px;
  padding:6px 12px;font-size:13px;color:var(--accent);cursor:pointer;
  transition:background .15s,transform .1s;line-height:1;
  font-weight:500;margin-top:4px;align-self:flex-start;
}
.mclg-add-group:hover, .mclg-add:hover, .related-add:hover {
  background:color-mix(in srgb,var(--accent) 20%,transparent);transform:scale(1.02)
}
.mclg-add-group:active, .mclg-add:active, .related-add:active {
  transform:scale(0.98)
}

.md-related {
  display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:4px;
}
.related-chip {
  display:inline-flex;align-items:center;gap:6px;
  background:var(--bg-2);border:1px solid var(--border);border-radius:6px;
  padding:4px 8px;font-size:13px;color:var(--text-1);cursor:pointer;transition:background .15s;
}
.related-chip:hover {
  background:var(--bg-3, var(--bg-2));border-color:var(--accent-border, var(--border));
}
.related-x {
  color:var(--danger);font-weight:bold;cursor:pointer;font-size:14px;line-height:1;
}
.related-x:hover {
  filter:brightness(1.5);
}

/* ========== KANBAN BOARD — TOUCH DnD POLISH ========== */
/* board-card while being touch-dragged (ghost is in body; original goes faint) */
.board-card--touch-src{opacity:.28!important}
/* Column highlighted as current drop target during touch drag */
.board-col.drop-target{
  background:var(--accent-bg);
  border-color:var(--accent-border);
  box-shadow:inset 0 0 0 2px var(--accent-border);
}
/* Mobile board: longer hold indicator so users know drag has started */
@media (max-width:640px){
  .board-col-empty{
    padding:32px 16px;
    border:2px dashed var(--border);border-radius:var(--r-md);
    font-size:13px;color:var(--text-4);font-style:italic;
    transition:border-color .15s,background .15s;
  }
  .board-col.drop-target .board-col-empty{
    border-color:var(--accent-border);
    background:var(--accent-bg);color:var(--accent);
  }
}

/* ========== OPTION B — ACTION BUTTONS ACCESSIBILITY ========== */
/* Touch devices: always show the play and delete buttons (never hidden),
   make them meet the 44px minimum tap target with padding compensation */
@media (hover:none){
  /* Show all task-row action buttons on touch devices */
  .ta-btn.ta-sub,.ta-btn.ta-star:not(.on){display:flex}
  /* Ensure minimum 44×44 tap area via padding rather than size change
     so the visual button stays 28×28 but the interactive zone is safe */
  .ta-btn{
    min-width:36px;min-height:36px;
    padding:4px;
  }
}

/* Starred indicator: gold left-stripe on the board card */
.board-card.starred-card{border-left-color:var(--starred)!important}

/* ── Print stylesheet ──────────────────────────────────────────────────────
   Goal: a user prints their task list (or daily report) and gets readable
   black-on-white output with no chrome, ribbons, modals, or overlays. The
   app's normal palette is dark; print explicitly resets the foreground so
   it doesn't waste ink on dark backgrounds. */
/* Timer dock */
.timer-dock-grip{cursor:grab;padding:0 4px;color:var(--text-3);background:transparent;border:none;font-size:14px;line-height:1;flex-shrink:0}
.timer-dock-grip:active{cursor:grabbing}
.timer-dock-min,.timer-dock-qt{background:transparent;border:none;color:var(--text-3);cursor:pointer;font-size:14px;padding:0 6px;font-family:inherit}
.timer-dock-qt{max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--accent)}
/* Restore handle — only shown when the dock is fully minimized. */
.timer-dock-handle{
  display:none;align-items:center;justify-content:center;
  width:40px;height:40px;border-radius:999px;
  background:transparent;border:none;cursor:pointer;
  color:var(--text-2);font-size:18px;line-height:1;
}
.timer-dock-handle:hover{color:var(--text-1)}
/* Fully-minimized dock: collapse to just the handle (a small clock puck). */
.timer-dock--min{padding:2px!important;gap:0!important;border-radius:999px!important;border-left-width:1px!important}
.timer-dock--min > :not(.timer-dock-handle){display:none!important}
.timer-dock--min .timer-dock-handle{display:flex}
/* The collapsed puck is draggable (see timer-dock.js) — show the affordance. */
.timer-dock--min .timer-dock-handle{cursor:grab;touch-action:none}
.timer-dock--min .timer-dock-handle:active{cursor:grabbing}
.timer-dock--min.work  .timer-dock-handle{color:var(--work)}
.timer-dock--min.short .timer-dock-handle{color:var(--success)}
.timer-dock--min.long  .timer-dock-handle{color:var(--long)}
.timer-dock--min.timer-running .timer-dock-handle{animation:pulse 1.6s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.timer-dock--min.timer-running .timer-dock-handle{animation:none}}
body:has(.timer-dock.visible){padding-bottom:calc(80px + env(safe-area-inset-bottom,0px))}

/* Calendar modes */
.cal-mode-seg{display:flex;gap:6px;margin-bottom:10px;flex-wrap:wrap}
.cal-mode-btn{padding:6px 12px;border-radius:999px;border:1px solid var(--border);background:var(--bg-2);color:var(--text-2);font-size:12px;cursor:pointer;font-family:inherit}
.cal-mode-btn.active{background:var(--accent-bg);border-color:var(--accent-border);color:var(--accent)}
.cal-week-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;min-height:280px}
.cal-week-col{border:1px solid var(--border);border-radius:var(--r-md);background:var(--bg-1);min-height:200px;display:flex;flex-direction:column}
.cal-week-col.selected{border-color:var(--accent-border);box-shadow:0 0 0 1px var(--accent-border)}
.cal-week-col-head{width:100%;padding:8px;border:none;border-bottom:1px solid var(--border-subtle);background:var(--bg-2);font-size:11px;font-weight:600;cursor:pointer;font-family:inherit;color:var(--text-1)}
.cal-week-col-body{padding:6px;font-size:11px;flex:1;overflow-y:auto}
.cal-day-count{display:block;font-size:9px;color:var(--text-3);margin-top:2px}
.cal-day{min-height:72px}
.cal-day-agenda--full{max-height:none}
.cal-day-nav{display:flex;align-items:center;justify-content:center;gap:12px;margin-bottom:8px}

/* Task modal layout */
/* Segmented section tabs — one pane visible at a time so the editor never
   becomes a 2000px scroll. The tab bar scrolls with the pane; only the modal
   header (the task-name field) stays pinned above the scroll region. */
.md-tabs{
  display:flex;gap:4px;
  background:var(--bg-2);
  margin:0 0 14px;padding:2px 0 8px;
  border-bottom:1px solid var(--border-subtle);
}
.md-tab{
  flex:1;padding:8px 10px;
  background:transparent;border:none;border-radius:var(--r-sm);
  color:var(--text-3);font-size:var(--fs-13);font-weight:600;cursor:pointer;
  transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
}
.md-tab:hover{background:var(--bg-1);color:var(--text-1)}
.md-tab.active{background:var(--accent-bg);color:var(--accent)}
.md-tabpane{animation:fadeIn var(--dur-base) var(--ease-out)}
.md-tabpane[hidden]{display:none}
body.light-theme .md-tabs{background:var(--bg-1)}
body.light-theme .md-tab:hover{background:var(--bg-2)}
/* Header property pills — Status / Priority / Due / List as one-click popovers
   above the tabs. Each carries a current-value label; colour cues priority and
   non-default status. Reuses the chip/pill radius language. */
.md-pills{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.md-pill{
  display:inline-flex;align-items:center;gap:6px;max-width:100%;
  padding:5px 12px;border-radius:999px;
  background:var(--bg-1);border:1px solid var(--border);
  color:var(--text-2);font-size:var(--fs-12);font-weight:600;cursor:pointer;
  transition:background var(--dur-fast) var(--ease-out),border-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);
}
.md-pill:hover{background:var(--bg-3);border-color:var(--border-strong);color:var(--text-1)}
.md-pill .dropdown-trigger-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}
.md-pill--status.status-progress{color:var(--accent)}
.md-pill--status.status-review{color:var(--warning)}
.md-pill--status.status-blocked{color:var(--danger)}
.md-pill--status.status-done{color:var(--success)}
.md-pill--priority.prio-urgent{color:var(--prio-urgent);border-color:var(--prio-urgent)}
.md-pill--priority.prio-high{color:var(--prio-high)}
.md-pill--priority.prio-normal{color:var(--prio-normal)}
.md-pill--priority.prio-low{color:var(--prio-low)}
.md-pill--due.md-pill--set{color:var(--text-1)}
.md-block--last{margin-bottom:0;padding-bottom:0;border-bottom:none}
.md-block{margin-bottom:14px;padding-bottom:12px;border-bottom:1px solid var(--border-subtle)}
.md-block-title{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin-bottom:10px}
.md-hint{font-size:11px;color:var(--text-3);margin:6px 0 0}
.md-attach-tools{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.md-attach-grid{display:flex;flex-wrap:wrap;gap:10px}
.md-attach-card{position:relative;border:1px solid var(--border);border-radius:8px;overflow:hidden;background:var(--bg-2)}
.md-attach-card img{max-width:120px;max-height:120px;display:block}
.md-attach-thumb{cursor:zoom-in}
.md-attach-card audio{max-width:min(100%,280px);min-width:200px}
.md-attach-del{position:absolute;top:4px;right:4px;width:22px;height:22px;border-radius:50%;border:none;background:rgba(0,0,0,.55);color:var(--text-on-inverse);cursor:pointer;z-index:1}
.attach-lightbox{position:fixed;inset:0;z-index:calc(var(--z-modal) + 3);background:rgba(0,0,0,.92);display:flex;align-items:center;justify-content:center;padding:24px 16px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--dur-fast) var(--ease-out),visibility 0s linear var(--dur-fast)}
.attach-lightbox.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity var(--dur-fast) var(--ease-out),visibility 0s linear 0s}
.attach-lightbox-body{display:flex;align-items:center;justify-content:center;max-width:100%;max-height:100%}
.attach-lightbox-body img{max-width:min(96vw,1400px);max-height:min(90vh,1200px);width:auto;height:auto;object-fit:contain;border-radius:4px;box-shadow:0 8px 40px rgba(0,0,0,.45)}
.attach-lightbox-close{position:absolute;top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));width:40px;height:40px;border:none;border-radius:50%;background:rgba(255,255,255,.12);color:var(--text-on-inverse);font-size:24px;line-height:1;cursor:pointer;z-index:1}
.attach-lightbox-close:hover{background:rgba(255,255,255,.22)}
@media (min-width:720px){
  #taskModal .modal-body .mfield-row--modal-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
  .panel[data-tab="tasks"] .task-form{position:sticky;top:0;z-index:2;background:var(--bg-0);padding-bottom:8px}
}

@media print {
  :root, body, body.dark-theme, body.light-theme {
    background:white !important;
    color:black !important;
  }
  /* Hide everything that's chrome / interactive / overlay. The task list
     itself and the daily-momentum tile survive so printed output is the
     same content the user was looking at. */
  .header, .tabs-bar, .nav-tab, .skip-link,
  .mini-timer, .timer-dock, .quick-add-fab, .save-indicator,
  .modal-overlay, .cmdk-overlay, .what-next-overlay,
  .update-banner, .sw-precache-banner, .share-in-banner, .sync-incoming-bar,
  .action-toast, .export-toast, .quota-warning,
  .task-syntax-popover, #shortcutsHelpOverlay,
  .task-form, .task-search-row, .active-filters-bar,
  .smart-views, .smart-views-bar, .lists-bar,
  .task-toolbar, .filters-summary,
  .set-nav, .set-section-sum::after,
  button {
    display:none !important;
  }
  /* Force a sane viewport for paper. */
  body {
    padding:0 !important;
    font-family:Georgia, serif;
    font-size:11pt;
    line-height:1.4;
  }
  .panel, .task-item, .pending-task-card {
    background:white !important;
    border-color:gray !important;
    box-shadow:none !important;
    page-break-inside:avoid;
  }
  .task-item {
    border:1px solid silver !important;
    margin-bottom:6px !important;
    padding:8px 10px !important;
  }
  .task-name, .task-meta { color:black !important; }
  /* Hide the floating header logo art if it's still in the DOM. */
  .header-logo, .sdot { display:none !important; }
  /* Ensure links remain identifiable in print — show the href after the
     anchor text so a print-out is still useful when scanned later. */
  a[href]::after {
    content:" (" attr(href) ")";
    font-size:9pt; color:rgb(85,85,85);
  }
}

/* ── Generative Ask (restored) ── */
.gen-load-ribbon{position:fixed;left:50%;bottom:max(12px,env(safe-area-inset-bottom));transform:translateX(-50%);z-index:var(--z-toast);display:flex;flex-direction:column;gap:8px;min-width:min(440px,94vw);max-width:94vw;padding:11px 15px;border-radius:12px;background:var(--bg-1);border:1px solid var(--border-strong);box-shadow:0 10px 36px rgba(0,0,0,.22)}
.gen-load-ribbon[hidden]{display:none!important}
.gen-load-ribbon__track{position:relative;height:7px;background:var(--bg-3);border-radius:999px;overflow:hidden}
.gen-load-ribbon__bar{height:100%;width:0%;background:var(--accent);border-radius:999px;transition:width .22s ease-out}
.gen-load-ribbon__txt{font-size:12px;color:var(--text-1);line-height:1.4;font-weight:600}
@keyframes genRibbonIndet{
  0%{transform:translateX(-100%)}
  100%{transform:translateX(320%)}
}
.gen-load-ribbon__track--indeterminate .gen-load-ribbon__bar{width:38%!important;transition:none;animation:genRibbonIndet 1.35s ease-in-out infinite}
@media (max-width:480px){
  .gen-load-ribbon{padding:9px 12px;min-width:min(360px,96vw)}
  .gen-load-ribbon__txt{font-size:11px}
}
.intel-start-list{margin:8px 0 10px 1.1em;padding:0;font-size:12px;line-height:1.55;color:var(--text-2)}
.intel-start-list li{margin:4px 0}

.md-breakdown-body{display:flex;flex-direction:column;gap:8px;padding:4px 0 2px}
.md-breakdown-list{display:flex;flex-direction:column;gap:4px}
.md-breakdown-row{display:flex;align-items:center;gap:8px;padding:7px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;font-size:12px;cursor:pointer}
.md-breakdown-row:hover{border-color:var(--accent)}
.md-breakdown-row input[type="checkbox"]{flex-shrink:0;accent-color:var(--accent)}
.md-breakdown-name{flex:1;word-break:break-word;color:var(--text-1)}
.md-breakdown-effort{flex-shrink:0;font-size:10px;font-weight:700;padding:2px 6px;border-radius:999px;background:rgba(61,139,204,.12);border:1px solid rgba(61,139,204,.28);color:var(--accent)}
.md-breakdown-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:4px}
.md-breakdown-btn{padding:6px 12px;font-size:12px;font-weight:600;font-family:inherit;background:var(--bg-2);border:1px solid var(--border);border-radius:999px;color:var(--text-1);cursor:pointer;margin-top:8px}
.md-breakdown-btn:hover{border-color:var(--accent)}
.md-breakdown-btn--primary{background:var(--accent);border-color:var(--accent);color:var(--text-on-inverse)}
.md-breakdown-btn--primary:hover{filter:brightness(1.1)}

.cmdk-ask-toggle{
  margin-right:10px;padding:6px 12px;font-size:11px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  background:var(--bg-2);color:var(--text-3);border:1px solid var(--border);border-radius:999px;cursor:pointer;font-family:inherit;flex-shrink:0;
}
.cmdk-ask-toggle:hover{background:var(--bg-3);color:var(--text-2)}
.cmdk-ask-toggle--active{background:var(--accent-bg);color:var(--accent);border-color:var(--accent)}
.cmdk-panel--ask .cmdk-input{color:var(--accent)}
.cmdk-ask-reply{
  padding:14px 16px;max-height:40vh;overflow-y:auto;-webkit-overflow-scrolling:touch;
  background:var(--bg-2);border-bottom:1px solid var(--border);font-size:13px;color:var(--text-1);
}
.cmdk-ask-hint{font-size:12px;color:var(--text-3);line-height:1.5}
.cmdk-ask-hint strong{color:var(--text-2)}
.cmdk-ask-streaming{display:flex;flex-direction:column;gap:10px}
.cmdk-ask-row{display:flex;align-items:center;gap:10px}
.cmdk-ask-spinner{
  display:inline-block;width:12px;height:12px;border-radius:50%;
  border:2px solid var(--border);border-top-color:var(--accent);
  animation:cmdk-ask-spin 0.8s linear infinite;flex-shrink:0;
}
@keyframes cmdk-ask-spin{to{transform:rotate(360deg)}}
.cmdk-ask-label{font-size:12px;color:var(--text-2);font-weight:500;flex:1}
.cmdk-ask-details{font-size:11px;color:var(--text-3)}
.cmdk-ask-details summary{cursor:pointer;user-select:none;padding:2px 0}
.cmdk-ask-details summary:hover{color:var(--text-2)}
.cmdk-ask-stream{
  margin:6px 0 0;font-family:var(--font-mono);font-size:11.5px;line-height:1.45;color:var(--text-3);
  background:var(--bg-1);border:1px solid var(--border);border-radius:6px;padding:10px 12px;
  max-height:26vh;overflow-y:auto;white-space:pre-wrap;word-break:break-word;
}
.cmdk-ask-stop{
  padding:4px 10px;font-size:11px;font-weight:600;font-family:inherit;
  background:transparent;color:var(--danger);border:1px solid var(--danger);border-radius:4px;cursor:pointer;flex-shrink:0;
}
.cmdk-ask-stop:hover{background:rgba(231,76,60,.08)}
.cmdk-ask-error{color:var(--danger);font-size:13px;line-height:1.5}
/* "Run in background" affordance — sits next to the Edit toggle in Ask mode. */
.cmdk-ask-min[hidden]{display:none}
/* Floating pill that hosts a minimized Ask conversation kept alive in the bg. */
.ask-dock-pill{
  position:fixed;right:16px;bottom:max(16px,env(safe-area-inset-bottom));
  z-index:var(--z-toast);
  display:flex;align-items:center;gap:9px;
  padding:9px 15px;border-radius:999px;
  background:var(--bg-1);color:var(--text-1);
  border:1px solid var(--border-strong);
  box-shadow:0 8px 28px rgba(0,0,0,.22);
  font-family:inherit;font-size:12.5px;font-weight:600;
  cursor:pointer;max-width:min(320px,90vw);
  animation:ask-dock-in .18s var(--ease-out);
}
.ask-dock-pill:hover{background:var(--bg-2)}
.ask-dock-pill[hidden]{display:none}
.ask-dock-label{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ask-dock-spinner{
  display:inline-block;width:13px;height:13px;border-radius:50%;
  border:2px solid var(--border);border-top-color:var(--accent);flex-shrink:0;
}
.ask-dock-pill--running .ask-dock-spinner{animation:cmdk-ask-spin .8s linear infinite}
.ask-dock-pill:not(.ask-dock-pill--running) .ask-dock-spinner{
  border-color:var(--accent);background:var(--accent);
}
@keyframes ask-dock-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.cmdk-ask-error button{margin-left:8px;vertical-align:middle}
.cmdk-ask-empty{color:var(--text-3);font-size:13px;font-style:italic}
.cmdk-ask-done{color:var(--success,#2ecc71);font-size:13px;font-weight:500}
.cmdk-ask-answer{display:flex;flex-direction:column;gap:8px;padding:12px 14px;border-radius:var(--r-sm,8px);background:var(--bg-1);border:1px solid var(--border-subtle)}
.cmdk-ask-answer-body{color:var(--text-1);font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.cmdk-ask-answer-foot{color:var(--text-3);font-size:11px;letter-spacing:.2px}
.cmdk-ask-rejected{margin-top:8px;border:1px solid var(--border-subtle);border-radius:var(--r-sm,8px);background:var(--bg-1);padding:6px 10px}
.cmdk-ask-rejected summary{cursor:pointer;color:var(--warning);font-size:12px;font-weight:500}
.cmdk-ask-rejected-list{margin:6px 0 0;padding-left:18px;color:var(--text-2);font-size:12px;line-height:1.55}
.cmdk-ask-rejected-list li{word-break:break-word}
.cmdk-ask-rejected-more{font-style:italic;color:var(--text-3)}

/* Chat-style Ask conversation. Reply container scrolls; bubbles are right
   (user) and left (assistant) aligned. The existing per-state classes
   (.cmdk-ask-answer-body, .cmdk-ask-error, .cmdk-ask-done, .cmdk-ask-empty,
   .cmdk-ask-rejected) are reused inside the assistant bubble so we don't
   duplicate styling. */
#cmdkAskReply{max-height:46vh;max-height:min(46vh, calc(var(--vv-height, 46dvh) - 180px));overflow-y:auto;padding-right:2px;scroll-behavior:smooth}
/* When the soft keyboard is open, shrink the chat scroll area further so the
   input field stays visible. 180→260 budget covers the input row, the foot
   hint, and the "+ New chat" toolbar without clipping any of them. */
.kb-open #cmdkAskReply{max-height:calc(var(--vv-height, 60dvh) - 260px)}
.cmdk-ask-bar{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:0 2px 8px;border-bottom:1px solid var(--border-subtle);margin-bottom:10px;position:sticky;top:0;background:var(--bg-0,inherit);z-index:1}
.cmdk-ask-bar-btn{appearance:none;background:transparent;border:1px solid var(--border-subtle);color:var(--text-2);font-size:12px;padding:4px 10px;border-radius:999px;cursor:pointer;line-height:1.4}
.cmdk-ask-bar-btn:hover{color:var(--text-1);border-color:var(--text-3)}
.cmdk-ask-bar-count{color:var(--text-3);font-size:11px;letter-spacing:.3px}
.cmdk-ask-turn{display:flex;margin-bottom:10px}
.cmdk-ask-turn--q{justify-content:flex-end}
.cmdk-ask-turn--a{justify-content:flex-start}
.cmdk-ask-bubble{max-width:88%;padding:10px 12px;border-radius:14px;line-height:1.5;font-size:13px;word-break:break-word;white-space:pre-wrap}
.cmdk-ask-bubble--q{background:var(--accent);color:var(--text-on-inverse);border-bottom-right-radius:4px;font-weight:500}
.cmdk-ask-bubble--a{background:var(--bg-1);color:var(--text-1);border:1px solid var(--border-subtle);border-bottom-left-radius:4px;padding:12px 14px;display:flex;flex-direction:column;gap:6px}
.cmdk-ask-bubble--a .cmdk-ask-rejected{margin-top:4px}

/* Source badge + bulk-destructive warning inside the pending-ops preview */
.pending-source-badge{
  display:inline-block;margin-left:8px;padding:2px 8px;font-size:10px;font-weight:600;letter-spacing:.04em;text-transform:uppercase;
  background:var(--accent-bg);color:var(--accent);border-radius:999px;vertical-align:middle;
}
.pending-mass-warn{
  margin:0 0 10px;padding:10px 12px;font-size:12px;line-height:1.5;color:var(--text-1);
  background:rgba(241,196,15,.08);border:1px solid rgba(241,196,15,.35);border-radius:8px;
}

/* ══════════════════════════════════════════════════════════════════════════ */
/* GENERATIVE AI — Settings subsection                                        */
/* ══════════════════════════════════════════════════════════════════════════ */
.gen-settings{display:flex;flex-direction:column;gap:10px;width:100%}
.gen-settings-lead{font-size:11px;color:var(--text-3);line-height:1.55;margin:2px 0 0}
.gen-settings-lead strong{color:var(--text-2)}
.gen-settings-lead em{font-style:italic;color:var(--text-2)}
.gen-settings-lead code,.gen-settings-lead kbd{font-family:var(--font-mono);font-size:10.5px;background:var(--bg-2);border:1px solid var(--border);padding:1px 5px;border-radius:3px;color:var(--text-2)}
.gen-settings-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.gen-settings-lbl{font-size:12px;color:var(--text-2);min-width:80px}
.gen-settings select,.gen-settings input[type=number]{
  flex:1;min-width:140px;padding:6px 10px;background:var(--bg-2);border:1px solid var(--border);border-radius:5px;
  color:var(--text-1);font-family:inherit;font-size:12px;
}
.gen-settings select:disabled,.gen-settings input:disabled{opacity:.5;cursor:not-allowed}
.gen-settings-note{font-size:11px;color:var(--text-3);line-height:1.4}
.gen-settings-warn{font-size:11px;color:var(--warning,#e67e22);line-height:1.4;padding:6px 10px;background:rgba(230,126,34,.08);border:1px solid rgba(230,126,34,.3);border-radius:5px}
.gen-settings-status{font-size:11px;color:var(--text-3);font-variant-numeric:tabular-nums}
.gen-settings-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:2px}
.gen-settings-actions--secondary{margin-top:6px}
.gen-settings-hint{font-size:11px;color:var(--text-4);line-height:1.5;margin:6px 0 0}

/* Ask promo chip (discoverability outside Cmd+K) */
.ask-promo-chip{
  margin:0;display:inline-flex;align-items:center;gap:6px;padding:5px 10px;
  background:var(--bg-2);border:1px solid var(--border);color:var(--text-3);
  border-radius:999px;font-size:11px;font-family:inherit;cursor:pointer;
}
.ask-promo-chip .ask-promo-ic{display:inline-flex;align-items:center;flex-shrink:0}
.ask-promo-chip:hover{color:var(--accent);border-color:var(--accent)}
.ask-promo-chip kbd{
  font-family:var(--font-mono);font-size:10px;background:var(--bg-1);border:1px solid var(--border);
  padding:1px 5px;border-radius:3px;color:var(--text-2);
}
.ask-promo-label--touch{display:none}
@media (max-width:640px),(pointer:coarse){
  .ask-promo-label--kbd{display:none}
  .ask-promo-label--touch{display:inline}
}

.gen-settings-row--apply-mode{align-items:center}
.gen-apply-mode-seg{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden}
.gen-apply-mode-btn{
  padding:6px 12px;font-size:12px;font-family:inherit;background:var(--bg-2);color:var(--text-2);
  border:none;border-right:1px solid var(--border);cursor:pointer;
}
.gen-apply-mode-btn:last-child{border-right:none}
.gen-apply-mode-btn--active{background:var(--accent);color:var(--text-on-inverse)}
.gen-apply-mode-btn:disabled{opacity:.5;cursor:not-allowed}
.gen-settings-hint--tight{margin-top:4px}

.cmdk-apply-mode{display:inline-flex;border:1px solid var(--border);border-radius:8px;overflow:hidden;flex-shrink:0}
.cmdk-apply-mode-btn{
  padding:5px 10px;font-size:11px;font-family:inherit;background:var(--bg-2);color:var(--text-3);
  border:none;border-right:1px solid var(--border);cursor:pointer;
}
.cmdk-apply-mode-btn:last-child{border-right:none}
.cmdk-apply-mode-btn--active{background:color-mix(in srgb,var(--accent) 18%,var(--bg-2));color:var(--accent);font-weight:600}

.cmdk-ask-starters{display:flex;flex-wrap:wrap;gap:6px;padding:8px 12px 0}
.cmdk-ask-starter-chip{
  padding:5px 10px;font-size:11px;font-family:inherit;border-radius:999px;
  border:1px solid var(--border);background:var(--bg-2);color:var(--text-2);cursor:pointer;
}
.cmdk-ask-starter-chip:hover{border-color:var(--accent);color:var(--accent)}

.cmdk-ask-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.cmdk-ask-done--applied{color:var(--success,#27ae60)}

/* ============================================================
   ClickUp-style app shell — left sidebar + top bar + content,
   a promoted view-tab strip, and a mobile bottom navigation.
   Layout only; all colour comes from the :root brand tokens.
   ============================================================ */
.container{max-width:1320px;margin-inline:auto}
.app-shell{
  display:grid;
  grid-template-columns:var(--sidebar-w,248px) minmax(0,1fr);
  grid-template-rows:auto 1fr;
  grid-template-areas:"sidebar topbar" "sidebar content";
  column-gap:24px;align-items:start;
}
.app-shell.sidebar-collapsed{--sidebar-w:64px}

.app-sidebar{
  grid-area:sidebar;position:sticky;top:0;align-self:start;
  height:100dvh;display:flex;flex-direction:column;gap:14px;
  padding:16px 12px;
  background:linear-gradient(180deg,var(--bg-1),var(--bg-0) 78%);
  /* Faded divider instead of a hard full-height line so the sidebar edge
     doesn't read as a box wall. The gradient border fades out top & bottom. */
  border-right:1px solid var(--border-subtle);
  border-image:var(--divider-fade) 1;
  /* No `scrollbar-width:thin` here: setting the standard property makes Chromium
     ignore the global `*::-webkit-scrollbar` theming (lines ~36-39) and fall back
     to the native OS scrollbar, which doesn't match the rest of the app. Leaving
     it unset lets the sidebar inherit the same themed 8px webkit scrollbar. */
  overflow-y:auto;overflow-x:hidden;
}
.sidebar-brand{display:flex;align-items:center;gap:10px;padding:2px 6px}
.sidebar-brand-title{display:flex;align-items:center;gap:10px;margin:0;font-size:var(--fs-20);font-weight:800;letter-spacing:-.02em;color:var(--text-1);white-space:nowrap}
.sidebar-brand-title .header-logo{flex:0 0 auto}
.sidebar-brand-name{background:var(--brand-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.sidebar-collapse{margin-left:auto;width:28px;height:28px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--border);color:var(--text-3);cursor:pointer;font-size:14px;line-height:1;transition:background .15s,color .15s,border-color .15s}
.sidebar-collapse:hover{background:var(--bg-2);color:var(--text-1);border-color:var(--border-strong)}

.app-sidebar .nav-tabs{display:flex;flex-direction:column;gap:2px;width:100%;margin:0;background:transparent;border:0;border-radius:0;padding:0;box-shadow:none}
.app-sidebar .nav-tab{flex:0 0 auto;flex-direction:row;justify-content:flex-start;gap:12px;width:100%;padding:10px 12px;border-radius:12px;text-align:left;font-size:var(--fs-14);color:var(--text-2)}
/* Keep all four corners equally rounded — the active card carries a border, so
   pin the radius explicitly so it can never read as a hard right angle. */
.app-sidebar .nav-tab.active{border-radius:12px}
.app-sidebar .nav-tab .nav-tab-icon{font-size:16px;width:22px;text-align:center;flex:0 0 auto}
.app-sidebar .nav-tab:hover{background:var(--bg-2);color:var(--text-1)}
.app-sidebar .nav-tab.active{background:var(--brand-grad-soft);color:var(--text-1);border:1px solid var(--accent-border)}
.app-sidebar .nav-tab.active .nav-tab-icon{color:var(--accent)}

.sidebar-lists{display:flex;flex-direction:column;gap:6px;border-top:1px solid var(--border-subtle);padding-top:12px;margin-top:2px}
.sidebar-sec-lbl{font-size:var(--fs-12);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);padding:2px 6px;margin-top:4px}
.app-sidebar .lists-bar,
.app-sidebar .smart-views{display:flex;flex-direction:column;gap:2px;width:100%;align-items:stretch;background:transparent;border:0;padding:0;margin:0;overflow:visible;-webkit-mask-image:none;mask-image:none;flex-wrap:nowrap}
/* Lists & Views read like the nav items above them: full-width rows, left-aligned
   label, transparent until hover/active, count parked on the right edge. This
   replaces the stack of heavy centered pills. */
.app-sidebar .sv-chip,
.app-sidebar .list-chip{width:100%;justify-content:flex-start;gap:10px;min-height:36px;padding:8px 12px;border-radius:10px;border:1px solid transparent;background:transparent;color:var(--text-2);font-size:var(--fs-14);font-weight:500;text-align:left}
.app-sidebar .sv-chip:hover,
.app-sidebar .list-chip:hover{background:var(--bg-2);color:var(--text-1);border-color:transparent}
.app-sidebar .list-chip.active,
.app-sidebar .sv-chip.active{background:var(--brand-grad-soft);color:var(--text-1);border:1px solid var(--accent-border);font-weight:600}
.app-sidebar .list-chip .lc-count,
.app-sidebar .sv-chip .sv-count{margin-left:auto}
.app-sidebar .sv-chip.active .sv-count{background:var(--accent);color:var(--text-on-accent)}
/* + List / Focus controls become full-width rows so the column reads as one unit
   rather than two stray centered buttons. */
.app-sidebar .list-add{width:100%;justify-content:flex-start;text-align:left;padding:8px 12px;min-height:36px;border-radius:10px;font-size:var(--fs-13);margin-top:2px}
.app-sidebar .list-focus-toggle{width:100%;justify-content:flex-start;text-align:left;padding:8px 12px;min-height:36px;border-radius:10px;margin-left:0;margin-top:4px}

.app-shell.sidebar-collapsed .sidebar-brand-name,
.app-shell.sidebar-collapsed .app-sidebar .nav-tab span:not(.nav-tab-icon),
.app-shell.sidebar-collapsed .sidebar-lists,
.app-shell.sidebar-collapsed .sidebar-sec-lbl{display:none}
.app-shell.sidebar-collapsed .app-sidebar .nav-tab{justify-content:center;padding:10px 0}
.app-shell.sidebar-collapsed .sidebar-brand{justify-content:center}
.app-shell.sidebar-collapsed .sidebar-collapse{transform:rotate(180deg)}

.app-topbar{grid-area:topbar;display:flex;align-items:center;gap:12px;padding:14px 0 12px;margin-bottom:8px;border-bottom:1px solid var(--border-subtle);border-image:var(--divider-fade-h) 1;position:sticky;top:0;z-index:var(--z-sticky);background:linear-gradient(180deg,var(--bg-0) 72%,transparent)}
.app-topbar .header-mid{flex-direction:row;align-items:center;gap:12px;margin:0;margin-right:auto}
.app-topbar .header-utils{margin-left:auto}
.drawer-toggle{display:none;width:40px;height:40px;border-radius:10px;background:var(--bg-2);border:1px solid var(--border);color:var(--text-1);font-size:18px;cursor:pointer;align-items:center;justify-content:center}

.app-content{grid-area:content;min-width:0;padding-top:4px}

.view-tabs{display:flex;gap:4px;margin:0 0 14px;padding:4px;background:var(--bg-1);border:1px solid var(--border-subtle);border-radius:var(--r-md);width:fit-content;max-width:100%;overflow-x:auto;scrollbar-width:none}
.view-tabs::-webkit-scrollbar{display:none}
.view-tab-btn{display:inline-flex;align-items:center;gap:7px;padding:8px 16px;border-radius:8px;border:0;background:transparent;color:var(--text-3);font-family:inherit;font-size:var(--fs-13);font-weight:600;cursor:pointer;white-space:nowrap;transition:background .15s,color .15s}
.view-tab-btn .mv-ic{display:inline-flex;width:15px;height:15px}
.view-tab-btn:hover{color:var(--text-1);background:var(--bg-2)}
.view-tab-btn.active{background:var(--brand-grad);color:var(--text-on-brand);box-shadow:0 2px 8px rgba(26,140,255,.30)}

.bottom-nav{display:none}
.sidebar-backdrop{display:none}

@media (max-width:640px){
  .app-shell{display:block}
  .app-topbar{padding:10px 0;gap:8px;margin-bottom:6px}
  .drawer-toggle{display:inline-flex}
  .app-sidebar{position:fixed;left:0;top:0;bottom:0;z-index:900;width:82vw;max-width:320px;height:100dvh;transform:translateX(-100%);transition:transform .26s var(--ease-out);box-shadow:var(--shadow-overlay)}
  .app-sidebar.drawer-open{transform:translateX(0)}
  .sidebar-collapse{display:none}
  .app-shell.sidebar-collapsed{--sidebar-w:248px}
  .sidebar-backdrop{display:block;position:fixed;inset:0;z-index:899;background:rgba(0,0,0,.5)}
  body.drawer-open{overflow:hidden}

  .bottom-nav{display:flex;align-items:stretch;justify-content:space-around;position:fixed;left:0;right:0;bottom:0;z-index:var(--z-fab);height:calc(58px + env(safe-area-inset-bottom,0px));padding:0 6px env(safe-area-inset-bottom,0px);background:color-mix(in srgb,var(--bg-1) 94%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-top:1px solid var(--border)}
  .bn-btn{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;background:transparent;border:0;color:var(--text-3);font-family:inherit;font-size:10px;font-weight:600;cursor:pointer;min-height:44px}
  .bn-btn .bn-ic{font-size:18px;line-height:1}
  .bottom-nav .nav-tab.active{background:transparent;border:0;color:var(--accent)}
  .bn-spacer{flex:0 0 64px}
  html.kb-open .bottom-nav{transform:translateY(120%)}

  .quick-add-fab{left:50%;right:auto;transform:translateX(-50%);bottom:calc(18px + env(safe-area-inset-bottom,0px));width:60px;height:60px;z-index:calc(var(--z-fab) + 1)}
  .quick-add-fab:hover,.quick-add-fab:focus-visible{transform:translateX(-50%) translateY(-2px)}
  .quick-add-fab.scroll-hidden{transform:translateX(-50%) translateY(160%);opacity:0}
  body:has(.mini-timer.visible) .quick-add-fab{bottom:calc(18px + env(safe-area-inset-bottom,0px))}

  body{padding-bottom:calc(76px + env(safe-area-inset-bottom,0px))!important}
  .mini-timer{bottom:calc(76px + env(safe-area-inset-bottom,0px))!important}
  .export-toast{bottom:calc(76px + env(safe-area-inset-bottom,0px))!important}
  body:has(.mini-timer.visible) .export-toast{bottom:calc(134px + env(safe-area-inset-bottom,0px))!important}

  /* Drawer correctness — the PASS-2 mobile block restyles .nav-tabs / .nav-tab /
     .smart-views / .lists-bar for the OLD horizontal header bar. Lock the
     sidebar copies to the vertical drawer layout so those rules can't hijack
     them (defensive — these win on specificity too). */
  .app-sidebar .nav-tabs{margin:0!important;gap:2px!important;padding:0!important}
  .app-sidebar .nav-tab{flex-direction:row!important;font-size:var(--fs-14)!important;padding:10px 12px!important;min-height:44px}
  .app-sidebar .nav-tab .nav-tab-icon{margin-bottom:0!important}
  .app-sidebar .smart-views,
  .app-sidebar .lists-bar{flex-direction:column!important;overflow:visible!important;padding:0!important;-webkit-mask-image:none!important;mask-image:none!important}
  .app-sidebar .sv-chip,
  .app-sidebar .list-chip{width:100%!important;scroll-snap-align:none}

  /* View-tab strip spans the content width on phones for easier tapping. */
  .view-tabs{width:100%}
  .view-tab-btn{flex:1;justify-content:center}

  /* Top bar must fit one phone row: drawer toggle + date + utilities. Drop the
     What-next pill (still reachable from the ⌘K menu) and trim Cmd-K to an icon
     so the utility cluster doesn't overflow. */
  .app-topbar{gap:6px}
  .app-topbar .header-mid{min-width:0}
  .app-topbar .what-next-pill{display:none}
  #cmdKBtn.header-icon-btn--cmdk{min-width:44px!important;padding:0!important}
  #cmdKBtn .cmdk-btn-txt,#cmdKBtn .cmdk-btn-kbd{display:none}
}
