/* ===== redesign.css — locked design-guide tokens + Phase 1 nav ===== */
:root{
  --red:#DF2A3B; --red-dark:#B31F2D; --red-light:#FCE4E6;
  --blue:#1C74C0; --blue-dark:#125A96; --blue-light:#E3F0FA;
  --green:#1F9D63; --green-light:#E1F5EA;
  --amber:#F0A61B; --amber-dark:#B87B0F; --amber-light:#FDF1DC;
  --purple:#6D3FCC; --purple-light:#EFE6FA;
  --ink:#21232A; --text-2:#5B5F6B; --text-3:#8A8F9C;
  --border:#E4E6EB; --bg:#E1E4E9; --card:#FFFFFF;
  --card-shadow:0 2px 12px rgba(0,0,0,.10);
  --nav-h:72px;
}

body{background:var(--bg);}
/* old stylesheets (act.css, ahp2.css, workout.css) set #header/#content's fill
   from their own --light (#F8F8F8) token, separate from this file's --bg. #content
   covers nearly the entire visible page on every page, and was never overridden -
   meaning none of the --bg darkening work was actually reaching the screen.
   (#footer needs no override here - see the dedicated #footer rule below, which
   already sets background:none since the nav bar supplies its own fill.) */
#header{background:var(--bg);}
#content{background:var(--bg);}

/* --- Manrope (sans) --- */
@font-face{
  font-family:'Manrope Variable'; font-style:normal; font-display:swap; font-weight:200 800;
  src:url(/static/fonts/manrope-latin-wght-normal.woff2) format('woff2-variations');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Manrope Variable'; font-style:normal; font-display:swap; font-weight:200 800;
  src:url(/static/fonts/manrope-latin-ext-wght-normal.woff2) format('woff2-variations');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* --- Source Serif 4 (titles/long-form) — declared now, used in later phases --- */
@font-face{
  font-family:'Source Serif 4 Variable'; font-style:normal; font-display:swap; font-weight:200 900;
  src:url(/static/fonts/source-serif-4-latin-wght-normal.woff2) format('woff2-variations');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:'Source Serif 4 Variable'; font-style:normal; font-display:swap; font-weight:200 900;
  src:url(/static/fonts/source-serif-4-latin-ext-wght-normal.woff2) format('woff2-variations');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}

/* --- Phase 1 nav (new class names; no collision with old .nav_button/.nav_icon) --- */
nav.nav{height:var(--nav-h);background:rgba(255,255,255,.97);backdrop-filter:blur(20px);
  border-top:1px solid var(--border);display:flex;flex-shrink:0;}
nav.nav a.nav-btn{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:3px;padding:8px 4px;position:relative;text-decoration:none;background:none;
  transition:opacity .15s;-webkit-tap-highlight-color:transparent;}
nav.nav a.nav-btn:active{opacity:.6;}
.nav-icon{width:24px;height:24px;display:flex;align-items:center;justify-content:center;}
.nav-icon svg{width:22px;height:22px;stroke:var(--text-3);fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round;transition:stroke .2s;}
.nav-label{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:10px;font-weight:600;color:var(--text-3);transition:color .2s;}
.nav-btn.active .nav-icon svg{stroke:var(--red);}
.nav-btn.active .nav-label{color:var(--red);}
.nav-pip{position:absolute;top:6px;width:4px;height:4px;border-radius:50%;
  background:var(--red);opacity:0;transition:opacity .2s;}
.nav-btn.active .nav-pip{opacity:1;}

/* new nav owns the bottom chrome — fixes the double top-line/shadow (both
   bases) and the clipped nav on mobile_base pages (ahp2.css forces #footer
   height:48px). The nav's own border-top is the only divider. */
#footer{
  position:fixed; bottom:0; left:0; width:100%; z-index:50;
  height:auto; min-height:0; margin:0; padding:0;
  background:none; box-shadow:none; overflow:visible;
}
/* pages that use .login-footer (sign-in family, legal disclosure pages) have no bottom
   nav bar -- a fixed footer there just overlaps scrolling content instead of ending the
   page, so it needs to flow normally instead. */
#footer:has(.login-footer){position:static;}
/* ahp2.css's #content margin-bottom:5em exists to clear the old fixed-position
   footer on nav-bar pages. .login-footer pages are now position:static, so that
   margin is dead space stacking on top of #content's flex:1 grow-to-bottom gap. */
#content:has(+ #footer .login-footer){margin-bottom:0;}

/* --- Phase 2 page title --- */
.page-title{font-family:'Source Serif 4 Variable','Source Serif 4',Georgia,serif;
  font-size:22px;font-weight:700;color:var(--ink);line-height:1.15;
  display:flex;align-items:center;gap:7px;margin:2px 0 16px;}
.page-title .pt-emoji{font-size:20px;line-height:1;}
.title-row{display:flex;align-items:center;gap:6px;margin:2px 0 16px;}
.title-row .page-title{margin:0;}
.back-btn{display:flex;align-items:center;justify-content:center;width:34px;height:34px;
  margin-left:-6px;border:none;background:none;color:var(--ink);border-radius:10px;
  text-decoration:none;flex-shrink:0;}
.back-btn:active{background:var(--border);}
.back-btn svg{width:28px;height:28px;stroke:currentColor;fill:none;stroke-width:2.4;
  stroke-linecap:round;stroke-linejoin:round;}
.muted{color:var(--text-2);font-size:14px;margin:-10px 0 12px;}

/* --- Phase 0 catch-up: card / buttons / pill (ported from component_sample_sheet.html) --- */
.card{background:var(--card);border-radius:18px;box-shadow:var(--card-shadow);padding:14px 20px;margin-bottom:12px;}
.t-small{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:11px;font-weight:500;color:var(--text-2);}
.btn-primary,.btn-secondary{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;font-weight:600;padding:13px 20px;border-radius:14px;border:none;cursor:pointer;
  text-decoration:none;display:inline-block;}
.btn-primary{background:var(--red);color:#fff;}
.btn-primary:hover{background:var(--red-dark);}
.btn-secondary{background:var(--bg);color:var(--ink);border:1px solid var(--border);}
.pill{display:inline-flex;align-items:center;border-radius:999px;padding:4px 8px;
  font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;}
.pill-red{background:var(--red-light);color:var(--red);}
.pill-blue{background:var(--blue-light);color:var(--blue);}
.pill-green{background:var(--green-light);color:var(--green);}
.pill-amber{background:var(--amber-light);color:var(--amber-dark);}

/* --- Phase 10: Cardio --- */
.cardio-plan-card{display:block;text-decoration:none;color:inherit;}
.cardio-plan-head{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.cardio-plan-title{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:15px;font-weight:700;color:var(--ink);}
.cardio-plan-chev{font-size:16px;color:var(--text-3);flex-shrink:0;}
.cardio-plan-desc{font-size:13px;color:var(--text-2);line-height:1.55;margin:2px 0 0;}
.cardio-notice{font-size:13px;color:var(--text-2);line-height:1.5;margin:0 0 12px;}
.cardio-plans-head.lib-section-head-text{margin:4px 0 10px;}
.cardio-page p{font-size:13px;font-weight:400;color:var(--text-2);line-height:1.6;margin:0 0 12px;}
.cardio-page p:last-child{margin-bottom:0;}
.cardio-stage-row{display:flex;align-items:center;justify-content:space-between;gap:12px;}
.cardio-stage-label{font-size:13px;font-weight:700;color:var(--ink);}
.cardio-stage-select{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;font-weight:600;color:var(--ink);background:var(--bg);border:1px solid var(--border);
  border-radius:10px;padding:8px 10px;}
.cardio-freq{font-size:12px;color:var(--text-3);margin-top:2px;}
.cardio-instruction{font-size:13px;font-weight:400;color:var(--text-2);line-height:1.6;}
.cardio-instruction b{color:var(--ink);}
.cardio-timer-display{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:20px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;text-align:center;margin:8px 0;}
.cardio-difficulty-label{font-size:13px;font-weight:700;color:var(--ink);margin:0 0 10px;}
.cardio-btn-row{display:flex;gap:8px;justify-content:center;}
.cardio-btn-row>*{flex:1;max-width:220px;text-align:center;}
.cardio-hint{font-size:12px;color:var(--text-3);margin-top:10px;text-align:center;}
.cardio-feedback-block{margin-top:16px;padding-top:16px;border-top:1px solid var(--border);}
.cardio-save-row{text-align:center;margin-top:16px;}
.cardio-save-btn.btn-primary,.cardio-save-btn.btn-secondary{min-width:160px;}
.cardio-series-row{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:9px 0;border-bottom:1px solid var(--border);font-size:13px;}
.cardio-series-row:last-child{border-bottom:none;}
.cardio-series-letter{font-weight:700;color:var(--ink);}
.cardio-series-range{color:var(--text-2);}
.cardio-change-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px;}

/* --- Phase 10: HIIT interval sequence (page-scoped, no legacy .active/.show reuse) --- */
.hiit-sections{margin-top:24px;}
.hiit-section{margin-top:16px;}
.hiit-section:first-child{margin-top:0;}
.hiit-group{display:none;}
.hiit-group.hiit-group-show{display:block;margin-top:16px;}
.hiit-row{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:10px 0;border-bottom:1px solid var(--border);}
.hiit-row:last-child{border-bottom:none;}
.hiit-row-label{font-size:13px;font-weight:600;color:var(--text-2);}
.hiit-row.hiit-row-active .hiit-row-label{color:var(--red);font-weight:700;}
.hiit-row.hiit-row-active{background:var(--red-light);border-radius:10px;padding-left:8px;padding-right:8px;margin:0 -8px;}
.hiit-row-time{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;}
.hiit-group-head{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:10px 0 2px;}
.hiit-group-title{font-size:12px;font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;}
.hiit-skip-btn{background:var(--bg);color:var(--text-2);border:1px solid var(--border);
  border-radius:8px;padding:4px 10px;font-size:11px;font-weight:600;cursor:pointer;}
.hiit-skip-btn.hide{display:none;}
.hiit-finish-row{text-align:center;margin-top:14px;}
.hiit-finish-btn.btn-primary,.hiit-finish-btn.btn-secondary{min-width:160px;}
.cardio-section-label{font-size:13px;font-weight:700;color:var(--ink);margin:0 0 10px;}

/* --- Phase 10: Cardio finish (completion/celebration screen) ---
   No mockup reference exists for this screen anywhere (spec.md); designed fresh.
   Amber = success/completion per the locked color legend, distinct from the red
   hero cards used for recommendations elsewhere in the app. */
.cardio-finish-card{background:linear-gradient(135deg,var(--amber) 0%,var(--amber-dark) 100%);
  border-radius:20px;padding:26px 22px;text-align:center;margin-bottom:12px;position:relative;overflow:hidden;}
.cardio-finish-card::before{content:'';position:absolute;top:-30px;right:-24px;width:130px;height:130px;
  background:rgba(255,255,255,.12);border-radius:50%;}
.cardio-finish-ic{font-size:38px;line-height:1;margin-bottom:8px;}
.cardio-finish-title{font-family:'Source Serif 4 Variable','Source Serif 4',Georgia,serif;
  font-size:22px;font-weight:700;color:#fff;margin:0 0 6px;position:relative;}
.cardio-finish-sub{font-size:13px;color:rgba(255,255,255,.92);line-height:1.55;position:relative;max-width:320px;margin:0 auto;}
.cardio-quip-card{text-align:center;}
.cardio-quip-card p{font-style:italic;}
.cardio-quip-attr{font-size:16px;margin-top:2px;}
.cardio-finish-note{font-size:11px;font-weight:500;color:var(--text-3);line-height:1.5;}
.pill-purple{background:var(--purple-light);color:var(--purple);}

/* --- Phase 3a: Home --- */
.wordmark{font-family:'Source Serif 4 Variable','Source Serif 4',Georgia,serif;
  font-size:26px;font-weight:700;color:var(--ink);margin:0;}
.wordmark span{color:var(--red);}
.sec-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;
  color:var(--text-3);margin-bottom:8px;display:block;}

/* --- Phase 3b: Home today/calendar (shrunk + red/white split in 3d) --- */
[x-data="home_calendar"]{background:var(--card);border-radius:18px;box-shadow:var(--card-shadow);overflow:hidden;margin-bottom:12px;}
.day-panel{background: var(--red-dark);color:#fff;padding:14px 16px;margin-bottom:0;box-shadow:none;}
.day-panel.not-today{background:var(--text-2);}
.day-panel .sec-label{color:rgba(255,255,255,.92);margin-bottom:6px;}
.day-tiles{display:grid;grid-template-columns:repeat(5,1fr);gap:5px;}
.day-tile{background:rgba(0,0,0,.18);border:2px solid transparent;border-radius:12px;
  padding:6px 2px;text-align:center;font-size:9px;font-weight:600;color:#FFFFFFFF;
  cursor:pointer;}
.day-tile .emoji{font-size:15px;display:block;margin-bottom:3px;}
.day-tile.selected{background: white; color: var(--blue);}
.cal-card{padding:10px 16px;border-radius:0;box-shadow:none;}
.cal-head{display:grid;grid-template-columns:repeat(7,1fr);align-items:center;margin-bottom:6px;}
.cal-month{grid-column:3/6;text-align:center;font-size:12px;font-weight:700;color:var(--ink);}
.cal-nav-btn{width:26px;height:26px;display:flex;align-items:center;justify-content:center;
  font-size:15px;color:var(--blue);text-decoration:none;}
.cal-nav-btn:nth-of-type(1){grid-column:2;justify-self:start;}
.cal-nav-btn:nth-of-type(2){grid-column:6;justify-self:end;}
.cal-today-btn{grid-column:7;justify-self:end;margin-left:10px;font-size:10px;font-weight:700;
  color:var(--blue);text-decoration:none;padding:4px 6px;}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center;}
.cal-dow{font-size:9px;font-weight:700;color:var(--text-3);text-transform:uppercase;
  padding-bottom:2px;}
.cal-cell{position:relative;height:28px;display:flex;flex-direction:column;
  align-items:center;justify-content:center;border-radius:10px;border:2px solid transparent;
  font-size:11px;color:var(--ink);}
.cal-cell.cal-editable{cursor:pointer;}
.cal-cell.cal-disabled{color:var(--text-3);opacity:.4;}
.cal-cell.cal-past{color:var(--text-3);opacity:.4;cursor:pointer;}
.cal-cell.cal-today .cal-daynum{color:var(--red);font-weight:700;}
.cal-cell.selected{border-color:var(--red);}
.cal-dots{display:flex;gap:3px;margin-top:2px;}
.cal-dot{width:5px;height:5px;border-radius:50%;background:var(--border);}
.cal-dot.on{background:var(--blue);}

/* --- Phase 3c: Home body redesign + scroll fix --- */
.home-head{display:flex;justify-content:space-between;align-items:center;padding:8px 1rem 4px;}
.home-welcome{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--text-2);margin-bottom:2px;}
.home-avatar{width:34px;height:34px;border-radius:50%;background:var(--blue-light);color:var(--blue);
  display:flex;align-items:center;justify-content:center;font-size:17px;text-decoration:none;flex-shrink:0;}
.page.home-page{max-height:none;padding-bottom:calc(var(--nav-h) + 16px);}

.card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;}
.programs-row{display:flex;align-items:center;gap:12px;text-decoration:none;}
.link-sm{font-size:11px;color:var(--blue);font-weight:600;text-decoration:none;}
.prog-row{display:flex;align-items:center;gap:10px;padding:11px 0;text-decoration:none;
  border-bottom:1px solid var(--border);}
.prog-row:last-child{border-bottom:none;}
.prog-row-static{cursor:default;}
.prog-sub{font-size:11px;color:var(--text-3);flex-shrink:0;}

/* --- Phase 6: All Past Programs tabs --- */
.ptab-input{position:absolute;opacity:0;width:0;height:0;}
.ptab-row{display:flex;gap:8px;overflow-x:auto;margin-bottom:16px;}
.ptab-btn{flex-shrink:0;display:inline-flex;align-items:center;border-radius:999px;padding:8px 14px;
  background:var(--bg);border:1px solid var(--border);
  font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:12px;font-weight:700;color:var(--text-2);cursor:pointer;white-space:nowrap;}
.ptab-btn.ptab-disabled{opacity:.4;pointer-events:none;}
.ptab-panel{display:none;padding:4px 16px;}
#ptab-workouts:checked ~ .ptab-row label[for="ptab-workouts"],
#ptab-rehabs:checked ~ .ptab-row label[for="ptab-rehabs"],
#ptab-stretches:checked ~ .ptab-row label[for="ptab-stretches"],
#ptab-referrals:checked ~ .ptab-row label[for="ptab-referrals"]{background:var(--red);color:#fff;border-color:var(--red);}
#ptab-workouts:checked ~ #ptab-panel-workouts,
#ptab-rehabs:checked ~ #ptab-panel-rehabs,
#ptab-stretches:checked ~ #ptab-panel-stretches,
#ptab-referrals:checked ~ #ptab-panel-referrals{display:block;}
.prog-date{background:var(--blue-light);color:var(--blue);border-radius:10px;padding:7px 12px;font-size:12px;font-weight:700;flex-shrink:0;}
.prog-date-cur{background:var(--blue);color:#fff;}
.prog-label{font-size:13px;font-weight:500;color:var(--ink);flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.prog-badges{font-size:12px;flex-shrink:0;display:flex;gap:2px;}
.prog-chev{font-size:16px;color:var(--text-3);}
.pill-new{background:var(--green-light);color:var(--green);font-size:10px;font-weight:700;padding:3px 8px;border-radius:20px;}

.survey-card{display:flex;align-items:center;gap:12px;padding:13px 16px;}
.survey-ic{width:38px;height:38px;border-radius:12px;background:var(--blue-light);display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;}
.survey-body{flex:1;}
.survey-title{font-size:13px;font-weight:700;color:var(--ink);margin-bottom:1px;}
.btn-sm{padding:7px 13px;font-size:12px;}
.survey-muted{opacity:.8;}

.util-card{padding:4px 16px;}
.util-row{display:flex;align-items:center;gap:12px;padding:12px 0;text-decoration:none;
  border-bottom:1px solid var(--border);}
.util-row:last-child{border-bottom:none;}
.util-ic{font-size:16px;width:20px;text-align:center;flex-shrink:0;}
.util-label{flex:1;font-size:13px;font-weight:700;color:var(--ink);}

.injury-card{display:flex;align-items:center;gap:12px;padding:14px 18px;text-decoration:none;
  background:linear-gradient(135deg,var(--purple),#4E2C93);border-radius:18px;}
.injury-ic{width:42px;height:42px;border-radius:13px;background:rgba(255,255,255,.15);display:flex;align-items:center;justify-content:center;font-size:20px;flex-shrink:0;}
.injury-body{flex:1;}
.injury-title{font-size:13px;font-weight:700;color:#fff;margin-bottom:2px;}
.injury-sub{font-size:11px;color:rgba(255,255,255,.65);}
.injury-chev{font-size:18px;color:rgba(255,255,255,.7);}

/* --- Phase 4: Library --- */
.lib-intro{margin-bottom:20px;}
.lib-intro > p{color:var(--text-2);font-size:14px;margin:0 0 14px;}
.lib-subnav{display:flex;flex-wrap:wrap;gap:8px;}
.lib-chip{display:inline-flex;align-items:center;border-radius:999px;padding:7px 14px;
  background:var(--card);border:1px solid var(--border);
  font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:12px;font-weight:600;color:var(--text-2);text-decoration:none;white-space:nowrap;}
.lib-chip:active{background:var(--blue-light);color:var(--blue);border-color:var(--blue-light);}

.lib-section{margin:32px 0 0;}
.lib-section-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;}
.lib-section-head h2{font-family:'Source Serif 4 Variable','Source Serif 4',Georgia,serif;
  font-size:17px;font-weight:700;color:var(--ink);margin:0;}
.lib-top-link{font-size:11px;font-weight:600;color:var(--blue);text-decoration:none;}

details.lib-acc{background:var(--card);border-radius:14px;box-shadow:var(--card-shadow);
  padding:14px 16px;margin-bottom:10px;}
details.lib-acc summary{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;font-weight:700;color:var(--ink);cursor:pointer;list-style:none;
  display:flex;justify-content:space-between;align-items:center;-webkit-tap-highlight-color:transparent;}
details.lib-acc summary::-webkit-details-marker{display:none;}
details.lib-acc summary::after{content:'';width:8px;height:8px;flex-shrink:0;margin-left:10px;
  border-right:2px solid var(--text-3);border-bottom:2px solid var(--text-3);
  transform:rotate(-45deg);transition:transform .15s;}
details.lib-acc[open] summary::after{transform:rotate(45deg);}
details.lib-acc p{font-size:13px;color:var(--text-2);line-height:1.55;margin:10px 0 0;}
details.lib-acc p:first-child{margin-top:10px;}

.lib-video-grid,.lib-image-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin-top:2px;
  align-items:start;}
.lib-video-tile,.lib-image-tile{background:var(--card);border-radius:14px;box-shadow:var(--card-shadow);
  padding:10px;text-align:center;font-size:12px;color:var(--text-2);align-self:start;}
.lib-video-tile img,.lib-image-tile img{width:100%;height:auto;max-height:140px;border-radius:10px;
  display:block;margin:0 auto 6px;background:var(--bg);}
.lib-video-tile img{aspect-ratio:16/9;object-fit:cover;}
.lib-image-tile img{aspect-ratio:1/1;object-fit:contain;max-height:120px;width:auto;max-width:100%;}
.lib-video-tile a{text-decoration:none;color:var(--ink);font-weight:600;}
.lib-image-name{font-weight:700;color:var(--ink);}
.lib-image-desc{font-size:11px;color:var(--text-2);margin-top:2px;}

.coach_video{background:#000;}
.lib-video-close{position:absolute;top:16px;right:16px;z-index:2;width:40px;height:40px;
  border-radius:50%;border:none;background:#fff;box-shadow:0 2px 12px rgba(0,0,0,.4);
  display:flex;align-items:center;justify-content:center;cursor:pointer;}
.lib-video-close svg{width:18px;height:18px;stroke:var(--ink);fill:none;stroke-width:2.5;
  stroke-linecap:round;}

.lib-quote-card{background:var(--card);border-radius:18px;box-shadow:var(--card-shadow);
  padding:18px;margin-top:2px;}
.lib-quote-card p{font-size:13px;color:var(--text-2);line-height:1.6;font-style:italic;margin:0 0 14px;}

.lib-btn-stack{display:flex;flex-direction:column;gap:8px;margin-top:2px;}
.lib-btn-stack a{width:100%;box-sizing:border-box;text-align:center;}

/* --- Phase 4: Coach --- */
.coach-menu-row{display:flex;justify-content:flex-end;margin:-8px 0 8px;}
.coach-menu-btn{width:38px;height:38px;border-radius:12px;border:none;background:var(--bg);
  display:flex;align-items:center;justify-content:center;cursor:pointer;}
.coach-menu-btn svg{width:20px;height:20px;stroke:var(--text-2);fill:none;stroke-width:2;stroke-linecap:round;}
.coach-menu-card{position:absolute;right:16px;z-index:3;min-width:200px;}
.coach-menu-item{display:block;padding:9px 4px;font-size:13px;font-weight:600;color:var(--ink);
  text-decoration:none;border-bottom:1px solid var(--border);}
.coach-menu-item:last-child{border-bottom:none;}
.coach-menu-item.selected{color:var(--blue);}

.coach-question{font-size:13px;font-weight:700;color:var(--ink);margin:14px 0 8px;}
.coach-question:first-child{margin-top:0;}
.coach-chip-row{display:flex;flex-wrap:wrap;gap:8px;}
.coach-chip{position:relative;display:inline-flex;align-items:center;border-radius:999px;
  padding:8px 14px;background:var(--bg);border:1px solid var(--border);
  font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:12px;font-weight:600;color:var(--text-2);cursor:pointer;}
.coach-chip input{position:absolute;opacity:0;width:0;height:0;}
.coach-chip:has(input:checked){background:var(--blue);color:#fff;border-color:var(--blue);}

.coach-rec-card{margin-top:16px;}
.coach-rec-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;
  color:var(--red);margin-bottom:10px;}
.coach-rec-quip{font-size:12px;color:var(--text-2);margin:-4px 0 10px;}
.coach-rec-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.coach-rec-act{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;
  text-decoration:none;background:var(--bg);border:1px solid var(--border);border-radius:14px;
  padding:12px 8px;}
.coach-rec-act.primary{background:var(--red-light);border-color:var(--red);}
.coach-rec-icon{font-size:22px;}
.coach-rec-name{font-size:12px;font-weight:700;color:var(--ink);}
.coach-rec-act.primary .coach-rec-name{color:var(--red-dark);}

.coach-bubble-row{display:flex;align-items:flex-start;gap:10px;margin:14px 0;}
.coach-bubble-icon{width:30px;height:30px;border-radius:50%;background:var(--blue-light);
  display:flex;align-items:center;justify-content:center;font-size:15px;flex-shrink:0;}
.coach-bubble{background:var(--blue-light);border-radius:14px;padding:10px 14px;
  font-size:13px;color:var(--ink);line-height:1.5;}

/* --- Phase 3d: Add to Home Screen page --- */
.a2hs-step-card{background:var(--card);border-radius:14px;padding:13px 14px;box-shadow:var(--card-shadow);}
.a2hs-step-title{font-size:12.5px;font-weight:700;color:var(--ink);margin-bottom:8px;display:flex;align-items:center;gap:6px;}
.a2hs-step-row{display:flex;gap:9px;align-items:flex-start;font-size:12px;color:var(--text-2);line-height:1.5;margin-bottom:7px;}
.a2hs-step-row-last{margin-bottom:0;}
.a2hs-step-num{width:18px;height:18px;border-radius:6px;background:var(--blue-light);color:var(--blue);font-size:10px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;}

/* --- Phase 4.5: Injury Assessment picker --- */
.inj-steps-card{background:linear-gradient(135deg,var(--purple),#4E2C93);border-radius:14px;padding:13px 14px;box-shadow:none;}
.inj-steps-card .a2hs-step-row{color:rgba(255,255,255,.8);}
.inj-steps-card .a2hs-step-num{background:rgba(255,255,255,.15);color:#fff;}
.inj-summary-card{background:linear-gradient(135deg,var(--purple),#4E2C93);border-radius:14px;padding:12px 16px;}
.inj-summary-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:rgba(255,255,255,.65);margin-bottom:2px;}
.inj-summary-value{font-size:14px;font-weight:700;color:#fff;}
.inj-group-heading{font-size:15px;font-weight:700;color:var(--ink);margin:16px 0 8px;}
.inj-group-heading-first{margin-top:0;}
.inj-begin-btn{width:100%;margin-top:6px;text-align:center;}
.inj-picker-form:not(:has(input[type=checkbox]:checked)) .inj-begin-btn{opacity:.5;pointer-events:none;}

/* --- Favorites star: same ⭐ glyph both states, grayscale = off, full color = favored --- */
.star{filter:grayscale(100%);opacity:.55;}
.star.star-favored{filter:none;opacity:1;}

/* --- utility classes replacing inline style= (blocked by strict CSP style-src-attr 'none') --- */
.link-disabled{opacity:.5;pointer-events:none;}
.mt-14-center{margin-top:14px;text-align:center;}
.mb-12{margin-bottom:12px;}

/* --- Phase 5: Activity page --- */
.act-page{padding-top:2px;margin-top:.4rem;}
.act-page .card{margin-bottom:8px;}

.hero-card{background:var(--red-dark);border-radius:16px;
  color:#fff;padding:10px 14px;text-decoration:none;display:block;box-shadow:none;}
.hero-top-row{display:flex;align-items:center;justify-content:space-between;gap:8px;}
.hero-eyebrow{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;
  color:rgba(255,255,255,.6);}
.hero-main-row{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:2px;}
.hero-name{font-size:18px;font-weight:800;color:#fff;line-height:1.2;}
.hero-sub{font-size:11px;color:rgba(255,255,255,.7);line-height:1.3;margin-top:2px;}
.hero-start{flex-shrink:0;display:inline-block;background:#fff;color:var(--red-dark);padding:8px 16px;
  border-radius:11px;font-size:12.5px;font-weight:700;text-decoration:none;}
.hero-start:hover{background:#fff;}
.hero-split{display:flex;gap:10px;align-items:stretch;}
.hero-left{flex:1;min-width:0;display:flex;flex-direction:column;justify-content:space-between;}
.hero-btn-row{margin-top:8px;}
.hero-referral-tile{width:72px;flex-shrink:0;background:rgba(255,255,255,.14);border-radius:14px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  padding:8px 4px;text-decoration:none;position:relative;}
.hero-referral-tile-ic{font-size:22px;line-height:1;}
.hero-referral-tile-label{font-size:10.5px;font-weight:800;color:#fff;text-align:center;line-height:1.15;}
.hero-referral-tile-sub{font-size:9px;font-weight:600;color:rgba(255,255,255,.7);text-align:center;}
.hero-referral-tile-badge{position:absolute;top:6px;right:6px;width:7px;height:7px;border-radius:50%;
  background:var(--green);}
.hero-ic{width:38px;height:38px;border-radius:12px;background:rgba(255,255,255,.15);
  display:flex;align-items:center;justify-content:center;font-size:18px;flex-shrink:0;}
.hero-body{flex:1;min-width:0;}
.hero-label{font-size:13.5px;font-weight:700;color:#fff;margin-bottom:1px;}
.hero-survey{display:flex;align-items:center;gap:10px;}
.hero-survey .hero-chev{font-size:18px;color:rgba(255,255,255,.7);flex-shrink:0;}

.coach-link-card{display:flex;align-items:center;gap:10px;padding:11px 16px;text-decoration:none;
  background:var(--blue);box-shadow:none;}
.coach-link-ic{width:34px;height:34px;border-radius:11px;background:rgba(255,255,255,.15);
  display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;}
.coach-link-body{flex:1;}
.coach-link-title{font-size:12.5px;font-weight:700;color:#fff;margin-bottom:1px;}
.coach-link-sub{font-size:10.5px;color:rgba(255,255,255,.8);}
.coach-link-chev{font-size:18px;color:rgba(255,255,255,.7);}

.lib-section-head-text{font-family:'Source Serif 4 Variable','Source Serif 4',Georgia,serif;
  font-size:15px;font-weight:700;color:var(--ink);margin:0;text-decoration:none;}
.prog-date-wrap{display:flex;align-items:center;gap:6px;}
.act-page .card-head{margin:8px 0 6px;}
.act-page .prog-date{font-size:11px;padding:5px 10px;}

.act-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin-bottom:8px;}
.act-card{position:relative;background:var(--card);border-radius:16px;box-shadow:var(--card-shadow);
  padding:12px 10px;text-align:left;text-decoration:none;cursor:pointer;border:2px solid transparent;
  display:flex;flex-direction:column;}
.act-card-ic{font-size:24px;margin-bottom:8px;}
.act-card-label{font-size:13px;font-weight:800;color:var(--ink);margin-bottom:2px;}
.act-card-sub{font-size:11px;font-weight:500;color:var(--text-2);}
.act-card-choose{font-size:11.5px;font-weight:700;color:var(--blue);}
.act-card.disabled{opacity:.4;pointer-events:none;box-shadow:none;}
.act-card.disabled .act-card-sub{color:var(--text-3);}
.act-card.act-card-open{border-color:var(--red);background:var(--card);}
.act-card-badge{position:absolute;top:8px;right:8px;background:var(--green-light);color:var(--green);
  font-size:9px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;border-radius:8px;
  padding:2px 6px;}

.act-choice-panel{padding:2px 16px;}
.act-choice-panel .util-row{padding:9px 0;gap:8px;}
.act-choice-panel .util-label{font-size:12.5px;}
.act-choice-panel .util-row .pill{margin-right:2px;}

/* --- Phase 5.5: Program page --- */
.prog-page{padding-top:4px;}
.prog-page .muted{margin:0 0 12px;}
.prog-card{padding:14px 18px;}
.prog-card-head{font-size:15px;font-weight:700;color:var(--ink);margin-bottom:6px;
  display:flex;align-items:center;gap:7px;}
.prog-card-ic{font-size:16px;}
.prog-card p{font-size:13px;color:var(--text-2);line-height:1.55;margin:0 0 10px;}
.prog-empty{font-size:13px;color:var(--text-3);margin:0;}
.prog-note-card p{font-style:italic;}
.prog-card .prog-row{padding:10px 0;}
.prog-card .prog-row:first-of-type{border-top:1px solid var(--border);}

/* --- Phase 5.6: Health Summary page --- */
.health-page .prog-card p:last-child{margin-bottom:0;}
.metric-row{display:flex;align-items:center;justify-content:space-between;padding:9px 0;
  border-bottom:1px solid var(--border);font-size:13px;}
.metric-row:last-child{border-bottom:none;}
.metric-label{color:var(--ink);font-weight:600;}
.metric-value{color:var(--text-2);}
.ref-table{width:100%;border-collapse:collapse;font-size:12px;color:var(--text-2);margin:6px 0 10px;}
.ref-table th{text-align:left;font-size:11px;font-weight:700;color:var(--text-3);
  text-transform:uppercase;letter-spacing:.03em;padding:0 6px 6px 0;}
.ref-table td{padding:7px 6px 7px 0;border-top:1px solid var(--border);}
.ref-table tr:first-child td{border-top:none;}
.ref-row-active td{color:var(--ink);font-weight:700;}
.ref-row-danger td{color:var(--red);font-weight:700;}

/* --- Phase 5.7: Account forms (Settings / Phone / Reset Password / Signout) --- */
.acct-page p{font-size:13px;color:var(--text-2);line-height:1.55;margin:0 0 10px;}
.acct-page .card p:last-child{margin-bottom:0;}
.acct-page .acct-note{font-size:11px;color:var(--text-3);margin:4px 0 14px;}
.acct-page a{color:var(--blue);}
.acct-page .back-btn{color:var(--ink);}
.acct-page .button_row{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 10px;}
.acct-page .button_row:last-child{margin-bottom:0;}

.acct-page .pure-button{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;font-weight:600;padding:11px 18px;border-radius:14px;border:1px solid var(--border);
  background:var(--bg);color:var(--ink);text-decoration:none;display:inline-block;cursor:pointer;
  text-transform:none;line-height:1.2;}
/* buttons sitting directly on the page background (not inside a .card) need a white
   background, matching the .lib-chip / .a2hs-step-card fix -- var(--bg) would otherwise
   match the page fill and disappear. */
.acct-page > .button_row > .pure-button{background:var(--card);}
.acct-page .pure-button.pure-button-primary{background:var(--red);color:#fff;border-color:var(--red);}
.acct-page input[type=submit].pure-button,
.acct-page button.pure-button{appearance:none;-webkit-appearance:none;}

.acct-page label{display:block;font-size:12px;font-weight:600;color:var(--text-2);margin:0 0 6px;}
.acct-page input[type=text],
.acct-page input[type=tel],
.acct-page input[type=password]{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;color:var(--ink);padding:11px 14px;border-radius:12px;border:1px solid var(--border);
  background:var(--bg);}
.acct-page input[type=text]:focus,
.acct-page input[type=tel]:focus,
.acct-page input[type=password]:focus{outline:2px solid var(--blue-light);border-color:var(--blue);}
.acct-page .error{color:var(--red);font-size:11px;font-weight:600;margin:2px 0 8px;}

.acct-page input[type=radio],
.acct-page input[type=checkbox]{accent-color:var(--blue);width:16px;height:16px;}
.acct-page .pure-radio,.acct-page .pure-checkbox{display:flex;align-items:flex-start;gap:9px;
  font-size:13px;color:var(--ink);font-weight:500;padding:9px 0;border-bottom:1px solid var(--border);}
.acct-page .pure-radio:last-child,.acct-page .pure-checkbox:last-child{border-bottom:none;}
.acct-page .indent.small{font-size:11px;color:var(--text-3);margin:4px 0 0 25px;line-height:1.5;}

/* --- Phase 5.8: Sign-in pages (options / text / email / password) ---
   adapted from the sign-in mockup: fonts and colors swapped for this app's
   locked tokens (Manrope UI text, Source Serif brand/headings, --red/--blue
   accents) rather than the mockup's own DM Sans/Plus Jakarta Sans palette. */
.login-page{display:flex;flex-direction:column;flex:1;
  font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;}
/* .login-page sets Manrope as the default for everything inside it (overriding the legacy
   Tahoma body font from ahp2.css); .login-brand and .page-title opt back into serif
   explicitly. Rules below no longer need to repeat font-family individually. */
.login-wrap{display:flex;flex-direction:column;align-items:center;gap:10px;padding:24px 4px 12px;}
.login-logo{width:96px;height:96px;display:flex;align-items:center;justify-content:center;margin-bottom:2px;}
.login-logo img{width:100%;height:100%;object-fit:contain;}
.login-brand{font-family:'Source Serif 4 Variable','Source Serif 4',Georgia,serif;
  font-weight:700;font-size:19px;color:var(--ink);text-align:center;line-height:1.15;margin-bottom:14px;}
.login-brand span{color:var(--red);}
.login-title{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-3);
  align-self:flex-start;margin:0 4px 2px;}

/* The choice page (options.html) wants its logo/brand/help-card centered, which is what
   .login-wrap's align-items:center is for. But on the text/email/password sub-pages, the
   back+title row and intro text have no explicit width, so under align-items:center they
   shrink-wrap and float centered instead of sitting flush left like every other page's
   header -- this forces them back to full-width/left regardless of the parent's centering. */
.login-wrap > .title-row,
.login-wrap > .login-sub{align-self:stretch;width:100%;box-sizing:border-box;text-align:left;}

/* box-sizing:border-box is required here because these are content-box by default
   (pure-min.css only sets border-box on <input>/<select>/<textarea>, not <a>/<div>) --
   without it, width:100% + padding overflows the parent, which was the "margins are
   all wrong" bug. */
.login-choice-btn{width:100%;box-sizing:border-box;display:flex;align-items:center;gap:12px;background:var(--card);
  border:1.5px solid var(--border);border-radius:14px;padding:15px 16px;cursor:pointer;text-align:left;
  text-decoration:none;box-shadow:var(--card-shadow);}
.login-choice-btn:active{opacity:.85;}
.login-choice-btn.recommended{border-color:var(--red);}
.login-choice-ic{width:34px;height:34px;border-radius:10px;background:var(--bg);
  display:flex;align-items:center;justify-content:center;font-size:16px;flex-shrink:0;}
.login-choice-txt{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:14px;font-weight:700;color:var(--ink);}
.login-choice-sub{font-size:11px;font-weight:500;color:var(--text-3);margin-top:1px;}

.login-help-card{background:var(--card);border-radius:14px;padding:13px 14px;box-shadow:var(--card-shadow);box-sizing:border-box;width:100%;}
.login-help-title{font-size:12.5px;font-weight:700;color:var(--ink);margin-bottom:4px;}
.login-help-txt{font-size:11.5px;color:var(--text-2);line-height:1.55;}

.login-sub{font-size:12.5px;color:var(--text-2);line-height:1.5;padding:0 2px;margin:0 0 6px;}
.login-field-label{font-size:12px;font-weight:700;color:var(--text-2);margin:10px 2px 6px;display:block;}
.login-page input[type=text],
.login-page input[type=tel],
.login-page input[type=email],
.login-page input[type=password],
.login-page input:not([type]){width:100%;box-sizing:border-box;font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;color:var(--ink);padding:12px 14px;border-radius:12px;border:1.5px solid var(--border);
  background:var(--card);outline:none;}
.login-page input[type=text]:focus,
.login-page input[type=tel]:focus,
.login-page input[type=email]:focus,
.login-page input[type=password]:focus{border-color:var(--blue);}
/* Chrome/Safari paint autofilled fields with their own background (ignoring our
   background:var(--card) declaration above) -- this is the standard override trick
   to force it back to match every other field. */
.login-page input:-webkit-autofill,
.login-page input:-webkit-autofill:hover,
.login-page input:-webkit-autofill:focus{
  -webkit-text-fill-color:var(--ink);
  -webkit-box-shadow:0 0 0px 1000px var(--card) inset;
  box-shadow:0 0 0px 1000px var(--card) inset;
  transition:background-color 5000s ease-in-out 0s;
}
.login-page .error{color:var(--red);font-size:11px;font-weight:600;margin:4px 0 0;}

/* buttons need to read as clearly clickable and distinct from the plain input fields
   sitting right next to them -- a visible border + real elevation (shadow) does that,
   matching the choice-card treatment rather than the flush/inset look of a text field. */
.login-page .pure-button{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;font-weight:700;padding:12px 20px;border-radius:14px;border:1.5px solid var(--border);
  background:var(--card);color:var(--text-2);text-decoration:none;cursor:pointer;display:inline-block;
  text-align:center;box-shadow:var(--card-shadow);}
.login-page .pure-button.pure-button-primary{background:var(--red);color:#fff;border-color:var(--red);}
.login-page .login-other{align-self:center;background:var(--bg);border:none;border-radius:12px;
  padding:10px 18px;font-size:12.5px;font-weight:700;color:var(--text-2);cursor:pointer;
  text-decoration:none;display:inline-block;margin-top:4px;}
.login-page .login-terms{font-size:11px;color:var(--text-3);text-align:center;line-height:1.6;
  margin-top:10px;padding:0 6px;}
.login-page .login-terms a{color:var(--blue);font-weight:600;text-decoration:none;white-space:nowrap;}

/* the footer block renders as a sibling of #content, outside .login-page, so none of the
   .login-page-scoped rules above (fonts, button colors) reach it -- this repeats the
   needed pieces so footer buttons don't fall back to pure-min.css's default blue. */
.login-footer{padding:10px 16px 18px;font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  display:flex;flex-direction:column;align-items:center;gap:10px;}
.login-footer a{color:var(--text-2);}
.login-footer .button_row{display:flex;gap:8px;}
.login-footer .pure-button{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;font-weight:700;padding:12px 20px;border-radius:14px;border:1.5px solid var(--border);
  background:var(--card);color:var(--text-2);text-decoration:none;cursor:pointer;display:inline-block;
  text-align:center;box-shadow:var(--card-shadow);}
.login-footer .pure-button.pure-button-primary{background:var(--red);color:#fff;border-color:var(--red);}
.login-footer .copyright{color:var(--text-3);font-size:11px;}
.login-footer .copyright a{color:var(--text-3);}
/* .login-terms is normally scoped under .login-page, which the standalone legal pages
   don't use -- repeat the link styling here so it still renders blue/centered in the footer. */
.login-footer .login-terms{font-size:11px;color:var(--text-3);text-align:center;line-height:1.6;padding:0 6px;}
.login-footer .login-terms a{color:var(--blue);font-weight:600;text-decoration:none;white-space:nowrap;}

/* --- Phase 5.9: Legal disclosure pages (Privacy/Terms/Cookie Policy) ---
   long-form prose gets the serif/sans split the design guide calls for: serif for the
   section headings, Manrope for body copy, relaxed line-height since this is meant to
   be read, not scanned. */
.legal-card{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;}
.legal-card h2{font-family:'Source Serif 4 Variable','Source Serif 4',Georgia,serif;
  font-size:17px;font-weight:700;color:var(--ink);margin:0 0 12px;}
.legal-card h2:not(:first-child){margin-top:28px;}
.legal-card h3{font-size:14px;font-weight:700;color:var(--ink);margin:18px 0 6px;}
.legal-card p{font-size:13px;line-height:1.7;color:var(--text-2);margin:0 0 12px;}
.legal-card ul{margin:0 0 12px 20px;padding:0;}
.legal-card li{font-size:13px;line-height:1.7;color:var(--text-2);margin-bottom:4px;}
.legal-card a{color:var(--blue);}
.legal-card .notes{background:var(--amber-light);border-radius:14px;padding:14px 16px;margin:0 0 20px;}
.legal-card .notes h2{margin-top:0;}

/* --- Phase 5.10: Awards page ---
   compact score card + stat cards + insight cards, replacing the old info-toggle/table
   layout. Big-number role (32px bold) locked in the design guide for standalone stats. */
.award-score-card{background:linear-gradient(135deg,var(--green) 0%,#0F5E2B 100%);
  border-radius:20px;padding:18px 20px;position:relative;overflow:hidden;margin-bottom:12px;}
.award-score-card::before{content:'';position:absolute;top:-30px;right:-20px;width:130px;height:130px;
  background:rgba(255,255,255,.07);border-radius:50%;}
.award-sc-label{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:rgba(255,255,255,.55);
  margin-bottom:4px;position:relative;}
.award-sc-row{display:flex;align-items:flex-end;gap:10px;margin-bottom:10px;position:relative;}
.award-sc-num{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-weight:800;font-size:32px;color:#fff;line-height:1;}
.award-sc-star{font-size:18px;line-height:1;padding-bottom:5px;}
.award-sc-desc{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:13px;color:rgba(255,255,255,.75);line-height:1.4;padding-bottom:4px;}
.award-sc-bar-track{height:7px;background:rgba(255,255,255,.2);border-radius:4px;overflow:hidden;
  margin-bottom:4px;position:relative;}
.award-sc-bar-fill{height:100%;background:#fff;border-radius:4px;}
.award-sc-bar-labels{display:flex;justify-content:space-between;font-size:10px;color:rgba(255,255,255,.45);
  position:relative;}

.award-stat-row{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin-bottom:12px;}
.award-stat-card{background:var(--card);border-radius:16px;padding:14px 16px;box-shadow:var(--card-shadow);
  text-align:center;}
.award-stat-icon{font-size:22px;margin-bottom:5px;display:block;}
.award-stat-num{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-weight:800;font-size:32px;color:var(--ink);line-height:1;margin-bottom:2px;}
.award-stat-lbl{font-size:11px;color:var(--text-2);font-weight:500;}

.award-insight{background:var(--card);border-radius:16px;padding:14px 16px;box-shadow:var(--card-shadow);
  margin-bottom:10px;}
.award-ins-tag{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;
  color:var(--blue);margin-bottom:6px;}
.award-ins-title{font-size:14px;font-weight:700;color:var(--ink);margin-bottom:4px;}
.award-ins-text{font-size:12px;color:var(--text-2);line-height:1.5;}

/* --- Phase: Stretch page --- */
.page.stretch-page{max-height:none;padding-bottom:calc(var(--nav-h) + 16px);}
.stretch-timer-row{display:flex;align-items:center;gap:10px;}
.stretch-timer-row .btn-primary,.stretch-timer-row .btn-secondary{padding:9px 20px;}
.stretch-finish-form{display:contents;}
.stretch-timer{flex:1;text-align:center;font-variant-numeric:tabular-nums;
  font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-weight:700;font-size:22px;color:var(--ink);}
.stretch-note{font-size:12px;color:var(--text-2);margin-top:10px;}

.stretch-list-card{padding:0;}
.cardio_exercise.stretch-row{padding:14px 16px;border-bottom:1px solid var(--border);}
.stretch-row:last-child{border-bottom:none;}
.stretch-row-name{font-size:15px;font-weight:700;color:var(--ink);margin-bottom:2px;}
.stretch-row-sub{font-size:12px;color:var(--text-2);margin-bottom:10px;}
.stretch-row-body{display:flex;gap:12px;align-items:flex-start;}
.cardio_exercise.opened .stretch-row-body{display:block;}
.stretch-thumb{width:110px;height:80px;border-radius:10px;overflow:hidden;flex-shrink:0;}
.stretch-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.stretch-row-preview{flex:1;font-size:12px;color:var(--text-2);line-height:1.5;}
.cardio_exercise.opened .stretch-row-preview{display:none;}

.video_close.stretch-video-close{top:6px;right:6px;}
.stretch-video-close-btn{padding:6px 14px;font-size:12px;background:rgba(255,255,255,.9);box-shadow:0 1px 4px rgba(0,0,0,.25);}
.stretch-instr{flex:1;font-size:12px;color:var(--text-2);line-height:1.5;}
.stretch-instr-label{font-size:12px;font-weight:700;color:var(--ink);margin:6px 0 2px;}
.stretch-instr-label:first-child{margin-top:0;}

.stretch-finish-card{margin-bottom:10px;}
.stretch-finish-title{font-size:15px;font-weight:700;color:var(--ink);margin-bottom:4px;}
.stretch-finish-text{font-size:13px;font-weight:400;color:var(--text-2);line-height:1.6;}

.stretch-finish-quip{background:var(--card);border-radius:16px;box-shadow:var(--card-shadow);
  padding:18px 20px;margin-bottom:10px;text-align:center;}
.stretch-finish-quip p{font-size:13px;font-weight:400;color:var(--ink);margin:0 0 8px;line-height:1.6;}
.stretch-finish-attr{font-size:16px;margin:0;}

.stretch-finish-note{font-size:11px;font-weight:500;color:var(--text-3);line-height:1.5;}

/* --- Rehab/Workout header (Track A1,workout_combo2.html) --- */
.combo-head-card{margin-bottom:12px;}
.combo-head-top{display:flex;align-items:center;gap:10px;margin-bottom:8px;flex-wrap:wrap;}
.combo-date-pill{background:var(--blue-light);color:var(--blue);border-radius:10px;padding:6px 12px;
  font-size:12px;font-weight:700;flex-shrink:0;text-decoration:none;}
.combo-title{font-weight:800;font-size:18px;color:var(--red);}
.combo-head-row{display:flex;justify-content:space-between;align-items:center;margin-top:8px;}
.combo-head-label{font-size:13px;color:var(--text-2);}
.combo-pill-group{display:flex;gap:6px;}
.combo-pill{background:var(--bg);border:none;border-radius:10px;padding:7px 14px;font-size:12px;
  font-weight:600;color:var(--text-3);cursor:pointer;text-decoration:none;display:inline-block;}
.combo-pill-disabled{opacity:.4;pointer-events:none;}
.combo-timer-row{margin-top:12px;position:relative;}
.combo-timer-inner{display:flex;align-items:center;gap:10px;justify-content:center;}
.combo-timer{font-family:'Manrope Variable',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;
  font-size:20px;font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums;}
.combo-timer-btn-row{display:flex;gap:8px;margin-top:8px;}
.combo-timer-btn-row .timer_button{flex:1;}
.combo-timer-btn-row>button:last-child{flex:1;}
.combo-timer-reset{position:absolute;top:0;right:0;background:none;border:none;font-size:12px;
  color:var(--text-2);cursor:pointer;padding:0;text-decoration:none;}

/* --- Rehab/Workout exercise card chrome (Track A2, workout_combo2.html) ---
   Compound selectors (.orig-class.new-class) are required wherever workout.css/ahp2.css style
   these with tag+class selectors (div.combo_container, div.exercise_header div.name, etc.) —
   plain new classes lose to those regardless of load order. Plain new classes are used only
   where the legacy rule is already class-only, since redesign.css loads last and wins ties. */

.combo_container.combo-group-card,
.single_container.combo-group-card{
  background:var(--card);border:none;border-radius:18px;box-shadow:var(--card-shadow);
  margin:0 0 16px;padding:0;
}
.combo_header.combo-group-header{
  display:flex;justify-content:space-between;align-items:center;padding:16px 16px 4px;
}
.combo_header.combo-group-header h1{font-size:16px;font-weight:800;color:var(--red);margin:0;}
.combo-group-sets{font-size:13px;font-weight:600;color:var(--text-2);}

.exercise_header.combo-ex-header{padding:14px 16px 8px;align-items:flex-start;}
.exercise_header .name.combo-ex-name{font-size:15px;font-weight:700;color:var(--ink);min-height:0;}
/* workout.css .combo_container div.exercise_header div.name{padding-left:1.3em;text-indent:-1.2em}
   is a legacy hanging-indent hack for the old "1." numbering scheme and has higher specificity
   (0,3,2) than a plain .combo-ex-name override (0,3,0) - must match its selector shape to win. */
.combo_container div.exercise_header div.name.combo-ex-name,
.single_container div.exercise_header div.name.combo-ex-name{padding-left:0;text-indent:0;}
.exercise_header .reps.combo-ex-reps{font-size:12px;font-weight:600;color:var(--text-2);padding:2px 0 0 8px;}

.swap.combo-swap-row{display:flex;gap:6px;margin:0 16px 8px;position:static;}
/* div.swap{position:absolute;bottom:-40px} in ahp2.css was tuned for the old full-bleed video
   layout - now that vid_box is correctly sized instead of overlaying the page, that absolute
   positioning lands the swap buttons on top of the Equipment/Avoid section below. The compact
   (collapsed) state already overrides this to position:static; extending that here too. */
.combo-swap-btn{flex:1;background:var(--bg);color:var(--text-3);border:none;border-radius:10px;
  font-weight:600;font-size:12px;padding:9px 8px;}
.combo-swap-btn.pure-button-disabled{opacity:.4;}

.notes.combo-notes-box{margin:0 16px 8px;border:1px solid var(--border);border-radius:10px;
  padding:10px;background:var(--bg);font-size:13px;color:var(--text-2);}

.editing .notes_edit{font-weight:700;font-size:12px;color:var(--text-3);
  text-transform:uppercase;letter-spacing:.03em;margin-bottom:8px;}

.editing .combo-notes-form{display:flex;flex-direction:column;gap:8px;}
.combo-notes-field label{display:block;font-size:11px;font-weight:700;color:var(--text-3);
  text-transform:uppercase;letter-spacing:.03em;margin-bottom:3px;}
.combo-notes-input{width:100%;box-sizing:border-box;border:1px solid var(--border);border-radius:8px;
  padding:8px 10px;font-size:14px;color:var(--ink);background:var(--card);}
.combo-notes-btn-row{display:flex;gap:8px;margin-top:2px;}
.combo-notes-btn.btn-primary,.combo-notes-btn.btn-secondary{flex:1;padding:9px 0;font-size:13px;text-align:center;}

.combo_footer.combo-group-footer{padding:0;}

.combo-checkoff-row{display:flex;align-items:center;justify-content:flex-end;padding:8px 16px 14px;
  font-size:13px;color:var(--text-2);}
.combo-checkbox{margin-right:8px;accent-color:var(--red);}
/* form.pure-form input[type=checkbox]{width:1em;height:1em} in ahp2.css (0,2,2) beats a plain
   .combo-checkbox class (0,1,0) - compound selector needed to win. */
.pure-form input[type=checkbox].combo-checkbox{width:1.6em;height:1.6em;}

/* --- Rehab/Workout instructions typography (Track A3): Setup/Movement/Tips headers + numbered lists --- */
.combo-inst-h2{font-size:14px;font-weight:800;color:var(--ink);margin:0 0 4px;
  text-transform:uppercase;letter-spacing:.02em;}
.instructions.combo-inst-list{margin:0 0 4px;padding-left:20px;}
.instructions.combo-inst-list li{font-size:14px;color:var(--text-2);line-height:1.5;margin-bottom:4px;}

/* --- Rehab/Workout Finish Workout + Save to Favorites (Track A4) --- */
.combo-finish-card{text-align:center;}
.combo-finish-text{font-size:13px;color:var(--text-2);margin-bottom:12px;}
.combo-finish-btn-row{display:flex;justify-content:center;}

.combo-fav-card{background:var(--card);border-radius:18px;box-shadow:var(--card-shadow);
  padding:14px 20px;margin:0 0 16px;}
.combo-fav-star{font-size:16px;line-height:1;display:inline-flex;align-items:center;
  justify-content:center;padding:10px;box-sizing:content-box;min-width:0;width:auto;}
.combo-fav-toggle-row{display:flex;align-items:center;gap:0;width:100%;background:none;
  border:none;padding:0;margin:0;font-size:14px;color:var(--text-2);cursor:pointer;
  text-align:left;font-family:inherit;}
.combo-fav-star-btn{background:none;border:none;cursor:pointer;}
.combo-fav-label-link{cursor:pointer;}
.combo-fav-label-link:hover{text-decoration:underline;}
.combo-fav-open-box{margin-top:10px;display:none;}
.combo-fav-open-box.open{display:block;}
.combo-fav-open-box input[type=text],.combo-fav-open-box input:not([type]){
  border:1px solid var(--border);border-radius:10px;padding:8px 10px;font-size:13px;}
.combo-fav-btn-row{display:flex;gap:6px;margin-top:10px;}
.combo-fav-btn-row input[type=submit],.combo-fav-btn-row button{flex:1;padding:9px 4px;font-size:12px;}

/* --- unfavored/favored view swap (no reload) for the non-rehab save box --- */
.combo-fav-favored-view{display:none;}
.combo-fav-card.is-favored .combo-fav-unfavored-view{display:none;}
.combo-fav-card.is-favored .combo-fav-favored-view{display:flex;}
.combo-fav-card.is-favored .combo-fav-favored-view.combo-fav-open-box{display:none;}
.combo-fav-card.is-favored .combo-fav-favored-view.combo-fav-open-box.open{display:block;}

/* --- Rehab/Workout page wrapper (fix, 2026-07-12) ---
   A1 originally wrapped this in class="page", colliding with the pre-existing legacy
   div.page selector (act.css/ahp2.css: margin 1rem 1rem 0, padding .5rem 1rem 0, max-width 500px).
   That padding broke div.vid_box's old width:100vw;left:-1em "escape the parent padding" full-bleed
   hack (workout.css), which was tuned for a parent with zero padding - causing the video to overflow
   past the right edge of the viewport. Renamed the wrapper to .combo-page-wrap (same visual values
   as div.page, avoids the name collision) and fixed vid_box/img.thumb to be contained instead of
   relying on viewport-width math, matching how Stretch's video (div.exercise_video, width:100%) already
   works - simpler and not fragile to parent padding changes. */
.combo-page-wrap{margin:1rem 1rem 0;padding:.5rem 1rem calc(var(--nav-h) + 16px);max-width:500px;max-height:none;}
/* Collapsed (default) thumbnail needs its own explicit inset now that .exercise's padding-left
   is zeroed (title-alignment fix above) - it can no longer rely on the parent's padding to stay
   off the card edge. Give it real margin matching the 16px inset used by the title/swap row/notes
   box elsewhere on this card, instead of width:100% which left it flush against the edge. */
.vid_box.combo-vid-contain{left:0;width:auto;margin:0 16px;overflow:hidden;}
img.thumb.combo-vid-contain{width:100%;object-fit:cover;}
/* When an entry is expanded (not .compact), stack the two controls columns instead of
   the default 50/50 side-by-side split, so the video gets the full card width instead of
   being stuck at half-width. Collapsed/thumbnail state is untouched - only applies :not(.compact). */
.combo_entry:not(.compact) .controls{flex-wrap:wrap;}
.combo_entry:not(.compact) .controls>.pure-u-12-24{width:100%;flex:0 0 100%;}
/* The real source of the "indented title" complaint: workout.css div.exercise{margin-left:.5em;
   padding:.5em} shifts the ENTIRE per-exercise block (header, video, everything) right by margin
   .5em + padding-left .5em = 1em relative to combo_header's title above it (16px padding only, no
   margin, no extra left padding). Verified live via getBoundingClientRect: title was 9px right of
   the combo header before this second fix (first pass only zeroed margin-left, missed padding-left).
   Zeroing both margin-left and padding-left here (0,2,0 beats the old rule's 0,1,1).
   padding-top/right/bottom:.5em stays - inst_box/Equipment text below still rely on it for inset. */
.combo_entry .exercise{margin-left:0;padding-left:0;}
/* Bleed the expanded video flush to the card's outer edge. With margin-left and padding-left both
   zeroed above, there's nothing left to escape on the left; only padding-right:.5em (workout.css,
   untouched legacy) still insets this column, so only escape that side. */
.combo_entry:not(.compact) .vid_box.combo-vid-contain{width:auto;margin:0 -.5em 0 0;}
/* #video_holder is a single reusable node (act.css div.exercise_video: height:300px, fixed) that
   play_video() physically moves into whichever vid_box is active. That fixed 300px height doesn't
   match vid_box's own aspect-ratio(16/9) height for a typical card width, so the video-js player
   (.vjs-fill, sized to #video_holder) rendered taller than the visible box - vid_box's overflow:hidden
   then clipped it, showing the video letterboxed and offset down with a black bar at the top.
   Fix: make #video_holder fill vid_box exactly instead of using its own fixed height. */
.vid_box.combo-vid-contain #video_holder{position:absolute;top:0;left:0;width:100%;height:100%;margin:0;}

.combo-missing-exercise{padding:14px 16px;font-size:13px;color:var(--text-2);}

/* --- Rehab/Workout header slider toggles (mockup pattern, no title-heading labels) --- */
.combo-toggle-row{background:var(--bg);border-radius:12px;padding:3px;display:flex;margin-bottom:10px;}
.combo-toggle-btn{flex:1;border:none;border-radius:10px;padding:9px 6px;font-size:12px;font-weight:600;
  cursor:pointer;background:none;color:var(--text-3);text-align:center;text-decoration:none;display:block;
  font-family:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.combo-toggle-btn.combo-toggle-active{background:var(--blue);color:#fff;font-weight:700;
  box-shadow:0 1px 4px rgba(26,111,212,.2);pointer-events:none;}
.combo-toggle-row-disabled .combo-toggle-btn{cursor:default;opacity:.5;}
.combo-toggle-row-disabled .combo-toggle-btn.combo-toggle-active{background:var(--border);color:var(--text-3);
  box-shadow:none;opacity:.7;}
.combo-equip-info-trigger{font-size:12px;color:var(--text-2);margin:-4px 0 6px;text-align:right;cursor:pointer;}
