/* Pocket Trainer — slice 1. Glass on true black. No emojis; SVG icons only. */
:root{
  color-scheme:dark;
  --bg:#000000;
  --panel:rgba(255,255,255,.055);
  --panel-strong:rgba(255,255,255,.09);
  --line:rgba(255,255,255,.13);
  --text:#ffffff;
  --dim:rgba(255,255,255,.62);
  /* pt19: --faint was .42 = 3.95:1 on black, under WCAG AA for the
     small labels it carries. .50 computes 5.28:1 — same family,
     honestly readable. */
  --faint:rgba(255,255,255,.50);
  --accent:#ff6b4a;
  --accent-text:#ff6b4a;
  /* pt19: the filled-button color. White on the brand accent itself
     computes 2.82:1; this deepened step of the same orange is 4.58:1. */
  --accent-fill:#d63f14;
  --on-accent:#ffffff;
  --accent-line:rgba(255,107,74,.45);
  --accent-line-strong:rgba(255,107,74,.55);
  --accent-tint:rgba(255,107,74,.12);
  --accent-tint-soft:rgba(255,107,74,.10);
  --accent-tint-faint:rgba(255,107,74,.08);
  --accent-tint-sel:rgba(255,107,74,.16);
  --accent-graphic:#ff6b4a;
  --sel-ink:#ffffff;
  --end-ink:#ffffff;
  --good:#3ddc84;
  --good-line:rgba(61,220,132,.40);
  --good-tint:rgba(61,220,132,.07);
  --good-glow:rgba(61,220,132,.85);
  --warn:#ffd23e;
  --warn-line:rgba(255,210,62,.45);
  --warn-tint:rgba(255,210,62,.13);
  --bad:#ff5252;
  --bad-tint:rgba(255,82,82,.18);
  --water:#38bdf8;
  --pause-line:rgba(255,196,64,.55);
  --pause-line-soft:rgba(255,196,64,.45);
  --pause-tint:rgba(255,196,64,.12);
  --pause-tint-soft:rgba(255,196,64,.07);
  --pause-ink:#ffffff;
  --hairline:rgba(255,255,255,.06);
  --hairline-strong:rgba(255,255,255,.07);
  --field-bg:rgba(255,255,255,.07);
  --cell-bg:rgba(255,255,255,.05);
  --cell-line:rgba(255,255,255,.08);
  --track:rgba(255,255,255,.10);
  --track-soft:rgba(255,255,255,.07);
  --dot-line:rgba(255,255,255,.30);
  --today-ring:rgba(255,255,255,.55);
  --hero-fill:#ffffff;
  --chrome-bg:rgba(28,28,30,.72);
  --chrome-active:rgba(255,255,255,.13);
  --toast-bg:rgba(40,40,44,.92);
  --toast-ink:#ffffff;
  --glass-line:rgba(255,255,255,.5);
  --mic-bg:rgba(255,255,255,.06);
  --card-shadow:none;
  --radius:20px;
}
/* pt19 light theme: the same clear-glass language on warm paper —
   frosted-white surfaces, warm ink, a soft shadow where dark used
   glow, and every meaning color deepened just enough to hold WCAG
   AA on the light ground. The numbers were computed, not eyeballed
   (ink 15.8:1, secondary ink 5.4:1, meaning colors 4.5:1+ as text
   and 3.4:1+ as bar fills; the theme suite recomputes them from the
   rendered page). The brand orange stays the identity: carrying
   TEXT it steps deeper (--accent-text), as a graphic against the
   ground it steps deeper (--accent-graphic), and button fills use
   --accent-fill in both themes. --accent itself is untouched, so
   selected borders and the scanner frame keep the exact brand hue. */
:root[data-theme="light"]{
  color-scheme:light;
  --bg:#f7f4ee;
  --panel:rgba(255,255,255,.66);
  --panel-strong:rgba(255,255,255,.85);
  --line:rgba(30,26,21,.14);
  --text:#1e1a15;
  --dim:rgba(30,26,21,.66);
  --faint:rgba(30,26,21,.62);
  --accent-text:#b44309;
  --accent-line:rgba(214,63,20,.50);
  --accent-line-strong:rgba(214,63,20,.60);
  --accent-tint-faint:rgba(255,107,74,.10);
  --accent-graphic:#b44309;
  --sel-ink:#b44309;
  --end-ink:#b44309;
  --good:#0d7a3f;
  --good-line:rgba(13,122,63,.45);
  --good-tint:rgba(13,122,63,.08);
  --good-glow:rgba(13,122,63,.45);
  --warn:#8f6200;
  --warn-line:rgba(143,98,0,.45);
  --warn-tint:rgba(255,196,64,.22);
  --bad:#c92a1d;
  --bad-tint:rgba(201,42,29,.12);
  --water:#0369a1;
  --pause-line:rgba(146,100,4,.55);
  --pause-line-soft:rgba(146,100,4,.45);
  --pause-tint:rgba(255,196,64,.20);
  --pause-tint-soft:rgba(255,196,64,.12);
  --pause-ink:#6d4c00;
  --hairline:rgba(30,26,21,.09);
  --hairline-strong:rgba(30,26,21,.11);
  --field-bg:rgba(255,255,255,.75);
  --cell-bg:rgba(255,255,255,.55);
  --cell-line:rgba(30,26,21,.10);
  --track:rgba(30,26,21,.13);
  --track-soft:rgba(30,26,21,.09);
  --dot-line:rgba(30,26,21,.35);
  --today-ring:rgba(30,26,21,.45);
  --hero-fill:#1e1a15;
  --chrome-bg:rgba(255,255,255,.82);
  --chrome-active:rgba(30,26,21,.08);
  --toast-bg:rgba(30,26,21,.93);
  --glass-line:rgba(30,26,21,.35);
  --mic-bg:rgba(255,255,255,.65);
  --card-shadow:0 1px 2px rgba(30,26,21,.05),0 10px 30px rgba(30,26,21,.06);
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{
  background:var(--bg);color:var(--text);
  font-family:-apple-system,BlinkMacSystemFont,"SF Pro Text","Segoe UI",Roboto,sans-serif;
  font-size:1rem;line-height:1.45;
  padding-bottom:env(safe-area-inset-bottom);
}
.app{max-width:560px;margin:0 auto;padding:0 14px 110px}

/* ---------- top bar ---------- */
.topbar{
  display:flex;align-items:center;justify-content:space-between;
  /* Item 73: the app draws under the iPhone status bar (viewport-fit=cover
     + black-translucent), so the header must clear the safe-area inset or
     the title and goal chip render inside the phone chrome. */
  padding:calc(16px + env(safe-area-inset-top, 0px)) 2px 12px;
  position:sticky;top:0;z-index:5;
  background:linear-gradient(var(--bg) 78%,transparent);
}
.brand{display:flex;align-items:center;gap:11px}
.brand-mark{
  width:42px;height:42px;border-radius:13px;display:grid;place-items:center;
  background:var(--panel-strong);border:1px solid var(--line);color:var(--accent-text);
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
}
.brand-mark svg{width:24px;height:24px}
.brand-name{font-size:1.22rem;font-weight:700;letter-spacing:.2px}
.brand-sub{font-size:.82rem;color:var(--dim)}
.mode-pill{
  font-size:.78rem;font-weight:600;letter-spacing:.4px;text-transform:uppercase;
  color:var(--accent-text);border:1px solid var(--accent-line);
  background:var(--accent-tint-soft);padding:6px 12px;border-radius:999px;
}

/* ---------- cards ---------- */
.card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px;margin:12px 0;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);box-shadow:var(--card-shadow);
}
.card-title{font-size:1.02rem;font-weight:650;margin-bottom:12px;display:flex;align-items:center;gap:8px}
.ic{width:20px;height:20px;flex:none}
.ic.big{width:30px;height:30px;color:var(--dim)}

/* ---------- hero ---------- */
.hero-top{display:flex;justify-content:space-between;align-items:flex-end;gap:12px}
.hero-num{font-size:2.9rem;font-weight:800;line-height:1;letter-spacing:-.5px}
.hero-label{color:var(--dim);font-size:.9rem;margin-top:4px}
.hero-side{text-align:right;color:var(--dim);font-size:.92rem}
.hero-eaten b,.hero-eaten span{color:var(--text);font-weight:700}
.hero-eaten{font-size:1.05rem;color:var(--text);font-weight:700}
.hero-note{color:var(--dim);font-size:.9rem;margin-top:10px}
.hero-note.over{color:var(--bad);font-weight:600}

/* ---------- fill bar (item 70, the calorie hero) ----------
   The hero bar fills as he eats; the number is what is LEFT. White while
   there is normal room, green in the close zone, red the moment he is
   over (number negative), yellow when a finished day closed well under. */
#kcalBar{background:var(--hero-fill)}
#kcalBarWrap.st-close #kcalBar{background:var(--good)}
#kcalBarWrap.st-over #kcalBar{background:var(--bad)}
#kcalBarWrap.st-under #kcalBar{background:var(--warn)}
#kcalBarWrap.st-over{outline:2px solid var(--bad);outline-offset:2px}
#kcalLeft.st-close{color:var(--good)}
#kcalLeft.st-over{color:var(--bad)}
#kcalLeft.st-under{color:var(--warn)}
.hero-adaptive{color:var(--warn);font-size:.88rem;margin-top:8px;line-height:1.5}
.hero-adaptive[hidden]{display:none}
.hero-note.under{color:var(--warn);font-weight:600}

/* ---------- profiles (item 70) ---------- */
.profile-row{
  display:flex;align-items:center;gap:10px;padding:11px 0;
  border-bottom:1px solid var(--hairline);
}
.profile-row:last-child{border-bottom:none}
.profile-main{flex:1;min-width:0}
.profile-name{font-weight:650}
.profile-row.active .profile-name{color:var(--accent-text)}
.profile-sub{color:var(--dim);font-size:.85rem;margin-top:1px}
.profile-active-tag{
  font-size:.75rem;font-weight:700;letter-spacing:.5px;text-transform:uppercase;
  color:var(--accent-text);border:1px solid var(--accent-line);background:var(--accent-tint-soft);
  padding:5px 10px;border-radius:999px;flex:none;
}
.sum-row{
  display:flex;justify-content:space-between;align-items:baseline;gap:14px;
  padding:8px 0;border-bottom:1px solid var(--hairline);
}
.sum-row:last-child{border-bottom:none}
.sum-label{color:var(--dim);font-size:.92rem;flex:none}
.sum-value{font-weight:650;text-align:right}
.profile-reason{color:var(--warn);font-size:.9rem;margin-top:12px;line-height:1.5}

/* ---------- accounts: the gate, claim card, offline bar (item 74) ---------- */
.gate{
  position:fixed;inset:0;z-index:50;overflow-y:auto;
  background:var(--bg);padding:calc(18px + env(safe-area-inset-top, 0px)) 14px 40px;
}
.gate[hidden]{display:none}
.gate-card{max-width:480px;margin:0 auto}
.gate-brand{margin:10px 0 22px}
.gate-note{color:var(--dim);font-size:.92rem;line-height:1.55;margin:12px 0}
.gate-alt{color:var(--dim);font-size:.95rem;margin-top:16px}
.link-btn{
  background:none;border:none;padding:0;font:inherit;font-weight:650;
  color:var(--accent-text);cursor:pointer;text-decoration:underline;text-underline-offset:3px;
}
.form-error{color:var(--bad);font-size:.93rem;line-height:1.5;margin:10px 0}
.form-error[hidden]{display:none}
.form-ok{color:var(--good);font-size:.95rem;line-height:1.5;margin:10px 0}
.form-ok[hidden]{display:none}
.offline-bar{
  background:var(--warn-tint);border:1px solid var(--warn-line);color:var(--warn);
  border-radius:14px;padding:10px 14px;font-size:.9rem;line-height:1.5;margin:12px 0 0;
}
.offline-bar[hidden]{display:none}
.claim-card{border-color:var(--accent-line)}
.claim-card[hidden]{display:none}
.claim-btns{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:6px}
.claim-btns .btn-primary{flex:1;min-width:200px}

/* ---------- bars (draining: dashboard, macros, water) ---------- */
.bar{
  height:12px;border-radius:999px;background:var(--track);
  overflow:hidden;margin-top:10px;
}
.bar-big{height:16px}
.bar-fill{
  height:100%;width:100%;border-radius:999px;background:var(--good);
  transition:width .45s ease,background .3s ease;
}
.bar-fill.warn{background:var(--warn)}
.bar-fill.low{background:var(--bad)}
.bar-fill.water-fill{background:var(--water)}
.bar.over{outline:2px solid var(--bad);outline-offset:2px}

/* ---------- macros ---------- */
.macro{padding:10px 0;border-bottom:1px solid var(--hairline-strong)}
.macro:last-child{border-bottom:none;padding-bottom:2px}
.macro-head{display:flex;justify-content:space-between;align-items:baseline}
.macro-name{font-weight:600}
.macro-nums{color:var(--dim);font-size:.92rem}
.macro-nums b{color:var(--text)}
.macro-note{color:var(--faint);font-size:.84rem;margin-top:6px}
.macro-note.over{color:var(--bad)}

/* ---------- water ---------- */
.water-head{display:flex;justify-content:space-between;align-items:center}
.water-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.chip-btn{
  appearance:none;border:1px solid var(--line);background:var(--panel-strong);
  color:var(--text);font-size:.95rem;font-weight:600;
  padding:10px 16px;border-radius:999px;cursor:pointer;min-height:44px;
}
.chip-btn:active{transform:scale(.97)}
.chip-btn.ghost{background:transparent;color:var(--dim)}

/* ---------- meals / entries ---------- */
.meal-group{margin-bottom:14px}
.meal-group:last-child{margin-bottom:0}
.meal-title{
  font-size:.8rem;font-weight:700;letter-spacing:.6px;text-transform:uppercase;
  color:var(--accent-text);margin:10px 0 6px;
}
.entry{
  display:flex;align-items:center;gap:10px;padding:10px 0;
  border-bottom:1px solid var(--hairline);
}
.entry:last-child{border-bottom:none}
.entry-main{flex:1;min-width:0}
.entry-name{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.entry-sub{color:var(--dim);font-size:.85rem}
.entry-del{
  appearance:none;border:1px solid var(--line);background:transparent;color:var(--dim);
  width:38px;height:38px;border-radius:12px;display:grid;place-items:center;cursor:pointer;flex:none;
}
.entry-del svg{width:17px;height:17px}
.empty-note{color:var(--faint);font-size:.92rem}

/* ---------- forms ---------- */
.field{display:block;margin-bottom:13px}
.field span{display:block;font-size:.86rem;color:var(--dim);margin-bottom:6px;font-weight:550}
.field input,.field select{
  width:100%;appearance:none;background:var(--field-bg);
  border:1px solid var(--line);border-radius:14px;color:var(--text);
  font-size:1.05rem;padding:13px 14px;min-height:50px;
}
.field input:focus,.field select:focus{outline:2px solid var(--accent-text);outline-offset:1px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.check{display:flex;gap:10px;align-items:flex-start;margin:4px 0 16px;color:var(--dim);font-size:.94rem}
.check input{width:22px;height:22px;accent-color:var(--accent);flex:none;margin-top:1px}
.btn-primary{
  width:100%;appearance:none;border:none;border-radius:16px;cursor:pointer;
  background:var(--accent-fill);color:var(--on-accent);font-size:1.05rem;font-weight:700;
  padding:15px;min-height:54px;
}
.btn-primary:active{transform:scale(.985)}
.btn-ghost{
  width:100%;appearance:none;border:1px solid var(--line);background:transparent;
  color:var(--faint);font-size:.95rem;font-weight:600;border-radius:14px;
  padding:12px;margin-top:14px;min-height:48px;cursor:not-allowed;
}

/* ---------- first-run setup (pt17) ---------- */
.setup-row{border-top:1px solid var(--line);padding:8px 0}
.setup-row:first-child{border-top:none}
.setup-head{
  display:flex;align-items:center;gap:12px;width:100%;min-height:52px;
  background:none;border:none;color:var(--text);text-align:left;cursor:pointer;padding:6px 0;
}
.setup-head .ic{width:24px;height:24px;color:var(--accent-text)}
.setup-head-text{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.setup-title{font-size:1rem;font-weight:650}
.setup-sub{color:var(--dim);font-size:.88rem}
.setup-chev{width:20px;height:20px;flex:none;color:var(--dim);display:grid;place-items:center;transition:transform .15s}
.setup-chev svg{width:20px;height:20px}
.setup-head[aria-expanded="true"] .setup-chev{transform:rotate(180deg)}
.setup-body{padding:4px 0 10px 36px}
.setup-body p{color:var(--dim);font-size:.94rem;line-height:1.5;margin:0 0 10px}
.setup-body .setup-fine{color:var(--faint);font-size:.86rem}
.setup-actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:6px}
.setup-actions .btn-primary,.setup-actions .btn-ghost{
  width:auto;flex:1;min-width:150px;margin-top:0;cursor:pointer;color:var(--text);
}
.setup-actions .btn-ghost{color:var(--faint)}
.setup-actions .btn-primary{font-size:1rem;padding:13px;min-height:50px}
.setup-app-row{display:flex;align-items:center;gap:12px;padding:10px 0;border-top:1px solid var(--line)}
.setup-app-text{flex:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.setup-app-name{font-size:.98rem;font-weight:600}
.setup-app-sub{color:var(--dim);font-size:.86rem}
.setup-check{width:auto;flex:none;margin-top:0;cursor:pointer;color:var(--text);padding:10px 16px;min-height:48px}
.setup-check.is-done{font-size:.95rem;font-weight:600;border-radius:14px;padding:10px 16px;min-height:48px}

/* ---------- stubs ---------- */
.stub-row{display:flex;gap:14px;align-items:flex-start}
.stub-title{font-weight:650;font-size:1rem}
.stub-note{color:var(--dim);font-size:.9rem;margin-top:3px}

/* ---------- my foods ---------- */
.meal-picker{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.meal-picker button{
  appearance:none;border:1px solid var(--line);background:var(--panel-strong);
  color:var(--dim);border-radius:13px;padding:11px 4px;font-size:.9rem;font-weight:600;
  cursor:pointer;min-height:46px;
}
.meal-picker button.sel{color:var(--sel-ink);border-color:var(--accent);background:var(--accent-tint-sel)}
.food-row{
  display:flex;align-items:center;gap:10px;padding:11px 0;
  border-bottom:1px solid var(--hairline);
}
.food-row:last-child{border-bottom:none}
.food-main{flex:1;min-width:0;text-align:left;appearance:none;background:none;border:none;color:var(--text);cursor:pointer;padding:0}
.food-name{font-weight:600;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.food-sub{color:var(--dim);font-size:.85rem;display:block}
.food-add-hint{color:var(--accent-text);font-size:.8rem;font-weight:650;display:block;margin-top:2px}

/* ---------- tab bar ---------- */
.tabbar{
  position:fixed;left:50%;transform:translateX(-50%);
  bottom:calc(10px + env(safe-area-inset-bottom));z-index:10;
  display:flex;gap:4px;padding:6px;border-radius:999px;
  background:var(--chrome-bg);border:1px solid var(--line);
  backdrop-filter:blur(20px) saturate(1.4);-webkit-backdrop-filter:blur(20px) saturate(1.4);
  width:min(430px,calc(100vw - 20px));
}
.tab{
  flex:1;appearance:none;border:none;background:transparent;color:var(--dim);
  border-radius:999px;padding:9px 2px 7px;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;gap:3px;
  font-size:.72rem;font-weight:600;min-height:52px;justify-content:center;
}
.tab .ic{width:21px;height:21px}
.tab.active{background:var(--chrome-active);color:var(--text)}

/* ---------- views / toast ---------- */
.view{display:none}
.view.active{display:block}
.toast{
  position:fixed;left:50%;transform:translate(-50%,20px);bottom:92px;z-index:20;
  background:var(--toast-bg);border:1px solid var(--line);color:var(--toast-ink);
  padding:11px 18px;border-radius:999px;font-size:.93rem;font-weight:600;
  opacity:0;pointer-events:none;transition:opacity .25s ease,transform .25s ease;
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);max-width:92vw;text-align:center;
}
.toast.show{opacity:1;transform:translate(-50%,0)}

/* Large accessibility text: keep the one-column layout, let things breathe */
@media (min-width:480px){
  .hero-num{font-size:3.3rem}
}

/* ---------- day navigation (slice 2) ---------- */
.daynav{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin:4px 0 2px;
}
.daynav-btn{
  appearance:none;border:1px solid var(--line);background:var(--panel-strong);
  color:var(--text);width:44px;height:44px;border-radius:14px;cursor:pointer;
  display:grid;place-items:center;flex:none;
  backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
}
.daynav-btn svg{width:20px;height:20px}
.daynav-btn:disabled{opacity:.35;cursor:default}
.daynav-btn:active{transform:scale(.96)}
.daynav-mid{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:0}
#dayLabel{font-weight:650;font-size:1rem;text-align:center}
.daynav-today{
  appearance:none;border:none;background:none;color:var(--accent-text);
  font-size:.85rem;font-weight:650;cursor:pointer;padding:2px 6px;
}

/* ---------- meal group head + add shortcut (slice 2) ---------- */
.meal-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.meal-head .meal-title{margin:10px 0 6px}
.meal-add{
  appearance:none;border:1px solid var(--line);background:var(--panel-strong);
  color:var(--accent-text);border-radius:999px;cursor:pointer;flex:none;
  display:flex;align-items:center;gap:4px;padding:6px 12px;min-height:34px;
  font-size:.82rem;font-weight:650;
}
.meal-add svg{width:14px;height:14px}
.meal-add:active{transform:scale(.96)}

/* ---------- database search + portion sheet (slice 2) ---------- */
.sheet{
  margin-top:16px;border-top:1px solid var(--line);padding-top:16px;
}
.sheet[hidden]{display:none}
.sheet-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.sheet-name{font-weight:700;font-size:1.05rem}
.sheet-sub{color:var(--dim);font-size:.85rem;margin-top:2px}
.nut-grid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:14px 0 4px;
}
.nut-cell{
  background:var(--cell-bg);border:1px solid var(--cell-line);
  border-radius:12px;padding:8px 10px;display:flex;flex-direction:column;gap:1px;
  min-width:0;
}
.nut-label{color:var(--faint);font-size:.72rem;font-weight:650;letter-spacing:.4px;text-transform:uppercase}
.nut-val{font-weight:650;font-size:.95rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sheet-row{margin-top:14px}
.sheet-label{display:block;font-size:.86rem;color:var(--dim);margin-bottom:8px;font-weight:550}
.stepper{display:flex;align-items:stretch;gap:8px}
.stepper button{
  appearance:none;border:1px solid var(--line);background:var(--panel-strong);
  color:var(--text);width:52px;border-radius:14px;font-size:1.3rem;font-weight:700;
  cursor:pointer;min-height:50px;
}
.stepper button:active{transform:scale(.96)}
.stepper input{
  flex:1;width:100%;appearance:none;background:var(--field-bg);
  border:1px solid var(--line);border-radius:14px;color:var(--text);
  font-size:1.1rem;font-weight:650;padding:12px;text-align:center;min-height:50px;
}
.stepper input:focus{outline:2px solid var(--accent-text);outline-offset:1px}
.sheet .meal-picker{margin-top:2px}
.sheet-totals{color:var(--dim);font-size:.92rem;margin:14px 0 12px}

/* ---------- nutrition dashboard (slice 61) ---------- */
.hero{cursor:pointer}
.hero:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px}
.dash-toggle{
  display:flex;align-items:center;justify-content:center;gap:7px;
  margin-top:14px;color:var(--accent-text);font-size:.88rem;font-weight:650;
  border-top:1px solid var(--hairline-strong);padding-top:12px;
}
.dash-chev{width:17px;height:17px;transition:transform .3s ease}
.hero.open .dash-chev{transform:rotate(180deg)}
.dash-panel{margin-top:6px;border-top:1px solid var(--hairline-strong);padding-top:4px}
.dash-panel[hidden]{display:none}
.dash-row{padding:9px 0;border-bottom:1px solid var(--hairline)}
.dash-row:last-child{border-bottom:none}
.dash-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.dash-name{font-weight:600;font-size:.95rem}
.dash-nums{color:var(--dim);font-size:.9rem;white-space:nowrap}
.dash-nums b{color:var(--text)}
.dash-amt{font-weight:650;font-size:.98rem}
.dash-ref{color:var(--faint);font-size:.78rem;font-weight:600}
.dash-foot{color:var(--faint);font-size:.8rem;margin-top:10px;line-height:1.5}

/* ---------- barcode scan (slice 62) ---------- */
.scan-note{margin-bottom:14px}
.scan-row{display:flex;gap:8px;margin-top:12px}
.scan-row input{
  flex:1;min-width:0;appearance:none;background:var(--field-bg);
  border:1px solid var(--line);border-radius:14px;color:var(--text);
  font-size:1.05rem;padding:12px 14px;min-height:50px;
}
.scan-row input:focus{outline:2px solid var(--accent-text);outline-offset:1px}
.scan-row .chip-btn{flex:none}
.scan-msg{color:var(--dim);font-size:.92rem;margin-top:12px;min-height:1.2em}
.scan-msg.err{color:var(--bad);font-weight:600}
.scanner{
  position:fixed;inset:0;z-index:40;background:rgba(0,0,0,.94);
  /* pt19: the camera room stays dark in both themes — it re-pins
     today's dark tokens locally, so a light-mode user still gets a
     dark viewfinder and this room renders identically either way. */
  --text:#ffffff;--dim:rgba(255,255,255,.62);--faint:rgba(255,255,255,.50);
  --line:rgba(255,255,255,.13);--panel-strong:rgba(255,255,255,.09);
  display:flex;align-items:center;justify-content:center;padding:18px;
}
.scanner[hidden]{display:none}
.scanner-box{width:min(480px,100%)}
.scanner-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px}
.scanner-title{font-size:1.1rem;font-weight:700}
.scanner-stage{position:relative;border-radius:18px;overflow:hidden;background:#111;border:1px solid var(--line)}
.scanner-stage video{width:100%;display:block;aspect-ratio:3/4;object-fit:cover;background:#000}
.scanner-frame{
  position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:78%;height:44%;border:2px solid var(--accent);border-radius:14px;
  box-shadow:0 0 0 4000px rgba(0,0,0,.38);pointer-events:none;
  transition:width .25s ease,height .25s ease;
}
.scanner-frame.tall{width:44%;height:78%}
.scanner-status{color:var(--dim);font-size:.95rem;text-align:center;margin-top:14px;line-height:1.5}

/* ---------- training (item 63) ---------- */
.chip-row{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.chip-row button{
  appearance:none;border:1px solid var(--line);background:var(--panel-strong);
  color:var(--dim);border-radius:999px;padding:9px 16px;font-size:.92rem;font-weight:650;
  cursor:pointer;min-height:42px;
}
.chip-row button.sel{color:var(--sel-ink);border-color:var(--accent);background:var(--accent-tint-sel)}
.chip-row button:active{transform:scale(.97)}
.plan-block-title{
  font-size:.8rem;font-weight:700;letter-spacing:.6px;text-transform:uppercase;
  color:var(--accent-text);margin:18px 0 8px;
}
.plan-group{margin-bottom:6px}
.plan-group.ss{
  border-left:3px solid var(--accent-line-strong);padding-left:10px;margin-left:1px;
}
.ss-tag{
  font-size:.72rem;font-weight:700;letter-spacing:.8px;text-transform:uppercase;
  color:var(--accent-text);margin:2px 0 4px;
}
.plan-ex{display:flex;align-items:center;gap:11px;padding:8px 0;border-bottom:1px solid var(--hairline)}
.plan-group .plan-ex:last-of-type{border-bottom:none}
.plan-art{
  width:62px;height:62px;border-radius:14px;object-fit:cover;flex:none;
  background:var(--panel-strong);border:1px solid var(--line);
}
.plan-ex-main{flex:1;min-width:0}
.plan-ex-name{font-weight:600}
.plan-ex-target{color:var(--dim);font-size:.86rem;margin-top:1px}
.plan-hist{
  appearance:none;border:1px solid var(--line);background:transparent;color:var(--accent-text);
  border-radius:999px;padding:7px 12px;font-size:.8rem;font-weight:650;cursor:pointer;flex:none;
  min-height:36px;
}
.plan-hist:active{transform:scale(.96)}
.plan-group-note{color:var(--faint);font-size:.85rem;font-style:italic;padding:5px 0 1px}
.plan-rest{color:var(--faint);font-size:.85rem;font-weight:600;padding:5px 0 2px}
.plan-recovery{color:var(--dim);font-size:.9rem;margin-top:14px;border-top:1px solid var(--hairline-strong);padding-top:12px}
.log-day-label{font-weight:700;font-size:.98rem;margin-bottom:6px}
.log-jump{margin-top:12px}
.log-ex{padding:12px 0;border-bottom:1px solid var(--hairline-strong)}
.log-ex:last-child{border-bottom:none}
.log-ex-head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.log-ex-name{font-weight:650}
.log-ex-target{color:var(--dim);font-size:.85rem;margin-top:1px}
.log-last{color:var(--faint);font-size:.85rem;margin-top:7px;line-height:1.5}
.set-row{padding:8px 0 2px}
.set-top{display:flex;justify-content:space-between;align-items:baseline;gap:10px}
.set-n{font-weight:650;font-size:.9rem;color:var(--dim)}
.set-last{color:var(--accent-text);font-size:.84rem;font-weight:600;text-align:right}
.set-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:6px}
.set-field{display:block;min-width:0}
.set-field span{display:block;font-size:.74rem;color:var(--faint);font-weight:650;letter-spacing:.4px;text-transform:uppercase;margin-bottom:4px}
.set-field input{
  width:100%;appearance:none;background:var(--field-bg);
  border:1px solid var(--line);border-radius:12px;color:var(--text);
  font-size:1.02rem;font-weight:600;padding:11px 8px;text-align:center;min-height:47px;
}
.set-field input:focus{outline:2px solid var(--accent-text);outline-offset:1px}
.set-done{margin:6px 0 2px}
.set-add{
  appearance:none;border:1px dashed var(--line);background:transparent;color:var(--dim);
  border-radius:12px;padding:9px 14px;font-size:.88rem;font-weight:650;cursor:pointer;
  margin-top:10px;min-height:42px;
}
.set-add:active{transform:scale(.97)}
.log-hint{color:var(--good);font-size:.87rem;font-weight:600;margin-top:9px}
.log-hint:empty{margin-top:0}
/* ---------- end of session (item 68) ---------- */
.session-actions{margin-top:16px}
.btn-end{
  width:100%;appearance:none;border:1px solid var(--accent-line-strong);
  background:var(--accent-tint);color:var(--end-ink);border-radius:16px;
  padding:14px;min-height:52px;font-size:1rem;font-weight:700;cursor:pointer;
}
.btn-end:active{transform:scale(.985)}
.end-confirm{
  border:1px solid var(--accent-line);background:var(--accent-tint-faint);
  border-radius:16px;padding:14px;
}
.end-confirm p{color:var(--dim);font-size:.93rem;line-height:1.5}
.end-confirm-btns{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.end-confirm-btns .btn-primary{min-height:48px;padding:12px;font-size:.98rem}
.end-confirm-btns .chip-btn{min-height:48px}
.session-summary{
  border:1px solid var(--good-line);background:var(--good-tint);
  border-radius:16px;padding:16px;
}
.session-summary-title{font-size:1.18rem;font-weight:800}
.session-summary-sub{color:var(--dim);font-size:.92rem;margin-top:2px}
.session-stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:14px 0 12px}
.session-stat{
  background:var(--cell-bg);border:1px solid var(--cell-line);
  border-radius:14px;padding:10px 12px;min-width:0;
}
.session-stat span{
  display:block;color:var(--faint);font-size:.72rem;font-weight:650;
  letter-spacing:.4px;text-transform:uppercase;margin-bottom:2px;
}
.session-stat b{font-size:1.02rem}
.session-summary-note{color:var(--dim);font-size:.9rem;line-height:1.5;margin-bottom:14px}
.session-mismatch{margin-top:14px}
/* ---------- pause (item 69) ---------- */
.session-actions-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.session-actions-row .btn-end{width:auto}
.btn-pause{
  appearance:none;border:1px solid var(--pause-line);
  background:var(--pause-tint);color:var(--pause-ink);border-radius:16px;
  padding:14px;min-height:52px;font-size:1rem;font-weight:700;cursor:pointer;
}
.btn-pause:active{transform:scale(.985)}
.session-paused{
  border:1px solid var(--pause-line-soft);background:var(--pause-tint-soft);
  border-radius:16px;padding:16px;
}
.session-paused-title{font-size:1.18rem;font-weight:800}
.hist-row{padding:10px 0;border-bottom:1px solid var(--hairline)}
.hist-row:last-child{border-bottom:none}
.hist-date{font-weight:650;font-size:.93rem}
.hist-sets{color:var(--dim);font-size:.88rem;margin-top:2px;line-height:1.55}

/* ---------- progress + body tracking (item 64) ---------- */
.field textarea{
  width:100%;appearance:none;background:var(--field-bg);
  border:1px solid var(--line);border-radius:14px;color:var(--text);
  font-size:1.05rem;padding:13px 14px;min-height:50px;resize:vertical;
  font-family:inherit;line-height:1.45;
}
.field textarea:focus{outline:2px solid var(--accent-text);outline-offset:1px}
.week-card{padding:14px 18px}
.week-strip{display:flex;justify-content:space-between;gap:4px}
.wk-cell{display:flex;flex-direction:column;align-items:center;gap:7px;flex:1}
.wk-letter{font-size:.78rem;font-weight:700;color:var(--faint);letter-spacing:.4px}
.wk-dot{
  width:17px;height:17px;border-radius:50%;flex:none;
  border:2px solid var(--dot-line);background:transparent;
}
.wk-dot.filled{background:var(--accent-graphic);border-color:var(--accent-graphic)}
.wk-dot.today{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--today-ring)}
.wk-dot.filled.today{box-shadow:0 0 0 2px var(--bg),0 0 0 4px var(--accent-graphic)}
.streak-line{color:var(--dim);font-size:.9rem;margin-top:12px;text-align:center}
.habit-row{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:11px 0;border-bottom:1px solid var(--hairline);
}
.habit-label{display:flex;align-items:center;gap:9px;font-weight:600}
.habit-label .ic{color:var(--accent-text)}
.habit-value{color:var(--dim);font-weight:600}
.habit-steps{display:flex;align-items:center;gap:8px}
.habit-steps input{
  width:110px;appearance:none;background:var(--field-bg);
  border:1px solid var(--line);border-radius:12px;color:var(--text);
  font-size:1rem;font-weight:600;padding:10px 12px;text-align:right;min-height:44px;
}
.habit-steps input:focus{outline:2px solid var(--accent-text);outline-offset:1px}
.habit-unit{color:var(--faint);font-size:.88rem}
.habit-block{padding-top:13px}
.dose-head{margin-bottom:4px}
.dose-form{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.dose-form input{
  appearance:none;background:var(--field-bg);min-width:0;
  border:1px solid var(--line);border-radius:12px;color:var(--text);
  font-size:.98rem;padding:11px 12px;min-height:44px;
}
.dose-form input:focus{outline:2px solid var(--accent-text);outline-offset:1px}
#doseName{flex:2 1 150px}
#doseAmount{flex:1 1 100px}
#doseTime{flex:0 1 118px}
.dose-form .chip-btn{flex:1 1 100%}
.prog-stats{display:flex;gap:8px;margin-bottom:10px}
.prog-stat{
  flex:1;min-width:0;background:var(--cell-bg);
  border:1px solid var(--cell-line);border-radius:14px;padding:10px 12px;
  display:flex;flex-direction:column;gap:1px;
}
.prog-stat span{
  color:var(--faint);font-size:.72rem;font-weight:650;
  letter-spacing:.4px;text-transform:uppercase;
}
.prog-stat b{font-size:1.15rem;white-space:nowrap}
.prog-stat .prog-note{
  color:var(--faint);font-size:.74rem;font-weight:550;
  letter-spacing:0;text-transform:none;line-height:1.35;
}
.prog-big{
  display:flex;justify-content:space-between;align-items:baseline;gap:12px;
  margin-bottom:6px;
}
.prog-big span{color:var(--dim);font-size:.92rem}
.prog-big b{font-size:1.3rem}
.daybars{display:flex;gap:6px;margin-top:10px}
.daybar{flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0}
.daybar-track{
  width:100%;height:64px;border-radius:9px;background:var(--track-soft);
  display:flex;align-items:flex-end;overflow:hidden;
}
.daybar-fill{width:100%;background:var(--accent-graphic);border-radius:9px;transition:height .4s ease}
.daybar-label{color:var(--faint);font-size:.74rem;font-weight:650}
.macro-avg-row{padding:10px 0;border-bottom:1px solid var(--hairline-strong)}
.macro-avg-row:last-child{border-bottom:none;padding-bottom:2px}
.macro-avg-head{display:flex;justify-content:space-between;align-items:baseline}
.macro-avg-row .daybar-track{height:38px}
.trend-svg{width:100%;height:120px;display:block;margin-top:6px}
.trend-weight{fill:none;stroke:var(--accent-graphic);stroke-width:2.5;stroke-linejoin:round;stroke-linecap:round}
.trend-weight-dot{fill:var(--accent-graphic)}
.trend-bf{fill:none;stroke:var(--water);stroke-width:2;stroke-dasharray:5 4;stroke-linejoin:round;stroke-linecap:round}
.trend-bf-dot{fill:var(--water)}
.weight-row .weight-edit{flex:none;min-height:38px;padding:7px 13px}
.entry-del.armed{background:var(--bad-tint);border-color:var(--bad);color:var(--bad)}

/* ---------- Unc: meal ideas + ask (item 63) ---------- */
.ask-answer{
  margin-top:14px;padding:14px;border-radius:14px;
  background:var(--panel-strong);border:1px solid var(--line);
  font-size:.97rem;line-height:1.5;white-space:pre-line;
}
.idea-card{
  border:1px solid var(--line);border-radius:16px;background:var(--panel-strong);
  padding:14px;margin:12px 0;
}
.idea-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.idea-title{font-weight:700;font-size:1.02rem}
.idea-where{color:var(--accent-text);font-size:.78rem;font-weight:700;letter-spacing:.4px;text-transform:uppercase;flex:none}
.idea-note{color:var(--dim);font-size:.9rem;margin-top:3px}
.idea-totals{margin-top:9px;font-weight:650}
.idea-totals span{color:var(--dim);font-weight:500}
.idea-parts{list-style:none;margin-top:9px}
.idea-parts li{
  display:flex;justify-content:space-between;gap:10px;padding:6px 0;
  border-bottom:1px solid var(--hairline);font-size:.93rem;
}
.idea-parts li:last-child{border-bottom:none}
.idea-parts .p-nums{color:var(--dim);flex:none}
.idea-meals{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:11px}
.idea-meals button{
  appearance:none;border:1px solid var(--line);background:transparent;
  color:var(--dim);border-radius:13px;padding:10px 2px;font-size:.88rem;font-weight:600;
  cursor:pointer;min-height:44px;
}
.idea-meals button.sel{color:var(--sel-ink);border-color:var(--accent);background:var(--accent-tint-sel)}
.idea-actions{display:flex;gap:9px;margin-top:11px}
.idea-log{
  flex:1;appearance:none;border:none;border-radius:13px;cursor:pointer;
  background:var(--accent-fill);color:var(--on-accent);font-size:.98rem;font-weight:700;
  padding:12px;min-height:48px;
}
.idea-log:active{transform:scale(.985)}
.idea-save{
  flex:none;appearance:none;border:1px solid var(--line);background:transparent;
  color:var(--text);border-radius:13px;padding:12px 16px;font-size:.95rem;font-weight:600;
  cursor:pointer;min-height:48px;
}
.idea-save.saved{border-color:var(--accent-line-strong);color:var(--accent-text)}
#ideaRefresh{cursor:pointer;color:var(--dim)}
.idea-empty{color:var(--dim);font-size:.94rem;padding:6px 0 2px}

/* ---------- Add Food pass (pt14) ---------- */
/* The search bar's tool row: scan / camera / quick-add doors, each a
   real 44px+ target beside the field. */
.search-row{display:flex;gap:8px;align-items:flex-end}
.search-field{flex:1;min-width:0}
.search-actions{display:flex;gap:8px;flex:none}
.icon-btn{
  appearance:none;width:48px;height:48px;flex:none;
  display:flex;align-items:center;justify-content:center;
  border:1px solid var(--line);background:var(--panel-strong);
  color:var(--text);border-radius:14px;cursor:pointer;
}
.icon-btn svg{width:23px;height:23px}
.icon-btn:active{transform:scale(.96)}

/* The verified green light: a small round lamp beside a name whose
   numbers cross-checked against USDA FoodData Central. */
.vdot{
  display:inline-block;width:9px;height:9px;border-radius:50%;
  background:var(--good);box-shadow:0 0 6px var(--good-glow);
  margin-right:7px;vertical-align:2px;flex:none;
}
.sheet-name .vdot{vertical-align:3px}

/* Edit door on his own library rows. */
.food-edit{
  appearance:none;border:1px solid var(--line);background:transparent;
  color:var(--dim);border-radius:999px;padding:7px 13px;min-height:36px;
  font-size:.82rem;font-weight:650;cursor:pointer;flex:none;align-self:center;
}
.food-edit:active{transform:scale(.96)}

/* Online results (USDA + Open Food Facts name search). */
.online-head{
  font-size:.8rem;font-weight:700;letter-spacing:.6px;text-transform:uppercase;
  color:var(--faint);margin:16px 0 4px;
}
.online-search-btn{
  width:100%;appearance:none;border:1px dashed var(--line);background:transparent;
  color:var(--accent-text);border-radius:14px;padding:13px;font-size:.95rem;font-weight:650;
  cursor:pointer;margin-top:12px;min-height:48px;
}
.online-search-btn:active{transform:scale(.98)}
.online-search-btn[disabled]{color:var(--dim);cursor:default}

/* Portion sheet: amount + unit side by side. */
.qty-controls{display:flex;gap:8px;align-items:stretch}
.qty-controls .stepper{flex:1;min-width:0}
.qty-controls select{
  appearance:none;background:var(--field-bg);border:1px solid var(--line);
  border-radius:14px;color:var(--text);font-size:1rem;font-weight:600;
  padding:0 12px;min-height:50px;max-width:42%;
}
.qty-controls select:focus{outline:2px solid var(--accent-text);outline-offset:1px}

/* The scan/edit sheet's editable nutrient grid. */
.nut-cell.editable:focus-within{outline:2px solid var(--accent-text);outline-offset:1px}
.nut-input{
  appearance:none;background:transparent;border:none;color:var(--text);
  font:inherit;font-weight:650;font-size:.95rem;width:100%;padding:0;min-width:0;
}
.nut-input:focus{outline:none}
#scanUnlockBtn{margin-bottom:10px}
#scanVerify{color:var(--good);font-weight:600}
#scanVerify:empty,#scanFlags:empty{display:none}

/* Scanner: portrait lock furniture. */
.scanner-actions{display:flex;justify-content:center;margin-top:14px}
.scanner-actions .chip-btn{display:flex;align-items:center;gap:7px;min-height:44px}
.scanner-actions .chip-btn svg{width:17px;height:17px}
.scanner-note{color:var(--faint);font-size:.84rem;text-align:center;margin-top:12px;line-height:1.55}

/* ---------- meal scan (pt15) ---------- */
.scan-door{
  display:flex;gap:12px;align-items:center;width:100%;text-align:left;cursor:pointer;
  background:var(--panel);border:1px solid var(--line);border-radius:16px;
  color:var(--text);padding:14px;margin-top:12px;min-height:64px;
}
.scan-door:active{transform:scale(.99)}
.scan-door:disabled{opacity:.55;cursor:default}
.scan-door svg{width:26px;height:26px;flex:none;color:var(--accent-text)}
.scan-door-text{display:block}
.scan-door-title{display:block;font-weight:650;font-size:1rem}
.scan-door-sub{display:block;color:var(--dim);font-size:.86rem;margin-top:2px}
.ms-row{border-top:1px solid var(--line);padding:14px 0 6px}
.ms-row-head{display:flex;gap:8px;align-items:center}
.ms-name{
  flex:1;min-width:0;appearance:none;background:var(--field-bg);
  border:1px solid var(--line);border-radius:12px;color:var(--text);
  font-size:1rem;font-weight:600;padding:10px 12px;min-height:46px;
}
.ms-name:focus{outline:2px solid var(--accent-text);outline-offset:1px}
.est-tag{
  flex:none;border:1px solid var(--accent-line);color:var(--accent-text);border-radius:999px;
  padding:2px 9px;font-size:.72rem;font-weight:700;letter-spacing:.02em;white-space:nowrap;
}
.ms-state{color:var(--dim);font-size:.88rem;margin:9px 0 2px}
.ms-conf{color:var(--faint);font-size:.84rem;margin:0 0 9px}
.ms-controls{display:flex;gap:8px;align-items:center}
.ms-amount{width:104px;flex:none}
.ms-unit{
  flex:1;min-width:0;appearance:none;background:var(--field-bg);
  border:1px solid var(--line);border-radius:12px;color:var(--text);
  font-size:1rem;padding:10px 12px;min-height:46px;
}
.ms-unit:focus{outline:2px solid var(--accent-text);outline-offset:1px}
.ms-unit-fixed{color:var(--dim);font-size:.92rem}
.ms-nums{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:10px}
.ms-nums label{display:block;font-size:.78rem;color:var(--dim)}
.ms-nums .nut-input{width:100%;margin-top:4px}
.ms-row-totals{color:var(--dim);font-size:.9rem;margin:10px 0 4px}
#scanLogAllBtn{margin-top:10px}
#scanLogAllBtn:disabled{opacity:.5}
#scanAddMissedBtn,#scanStartOverBtn,#labelCancelBtn{margin-top:10px}
#labelForm .field{display:block;margin-top:12px}

/* ---------- Talk to Unc (pt16) ---------- */
#askForm{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end}
#askForm .field{flex:1 1 200px;margin:0}
#askForm .btn-primary{width:auto;flex:0 0 auto;padding:15px 22px}
.btn-mic{
  appearance:none;display:inline-flex;align-items:center;gap:8px;cursor:pointer;
  min-height:54px;padding:13px 18px;border-radius:16px;
  background:var(--mic-bg);border:1px solid var(--glass-line);
  -webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);
  color:var(--text);font-size:1rem;font-weight:650;
}
.btn-mic svg{width:22px;height:22px;flex:none}
.btn-mic:active{transform:scale(.97)}
.btn-mic:disabled{opacity:.6}
.btn-mic.recording{border-color:var(--accent);color:var(--accent-text);animation:micPulse 1.2s ease-in-out infinite}
@keyframes micPulse{
  0%,100%{box-shadow:0 0 0 0 var(--accent-line)}
  50%{box-shadow:0 0 0 9px rgba(255,107,74,0)}
}
@media (prefers-reduced-motion: reduce){ .btn-mic.recording{animation:none} }
.voice-status{color:var(--dim);font-size:.92rem;margin:10px 0 2px}
#voiceActions{margin-top:10px}
.entry-fixable{cursor:pointer}
#entrySheet{margin-top:14px}
#entrySaveBtn{margin-top:12px}

/* pt19 Appearance: the three-way segmented control on the Profile.
   It paints entirely from the tokens, so what it shows is what
   renders in both themes — no separate light styling to drift. */
.theme-seg{display:flex;gap:6px;background:var(--cell-bg);border:1px solid var(--cell-line);border-radius:14px;padding:4px;margin-top:4px}
.theme-seg button{
  flex:1;display:flex;align-items:center;justify-content:center;gap:7px;
  padding:10px 6px;border:1px solid transparent;border-radius:10px;background:none;
  color:var(--dim);font:inherit;font-weight:700;cursor:pointer;min-height:44px;
}
.theme-seg button svg{width:18px;height:18px;flex:none}
.theme-seg button.sel{background:var(--panel-strong);border-color:var(--line);color:var(--text)}
.theme-seg button:focus-visible{outline:2px solid var(--accent-text);outline-offset:1px}

/* pt21 Run tracking: run cards on Progress + the recorder room.
   Everything paints from the theme tokens, so both themes carry
   the runs identically; the Leaflet map keeps its own tiles (dark
   CARTO in the dark theme, standard OSM in light — chosen in
   app.js at draw time). */
.run-card{
  border:1px solid var(--line);border-radius:16px;background:var(--panel-strong);
  padding:14px;margin:12px 0;
}
.run-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.run-when{color:var(--dim);font-size:.92rem;font-weight:650}
.run-dist{font-size:1.25rem;font-weight:750;margin-left:auto}
.run-del{flex:none}
.run-stats{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:8px;font-size:.97rem}
.run-src{color:var(--dim);font-size:.9rem;line-height:1.5;margin-top:8px}
.run-map-wrap{margin-top:10px}
.run-map{height:230px;border-radius:14px;overflow:hidden;border:1px solid var(--line);margin-top:10px;z-index:0}
#runRecordBtn{margin-top:8px}
.runrec{
  position:fixed;inset:0;z-index:40;background:var(--bg,#000);
  display:flex;align-items:flex-start;justify-content:center;padding:18px;overflow-y:auto;
}
.runrec[hidden]{display:none}
.runrec-box{width:min(480px,100%)}
.runrec-map{height:300px;border-radius:18px;overflow:hidden;border:1px solid var(--line);z-index:0}
.runrec-stats{display:flex;gap:10px;margin-top:14px}
.runrec-stat{
  flex:1;border:1px solid var(--line);border-radius:14px;background:var(--panel-strong);
  padding:10px 12px;display:flex;flex-direction:column;gap:2px;min-width:0;
}
.runrec-stat span{color:var(--dim);font-size:.8rem;font-weight:650;text-transform:uppercase;letter-spacing:.04em}
.runrec-stat b{font-size:1.25rem;white-space:nowrap}
.runrec-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px;justify-content:center}
.runrec-actions .btn-primary{flex:1;min-width:130px}

/* ---------- Cookbook (item 84) ---------- */
/* Browsable recipe shelf: two-up cards with the dish's own photo,
   an honest meta line (how hard, how long, how many ingredients)
   and the macros that will land in the log. The detail card carries
   the video embed, the full ingredient list and steps, and the
   Log this wiring — one serving's numbers, labeled an estimate
   in the log when the recipe's math is an estimate. */
.cb-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:4px}
.cb-card{
  appearance:none;text-align:left;cursor:pointer;padding:0;overflow:hidden;
  border:1px solid var(--line);border-radius:16px;background:var(--panel-strong);
  color:var(--text);display:flex;flex-direction:column;
}
.cb-card:active{transform:scale(.98)}
.cb-card-photo{width:100%;aspect-ratio:4/3;object-fit:cover;display:block;background:var(--cell-bg)}
.cb-photo-ph{display:flex;align-items:center;justify-content:center;color:var(--faint)}
.cb-photo-ph svg{width:40px;height:40px}
.cb-card-body{padding:10px 11px 12px;display:flex;flex-direction:column;gap:3px}
.cb-card-name{font-weight:700;font-size:.96rem;line-height:1.25}
.cb-card-meta{color:var(--dim);font-size:.8rem}
.cb-card-macros{font-weight:650;font-size:.88rem;margin-top:2px}
.cb-est-tag{
  align-self:flex-start;margin-top:5px;padding:3px 8px;border-radius:999px;
  border:1px solid var(--accent-line-strong);color:var(--accent-text);
  font-size:.72rem;font-weight:700;letter-spacing:.3px;text-transform:uppercase;
}
#cbDetailCard{margin-top:14px}
#cbDetailCard[hidden]{display:none}
.cb-photo{width:100%;border-radius:14px;display:block;margin-top:14px;object-fit:cover;max-height:300px}
.cb-photo[hidden]{display:none}
.cb-video{margin-top:14px;border-radius:14px;overflow:hidden;aspect-ratio:16/9;background:#000}
.cb-video[hidden]{display:none}
.cb-video iframe{width:100%;height:100%;border:0;display:block}
.cb-blurb{color:var(--dim);font-size:.95rem;line-height:1.5;margin-top:14px}
.cb-blurb[hidden]{display:none}
.cb-meta{margin-top:10px;font-weight:650;font-size:.92rem}
.cb-h{
  font-size:.8rem;font-weight:700;letter-spacing:.6px;text-transform:uppercase;
  color:var(--accent-text);margin:20px 0 8px;
}
.cb-source{color:var(--dim);font-size:.9rem;margin-top:10px}
.cb-source a{color:var(--accent-text);font-weight:600}
.cb-ings{list-style:none}
.cb-ings li{padding:7px 0;border-bottom:1px solid var(--hairline);font-size:.95rem}
.cb-ings li:last-child{border-bottom:none}
.cb-steps{margin-left:20px}
.cb-steps li{padding:6px 0;font-size:.95rem;line-height:1.5}
