:root{--bg:#08080d;--card:#14141d;--card2:#1b1b26;--line:#2a2a3a;--pur:#8E6FE0;--pur2:#A98EF0;--txt:#fff;--mut:#9a9ab2;--good:#5BD6A0;--warn:#E6B15A;--bad:#E06B6B;--grad:linear-gradient(135deg,#7B5FD0,#A98EF0);}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
body{margin:0;background:#000;font-family:var(--font-body,-apple-system,Segoe UI,Roboto,Arial,sans-serif);}
.phone{max-width:412px;margin:0 auto;min-height:100vh;background:var(--bg);color:var(--txt);position:relative;padding-bottom:calc(96px + env(safe-area-inset-bottom,0px));}
.banner{background:#1a1526;color:var(--pur2);text-align:center;font-size:11px;padding:5px;letter-spacing:.5px;}
.topbar{display:flex;align-items:center;justify-content:center;padding:14px;background:#000;border-bottom:1px solid #1e1e2a;}
.topbar img{height:58px;}
.wrap{padding:16px;}
.card{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:16px;margin-bottom:14px;}
.h{font-size:12px;color:var(--pur2);text-transform:uppercase;letter-spacing:1.5px;font-weight:700;margin-bottom:12px;}
label{display:block;font-size:12px;color:var(--mut);margin:10px 0 5px;letter-spacing:.3px;}
input,select,textarea{width:100%;padding:13px;border-radius:11px;border:1px solid var(--line);background:#0e0e16;color:var(--txt);font-size:16px;}
textarea{font-family:inherit;min-height:88px;resize:vertical;}
.daypick{flex:1;min-width:40px;text-align:center;padding:11px 4px;border-radius:10px;border:1px solid var(--line);background:#0e0e16;color:var(--mut);font-size:13px;font-weight:700;cursor:pointer;user-select:none;}
.daypick.on{background:var(--grad);color:#fff;border-color:transparent;}
.nonebtn{float:right;background:#0e0e16;border:1px solid var(--line);color:var(--mut);border-radius:8px;padding:8px 12px;min-height:32px;font-size:11px;font-weight:700;cursor:pointer;text-transform:none;letter-spacing:0;}
.nonebtn:hover{color:var(--txt);border-color:var(--pur);}
.btn{width:100%;padding:14px;border:0;border-radius:12px;background:var(--grad);color:#fff;font-size:15px;font-weight:700;letter-spacing:.5px;cursor:pointer;box-shadow:0 6px 20px rgba(123,95,208,.35);}
.btn:active{opacity:.9;}
.btn.sec{background:transparent;border:1px solid var(--pur);color:var(--pur2);box-shadow:none;}
.pill{display:inline-block;padding:5px 12px;border-radius:20px;font-size:12px;font-weight:700;letter-spacing:.5px;}
.pill.train{background:rgba(91,214,160,.16);color:var(--good);border:1px solid rgba(91,214,160,.4);}
.pill.rest{background:rgba(230,177,90,.16);color:var(--warn);border:1px solid rgba(230,177,90,.4);}
.grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;}
.grid3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;}
.stat{background:#0e0e16;border:1px solid var(--line);border-radius:13px;padding:13px;text-align:center;}
.stat .n{font-size:22px;font-weight:800;font-family:var(--font-mono,inherit);font-variant-numeric:tabular-nums;}
.stat .n small{font-size:12px;color:var(--mut);font-weight:600;}
.stat .l{font-size:10px;color:var(--mut);text-transform:uppercase;letter-spacing:.6px;margin-top:3px;}
.big{background:var(--grad);border:0;}
.big .n,.big .l{color:#fff;}
.alert{display:flex;align-items:center;gap:10px;background:rgba(230,177,90,.12);border:1px solid rgba(230,177,90,.4);border-radius:13px;padding:12px 14px;margin-bottom:14px;}
.alert .dot{width:9px;height:9px;border-radius:50%;background:var(--warn);flex:none;box-shadow:0 0 8px var(--warn);}
.alert .t{font-size:13px;flex:1;}
.alert a{color:var(--warn);font-weight:700;font-size:13px;text-decoration:none;}
.goal{display:flex;align-items:center;gap:10px;padding:7px 0;border-bottom:1px solid #20202c;font-size:14px;}
.goal:last-child{border:0;}
.chk{width:20px;height:20px;border-radius:6px;border:1px solid var(--line);flex:none;display:flex;align-items:center;justify-content:center;font-size:12px;color:var(--good);}
.chk.on{background:rgba(91,214,160,.15);border-color:var(--good);}
.ex{border:1px solid var(--line);border-radius:14px;padding:13px;margin-bottom:12px;background:var(--card);}
.ex .name{font-weight:700;font-size:16px;}
/* A long exercise name is cut with an ellipsis and can be tapped to see all
   of it. The chevron is added by exNameScan() only when the name really is
   cut off on this screen, so a name that fits has nothing to tap and no
   decoration suggesting otherwise. */
.namewrap{display:flex;align-items:center;gap:4px;min-width:0;}
.namewrap .exname{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.namewrap .namemore{display:none;}
.namewrap.trunc{cursor:pointer;}
.namewrap.trunc .namemore{display:inline;flex:none;font-size:12px;color:var(--pur2);padding:2px 4px;}
/* Open: wrap onto as many lines as the name needs. A second tap closes it. */
.namewrap.open .exname{overflow:visible;text-overflow:clip;white-space:normal;word-break:break-word;}

.ex .presc{font-size:12px;color:var(--mut);margin:2px 0 10px;}
.srow{display:grid;grid-template-columns:22px 1fr 1fr 1.5fr 22px;gap:6px;align-items:center;margin-bottom:2px;}
.srow .sn{font-size:12px;color:var(--mut);}
/* The chat composer is sticky, but bottom:0 put it underneath the fixed
   bottom nav (z-index 200) - so once a thread was longer than one screen
   there was no visible way to type a reply at all. Lift it clear of the nav
   and sit above it. */
.chatcomposer{position:sticky;bottom:calc(64px + env(safe-area-inset-bottom,0px));background:var(--bg);padding:8px 0 6px;z-index:150;}
.prevline{font-size:11px;color:var(--mut);margin:0 0 9px 28px;}
/* Last session's numbers are tappable to fill the set in - so they have to
   look it, and be a real finger target between sets. */
.prevline.tappable{cursor:pointer;display:inline-flex;align-items:center;gap:6px;padding:5px 9px;margin:0 0 9px 24px;border:1px solid var(--line);border-radius:8px;min-height:30px;}
.prevline.tappable:active{background:var(--card2,#1b1b26);}
.prevline .uselast{font-size:9.5px;font-weight:800;letter-spacing:.8px;text-transform:uppercase;color:var(--pur2);border:1px solid var(--pur);border-radius:5px;padding:2px 5px;}
/* The coach's per-exercise cue, shown where the client is standing at the
   machine rather than only living in the builder. */
.excue{font-size:12px;line-height:1.5;color:var(--txt);background:rgba(123,95,208,.10);border-left:2px solid var(--pur);border-radius:0 8px 8px 0;padding:8px 10px;margin:2px 0 10px;}
/* Stays visible while scrolling through a longer session, so elapsed time
   and End don't require scrolling back to the top to find. */
.timerbar{position:sticky;top:0;z-index:5;}
/* A real tap target for the rest-timer trigger - it used to be bare inline
   text with no padding, the smallest control tied to a core workout action
   in the app. */
.resttimer{display:inline-flex;align-items:center;min-height:32px;padding:4px 10px;margin:-4px 0;background:transparent;border:1px solid var(--pur);border-radius:var(--radius-pill,20px);color:var(--pur2);font-size:12px;font-weight:700;cursor:pointer;font-family:var(--font-mono,inherit);font-variant-numeric:tabular-nums;}
.resttimer.done{color:var(--good);border-color:var(--good);}
/* Moved to the bottom of the exercise card and given a real, squarer tap
   target - the pill shape and 32px height were sized for a line of inline
   text, not for a button that's now a primary action on its own row. */
.resttimer.lg{flex:1;min-height:46px;padding:10px 14px;margin:0;border-radius:12px;font-size:14px;font-weight:800;justify-content:center;gap:6px;}
.vbtn{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:var(--pur2);text-decoration:none;font-weight:600;border:1px solid var(--pur);border-radius:8px;padding:5px 11px;white-space:nowrap;}
/* Demo button with no video behind it - present for every exercise, styled
   as clearly inert so it doesn't look like a dead link. */
.vbtn-off{background:transparent;color:var(--mut);border-color:var(--line);cursor:pointer;font:inherit;}
.swapbtn{display:inline-flex;align-items:center;gap:4px;flex:none;font-size:11px;font-weight:700;color:var(--pur2);border:1px solid var(--pur);border-radius:8px;padding:5px 9px;background:transparent;cursor:pointer;white-space:nowrap;}
.swapbtn:active{background:rgba(123,95,208,.15);}
/* Setup notes. Outlined until they have written something, filled after, so
   scanning down a session shows which exercises they have already noted.
   Matches .swapbtn deliberately - both are "open a panel about this one
   exercise", and two different shapes for the same kind of action is how a
   header row starts looking like a toolbar. */
.exnbtn{display:inline-flex;align-items:center;gap:4px;flex:none;font-size:11px;font-weight:700;color:var(--pur2);border:1px solid var(--pur);border-radius:8px;padding:5px 9px;background:transparent;cursor:pointer;white-space:nowrap;}
.exnbtn:active{background:rgba(123,95,208,.15);}
.exnbtn.on{background:var(--pur);color:#fff;border-color:var(--pur);}
/* Inside the panel: his words and theirs, told apart by label and colour
   rather than by position alone. */
.exn-lbl{font-size:10px;letter-spacing:.14em;text-transform:uppercase;font-weight:800;color:var(--pur2);margin-bottom:5px;}
.exn-coach{font-size:13.5px;line-height:1.55;color:var(--txt);background:rgba(123,95,208,.10);border-left:2px solid var(--pur);border-radius:0 10px 10px 0;padding:10px 12px;}
.exn-coach.exn-empty{color:var(--mut);background:transparent;border-left-color:var(--line);}
.exn-coach .exn-lbl{margin-bottom:4px;}

/* Bottom corner of the exercise card: rest timer on the left (now the
   biggest control on the card), the PR chip - bumped up from 11px - sitting
   right where a "bottom corner" badge should. */
.exbottom{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:10px;}
.prchip{font-size:13px;font-weight:800;color:var(--good);border:1px solid rgba(91,214,160,.4);border-radius:9px;padding:5px 11px;white-space:nowrap;flex:none;}
/* Shared bottom-sheet / centered-card overlay: one backdrop, two layouts.
   The swap picker and "video unavailable" notice use the sheet; the rest
   timer, wanting to be seen from across the room, gets the bigger centered
   card. Positioned to track the phone frame the same way <nav> does, so it
   still lines up on a wide desktop viewport instead of covering the browser
   chrome either side. */
.ov-backdrop{position:fixed;left:50%;top:0;transform:translateX(-50%);width:100%;max-width:412px;height:100%;background:rgba(0,0,0,.65);z-index:500;display:none;align-items:flex-end;justify-content:center;}
.ov-backdrop.show{display:flex;}
.ov-backdrop.center{align-items:center;}
.ov-sheet{width:100%;background:var(--card2,#1b1b26);border:1px solid var(--line);border-radius:20px 20px 0 0;padding:20px 18px calc(20px + env(safe-area-inset-bottom,0px));max-height:78vh;overflow:auto;color:var(--txt);}
.ov-card{width:calc(100% - 48px);max-width:320px;background:var(--card2,#1b1b26);border:1px solid var(--pur);border-radius:20px;padding:30px 22px;text-align:center;color:var(--txt);}
.swapopt{display:block;width:100%;text-align:left;background:#0e0e16;border:1px solid var(--line);color:var(--txt);border-radius:10px;padding:13px 14px;font-size:14px;font-weight:600;margin-bottom:8px;cursor:pointer;}
.swapopt:last-child{margin-bottom:0;}
.swapopt.sel{border-color:var(--pur);}
.swapcur{font-size:10px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;color:var(--pur2);}
.srow input{padding:8px;font-size:14px;text-align:center;font-family:var(--font-mono,inherit);font-variant-numeric:tabular-nums;}
/* the running/rest timers are the two purest "number as the whole point of
   the screen" moments in the app - the one place carrying the mono face at
   a larger, bolder size earns real attention. */
#wktimer{font-family:var(--font-mono,inherit);font-variant-numeric:tabular-nums;}
.badge{font-size:15px;text-align:center;font-weight:800;}
/* A lifetime best, typed live. Loud on purpose - it happens maybe once a
   fortnight per lift and is the clearest "you are winning" moment there is. */
.srow .badge.pr{font-size:10px;letter-spacing:.06em;color:#0b0b10;background:var(--good,#5BD6A0);border-radius:6px;padding:3px 5px;}
.up{color:var(--good);} .same{color:var(--mut);} .down{color:var(--bad);}
.subnav{display:flex;gap:8px;margin-bottom:14px;}
.subnav div{flex:1;text-align:center;padding:9px;border-radius:10px;background:var(--card);border:1px solid var(--line);font-size:13px;color:var(--mut);cursor:pointer;}
.subnav div.on{background:var(--grad);color:#fff;border:0;}
.vcat{font-size:12px;color:var(--pur2);text-transform:uppercase;letter-spacing:1px;font-weight:700;margin:14px 0 8px;}
.vid{display:flex;align-items:center;gap:12px;background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px;margin-bottom:8px;text-decoration:none;color:var(--txt);}
.vid .pl{width:34px;height:34px;border-radius:9px;background:var(--grad);display:flex;align-items:center;justify-content:center;flex:none;font-size:14px;}
.vid .vt{font-size:14px;font-weight:600;} .vid .vs{font-size:11px;color:var(--mut);}
.msg{text-align:center;color:var(--mut);font-size:13px;padding:8px;}
nav{position:fixed;bottom:0;left:50%;transform:translateX(-50%);width:100%;max-width:412px;display:flex;background:#000;border-top:1px solid #1e1e2a;z-index:200;padding-bottom:env(safe-area-inset-bottom,0px);box-shadow:0 -6px 20px rgba(0,0,0,.5);}
nav div{flex:1;text-align:center;padding:8px 2px 7px;font-size:10.5px;font-weight:600;color:var(--mut);cursor:pointer;letter-spacing:.2px;-webkit-tap-highlight-color:transparent;}
nav div.on{color:var(--pur2);}
nav div .i{display:flex;justify-content:center;height:24px;margin-bottom:2px;position:relative;}
nav div .i svg{display:block;}
nav div.on .i svg{stroke-width:2.2;}
/* Unread-message count on the Chat tab. A coach message was invisible in the
   app itself - the only signal was a push, and a dismissed push is gone. */
nav div .i .nbdot{position:absolute;top:-2px;right:-10px;min-width:15px;height:15px;padding:0 4px;
  border-radius:8px;background:var(--bad,#E05C5C);color:#fff;font-size:9px;font-weight:700;
  line-height:15px;text-align:center;font-family:var(--mono,inherit);letter-spacing:0;}
nav div .i .nbdot:empty{display:none;}
.hide{display:none;}
a.link{color:var(--pur2);}
h2.login-t{font-size:14px;letter-spacing:3px;color:var(--mut);text-align:center;font-weight:600;margin:4px 0 22px;}

/* ---- Self-guided screens (merged in from the standalone program app) ----
   The upgrade banner and the blurred preview behind it are how the program
   app sold coaching; they have no equivalent on the coaching screens, so
   they come across rather than being reused from something existing. .daycol
   is the small label/value list the macro calculator prints its results in. */
.lockbanner{background:linear-gradient(135deg,#2a1f42,#1a1526);border:1px solid var(--pur);border-radius:14px;padding:14px;margin-bottom:14px;cursor:pointer;}
.lockbanner .t{color:var(--pur2);font-weight:800;font-size:14px;}
.lockbanner .s{color:var(--mut);font-size:12px;margin-top:3px;}
.locked{filter:blur(3px);opacity:.5;pointer-events:none;user-select:none;}
.daycol .r2{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #20202c;font-size:14px;}
/* First-visit tours (tour.js). The hole's huge shadow is the dimmed screen;
   the pop-up sits beside whatever is lit. Above everything, nav included. */
#tour{position:fixed;inset:0;z-index:9999;}
#tour.tour-center{background:rgba(4,4,8,.74);}
#tour .tour-hole{position:fixed;border-radius:14px;box-shadow:0 0 0 2px var(--pur2),0 0 0 9999px rgba(4,4,8,.74);pointer-events:none;transition:top .15s ease,left .15s ease,width .15s ease,height .15s ease;}
#tour .tour-tip{position:fixed;background:var(--card2);border:1px solid var(--pur);border-radius:16px;padding:16px 16px 12px;color:var(--txt);box-shadow:0 12px 40px rgba(0,0,0,.55);font-family:var(--font-body,inherit);transition:top .15s ease,left .15s ease;}
#tour .tour-count{font-family:var(--font-mono,monospace);font-size:11px;color:var(--pur2);letter-spacing:1px;margin-bottom:4px;min-height:14px;}
#tour .tour-title{font-size:17px;font-weight:800;line-height:1.25;margin-bottom:6px;}
#tour .tour-text{font-size:14px;line-height:1.55;color:#d2d2e0;}
#tour .tour-btns{display:flex;align-items:center;gap:8px;margin-top:14px;}
#tour .tour-btns button{font:inherit;font-size:14px;font-weight:700;border-radius:10px;cursor:pointer;min-height:44px;}
#tour .tour-skip{background:none;border:0;color:var(--mut);padding:0 4px;font-weight:600!important;}
#tour .tour-back{background:#0e0e16;border:1px solid var(--line);color:var(--txt);padding:0 14px;}
#tour .tour-next{background:var(--grad);border:0;color:#fff;padding:0 20px;}
#tour button:focus-visible{outline:2px solid var(--pur2);outline-offset:2px;}
@media (prefers-reduced-motion:reduce){#tour .tour-hole,#tour .tour-tip{transition:none;}}

/* ===== Meals: weekly planner (mealweek.js) ===== */
.mw-lead{font-size:14px;line-height:1.55;color:var(--txt);}
.mw-note{font-size:12px;color:var(--mut);line-height:1.5;margin-top:8px;}
.mw-skel{height:14px;border-radius:7px;background:linear-gradient(90deg,#1b1b26,#262636,#1b1b26);background-size:200% 100%;animation:mwsk 1.2s infinite;margin-top:10px;}
.mw-skel.short{width:60%;}
@keyframes mwsk{0%{background-position:200% 0}100%{background-position:-200% 0}}
.mw-tgt{display:grid;grid-template-columns:58px repeat(4,1fr);gap:6px;align-items:center;font-size:10px;color:var(--mut);text-transform:uppercase;letter-spacing:.4px;text-align:center;}
.mw-tgt input{padding:10px 4px;text-align:center;font-family:var(--font-mono,inherit);font-size:15px;}
.mw-tgt .pill{padding:4px 8px;font-size:10px;}
.mw-days{display:flex;gap:5px;}
.mw-days .daypick{min-width:0;padding:11px 0;}
.mw-seg{display:flex;gap:6px;}
.mw-seg button{flex:1;min-height:44px;border-radius:10px;border:1px solid var(--line);background:#0e0e16;color:var(--mut);font-size:15px;font-weight:700;font-family:var(--font-mono,inherit);cursor:pointer;}
.mw-seg button.on{background:var(--grad);color:#fff;border-color:transparent;}
.mw-chips{display:flex;flex-wrap:wrap;gap:7px;}
.mw-chip{min-height:38px;padding:8px 14px;border-radius:20px;border:1px solid var(--line);background:#0e0e16;color:var(--mut);font-size:13px;font-weight:600;cursor:pointer;font-family:inherit;}
.mw-chip.on{background:var(--grad);color:#fff;border-color:transparent;}
.mw-tabs{display:flex;gap:4px;padding:4px;background:var(--card);border:1px solid var(--line);border-radius:14px;margin-bottom:14px;position:sticky;top:0;z-index:20;}
.mw-tabs button{flex:1;min-height:42px;border:0;border-radius:10px;background:transparent;color:var(--mut);font-size:14px;font-weight:700;font-family:inherit;cursor:pointer;}
.mw-tabs button.on{background:var(--grad);color:#fff;}
.mw-strip{display:flex;gap:4px;margin-bottom:12px;}
.mw-strip button{flex:1;min-width:0;min-height:52px;border-radius:12px;border:1px solid var(--line);background:#0e0e16;color:var(--mut);font-size:12px;font-weight:700;font-family:inherit;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;padding:0;}
.mw-strip button.today{border-color:var(--pur);}
.mw-strip button.on{background:var(--grad);color:#fff;border-color:transparent;}
.mw-strip i{width:6px;height:6px;border-radius:50%;}
.mw-strip i.tr{background:var(--good);}
.mw-strip i.rs{background:rgba(255,255,255,.18);}
.mw-dayhead{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:12px;}
.mw-dayname{font-size:20px;font-weight:700;}
.mw-bars3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;margin-top:10px;}
.mw-bar-l{display:flex;justify-content:space-between;align-items:baseline;font-size:11px;color:var(--mut);margin-bottom:5px;gap:4px;}
.mw-bar-l b{font-family:var(--font-mono,inherit);font-size:14px;color:var(--txt);font-weight:600;white-space:nowrap;}
.mw-bar-l small{color:var(--mut);font-weight:400;font-size:11px;}
.mw-bars3 .mw-bar-l{flex-direction:column;align-items:flex-start;}
.mw-bar-t{height:6px;border-radius:3px;background:#0e0e16;overflow:hidden;}
.mw-bar-t i{display:block;height:100%;background:var(--grad);border-radius:3px;}
.mw-slot{margin-bottom:6px;}
.mw-slot-h{display:flex;justify-content:space-between;align-items:center;padding:0 4px 8px;font-size:12px;color:var(--pur2);text-transform:uppercase;letter-spacing:1.3px;font-weight:700;}
.mw-slot-h small{color:var(--mut);text-transform:none;letter-spacing:0;font-weight:500;margin-left:4px;}
.mw-ab{display:flex;gap:4px;background:#0e0e16;border:1px solid var(--line);border-radius:10px;padding:3px;}
.mw-ab button{min-width:44px;min-height:34px;border:0;border-radius:7px;background:transparent;color:var(--mut);font-weight:700;font-size:13px;font-family:inherit;cursor:pointer;}
.mw-ab button.on{background:var(--pur);color:#fff;}
.mw-meal{display:flex;align-items:center;gap:12px;padding:10px;cursor:pointer;margin-bottom:10px;}
.mw-meal.mw-plain{cursor:default;padding:14px;}
.mw-ph{width:78px;height:78px;border-radius:12px;overflow:hidden;flex:none;background:#0e0e16;}
.mw-ph.sm{width:56px;height:56px;border-radius:10px;}
.mw-ph img,.mw-sheet-ph img{width:100%;height:100%;object-fit:cover;display:block;}
.mw-noimg{display:flex;align-items:center;justify-content:center;}
.mw-noimg span{font-size:24px;font-weight:700;color:rgba(255,255,255,.55);}
.mw-meal-b{flex:1;min-width:0;}
.mw-meal-n{font-weight:700;font-size:15px;line-height:1.3;}
.mw-mac{display:block;font-size:12px;color:var(--mut);margin-top:3px;font-family:var(--font-mono,inherit);}
.mw-mac b{color:var(--txt);font-weight:600;}
.mw-tag{display:inline-block;margin-top:6px;font-size:11px;font-weight:700;padding:3px 8px;border-radius:6px;}
.mw-tag.ck{background:rgba(142,111,224,.16);color:var(--pur2);}
.mw-tag.fr{background:rgba(91,214,160,.13);color:var(--good);}
.mw-chev{color:var(--mut);font-size:22px;padding:0 4px;transition:transform .15s;}
.mw-chev.open{transform:rotate(90deg);}
.mw-sheet-ph{height:170px;border-radius:14px;overflow:hidden;margin-bottom:12px;background:#0e0e16;}
.mw-sheet-n{font-size:19px;font-weight:700;line-height:1.3;}
.mw-allg{margin-top:10px;font-size:12px;color:var(--warn);background:rgba(230,177,90,.1);border:1px solid rgba(230,177,90,.3);border-radius:8px;padding:7px 10px;}
.mw-ings{border-top:1px solid var(--line);}
.mw-ing{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px;}
.mw-ing small{color:var(--mut);font-size:12px;}
.mw-ing b{font-family:var(--font-mono,inherit);font-weight:500;white-space:nowrap;text-align:right;}
.mw-steps{padding-left:20px;margin:0;font-size:14px;line-height:1.55;}
.mw-steps li{margin-bottom:8px;}
.mw-cookday{margin-bottom:18px;}
.mw-cookday-h{display:flex;justify-content:space-between;align-items:center;padding:0 4px 10px;}
.mw-cookday-h b{display:block;font-size:17px;}
.mw-cookday-h span{font-size:12px;color:var(--mut);}
.mw-count{font-family:var(--font-mono,inherit);font-size:13px;color:var(--pur2);background:rgba(142,111,224,.14);border-radius:8px;padding:4px 9px;}
.mw-cook{padding:10px;}
.mw-cook-top{display:flex;align-items:center;gap:12px;cursor:pointer;}
.mw-cook-amt{font-size:13px;margin-top:3px;}
.mw-cook-amt b{color:var(--pur2);}
.mw-cook-more{padding:0 4px 4px;}
.mw-shop-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;}
.mw-aisle{margin-bottom:12px;}
.mw-aisle-h{font-size:12px;color:var(--pur2);text-transform:uppercase;letter-spacing:1.3px;font-weight:700;padding:0 4px 8px;}
.mw-aisle-h small{color:var(--mut);text-transform:none;letter-spacing:0;font-weight:500;}
.mw-shop{padding:4px 12px;}
.mw-shop-i{display:flex;align-items:center;gap:11px;width:100%;min-height:48px;background:none;border:0;border-bottom:1px solid var(--line);color:var(--txt);font-size:14px;text-align:left;font-family:inherit;cursor:pointer;padding:8px 0;}
.mw-shop-i:last-child{border-bottom:0;}
.mw-shop-n{flex:1;}
.mw-shop-i b{font-family:var(--font-mono,inherit);font-weight:500;color:var(--mut);white-space:nowrap;}
.mw-shop-i.on .mw-shop-n{text-decoration:line-through;color:var(--mut);}
.mw-foot{text-align:center;padding:6px 0 10px;}
.mw-link{background:none;border:0;color:var(--pur2);font-size:14px;font-weight:600;font-family:inherit;cursor:pointer;padding:10px;min-height:44px;}
.mw-dayhead .pill{white-space:nowrap;}
/* "Add to your home screen" pop-up (install.js). Above everything. */
#a2hs{position:fixed;inset:0;z-index:10000;background:rgba(4,4,8,.78);display:flex;align-items:flex-end;justify-content:center;padding:16px;padding-bottom:max(16px,env(safe-area-inset-bottom,0px));overflow-y:auto;}
@media (min-height:700px){#a2hs{align-items:center;}}
#a2hs .a2hs-card{width:100%;max-width:400px;background:var(--card2);border:1px solid var(--pur);border-radius:18px;padding:18px 18px 14px;color:var(--txt);box-shadow:0 16px 48px rgba(0,0,0,.6);font-family:var(--font-body,inherit);}
#a2hs .a2hs-head{display:flex;align-items:center;gap:12px;margin-bottom:10px;}
#a2hs .a2hs-app{width:48px;height:48px;border-radius:12px;flex-shrink:0;border:1px solid var(--line);}
#a2hs .a2hs-kick{font-size:11px;font-weight:800;letter-spacing:1.5px;color:var(--pur2);}
#a2hs .a2hs-title{font-size:18px;font-weight:800;line-height:1.25;}
#a2hs .a2hs-lead{font-size:14px;line-height:1.55;color:#d2d2e0;margin-bottom:12px;}
#a2hs .a2hs-steps{list-style:none;margin:0 0 4px;padding:0;display:flex;flex-direction:column;gap:8px;}
#a2hs .a2hs-step{display:flex;align-items:center;gap:10px;background:#0e0e16;border:1px solid var(--line);border-radius:12px;padding:10px 12px;font-size:14px;line-height:1.45;}
#a2hs .a2hs-n{width:24px;height:24px;border-radius:50%;background:var(--grad);color:#fff;font-family:var(--font-mono,monospace);font-size:12px;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
#a2hs .a2hs-st{flex:1;}
#a2hs .a2hs-ic{color:var(--pur2);display:flex;flex-shrink:0;}
#a2hs .a2hs-note{font-size:12.5px;line-height:1.5;color:var(--mut);margin-top:10px;}
#a2hs .a2hs-install{margin-bottom:6px;}
#a2hs .a2hs-or{font-size:12px;color:var(--mut);text-align:center;margin:6px 0 8px;}
#a2hs .a2hs-btns{display:flex;align-items:center;gap:8px;margin-top:14px;}
#a2hs .a2hs-later{background:none;border:0;color:var(--mut);font:inherit;font-size:14px;font-weight:600;min-height:44px;padding:0 4px;cursor:pointer;}
#a2hs .a2hs-done{width:auto;flex:1;min-height:44px;}
#a2hs button:focus-visible{outline:2px solid var(--pur2);outline-offset:2px;}

/* ---- One-link sign-up (start.html) and Account & billing (Oct 2026) ---- */
.st-p{color:var(--mut);font-size:14px;line-height:1.6;margin:0 0 10px;}
.st-p b{color:var(--txt);}
.st-small{color:var(--mut);font-size:12px;line-height:1.5;margin-top:12px;}
.st-q{border-top:1px solid var(--line);padding:14px 0 4px;}
.st-q:first-of-type{border-top:0;}
.st-qt{font-size:14px;line-height:1.5;color:var(--txt);margin-bottom:10px;}
.st-qt .st-n{color:var(--pur2);font-weight:700;margin-right:4px;}
.st-yn{display:flex;gap:8px;}
.st-yn button{flex:1;min-height:44px;border-radius:10px;border:1px solid var(--line);background:#0e0e16;color:var(--mut);font-size:14px;font-weight:700;cursor:pointer;}
.st-yn button.on{background:var(--grad);color:#fff;border-color:transparent;}
.st-help{margin-top:8px;font-size:12px;color:var(--mut);line-height:1.5;}
.st-help summary{cursor:pointer;color:var(--pur2);font-weight:600;min-height:32px;display:flex;align-items:center;}
.st-tick{display:flex;align-items:flex-start;gap:10px;font-size:14px;color:var(--txt);line-height:1.5;margin:14px 0 4px;letter-spacing:0;}
.st-tick input{width:22px;height:22px;flex:0 0 22px;margin-top:2px;}
.st-tbl{width:100%;border-collapse:collapse;font-size:13px;margin-top:6px;}
.st-tbl th,.st-tbl td{padding:6px 4px;text-align:left;border-bottom:1px solid var(--line);vertical-align:middle;}
.st-tbl th{color:var(--mut);font-weight:600;font-size:12px;}
.st-tbl input{padding:9px;font-size:16px;}
.st-total{font-family:var(--font-mono,monospace);font-size:20px;font-weight:600;color:var(--txt);}
.st-steps{padding-left:20px;margin:6px 0 12px;color:var(--mut);font-size:14px;line-height:1.6;}
.st-steps b{color:var(--txt);}
.st-urgent{border:1px solid var(--bad,#E06B6B);border-radius:12px;padding:12px;font-size:14px;color:var(--txt);margin:12px 0;}
.st-row{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px;}
.st-row span{color:var(--mut);}
.st-row b{text-align:right;}
.st-sex{display:flex;gap:8px;}
.st-sex label{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;min-height:44px;margin:0;border:1px solid var(--line);border-radius:10px;font-size:14px;color:var(--txt);cursor:pointer;}
.st-sex input{width:auto;}
.ik-sec{font-size:12px;color:var(--pur2);text-transform:uppercase;letter-spacing:1px;font-weight:700;margin:4px 0 2px;}
.ik-q{padding:10px 0 4px;border-top:1px solid var(--line);}
.ik-q:first-of-type{border-top:0;}
.ik-q .st-n{color:var(--pur2);font-weight:700;margin-right:4px;}
.ik-pair{display:flex;gap:8px;}
.ik-pair > *{flex:1;}
.ik-miss{outline:2px solid var(--bad,#E06B6B);outline-offset:4px;border-radius:8px;}

/* ---- Photo tiles (Nov 2026) ----
   Three tappable squares in place of the browser's grey "Choose file"
   buttons: a camera until a photo is picked, then the photo itself. */
.ptiles{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.ptile{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;aspect-ratio:3/4;border:1.5px dashed #3a3a4e;border-radius:var(--radius-md,12px);background:#0e0e16;color:var(--mut);cursor:pointer;overflow:hidden;margin:0;font-weight:600;letter-spacing:0;}
.ptile input{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none;}
.ptile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:none;}
.ptile.has{border-style:solid;border-color:var(--pur);}
.ptile.has img{display:block;}
.ptile.has .ptile-ic{display:none;}
.ptile-l{position:relative;font-size:12px;}
.ptile.has .ptile-l{position:absolute;left:6px;bottom:6px;background:rgba(0,0,0,.65);color:#fff;border-radius:6px;padding:2px 7px;}
.ptile:focus-within{outline:2px solid var(--pur2);outline-offset:2px;}
.ptile.vid{aspect-ratio:auto;min-height:96px;flex-direction:row;}

/* ---- Bottom sheet (starting photos pop-up, demo player) ---- */
.sheet-wrap{position:fixed;inset:0;z-index:400;background:rgba(0,0,0,.6);display:flex;align-items:flex-end;justify-content:center;animation:sheetFade .18s ease-out;}
.sheet{width:100%;max-width:412px;max-height:92vh;overflow-y:auto;background:var(--card,#15151e);border:1px solid var(--line);border-bottom:0;border-radius:20px 20px 0 0;padding:10px 18px calc(18px + env(safe-area-inset-bottom,0px));animation:sheetUp .22s cubic-bezier(.2,.8,.2,1);}
.sheet-grab{width:38px;height:4px;border-radius:2px;background:#3a3a4e;margin:0 auto 14px;}
.sheet-t{font-size:18px;font-weight:700;margin-bottom:8px;}
.sheet-later{display:block;width:100%;margin-top:10px;background:none;border:0;color:var(--mut);font-size:14px;padding:10px;cursor:pointer;}
@keyframes sheetUp{from{transform:translateY(40px);opacity:.4;}to{transform:none;opacity:1;}}
@keyframes sheetFade{from{opacity:0;}to{opacity:1;}}
@media (prefers-reduced-motion:reduce){.sheet,.sheet-wrap{animation:none;}}

/* Home's link into the guide library (the Vault left the tab bar). */
.linkcard{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--txt);cursor:pointer;}
.linkcard .lc-ic{width:40px;height:40px;border-radius:11px;background:rgba(142,111,224,.14);color:var(--pur2);display:flex;align-items:center;justify-content:center;flex:none;}
.linkcard .lc-t{font-weight:700;font-size:15px;} .linkcard .lc-s{color:var(--mut);font-size:12.5px;margin-top:1px;}
.linkcard .lc-go{margin-left:auto;color:var(--mut);display:flex;}
.backlink{display:inline-flex;align-items:center;gap:2px;color:var(--mut);font-size:13px;text-decoration:none;margin:-4px 0 10px -4px;}

/* ---- Workout: overview, then one exercise at a time (Nov 2026) ---- */
.wkhead{padding:12px;}
.daychips{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:0 -2px 12px;padding:0 2px;}
.daychips::-webkit-scrollbar{display:none;}
.daychip{flex:none;padding:8px 14px;border-radius:var(--radius-pill,999px);border:1px solid var(--line);background:#0e0e16;color:var(--mut);font:inherit;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap;}
.daychip.on{background:var(--grad);color:#fff;border-color:transparent;}
#wk_start{display:flex;align-items:center;justify-content:center;gap:8px;}
.wktimer{display:flex;justify-content:space-between;align-items:center;}
.wk-kick{font-size:10px;color:var(--pur2);letter-spacing:1.5px;font-weight:800;}
#wktimer{font-size:28px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums;}
.wkstep,.wk.mode-focus .wklist,.wk.mode-list .wkbar{display:none;}
.wk.mode-focus .wkstep.cur{display:block;}
.wkbar{position:sticky;top:0;z-index:6;display:flex;align-items:center;gap:8px;margin:0 0 12px;padding:8px;background:rgba(10,10,15,.92);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:14px;}
.wk.mode-focus .wkbar{display:flex;}
.wkbar-b{width:44px;height:44px;flex:none;display:flex;align-items:center;justify-content:center;border-radius:11px;border:1px solid var(--line);background:#0e0e16;color:var(--txt);cursor:pointer;}
.wkbar-m{flex:1;display:flex;flex-direction:column;align-items:center;gap:1px;background:none;border:0;color:var(--txt);font:inherit;cursor:pointer;padding:2px;}
#wkbar_t{font-weight:700;font-size:15px;}
.wkbar-s{display:inline-flex;align-items:center;gap:4px;color:var(--mut);font-size:11.5px;}
.wkbar-s svg{width:14px;height:14px;}
.wkrow{display:flex;align-items:center;gap:12px;width:100%;text-align:left;background:none;border:0;border-top:1px solid var(--line);padding:10px 0;color:var(--txt);font:inherit;cursor:pointer;}
.wklist .h + .wkrow{border-top:0;}
.wkrow-t{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.wkrow-n{font-weight:700;font-size:14.5px;line-height:1.3;}
.wkrow-p{color:var(--mut);font-size:12.5px;}
.wkrow-done{flex:none;color:var(--mut);font-size:12px;font-family:var(--font-mono,inherit);}
.wk-tick{display:inline-flex;width:24px;height:24px;border-radius:50%;background:var(--good,#5BD6A0);color:#0b0b10;align-items:center;justify-content:center;}
.wkrow-fin{color:var(--pur2);}
.sstag{font-size:9.5px;letter-spacing:1px;color:var(--pur2);border:1px solid var(--pur);border-radius:5px;padding:1px 4px;vertical-align:2px;}
.vthumb{position:relative;flex:none;display:flex;align-items:center;justify-content:center;overflow:hidden;background:#1a1a26;color:var(--mut);cursor:pointer;}
.vthumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}
.vthumb-p{position:relative;display:flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;background:rgba(0,0,0,.55);color:#fff;}
.vthumb-sm{width:56px;height:56px;border-radius:10px;}
.vthumb-sm .vthumb-p{width:24px;height:24px;}
.vthumb-sm .vthumb-p svg{width:12px;height:12px;}
.vthumb-lg{display:none;}
.wk.mode-focus .vthumb-lg{display:flex;width:100%;aspect-ratio:16/9;border-radius:12px;margin:-2px 0 12px;}
.wk.mode-focus .vthumb-lg.none{display:none;}
.vthumb-lg .vthumb-p{width:54px;height:54px;}
.vthumb.none{cursor:default;}
.demo-frame{position:relative;width:100%;aspect-ratio:16/9;border-radius:12px;overflow:hidden;background:#000;}
.demo-frame.tall{aspect-ratio:9/16;max-height:68vh;width:auto;margin:0 auto;}
.demo-frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0;}
.ssbox{border:1px solid var(--pur);border-radius:14px;padding:10px 10px 4px;margin-bottom:12px;background:rgba(123,95,208,.07);}
.sshead{font-size:11px;color:var(--pur2);font-weight:800;letter-spacing:1.5px;margin-bottom:4px;}
.sshead span{font-weight:600;letter-spacing:.3px;}
.wknext{display:flex;align-items:center;justify-content:center;gap:6px;margin:4px 0 14px;}
.hsc-link{display:inline-flex;align-items:center;gap:6px;margin-top:10px;background:none;border:0;color:var(--pur2);font:inherit;font-size:13px;font-weight:600;cursor:pointer;padding:6px 0;}
.hsc-link svg{width:18px;height:18px;}
.hsc-entry .btn{display:flex;align-items:center;justify-content:center;gap:8px;}
.hsc-entry .btn svg{width:20px;height:20px;}
select.rir{text-align:center;font-family:var(--font-mono,inherit);}

/* Hard-set check: the reps-left chips and the video picker. */
.hsc-chips{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;}
.hsc-chip{min-height:46px;border-radius:11px;border:1px solid var(--line);background:#0e0e16;color:var(--txt);font-family:var(--font-mono,inherit);font-size:16px;font-weight:600;cursor:pointer;}
.hsc-chip.on{background:var(--grad);border-color:transparent;color:#fff;}
.ptile.vid.has-file{border-style:solid;border-color:var(--pur);color:var(--txt);}
.ptile.vid .ptile-l{max-width:70%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.srow.shead{margin-bottom:4px;font-size:10.5px;color:var(--mut);letter-spacing:.4px;text-transform:uppercase;text-align:center;}
.wk.mode-focus .vthumb-lg.nothumb{aspect-ratio:auto;height:52px;justify-content:flex-start;gap:10px;padding:0 12px;}
.vthumb-lg.nothumb .vthumb-p{width:32px;height:32px;background:var(--grad);}
.vthumb-w{position:relative;color:var(--txt);font-weight:600;font-size:14px;}
.sheet-t{color:var(--txt);}

/* ---- Progress screen ---- */
.pg-more{display:flex;align-items:center;gap:6px;margin-top:12px;color:var(--pur2);font-size:13px;font-weight:600;text-decoration:none;}
.pg-more svg:first-child{width:16px;height:16px;}
.pg-more svg:last-child{width:16px;height:16px;margin-left:auto;}
.pg-hist{color:var(--pur2);font-size:12px;letter-spacing:.3px;text-transform:none;font-weight:600;text-decoration:none;}
.pg-streak{display:flex;align-items:center;justify-content:center;gap:4px;color:#F2A65A;}
.pg-streak svg{width:20px;height:20px;}
.pg-cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;}
.pg-cal-head .wkbar-b{width:36px;height:36px;}
.pg-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center;}
.pg-dow{font-size:10.5px;color:var(--mut);padding-bottom:4px;}
.pg-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:50%;font-size:12.5px;color:var(--mut);font-family:var(--font-mono,inherit);}
.pg-day.on{background:var(--grad);color:#fff;font-weight:600;}
.pg-day.today{box-shadow:inset 0 0 0 1.5px var(--pur2);}
.pg-chart{width:100%;height:auto;margin-top:12px;}
.pg-ax{fill:var(--mut);font-size:10px;font-family:var(--font-mono,monospace);}
.pg-lift-foot{display:flex;flex-direction:column;gap:3px;font-size:12.5px;color:var(--mut);margin-top:6px;}

/* ---- Free-trial quiz (selfguided-trial.js) ---- */
.tq-chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:4px;}
.tq-chips .daychip{flex:0 1 auto;}
.tq-unit{position:relative;}
.tq-unit input{padding-right:38px;}
.tq-unit span{position:absolute;right:12px;top:50%;transform:translateY(-50%);color:var(--mut);font-size:12px;pointer-events:none;}
.tq-acts{display:flex;flex-direction:column;gap:6px;}
.tq-act{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;padding:10px 12px;border-radius:12px;border:1px solid var(--line);background:#0e0e16;color:var(--txt);font:inherit;cursor:pointer;}
.tq-act span{color:var(--mut);font-size:12px;}
.tq-act.on{border-color:var(--pur);background:rgba(142,111,224,.14);}
.tq-days{margin:8px 0 0;padding-left:18px;font-size:14px;line-height:1.7;}

/* ---- set types, runs and cardio (Nov 2026) ---- */
/* A row inside a technique (a drop, a pause, a mini-set): indented a touch
   and quieter, so the working set still reads as the main event. */
.srow.ssub .sn{color:var(--pur2);font-size:11px;font-weight:700;}
.srow.ssub input{background:#0c0c14;}
.rir-none{text-align:center;color:var(--mut);font-size:12px;}
.exhow{font-size:12px;line-height:1.5;color:var(--mut);margin:-4px 0 10px;}
.cdtag{flex:none;font-size:9.5px;font-weight:800;letter-spacing:1px;color:var(--pur2);border:1px solid var(--pur);border-radius:5px;padding:1px 5px;}
.cdthumb{flex:none;width:56px;height:56px;border-radius:10px;background:#1a1a26;color:var(--pur2);display:flex;align-items:center;justify-content:center;font-size:22px;}
.cdgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px 12px;margin:6px 0 8px;}
.cdgrid label{display:flex;flex-direction:column;gap:4px;font-size:11px;color:var(--mut);letter-spacing:.3px;margin:0;}
.cdgrid input,.cdgrid select{padding:10px 8px;font-size:15px;text-align:center;font-family:var(--font-mono,inherit);font-variant-numeric:tabular-nums;min-height:44px;}
.cdtime{display:flex;align-items:center;gap:4px;}
.cdtime input{flex:1;min-width:0;padding:10px 6px;font-size:15px;text-align:center;font-family:var(--font-mono,inherit);min-height:44px;}
.cdtime b{color:var(--mut);}
.cdpace{font-size:13px;color:var(--good,#5BD6A0);font-family:var(--font-mono,inherit);min-height:18px;margin:0 0 6px;}
.cdreps{display:flex;flex-direction:column;gap:6px;margin:6px 0 8px;}
.cdrep{display:grid;grid-template-columns:22px 64px 1fr 74px;gap:8px;align-items:center;}
.cdrep .sn{font-size:12px;color:var(--mut);}
.cdrep .cdlab{font-size:12px;color:var(--mut);font-family:var(--font-mono,inherit);}
.cdrep > input{padding:10px 6px;font-size:15px;text-align:center;font-family:var(--font-mono,inherit);min-height:44px;}
.cdrep .cdpace{margin:0;font-size:12px;text-align:right;}
