:root{--ink:#15202b;--secondary-text:#65717d;--line:#dde4e9;--paper:#fff;--bg:#f5f7f8;--accent:#145c5a;--accent2:#0f807a;--warm:#f1ece3;--good:#286b45;--warn:#8a5a00;--bad:#9a3434;--shadow:0 8px 25px rgba(30,45,55,.06)}*{box-sizing:border-box}body{margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;color:var(--ink);background:var(--bg);font-size:12px;line-height:1.55}.shell{width:min(1120px,calc(100% - 32px));margin:auto}.site-header{background:#111827;color:#fff;position:sticky;top:0;z-index:10}.header-inner{min-height:66px;display:flex;align-items:center;gap:24px}.brand{color:#fff;text-decoration:none;font-weight:750;display:flex;gap:10px;align-items:center;min-width:0}.brand-logo-slot{display:inline-flex;align-items:center;justify-content:center;width:72px;height:40px;border-radius:8px;overflow:hidden;flex:0 0 auto}.brand-logo-slot.placeholder{border:1px dashed rgba(255,255,255,.48);background:rgba(255,255,255,.08);color:rgba(255,255,255,.78);font-size:8px;font-weight:800;letter-spacing:.12em}.brand-logo-slot.has-logo{width:auto;max-width:150px;background:transparent}.brand-logo-slot img{display:block;max-width:150px;max-height:40px;width:auto;height:auto;object-fit:contain}.brand-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topnav{display:flex;gap:4px;margin-left:auto}.topnav a,.quiet-link{color:#e9f5f4;text-decoration:none;padding:8px 11px;border-radius:8px}.topnav a:hover{background:rgba(255,255,255,.09)}.quiet-link{font-size:10.5px}.main{padding:32px 0 64px}.hero{padding:62px 0}.hero h1{font-size:clamp(25.5px,2.5vw,48px);line-height:1.03;max-width:900px;margin:0 0 18px}.hero p{font-size:15px;color:#53606a;max-width:760px}.button,button{display:inline-block;border:0;border-radius:9px;background:var(--accent);color:white;text-decoration:none;font-weight:700;padding:11px 17px;cursor:pointer}.button:hover,button:hover{background:var(--accent2)}.button.secondary{background:#e8eeee;color:#163d3d}.button.small{padding:7px 11px;font-size:10.5px}.button.danger{background:var(--bad)}.grid{display:grid;grid-template-columns:repeat(12,1fr);gap:18px}.span-12{grid-column:span 12}.span-8{grid-column:span 8}.span-7{grid-column:span 7}.span-6{grid-column:span 6}.span-5{grid-column:span 5}.span-4{grid-column:span 4}.span-3{grid-column:span 3}.card{background:var(--paper);border:1px solid var(--line);border-radius:14px;padding:22px;box-shadow:var(--shadow)}.card h2,.card h3{margin-top:0}h1{font-size:25.5px;line-height:1.15;margin:0 0 10px}h2{font-size:18px;line-height:1.25}h3{font-size:13.5px}.lead{color:var(--secondary-text);font-size:13.5px}.decision{border-left:5px solid var(--accent);background:#eef6f5}.warning{border-left:5px solid #c58a18;background:#fff9e9}.danger-card{border-left:5px solid var(--bad);background:#fff4f4}.success{border-left:5px solid var(--good);background:#eff8f2}.badge{display:inline-block;border-radius:999px;padding:3px 8px;font-size:9px;font-weight:800;background:#edf1f3;color:#42505b}.badge.committed{background:#dcedeb;color:#164f4c}.badge.expected{background:#eef0dd;color:#59601c}.badge.directional{background:#ede9f3;color:#604a7d}.badge.progress{background:#e3f3e8;color:#276440}.badge.repeat{background:#eef0dd;color:#626817}.badge.modify{background:#fff0d7;color:#7b5000}.badge.recover{background:#ffe3e3;color:#862f2f}.stat{font-size:22.5px;font-weight:800;line-height:1.1}.stat-label{font-size:9.75px;color:var(--secondary-text);margin-top:4px}label{display:block;font-weight:700;margin:13px 0 6px}.hint{font-size:9.75px;color:var(--secondary-text);margin-top:5px}input,select,textarea{width:100%;border:1px solid #cbd5db;border-radius:9px;padding:10px 11px;background:white;font:inherit;color:var(--ink)}textarea{min-height:90px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 18px}.check-grid{display:flex;flex-wrap:wrap;gap:8px}.check{display:flex;align-items:center;gap:7px;border:1px solid var(--line);padding:8px 10px;border-radius:9px;background:#fff}.check input{width:auto;margin:0}.actions{display:flex;gap:9px;flex-wrap:wrap;margin-top:18px}.flash{padding:12px 15px;border-radius:9px;margin-bottom:18px;background:#edf2f4}.flash.error{background:#ffe9e9;color:#7d2626}.flash.success{background:#e7f4eb;color:#245f3d}.session{display:grid;grid-template-columns:110px 86px 1fr auto;gap:14px;align-items:start;padding:16px 0;border-bottom:1px solid var(--line)}.session:last-child{border-bottom:0}.today-next-session{grid-template-columns:110px 1fr}.session-date{font-weight:800}.session-title{font-weight:800}.session p{margin:5px 0}.stage-band{padding:10px 14px;border-radius:9px;background:var(--warm);font-weight:800;margin:20px 0 4px}.quality-table,.table{width:100%;border-collapse:collapse}.quality-table th,.quality-table td,.table th,.table td{padding:10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}.quality-table th,.table th{font-size:9px;text-transform:uppercase;letter-spacing:.06em;color:var(--secondary-text)}.level-rail{display:flex;gap:4px}.level-dot{width:24px;height:8px;border-radius:5px;background:#e0e5e8}.level-dot.on{background:var(--accent)}.pace-range{font-variant-numeric:tabular-nums;font-weight:750}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:15px;margin-bottom:22px}.empty{padding:28px;text-align:center;color:var(--secondary-text)}footer{border-top:1px solid var(--line);padding:28px 0;color:var(--secondary-text);font-size:9.75px}.inline{display:flex;align-items:center;gap:9px;flex-wrap:wrap}.callout{padding:14px 16px;border-radius:10px;background:#eef4f5}.timeline{border-left:2px solid #dce3e6;padding-left:18px}.timeline-item{margin:0 0 17px;position:relative}.timeline-item:before{content:'';position:absolute;width:9px;height:9px;border-radius:50%;background:var(--accent);left:-24px;top:7px}@media(max-width:800px){.header-inner{min-height:auto;flex-wrap:wrap;gap:0;padding:8px 0}.brand-logo-slot{width:58px;height:34px}.brand-logo-slot.has-logo,.brand-logo-slot img{max-width:120px;max-height:34px}.brand-name{max-width:170px}.topnav{position:static;order:3;flex:0 0 100%;margin:7px 0 0;background:transparent;justify-content:space-between;gap:2px;padding:0;z-index:auto;overflow-x:auto}.topnav a{flex:1 1 auto;text-align:center;font-size:9.75px;padding:7px 6px;white-space:nowrap}.quiet-link{margin-left:auto}.main{padding-bottom:64px}.span-8,.span-7,.span-6,.span-5,.span-4,.span-3{grid-column:span 12}.form-grid{grid-template-columns:1fr}.session{grid-template-columns:1fr;gap:5px}.page-head{align-items:flex-start;flex-direction:column}}

/* v0.3 calendar plan */
.calendar-month{margin-top:22px;padding:18px}.calendar-month-head{display:flex;justify-content:space-between;align-items:flex-end;margin-bottom:14px}.calendar-month-head h2{margin:2px 0 0}.training-calendar{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));border-top:1px solid var(--line);border-left:1px solid var(--line);border-radius:10px;overflow:hidden;background:#fff}.calendar-weekday{padding:7px 8px;background:#eef3f4;border-right:1px solid var(--line);border-bottom:1px solid var(--line);font-size:8.5px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--secondary-text);text-align:center}.calendar-day{min-height:112px;padding:7px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff;position:relative}.calendar-outside{background:#f7f8f9;color:#a4adb4}.calendar-date{display:flex;justify-content:space-between;align-items:center;font-weight:800;font-size:10px;margin-bottom:6px}.calendar-date small{font-size:7.5px;color:var(--accent);text-transform:uppercase;letter-spacing:.05em}.calendar-today{box-shadow:inset 0 0 0 2px rgba(20,92,90,.35)}.calendar-rest{background:#f5f6f6}.calendar-rest-label{font-weight:800;color:#5f6c74;margin-top:13px}.calendar-note{font-size:8px;color:var(--secondary-text);margin-top:3px}.calendar-session{display:block;text-decoration:none;color:var(--ink);padding:6px;border-radius:7px;background:#f4f7f7;margin-bottom:5px;border-left:3px solid #bcc8cd}.calendar-session:hover{background:#edf4f3}.calendar-session.horizon-committed{border-left-color:var(--accent);background:#edf7f5}.calendar-session.horizon-expected{border-left-color:#8f9729;background:#f5f6e9}.calendar-session.horizon-directional{border-left-color:#806b9b;background:#f4f1f7}.calendar-session-meta{display:flex;justify-content:space-between;gap:4px;font-size:7.8px;color:var(--secondary-text)}.calendar-session-title{font-weight:750;font-size:9px;line-height:1.3;margin-top:3px}.race-session{border-left-color:#9a3434;background:#fff0f0}.race-session strong,.race-session span{display:block}.calendar-race{background:#fff8f8}
@media(max-width:800px){.calendar-month{padding:12px}.training-calendar{display:block;border:0;background:transparent}.calendar-weekday{display:none}.calendar-day{min-height:0;border:1px solid var(--line);border-radius:9px;margin-bottom:7px;padding:9px}.calendar-outside{display:none}.calendar-date{margin-bottom:4px}.calendar-date:after{content:attr(data-weekday)}.calendar-rest-label{margin-top:5px}.calendar-session-title{font-size:9.5px}}

/* v0.9 concise tabular plan */
.table-wrap{width:100%;overflow-x:auto}.plan-table{min-width:680px}.plan-table td{vertical-align:middle}.plan-week-row td{background:#eef3f4;color:#52616b;font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;padding:7px 10px}.plan-numbered-week-row td{background:#111827;color:#fff;font-size:11px;font-weight:800;letter-spacing:.02em;padding:8px 10px}.plan-session-link{font-weight:800;color:var(--accent);text-decoration:none}.plan-session-link:hover{text-decoration:underline}.plan-rest-row{background:#fafbfb;color:#69757d}.plan-race-row{background:#fff5f5}.plan-today-row{box-shadow:inset 3px 0 0 var(--accent)}.plan-table td:nth-child(1){white-space:nowrap;width:110px}.plan-table td:nth-child(2){width:170px}.plan-table td:nth-child(4){white-space:nowrap;width:110px}
@media(max-width:800px){.plan-table{min-width:620px}.plan-table th,.plan-table td{padding:8px}}

/* Local-data edition */
.performance-row{padding:12px 0;border-bottom:1px solid var(--line)}.performance-row:last-of-type{border-bottom:0}.vo2-value{margin-top:4px;min-height:38px;display:flex;align-items:center}.privacy-note{font-size:10px;color:var(--secondary-text)}

/* v0.3 help and feedback */
.utility-nav{display:flex;gap:2px;margin-left:6px}.utility-nav a{color:#d9e8e7;text-decoration:none;padding:8px 8px;border-radius:8px;font-size:10px}.utility-nav a:hover{background:rgba(255,255,255,.09);color:#fff}.footer-inner{display:flex;justify-content:space-between;gap:18px;align-items:center}.footer-links{display:flex;gap:12px}.footer-links a{color:var(--accent);text-decoration:none;font-weight:700}.footer-links a:hover{text-decoration:underline}.help-intro{border-left:5px solid var(--accent)}.help-nav{display:flex;gap:7px;flex-wrap:wrap;margin-top:18px}.help-nav a{display:inline-block;text-decoration:none;color:var(--accent);font-weight:750;background:#eef6f5;border-radius:999px;padding:6px 10px}.help-grid{margin-top:18px}.help-section{scroll-margin-top:92px}.help-section p:last-child{margin-bottom:0}.help-list{padding-left:20px}.help-list li{margin:7px 0}.feedback-contact{margin-top:14px;width:max-content;max-width:100%}.feedback-honeypot{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;overflow:hidden!important}
@media(max-width:800px){.utility-nav{margin-left:auto}.utility-nav a{font-size:9px;padding:6px}.brand-name{display:none}.footer-inner{align-items:flex-start;flex-direction:column}.footer-links{font-size:10px}.help-section{scroll-margin-top:74px}}

/* v0.3.3 resilient mobile burger navigation and consistent footer */
.site-menu{display:flex;align-items:center;margin-left:auto;gap:6px}
.menu-toggle{display:none;margin-left:auto;min-width:58px;height:40px;padding:7px 9px;border:1px solid rgba(255,255,255,.24);border-radius:8px;background:transparent;color:#fff;align-items:center;justify-content:center;gap:7px;flex:0 0 auto}
.menu-toggle:hover,.menu-toggle:focus-visible{background:rgba(255,255,255,.09);outline:none}
.menu-toggle-bars{display:flex;width:20px;height:16px;flex:0 0 20px;flex-direction:column;justify-content:space-between}
.menu-toggle-bars>span{display:block;width:20px;height:2px;border-radius:2px;background:#fff}
.menu-toggle-text{font-size:9px;line-height:1;font-weight:800;color:#fff}
.site-menu .topnav{margin-left:0}
.site-footer{border-top:1px solid var(--line);background:var(--paper);padding:28px 0;color:var(--secondary-text);font-size:9.75px}
.site-footer .footer-inner{display:flex;justify-content:space-between;gap:18px;align-items:center}
.site-footer .footer-links{display:flex;align-items:center;gap:12px;margin:0;padding:0}
.site-footer .footer-links a,.site-footer .footer-links a:link,.site-footer .footer-links a:visited{display:inline-block;color:var(--accent);text-decoration:none;font-weight:700;padding:4px 0;background:transparent;border:0}
.site-footer .footer-links a:hover,.site-footer .footer-links a:focus-visible,.site-footer .footer-links a:active{color:var(--accent2);text-decoration:underline;text-underline-offset:2px}

@media(max-width:800px){
  .site-header{z-index:100}
  .header-inner{min-height:58px;flex-wrap:nowrap;gap:10px;padding:8px 0;position:relative}
  .brand{flex:1 1 auto;min-width:0}
  .brand-name{display:inline;max-width:145px}
  .menu-toggle{display:inline-flex}
  .site-menu{position:absolute;top:calc(100% + 1px);left:-16px;right:-16px;z-index:110;margin:0;padding:8px 16px 14px;background:#111827;border-top:1px solid rgba(255,255,255,.1);box-shadow:0 12px 24px rgba(0,0,0,.22);flex-direction:column;align-items:stretch;gap:5px;max-height:calc(100vh - 66px);overflow-y:auto}
  .site-menu[hidden]{display:none!important}
  .site-menu:not([hidden]){display:flex}
  .site-menu .topnav,.site-menu .utility-nav{display:flex;position:static;order:initial;flex:0 0 auto;width:100%;margin:0;padding:0;background:transparent;overflow:visible;flex-direction:column;gap:2px}
  .site-menu .utility-nav{padding-top:7px;margin-top:5px;border-top:1px solid rgba(255,255,255,.12)}
  .site-menu .topnav a,.site-menu .utility-nav a{display:block;width:100%;flex:none;text-align:left;font-size:11px;line-height:1.35;padding:10px 11px;border-radius:8px;color:#e9f5f4;text-decoration:none;white-space:normal}
  .site-menu .topnav a:hover,.site-menu .topnav a:focus-visible,.site-menu .utility-nav a:hover,.site-menu .utility-nav a:focus-visible{background:rgba(255,255,255,.09);color:#fff}
  .site-footer{padding:24px 0}
  .site-footer .footer-inner{align-items:flex-start;flex-direction:column;gap:10px}
  .site-footer .footer-links{font-size:10px;gap:16px}
  .help-section{scroll-margin-top:74px}
}


/* SDM strength programmes */
.strength-exercise-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:16px}
.strength-exercise{border:1px solid var(--line,#d9e1e8);border-radius:14px;padding:16px;background:var(--surface,#fff)}
.strength-exercise h3{margin:.2rem 0 .45rem}
.strength-prescription{font-size:1.05em;font-weight:700;margin:.35rem 0 .8rem}
.strength-meta{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:.75rem 0}
.strength-meta div{padding:9px 10px;border-radius:10px;background:rgba(15,23,42,.045)}
.strength-meta dt{font-size:.76em;text-transform:uppercase;letter-spacing:.06em;color:var(--secondary-text,#64748b);font-weight:700}
.strength-meta dd{margin:.2rem 0 0;font-weight:600}
.strength-exercise details{margin-top:12px;border-top:1px solid var(--line,#d9e1e8);padding-top:10px}
.strength-exercise summary,.strength-level summary{cursor:pointer;font-weight:700}
.strength-ladder{display:grid;gap:14px}
.strength-level{margin:0}
.strength-level>summary{font-size:1.02em}
.strength-level[open]>summary{margin-bottom:12px}
@media(max-width:700px){
  .strength-exercise-grid{grid-template-columns:1fr}
  .strength-meta{grid-template-columns:1fr}
}

/* v0.5.5 longitudinal analytics and adaptation explanations */
.runnerly-chart{margin-top:10px}.runnerly-chart svg{display:block;width:100%;height:auto;max-height:190px;overflow:visible}.runnerly-chart-label{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--secondary-text);font-weight:800}.chart-axis{stroke:var(--line);stroke-width:1}.chart-line{fill:none;stroke:var(--accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.runnerly-chart circle{fill:var(--paper);stroke:var(--accent);stroke-width:3}.chart-text{font-size:10px;fill:var(--secondary-text)}.chart-range{display:flex;justify-content:space-between;color:var(--secondary-text);font-size:9px;margin-top:-5px}.readiness-strip{display:grid;grid-template-columns:repeat(28,minmax(5px,1fr));gap:3px;align-items:end;margin:16px 0 10px}.readiness-day{display:block;height:24px;border-radius:4px;background:#dbe2e6}.readiness-normal{background:#6ca37d}.readiness-caution{background:#d0a44e}.readiness-easy{background:#df8d43}.readiness-rest{background:#c75d5d}.readiness-baseline{background:#9aa6ad}.readiness-legend{display:flex;flex-wrap:wrap;gap:10px;color:var(--secondary-text);font-size:9px}.readiness-legend span{display:inline-flex;align-items:center;gap:5px}.readiness-legend .readiness-day{width:10px;height:10px;border-radius:3px}.decision-bars{display:grid;gap:9px;margin-top:14px}.decision-bar-row{display:grid;grid-template-columns:64px 1fr 24px;gap:8px;align-items:center}.decision-bar-track{height:9px;background:#edf1f3;border-radius:999px;overflow:hidden}.decision-bar{display:block;height:100%;background:var(--accent)}.decision-bar.repeat{background:#9aa34f}.decision-bar.modify{background:#d09a45}.decision-bar.recover{background:#c75d5d}.why-session{margin-top:12px;border-top:1px solid var(--line);padding-top:10px}.why-session summary{cursor:pointer;color:var(--accent);font-weight:800}.why-session p:last-child{margin-bottom:0}.card.callout{background:#eef4f5}.card.callout h2{font-size:15px}.missed-deferred{border-left:4px solid var(--accent)}.missed-dropped{border-left:4px solid var(--warn)}
@media(max-width:800px){.readiness-strip{grid-template-columns:repeat(14,minmax(5px,1fr))}.runnerly-chart svg{max-height:160px}}

/* v0.5.6 adaptive alternatives, weekly review and evidence confidence */
.weekly-review{border-left:4px solid var(--accent)}
.weekly-review h2,.benchmark-card h2{margin-bottom:8px}
.compact-list{margin:8px 0 0;padding-left:19px}
.compact-list li{margin:6px 0}
.evidence-confidence{position:relative;overflow:hidden}
.evidence-confidence:before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--line)}
.evidence-confidence.confidence-high:before{background:#6ca37d}
.evidence-confidence.confidence-moderate:before{background:#d0a44e}
.evidence-confidence.confidence-low:before{background:#c75d5d}
.benchmark-card{border-left:4px solid var(--accent)}
.adaptive-alternative{margin-top:12px;border-top:1px solid var(--line);padding-top:10px}
.adaptive-alternative>summary{cursor:pointer;font-weight:800;color:var(--accent)}
.adaptive-alternative[open]>summary{margin-bottom:10px}
.adaptive-alternative .form-grid{margin-top:4px}
@media(max-width:800px){.weekly-review .grid{display:block}.weekly-review .span-6{margin-bottom:14px}.evidence-confidence{margin-bottom:10px}}
.race-readiness .table td:nth-child(1){width:23%}.race-readiness .table td:nth-child(2){width:18%}.readiness-status-established{background:#e3f3e8;color:#276440}.readiness-status-developing{background:#eef0dd;color:#626817}.readiness-status-limited{background:#fff0d7;color:#7b5000}.readiness-status-insufficient-evidence{background:#edf1f3;color:#56636d}.season-goals{display:grid;gap:10px;margin-top:14px}.season-goal{display:flex;justify-content:space-between;gap:16px;align-items:center;padding:12px 0;border-bottom:1px solid var(--line)}.season-goal:last-child{border-bottom:0}.season-goal p{margin:3px 0}.season-goal .actions{margin-top:0;justify-content:flex-end}.backup-note{font-size:9.75px;color:var(--secondary-text)}@media(max-width:800px){.season-goal{display:block}.season-goal .actions{justify-content:flex-start;margin-top:10px}.race-readiness .table{display:block;overflow-x:auto}.race-readiness .table td:nth-child(1),.race-readiness .table td:nth-child(2){width:auto}}

/* v0.5.8 race execution, post-race learning and season trajectory */
.race-execution{border-left:4px solid var(--accent)}
.race-execution-summary{margin:14px 0 10px}
.race-execution-table td:nth-child(1){width:16%}.race-execution-table td:nth-child(2){width:16%}.race-execution-table td:nth-child(3){width:18%}
.race-execution-settings{border-top:1px solid var(--line);padding-top:12px}.race-execution-settings>summary{cursor:pointer;font-weight:800;color:var(--accent)}
.race-diagnosis{border-left:4px solid #586b7a}.race-diagnosis .table td:nth-child(1){width:20%}.race-diagnosis .table td:nth-child(2){width:18%}
.season-trajectory{border-left:4px solid #7d6a97}.trajectory-races{display:grid;gap:9px}.trajectory-race{display:grid;grid-template-columns:minmax(150px,1.2fr) minmax(220px,2fr) minmax(140px,1fr);gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.trajectory-race:last-child{border-bottom:0}.trajectory-race span{color:var(--secondary-text)}
.season-marker-row{display:flex;gap:10px;flex-wrap:wrap}.season-marker{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;align-items:center;border:1px solid var(--line);border-left:4px solid #9aa6ad;border-radius:10px;padding:9px 11px;min-width:180px;background:#fff}.season-marker strong{grid-row:span 2;font-size:15px}.season-marker.priority-A{border-left-color:var(--bad)}.season-marker.priority-B{border-left-color:var(--warn)}.season-marker.priority-C{border-left-color:var(--accent)}.season-marker span{font-size:9.5px;color:var(--secondary-text)}
@media(max-width:800px){.race-execution-table,.race-diagnosis .table{display:block;overflow-x:auto}.race-execution-table td:nth-child(1),.race-execution-table td:nth-child(2),.race-execution-table td:nth-child(3),.race-diagnosis .table td:nth-child(1),.race-diagnosis .table td:nth-child(2){width:auto}.trajectory-race{grid-template-columns:1fr;gap:3px}.season-marker{min-width:100%;}}

/* v0.5.9 manufacturer-neutral activity import */
.activity-import-card{border-left:4px solid var(--accent)}
.activity-metrics{margin:12px 0}
.activity-match-list{display:grid;gap:8px;margin:12px 0}
.activity-match{align-items:flex-start;padding:11px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper)}
.activity-match input{margin-top:3px}
.activity-match span{display:block}
@media(max-width:800px){.activity-metrics .span-3{grid-column:span 6}.activity-match{padding:10px}}

/* v0.6.0 interruption/re-entry, goal evidence and race card */
.interruption-card{border-left:4px solid var(--warn)}
.interruption-card.callout{border-left-color:var(--accent)}
.goal-evidence{border-left:4px solid #7d6a97}
.goal-supported{border-left-color:#6ca37d}.goal-developing{border-left-color:#d0a44e}.goal-stretch{border-left-color:#df8d43}.goal-not-yet-evidenced{border-left-color:#c75d5d}
.race-card{border-left:4px solid var(--accent)}
.race-card .page-head{align-items:flex-start;margin-bottom:8px}
.reentry-session{border-left:4px solid #6ca37d}
@media print{
  .site-header,.site-footer,.race-execution-settings,.button,.weekly-review,.goal-evidence,.race-readiness,.season-trajectory,#app-flash{display:none!important}
  .race-card{border:0;box-shadow:none;padding:0}.race-card .table{font-size:11px}.main{padding:0}.shell{max-width:none}
}

/* v0.6.1 batch activity inbox, continuity analytics and local-data resilience */
.activity-inbox-item{border-left:4px solid #7d6a97}
.activity-inbox-item .page-head{align-items:flex-start;margin-bottom:8px}
.activity-splits{margin:10px 0 14px;border-top:1px solid var(--line);padding-top:10px}
.activity-splits>summary{cursor:pointer;font-weight:800;color:var(--accent)}
.continuity-card{border-left:4px solid #586b7a}
.data-health{border-left:4px solid #6ca37d}
@media(max-width:800px){.activity-inbox-item .page-head{display:block}.activity-inbox-item .page-head .button{margin-top:8px}}

/* v0.6.2 — responsive app shell, light/dark theme and native-app-ready UI */
:root{
  --ink:#14211f;
  --secondary-text:#5d6d69;
  --line:#d6e1dd;
  --paper:#ffffff;
  --bg:#f3f7f5;
  --surface-2:#edf3f1;
  --surface-3:#e4ece9;
  --surface-raised:#ffffff;
  --input-bg:#ffffff;
  --accent:#0f766e;
  --accent2:#0a625c;
  --accent-soft:#ddf4ef;
  --accent-ink:#0b4f49;
  --warm:#f6f1e8;
  --good:#277454;
  --good-soft:#e5f4eb;
  --warn:#946200;
  --warn-soft:#fff3d5;
  --bad:#a33b43;
  --bad-soft:#fde9eb;
  --violet:#695687;
  --violet-soft:#f0ebf7;
  --shadow:0 1px 2px rgba(16,30,27,.035),0 10px 30px rgba(16,30,27,.055);
  --shadow-raised:0 14px 34px rgba(16,30,27,.12);
  --radius-xs:8px;
  --radius-sm:12px;
  --radius-md:16px;
  --radius-lg:20px;
  --content-max:1280px;
  --tap:44px;
  color-scheme:light;
}
html[data-theme="dark"]{
  --ink:#eef6f3;
  --secondary-text:#a8bbb5;
  --line:#2b3a38;
  --paper:#111b1d;
  --bg:#091214;
  --surface-2:#172326;
  --surface-3:#203033;
  --surface-raised:#152124;
  --input-bg:#0e191b;
  --accent:#38d3c1;
  --accent2:#69e2d3;
  --accent-soft:#123834;
  --accent-ink:#92efe3;
  --warm:#2b271f;
  --good:#6ad09a;
  --good-soft:#133426;
  --warn:#f1bf5b;
  --warn-soft:#352a14;
  --bad:#ef7d86;
  --bad-soft:#3a1d22;
  --violet:#c0ace8;
  --violet-soft:#2b2440;
  --shadow:0 1px 2px rgba(0,0,0,.22),0 12px 34px rgba(0,0,0,.22);
  --shadow-raised:0 16px 42px rgba(0,0,0,.34);
  color-scheme:dark;
}
html{scroll-behavior:smooth;background:var(--bg)}
body{
  color:var(--ink);
  background:
    radial-gradient(circle at 12% -8%,color-mix(in srgb,var(--accent) 8%,transparent),transparent 30rem),
    var(--bg);
  font-size:clamp(15px,14.2px + .12vw,16px);
  line-height:1.58;
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  min-height:100dvh;
}
body,button,input,select,textarea{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif}
.shell{width:min(var(--content-max),calc(100% - clamp(28px,4vw,64px)));margin-inline:auto}
.main{padding:clamp(24px,3vw,42px) 0 clamp(72px,7vw,110px);min-height:calc(100dvh - 150px)}
.site-header{background:#111827;color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.04);z-index:200}
.header-inner{min-height:68px}
.topnav a,.utility-nav a{min-height:40px;display:inline-flex;align-items:center;border-radius:10px;transition:background-color .16s ease,color .16s ease}
.topnav a[aria-current="page"],.utility-nav a[aria-current="page"]{background:rgba(255,255,255,.12);color:#fff}
.topnav a:focus-visible,.utility-nav a:focus-visible,.brand:focus-visible,.menu-toggle:focus-visible{outline:3px solid #5eead4;outline-offset:2px}

h1,h2,h3,h4{letter-spacing:-.018em;text-wrap:balance;color:var(--ink)}
h1{font-size:clamp(28px,2.1vw,38px);line-height:1.08;margin:0 0 10px;font-weight:780}
h2{font-size:clamp(20px,1.25vw,24px);line-height:1.18;margin-bottom:12px;font-weight:760}
h3{font-size:clamp(16px,1vw,18px);line-height:1.28;font-weight:730}
h4{font-size:15px;line-height:1.3}
p{max-width:78ch}.lead{font-size:clamp(16px,1vw,18px);color:var(--secondary-text);line-height:1.5;max-width:74ch}
.hint,.backup-note{font-size:13px;line-height:1.45;color:var(--secondary-text)}
.stat{font-size:clamp(27px,2.3vw,36px);font-weight:780;letter-spacing:-.035em;font-variant-numeric:tabular-nums}
.stat-label{font-size:12px;line-height:1.35;color:var(--secondary-text);font-weight:650}

.grid{gap:clamp(14px,1.5vw,22px)}
.card{
  background:var(--paper);
  border:1px solid var(--line);
  border-radius:var(--radius-lg);
  padding:clamp(18px,2.2vw,28px);
  box-shadow:var(--shadow);
}
.card h2:first-child,.card h3:first-child{margin-top:0}
.card.callout,.callout{background:var(--surface-2)}
.decision{border-left:4px solid var(--accent);background:color-mix(in srgb,var(--accent-soft) 68%,var(--paper))}
.warning{border-left:4px solid var(--warn);background:color-mix(in srgb,var(--warn-soft) 70%,var(--paper))}
.danger-card{border-left:4px solid var(--bad);background:color-mix(in srgb,var(--bad-soft) 74%,var(--paper))}
.success{border-left:4px solid var(--good);background:color-mix(in srgb,var(--good-soft) 72%,var(--paper))}
.interruption-card,.goal-evidence,.race-card,.race-execution,.race-diagnosis,.season-trajectory,.activity-import-card,.activity-inbox-item,.continuity-card,.data-health,.weekly-review,.benchmark-card,.missed-deferred,.missed-dropped,.reentry-session{border-left-width:4px}

.page-head{align-items:flex-start;margin-bottom:clamp(20px,2.4vw,30px);gap:20px}
.page-head>div:first-child{min-width:0}
.page-head p{margin-top:6px;margin-bottom:6px}

.button,button{
  min-height:var(--tap);
  border-radius:12px;
  padding:10px 16px;
  font-size:14px;
  line-height:1.2;
  font-weight:740;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:8px;
  border:1px solid transparent;
  background:var(--accent);
  color:#fff;
  transition:background-color .16s ease,border-color .16s ease,box-shadow .16s ease,transform .08s ease;
  -webkit-tap-highlight-color:transparent;
}
.button:hover,button:hover{background:var(--accent2)}
.button:active,button:active{transform:translateY(1px)}
.button:focus-visible,button:focus-visible{outline:3px solid color-mix(in srgb,var(--accent) 38%,transparent);outline-offset:2px;box-shadow:0 0 0 1px var(--accent)}
.button.secondary{background:var(--surface-2);color:var(--accent-ink);border-color:var(--line)}
.button.secondary:hover{background:var(--surface-3);color:var(--ink)}
.button.danger{background:var(--bad);color:#fff}.button.danger:hover{filter:brightness(.92)}
.button.small{min-height:38px;padding:8px 12px;font-size:13px;border-radius:10px}
.actions{gap:10px;margin-top:20px}

label{font-size:14px;margin:16px 0 7px;font-weight:700;color:var(--ink)}
input,select,textarea{
  min-height:46px;
  border:1px solid var(--line);
  border-radius:12px;
  padding:11px 12px;
  background:var(--input-bg);
  color:var(--ink);
  font-size:15px;
  line-height:1.35;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.025);
  transition:border-color .16s ease,box-shadow .16s ease,background-color .16s ease;
}
textarea{min-height:112px;resize:vertical}
input:hover,select:hover,textarea:hover{border-color:color-mix(in srgb,var(--accent) 36%,var(--line))}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent) 18%,transparent)}
input[type="checkbox"],input[type="radio"]{min-height:auto;accent-color:var(--accent)}
.check{min-height:48px;border-radius:12px;background:var(--paper);border-color:var(--line);padding:10px 12px}
.check:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}

.badge{
  padding:5px 9px;
  border-radius:999px;
  font-size:11px;
  line-height:1.2;
  letter-spacing:.01em;
  background:var(--surface-2);
  color:var(--secondary-text);
  border:1px solid color-mix(in srgb,var(--line) 80%,transparent);
}
.badge.committed{background:var(--accent-soft);color:var(--accent-ink)}
.badge.expected,.badge.repeat{background:var(--warn-soft);color:var(--warn)}
.badge.directional{background:var(--violet-soft);color:var(--violet)}
.badge.progress{background:var(--good-soft);color:var(--good)}
.badge.modify{background:var(--warn-soft);color:var(--warn)}
.badge.recover{background:var(--bad-soft);color:var(--bad)}
.readiness-status-established{background:var(--good-soft);color:var(--good)}
.readiness-status-developing{background:var(--warn-soft);color:var(--warn)}
.readiness-status-limited{background:color-mix(in srgb,var(--bad-soft) 55%,var(--warn-soft));color:var(--bad)}
.readiness-status-insufficient-evidence{background:var(--surface-2);color:var(--secondary-text)}

.stage-band{background:var(--warm);border:1px solid color-mix(in srgb,var(--line) 70%,transparent);border-radius:12px;padding:12px 15px}
.flash{border:1px solid var(--line);background:var(--surface-2);border-radius:12px;padding:13px 16px}
.flash.error{background:var(--bad-soft);color:var(--bad);border-color:color-mix(in srgb,var(--bad) 28%,var(--line))}
.flash.success{background:var(--good-soft);color:var(--good);border-color:color-mix(in srgb,var(--good) 28%,var(--line))}
.empty{color:var(--secondary-text);padding:30px 20px}

.table-wrap{border-radius:14px;overflow:auto;border:1px solid var(--line);background:var(--paper);scrollbar-width:thin;scrollbar-color:var(--surface-3) transparent}
.table,.quality-table{background:var(--paper)}
.table th,.table td,.quality-table th,.quality-table td{padding:12px 13px;border-bottom:1px solid var(--line)}
.table th,.quality-table th{font-size:11px;color:var(--secondary-text);background:var(--surface-2);letter-spacing:.055em}
.table tbody tr:last-child td,.quality-table tbody tr:last-child td{border-bottom:0}
.table tbody tr:hover td,.quality-table tbody tr:hover td{background:color-mix(in srgb,var(--accent-soft) 25%,var(--paper))}
.plan-table{min-width:760px}
.plan-numbered-week-row td{background:#111827;color:#fff;font-size:12px;padding:9px 13px}
.plan-week-row td{background:var(--surface-2);color:var(--secondary-text);font-size:11px}
.plan-rest-row{background:color-mix(in srgb,var(--surface-2) 45%,var(--paper));color:var(--secondary-text)}
.plan-race-row{background:color-mix(in srgb,var(--bad-soft) 50%,var(--paper))}
.plan-session-link{color:var(--accent);text-underline-offset:3px}
.plan-session-link:hover{text-decoration-thickness:2px}

.session{grid-template-columns:120px 1fr auto;gap:16px;padding:18px 0;border-color:var(--line)}
.today-next-session{grid-template-columns:120px 1fr}.session-date{font-size:13px;color:var(--secondary-text)}.session-title{font-size:15px}

.runnerly-chart{background:linear-gradient(180deg,color-mix(in srgb,var(--accent-soft) 40%,var(--paper)),var(--paper));border:1px solid var(--line);border-radius:16px;padding:14px 14px 9px;margin-top:12px}
.runnerly-chart-label{font-size:12px;text-transform:none;letter-spacing:0;color:var(--ink);font-weight:720;margin-bottom:4px}
.chart-axis,.chart-grid{stroke:var(--line);stroke-width:1}.chart-line{stroke:var(--accent);stroke-width:3.3;filter:drop-shadow(0 2px 3px color-mix(in srgb,var(--accent) 22%,transparent))}.chart-area{fill:url(#runnerlyArea)}
.runnerly-chart circle{fill:var(--paper);stroke:var(--accent);stroke-width:3}.chart-text{font-size:11px;fill:var(--secondary-text)}.chart-range{font-size:11px;margin-top:1px}
.readiness-strip{gap:4px}.readiness-day{height:28px;border-radius:6px}.readiness-legend{font-size:12px;gap:14px}.readiness-normal{background:var(--good)}.readiness-caution{background:var(--warn)}.readiness-easy{background:#d97706}.readiness-rest{background:var(--bad)}.readiness-baseline{background:#85949b}
.decision-bar-track{height:11px;background:var(--surface-2)}.decision-bar{background:var(--accent)}.decision-bar.repeat{background:#86913f}.decision-bar.modify{background:#c98621}.decision-bar.recover{background:var(--bad)}

.timeline{border-color:var(--line)}.timeline-item:before{background:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}
.season-marker{background:var(--paper);border-radius:14px;border-color:var(--line);padding:12px 14px}.season-marker span,.trajectory-race span{font-size:12px;color:var(--secondary-text)}
.strength-exercise{background:var(--paper);border-color:var(--line);border-radius:16px}.strength-meta div{background:var(--surface-2)}
.activity-match{background:var(--paper);border-radius:14px}.activity-match:has(input:checked){border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 14%,transparent);background:var(--accent-soft)}

.help-nav a{min-height:38px;display:inline-flex;align-items:center;background:var(--accent-soft);color:var(--accent-ink);padding:8px 12px}
footer,.site-footer{background:var(--paper);border-color:var(--line);color:var(--secondary-text);font-size:12px}
.footer-links a{color:var(--accent)}

.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.ui-icon{width:22px;height:22px;display:block;flex:0 0 auto}
.theme-toggle{
  position:fixed;
  z-index:160;
  top:82px;
  right:max(14px,env(safe-area-inset-right));
  width:44px;
  min-width:44px;
  height:44px;
  padding:0;
  border-radius:999px;
  color:var(--ink);
  background:color-mix(in srgb,var(--paper) 92%,transparent);
  border:1px solid var(--line);
  box-shadow:var(--shadow-raised);
  backdrop-filter:blur(14px) saturate(140%);
  -webkit-backdrop-filter:blur(14px) saturate(140%);
}
.theme-toggle:hover{background:var(--surface-2);color:var(--accent)}
.theme-toggle .ui-icon{width:20px;height:20px}
html[data-theme="light"] .theme-toggle .ui-icon.nav-icon-moon,html[data-theme="light"] .theme-toggle .ui-icon:nth-of-type(2){display:none}
html[data-theme="dark"] .theme-toggle .ui-icon:nth-of-type(1){display:none}

.mobile-tabbar{display:none}

/* Explicit dark-mode repairs for legacy hard-coded light surfaces */
html[data-theme="dark"] .hero p{color:var(--secondary-text)}
html[data-theme="dark"] .button.secondary{background:var(--surface-2);color:var(--accent-ink)}
html[data-theme="dark"] .calendar-month,html[data-theme="dark"] .training-calendar,html[data-theme="dark"] .calendar-day,html[data-theme="dark"] .calendar-session{background:var(--paper);color:var(--ink);border-color:var(--line)}
html[data-theme="dark"] .calendar-weekday,html[data-theme="dark"] .plan-week-row td{background:var(--surface-2);color:var(--secondary-text)}
html[data-theme="dark"] .calendar-outside,html[data-theme="dark"] .calendar-rest,html[data-theme="dark"] .plan-rest-row{background:color-mix(in srgb,var(--surface-2) 68%,var(--bg));color:var(--secondary-text)}
html[data-theme="dark"] .calendar-session.horizon-committed{background:color-mix(in srgb,var(--accent-soft) 70%,var(--paper))}
html[data-theme="dark"] .calendar-session.horizon-expected{background:var(--warn-soft)}
html[data-theme="dark"] .calendar-session.horizon-directional{background:var(--violet-soft)}
html[data-theme="dark"] .calendar-race,html[data-theme="dark"] .race-session,html[data-theme="dark"] .plan-race-row{background:var(--bad-soft)}
html[data-theme="dark"] .season-marker,html[data-theme="dark"] .strength-exercise,html[data-theme="dark"] .activity-match{background:var(--paper)}
html[data-theme="dark"] .level-dot{background:var(--surface-3)}
html[data-theme="dark"] .level-dot.on{background:var(--accent)}
html[data-theme="dark"] .chart-text{fill:var(--secondary-text)}
html[data-theme="dark"] .check{background:var(--paper)}

@media(max-width:1024px){
  .shell{width:min(100% - 32px,var(--content-max))}
  .card{padding:20px}
  .span-8,.span-7{grid-column:span 12}.span-5,.span-4{grid-column:span 6}
}

@media(max-width:800px){
  :root{--tap:48px}
  .shell{width:calc(100% - 24px)}
  .header-inner{padding:8px 0;min-height:62px}
  .brand-logo-slot{height:38px}.brand-logo-slot.has-logo,.brand-logo-slot img{max-height:38px}
  :root{--mobile-tabbar-height:64px}
  .main{padding:22px 0 calc(var(--mobile-tabbar-height) + 34px + env(safe-area-inset-bottom))}
  .theme-toggle{top:auto;right:12px;bottom:calc(var(--mobile-tabbar-height) + 12px + env(safe-area-inset-bottom));width:48px;min-width:48px;height:48px}
  .card{border-radius:18px;padding:18px}
  .grid{gap:14px}
  .span-8,.span-7,.span-6,.span-5,.span-4,.span-3{grid-column:span 12}
  .page-head{gap:12px;margin-bottom:20px}.page-head>.button,.page-head>button{width:100%}
  .form-grid{grid-template-columns:1fr;gap:0}
  .button,button{min-height:48px}.button.small{min-height:44px;font-size:13px}
  .actions{display:grid;grid-template-columns:1fr;gap:9px}.actions>.button,.actions>button,.actions>label.button{width:100%}
  .session,.today-next-session{grid-template-columns:1fr;gap:4px;padding:15px 0}.session-date{font-size:12px}
  .readiness-strip{grid-template-columns:repeat(14,minmax(8px,1fr))}.readiness-day{height:30px}
  .runnerly-chart{padding:12px}.runnerly-chart svg{max-height:170px}
  .mobile-tabbar{
    position:fixed;
    left:0;right:0;bottom:0;
    z-index:180;
    display:grid;
    grid-template-columns:repeat(5,minmax(0,1fr));
    align-items:stretch;
    width:100%;
    height:calc(var(--mobile-tabbar-height) + env(safe-area-inset-bottom));
    min-height:calc(var(--mobile-tabbar-height) + env(safe-area-inset-bottom));
    max-height:calc(var(--mobile-tabbar-height) + env(safe-area-inset-bottom));
    padding:4px max(8px,env(safe-area-inset-right)) env(safe-area-inset-bottom) max(8px,env(safe-area-inset-left));
    box-sizing:border-box;
    overflow:hidden;
    background:color-mix(in srgb,var(--paper) 90%,transparent);
    border-top:1px solid var(--line);
    box-shadow:0 -8px 30px rgba(12,25,23,.08);
    backdrop-filter:blur(18px) saturate(150%);
    -webkit-backdrop-filter:blur(18px) saturate(150%);
    transform:translate3d(0,0,0);
    transition:transform .16s ease,opacity .16s ease;
    will-change:transform;
    contain:layout paint;
  }
  .mobile-tab{min-width:0;height:60px;min-height:0;max-height:60px;padding:4px 2px;margin:0;box-sizing:border-box;overflow:hidden;border:0;border-radius:12px;background:transparent;color:var(--secondary-text);text-decoration:none;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;font-size:10px;font-weight:700;line-height:1.05}
  .mobile-tab:hover{background:var(--surface-2);color:var(--ink)}
  .mobile-tab[aria-current="page"]{color:var(--accent);background:var(--accent-soft)}
  .mobile-tab .ui-icon{width:21px;height:21px}
  .mobile-tab-more{font:inherit}
  .site-footer{padding-bottom:calc(var(--mobile-tabbar-height) + 18px + env(safe-area-inset-bottom))}
  .site-menu{bottom:calc(var(--mobile-tabbar-height) + env(safe-area-inset-bottom));top:auto;max-height:min(68dvh,560px);border-top:1px solid var(--line);border-radius:18px 18px 0 0;background:#111827;padding:10px 16px 16px;box-shadow:0 -18px 40px rgba(0,0,0,.28)}
  body.mobile-keyboard-open .mobile-tabbar{transform:translate3d(0,110%,0);opacity:0;pointer-events:none}
  body.mobile-keyboard-open .theme-toggle{opacity:0;pointer-events:none}
  .site-menu .topnav a,.site-menu .utility-nav a{min-height:46px;font-size:14px;padding:11px 12px}
  body.menu-open:before{content:"";position:fixed;inset:0;z-index:170;background:rgba(0,0,0,.35);backdrop-filter:blur(2px)}
  .site-header{z-index:190}.site-menu{z-index:195}
}

@media(max-width:680px){
  h1{font-size:clamp(27px,8vw,34px)}h2{font-size:21px}
  .table-wrap{border:0;overflow:visible;background:transparent}
  .plan-table{display:block;min-width:0;background:transparent}.plan-table thead{display:none}.plan-table tbody{display:grid;gap:10px}.plan-table tr{display:grid;grid-template-columns:1fr 1fr;gap:5px 12px;padding:13px 14px;border:1px solid var(--line);border-radius:14px;background:var(--paper);box-shadow:var(--shadow)}
  .plan-table td{display:block;width:auto!important;padding:2px 0!important;border:0!important;white-space:normal!important;background:transparent!important}
  .plan-table tr:not(.plan-week-row):not(.plan-numbered-week-row) td:before{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.055em;color:var(--secondary-text);font-weight:760;margin-bottom:1px}
  .plan-table tr:not(.plan-week-row):not(.plan-numbered-week-row) td:nth-child(1):before{content:"Date"}.plan-table tr:not(.plan-week-row):not(.plan-numbered-week-row) td:nth-child(2):before{content:"Session"}.plan-table tr:not(.plan-week-row):not(.plan-numbered-week-row) td:nth-child(3):before{content:"Prescription"}.plan-table tr:not(.plan-week-row):not(.plan-numbered-week-row) td:nth-child(4):before{content:"Priority"}.plan-table tr:not(.plan-week-row):not(.plan-numbered-week-row) td:nth-child(5):before{content:"Status"}
  .plan-table td:nth-child(2),.plan-table td:nth-child(3){grid-column:1/-1}.plan-table .plan-session-link{font-size:16px}
  .plan-table .plan-week-row,.plan-table .plan-numbered-week-row{display:block;padding:9px 12px;border-radius:10px;box-shadow:none}.plan-table .plan-week-row td,.plan-table .plan-numbered-week-row td{display:block}
  .plan-table .plan-numbered-week-row{background:#111827;color:#fff}.plan-table .plan-week-row{background:var(--surface-2);color:var(--secondary-text)}

  .quality-table,.race-readiness .table,.race-execution-table,.race-diagnosis .table,.race-card .table,.continuity-card .table{display:block;background:transparent}
  .quality-table thead,.race-readiness .table thead,.race-execution-table thead,.race-diagnosis .table thead,.race-card .table thead,.continuity-card .table thead{display:none}
  .quality-table tbody,.race-readiness .table tbody,.race-execution-table tbody,.race-diagnosis .table tbody,.race-card .table tbody,.continuity-card .table tbody{display:grid;gap:10px}
  .quality-table tr,.race-readiness .table tr,.race-execution-table tr,.race-diagnosis .table tr,.race-card .table tr,.continuity-card .table tr{display:block;border:1px solid var(--line);border-radius:14px;padding:11px 13px;background:var(--paper)}
  .quality-table td,.race-readiness .table td,.race-execution-table td,.race-diagnosis .table td,.race-card .table td,.continuity-card .table td{display:block!important;width:auto!important;padding:4px 0!important;border:0!important;background:transparent!important}
  .quality-table td:before,.race-readiness .table td:before,.race-execution-table td:before,.race-diagnosis .table td:before,.race-card .table td:before,.continuity-card .table td:before{display:block;font-size:10px;text-transform:uppercase;letter-spacing:.05em;color:var(--secondary-text);font-weight:760;margin-bottom:1px}
  .quality-table td:nth-child(1):before{content:"Quality"}.quality-table td:nth-child(2):before{content:"Current state"}.quality-table td:nth-child(3):before{content:"Evidence"}
  .race-readiness .table td:nth-child(1):before{content:"Dimension"}.race-readiness .table td:nth-child(2):before{content:"Current state"}.race-readiness .table td:nth-child(3):before{content:"Evidence"}
  .race-execution-table td:nth-child(1):before{content:"Phase"}.race-execution-table td:nth-child(2):before{content:"Distance"}.race-execution-table td:nth-child(3):before{content:"Pace reference"}.race-execution-table td:nth-child(4):before{content:"Execution cue"}
  .race-card .table td:nth-child(1):before{content:"Point"}.race-card .table td:nth-child(2):before{content:"Phase"}.race-card .table td:nth-child(3):before{content:"Split"}.race-card .table td:nth-child(4):before{content:"Cumulative"}.race-card .table td:nth-child(5):before{content:"Pace"}
  .continuity-card .table td:nth-child(1):before{content:"Week"}.continuity-card .table td:nth-child(2):before{content:"Planned"}.continuity-card .table td:nth-child(3):before{content:"Completed"}.continuity-card .table td:nth-child(4):before{content:"Partial"}.continuity-card .table td:nth-child(5):before{content:"Missed"}.continuity-card .table td:nth-child(6):before{content:"Continuity"}
}

@media(max-width:420px){
  .shell{width:calc(100% - 18px)}
  .card{padding:16px;border-radius:16px}
  .theme-toggle{right:9px}
  .mobile-tabbar{padding-left:max(4px,env(safe-area-inset-left));padding-right:max(4px,env(safe-area-inset-right))}.mobile-tab{font-size:9.5px}.mobile-tab .ui-icon{width:20px;height:20px}
  .activity-metrics .span-3{grid-column:span 12}
  .season-marker{min-width:100%}
}

@media(min-width:1440px){
  :root{--content-max:1360px}
  .main{padding-top:46px}
  .card{padding:30px}
}

@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}
@media(prefers-contrast:more){
  :root{--line:#9aaba6;--secondary-text:#42524e}.card,input,select,textarea,.check,.table-wrap{border-width:2px}.button.secondary{border-width:2px}
  html[data-theme="dark"]{--line:#7f9790;--secondary-text:#d3dfdb}
}
@media print{
  .theme-toggle,.mobile-tabbar{display:none!important}
  html,body{background:#fff!important;color:#111!important}.card{background:#fff!important;color:#111!important;border-color:#ddd!important;box-shadow:none!important}
}
.chart-fill-start{stop-color:var(--accent);stop-opacity:.22}.chart-fill-end{stop-color:var(--accent);stop-opacity:.015}
input[type="file"]{padding:7px;background:var(--input-bg)}
input[type="file"]::file-selector-button{min-height:38px;margin-right:10px;border:1px solid var(--line);border-radius:10px;padding:8px 12px;background:var(--surface-2);color:var(--accent-ink);font:inherit;font-weight:700;cursor:pointer}
input[type="file"]::file-selector-button:hover{background:var(--surface-3)}
.today-session-card .today-primary-actions{margin-top:16px;margin-bottom:4px}.today-session-card .why-session{margin-top:16px}
@media(max-width:800px){.today-session-card .today-primary-actions .button{width:100%}}
@media(max-width:800px){.site-menu{position:fixed;left:0;right:0}}
html{-webkit-text-size-adjust:100%}
a,button,label,input,select,textarea{touch-action:manipulation}
.site-header{padding-top:env(safe-area-inset-top)}
@media(max-width:1000px) and (min-width:801px){.topnav a{font-size:12.5px;padding-inline:7px}.utility-nav a{padding-inline:6px}.header-inner{gap:14px}.brand-name{max-width:150px}}


/* v0.7.0.2 — native mobile stability and compact type */
.plan-summary-meta{display:flex;flex-wrap:wrap;gap:5px 18px;color:var(--secondary-text)}
.plan-summary-meta p{margin:0}
.plan-summary-meta strong{color:var(--ink)}
@media(max-width:800px){
  /* Retained focus must not make the persistent app navigation disappear.
     The bar moves only while a real software keyboard is confirmed open. */
  body.mobile-input-active .mobile-tabbar{transform:translate3d(0,0,0);opacity:1;pointer-events:auto}
  body.mobile-input-active .theme-toggle{opacity:1;pointer-events:auto}
  body.mobile-keyboard-open .mobile-tabbar{transform:translate3d(0,110%,0);opacity:0;pointer-events:none}
  body.mobile-keyboard-open .theme-toggle{opacity:0;pointer-events:none}

  body.native-app{font-size:14px;line-height:1.52}
  body.native-app h1{font-size:clamp(25px,7vw,31px)}
  body.native-app h2{font-size:19px}
  body.native-app h3{font-size:15px}
  body.native-app .lead{font-size:14px;line-height:1.42}
  body.native-app .hint,
  body.native-app .backup-note{font-size:12px}
  body.native-app label{font-size:13px}
  body.native-app input,
  body.native-app select,
  body.native-app textarea{font-size:14px}

  body.native-app .plan-summary-head{margin-bottom:15px}
  body.native-app .plan-summary-head h1{font-size:24px;margin-bottom:6px}
  body.native-app .plan-summary-lead{font-size:13.5px;margin:0 0 8px}
  body.native-app .plan-summary-meta{display:grid;grid-template-columns:1fr;gap:3px;font-size:12.5px;line-height:1.38}
  body.native-app .plan-summary-meta p{margin:0}
}
@media(max-width:680px){
  body.native-app .plan-table .plan-session-link{font-size:14.5px}
  body.native-app .plan-table tr{padding:11px 12px}
  body.native-app .plan-table tr:not(.plan-week-row):not(.plan-numbered-week-row) td:before{font-size:9.5px}
}

/* v0.7.0.4 — persistent native tabbar and 50% compact native mobile typography */
@media(max-width:800px){
  /* Android WebView can intermittently drop composited fixed elements while a long
     page scrolls. Keep the native tabbar on a simple, opaque fixed layer and never
     translate it away. */
  body.native-app .mobile-tabbar,
  body.native-app.mobile-keyboard-open .mobile-tabbar,
  body.native-app.mobile-input-active .mobile-tabbar{
    display:grid!important;
    position:fixed!important;
    left:0!important;
    right:0!important;
    bottom:0!important;
    visibility:visible!important;
    opacity:1!important;
    pointer-events:auto!important;
    transform:none!important;
    background:var(--paper)!important;
    backdrop-filter:none!important;
    -webkit-backdrop-filter:none!important;
    contain:none!important;
    will-change:auto!important;
    z-index:1000!important;
  }

  /* Approximately 50% smaller type throughout the installed small-screen app.
     Touch-target dimensions are deliberately retained for usability. */
  body.native-app{font-size:7px;line-height:1.48}
  body.native-app h1{font-size:15.5px;line-height:1.08}
  body.native-app h2{font-size:9.5px;line-height:1.18}
  body.native-app h3{font-size:7.5px;line-height:1.25}
  body.native-app h4{font-size:7.5px}
  body.native-app .lead{font-size:7px;line-height:1.42}
  body.native-app .hint,
  body.native-app .backup-note,
  body.native-app .privacy-note{font-size:6px}
  body.native-app label{font-size:6.5px}
  body.native-app input,
  body.native-app select,
  body.native-app textarea{font-size:7px}
  body.native-app .button,
  body.native-app button{font-size:7px}
  body.native-app .button.small{font-size:6.5px}
  body.native-app .badge{font-size:5.5px}
  body.native-app .stat{font-size:15px}
  body.native-app .stat-label{font-size:6px}
  body.native-app .session-date{font-size:6.5px}
  body.native-app .session-title{font-size:7.5px}
  body.native-app .stage-band{font-size:7px}
  body.native-app .table th,
  body.native-app .quality-table th{font-size:5.5px}
  body.native-app .plan-numbered-week-row td{font-size:6px}
  body.native-app .plan-week-row td{font-size:5.5px}
  body.native-app .runnerly-chart-label{font-size:6px}
  body.native-app .chart-text{font-size:5.5px}
  body.native-app .chart-range{font-size:5.5px}
  body.native-app .readiness-legend{font-size:6px}
  body.native-app .season-marker span,
  body.native-app .trajectory-race span{font-size:6px}
  body.native-app .site-footer,
  body.native-app footer{font-size:6px}
  body.native-app .site-menu .topnav a,
  body.native-app .site-menu .utility-nav a{font-size:7px}
  body.native-app .mobile-tab{font-size:5px}
  body.native-app .menu-toggle-text{font-size:4.5px}

  body.native-app .plan-summary-head h1{font-size:12px}
  body.native-app .plan-summary-lead{font-size:6.75px}
  body.native-app .plan-summary-meta{font-size:6.25px;line-height:1.35}
}
@media(max-width:680px){
  body.native-app .plan-table .plan-session-link{font-size:7.25px}
  body.native-app .plan-table tr:not(.plan-week-row):not(.plan-numbered-week-row) td:before,
  body.native-app .quality-table td:before,
  body.native-app .race-readiness .table td:before,
  body.native-app .race-execution-table td:before,
  body.native-app .race-diagnosis .table td:before,
  body.native-app .race-card .table td:before,
  body.native-app .continuity-card .table td:before{font-size:5px}
}

/* v0.7.0.5 — welcome/index typography aligned with compact native screens */
@media(max-width:800px){
  /* The base .hero p rule is 15px and otherwise overrides the native body's
     inherited 7px type. Keep the welcome hero copy on the same compact scale
     as the rest of the installed mobile application. */
  body.native-app[data-page="welcome"] .hero p{font-size:7px;line-height:1.48}
}

/* v0.6.1.4 — subscriber pages: robust single-column commercial flow */
.subscriber-page{width:min(760px,100%);margin-inline:auto}
.subscriber-login-page{width:min(620px,100%)}
.subscriber-page .page-head{margin-bottom:24px}
.subscriber-stack{display:grid;grid-template-columns:minmax(0,1fr);gap:18px}
.subscriber-card{width:100%;min-width:0;overflow:hidden}
.subscriber-plan-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:18px}
.subscriber-plan-choice{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:11px;margin:0;padding:16px;border:1px solid var(--line);border-radius:14px;background:var(--paper);cursor:pointer;min-width:0}
.subscriber-plan-choice:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--line));background:color-mix(in srgb,var(--accent-soft) 28%,var(--paper))}
.subscriber-plan-choice:has(input:checked){border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 13%,transparent);background:color-mix(in srgb,var(--accent-soft) 58%,var(--paper))}
.subscriber-plan-choice input[type="radio"]{width:auto;min-width:0;min-height:0;margin:4px 0 0;padding:0}
.subscriber-plan-choice>span{min-width:0}
.subscriber-plan-heading{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:5px}
.subscriber-plan-heading strong{font-size:16px;color:var(--ink)}
.subscriber-plan-price{display:block;font-size:18px;line-height:1.25;font-weight:780;color:var(--ink);margin:2px 0 4px}
.subscriber-plan-note{display:block;margin:0;overflow-wrap:anywhere}
.subscriber-plan-footer{margin:16px 0 0}
.subscriber-fields{width:100%;max-width:560px}
.subscriber-fields label:first-child{margin-top:10px}
.subscriber-fields input{display:block;width:100%}
.subscriber-actions{align-items:center}
.subscriber-benefits{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 26px}
.subscriber-benefits h3{margin-bottom:5px}
.subscriber-benefits p{margin-top:0;margin-bottom:8px}
@media(max-width:700px){
  .subscriber-page,.subscriber-login-page{width:100%}
  .subscriber-plan-list,.subscriber-benefits{grid-template-columns:1fr}
  .subscriber-plan-choice{padding:14px}
  .subscriber-actions{display:grid;grid-template-columns:1fr;gap:9px}
  .subscriber-actions>.button,.subscriber-actions>button{width:100%}
}


/* v0.6.1.5 — account page and subscription navigation polish */
.subscriber-account-page{width:min(760px,100%)}
.subscriber-account-head-actions{margin-top:0;justify-content:flex-end}
.subscriber-account-status{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:18px 0}
.subscriber-account-status-item{min-width:0;padding:14px;border:1px solid var(--line);border-radius:14px;background:var(--surface-2)}
.subscriber-account-status-item span{display:block;margin-bottom:4px;font-size:12px;line-height:1.3;color:var(--secondary-text);font-weight:700}
.subscriber-account-status-item strong{display:block;font-size:16px;line-height:1.3;color:var(--ink);overflow-wrap:anywhere}
.subscriber-account-plans{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:18px}
.subscriber-account-plan{min-width:0;padding:18px;border:1px solid var(--line);border-radius:14px;background:var(--paper)}
.subscriber-account-plan:first-child{border-color:color-mix(in srgb,var(--accent) 55%,var(--line));background:color-mix(in srgb,var(--accent-soft) 30%,var(--paper))}
.subscriber-account-plan .actions{margin-top:18px}
@media(max-width:700px){
  .subscriber-account-head-actions{width:100%;display:grid;grid-template-columns:1fr;gap:9px}
  .subscriber-account-head-actions>.button{width:100%}
  .subscriber-account-status,.subscriber-account-plans{grid-template-columns:1fr}
  .subscriber-account-plan{padding:16px}
  .subscriber-account-plan .actions{display:grid;grid-template-columns:1fr}
  .subscriber-account-plan .actions>button{width:100%}
}

/* Google Play badge on the registration page — retain original Google artwork */
.subscriber-google-play{margin-top:16px}
.subscriber-google-play a{display:inline-block;max-width:100%;line-height:0}
.subscriber-google-play img{display:block;width:180px;max-width:100%;height:auto}
.subscriber-google-play a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px}
