:root{
  --bg:#f2f4f7; --card:#ffffff; --text:#1a1d23; --muted:#6b7280; --border:#e5e7eb;
  --accent:#4f46e5; --accent2:#0891b2; --met:#16a34a; --warn:#d97706; --red:#dc2626;
  --met-bg:#dcfce7; --warn-bg:#fef3c7; --red-bg:#fee2e2; --gap-bg:#e5e7eb;
  --shadow: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);
  --radius:14px;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --bg:#0f1115; --card:#171a21; --text:#e8eaed; --muted:#9aa3af; --border:#2a2e37;
    --accent:#818cf8; --accent2:#22d3ee; --met:#4ade80; --warn:#fbbf24; --red:#f87171;
    --met-bg:#0f2a1a; --warn-bg:#2e2408; --red-bg:#2e1212; --gap-bg:#242830;
    --shadow: 0 1px 3px rgba(0,0,0,.4), 0 1px 2px rgba(0,0,0,.3);
  }
}
:root[data-theme="dark"]{
  --bg:#0f1115; --card:#171a21; --text:#e8eaed; --muted:#9aa3af; --border:#2a2e37;
  --met:#4ade80; --warn:#fbbf24; --red:#f87171;
  --met-bg:#0f2a1a; --warn-bg:#2e2408; --red-bg:#2e1212; --gap-bg:#242830;
  --shadow: 0 1px 3px rgba(0,0,0,.4), 0 1px 2px rgba(0,0,0,.3);
}
:root[data-theme="light"]{
  --bg:#f2f4f7; --card:#ffffff; --text:#1a1d23; --muted:#6b7280; --border:#e5e7eb;
  --met:#16a34a; --warn:#d97706; --red:#dc2626;
  --met-bg:#dcfce7; --warn-bg:#fef3c7; --red-bg:#fee2e2; --gap-bg:#e5e7eb;
  --shadow: 0 1px 3px rgba(0,0,0,.06), 0 1px 2px rgba(0,0,0,.04);
}
/* Accent color swatches - applied via data-accent on <html>, independent of light/dark */
:root[data-accent="indigo"]{ --accent:#4f46e5; --accent2:#0891b2; }
:root[data-theme="dark"][data-accent="indigo"], :root:not([data-theme="light"])[data-accent="indigo"]{ --accent:#818cf8; --accent2:#22d3ee; }
:root[data-accent="teal"]{ --accent:#0d9488; --accent2:#0284c7; }
:root[data-theme="dark"][data-accent="teal"], :root:not([data-theme="light"])[data-accent="teal"]{ --accent:#2dd4bf; --accent2:#38bdf8; }
:root[data-accent="rose"]{ --accent:#e11d48; --accent2:#db2777; }
:root[data-theme="dark"][data-accent="rose"], :root:not([data-theme="light"])[data-accent="rose"]{ --accent:#fb7185; --accent2:#f472b6; }
:root[data-accent="amber"]{ --accent:#b45309; --accent2:#a16207; }
:root[data-theme="dark"][data-accent="amber"], :root:not([data-theme="light"])[data-accent="amber"]{ --accent:#fbbf24; --accent2:#facc15; }
:root[data-accent="violet"]{ --accent:#7c3aed; --accent2:#c026d3; }
:root[data-theme="dark"][data-accent="violet"], :root:not([data-theme="light"])[data-accent="violet"]{ --accent:#a78bfa; --accent2:#e879f9; }
:root[data-accent="emerald"]{ --accent:#059669; --accent2:#0891b2; }
:root[data-theme="dark"][data-accent="emerald"], :root:not([data-theme="light"])[data-accent="emerald"]{ --accent:#34d399; --accent2:#22d3ee; }
*{box-sizing:border-box;}
body{
  margin:0; background:var(--bg); color:var(--text);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}
.topbar{
  position:sticky; top:0; z-index:50; background:var(--card); border-bottom:1px solid var(--border);
  padding:12px 20px; display:flex; align-items:center; gap:14px; flex-wrap:wrap; box-shadow:var(--shadow);
}
.topbar h1{font-size:18px; margin:0; font-weight:700; letter-spacing:-.01em; display:flex; align-items:center; gap:8px;}
.topbar h1 .dot{width:9px;height:9px;border-radius:50%;background:var(--met);display:inline-block;}
.topbar h1 .dot.off{background:var(--muted);}
.btn{
  background:var(--accent); color:white; border:none; padding:9px 16px; border-radius:10px;
  font-size:14px; font-weight:600; cursor:pointer; transition:opacity .15s; white-space:nowrap;
}
.btn:hover{opacity:.88;}
.btn.secondary{background:transparent; color:var(--text); border:1px solid var(--border);}
.status-pill{font-size:12px; color:var(--muted); padding:5px 10px; border:1px solid var(--border); border-radius:20px;}
.hint{color:var(--muted); font-size:14px; text-align:center; padding:60px 20px;}
.hint b{color:var(--text);}
.print-tip{color:var(--muted); font-size:11.5px; margin-left:auto;}

/* ---------------- APP SHELL: sidebar + main content ---------------- */
.app-shell{display:flex; align-items:flex-start;}
.sidebar{
  width:230px; flex:0 0 230px; background:var(--card); border-right:1px solid var(--border);
  position:sticky; top:57px; height:calc(100vh - 57px); overflow-y:auto; padding:16px 10px;
}
.nav-item{
  display:flex; align-items:center; gap:10px; padding:10px 12px; border-radius:10px; margin-bottom:2px;
  color:var(--muted); cursor:pointer; font-weight:600; font-size:13.5px; border-left:3px solid transparent;
  user-select:none;
}
.nav-item:hover{background:var(--bg); color:var(--text);}
.nav-item.active{color:var(--accent); background:color-mix(in srgb, var(--accent) 12%, transparent); border-left:3px solid var(--accent);}
.nav-item .ico{font-size:15px; width:18px; text-align:center; flex-shrink:0;}
.main-content{flex:1; min-width:0; padding:20px; max-width:1000px; margin:0 auto;}
.page-header{display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin-bottom:14px;}
.page-header h2{margin:0; font-size:19px; font-weight:800; display:flex; align-items:center; gap:8px;}
@media (max-width:820px){
  .app-shell{flex-direction:column;}
  .sidebar{position:static; width:100%; flex:none; height:auto; display:flex; flex-direction:row;
    overflow-x:auto; border-right:none; border-bottom:1px solid var(--border); padding:8px 10px; gap:2px;}
  .nav-item{flex:0 0 auto; border-left:none; border-bottom:3px solid transparent; white-space:nowrap;}
  .nav-item.active{border-left:none; border-bottom:3px solid var(--accent);}
  .main-content{padding:14px;}
}

details.card{
  background:var(--card); border:1px solid var(--border); border-radius:var(--radius);
  margin-bottom:16px; box-shadow:var(--shadow); overflow:hidden;
}
details.card summary{
  list-style:none; cursor:pointer; padding:16px 18px; display:flex; align-items:center;
  justify-content:space-between; font-weight:700; font-size:15.5px; user-select:none;
}
details.card summary::-webkit-details-marker{display:none;}
summary .left{display:flex; align-items:center; gap:10px;}
summary .chev{transition:transform .2s; color:var(--muted); font-size:13px;}
details[open] > summary .chev{transform:rotate(90deg);}
.info-btn{
  width:20px;height:20px;border-radius:50%;border:1px solid var(--border); background:none; color:var(--muted);
  font-size:12px; cursor:pointer; display:inline-flex; align-items:center; justify-content:center; flex-shrink:0;
}
.info-btn:hover{background:var(--accent); color:white; border-color:var(--accent);}
.card-body{padding:0 18px 18px 18px;}
.subhead{font-size:11px; text-transform:uppercase; letter-spacing:.06em; color:var(--muted); font-weight:700; margin:18px 0 8px;}
.subhead:first-child{margin-top:2px;}

.controls-row{display:flex; gap:10px; flex-wrap:wrap; align-items:center; margin:8px 0 14px;}
select, input[type=date]{
  background:var(--bg); color:var(--text); border:1px solid var(--border); border-radius:8px;
  padding:8px 10px; font-size:14px;
}
.chip-row{display:flex; gap:6px; flex-wrap:wrap;}
.chip{
  padding:6px 12px; border-radius:20px; border:1px solid var(--border); background:var(--bg); color:var(--text);
  font-size:12.5px; cursor:pointer; font-weight:600;
}
.chip.active{background:var(--accent); color:white; border-color:var(--accent);}

table{width:100%; border-collapse:collapse; font-size:13.5px;}
th,td{text-align:left; padding:7px 8px; border-bottom:1px solid var(--border);}
th{color:var(--muted); font-weight:600; font-size:11.5px; text-transform:uppercase; letter-spacing:.03em;}
tr:last-child td{border-bottom:none;}
.tbl-wrap{overflow-x:auto;}
th.sortable-th{cursor:pointer; user-select:none; white-space:nowrap; position:relative;}
th.sortable-th .th-label{cursor:pointer;}
th.sortable-th .th-label:hover{color:var(--accent);}
th.sortable-th.sort-active .th-label{color:var(--accent);}
.col-filter-btn{cursor:pointer; margin-left:5px; font-size:10px; color:var(--muted); user-select:none;}
.col-filter-btn:hover{color:var(--accent);}
th.filter-active .col-filter-btn{color:var(--accent); font-weight:900;}
.col-filter-panel{display:none; position:absolute; top:100%; left:0; z-index:60; background:var(--card);
  border:1px solid var(--border); border-radius:8px; padding:8px; min-width:190px; max-width:260px;
  box-shadow:0 6px 18px rgba(0,0,0,.18); text-transform:none; font-weight:400; font-size:12.5px; color:var(--text);}
.col-filter-panel.open{display:block;}
.cf-search{width:100%; box-sizing:border-box; margin-bottom:6px; padding:4px 6px; font-size:12px;
  border:1px solid var(--border); border-radius:6px; background:var(--bg); color:var(--text);}
.cf-list{max-height:160px; overflow-y:auto; margin-bottom:6px;}
.cf-item{display:block; padding:3px 2px; cursor:pointer; white-space:nowrap; font-weight:400;}
.cf-item input{margin-right:6px;}
.cf-actions{display:flex; gap:6px; justify-content:space-between; margin-bottom:2px;}
.cf-row{display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; gap:6px;}
.cf-row input{width:90px; padding:3px 5px; border:1px solid var(--border); border-radius:6px; background:var(--bg); color:var(--text);}

.badge{display:inline-block; padding:3px 10px; border-radius:20px; font-size:12px; font-weight:700;}
.badge.MET, .badge.ON_TARGET{background:var(--met-bg); color:var(--met);}
.badge.WARNING{background:var(--warn-bg); color:var(--warn);}
.badge.RED, .badge.RED_ALERT{background:var(--red-bg); color:var(--red);}
.badge.GAP{background:var(--gap-bg); color:var(--muted);}

.metric-grid{display:grid; grid-template-columns:repeat(auto-fill,minmax(140px,1fr)); gap:10px; margin:10px 0;}
.metric{background:var(--bg); border:1px solid var(--border); border-radius:10px; padding:10px 12px;}
.metric .label{font-size:11px; color:var(--muted); text-transform:uppercase; letter-spacing:.03em;}
.metric .value{font-size:18px; font-weight:700; margin-top:2px;}
.metric .flag{margin-top:4px;}

.stat-strip{display:flex; gap:16px; flex-wrap:wrap; margin:6px 0 14px;}
.stat{min-width:100px;}
.stat .n{font-size:22px; font-weight:800;}
.stat .l{font-size:11.5px; color:var(--muted); text-transform:uppercase;}

.narrative{line-height:1.6; font-size:14.5px;}
.narrative p{margin:0 0 10px;}

/* Muscle Map (added 2026-09-23) */
.musclemap-wrap{margin:6px 0 4px;}
.musclemap-toggle{justify-content:center; margin-bottom:10px;}
.musclemap-body{width:100%;}
.musclemap-label{font-size:11.5px; color:var(--muted); text-align:center; margin-bottom:8px;}
.musclemap-views{display:flex; gap:14px; justify-content:center;}
.musclemap-col{flex:1; max-width:340px; text-align:center;}
.musclemap-sublabel{font-size:11px; color:var(--muted); text-transform:uppercase; letter-spacing:.04em; margin-bottom:4px;}
/* font-size/stroke-width are set (and swapped on hover) per-element in
   musclemap.js as SVG attributes, in the diagram's own tiny internal
   coordinate units - do not hardcode a px size here, it means something
   different inside this SVG's viewBox than a normal page px (see 2026-09-23
   fix notes). The transition here is what makes the hover grow smooth. */
.musclemap-num{font-weight:700; fill:#111; paint-order:stroke; stroke:#fff; stroke-linejoin:round; transition:font-size 150ms ease-out, stroke-width 150ms ease-out;}
.musclemap-credit{font-size:10.5px; color:var(--muted); margin-top:6px; text-align:center;}
.musclemap-credit a{color:var(--muted);}

.chart-row{display:grid; grid-template-columns:1fr 1fr; gap:16px; margin-top:12px;}
.chart-box{background:var(--bg); border:1px solid var(--border); border-radius:10px; padding:12px; min-height:220px;}
.chart-box h4{margin:0 0 8px; font-size:12.5px; color:var(--muted); text-transform:uppercase; letter-spacing:.03em;}
@media (max-width:700px){.chart-row{grid-template-columns:1fr;}}

.overlay{
  position:fixed; inset:0; background:rgba(0,0,0,.5); display:none; align-items:center; justify-content:center;
  z-index:100; padding:20px;
}
.overlay.show{display:flex;}
.overlay .box{
  background:var(--card); border-radius:16px; padding:22px 24px; max-width:480px; width:100%;
  box-shadow:0 10px 40px rgba(0,0,0,.3); max-height:80vh; overflow-y:auto;
}
.overlay .box h3{margin:0 0 10px; font-size:16px;}
.overlay .box p{font-size:14px; line-height:1.6; color:var(--muted); margin:0 0 8px;}
.overlay .box ul, .overlay .box ol{margin:0 0 8px; padding-left:20px;}
.overlay .box li{font-size:14px; line-height:1.6; color:var(--muted); margin:0 0 7px;}
.overlay .box strong{color:var(--text);}
.overlay .box a{color:var(--accent);}
.overlay .close{float:right; background:none; border:none; color:var(--muted); font-size:18px; cursor:pointer;}

/* Wide variant for expanded chart views (js/bodycomp.js "Expand" button and
   similar) - much larger than the default info-popup box, near full viewport. */
.overlay .box.wide{max-width:95vw; width:1200px; max-height:90vh; height:80vh; display:flex; flex-direction:column;}
.overlay .box.wide .chart-expand-canvas-wrap{flex:1 1 auto; position:relative; min-height:0;}
.overlay .box.wide .chart-expand-canvas-wrap canvas{max-height:100%;}

.pill-verdict{padding:4px 12px; border-radius:20px; font-weight:700; font-size:13px;}
.empty-note{color:var(--muted); font-size:13.5px; font-style:italic; padding:8px 0;}
.footer-note{text-align:center; color:var(--muted); font-size:12px; margin-top:30px;}

/* ---------------- HERO (collapsible battery section) ---------------- */
details.hero-details{background:none; border:none; box-shadow:none; margin-bottom:18px; overflow:visible;}
details.hero-details > summary{
  list-style:none; cursor:pointer; padding:0; margin-bottom:8px; display:flex; align-items:center;
  justify-content:space-between; user-select:none;
}
details.hero-details > summary::-webkit-details-marker{display:none;}
.hero-summary-bar{
  background:var(--card); border:1px solid var(--border); border-radius:12px; padding:10px 16px;
  display:flex; align-items:center; gap:14px; flex-wrap:wrap; width:100%; box-shadow:var(--shadow);
}
.hero-summary-bar .hsb-title{font-weight:700; font-size:14px; display:flex; align-items:center; gap:8px;}
.hero-summary-bar .hsb-stats{display:flex; gap:16px; flex-wrap:wrap; font-size:12.5px; color:var(--muted);}
.hero-summary-bar .hsb-stats b{color:var(--text);}
.hero-summary-bar .chev{transition:transform .2s; color:var(--muted); font-size:13px; margin-left:auto;}
details.hero-details[open] > summary .hero-summary-bar .chev{transform:rotate(90deg);}
details.hero-details[open] > summary{display:none;}
.hero{
  background:linear-gradient(135deg, var(--accent), var(--accent2)); border-radius:18px; padding:22px 24px;
  color:#fff; box-shadow:var(--shadow); position:relative;
}
.hero-collapse-btn{
  position:absolute; top:16px; right:18px; background:rgba(255,255,255,.18); border:1px solid rgba(255,255,255,.4);
  color:#fff; border-radius:8px; padding:5px 10px; font-size:12px; cursor:pointer; font-weight:600;
}
.hero-collapse-btn:hover{background:rgba(255,255,255,.3);}
.hero-top{display:flex; justify-content:space-between; align-items:flex-start; flex-wrap:wrap; gap:16px;}
.hero-round-tag{display:inline-block; background:rgba(255,255,255,.22); border-radius:20px; padding:3px 12px; font-size:11.5px; font-weight:700; letter-spacing:.03em; margin-bottom:10px;}
.hero-stats{display:flex; gap:28px; flex-wrap:wrap;}
.hero-stat .n{font-size:24px; font-weight:800;}
.hero-stat .l{font-size:11.5px; text-transform:uppercase; letter-spacing:.04em; opacity:.85;}
.hero-stat .d{font-size:11.5px; opacity:.7; margin-top:1px;}
.battery-wrap{display:flex; align-items:center; gap:14px; margin-top:18px; flex-wrap:wrap;}
.battery{
  width:180px; height:56px; border:3px solid rgba(255,255,255,.85); border-radius:10px; position:relative; padding:4px; flex-shrink:0;
}
.battery::after{ content:""; position:absolute; right:-9px; top:50%; transform:translateY(-50%); width:6px; height:22px;
  background:rgba(255,255,255,.85); border-radius:0 3px 3px 0; }
.battery-fill{ height:100%; border-radius:5px; background:#fff; transition:width .4s; display:flex; align-items:center; justify-content:center; }
.battery-pct{ font-weight:800; font-size:15px; }
.hero-eta{font-size:13.5px; opacity:.92; line-height:1.5;}
.hero-eta b{font-weight:800;}
@media (max-width:700px){ .hero-stats{gap:16px;} .battery{width:140px;} }

/* ---------------- Goal-date calculator (inside hero) ---------------- */
.goal-calc{margin-top:18px; padding-top:16px; border-top:1px solid rgba(255,255,255,.3);}
.goal-calc-row{display:flex; align-items:center; gap:10px; flex-wrap:wrap;}
.goal-calc-row label{font-size:12.5px; opacity:.9;}
.goal-calc input[type=date]{background:rgba(255,255,255,.92); color:#1a1d23; border:none;}
.goal-calc .btn.small{background:rgba(255,255,255,.22); border:1px solid rgba(255,255,255,.4); color:#fff;}
.goal-calc .btn.small:hover{background:rgba(255,255,255,.34); opacity:1;}
.goal-result{display:grid; grid-template-columns:repeat(auto-fill,minmax(160px,1fr)); gap:10px; margin-top:14px;}
.goal-result .gr{background:rgba(255,255,255,.14); border-radius:10px; padding:10px 12px;}
.goal-result .gr .n{font-size:17px; font-weight:800;}
.goal-result .gr .l{font-size:10.5px; text-transform:uppercase; letter-spacing:.03em; opacity:.85;}
.goal-note{font-size:12px; opacity:.85; margin-top:10px; line-height:1.5;}

/* ---------------- Rounds comparison page ---------------- */
.round-cards{display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:14px; margin:10px 0 16px;}
.round-card{background:var(--bg); border:1px solid var(--border); border-radius:12px; padding:14px 16px;}
.round-card .rc-title{font-weight:800; font-size:14.5px; display:flex; align-items:center; gap:8px; margin-bottom:8px;}
.round-card .rc-status{font-size:10.5px; padding:2px 8px; border-radius:20px; font-weight:700; text-transform:uppercase;}
.round-card .rc-status.active{background:var(--met-bg); color:var(--met);}
.round-card .rc-status.closed{background:var(--gap-bg); color:var(--muted);}
.round-card .rc-row{display:flex; justify-content:space-between; font-size:13px; padding:4px 0; border-bottom:1px dashed var(--border);}
.round-card .rc-row:last-child{border-bottom:none;}
.round-card .rc-row .l{color:var(--muted);}
.round-card .rc-row .v{font-weight:700;}

.print-only{display:none;}
.swatch{width:28px;height:28px;border-radius:50%;cursor:pointer;border:2px solid transparent; display:inline-block;}
.swatch.active{border-color:var(--text); box-shadow:0 0 0 2px var(--bg), 0 0 0 4px var(--text);}
#modeChips .chip.active, #accentSwatches .swatch.active{outline:none;}
.export-row{display:flex; gap:8px; flex-wrap:wrap; margin:4px 0 2px;}
.btn.small{padding:6px 12px; font-size:12.5px;}
.print-page-block + .print-page-block{margin-top:26px; padding-top:22px; border-top:2px dashed var(--border);}

@media print{
  body{background:#fff; color:#000; zoom:1 !important;}
  .no-print{display:none !important;}
  .print-only{display:block;}
  .topbar{position:static; box-shadow:none; border-bottom:2px solid #000;}
  .app-shell{display:block;}
  .sidebar{display:none !important;}
  .main-content{max-width:none; padding:0;}
  details.hero-details > summary{display:none !important;}
  details.hero-details{margin-bottom:14px;}
  .hero-collapse-btn{display:none !important;}
  details.card{box-shadow:none; border:1px solid #999; break-inside:avoid; page-break-inside:avoid; margin-bottom:10px;}
  details.card summary{cursor:default;}
  #pageBody details:not([open]) { display:none; }
  .chart-box{border:1px solid #ccc;}
  /* Charts print as static <img> snapshots (see print.js chartsToPrintImages) -
     hide the live canvas so it doesn't duplicate/overlap the printed image. */
  .chart-box canvas{display:none !important;}
  .chart-print-img{max-width:100%; height:auto; display:block;}
  .badge.MET, .badge.ON_TARGET{background:#e8f7ec !important; color:#0a7a2f !important;}
  .badge.WARNING{background:#fdf1d8 !important; color:#a15c00 !important;}
  .badge.RED, .badge.RED_ALERT{background:#fbe2e2 !important; color:#a3121a !important;}
  a[href]:after{content:"";}
  .hero{background:#fff !important; color:#000 !important; border:2px solid #000;}
  .hero-eta, .hero-stat .l, .hero-stat .d{color:#333 !important;}
  .battery{border-color:#000;}
  .battery::after{background:#000;}
  .battery-fill{background:#000 !important;}
  .battery-pct{color:#fff !important;}
  .goal-calc{border-top-color:#999;}
  .goal-result .gr{background:#f2f2f2;}
  /* Each stacked page block (Print All Sections) starts on its own printed page */
  .print-page-block{ break-before: page; page-break-before: always; }
  .print-page-block:first-child{ break-before: avoid; page-break-before: avoid; }
}
