:root{color-scheme:dark;--bg:#101514;--card:#19211f;--line:#34413b;--text:#f1f2e9;--muted:#a5b2a8;--accent:#d9eb8b;--gold:#dfbf77}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:17px/1.55 system-ui,sans-serif}:where(button,input,select,textarea){font-size:15px}header{max-width:1360px;margin:auto;padding:24px 36px;display:flex;gap:24px;align-items:center;border-bottom:1px solid var(--line)}header #gym-name{flex:1;color:var(--muted);font-size:15px}.brand{font-weight:900;color:var(--gold);text-decoration:none;font-size:26px;letter-spacing:-1px}.brand span{font-size:13px;letter-spacing:3px;margin-left:15px;color:var(--text)}main{max-width:1200px;margin:0 auto;padding:25px 30px 80px}h1{font-size:clamp(35px,4vw,53px);line-height:1.12;letter-spacing:-1.7px;margin:8px 0 16px}h2{font-size:26px;letter-spacing:-.6px;margin:0 0 15px}h3{font-size:21px;margin:0 0 5px}p{margin:8px 0 16px}.eyebrow{font-size:12px;font-weight:800;letter-spacing:2.5px;color:var(--accent);margin:0}.muted,small{color:var(--muted)}small{font-size:14px}a{color:var(--accent)}button,.quiet{cursor:pointer;border:1px solid var(--line);border-radius:8px;background:var(--btn,#222d27);color:var(--text);padding:11px 16px;font:inherit;font-size:15px;font-weight:650;text-decoration:none;min-height:44px}button:hover{border-color:var(--accent)}button:disabled{opacity:.5;cursor:wait}.primary{background:var(--accent);color:#192015;border-color:var(--accent)}.quiet{background:transparent}.danger{color:#ffb4a7}.page-heading,.section-heading{display:flex;justify-content:space-between;align-items:center;gap:20px;margin:26px 0}.stat{border-left:1px solid var(--line);padding:0 20px;color:var(--muted);white-space:nowrap}.stat strong{display:block;font-size:37px;color:var(--accent);line-height:1.2}nav{display:flex;gap:25px;border-bottom:1px solid var(--line);margin:30px 0}nav button{border:0;border-radius:0;background:none;color:var(--muted);padding:12px 3px;border-bottom:2px solid transparent}nav .active{color:var(--accent);border-color:var(--accent)}.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:24px;margin-bottom:18px}.cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px}.cards .card{margin:0}.tag{display:inline-block;border:1px solid var(--line);border-radius:30px;padding:3px 10px;font-size:13px;color:var(--accent)}.workout-title{border-left:3px solid var(--accent);padding-left:20px}.exercise{margin-top:18px}.exercise-head{display:flex;justify-content:space-between;align-items:flex-start;gap:15px}.set-row{display:grid;grid-template-columns:35px repeat(var(--cols,3),minmax(0,1fr)) 60px;align-items:center;gap:10px;padding:9px 0;border-top:1px solid var(--line)}.set-row.labels{font-size:13px;color:var(--muted);border:0;padding-top:16px}.set-row input{min-width:0}.set-row input[type=number]{max-width:170px}.set-row label{margin:0}.set-row input[type=checkbox]{width:22px;height:22px;accent-color:var(--accent)}input,select,textarea{display:block;width:100%;max-width:100%;padding:11px 12px;border:1px solid var(--field-line,#5d6861);border-radius:7px;background:var(--field,#111a15);color:var(--text);font:inherit;min-height:44px}textarea{resize:vertical;min-height:90px}label{display:block;font-size:14px;color:var(--muted);margin:12px 0}label input,label select,label textarea{margin-top:5px}input:focus,button:focus-visible,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:2px}.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:16px}.save-bar{position:sticky;bottom:0;background:var(--savebar,#19211ff5);border:1px solid var(--line);border-radius:10px;padding:14px;display:flex;flex-wrap:wrap;align-items:center;gap:12px;z-index:2}.save-bar span{flex:1;font-size:14px;min-width:140px}.auth{max-width:460px;margin:65px auto}.auth .primary{width:100%;margin-top:14px}.coach-grid{display:grid;grid-template-columns:290px minmax(0,1fr);gap:22px}.roster-item{width:100%;text-align:left;display:block;margin:8px 0;background:transparent}.roster-item.selected{border-color:var(--accent);background:var(--selected,#293522)}.builder{margin-top:30px}.editor-session{border-top:1px solid var(--line);padding-top:20px;margin-top:25px}.editor-exercise{background:var(--field,#111a15);padding:15px;border-radius:9px;margin:14px 0}.editor-fields{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.editor-fields label{margin:0}.split{display:grid;grid-template-columns:1fr 1fr;gap:14px}.history-item{border-top:1px solid var(--line);padding:16px 0}.history-item summary{cursor:pointer;min-height:44px}.history-line{font-size:15px;padding:7px 0}.history-line strong{color:var(--accent)}.bars{display:flex;flex-direction:column;gap:12px}.chart-axis{display:flex;justify-content:space-between;gap:10px;font-size:14px;color:var(--muted);margin-top:6px}.bar-row{display:grid;grid-template-columns:120px minmax(20px,1fr) 55px;align-items:center;gap:12px;font-size:14px}.bar-track{height:14px;background:var(--track,#26332b);border-radius:3px;overflow:hidden}.bar-fill{height:100%;background:var(--accent)}#notice:not(:empty){padding:14px 18px;background:var(--noticebg,#343323);border:1px solid var(--gold);border-radius:8px;margin-bottom:20px}#demo-banner{padding:10px 20px;text-align:center;background:#d9eb8b;color:#1a2516;font-size:14px;font-weight:650}#timer{position:fixed;right:24px;bottom:24px;z-index:5;display:flex;align-items:center;gap:18px;border:1px solid var(--accent);background:var(--timer,#202c23);box-shadow:0 10px 40px #0008;border-radius:14px;padding:12px 20px}#timer strong{font-size:30px;font-variant-numeric:tabular-nums}footer{max-width:1200px;margin:auto;padding:22px 30px;border-top:1px solid var(--line);font-size:12px;letter-spacing:2px;color:var(--muted)}footer span{float:right;letter-spacing:0}[hidden]{display:none!important}
@media(max-width:700px){header{padding:18px;gap:14px}.brand span{display:none}main{padding:14px 16px 60px}.page-heading{align-items:flex-start;margin:23px 0}.stat{padding:0 0 0 13px;font-size:13px}.stat strong{font-size:29px}.card{padding:18px}.coach-grid,.split{grid-template-columns:1fr}.coach-grid aside{max-height:270px;overflow:auto}.editor-fields{grid-template-columns:repeat(2,minmax(0,1fr))}.set-row{grid-template-columns:22px repeat(var(--cols,3),minmax(0,1fr)) 36px;gap:7px}.set-row input{padding:10px 7px;font-size:18px}.exercise-head{flex-wrap:wrap}.bar-row{grid-template-columns:90px minmax(20px,1fr) 50px;gap:8px}#timer{left:16px;right:16px;bottom:16px;justify-content:space-between}footer span{display:block;float:none;margin-top:8px}.section-heading{align-items:flex-start}.save-bar{padding:10px}.save-bar button{flex:1 1 auto}}
.program-card{display:flex;flex-direction:column;align-items:flex-start;gap:12px;overflow-wrap:anywhere}.program-card h3{font-size:25px}.program-card details{width:100%;flex:1}.program-card summary{cursor:pointer;min-height:44px;color:var(--accent)}.program-card button{width:100%}.training-summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:24px 0}.training-summary>div{padding:14px 10px;border-top:2px solid var(--accent);background:var(--field,#111a15);border-radius:0 0 8px 8px}.training-summary strong,.training-summary small{display:block}.training-summary strong{font-size:23px;overflow-wrap:anywhere}.builder .section-heading>label{flex:1;min-width:0}#coach-programs-view>.section-heading{flex-wrap:wrap}#coach-detail{overflow-wrap:anywhere}#program-count{font-variant-numeric:tabular-nums}
@media(max-width:700px){.training-summary{gap:6px}.training-summary strong{font-size:18px}.training-summary small{font-size:13px}.builder .section-heading{flex-wrap:wrap}.builder .section-heading>label{flex-basis:100%}#coach-panel>.page-heading{flex-wrap:wrap}}
/* Gym art packs — see bridge/training/brand.py. The page sets data-art from the signed-in gym, or before sign-in from the gym link; a neutral gym never sets it, so nothing below applies to it. */
:root[data-art="mammoth-fitness"]{--bg:#080d0f;--card:#142024;--line:#26363b;--text:#f3f6f6;--muted:#a9b8bc;--gold:#e8dcc4;--btn:#18262b;--field:#0b1316;--field-line:#4d656b;--selected:#12303a;--savebar:#142024f5;--track:#1d2d32;--timer:#142024;--noticebg:#0f2a31}
.brand-art{display:block;margin:0}.brand-art img{display:block;width:100%;height:auto;border-radius:12px;background:var(--card)}.auth.has-art{max-width:980px;display:grid;grid-template-columns:minmax(0,45fr) minmax(0,55fr);gap:40px;align-items:center}.auth-art img{aspect-ratio:3/2;object-fit:cover}.block-head{display:grid;grid-template-columns:240px minmax(0,1fr);gap:22px;align-items:center;margin:26px 0}.block-head .section-heading{margin:0}.block-head .brand-art img{height:160px;object-fit:cover;object-position:60% 62%}.heading-art{display:flex;gap:18px;align-items:center}.thumb-art{width:200px;flex:none}.done-card{display:flex;gap:20px;align-items:center}.done-card .thumb-art{width:180px}
@media(max-width:700px){.auth.has-art{display:block}.auth-art{margin-bottom:18px}.auth-art img{height:150px;aspect-ratio:auto;object-position:62% 38%}.block-head{grid-template-columns:96px minmax(0,1fr);gap:14px;margin:20px 0}.block-head .brand-art img{height:64px}.heading-art{flex-wrap:wrap}.thumb-art{width:140px}.done-card{flex-direction:column;align-items:flex-start}}
@media(max-width:700px) and (max-height:640px){.auth-art{display:none}}

/* Training tools: compact set controls and a readable four-week rhythm. */
nav{flex-wrap:wrap;gap:18px}.set-row{grid-template-columns:30px repeat(var(--cols,3),minmax(0,1fr)) 40px 64px}.set-row [data-done]{padding:8px 5px}.set-done{background:color-mix(in srgb,var(--accent) 8%,transparent);border-radius:7px}.set-done [data-done]{color:var(--accent);border-color:var(--accent)}.previous-line{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:16px 0}.inline-check{display:flex;align-items:center;gap:10px}.inline-check input{width:22px;min-height:22px;margin:0;accent-color:var(--accent)}fieldset{border:1px solid var(--line);border-radius:8px;margin:12px 0;min-width:0}.training-calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;margin:18px 0}.calendar-day{display:flex;flex-direction:column;align-items:center;border:1px solid var(--line);border-radius:8px;padding:8px 2px;color:var(--muted)}.calendar-day.trained{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 12%,var(--card));color:var(--text)}.calendar-day span{font-size:12px}.record-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:18px}.record-grid>div{border-left:2px solid var(--accent);padding-left:12px}.workout-comments{margin:15px 0;padding:12px;border:1px solid var(--line);border-radius:10px}.card{overflow-wrap:anywhere}#coach-exercises-view .coach-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
@media(max-width:700px){.set-row{grid-template-columns:20px repeat(var(--cols,3),minmax(0,1fr)) 28px 46px;gap:4px}.set-row input{padding:10px 3px}.set-row [data-done]{font-size:13px}.previous-line{align-items:flex-start;flex-direction:column}.training-calendar{gap:3px}.calendar-day{padding:5px 0}.calendar-day small{font-size:10px}.calendar-day strong{font-size:15px}#coach-exercises-view .coach-grid{grid-template-columns:1fr}nav{gap:14px}header #gym-name{flex-basis:0;min-width:0}}

/* A suggestion is advice, not the plan: it sits under the previous numbers, quieter than the sets. */
.previous-line.suggestion { align-items: flex-start; border-top: 1px dashed var(--line, #2a3330); padding-top: 8px; }
.previous-line.suggestion strong { color: var(--accent, #c8f169); }

/* Working without signal: one quiet strip under the header, never covering a control. It uses the
   gold rather than the accent, because it is a state to notice, not an action to take. */
#offline-banner:not([hidden]){padding:8px 16px;text-align:center;background:var(--noticebg,#343323);color:var(--text);border-bottom:1px solid var(--gold);font-size:14px;font-weight:600}
/* A member's door badge: read off a phone at arm's length and typed on a tablet, so it is set in
   the same oversized, well-spaced type the kiosk uses rather than the page's body size. */
.badge-code{font-size:38px;font-weight:800;letter-spacing:9px;color:var(--accent);font-variant-numeric:tabular-nums;margin:10px 0 4px;overflow-wrap:anywhere}
@media(max-width:700px){.badge-code{font-size:30px;letter-spacing:6px}}
/* While a rest runs, the save bar rides above the timer instead of under it: the last set's rest is
   exactly when a member reaches for Finish workout. */
body:has(#timer:not([hidden])) .save-bar{bottom:100px}
/* A notice is usually the answer to a button near the bottom (Finish, Done, Save), so it stays on screen
   rather than appearing at the top of a page the member has scrolled away from. Switching tabs clears it. */
#notice:not(:empty){position:sticky;top:10px;z-index:4;box-shadow:0 8px 30px #0009}
/* The way out of a started workout: back to the session list, or discard it while it is empty. */
.workout-nav{display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;margin-bottom:16px}
