/* NOTE: do NOT add a self-hosted @font-face for 'Barlow Condensed' here. It
   would OVERRIDE the Google Fonts <link> (declared earlier), and if /fonts/
   isn't deployed the font breaks entirely → the whole UI gets stuck on the big
   fallback font. The UI font comes from the Google <link>. The slide/reel
   EXPORTS embed the font separately via fetched base64 (_gcFontEmbedCSS),
   which degrades safely on its own. */

:root {
 --bg:#06090d; --surface:#0d141c; --surface2:#131c27; --surface3:#172436;
 --border:#1c2f42; --border2:#27415a;
 --accent:#2bb8ec; --accent-dim:rgba(var(--accent-rgb),.13); --accent2:#ff4757; --accent3:#7dd4f0;
 --text:#eaf5fb; --text2:#6fa8c4; --text3:#5a92a5;
 --accent-rgb:43,184,236; --btn-text:#060d14; --coach:#1b93c9; --radius:10px; --font-display:'Barlow Condensed',sans-serif;
 --gp-down:#4FC3D9; --gp-up:#E8975A; --gp-rest:#A99AD8; --gp-fill:var(--surface2); --gp-fill-ink:var(--text); --gp-btn-bg:var(--accent); --gp-btn-ink:var(--btn-text); --gp-onaccent:var(--text);
 /* Status / tier traffic-light tokens. Used across goals.js, axis profiles,
    cognitive bars, coaching-inbox severity dots. Adjust here once per theme
    rather than chasing inline hex across feature files. */
 --good:#7a3; --warn:#d80; --bad:#DD8282; --info:#48A4DA;
}

/* ── LOGIN THEME: Grossen Performance master brand, light palette,
   matches theme-master so the pre-auth screen feels like the same product.
   Ink-navy accent, paper-white cards on warm bg. Display type unified
   on Barlow Condensed across all themes. */
:root.theme-login {
 --bg:#F4F2EE; --surface:#FFFFFF; --surface2:#F0EFEC; --surface3:#E4E2DE;
 --border:#E4E2DE; --border2:#D0CEC9;
 --accent:#1B2A47; --accent-dim:rgba(27,42,71,.07); --accent2:#BC2F39; --accent3:#555555;
 --text:#1A1A1A; --text2:#555555; --text3:#656565;
 --accent-rgb:27,42,71; --btn-text:#F0EFEC; --coach:#2C2C2C; --radius:10px;
 --gp-down:#2E6E7E; --gp-up:#B4622A; --gp-rest:#5B4E82; --gp-fill:var(--accent); --gp-fill-ink:#F0EFEC; --gp-btn-bg:#F0EFEC; --gp-btn-ink:var(--accent); --gp-onaccent:#F0EFEC;
 --font-display:'Barlow Condensed',sans-serif;
 --good:#1f6f3a; --warn:#9A521C; --bad:#8c2a2a; --info:#1B2A47;
}

/* ── MASTER THEME: Grossen Performance master brand for self-service tiers.
   Light palette: off-white field, white cards, ink-navy accent. Display
   type is Barlow Condensed (unified with the coach themes and the website),
   visually distinct from coach themes through palette and card treatment
   rather than typography. */
:root.theme-master {
 --bg:#F4F2EE; --surface:#FFFFFF; --surface2:#F0EFEC; --surface3:#E4E2DE;
 --border:#E4E2DE; --border2:#D0CEC9;
 --accent:#1B2A47; --accent-dim:rgba(27,42,71,.07); --accent2:#BC2F39; --accent3:#555555;
 --text:#1A1A1A; --text2:#555555; --text3:#656565;
 --accent-rgb:27,42,71; --btn-text:#F0EFEC; --coach:#2C2C2C; --radius:10px;
 --gp-down:#2E6E7E; --gp-up:#B4622A; --gp-rest:#5B4E82; --gp-fill:var(--accent); --gp-fill-ink:#F0EFEC; --gp-btn-bg:#F0EFEC; --gp-btn-ink:var(--accent); --gp-onaccent:#F0EFEC;
 --font-display:'Barlow Condensed',sans-serif;
 /* Darker traffic-light variants tuned for the cream paper background. */
 --good:#1f6f3a; --warn:#9A521C; --bad:#8c2a2a; --info:#1B2A47;
}

/* ── MASTER DARK: the dark counterpart of theme-master, for self-service
   Members. Every colour here is either a literal value from the GP Colour
   System (Revision 2026.05) or a stated arithmetic derivation from one.

     Ink navy  #1B2A47   Cream  #F4F2EE   Stone  #E4E2DE

   In theme-master the accent IS ink navy, so a straight field inversion would
   leave the accent invisible. Instead the two brand colours swap roles: ink
   navy stops being the accent and becomes the CARD, cream stops being the
   paper and becomes the text and the accent. That is the same relationship the
   light theme already ships in its buttons (--gp-btn-bg:#F0EFEC on a navy
   accent), just applied to the whole surface.

   BRAND NOTE: the Colour System says the master brand is "editorial, warm,
   light" and that the dark worlds belong to the coaches. A dark Member theme
   is therefore a deliberate exception to that rule, opt-in and off by default.

   Derivations, all from ink navy #1B2A47:
     --bg        x0.42   ground the navy cards sit on
     --surface2  x1.32   --surface3 x1.62   --border x1.55   --border2 x2.05
     --text2     cream mixed 26% toward navy    --text3  mixed 38%

   NOTE: deliberately absent from the light-only rules below (card box-shadow,
   softened panel shadows). Dark themes take their card separation from
   contrast, exactly like theme-dries and theme-agathe. */
:root.theme-master-dark {
 --bg:#080D17; --surface:#101828; --surface2:#1B2A47; --surface3:#24375E;
 --border:#2A416E; --border2:#375692;
 --accent:#F4F2EE; --accent-dim:rgba(244,242,238,.10); --accent2:#F0837E; --accent3:#E4E2DE;
 --text:#F4F2EE; --text2:#BCBEC3; --text3:#AEB2B9;
 --accent-rgb:244,242,238; --btn-text:#1B2A47; --coach:#BCBEC3; --radius:10px;
 /* PWA status bar follows the navy surface, not the cream accent. */
 --statusbar:#101828;
 --gp-down:#4FC3D9; --gp-up:#E8975A; --gp-rest:#A99AD8;
 --gp-fill:var(--surface2); --gp-fill-ink:var(--text);
 --gp-btn-bg:var(--accent); --gp-btn-ink:var(--btn-text); --gp-onaccent:var(--btn-text);
 --font-display:'Barlow Condensed',sans-serif;
 /* The Colour System defines no status palette, so these reuse the values that
    already ship in theme-dries/theme-agathe where those clear AA on ink navy
    (good 5.16:1, warn 5.17:1) and lift only the two that do not: #cc4444 bad
    scored 3.05:1 and #2277aa info 2.92:1. --accent2 is likewise lifted; both
    #C8323C (theme-master) and #ff4757 (coach dark) fail on this ground. */
 --good:#88C23A; --warn:#FC9B00; --bad:#EF9B99; --info:#89B6DF;
 --chart-text:#F4F2EE; --chart-grid:rgba(244,242,238,.14);
}

/* DISPLAY POLISH REMOVED 2026-05-24: the light themes (login, master, and the
   coach -light themes) used to get larger titles (38px), bigger stat values
   (56px) and roomier cards. That made the app render noticeably BIGGER on any
   light theme vs the base sizing, and since the active theme can vary by load
   (preference loads late, splash/boot timing), the app appeared "big on first
   open, normal after refresh". All themes now use the base sizing (.page-title
   34px, .stat-value 42px) so the size is identical everywhere. */

/* Chart axis colors, theme-aware. Dark themes get white-on-dark, light
   themes get ink-on-light. Read by chartTextColor() / chartGridColor(). */
:root { --chart-text:#1A1A1A; --chart-grid:rgba(0,0,0,.10); }

/* ── DRIES THEME: black base, electric blue accent (default, unchanged) ── */
:root.theme-dries {
 --bg:#06090d; --surface:#0d141c; --surface2:#131c27; --surface3:#172436;
 --border:#1c2f42; --border2:#27415a;
 --accent:#2bb8ec; --accent-dim:rgba(var(--accent-rgb),.13); --accent2:#ff4757; --accent3:#7dd4f0;
 --text:#eaf5fb; --text2:#6fa8c4; --text3:#5a92a5;
 --accent-rgb:43,184,236; --btn-text:#060d14; --coach:#1b93c9; --radius:10px; --font-display:'Barlow Condensed',sans-serif;
 --gp-down:#4FC3D9; --gp-up:#E8975A; --gp-rest:#A99AD8; --gp-fill:var(--surface2); --gp-fill-ink:var(--text); --gp-btn-bg:var(--accent); --gp-btn-ink:var(--btn-text); --gp-onaccent:var(--text);
 --chart-text:#fff; --chart-grid:rgba(255,255,255,.15);
}

/* ── AGATHE THEME: black base, warm bronze accent ── */
:root.theme-agathe {
 --bg:#0e0a06; --surface:#1c1209; --surface2:#26180a; --surface3:#30200d;
 --border:#3d2a1a; --border2:#5a3d26;
 --accent:#c8956c; --accent-dim:rgba(200,149,108,.15); --accent2:#ff4757; --accent3:#e0b896;
 --text:#f5ede4; --text2:#b08060; --text3:#a9825a;
 --accent-rgb:200,149,108; --btn-text:#1a0c04; --coach:#b57e48; --radius:10px; --font-display:'Barlow Condensed',sans-serif;
 --gp-down:#4FC3D9; --gp-up:#E8975A; --gp-rest:#A99AD8; --gp-fill:var(--surface2); --gp-fill-ink:var(--text); --gp-btn-bg:var(--accent); --gp-btn-ink:var(--btn-text); --gp-onaccent:var(--text);
 --chart-text:#fff; --chart-grid:rgba(255,255,255,.15);
}

/* ── DRIES LIGHT: master palette + electric blue accent ── */
:root.theme-dries-light {
 --bg:#F4F2EE; --surface:#FFFFFF; --surface2:#F0EFEC; --surface3:#E4E2DE;
 --border:#E4E2DE; --border2:#D0CEC9;
 --accent:#0D6C90; --accent-dim:rgba(13,108,144,.10); --accent2:#BC2F39; --accent3:#106D8B;
 --text:#1A1A1A; --text2:#555555; --text3:#656565;
 --accent-rgb:13,108,144; --btn-text:#FFFFFF; --coach:#146C94; --radius:10px;
 --good:#1f6f3a; --warn:#9A521C; --bad:#8c2a2a; --info:#1B2A47;
 --gp-down:#2E6E7E; --gp-up:#B4622A; --gp-rest:#5B4E82; --gp-fill:var(--text); --gp-fill-ink:#F0EFEC; --gp-btn-bg:var(--accent); --gp-btn-ink:var(--btn-text); --gp-onaccent:#F0EFEC;
 --font-display:'Barlow Condensed',sans-serif;
}

/* ── AGATHE LIGHT: master palette + warm bronze accent ── */
:root.theme-agathe-light {
 --bg:#F4F2EE; --surface:#FFFFFF; --surface2:#F0EFEC; --surface3:#E4E2DE;
 --border:#E4E2DE; --border2:#D0CEC9;
 --accent:#8A5A34; --accent-dim:rgba(138,90,52,.10); --accent2:#BC2F39; --accent3:#8F582A;
 --text:#1A1A1A; --text2:#555555; --text3:#656565;
 --accent-rgb:138,90,52; --btn-text:#FFFFFF; --coach:#845D35; --radius:10px;
 --good:#1f6f3a; --warn:#9A521C; --bad:#8c2a2a; --info:#1B2A47;
 --gp-down:#2E6E7E; --gp-up:#B4622A; --gp-rest:#5B4E82; --gp-fill:var(--text); --gp-fill-ink:#F0EFEC; --gp-btn-bg:var(--accent); --gp-btn-ink:var(--btn-text); --gp-onaccent:#F0EFEC;
 --font-display:'Barlow Condensed',sans-serif;
}

/* Display polish for the light coach themes REMOVED 2026-05-24 (same reason as
   the master/login block above): it made light themes render bigger than the
   base. All themes now use base sizing for consistency. The card box-shadow
   below is kept (it's depth, not size). */

/* Subtle card depth on every light theme. Dark themes get separation from
   contrast alone; light themes need the shadow to keep cards from floating. */
:root.theme-login .card,
:root.theme-master .card,
:root.theme-dries-light .card,
:root.theme-agathe-light .card {
 box-shadow: 0 2px 8px rgba(0,0,0,.05);
}
:root.theme-login .stat-card,
:root.theme-master .stat-card,
:root.theme-dries-light .stat-card,
:root.theme-agathe-light .stat-card {
 box-shadow: 0 1px 4px rgba(0,0,0,.04);
}

/* Soften the dark-tuned shadows that look heavy on light themes. The
   athlete panel slide-in, modal drop, and rest-timer bar all originally
   used rgba(0,0,0,.5)+ which reads as a grey halo on white. */
:root.theme-login .athlete-panel,
:root.theme-master .athlete-panel,
:root.theme-dries-light .athlete-panel,
:root.theme-agathe-light .athlete-panel {
 box-shadow: -4px 0 18px rgba(0,0,0,.10);
}
:root.theme-login .client-session-card,
:root.theme-master .client-session-card,
:root.theme-dries-light .client-session-card,
:root.theme-agathe-light .client-session-card {
 box-shadow: 0 2px 10px rgba(0,0,0,.06);
}
:root.theme-login #rest-timer-bar,
:root.theme-master #rest-timer-bar,
:root.theme-dries-light #rest-timer-bar,
:root.theme-agathe-light #rest-timer-bar {
 box-shadow: 0 -4px 16px rgba(0,0,0,.10);
}

*{box-sizing:border-box;margin:0;padding:0}
input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.field select,.form-group select,.pa-athlete-bar select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%236fa8c4' d='M6 8L0 0h12z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:28px}
input[type=range]{touch-action:pan-x}
input[type=number]{-moz-appearance:textfield}
html,body{height:100%}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{background:var(--bg);color:var(--text);font-family:'Barlow',sans-serif;font-size:15px;-webkit-tap-highlight-color:transparent}
[style*="scrollbar-width:none"]::-webkit-scrollbar{display:none}

/* LOGIN (recovery-screen shares the centered fullscreen treatment; it was
   missing from this selector, which left the set-password card hanging
   top-left, 2026-06-05) */
#login-screen, #signup-screen, #recovery-screen{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
 overflow-y:auto;-webkit-overflow-scrolling:touch;z-index:1000;
 background:var(--bg);
 background-image:repeating-linear-gradient(0deg,transparent,transparent 39px,var(--border) 39px,var(--border) 40px),
 repeating-linear-gradient(90deg,transparent,transparent 39px,var(--border) 39px,var(--border) 40px)}
.login-card{background:var(--surface);border:1px solid var(--border2);border-radius:16px;padding:48px 40px;
 width:100%;max-width:400px;box-shadow:0 32px 80px rgba(0,0,0,.6);animation:slideUp .4s ease}
.login-card{will-change:transform,opacity}
@keyframes slideUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
/* login-logo and login-sub replaced with image */
.login-tabs{display:flex;gap:6px;margin-bottom:28px;background:var(--surface2);border-radius:8px;padding:4px}
.login-tab{flex:1;padding:8px;border:none;background:none;color:var(--text2);cursor:pointer;border-radius:6px;
 font-family:'Barlow Semi Condensed',sans-serif;font-weight:600;font-size:13px;letter-spacing:.5px;transition:all .15s}
.login-tab.active{background:var(--surface3);color:var(--text)}
.field{margin-bottom:16px}
.field label{display:block;font-size:12px;color:var(--text2);text-transform:uppercase;letter-spacing:1px;margin-bottom:6px;font-weight:600}
.field input{width:100%;background:var(--surface2);border:1px solid var(--border2);color:var(--text);
 padding:11px 14px;border-radius:8px;font-family:'Barlow',sans-serif;font-size:14px;transition:border-color .15s}
.field input:focus{outline:none;border-color:var(--accent)}
.btn-primary{width:100%;background:var(--accent);color:var(--btn-text);border:none;border-radius:8px;padding:13px;touch-action:manipulation;
 font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:16px;letter-spacing:1.5px;cursor:pointer;transition:all .15s;margin-top:4px}
.btn-primary:hover{background:#f5ff6e;transform:translateY(-1px)}
.login-error{color:var(--accent2);font-size:13px;margin-top:12px;display:none}

/* APP SHELL */
#app{display:none;height:100vh;height:100vh;height:100dvh;flex-direction:column}
.topbar{background:var(--surface);border-bottom:1px solid var(--border);
 display:flex;align-items:center;padding:0 16px;gap:10px;flex-shrink:0;z-index:50;
 padding-top:env(safe-area-inset-top,0px);min-height:calc(52px + env(safe-area-inset-top,0px));flex-wrap:nowrap;overflow:hidden}
.topbar-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:min(120px,25vw)}
.topbar-logo{display:flex;align-items:center;flex-shrink:0}
.topbar-role{font-size:10px;background:var(--accent-dim);color:var(--accent);padding:3px 10px;
 border-radius:20px;font-weight:700;letter-spacing:.8px;border:1px solid rgba(var(--accent-rgb),.2)}
.topbar-name{font-family:'Barlow Semi Condensed',sans-serif;font-weight:600;font-size:14px;color:var(--text2)}
.topbar-spacer{flex:1}
.topbar-btn{background:transparent;border:1px solid var(--border);color:var(--text3);padding:5px 14px;
 border-radius:6px;cursor:pointer;font-size:12px;font-family:'Barlow',sans-serif;transition:all .15s;letter-spacing:.3px}
.topbar-btn:hover{border-color:var(--accent2);color:var(--accent2)}
/* v3.2+ Stage 2: always-on Cmd+K search bar in topbar. */
.topbar-cmd{background:var(--surface2);border:1px solid var(--border);color:var(--text3);padding:6px 10px;border-radius:7px;cursor:pointer;font-size:12px;font-family:'Barlow Semi Condensed',sans-serif;display:inline-flex;align-items:center;gap:8px;min-width:240px;transition:all .15s}
.topbar-cmd:hover{border-color:var(--border2);color:var(--text2)}
.topbar-cmd .topbar-cmd-label{flex:1;text-align:left}
.topbar-cmd .topbar-cmd-kbd{margin-left:0}
@media (max-width:768px){
 .topbar-cmd{min-width:36px;padding:6px}
 .topbar-cmd .topbar-cmd-label,.topbar-cmd .topbar-cmd-kbd{display:none}
}
/* Mobile topbar: drop the role pill + name and tighten button padding so all
   icons + Sign Out still fit on 375px-wide phones with the theme toggle. */
@media(max-width:600px){
 .topbar{gap:6px;padding:0 10px}
 .topbar-role,.topbar-name{display:none}
 .topbar-btn{padding:5px 8px;font-size:11px;letter-spacing:0}
}
.shell{display:flex;flex:1;overflow:hidden}

/* SIDEBAR */
.sidebar{width:230px;background:var(--surface);border-right:1px solid var(--border);
 display:flex;flex-direction:column;flex-shrink:0;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior-y:contain}

.sidebar-section{padding:14px 10px 6px}
.sidebar-label{font-size:9px;color:var(--text3);text-transform:uppercase;letter-spacing:2px;
 font-weight:700;padding:0 10px;margin-bottom:6px;margin-top:4px}
.nav-item{display:flex;align-items:center;gap:10px;padding:10px 12px;min-height:44px;border-radius:8px;cursor:pointer;
 color:var(--text2);font-size:13px;font-weight:500;transition:all .15s;border:none;background:none;width:100%;text-align:left;touch-action:manipulation}
.nav-item:hover{background:var(--surface2);color:var(--text)}
.nav-item.active{background:var(--accent-dim);color:var(--accent);font-weight:600;
 box-shadow:inset 3px 0 0 var(--accent);border-radius:0 8px 8px 0;margin-left:-10px;padding-left:22px;width:calc(100% + 10px);min-height:44px}

/* COACH SLIM SIDEBAR (v3.2+, 4 icons: Today/Athletes, Build, Messages, Settings).
   Option A polish: 64px wide, icons 22px, label text under each icon, brighter
   inactive color. Tooltip removed, label is always visible. */
.sidebar-slim{width:64px;padding:12px 0;display:flex;flex-direction:column;align-items:center;gap:2px}
.sidebar-slim .sb-icon-group{display:flex;flex-direction:column;gap:2px;width:100%;align-items:center}
.sidebar-slim .sb-icon-group-bottom{margin-top:auto}
.sb-iconbtn{width:56px;min-height:54px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;border-radius:8px;cursor:pointer;color:var(--text2);background:transparent;border:none;position:relative;transition:all .15s;flex-shrink:0;padding:6px 4px;font-family:'Barlow Semi Condensed',sans-serif}
.sb-iconbtn:hover{background:var(--surface2);color:var(--text)}
.sb-iconbtn.active{background:var(--accent-dim);color:var(--accent)}
.sb-iconbtn.active::before{content:'';position:absolute;left:0;top:8px;bottom:8px;width:3px;background:var(--accent);border-radius:0 2px 2px 0}
.sb-iconbtn svg{display:block;width:22px;height:22px;opacity:.9}
.sb-iconbtn.active svg{opacity:1}
.sb-iconbtn .sb-label{font-size:10px;font-weight:600;letter-spacing:.4px;line-height:1;text-transform:uppercase}
.sb-iconbtn .sb-tip{display:none}
.sb-iconbtn .sb-badge{position:absolute;top:4px;right:8px;background:var(--accent2);color:#fff;font-size:9px;font-weight:800;border-radius:999px;padding:0 5px;min-width:14px;height:14px;display:flex;align-items:center;justify-content:center;line-height:1}
@media(max-width:768px){
 .sidebar-slim{width:56px}
 .sb-iconbtn{width:48px;min-height:48px}
 .sb-iconbtn svg{width:20px;height:20px}
}

/* COACH MOBILE BOTTOM BAR (v3.2+, swaps with slim sidebar on small screens) */
.coach-bottom-bar{position:fixed;left:0;right:0;bottom:0;background:var(--surface);border-top:1px solid var(--border);display:none;justify-content:space-around;align-items:stretch;z-index:55;padding:6px 8px calc(8px + env(safe-area-inset-bottom,0px));gap:4px}
.coach-bottom-bar .cbb-btn{flex:1;background:transparent;border:none;color:var(--text3);cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;padding:6px 4px;border-radius:8px;font-family:'Barlow Semi Condensed',sans-serif;position:relative;min-width:0}
.coach-bottom-bar .cbb-btn:hover{background:var(--surface2);color:var(--text)}
.coach-bottom-bar .cbb-btn.active{color:var(--accent)}
.coach-bottom-bar .cbb-label{font-size:10px;font-weight:600;letter-spacing:.4px;text-transform:uppercase}
.coach-bottom-bar .cbb-badge{position:absolute;top:4px;right:calc(50% - 22px);background:var(--accent2);color:#fff;font-size:9px;font-weight:800;border-radius:999px;padding:0 5px;min-width:14px;height:14px;display:flex;align-items:center;justify-content:center;line-height:1}
@media(max-width:768px){
 body.role-coach .coach-bottom-bar{display:flex}
 body.role-coach .sidebar-slim{display:none!important}
 body.role-coach .main{padding-bottom:calc(72px + env(safe-area-inset-bottom,0px))}
 /* Mobile roster: hide Glance button + chevron arrow + setup chip strip
    so names get full row width. Tap-anywhere still opens the workspace. */
 #view-athletes .users-row > button[onclick*="openWholeAthleteView"],
 #view-athletes .users-row-arrow{display:none!important}
 #view-athletes .users-row > div > div:last-child:not([style*="display:flex"]){display:none}
 /* Bump athlete name a notch since it's the primary tap target. */
 #view-athletes .users-row > div > div:first-child > div:first-child{font-size:16px!important}
 /* Coach mobile: hamburger is redundant (bottom bar provides the same 4
    entries within thumb reach) AND broken, toggleMobileSidebar tries to
    open the slim sidebar but CSS forces it hidden. Hide the hamburger so
    the topbar reads cleanly and the bottom bar is the only nav. */
 body.role-coach .hamburger{display:none!important}
 /* Mobile: full-screen swap between roster and workspace based on selection.
    No athlete = roster fills the pane (Today still embedded too, scroll past
    the roster to reach it). Athlete selected = workspace fills, roster
    hidden, back button visible to return to roster. */
 #view-athletes[data-mode="athlete"] .caw-roster{display:none}
 #view-athletes[data-mode="today"] .caw-pane{display:none}
 #view-athletes .caw-workspace{grid-template-columns:minmax(0,1fr)!important;gap:0}
 .caw-back-btn{display:inline-flex!important}
}
.caw-back-btn{display:none;align-items:center;gap:6px;background:transparent;border:1px solid var(--border2);color:var(--text);padding:6px 12px;border-radius:7px;cursor:pointer;font-size:12px;font-family:inherit;margin-bottom:12px}
.caw-back-btn:hover{border-color:var(--accent);color:var(--accent)}
.caw-back-btn svg{display:block}
.nav-icon{width:16px;display:flex;align-items:center;justify-content:center;opacity:.45;flex-shrink:0;color:var(--text2)}
.nav-icon svg{display:block;}
.nav-item.active .nav-icon{opacity:1;color:var(--accent)}
.nav-item:hover .nav-icon{opacity:.85}
.sidebar-divider{height:1px;background:var(--border);margin:6px 10px}
.client-pill{margin:2px 10px;background:transparent;border:1px solid transparent;
 border-radius:8px;padding:8px 10px;cursor:pointer;transition:all .15s}
.client-pill:hover{background:var(--surface2);border-color:var(--border)}
.client-pill.active{background:var(--accent-dim);border-color:rgba(var(--accent-rgb),.25)}
.client-pill-name{font-size:13px;font-weight:600;color:var(--text)}
.client-pill-meta{font-size:11px;color:var(--text3);margin-top:2px}

/* ATHLETE PANEL (coach dashboard sidebar) */
.athlete-panel{position:fixed;right:0;top:0;bottom:0;width:380px;z-index:250;display:flex;flex-direction:column;border-left:1px solid var(--border);background:var(--bg,#06090d);overflow:hidden;box-shadow:-4px 0 24px rgba(0,0,0,.6);animation:slideInRight .2s ease}
.athlete-panel-header{padding:14px 18px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.athlete-panel-tabs{display:flex;gap:2px;padding:6px 12px;border-bottom:1px solid var(--border);overflow-x:auto;flex-shrink:0;background:var(--surface2);-webkit-overflow-scrolling:touch;scrollbar-width:none}
.athlete-panel-tabs::-webkit-scrollbar{display:none}
.athlete-panel-body{flex:1;overflow-y:auto;padding:14px 18px;-webkit-overflow-scrolling:touch}
.ap-tab-btn{padding:6px 12px;border-radius:6px;border:none;cursor:pointer;font-family:'Barlow Semi Condensed',sans-serif;font-size:12px;font-weight:600;transition:all .15s;background:transparent;color:var(--text2);white-space:nowrap}
.ap-tab-btn.active{background:var(--accent);color:var(--btn-text,#060d14)}

/* MAIN */
.main{flex:1;min-width:0;overflow-y:auto;padding:18px 28px 28px;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch;scroll-behavior:smooth}
.view{display:none;animation:fadeIn .2s ease}
.view.active{display:block}
@keyframes fadeIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}

/* PAGE HEADER */
.page-header{margin-bottom:16px;display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}
.page-title{font-family:Barlow Condensed,sans-serif;font-size:34px;font-weight:800;letter-spacing:1.5px;line-height:1;text-transform:uppercase;word-break:break-word}
.page-sub{color:var(--text2);font-size:13px;margin-top:5px;letter-spacing:.3px}

/* BUTTONS */
.btn{padding:9px 18px;border-radius:7px;border:none;cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation;
 font-family:'Barlow Semi Condensed',sans-serif;font-size:13px;font-weight:600;letter-spacing:.3px;transition:all .15s}
.btn-accent{background:var(--accent);color:var(--btn-text)}
.btn-accent:hover{filter:brightness(1.15)}
.btn-ghost{background:var(--surface2);border:1px solid var(--border2);color:var(--text)}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent)}
.btn-danger{background:rgba(255,71,87,.12);border:1px solid rgba(255,71,87,.3);color:var(--accent2)}
.btn-danger:hover{background:rgba(255,71,87,.2)}
.btn-sm{padding:5px 11px;font-size:12px}
.btn-xs{padding:3px 8px;font-size:11px}

/* CARDS */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px}
.card+.card{margin-top:16px}
/* Inside a grid the gap spaces the cards; the stacking margin above pushed
   every card after the first 16px down, so the first sat higher than its row
   (Recipes, Coach Settings, Meal Planner totals). */
[style*="display:grid"]>.card+.card,[style*="display: grid"]>.card+.card,.gp-gcols>.card+.card{margin-top:0}
.card-title{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:18px;letter-spacing:.8px;
 margin-bottom:4px;text-transform:uppercase;color:var(--text)}
.card-meta{font-size:12px;color:var(--text2)}

/* GRID */
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}

/* STAT CARDS */
.stat-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px;
 position:relative;overflow:hidden}
.stat-card::before{content:'';position:absolute;top:0;left:0;right:0;height:2px;
 background:linear-gradient(90deg,var(--accent),transparent)}
.stat-label{font-size:10px;color:var(--text2);text-transform:uppercase;letter-spacing:1.2px;font-weight:700}
.stat-value{font-family:Barlow Condensed,sans-serif;font-size:42px;font-weight:700;line-height:1;color:var(--accent);margin-top:6px}
.stat-unit{font-size:12px;color:var(--text2);margin-top:3px;text-transform:uppercase;letter-spacing:.5px}

/* FORM */
.form-row{display:grid;gap:12px;margin-bottom:12px}
.form-row.cols-2{grid-template-columns:1fr 1fr}
.form-row.cols-3{grid-template-columns:1fr 1fr 1fr}
.form-row.cols-4{grid-template-columns:1fr 1fr 1fr 1fr}
.form-group{display:flex;flex-direction:column;gap:5px}
.form-label{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:1px;font-weight:600}
.form-input,.form-select,.form-textarea{background:var(--surface2);border:1px solid var(--border2);color:var(--text);
 padding:9px 12px;border-radius:7px;font-family:'Barlow',sans-serif;font-size:16px;transition:border-color .15s;width:100%;min-height:40px}
.form-input:focus,.form-select:focus,.form-textarea:focus{outline:none;border-color:var(--accent)}
.form-textarea{resize:vertical;min-height:60px}

/* SESSION BUILDER */
.session-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:16px}
.session-header{padding:14px 18px;background:var(--surface2);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;flex-wrap:wrap;cursor:pointer;user-select:none}
.session-header:hover{background:var(--surface3)}
.session-body{padding:16px 18px}
.session-body.collapsed{display:none}
.session-chevron{margin-left:auto;font-size:12px;color:var(--text3);transition:transform .2s;flex-shrink:0}
.session-chevron.open{transform:rotate(180deg)}
.section-block{margin-bottom:20px}
.section-block-title{font-size:11px;color:var(--accent);text-transform:uppercase;letter-spacing:1.5px;font-weight:700;
 margin-bottom:10px;display:flex;align-items:center;gap:8px}
.section-block-title::after{content:'';flex:1;height:1px;background:var(--border)}

/* EXERCISE ROW */
.ex-row{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:12px 14px;margin-bottom:8px}
.ex-row-header{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.ex-drag-handle{display:inline-flex;align-items:center;justify-content:center;cursor:grab;touch-action:none;padding:6px 4px;color:var(--text3);flex-shrink:0;border-radius:4px;user-select:none}
.ex-drag-handle:hover{color:var(--accent);background:rgba(var(--accent-rgb),.08)}
.ex-drag-handle:active{cursor:grabbing}
.ex-slot-label{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:18px;color:var(--accent);width:32px;flex-shrink:0}
/* Superset group - builder */
.superset-group{border:1px solid rgba(var(--accent-rgb),.25);border-radius:10px;overflow:hidden;margin-bottom:12px;background:rgba(var(--accent-rgb),.03)}
.superset-group-label{padding:6px 14px;background:rgba(var(--accent-rgb),.08);border-bottom:1px solid rgba(var(--accent-rgb),.18);
 font-family:Barlow Condensed,sans-serif;font-size:13px;font-weight:800;color:var(--accent);
 letter-spacing:1.5px;text-transform:uppercase;display:flex;align-items:center;gap:8px}
.superset-group-label::after{content:'';flex:1;height:1px;background:rgba(var(--accent-rgb),.2)}
.superset-group .ex-row{border-radius:0;border:none;border-bottom:1px solid var(--border);margin-bottom:0}
.superset-group .ex-row:last-child{border-bottom:none}
/* Superset group - client */
.client-superset-group{border:1px solid rgba(var(--accent-rgb),.25);border-radius:12px;overflow:hidden;margin-bottom:14px;background:rgba(var(--accent-rgb),.03)}
.client-superset-label{padding:7px 18px;background:rgba(var(--accent-rgb),.08);border-bottom:1px solid rgba(var(--accent-rgb),.18);
 font-family:Barlow Condensed,sans-serif;font-size:13px;font-weight:800;color:var(--accent);
 letter-spacing:1.5px;text-transform:uppercase;display:flex;align-items:center;gap:8px}
.client-superset-label::after{content:'';flex:1;height:1px;background:rgba(var(--accent-rgb),.2)}
.client-superset-group .client-ex-card{border-radius:0;border:none;border-bottom:1px solid var(--border);margin-bottom:0}
.client-superset-group .client-ex-card:last-child{border-bottom:none}
.video-btn{padding:5px 10px;border-radius:5px;background:rgba(41,182,232,.1);border:1px solid rgba(41,182,232,.25);
 color:var(--accent3);font-size:12px;cursor:pointer;white-space:nowrap;text-decoration:none;display:inline-flex;align-items:center;gap:4px}

/* EXERCISE LIBRARY */
.lib-tabs{display:flex;gap:4px;margin-bottom:20px;flex-wrap:wrap}
.lib-tab{padding:7px 16px;border-radius:6px;border:1px solid var(--border2);background:var(--surface2);
 color:var(--text2);cursor:pointer;font-size:13px;font-weight:600;transition:all .15s}
.lib-tab.active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}
.cat-accordion{border:1px solid var(--border);border-radius:8px;overflow:hidden;margin-bottom:8px}
.cat-header{padding:12px 16px;background:var(--surface2);cursor:pointer;display:flex;align-items:center;justify-content:space-between;
 font-weight:600;font-size:14px;transition:background .15s;user-select:none}
.cat-header:hover{background:var(--surface3)}
.cat-header-left{display:flex;align-items:center;gap:10px}
.cat-chevron{transition:transform .2s;color:var(--text3);font-size:12px}
.cat-chevron.open{transform:rotate(90deg)}
.cat-body{display:none;padding:8px}
.cat-body.open{display:block}
.ex-lib-row{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:6px;transition:background .12s}
.ex-lib-row:hover{background:var(--surface3)}
.ex-lib-name{flex:1;font-size:13px}
.ex-lib-video{font-size:11px;color:var(--accent3);cursor:pointer;padding:3px 8px;border-radius:4px;
 border:1px solid rgba(41,182,232,.2);background:rgba(41,182,232,.06);white-space:nowrap;text-decoration:none}
.ex-lib-video:hover{background:rgba(41,182,232,.15)}
.ex-lib-video.has-link{background:rgba(41,182,232,.15);border-color:var(--accent3)}

/* EXERCISE LIBRARY V2 */
.lib-shell{display:grid;grid-template-columns:clamp(160px,20vw,220px) 1fr;gap:0;min-height:500px;height:calc(100vh - 160px);height:calc(100dvh - 160px);max-height:calc(100vh - 160px);max-height:calc(100dvh - 160px);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}
.lib-sheets{background:var(--surface);border-right:1px solid var(--border);padding:8px 6px;display:flex;flex-direction:column;gap:2px;overflow-y:auto;-webkit-overflow-scrolling:touch}
.lib-sheet-btn{display:block;width:100%;text-align:left;padding:9px 12px;border-radius:7px;border:none;
 background:transparent;color:var(--text2);cursor:pointer;font-size:12px;font-weight:600;
 font-family:'Barlow Semi Condensed',sans-serif;letter-spacing:.3px;transition:all .15s;line-height:1.3;touch-action:manipulation;min-height:40px}
.lib-sheet-btn:hover{background:var(--surface2);color:var(--text)}
.lib-sheet-btn.active{background:var(--accent-dim);color:var(--accent);box-shadow:inset 3px 0 0 var(--accent)}
.lib-main{background:var(--surface2);display:flex;flex-direction:column;overflow:hidden}
.lib-main-top{padding:14px 16px 10px;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex-shrink:0}
.lib-search-new{background:var(--surface3);border:1px solid var(--border2);color:var(--text);
 padding:7px 12px;border-radius:7px;font-family:'Barlow',sans-serif;font-size:13px;flex:1;min-width:160px;max-width:280px}
.lib-search-new:focus{outline:none;border-color:var(--accent)}
.lib-body{flex:1;overflow-y:auto;padding:14px 16px}
.lib-cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;margin-bottom:18px}
.lib-cat-card{background:var(--surface);border:1px solid var(--border);border-radius:8px;padding:12px 14px;
 cursor:pointer;transition:all .15s;touch-action:manipulation}
.lib-cat-card:hover{border-color:var(--border2);background:var(--surface3)}
.lib-cat-card.active{border-color:var(--accent);background:var(--accent-dim)}
.lib-cat-name{font-size:12px;font-weight:700;color:var(--text);line-height:1.3;margin-bottom:5px;word-break:break-word}
.lib-cat-card.active .lib-cat-name{color:var(--accent)}
.lib-cat-meta{font-size:11px;color:var(--text2)}

.lib-ex-section{border:1px solid var(--border);border-radius:8px;overflow:hidden}
.lib-ex-section-header{padding:10px 14px;background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:10px;flex-shrink:0}
.lib-ex-section-title{font-family:Barlow Condensed,sans-serif;font-size:16px;font-weight:700;flex:1}
.lib-ex-count{font-size:11px;color:var(--text2)}
.lib-ex-row{display:flex;align-items:center;gap:6px;padding:10px 14px;border-bottom:1px solid var(--border);transition:background .1s;flex-wrap:wrap}
.lib-ex-row:last-child{border-bottom:none}
.lib-ex-row:hover{background:var(--surface3)}
.lib-ex-name{flex:1;min-width:0;font-size:13px;color:var(--text);word-break:break-word}
.lib-ex-custom-tag{font-size:10px;color:var(--coach);font-weight:700;margin-left:4px}
.lib-vid-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;cursor:pointer;transition:transform .15s}
.lib-vid-dot:hover{transform:scale(1.5)}
.lib-vid-dot.has-vid{background:var(--accent)}
.lib-vid-dot.no-vid{background:var(--surface3);border:1px solid var(--border2)}
.lib-vid-inline{display:none;align-items:center;gap:6px;padding:6px 14px 10px;background:var(--surface3);border-bottom:1px solid var(--border);flex-wrap:wrap}
.lib-vid-inline.open{display:flex}
.lib-vid-input{background:var(--surface2);border:1px solid var(--border2);color:var(--text);
 padding:6px 10px;border-radius:6px;font-family:'Barlow',sans-serif;font-size:16px;flex:1;min-width:0}
.lib-vid-input:focus{outline:none;border-color:var(--accent)}
.lib-inline-add{display:flex;align-items:center;gap:8px;padding:8px 14px;background:var(--surface);border-top:1px solid var(--border);flex-wrap:wrap}
.lib-inline-input{background:var(--surface2);border:1px solid var(--border2);color:var(--text);
 padding:7px 10px;border-radius:6px;font-family:'Barlow',sans-serif;font-size:16px;flex:1;min-width:0}
.lib-inline-input:focus{outline:none;border-color:var(--accent)}
/* Ex picker in builder */
.expicker-sheets{display:flex;gap:4px;flex-wrap:wrap;margin-bottom:12px;
 background:var(--surface2);border:1px solid var(--border);border-radius:9px;padding:4px}
.expicker-sheet-btn{padding:5px 11px;border-radius:6px;border:none;background:transparent;
 color:var(--text2);cursor:pointer;font-size:12px;font-weight:600;font-family:'Barlow Semi Condensed',sans-serif;transition:all .15s;white-space:nowrap}
.expicker-sheet-btn.active{background:var(--accent);color:var(--btn-text)}
.expicker-cats{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:5px;margin-bottom:12px}
.expicker-cat-btn{padding:6px 10px;border-radius:7px;border:1px solid var(--border);background:var(--surface2);
 color:var(--text2);cursor:pointer;font-size:11px;font-weight:600;font-family:'Barlow',sans-serif;transition:all .15s;text-align:left;line-height:1.3}
.expicker-cat-btn:hover{border-color:var(--border2);color:var(--text)}
.expicker-cat-btn.active{border-color:var(--accent);background:var(--accent-dim);color:var(--accent)}
.expicker-body{max-height:calc(70vh - 160px);max-height:calc(70dvh - 160px);overflow-y:auto}
.expicker-list{display:flex;flex-direction:column;gap:1px;overflow-y:auto;border:1px solid var(--border);border-radius:7px}
.expicker-ex-btn{padding:8px 12px;border:none;background:transparent;color:var(--text);cursor:pointer;
 font-size:13px;font-family:'Barlow',sans-serif;text-align:left;transition:background .1s;display:flex;align-items:center;gap:8px;width:100%;border-bottom:1px solid var(--border)}
.expicker-ex-btn:last-child{border-bottom:none}
.expicker-ex-btn:hover{background:var(--surface3)}
.expicker-vid-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0}
.expicker-vid-dot.has{background:var(--accent)}
.expicker-vid-dot.no{background:var(--border2)}

/* MOBILITY BLOCK */
.mob-block{background:var(--surface2);border:1px solid var(--border);border-radius:8px;overflow:hidden;margin-bottom:10px}
.mob-block.building{border-color:rgba(var(--accent-rgb),.2)}
.mob-block-header{padding:10px 14px;background:var(--surface3);border-bottom:1px solid var(--border);
 display:flex;align-items:center;gap:8px}
.mob-block-title{font-size:11px;color:var(--accent3);text-transform:uppercase;letter-spacing:1.2px;font-weight:700;flex:1}
.mob-ex-row{display:grid;grid-template-columns:1fr 72px 72px auto;gap:8px;align-items:center;
 padding:8px 14px;border-bottom:1px solid var(--border)}
.mob-ex-row:last-child{border-bottom:none}
.mob-ex-name{font-size:13px;color:var(--text);display:flex;align-items:center;gap:6px}
.mob-ex-joint{font-size:10px;color:var(--text3);font-weight:600;text-transform:uppercase;
 background:var(--surface3);border-radius:3px;padding:1px 5px;flex-shrink:0}
.mob-add-row{display:flex;align-items:center;gap:8px;padding:8px 14px;
 border-top:1px solid var(--border);flex-wrap:wrap}

/* PROGRAM OVERVIEW */
.overview-week{margin-bottom:20px}
.overview-week-title{font-family:Barlow Condensed,sans-serif;font-size:18px;font-weight:800;
 letter-spacing:1px;text-transform:uppercase;color:var(--accent);margin-bottom:10px;
 display:flex;align-items:center;gap:10px}
.overview-week-title::after{content:'';flex:1;height:1px;background:var(--border)}
.overview-sessions{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.overview-session-card{background:var(--surface2);border:1px solid var(--border);border-radius:8px;
 overflow:hidden;cursor:pointer;transition:border-color .15s}
.overview-session-card:hover{border-color:var(--accent)}
.overview-session-header{padding:10px 14px;background:var(--surface3);border-bottom:1px solid var(--border);
 display:flex;align-items:center;gap:8px}
.overview-session-name{font-family:Barlow Condensed,sans-serif;font-size:15px;font-weight:700;flex:1}
.overview-session-type{font-size:11px;color:var(--text2);font-weight:600;text-transform:uppercase;letter-spacing:.5px}
.overview-session-body{padding:10px 14px}
.overview-ex-row{display:flex;align-items:baseline;gap:6px;padding:3px 0;
 border-bottom:1px solid var(--border);font-size:12px}
.overview-ex-row:last-child{border-bottom:none}
.overview-ex-slot{font-family:Barlow Condensed,sans-serif;font-size:13px;font-weight:700;
 color:var(--accent);width:22px;flex-shrink:0}
.overview-ex-name{flex:1;color:var(--text);line-height:1.3}
.overview-ex-vars{color:var(--text2);font-size:12px;white-space:nowrap;flex-shrink:0}
.overview-empty-session{padding:12px 14px;font-size:13px;color:var(--text2);font-style:italic}
.overview-no-sessions{font-size:12px;color:var(--text3);font-style:italic;padding:4px 0}

/* Prep strip inside an overview session card (2026-08-31). Mobility series
   fold to one line, building blocks always list their exercises. The density
   is a class on .ov-wrap, so the toggle swaps a className instead of
   re-rendering the modal. */
.ov-prep{padding:9px 14px 10px;background:rgba(var(--accent-rgb),.04);
 border-bottom:1px solid var(--border);display:flex;flex-direction:column;gap:6px}
.ov-prep-head{display:flex;align-items:baseline;gap:6px;font-family:'Barlow Semi Condensed',sans-serif;
 font-size:10px;font-weight:600;letter-spacing:1.4px;text-transform:uppercase;color:var(--text2)}
.ov-prep-count{margin-left:auto;letter-spacing:.6px}
.ov-prep-row{display:flex;align-items:baseline;gap:7px;padding-left:9px;min-height:18px;
 border-left:3px solid var(--accent3)}
.ov-prep-row.is-block{border-left-color:var(--accent)}
.ov-prep-lbl{flex:1;font-size:12px;font-weight:600;color:var(--text);line-height:1.25}
.ov-prep-row.is-block .ov-prep-lbl{color:var(--accent)}
.ov-prep-dose{font-size:11.5px;color:var(--text2);white-space:nowrap;font-weight:600}
.ov-prep-names{padding-left:12px;margin-top:2px;font-size:11.5px;color:var(--text2);line-height:1.45}
.ov-prep-names.is-block{color:var(--text);font-weight:500}
.ov-prep-flag{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--bad);margin-right:4px}
/* Density: mobility names hidden by default, shown in full, strip off. */
.ov-wrap .ov-prep-names.is-mob{display:none}
.ov-wrap.ovp-full .ov-prep-names.is-mob{display:block}
.ov-wrap.ovp-off .ov-prep{display:none}
.ov-wrap.ovp-off .ov-screenbar{display:none}
.ov-prep-seg{display:flex;align-self:center;margin-left:auto;border:1px solid var(--border);
 border-radius:7px;overflow:hidden}
.ov-prep-seg button{border:0;background:transparent;color:var(--text2);cursor:pointer;padding:6px 12px;
 font-family:'Barlow Semi Condensed',sans-serif;font-size:11.5px;font-weight:600;letter-spacing:.6px;
 text-transform:uppercase}
.ov-prep-seg button+button{border-left:1px solid var(--border)}
.ov-prep-seg button.on{background:var(--accent-dim);color:var(--accent)}
/* The one "why" line for a member, above week 1. */
.ov-screenbar{margin:0 0 18px;padding:12px 14px;background:var(--accent-dim);
 border-left:3px solid var(--accent);border-radius:0 8px 8px 0}
.ov-screenbar-t{font-family:'Barlow Semi Condensed',sans-serif;font-size:11px;font-weight:600;
 letter-spacing:1.4px;text-transform:uppercase;color:var(--accent);margin-bottom:3px}
.ov-screenbar-d{font-size:13px;color:var(--text);line-height:1.5}

/* TEMPLATES */
.template-card{background:var(--surface2);border:1px solid var(--border);border-radius:8px;padding:16px;
 display:flex;align-items:center;gap:12px;margin-bottom:10px}
.template-info{flex:1}
.template-name{font-weight:600;font-size:14px}
.template-meta{font-size:12px;color:var(--text2);margin-top:3px}

/* CLIENT VIEW */
.client-session-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden;margin-bottom:18px;box-shadow:0 2px 12px rgba(0,0,0,.18)}
.client-session-header{padding:16px 22px;background:linear-gradient(90deg,var(--surface2) 0%,rgba(var(--accent-rgb),.05) 100%);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:12px}
.client-session-title{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:22px;letter-spacing:.5px}
.client-session-body{padding:20px 22px;transition:none}
.client-session-body.collapsed{display:none}
.session-chevron{margin-left:auto;font-size:16px;color:var(--text2);transition:transform .2s;flex-shrink:0}
.session-chevron.open{transform:rotate(180deg)}
.prep-block{background:rgba(125,212,240,.05);border-left:3px solid var(--accent3);border-radius:0 8px 8px 0;padding:11px 16px;margin-bottom:8px;display:flex;flex-direction:column;gap:4px}
.prep-label{font-size:13px;color:var(--accent3);font-weight:700;letter-spacing:.5px}
.prep-desc{font-size:13px;color:var(--text);line-height:1.5}
/* Prep slot: 1A-1D is the straight-through block, 2A-2B its own block.
   Number first, letter second, so it never reads as a session slot (A1/B1). */
.prep-slot{flex:0 0 auto;min-width:21px;font-family:'Barlow Condensed',sans-serif;font-weight:700;font-size:12.5px;line-height:1.2;color:var(--text3);letter-spacing:.3px}
.client-ex-card{background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:16px 18px;margin-bottom:10px;transition:border-color .15s}
.client-ex-card:hover{border-color:var(--border2)}
/* Header holds: slot, exercise name, "Demo & cues", the Member's Room chip
   and Swap. It used to be a no-wrap flex row with an unconstrained name, so a
   long name ("Bulgarian Split Squat - DB") took the full width on a phone and
   pushed Swap off the right edge, half-rendered. Now the name is allowed to
   shrink and the row wraps, so the buttons drop to a second line instead of
   leaving the card. */
.client-ex-header{display:flex;align-items:center;gap:10px;margin-bottom:12px;flex-wrap:wrap}
.client-ex-slot{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:16px;color:var(--accent);
 background:var(--accent-dim);border-radius:6px;width:32px;height:32px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.client-ex-name{font-size:16px;font-weight:700;line-height:1.2;flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
.client-ex-header .btn,.client-ex-header .video-btn{flex-shrink:0}
.client-ex-fields{display:flex;gap:0;flex-wrap:wrap;margin-bottom:10px;border:1px solid var(--border);border-radius:8px;overflow:hidden}
.client-ex-field{display:flex;flex-direction:column;gap:3px;padding:9px 14px;border-right:1px solid var(--border);flex:1;min-width:70px}
.client-ex-field:last-child{border-right:none}
.client-ex-field-label{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:.8px;font-weight:700}
.client-ex-field-val{font-family:Barlow Condensed,sans-serif;font-size:18px;font-weight:700;color:var(--text);letter-spacing:.3px}
.client-notes{font-size:13px;color:var(--text);line-height:1.5;padding:8px 12px;background:rgba(var(--accent-rgb),.05);
 border:1px solid rgba(var(--accent-rgb),.15);border-radius:7px;margin-top:6px;display:flex;gap:7px;align-items:flex-start}
/* LOGGING */
.log-section{border-top:1px solid var(--border);margin-top:14px;padding-top:14px}
.log-section-title{font-size:10px;color:var(--accent);text-transform:uppercase;letter-spacing:1.2px;font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:8px}
.log-section-title::after{content:'';flex:1;height:1px;background:var(--border)}
.log-row{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:8px}
.log-input{background:var(--surface3);border:1px solid var(--border2);color:var(--text);
 padding:8px 12px;border-radius:7px;font-family:'Barlow',sans-serif;font-size:13px;width:100%;transition:border-color .15s}
.log-input:focus{outline:none;border-color:var(--accent)}
.log-input.has-value{border-color:rgba(var(--accent-rgb),.4);background:rgba(var(--accent-rgb),.04)}
.log-textarea{background:var(--surface3);border:1px solid var(--border2);color:var(--text);
 padding:8px 12px;border-radius:7px;font-family:'Barlow',sans-serif;font-size:13px;width:100%;
 resize:vertical;min-height:52px;transition:border-color .15s}
.log-textarea:focus{outline:none;border-color:var(--accent)}
.log-textarea.has-value{border-color:rgba(var(--accent-rgb),.4);background:rgba(var(--accent-rgb),.04)}
.saved-log{background:rgba(var(--accent-rgb),.05);border:1px solid rgba(var(--accent-rgb),.18);border-radius:8px;padding:10px 14px;margin-top:10px;font-size:12px}
.saved-log-label{font-size:10px;color:var(--accent);text-transform:uppercase;letter-spacing:1px;font-weight:700;margin-bottom:6px}
/* SET LOGGING */
.set-log-table{width:100%;border-collapse:collapse;margin-top:2px}
.set-log-table th{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:.8px;font-weight:700;
 padding:6px 8px;text-align:left;border-bottom:1px solid var(--border)}
.set-log-table td{padding:5px 4px;vertical-align:middle}
.set-num{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:16px;color:var(--accent);
 width:28px;text-align:center;padding:0 6px}
.set-input{background:var(--surface3);border:1px solid var(--border2);color:var(--text);
 padding:7px 10px;border-radius:6px;font-family:'Barlow',sans-serif;font-size:13px;width:100%;transition:border-color .15s}
.set-input:focus{outline:none;border-color:var(--accent)}
.set-input.has-value{border-color:rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.05)}
.set-saved-row{display:flex;gap:14px;font-size:12px;padding:5px 0;border-bottom:1px solid var(--border);flex-wrap:wrap}
.set-saved-row:last-child{border-bottom:none}
/* WEEK NAV */
.week-nav{display:flex;align-items:center;gap:6px;margin-bottom:20px;overflow-x:auto;padding:10px 14px;background:var(--surface2);border:1px solid var(--border);border-radius:10px;scrollbar-width:thin;scrollbar-color:var(--border2) transparent}
.week-nav::-webkit-scrollbar{height:4px}.week-nav::-webkit-scrollbar-track{background:transparent}.week-nav::-webkit-scrollbar-thumb{background:var(--border2);border-radius:2px}
.week-label-tag{display:inline-block;padding:3px 10px;border-radius:4px;font-size:11px;font-weight:700;
 text-transform:uppercase;letter-spacing:.8px;background:rgba(var(--accent-rgb),.15);color:var(--accent);
 border:1px solid rgba(var(--accent-rgb),.3);margin-left:6px;vertical-align:middle}
.week-label-tag.deload{background:rgba(255,152,74,.15);color:#ff984a;border-color:rgba(255,152,74,.3)}
.week-label-tag.test{background:rgba(46,204,113,.15);color:#2ecc71;border-color:rgba(46,204,113,.3)}
.week-label-tag.comp{background:rgba(255,71,87,.15);color:#ff4757;border-color:rgba(255,71,87,.3)}
.week-btn{flex-shrink:0;padding:5px 11px;border-radius:6px;border:1px solid var(--border2);background:transparent;
 color:var(--text2);cursor:pointer;font-weight:700;font-size:12px;transition:all .15s;font-family:Barlow Condensed,sans-serif;letter-spacing:.3px;touch-action:manipulation}
.week-btn:hover,.week-btn.active{border-color:var(--accent);color:var(--accent);background:var(--accent-dim)}
.week-display{font-family:Barlow Condensed,sans-serif;font-size:22px;font-weight:700;letter-spacing:1px;padding:0 6px}
.save-bar{display:flex;align-items:center;gap:12px;padding:14px 22px;background:var(--surface);
 border-top:2px solid rgba(var(--accent-rgb),.2);position:sticky;bottom:0;z-index:10;margin:0 -28px -28px;box-shadow:0 -4px 20px rgba(0,0,0,.3)}
.save-status{font-size:12px;color:var(--text3);flex:1}
/* LAST WEEK HINT */
.last-week-hint{font-size:11px;color:var(--accent3);margin-top:3px;font-style:italic;min-height:15px;opacity:.8}
/* SESSION MODE */
.session-pre-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden;margin-bottom:14px;transition:border-color .15s}
.session-pre-card:hover{border-color:var(--border2)}
.session-pre-header{padding:18px 22px;display:flex;align-items:center;gap:14px}
.session-pre-icon{width:44px;height:44px;border-radius:10px;background:var(--accent-dim);border:1px solid rgba(var(--accent-rgb),.2);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:Barlow Condensed,sans-serif;font-weight:800;font-size:18px;color:var(--accent)}
.session-pre-info{flex:1;min-width:0}
.session-pre-name{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:20px;letter-spacing:.3px}
.session-pre-meta{font-size:12px;color:var(--text2);margin-top:3px}
.session-pre-done{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--good);font-weight:700;padding:4px 12px;border-radius:20px;background:var(--good-tint);border:1px solid rgba(46,204,113,.3);white-space:nowrap}
.session-active-header{padding:14px 22px;background:rgba(var(--accent-rgb),.07);border-bottom:2px solid rgba(var(--accent-rgb),.25);display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.session-active-tag{font-size:11px;color:var(--accent);text-transform:uppercase;letter-spacing:1.2px;font-weight:700;padding:3px 10px;border-radius:20px;background:rgba(var(--accent-rgb),.15);border:1px solid rgba(var(--accent-rgb),.3)}
.session-elapsed{font-size:13px;color:var(--text2);font-family:Barlow Condensed,sans-serif;letter-spacing:.5px;margin-left:auto}
.set-row{display:flex;align-items:center;gap:6px;padding:7px 0;border-bottom:1px solid var(--border)}
.set-row:last-child{border-bottom:none}
.set-row.confirmed{background:rgba(46,204,113,.03)}
.set-num-cell{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:16px;color:var(--accent);width:26px;text-align:center;flex-shrink:0}
.set-field{display:flex;flex-direction:column;gap:2px;flex:1;min-width:56px}
.set-field-label{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.6px;font-weight:700}
.set-input-sm{background:var(--surface3);border:1px solid var(--border2);color:var(--text);padding:7px 9px;border-radius:6px;font-family:'Barlow',sans-serif;font-size:14px;width:100%;transition:border-color .15s;-webkit-appearance:none}
.set-input-sm:focus{outline:none;border-color:var(--accent)}
.set-input-sm.has-value{border-color:rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.05)}
/* Sets written as a range ("2-3"): rows past the floor are extra credit.
   NOTE: "optional" is already taken in this file by the RPE/note drawer
   (.set-optional-toggle / .set-optional-fields), hence is-extra. */
.set-extra-divider{display:flex;align-items:center;gap:8px;padding:9px 0 5px;font-size:10px;font-weight:700;
 letter-spacing:1.2px;text-transform:uppercase;color:var(--text3)}
.set-extra-divider::after{content:'';flex:1;height:1px;border-top:1px dashed var(--border2)}
.is-extra .set-num-cell{color:var(--text3)}
.is-extra .set-input-sm:not(.has-value){border-style:dashed;background:transparent}
.set-confirm-btn{width:38px;height:38px;border-radius:8px;border:1.5px solid var(--border2);background:transparent;color:var(--text3);cursor:pointer;font-size:20px;transition:all .15s;flex-shrink:0;display:flex;align-items:center;justify-content:center;touch-action:manipulation;line-height:1}
.set-confirm-btn:hover{border-color:#2ecc71;color:#2ecc71;background:rgba(46,204,113,.1)}
.set-confirm-btn.confirmed{border-color:#2ecc71;color:#2ecc71;background:rgba(46,204,113,.12)}
.set-optional-toggle{font-size:13px;color:var(--text2);background:none;border:1px solid var(--border2);cursor:pointer;padding:5px 8px;font-family:'Barlow',sans-serif;touch-action:manipulation;border-radius:6px;flex-shrink:0;white-space:nowrap;transition:all .15s;line-height:1}
.set-optional-toggle:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-dim)}
.set-optional-toggle.has-value{border-color:rgba(var(--accent-rgb),.4);color:var(--accent);background:rgba(var(--accent-rgb),.08)}
.set-optional-fields{display:none;gap:6px;padding:6px 0 2px;flex-wrap:wrap}
.set-optional-fields.open{display:flex}

/* ── CLIENT VOICE (2026-08-07) ──────────────────────────────────────
   What the athlete wrote while training alone, surfaced in Training >
   Live. Coach feedback already owns --coach (cool blue); the athlete's
   side takes --gp-up (warm) so the two voices never read as one. Both
   tokens are per-theme, so nothing here hard-codes a colour. */
.cn-note{border-left:3px solid var(--gp-up);background:color-mix(in srgb,var(--gp-up) 7%,transparent);
 border-radius:0 7px 7px 0;padding:8px 12px;margin:7px 0 0 24px;display:flex;flex-direction:column;gap:3px}
.cn-who{font-size:9.5px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;color:var(--gp-up)}
.cn-said{font-size:13px;color:var(--text);line-height:1.45;overflow-wrap:anywhere}
.cn-count{font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--gp-up);
 background:color-mix(in srgb,var(--gp-up) 11%,transparent);border:1px solid color-mix(in srgb,var(--gp-up) 30%,transparent);
 border-radius:999px;padding:2px 8px;line-height:1.5;white-space:nowrap;flex-shrink:0}
.cn-session{border:1px solid color-mix(in srgb,var(--gp-up) 35%,transparent);
 background:color-mix(in srgb,var(--gp-up) 6%,transparent);border-radius:10px;padding:12px 14px;
 margin-bottom:12px;display:flex;flex-direction:column;gap:8px}
.cn-session-top{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.cn-session-top .cn-who{font-size:10px}
.cn-when{font-size:11px;color:var(--text3);margin-left:auto}
.cn-session .cn-said{font-size:14px;line-height:1.5}
.cn-ready{display:flex;gap:14px;flex-wrap:wrap;align-items:center;padding-top:8px;
 border-top:1px solid color-mix(in srgb,var(--gp-up) 22%,transparent);font-size:12px;color:var(--text2);font-variant-numeric:tabular-nums}
.cn-ready b{color:var(--text);font-weight:700}
.cn-ready-score{font-family:Barlow Condensed,sans-serif;font-size:15px;font-weight:700}
.cn-reply{align-self:flex-start;font-family:'Barlow',sans-serif;font-size:12px;font-weight:650;
 color:var(--btn-text);background:var(--gp-up);border:none;border-radius:6px;padding:6px 14px;line-height:1.4;cursor:pointer}
.cn-reply:hover{filter:brightness(1.08)}
.cn-flag{width:6px;height:6px;border-radius:50%;background:var(--gp-up);flex:none;display:inline-block;margin-left:6px;vertical-align:middle}
.cn-coach-fb{border-left:3px solid var(--coach);background:rgba(26,143,196,.08);border-radius:0 7px 7px 0;
 padding:8px 12px;display:flex;flex-direction:column;gap:3px}
.cn-coach-fb .cn-who{color:var(--coach)}
#rest-timer-bar{display:none;position:fixed;bottom:0;left:0;right:0;z-index:200;background:var(--surface);border-top:1px solid var(--border2);padding:10px 20px calc(10px + env(safe-area-inset-bottom,0px));box-shadow:0 -6px 24px rgba(0,0,0,.5)}
body.keyboard-open #rest-timer-bar{display:none!important}
.rest-timer-inner{display:flex;align-items:center;gap:14px;max-width:640px;margin:0 auto}
.rest-timer-label{font-size:12px;color:var(--text2);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rest-timer-countdown{font-family:Barlow Condensed,sans-serif;font-size:30px;font-weight:700;letter-spacing:1px;min-width:58px;text-align:center;transition:color .2s}
.rest-timer-track{flex:2;height:4px;background:var(--surface3);border-radius:2px;overflow:hidden;min-width:50px}
.rest-timer-fill{height:100%;background:var(--accent);border-radius:2px;transition:width .9s linear}
.rest-timer-skip{background:none;border:1px solid var(--border2);color:var(--text2);border-radius:6px;padding:5px 14px;cursor:pointer;font-size:12px;font-family:'Barlow',sans-serif;white-space:nowrap;touch-action:manipulation;transition:all .15s}
.rest-timer-skip:hover{border-color:var(--accent);color:var(--accent)}
/* PROGRESS */
.progress-ex-picker{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:24px}
.progress-ex-btn{padding:7px 16px;border-radius:6px;border:1px solid var(--border2);background:var(--surface2);
 color:var(--text2);cursor:pointer;font-size:12px;font-weight:600;font-family:'Barlow',sans-serif;
 transition:all .15s;white-space:nowrap;letter-spacing:.3px}
.progress-ex-btn:hover,.progress-ex-btn.active{border-color:var(--accent);color:var(--accent);background:var(--accent-dim)}
/* PR BOARD */
.pr-board{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin-bottom:28px}
.pr-card{background:var(--surface2);border:1px solid var(--border);border-top:2px solid var(--border);border-radius:10px;padding:16px 18px;position:relative;transition:border-color .2s}
.pr-card:hover{border-color:var(--border2)}
.pr-card.has-pr{border-color:rgba(255,196,0,.25);border-top-color:#ffc400}
.pr-ex-name{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:.8px;font-weight:700;margin-bottom:8px;line-height:1.4;word-break:break-word}
.pr-value{font-family:Barlow Condensed,sans-serif;font-size:32px;font-weight:700;line-height:1;color:var(--text);margin-bottom:2px}
.pr-value span{font-size:16px;color:var(--text2);font-weight:400;margin-left:2px}
.pr-meta{font-size:11px;color:var(--text3);margin-top:4px}
.pr-badge{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:700;
 letter-spacing:.6px;text-transform:uppercase;color:#ffc400;margin-top:6px}
/* CHART PANEL */
.progress-panel{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:0;margin-bottom:16px}
.progress-panel-header{padding:18px 20px 14px;border-bottom:1px solid var(--border);
 display:flex;align-items:center;justify-content:space-between}
.progress-panel-title{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:18px;
 letter-spacing:.5px;color:var(--text)}
.progress-panel-sub{font-size:12px;color:var(--text3);margin-top:2px}
.progress-panel-body{padding:20px}
.chart-canvas-wrap{position:relative;height:180px}
.progress-stats{display:flex;gap:0;border-top:1px solid var(--border);margin-top:16px;border-radius:0 0 10px 10px;overflow:hidden}
.progress-stat{flex:1;padding:14px 20px;text-align:center;border-right:1px solid var(--border)}
.progress-stat:last-child{border-right:none}
.progress-stat-val{font-family:Barlow Condensed,sans-serif;font-size:26px;font-weight:700;color:var(--accent);line-height:1}
.progress-stat-val.gold{color:#ffc400}
.progress-stat-lbl{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:.8px;font-weight:700;margin-top:3px}
/* HEATMAP */
.heatmap-grid{display:flex;flex-wrap:wrap;gap:4px;padding:4px 0}
.heatmap-cell{width:28px;height:28px;border-radius:4px;display:flex;align-items:center;justify-content:center;
 font-size:10px;font-weight:700;color:var(--text3);cursor:default;transition:transform .1s;position:relative}
.heatmap-cell:hover{transform:scale(1.15);z-index:2}
.heatmap-cell.empty{background:var(--surface3);border:1px solid var(--border)}
.heatmap-cell.logged{background:rgba(var(--accent-rgb),.18);border:1px solid rgba(var(--accent-rgb),.35);color:var(--accent)}
.heatmap-cell.full{background:rgba(var(--accent-rgb),.38);border:1px solid rgba(var(--accent-rgb),.6);color:var(--accent)}
.heatmap-cell.current{box-shadow:0 0 0 2px var(--accent)}
.heatmap-legend{display:flex;align-items:center;gap:8px;font-size:11px;color:var(--text3);margin-top:10px}
.heatmap-swatch{width:14px;height:14px;border-radius:3px;display:inline-block}
.progress-empty{text-align:center;padding:48px 20px;color:var(--text3);font-size:13px;line-height:1.6}
/* v3.2+ Style Standard, Rule 5: section labels inside a view (11px uppercase
   letter-spacing 1.2px text3 color, optional 14px lucide icon left of text). */
.section-label{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1.2px;color:var(--text3);margin:22px 0 12px;display:flex;align-items:center;gap:8px}

/* v3.2+ Stat box pattern used by Performance Progress, Health Trends, Self
   Hub practice strip. .stat-row is the grid wrapper; each .stat-box is one
   card with label, big value, and optional sub line. */
.stat-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px}
.stat-box{padding:14px 16px;border:1px solid var(--border);background:var(--surface);border-radius:10px}
.stat-box-label{font-size:10px;font-weight:700;letter-spacing:1.2px;text-transform:uppercase;color:var(--text3);margin-bottom:6px}
.stat-box-value{font-family:'Barlow Condensed',sans-serif;font-size:24px;font-weight:800;line-height:1;color:var(--text)}
.stat-box-sub{font-size:11px;color:var(--text2);margin-top:4px}

.section-label-row{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.section-label-row-title{font-family:Barlow Condensed,sans-serif;font-size:13px;font-weight:700;
 letter-spacing:1.5px;text-transform:uppercase;color:var(--text3);white-space:nowrap}
.section-label-row::after{content:'';flex:1;height:1px;background:var(--border)}

/* MODAL */

.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:200;
 display:flex;align-items:center;justify-content:center;
 padding:16px;
 animation:fadeIn .2s;overscroll-behavior:none;-webkit-overflow-scrolling:none}
@media(max-height:600px){
 .modal-overlay{align-items:flex-start;padding:8px}
}
.modal{
 background:var(--surface);border:1px solid var(--border2);border-radius:14px;
 width:100%;
 /* Phone: nearly full screen */
 max-width:min(700px,calc(100vw - 24px));
 height:calc(100vh - 32px);height:calc(100dvh - 32px);
 max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);
 display:flex;flex-direction:column;overflow:hidden}
.modal--wide{max-width:min(960px,calc(100vw - 24px))}
/* Tablet 768px+ */
@media(min-width:768px){
 .modal{
   max-width:min(800px,calc(100vw - 48px));
   height:calc(100vh - 48px);height:calc(100dvh - 48px);
   max-height:calc(100vh - 48px);max-height:calc(100dvh - 48px)}
 .modal--wide{max-width:min(1100px,calc(100vw - 48px))}
}
/* Laptop 1200px+ */
@media(min-width:1200px){
 .modal{
   max-width:min(900px,calc(100vw - 80px));
   height:auto;
   min-height:60vh;
   max-height:calc(100vh - 80px);max-height:calc(100dvh - 80px)}
 .modal--wide{
   max-width:min(1400px,calc(100vw - 80px));
   min-height:60vh}
}
/* Large desktop 1600px+ */
@media(min-width:1600px){
 .modal{max-width:min(1000px,calc(100vw - 120px))}
 .modal--wide{max-width:min(1500px,calc(100vw - 120px))}
}
.modal-header{padding:18px 24px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.modal-title{font-family:Barlow Condensed,sans-serif;font-weight:700;font-size:22px;letter-spacing:.5px}
.modal-close{background:none;border:none;color:var(--text2);font-size:20px;cursor:pointer;padding:4px}
.modal-close:hover{color:var(--text)}
.modal-body{padding:24px;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;overflow-y:auto;flex:1;min-height:0}
.modal-footer{padding:14px 24px;border-top:1px solid var(--border);display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;flex-shrink:0}

/* TABLE */
table.list{width:100%;border-collapse:collapse;font-size:13px}
table.list th{padding:10px 14px;text-align:left;font-size:11px;color:var(--text3);
 text-transform:uppercase;letter-spacing:1px;border-bottom:1px solid var(--border);font-weight:600}
table.list td{padding:12px 14px;border-bottom:1px solid var(--border)}
table.list tr:last-child td{border-bottom:none}
table.list tr:hover td{background:var(--surface2)}

/* MISC */
.badge{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:700;letter-spacing:.3px}
.badge-green{background:rgba(76,175,80,.15);color:var(--good)}
.badge-orange{background:rgba(26,143,196,.15);color:var(--coach)}
.badge-blue{background:rgba(41,182,232,.12);color:var(--accent3)}
.badge-yellow{background:var(--accent-dim);color:var(--accent)}
.empty{text-align:center;padding:60px 20px;color:var(--text3);font-size:14px}
.empty-icon{font-size:40px;margin-bottom:12px}
.divider{height:1px;background:var(--border);margin:20px 0}
.toast{position:fixed;bottom:calc(24px + env(safe-area-inset-bottom,0px));left:50%;transform:translateX(-50%) translateY(80px);
 background:var(--accent);color:var(--btn-text);
 padding:12px 22px;border-radius:8px;font-weight:600;font-size:13px;
 max-width:calc(100vw - 40px);text-align:center;word-break:break-word;
 opacity:0;transition:transform .3s,opacity .3s;z-index:10000;pointer-events:none;
 box-shadow:0 4px 20px rgba(0,0,0,.4);white-space:pre-wrap}
.toast.show{transform:translateX(-50%) translateY(0);opacity:1}
.toast.toast-error{background:var(--accent2);color:#fff}
.toast.toast-warn{background:#ff984a;color:#1a0a00}
.search-bar{background:var(--surface2);border:1px solid var(--border2);color:var(--text);
 padding:9px 14px;border-radius:8px;font-family:'Barlow',sans-serif;font-size:14px;width:100%;max-width:340px}
.search-bar:focus{outline:none;border-color:var(--accent)}
/* Command Palette */
#cmd-overlay{position:fixed;inset:0;background:rgba(0,0,0,.40);z-index:11000;display:none;align-items:flex-start;justify-content:center;padding-top:min(20vh,140px)}
#cmd-overlay.open{display:flex}
#cmd-box{background:var(--surface);border:1px solid var(--border2);border-radius:14px;width:100%;max-width:520px;box-shadow:0 16px 50px rgba(0,0,0,.5);overflow:hidden;max-height:70vh;display:flex;flex-direction:column}
#cmd-input{background:transparent;border:none;border-bottom:1px solid var(--border);color:var(--text);font-family:'Barlow',sans-serif;font-size:16px;padding:16px 20px;width:100%;outline:none}
#cmd-input::placeholder{color:var(--text3)}
#cmd-results{overflow-y:auto;-webkit-overflow-scrolling:touch;max-height:calc(70vh - 56px)}
.cmd-group-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1.2px;color:var(--text3);padding:12px 20px 4px}
.cmd-item{display:flex;align-items:center;gap:12px;padding:10px 20px;cursor:pointer;transition:background .1s}
.cmd-item:hover,.cmd-item.active{background:var(--surface2)}
.cmd-item-icon{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--surface3)}
.cmd-item-text{flex:1;min-width:0}
.cmd-item-title{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmd-item-sub{font-size:11px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cmd-kbd{font-size:10px;color:var(--text3);background:var(--surface3);padding:2px 6px;border-radius:4px;border:1px solid var(--border);font-family:monospace}
@media(max-width:768px){.cmd-kbd-desktop{display:none!important}
 #cmd-overlay{padding-top:8px}
 #cmd-box{max-width:100%;border-radius:0;max-height:100vh;border:none}
 .cmd-item{padding:14px 20px;min-height:48px}
}
@media(pointer:coarse){.cmd-kbd-desktop{display:none!important}}


/* ── SCREENING ───────────────────────────────────────────── */
.assess-template-card{background:var(--surface2);border:1px solid var(--border);border-radius:10px;
 padding:18px 20px;margin-bottom:12px;transition:border-color .15s}
.assess-template-card:hover{border-color:var(--border2)}
.assess-template-name{font-family:Barlow Condensed,sans-serif;font-size:20px;font-weight:700;letter-spacing:.3px;margin-bottom:4px}
.assess-template-meta{font-size:12px;color:var(--text3)}
.assess-type-tabs{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px}
.assess-type-tab{padding:6px 14px;border-radius:20px;border:1px solid var(--border2);
 background:transparent;color:var(--text2);cursor:pointer;font-size:12px;font-weight:600;
 font-family:'Barlow',sans-serif;transition:all .15s}
.assess-type-tab.active{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}
.assess-test-row{display:grid;grid-template-columns:1fr 160px 120px 40px;gap:8px;align-items:center;
 padding:10px 14px;background:var(--surface3);border-radius:7px;margin-bottom:6px}
.assess-test-name{font-size:13px;font-weight:600;color:var(--text)}
.assess-test-unit{font-size:12px;color:var(--text2)}
/* assigned screening cards */
.assigned-assess-card{background:var(--surface2);border:1px solid var(--border);border-radius:10px;margin-bottom:12px;overflow:hidden}
.assigned-assess-header{padding:14px 18px;display:flex;align-items:center;gap:12px;cursor:pointer;
 border-bottom:1px solid transparent;transition:border-color .15s}
.assigned-assess-header:hover{border-bottom-color:var(--border)}
.assigned-assess-title{font-family:Barlow Condensed,sans-serif;font-size:18px;font-weight:700;flex:1}
.assigned-assess-body{padding:16px 18px}
.assess-result-row{display:grid;grid-template-columns:1fr 140px 100px;gap:10px;align-items:center;
 padding:8px 0;border-bottom:1px solid var(--border)}
.assess-result-row:last-child{border-bottom:none}
.assess-result-name{font-size:13px;color:var(--text)}
.assess-result-input{background:var(--surface3);border:1px solid var(--border2);color:var(--text);
 padding:7px 10px;border-radius:6px;font-family:'Barlow',sans-serif;font-size:13px;
 width:100%;transition:border-color .15s}
.assess-result-input:focus{outline:none;border-color:var(--accent)}
.assess-result-input.has-value{border-color:rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.05)}
.assess-result-notes{font-size:12px;color:var(--text2)}
/* history table */
.assess-history-table{width:100%;border-collapse:collapse;font-size:12px;margin-top:12px}
.assess-history-table th{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.8px;
 font-weight:700;padding:6px 10px;text-align:left;border-bottom:1px solid var(--border)}
.assess-history-table td{padding:7px 10px;border-bottom:1px solid var(--border);color:var(--text2)}
.assess-history-table tr:last-child td{border-bottom:none}
.assess-history-table td.best{color:var(--accent);font-weight:700}
.assess-pr-badge{display:inline-block;padding:1px 6px;border-radius:3px;font-size:9px;
 font-weight:700;letter-spacing:.5px;background:var(--surface3);color:var(--text2);margin-left:4px}
/* type badges */
.screen-badge{display:inline-flex;align-items:center;gap:3px;padding:2px 8px;border-radius:12px;
 font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;
 background:var(--surface3);color:var(--text2)}
.screen-badge.speed,.screen-badge.strength,.screen-badge.jump,.screen-badge.mobility,.screen-badge.mobility-upper{background:var(--surface3);color:var(--text2)}
/* coach results view */
.coach-screen-athlete-row{display:flex;align-items:center;gap:10px;padding:10px 14px;
 background:var(--surface3);border-radius:7px;margin-bottom:6px;cursor:pointer;transition:background .15s}
.coach-screen-athlete-row:hover{background:var(--surface2)}
/* Screening Hub / F-V Profiling / Biofeedback: hide inner renderers' pickers + page
   headers so the wrapper's own chrome takes over. The wrapper's own page-header is a
   direct child of the view, the unhide rules below restore it. */
#view-screening-hub .pa-athlete-bar{display:none}
#view-screening-hub .page-header{display:none}
#view-screening-hub > .page-header{display:flex}
#view-biofeedback-coach #biofeedback-panel .pa-athlete-bar{display:none}
#view-biofeedback-coach #biofeedback-panel .page-header{display:none}
#view-fv-profiling .pa-athlete-bar{display:none}
#view-fv-profiling .page-header{display:none}
#view-fv-profiling > .page-header{display:flex}
/* movement screening redesign */
.pa-athlete-bar{display:flex;align-items:center;gap:12px;padding:14px 20px;background:var(--surface2);
 border:1px solid var(--border);border-radius:12px;margin-bottom:24px}
.pa-athlete-bar-label{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:1px;font-weight:700;white-space:nowrap}
.pa-athlete-select{flex:1;background:var(--surface3);border:1px solid var(--border2);color:var(--text);
 padding:9px 36px 9px 14px;border-radius:8px;font-family:'Barlow',sans-serif;font-size:14px;font-weight:600;cursor:pointer;
 -webkit-appearance:none;appearance:none;
 background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%23888' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
 background-repeat:no-repeat;background-position:right 12px center}
.pa-athlete-select:focus{outline:none;border-color:var(--accent)}
.pa-section-title{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:1.2px;font-weight:700;
 margin-bottom:14px;display:flex;align-items:center;gap:10px}
.pa-section-title::after{content:'';flex:1;height:1px;background:var(--border);display:block}
.pa-template-card{background:var(--surface2);border:1px solid var(--border);border-radius:12px;
 padding:16px 20px;margin-bottom:10px;transition:border-color .15s;display:flex;align-items:flex-start;gap:14px}
.pa-template-card:hover{border-color:var(--border2)}
.pa-template-info{flex:1;min-width:0}
.pa-template-name{font-family:Barlow Condensed,sans-serif;font-size:19px;font-weight:700;letter-spacing:.3px;margin-bottom:4px}
.pa-template-meta{font-size:12px;color:var(--text3);margin-bottom:8px}
.pa-template-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
.pa-more-btn{background:none;border:1px solid var(--border2);color:var(--text3);border-radius:6px;
 width:30px;height:30px;cursor:pointer;font-size:16px;display:flex;align-items:center;justify-content:center;
 transition:all .15s;position:relative;flex-shrink:0}
.pa-more-btn:hover{border-color:var(--border2);color:var(--text);background:var(--surface3)}
.pa-more-menu{display:none;position:absolute;right:0;top:34px;background:var(--surface);border:1px solid var(--border2);
 border-radius:8px;padding:4px;z-index:50;min-width:130px;box-shadow:0 8px 24px rgba(0,0,0,.4)}
.pa-more-menu.open{display:block}
.pa-more-item{display:block;width:100%;text-align:left;padding:7px 12px;border:none;background:none;
 color:var(--text);font-size:13px;font-family:'Barlow',sans-serif;cursor:pointer;border-radius:5px;transition:background .1s}
.pa-more-item:hover{background:var(--surface2)}
.pa-more-item.danger{color:var(--accent2)}
.pa-screening-card{background:var(--surface2);border:1px solid var(--border);border-radius:12px;margin-bottom:10px;overflow:hidden}
.pa-screening-header{padding:14px 20px;display:flex;align-items:center;gap:12px;cursor:pointer;transition:background .12s}
.pa-screening-header:hover{background:var(--surface3)}
.pa-screening-title{font-family:Barlow Condensed,sans-serif;font-size:18px;font-weight:700;flex:1}
.pa-screening-body{padding:16px 20px;border-top:1px solid var(--border)}
.pa-empty{color:var(--text3);font-size:13px;padding:28px 20px;text-align:center;border:1px dashed var(--border);
 border-radius:10px;margin-bottom:10px}

/* VIDEO SCREENING */
.screen-badge.video{background:var(--surface3);color:var(--text2)}
.video-section-card{background:var(--surface2);border:1px solid var(--border);border-radius:10px;
 margin-bottom:14px;overflow:hidden}
.video-section-header{padding:16px 18px;border-bottom:1px solid var(--border)}
.video-section-category{font-size:10px;color:var(--accent);text-transform:uppercase;letter-spacing:1px;
 font-weight:700;margin-bottom:4px}
.video-section-title{font-family:Barlow Condensed,sans-serif;font-size:22px;font-weight:700;
 letter-spacing:.3px;margin-bottom:4px}
.video-section-exercises{font-size:13px;color:var(--text2);margin-bottom:6px}
.video-section-desc{font-size:12px;color:var(--text3);font-style:italic}
.video-section-body{padding:16px 18px}
.video-link-input-wrap{display:flex;gap:10px;align-items:center;margin-bottom:10px}
.video-link-input{flex:1;background:var(--surface3);border:1px solid var(--border2);color:var(--text);
 padding:9px 14px;border-radius:7px;font-family:'Barlow',sans-serif;font-size:13px;transition:border-color .15s}
.video-link-input:focus{outline:none;border-color:var(--accent)}
.video-link-input.has-value{border-color:rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.04)}
.video-link-btn{padding:9px 14px;border-radius:7px;background:var(--surface3);border:1px solid var(--border2);
 color:var(--accent);font-size:12px;font-weight:700;cursor:pointer;white-space:nowrap;transition:all .15s}
.video-link-btn:hover{border-color:var(--accent);background:var(--accent-dim)}
/* Coach scoring panel */
.coach-score-section{background:var(--surface3);border:1px solid var(--border);border-radius:8px;
 padding:14px 16px;margin-top:10px}
.coach-score-title{font-size:11px;color:var(--accent);text-transform:uppercase;letter-spacing:.8px;
 font-weight:700;margin-bottom:12px}
.coach-criteria-row{display:flex;align-items:center;gap:10px;padding:6px 0;
 border-bottom:1px solid var(--border)}
.coach-criteria-row:last-child{border-bottom:none}
.coach-criteria-label{flex:1;font-size:13px;color:var(--text2)}
.score-pills{display:flex;gap:4px}
.score-pill{width:30px;height:28px;border-radius:5px;border:1px solid var(--border2);background:transparent;color:var(--text3);font-size:12px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .15s;font-family:Barlow Condensed,sans-serif}
.score-pill:hover{border-color:var(--accent);color:var(--accent)}
.score-pill.selected{background:var(--accent);border-color:var(--accent);color:var(--btn-text)}
.score-pill.sel-2{background:#ff984a;border-color:#ff984a;color:#1a0a00}
.score-pill.sel-1{background:#ff4757;border-color:#ff4757;color:#fff}
/* ── Collapsible client nav groups ── */
.cnav-group{margin-bottom:2px}
.cnav-group-btn{width:100%;display:flex;align-items:center;gap:9px;padding:8px 12px;background:transparent;border:none;cursor:pointer;color:var(--text2);font-family:'Barlow Semi Condensed',sans-serif;font-size:13px;font-weight:600;letter-spacing:.2px;border-radius:7px;transition:background .15s,color .15s;text-align:left;text-transform:none;touch-action:manipulation}
.cnav-group-btn:hover{background:var(--surface2);color:var(--text)}
.cnav-group-btn.open{color:var(--text)}
.cnav-group-icon{flex-shrink:0;opacity:.5;display:flex;align-items:center}
.cnav-group-btn.open .cnav-group-icon{opacity:.8}
.cnav-group-label{flex:1}
.cnav-chevron{flex-shrink:0;display:flex;align-items:center;transition:transform .2s;opacity:.4}
.cnav-group-btn.open .cnav-chevron{transform:rotate(180deg);opacity:.7}
.cnav-items{overflow:hidden;max-height:0;transition:max-height .25s ease;padding-left:8px}
.cnav-items.open{max-height:500px}
.coach-section-notes{width:100%;background:var(--surface2);border:1px solid var(--border2);
 color:var(--text);padding:8px 12px;border-radius:6px;font-family:'Barlow',sans-serif;
 font-size:12px;margin-top:10px;resize:vertical;min-height:56px;transition:border-color .15s}
.coach-section-notes:focus{outline:none;border-color:var(--accent)}
.video-history-row{display:flex;gap:8px;align-items:flex-start;padding:10px 0;
 border-bottom:1px solid var(--border)}
.video-history-row:last-child{border-bottom:none}

/* READINESS CHECK-IN */
.readiness-card{background:var(--surface2);border:1px solid var(--border);border-radius:12px;padding:20px 22px;margin-bottom:20px}
.readiness-title{font-family:Barlow Condensed,sans-serif;font-size:17px;font-weight:700;margin-bottom:16px;display:flex;align-items:center;gap:8px;color:var(--text)}
.readiness-sliders{display:grid;grid-template-columns:1fr 1fr 1fr;gap:20px}
.readiness-slider-wrap{display:flex;flex-direction:column;gap:6px}
.readiness-slider-label{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:.8px;font-weight:700}
.readiness-slider-val{font-family:Barlow Condensed,sans-serif;font-size:28px;font-weight:700;color:var(--accent);line-height:1}
.readiness-slider{width:100%;accent-color:var(--accent);height:4px;cursor:pointer;margin-top:4px}
.readiness-submitted{background:rgba(var(--accent-rgb),.08);border:1px solid rgba(var(--accent-rgb),.25);border-radius:10px;padding:14px 18px;
 font-size:13px;color:var(--accent);display:flex;align-items:center;gap:12px;flex-wrap:wrap}
/* SESSION NOTES */
.session-notes-wrap{margin-top:18px;padding-top:18px;border-top:1px solid var(--border)}
.session-notes-label{font-size:11px;color:var(--text2);text-transform:uppercase;letter-spacing:.8px;font-weight:700;margin-bottom:8px}
.session-notes-input{width:100%;background:var(--surface3);border:1px solid var(--border2);color:var(--text);
 padding:10px 14px;border-radius:8px;font-family:'Barlow',sans-serif;font-size:13px;resize:vertical;
 min-height:72px;transition:border-color .15s;line-height:1.6}
.session-notes-input:focus{outline:none;border-color:var(--accent)}
/* COACH FEEDBACK */
.coach-feedback-bubble{background:rgba(26,143,196,.07);border-left:3px solid var(--coach);border-radius:0 10px 10px 0;
 padding:12px 16px;margin-top:12px}
.coach-feedback-label{font-size:10px;color:var(--coach);text-transform:uppercase;letter-spacing:.8px;font-weight:700;margin-bottom:4px}
.coach-feedback-text{font-size:14px;color:var(--text);line-height:1.6}
/* DASH IMPROVEMENTS */
.dash-activity-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--border)}
.dash-activity-row:last-child{border-bottom:none}
.dash-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.dash-dot.green{background:#2ecc71}
.dash-dot.orange{background:#ff984a}
.dash-dot.red{background:#ff4757}
.dash-dot.grey{background:var(--border2)}
.dash-readiness-badge{font-family:Barlow Condensed,sans-serif;font-size:13px;font-weight:700;padding:2px 8px;border-radius:4px}

@keyframes slideInRight{from{transform:translateX(100%)}to{transform:translateX(0)}}
@media(max-width:480px){
 .athlete-panel{width:100%}
 .mh-header,.mh-row{gap:8px!important}
 .mh-header .mh-name,.mh-row .mh-name{min-width:0!important;flex:0 0 84px;max-width:84px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 .mh-header .mh-recov,.mh-row .mh-recov{display:none!important}
 .mh-header .mh-avg,.mh-row .mh-avg{min-width:36px!important;font-size:16px!important}
 .mh-cell{min-width:8px!important}
 .users-row{gap:10px!important;padding:10px 12px!important}
 .users-row .users-row-arrow{display:none!important}
 .users-row .users-row-avatar{width:32px!important;height:32px!important;font-size:12px!important}
}

@media(max-width:768px){
 #dashboard-content [style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr!important}
 #dashboard-content [style*="grid-template-columns:repeat"]{grid-template-columns:1fr 1fr!important}
 #client-dashboard-content [style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr!important}
 #client-dashboard-content [style*="grid-template-columns:repeat"]{grid-template-columns:1fr 1fr!important}
 #client-trends-charts [style*="grid-template-columns"]{grid-template-columns:1fr!important}
 .hamburger{display:flex!important}
 input,select,textarea{font-size:max(16px,1em)!important}
 textarea{resize:none}
 .sidebar{position:fixed;left:-240px;top:0;bottom:0;width:240px;z-index:100;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px);transition:left .25s ease;box-shadow:4px 0 20px rgba(0,0,0,.5)}
 .sidebar.mobile-open{left:0}
 /* The closed drawer's shadow leaked a grey strip onto the left edge of every phone screen. */
 .sidebar:not(.mobile-open){box-shadow:none}
 .mobile-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:99}
 .mobile-overlay.show{display:block}
 .grid-2,.grid-3,.grid-4{grid-template-columns:1fr}
 #physical-assessment-content .pa-layout,
 #physical-assessment-content [style*="grid-template-columns:1fr 1fr"]{grid-template-columns:1fr!important}
 .main{padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom,0px))}
 .save-bar{margin:0 -16px -16px;padding:12px 16px;padding-bottom:calc(12px + env(safe-area-inset-bottom,0px))}
 .readiness-sliders{grid-template-columns:1fr 1fr}
 .client-ex-fields{flex-direction:column}
 .client-ex-field{border-right:none!important;border-bottom:1px solid var(--border)}
 .client-ex-field:last-child{border-bottom:none}
 .form-row.cols-3,.form-row.cols-4{grid-template-columns:1fr 1fr}
 .grid-4{grid-template-columns:1fr 1fr}
 .grid-3{grid-template-columns:1fr 1fr}
 .grid-2{grid-template-columns:1fr}
 .form-row.cols-2{grid-template-columns:1fr 1fr}
 .page-header{flex-direction:column;align-items:flex-start}
 .page-header>div:last-child{display:flex;flex-wrap:wrap;gap:6px;width:100%}
 .page-header .btn{flex:1;min-width:120px;text-align:center}
 .modal{max-width:100%;margin:0;border-radius:14px}
 .stat-card .stat-value{font-size:32px}
 .assess-test-row{grid-template-columns:1fr 100px 80px 40px}
 .assess-result-row{grid-template-columns:1fr 110px}
 .progress-stats{flex-wrap:wrap}
 .progress-stat{min-width:50%}
 .session-header{flex-wrap:wrap}
 .client-session-header{flex-wrap:wrap;padding:12px 16px}
 .week-btn{min-height:44px;padding:8px 14px}
 table.list{font-size:12px}
 table.list th,table.list td{padding:8px 10px}
 .btn-xs{min-height:44px;padding:4px 10px}
 .btn-sm{min-height:44px}
 .form-input,.form-select,.form-textarea{font-size:16px}
 .modal-body{padding:16px;overflow-y:auto;flex:1;min-height:0}
 .modal-header{padding:14px 16px;flex-shrink:0}
 .modal-footer{padding:12px 16px;flex-shrink:0}
 /* Exercise library mobile */
 .lib-shell{
   display:flex;
   flex-direction:column;
   min-height:unset;
   height:calc(100vh - 140px);height:calc(100dvh - 140px);
   max-height:calc(100vh - 140px)
 }
 .lib-sheets{display:none!important}
 .lib-sheet-dropdown-wrap{
   display:flex;max-height:calc(100dvh - 140px)
 }
 .lib-sheets{display:none!important}
 .lib-sheet-dropdown-wrap{
   display:flex;align-items:center;
   border-bottom:1px solid var(--border);background:var(--surface);
   flex-shrink:0;padding:10px 12px;gap:10px;
 }
 .lib-sheet-dropdown-label{
   font-size:10px;font-weight:700;letter-spacing:1.5px;text-transform:uppercase;
   color:var(--text3);white-space:nowrap;font-family:'Barlow Semi Condensed',sans-serif;
 }
 .lib-sheet-select{
   flex:1;background:var(--surface2);border:1px solid var(--border2);
   color:var(--text);border-radius:8px;
   padding:10px 38px 10px 14px;font-family:'Barlow Semi Condensed',sans-serif;
   font-size:15px;font-weight:600;letter-spacing:.2px;
   cursor:pointer;-webkit-appearance:none;appearance:none;
   background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%236fa8c4' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");
   background-repeat:no-repeat;background-position:right 12px center;background-size:16px;
   min-height:44px;touch-action:manipulation;
   transition:border-color .15s,box-shadow .15s;
 }
 .lib-sheet-select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px rgba(var(--accent-rgb),.18)}
 .lib-sheet-btn{white-space:nowrap;flex-shrink:0;min-height:44px;padding:10px 14px;touch-action:manipulation}
 .lib-shell{grid-template-columns:1fr!important;height:auto!important;max-height:none!important;border:none!important;border-radius:0!important;overflow:visible!important;display:flex!important;flex-direction:column!important;gap:0!important}
 .lib-main{min-height:0;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--border);border-top:none;border-radius:0 0 var(--radius) var(--radius)}
 .lib-main-top{flex-shrink:0}
 .lib-body{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;overscroll-behavior:contain;padding:10px 12px;min-height:200px;max-height:calc(100vh - 280px)}
 .lib-cat-grid{grid-template-columns:repeat(auto-fill,minmax(min(140px,calc(50% - 4px)),1fr));max-height:calc(100dvh - 280px)}
 .lib-cat-grid{grid-template-columns:repeat(auto-fill,minmax(min(140px,calc(50% - 4px)),1fr));gap:6px;margin-bottom:12px}
 .lib-cat-card{padding:10px 12px}
 .lib-search-new{max-width:100%!important;font-size:16px!important}
 /* Exercise rows on mobile: wrap buttons below name */
 .lib-ex-row{flex-wrap:wrap;gap:6px;padding:10px 12px}
 .lib-ex-name{width:100%;flex-basis:100%}
 /* Section header wraps on mobile */
 .lib-ex-section-header{flex-wrap:wrap;gap:6px}
 /* Video input full width on mobile */
 .lib-vid-input{min-width:0;width:100%}
 .lib-vid-inline{flex-direction:column;align-items:stretch}
 /* Inline add full width on mobile */
 .lib-inline-add{flex-wrap:wrap}
 .lib-inline-input{min-width:0}
 /* Exercise picker mobile */
 .expicker-body{max-height:calc(60vh - 100px)}
 .expicker-cats{grid-template-columns:repeat(auto-fill,minmax(100px,1fr))}
}
@media(orientation:landscape) and (max-width:1024px){
 /* Landscape phones: sidebar stays as slide-over, content full height */
 .main{padding:12px;padding-bottom:calc(12px + env(safe-area-inset-bottom,0px))}
 .page-title{font-size:18px}
 .page-header{margin-bottom:10px}
 .page-sub{font-size:12px}
}
@media(orientation:landscape) and (max-height:500px){
 /* Short landscape phones (iPhone SE landscape etc) - compact sidebar when open */
 .sidebar{width:210px}
 .cnav-group-btn{padding:5px 10px;font-size:12px}
 .nav-item{padding:6px 10px;min-height:36px;font-size:12px}
 .cnav-items{padding-left:6px}
 #client-nav-groups{padding:4px 0}
 .sidebar-logo{padding:6px 12px}
 /* Compact modals in landscape */
 .modal{max-height:90vh;max-height:90dvh}
 .modal-body{max-height:calc(75dvh - 120px)}
 /* Compact page headers */
 .page-title{font-size:17px}
 .page-header{margin-bottom:8px;flex-direction:row;align-items:center}
 /* Session cards more compact */
 .session-pre-card{padding:10px 14px}
 .client-session-header{padding:10px 14px}
}
@media(min-width:769px){
 .hamburger{display:none!important}
 .mobile-overlay{display:none!important}
}
.btn-outline-accent{border:1px solid var(--accent);background:transparent;color:var(--accent);cursor:pointer;transition:background .15s;font-family:"Barlow Semi Condensed",sans-serif;font-size:12px;font-weight:700;white-space:nowrap;padding:5px 12px;border-radius:7px}
.btn-outline-accent:hover,.btn-outline-accent:focus-visible{background:var(--accent-dim)}
.pick-recipe-btn{width:100%;border:none;outline:none;border-radius:8px;padding:12px 16px;background:var(--accent) !important;color:var(--btn-text) !important;cursor:pointer;font-family:'Barlow Semi Condensed',sans-serif;font-size:14px;font-weight:700;letter-spacing:.5px;transition:opacity .15s,transform .1s;display:block;text-align:center;margin-top:8px;-webkit-appearance:none;appearance:none}
.pick-recipe-btn:hover,.pick-recipe-btn:focus-visible{opacity:.88}
.pick-recipe-btn:active{transform:scale(.98)}
.recipe-row-card{padding:10px 12px;background:var(--surface2);border:1px solid var(--border);border-radius:8px;cursor:pointer;transition:border-color .15s,background .15s;user-select:none}
.recipe-row-card:hover{border-color:var(--accent);background:var(--surface3)}
.recipe-row-card:active{opacity:.85}
.food-row-item{padding:7px 10px;border-radius:7px;cursor:pointer;transition:background .1s;display:flex;align-items:center;justify-content:space-between;gap:8px}
.food-row-item:hover,.food-row-item:focus-visible{background:var(--surface2)}
.food-row-item.selected{background:var(--accent-dim)}

/* Notification panel */
.notif-item{padding:12px 16px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .15s}
.notif-item:hover{background:var(--surface2)}
.notif-item.unread{border-left:3px solid var(--accent)}
.notif-item .notif-title{font-size:13px;font-weight:600;color:var(--text)}
.notif-item .notif-body{font-size:11px;color:var(--text2);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.notif-item .notif-time{font-size:10px;color:var(--text3);margin-top:4px}
.notif-header{padding:12px 16px;font-family:Barlow Condensed,sans-serif;font-size:16px;font-weight:700;color:var(--text);border-bottom:1px solid var(--border);display:flex;justify-content:space-between;align-items:center;letter-spacing:.5px;text-transform:uppercase}
.notif-empty{padding:32px 16px;text-align:center;color:var(--text3);font-size:13px}

/* Smart suggestion badges */
.smart-suggestion{font-size:11px;padding:2px 8px;border-radius:10px;margin-left:8px;font-weight:600;letter-spacing:.3px;white-space:nowrap}
.smart-suggestion-up{background:rgba(46,204,113,.12);color:#2ecc71;border:1px solid rgba(46,204,113,.25)}
.smart-suggestion-hold{background:var(--accent-dim);color:var(--accent);border:1px solid rgba(var(--accent-rgb),.2)}
.smart-suggestion-down{background:rgba(255,71,87,.1);color:var(--accent2);border:1px solid rgba(255,71,87,.2)}

/* Training video */
.tvid-section{margin-top:8px;padding:8px 14px;background:var(--surface2);border:1px solid var(--border);border-radius:8px}
.tvid-requested{border-color:rgba(var(--accent-rgb),.4);background:var(--accent-dim)}
.tvid-feedback{font-size:12px;color:var(--text2);padding:8px 10px;background:var(--surface3);border-radius:6px;margin-top:6px;border-left:3px solid var(--accent);line-height:1.5}

/* Coach container tab strip, appears at top of contained views (Plan, Library) */
.container-tabs{display:flex;gap:4px;background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:4px;width:fit-content;max-width:100%;margin:0 0 18px;flex-wrap:wrap}
.container-tabs .ctab{padding:7px 18px;border-radius:7px;border:none;cursor:pointer;font-size:13px;font-weight:600;font-family:'Barlow Semi Condensed',sans-serif;letter-spacing:.3px;background:transparent;color:var(--text2);transition:background .15s,color .15s}
.container-tabs .ctab:hover{color:var(--text)}
.container-tabs .ctab.active{background:var(--accent);color:var(--btn-text,#fff)}
/* Unread badge inside a container tab (2026-08-02). Inherits the tab's
   colours so it reads correctly on both the resting and the active tab:
   accent pill on a plain tab, inverted pill on the active one. */
.container-tabs .ctab{display:inline-flex;align-items:center;gap:7px}
.container-tabs .ctab .ctab-badge{background:var(--accent);color:var(--btn-text,#fff);font-size:10px;font-weight:800;
  padding:1px 6px;border-radius:8px;min-width:16px;text-align:center;line-height:1.5}
.container-tabs .ctab.active .ctab-badge{background:var(--btn-text,#fff);color:var(--accent)}

.users-row-active{border-color:var(--accent)!important;background:var(--surface2)!important}

/* Coach Athletes Workspace (v3.2 Option N): two-pane layout.
   Left = roster, right = selected athlete detail panel with hub actions. */
.caw-workspace{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);gap:18px;align-items:start;margin-top:6px;transition:grid-template-columns .2s ease}
@media (max-width:900px){.caw-workspace{grid-template-columns:minmax(0,1fr)}}

/* v3.2+ Stage 2: roster collapse to 60px initials rail. Hide search/filter/
   sub-header content when collapsed; toggle button stays visible. */
#view-athletes[data-roster-collapsed="true"] .caw-workspace{grid-template-columns:64px 1fr}
#view-athletes[data-roster-collapsed="true"] .users-row{padding:6px;gap:0;justify-content:center;min-width:0}
#view-athletes[data-roster-collapsed="true"] .users-row > *:not(.users-row-avatar){display:none}
#view-athletes[data-roster-collapsed="true"] #users-search,
#view-athletes[data-roster-collapsed="true"] #users-tabs,
#view-athletes[data-roster-collapsed="true"] #coach-filter-btns,
#view-athletes[data-roster-collapsed="true"] #users-filter-breadcrumb,
#view-athletes[data-roster-collapsed="true"] #athletes-sub,
#view-athletes[data-roster-collapsed="true"] .page-header button[onclick*="openBroadcastModal"]{display:none}
/* Today mode (no athlete selected): hide the entire view-athletes page-header
   (USERS title + filter strip + Broadcast/Add/Collapse buttons) so the embedded
   dashboard owns the surface. Roster auto-collapses to 64px regardless of the
   user's manual preference. */
#view-athletes[data-mode="today"] > .page-header,
#view-athletes[data-mode="today"] > #users-tabs,
#view-athletes[data-mode="today"] > div[style*="users-filter-breadcrumb"],
#view-athletes[data-mode="today"] > #users-filter-breadcrumb,
#view-athletes[data-mode="today"] > div:has(> #coach-filter-btns){display:none}
@media (max-width:900px){
 #view-athletes[data-roster-collapsed="true"] .caw-workspace{grid-template-columns:1fr}
}
.caw-roster{min-width:0}
.caw-pane{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:0;min-height:480px;position:sticky;top:14px}
/* v3.2+ unified surface: empty state hosts the embedded view-dashboard. The
   old centred icon prompt is gone since dashboard owns this surface now. */
.caw-empty{padding:24px;min-height:480px;color:var(--text2)}
.caw-empty > .caw-embed{padding:0!important}
.caw-empty:empty{padding:60px 24px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.caw-detail{padding:22px 26px}

/* v3.2+ Stage 2 athlete header strip: identity row + 6 score chips + engagement row. */
.caw-ahs{display:flex;flex-direction:column;gap:10px;margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--border)}
.caw-ahs-id{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.caw-ahs-name{font-family:'Barlow Condensed',sans-serif;font-size:30px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;line-height:1;color:var(--text)}
.caw-ahs-tier{font-size:10px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;background:var(--accent-dim);color:var(--accent);padding:3px 9px;border-radius:999px}
.caw-ahs-meta{font-size:12px;color:var(--text3)}
.caw-ahs-spacer{flex:1}
.caw-ahs-action{background:transparent;border:1px solid var(--border2);color:var(--text);padding:6px 12px;border-radius:7px;cursor:pointer;font-size:12px;font-family:inherit}
.caw-ahs-action:hover{border-color:var(--accent);color:var(--accent)}
.caw-ahs-chips{display:flex;gap:6px;flex-wrap:wrap}
.caw-ahs-chip{display:inline-flex;flex-direction:column;align-items:center;padding:6px 12px;background:var(--surface);border:1px solid var(--border);border-radius:8px;min-width:60px}
.caw-ahs-chip-l{font-size:9px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--text3)}
.caw-ahs-chip-v{font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:800;line-height:1;margin-top:2px}
.caw-ahs-chip.cleared{border-color:rgba(34,197,94,.4)}
.caw-ahs-chip.cleared .caw-ahs-chip-v{color:#22c55e}
.caw-ahs-chip.watch{border-color:rgba(245,158,11,.4)}
.caw-ahs-chip.watch .caw-ahs-chip-v{color:#f59e0b}
.caw-ahs-chip.priority{border-color:rgba(239,68,68,.4)}
.caw-ahs-chip.priority .caw-ahs-chip-v{color:#ef4444}
.caw-ahs-eng{display:flex;gap:10px;font-size:11px;color:var(--text2);align-items:center;flex-wrap:wrap}
.caw-ahs-eng .caw-ahs-eng-k{color:var(--text3)}
.caw-ahs-eng strong{color:var(--text);font-weight:600}
.caw-ahs-eng strong.cleared{color:#22c55e}
.caw-ahs-eng strong.watch{color:#f59e0b}
.caw-ahs-eng strong.caw-ahs-unread{color:var(--accent2)}
.caw-ahs-eng-sep{color:var(--text3);opacity:.5}
/* In-person session tracking row (feature #3). Shown only when engagement_mode = 'in_person'. */
.caw-ahs-cs{display:flex;gap:10px;font-size:11px;color:var(--text2);align-items:center;flex-wrap:wrap}
.caw-ahs-cs .caw-ahs-eng-k{color:var(--text3)}
.caw-ahs-cs strong{color:var(--text);font-weight:600}
.caw-ahs-cs .caw-ahs-cs-btn{margin-left:auto;background:transparent;border:1px solid var(--border2);color:var(--text);padding:5px 10px;border-radius:7px;cursor:pointer;font-size:11px;font-family:inherit;font-weight:600}
.caw-ahs-cs .caw-ahs-cs-btn:hover{border-color:var(--accent);color:var(--accent)}
/* Loyalty pending chip (feature #1). Shown on the identity row when the athlete has unredeemed grants. */
.caw-ahs-loy{display:inline-flex;align-items:center;gap:5px;background:rgba(245,158,11,.12);border:1px solid rgba(245,158,11,.4);color:#f59e0b;font-size:10px;font-weight:800;letter-spacing:.8px;text-transform:uppercase;padding:3px 9px;border-radius:999px;cursor:pointer}
.caw-ahs-loy:hover{background:rgba(245,158,11,.2);border-color:rgba(245,158,11,.6)}
.caw-ahs-loy strong{color:#f59e0b;font-weight:800}

/* Legacy classes kept for any code that still references them. */
.caw-detail-header{margin-bottom:18px;padding-bottom:14px;border-bottom:1px solid var(--border)}
.caw-detail-name{font-family:'Source Serif 4',serif;font-size:24px;font-weight:700;color:var(--text);letter-spacing:-0.3px;line-height:1.1}
.caw-detail-meta{font-size:11px;color:var(--text3);margin-top:4px;text-transform:uppercase;letter-spacing:.8px;font-weight:600}
.caw-hub-tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin-bottom:18px}
.caw-hub-tile{background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:14px 12px;text-align:left;cursor:pointer;color:var(--text);font-family:inherit;font-size:13px;font-weight:600;display:flex;flex-direction:column;gap:6px;transition:border-color .12s ease,transform .08s ease}
.caw-hub-tile:hover{border-color:var(--accent);transform:translateY(-1px)}
.caw-hub-tile svg{opacity:.65}
.caw-hub-tile-label{font-weight:700}
.caw-hub-tile-sub{font-size:10px;color:var(--text3);text-transform:uppercase;letter-spacing:.6px;font-weight:600}
.caw-summary{margin-top:8px}
.caw-summary-section{margin-bottom:18px}
.caw-summary-label{font-size:10px;text-transform:uppercase;letter-spacing:1.2px;color:var(--accent);font-weight:800;margin-bottom:10px}
.caw-score-row{display:flex;gap:6px;flex-wrap:wrap}
.caw-score-chip{flex:1 1 90px;min-width:90px;text-align:center;padding:10px 8px;border-radius:8px;border:1px solid var(--border);background:var(--surface2)}
.caw-score-chip-label{font-size:9px;text-transform:uppercase;letter-spacing:.8px;font-weight:700;color:var(--text3);margin-bottom:3px}
.caw-score-chip-value{font-family:'Barlow Condensed',sans-serif;font-size:22px;font-weight:900;line-height:1}
.caw-score-chip.cleared{border-color:rgba(34,197,94,0.3);background:rgba(34,197,94,0.06)}
.caw-score-chip.cleared .caw-score-chip-value{color:#22c55e}
.caw-score-chip.watch{border-color:rgba(245,158,11,0.3);background:rgba(245,158,11,0.06)}
.caw-score-chip.watch .caw-score-chip-value{color:#f59e0b}
.caw-score-chip.priority{border-color:rgba(239,68,68,0.3);background:rgba(239,68,68,0.06)}
.caw-score-chip.priority .caw-score-chip-value{color:#ef4444}

/* Workspace tab strip (sits below header, owns content area) */
.caw-tabs{display:flex;gap:2px;background:var(--surface2);border-radius:9px;padding:4px;border:1px solid var(--border);width:fit-content;max-width:100%;margin-bottom:16px;flex-wrap:wrap}
.caw-tab{padding:7px 16px;border-radius:7px;border:none;cursor:pointer;font-size:13px;font-weight:600;font-family:'Barlow Semi Condensed',sans-serif;letter-spacing:.3px;background:transparent;color:var(--text2);transition:background .12s,color .12s}
.caw-tab:hover{color:var(--text)}
.caw-tab.active{background:var(--accent);color:var(--btn-text,#fff)}
.caw-tab-content{min-height:200px}
.caw-glance{display:flex;flex-direction:column;gap:16px}
.caw-action-row{display:flex;align-items:center;gap:10px;padding:10px 14px;width:100%;background:var(--surface2);border:1px solid var(--border);border-radius:8px;cursor:pointer;font-family:inherit;color:var(--text);text-align:left;margin-bottom:6px;transition:border-color .12s}
.caw-action-row:hover{border-color:var(--accent)}
.caw-action-icon{display:flex;align-items:center;justify-content:center;width:18px;color:var(--accent)}
.caw-action-icon svg{display:block}
.caw-action-label{flex:1;font-size:13px;font-weight:600}
.caw-action-arrow{display:flex;align-items:center;color:var(--text3)}
.caw-action-row.caw-action-priority{border-color:rgba(239,68,68,.35);background:rgba(239,68,68,.04)}
.caw-action-row.caw-action-priority .caw-action-icon{color:var(--accent2)}
.caw-action-row.caw-action-watch{border-color:rgba(245,158,11,.35);background:rgba(245,158,11,.04)}
.caw-action-row.caw-action-watch .caw-action-icon{color:#f59e0b}
.caw-action-row.caw-action-cleared{border-color:rgba(34,197,94,.35);background:rgba(34,197,94,.04)}
.caw-action-row.caw-action-cleared .caw-action-icon{color:#22c55e}
.caw-stat-row{display:flex;gap:8px;flex-wrap:wrap}
.caw-stat{flex:1 1 120px;min-width:120px;padding:10px 14px;background:var(--surface2);border-radius:8px;border:1px solid var(--border);text-align:center}
.caw-stat-label{font-size:9px;text-transform:uppercase;letter-spacing:.8px;color:var(--text3);font-weight:700;margin-bottom:3px}
.caw-stat-value{font-family:'Barlow Condensed',sans-serif;font-size:22px;font-weight:800;color:var(--text);line-height:1}
.caw-stat-sub{font-size:10px;color:var(--text3);margin-top:3px}

/* Embedded view overrides: when a coach-side view-* element is moved into
   the workspace right pane, hide its internal page headers and athlete
   pickers because the workspace owns both. */
.caw-embed.view{display:block!important;padding:0!important}
.caw-embed > .page-header{display:none!important}
.caw-embed > .shub-header{display:none!important}
.caw-embed #fv-athlete-picker,
.caw-embed #shub-athlete-picker{display:none!important}
.caw-embed > .shub-tabs{margin-top:0!important}
.caw-embed > #fv-wizard-banner:empty{display:none!important}

/* .coach-context-bar removed 2026-05-12: superseded by the v3.2+ unified
   workspace which owns athlete context inside view-athletes. */

/* Sub-group tab strip, sits directly under the main container tabs when
   the active view is part of a sub-group (e.g. Nutrition/7-Day/Trends/Recipes
   under Health Hub > Nutrition). Same pill shape, slightly lighter to read
   as secondary navigation. */
/* Roster row kebab (per-athlete quick admin: mark test, archive, open
   settings). Uses native <details> so click-outside-to-close + keyboard
   handling come for free. */
.users-row-kebab{position:relative;flex-shrink:0}
.users-row-kebab>summary{list-style:none;width:28px;height:28px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--text2);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;line-height:1;user-select:none}
.users-row-kebab>summary::-webkit-details-marker{display:none}
.users-row-kebab>summary:hover{background:var(--surface2);border-color:var(--border);color:var(--text)}
.users-row-kebab[open]>summary{background:var(--surface2);border-color:var(--accent);color:var(--accent)}
.users-row-kebab-menu{position:absolute;top:calc(100% + 6px);right:0;min-width:160px;background:var(--surface);border:1px solid var(--border);border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.25);padding:4px;z-index:30;display:flex;flex-direction:column}
.users-row-kebab-menu button{appearance:none;background:transparent;border:none;color:var(--text);padding:8px 12px;text-align:left;font-size:13px;font-weight:500;font-family:inherit;border-radius:6px;cursor:pointer}
.users-row-kebab-menu button:hover{background:var(--surface2)}

.container-subtabs{display:flex;gap:4px;background:transparent;border:1px solid var(--border2);border-radius:10px;padding:4px;width:fit-content;max-width:100%;margin:-8px 0 18px;flex-wrap:wrap}
/* Sub-strip buttons match the main-strip button dimensions (7×18 padding,
   13px font, 7px radius) so labels like "Create" / "Plan" / "Library" /
   "Insights" sit at the same weight as the parent "Plan" / "Library" /
   "Content" labels above. The strip container still differs (transparent
   background, border2 outline) so the visual hierarchy stays readable. */
.container-subtabs .ctab-sub{padding:7px 18px;border-radius:7px;border:none;cursor:pointer;font-size:13px;font-weight:600;font-family:'Barlow Semi Condensed',sans-serif;letter-spacing:.3px;background:transparent;color:var(--text3);transition:background .15s,color .15s}
.container-subtabs .ctab-sub:hover{color:var(--text)}
.container-subtabs .ctab-sub.active{background:var(--accent);color:var(--btn-text,#fff)}

/* Two-column Messages layout (coach side) */
.msg-twocol{display:grid;grid-template-columns:320px 1fr;gap:14px;align-items:stretch;min-height:calc(100vh - 140px);min-height:calc(100dvh - 140px)}
.msg-rail{background:var(--surface);border:1px solid var(--border);border-radius:12px;display:flex;flex-direction:column;overflow:hidden;min-height:0}
.msg-rail-header{padding:14px 16px 10px;border-bottom:1px solid var(--border)}
.msg-search{margin:10px 12px 8px;font-size:13px}
.msg-list{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch}
.msg-empty-rail{padding:30px 16px;text-align:center;color:var(--text3);font-size:13px}
.msg-row{display:flex;align-items:center;gap:10px;padding:10px 14px;border-bottom:1px solid var(--border);cursor:pointer;transition:background .12s}
.msg-row:hover{background:var(--surface2)}
.msg-row.active{background:var(--surface2);border-left:3px solid var(--accent);padding-left:11px}
.msg-row.unread{background:rgba(var(--accent-rgb),.04)}
.msg-row.unread .msg-row-name{color:var(--text);font-weight:700}
.msg-row.unread .msg-row-preview{color:var(--text2)}
.msg-row-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.msg-row-top{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.msg-row-name{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.msg-row-time{font-size:11px;color:var(--text3);flex-shrink:0;white-space:nowrap}
.msg-row-bot{display:flex;align-items:center;justify-content:space-between;gap:8px}
.msg-row-preview{font-size:12px;color:var(--text3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
.msg-row-badge{background:var(--accent2);color:#fff;font-size:10px;font-weight:800;padding:1px 7px;border-radius:10px;min-width:18px;text-align:center;flex-shrink:0}
.msg-avatar{width:36px;height:36px;border-radius:50%;background:var(--surface2);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;color:var(--text2);flex-shrink:0}
.msg-pane{background:var(--surface);border:1px solid var(--border);border-radius:12px;display:flex;flex-direction:column;overflow:hidden;min-height:0}
.msg-pane-header{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--border)}
.msg-pane-thread{flex:1;padding:14px 18px;max-height:none!important;min-height:0!important}
.msg-pane-empty{flex:1;display:flex;align-items:center;justify-content:center;color:var(--text3);font-size:14px;padding:60px 20px;text-align:center}
.msg-pane > div:last-child:not(.msg-pane-thread):not(.msg-pane-header):not(.msg-pane-empty){padding:12px 18px}

@media(max-width:820px){
  .msg-twocol{grid-template-columns:1fr;min-height:auto}
  .msg-rail{max-height:50vh}
  .msg-pane-thread{max-height:50vh!important}
}

/* ── GP Content tool: responsive (M2 + M3) ──
   Write surface grids collapse to single column on phones.
   The Quick mode default is 1fr / 320px; the Deep mode is 1.2fr / 1fr / 320px.
   Inline column templates were desktop-only as shipped, this fixes mobile. */
@media(max-width:820px){
  .gp-write-grid{grid-template-columns:1fr!important}
  .gp-write-deep-grid{grid-template-columns:1fr!important}
  /* Sticky firewall panel becomes a normal block flow on phone so the
     editor isn't pushed off-screen. */
  #gp-write-firewall{position:static!important}
}

/* Note: .container-tabs (existing class) already has flex-wrap:wrap, which
   handles 6+ tabs on narrow screens by stacking to multiple rows. Acceptable
   default; no additional CSS needed for tabs themselves. */

/* ═══ SELF HUB · PROGRAM (2026-07-29) ═══════════════════════════════
   The tab read as ten identical white rectangles. Two changes fix most
   of it: the accent becomes a FILL rather than a 1px border (in the light
   themes it is near-black, so as a hairline it did nothing), and each
   protocol carries a generated waveform of its own rhythm.            */

.gp-hero{background:var(--gp-fill);color:var(--gp-fill-ink);border-radius:16px;
  overflow:hidden;display:grid;grid-template-columns:1fr 240px}
.gp-hero-l{padding:26px 28px 24px}
.gp-hero-k{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.14em;
  opacity:.72}
.gp-hero-h{font-family:var(--font-display);font-size:clamp(34px,5vw,50px);font-weight:700;
  line-height:.94;text-transform:uppercase;margin:10px 0 8px}
.gp-hero-p{font-size:14.5px;line-height:1.55;opacity:.8;max-width:42ch}
.gp-hero-why{display:flex;gap:6px;flex-wrap:wrap;margin-top:15px}
.gp-hero-why span{font-size:11.5px;background:rgba(255,255,255,.12);border-radius:5px;
  padding:5px 10px;font-variant-numeric:tabular-nums}
.gp-hero-cta{display:flex;gap:9px;margin-top:19px;flex-wrap:wrap}
.gp-hero-r{border-left:1px solid rgba(255,255,255,.12);display:block;
  padding:0;background:rgba(255,255,255,.05);overflow:hidden}
.gp-hero-r>svg{height:100%;width:100%;display:block}
.gp-b-solid{background:var(--gp-btn-bg);color:var(--gp-btn-ink);border:none;border-radius:8px;
  font-family:var(--font-display);font-weight:700;font-size:16px;letter-spacing:.03em;
  padding:13px 26px;cursor:pointer}
.gp-b-line{background:transparent;border:1px solid rgba(127,127,127,.35);color:var(--gp-fill-ink);
  border-radius:8px;font-weight:600;font-size:13.5px;padding:12px 18px;cursor:pointer}
@media(max-width:720px){.gp-hero{grid-template-columns:1fr}.gp-hero-r{display:none}}

.gp-lbl{font-size:11px;color:var(--text2);font-weight:700;text-transform:uppercase;
  letter-spacing:.11em;margin:24px 0 10px}
.gp-divider{display:flex;align-items:center;gap:14px;margin:30px 0 12px}
.gp-divider>span:last-child{flex-shrink:0}
.gp-divider-k{flex-shrink:0;font-family:var(--font-display);font-size:13px;font-weight:700;
  text-transform:uppercase;letter-spacing:.14em}
.gp-divider-r{flex:1;height:1px;background:var(--border)}

/* Yours. Every child is a <span> inside a <button>, so each needs an explicit
   display, inline spans silently ignore height and margin, which is what made
   the waveform bleed out of the card and collide with the divider below. */
.gp-yours{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:11px}
@media(max-width:760px){.gp-yours{grid-template-columns:1fr}}
.gp-yc{display:flex;flex-direction:column;gap:0;background:var(--surface);
  border:1px solid var(--border);border-radius:13px;padding:15px 16px 13px;cursor:pointer;
  text-align:left;width:100%;transition:border-color .15s,transform .15s}
.gp-yc:hover{border-color:var(--accent);transform:translateY(-1px)}
.gp-yc-r1{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.gp-yc-n{font-family:var(--font-display);font-size:20px;font-weight:700;text-transform:uppercase;
  line-height:1.05;color:var(--text)}
.gp-yc-t{font-size:11px;color:var(--text3);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}
.gp-yc-d{display:block;font-size:12.5px;color:var(--text2);line-height:1.45;margin-top:6px}
.gp-yc-w{display:block;height:30px;margin-top:14px;overflow:hidden}
.gp-yc-c{display:block;font-size:10.5px;color:var(--text3);margin-top:9px;letter-spacing:.04em}
/* Rows. Same inline-span problem: the title and the description were running
   together on one line because neither was display:block. */
.gp-rows{display:flex;flex-direction:column;gap:8px}
.gp-row{background:var(--surface);border:1px solid var(--border);border-radius:12px;
  padding:14px 18px;display:grid;grid-template-columns:108px 1fr auto;gap:20px;align-items:center;
  cursor:pointer;text-align:left;width:100%;transition:border-color .15s}
.gp-row:hover{border-color:var(--accent)}
.gp-row-w{display:block;height:38px;overflow:hidden}
.gp-row-txt{display:block;min-width:0}
.gp-row-n{display:block;font-family:var(--font-display);font-size:21px;font-weight:700;
  text-transform:uppercase;line-height:1.05;color:var(--text);letter-spacing:.01em}
.gp-row-d{display:block;font-size:13px;color:var(--text2);line-height:1.5;margin-top:5px}
.gp-row-meta{display:flex;flex-direction:column;align-items:flex-end;gap:5px;white-space:nowrap;flex-shrink:0}
@media(max-width:640px){.gp-row{grid-template-columns:64px 1fr;gap:12px;padding:13px 14px}
  .gp-row-meta{grid-column:2;align-items:flex-start;flex-direction:row;gap:10px;margin-top:2px}}
.gp-chip{font-family:var(--font-display);font-size:12.5px;font-weight:700;letter-spacing:.06em;
  padding:4px 11px;border-radius:20px;border:1px solid var(--border2);color:var(--text2)}
.gp-opt-c{font-size:10.5px;color:var(--text3)}

/* All protocols index */
.gp-cat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(155px,1fr));gap:8px}
.gp-cat-tile{background:var(--surface);border:1px solid var(--border);border-radius:10px;
  padding:11px 12px;cursor:pointer;text-align:left;display:flex;flex-direction:column;gap:4px;
  transition:border-color .15s}
.gp-cat-tile:hover{border-color:var(--accent)}
.gp-cat-n{display:block;font-family:var(--font-display);font-size:15px;font-weight:700;text-transform:uppercase;
  line-height:1.05;color:var(--text)}
.gp-cat-s{display:block;font-size:10.5px;color:var(--text3)}

/* Start sheet */
.gp-opt{background:var(--surface);border:1px solid var(--border);border-radius:10px;
  padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:10px;
  cursor:pointer;width:100%;text-align:left;transition:border-color .15s}
.gp-opt.on{border-color:var(--accent);border-width:2px;padding:11px 13px}
.gp-opt-n{font-weight:700;font-size:14px;color:var(--text);display:block}
.gp-opt-s{font-size:11.5px;color:var(--text3);margin-top:2px;display:block}
.gp-segrow{display:flex;gap:6px}
.gp-seg{flex:1;padding:11px 6px;border-radius:9px;border:1px solid var(--border2);
  background:var(--surface2);font-size:12.5px;font-weight:600;color:var(--text2);cursor:pointer}
.gp-seg.on{background:var(--accent);color:var(--btn-text);border-color:var(--accent)}
.gp-dialrow{display:flex;gap:7px}
.gp-dial{width:42px;height:42px;border-radius:10px;border:1px solid var(--border2);
  background:var(--surface2);font-family:var(--font-display);font-size:17px;font-weight:700;
  color:var(--text2);cursor:pointer}
.gp-dial.on{border-color:var(--accent);background:var(--accent);color:var(--btn-text)}

/* Runner, full-bleed accent. Safe-area padding comes from gpRunnerShellStyle. */
.gp-run-k{font-size:11px;letter-spacing:.15em;text-transform:uppercase;opacity:.72}
.gp-run-clock{font-family:var(--font-display);font-size:54px;font-weight:700;
  font-variant-numeric:tabular-nums;line-height:1}

/* ═══════════════════════════════════════════════════════════════════
   SPEED SESSIONS (2026-08-13)
   Members-only pair of speed sessions living in the Member's Room.
   Two identity devices and no more: the band (a filled panel with a 115deg
   hairline rake, which exists nowhere else in the app) and two fixed
   session colours. Everything else borrows the standard card chrome.
   ═══════════════════════════════════════════════════════════════════ */
.ss-band{position:relative;overflow:hidden;background:var(--gp-fill);color:var(--gp-fill-ink);
  border-radius:14px;padding:18px 20px}
.ss-band::after{content:'';position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(115deg,transparent 0 16px,rgba(var(--accent-rgb),.10) 16px 18px)}
.ss-band>*{position:relative;z-index:1}
.ss-kick{font-size:10px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;opacity:.72;
  display:flex;align-items:center;gap:7px}
.ss-name{font-family:var(--font-display);font-size:28px;font-weight:800;letter-spacing:1.2px;
  text-transform:uppercase;line-height:1;margin:8px 0 5px}
.ss-meta{font-size:12.5px;opacity:.75;line-height:1.55}

.ss-sess{background:var(--surface);border:1px solid var(--border);border-radius:14px;
  overflow:hidden;margin-bottom:14px}
.ss-sess-top{display:flex;align-items:center;gap:14px;padding:16px 18px}
.ss-sess-body{border-top:1px solid var(--border);padding:14px 18px;background:var(--surface2)}
.ss-sess-n{font-size:15.5px;font-weight:700}
.ss-sess-m{font-size:11.5px;color:var(--text3);margin-top:3px}
.ss-badge{width:44px;height:44px;border-radius:11px;display:flex;align-items:center;
  justify-content:center;font-family:var(--font-display);font-size:15px;font-weight:800;
  flex-shrink:0;letter-spacing:.5px}
.ss-badge.accel{background:rgba(232,151,90,.16);color:var(--gp-up);border:1px solid rgba(232,151,90,.35)}
.ss-badge.maxv{background:var(--accent-dim);color:var(--accent);border:1px solid rgba(var(--accent-rgb),.35)}
.ss-badge.multi{background:rgba(169,154,216,.16);color:var(--gp-rest);border:1px solid rgba(169,154,216,.35)}

.ss-blk{font-size:10px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;
  color:var(--text3);margin:16px 0 9px;display:flex;align-items:center;gap:8px}
.ss-blk::after{content:'';flex:1;height:1px;background:var(--border)}
.ss-series{font-size:12px;color:var(--text2);line-height:1.55;background:var(--surface2);
  border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:8px;
  padding:9px 12px;margin:-2px 0 10px}
.ss-warm{background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:12px 14px}
.ss-warm-r{display:flex;gap:10px;padding:5px 0;font-size:12.5px;align-items:baseline}
.ss-warm-k{font-size:10px;font-weight:800;letter-spacing:.7px;text-transform:uppercase;
  color:var(--accent);width:98px;flex-shrink:0;line-height:1.4}
.ss-warm-v{color:var(--text2);line-height:1.5}
/* Speed track warm-up line with its Watch button. */
.ss-wl{display:flex;align-items:center;gap:10px;justify-content:space-between}
.ss-warm-d{color:var(--text3);margin-right:7px}

.ss-exrow{display:flex;align-items:baseline;gap:10px;padding:8px 0;border-bottom:1px solid var(--border)}
.ss-exrow:last-child{border-bottom:none}
.ss-exslot{font-size:10.5px;font-weight:800;letter-spacing:.8px;color:var(--accent);width:26px;flex-shrink:0}
.ss-exname{font-size:13.5px;font-weight:600;flex:1}
.ss-exdose{font-size:12px;color:var(--text2);font-variant-numeric:tabular-nums;white-space:nowrap}

.ss-note{background:var(--surface2);border:1px solid var(--border);border-left:3px solid var(--accent);
  border-radius:8px;padding:13px 16px;font-size:12.5px;color:var(--text2);line-height:1.65}
.ss-ex{background:var(--surface2);border:1px solid var(--border);border-radius:10px;
  padding:13px 15px;margin-bottom:10px}
.ss-ex-h{display:flex;align-items:center;gap:9px;margin-bottom:9px}
.ss-ex-s{font-size:10.5px;font-weight:800;letter-spacing:.8px;color:var(--accent);width:24px}
.ss-ex-n{font-size:14px;font-weight:700;flex:1}
.ss-ex-f{display:flex;gap:18px;flex-wrap:wrap}
.ss-fl{font-size:9.5px;color:var(--text3);text-transform:uppercase;letter-spacing:.8px}
.ss-fv{font-size:13.5px;font-weight:600;margin-top:2px}
.ss-ex-note{font-size:12px;color:var(--text2);background:var(--surface3);border-radius:6px;
  padding:8px 10px;line-height:1.5;margin-top:10px}
.ss-swap{font-size:11px;color:var(--text3);margin-top:8px}
.ss-loglbl{font-size:10px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;
  color:var(--text3);margin:12px 0 6px}

.ss-lrow{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--border)}
.ss-lrow:last-child{border-bottom:none}
.ss-lnum{width:22px;height:22px;border-radius:6px;background:var(--surface3);color:var(--text2);
  font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ss-lf{flex:1;min-width:0}
.ss-lfl{font-size:9px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;
  color:var(--text3);margin-bottom:3px}
.ss-lfixed{font-size:13px;font-weight:600;padding:4px 0}
.ss-linp{width:100%;border:1px solid var(--border2);background:var(--surface3);border-radius:6px;
  padding:5px 9px;font-size:13px;color:var(--text);font-family:inherit}
.ss-linp:focus{outline:none;border-color:var(--accent)}
.ss-ltick{width:32px;height:32px;border-radius:8px;border:1px solid var(--border2);
  background:transparent;display:flex;align-items:center;justify-content:center;flex-shrink:0;
  color:var(--text3);cursor:pointer;padding:0}
.ss-ltick.on{background:var(--accent);border-color:var(--accent);color:var(--btn-text)}

/* ── Speed sessions: the record board, the saved log, the resume card
   (2026-08-19). Same chrome as the session cards above, one extra idea:
   numbers are display type and tabular, so a column of times reads as a
   column and not as prose. ── */
.ss-board{background:var(--surface);border:1px solid var(--border);border-radius:14px;
  overflow:hidden;margin-bottom:14px}
.ss-board-h{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:15px 18px;border-bottom:1px solid var(--border)}
/* Speed Sessions hero: one headline number, the page's only big figure.
   Added 2026-09-12 with the page rework (sessions first, numbers behind
   All numbers). */
.ss-hero{background:var(--surface);border:1px solid var(--border);border-radius:12px;
  padding:16px 18px;display:flex;align-items:flex-end;gap:22px;flex-wrap:wrap;margin-bottom:4px}
.ss-hero-main{flex:1 1 220px;min-width:0}
.ss-hero-lab{font-family:'Barlow Semi Condensed',sans-serif;font-size:10.5px;font-weight:700;
  letter-spacing:1.2px;text-transform:uppercase;color:var(--text3)}
.ss-hero-val{font-family:var(--font-display);font-size:52px;font-weight:800;line-height:.9;
  margin-top:4px;letter-spacing:-.01em;font-variant-numeric:tabular-nums}
.ss-hero-val .ss-punit{font-size:20px}
.ss-hero-ex{font-size:12.5px;color:var(--text2);margin-top:6px;display:flex;align-items:center;
  gap:7px;flex-wrap:wrap}
.ss-hero-pill{font-size:10px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;
  padding:2px 8px;border-radius:99px;background:var(--accent-dim);color:var(--accent)}
.ss-hero-side{display:flex;gap:20px;flex-wrap:wrap;align-items:flex-end;padding-bottom:3px}
.ss-hero-empty{align-items:center}
.ss-hero-none{font-size:13.5px;color:var(--text2);margin-top:5px;max-width:46ch}
.ss-mini-lab{font-family:'Barlow Semi Condensed',sans-serif;font-size:10.5px;font-weight:700;
  letter-spacing:1px;text-transform:uppercase;color:var(--text3)}
.ss-mini-val{font-family:var(--font-display);font-size:24px;font-weight:800;line-height:1.05;
  font-variant-numeric:tabular-nums}
.ss-sess-peek{display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  border-top:1px solid var(--border);padding:9px 18px;background:var(--surface2);
  border-radius:0 0 12px 12px}
.ss-peek-btn{background:none;border:0;padding:0;cursor:pointer;color:var(--accent);
  font-family:inherit;font-size:12px;font-weight:700;display:flex;align-items:center;gap:5px}
.ss-peek-chev{display:inline-block;transition:transform .15s ease;font-size:14px;line-height:1}
.ss-peek-chev.open{transform:rotate(90deg)}
.ss-sess-peek + .ss-sess-body{border-radius:0 0 12px 12px}
.ss-mini{max-width:150px}
.ss-mini-lab{white-space:normal;line-height:1.25}
.ss-sess-best{font-size:12px;color:var(--text2);margin-top:5px}
.ss-sess-best b{font-family:var(--font-display);font-size:15px;color:var(--text);font-weight:800}
.ss-sess-best.muted{color:var(--text3)}
.ss-logfoot{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:14px;
  font-size:12px;color:var(--text3)}
.ss-logfoot .btn{margin-left:auto}
@media (max-width:560px){
  .ss-hero{gap:14px}
  .ss-hero-val{font-size:44px}
  .ss-hero-side{width:100%;justify-content:space-between}
}
.ss-board-t{font-family:var(--font-display);font-size:19px;font-weight:800;letter-spacing:1px;
  text-transform:uppercase;line-height:1.05}
.ss-hcount{font-size:11px;color:var(--text3);white-space:nowrap}
.ss-phead{display:grid;grid-template-columns:minmax(0,1fr) 64px 56px 60px;gap:10px;padding:8px 18px;
  background:var(--surface2);border-bottom:1px solid var(--border);font-size:9px;font-weight:800;
  letter-spacing:1px;text-transform:uppercase;color:var(--text3)}
.ss-phead div:nth-child(n+2){text-align:right}
.ss-prow{display:grid;grid-template-columns:minmax(0,1fr) 64px 56px 60px;align-items:center;gap:10px;
  padding:11px 18px;border-bottom:1px solid var(--border)}
.ss-prow:last-child{border-bottom:none}
.ss-pname{font-size:13px;font-weight:600;min-width:0}
.ss-pname span{display:block;font-size:10.5px;color:var(--text3);font-weight:500;margin-top:2px}
.ss-pbest{font-family:var(--font-display);font-size:21px;font-weight:800;letter-spacing:.5px;
  font-variant-numeric:tabular-nums;text-align:right;line-height:1}
.ss-punit{font-size:11px;font-weight:600;font-family:inherit}
.ss-pdelta{font-size:11.5px;font-variant-numeric:tabular-nums;text-align:right;color:var(--text3)}
.ss-pdelta.better{color:var(--good);font-weight:700}
.ss-spark{display:flex;align-items:flex-end;gap:3px;height:26px;justify-content:flex-end}
.ss-spark i{width:6px;background:rgba(var(--accent-rgb),.22);border:1px solid rgba(var(--accent-rgb),.4);
  border-radius:2px 2px 0 0;display:block}
.ss-spark i.best{background:var(--accent);border-color:var(--accent)}

.ss-hrow{display:flex;align-items:center;gap:12px;padding:9px 0;border-bottom:1px solid var(--border);
  font-size:12.5px;cursor:pointer}
.ss-hrow:last-of-type{border-bottom:none}
.ss-hdate{width:60px;flex-shrink:0;color:var(--text2);font-variant-numeric:tabular-nums}
.ss-hbest{font-family:var(--font-display);font-size:16px;font-weight:800;letter-spacing:.5px;
  font-variant-numeric:tabular-nums;width:48px;flex-shrink:0}
.ss-hmeta{flex:1;min-width:0;color:var(--text3);font-size:11.5px}
.ss-flag{font-size:9.5px;font-weight:800;letter-spacing:.8px;text-transform:uppercase;padding:2px 7px;
  border-radius:5px;background:rgba(var(--accent-rgb),.12);color:var(--accent);
  border:1px solid rgba(var(--accent-rgb),.3);white-space:nowrap}
.ss-chev{color:var(--text3);font-size:13px;flex-shrink:0}

.ss-resume{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--accent);
  border-left:4px solid var(--accent);border-radius:12px;padding:13px 16px;margin-bottom:14px;flex-wrap:wrap}
.ss-resume-t{font-size:13.5px;font-weight:700}
.ss-resume-s{font-size:11.5px;color:var(--text3);margin-top:3px}

.ss-inline-pb{display:flex;gap:12px;align-items:center;padding:7px 10px;background:var(--surface3);
  border-radius:7px;margin:10px 0 2px;font-size:11px;color:var(--text3);flex-wrap:wrap}
.ss-inline-pb b{font-family:var(--font-display);font-size:15px;letter-spacing:.5px;color:var(--text);
  font-variant-numeric:tabular-nums;margin-left:5px}
.ss-pbsep{opacity:.5}
.ss-lbest{font-size:11.5px;color:var(--text3);font-variant-numeric:tabular-nums;padding:4px 0}
.ss-lbest.beat{color:var(--good);font-weight:700}
.ss-linp.filled{border-color:rgba(var(--accent-rgb),.45);background:rgba(var(--accent-rgb),.06)}

.ss-gains{background:var(--surface);border:1px solid var(--border);border-radius:12px;
  padding:14px 16px;margin-top:12px}
.ss-gains-t{font-size:10px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;
  color:var(--text3);margin-bottom:8px}
.ss-gain{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:7px 0;
  border-bottom:1px solid var(--border)}
.ss-gain:last-child{border-bottom:none}
.ss-gain-n{font-size:12.5px;font-weight:600;min-width:0}
.ss-gain-v{font-family:var(--font-display);font-size:20px;font-weight:800;letter-spacing:.5px;
  font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;line-height:1}
.ss-gain-v span{display:block;font-family:'Barlow',sans-serif;font-size:10.5px;font-weight:500;
  letter-spacing:0;color:var(--text3);margin-top:3px}

@media(max-width:420px){
  .ss-phead,.ss-prow{grid-template-columns:minmax(0,1fr) 58px 52px}
  .ss-phead div:nth-child(4),.ss-spark{display:none}
}

/* ── Measured exercises (distance / time / jump) in the builder and in
   the client's session. The segmented control is the only new control:
   everything it swaps is an existing field in a different coat. ── */
.ex-meas{display:inline-flex;border:1px solid var(--border2);border-radius:8px;overflow:hidden;
  background:var(--surface3)}
.ex-meas button{font-family:inherit;font-size:11.5px;font-weight:700;letter-spacing:.4px;
  padding:6px 12px;border:0;background:transparent;color:var(--text3);cursor:pointer;
  border-right:1px solid var(--border2);touch-action:manipulation}
.ex-meas button:last-child{border-right:0}
.ex-meas button:hover{color:var(--text2)}
.ex-meas button.on{background:var(--accent);color:var(--btn-text)}
.ex-meas-lbl{font-size:9.5px;font-weight:700;letter-spacing:.9px;text-transform:uppercase;
  color:var(--text3);margin-bottom:5px}
.set-fixed{font-size:13px;font-weight:600;padding:7px 0;font-variant-numeric:tabular-nums;
  color:var(--text2);white-space:nowrap}
.set-best{font-size:12px;color:var(--text3);font-variant-numeric:tabular-nums;padding:7px 0;
  white-space:nowrap}
.set-best.beat{color:var(--good);font-weight:700}
/* The three fixed cells of a measured row. Real classes, not inline widths,
   so the narrow-phone tier below can actually reach them. */
.set-field.mfix{flex:0 0 62px;min-width:0}
.set-field.mload{flex:0 0 74px;min-width:0}
.set-field.mbest{flex:0 0 58px;min-width:0}
/* A measured row carries five cells where a strength row carries four, and at
   360px (Galaxy S-series, iPhone SE) that pushed the confirm button off the
   screen and gave the page a sideways scroll. Everything gets tighter rather
   than wrapping, because a rep that spans two lines is worse than a narrow one. */
@media(max-width:400px){
  .set-row-meas{gap:4px}
  .set-row-meas .set-num-cell{width:18px;font-size:14px}
  .set-row-meas .set-field{min-width:0}
  .set-row-meas .set-field.mfix{flex:0 0 46px}
  .set-row-meas .set-field.mload{flex:0 0 56px}
  .set-row-meas .set-field.mbest{flex:0 0 46px}
  .set-row-meas .set-field-label{font-size:9px;letter-spacing:.3px}
  .set-row-meas .set-input-sm{padding:7px 6px}
  .set-row-meas .set-fixed,.set-row-meas .set-best{font-size:11.5px}
  .set-row-meas .set-confirm-btn{width:32px;height:32px}
}

/* ── The membership offer: one component, every surface ───────────── */
.gpup-card{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:0;overflow:hidden}
.gpup-head{padding:20px 22px 16px;background:linear-gradient(180deg,rgba(var(--accent-rgb),.07),transparent)}
.gpup-eyebrow{font-size:10.5px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--accent)}
.gpup-title{font-family:'Barlow Condensed',sans-serif;font-size:26px;font-weight:700;line-height:1.04;color:var(--text);margin:5px 0 0}
.gpup-body{font-size:13.5px;line-height:1.55;color:var(--text2);margin-top:8px;max-width:60ch}

.gpup-plans{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:0 22px}
.gpup-plan{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:0;
  text-align:left;font-family:inherit;cursor:pointer;padding:16px 17px 15px;border-radius:11px;
  background:var(--surface2);border:1px solid var(--border);color:var(--text);
  transition:border-color .15s ease, transform .12s ease, box-shadow .15s ease}
.gpup-plan:hover{border-color:rgba(var(--accent-rgb),.6);transform:translateY(-1px)}
.gpup-plan:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.gpup-plan-h{font-size:11px;font-weight:700;letter-spacing:.11em;text-transform:uppercase;color:var(--text3)}
.gpup-amt{display:flex;align-items:baseline;gap:6px;margin-top:6px}
.gpup-amt b{font-family:'Barlow Condensed',sans-serif;font-size:38px;font-weight:700;line-height:.95;letter-spacing:-.01em}
.gpup-amt i{font-style:normal;font-size:12.5px;color:var(--text2)}
.gpup-line{font-size:11.5px;line-height:1.45;color:var(--text2);margin-top:7px}
.gpup-line s{color:var(--text3)}
.gpup-dim{color:var(--text3)}
.gpup-cta{margin-top:13px;align-self:stretch;text-align:center;border-radius:8px;padding:9px 12px;
  font-size:12.5px;font-weight:700;letter-spacing:.02em;background:transparent;
  border:1px solid var(--border2);color:var(--text2)}
.gpup-plan:hover .gpup-cta{border-color:var(--accent);color:var(--accent)}

.gpup-best{background:rgba(var(--accent-rgb),.09);border-color:rgba(var(--accent-rgb),.5);
  box-shadow:0 8px 24px -16px rgba(var(--accent-rgb),.9)}
.gpup-best .gpup-plan-h{color:var(--accent)}
.gpup-best:hover{border-color:var(--accent)}
.gpup-ribbon{position:absolute;top:-1px;right:14px;transform:translateY(-50%);
  background:var(--accent);color:var(--btn-text);font-size:9.5px;font-weight:800;
  letter-spacing:.12em;text-transform:uppercase;padding:3px 9px;border-radius:20px;white-space:nowrap}
.gpup-cta-on{background:var(--accent);border-color:var(--accent);color:var(--btn-text)}
.gpup-best:hover .gpup-cta-on{color:var(--btn-text);opacity:.92}

.gpup-fine{font-size:11px;color:var(--text3);line-height:1.5;padding:14px 22px 18px;text-align:center}
/* 2026-10-05: option C, one full-width button to the GP Method page. */
.gpup-go{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;box-sizing:border-box;
  border:0;border-radius:14px;background:var(--accent);color:var(--btn-text);padding:20px 24px;text-align:left;
  font-family:inherit;cursor:pointer;box-shadow:0 14px 30px -16px rgba(var(--accent-rgb),.8);transition:transform .12s ease,opacity .15s ease}
.gpup-go:hover{transform:translateY(-1px);opacity:.95}
.gpup-go:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.gpup-go-l{min-width:0}
.gpup-go-l b{display:block;font-family:'Barlow Condensed',sans-serif;font-size:24px;font-weight:700;line-height:1.05;letter-spacing:.01em}
.gpup-go-l span{display:block;font-size:13.5px;line-height:1.4;opacity:.75;margin-top:4px}
.gpup-go-ar{flex:none;display:inline-grid;place-items:center;width:44px;height:44px;border-radius:50%;background:var(--btn-text);color:var(--accent);font-size:20px;font-weight:800}
.gpup-go-sm{padding:15px 18px}.gpup-go-sm .gpup-go-l b{font-size:20px}.gpup-go-sm .gpup-go-ar{width:36px;height:36px;font-size:17px}
.gpup-go-wrap{grid-template-columns:1fr!important}
.gpup-fine:empty{padding:0 0 18px}
@media (max-width:620px){.gpup-plans{grid-template-columns:1fr}.gpup-ribbon{right:12px}}

/* ── Locked membership preview (tier_profiles / tier_courses) ──────── */
/* One surface. Header, body and offer are bands inside a single card
   separated by hairlines, not three cards floating on the page. */
.gplk-sheet{max-width:880px;background:var(--surface);border:1px solid var(--border);
  border-radius:14px;overflow:hidden}
.gplk-sheet-hd{padding:22px 24px 18px;background:linear-gradient(180deg,rgba(var(--accent-rgb),.06),transparent)}
.gplk-sheet-bd{padding:18px 24px 20px;border-top:1px solid var(--border)}
.gplk-sheet-ft{border-top:1px solid var(--border);background:var(--surface2)}
.gplk-sheet-ft .gpup-card{border:none;border-radius:0;background:transparent}
.gplk-sheet-ft .gpup-head{background:transparent;padding:18px 24px 14px}
.gplk-sheet-ft .gpup-plans{padding:0 24px}
.gplk-sheet-ft .gpup-fine{padding:13px 24px 18px}

.gplk-kick{font-family:'Barlow Condensed',sans-serif;font-size:11.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--text3)}
.gplk-h{font-family:'Barlow Condensed',sans-serif;font-size:31px;font-weight:700;line-height:1.02;
  color:var(--text);margin:5px 0 0}
.gplk-sub{font-size:14px;line-height:1.55;color:var(--text2);margin-top:9px;max-width:66ch}

.gplk-cols{display:grid;grid-template-columns:1fr 1fr;gap:26px}
.gplk-colh{font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--text3);margin-bottom:9px}
/* Rows are hairline-separated inside the sheet, not individual cards. */
.gplk-row{padding:10px 0;border-top:1px solid var(--border)}
.gplk-row:first-of-type{border-top:none;padding-top:0}
.gplk-row-t{font-size:13.5px;font-weight:600;color:var(--text)}
.gplk-row-s{font-size:12px;color:var(--text3);line-height:1.45;margin-top:2px}
.gplk-note{font-size:11.5px;color:var(--text3);line-height:1.5;margin-top:11px}
/* A note that introduces the next block needs air under it, or it reads as
   a caption belonging to the column headers below. */
.gplk-note + .gplk-cols{margin-top:18px;padding-top:16px;border-top:1px solid var(--border)}

.gplk-sess{display:flex;align-items:center;gap:12px;padding:9px 0;border-top:1px solid var(--border)}
.gplk-sess:first-of-type{border-top:none;padding-top:0}
.gplk-day{font-family:'Barlow Condensed',sans-serif;font-size:12.5px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--text3);width:44px;flex:none}
.gplk-sess-n{font-size:13.5px;font-weight:600;color:var(--text)}
.gplk-lock{margin-left:auto;font-size:9.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;
  color:var(--text3);border:1px solid var(--border2);border-radius:3px;padding:2px 6px;flex:none}

.gplk-hands{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:4px}
.gplk-hand{background:var(--surface2);border:1px solid var(--border);border-radius:10px;
  padding:12px 10px 11px;text-align:center;display:flex;flex-direction:column}
.gplk-hand-art{height:104px;display:flex;align-items:flex-end;justify-content:center;margin-bottom:8px}
.gplk-hand-art svg{max-width:100%;height:auto}
.gplk-hl{font-size:9.5px;color:var(--text3);letter-spacing:.09em;text-transform:uppercase}
.gplk-hv{font-family:'Barlow Condensed',sans-serif;font-size:18px;line-height:1.05;color:var(--text);margin-top:1px}
@media (max-width:640px){.gplk-hands{grid-template-columns:repeat(2,1fr)}}
@media (max-width:760px){.gplk-cols{grid-template-columns:1fr;gap:18px}}
.gpup-nohead{height:4px}
.gplk-sheet-ft .gpup-nohead{display:none}
.gplk-sheet-ft .gpup-card .gpup-plans{padding-top:18px}

/* ── Win-back screen (cancelled member) ───────────────────────────── */
.wb-sheet{background:var(--surface);border:1px solid var(--border);border-radius:14px;overflow:hidden}
.wb-hd{padding:22px 24px 18px;background:linear-gradient(180deg,rgba(var(--accent-rgb),.06),transparent)}
.wb-kick{font-family:'Barlow Condensed',sans-serif;font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}
.wb-h{font-family:'Barlow Condensed',sans-serif;font-size:30px;font-weight:700;line-height:1.03;color:var(--text);margin:5px 0 0}
.wb-sub{font-size:14px;line-height:1.55;color:var(--text2);margin-top:9px;max-width:66ch}
.wb-bd{padding:18px 24px 20px;border-top:1px solid var(--border)}
.wb-ft{border-top:1px solid var(--border);background:var(--surface2)}
.wb-ft .gpup-card{border:none;border-radius:0;background:transparent}
.wb-ft .gpup-nohead{display:none}
.wb-ft .gpup-plans{padding:18px 24px 0}
.wb-ft .gpup-fine{padding:13px 24px 18px}
.wb-colh{font-size:11px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--text3);margin-bottom:10px}
.wb-tiny{font-size:12px;color:var(--text3);line-height:1.5;margin-top:11px}
.wb-tiny b{color:var(--text)}
.wb-warn{color:var(--text2)}
.wb-blk{display:flex;gap:3px}
.wb-blk i{flex:1;height:34px;border-radius:4px;background:var(--surface2);border:1px solid var(--border);
  font-style:normal;display:flex;align-items:center;justify-content:center;font-size:10px;color:var(--text3)}
.wb-blk i.done{background:var(--accent);border-color:var(--accent);color:var(--btn-text)}
.wb-blk i.gap{background:repeating-linear-gradient(135deg,transparent,transparent 4px,rgba(200,50,60,.18) 4px,rgba(200,50,60,.18) 8px);border-color:rgba(200,50,60,.45)}
.wb-blk i.test{background:var(--text);border-color:var(--text);color:var(--surface);font-weight:700;font-size:9px;letter-spacing:.04em}
.wb-sb{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}
.wb-sc{position:relative;background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:14px 12px;text-align:center}
.wb-sc b{font-family:'Barlow Condensed',sans-serif;font-size:30px;line-height:1;color:var(--text);display:block}
.wb-lb{font-size:10.5px;color:var(--text3);letter-spacing:.06em;text-transform:uppercase;margin-top:3px}
.wb-dt{font-size:10px;color:var(--text3);margin-top:4px;opacity:.85}
.wb-frozen{position:absolute;top:7px;right:7px;font-size:8.5px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;color:var(--text3);border:1px solid var(--border2);border-radius:3px;padding:1px 5px}
@media (max-width:620px){.wb-sb{grid-template-columns:repeat(2,1fr)}}
.gplk-fix{display:flex;gap:9px;align-items:flex-start;margin-top:10px;padding:10px 12px;
  background:var(--surface2);border:1px dashed var(--border2);border-radius:8px;
  font-size:12.5px;color:var(--text2);line-height:1.5}
.gplk-fix-l{font-size:9px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text3);
  border:1px solid var(--border2);border-radius:3px;padding:2px 6px;flex:none;margin-top:1px}


/* ═══════════════════════════════════════════════════════════════════════════
   GP DESIGN SYSTEM v1                                     added 2026-09-04
   The written standard lives at ../DESIGN_SYSTEM.md. Read it before adding
   a colour, a size, a spacing value or a component. Everything below is
   ADDITIVE: no existing rule is overridden, so nothing that renders today
   changes except the four fixes explicitly marked FIX.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── FIX 1. Form controls inherit the brand face ────────────────────────────
   button/input/select/textarea do NOT inherit font-family from body. Every
   button class that declares its own face was fine; .nav-item, .hamburger and
   .modal-close never did, so the whole client sidebar rendered in the browser
   default (measured: Arial). Element specificity (0,0,1) sits below every
   class rule, so .btn and friends keep the faces they already declare, and
   the 4 inputs that set font-family:monospace inline are untouched. */
button,input,select,textarea{font-family:inherit}

/* ── SCALES ────────────────────────────────────────────────────────────────
   The colour tokens above were the only tokens this app had, which is why
   size, space and shape drifted to 44 inline font sizes, 360 padding values
   and 18 radii. These are theme-independent: they never change per theme. */
:root{
 /* Space. Nine steps, sized from the values already dominant in the code. */
 --space-1:4px;  --space-2:6px;  --space-3:8px;   --space-4:10px; --space-5:12px;
 --space-6:16px; --space-7:20px; --space-8:24px;  --space-9:32px;

 /* Type. Eight steps. --fs-micro/label/meta/sm already account for most of
    the app; the half-pixel sizes (9.5, 10.5, 11.5, 12.5, 13.5) are retired. */
 --fs-micro:10px; --fs-label:11px; --fs-meta:12px; --fs-sm:13px;
 --fs-body:15px;  --fs-card:18px;  --fs-page:34px; --fs-stat:42px;
 --lh-tight:1.2;  --lh-body:1.6;

 /* Shape. --radius (10px) predates this and stays as the alias of --r-lg. */
 --r-sm:4px; --r-md:7px; --r-lg:10px; --r-xl:14px; --r-pill:999px;

 /* Touch. One value every interactive element answers to. */
 --tap-min:44px;

 /* Depth. Dark themes take separation from contrast, so elev-1 is flat. */
 --elev-1:none;
 --elev-2:0 8px 28px rgba(0,0,0,.45);

 /* ── CHART PALETTE ────────────────────────────────────────────────────────
    Categorical slots for data with IDENTITY (blood marker groups, session
    types, category breakdowns). Assign in slot order, never cycled; a 9th
    series folds into "Other" rather than inventing a hue.

    These are NOT the status tokens. --good/--warn/--bad mean a STATE and are
    reserved for that; a category is not "good". Validated with the dataviz
    validator against every GP chart surface (#FFFFFF, #1B2A47, #0c1219,
    #1c1209): lightness band, chroma floor, CVD separation and normal-vision
    floor all pass in both modes. Three light slots sit under 3:1 on white, so
    charts using them ship visible direct labels or a table view.

    Dark themes override with steps chosen for the dark band, not an inversion.
    Scatter/bubble/small-multiple forms cap at the first THREE slots, which are
    the ones that clear the all-pairs floors. */
 --chart-1:#2a78d6; --chart-2:#eb6834; --chart-3:#1baf7a; --chart-4:#eda100;
 --chart-5:#e87ba4; --chart-6:#008300; --chart-7:#4a3aa7; --chart-8:#e34948;

 /* Label colour for an --accent2 fill, the counterpart of --btn-text.
    Verified 5.6:1 or better on every theme's accent2. */
 --accent2-ink:#060d14;

 /* Semantic chip grounds. Opaque, so the contrast against the semantic text
    colour is the same on any surface. Each is its status colour at 14% over
    that theme's card. Every pair below clears 4.5:1, measured. */
 --good-tint:#1B271D; --warn-tint:#292316; --bad-tint:#292228; --info-tint:#142634;
}

/* Light themes: cards need a shadow to lift off the cream ground, and the
   chip grounds are the same four colours mixed over white instead. */
:root.theme-login,:root.theme-master,:root.theme-dries-light,:root.theme-agathe-light{
 --accent2-ink:#FFFFFF;
 --elev-1:0 2px 8px rgba(0,0,0,.05);
 --elev-2:0 8px 28px rgba(27,42,71,.12);
 --good-tint:#E0EBE3; --warn-tint:#F1E7DF; --bad-tint:#EFE1E1; --info-tint:#DFE1E5;
}
:root.theme-master-dark{
 --chart-1:#3987e5; --chart-2:#d95926; --chart-3:#199e70; --chart-4:#c98500;
 --chart-5:#d55181; --chart-6:#008300; --chart-7:#9085e9; --chart-8:#e66767;
 --accent2-ink:#1B2A47;
 --elev-2:0 8px 28px rgba(0,0,0,.5);
 --good-tint:#23332B; --warn-tint:#362D22; --bad-tint:#342D3A; --info-tint:#233145;
}
:root.theme-dries{
 --chart-1:#3987e5; --chart-2:#d95926; --chart-3:#199e70; --chart-4:#c98500;
 --chart-5:#d55181; --chart-6:#008300; --chart-7:#9085e9; --chart-8:#e66767;
}
:root.theme-agathe{
 --chart-1:#3987e5; --chart-2:#d95926; --chart-3:#199e70; --chart-4:#c98500;
 --chart-5:#d55181; --chart-6:#008300; --chart-7:#9085e9; --chart-8:#e66767;
 --accent2-ink:#1a0c04;
 --good-tint:#29270F; --warn-tint:#372308; --bad-tint:#352220; --info-tint:#22262B;
}

/* ── FIX 2. Touch target floor ─────────────────────────────────────────────
   Measured heights before this rule: .btn 33px, .btn-sm 26px, .btn-xs 20px,
   .modal-close 28px, against a 44px platform minimum. min-height only GROWS
   a box, so it cannot overlap a neighbour or steal a tap the way an expanded
   hit area would, and no fixed-height container in this stylesheet holds a
   button. Scoped to coarse pointers: mouse layouts are unchanged. */
@media (pointer:coarse){
 .btn,.btn-sm,.btn-xs{min-height:var(--tap-min)}
 .modal-close{min-width:var(--tap-min);min-height:var(--tap-min)}
}

/* ── COMPONENTS ────────────────────────────────────────────────────────────
   Each of these already existed de facto, inlined dozens of times in slightly
   different spellings. Naming them is what makes the next sweep mechanical. */

/* The small muted line under a value or a title. Replaces the 268 inline
   captions currently spread across 10/11/12/13px on two different colours. */
.caption{font-size:var(--fs-meta);line-height:1.55;color:var(--text2)}
.caption-quiet{font-size:var(--fs-meta);line-height:1.55;color:var(--text3)}

/* "Nothing here yet". Says what would appear and how to make it appear. */
.empty-state{padding:var(--space-8) var(--space-6);text-align:center;
 color:var(--text2);font-size:var(--fs-sm);line-height:var(--lh-body)}
.empty-state-title{font-family:'Barlow Condensed',sans-serif;font-weight:700;
 font-size:var(--fs-card);letter-spacing:.5px;text-transform:uppercase;
 color:var(--text);margin-bottom:var(--space-2)}

/* The state 427 hardcoded "Loading..." strings currently stand in for. */
.loading{display:flex;align-items:center;justify-content:center;gap:var(--space-4);
 padding:var(--space-8);color:var(--text2);font-size:var(--fs-sm)}
.loading::before{content:'';width:16px;height:16px;flex-shrink:0;border-radius:50%;
 border:2px solid var(--border2);border-top-color:var(--accent);
 animation:gpSpin .8s linear infinite}
@keyframes gpSpin{to{transform:rotate(360deg)}}

/* Semantic chips. These are the going-forward names: a chip says what the
   state IS, never what colour it happens to be. The legacy .badge-green /
   -orange / -blue / -yellow above keep working unchanged. */
.badge-good{background:var(--good-tint);color:var(--good)}
.badge-warn{background:var(--warn-tint);color:var(--warn)}
.badge-bad {background:var(--bad-tint); color:var(--bad)}
.badge-info{background:var(--info-tint);color:var(--info)}
/* FIX 3: .badge-grey is used by athletes.js but was never defined, so that
   chip rendered with no ground at all. */
.badge-grey{background:var(--surface3);color:var(--text2)}

/* ── FIX 4. Reduced motion ─────────────────────────────────────────────────
   Three keyframes exist and all three are decorative entrances. The spinner
   is an essential status indicator, so it keeps turning, just slower. */
@media (prefers-reduced-motion:reduce){
 .view,.modal-overlay,.athlete-panel,.login-card{animation:none!important}
 .loading::before{animation-duration:2.4s}
 *{scroll-behavior:auto!important}
}

/* ── PRINT ─────────────────────────────────────────────────────────────────
   Ctrl+P on the app itself. The PDF exports open their own document and are
   not affected by this stylesheet. */
@media print{
 .topbar,.sidebar,.sidebar-slim,.coach-bottom-bar,.athlete-panel,
 #rest-timer-bar,.modal-overlay{display:none!important}
 .main{overflow:visible!important;padding:0!important}
 .card{break-inside:avoid;box-shadow:none!important}
 body{background:#fff!important;color:#000!important}
}

/* ── HERO TOKENS (added 2026-09-29) ─────────────────────────────────────
   The one strong object per screen (up next, session timer, jump score).
   Light themes: the accent as a deep field with white on it. Dark themes:
   an accent-tinted field glowing on the dark ground; member dark uses the
   real ink navy here, which is why its cards sit one step darker. Hex only,
   no color-mix(), so older iOS Safari renders it. */
:root.theme-login,:root.theme-master{
 --hero-a:#1B2A47; --hero-b:#10192A; --hero-glow:rgba(255,255,255,.16); --hero-grid:rgba(255,255,255,.06);
 --hero-fg:#FFFFFF; --hero-fg2:rgba(255,255,255,.86); --hero-line:rgba(255,255,255,.14); --hero-edge:rgba(255,255,255,.18);
 --hero-btn:#FFFFFF; --hero-btn-fg:#1B2A47; --hero-ring:#FFFFFF; --hero-num-a:#FFFFFF; --hero-num-b:#FFFFFF; --hero-shadow:rgba(27,42,71,.55);
}
:root.theme-dries-light{
 --hero-a:#0D6C90; --hero-b:#093A4E; --hero-glow:rgba(255,255,255,.16); --hero-grid:rgba(255,255,255,.06);
 --hero-fg:#FFFFFF; --hero-fg2:rgba(255,255,255,.86); --hero-line:rgba(255,255,255,.14); --hero-edge:rgba(255,255,255,.18);
 --hero-btn:#FFFFFF; --hero-btn-fg:#0D6C90; --hero-ring:#FFFFFF; --hero-num-a:#FFFFFF; --hero-num-b:#FFFFFF; --hero-shadow:rgba(13,108,144,.55);
}
:root.theme-agathe-light{
 --hero-a:#8A5A34; --hero-b:#483120; --hero-glow:rgba(255,255,255,.16); --hero-grid:rgba(255,255,255,.06);
 --hero-fg:#FFFFFF; --hero-fg2:rgba(255,255,255,.86); --hero-line:rgba(255,255,255,.14); --hero-edge:rgba(255,255,255,.18);
 --hero-btn:#FFFFFF; --hero-btn-fg:#8A5A34; --hero-ring:#FFFFFF; --hero-num-a:#FFFFFF; --hero-num-b:#FFFFFF; --hero-shadow:rgba(138,90,52,.55);
}
:root.theme-master-dark{
 --hero-a:#1B2A47; --hero-b:#080D17; --hero-glow:rgba(244,242,238,0.1); --hero-grid:rgba(244,242,238,.07);
 --hero-fg:#F4F2EE; --hero-fg2:#CDCED0; --hero-line:rgba(244,242,238,.08); --hero-edge:rgba(244,242,238,.28);
 --hero-btn:#F4F2EE; --hero-btn-fg:#1B2A47; --hero-ring:#F4F2EE; --hero-num-a:#E4E2DE; --hero-num-b:#F4F2EE; --hero-shadow:rgba(0,0,0,.6);
}
:root.theme-dries{
 --hero-a:#122E3D; --hero-b:#06090d; --hero-glow:rgba(43,184,236,0.38); --hero-grid:rgba(43,184,236,.07);
 --hero-fg:#eaf5fb; --hero-fg2:#94BFD4; --hero-line:rgba(43,184,236,.12); --hero-edge:rgba(43,184,236,.28);
 --hero-btn:#2bb8ec; --hero-btn-fg:#060d14; --hero-ring:#2bb8ec; --hero-num-a:#7dd4f0; --hero-num-b:#2bb8ec; --hero-shadow:rgba(0,0,0,.6);
}
:root.theme-agathe{
 --hero-a:#382719; --hero-b:#0e0a06; --hero-glow:rgba(200,149,108,0.34); --hero-grid:rgba(200,149,108,.07);
 --hero-fg:#f5ede4; --hero-fg2:#C5A188; --hero-line:rgba(200,149,108,.12); --hero-edge:rgba(200,149,108,.28);
 --hero-btn:#c8956c; --hero-btn-fg:#1a0c04; --hero-ring:#c8956c; --hero-num-a:#e0b896; --hero-num-b:#c8956c; --hero-shadow:rgba(0,0,0,.6);
}
/* ─────────────────────── end GP DESIGN SYSTEM v1 ─────────────────────── */

/* ── PHONE GRID FIXES (2026-09-04) ─────────────────────────────────────────
   An inline style carries no media query, so a grid written inline can never
   reflow. These two classes give the inline grids a phone behaviour without
   touching their desktop columns or their gap.

   A. .gp-gcols, stat/macro rows of equal cards. Desktop keeps whatever the
      inline grid-template-columns says; below 600px they wrap to two. The
      !important is required: a stylesheet declaration only beats an inline
      one when it carries it.
   B. .gp-trow, table rows with a fixed label column (roster week, macro
      breakdown). Collapsing these would destroy the row, so instead the row
      keeps its shape and the card it sits in scrolls sideways. :has() is the
      whole mechanism; where it is unsupported the row simply behaves as it
      does today, so there is no regression.
   Calendar weeks (repeat(7,1fr)) are deliberately untouched: a week is seven
   days and collapsing one stops it being a calendar. */
@media(max-width:600px){
 .gp-gcols{grid-template-columns:1fr 1fr!important}
 /* 2026-09-30: every column fits a phone now (tighter gap, no forced
    420px), so nothing hides past the card edge; the sideways scroll stays
    only as a fallback for an unusually long value. */
 .gp-trow{min-width:0;column-gap:4px!important}
 .gp-trow>*{min-width:0}
 .card:has(.gp-trow){overflow-x:auto}
 /* class-based siblings of the same pattern */
 .prg-next-row,.prg-ex-row,.gc-stats,.gc-hud-row{grid-template-columns:1fr 1fr!important}
}

/* ── Feedback + testimonial consent (course-feedback.js, 2026-09-24) ── */
.gpfb-intro{font-size:14px;color:var(--text2);line-height:1.6;margin:0 0 16px}
.gpfb-form .gpfb-q{margin-bottom:16px}
.gpfb-lab{font-size:13.5px;font-weight:600;color:var(--text)}
.gpfb-hint{font-size:12px;color:var(--text3)}
.gpfb-tag{display:inline-block;font-size:11px;font-weight:600;color:var(--text3);background:var(--surface2);border:1px solid var(--border);border-radius:99px;padding:0 8px;margin-left:6px;vertical-align:1px}
.gpfb-tag-pub{color:var(--accent);background:var(--accent-dim);border-color:transparent}
.gpfb-stars{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.gpfb-star{width:40px;height:40px;border-radius:8px;border:1px solid var(--border2);background:var(--surface);color:var(--text2);font-family:var(--font-display);font-weight:700;font-size:17px;cursor:pointer}
.gpfb-star.on{background:var(--accent);border-color:var(--accent);color:var(--btn-text)}
.gpfb-star:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.gpfb-stars small{font-size:12px;color:var(--text3);margin-left:4px}
.gpfb-consent{border-top:1px solid var(--border);padding-top:14px;display:flex;flex-direction:column;gap:10px}
.gpfb-ct{font-family:var(--font-display);font-weight:700;font-size:18px;color:var(--text)}
.gpfb-opts{display:grid;grid-template-columns:1fr 1fr;gap:8px}
@media (max-width:620px){.gpfb-opts{grid-template-columns:1fr}}
.gpfb-opt{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--border2);border-radius:10px;cursor:pointer;background:var(--surface)}
.gpfb-opt input{margin-top:3px;accent-color:var(--accent);flex-shrink:0}
.gpfb-opt b{display:block;font-weight:600;font-size:14px;color:var(--text)}
.gpfb-opt small{display:block;font-size:12.5px;color:var(--text3)}
.gpfb-opt:has(input:checked){border-color:var(--accent);background:var(--accent-dim)}
.gpfb-yes{display:flex;flex-direction:column;gap:10px}
.gpfb-chk{display:flex;gap:9px;align-items:flex-start;font-size:13.5px;color:var(--text)}
.gpfb-chk input{margin-top:3px;accent-color:var(--accent)}
.gpfb-photo-row{display:flex;gap:12px;align-items:center}
.gpfb-file{position:relative;overflow:hidden;cursor:pointer;margin-top:4px}
.gpfb-file input{position:absolute;inset:0;opacity:0;cursor:pointer}
.gpfb-av{width:34px;height:34px;border-radius:50%;background:var(--surface3);color:var(--text2);display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:13px;flex-shrink:0;overflow:hidden}
.gpfb-photo-row .gpfb-av{width:48px;height:48px}
.gpfb-av img{width:100%;height:100%;object-fit:cover;display:block}
.gpfb-preview{border:1px dashed var(--border2);border-radius:10px;padding:12px;background:var(--surface2);display:flex;flex-direction:column;gap:8px}
.gpfb-pk{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text3)}
.gpfb-card{background:var(--surface);border:1px solid var(--border);border-radius:10px;padding:13px 15px;display:flex;flex-direction:column;gap:8px}
.gpfb-cstars{color:var(--accent);letter-spacing:2px;font-size:13px}
.gpfb-cq{font-size:15px;line-height:1.5;color:var(--text);white-space:pre-wrap;overflow-wrap:anywhere}
.gpfb-cwho{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--text2)}
.gpfb-cwho b{color:var(--text)}
.gpfb-vf{font-size:11.5px;font-weight:600;color:var(--good)}
.gpfb-off{font-size:13px;color:var(--text3);font-style:italic}
.gpfb-fine{font-size:12px;color:var(--text3);line-height:1.5}
.gpfb-fine a{color:var(--accent)}
.gpfb-err{color:var(--bad);font-size:13px;min-height:16px;margin:10px 0 0}
.gpfb-k{font-size:10.5px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}
.gpfb-t{font-family:var(--font-display);font-weight:700;font-size:20px;line-height:1.15;color:var(--text)}
.gpfb-t2{font-weight:600;font-size:15px;color:var(--text)}
.gpfb-s{font-size:13px;color:var(--text2)}
.gpfb-gift{margin-top:5px;color:var(--text);font-weight:600}
.gpfb-ask,.gpfb-done{margin:6px 26px 14px;border-radius:12px;padding:13px 16px;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.gpfb-ask{border:1px solid var(--accent);box-shadow:0 0 0 3px var(--accent-dim)}
.gpfb-done{border:1px solid var(--border2);background:var(--surface2)}
.gpfb-later{margin:0 26px 10px}
/* Course-end ask, option C (2026-10-16): the first question on the card, gift strip under it */
.gpfb-rc{margin:6px 26px 14px;border-radius:18px;overflow:hidden;background:var(--surface);border:1px solid var(--border2)}
.gpfb-rc-top{padding:20px 22px 18px}
.gpfb-rc-hd{display:flex;justify-content:space-between;align-items:flex-start;gap:10px}
.gpfb-rc-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.3px;font-weight:700;color:var(--text3)}
.gpfb-rc-t{font-family:'Barlow Condensed',sans-serif;font-weight:800;text-transform:uppercase;font-size:32px;line-height:.95;margin-top:6px;color:var(--text);overflow-wrap:anywhere}
.gpfb-rc-x{font:inherit;font-size:13px;color:var(--text3);background:none;border:0;padding:4px 0;cursor:pointer;white-space:nowrap}
.gpfb-rc-x:hover{color:var(--text)}
.gpfb-rc-rate{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-top:16px}
.gpfb-rc-n{height:54px;border-radius:12px;border:1px solid var(--border2);background:var(--surface2);font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:26px;color:var(--text);cursor:pointer}
.gpfb-rc-n:hover{border-color:var(--accent);background:var(--accent-dim)}
.gpfb-rc-n:focus-visible,.gpfb-rc-x:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.gpfb-rc-cap{display:flex;justify-content:space-between;gap:10px;font-size:12px;color:var(--text3);margin-top:7px}
.gpfb-rc-gift{display:flex;align-items:center;gap:12px;padding:13px 22px;color:var(--hero-fg,#fff);background:radial-gradient(120% 70% at 88% -10%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%)}
.gpfb-rc-gb{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:22px;text-transform:uppercase;line-height:1}
.gpfb-rc-gs{font-size:12.5px;color:var(--hero-fg2,rgba(255,255,255,.8));margin-top:3px}
@media (max-width:600px){.gpfb-rc{margin:6px 14px 14px}.gpfb-rc-top{padding:18px 16px 16px}.gpfb-rc-gift{padding:13px 16px}.gpfb-rc-rate{gap:6px}}
.gpfb-ty{margin:6px 26px 14px;border-radius:16px;padding:18px 20px;color:var(--hero-fg,#fff);background:radial-gradient(120% 70% at 88% -10%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%)}
.gpfb-ty-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.3px;font-weight:700;color:var(--hero-fg2,rgba(255,255,255,.8))}
.gpfb-ty-t{font-family:'Barlow Condensed',sans-serif;font-weight:800;text-transform:uppercase;line-height:1;font-size:30px;margin-top:6px;overflow-wrap:anywhere}
.gpfb-ty-s{font-size:13.5px;line-height:1.5;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:7px;max-width:52ch}
.gpfb-ty-foot{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:14px;padding-top:12px;border-top:1px solid var(--hero-line,rgba(255,255,255,.14));font-size:12.5px;color:var(--hero-fg2,rgba(255,255,255,.8))}
.gpfb-ty-st{display:inline-flex;gap:6px;align-items:flex-start;min-width:0;flex:1 1 220px}
.gpfb-ty-acts{display:flex;gap:8px;margin-left:auto}
.gpfb-ty .gpfb-ty-ghost{background:transparent;color:var(--hero-fg,#fff);border:1px solid var(--hero-edge,rgba(255,255,255,.3))}
.gpfb-ty .gpfb-ty-ghost:hover{background:rgba(255,255,255,.08)}
.gpfb-ty .gpfb-ty-btn{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border:0}
.gpc-done{margin:14px 26px;display:flex;align-items:center;gap:8px 12px;flex-wrap:wrap}
.gpc-done-k{display:inline-flex;align-items:center;gap:8px;font-weight:700;color:var(--text)}
.gpc-done-ic{display:inline-flex;width:24px;height:24px;border-radius:50%;align-items:center;justify-content:center;background:var(--accent);color:var(--btn-text)}
.gpc-done-n{color:var(--text3);font-size:13px}
.gpc-done-btn{margin-left:auto}
@media (max-width:600px){.gpfb-ty{margin:6px 14px 14px}.gpc-done{margin:14px}}
@media (max-width:600px){.gpfb-ask,.gpfb-done{margin:6px 14px 14px}.gpfb-later{margin:0 14px 10px}}
.gpfb-nudge{border:1px solid var(--accent);background:var(--accent-dim);border-radius:12px;padding:13px 16px;display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:0 0 14px}
/* 2026-10-15: fits a phone-width player (it was cut off at the top), and
   "Later" is light on clear, not light grey on a light grey button. */
.gpfb-endcard{position:absolute;inset:0;background:rgba(8,12,18,.94);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;padding:14px 18px;color:#F4F2EE;z-index:3;overflow-y:auto}
.gpfb-ek{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:#7dd4f0}
.gpfb-et{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:26px;max-width:90%;line-height:1.1}
.gpfb-es{font-size:13.5px;color:#cdd6e0;max-width:44ch}
.gpfb-eb{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}
.gpfb-endcard .btn-ghost{background:transparent;border-color:rgba(244,242,238,.45);color:#F4F2EE}
.gpfb-endcard .btn-ghost:hover{background:rgba(244,242,238,.10)}
@media (max-width:600px){.gpfb-endcard{gap:7px;padding:10px 14px}.gpfb-et{font-size:21px}.gpfb-es{font-size:12.5px}}
.gpfb-mine{border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:10px;display:flex;flex-direction:column;gap:6px}
.gpfb-mh{display:flex;justify-content:space-between;gap:10px;font-size:13.5px;color:var(--text)}
.gpfb-mh span{font-size:12px;color:var(--text3)}
.gpfb-mq{font-size:14px;color:var(--text2);overflow-wrap:anywhere}
.gpfb-ms{font-size:12.5px;color:var(--text3)}
.gpfb-ma{display:flex;gap:8px;flex-wrap:wrap}
.gpfb-chips{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.gpfb-chip{font:inherit;font-size:12.5px;border:1px solid var(--border2);border-radius:99px;padding:4px 11px;color:var(--text2);background:var(--surface);cursor:pointer}
.gpfb-chip.on{border-color:var(--accent);color:var(--accent);background:var(--accent-dim);font-weight:600}
.gpfb-chip.gpfb-chip-down{color:var(--warn,#9A521C)}
.gpfb-nums{background:var(--surface2);border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin-bottom:12px}
.gpfb-ntab{width:100%;border-collapse:collapse;font-size:13px;font-variant-numeric:tabular-nums;margin:6px 0 4px}
.gpfb-ntab td{padding:4px 2px;border-bottom:1px solid var(--border)}
.gpfb-ntab td.gpfb-nv{text-align:right;color:var(--text2)}
.gpfb-ntab td.gpfb-nd{text-align:right;font-weight:700;width:64px}
.gpfb-up{color:var(--good,#1f6f3a)}
.gpfb-down{color:var(--warn,#9A521C)}
.gpfb-row{border:1px solid var(--border);border-radius:12px;padding:12px 14px;margin-bottom:10px;display:flex;flex-direction:column;gap:8px}
.gpfb-rh{font-size:13.5px;color:var(--text2)}
.gpfb-rh b{color:var(--text)}
.gpfb-rb{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.gpfb-b{font-size:11px;font-weight:700;border-radius:99px;padding:2px 9px;border:1px solid var(--border2);color:var(--text3)}
.gpfb-b-ok{color:var(--good);border-color:var(--good)}
.gpfb-b-wd{color:var(--bad);border-color:var(--bad)}
.gpfb-meta{font-size:12px;color:var(--text3)}
.gpfb-rcard{display:flex;flex-direction:column;gap:8px;align-items:flex-start}
.gpfb-rcard .gpfb-card{align-self:stretch}
.gpfb-rq{font-size:14px;color:var(--text2);overflow-wrap:anywhere}
.gpfb-priv{font-size:13px;color:var(--text2);background:var(--surface2);border-radius:8px;padding:8px 10px;overflow-wrap:anywhere}
.gpfb-priv b{display:block;font-size:10.5px;letter-spacing:.05em;text-transform:uppercase;color:var(--text3)}
.gpfb-form [hidden]{display:none!important}

/* ── CATEGORY + MACRO PALETTE (2026-09-29) ─────────────────────────────
   The check-in tracker categories and the nutrition macros are colour-coded,
   and those hues used to be literals tuned for a dark ground: on the light
   themes protein #2ecc71 read 1.6:1 and fiber #fdcb6e 1.2:1, and on the dark
   themes the tracker labels sat at 3.0 to 3.9:1. Same hue families, one value
   per ground, each clearing 4.5:1 on bg/surface/surface2 of every theme in
   its group (surface3 included). The bare :root carries the dark values (every dark theme
   inherits them); the light group below overrides. */
:root{
 --macro-protein:#2ECC71; --macro-carbs:#FF984A; --macro-veg:#14B3B3;
 --macro-fat:#A29BFE;     --macro-fiber:#FDCB6E; --macro-water:#2BB8EC;
 --cat-sleep:#8BA4BA; --cat-energy:#C39B68; --cat-stress:#C69879;
 --cat-nutrition:#8AA89E; --cat-load:#9EA0BD; --cat-pain:#C3988C;
}
:root.theme-login,:root.theme-master,:root.theme-dries-light,:root.theme-agathe-light{
 --macro-protein:#19703E; --macro-carbs:#A64700; --macro-veg:#0C6E6E;
 --macro-fat:#5A4FCF;     --macro-fiber:#895A02; --macro-water:#0D6B8D;
 --cat-sleep:#4B6680; --cat-energy:#7F5D32; --cat-stress:#87583A;
 --cat-nutrition:#4D685F; --cat-load:#5C608A; --cat-pain:#895648;
}

/* Bare links inside the app take the accent. Zero-specificity :where() so
   every class rule and inline colour still wins; only links that set no
   colour at all (they fell back to the browser's #0000ee) are affected. */
:where(#app,#modal) a:where(:not([class])){color:var(--accent)}

/* Phone-width fits (2026-09-29). Classes are styling hooks only; no JS reads them. */
@media(max-width:520px){
 .bw-form-row{flex-wrap:wrap}
 .bw-form-row > .form-group:first-child{flex:1 1 100% !important}
 .bw-form-row > .form-group:nth-child(2){flex:1 1 0;min-width:0}
}
@media(max-width:420px){
 .hp-week-label{width:70px !important}
 .hp-week-box{width:26px !important;height:26px !important}
}
.med-dur-row{flex-wrap:wrap}
.med-dur-row > *{flex:1 1 100%;min-width:0}

/* ── MEMBER UI v2 (2026-09-29) ── */
/* ══════════════════════════════════════════════════════════════════════════
   GP ELEVATION v1 (2026-09-29) - client-facing visual layer.
   Everything here is scoped to body.role-client so the coach UI is untouched.
   One hero system: a view gets a hero by rendering one .gx-hero element as
   its first content. The hero paints its own backdrop upward behind the
   container tabs (a negative z-index layer inside the view), so the tabs,
   title and primary object read as one band without moving any node that JS
   looks up. On phones the top bar joins the band. Hex/rgba and tokens only,
   no color-mix(), so older iOS Safari renders it.
   ══════════════════════════════════════════════════════════════════════════ */
:root{
 --hero-num:linear-gradient(100deg,var(--hero-num-a),var(--hero-num-b));
 --hero-dot:#D93036; --hero-live:#6FD39A;
 --accent-edge:rgba(var(--accent-rgb),.28);
 --card-shadow:none;
 --warn-edge:rgba(221,136,0,.35);
}
:root.theme-login,:root.theme-master,:root.theme-dries-light,:root.theme-agathe-light{
 --card-shadow:0 1px 2px rgba(11,21,35,.05);
 --warn-edge:rgba(154,82,28,.35);
}
:root.theme-master-dark{ --warn-edge:rgba(252,155,0,.35); }
.main{--gx-mp:28px}
@media(max-width:768px){ .main{--gx-mp:16px} }
@media(orientation:landscape) and (max-width:1024px){ .main{--gx-mp:12px} }

/* ── Hero band ───────────────────────────────────────────────────────── */
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)){position:relative;z-index:0}
body.role-client .gx-hero{position:relative;color:var(--hero-fg);padding:4px 0 24px;margin:0 0 18px}
body.role-client .gx-hero::before,body.role-client .gx-hero::after{content:"";position:absolute;z-index:-1;pointer-events:none;
 left:calc(-1 * var(--gx-l, var(--gx-mp)));right:calc(-1 * var(--gx-r, var(--gx-mp)));top:-3000px;bottom:0;border-radius:0 0 30px 30px}
body.role-client .gx-hero::before{
 background:
  radial-gradient(120% 60% at 88% 0%,var(--hero-glow),transparent 62%) left bottom/100% 640px no-repeat,
  linear-gradient(170deg,var(--hero-a) 0%,var(--hero-b) 100%) left bottom/100% 640px no-repeat,
  var(--hero-a);
 box-shadow:0 20px 40px -26px var(--hero-shadow)}
body.role-client .gx-hero::after{
 background-image:linear-gradient(var(--hero-grid) 1px,transparent 1px),linear-gradient(90deg,var(--hero-grid) 1px,transparent 1px);
 background-size:28px 28px;
 -webkit-mask:linear-gradient(0deg,transparent 0%,transparent 35%,#000 100%) left bottom/100% 640px no-repeat;
 mask:linear-gradient(0deg,transparent 0%,transparent 35%,#000 100%) left bottom/100% 640px no-repeat}
body.role-client .gx-hero a{color:var(--hero-fg)}
body.role-client .gx-hero :focus-visible{outline:2px solid var(--hero-fg);outline-offset:2px}

/* Tabs sitting on the hero: pill track + underline sub-strip. */
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-tabs{background:var(--hero-line);border:0;border-radius:14px;padding:4px;gap:2px;margin:0 0 12px}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-tabs .ctab{color:var(--hero-fg2);min-height:40px;border-radius:10px}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-tabs .ctab:hover{color:var(--hero-fg)}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-tabs .ctab.active{background:var(--hero-btn);color:var(--hero-btn-fg);box-shadow:0 2px 8px -2px rgba(0,0,0,.35)}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-tabs .ctab .ctab-badge,
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-tabs .ctab.active .ctab-badge{background:var(--hero-dot);color:#FFFFFF}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-subtabs{background:transparent;border:0;border-bottom:1px solid var(--hero-line);border-radius:0;padding:0;gap:20px;margin:0 0 16px;width:100%}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-subtabs .ctab-sub{color:var(--hero-fg2);background:transparent;border-radius:0;padding:0 2px;min-height:40px;border-bottom:2px solid transparent;margin-bottom:-1px}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-subtabs .ctab-sub.active{color:var(--hero-fg);background:transparent;border-bottom-color:var(--hero-fg)}
@media(max-width:768px){
 body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-tabs{width:100%;flex-wrap:nowrap}
 body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-tabs .ctab{flex:1 1 0;justify-content:center;padding:0 6px;white-space:nowrap}
 body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-subtabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
 body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-subtabs::-webkit-scrollbar{display:none}
 body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) > .container-subtabs .ctab-sub{flex-shrink:0}
}

/* Hero type + objects (mockup .eye .mega .gnum .glass .gchip .hbtn). */
.gx-eye{font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.18em;text-transform:uppercase;color:var(--hero-fg2)}
.gx-mega{font:800 46px/.92 'Barlow Condensed',sans-serif;text-transform:uppercase;letter-spacing:.005em;margin:6px 0 0;text-wrap:balance;overflow-wrap:anywhere;color:var(--hero-fg)}
.gx-gnum{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-variant-numeric:tabular-nums;background:var(--hero-num);-webkit-background-clip:text;background-clip:text;color:transparent}
.gx-glass{background:var(--hero-line);border:1px solid var(--hero-edge);border-radius:20px}
.gx-gchip{display:inline-flex;align-items:center;gap:5px;font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.1em;text-transform:uppercase;padding:5px 9px;border-radius:7px;background:var(--hero-line);color:var(--hero-fg);white-space:nowrap}
.gx-hbtn{min-height:52px;border-radius:14px;border:0;background:var(--hero-btn);color:var(--hero-btn-fg);font:700 15px 'Barlow Semi Condensed',sans-serif;letter-spacing:.05em;display:flex;align-items:center;justify-content:center;gap:9px;width:100%;cursor:pointer;box-shadow:0 10px 24px -12px rgba(0,0,0,.5)}
.gx-ib{width:44px;height:44px;border:0;background:transparent;border-radius:12px;display:flex;align-items:center;justify-content:center;color:var(--hero-fg);cursor:pointer;padding:0}

/* ── Phone top bar: menu, logo, search, bell. The rest docks in the drawer. */
@media(max-width:768px){
 body.role-client .topbar{gap:4px;padding:0 6px 0 4px;padding-top:env(safe-area-inset-top,0px)}
 body.role-client .topbar .hamburger{width:44px!important;height:44px!important;margin:0!important;padding:0!important;border-radius:12px}
 body.role-client .topbar .topbar-cmd,body.role-client .topbar #theme-toggle-btn,body.role-client .topbar #notif-bell-btn{width:44px;min-width:44px;height:44px;padding:0;border:0;background:transparent;border-radius:12px;display:flex;align-items:center;justify-content:center;color:var(--text2)}
 body.role-client .topbar .topbar-cmd svg{width:18px;height:18px}
 body.role-client .topbar #notif-bell-btn svg{width:19px;height:19px}
 body.role-client .topbar #theme-toggle-btn svg{width:18px;height:18px}
 body.role-client .topbar #notif-badge{top:6px!important;right:6px!important}
 body.role-client .topbar #topbar-logo-img{height:36px!important;width:36px!important}
 body.role-client:has(.view.active .gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) .topbar{background:var(--hero-a);border-bottom-color:transparent}
 body.role-client:has(.view.active .gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) .topbar .hamburger,
 body.role-client:has(.view.active .gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) .topbar .topbar-cmd,
 body.role-client:has(.view.active .gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) .topbar #theme-toggle-btn,
 body.role-client:has(.view.active .gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) .topbar #notif-bell-btn{color:var(--hero-fg)!important}
 :root.theme-master body.role-client:has(.view.active .gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) #topbar-logo-img,
 :root.theme-dries-light body.role-client:has(.view.active .gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) #topbar-logo-img,
 :root.theme-agathe-light body.role-client:has(.view.active .gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) #topbar-logo-img{content:url(../img/logo-cream.png)}
}
/* Drawer dock (filled by _gxDockTopbar on phones only). */
#gx-drawer-dock{display:none}
@media(max-width:768px){
 body.role-client #gx-drawer-dock{display:flex;flex-direction:column;gap:6px;padding:10px 8px 4px;margin-top:6px;border-top:1px solid var(--border)}
 #gx-drawer-dock:empty{display:none!important}
 #gx-drawer-dock #sync-indicator{padding:0 12px;font-size:12px!important}
 #gx-drawer-dock .topbar-btn{min-height:44px;width:100%;justify-content:flex-start;gap:10px;padding:0 12px;border-radius:10px;font-size:14px;color:var(--text2);border-color:var(--border)}
}

/* ── Shared client components (every client view) ─────────────────────── */
body.role-client .main .card{border-radius:18px;box-shadow:var(--card-shadow)}
body.role-client .main .container-tabs{border-radius:14px;padding:4px;gap:2px}
body.role-client .main .container-tabs .ctab{min-height:40px;border-radius:10px}
body.role-client .main .container-subtabs{background:transparent;border:0;border-bottom:1px solid var(--border);border-radius:0;padding:0;gap:18px;margin:-4px 0 18px;width:100%}
body.role-client .main .container-subtabs .ctab-sub{background:transparent;color:var(--text2);border-radius:0;padding:0 2px;min-height:40px;border-bottom:2px solid transparent;margin-bottom:-1px}
body.role-client .main .container-subtabs .ctab-sub:hover{color:var(--text)}
body.role-client .main .container-subtabs .ctab-sub.active{background:transparent;color:var(--text);border-bottom-color:var(--accent)}
@media(max-width:768px){
 body.role-client .main .container-subtabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
 body.role-client .main .container-subtabs::-webkit-scrollbar{display:none}
 body.role-client .main .container-subtabs .ctab-sub{flex-shrink:0}
}
body.role-client .main .page-title{letter-spacing:.01em;line-height:.95}
body.role-client .main .btn{border-radius:12px}
body.role-client .main .form-input{border-radius:12px}
@media (prefers-reduced-motion:reduce){
 body.role-client .gx-hero *,body.role-client .main .card{transition:none!important;animation:none!important}
}

/* ── Today ──────────────────────────────────────────────────────────── */
body.role-client .gx-today{display:flex;flex-direction:column;gap:18px}
body.role-client .gx-hero-today .cdv2-topbar{margin:14px 0 0;align-items:flex-end}
body.role-client .gx-hero-today .cdv2-date{color:var(--hero-fg2);font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.18em}
body.role-client .gx-hero-today .cdv2-name{color:var(--hero-fg);font-size:54px;line-height:.92;letter-spacing:.005em;margin-top:6px;overflow-wrap:anywhere}
body.role-client .gx-hero-today .cdv2-greeting{min-width:0;max-width:100%}
body.role-client .gx-today-next:empty{display:none}
body.role-client .gx-hero-today .gx-next-card{background:var(--hero-line);border:1px solid var(--hero-edge);border-radius:20px;padding:16px;min-height:0;box-shadow:none;gap:10px;color:var(--hero-fg);transform:none}
body.role-client .gx-hero-today .gx-next-card:hover{transform:none;border-color:var(--hero-edge);box-shadow:none}
body.role-client .gx-hero-today .gx-next-card .cdv2-sess-menu{top:10px;right:10px;width:44px;height:44px;border-radius:12px;color:var(--hero-fg)}
body.role-client .gx-hero-today .gx-next-card .cdv2-sess-menu:hover{background:var(--hero-line);color:var(--hero-fg)}
body.role-client .gx-hero-today .gx-next-card .cdv2-sess-num{order:2;font:800 52px/.9 'Barlow Condensed',sans-serif;letter-spacing:0;text-transform:uppercase;background:var(--hero-num);-webkit-background-clip:text;background-clip:text;color:transparent;padding-right:48px}
body.role-client .gx-hero-today .gx-next-card .cdv2-sess-body{display:contents}
body.role-client .gx-hero-today .gx-next-card .cdv2-sess-status{order:1;background:var(--hero-line);color:var(--hero-fg);border:0;border-radius:7px;padding:5px 9px;font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.1em}
body.role-client .gx-hero-today .gx-next-card .cdv2-sess-meta{order:3;color:var(--hero-fg2);font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.14em}
body.role-client .gx-hero-today .gx-next-card .cdv2-sess-start{order:4;min-height:52px;border-radius:14px;background:var(--hero-btn);color:var(--hero-btn-fg);font:700 15px 'Barlow Semi Condensed',sans-serif;letter-spacing:.05em;margin-top:4px;box-shadow:0 10px 24px -12px rgba(0,0,0,.5)}
body.role-client .gx-hero-today .cdv2-streak{background:var(--hero-line);color:var(--hero-fg);box-shadow:none;border:1px solid var(--hero-edge)}
@media(min-width:769px){
 body.role-client .gx-today{flex-direction:row;align-items:flex-end;justify-content:space-between;gap:28px}
 body.role-client .gx-hero-today .cdv2-topbar{margin:22px 0 4px;flex:1 1 auto}
 body.role-client .gx-hero-today .cdv2-name{font-size:64px}
 body.role-client .gx-today-next{flex:0 0 380px}
}
/* This week card: one list of rows, a progress bar, Up next marked. */
body.role-client .cdv2-tw{border-radius:20px;padding:16px 16px 6px;box-shadow:var(--card-shadow)}
body.role-client .cdv2-tw-title{font:800 26px/1.05 'Barlow Condensed',sans-serif;text-transform:uppercase}
body.role-client .cdv2-tw-summary{margin-bottom:10px;line-height:1.45}
body.role-client .gx-weekbar{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:4px;margin:0 0 10px}
body.role-client .gx-weekbar i{display:block;height:6px;border-radius:3px;background:var(--surface3)}
body.role-client .gx-weekbar i.on{background:var(--good)}
body.role-client .cdv2-tw-grid{display:flex;flex-direction:column;gap:0;margin:0 -16px}
body.role-client .cdv2-tw-grid .cdv2-sess{flex-direction:row;align-items:center;gap:12px;min-height:64px;padding:12px 16px;border:0;border-top:1px solid var(--border);border-radius:0;background:transparent;box-shadow:none;transform:none}
body.role-client .cdv2-tw-grid .cdv2-sess:hover{transform:none;box-shadow:none;background:var(--surface2)}
body.role-client .cdv2-tw-grid .cdv2-sess-num{flex:1 1 auto;font:800 19px/1.1 'Barlow Condensed',sans-serif;letter-spacing:.02em;color:var(--text)}
body.role-client .cdv2-tw-grid .cdv2-sess-body{flex:0 1 auto;flex-direction:row;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}
body.role-client .cdv2-tw-grid .cdv2-sess-meta{font:700 10px 'Barlow Semi Condensed',sans-serif;letter-spacing:.1em;color:var(--text2)}
body.role-client .cdv2-tw-grid .cdv2-sess-status{padding:4px 8px;border-radius:7px;font-size:10px}
body.role-client .cdv2-tw-grid .cdv2-sess-done{background:transparent}
body.role-client .cdv2-tw-grid .cdv2-sess-done .cdv2-sess-num{color:var(--text)}
body.role-client .cdv2-tw-grid .cdv2-sess-done .cdv2-sess-status{background:var(--good-tint);color:var(--good)}
body.role-client .cdv2-tw-grid .cdv2-sess-upnext{background:var(--accent-dim)}
body.role-client .cdv2-tw-grid .cdv2-sess-upnext .cdv2-sess-status{background:var(--accent);color:var(--btn-text)}
body.role-client .cdv2-tw-grid .cdv2-sess-pending .cdv2-sess-status{border:0;background:var(--surface2);color:var(--text2)}
body.role-client .cdv2-tw-grid .cdv2-sess-start{width:auto;min-height:44px;border-radius:12px;padding:0 15px}
body.role-client .cdv2-tw-grid .cdv2-sess-start-ghost{background:var(--surface);color:var(--text);border:1px solid var(--border2)}
/* Daily check-in board: one tight grid of tiles. */
body.role-client .dcb-card{border-radius:20px;box-shadow:var(--card-shadow)}
body.role-client .dcb-title{font-weight:800;font-size:23px}
body.role-client .dcb-tiles{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
@media(min-width:769px){ body.role-client .dcb-tiles{grid-template-columns:repeat(6,minmax(0,1fr))} }
body.role-client .dcb-tile{border-radius:14px;padding:10px 10px 9px;min-height:60px;gap:3px;background:var(--surface2);border-style:solid}
body.role-client .dcb-tile-label{line-height:1.15;gap:5px}
body.role-client .dcb-tile-done{background:var(--surface);border-color:var(--accent)}
body.role-client .dcb-tile-value{font-size:30px}
body.role-client .dcb-tile .dcb-tile-meta{font-size:12px;color:var(--text2)}
body.role-client .cdv2-card,body.role-client .cdv2-catchup,body.role-client .gpret-card{border-radius:20px}

/* ── Program (My Program) ────────────────────────────────────────────── */
body.role-client .gx-hero-prog{display:flex;flex-direction:column;align-items:stretch;gap:14px;margin-bottom:16px}
body.role-client .gx-hero-prog .page-title{font-size:36px;line-height:.95;color:var(--hero-fg);letter-spacing:.005em;margin-top:8px;text-wrap:balance}
body.role-client .gx-hero-prog .gx-prog-chips{gap:6px!important;margin-top:12px!important;color:var(--hero-fg)}
body.role-client .gx-hero-prog .gx-prog-chips > span{background:var(--hero-line)!important;border:0!important;color:var(--hero-fg)!important;border-radius:7px!important;padding:5px 9px!important;font:600 12px 'Barlow Semi Condensed',sans-serif!important;letter-spacing:.02em}
body.role-client .gx-hero-prog .gx-prog-chips > span:first-child{background:var(--hero-btn)!important;color:var(--hero-btn-fg)!important;text-transform:uppercase;letter-spacing:.1em;font-weight:700!important}
body.role-client .gx-hero-prog .gx-prog-actions{width:100%}
body.role-client .gx-hero-prog .gx-prog-actions .btn{min-height:44px;background:var(--hero-line);color:var(--hero-fg);border:1px solid var(--hero-edge);border-radius:14px}
body.role-client .gx-hero-prog .gx-prog-actions .btn:first-child{flex:1 1 auto}
body.role-client .gx-hero-prog .gx-prog-actions .btn:last-child{width:48px;padding:0!important}
@media(min-width:769px){
 body.role-client .gx-hero-prog{flex-direction:row;align-items:flex-end;justify-content:space-between}
 body.role-client .gx-hero-prog .page-title{font-size:46px}
 body.role-client .gx-hero-prog .gx-prog-actions{width:auto}
 body.role-client .gx-hero-prog .gx-prog-actions .btn:first-child{flex:0 0 auto;padding:0 22px}
}
body.role-client #client-prog-content .week-nav{background:var(--surface);border-radius:18px;padding:4px 6px;gap:2px;box-shadow:var(--card-shadow)}
body.role-client #client-prog-content .week-btn{min-width:44px;min-height:44px;border-radius:12px;border-color:transparent;color:var(--text2);font-weight:700}
body.role-client #client-prog-content .week-btn.active{background:var(--accent);border-color:var(--accent);color:var(--btn-text)}
body.role-client #client-prog-content .week-btn:hover:not(.active){background:var(--surface2);border-color:transparent;color:var(--text)}
body.role-client #client-prog-content .week-display{flex:1 1 auto;text-align:center;font-weight:800;font-size:21px;text-transform:uppercase;white-space:nowrap}
body.role-client .session-pre-card{border-radius:20px;box-shadow:var(--card-shadow)}
body.role-client .session-pre-header{padding:14px;gap:12px}
body.role-client .session-pre-icon{width:40px;height:40px;border-radius:12px;background:var(--surface2);border:0;color:var(--text);font-size:20px}
body.role-client .session-pre-name{font-weight:800;font-size:19px;line-height:1.1}
body.role-client .session-pre-meta{font-size:12.5px}
body.role-client .session-pre-card.gx-done .session-pre-icon{background:var(--good-tint);color:var(--good)}
body.role-client .session-pre-card.gx-next{border:1.5px solid var(--accent);box-shadow:0 14px 30px -18px var(--hero-shadow)}
body.role-client .session-pre-card.gx-next .session-pre-icon{background:var(--accent);color:var(--btn-text)}
body.role-client .session-pre-card:not(.gx-next) .session-pre-header > .btn-accent{background:var(--surface);color:var(--text);border:1px solid var(--border2)}
body.role-client .session-pre-header > .btn{min-height:44px;border-radius:12px}

/* ── Open session ────────────────────────────────────────────────────── */
body.role-client .client-session-card{border-radius:22px;box-shadow:var(--card-shadow);border-color:var(--border)}
body.role-client .session-active-header{position:relative;overflow:hidden;color:var(--hero-fg);border-bottom:0;padding:16px 18px 20px;display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:6px 10px;
 background:radial-gradient(120% 70% at 88% -10%,var(--hero-glow),transparent 62%),linear-gradient(165deg,var(--hero-a) 0%,var(--hero-b) 100%)}
body.role-client .session-active-header .session-active-tag{grid-column:1;grid-row:1;background:var(--hero-line);border:0;color:var(--hero-fg);border-radius:7px;padding:5px 9px;font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.1em}
body.role-client .session-active-header > .badge{grid-column:3;grid-row:1;justify-self:end;background:var(--hero-line);color:var(--hero-fg);border-radius:7px;padding:5px 9px;text-transform:uppercase;letter-spacing:.1em;font-family:'Barlow Semi Condensed',sans-serif}
body.role-client .session-active-header .session-elapsed{grid-column:1 / -1;grid-row:2;margin:10px 0 0;font:800 78px/.9 'Barlow Condensed',sans-serif;letter-spacing:0;font-variant-numeric:tabular-nums;background:var(--hero-num);-webkit-background-clip:text;background-clip:text;color:transparent}
body.role-client .session-active-header > span[style*="font-size:20px"]{grid-column:1 / -1;grid-row:3;font-size:34px!important;line-height:1!important;font-weight:800!important;color:var(--hero-fg)}
body.role-client .client-ex-card{background:var(--surface);border-radius:20px;padding:14px;box-shadow:var(--card-shadow)}
body.role-client .client-superset-group{border-radius:20px;background:transparent;border-color:var(--border)}
body.role-client .client-superset-label{background:transparent;border-bottom:0;color:var(--text);font-family:'Barlow Semi Condensed',sans-serif;letter-spacing:.13em}
body.role-client .client-ex-header{gap:8px}
body.role-client .client-ex-slot{font:800 13px 'Barlow Condensed',sans-serif;background:var(--accent);color:var(--btn-text);border-radius:8px;padding:4px 7px;border:0;min-width:0}
body.role-client .client-ex-name{font-size:17px}
body.role-client .client-ex-header .btn,body.role-client .client-ex-header .room-ex-chip .btn{min-height:38px;border-radius:12px}
body.role-client .client-ex-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(70px,1fr));border:0;border-radius:14px;background:var(--surface2)}
body.role-client .client-ex-field{border-right:0;border-left:1px solid var(--border);padding:10px 8px 9px;min-width:0}
body.role-client .client-ex-field:first-child{border-left:0}
body.role-client .client-ex-field-label{font:700 10px 'Barlow Semi Condensed',sans-serif;letter-spacing:.1em}
body.role-client .client-ex-field-val{font-weight:800;font-size:18px;line-height:1.05;white-space:nowrap}
/* A per-set list ("2-3 × 10,8,6") is longer than one cell on a phone: it may
   wrap inside its own cell rather than run under the Tempo value. */
body.role-client .client-ex-field{overflow:hidden}
body.role-client .client-ex-field-val{white-space:normal;overflow-wrap:anywhere}
body.role-client .gx-beat{display:grid!important;grid-template-columns:auto 1fr;column-gap:14px;row-gap:2px;align-items:center;background:var(--accent-dim);border:1px solid var(--accent-edge);border-radius:16px;padding:12px 14px!important;margin-top:10px!important}
body.role-client .gx-beat > span:first-child{grid-column:1;grid-row:1;font:800 34px/1 'Barlow Condensed',sans-serif!important;color:var(--accent)!important;white-space:nowrap;font-variant-numeric:tabular-nums}
body.role-client .gx-beat > span[id^="beat-"]{grid-column:1;grid-row:2;font:700 11px 'Barlow Semi Condensed',sans-serif!important;letter-spacing:.13em;text-transform:uppercase}
body.role-client .gx-beat > span:nth-child(3){grid-column:2;grid-row:1 / span 2;border-left:1px solid var(--accent-edge);padding-left:14px;align-self:stretch;display:flex;align-items:center;font-size:14.5px!important;font-weight:700!important;line-height:1.35;color:var(--text)!important}
body.role-client .log-section-title{color:var(--text2);font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.13em}
body.role-client .set-row{gap:8px;padding:6px 0;border-bottom:0}
body.role-client .set-num-cell{font:800 17px 'Barlow Condensed',sans-serif;color:var(--text2);width:22px}
body.role-client .set-input-sm{height:48px;border-radius:12px;border:1px solid var(--border2);background:var(--surface);font:700 19px 'Barlow Condensed',sans-serif;color:var(--text);padding:0 12px;font-variant-numeric:tabular-nums}
body.role-client .set-input-sm::placeholder{color:var(--text3)}
body.role-client .set-input-sm.has-value{background:var(--surface);border-color:var(--accent-edge)}
body.role-client .set-optional-toggle,body.role-client .set-confirm-btn{width:44px;height:44px;border-radius:12px;display:flex;align-items:center;justify-content:center;padding:0;align-self:flex-end}
body.role-client .set-confirm-btn{border:1px solid var(--border2);background:var(--surface);color:var(--text)}
body.role-client .set-row.confirmed{background:var(--good-tint);border-radius:14px;padding:4px 4px 4px 0;margin:2px -4px}
body.role-client .set-row.confirmed .set-num-cell{color:var(--good)}
body.role-client .set-row.confirmed .set-input-sm{border-color:var(--border2)}
body.role-client .set-row.confirmed .set-field-label{color:var(--text)}
body.role-client .set-confirm-btn.confirmed{background:var(--good);border-color:var(--good);color:var(--surface)}
body.role-client .prep-block{background:var(--surface);border:1px solid var(--border);border-left:1px solid var(--border);border-radius:20px;padding:14px}
body.role-client .prep-label{color:var(--text2);font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.13em;text-transform:uppercase}
body.role-client .prep-block .prep-ex-row{border-bottom:0!important;border-top:1px solid var(--border);padding:8px 0!important}
body.role-client .prep-slot{color:var(--text2)}

/* ── Performance Hub profile strip (fv-profiling) ─────────────────────── */
body.role-client #fv-profiling-tabs{background:transparent!important;border:0!important;border-bottom:1px solid var(--border)!important;border-radius:0!important;padding:0!important;gap:18px!important;width:100%!important;flex-wrap:nowrap!important;overflow-x:auto;scrollbar-width:none}
body.role-client #fv-profiling-tabs::-webkit-scrollbar{display:none}
body.role-client #fv-profiling-tabs button{background:transparent!important;color:var(--text2)!important;border-radius:0!important;padding:0 2px!important;min-height:40px;border-bottom:2px solid transparent!important;margin-bottom:-1px;flex-shrink:0}
body.role-client #fv-profiling-tabs button[style*="var(--accent)"]{color:var(--text)!important;border-bottom-color:var(--accent)!important}
body.role-client #fv-tabstrip-row{margin-bottom:12px!important}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) #fv-profiling-tabs{border-bottom-color:var(--hero-line)!important}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) #fv-profiling-tabs button{color:var(--hero-fg2)!important}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) #fv-profiling-tabs button[style*="var(--accent)"]{color:var(--hero-fg)!important;border-bottom-color:var(--hero-fg)!important}
body.role-client .view:has(.gx-hero:not([style*="display: none"] *):not([style*="display:none"] *)) #fv-wizard-banner .btn{background:var(--hero-line);color:var(--hero-fg);border-color:var(--hero-edge)}

/* ── Jump Profile ───────────────────────────────────────────────────── */
body.role-client .gx-jump-in{max-width:900px;margin:0;display:flex;flex-direction:column;gap:18px}
body.role-client .gx-hero-jump .gx-jump-title{font:800 46px/.92 'Barlow Condensed',sans-serif!important;text-transform:uppercase;color:var(--hero-fg);margin-top:8px}
body.role-client .gx-hero-jump .gx-jump-sub{font-size:13.5px!important;color:var(--hero-fg2)!important;margin-top:6px!important}
body.role-client .gx-jump-score:empty{display:none}
body.role-client .gx-jump-scorerow{display:flex;align-items:center;gap:18px}
body.role-client .gx-jump-ring{position:relative;width:140px;height:140px;flex-shrink:0}
body.role-client .gx-jump-ring svg{display:block}
body.role-client .gx-jump-ringtxt{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center}
body.role-client .gx-jump-of{font:800 16px 'Barlow Condensed',sans-serif;color:var(--hero-fg2)}
body.role-client .gx-jump-meta{display:flex;flex-direction:column;gap:4px;min-width:0;color:var(--hero-fg)}
body.role-client .gx-jump-sm{font-size:12.5px;color:var(--hero-fg2)}
body.role-client .gx-jump-note{font-size:12.5px;color:var(--hero-fg);font-weight:600}
body.role-client .gx-jump-cls{font-size:14px;margin-top:4px}
body.role-client .gx-jump-tiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:16px}
body.role-client .gx-jump-tile{padding:12px 13px;display:flex;flex-direction:column;gap:3px;border-radius:16px}
body.role-client .gx-jump-tile .gx-eye{font-size:10px}
body.role-client .gx-jump-unit{font-size:14px;color:var(--hero-fg2)}
body.role-client .gx-jump-tsub{font-size:12px;color:var(--hero-fg2)}
@media(min-width:769px){
 body.role-client .gx-jump-score{display:flex;align-items:center;gap:28px}
 body.role-client .gx-jump-tiles{margin-top:0;flex:1 1 auto;max-width:460px}
}
body.role-client .dcb-tile .dcb-tile-value-empty{font:500 12px 'Barlow',sans-serif!important;color:var(--text2)!important}
body.role-client .cdv2-tw-head{flex-direction:column;align-items:flex-start;gap:4px}

/* ── Shared pieces across every client view ───────────────────────────── */
body.role-client .main .stat-box{border-radius:16px}
body.role-client .main .badge{border-radius:7px;letter-spacing:.06em}
body.role-client .main .section-label{letter-spacing:.13em;color:var(--text2)}
body.role-client .modal{border-radius:22px}
body.role-client .modal-title{font-family:'Barlow Condensed',sans-serif;font-weight:800;letter-spacing:.01em}
body.role-client #notif-panel{border-radius:18px!important}
body.role-client .main .page-header{margin-bottom:18px}

/* ── Sign-in, set-password, sign-up: the sales-page ground ───────────── */
/* Deep navy field with one lit corner, like the sales page: the glow sits top
   right, the grid lives on its own layer and fades out by 60% down, so it
   reads as texture near the top rather than graph paper everywhere. */
:root.theme-login #login-screen,:root.theme-login #recovery-screen,:root.theme-login #signup-screen{
 background-color:var(--hero-b);
 background-image:
  radial-gradient(70% 55% at 88% 0%,rgba(244,242,238,.26),rgba(244,242,238,.08) 40%,transparent 70%),
  radial-gradient(60% 45% at 50% 105%,rgba(27,42,71,.9),transparent 70%),
  linear-gradient(170deg,var(--hero-a) 0%,var(--hero-b) 100%);
 background-size:100% 100%;background-repeat:no-repeat;
 padding:24px 16px}
:root.theme-login #login-screen::before,:root.theme-login #recovery-screen::before,:root.theme-login #signup-screen::before{
 content:"";position:fixed;inset:0;pointer-events:none;z-index:0;
 background-image:linear-gradient(var(--hero-grid) 1px,transparent 1px),linear-gradient(90deg,var(--hero-grid) 1px,transparent 1px);
 background-size:40px 40px;
 -webkit-mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.5) 30%,transparent 60%);mask-image:linear-gradient(180deg,#000 0%,rgba(0,0,0,.5) 30%,transparent 60%)}
:root.theme-login .login-card{position:relative;z-index:1;border:0;border-radius:24px;padding:40px 32px 32px;
 box-shadow:0 0 0 1px var(--hero-edge),0 40px 90px -30px rgba(0,0,0,.8),0 0 120px -20px rgba(244,242,238,.22)}
:root.theme-login .login-card .field input{min-height:48px;border-radius:12px;background:var(--surface);font-size:15px}
/* Browser autofill keeps the card's own field style (no pale-blue fill). */
:root.theme-login .login-card .field input:-webkit-autofill,
:root.theme-login .login-card .field input:-webkit-autofill:hover,
:root.theme-login .login-card .field input:-webkit-autofill:focus,
:root.theme-login .login-card .field input:-webkit-autofill:active{
 -webkit-box-shadow:0 0 0 1000px var(--surface) inset!important;box-shadow:0 0 0 1000px var(--surface) inset!important;
 -webkit-text-fill-color:var(--text)!important;caret-color:var(--text);transition:background-color 99999s ease-out 0s}
:root.theme-login .login-card .field input:autofill{box-shadow:0 0 0 1000px var(--surface) inset!important;-webkit-text-fill-color:var(--text)!important}
:root.theme-login .login-card .btn-primary{min-height:52px;border-radius:14px;font-size:17px}
body:not(.role-coach) .btn-primary:hover{background:var(--accent);filter:brightness(1.12)}
@media(max-width:420px){ :root.theme-login .login-card{padding:32px 22px 26px} }

/* ── Toasts, modals, banners and tours outside the coach UI ──────────── */
body:not(.role-coach) .toast{border-radius:14px;padding:13px 22px;box-shadow:0 14px 34px -12px rgba(0,0,0,.55)}
body:not(.role-coach) .toast.toast-error{background:var(--accent2);color:var(--accent2-ink)}
body:not(.role-coach) .toast.toast-warn{background:var(--warn);color:var(--btn-text)}
body:not(.role-coach) .modal{border-radius:22px}
body.role-client #pwa-banner{border-radius:18px!important;border-color:var(--border2)!important}
body.role-client #pwa-banner button{min-height:44px}
body.role-client #gpfr-step{letter-spacing:.14em!important}

/* ── Live workout: rest timer bar ───────────────────────────────────── */
/* The countdown colour is written inline by training.js (var(--text), then
   var(--accent2) in the last 3 s, var(--accent) on GO). The bar is a dark
   hero field in every theme, so those three tokens are re-pointed for the
   bar only; the inline writes keep working and stay readable. */
body.role-client #rest-timer-bar{--text:var(--hero-fg);--accent:var(--hero-fg);--accent2:#F0837E}
body.role-client #rest-timer-bar{border-top:0;border-radius:22px 22px 0 0;padding-top:12px;
 background:linear-gradient(165deg,var(--hero-a) 0%,var(--hero-b) 100%);color:var(--hero-fg);box-shadow:0 -14px 34px -14px var(--hero-shadow)}
body.role-client .rest-timer-label{color:var(--hero-fg2);font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.14em;text-transform:uppercase}
body.role-client .rest-timer-track{height:6px;border-radius:3px;background:var(--hero-line)}
body.role-client .rest-timer-fill{background:var(--hero-fg);border-radius:3px}
body.role-client .rest-timer-countdown{font-weight:800;font-size:34px;color:var(--hero-fg)}
body.role-client .rest-timer-skip{min-height:44px;border-radius:12px;border:1px solid var(--hero-edge);background:var(--hero-line);color:var(--hero-fg);font-weight:700}
body.role-client .rest-timer-skip:hover{border-color:var(--hero-fg);color:var(--hero-fg)}

/* ── Global states ──────────────────────────────────────────────────── */
body.role-client .empty-state{border-radius:20px}
body.role-client .empty-state-title{font-weight:800}

/* Contrast holds on the two lighter coach heroes: their deep fields (#0D6C90,
   #8A5A34) are mid-tones, so a white-tinted glass track lifted the ground
   under the tab labels and chips to 3.4 to 4.4:1. On member screens the glass
   darkens the field instead (0.18 black), which keeps every label above
   4.5:1. theme-master's navy keeps the white tint. Coach screens unchanged. */
:root.theme-dries-light body.role-client,:root.theme-agathe-light body.role-client{--hero-line:rgba(0,0,0,.18)}
body.role-client .cdv2-tw-grid .cdv2-sess-upnext .cdv2-sess-meta{color:var(--text)}

/* ── Generic band on every client view (_gxHeroize in ui.js marks the
   view's own header .gx-hero.gx-auto, or adds an empty .gx-band-spacer) ── */
body.role-client .gx-auto{margin-left:calc(-1 * var(--gx-shift, 0px));padding-top:10px;padding-bottom:24px;margin-bottom:18px}
body.role-client .gx-band-spacer{display:block;height:6px;padding:0!important;margin:-6px 0 22px!important}
body.role-client .gx-auto,
body.role-client .gx-auto *:not(.btn):not(.btn *):not(button):not(button *):not(input):not(select):not(textarea):not(option):not(.badge):not([style*="background"]):not([style*="background"] *){color:var(--hero-fg)!important}
body.role-client .gx-auto .page-sub,body.role-client .gx-auto-sub,
body.role-client .gx-auto [style*="color:var(--text2)"]:not([style*="background"] *),
body.role-client .gx-auto [style*="color:var(--text3)"]:not([style*="background"] *){color:var(--hero-fg2)!important}
body.role-client .gx-auto-title{font:800 40px/.95 'Barlow Condensed',sans-serif!important;text-transform:uppercase;letter-spacing:.005em!important;color:var(--hero-fg)!important;text-wrap:balance;margin-top:0!important;margin-bottom:0!important;margin-right:0!important}
@media(min-width:769px){ body.role-client .gx-auto-title{font-size:46px!important} }
body.role-client .gx-auto-title:not(.gx-auto):not(.gx-auto *){position:relative;margin-left:calc(-1 * var(--gx-shift, 0px))!important;padding-top:10px}
body.role-client .gx-auto .page-sub,body.role-client .gx-auto-sub{font-size:14px!important;margin-top:8px!important;line-height:1.45}
body.role-client .gx-auto .btn{background:var(--hero-line);color:var(--hero-fg);border:1px solid var(--hero-edge)}
body.role-client .gx-auto .btn:hover{border-color:var(--hero-fg)}
body.role-client .gx-auto .btn-accent,body.role-client .gx-auto .btn-primary{background:var(--hero-btn);color:var(--hero-btn-fg);border-color:transparent}
body.role-client .gx-auto .badge{background:var(--hero-line)!important;color:var(--hero-fg)!important}
body.role-client .gx-auto a{color:var(--hero-fg)!important}

/* Focus: a ring for keyboard focus only, never a box after a click. */
body.role-client button:focus:not(:focus-visible),body.role-client a:focus:not(:focus-visible),
body.role-client [onclick]:focus:not(:focus-visible),body.role-client [tabindex]:focus:not(:focus-visible){outline:none!important}
/* The rings below apply only while html.gx-ptr is absent (keyboard in use):
   as ID-level !important rules they otherwise beat the html.gx-ptr kill and
   drew the box after a click whenever a render moved focus by script. */
html:not(.gx-ptr) body.role-client .ctab:focus-visible{outline:2px solid currentColor!important;outline-offset:-3px;border-radius:10px}
/* Underline tabs: the active state is the underline and nothing else. The
   strips scroll sideways (overflow-x:auto), which clipped a focus ring drawn
   outside the button to its two vertical edges: the "two white lines" beside
   the active label. The keyboard ring now sits inside the button. */
body.role-client .container-subtabs .ctab-sub,body.role-client #fv-profiling-tabs button{border-top:0!important;border-left:0!important;border-right:0!important;box-shadow:none!important;outline:none}
html:not(.gx-ptr) body.role-client .container-subtabs .ctab-sub:focus-visible,html:not(.gx-ptr) body.role-client #fv-profiling-tabs button:focus-visible{outline:2px solid currentColor!important;outline-offset:-2px;border-radius:6px 6px 0 0}

/* ── Headline figures in the band (every Profile tab, Achievements) ──
   The tab's own score card is MOVED into .gx-figs by gxHeroFigures(); here it
   loses its card chrome, its tokens are re-pointed to the band's so every
   inline var(--text*)/var(--accent) reads on the dark field, the lead figure
   stays big on the left and the secondary figures become glass tiles. */
body.role-client .gx-figs{--text:var(--hero-fg);--text2:var(--hero-fg2);--text3:var(--hero-fg2);--accent:var(--hero-fg);--accent2:#F0837E;
 --good:#B8F0C8;--warn:#FFE0A8;--bad:#F0B3B1;--surface:transparent;--surface2:var(--hero-line);--border:var(--hero-edge);--border2:var(--hero-edge);
 color:var(--hero-fg);flex:1 1 100%;min-width:0}
body.role-client .gx-figs:empty{display:none}
body.role-client .gx-figs [style*="#f5a623"],body.role-client .gx-figs [style*="#e8930c"],body.role-client .gx-figs [style*="#e8830c"]{color:#FFE0A8!important;border-color:#FFE0A8!important}
body.role-client .gx-figs [style*="background:#f5a623"],body.role-client .gx-figs [style*="background:#e8930c"],body.role-client .gx-figs [style*="background:#e8830c"]{color:#3a2600!important}
body.role-client .gx-figs:not(.gx-figs-next) > .card{background:transparent!important;border:0!important;box-shadow:none!important;padding:0!important;margin:0!important;border-radius:0!important}
body.role-client .gx-figs:not(.gx-figs-next) > .card > div{display:flex;flex-wrap:wrap;align-items:stretch;gap:10px!important}
body.role-client .gx-figs:not(.gx-figs-next) > .card > div > div:first-child{flex:1 1 100%!important;padding:4px 0 6px}
body.role-client .gx-figs:not(.gx-figs-next) > .card > div > div:first-child > div:nth-child(2){font-size:72px!important;line-height:.9!important;font-weight:800!important}
body.role-client .gx-figs:not(.gx-figs-next) > .card > div > div + div{flex:1 1 130px!important;min-width:0!important;background:var(--hero-line);border:1px solid var(--hero-edge);border-radius:16px;padding:12px 13px!important}
body.role-client .gx-figs:not(.gx-figs-next) > .card [style*="text-transform:uppercase"][style*="letter-spacing"]{font:700 11px 'Barlow Semi Condensed',sans-serif!important;letter-spacing:.18em!important;color:var(--hero-fg2)!important}
@media(min-width:769px){
 body.role-client [data-gx-band]{flex-wrap:wrap}
 body.role-client .gx-figs:not(.gx-figs-next) > .card > div{flex-wrap:nowrap}
 body.role-client .gx-figs:not(.gx-figs-next) > .card > div > div:first-child{flex:0 0 auto!important;min-width:240px;margin-right:14px}
 body.role-client .gx-figs:not(.gx-figs-next) > .card > div > div + div{flex:1 1 0!important}
}
/* Summary: the verdict leads, the three corners are the tiles. */
body.role-client .gx-figs-sum .gx-figs-lead{border-top:0!important;margin-top:4px!important;padding:0 0 14px!important}
body.role-client .gx-figs-sum .gx-figs-lead > div:first-child{background:var(--hero-line)!important;border-color:var(--hero-edge)!important}
body.role-client .gx-figs-sum .gx-figs-tiles{padding:0!important}
body.role-client .gx-figs-sum .gx-figs-tiles > div{background:var(--hero-line)!important;border-color:var(--hero-edge)!important;border-radius:16px!important}
/* Achievements: the Next up card as a glass panel. */
body.role-client .gx-figs-next{flex:1 1 100%;margin-top:16px}
body.role-client .gx-figs-next > .card{background:var(--hero-line)!important;border:1px solid var(--hero-edge)!important;border-left:3px solid var(--hero-fg)!important;box-shadow:none!important;border-radius:18px;padding:16px 18px!important}
body.role-client .gx-figs-next .btn-accent{background:var(--hero-btn)!important;color:var(--hero-btn-fg)!important}
@media(min-width:769px){ body.role-client .gx-figs-next{flex:0 1 420px;margin-top:0;align-self:flex-end} }
/* Band figures: words are never lead-sized (see gxHeroFigures). Tile values
   cap at tile size, and a word left in the lead (no number to hand it to)
   drops to the same size. */
body.role-client .gx-figs:not(.gx-figs-next) > .card > div > div + div > div:nth-child(2){font-size:30px!important;line-height:1.05!important}
body.role-client .gx-figs.gx-figs-word > .card > div > div:first-child > div:nth-child(2),
body.role-client .gx-figs > .card.gx-figs-word > div > div:first-child > div:nth-child(2){font-size:40px!important;line-height:1!important}
/* The lead stays as compact as Force's: a long caption under the number
   (Conditioning's "Aerobic capacity, normalised...") wraps instead of
   stretching the lead and pushing the tiles to the far right. */
@media(min-width:769px){ body.role-client .gx-figs:not(.gx-figs-next) > .card > div > div:first-child{max-width:300px!important} }
/* Summary band lead: the member's direction (moved from the Your block card). */
body.role-client .gx-figs-dir{flex:1 1 100%;margin:4px 0 16px;max-width:62ch}
body.role-client .gx-figs-dir > div:first-child{font:700 11px 'Barlow Semi Condensed',sans-serif!important;letter-spacing:.18em!important;color:var(--hero-fg2)!important}
body.role-client .gx-figs-dir > div:nth-child(2){font-size:48px!important;line-height:.95!important;font-weight:800!important;text-transform:uppercase;color:var(--hero-fg)!important;margin-top:6px!important}
body.role-client .gx-figs-dir > div:nth-child(3){font-size:15px!important;color:var(--hero-fg2)!important;margin-top:8px!important;line-height:1.45}
@media(max-width:768px){ body.role-client .gx-figs-dir > div:nth-child(2){font-size:38px!important} }
/* Self Hub Program: the recommended protocol card sits in the band (like Up
   next on Achievements) as a glass panel. Its name is a word, so it is set at
   word size, not lead size; the buttons take the band's button colours. */
body.role-client .gx-sp-hero{flex:1 1 100%;min-width:0;margin-top:16px}
body.role-client .gx-sp-hero:empty{display:none}
body.role-client .gx-sp-hero .gp-hero{background:var(--hero-line);border:1px solid var(--hero-edge);border-left:3px solid var(--hero-fg);color:var(--hero-fg);border-radius:18px;box-shadow:none;grid-template-columns:1fr 200px}
body.role-client .gx-sp-hero .gp-hero-l{padding:16px 18px 16px}
body.role-client .gx-sp-hero .gp-hero-k{font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.18em;color:var(--hero-fg2);opacity:1}
body.role-client .gx-sp-hero .gp-hero-h{font-size:30px;line-height:1;margin:6px 0 6px}
body.role-client .gx-sp-hero .gp-hero-p{color:var(--hero-fg2);opacity:1;font-size:14px}
body.role-client .gx-sp-hero .gp-hero-why span{background:var(--hero-line);color:var(--hero-fg)}
body.role-client .gx-sp-hero .gp-hero-cta{margin-top:14px}
body.role-client .gx-sp-hero .gp-hero-r{border-left:1px solid var(--hero-edge);background:transparent}
body.role-client .gx-sp-hero .gp-b-solid{background:var(--hero-btn);color:var(--hero-btn-fg)}
body.role-client .gx-sp-hero .gp-b-line{border-color:var(--hero-edge);color:var(--hero-fg)}
@media(max-width:720px){ body.role-client .gx-sp-hero .gp-hero{grid-template-columns:1fr} }
/* Coaching inbox list: two or three columns on a laptop, ONE on a phone, so
   no column hides past the screen edge. */
.ci-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:8px}
.ci-grid > *{min-width:0}
@media(max-width:600px){ .ci-grid{grid-template-columns:minmax(0,1fr)} }
/* Member's Room: the Speed Sessions card sits in the band as a glass panel
   (same treatment as Self Hub's recommended card and Up next). */
body.role-client .gx-ss-slot{flex:1 1 100%;min-width:0;margin-top:6px}
body.role-client .gx-ss-slot:empty{display:none}
body.role-client .gx-ss-slot .ss-band{background:var(--hero-line);border:1px solid var(--hero-edge);border-left:3px solid var(--hero-fg);color:var(--hero-fg);border-radius:18px;margin-bottom:0!important;padding:16px 18px}
body.role-client .gx-ss-slot .ss-band::after{display:none}
body.role-client .gx-ss-slot .ss-kick{opacity:1;color:var(--hero-fg2)}
body.role-client .gx-ss-slot .ss-meta{opacity:1;color:var(--hero-fg2)}
body.role-client .gx-ss-slot .btn-accent{background:var(--hero-btn)!important;color:var(--hero-btn-fg)!important;border-color:transparent!important}
.gx-ss-slot:empty{display:none}
/* On a phone the header's LAST child is the wrapping button row (the
   .page-header>div:last-child rule). The slot now sits after the buttons, so
   the row is named and keeps its wrap, and the slot stays a plain block. */
@media(max-width:768px){
 .page-header>.gx-hdr-btns{display:flex;flex-wrap:wrap;gap:6px;width:100%}
 .page-header>.gx-ss-slot{display:block;width:100%}
}
/* Summary, Your profiles (2026-09-30): one card per profile tab, number big,
   word small, the limiter's card on an amber edge. Two across on a phone,
   four on a laptop. Theme tokens only, so all six themes follow. */
.ps-pk{font-size:10.5px;letter-spacing:1.3px;text-transform:uppercase;color:var(--text3);font-weight:700;margin:4px 2px 0}
.ps-pg{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:10px 0 20px}
@media(min-width:900px){ .ps-pg{grid-template-columns:repeat(4,minmax(0,1fr))} }
.ps-pc{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:stretch;text-align:left;min-width:0;font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:20px;padding:17px 15px 12px;cursor:pointer;box-shadow:var(--elev-1,none)}
/* Option B (Dries 2026-10-12): a coloured top edge, a score ring, the limiter in its warning colour. */
.ps-pc::before{content:'';position:absolute;left:0;right:0;top:0;height:5px;background:var(--accent);opacity:.85}
.ps-pc:hover{border-color:var(--border2,var(--border))}
.ps-pc.lim{border-color:var(--warn)}
.ps-pc.lim::before{background:var(--warn);opacity:1}
.ps-pc-t{display:flex;justify-content:space-between;align-items:center;gap:6px}
.ps-pc-t b{font-size:15px;font-weight:700}
.ps-pc-t i{font-style:normal;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--text2);background:var(--surface2);border-radius:99px;padding:3px 8px;white-space:nowrap}
.ps-pc.lim .ps-pc-t i{background:var(--warn-tint);color:var(--warn)}
.ps-pc-fig{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:12px}
.ps-pc-ring{position:relative;width:70px;height:70px;flex:0 0 70px}
.ps-pc-ring svg{display:block;width:70px;height:70px}
.ps-pc-ring .trk{stroke:var(--surface2)}
.ps-pc-ring .val{stroke:var(--accent)}
.ps-pc-rv{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:.9}
.ps-pc-rv b{font-family:'Barlow Condensed',sans-serif;font-size:25px;font-weight:800;font-variant-numeric:tabular-nums}
.ps-pc-rv small{font-size:10px;color:var(--text3);margin-top:2px}
.ps-pc-badge{width:70px;height:70px;flex:0 0 70px;border-radius:50%;display:flex;align-items:center;justify-content:center;text-align:center;padding:6px;background:var(--warn-tint);color:var(--warn);font-family:'Barlow Condensed',sans-serif;font-size:12.5px;font-weight:800;line-height:1.05;text-transform:uppercase}
.ps-pc-badge.ok{background:var(--surface2);color:var(--text)}
.ps-pc-c{flex:1 1 100%;font-family:'Barlow Condensed',sans-serif;font-size:17px;font-weight:700;color:var(--text);min-width:0;line-height:1.1}
.ps-pc.lim .ps-pc-c{color:var(--warn)}
.ps-pc-na{font-size:15px;font-weight:600;color:var(--text3);margin-top:14px}
.ps-pc-wl{font-size:12px;line-height:1.4;color:var(--text2);margin-top:10px;overflow-wrap:anywhere}
.ps-pc-wl b{color:var(--text);font-weight:700}
.ps-pc-ft{display:flex;justify-content:space-between;align-items:center;font-size:11.5px;color:var(--text3);margin-top:auto;padding-top:10px}
.ps-pc-ft span:last-child{font-weight:700;color:var(--accent)}
/* Summary, Next test + the eight directions folded under it. */
.ps-block-card{position:relative;overflow:hidden}
.ps-block-card::before{content:'';position:absolute;left:0;right:0;top:0;height:5px;background:var(--accent);opacity:.85}
.ps-next{font-size:10.5px;letter-spacing:1.3px;text-transform:uppercase;color:var(--text3);font-weight:700;margin-top:16px;padding-top:14px;border-top:1px solid var(--border)}
.ps-block-card > .ps-next:first-child{margin-top:0;padding-top:0;border-top:0}
.ps-dirs{margin-top:14px;padding-top:12px;border-top:1px solid var(--border)}
.ps-dirs > summary{list-style:none;display:flex;justify-content:space-between;align-items:center;gap:10px;cursor:pointer;font-size:13.5px;font-weight:700;color:var(--text)}
.ps-dirs > summary::-webkit-details-marker{display:none}
.ps-dirs-now{font-size:12px;font-weight:600;color:var(--text3)}
.ps-dirs[open] .ps-dirs-now{visibility:hidden}
/* Summary, Your eight directions: fixed small cells on a laptop, full width on a phone. */
@media(max-width:600px){ .ps-dirgrid{grid-template-columns:minmax(100px,1.3fr) 1fr 1fr!important} }
/* A pointer was used last (html.gx-ptr, set in ui.js): no focus box anywhere,
   including focus a render moves by script. Keyboard use clears the class. */
html.gx-ptr :focus{outline:none!important}
html.gx-ptr .ctab:focus,html.gx-ptr .ctab-sub:focus,html.gx-ptr #fv-profiling-tabs button:focus{box-shadow:none!important}
/* Summary: the weakest-link verdict now sits in the white ARC card, where its
   inline amber label (#f5a623) read 2.03:1. On the light themes it takes the
   theme's own --warn; inside the band the .gx-figs rule above still applies. */
:root.theme-master body.role-client .gx-figs-lead:not(.gx-figs *) [style*="color:#f5a623"],
:root.theme-dries-light body.role-client .gx-figs-lead:not(.gx-figs *) [style*="color:#f5a623"],
:root.theme-agathe-light body.role-client .gx-figs-lead:not(.gx-figs *) [style*="color:#f5a623"]{color:var(--warn)!important}
/* ── end MEMBER UI v2 ── */

/* ── COACH UI v2 (2026-09-29) ────────────────────────────────────────────
   Coach workspace in the same language as the member app: one hero band per
   screen in the coach's colour (--hero-* tokens, all four coach themes), the
   cards below keep every detail. Markup inside the heroes is the app's own;
   this block only styles it. Scoped to body.role-coach. */
body.role-coach .cuv-hero{position:relative;overflow:hidden;color:var(--hero-fg);padding:26px 28px 24px;border-radius:24px;margin-bottom:18px;
 background:radial-gradient(120% 90% at 90% -20%,var(--hero-glow),transparent 60%),linear-gradient(160deg,var(--hero-a) 0%,var(--hero-b) 100%);
 box-shadow:0 20px 40px -26px var(--hero-shadow)}
body.role-coach .cuv-hero::before{content:"";position:absolute;inset:0;pointer-events:none;
 background-image:linear-gradient(var(--hero-grid) 1px,transparent 1px),linear-gradient(90deg,var(--hero-grid) 1px,transparent 1px);background-size:32px 32px;
 -webkit-mask-image:linear-gradient(180deg,#000,transparent 85%);mask-image:linear-gradient(180deg,#000,transparent 85%)}
body.role-coach .cuv-hero>*{position:relative}
body.role-coach .cuv-eye{display:block;font:700 11px/1.3 'Barlow Semi Condensed',sans-serif;letter-spacing:.18em;text-transform:uppercase;color:var(--hero-fg2)}
body.role-coach .cuv-mega{font:800 46px/.95 'Barlow Condensed',sans-serif;text-transform:uppercase;letter-spacing:.005em;margin-top:6px;color:var(--hero-fg)}
body.role-coach .cuv-hstats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:20px}
body.role-coach .cuv-glass{background:var(--hero-line);border:1px solid var(--hero-edge);border-radius:18px;padding:14px 16px;display:flex;flex-direction:column;gap:6px;min-width:0}
body.role-coach .cuv-hfig{display:block}
body.role-coach .cuv-gnum{font:800 44px/1 'Barlow Condensed',sans-serif;font-variant-numeric:tabular-nums;
 background:linear-gradient(100deg,var(--hero-num-a),var(--hero-num-b));-webkit-background-clip:text;background-clip:text;color:transparent}
body.role-coach .cuv-hs{font-size:14px;font-weight:600;color:var(--hero-fg2)}
body.role-coach .cuv-hs2{font-size:13px;color:var(--hero-fg2)}
body.role-coach .cuv-hs2 b{color:var(--hero-fg)}
/* Athlete workspace: the existing header + tab strip, restyled inside the hero. */
body.role-coach .cuv-hero-ath .caw-ahs{border:0;padding:0;margin:0 0 16px;gap:14px}
body.role-coach .cuv-hero-ath .caw-ahs-name{font-size:48px;color:var(--hero-fg)}
body.role-coach .cuv-hero-ath .caw-ahs-tier{background:var(--hero-btn);color:var(--hero-btn-fg);font-size:11px;padding:5px 10px;border-radius:7px}
body.role-coach .cuv-hero-ath .caw-ahs-meta{flex-basis:100%;font-size:14px;color:var(--hero-fg2)}
body.role-coach .cuv-hero-ath .caw-ahs-eng{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;font-size:13px;color:var(--hero-fg2)}
body.role-coach .cuv-hero-ath .caw-ahs-eng-sep{display:none}
body.role-coach .cuv-hero-ath .caw-ahs-eng>span:not(.caw-ahs-eng-sep){display:flex;flex-direction:column;align-items:flex-start;gap:6px;background:var(--hero-line);border:1px solid var(--hero-edge);border-radius:18px;padding:12px 14px}
body.role-coach .cuv-hero-ath .caw-ahs-eng-k,body.role-coach .cuv-hero-ath .caw-ahs-cs .caw-ahs-eng-k{font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.18em;text-transform:uppercase;color:var(--hero-fg2)}
body.role-coach .cuv-hero-ath .caw-ahs-eng strong,body.role-coach .cuv-hero-ath .caw-ahs-eng strong.cleared,body.role-coach .cuv-hero-ath .caw-ahs-eng strong.watch,body.role-coach .cuv-hero-ath .caw-ahs-eng strong.caw-ahs-unread{font:800 32px/1 'Barlow Condensed',sans-serif;color:var(--hero-fg)}
body.role-coach .cuv-hero-ath .caw-ahs-cs{color:var(--hero-fg2);font-size:13px}
body.role-coach .cuv-hero-ath .caw-ahs-cs strong{color:var(--hero-fg)}
body.role-coach .cuv-hero-ath .caw-ahs-cs .caw-ahs-cs-btn{min-height:40px;border-radius:12px;border:1px solid var(--hero-edge);background:var(--hero-line);color:var(--hero-fg)}
body.role-coach .cuv-hero-ath .caw-ahs-cs .caw-ahs-cs-btn:hover{border-color:var(--hero-fg);color:var(--hero-fg)}
body.role-coach .cuv-hero-ath .caw-tabs{width:100%;margin:0;background:var(--hero-line);border:0;border-radius:14px}
body.role-coach .cuv-hero-ath .caw-tab{min-height:40px;border-radius:10px;color:var(--hero-fg2)}
body.role-coach .cuv-hero-ath .caw-tab:hover{color:var(--hero-fg)}
body.role-coach .cuv-hero-ath .caw-tab.active{background:var(--hero-btn);color:var(--hero-btn-fg)}
/* Roster: one pill strip that never cuts off, rows as cards. */
body.role-coach #users-tabs{border-radius:14px;max-width:100%;overflow-x:auto;flex-wrap:nowrap;scrollbar-width:none}
body.role-coach #users-tabs::-webkit-scrollbar{display:none}
body.role-coach #users-tabs button{flex:0 0 auto;min-height:38px;white-space:nowrap;border-radius:10px!important}
body.role-coach .users-row{border-radius:16px!important;padding:12px 14px!important;box-shadow:var(--elev-1)}
body.role-coach .users-row-avatar{width:40px!important;height:40px!important}
body.role-coach .caw-pane{border-radius:20px}
/* Every other coach view (Plan, templates, meals, check-in editor, library,
   Member's Room, settings, screening hub) shares .page-header: it becomes the
   same hero band. The Athletes view is excluded, it has the athlete hero. */
body.role-coach .page-header{position:relative;overflow:hidden;color:var(--hero-fg);padding:24px 26px;border-radius:24px;align-items:center;margin-bottom:18px;
 background:radial-gradient(120% 90% at 90% -20%,var(--hero-glow),transparent 60%),linear-gradient(160deg,var(--hero-a) 0%,var(--hero-b) 100%);
 box-shadow:0 20px 40px -26px var(--hero-shadow)}
body.role-coach .page-header::before{content:"";position:absolute;inset:0;pointer-events:none;
 background-image:linear-gradient(var(--hero-grid) 1px,transparent 1px),linear-gradient(90deg,var(--hero-grid) 1px,transparent 1px);background-size:32px 32px;
 -webkit-mask-image:linear-gradient(180deg,#000,transparent 85%);mask-image:linear-gradient(180deg,#000,transparent 85%)}
body.role-coach .page-header>*{position:relative}
body.role-coach .page-header .page-title{color:var(--hero-fg);font-size:40px}
body.role-coach .page-header .page-sub{color:var(--hero-fg2);font-size:14px}
body.role-coach .page-header .btn{background:var(--hero-line);color:var(--hero-fg);border:1px solid var(--hero-edge)}
body.role-coach .page-header .btn:hover{border-color:var(--hero-fg)}
body.role-coach .page-header .btn-accent,body.role-coach .page-header .btn-primary{background:var(--hero-btn);color:var(--hero-btn-fg);border-color:transparent}
body.role-coach .page-header #builder-autosave-badge{color:var(--hero-fg)!important}
/* The view's tab strip (Plan, Library) sat on cream above the band and read as
   detached. Pull the band up behind it so the tabs live inside the hero:
   the header rises by the strip's 40px, the strip is inset 24/26px on top of it.
   The strip stays one row (scrolls inside itself) so the offsets hold. */
body.role-coach .view:has(.page-header) > .container-tabs{position:relative;z-index:2;top:24px;margin:0 26px 0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;
 background:var(--hero-line);border:0;border-radius:14px;max-width:calc(100% - 52px)}
body.role-coach .view:has(.page-header) > .container-tabs::-webkit-scrollbar{display:none}
body.role-coach .view:has(.page-header) > .container-tabs .ctab{flex:0 0 auto;color:var(--hero-fg2);border-radius:10px;white-space:nowrap}
body.role-coach .view:has(.page-header) > .container-tabs .ctab:hover{color:var(--hero-fg)}
body.role-coach .view:has(.page-header) > .container-tabs .ctab.active{background:var(--hero-btn);color:var(--hero-btn-fg)}
body.role-coach .view:has(> .container-tabs) .page-header{margin-top:-40px;padding-top:82px}
/* Click focus drew a box round rail icons and tabs; keyboard focus keeps its ring. */
body.role-coach :focus:not(:focus-visible){outline:none}
body.role-coach #view-athletes .page-header{background:none;box-shadow:none;padding:0;border-radius:0;color:inherit;overflow:visible}
body.role-coach #view-athletes .page-header::before{display:none}
body.role-coach #view-athletes .page-header .page-title{color:var(--text);font-size:34px}
body.role-coach #view-athletes .page-header .page-sub{color:var(--text2);font-size:13px}
body.role-coach #view-athletes .page-header .btn{background:var(--surface2);color:var(--text);border-color:var(--border)}
body.role-coach #view-athletes .page-header .btn-accent,body.role-coach #view-athletes .page-header .btn-primary{background:var(--accent);color:var(--btn-text);border-color:transparent}
@media(max-width:768px){
 body.role-coach .page-header{padding:20px 18px;border-radius:20px}
 body.role-coach .page-header .page-title{font-size:30px}
 /* Coach Today on a phone: the pane that holds pulse, training, billing and
    inbox was hidden in today mode, so a phone only ever showed the roster. */
 body.role-coach #view-athletes[data-mode="today"] .caw-pane{display:block;position:static;margin-top:16px;min-height:0}
 /* v3 (2026-09-30): the day comes before the roster on a phone. Grid order
    only; the roster and its filters are unchanged, right below. */
 body.role-coach #view-athletes[data-mode="today"] .caw-pane{order:-1;margin-top:0;margin-bottom:16px}
 /* 2026-10-02 (Dries): on a phone the athletes sit right under the greeting,
    above the check-in pulse, coaching requests and inbox, instead of last.
    The Today pane and its embedded dashboard are flattened (display:contents)
    so their sections and the roster become siblings that can be ordered.
    Phone + today mode only; desktop and the athlete view are untouched. */
 body.role-coach #view-athletes[data-mode="today"] .caw-workspace{display:flex!important;flex-direction:column;align-items:stretch!important;gap:14px!important}
 body.role-coach #view-athletes[data-mode="today"] .caw-workspace > .caw-roster,
 body.role-coach #view-athletes[data-mode="today"] #caw-empty #dashboard-content > *{width:100%;box-sizing:border-box}
 body.role-coach #view-athletes[data-mode="today"] .caw-pane,
 body.role-coach #view-athletes[data-mode="today"] #caw-empty,
 body.role-coach #view-athletes[data-mode="today"] #caw-empty > .caw-embed.view,
 body.role-coach #view-athletes[data-mode="today"] #caw-empty #dashboard-content{display:contents!important}
 body.role-coach #view-athletes[data-mode="today"] #cuv-hero-today{order:1}
 body.role-coach #view-athletes[data-mode="today"] #error-log-panel{order:2}
 body.role-coach #view-athletes[data-mode="today"] .caw-roster{order:3}
 body.role-coach #view-athletes[data-mode="today"] #coach-checkin-pulse{order:4}
 body.role-coach #view-athletes[data-mode="today"] #dashboard-content > .card{order:5}
 body.role-coach #view-athletes[data-mode="today"] #coaching-inbox-content{order:6}
 body.role-coach #view-athletes[data-mode="today"] #bl-coach-today{order:7}
 body.role-coach .cuv-hero{padding:22px 18px 20px;border-radius:20px}
 body.role-coach .cuv-mega{font-size:36px}
 body.role-coach .cuv-hstats{grid-template-columns:minmax(0,1fr)}
 body.role-coach .cuv-gnum{font-size:38px}
 body.role-coach .cuv-hero-ath .caw-ahs-name{font-size:36px}
 body.role-coach .cuv-hero-ath .caw-ahs-eng{grid-template-columns:repeat(2,minmax(0,1fr))}
 body.role-coach .cuv-hero-ath .caw-tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
 body.role-coach .cuv-hero-ath .caw-tab{flex:0 0 auto}
 /* The check-in pulse table is wider than a phone: it scrolls inside its card. */
 body.role-coach .dcp-table{overflow-x:auto;-webkit-overflow-scrolling:touch}
 body.role-coach .dcp-table>div{min-width:560px}
}
/* Contrast on the two lighter coach fields (#0D6C90, #8A5A34): a white glass
   track lifted the ground under the inactive tab labels to 3.72 / 3.66:1.
   The glass darkens the field instead, as on member screens (>= 4.5:1). */
:root.theme-dries-light body.role-coach,:root.theme-agathe-light body.role-coach{--hero-line:rgba(0,0,0,.18)}
/* ── end COACH UI v2 ── */

/* ── COACH UI v3 · Today (2026-09-30, visual only) ──────────────────────────
   Same sections, same renderers, same buttons. Only the order and placement
   on the page change: check-in pulse and training overview sit side by side
   straight after the greeting (2026-10-02, Dries: daily check-in above the
   inbox), the coaching inbox comes next, and the three billing cards share
   one row. Grid order, no markup change. */
body.role-coach #dashboard-content{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:14px;align-items:start}
body.role-coach #dashboard-content > *{grid-column:1/-1;margin:0!important;min-width:0}
body.role-coach #dashboard-content > #cuv-hero-today{order:1}
body.role-coach #dashboard-content > #error-log-panel{order:2}
body.role-coach #dashboard-content > #error-log-panel:empty{display:none}
body.role-coach #dashboard-content > #coaching-inbox-content{order:4}
body.role-coach #dashboard-content > #coach-checkin-pulse{order:3;grid-column:1}
body.role-coach #dashboard-content > .card{order:3;grid-column:2}
body.role-coach #dashboard-content:not(:has(> .card)) > #coach-checkin-pulse{grid-column:1/-1}
body.role-coach #dashboard-content > #bl-coach-today{order:6}
body.role-coach #dashboard-content #coaching-inbox-content > .card{margin-bottom:0!important}
body.role-coach #dashboard-content #coach-checkin-pulse > .card{margin:0!important}
/* Training overview beside the pulse: one athlete per row, not a tile grid. */
body.role-coach #dashboard-content > .card > div[style*="grid-template-columns"]{grid-template-columns:minmax(0,1fr)!important}
/* Billing: the three cards in one row. */
body.role-coach #bl-coach-today{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px;align-items:start}
body.role-coach #bl-coach-today > .bl-card{margin:0!important}
body.role-coach #bl-coach-today .bl-row{display:flex;flex-wrap:wrap;align-items:center;row-gap:10px}
body.role-coach #bl-coach-today .bl-row-l{flex:1 1 150px;min-width:0}
body.role-coach #bl-coach-today .bl-row-r{margin-left:auto;display:flex;align-items:center;gap:10px}
@media(max-width:900px){
 body.role-coach #dashboard-content{grid-template-columns:minmax(0,1fr)}
 body.role-coach #dashboard-content > #coach-checkin-pulse,
 body.role-coach #dashboard-content > .card{grid-column:1/-1}
}
/* ── end COACH UI v3 · Today ── */

/* ── COACH UI v3 · Templates + Library (2026-09-30, visual only) ─────────────
   Program and meal template rows: the same buttons, but Assign is the one
   filled action, the others are quiet, and the delete x sits apart so it is
   never right next to Assign. */
body.role-coach .template-card .btn-ghost{background:transparent;border-color:transparent;color:var(--text2)}
body.role-coach .template-card .btn-ghost:hover{border-color:var(--border);color:var(--text)}
body.role-coach .template-card .btn-accent{margin-left:6px}
body.role-coach .template-card .btn-danger{margin-left:12px}
/* Exercise library: a missing card is said by its "no card" chip; the red
   frame round every such row made the list read as an error page. */
body.role-coach .ls-item.ls-gap{border-color:var(--border)}
/* ── end COACH UI v3 · Templates + Library ── */

/* ── COACH UI v3 · Athlete page (2026-09-30, visual only) ────────────────────
   Band tiles: a number leads at number size; a word (Done, Pending, Off,
   1h ago) is set at word size. Sessions is always the first tile; the unread
   tile carries no label span, so it keeps number size too. */
body.role-coach .cuv-hero-ath .caw-ahs-eng > span:not(:first-child):has(> .caw-ahs-eng-k) > strong{font-size:20px!important;line-height:1.15!important;margin-top:6px}
body.role-coach .cuv-hero-ath .caw-ahs-eng{align-items:stretch}
/* Tabs: same tabs, same order. The weekly ones (Health, Training, Nutrition,
   Messages) read at full strength; Performance and Self (every 12 weeks)
   and the setup tabs (Settings, Billing) are quieter, with a divider before
   setup. The active tab is always full strength. */
body.role-coach .caw-tab[data-caw-tab="performance"]:not(.active),
body.role-coach .caw-tab[data-caw-tab="self"]:not(.active),
body.role-coach .caw-tab[data-caw-tab="settings"]:not(.active),
body.role-coach .caw-tab[data-caw-tab="billing"]:not(.active){font-weight:500;opacity:.78}
body.role-coach .caw-tab[data-caw-tab="health"]:not(.active),
body.role-coach .caw-tab[data-caw-tab="training"]:not(.active),
body.role-coach .caw-tab[data-caw-tab="nutrition"]:not(.active),
body.role-coach .caw-tab[data-caw-tab="messages"]:not(.active){color:var(--hero-fg)!important;font-weight:700}
body.role-coach .cuv-hero-ath .caw-tab[data-caw-tab="settings"]{margin-left:12px;position:relative}
body.role-coach .cuv-hero-ath .caw-tab[data-caw-tab="settings"]::before{content:"";position:absolute;left:-7px;top:9px;bottom:9px;width:1px;background:var(--hero-edge)}
/* Action queue: a coloured edge says which kind each row is. */
body.role-coach .caw-action-row{box-shadow:inset 3px 0 0 var(--accent);border-radius:12px;min-height:44px;background:var(--surface)}
body.role-coach .caw-action-row.caw-action-priority{box-shadow:inset 3px 0 0 var(--bad);background:var(--surface)}
body.role-coach .caw-action-row.caw-action-watch{box-shadow:inset 3px 0 0 var(--warn);background:var(--surface)}
/* ── end COACH UI v3 · Athlete page ── */

/* ── COACH UI v3 · Training set rows (2026-09-30, visual only) ──
   Coach logging only (its RPE/note panels carry cl-opt- ids). Same fields,
   same pencil toggle, same order in the DOM: when the card is wide, the
   RPE + Note panel sits beside its set instead of under it, and load/reps
   stop stretching across the whole card. Phone width keeps the stack. */
body.role-coach .client-ex-card:has(> .log-section > [id^="cl-opt-"]){container-type:inline-size}
@container (min-width:620px){
 body.role-coach .log-section:has(> [id^="cl-opt-"]){display:grid;grid-template-columns:minmax(0,400px) minmax(0,1fr);column-gap:14px;align-items:end}
 body.role-coach .log-section:has(> [id^="cl-opt-"]) > *{grid-column:1/-1}
 body.role-coach .log-section:has(> [id^="cl-opt-"]) > .set-row{grid-column:1}
 body.role-coach .log-section:has(> [id^="cl-opt-"]) > .set-optional-fields{grid-column:2;flex-wrap:nowrap;padding:7px 0;border-bottom:1px solid var(--border)}
}
/* ── end COACH UI v3 · Training set rows ── */

/* ── COACH UI v3 · Everything fits (2026-09-30, visual only) ──
   Nothing may hide off the side of its card. Each rule below replaced a
   strip that scrolled or clipped sideways with one that fits the width. */
/* Check-in pulse: a narrow card (the laptop Today column, any phone) gives
   each athlete two lines: name + today / avg / flags, then the full 14-day
   strip. Same cells, same clicks. The strip header hides because the
   "Last 14 days" line above already names it. */
body.role-coach .card:has(> .dcp-table){container-type:inline-size}
@container (max-width:620px){
 body.role-coach .dcp-table{overflow-x:visible}
 body.role-coach .dcp-table>div{min-width:0!important;flex-wrap:wrap;row-gap:6px;column-gap:10px!important}
 body.role-coach .dcp-table>div>div:nth-child(1){flex:1 1 0;min-width:0!important}
 body.role-coach .dcp-table>div>div:nth-child(2){order:9;flex:1 0 100%!important}
 body.role-coach .dcp-table>div:first-child>div:nth-child(2){display:none}
 body.role-coach .dcp-table>div>div:nth-child(n+3){min-width:40px!important}
 body.role-coach .card:has(> .dcp-table) div:has(> button[onclick^="_dcpSetMetric"]){width:100%;box-sizing:border-box}
 body.role-coach .card:has(> .dcp-table) button[onclick^="_dcpSetMetric"]{flex:1 1 auto;min-width:0;padding:6px 4px!important;letter-spacing:.2px!important}
}
@media(max-width:768px){
 /* Roster tabs and athlete tabs wrap onto a second row instead of
    running off the edge. */
 body.role-coach #users-tabs{flex-wrap:wrap;overflow-x:visible}
 body.role-coach #users-tabs button{flex:1 1 auto}
 body.role-coach .cuv-hero-ath .caw-tabs{flex-wrap:wrap;overflow-x:visible;width:100%;box-sizing:border-box}
 body.role-coach .cuv-hero-ath .caw-tab{flex:1 1 auto}
 /* Plan / Library tabs sit inside the header, so they stay one row:
    equal widths, long labels break onto two lines. */
 body.role-coach .view:has(.page-header) > .container-tabs{overflow-x:visible}
 body.role-coach .view:has(.page-header) > .container-tabs .ctab{flex:1 1 0;min-width:0;white-space:normal;justify-content:center;text-align:center;line-height:1.15;padding:6px 4px;font-size:12px}
}
/* Builder: the picked exercise name wraps instead of ending in "…". */
body.role-coach .ex-row div[style*="flex:1;min-width:0"] > div[style*="text-overflow:ellipsis"]{white-space:normal!important;overflow-wrap:anywhere}
/* Builder + meal planner: on a phone the header buttons stack, so the
   1px divider after undo/redo would be a stray line. */
@media(max-width:768px){body.role-coach .page-header div[style*="width:1px;height:24px"]{display:none}}
/* ── end COACH UI v3 · Everything fits ── */

/* ── Everything fits · shared + member (2026-09-30, visual only) ── */
/* Program overview (member + coach builder): the prescription gets its own
   line under the name, so neither is squeezed or cut at the card edge. */
.overview-ex-row{flex-wrap:wrap;row-gap:1px}
.overview-ex-vars{flex:1 0 100%;padding-left:28px;white-space:normal;box-sizing:border-box}
/* Rest timer label sizes to its words; the bar takes what is left. */
.rest-timer-label{flex:0 1 auto}
@media(max-width:600px){
 /* Week switcher: four weeks fit without sideways scroll. */
 body.role-client #client-prog-content .week-btn{min-width:40px;padding-left:6px;padding-right:6px}
 /* Rest timer: the exercise + set label gets its own line above the bar
    instead of shrinking to "BENCH PR…". */
 .rest-timer-inner{flex-wrap:wrap;row-gap:6px}
 .rest-timer-label{order:-1;flex:1 0 100%}
}
/* ── end Everything fits · shared + member ── */

/* ── COACH UI v3 · Builder fields (2026-09-30, visual only) ──
   Program Name / Block / Phase / Intent were two 3-column rows, leaving
   Intent alone in a third of a row. One grid now: a laptop reads them on
   one line, a phone gives Name and Intent the full width and puts Block
   beside Phase. Same inputs, same order, same handlers. */
body.role-coach #view-builder .card:has(#prog-name){display:grid;grid-template-columns:minmax(0,2fr) 96px minmax(0,1.3fr) minmax(0,1.7fr);gap:12px}
body.role-coach #view-builder .card:has(#prog-name) > .form-row{display:contents}
@media(max-width:900px){
 body.role-coach #view-builder .card:has(#prog-name){grid-template-columns:96px minmax(0,1fr)}
 body.role-coach #view-builder .card:has(#prog-name) .form-group:has(#prog-name),
 body.role-coach #view-builder .card:has(#prog-name) .form-group:has(#prog-intent){grid-column:1/-1}
}
/* Session name in each session header: room for a real name. */
body.role-coach #view-builder .session-header > input[placeholder="Session name"]{max-width:min(360px,100%)!important;flex:0 1 360px;min-width:0}
/* ── end COACH UI v3 · Builder fields ── */

/* ── COACH UI v3 · Member feed (2026-09-30, visual only) ──
   Glance > Feedback: the entries of one day join into one card with thin
   dividers instead of one card each. Every entry, every button (Answer in
   room / Reply / Got it) and the red edge on open items are unchanged;
   answered items keep their fade. */
body.role-coach [data-caw-feedback] > div[style*="padding:12px 14px"]{margin-bottom:0!important;border-radius:0!important;padding-top:10px!important;padding-bottom:10px!important;background:var(--surface)!important}
body.role-coach [data-caw-feedback] > div[style*="padding:12px 14px"]:has(+ div[style*="padding:12px 14px"]){border-bottom-width:0!important}
body.role-coach [data-caw-feedback] > div[style*="text-transform:uppercase"] + div[style*="padding:12px 14px"],
body.role-coach [data-caw-feedback] > div[style*="padding:12px 14px"]:first-child{border-top-left-radius:12px!important;border-top-right-radius:12px!important}
body.role-coach [data-caw-feedback] > div[style*="padding:12px 14px"]:not(:has(+ div[style*="padding:12px 14px"])){border-bottom-left-radius:12px!important;border-bottom-right-radius:12px!important}
/* ── end COACH UI v3 · Member feed ── */

/* ── COACH UI v3 · Athlete settings (2026-09-30, visual only) ──
   Card titles read as titles, so a section is findable while scrolling.
   Engagement: its five small rows become one grid, so Tier, Currency and
   Referred by stop sitting alone in half rows. Rows the tier hides
   (inline display:none) stay hidden; the JS show/hide is untouched. */
body.role-coach #athlete-settings-content div[style*="padding: 16px 18px"] > div:first-child > div[style*="text-transform:uppercase"]:first-child,
body.role-coach #athlete-settings-content div[style*="padding:16px 18px"] > div:first-child > div[style*="text-transform:uppercase"]:first-child{font:800 18px/1.15 'Barlow Condensed',sans-serif!important;letter-spacing:.04em!important;color:var(--text)!important;margin-bottom:4px!important}
body.role-coach #athlete-settings-content div:has(> .form-row #as-eng-mode){display:grid!important;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px!important;align-items:start}
body.role-coach #athlete-settings-content div:has(> .form-row #as-eng-mode) > .form-row:not([style*="display:none"]):not([style*="display: none"]){display:contents!important}
body.role-coach #athlete-settings-content div:has(> .form-row #as-eng-mode) > :not(.form-row){grid-column:1/-1}
body.role-coach #athlete-settings-content div:has(> .form-row #as-eng-mode) .form-group[style*="display: block"]{display:flex!important}
@media(max-width:600px){
 body.role-coach #athlete-settings-content div:has(> .form-row #as-eng-mode){grid-template-columns:repeat(2,minmax(0,1fr))}
}
body.role-coach #athlete-settings-content input[type=checkbox]{accent-color:var(--accent)}
/* ── end COACH UI v3 · Athlete settings ── */

/* ── COACH UI v3 · Member's Room (2026-09-30, visual only) ──
   Coach view only. A member post with no coach reply yet (no green "Coach
   answered" tag in its header, and not written by a coach) gets the same
   unanswered edge the athlete feed uses, plus a "No answer yet" tag, so a
   question is never missed. The tag is drawn by CSS; answering the post
   re-renders it with "Coach answered" and both go away on their own. */
body.role-coach .community-post:not(:has(> div:first-child span[style*="color:#22c55e"])):not(:has(> div:first-child span[style^="font-size:10px;color:var(--accent);border:1px solid var(--accent)"])){box-shadow:inset 3px 0 0 var(--accent2);border-color:color-mix(in srgb,var(--accent2) 45%,var(--border))!important}
body.role-coach .community-post:not(:has(> div:first-child span[style*="color:#22c55e"])):not(:has(> div:first-child span[style^="font-size:10px;color:var(--accent);border:1px solid var(--accent)"])) > div:first-child > div[style*="flex:1"] > div::after{content:'No answer yet';margin-left:8px;font:700 10px/1 'Barlow Semi Condensed',sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--accent2);border:1px solid color-mix(in srgb,var(--accent2) 55%,transparent);background:color-mix(in srgb,var(--accent2) 10%,transparent);border-radius:99px;padding:4px 8px}
/* ── end COACH UI v3 · Member's Room ── */

/* ── COACH UI v3 · Today by rhythm (2026-09-30) ──
   Inbox groups (coaching-inbox.js _ciGroupHead) and the 4th hero tile
   (dashboard.js Weekly review). Four tiles in a row when the hero is wide,
   two by two in between, one column on a phone (rule above). */
body.role-coach .ci-group-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin:14px 0 8px}
body.role-coach .ci-group-head:first-of-type{margin-top:4px}
body.role-coach .ci-group-t{font:800 16px/1 'Barlow Condensed',sans-serif;letter-spacing:.06em;text-transform:uppercase;color:var(--text)}
body.role-coach .ci-group-n{font:800 13px/1 'Barlow Condensed',sans-serif;border-radius:99px;padding:3px 8px}
body.role-coach .ci-group-sub{font-size:var(--fs-label);color:var(--text3)}
body.role-coach .ci-group-head::after{content:'';flex:1 1 40px;height:1px;background:var(--border);align-self:center}
body.role-coach #cuv-hero-today{container-type:inline-size}
@media(min-width:769px){
 body.role-coach #cuv-hero-today .cuv-hstats{grid-template-columns:repeat(2,minmax(0,1fr))}
 @container (min-width:720px){ body.role-coach #cuv-hero-today .cuv-hstats{grid-template-columns:repeat(4,minmax(0,1fr))} }
}
/* ── end COACH UI v3 · Today by rhythm ── */

/* ── COACH UI v3 · Settings jump strip (2026-09-30) ──
   athlete-settings.js _asetJumpBuild. Chips wrap on a laptop (never scroll
   sideways); a phone gets the single Jump to select instead. */
body.role-coach .aset-jump{position:sticky;top:0;z-index:5;margin:0 0 14px;padding:6px;background:var(--surface2);border:1px solid var(--border);border-radius:14px;box-shadow:0 6px 16px -10px rgba(0,0,0,.35)}
body.role-coach .aset-jump-chips{display:flex;flex-wrap:wrap;gap:4px}
body.role-coach .aset-jump-chip{border:0;background:transparent;border-radius:10px;padding:7px 12px;min-height:34px;font:700 13px 'Barlow Semi Condensed',sans-serif;letter-spacing:.02em;color:var(--text2);cursor:pointer}
body.role-coach .aset-jump-chip:hover{color:var(--text);background:var(--surface)}
body.role-coach .aset-jump-chip.on{background:var(--accent);color:var(--btn-text,#fff)}
body.role-coach .aset-jump-chip.dz:not(.on){color:var(--bad)}
body.role-coach .aset-jump-chip:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
body.role-coach .aset-jump-sel{display:none;align-items:center;gap:10px;padding:2px 6px}
body.role-coach .aset-jump-sel span{font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--text2);white-space:nowrap}
body.role-coach .aset-jump-sel select{flex:1;min-width:0}
body.role-coach #athlete-settings-content [data-aset-sec]{scroll-margin-top:84px}
@media(max-width:700px){
 body.role-coach .aset-jump-chips{display:none}
 body.role-coach .aset-jump-sel{display:flex}
 body.role-coach #athlete-settings-content [data-aset-sec]{scroll-margin-top:84px}
}
/* ── end COACH UI v3 · Settings jump strip ── */

/* ── COACH UI v3 · Meal planner (2026-09-30, visual only) ──
   Name and Notes get room for their text; the five day totals fill the row
   (auto-fill left empty tracks on a wide screen); on a phone Fiber takes the
   last row whole instead of sitting alone. Macro colours now come from the
   theme's --macro-* tokens (nutrition.js), so they read on light grounds. */
body.role-coach #view-meal-planner div:has(> .form-group #meal-plan-name){grid-template-columns:minmax(0,2fr) repeat(4,minmax(0,1fr)) minmax(0,2fr)!important}
body.role-coach #meal-day-content > div[style*="minmax(130px,1fr)"]{grid-template-columns:repeat(auto-fit,minmax(130px,1fr))!important}
@media(max-width:900px){
 body.role-coach #view-meal-planner div:has(> .form-group #meal-plan-name){grid-template-columns:repeat(2,minmax(0,1fr))!important}
 body.role-coach #view-meal-planner div:has(> .form-group #meal-plan-name) > .form-group:has(#meal-plan-name),
 body.role-coach #view-meal-planner div:has(> .form-group #meal-plan-name) > .form-group:has(#meal-plan-notes){grid-column:1/-1}
}
@media(max-width:600px){
 body.role-coach #meal-day-content > div[style*="minmax(130px,1fr)"]{grid-template-columns:repeat(2,minmax(0,1fr))!important}
 body.role-coach #meal-day-content > div[style*="minmax(130px,1fr)"] > div:nth-child(5){grid-column:1/-1}
}
/* ── end COACH UI v3 · Meal planner ── */

/* ── SYMPTOM TRACKER (symptom-tracker.js client, symptom-coach.js coach) ──
   Severity: mild = accent at 30%, moderate = accent, strong = ink (--text).
   Tokens only, so every theme (light + dark, member + coach) works. */
.gpsym-card{padding:16px 18px;margin-bottom:12px}
.gpsym-h3{font-family:'Barlow Condensed',sans-serif;font-weight:700;font-size:20px;text-transform:uppercase;letter-spacing:.2px;margin:0 0 6px;color:var(--text)}
.gpsym-p{margin:0 0 10px;font-size:14px;line-height:1.55;color:var(--text2)}
.gpsym-muted{font-size:14px;color:var(--text2);line-height:1.5}
.gpsym-sub{font-size:12.5px;color:var(--text3);line-height:1.45}
.gpsym-q{font-weight:600;font-size:15px;color:var(--text)}
.gpsym-label{font-family:'Barlow Semi Condensed',sans-serif;font-size:11px;text-transform:uppercase;letter-spacing:1.2px;color:var(--text3);font-weight:600;margin-bottom:6px}
.gpsym-row{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
label.gpsym-row{padding:8px 0;border-top:1px solid var(--border);font-size:14px;color:var(--text)}
.gpsym-time{min-height:40px;border-radius:10px;border:1px solid var(--border2);background:var(--surface2);color:var(--text);padding:0 10px;font-size:15px}
.gpsym-wide{width:100%;margin-top:14px;min-height:46px}
.gpsym-big{width:100%;min-height:52px;font-size:16px;margin:0 0 12px;border-radius:14px}
.gpsym-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.gpsym-chip{min-height:40px;padding:6px 13px;border-radius:999px;border:1px solid var(--border2);background:var(--surface);color:var(--text2);font-family:'Barlow Semi Condensed',sans-serif;font-weight:600;font-size:14px;cursor:pointer}
.gpsym-chip[aria-pressed="true"]{border-color:var(--accent);background:var(--accent-dim);color:var(--accent)}
.gpsym-chip:disabled{opacity:.5;cursor:default}
.gpsym-tlink{background:none;border:0;padding:0;color:var(--accent);font:inherit;font-weight:600;cursor:pointer;text-decoration:underline}
.gpsym-x{background:none;border:0;color:var(--text3);font-size:18px;line-height:1;cursor:pointer;padding:2px 6px;min-width:32px;min-height:32px}
.gpsym-foot{text-align:center;margin:6px 0 18px}
.gpsym-ask{border-left:3px solid var(--accent)}
.gpsym-trial{border:1px solid var(--accent)}
.gpsym-big-num{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:36px;line-height:1.05;color:var(--text);margin:4px 0}
.gpsym-big-num span{font-size:18px;color:var(--text3)}
.gpsym-bar{height:8px;border-radius:99px;background:var(--surface2);overflow:hidden;margin:4px 0 8px}
.gpsym-bar b{display:block;height:100%;background:var(--accent);border-radius:99px}
.gpsym-week{display:grid;grid-template-columns:repeat(7,1fr);gap:5px;text-align:center}
.gpsym-week span{display:block;font-family:'Barlow Semi Condensed',sans-serif;font-size:11px;color:var(--text3)}
.gpsym-week b{display:grid;place-items:center;height:36px;border-radius:9px;background:var(--surface2);margin-top:3px;color:var(--text3);font-size:14px}
.gpsym-week b.none{background:var(--surface);border:1.5px dashed var(--border2)}
.gpsym-week b.today{outline:2px solid var(--accent);outline-offset:1px}
.gpsym-keys{display:flex;flex-wrap:wrap;gap:12px;font-size:12px;color:var(--text3);margin-top:8px}
.gpsym-keys i{display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.gpsym-ep{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:2px 10px;align-items:center;padding:9px 0;border-top:1px solid var(--border)}
.gpsym-ep:first-of-type{border-top:0}
.gpsym-dot{width:10px;height:10px;border-radius:50%}
.gpsym-ep-n{font-weight:600;font-size:14px;color:var(--text);min-width:0}
.gpsym-ep-m{grid-column:2/-1;font-size:12.5px;color:var(--text3)}
.gpsym-sheet .gpsym-grp{font-family:'Barlow Semi Condensed',sans-serif;font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--text3);margin-top:12px}
.gpsym-gap{margin-top:16px}
.gpsym-flags{margin-top:12px;border-top:1px solid var(--border);padding-top:10px}
.gpsym-flags summary{cursor:pointer;font-size:13.5px;color:var(--text2);font-weight:600}
.gpsym-today .gpsym-card{margin:12px 0 0}
.gpsym-scroll{overflow-x:auto;margin:8px 0}
.gpsym-svg{width:100%;min-width:420px;height:auto;display:block}
.gpsym-svg text{font-family:'Barlow Semi Condensed',sans-serif;font-size:10.5px;fill:var(--text3)}
.gpsym-2col{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px;align-items:start}
@media(max-width:1100px){.gpsym-2col{grid-template-columns:minmax(0,1fr)}}
.gpsym-link{border:1px solid transparent;border-radius:12px;padding:10px 12px;margin-top:6px;cursor:pointer}
.gpsym-link:hover{background:var(--surface2)}
.gpsym-link.sel{border-color:var(--accent);background:var(--accent-dim)}
.gpsym-link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.gpsym-ttl{font-weight:600;font-size:15px;color:var(--text)}
.gpsym-pill{font-family:'Barlow Semi Condensed',sans-serif;font-weight:600;font-size:12px;border-radius:999px;padding:3px 10px;white-space:nowrap;background:var(--surface2);color:var(--text2)}
.gpsym-pill.strong{background:var(--text);color:var(--surface)}
.gpsym-pill.possible{background:var(--accent-dim);color:var(--accent)}
.gpsym-pill.red{background:var(--bad-tint);color:var(--bad)}
.gpsym-cmp{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:5px 10px;align-items:center;margin:8px 0 4px;font-size:12.5px;color:var(--text2)}
.gpsym-tr{height:8px;border-radius:99px;background:var(--surface2);overflow:hidden}
.gpsym-tr b{display:block;height:100%;border-radius:99px}

/* ═══ STEP FORMS (2026-10-08): numbered sections, Next button, score gate ═══
   Force + Jump Profile forms. Numbered headers with a live status pill, a
   "Next" button at the end of a section, and a score button that stays
   clickable but reads as waiting until the required fields are in. Tokens only,
   so every theme follows. */
.gpf-h{width:100%;display:flex;align-items:center;gap:12px;padding:14px 16px;background:transparent;border:none;cursor:pointer;color:var(--text);text-align:left}
.gpf-num{flex:0 0 28px;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'Barlow Condensed',sans-serif;font-size:15px;font-weight:800;background:var(--accent);color:var(--btn-text)}
.gpf-num.done{background:var(--good);color:var(--surface)}
.gpf-t{flex:1;min-width:0}
.gpf-t b{display:block;font-family:'Barlow Semi Condensed',sans-serif;font-size:var(--fs-body);font-weight:700;line-height:1.2}
.gpf-t span{display:block;font-size:12.5px;color:var(--text2);margin-top:2px;line-height:1.35}
.gpf-pill{flex:none;font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;border-radius:99px;padding:3px 9px;background:var(--surface2);color:var(--text2);border:1px solid var(--border);white-space:nowrap}
.gpf-pill:empty{display:none}
.gpf-pill.done{color:var(--good);border-color:var(--good)}
.gpf-caret{flex:none;font-size:var(--fs-card);color:var(--text2);transition:transform .2s}
.gpf-next{display:flex;align-items:center;justify-content:space-between;width:100%;margin-top:18px;padding:14px 16px;border:0;border-radius:12px;background:var(--accent);color:var(--btn-text);font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:800;letter-spacing:.02em;text-transform:uppercase;cursor:pointer}
.gpf-next:hover{filter:brightness(1.06)}
.btn.gpf-wait{opacity:.55}
.gpf-hint{margin-top:10px;text-align:right;font-size:12.5px;color:var(--text2)}
.gpf-warn{font-size:var(--fs-label);color:var(--bad);margin:-2px 0 8px;font-weight:600}

/* ═══ FREE ARC (2026-10-08): course buyers' free tests card, hand-off and
   locked block card (free-arc.js). The app's hero look: --hero-* tokens only,
   so all six themes follow. ═══ */
#view-courses .gpfa-wrap{padding:0 24px 18px}
#gpfa-handoff:empty,#gpfa-block:empty{display:none}
#gpfa-handoff{margin:0 0 18px}
#gpfa-handoff .gpfa{margin:0 auto 0 0}
#gpfa-block{margin:0 0 20px}
.gpfa{position:relative;isolation:isolate;overflow:hidden;color:var(--hero-fg);border-radius:22px;padding:22px 20px 18px;max-width:640px;background:radial-gradient(90% 55% at 95% 0%,var(--hero-glow),transparent 62%),linear-gradient(165deg,var(--hero-a) 0%,var(--hero-b) 100%);box-shadow:0 24px 44px -26px var(--hero-shadow),0 0 0 1px var(--hero-edge) inset}
.gpfa::before{content:"";position:absolute;inset:0;z-index:-1;background-image:linear-gradient(var(--hero-grid) 1px,transparent 1px),linear-gradient(90deg,var(--hero-grid) 1px,transparent 1px);background-size:28px 28px;-webkit-mask-image:linear-gradient(180deg,#000 0%,transparent 70%);mask-image:linear-gradient(180deg,#000 0%,transparent 70%)}
.gpfa-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.gpfa-hd{min-width:0}
.gpfa-eb{display:inline-flex;align-items:center;gap:6px;font-size:10px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:var(--hero-fg);background:var(--hero-line);border:1px solid var(--hero-edge);border-radius:99px;padding:4px 10px}
.gpfa-h{font-family:'Barlow Condensed',sans-serif;font-size:34px;line-height:.95;font-weight:800;text-transform:uppercase;margin-top:12px;text-wrap:balance}
.gpfa-venn{flex:0 0 104px;width:104px;height:98px;margin-right:-6px}
.gpfa-p{font-size:14px;line-height:1.55;color:var(--hero-fg2);margin-top:12px}
.gpfa-bar{display:flex;gap:6px;margin-top:14px}
.gpfa-bar i{flex:1;height:6px;border-radius:99px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gpfa-bar i.on{background:var(--hero-fg)}
.gpfa-cap{font-size:12px;color:var(--hero-fg2);margin-top:7px}
.gpfa-steps{margin-top:16px;display:grid;gap:10px}
.gpfa-st{position:relative;display:flex;gap:12px;align-items:flex-start;padding:12px 12px 12px 0;border-radius:14px}
.gpfa-st.on{background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gpfa-node{flex:0 0 40px;display:flex;justify-content:center;position:relative;align-self:stretch}
.gpfa-st:not(:last-child) .gpfa-node::after{content:"";position:absolute;left:19px;top:34px;bottom:-26px;width:2px;background:var(--hero-edge)}
.gpfa-node b{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:16px;background:var(--hero-b);color:var(--hero-fg);box-shadow:0 0 0 2px var(--hero-edge)}
.gpfa-st.on .gpfa-node b{background:var(--hero-btn);color:var(--hero-btn-fg);box-shadow:0 0 0 4px var(--hero-line),0 0 18px var(--hero-glow)}
.gpfa-st.done .gpfa-node b{background:var(--good);color:#fff;box-shadow:none}
.gpfa-body{min-width:0}
.gpfa-k{font-size:10px;font-weight:800;letter-spacing:1.3px;text-transform:uppercase;color:var(--hero-fg2);opacity:.85}
.gpfa-q{font-size:16px;font-weight:700;line-height:1.25;margin-top:2px;color:var(--hero-fg)}
.gpfa-st.done .gpfa-q{opacity:.75}
.gpfa-sub{font-size:12.5px;line-height:1.45;color:var(--hero-fg2);margin-top:8px}
.gpfa-where{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:800;letter-spacing:.9px;text-transform:uppercase;color:var(--hero-fg);margin-bottom:3px}
.gpfa-go{display:flex;align-items:center;justify-content:space-between;width:100%;margin-top:16px;background:var(--hero-btn);color:var(--hero-btn-fg);border:0;border-radius:14px;padding:15px 16px 15px 18px;font-family:'Barlow Condensed',sans-serif;font-size:20px;font-weight:800;text-transform:uppercase;letter-spacing:.3px;cursor:pointer;box-shadow:0 12px 26px -12px rgba(0,0,0,.6)}
.gpfa-go[disabled]{opacity:.55;cursor:default}
.gpfa-go em{font-style:normal;width:32px;height:32px;border-radius:50%;background:var(--hero-btn-fg);color:var(--hero-btn);display:flex;align-items:center;justify-content:center;font-size:17px}
.gpfa-fine{font-size:11.5px;color:var(--hero-fg2);margin-top:10px;text-align:center;opacity:.9}
.gpfa-q2{font-size:13px;font-weight:700;color:var(--hero-fg);margin-top:16px}
.gpfa-chips{display:flex;gap:8px;margin-top:8px}
.gpfa-chip{flex:1;text-align:center;border:1px solid var(--hero-edge);border-radius:10px;padding:11px 0;font-weight:700;font-size:14px;color:var(--hero-fg2);background:transparent;cursor:pointer}
.gpfa-chip.on{border:2px solid var(--hero-fg);color:var(--hero-fg);background:var(--hero-line)}
.gpfa-price{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:16px}
.gpfa-was{font-size:18px;color:var(--hero-fg2);text-decoration:line-through;font-weight:700}
.gpfa-now{font-family:'Barlow Condensed',sans-serif;font-size:48px;font-weight:800;color:var(--hero-fg);line-height:1}
.gpfa-per{font-size:13px;color:var(--hero-fg2)}
.gpfa-clock{margin-top:8px;font-size:12.5px;color:var(--hero-fg2)}
.gpfa-clock b{font-variant-numeric:tabular-nums;color:var(--hero-fg)}
.gpfa-unit{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:0 0 14px;padding:12px 14px;border-radius:10px;background:var(--surface2);border:1px solid var(--border)}
.gpfa-unit b{font-size:14px;color:var(--text)}
.gpfa-unit span{font-size:12.5px;color:var(--text2);flex:1;min-width:140px}
.gpfa-unit-b{display:flex;gap:8px}
@media (max-width:520px){ #view-courses .gpfa-wrap{padding:0 16px 16px} .gpfa-h{font-size:32px} }
.gpfa-qr{display:flex;align-items:center;gap:14px;margin-top:14px;padding:12px;border-radius:14px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gpfa-qr img{flex:0 0 88px;width:88px;height:88px;border-radius:8px;background:#fff}
.gpfa-qr b{display:block;font-size:13.5px;color:var(--hero-fg)}
.gpfa-qr span{display:block;font-size:12.5px;color:var(--hero-fg2);margin-top:3px;line-height:1.4}
/* Free ARC block card: the €49 countdown as tiles (Dries 2026-10-08: "make the countdown more clear") */
.gpfa-cd{margin-top:14px;padding:14px 14px 12px;border-radius:14px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset;text-align:center}
.gpfa-cd-k{font-size:10.5px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:var(--hero-fg2)}
.gpfa-cd-t{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:8px}
.gpfa-cd-t div{min-width:62px;padding:8px 0 6px;border-radius:10px;background:var(--hero-b);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gpfa-cd-t b{display:block;font-family:'Barlow Condensed',sans-serif;font-size:34px;line-height:1;font-weight:800;color:var(--hero-fg);font-variant-numeric:tabular-nums}
.gpfa-cd-t i{display:block;font-style:normal;font-size:9.5px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:var(--hero-fg2);margin-top:3px}
.gpfa-cd-t em{font-style:normal;font-family:'Barlow Condensed',sans-serif;font-size:26px;font-weight:800;color:var(--hero-fg2)}
.gpfa-cd-s{font-size:12px;color:var(--hero-fg2);margin-top:9px}
.gpfa-cd.warn .gpfa-cd-t div{box-shadow:0 0 0 1px var(--warn) inset}

/* ── Plyo Picker (plyo-picker.js, 2026-10-09): Built To Bounce gift card.
   The shell, eyebrow, title, chips and button are the free-ARC hero card
   (.gpfa-*) and MEMBER UI v2 (.gx-*); .gppk-* only adds what they lack. ── */
.gppk-wrap{padding:0 26px}
.gppk-wrap>div:not(:empty){padding-bottom:18px}
@media (max-width:520px){ .gppk-wrap{padding:0 16px} .gppk-wrap>div:not(:empty){padding-bottom:16px} }
.gppk.gpfa{max-width:none;padding-left:16px;padding-right:16px}
.gppk .gpfa-eb{text-transform:uppercase}
.gppk .gpfa-eb svg{width:12px;height:12px}
.gppk .gpfa-h{font-size:30px;margin-top:10px}
.gppk .gpfa-p{font-size:13.5px;line-height:1.45;margin-top:6px}
.gppk .gpfa-go{margin-top:16px}
.gppk .gpfa-chips{flex-wrap:wrap;gap:6px;margin-top:0}
.gppk .gpfa-chip{flex:0 0 auto;min-height:38px;padding:5px 11px;font-size:13px;line-height:1.2;text-align:left;border-radius:12px;display:inline-flex;align-items:center;gap:5px}
.gppk .gpfa-chip.on{padding:4px 10px}
.gppk-ck{display:none}
.gppk .gpfa-chip.on .gppk-ck{display:inline-flex}
.gppk-ck svg{width:12px;height:12px}
.gppk .gx-gnum small{font-size:.62em;font-weight:700}
.gppk-top{display:flex;align-items:center;justify-content:space-between;gap:10px}
.gppk-gift{font-size:12px;font-weight:600;color:var(--hero-fg2)}
.gppk-chg{min-height:36px;padding:0 14px;border-radius:99px;background:transparent;border:1px solid var(--hero-edge);color:var(--hero-fg);font:700 12px 'Barlow Semi Condensed',sans-serif;letter-spacing:.06em;cursor:pointer}
.gppk-links{display:flex;gap:8px;margin-top:14px}
.gppk-link{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:44px;border-radius:12px;background:var(--hero-line);border:1px solid var(--hero-edge);color:var(--hero-fg);font:700 13px 'Barlow Semi Condensed',sans-serif;letter-spacing:.05em;text-decoration:none;cursor:pointer}
.gppk-link svg{width:14px;height:14px;flex:0 0 14px}
.gppk-segrow{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:16px;flex-wrap:wrap}
.gppk-seg{display:flex;padding:4px;border-radius:14px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-seg button{min-height:36px;padding:0 13px;border:0;border-radius:10px;background:transparent;color:var(--hero-fg2);font:700 13px 'Barlow Semi Condensed',sans-serif;letter-spacing:.04em;cursor:pointer}
.gppk-seg button.on{background:var(--hero-btn);color:var(--hero-btn-fg)}
.gppk-seg button:disabled{cursor:default}
.gppk-lbl{display:block;margin-top:14px}
.gppk-in{display:block;width:100%;box-sizing:border-box;height:48px;margin-top:8px;padding:0 14px;border-radius:12px;background:var(--hero-line);border:1px solid var(--hero-edge);color:var(--hero-fg);font:400 16px Barlow,sans-serif;outline:none}
.gppk-in::placeholder{color:var(--hero-fg2);opacity:.75}
.gppk-in:focus-visible{box-shadow:0 0 0 2px var(--hero-fg)}
.gppk-ta{height:auto;min-height:68px;padding:10px 14px;line-height:1.4;resize:none}
.gppk-form.dis{opacity:.55}
.gppk-busy{opacity:1!important;cursor:progress!important}
.gppk-spin{width:16px;height:16px;border-radius:50%;border:2px solid var(--hero-btn);border-right-color:transparent;display:block;animation:gppk-spin .8s linear infinite}
@keyframes gppk-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){ .gppk-spin{animation:none} }
.gppk-warn{display:flex;align-items:flex-start;gap:8px;margin-top:12px;padding:9px 12px;border-radius:12px;background:var(--warn-tint);color:var(--warn);font-size:13px;font-weight:600;line-height:1.4}
.gppk-warn svg{width:16px;height:16px;flex:0 0 16px;margin-top:1px}
.gppk-two{display:flex;gap:8px;margin-top:10px}
.gppk-two .gx-hbtn{flex:1;min-height:48px}
.gppk-ghost{flex:1;min-height:48px;border-radius:14px;background:var(--hero-line);border:1px solid var(--hero-edge);color:var(--hero-fg);font:700 15px 'Barlow Semi Condensed',sans-serif;letter-spacing:.05em;cursor:pointer}
.gppk-note{display:flex;align-items:flex-start;gap:9px;margin-top:12px;padding:12px 14px;border-radius:14px;font-size:13.5px;line-height:1.4;color:var(--hero-fg)}
.gppk-note svg{width:16px;height:16px;flex:0 0 16px;margin-top:1px}
.gppk-row{margin-top:14px}
.gppk-row > .gpfa-k{margin-bottom:7px}
.gppk-focus{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.gppk-fc{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:12px;border-radius:16px;text-align:left;color:var(--hero-fg);font-family:Barlow,sans-serif;cursor:pointer;border:1px solid var(--hero-edge);background:transparent}
.gppk-fc.on{border:2px solid var(--hero-fg);padding:11px;background:var(--hero-line)}
.gppk-fk{font-family:'Barlow Condensed',sans-serif;font-size:20px;font-weight:800;text-transform:uppercase;letter-spacing:.02em;line-height:1}
.gppk-l1{font-size:13.5px;font-weight:600;line-height:1.25;color:var(--hero-fg);text-wrap:balance}
.gppk-fc small{font-size:12px;line-height:1.35;color:var(--hero-fg2);text-wrap:balance;opacity:.85}
.gppk-radio{position:absolute;top:11px;right:11px;width:18px;height:18px;border-radius:50%;box-shadow:0 0 0 2px var(--hero-edge) inset}
.gppk-fc.on .gppk-radio{background:var(--hero-btn);box-shadow:0 0 0 2px var(--hero-btn) inset,0 0 0 4px var(--hero-line)}
.gppk-fc.on .gppk-radio::after{content:"";position:absolute;inset:5px;border-radius:50%;background:var(--hero-btn-fg)}
.gppk-last{font-size:12.5px;color:var(--hero-fg2);margin-top:4px}
.gppk-have{margin-top:8px}
.gppk-list{margin-top:14px}
.gppk-rk{display:flex;align-items:center;gap:7px;padding:9px 11px 9px 9px;min-height:52px;box-sizing:border-box;border-radius:16px}
.gppk-rk + .gppk-rk{margin-top:7px}
.gppk-rk > b{flex:0 0 24px;width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:14px;background:var(--hero-b);color:var(--hero-fg);box-shadow:0 0 0 1px var(--hero-edge)}
.gppk-rk:first-child > b{background:var(--hero-btn);color:var(--hero-btn-fg);box-shadow:0 0 0 3px var(--hero-line)}
.gppk-nm{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:4px}
.gppk-nm strong{font-size:14px;font-weight:700;line-height:1.2;color:var(--hero-fg)}
.gppk-l2{display:flex;align-items:center;gap:8px;margin-top:2px}
.gppk-tag4{display:inline-block;font:700 10px 'Barlow Semi Condensed',sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--hero-fg2);padding:2px 7px;border-radius:6px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-rk .gx-gnum{flex:0 0 auto;min-width:38px;text-align:right;font-size:18px;white-space:nowrap}
.gppk-demo{display:inline-flex;align-items:center;gap:4px;min-height:28px;padding:0 8px 0 3px;border-radius:99px;border:1px solid var(--hero-edge);background:var(--hero-b);color:var(--hero-fg);font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.05em;cursor:pointer}
.gppk-demo i{width:20px;height:20px;border-radius:50%;background:var(--hero-btn);color:var(--hero-btn-fg);display:flex;align-items:center;justify-content:center}
.gppk-demo svg{width:9px;height:9px;margin-left:1px}
.gppk-dim{font-size:12.5px;line-height:1.4;color:var(--hero-fg2);margin-top:9px}
.gppk-sec{margin:18px 0 8px}
.gppk-cb{margin-top:8px;padding:6px 12px 10px;border-radius:16px}
.gppk-cr{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:2px 9px;padding:7px 0;border-top:1px solid var(--hero-line)}
.gppk-cr:first-child{border-top:0}
.gppk-cr em{font-style:normal;font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.06em;min-width:24px;text-align:center;padding:3px 6px;border-radius:7px;background:var(--hero-b);box-shadow:0 0 0 1px var(--hero-edge) inset;color:var(--hero-fg)}
.gppk-cr strong{font-size:14px;font-weight:600;color:var(--hero-fg);min-width:0}
.gppk-cr .gppk-dm:empty{display:none}
.gppk-dr{display:flex;flex-direction:column;align-items:flex-end;line-height:1.1;text-align:right;white-space:nowrap}
.gppk-dr .gx-gnum{font-size:17px}
.gppk-dr i{font-style:normal;font-size:12px;color:var(--hero-fg2);margin-top:2px}
.gppk-cs{font-size:12.5px;line-height:1.4;color:var(--hero-fg2);margin-top:4px}

/* Plyo Picker: Swap + Look up a drill (2026-10-10). Scoped to .gppk. */
.gppk-tabs{display:flex;padding:4px;margin-top:12px;border-radius:14px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-tabs button{flex:1;min-height:38px;border:0;border-radius:10px;background:transparent;color:var(--hero-fg2);font:700 13.5px 'Barlow Semi Condensed',sans-serif;letter-spacing:.04em;cursor:pointer}
.gppk-tabs button.on{background:var(--hero-btn);color:var(--hero-btn-fg)}
.gppk-end{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:6px}
.gppk-end .gx-gnum{font-size:18px;white-space:nowrap}
.gppk-swb{display:inline-flex;align-items:center;gap:4px;min-height:30px;padding:0 10px;border-radius:99px;border:1px solid var(--hero-edge);background:transparent;color:var(--hero-fg);font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.gppk-swb svg{width:12px;height:12px}
.gppk-now{display:flex;align-items:center;gap:10px;margin-top:12px;padding:11px 12px;border-radius:14px;background:var(--hero-btn);color:var(--hero-btn-fg)}
.gppk-now strong{display:block;font-size:15px}
.gppk-now .gx-gnum{margin-left:auto;font-size:18px;background:none;-webkit-text-fill-color:currentColor;color:var(--hero-btn-fg)}
.gppk-now .gppk-ok{color:var(--hero-btn-fg);opacity:.7}
.gppk-ok{font:800 10px 'Barlow Semi Condensed',sans-serif;letter-spacing:.12em;text-transform:uppercase;color:var(--hero-fg2)}
.gppk-opt{margin-top:8px;padding:11px 12px;border-radius:14px;background:var(--hero-b);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-opt.dim{opacity:.7}
.gppk-opt.off{opacity:.55}
.gppk-ohd{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.gppk-ohd .gx-gnum{font-size:17px;white-space:nowrap}
.gppk-opt strong{display:flex;align-items:center;gap:6px;flex-wrap:wrap;font-size:15px;color:var(--hero-fg);margin-top:2px}
.gppk-opt small{display:block;font-size:12.5px;line-height:1.4;color:var(--hero-fg2);margin-top:3px}
.gppk-onone{font-size:13px;color:var(--hero-fg2);margin-top:3px}
.gppk-dial{display:block;font-size:12.5px;font-weight:700;color:var(--hero-fg);margin-top:5px}
.gppk-new{font:800 9.5px 'Barlow Semi Condensed',sans-serif;letter-spacing:.12em;text-transform:uppercase;padding:2px 6px;border-radius:6px;background:var(--good);color:#fff}
.gppk-ofoot{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:9px}
.gppk-ofoot:empty{display:none}
.gppk-use{min-height:34px;padding:0 14px;border-radius:99px;border:0;background:var(--hero-btn);color:var(--hero-btn-fg);font:700 13px 'Barlow Semi Condensed',sans-serif;letter-spacing:.04em;cursor:pointer}
.gppk-opt.dim .gppk-use{background:transparent;color:var(--hero-fg);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-need{font:700 10.5px 'Barlow Semi Condensed',sans-serif;letter-spacing:.08em;text-transform:uppercase;padding:4px 8px;border-radius:7px;background:var(--warn-tint);color:var(--warn)}
.gppk-back{width:100%;margin-top:10px}
.gppk-q{display:flex;align-items:center;gap:9px;margin-top:12px;min-height:48px;padding:0 14px;border-radius:14px;background:var(--hero-line);border:1px solid var(--hero-edge)}
.gppk-q svg{width:18px;height:18px;flex:0 0 18px;color:var(--hero-fg2)}
.gppk-q input{flex:1;min-width:0;height:46px;border:0;background:transparent;color:var(--hero-fg);font:400 16px Barlow,sans-serif;outline:0}
.gppk-q input::placeholder{color:var(--hero-fg2);opacity:.75}
.gppk-q:focus-within{box-shadow:0 0 0 2px var(--hero-fg)}
.gppk-did{font-size:12.5px;color:var(--hero-fg2);margin-top:9px}
.gppk-did b{color:var(--hero-fg)}
.gppk-list2{margin-top:8px;border-radius:14px;overflow:hidden;box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-li{display:flex;width:100%;align-items:center;justify-content:space-between;gap:10px;padding:12px;border:0;border-top:1px solid var(--hero-line);background:var(--hero-line);color:var(--hero-fg);text-align:left;cursor:pointer;font-family:Barlow,sans-serif}
.gppk-li:first-child{border-top:0}
.gppk-li strong{font-size:14px;min-width:0}
.gppk .gx-gchip.on{background:var(--hero-btn);color:var(--hero-btn-fg)}
.gppk .gx-gchip.dim{opacity:.65}
.gppk .gx-gchip.warn{background:var(--warn-tint);color:var(--warn)}
.gppk-hero{margin-top:12px;padding:14px;border-radius:18px}
.gppk-hero .h,.gppk-box .h{font:800 24px 'Barlow Condensed',sans-serif;text-transform:uppercase;line-height:.98;color:var(--hero-fg)}
.gppk-cn{font-size:12.5px;color:var(--hero-fg2);margin-top:4px}
.gppk-chips{display:flex;gap:5px;flex-wrap:wrap;margin-top:8px}
.gppk-sec2{margin:14px 0 6px}
.gppk-path{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.gppk-path span{font-size:12.5px;padding:6px 9px;border-radius:10px;background:var(--hero-b);box-shadow:0 0 0 1px var(--hero-edge) inset;color:var(--hero-fg2)}
.gppk-path span.on{background:var(--hero-btn);color:var(--hero-btn-fg);box-shadow:none;font-weight:700}
.gppk-path em{font-style:normal;font-size:12px;color:var(--hero-fg2)}
.gppk-drow{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:6px 0;border-top:1px solid var(--hero-line);font:700 10.5px 'Barlow Semi Condensed',sans-serif;letter-spacing:.08em;text-transform:uppercase;color:var(--hero-fg2)}
.gppk-drow .gx-gnum{font-size:18px;letter-spacing:0}
.gppk-box{margin-top:12px;padding:14px;border-radius:16px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-box p{font-size:13.5px;line-height:1.45;color:var(--hero-fg2);margin:7px 0 0}
.gppk-earn{margin-top:12px}

/* Plyo Picker: My plyos as two options (2026-10-10). */
.gppk-line{font-size:13.5px;line-height:1.4;color:var(--hero-fg2);margin-top:6px}
.gppk-when{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.gppk-when span{font:700 10.5px 'Barlow Semi Condensed',sans-serif;letter-spacing:.08em;text-transform:uppercase;padding:5px 9px;border-radius:8px;background:var(--hero-b);color:var(--hero-fg);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-op{margin-top:12px;padding:14px;border-radius:18px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gppk-op.off .gppk-cb2,.gppk-op.off .gppk-cs,.gppk-op.off .gppk-ot,.gppk-op.off .gppk-os{opacity:.55}
.gppk-oh{display:flex;align-items:center;gap:10px}
.gppk-ob{flex:0 0 28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font:800 15px 'Barlow Condensed',sans-serif;background:var(--hero-btn);color:var(--hero-btn-fg)}
.gppk-ot{font:800 19px/1 'Barlow Condensed',sans-serif;text-transform:uppercase;color:var(--hero-fg)}
.gppk-os{font-size:12.5px;color:var(--hero-fg2);margin-top:2px}
.gppk-oneed{margin-left:auto;white-space:nowrap}
.gppk-cb2{margin-top:6px}
.gppk-op .gppk-cr strong{font-size:14.5px}
.gppk-or{display:flex;align-items:center;gap:10px;margin-top:12px;font:800 10.5px 'Barlow Semi Condensed',sans-serif;letter-spacing:.16em;text-transform:uppercase;color:var(--hero-fg2)}
.gppk-or::before,.gppk-or::after{content:"";flex:1;height:1px;background:var(--hero-edge)}
.gppk-br{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:var(--hero-b);box-shadow:0 0 0 1px var(--hero-edge) inset;margin-top:8px}
.gppk-br .gppk-nm{flex:1;min-width:0}
.gppk-br .gppk-nm strong{font-size:14.5px}
.gppk-br .gppk-dm:empty{display:none}
.gppk-br > .gx-gnum{font-size:17px;white-space:nowrap}
.gppk .gx-gchip.have{background:rgba(63,179,122,.22);color:#bff0d6}
.gppk .gx-gchip.have svg{width:11px;height:11px}
.gppk-dose1{margin-top:12px;font-size:11px}
.gppk-dose1 .gx-gnum{font-size:24px}
.gppk-link2{border:0;background:none;padding:0;color:inherit;font:inherit;text-decoration:underline;text-underline-offset:3px;cursor:pointer}

/* Bell panel on a phone (2026-10-09): the desktop box (340px, 60px from the
   right) ran off the left edge at 390px. Same 16px gutter as the pages. */
@media (max-width:768px){
 #notif-panel{right:16px!important;left:auto!important;width:min(340px,calc(100vw - 32px))!important;box-sizing:border-box}
}
@media (max-width:420px){
 #notif-panel{left:16px!important;width:auto!important}
}

/* ── GAME-DAY PRIMER (game-day-primer.js, 2026-10-13) ───────────────────
   Card under the Plyo Picker (reuses .gpfa/.gppk), and the full-screen
   sheet per goal. Step bars use the blueprint navy steps on every theme;
   everything else reads the theme tokens. */
#gpgd-slot:not(:empty){padding-bottom:24px}
@media (max-width:520px){ #gpgd-slot:not(:empty){padding-bottom:20px} }
.gpgd-sub{margin-top:6px;font:400 14px Barlow,sans-serif;color:var(--hero-fg2)}
.gpgd-goals{display:flex;flex-direction:column;gap:8px;margin-top:14px}
.gpgd-goal{display:flex;align-items:center;gap:12px;min-height:50px;padding:0 14px;border-radius:12px;background:var(--hero-line);border:1px solid var(--hero-edge);color:var(--hero-fg);font:700 15px 'Barlow Condensed',sans-serif;letter-spacing:.06em;text-transform:uppercase;text-align:left;cursor:pointer}
.gpgd-goal:focus-visible{outline:2px solid var(--hero-fg);outline-offset:2px}
.gpgd-arr{font-size:22px;width:20px;text-align:center}
.gpgd-go{margin-left:auto;font-size:22px;opacity:.6}
#gpgd-sheet{position:fixed;inset:0;z-index:1500;overflow-y:auto;-webkit-overflow-scrolling:touch;background:var(--bg);color:var(--text)}
body.gpgd-open{overflow:hidden}
.gpgd-in{max-width:560px;margin:0 auto;padding:calc(14px + env(safe-area-inset-top,0px)) 16px calc(28px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:10px}
.gpgd-back{align-self:flex-start;min-height:40px;padding:0 12px;border:0;border-radius:10px;background:#1B2A47;color:#fff;font:700 12px 'Barlow Semi Condensed',sans-serif;letter-spacing:.12em;text-transform:uppercase;cursor:pointer}
.gpgd-back:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.gpgd-head{display:flex;align-items:center;gap:12px;margin-top:6px}
.gpgd-badge{width:44px;height:44px;flex:none;display:flex;align-items:center;justify-content:center;background:#1B2A47;color:#fff;font:700 28px 'Barlow Condensed',sans-serif}
.gpgd-head h2{margin:0;font:800 30px/1 'Barlow Condensed',sans-serif;text-transform:uppercase;color:var(--text)}
.gpgd-lead{margin:0;font-size:14px;color:var(--text3)}
.gpgd-blk{background:var(--surface);border:1px solid var(--border);border-radius:4px;overflow:hidden}
.gpgd-bh{display:flex;align-items:center;gap:9px;padding:9px 12px;color:#fff}
.gpgd-bh svg{width:22px;height:22px;flex:none}
.gpgd-bh b{font:700 18px 'Barlow Condensed',sans-serif;letter-spacing:.04em;text-transform:uppercase}
.gpgd-bh span{margin-left:auto;font:700 15px 'Barlow Condensed',sans-serif}
.gpgd-warm .gpgd-bh{background:#6F84A8} .gpgd-bounce .gpgd-bh{background:#3A4D73} .gpgd-prime .gpgd-bh{background:#1B2A47} .gpgd-stay .gpgd-bh{background:#9FB0C2;color:#1B2A47}
.gpgd-prime{border:2px solid var(--text)}
.gpgd-back,.gpgd-badge{box-shadow:0 0 0 1px var(--border2)}
.gpgd-row{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 12px;border-top:1px solid var(--border);font-size:15px;font-weight:600}
.gpgd-row b{font:800 19px 'Barlow Condensed',sans-serif;white-space:nowrap}
.gpgd-cue{padding:7px 12px 9px;border-top:1px solid var(--border);font-size:13px;color:var(--text3)}
.gpgd-foot{margin:6px 0 0;text-align:center;font:700 11px 'Barlow Semi Condensed',sans-serif;letter-spacing:.12em;text-transform:uppercase;color:var(--text3)}

/* GP Method Phase 1 (2026-10-14, phase1.js): the quiet weeks 1-3 line on
   Today and the week-4 choice card (built on the .gpfa hero card). */
.gpnut-choose{margin:0 0 18px}
.gpnut-h{font-family:'Barlow Condensed',sans-serif;font-size:26px;font-weight:800;text-transform:uppercase;line-height:1;color:var(--text)}
.gpnut-sub{font-size:13px;color:var(--text2);margin:6px 0 14px;line-height:1.5}
.gpnut-row{display:flex;gap:12px;flex-wrap:wrap;align-items:stretch}
.gpnut-tile{min-width:0;border-radius:16px;padding:18px 20px;display:flex;flex-direction:column;gap:12px;cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}
.gpnut-tile:hover{transform:translateY(-1px)}
.gpnut-tile:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.gpnut-dark{flex:1.3 1 280px;color:var(--hero-fg,#fff);background:radial-gradient(120% 70% at 88% -10%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%)}
.gpnut-light{flex:1 1 240px;background:var(--surface);border:1px solid var(--border);color:var(--text)}
.gpnut-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.4px;font-weight:700;color:var(--text2)}
.gpnut-t{font-family:'Barlow Condensed',sans-serif;font-size:28px;font-weight:800;text-transform:uppercase;line-height:1;margin-top:4px}
.gpnut-b{font-size:13px;color:var(--text2);margin-top:6px;line-height:1.5}
.gpnut-dark .gpnut-k,.gpnut-dark .gpnut-b{color:var(--hero-fg2,rgba(255,255,255,.8))}
.gpnut-hands{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap}
.gpnut-hand{text-align:center;font-size:11.5px;font-weight:600;color:var(--hero-fg2,rgba(255,255,255,.8))}
.gpnut-hand svg{display:block;margin:0 auto 4px}
.gpnut-nums{display:flex;gap:8px;flex-wrap:wrap}
.gpnut-num{padding:7px 11px;border-radius:9px;border:1px solid var(--border);min-width:64px}
.gpnut-num b{display:block;font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:800;line-height:1;color:var(--text)}
.gpnut-num span{display:block;font-size:11px;color:var(--text3);margin-top:3px}
.gpnut-go{margin-top:auto}
.gpnut-dark .gpnut-btn-hero{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border:0}
.gpgf-gc{margin:14px 0;padding:18px 20px;border-radius:16px;color:var(--hero-fg,#fff);background:radial-gradient(120% 70% at 88% -10%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%);display:flex;flex-wrap:wrap;gap:14px 24px;justify-content:space-between;align-items:flex-end}
.gpgf-gc-main{flex:1 1 220px;min-width:0}
.gpgf-gc-side{flex:0 1 auto;min-width:0}
.gpgf-gc-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.4px;font-weight:700;color:var(--hero-fg2,rgba(255,255,255,.8))}
.gpgf-gc-goal{font-family:'Barlow Condensed',sans-serif;font-size:30px;font-weight:800;text-transform:uppercase;line-height:1;margin-top:5px;overflow-wrap:anywhere}
.gpgf-gc-sub{font-size:13px;color:var(--hero-fg2,rgba(255,255,255,.8));margin-top:6px}
.gpgf-gc-pts{display:flex;flex-wrap:wrap;gap:6px 22px;margin-top:4px}
.gpgf-gc-num{font-family:'Barlow Condensed',sans-serif;font-size:44px;font-weight:800;line-height:1}
.gpgf-gc-num span{font-size:20px;margin-left:3px}
.gpgf-gc-pt .gpgf-gc-sub{margin-top:3px}
.gpgf-gc .gpgf-gc-btn{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border:0}
/* Program History (2026-10-15, option A, training.js _cphCard): the current
   program in the banner colours, past programs as light cards. */
.gpph{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;background:var(--surface);border:1px solid var(--border);border-radius:12px;margin-bottom:8px}
.gpph-main{min-width:0;flex:1 1 auto}
.gpph-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.3px;font-weight:700;color:var(--text3)}
.gpph-goal{font-family:'Barlow Condensed',sans-serif;font-weight:800;text-transform:uppercase;line-height:1;font-size:22px;margin-top:3px;color:var(--text);overflow-wrap:anywhere}
.gpph-name{font-weight:700;font-size:15px;line-height:1.3;margin-top:2px;color:var(--text);overflow-wrap:anywhere}
.gpph-meta{font-size:12.5px;margin-top:4px;color:var(--text3)}
.gpph-bar{display:flex;gap:4px;margin-top:9px;max-width:180px}
.gpph-bar i{flex:1;height:5px;border-radius:3px;background:var(--surface3,var(--border))}
.gpph-bar i.on{background:var(--accent)}
.gpph-now{border:0;border-radius:16px;padding:18px 20px;margin-bottom:18px;color:var(--hero-fg,#fff);background:radial-gradient(120% 70% at 88% -10%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%)}
.gpph-now .gpph-k,.gpph-now .gpph-meta{color:var(--hero-fg2,rgba(255,255,255,.85))}
.gpph-now .gpph-goal,.gpph-now .gpph-name{color:var(--hero-fg,#fff)}
.gpph-now .gpph-goal{font-size:30px;margin-top:5px}
.gpph-now .gpph-bar{max-width:260px;margin-top:10px}
.gpph-now .gpph-bar i{background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpph-now .gpph-bar i.on{background:var(--hero-fg,#fff)}
.gpph .gpph-btn{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border:0;flex-shrink:0}
.gpph .btn{flex-shrink:0}
/* One program in History (2026-10-15, option B, training.js _cphRenderDetail):
   its own hero band, week tabs, one week at a time. */
body.role-client .gpph-dh{padding:6px 0 26px}
.gpph-dh-back{display:inline-flex;align-items:center;gap:6px;background:transparent;border:1px solid var(--hero-edge,rgba(255,255,255,.3));color:var(--hero-fg,#fff);border-radius:99px;padding:6px 12px;font-size:13px;font-weight:600;cursor:pointer}
.gpph-dh-back:hover{background:var(--hero-line,rgba(255,255,255,.12))}
.gpph-dh-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.3px;font-weight:700;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:16px}
.gpph-dh-t{font-family:'Barlow Condensed',sans-serif;font-weight:800;text-transform:uppercase;font-size:38px;line-height:.95;margin-top:6px;overflow-wrap:anywhere;text-wrap:balance}
.gpph-dh-n{font-family:'Barlow Condensed',sans-serif;font-weight:700;font-size:26px;line-height:1.05;margin-top:6px;overflow-wrap:anywhere}
.gpph-dh-m{font-size:13.5px;line-height:1.5;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:8px}
.gpph-dh-bar{display:flex;gap:5px;margin-top:12px;max-width:260px}
.gpph-dh-bar i{flex:1;height:6px;border-radius:99px;background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpph-dh-bar i.on{background:var(--hero-fg,#fff)}
.gpph-tabs{display:flex;gap:6px;margin:0 0 12px;flex-wrap:wrap}
.gpph-tab{flex:1 1 60px;text-align:center;padding:9px 0;border-radius:10px;border:1px solid var(--border);background:var(--surface);font-weight:700;font-size:13px;color:var(--text2);cursor:pointer;font-family:inherit}
.gpph-tab small{display:block;font-size:10.5px;font-weight:600;opacity:.75;margin-top:1px}
.gpph-tab.on{background:linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%);color:var(--hero-fg,#fff);border-color:var(--accent)}
.gpph-sc{background:var(--surface);border:1px solid var(--border);border-radius:14px;padding:12px 14px;margin-bottom:10px}
.gpph-sc-h{display:flex;justify-content:space-between;align-items:center;gap:8px;font-weight:700;font-size:14.5px;color:var(--text)}
.gpph-sc-h em{font-style:normal;font-size:12px;font-weight:600;color:var(--text3)}
.gpph-sc-h em.ok{color:var(--success,#2e7d32)}
.gpph-ex{display:flex;justify-content:space-between;align-items:center;gap:6px 10px;flex-wrap:wrap;padding:8px 0;border-top:1px solid var(--border);margin-top:6px}
.gpph-ex+.gpph-ex{margin-top:0}
.gpph-ex-n{font-size:14px;color:var(--text);min-width:0}
.gpph-ex-n span{color:var(--text3);font-size:12px;margin-left:6px}
.gpph-chips{display:flex;gap:5px;flex-wrap:wrap}
.gpph-chips span{font-size:12px;font-weight:700;padding:3px 8px;border-radius:99px;background:var(--accent-dim);color:var(--text);font-variant-numeric:tabular-nums}
.gpph-dash{color:var(--text3)}
.gpph-empty{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:20px;text-align:center;color:var(--text3);font-size:var(--fs-sm)}
.gpgf-xt{background:var(--surface);border:1px solid var(--border);border-radius:16px;padding:14px 18px 16px;margin:0 0 14px}
.gpgf-xt-top{display:flex;justify-content:space-between;align-items:center;gap:12px}
.gpgf-xt-tag{display:inline-flex;align-items:center;font-size:10.5px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:var(--text2);background:var(--surface2);border-radius:99px;padding:4px 10px}
.gpgf-xt-open{flex-shrink:0;font:inherit;font-size:12.5px;font-weight:700;color:var(--text2);background:transparent;border:1px solid var(--border);border-radius:99px;padding:5px 11px;cursor:pointer}
.gpgf-xt-open:hover{background:var(--surface2)}
.gpgf-xt-tiles{display:grid;gap:8px;margin-top:12px}
.gpgf-xt-tiles>div{background:var(--surface2);border-radius:12px;padding:10px 10px 9px;min-width:0}
.gpgf-xt-tiles b{display:block;font-family:'Barlow Condensed',sans-serif;font-size:26px;font-weight:800;line-height:1;color:var(--text);font-variant-numeric:tabular-nums}
.gpgf-xt-tiles b small{font-size:13px;margin-left:2px;font-weight:700}
.gpgf-xt-tiles span{display:block;font-size:11px;color:var(--text3);font-weight:600;margin-top:3px;overflow-wrap:anywhere}
.gpgf-xt-foot{margin-top:10px;font-size:12.5px;color:var(--text3);line-height:1.45}
/* The start test card (2026-10-15, option A, goal-first.js _gpgfTestCardHtml):
   banner card, steps as a timeline, the current jump in a panel. Also the
   later-block new-goal test. */
.gpst{position:relative;margin:14px 0;border-radius:20px;padding:20px;color:var(--hero-fg,#fff);background:radial-gradient(90% 55% at 95% 0%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%)}
.gpst-k{font-size:10.5px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:var(--hero-fg2,rgba(255,255,255,.85))}
.gpst-h{font-family:'Barlow Condensed',sans-serif;font-size:32px;font-weight:800;text-transform:uppercase;line-height:.95;margin-top:6px}
.gpst-p{font-size:13.5px;line-height:1.45;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:8px;max-width:56ch}
.gpst-bring{display:flex;gap:6px;flex-wrap:wrap;margin-top:12px}
.gpst-bring span{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;padding:5px 10px;border-radius:99px;background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpst-bring span.warn{box-shadow:0 0 0 1.5px var(--warn,#e0a100) inset}
.gpst-st{display:flex;gap:12px;margin-top:16px}
.gpst-node{flex:0 0 32px;display:flex;flex-direction:column;align-items:center}
.gpst-node b{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:16px;color:var(--hero-fg,#fff);background:var(--hero-b,#10192A);box-shadow:0 0 0 2px var(--hero-edge,rgba(255,255,255,.18))}
.gpst-node b.done{background:var(--good,#2e7d32);color:#fff;box-shadow:none}
.gpst-node b.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);box-shadow:0 0 0 4px var(--hero-line,rgba(255,255,255,.14))}
.gpst-node i{flex:1;width:2px;min-height:10px;background:var(--hero-edge,rgba(255,255,255,.18));margin-top:4px}
.gpst-sb{flex:1;min-width:0;padding-bottom:2px}
.gpst-t{display:flex;align-items:center;justify-content:flex-start;gap:10px;flex-wrap:wrap;font-weight:700;font-size:16px;line-height:1.3;min-height:30px}
.gpst-s{font-size:12.5px;line-height:1.45;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:2px}
.gpst-link{background:transparent;border:1px solid var(--hero-edge,rgba(255,255,255,.3));color:var(--hero-fg,#fff);border-radius:99px;padding:5px 12px;font:inherit;font-size:12.5px;font-weight:700;cursor:pointer}
.gpst-watch{margin:8px 0 6px;padding:12px 14px;background:var(--surface2);border:1px solid var(--border);border-radius:12px;font-size:var(--fs-meta);color:var(--text2);line-height:1.5;font-weight:400}
.gpst-acts1{margin-top:10px}
.gpst .gpst-b1{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border:0;border-radius:12px;font-weight:700}
.gpst .gpst-b1[disabled]{opacity:.5;cursor:default}
.gpst .gpst-b2{background:transparent;color:var(--hero-fg,#fff);border:1px solid var(--hero-edge,rgba(255,255,255,.3));border-radius:12px;font-weight:700}
.gpst-panel{margin-top:10px;padding:14px;border-radius:14px;background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpst-best{display:flex;align-items:flex-end;justify-content:space-between;gap:10px 14px;flex-wrap:wrap}
.gpst-n{font-family:'Barlow Condensed',sans-serif;font-size:46px;font-weight:800;line-height:.9;margin-top:4px;font-variant-numeric:tabular-nums}
.gpst-n small{font-size:18px;margin-left:3px}
.gpst-att{display:flex;gap:6px}
.gpst-att span{width:48px;height:46px;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;font-weight:700;background:var(--hero-b,#10192A);box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset;color:var(--hero-fg2,rgba(255,255,255,.85));font-variant-numeric:tabular-nums}
.gpst-att span b{font-family:'Barlow Condensed',sans-serif;font-size:16px;color:var(--hero-fg,#fff)}
.gpst-att span.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47)}
.gpst-att span.on b{color:var(--hero-btn-fg,#1B2A47)}
.gpst-box{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:12px;font-size:12.5px;font-weight:700}
.gpst-box em{flex-basis:100%;font-style:normal;font-weight:400;color:var(--hero-fg2,rgba(255,255,255,.85))}
.gpst-chip{background:transparent;color:var(--hero-fg,#fff);border:1px solid var(--hero-edge,rgba(255,255,255,.3));border-radius:99px;padding:6px 14px;font:inherit;font-weight:700;cursor:pointer}
.gpst-chip.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border-color:transparent}
.gpst-tape{display:flex;gap:8px;align-items:flex-start;margin-top:12px;padding:9px 11px;border-radius:10px;box-shadow:0 0 0 1.5px var(--warn,#e0a100) inset;font-size:12.5px;line-height:1.45;color:var(--hero-fg,#fff)}
.gpst-tape svg{margin-top:1px}
.gpst-acts{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px}
.gpst-acts.one{grid-template-columns:1fr}
.gpst-acts .btn{min-height:44px;padding:10px 12px;font-size:14px;white-space:normal;line-height:1.2}
.gpst-note{display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:10px}
.gpst-note .btn{background:transparent;color:var(--hero-fg,#fff);border:1px solid var(--hero-edge,rgba(255,255,255,.3))}
.gpst-panel [id^="jump-howto-"]{color:var(--text)}
/* Start test tiles, option C (2026-10-16): one tile per step, buttons inside their tile */
.gpst-tiles{display:grid;grid-template-columns:repeat(var(--gpst-n,3),minmax(0,1fr));gap:10px;margin-top:14px}
@media (max-width:760px){.gpst-tiles{grid-template-columns:1fr}}
.gpst-tl{display:flex;flex-direction:column;min-width:0;border-radius:14px;padding:13px 14px;background:rgba(255,255,255,.06);box-shadow:0 0 0 1px var(--hero-line,rgba(255,255,255,.14)) inset}
.gpst-tl.on{background:rgba(255,255,255,.12);box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.3)) inset}
.gpst-tl.ok{opacity:.78}
.gpst-tlt{display:flex;gap:9px;align-items:center;font-weight:700;font-size:15px;line-height:1.25}
.gpst-tln{flex:none;width:26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:15px;box-shadow:0 0 0 2px var(--hero-edge,rgba(255,255,255,.3)) inset;color:var(--hero-fg2,rgba(255,255,255,.85))}
.gpst-tln.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);box-shadow:none}
.gpst-tln.ok{background:rgba(255,255,255,.16);color:var(--hero-fg,#fff);box-shadow:none}
.gpst-tls{font-size:12.5px;line-height:1.45;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:6px}
.gpst-tla{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:auto;padding-top:12px}
.gpst-tla .btn{border-radius:99px;min-height:36px}
.gpst-tla .btn-ghost{background:transparent;color:var(--hero-fg,#fff);border:1px solid var(--hero-edge,rgba(255,255,255,.3))}
.gpst-tlatt{display:inline-flex;gap:5px}
.gpst-tlatt span{min-width:44px;height:36px;padding:0 6px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:16px;font-variant-numeric:tabular-nums;color:var(--hero-fg2,rgba(255,255,255,.85));background:rgba(255,255,255,.08);box-shadow:0 0 0 1px var(--hero-line,rgba(255,255,255,.14)) inset}
.gpst-tlatt span.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);box-shadow:none}
.gpst-tl .gpst-box,.gpst-tl .gpst-tape{margin-top:10px}
.gpst > .gpst-watch{margin-top:12px}
.gpst-howto{margin-top:12px}
.gpst-howto [id^="jump-howto-"]{color:var(--text)}
/* Week 12 test day (2026-10-15, A2): the choice as stacked tiles. */
.gpst-stack{display:grid;gap:8px;margin-top:10px}
.gpst-tile{display:flex;gap:12px;align-items:center;width:100%;text-align:left;border:0;border-radius:14px;padding:14px;font:inherit;cursor:pointer;color:var(--hero-fg,#fff);background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpst-tile.top{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);box-shadow:none}
.gpst-tile[disabled]{opacity:.55;cursor:default}
.gpst-tile-x{flex:1;min-width:0;display:flex;flex-direction:column}
.gpst-tile-t{font-family:'Barlow Condensed',sans-serif;font-size:22px;font-weight:800;text-transform:uppercase;line-height:1}
.gpst-tile-s{font-size:12.5px;line-height:1.4;margin-top:4px;opacity:.85}
.gpst-tag{align-self:flex-start;font-size:9.5px;font-weight:800;letter-spacing:1px;text-transform:uppercase;padding:4px 9px;border-radius:99px;background:var(--hero-a,#1B2A47);color:var(--hero-fg,#fff);margin-bottom:6px}
.gpst-q3{display:flex;gap:4px;flex-wrap:wrap;margin-top:8px}
.gpst-q3 span{font-size:10.5px;font-weight:700;padding:2px 8px;border-radius:99px;box-shadow:0 0 0 1px currentColor inset;opacity:.8}
.gpst-arr{flex:none;width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:18px;line-height:1;background:var(--hero-b,#10192A);color:var(--hero-fg,#fff)}
.gpst-tile.top .gpst-arr{background:var(--hero-btn-fg,#1B2A47);color:var(--hero-btn,#fff)}
/* Your next 12 weeks (2026-10-15, option B, autopilot-member.js
   _gpapGoalChoiceHtml): the .gpst banner card with the choice in it. */
.gpst.gpnx{margin:0 0 16px}
.gpnx-keep{display:block;width:100%;text-align:left;margin-top:14px;padding:14px;border-radius:14px;border:0;font:inherit;cursor:pointer;color:var(--hero-fg,#fff);background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpnx-keep.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);box-shadow:none}
.gpnx-keep b{display:block;font-family:'Barlow Condensed',sans-serif;font-size:28px;font-weight:800;text-transform:uppercase;line-height:1;margin-top:8px}
.gpnx-ss{display:block;font-size:12.5px;line-height:1.45;margin-top:6px;opacity:.85}
.gpnx-pills{display:flex;gap:6px;flex-wrap:wrap}
.gpnx-pills span{font-size:9.5px;font-weight:800;letter-spacing:1px;text-transform:uppercase;padding:4px 9px;border-radius:99px;background:var(--hero-a,#1B2A47);color:var(--hero-fg,#fff)}
.gpnx-keep:not(.on) .gpnx-pills span{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47)}
.gpnx-pills span.o{background:transparent;color:inherit;box-shadow:0 0 0 1.5px currentColor inset}
.gpnx-keep:not(.on) .gpnx-pills span.o{background:transparent;color:var(--hero-fg,#fff)}
.gpnx-lab{font-size:10.5px;font-weight:800;letter-spacing:1.3px;text-transform:uppercase;color:var(--hero-fg2,rgba(255,255,255,.85));margin:16px 0 8px}
.gpnx-grid{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.gpnx-tile{display:flex;flex-direction:column;text-align:left;padding:12px;border-radius:14px;border:0;font:inherit;cursor:pointer;min-width:0;color:var(--hero-fg,#fff);background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpnx-tile.wide{grid-column:1/-1}
.gpnx-tile.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);box-shadow:none}
.gpnx-tile b{font-family:'Barlow Condensed',sans-serif;font-size:19px;font-weight:800;text-transform:uppercase;line-height:1.05;overflow-wrap:anywhere}
.gpnx-tile span{font-size:11.5px;line-height:1.4;margin-top:5px;opacity:.85}
.gpnx-seg{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:4px;border-radius:14px;background:var(--hero-b,#10192A);box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpnx-seg button{border:0;border-radius:10px;padding:10px 8px;font:inherit;font-weight:700;font-size:14px;cursor:pointer;background:transparent;color:var(--hero-fg,#fff)}
.gpnx-seg button.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47)}
.gpnx-sum{margin-top:14px;padding:12px 14px;border-radius:14px;background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpnx-sum .gpnx-lab{margin:0 0 4px}
.gpnx-big{font-family:'Barlow Condensed',sans-serif;font-size:26px;font-weight:800;text-transform:uppercase;line-height:1.02;overflow-wrap:anywhere}
.gpnx-note{font-size:13.5px;line-height:1.5;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:14px}
.gpnx-note strong{color:var(--hero-fg,#fff)}
.gpnx-cta{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%;margin-top:14px;background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border:0;border-radius:14px;padding:15px 16px 15px 18px;font-family:'Barlow Condensed',sans-serif;font-size:20px;font-weight:800;text-transform:uppercase;letter-spacing:.3px;text-align:left;cursor:pointer}
.gpnx-cta em{font-style:normal;flex:none;width:32px;height:32px;border-radius:50%;background:var(--hero-btn-fg,#1B2A47);color:var(--hero-btn,#fff);display:flex;align-items:center;justify-content:center;font-size:17px}
.gpnx-cta[disabled]{opacity:.55;cursor:default}
.gpnx-up{margin-top:12px;padding:12px;border-radius:14px;background:var(--surface);color:var(--text)}
.gpnx-ax{margin-top:14px;font-size:13px;color:var(--hero-fg2,rgba(255,255,255,.85))}
.gpnx-ax b{font-family:'Barlow Condensed',sans-serif;font-size:20px;font-weight:800;text-transform:uppercase;color:var(--hero-fg,#fff);margin:0 2px}
.gpbd-coach{display:flex;flex-direction:column;align-items:flex-start;gap:4px}
.gpbd-ct{font-weight:700;font-size:15px}
.gpbd-coach .btn{margin-top:8px}
/* Jump tab: your weakness / your goal (2026-10-15, option A, jump-profile.js _jumpRenderDirection, members only). */
.gpwk{border-radius:18px;padding:18px 20px;margin-bottom:20px;color:var(--hero-fg,#fff);background:radial-gradient(90% 55% at 95% 0%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%)}
.gpwk-k{font-size:10.5px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;color:var(--hero-fg2,rgba(255,255,255,.85))}
.gpwk-t{font-family:'Barlow Condensed',sans-serif;font-size:34px;font-weight:800;text-transform:uppercase;line-height:.95;margin-top:6px;overflow-wrap:anywhere}
.gpwk-s{font-size:13.5px;line-height:1.45;color:var(--hero-fg2,rgba(255,255,255,.85));margin-top:8px}
.gpwk-two{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:14px}
.gpwk-bx{border-radius:12px;padding:10px 12px;background:var(--hero-line,rgba(255,255,255,.12));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset;min-width:0}
.gpwk-bx span{display:block;font-size:10.5px;font-weight:800;letter-spacing:1.2px;text-transform:uppercase;color:var(--hero-fg2,rgba(255,255,255,.85))}
.gpwk-bx b{display:block;font-family:'Barlow Condensed',sans-serif;font-size:20px;font-weight:800;text-transform:uppercase;line-height:1;margin-top:4px;overflow-wrap:anywhere}
.gpwk-bx.on{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);box-shadow:none}.gpwk-bx.on span{color:var(--hero-btn-fg,#1B2A47);opacity:.7}
.gpwk-hint{display:flex;gap:10px;align-items:center;margin-top:12px;padding:10px 12px;border-radius:12px;border:1px dashed var(--hero-edge,rgba(255,255,255,.3));font-size:12.5px;line-height:1.4}
.gpwk-hint b{flex:none;font-family:'Barlow Condensed',sans-serif;font-size:18px;font-weight:800;text-transform:uppercase;background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border-radius:8px;padding:4px 8px}
.gpp1-line{display:flex;flex-direction:column;margin:14px 0;padding:14px 16px;border:1px solid var(--border);border-radius:12px;background:var(--surface)}
.gpp1-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.2px;color:var(--text2);font-weight:700}
.gpp1-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-top:4px}
.gpp1-row>b{font-size:17px;font-weight:700;color:var(--text)}
.gpp1-row em{font-style:normal;font-size:13px;color:var(--text2);white-space:nowrap}
.gpp1-row em b{font-weight:700;color:var(--text)}
.gpp1-bar{display:flex;gap:4px;margin-top:9px}
.gpp1-bar i{flex:1;height:5px;border-radius:3px;background:var(--surface3,var(--border))}
.gpp1-bar i.on{background:var(--accent)}
.gpp1-line span{margin-top:8px;font-size:12.5px;line-height:1.5;color:var(--text2)}
.gpp1-opt{display:flex;align-items:center;gap:14px;margin-top:16px;padding:14px 16px;border-radius:14px;background:var(--hero-line);box-shadow:0 0 0 1px var(--hero-edge) inset}
.gpp1-price{display:flex;flex-direction:column;flex:none}
.gpp1-price b{font-family:'Barlow Condensed',sans-serif;font-size:40px;line-height:.95;font-weight:800;color:var(--hero-fg)}
.gpp1-price span{font-size:11px;font-weight:700;letter-spacing:.8px;text-transform:uppercase;color:var(--hero-fg2)}
.gpp1-price s{font-family:'Barlow Condensed',sans-serif;font-size:20px;line-height:1;font-weight:700;color:var(--hero-fg2);text-decoration-thickness:2px}
.gpp1-why{font-size:13.5px;line-height:1.5;color:var(--hero-fg2);min-width:0}
.gpp1-wk{margin:14px 0;padding:18px 20px;border-radius:16px;color:var(--hero-fg,#fff);background:radial-gradient(120% 70% at 88% -10%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%)}
.gpp1-wk-top{display:flex;justify-content:space-between;align-items:flex-end;gap:10px 16px;flex-wrap:wrap}
.gpp1-wk-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.3px;font-weight:700;color:var(--hero-fg2,rgba(255,255,255,.8))}
.gpp1-wk-big{font-family:'Barlow Condensed',sans-serif;font-weight:800;text-transform:uppercase;font-size:34px;line-height:1;margin-top:5px;overflow-wrap:anywhere}
.gpp1-wk-big span{color:var(--hero-fg2,rgba(255,255,255,.8));font-size:22px}
.gpp1-wk-end{text-align:right}
.gpp1-wk-end b{display:block;font-family:'Barlow Condensed',sans-serif;font-size:22px;font-weight:800;text-transform:uppercase;line-height:1;margin-top:4px}
.gpp1-wk-bar{display:flex;gap:5px;margin-top:14px}
.gpp1-wk-bar i{flex:1;height:6px;border-radius:99px;background:var(--hero-line,rgba(255,255,255,.14));box-shadow:0 0 0 1px var(--hero-edge,rgba(255,255,255,.18)) inset}
.gpp1-wk-bar i.on{background:var(--hero-fg,#fff)}
.gpp1-wk-sub{font-size:13px;line-height:1.5;color:var(--hero-fg2,rgba(255,255,255,.8));margin-top:10px}
.gpp1-gift{display:flex;align-items:center;gap:10px;margin-top:10px;padding:10px 12px;border-radius:12px;border:1px dashed var(--hero-edge);font-size:13.5px;line-height:1.45;color:var(--hero-fg)}
.gpp1-gift b{flex:none;font-family:'Barlow Condensed',sans-serif;font-size:22px;font-weight:800;line-height:1;text-transform:uppercase;background:var(--hero-btn);color:var(--hero-btn-fg);border-radius:8px;padding:5px 8px}
.gpp1-alt{display:block;width:100%;margin-top:10px;background:transparent;border:1px solid var(--hero-edge);color:var(--hero-fg);border-radius:12px;padding:12px 14px;font-size:14px;font-weight:600;cursor:pointer}
.gpp1-alt[disabled]{opacity:.55;cursor:default}
.gpp1-note{font-size:12.5px;line-height:1.5;color:var(--hero-fg2);margin-top:12px}

/* Your courses on Today (2026-10-18, courses-today.js, option B1): members who
   bought a course land on Today, so the covers sit under the Phase 1 card.
   Light stat-card family (same surface and border as the Today list), hero =
   the count, the covers drawn, one accent button. Theme tokens only. */
.gpct{margin:14px 0;padding:16px;border-radius:16px;background:var(--surface);border:1px solid var(--border);cursor:pointer}
.gpct-top{display:flex;align-items:flex-end;justify-content:space-between;gap:12px;margin-bottom:12px}
.gpct-k{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.3px;font-weight:700;color:var(--text3)}
.gpct-big{font-family:'Barlow Condensed',sans-serif;font-weight:800;text-transform:uppercase;font-size:40px;line-height:1;color:var(--text);margin-top:4px}
.gpct-big small{font-size:20px;margin-left:6px;color:var(--text2)}
.gpct-own{font-size:12px;font-weight:700;color:var(--accent);text-transform:uppercase;letter-spacing:.08em;padding-bottom:4px;white-space:nowrap}
.gpct-row{display:grid;gap:8px;margin-bottom:14px}
.gpct-n1{grid-template-columns:minmax(0,180px)}
.gpct-n2{grid-template-columns:repeat(2,minmax(0,1fr))}
.gpct-n3{grid-template-columns:repeat(3,minmax(0,1fr))}
.gpct-n4{grid-template-columns:repeat(4,minmax(0,1fr))}
.gpct-cv{position:relative;aspect-ratio:3/2;border-radius:10px;overflow:hidden;background:var(--surface2)}
.gpct-cv img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.gpct-btn{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;border:0;border-radius:12px;padding:14px 16px;background:var(--accent);color:var(--btn-text);font:700 15px/1 'Barlow Semi Condensed',Barlow,sans-serif;letter-spacing:.06em;text-transform:uppercase;cursor:pointer}
.gpct-btn:focus-visible{outline:2px solid var(--text);outline-offset:2px}
@media (min-width:700px){.gpct-n2,.gpct-n3,.gpct-n4{grid-template-columns:repeat(auto-fill,180px)}.gpct-btn{width:auto;padding:13px 22px}}

/* Online coaching card on Today, option B (2026-10-16): what you get beside the price */
.gpcc-o{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);margin-bottom:12px;border:1px solid var(--border2);border-radius:20px;overflow:hidden;background:var(--surface)}
@media (max-width:760px){.gpcc-o{grid-template-columns:1fr}}
.gpcc-o-l{padding:22px 24px}
.gpcc-o-k{font-size:var(--fs-label);font-weight:700;letter-spacing:1.4px;text-transform:uppercase;color:var(--accent)}
.gpcc-o-h{font-family:'Barlow Condensed',sans-serif;font-weight:800;text-transform:uppercase;font-size:34px;line-height:.95;margin-top:6px;color:var(--text);text-wrap:balance}
.gpcc-o-p{font-size:14px;line-height:1.5;color:var(--text2);margin:8px 0 0}
.gpcc-o-inc{list-style:none;margin:16px 0 0;padding:0;display:grid;gap:10px}
.gpcc-o-inc li{display:flex;gap:11px;align-items:flex-start}
.gpcc-o-inc i{flex:none;width:34px;height:34px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:var(--accent-dim);color:var(--accent)}
.gpcc-o-inc b{display:block;font-size:14.5px;color:var(--text)}
.gpcc-o-inc span{font-size:12.5px;color:var(--text3)}
.gpcc-o-r{padding:22px 24px;background:var(--surface2);display:flex;flex-direction:column;gap:10px}
.gpcc-o-row{display:flex;justify-content:space-between;align-items:flex-end;gap:10px;padding:13px 15px;border-radius:14px;background:var(--surface);border:1px solid var(--border)}
.gpcc-o-t{font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:var(--text2)}
.gpcc-o-b{font-size:12.5px;color:var(--text3);margin-top:4px}
.gpcc-o-s{display:inline-block;margin-top:5px;font-size:11.5px;font-weight:700;color:var(--good);background:color-mix(in srgb,var(--good) 12%,transparent);padding:2px 8px;border-radius:99px}
.gpcc-o-n{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:40px;line-height:1;color:var(--text);white-space:nowrap;font-variant-numeric:tabular-nums}
.gpcc-o-n small{font-family:Barlow,sans-serif;font-size:13px;font-weight:500;color:var(--text3);margin-left:3px}
.gpcc-o-go{display:flex;align-items:center;justify-content:center;gap:8px;width:100%;min-height:48px;margin-top:auto;border-radius:12px;font-size:15px}
.gpcc-o-note{text-align:center;font-size:12.5px;color:var(--text3)}

/* ═══ MEMBER'S ROOM ANSWERS (2026-10-20) ═══ reply_to threads: label + name tag */
.cm-replying{display:flex;align-items:center;gap:5px;font-size:11px;color:var(--text3);margin-bottom:6px}
.cm-replying strong{color:var(--text2);font-weight:600}
.cm-replying-x{margin-left:auto;background:none;border:0;color:var(--text3);font-size:16px;line-height:1;padding:2px 6px;cursor:pointer}
.cm-tag{color:var(--accent);font-weight:700;background:color-mix(in srgb,var(--accent) 12%,transparent);border-radius:4px;padding:0 4px}

/* ═══ GET THE APP CARD (2026-10-20, install-card.js) ═══ banner-colour card, same family as the €49 card */
.gpin{position:relative;margin:0 0 16px;border-radius:18px;padding:18px 18px 16px;background-color:var(--hero-b);background-image:linear-gradient(135deg,var(--hero-a),var(--hero-b));color:var(--hero-fg);overflow:hidden;box-shadow:0 6px 20px rgba(0,0,0,.18)}
.gpin::before{content:"";position:absolute;inset:0;background-image:linear-gradient(var(--hero-grid,rgba(255,255,255,.05)) 1px,transparent 1px),linear-gradient(90deg,var(--hero-grid,rgba(255,255,255,.05)) 1px,transparent 1px);background-size:28px 28px;pointer-events:none}
.gpin>*{position:relative}
.gpin-eb{font:600 11.5px/1 'Barlow Semi Condensed',Barlow,sans-serif;letter-spacing:1.4px;text-transform:uppercase;color:var(--hero-fg2)}
.gpin-t{font:800 30px/.95 'Barlow Condensed',sans-serif;text-transform:uppercase;margin:8px 0 6px;padding-right:24px;color:var(--hero-fg)}
.gpin-modal .gpin-t{margin-top:0}
.gpin-s{font-size:14px;line-height:1.4;color:var(--hero-fg2);margin:0 0 14px}
.gpin-after{margin:10px 0 0;text-align:center}
.gpin-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(0,1fr));gap:8px}
.gpin-st{background:rgba(255,255,255,.10);border:1px solid rgba(255,255,255,.16);border-radius:12px;padding:10px 6px 9px;text-align:center;font:600 12.5px/1.2 Barlow,sans-serif;color:var(--hero-fg)}
.gpin-n{display:block;font:800 13px/1 'Barlow Condensed',sans-serif;opacity:.7;margin-bottom:6px}
.gpin-st svg{width:26px;height:26px;display:block;margin:0 auto 6px}
.gpin-btn{width:100%;border:0;border-radius:12px;padding:14px;background:var(--hero-btn);color:var(--hero-btn-fg);font:800 18px/1 'Barlow Condensed',sans-serif;letter-spacing:.5px;text-transform:uppercase;cursor:pointer}
.gpin-link{display:block;margin:12px auto 0;background:none;border:0;color:var(--hero-fg2);font:600 13px/1.2 Barlow,sans-serif;text-decoration:underline;cursor:pointer}
.gpin-x{position:absolute;top:10px;right:10px;width:32px;height:32px;border:0;background:none;color:var(--hero-fg2);font-size:22px;line-height:1;cursor:pointer;z-index:1}
.gpin-qrrow{display:flex;gap:16px;align-items:center}
.gpin-qr{flex:none;background:#fff;border-radius:12px;padding:8px;line-height:0}
.gpin-qr img{width:104px;height:104px;display:block}
.gpin-qrt{font:500 14px/1.4 Barlow,sans-serif;color:var(--hero-fg2)}
.gpin-qrt b{color:var(--hero-fg);font-weight:700}

/* ═══ REVIEW GIFT, NAMED IN THE FORM (2026-10-21) ═══ chip at "What's changed" + check before sending */
.gpfb-q-gift{border-radius:12px;padding:10px 14px;margin:6px 0 8px}
.gpfb-q-gb{font-weight:700;font-size:15px;line-height:1.2}
.gpfb-giftcheck{margin:14px 0 4px;padding:14px 16px;border-radius:12px;color:var(--hero-fg,#fff);background-color:var(--hero-b,#1B2A47);background-image:linear-gradient(135deg,var(--hero-a,#1B2A47),var(--hero-b,#0F1A2E))}
.gpfb-gc-t{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:22px;line-height:1;text-transform:uppercase;margin-bottom:6px}
.gpfb-gc-s{font-size:14px;line-height:1.4;color:var(--hero-fg2,rgba(255,255,255,.85));margin-bottom:12px}
.gpfb-gc-b{display:flex;gap:8px;flex-wrap:wrap}
.gpfb-giftcheck .gpfb-gc-add{background:var(--hero-btn,#fff);color:var(--hero-btn-fg,#1B2A47);border:0;font-weight:700}
.gpfb-giftcheck .gpfb-gc-skip{background:transparent;color:var(--hero-fg,#fff);border:1px solid rgba(255,255,255,.45)}

/* Start nudges (start-nudge.js, 2026-10-28): Dries' voice note card on Today, the session 1 card in Training, the notification ask. */
.gpsn{position:relative;background:var(--surface);border:2px solid #E8975A;border-radius:18px;padding:18px;margin:0 0 16px}
.gpsn-x{position:absolute;top:8px;right:10px;background:none;border:0;font-size:22px;line-height:1;color:var(--text3);cursor:pointer;padding:4px 6px}
.gpsn-who{display:flex;gap:12px;align-items:center;margin-bottom:10px;padding-right:24px}
.gpsn-av{width:46px;height:46px;border-radius:50%;background:var(--text);color:var(--surface);display:flex;align-items:center;justify-content:center;font-family:Barlow Condensed,sans-serif;font-weight:800;font-size:18px;flex-shrink:0}
.gpsn-nm{font-weight:800;font-size:16px;color:var(--text)}
.gpsn-sub{font-size:13px;color:var(--text3)}
.gpsn-txt{font-size:15px;color:var(--text);line-height:1.45;margin-bottom:12px}
.gpsn-pl{display:flex;align-items:center;gap:12px;background:var(--surface2);border-radius:12px;padding:10px 12px;margin-bottom:12px}
.gpsn-pl[hidden]{display:none}
.gpsn-pb{width:42px;height:42px;border-radius:50%;background:var(--text);color:var(--surface);border:0;display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}
.gpsn-bar{flex:1;height:6px;border-radius:3px;background:var(--surface3);overflow:hidden}
.gpsn-bar i{display:block;height:100%;width:0;background:#E8975A}
.gpsn-t{font-size:13px;font-weight:700;color:var(--text2);min-width:34px;text-align:right}
.gpsn-go,.gpsn-hb{width:100%;background:var(--text);color:var(--surface);border:0;border-radius:12px;padding:13px 16px;font-weight:700;font-size:15px;cursor:pointer}
.gpsn-hero{background:var(--text);color:var(--surface);border-radius:18px;padding:18px 20px;margin:14px 0}
.gpsn-hk{font-size:var(--fs-label);text-transform:uppercase;letter-spacing:1.2px;font-weight:700;opacity:.65}
.gpsn-hh{font-family:Barlow Condensed,sans-serif;font-weight:800;font-size:28px;line-height:1.05;text-transform:uppercase;margin:6px 0 4px}
.gpsn-hs{font-size:14px;opacity:.8;margin-bottom:14px}
.gpsn-hb{background:var(--surface);color:var(--text)}
.gpsn-ask{position:fixed;inset:0;background:rgba(10,16,24,.55);z-index:10050;display:flex;align-items:flex-end;justify-content:center}
.gpsn-askc{background:var(--surface);width:100%;max-width:520px;border-radius:22px 22px 0 0;padding:22px 20px calc(26px + env(safe-area-inset-bottom))}
@media(min-width:700px){.gpsn-ask{align-items:center}
.gpsn-askc{border-radius:22px}
}
.gpsn-askh{font-family:Barlow Condensed,sans-serif;font-weight:800;font-size:28px;text-transform:uppercase;color:var(--text);margin-bottom:6px}
.gpsn-askp{font-size:15px;color:var(--text2);margin-bottom:16px}
.gpsn-asky{width:100%;background:var(--text);color:var(--surface);border:0;border-radius:12px;padding:13px;font-weight:700;font-size:15px;cursor:pointer;margin-bottom:8px}
.gpsn-askn{width:100%;background:none;border:0;color:var(--text3);font-size:14px;padding:8px;cursor:pointer}

/* Coach voice notes (voice-notes-coach.js, 2026-10-28): Plan > Program Templates > GP Membership. */
.gpvn{background:var(--surface);border:2px solid #E8975A;border-radius:14px;padding:18px}
.gpvn-head{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap}
.gpvn-h{font-family:Barlow Condensed,sans-serif;font-weight:800;font-size:22px;text-transform:uppercase;color:var(--text)}
.gpvn-n{font-size:13px;color:var(--text2)}
.gpvn-p{font-size:13.5px;color:var(--text2);margin:4px 0 14px}
.gpvn-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px}
.gpvn-tile{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:14px;display:flex;flex-direction:column;gap:10px}
.gpvn-goal{font-weight:800;font-size:15px;color:var(--text)}
.gpvn-none{font-size:13px;color:var(--text3)}
.gpvn-rec{display:inline-flex;align-items:center;justify-content:center;gap:6px;width:100%}
.gpvn-au{width:100%;height:38px}
.gpvn-row{display:flex;gap:8px}
.gpvn-recbox{display:flex;align-items:center;gap:10px;background:rgba(196,71,47,.08);border:1px solid rgba(196,71,47,.35);border-radius:10px;padding:10px}
.gpvn-recbox b{color:#c4472f;font-size:14px}
.gpvn-dot{width:12px;height:12px;border-radius:50%;background:#c4472f;animation:gpvnPulse 1s ease-in-out infinite}
@keyframes gpvnPulse{50%{opacity:.35}}
.gpvn-stop{width:100%;background:#c4472f;color:#fff;border:0}
.gpvn-warn{font-size:12.5px;color:#b4622a;background:rgba(232,151,90,.12);border-radius:8px;padding:8px 10px;margin-bottom:10px}
.gpvn button[disabled]{opacity:.45;cursor:default}

/* App stores note on Today (2026-10-28, app-stores-note.js, prefix gpas). */
.gpas{display:flex;gap:14px;align-items:center;margin:0 0 16px;padding:14px 12px 14px 14px;border-radius:16px;background:var(--surface);border:1px solid var(--border);box-shadow:0 1px 2px rgba(16,24,40,.04),0 8px 24px -12px rgba(16,24,40,.18)}
.gpas-ic{flex:none;width:48px;height:48px;border-radius:12px;overflow:hidden;box-shadow:0 0 0 1px rgba(16,24,40,.08),0 6px 14px -6px rgba(16,24,40,.35)}
.gpas-ic img{width:100%;height:100%;display:block}
.gpas-tx{flex:1;min-width:0}
.gpas-tx b{display:block;font-size:15px;line-height:1.25;font-weight:700;color:var(--text)}
.gpas-tx span{display:block;font-size:13px;line-height:1.4;color:var(--text2);margin-top:3px}
.gpas-pill{flex:none;display:inline-flex;align-items:center;gap:7px;padding:7px 11px;border-radius:999px;background:var(--surface2);font-size:11.5px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--text)}
.gpas-pill i{width:7px;height:7px;border-radius:50%;background:var(--hero-a);box-shadow:0 0 0 3px rgba(43,184,236,.18)}
.gpas-x{flex:none;align-self:flex-start;border:0;background:none;font-size:20px;line-height:1;color:var(--text3);padding:4px 6px;min-width:32px;min-height:32px;cursor:pointer}
@media(max-width:520px){.gpas-pill{display:none}}

/* ── Speed Club (2026-10-31, speed-club.js) ── */
.gpsc-offer{background:var(--accent);color:#fff;border-radius:16px;padding:18px 16px 14px;margin:0 0 14px}
.gpsc-k{font-size:10.5px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;opacity:.8}
.gpsc-h{font-family:"Barlow Condensed",sans-serif;font-weight:800;font-size:24px;line-height:1.05;text-transform:uppercase;margin:6px 0}
.gpsc-p{font-size:13px;line-height:1.45;opacity:.92}
.gpsc-price{display:flex;align-items:baseline;gap:8px;margin-top:12px;flex-wrap:wrap}
.gpsc-price b{font-family:"Barlow Condensed",sans-serif;font-weight:800;font-size:36px;line-height:1}
.gpsc-price s{font-size:16px;opacity:.6}
.gpsc-price span{font-size:12px;opacity:.85}
.gpsc-cd{display:flex;gap:6px;margin-top:10px}
.gpsc-cd div{flex:1;background:rgba(255,255,255,.13);border-radius:8px;text-align:center;padding:6px 0}
.gpsc-cd b{display:block;font-family:"Barlow Condensed",sans-serif;font-weight:800;font-size:20px;line-height:1}
.gpsc-cd i{font-style:normal;font-size:9px;font-weight:700;letter-spacing:1px;opacity:.7;text-transform:uppercase}
.gpsc-go{display:block;width:100%;margin-top:12px;border:0;border-radius:10px;padding:12px;background:#fff;color:var(--accent);font-weight:800;font-size:14px;cursor:pointer}
.gpsc-go:disabled{opacity:.6}
.gpsc-fine{font-size:11.5px;opacity:.78;margin-top:8px;text-align:center}
.gpsc-mine{display:flex;align-items:center;gap:12px;background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:14px;padding:14px 16px;margin:0 0 14px}
.gpsc-mine .gpsc-k{color:var(--accent);opacity:1}
.gpsc-mine .gpsc-p{color:var(--text2)}
.gpsc-mine .gpsc-go{background:var(--accent);color:#fff;padding:10px 14px}
.gpsc-mvs{padding:4px 14px}
.gpsc-mv{padding:10px 0;border-top:1px solid var(--border)}
.gpsc-mv:first-child{border-top:0}
.gpsc-mv b{display:block;font-size:var(--fs-sm)}
.gpsc-mv span{font-size:var(--fs-meta);color:var(--text2)}
.gpsc-recap{border-left:3px solid var(--accent)}
.gpsc-recap .gpsc-k{color:var(--accent);opacity:1}
.gpsc-recap .gpsc-p{color:var(--text2)}
.gpsc-chat .gpsc-k{color:var(--accent);opacity:1;margin-bottom:8px}
.gpsc-msgs{max-height:340px;overflow:auto}
.gpsc-msg{padding:8px 0;border-top:1px solid var(--border)}
.gpsc-msg:first-child{border-top:0}
.gpsc-msg.coach .gpsc-who{color:var(--accent)}
.gpsc-who{font-size:var(--fs-meta);font-weight:700;display:flex;gap:8px;align-items:center}
.gpsc-who span{font-weight:400;color:var(--text3)}
.gpsc-who button{margin-left:auto;background:none;border:0;color:var(--text3);font-size:11px;text-decoration:underline;cursor:pointer}
.gpsc-body{font-size:var(--fs-sm);white-space:pre-wrap;margin-top:2px}
.gpsc-empty{font-size:var(--fs-sm);color:var(--text3);padding:4px 0 8px}
.gpsc-say{display:flex;gap:8px;align-items:flex-end;margin-top:10px}
.gpsc-say textarea{flex:1;min-width:0;resize:vertical;border:1px solid var(--border);border-radius:9px;padding:8px 10px;background:var(--surface2);color:var(--text);font:inherit;font-size:var(--fs-sm)}
.gpsc-bill{display:flex;align-items:center;gap:10px;margin-top:22px}
.gpsc-bill .gpsc-k{color:var(--text3);opacity:1}
.gpp1-adds{margin:2px 0 14px;font-size:14px;line-height:1.5}
.gpp1-adds div{position:relative;padding:6px 0 6px 22px;border-top:1px solid var(--hero-edge)}
.gpp1-adds span{position:absolute;left:0;color:var(--hero-btn);font-weight:800}

/* GP Method Phase 1: "your offer opens in week 4" (2026-10-31, option B) */
.gpp1-soon{margin:14px 0 0}
.gpp1-wk-end b{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:18px;text-transform:uppercase}
.gpp1-soon-bar{display:flex;gap:6px;margin-top:16px}
.gpp1-soon-bar div{flex:1}
.gpp1-soon-bar i{display:block;height:6px;border-radius:3px;background:rgba(255,255,255,.18)}
.gpp1-soon-bar .on i{background:var(--hero-fg,#fff)}
.gpp1-soon-bar .offer i{background:#2BB8EC}
.gpp1-soon-bar span{display:block;margin-top:6px;font-size:10.5px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:rgba(255,255,255,.6)}
.gpp1-soon-bar .offer span{color:#7DD4F0}

/* Speed Club card, option B: normal price against theirs (2026-10-31) */
.gpsc-cmp{margin-top:14px;border-radius:12px;overflow:hidden;border:1px solid rgba(255,255,255,.18)}
.gpsc-cmp>div{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 14px}
.gpsc-cmp-n{font-size:13.5px;opacity:.75}.gpsc-cmp-n s{font-family:'Barlow Condensed',sans-serif;font-weight:700;font-size:18px}
.gpsc-cmp-y{background:rgba(43,184,236,.18);border-top:1px solid rgba(255,255,255,.18);font-size:12px}
.gpsc-cmp-y span:first-child{font-weight:700;font-size:14px}.gpsc-cmp-y b{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:34px;line-height:1}
.gpsc-save{font-size:13px;opacity:.9;margin-top:8px}
.gpsc-ends{font-size:10.5px;font-weight:800;letter-spacing:1.4px;text-transform:uppercase;opacity:.8;margin-top:14px}
/* Speed Club setup "are you sure" (2026-10-31) */
.gpsc-ask{margin-top:12px;background:#fff;color:#16202B;border-radius:12px;padding:14px}
.gpsc-ask-h{font-family:'Barlow Condensed',sans-serif;font-weight:800;font-size:20px;line-height:1.1;text-transform:uppercase}
.gpsc-ask-p{font-size:13.5px;line-height:1.5;margin-top:6px;color:#3a4654}
.gpsc-ask-b{display:flex;gap:8px;margin-top:12px}.gpsc-ask-b .btn{flex:1}.gpsc-ask-b .btn-accent{flex:1.4}
.gpsc-fine.gpsc-warn{opacity:1;background:rgba(255,200,87,.16);border:1px solid rgba(255,200,87,.5);color:#FFE3A3;border-radius:9px;padding:8px 10px;text-align:left}

/* Session 1 coach card, option A: the dark week-card style (2026-10-31) */
.gpsn.gpp1-wk{border:0;padding:18px 20px 20px;color:var(--hero-fg,#fff);background:radial-gradient(120% 70% at 88% -10%,var(--hero-glow,transparent),transparent 62%),linear-gradient(165deg,var(--hero-a,#1B2A47) 0%,var(--hero-b,#10192A) 100%)}
.gpp1-wk .gpsn-x{color:rgba(255,255,255,.6)}
.gpp1-wk .gpsn-who{margin-bottom:0}
.gpp1-wk .gpsn-av{width:38px;height:38px;font-size:15px;background:#fff;color:#1C2A45}
.gpsn-big{margin-top:12px}
.gpp1-wk .gpsn-txt{font-size:14px;margin:8px 0 0;color:var(--hero-fg2,rgba(255,255,255,.85))}
.gpp1-wk .gpsn-pl{background:rgba(255,255,255,.08);margin:14px 0 0}
.gpp1-wk .gpsn-pb{background:rgba(255,255,255,.16);color:#fff}
.gpp1-wk .gpsn-bar{background:rgba(255,255,255,.2)}.gpp1-wk .gpsn-bar i{background:#2BB8EC}
.gpp1-wk .gpsn-t{color:rgba(255,255,255,.8)}
.gpsn-go2{margin-top:16px}

/* Speed tracker by week: a past week with nothing logged (2026-10-31) */
.ssa-st.m i{background:transparent;border-style:dashed;color:var(--text3)}
.ssa-st.m span{color:var(--text3)}

/* Phase chat, option B (2026-11-01, speed-club.js): the row under the cards,
   the chat screen over the page, the Speed tab dot, the bell Reply. */
.gpsc-row{display:flex;align-items:center;gap:12px;width:100%;margin-top:14px;padding:14px 16px;text-align:left;cursor:pointer;font:inherit;color:inherit}
.gpsc-av{position:relative;flex:none;width:46px;height:46px;border-radius:50%;background:var(--accent);color:#fff;display:grid;place-items:center;font-family:"Barlow Condensed",sans-serif;font-weight:800;font-size:16px}
.gpsc-av i{position:absolute;top:-4px;right:-4px;min-width:20px;height:20px;padding:0 5px;border-radius:10px;background:#E8975A;color:#fff;font:800 11px/20px Barlow,sans-serif;font-style:normal;text-align:center;border:2px solid var(--surface);box-sizing:border-box;line-height:16px}
.gpsc-av.big{width:64px;height:64px;font-size:22px;margin:0 auto}
.gpsc-row-t{flex:1;min-width:0;display:block}
.gpsc-row-t b{display:block;font-family:"Barlow Condensed",sans-serif;font-weight:800;font-size:18px;line-height:1.1;text-transform:uppercase;color:var(--text)}
.gpsc-row-t>span{display:block;font-size:13px;color:var(--text2);margin-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gpsc-row-t>span b{display:inline;font:inherit;font-weight:700;text-transform:none;color:var(--text)}
.gpsc-wait{color:var(--text3)}
.gpsc-row-c{flex:none;font-weight:700;font-size:13.5px;color:var(--accent)}
body.gpsc-ov-on{overflow:hidden}
.gpsc-ov{position:fixed;inset:0;z-index:190;background:var(--bg);display:flex;justify-content:center}
.gpsc-ov-in{width:100%;max-width:640px;height:100%;display:flex;flex-direction:column;background:var(--bg)}
.gpsc-ov-h{display:flex;align-items:center;gap:12px;padding:12px 14px;padding-top:calc(12px + env(safe-area-inset-top,0px));background:var(--surface);border-bottom:1px solid var(--border)}
.gpsc-ov-h .gpsc-av{width:38px;height:38px;font-size:14px}
.gpsc-ov-h b{display:block;font-family:"Barlow Condensed",sans-serif;font-weight:800;font-size:18px;line-height:1.1;text-transform:uppercase;color:var(--text)}
.gpsc-ov-h div span{font-size:12px;color:var(--text3)}
.gpsc-back{background:none;border:0;font-size:24px;line-height:1;color:var(--text2);cursor:pointer;padding:4px 6px}
.gpsc-tabs{display:flex;gap:6px;padding:10px 14px;border-bottom:1px solid var(--border);background:var(--surface);overflow-x:auto}
.gpsc-tabs button{position:relative;flex:none;font:700 13px Barlow,sans-serif;padding:7px 12px;border-radius:999px;border:0;background:var(--surface2);color:var(--text2);cursor:pointer}
.gpsc-tabs button.on{background:var(--accent);color:#fff}
.gpsc-tabs button i{display:inline-block;width:7px;height:7px;border-radius:50%;background:#E8975A;margin-left:6px;vertical-align:2px}
.gpsc-ov-b{flex:1;overflow-y:auto;padding:4px 14px 12px;-webkit-overflow-scrolling:touch}
.gpsc-none{text-align:center;padding:40px 18px;color:var(--text2)}
.gpsc-none b{display:block;font-family:"Barlow Condensed",sans-serif;font-weight:800;font-size:22px;text-transform:uppercase;color:var(--text);margin-top:14px}
.gpsc-none p{font-size:14px;line-height:1.5;margin:6px 0 0}
.gpsc-chips{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:18px}
.gpsc-chips button{font:700 13.5px Barlow,sans-serif;padding:9px 14px;border-radius:999px;border:1.5px solid var(--accent);color:var(--accent);background:var(--surface);cursor:pointer}
.gpsc-pin{margin:12px 0 4px;background:var(--surface);border:1px solid var(--border);border-left:4px solid #E8975A;border-radius:12px;padding:10px 12px;font-size:13.5px;line-height:1.45;color:var(--text);white-space:pre-wrap}
.gpsc-pin div{font:700 10.5px Barlow,sans-serif;letter-spacing:1px;text-transform:uppercase;color:#C77A3E;margin-bottom:3px;white-space:normal}
.gpsc-pin div button,.gpsc-bt button{background:none;border:0;padding:0 0 0 8px;font:inherit;font-size:11px;letter-spacing:0;text-transform:none;color:inherit;text-decoration:underline;cursor:pointer}
.gpsc-lab{text-align:center;font:700 11px Barlow,sans-serif;letter-spacing:1px;text-transform:uppercase;color:var(--text3);margin:14px 0 4px}
.gpsc-b{display:flex;gap:8px;margin:10px 0;align-items:flex-end}
.gpsc-b.mine{flex-direction:row-reverse}
.gpsc-bav{flex:none;width:30px;height:30px;border-radius:50%;display:grid;place-items:center;font-family:"Barlow Condensed",sans-serif;font-weight:800;font-size:11px;background:var(--surface2);color:var(--text2)}
.gpsc-b.coach .gpsc-bav{background:var(--accent);color:#fff}
.gpsc-bb{max-width:78%;background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:16px 16px 16px 4px;padding:9px 12px;font-size:14px;line-height:1.45;white-space:pre-wrap;word-wrap:break-word}
.gpsc-bb>b{display:block;font-size:11.5px;opacity:.85;margin-bottom:2px;white-space:normal}
.gpsc-b.coach .gpsc-bb{background:var(--accent);color:#fff;border-color:transparent}
.gpsc-b.mine .gpsc-bb{background:color-mix(in srgb,#2BB8EC 14%,var(--surface));border-color:transparent;border-radius:16px 16px 4px 16px}
.gpsc-b.mine.coach .gpsc-bb{background:var(--accent);color:#fff}
.gpsc-b.reply{outline:2px solid #E8975A;outline-offset:4px;border-radius:18px}
.gpsc-bt{font-size:10.5px;opacity:.6;margin-top:3px;text-align:right;white-space:normal}
.gpsc-bt span{float:left}
.gpsc-bt span button:first-child{padding-left:0}
.gpsc-ov-f{padding:10px 12px 14px;padding-bottom:calc(14px + env(safe-area-inset-bottom,0px));background:var(--bg);border-top:1px solid var(--border)}
.gpsc-rep{font-size:12px;color:var(--text2);margin:0 0 6px 4px}
.gpsc-rep button{background:none;border:0;padding:0;font:inherit;color:var(--accent);cursor:pointer}
.gpsc-rep button.on{font-weight:700}
.gpsc-in{display:flex;gap:8px;align-items:flex-end;border:1px solid var(--border);border-radius:22px;padding:5px 5px 5px 14px;background:var(--surface)}
.gpsc-in:focus-within{border-color:var(--accent)}
.gpsc-in textarea{flex:1;min-width:0;border:0;outline:0;resize:none;background:transparent;color:var(--text);font:inherit;font-size:15px;line-height:1.4;padding:7px 0;max-height:130px}
.gpsc-send{flex:none;width:36px;height:36px;border-radius:50%;border:0;background:var(--accent);color:#fff;display:grid;place-items:center;cursor:pointer}
.gpsc-note{font-size:11.5px;color:var(--text3);margin-top:6px;text-align:center}
.ctab.gpsc-dot{position:relative}
.ctab.gpsc-dot::after{content:"";position:absolute;top:6px;right:10px;width:9px;height:9px;border-radius:50%;background:#E8975A;box-shadow:0 0 0 2px rgba(0,0,0,.2)}
.gpsc-nreply{align-self:center;flex:none;font:700 12.5px Barlow,sans-serif;color:#fff;background:var(--accent);padding:6px 11px;border-radius:999px}
