  :root{
    color-scheme:light;
    --ink:#1c1b1a;
    --ink2:#4a4640;
    --paper:#f6f3ee;
    --card:#ffffff;
    --line:#e4dfd8;
    --muted:#8c8478;
    --urgent:#c1442e;
    --important:#c7871f;
    --quick:#2c7a6e;
    --accent:#2c4a52;
    --shared:#7a4f86;
    --shared-bg:#7a4f8618;
    --stale1:#e8b04b;
    --stale2:#c1442e;
    --radius:12px;
    --shadow:0 1px 2px rgba(0,0,0,.05);
  }
  /* Dark palette. Defined twice on purpose: once for "follow the phone",
     once for an explicit choice, so the switcher wins in both directions. */
  @media (prefers-color-scheme: dark){
    :root:not([data-theme="light"]){
      color-scheme:dark;
      --ink:#f1ede6;
      --ink2:#cfc9bf;
      --paper:#17171a;
      --card:#222226;
      --line:#34343a;
      --muted:#9a948a;
      --important:#d99a2f;
      --quick:#3a9a8b;
      --accent:#6fa3ad;
      --shared:#b58bc0;
      --shared-bg:#b58bc022;
      --shadow:0 1px 2px rgba(0,0,0,.4);
    }
  }
  :root[data-theme="dark"]{
    color-scheme:dark;
      --ink:#f1ede6;
      --ink2:#cfc9bf;
      --paper:#17171a;
      --card:#222226;
      --line:#34343a;
      --muted:#9a948a;
      --important:#d99a2f;
      --quick:#3a9a8b;
      --accent:#6fa3ad;
      --shared:#b58bc0;
      --shared-bg:#b58bc022;
      --shadow:0 1px 2px rgba(0,0,0,.4);
  }
  *{box-sizing:border-box;}
  html,body{height:100%;overscroll-behavior:none;}
  .btn,.chip,.navbtn,.tbtn,.inboxchip,.check,.closex,.morebtn,.wakebtn,.sun,.link{touch-action:manipulation;}
  .btn,.chip,.navbtn,.tbtn,.inboxchip,.check,.closex,.morebtn,.wakebtn,.sun,.link,.now,.task,svg{-webkit-touch-callout:none;}   /* no native long-press menu on controls and icons */
  body:has(.overlay.show){overflow:hidden;}   /* a sheet is up: dragging the dark background must not scroll the page */
  body{
    margin:0;
    font-family:'Segoe UI',system-ui,-apple-system,sans-serif;
    background:var(--paper);
    color:var(--ink);
    -webkit-font-smoothing:antialiased;
    font-size:15px;
  }
  button{font-family:inherit;}
  .app{
    max-width:480px;
    margin:0 auto;
    min-height:100vh;
    display:flex;
    flex-direction:column;
    background:var(--paper);
    position:relative;
  }

  /* ---------- Top bar ---------- */
  /* No app-name bar: the circle floats top right over the greeting (spec: "Home top: two rows too many"). */
  .topbar{position:fixed;top:calc(10px + env(safe-area-inset-top));right:12px;z-index:5;display:flex;align-items:center;}
  @media (max-width:400px){.iconbtn .nm{display:none;} .iconbtn{padding:4px;}}
  .brand small{font-weight:500;color:var(--muted);font-size:11px;margin-left:6px;}
  @media (max-width:400px){.brand small{display:none;}}
  .seg{
    display:inline-flex;background:var(--line);padding:2px;border-radius:9px;gap:2px;
  }
  .seg button{
    border:none;background:transparent;color:var(--muted);
    font-size:12px;font-weight:700;padding:9px 10px;border-radius:7px;cursor:pointer;min-height:36px;
  }
  .seg button.on{background:var(--card);color:var(--ink);box-shadow:var(--shadow);}
  .seg.listsort{margin:0;}
  .seg.listsort button{padding:5px 10px;font-size:12px;text-transform:none;letter-spacing:0;}
  .seg.users button{padding:5px 8px;}
  .iconbtn{
    display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:var(--card);
    color:var(--ink2);border-radius:999px;padding:4px;min-height:40px;font-size:12.5px;font-weight:700;cursor:pointer;
  }
  .iconbtn.gear{padding:4px 9px;font-size:16px;line-height:1;}
  .settings-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 0;border-bottom:1px solid var(--line);}
  .settings-row:last-of-type{border-bottom:none;}
  .settings-row .lbl{font-size:14px;font-weight:600;}
  .settings-row .lbl small{display:block;font-weight:500;color:var(--muted);font-size:12px;margin-top:2px;}
  .avatar{
    display:inline-flex;align-items:center;justify-content:center;
    width:20px;height:20px;border-radius:50%;
    font-size:11px;font-weight:800;color:#fff;line-height:1;padding-bottom:1px;   /* the letter sits optically centred */
  }
  .avatar.u-alex{background:#2c7a6e;}
  .avatar.u-sam{background:#b8791a;}

  .headline{padding:16px 60px 0 16px;}   /* room for the floating circle */
  .headline h1{margin:0;font-size:24px;font-weight:800;letter-spacing:-.02em;}
  .headline .sub{font-size:13px;color:var(--muted);margin-top:2px;}

  .scoperow{
    margin:12px 16px 0;
    display:flex;gap:4px;background:var(--line);padding:3px;border-radius:10px;
  }
  .scopebtn{
    flex:1;padding:10px 4px;min-height:36px;border:none;border-radius:8px;background:transparent;
    font-size:12.5px;font-weight:700;color:var(--muted);cursor:pointer;
  }
  .scopebtn.on{background:var(--card);color:var(--ink);box-shadow:var(--shadow);}

  .searchrow{margin:10px 16px 0;position:relative;}
  .searchrow .clearx{position:absolute;right:6px;top:50%;transform:translateY(-50%);width:36px;height:36px;border:none;background:none;color:var(--muted);font-size:16px;cursor:pointer;border-radius:50%;}
  .searchrow input{padding-right:40px;}
  .searchrow input{
    width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:10px;
    font-size:14px;background:var(--card);color:var(--ink);font-family:inherit;
  }
  .searchrow input:focus{outline:2px solid var(--accent);outline-offset:1px;}

  .filters{
    display:flex;gap:6px;padding:10px 16px 4px;overflow-x:auto;scrollbar-width:none;
  }
  .filters::-webkit-scrollbar{display:none;}
  .chip{min-height:40px;
    flex:0 0 auto;padding:6px 11px;border-radius:999px;border:1px solid var(--line);
    background:var(--card);font-size:12px;color:var(--muted);cursor:pointer;
    white-space:nowrap;user-select:none;font-weight:600;
  }
  .chip.on{background:var(--ink);color:var(--paper);border-color:var(--ink);}
  .chip.urgent.on{background:var(--urgent);border-color:var(--urgent);color:#fff;}
  .chip.important.on{background:var(--important);border-color:var(--important);color:#fff;}
  .chip.quick.on{background:var(--quick);border-color:var(--quick);color:#fff;}
  .chip.nudged.on{background:var(--shared);border-color:var(--shared);color:#fff;}
  .chip.sep{border:none;background:none;padding:0 2px;color:var(--line);}

  main{flex:1;padding:8px 16px 110px;}

  .section-label{
    font-size:11px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);
    margin:18px 0 8px;font-weight:700;display:flex;align-items:center;justify-content:space-between;
  }
  .section-label:first-child{margin-top:8px;}
  .section-label .hint{text-transform:none;letter-spacing:0;font-weight:500;}

  /* ---------- Task row ---------- */
  .task{
    background:var(--card);
    border:1px solid var(--line);
    border-radius:var(--radius);
    padding:11px 12px 11px 10px;
    margin-bottom:8px;
    display:flex;gap:10px;align-items:flex-start;
    position:relative;overflow:hidden;
    transition:opacity .3s ease, transform .3s ease;
    box-shadow:var(--shadow);
  }
  .task.shared{background:linear-gradient(90deg,var(--shared-bg) 0,transparent 42px),var(--card);}
  .task.completing{opacity:0;transform:translateX(24px) scale(.98);}
  .task,.now{transition:opacity .3s, transform .3s;}
  .task.clearing,.now.clearing{opacity:0;transform:translateX(-32px) scale(.97);}
  .busy{pointer-events:none;}
  /* something came back (undo, bring back, wake): a ring of amber that fades, so the eye finds it */
  .arrived{animation:arrive 1.6s ease-out;}
  @keyframes arrive{0%{box-shadow:0 0 0 3px rgba(232,176,75,.95);}100%{box-shadow:0 0 0 3px rgba(232,176,75,0);}}
  /* picked from the radar: it lifts toward the deck */
  .soonrow{transition:opacity .35s ease, transform .4s cubic-bezier(.2,.7,.2,1), background .3s;}
  .soonrow.lifting{opacity:0;transform:translateY(-46px) scale(1.02);background:rgba(232,176,75,.25);}
  /* not today: it sinks and goes quiet */
  .now.sinking,.task.sinking{opacity:0;transform:translateY(28px) scale(.97);transition:opacity .4s ease, transform .45s ease-in;}
  /* done in the deck: the card folds sideways and the next one slides into its place */
  .deck .now.completing{flex:0 0 0 !important;width:0;padding-left:0;padding-right:0;margin-right:0;border-width:0;opacity:0;transform:none;transition:flex-basis .5s cubic-bezier(.2,.7,.2,1), padding .5s, opacity .3s .1s, border-width .5s;}
  .now.completing{opacity:0;transform:translateY(-34px) scale(.95);transition:opacity .45s ease, transform .55s cubic-bezier(.2,.7,.2,1);}
  @keyframes pop{0%{transform:scale(1)}45%{transform:scale(1.22)}100%{transform:scale(1)}}
  @keyframes popbtn{0%{transform:scale(1)}35%{transform:scale(1.14)}70%{transform:scale(.97)}100%{transform:scale(1)}}
  @keyframes halo{0%{box-shadow:0 0 0 0 rgba(44,122,110,.55)}100%{box-shadow:0 0 0 22px rgba(44,122,110,0)}}
  .check.on{animation:pop .4s ease;}
  .now .btn.primary.won{animation:popbtn .45s cubic-bezier(.2,.8,.3,1.2), halo .6s ease-out;background:var(--quick);border-radius:12px;}
  .task .check.on{animation:pop .4s ease, halo .5s ease-out;border-radius:50%;}
  .task.done{opacity:.55;}
  .task.done .title{text-decoration:line-through;color:var(--muted);}
  .task.cancelled .title{text-decoration:line-through;color:var(--muted);}
  .task.full.age-1{border-left:4px solid var(--stale1);}
  .task.full.age-2{border-left:4px solid var(--stale2);}

  .stripes{
    position:absolute;left:0;top:0;bottom:0;width:5px;display:flex;flex-direction:column;
  }
  .stripes span{flex:1;}
  .stripes .u{background:var(--urgent);}
  .stripes .i{background:var(--important);}
  .stripes .q{background:var(--quick);}

  .check{
    width:22px;height:22px;border-radius:50%;border:2px solid var(--line);
    flex:0 0 auto;margin-top:1px;cursor:pointer;
    display:flex;align-items:center;justify-content:center;background:var(--card);
    transition:background .15s, border-color .15s, transform .15s;
  }
  .check:active{transform:scale(.9);}
  .task.done .check,.check.on{background:var(--accent);border-color:var(--accent);}
  .check svg{width:12px;height:12px;display:none;}
  .task.done .check svg,.check.on svg{display:block;}

  .task-body{flex:1;min-width:0;}
  .title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:6px;}
  .title{font-size:15px;font-weight:600;line-height:1.3;word-break:break-word;cursor:pointer;}
  .check,.morebtn,.wakebtn,.closex{position:relative;}
  .check::before,.morebtn::before,.wakebtn::before,.closex::before{content:'';position:absolute;inset:-10px -12px;}   /* the tap area, not the drawing */
  .morebtn{
    background:none;border:none;color:var(--muted);font-size:18px;cursor:pointer;
    padding:0 2px;line-height:1;flex:0 0 auto;margin-top:-2px;
  }
  .meta{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:5px;font-size:11.5px;color:var(--muted);}
  .meta .sharedicon{color:var(--shared);font-weight:700;}
  .meta .avatar{width:18px;height:18px;font-size:10px;}
  .due{font-weight:600;}
  .due.today{color:var(--urgent);}
  .due.overdue{color:var(--urgent);}
  .postponed-flag{color:var(--urgent);font-weight:700;}

  .tagrow{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px;}
  .tag{
    padding:3px 8px;border-radius:999px;font-size:11px;font-weight:700;white-space:nowrap;color:#fff;
  }
  .tag.urgent{background:var(--urgent);}
  .tag.important{background:var(--important);}
  .tag.quick{background:var(--quick);}
  .tag.system{background:#5a6b76;}
  .tag.team{background:var(--shared);}
  .tag.more{background:var(--line);color:var(--muted);}
  .tag.onit{background:var(--accent);}
  .meta .onit{color:var(--accent);font-weight:700;}
  .now.onit{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent), 0 4px 18px rgba(0,0,0,.06);}
  .now.leaf{border-style:dashed;background:transparent;}
  .now.picked{border-color:var(--stale1);}
  .game{--tint:44,122,110;margin:4px -16px 0;padding:14px 16px 10px;background:linear-gradient(180deg, rgba(var(--tint),.16) 0, rgba(var(--tint),.04) 180px, transparent 100%);border-top:1px solid rgba(var(--tint),.25);}
  .game.fivemin,.game.easy{--tint:44,122,110;}     /* ⚡ teal: small things */
  .game.tidygame{--tint:232,176,75;}              /* 🍂 amber: old things */
  .game.liked{--tint:214,69,80;}                  /* ❤️ rose */
  .game.rolled{--tint:44,74,82;}                  /* 🎲 the app's own accent: the app chose */
  .game .ghead{position:relative;padding-right:40px;}
  .game .ghead h2{margin:0;font-size:22px;letter-spacing:-.01em;}
  .game .ghead .gclose{position:absolute;right:0;top:-6px;}
  .game .ghead .fsub span{display:inline-block;}   /* a sub line breaks at a sentence, never inside one */
  .game .ghead .fsub{margin:2px 0 12px;color:var(--ink2);font-size:14px;line-height:1.4;}
  /* The row under a game (Roll again, Another one, Three others) sits in one place: pinned just above the
     bottom bar, whatever the card's height. Sticky moved it with short cards, so the second tap missed. */
  .game .frow{display:flex;gap:8px;justify-content:center;position:fixed;left:50%;transform:translateX(-50%);width:100%;max-width:480px;bottom:var(--navh, 64px);background:linear-gradient(180deg, transparent 0, var(--paper) 40%);padding:14px 16px 44px;margin:0;z-index:9;}   /* --navh is the bar's measured height, set by renderNav; a fade, not a line, keeps it one screen */
  .game .frow:empty{display:none;}
  /* the redeal is a chip in the game's own colour: a pill that presses in, not a form button */
  .game .frow .btn{flex:1;max-width:260px;min-height:52px;font-size:16px;background:rgb(var(--tint));border-color:rgb(var(--tint));color:#fff;border-radius:999px;font-weight:700;box-shadow:0 4px 14px rgba(var(--tint),.35);transition:transform .15s, box-shadow .15s;}
  .game .frow .btn:active{transform:scale(.95);box-shadow:0 2px 6px rgba(var(--tint),.35);}
  .game .frow .btn.popped{animation:dealpop .35s cubic-bezier(.2,.8,.3,1.2);}   /* the new hand lands: the pill bounces once */
  @keyframes dealpop{0%{transform:scale(.9)}60%{transform:scale(1.06)}100%{transform:scale(1)}}
  @media (prefers-reduced-motion: reduce){ .game .frow .btn{transition:none;animation:none;} }
  .game{padding-bottom:112px;}   /* room under the last card for the pinned row */
  .fivemin h2{margin:0;font-size:22px;letter-spacing:-.01em;}
  .fivemin .fsub{margin:2px 0 12px;color:var(--ink2);font-size:14px;}
  .fivemin .now{border-color:rgba(44,122,110,.45);}
  .fivemin .now .kicker{color:var(--quick);}
  .tidygame h2{margin:0;font-size:22px;letter-spacing:-.01em;}
  .tidygame .fsub{margin:2px 0 12px;color:var(--ink2);font-size:14px;}
  .tidygame .now{border-color:rgba(232,176,75,.5);}
  .tidygame .now .kicker{color:var(--stale1);}
  .tidygame .now .ask{font-size:13.5px;color:var(--ink2);margin:-2px 0 10px;}
  .tidygame .now .actions .btn{flex:1;padding:11px 6px;font-size:13px;white-space:nowrap;}
  .now.picked .kicker{color:var(--stale1);}
  .quiet{position:relative;background:var(--card);border:1px solid var(--line);border-radius:14px;padding:14px 14px 12px;margin:6px 0 12px;}
  .quiet .qt{font-weight:800;font-size:15px;margin-right:28px;}
  .quiet .qs{font-size:13px;color:var(--muted);margin:2px 0 10px;}
  .quiet .qa{display:flex;flex-direction:column;gap:6px;}
  .quiet .qa .btn{text-align:left;padding:10px 12px;font-size:13.5px;}
  .tadabtn{width:100%;margin:2px 0 14px;padding:16px;font-size:16px;border-radius:14px;}
  .welcome{text-align:center;padding:36px 8px 10px;}
  .welcome .big{font-size:44px;margin-bottom:10px;}
  .welcome h2{margin:0 0 6px;font-size:22px;}
  .welcome p{margin:0 auto 18px;max-width:300px;color:var(--ink2);font-size:14.5px;line-height:1.45;}
  .welcome .btn{width:100%;margin-bottom:8px;}
  .easyone .sub2{margin:8px 2px 14px;color:var(--ink2);font-size:14px;line-height:1.4;}
  .quiet .closex{position:absolute;top:6px;right:6px;}

  .now.tail{border-style:dashed;background:transparent;display:flex;flex-direction:column;justify-content:center;text-align:center;}
  .now.tail .big{font-size:18px;color:var(--ink2);margin:0 0 4px;}
  .now.tail .sub{font-size:13px;color:var(--muted);margin-bottom:14px;}
  .now.tail .actions{margin-top:0;flex-direction:column;}
  .now.tail .actions .btn{width:100%;}
  .now.tail .link{background:none;border:none;color:var(--muted);font-size:13px;margin-top:10px;text-decoration:underline;cursor:pointer;}
  .now.leaf .kicker{color:var(--stale1);}
  .now.leaf .ask{font-size:13.5px;color:var(--ink2);margin:-2px 0 10px;}
  .now.leaf .actions .btn{flex:1;padding:11px 6px;font-size:13px;white-space:nowrap;}
  .now.leaf .actions.secondary .btn{flex:1;}

  .owner-row{display:flex;align-items:center;gap:6px;margin-top:7px;flex-wrap:wrap;}
  .owner-badge{
    font-size:10.5px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;
    color:var(--shared);background:var(--shared-bg);padding:2px 7px;border-radius:5px;
  }
  .assignee-chip{
    font-size:11.5px;color:var(--accent);background:var(--line);padding:2px 8px;border-radius:999px;font-weight:600;
  }
  .assignee-chip.unassigned{color:var(--muted);}
  .nudgebtn{
    margin-left:auto;border:1px solid var(--line);background:var(--card);color:var(--muted);
    font-size:11.5px;font-weight:700;padding:4px 10px;border-radius:999px;cursor:pointer;
  }
  .nudgebtn.on{background:var(--shared);border-color:var(--shared);color:#fff;}
  .nudge-marker{
    margin-top:7px;padding:7px 9px;border-radius:8px;
    background:var(--shared-bg);color:var(--shared);font-size:12.5px;line-height:1.35;
  }
  .nudge-marker b{font-weight:800;}
  .nudge-marker .who{font-size:11px;opacity:.85;display:block;margin-top:1px;}

  /* ---------- Focus home ---------- */
  .inboxchip{
    display:inline-flex;align-items:center;gap:8px;
    margin:10px 0 2px;padding:9px 14px;border-radius:999px;
    background:var(--card);border:1px dashed var(--line);
    font-size:13px;font-weight:600;color:var(--ink2);cursor:pointer;
  }
  @media (hover: hover){ .inboxchip:hover{border-color:var(--accent);} }   /* touch has no hover: a tapped chip would stay lit */
  .now,.task,.btn,.chip,.navbtn,.tbtn,.inboxchip{-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;}
  .now{
    background:var(--card);border:1px solid var(--line);border-radius:16px;
    padding:20px 18px 18px 22px;position:relative;overflow:hidden;box-shadow:0 4px 18px rgba(0,0,0,.06);
    margin-bottom:12px;display:flex;flex-direction:column;
  }
  /* every card in the deck is as tall as the tallest, and Done sits on the same line across all of them */
  .now .actions:not(.secondary){margin-top:auto;padding-top:16px;}
  .now .actions.secondary .btn.today{flex:1.15;}
  .now .actions.secondary .btn.today.on{background:var(--stale1);border-color:var(--stale1);color:#1d1b16;}
  .now.shared{background:linear-gradient(180deg,var(--shared-bg) 0,transparent 60px),var(--card);}
  .now .stripes{width:7px;}
  .deck{display:flex;gap:10px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;margin:0 -16px;padding:4px 16px 4px;scrollbar-width:none;}
  .deck::-webkit-scrollbar{display:none;}
  .deck .now{flex:0 0 calc(100% - 26px);scroll-snap-align:start;margin-bottom:0;}
  .deck .now:last-child{margin-right:16px;}
  .dots:not(.btn){display:flex;gap:5px;justify-content:center;align-items:center;margin:8px 0 2px;min-height:8px;}
  .dots span{width:6px;height:6px;border-radius:50%;background:var(--line);transition:background .15s, transform .15s;}
  .dots span.on{background:var(--muted);transform:scale(1.25);}
  .now .pos{position:absolute;top:18px;right:16px;font-size:11px;color:var(--muted);font-weight:700;}
  .task.snoozed{opacity:.6;}
  .snooze{color:var(--muted);font-weight:600;}
  .now .kicker{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:800;}
  .now .big{font-size:22px;font-weight:800;line-height:1.25;margin:8px 0 10px;letter-spacing:-.01em;}
  .now .meta{font-size:12.5px;margin-top:0;}
  .now .actions{display:flex;gap:8px;}
  .now .actions.secondary{margin-top:8px;}
  .now .actions.secondary .btn{flex:1;padding:10px 4px;font-size:12.5px;white-space:nowrap;}
  .now .actions.secondary .btn.dots{flex:0 0 46px;}
  .btn{
    padding:12px 14px;border-radius:10px;border:none;font-size:14px;font-weight:700;cursor:pointer;
  }
  .btn.primary{background:var(--accent);color:#fff;flex:1;}
  .btn.ghost{background:transparent;color:var(--ink2);border:1px solid var(--line);}
  .btn.danger{background:transparent;color:var(--urgent);border:1px solid var(--line);}
  .btn.small{padding:10px 12px;min-height:40px;font-size:12.5px;border-radius:8px;}
  .btn:active{transform:scale(.98);}
  .btn:disabled{opacity:.4;cursor:default;}

  .capacityrow{display:flex;justify-content:center;gap:8px;margin:6px 0 2px;}
  .soon{margin-top:22px;}   /* room to breathe above the radar */
  .soon .section-label .btn{padding:6px 10px;font-size:12px;}
  .soonhead .hint{white-space:nowrap;}
  .soonrow{padding-right:10px;}
  /* up to three share the row; three is the cap (spec: The doors row) */
  .capacityrow.doors{display:flex;justify-content:flex-start;gap:8px;margin:8px 0 2px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;}
  .capacityrow.doors::-webkit-scrollbar{display:none;}
  .chip.door{flex:1 1 0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:8px 6px;min-height:52px;min-width:0;font-size:12px;white-space:nowrap;line-height:1.2;}
  .chip.door .ic{font-size:18px;line-height:1;}
  .soonrow{display:flex;align-items:center;gap:10px;padding:9px 10px 9px 12px;border:1px solid var(--line);border-radius:12px;background:var(--card);margin-bottom:6px;position:relative;overflow:hidden;}
  .soonrow .stripes{width:4px;}
  .soonrow .t{flex:1;font-size:14px;font-weight:600;line-height:1.3;cursor:pointer;min-width:0;}
  .soonrow .t .why{display:block;font-size:11.5px;font-weight:600;color:var(--muted);margin-top:1px;}
  .wakebtn{border:1px solid var(--line);background:transparent;border-radius:999px;padding:3px 9px;font-size:11.5px;font-weight:700;color:var(--ink2);cursor:pointer;margin-left:6px;}
  .soonrow .sun{border:1px solid var(--line);background:transparent;border-radius:999px;padding:10px 12px;min-height:40px;flex:0 0 auto;font-size:12px;font-weight:700;cursor:pointer;color:var(--muted);white-space:nowrap;}
  .soonrow .sun.on{background:var(--stale1);border-color:var(--stale1);color:#1d1b16;}
  .task .meta .sun{border:1px solid var(--line);background:transparent;border-radius:999px;padding:10px 12px;margin:-4px 0;font-size:11.5px;font-weight:700;cursor:pointer;color:var(--muted);white-space:nowrap;}
  .task.lifting{opacity:0;transform:translateY(-46px) scale(1.02);}
  .soon{padding-bottom:12px;}
  .soon .link{background:none;border:none;color:var(--muted);font-size:13px;text-decoration:underline;cursor:pointer;padding:6px 0;}
  .sub2.carry{margin:-6px 0 12px;color:var(--ink2);font-size:13.5px;}
  .now .unquick{display:block;background:none;border:none;color:var(--muted);font-size:12px;text-decoration:underline;cursor:pointer;padding:8px 0 0;margin:0 auto;}
  .capacityrow .chip{font-size:13px;padding:8px 14px;}
  .firststep{margin:-2px 0 6px;padding:7px 0;font-size:13.5px;color:var(--ink2);line-height:1.35;cursor:pointer;}   /* a line she taps: give the tap some height */
  .firststep b{font-weight:700;}
  .firststep.ask{background:none;border:1px dashed var(--line);border-radius:999px;padding:9px 10px;min-height:40px;font:inherit;font-size:12px;color:var(--muted);cursor:pointer;}   /* a thumb target, not a caption */
  @media (hover: hover){ .firststep.ask:hover{color:var(--accent);border-color:var(--accent);} }
  .firststep.ask.decide{border-style:solid;color:var(--ink2);}
  /* a decision's options: chips where the step would be; the first is the default */
  .options{display:flex;flex-wrap:wrap;gap:8px;margin:-2px 0 12px;}
  .opt{border:1.5px solid var(--line);background:var(--paper);color:var(--ink);border-radius:999px;padding:9px 14px;min-height:40px;font:inherit;font-size:14px;font-weight:700;cursor:pointer;touch-action:manipulation;}
  .opt.first{border-color:var(--ink2);}
  .opt.flip{border-style:dashed;color:var(--muted);font-weight:600;}
  .meta .heart{color:#d64550;}
  .chip.heartchip.on{background:rgba(214,69,80,.12);border-color:#d64550;color:var(--ink);}
  .soon.liked{padding-bottom:0;margin-bottom:4px;}
  .qcard{
    flex:0 0 150px;background:var(--card);border:1px solid var(--line);border-top:3px solid var(--quick);
    border-radius:12px;padding:10px 10px 10px;display:flex;flex-direction:column;gap:8px;min-height:84px;
    box-shadow:var(--shadow);
  }
  .qcard .t{font-size:13px;font-weight:600;line-height:1.3;flex:1;}
  .qcard .row{display:flex;align-items:center;justify-content:space-between;}
  .qcard .check{width:20px;height:20px;}

  /* ---------- Empty ---------- */
  .empty{text-align:center;padding:48px 20px;color:var(--muted);}
  .empty .big{font-size:34px;margin-bottom:8px;}
  .empty p{font-size:14px;margin:4px 0;}
  .empty .btn{margin-top:14px;}

  .showmore{
    width:100%;padding:12px;border:1px dashed var(--line);border-radius:10px;background:transparent;
    color:var(--muted);font-weight:600;font-size:13px;cursor:pointer;margin-top:4px;
  }

  /* ---------- Review ---------- */
  .review-actions{display:flex;gap:6px;margin-top:9px;}
  .review-actions .btn{flex:1;padding:7px 6px;font-size:12px;}

  /* ---------- FAB + nav ---------- */
  .navbtn.addbtn{justify-content:center;}
  .navbtn.addbtn .plus{width:44px;height:44px;border-radius:14px;background:var(--accent);display:flex;align-items:center;justify-content:center;}
  .navbtn.addbtn .plus svg{width:22px;height:22px;display:block;}   /* the + docked in the bar, no word: the symbol is the word */
  .bottomnav{
    position:fixed;bottom:0;left:50%;transform:translateX(-50%);
    width:100%;max-width:480px;
    display:flex;border-top:1px solid var(--line);background:var(--paper);z-index:10;
    padding-bottom:env(safe-area-inset-bottom);
  }
  .navbtn{
    flex:1;padding:9px 4px 10px;text-align:center;background:none;border:none;color:var(--muted);
    font-size:11px;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:3px;font-weight:600;
  }
  .navbtn.on{color:var(--accent);font-weight:800;}
  .navbtn svg{width:21px;height:21px;}

  /* ---------- Overlays ---------- */
  .overlay{
    position:fixed;inset:0;background:rgba(20,18,16,.5);display:none;
    align-items:flex-end;justify-content:center;z-index:50;
  }
  .overlay.show{display:flex;}
  .overlay.center{align-items:center;padding:16px;}
  .sheet{
    background:var(--card);width:100%;max-width:480px;border-radius:18px 18px 0 0;
    padding:16px 18px calc(24px + env(safe-area-inset-bottom));max-height:90vh;max-height:90dvh;overflow-y:auto;
    overscroll-behavior:contain;
  }
  /* when the on-screen keyboard is open, .overlay is sized from visualViewport (see JS) */
  .overlay.kb{align-items:flex-end;}
  .overlay.kb .sheet{max-height:100%;border-radius:18px 18px 0 0;}
  .overlay.center .sheet{border-radius:18px;max-width:440px;}
  .overlay.kb .sheet{max-height:100%;}
  .overlay.kb.center{align-items:flex-start;}
  .sheet-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;}
  /* The capture card: a floating card in the space the keyboard leaves. The box with its +, the list, the pile. */
  /* Anchored low like a message box: what she fired stacks above the input, so the input never moves (review 16). */
  .overlay.capcard{align-items:flex-end;padding:12px;}
  .overlay.capcard .sheet{border-radius:20px;padding-bottom:18px;}
  .capbox{display:flex;gap:8px;align-items:center;}
  .capplus{flex:0 0 46px;width:46px;height:46px;border-radius:50%;border:none;background:var(--accent);color:#fff;font-size:24px;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 3px 10px rgba(0,0,0,.12);}
  .pile{display:flex;flex-direction:column;gap:2px;margin:0 0 10px;max-height:34vh;overflow-y:auto;}
  .fired{display:flex;align-items:center;gap:8px;padding:6px 2px 6px 4px;font-size:15px;color:var(--ink2);animation:firedin .2s ease-out;}
  .fired .tick{color:var(--quick);flex:0 0 auto;}
  .fired .txt{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
  .fired .pillx{background:none;border:none;color:var(--muted);font-size:13px;cursor:pointer;padding:6px 8px;line-height:1;flex:0 0 auto;}
  @keyframes firedin{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
  @media (prefers-reduced-motion: reduce){ .fired{animation:none;} }
  .sheet h2{margin:0;font-size:18px;font-weight:800;}
  .closex{background:none;border:none;font-size:20px;color:var(--muted);cursor:pointer;padding:4px;}
  .field{margin-bottom:14px;}
  .field label{
    display:block;font-size:11px;font-weight:800;color:var(--muted);
    text-transform:uppercase;letter-spacing:.06em;margin-bottom:6px;
  }
  .field input[type=text],.field input[type=email],.field input[type=password],.field input[type=date],.field textarea{
    width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:10px;
    font-size:15px;font-family:inherit;background:var(--paper);color:var(--ink);
  }
  .field input.bigtitle,.field textarea.bigtitle{font-size:19px;font-weight:600;padding:14px 12px;}
  .field textarea.bigtitle{min-height:150px;line-height:1.35;}   /* Empty your head: one big box, a line per thing */
  @supports (-webkit-touch-callout: none){ input[type=text],input[type=email],input[type=password],input[type=date],textarea{font-size:16px !important;} }
  .field textarea{resize:vertical;min-height:56px;}
  .field input:focus,.field textarea:focus{outline:2px solid var(--accent);outline-offset:1px;}
  .row{display:flex;gap:8px;}
  .pbtn{
    flex:1;padding:11px 6px;border-radius:10px;border:1.5px solid var(--line);background:var(--paper);
    font-size:13px;font-weight:700;cursor:pointer;color:var(--muted);
  }
  .pbtn.on{background:var(--ink);border-color:var(--ink);color:var(--paper);}
  .pbtn.shared.on{background:var(--shared);border-color:var(--shared);color:#fff;}
  .pbtn.urgent.on{background:var(--urgent);border-color:var(--urgent);color:#fff;}
  .pbtn.important.on{background:var(--important);border-color:var(--important);color:#fff;}
  .pbtn.quick.on{background:var(--quick);border-color:var(--quick);color:#fff;}
  .pillgroup{display:flex;flex-wrap:wrap;gap:6px;align-items:center;}
  .pill{
    padding:6px 12px;border-radius:999px;border:1px solid var(--line);background:var(--paper);
    font-size:12.5px;cursor:pointer;color:var(--muted);font-weight:600;
  }
  .pill.on{background:#5a6b76;color:#fff;border-color:#5a6b76;}
  .pill.team.on{background:var(--shared);border-color:var(--shared);}
  .pill.assignee.on{background:var(--accent);border-color:var(--accent);color:#fff;}
  .pill.add{border-style:dashed;}
  .field .pill.add{padding:4px 10px;}
  .field .pill.add input[type=text]{border:none;background:transparent;font:inherit;font-size:12.5px;color:var(--ink);width:84px;padding:2px 0;outline:none;border-radius:0;}
  .subhead{font-size:11px;color:var(--muted);margin:8px 0 4px;font-weight:600;}
  details.more{margin-bottom:14px;}
  details.more summary{
    cursor:pointer;color:var(--accent);font-weight:700;font-size:13px;list-style:none;padding:6px 0;
  }
  details.more summary::-webkit-details-marker{display:none;}
  details.more summary::before{content:'+ ';}
  details.more[open] summary::before{content:'– ';}
  .sheet-actions{display:flex;gap:10px;margin-top:6px;position:sticky;bottom:calc(-24px - env(safe-area-inset-bottom));background:var(--card);padding:10px 0 calc(10px + env(safe-area-inset-bottom));margin-bottom:calc(-24px - env(safe-area-inset-bottom));}   /* pinned: Save never needs a scroll */
  .pbtn.heart{flex:1;display:flex;align-items:center;justify-content:center;}
  .hearticon{width:20px;height:20px;fill:none;stroke:#d64550;stroke-width:2;stroke-linejoin:round;vertical-align:-4px;transition:fill .15s, transform .15s;}
  .hearticon.on{fill:#d64550;transform:scale(1.08);}
  .chip .hearticon{width:16px;height:16px;margin-right:4px;}
  /* the overview: rows that read as facts; tapping one is the edit */
  .ovpills{margin-bottom:10px;}
  .ovpills .pbtn{flex:1 1 0;min-width:0;height:42px;padding:0 4px;font-size:12px;white-space:nowrap;display:flex;align-items:center;justify-content:center;gap:4px;line-height:1;box-sizing:border-box;overflow:hidden;}
  .ovpills .pbtn:not(.on){border-color:var(--muted);}
  .ovpills .pbtn.quick{flex-grow:1.35;}   /* a visible edge, so an unselected box reads as the same size as a filled one */
  .sun.hdr{border:1px solid var(--line);background:transparent;border-radius:999px;padding:9px 14px;min-height:40px;font-size:14px;font-weight:800;cursor:pointer;color:var(--muted);white-space:nowrap;touch-action:manipulation;}
  .sun.hdr.on{background:var(--stale1);border-color:var(--stale1);color:#1d1b16;}
  .titlerow{display:flex;align-items:center;gap:6px;margin-bottom:10px;}
  .titlerow .field{flex:1;min-width:0;margin:0;}
  .heartbtn{flex:0 0 44px;height:44px;background:none;border:none;padding:0;cursor:pointer;display:flex;align-items:center;justify-content:center;touch-action:manipulation;}
  .heartbtn .hearticon{width:26px;height:26px;}
   /* equal widths: a flex item will not shrink below its text unless told */   /* one height whatever the glyph */
  .ovpills .pbtn .em{display:inline-block;width:16px;height:16px;line-height:16px;font-size:13px;text-align:center;flex:0 0 auto;}   /* the emoji gets a fixed box, so a tall Android glyph cannot grow the pill */
  .ovpills .pbtn.heart{flex:0 0 auto;padding:0 0 0 2px;margin-left:-2px;border-color:transparent;background:none;}   /* the icon only: the flags get the width back */
  .ovpills .pbtn.heart .hearticon{width:24px;height:24px;}
  .ovpills .pbtn.heart.on{border-color:transparent;background:none;}
  .ovlist{display:flex;flex-direction:column;border-top:1px solid var(--line);}
  .ovrow{display:flex;align-items:center;gap:8px;width:100%;text-align:left;min-height:46px;padding:10px 2px;border:none;border-bottom:1px solid var(--line);background:none;color:var(--ink);font:inherit;font-size:15px;line-height:1.35;cursor:pointer;touch-action:manipulation;}
  .ovrow.quiet{color:var(--muted);}
  .ovrow b{font-weight:700;}
  .ovrow .ovhint{margin-left:auto;font-size:12px;color:var(--muted);font-weight:600;}
  .ovrow.editing{cursor:default;}
  .ovrow.editing.col{flex-direction:column;align-items:stretch;}
  .ovrow.editing .ic{flex:0 0 auto;}
  .ovrow.editing input[type=text],.ovrow.editing input[type=date],.ovrow.editing textarea{flex:1;width:100%;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:var(--paper);color:var(--ink);font:inherit;font-size:15px;}
  .ovrow.editing textarea{min-height:72px;resize:vertical;}
  .ovrow.editing .link{background:none;border:none;color:var(--muted);text-decoration:underline;font:inherit;font-size:13px;cursor:pointer;}
  .ovrow.ovnotes{white-space:normal;}
  .ovstate{font-size:12.5px;color:var(--muted);font-weight:700;margin:-6px 0 8px;}
  .ovfoot{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-top:12px;}
  .ovfoot .btn.small{flex:0 0 auto;}
  .pbtn.heart.on{background:rgba(214,69,80,.14);border-color:#d64550;}
  .sheet-actions .btn{flex:1;}
  .footnote{font-size:11px;color:var(--muted);text-align:center;padding:12px 0 0;}
  .notes{display:flex;flex-direction:column;gap:6px;margin-bottom:8px;}
  .note{font-size:13px;background:var(--paper);border-radius:8px;padding:8px 10px;}
  .note .by{font-size:11px;color:var(--muted);display:block;margin-top:2px;}
  .noterow{display:flex;gap:6px;}
  .noterow input{flex:1;}

  /* action sheet */
  .actionlist{display:flex;flex-direction:column;gap:4px;}
  .actionlist button{
    text-align:left;padding:13px 12px;border:none;background:var(--paper);border-radius:10px;
    font-size:15px;font-weight:600;color:var(--ink);cursor:pointer;display:flex;gap:10px;align-items:center;
  }
  .actionlist button.danger{color:var(--urgent);}
  .actionlist button .ic{width:22px;text-align:center;}
  .actionlist .ttl{font-size:13px;color:var(--muted);padding:4px 12px 10px;font-weight:600;}
  .actionlist .grp{display:flex;flex-direction:column;gap:4px;padding-top:8px;margin-top:6px;border-top:1px solid var(--line);}
  .actionlist .grp:first-of-type{border-top:none;margin-top:0;padding-top:0;}
  .actionlist .grpl{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:800;padding:2px 12px 4px;}
  .actionlist .grpl:empty{display:none;}

  /* triage */
  .triage-card{
    background:var(--paper);border-radius:14px;padding:22px 18px;text-align:center;margin-bottom:14px;
  }
  .triage-card .count{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.08em;font-weight:800;}
  .triage-card .tt{font-size:22px;font-weight:800;line-height:1.25;margin:10px 0 6px;}
  .triage-card .from{font-size:12.5px;color:var(--muted);}
  .triage-btns{display:flex;gap:8px;margin-bottom:10px;}
  .triage-btns .tbtn.quick{margin-left:8px;}   /* Do soon + Matters ask "how heavy"; A few minutes asks "how big": a breath between the two questions */
  .tbtn{
    flex:1;padding:18px 6px;border-radius:14px;border:2px solid var(--line);background:var(--paper);
    font-size:13px;font-weight:800;cursor:pointer;color:var(--ink2);display:flex;flex-direction:column;gap:6px;align-items:center;
  }
  .tbtn .em{font-size:24px;}
  .tbtn{min-height:64px;justify-content:center;}
  .tbtn.urgent.on{background:var(--urgent);border-color:var(--urgent);color:#fff;}
  .tbtn.important.on{background:var(--important);border-color:var(--important);color:#fff;}
  .tbtn.quick.on{background:var(--quick);border-color:var(--quick);color:#fff;}
  .verbs{display:flex;flex-wrap:wrap;gap:6px;margin:-4px 0 14px;}
  .verbs .chip{font-size:13px;padding:7px 11px;}
  .triage-secondary{display:flex;gap:8px;margin-bottom:12px;}
  .triage-secondary .btn{flex:1;padding:14px 4px;font-size:12.5px;white-space:nowrap;}
  .triage-secondary .btn.drop{border-color:var(--urgent);color:var(--urgent);font-weight:800;}
  .triage-done{text-align:center;padding:24px 10px 10px;}
  .triage-done .big{font-size:40px;}
  .triage-done h3{margin:8px 0 4px;font-size:20px;}
  .triage-done p{color:var(--muted);font-size:14px;margin:0 0 18px;}

  .updatebar{
    position:fixed;left:50%;transform:translateX(-50%);bottom:148px;z-index:70;
    background:var(--ink);color:var(--paper);border-radius:999px;padding:7px 7px 7px 16px;
    display:flex;align-items:center;gap:10px;font-size:13px;font-weight:600;white-space:nowrap;
    box-shadow:0 6px 18px rgba(0,0,0,.28);max-width:calc(100% - 32px);
  }
  .updatebar button{border:none;background:var(--accent);color:#fff;font:inherit;padding:6px 13px;border-radius:999px;cursor:pointer;flex:0 0 auto;}
  .toast{
    position:fixed;left:50%;bottom:140px;transform:translateX(-50%) translateY(10px);
    background:var(--ink);color:var(--paper);padding:10px 16px;border-radius:999px;font-size:13px;font-weight:600;
    opacity:0;transition:opacity .25s,transform .25s;z-index:60;pointer-events:none;white-space:normal;text-align:center;line-height:1.3;
    display:flex;align-items:center;gap:12px;max-width:calc(100% - 32px);border-radius:18px;
  }
  .toast.has-undo{padding-right:8px;}
  .toast.has-undo.show{pointer-events:auto;}   /* only while seen: a faded undo toast kept eating taps on the button under it */
  body:has(.game .frow:not(:empty)) .toast{bottom:calc(var(--navh, 64px) + 124px);}   /* a game's pinned row: the toast sits above the pill, not on it */
  body.has-update .toast{bottom:196px;}   /* the update bar is showing: the toast sits above it, never behind it */
  .toast .undo{border:none;background:var(--accent);color:#fff;font:inherit;font-weight:700;padding:6px 12px;border-radius:999px;cursor:pointer;}
  .toast.show{opacity:1;transform:translateX(-50%) translateY(0);}
  /* ---------- v3 additions ---------- */
  .scoperow{overflow-x:auto;scrollbar-width:none;}
  .scoperow::-webkit-scrollbar{display:none;}
  .scopebtn{flex:1 0 auto;min-width:64px;padding:7px 10px;}
  .team-dot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;vertical-align:middle;}
  .splash{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;background:var(--paper);z-index:40;color:var(--muted);font-weight:600;}
  .auth{max-width:420px;margin:12vh auto 0;padding:0 20px;}
  .auth h1{font-size:30px;font-weight:800;margin:0 0 4px;letter-spacing:-.02em;}
  .auth .lead{color:var(--muted);margin:0 0 22px;font-size:14px;}
  .auth .msg{margin-top:12px;font-size:13.5px;color:var(--ink2);background:var(--card);border:1px solid var(--line);border-radius:10px;padding:10px 12px;}
  .auth .msg.err{color:var(--urgent);}
  .grouprow{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 0;border-bottom:1px solid var(--line);}
  .grouprow:last-child{border-bottom:none;}
  .grouprow .nm{font-weight:700;font-size:14px;}
  .grouprow .nm small{display:block;font-weight:500;color:var(--muted);font-size:11.5px;margin-top:2px;}
  .grouprow .acts{display:flex;gap:6px;flex:0 0 auto;}
  .invitebox{margin-top:8px;padding:10px;border:1px dashed var(--line);border-radius:10px;font-size:12.5px;word-break:break-all;background:var(--paper);}
  .invitebox b{display:block;margin-bottom:4px;}
  .btn:disabled{opacity:.4;cursor:default;}
  .hidden{display:none!important;}
  [hidden]{display:none!important;}   /* the search filter hides rows with the hidden attribute; .task and .section-label are flex, which would win over the browser's default */
