:root{
  --bg:#F6F6F3;
  --card:#FFFFFF;
  --ink:#14181A;
  --ink-2:#454F52;
  --muted:#79847F;
  --line:#E3E5E0;
  --accent:#C4442E;          /* effort */
  --star:#D8AF40;
  --done:#2E7D5B;            /* completed */
  --hybrid:#C4442E;
  --barbell-club:#7A5AA8;
  --hyrox:#B8860B;
  --run-track:#2F6FA8;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --bg:#0F1315; --card:#171C1F; --ink:#EDF1EF; --ink-2:#B9C4C0;
    --muted:#7E8C87; --line:#242C30; --accent:#E4705C; --done:#4FA07A;
  --star:#E8C55C;
    --hybrid:#E4705C; --barbell-club:#A98BD6; --hyrox:#D8AF40; --run-track:#67A3DA;
  }
}
:root[data-theme="dark"]{
  --bg:#0F1315; --card:#171C1F; --ink:#EDF1EF; --ink-2:#B9C4C0;
  --muted:#7E8C87; --line:#242C30; --accent:#E4705C; --done:#4FA07A;
  --star:#E8C55C;
  --hybrid:#E4705C; --barbell-club:#A98BD6; --hyrox:#D8AF40; --run-track:#67A3DA;
}

*,*::before,*::after{box-sizing:border-box}
body{
  margin:0;background:var(--bg);color:var(--ink);
  font-family:'Barlow',system-ui,sans-serif;font-size:16px;line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
main{max-width:760px;margin:0 auto;padding:16px 16px 72px}
.muted{color:var(--muted)}
pre{
  font-family:'Barlow',system-ui,sans-serif;font-size:15.5px;line-height:1.6;
  white-space:pre-wrap;margin:0;color:var(--ink);
}

/* ── top bar ── */
.bar{
  position:sticky;top:0;z-index:20;background:var(--bg);
  border-bottom:1px solid var(--line);
  display:flex;align-items:center;gap:16px;
  padding:12px 16px;padding-top:max(12px, env(safe-area-inset-top));
}
.brand{font-family:'Barlow Condensed',sans-serif;font-weight:700;font-size:22px;letter-spacing:.02em}
.brand span{color:var(--accent)}
.bar nav{margin-left:auto;display:flex;gap:16px;font-size:14px;font-weight:600}
.bar nav a{color:var(--muted);padding:4px 0;border-bottom:2px solid transparent}
.bar nav a.on{color:var(--ink);border-bottom-color:var(--accent)}
.bar nav a.quiet{font-weight:400}

.flash{padding:11px 14px;border-radius:8px;margin-bottom:14px;font-size:14.5px}
.flash.success{background:rgba(46,125,91,.12);color:var(--done)}
.flash.error{background:rgba(196,68,46,.12);color:var(--accent)}

/* ── auth ── */
.auth{max-width:360px;margin:14vh auto;padding:0 16px;text-align:center}
.logo{font-family:'Barlow Condensed',sans-serif;font-size:44px;font-weight:700;margin:0}
.logo span{color:var(--accent)}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:20px;margin-top:22px;text-align:left}
label{display:block;font-size:12px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
  color:var(--muted);margin:0 0 6px}
input,textarea{
  width:100%;padding:11px 12px;border:1px solid var(--line);border-radius:8px;
  font:inherit;background:var(--bg);color:var(--ink);margin-bottom:14px;
}
input:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:1px;border-color:transparent}
textarea{resize:vertical}

.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:13px 18px;border:1px solid var(--ink);border-radius:9px;background:var(--ink);
  color:var(--bg);font:inherit;font-weight:700;font-size:15px;cursor:pointer;
}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.ghost{background:transparent;color:var(--ink)}
.btn.block{width:100%;margin-top:4px}
.btn.small{padding:8px 13px;font-size:13.5px}

/* ── week ── */
.weeknav{display:flex;align-items:center;gap:12px;margin:6px 0 16px}
.weeknav-title{flex:1;text-align:center;line-height:1.25}
.weeknav-title strong{display:block;font-family:'Barlow Condensed',sans-serif;font-size:21px}
.weeknav-title span{font-size:12.5px}
.nav-btn{
  width:44px;height:44px;flex:0 0 auto;display:grid;place-items:center;
  border:1px solid var(--line);border-radius:10px;font-size:22px;background:var(--card);
}
.nav-btn.off{opacity:.3;pointer-events:none}

.days{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.day{display:grid;grid-template-columns:56px 1fr;gap:12px;align-items:stretch;
  background:var(--card);border:1px solid var(--line);border-radius:12px;padding:10px 12px}
.day.is-today{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.day.is-rest{opacity:.62}
.day-head{text-align:center;padding-top:2px}
.dow{display:block;font-size:11px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.dnum{display:block;font-family:'Barlow Condensed',sans-serif;font-size:26px;font-weight:600;line-height:1.1}
.day-body{display:flex;flex-direction:column;gap:6px;justify-content:center;min-width:0}
.sess{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:9px;
  background:var(--bg);border:1px solid var(--line);min-height:44px;min-width:0}
.sess-name{font-weight:600;font-size:14.5px;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;min-width:0;flex:1}
.sess.done{border-color:var(--done)}
.sess .tick{margin-left:auto;color:var(--done);font-weight:700}
.rest{font-size:14px;color:var(--muted);padding:8px 2px}

.pill{display:inline-block;padding:2px 8px;border-radius:20px;font-size:10.5px;font-weight:700;
  letter-spacing:.07em;text-transform:uppercase;color:#fff;background:var(--muted);white-space:nowrap}
.p-hybrid{background:var(--hybrid)}
.p-barbell-club{background:var(--barbell-club)}
.p-hyrox{background:var(--hyrox)}
.p-run-track{background:var(--run-track)}
.pill.link{opacity:.9}

/* ── workout ── */
.back{display:inline-block;color:var(--muted);font-weight:600;font-size:14px;margin-bottom:10px}
.wo-head h1{font-family:'Barlow Condensed',sans-serif;font-size:31px;line-height:1.1;margin:8px 0 4px}
.alsotoday{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:14px 0 0;font-size:13px}
.block{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;margin-top:12px}
.block-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.block h2{font-family:'Barlow Condensed',sans-serif;font-size:19px;letter-spacing:.03em;
  text-transform:uppercase;margin:0}
.tags{display:flex;gap:5px;flex-wrap:wrap;margin-left:auto}
.tag{font-size:10.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;
  padding:2px 7px;border-radius:5px;background:var(--bg);color:var(--muted);border:1px solid var(--line)}
.tag.cap{color:var(--accent);border-color:currentColor}
.measure{margin:0 0 8px;font-size:12.5px;color:var(--muted);font-weight:600}
.movements{display:flex;gap:5px;flex-wrap:wrap;margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
.mv{font-size:11.5px;color:var(--muted);background:var(--bg);border:1px solid var(--line);
  padding:2px 7px;border-radius:5px}
.warmup h2,.cooldown h2{color:var(--muted)}

/* ── log ── */
.logbox{background:var(--card);border:2px solid var(--accent);border-radius:12px;padding:16px;margin-top:20px}
.logbox.is-done{border-color:var(--done)}
.logbox h2{font-family:'Barlow Condensed',sans-serif;font-size:21px;margin:0 0 10px}
.row3{display:grid;grid-template-columns:1fr 78px 92px;gap:10px}
.own-notes{margin-top:10px;padding:10px;background:var(--bg);border-radius:8px;font-size:14.5px}
details summary{cursor:pointer;font-size:13.5px;color:var(--muted);margin-top:10px;font-weight:600}
.undo{margin-top:4px}

/* ── progress ── */
.page-h1{font-family:'Barlow Condensed',sans-serif;font-size:30px;margin:4px 0 16px}
.stats{list-style:none;margin:0 0 18px;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.stats li{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:14px 10px;text-align:center}
.stats .n{display:block;font-family:'Barlow Condensed',sans-serif;font-size:32px;font-weight:700;line-height:1}
.stats .l{display:block;font-size:11.5px;color:var(--muted);margin-top:4px}
.panel{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px;margin-bottom:12px}
.panel h2{font-family:'Barlow Condensed',sans-serif;font-size:18px;letter-spacing:.04em;
  text-transform:uppercase;margin:0 0 14px}
.bars{display:flex;align-items:flex-end;gap:5px;height:120px}
.bar-col{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%}
.bar-fill{width:100%;background:var(--accent);border-radius:4px 4px 0 0;min-height:3px}
.bar-lbl{font-size:9.5px;color:var(--muted);margin-top:5px;white-space:nowrap}
.proglist{list-style:none;margin:0;padding:0}
.proglist li{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line)}
.proglist li:last-child{border-bottom:0}
.proglist .n{font-weight:700}
.loglist{list-style:none;margin:0;padding:0}
.loglist li{border-bottom:1px solid var(--line)}
.loglist li:last-child{border-bottom:0}
.loglist a{display:grid;grid-template-columns:88px 1fr auto;gap:10px;align-items:center;padding:10px 0}
.loglist .when{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.loglist .what{font-size:14.5px;display:flex;align-items:center;gap:7px;min-width:0}
.loglist .meta{font-size:12px;color:var(--muted);white-space:nowrap}

@media (min-width:620px){
  main{padding:22px 20px 80px}
  .row3{grid-template-columns:1fr 90px 110px}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
.src{font-size:12.5px;opacity:.75}

/* ── movement swaps ── */
.mv.has-swap{padding:0;border:0;background:none}
.mv.has-swap summary{
  list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:5px;
  font-size:11.5px;color:var(--ink);background:var(--bg);
  border:1px solid var(--accent);padding:2px 7px;border-radius:5px;
}
.mv.has-swap summary::-webkit-details-marker{display:none}
.swap-dot{color:var(--accent);font-weight:700}
.swaps{list-style:none;margin:8px 0 4px;padding:0;display:flex;flex-direction:column;gap:8px}
.swaps li{background:var(--bg);border:1px solid var(--line);border-left:3px solid var(--accent);
  border-radius:0 8px 8px 0;padding:9px 11px}
.swap-alt{display:block;font-weight:600;font-size:14px}
.swap-why{display:inline-block;margin-top:3px;font-size:10px;font-weight:700;letter-spacing:.08em;
  text-transform:uppercase;padding:1px 6px;border-radius:4px}
.r-equipment{background:rgba(196,68,46,.14);color:var(--accent)}
.r-space{background:rgba(47,111,168,.14);color:#2F6FA8}
.r-preference{background:rgba(121,132,127,.16);color:var(--muted)}
.swap-note{display:block;margin-top:5px;font-size:13px;color:var(--ink-2);line-height:1.45}
.swap-hint{margin:9px 0 0;font-size:12.5px;color:var(--muted)}

/* ── team → solo toggle ────────────────────────────────
   Team blocks carry both versions; the radios pick one.
   No JS: the panes are siblings of the inputs.          */
.teamswap > .opt { position: absolute; opacity: 0; pointer-events: none; }
.seg {
  display: inline-flex; gap: 2px; margin: 0 0 .7rem;
  background: var(--line); border-radius: 8px; padding: 2px;
}
.seg .lb {
  font-size: .78rem; padding: .32rem .7rem; border-radius: 6px;
  cursor: pointer; color: var(--muted); white-space: nowrap;
  transition: background .12s, color .12s;
}
.seg .lb:hover { color: var(--ink); }
.teamswap .opt-team:checked ~ .seg .lb-team,
.teamswap .opt-solo:checked ~ .seg .lb-solo {
  background: var(--card); color: var(--ink); font-weight: 600;
  box-shadow: 0 1px 2px rgba(0,0,0,.18);
}
.teamswap .pane { display: none; }
.teamswap .opt-team:checked ~ .pane-team,
.teamswap .opt-solo:checked ~ .pane-solo { display: block; }
.opt:focus-visible ~ .seg { outline: 2px solid var(--accent); outline-offset: 2px; }

.solo-note {
  font-size: .84rem; line-height: 1.45; color: var(--ink);
  background: color-mix(in srgb, var(--accent) 9%, transparent);
  border-left: 3px solid var(--accent);
  padding: .55rem .75rem; margin: 0 0 .6rem; border-radius: 0 6px 6px 0;
}
.solo-note.standalone { margin-bottom: .8rem; }
.solo-src { font-size: .75rem; color: var(--muted); margin: .5rem 0 0; }

/* ── session feedback ──────────────────────────────────
   Rating is enjoyment, not effort — RPE already covers
   how hard it was. The two answer different questions.  */
.rate, .chips { border: 0; padding: 0; margin: 0 0 .9rem; }
.rate legend, .chips legend {
  font-size: .78rem; font-weight: 600; color: var(--ink-2);
  padding: 0; margin-bottom: .35rem;
}
.starwrap { display: flex; align-items: center; }
.stars {
  display: flex; flex-direction: row-reverse; justify-content: flex-end;
  align-items: center; gap: .1rem;
}
.stars input { position: absolute; opacity: 0; pointer-events: none; }
.stars label {
  font-size: 1.6rem; line-height: 1; cursor: pointer; color: var(--line);
  transition: color .1s; padding: 0 .05rem;
}
/* Stars run 5→1 in the DOM, so "~ label" reaches everything below the
   chosen one — which is exactly the set that should be filled. */
.stars input:checked ~ label,
.stars label:hover, .stars label:hover ~ label { color: var(--star); }
.stars input:focus-visible + label { outline: 2px solid var(--accent); outline-offset: 2px; }
.clear-stars {
  margin-left: .6rem; background: none; border: 0; cursor: pointer;
  font-size: .72rem; color: var(--muted); text-decoration: underline;
}
.stars-static { color: var(--star); letter-spacing: .05em; white-space: nowrap; }

.chips { display: flex; flex-wrap: wrap; gap: .35rem; }
.chips legend { flex-basis: 100%; }
.chips input { position: absolute; opacity: 0; pointer-events: none; }
.chips label {
  font-size: .76rem; padding: .3rem .6rem; border-radius: 999px;
  border: 1px solid var(--line); cursor: pointer; color: var(--ink-2);
  transition: all .12s;
}
.chips label:hover { border-color: var(--muted); }
.chips input:checked + label {
  background: var(--accent); border-color: var(--accent); color: #fff;
}
.chips input:focus-visible + label { outline: 2px solid var(--accent); outline-offset: 2px; }

/* ── people ──────────────────────────────────────────── */
table.people { width: 100%; border-collapse: collapse; font-size: .88rem; }
table.people td { padding: .6rem .3rem; border-top: 1px solid var(--line); vertical-align: middle; }
table.people tr:first-child td { border-top: 0; }
table.people .right { text-align: right; }
table.people tr.off { opacity: .5; }
label.inline { display: flex; align-items: center; gap: .4rem; font-weight: 400; font-size: .82rem; }
label.inline input { width: auto; }
.invitelink input {
  width: 100%; margin-top: .4rem; font-family: ui-monospace, monospace;
  font-size: .76rem; padding: .4rem .5rem;
}

/* ── taste ───────────────────────────────────────────── */
.finding { font-size: .9rem; line-height: 1.5; margin: 0 0 .45rem; }
.rankrow { display: flex; align-items: center; gap: .6rem; margin-bottom: .4rem; font-size: .84rem; }
.rankname { flex: 0 0 34%; text-transform: capitalize; }
.rankbar { flex: 1; height: 7px; background: var(--line); border-radius: 4px; overflow: hidden; }
.rankbar i { display: block; height: 100%; background: var(--accent); border-radius: 4px; }
.rankval { flex: 0 0 3.6rem; text-align: right; font-variant-numeric: tabular-nums; }

/* ── coach views ───────────────────────────────────────── */
.fb { padding: .7rem 0; border-top: 1px solid var(--line); }
.fb:first-of-type { border-top: 0; }
.fb-head { display: flex; flex-wrap: wrap; align-items: center; gap: .5rem; margin-bottom: .35rem; font-size: .86rem; }
.warn { color: var(--accent); font-weight: 600; }
.rowacts { display: flex; gap: .3rem; justify-content: flex-end; flex-wrap: wrap; }
.finding.k-fix  { border-left: 3px solid var(--accent); padding-left: .6rem; }
.finding.k-tune { border-left: 3px solid var(--star);   padding-left: .6rem; }
.finding.k-good { border-left: 3px solid var(--done);   padding-left: .6rem; }
.finding.k-quiet{ border-left: 3px solid var(--line);   padding-left: .6rem; color: var(--ink-2); }
pre.cmd {
  background: var(--ink); color: #E8EDEA; padding: .7rem .8rem; border-radius: 6px;
  font-size: .76rem; overflow-x: auto;
}
select { width: 100%; padding: .5rem; border: 1px solid var(--line);
  border-radius: 6px; background: var(--card); color: var(--ink); font: inherit; }

/* ── what's coming ─────────────────────────────────────── */
.upday { display: flex; align-items: baseline; gap: .8rem; padding: .4rem 0;
  border-top: 1px solid var(--line); }
.upday:first-of-type { border-top: 0; }
.upd-date { flex: 0 0 5.2rem; font-weight: 600; font-size: .84rem; }
.upd-date.is-today { color: var(--accent); }
.upd-progs { display: flex; flex-wrap: wrap; gap: .3rem; }
.pill.is-done { opacity: .5; }
.ctarow { margin: 0 0 1rem; }
.nocycle { border-left: 3px solid var(--accent); }
.nocycle h2 { margin-top: 0; }
.block.iscurrent { border-left: 3px solid var(--accent); }
/* Support sessions sit alongside the cycle but are not part of its
   progression, so they read one step quieter than the core work. */
.sess.support { opacity: .82; }
.sess.support .sess-name { font-style: italic; }
