:root{--paper: #e7edf2;--ghost: #f3f6f8;--ink: #12171f;--muted: #3d4a55;--rule: #c5d0d8;--lane: #2f6fae;--lane-dim: #8eacc4;--pine: #1e4a46;--clay: #9a4b32;--easy: #4a5c68;--focus: #2f6fae;--display: "Big Shoulders Display", "Arial Narrow", sans-serif;--sans: "IBM Plex Sans", "Helvetica Neue", sans-serif;--mono: "IBM Plex Mono", ui-monospace, monospace}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:16px;line-height:1.45}button,input,textarea,select{font:inherit;color:inherit}button{cursor:pointer}a{color:var(--lane)}:focus-visible{outline:2px solid var(--focus);outline-offset:3px}.app{min-height:100dvh;display:grid;grid-template-columns:minmax(280px,400px) 1fr}.bib{padding:28px 24px 40px;border-right:1px solid var(--rule);background:var(--ghost)}.brand{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:28px}.brand mark,.brand-mark mark{font-family:var(--display);font-size:2rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;background:none;color:var(--ink)}.brand a,.brand-mark{color:inherit;text-decoration:none}.brand-races{font-family:var(--mono);font-size:.72rem;color:var(--muted);letter-spacing:.04em;text-transform:uppercase}.brand-races:hover{color:var(--lane)}.thesis{font-family:var(--display);font-weight:700;font-size:clamp(2.4rem,5vw,3.4rem);line-height:.9;letter-spacing:-.02em;text-transform:uppercase;margin:0 0 10px}.lede{margin:0 0 28px;color:var(--muted);max-width:34ch}.field{display:grid;gap:8px;margin-bottom:20px}.field label,.legend{font-family:var(--mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.choices{display:grid;grid-template-columns:1fr 1fr;gap:8px}.choice,.day,.goal{border:1px solid var(--rule);background:var(--paper);padding:10px 12px;text-align:left}.choice strong,.day,.goal{font-family:var(--display);font-weight:700;letter-spacing:.04em;text-transform:uppercase}.choice small{display:block;font-family:var(--mono);font-size:.68rem;color:var(--muted);margin-top:2px}.choice[aria-pressed=true],.day[aria-pressed=true],.goal[aria-pressed=true]{background:var(--ink);color:var(--ghost);border-color:var(--ink)}.choice[aria-pressed=true] small{color:var(--lane-dim)}.days{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.day{padding:10px 0;text-align:center;font-size:.95rem}.row{display:grid;grid-template-columns:1fr 1fr;gap:12px}input[type=date],input[type=number],input[type=text],input[type=email],textarea{width:100%;border:0;border-bottom:1px solid var(--ink);background:transparent;padding:8px 0;border-radius:0}input::placeholder,textarea::placeholder{color:var(--lane-dim);opacity:1}textarea{min-height:72px;resize:vertical}.goals{display:grid;grid-template-columns:1fr 1fr;gap:8px}.build{width:100%;margin-top:8px;border:0;background:var(--lane);color:#fff;font-family:var(--display);font-size:1.6rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;padding:14px 16px}.build:hover{background:#245c94}.build:disabled{opacity:.5;cursor:not-allowed}a.build{display:block;text-align:center;text-decoration:none}.honesty{margin-top:18px;font-size:.92rem;color:var(--muted)}.warnings{margin:12px 0 0;padding-left:18px;color:var(--clay);font-size:.88rem}.nag{margin:-12px 0 20px;color:var(--pine);font-size:.88rem}.lane{position:relative;padding:28px 28px 64px 36px}.lane:before{content:"";position:absolute;top:0;bottom:0;left:18px;width:3px;background:linear-gradient(var(--lane),var(--lane-dim))}.empty{min-height:60vh;display:grid;align-content:center;padding-left:16px;color:var(--muted)}.empty p{max-width:28ch}.week{position:relative;padding:0 0 32px 16px;animation:rise .42s ease both}.week:before{content:"";position:absolute;left:-22px;top:10px;width:11px;height:11px;background:var(--paper);border:3px solid var(--lane)}.week[data-phase=taper]:before{border-color:var(--clay)}.week[data-phase=peak]:before{background:var(--lane)}.marker{display:flex;align-items:baseline;gap:12px;margin-bottom:8px}.marker b{font-family:var(--display);font-size:2.4rem;font-weight:800;letter-spacing:.04em;line-height:1}.marker span{font-family:var(--mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.splits{display:grid;gap:4px}.split{width:100%;display:grid;grid-template-columns:44px 1fr auto;gap:12px;align-items:baseline;padding:8px 10px;border:0;background:transparent;text-align:left}.split:hover,.split[aria-expanded=true]{background:#2f6fae14}.split .dow{font-family:var(--mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.split .name{font-weight:500}.split .load{font-family:var(--mono);font-size:.78rem;color:var(--muted)}.split[data-cat=long] .name{color:var(--lane)}.split[data-cat=tempo],.split[data-cat=intervals],.split[data-cat=hills]{box-shadow:inset 3px 0 0 var(--pine)}.split[data-cat=race]{box-shadow:inset 3px 0 0 var(--clay)}.split[data-cat=rest]{opacity:.45}.split[data-status=completed] .name{text-decoration:line-through;color:var(--muted)}.split[data-status=completed] .load{color:var(--pine);font-weight:500}.split[data-status=skipped]{opacity:.55}.split[data-status=skipped] .load{color:var(--clay)}.checkoffs{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.checkoffs .export[data-active=true]{border-color:var(--ink);color:var(--ink);background:#12171f0f}.outline{margin:0 0 8px 66px;padding:0 0 8px;font-size:.88rem;color:var(--muted)}.outline ul{margin:0;padding-left:0;list-style:none}.athlete-note{margin:0 0 8px;color:var(--pine);font-style:italic}.outline li{margin:2px 0}.outline .rep{margin:6px 0 2px;font-family:var(--mono);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase;color:var(--pine)}.save-hint{margin-top:24px;font-size:.88rem;color:var(--muted)}.race-code{font-family:var(--mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--lane);margin:0 0 8px}.race-facts .split{cursor:default}.race-facts,.season{animation:none}.start-row{grid-template-columns:52px 1fr auto;text-decoration:none;color:inherit}.start-row .name small{display:block;margin-top:2px;font-family:var(--mono);font-size:.72rem;font-weight:400;letter-spacing:.04em;color:var(--muted)}.race-copy{padding:8px 0 48px 16px;max-width:62ch}.race-copy p{margin:0 0 1.15em;color:var(--muted)}.race-copy p:first-child{color:var(--ink)}.exports{display:flex;flex-wrap:wrap;gap:1.25rem;margin-top:20px;padding-top:16px;border-top:3px solid var(--lane)}.export{border:0;background:none;padding:0;font-family:var(--mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--lane);text-decoration:underline;text-underline-offset:4px}.export:hover{color:var(--ink)}.export[data-copied=true]{color:var(--pine);text-decoration:none}.mail{margin-top:20px;display:grid;gap:12px}.mail .export{justify-self:start}.mail .save-hint{margin-top:0}.sync{margin-top:20px;display:grid;gap:12px;padding-top:16px;border-top:1px solid var(--rule)}.sync select{width:100%;border:0;border-bottom:1px solid var(--ink);background:transparent;padding:8px 0;border-radius:0}.sync .export{justify-self:start}.sync .save-hint,.sync .nag{margin-top:0}.print-mast{display:none}@media(max-width:860px){.app{display:flex;flex-direction:column}.bib,.lane{width:100%;min-width:0}.bib{border-right:0;border-bottom:1px solid var(--rule)}.row{grid-template-columns:1fr}.day{min-height:44px}.lane{padding:24px 16px 48px 28px}.lane:before{left:12px}.split{grid-template-columns:40px 1fr;grid-template-rows:auto auto}.split .load{grid-column:2}.outline{margin-left:40px}.start-row{grid-template-columns:52px 1fr}}@media(prefers-reduced-motion:reduce){.week{animation:none}}@media print{.print-mast{display:block;margin:0 0 24px}.print-mast strong{font-family:var(--display);font-size:2rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase}.print-mast p{color:var(--muted);max-width:60ch}.bib,.exports,.save-hint,.mail,.sync,.checkoffs,.lane:before,.week:before{display:none!important}.app{display:block}.lane{padding:0}.week{animation:none;break-inside:avoid;page-break-inside:avoid;padding-bottom:16px}.outline{display:block!important}.split:hover,.split[aria-expanded=true]{background:transparent}}.site{min-height:100dvh}.site-bar{display:flex;align-items:baseline;justify-content:space-between;gap:16px;max-width:920px;margin:0 auto;padding:28px 28px 0 36px}.site-nav{display:flex;flex-wrap:wrap;gap:1.25rem;font-family:var(--mono);font-size:.72rem;letter-spacing:.04em;text-transform:uppercase}.site-nav a{color:var(--muted);text-decoration:none}.site-nav a:hover{color:var(--lane)}.site-track{position:relative;max-width:920px;margin:0 auto;padding:40px 28px 80px 36px}.site-track:before{content:"";position:absolute;top:0;bottom:0;left:18px;width:3px;background:linear-gradient(var(--lane),var(--lane-dim))}.site-hero{position:relative;padding:0 0 28px 16px}.site-hero:before{content:"";position:absolute;left:-22px;top:14px;width:11px;height:11px;background:var(--lane);border:3px solid var(--lane)}.site-hero .thesis{font-size:clamp(3rem,11vw,6.4rem);max-width:11ch;margin-bottom:16px;line-height:.92}.site-lede{margin:0 0 28px;color:var(--muted);max-width:42ch;font-size:1.05rem}.site-cta{display:flex;flex-wrap:wrap;align-items:baseline;gap:1.25rem 1.75rem;margin:0 0 28px}.site-cta .build,.site-close .build{width:auto;margin-top:0;padding:12px 22px}.site-distances{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;max-width:560px}a.choice{display:block;text-decoration:none;color:inherit}a.choice:hover{border-color:var(--ink);background:var(--ghost)}.site-beat-copy,.site-sample-note{margin:0 0 8px;max-width:54ch;color:var(--muted)}.site-sample .honesty{margin:0 0 8px}.site-sample .split{cursor:default}.site-sample-note a{color:var(--lane)}.site-starts .season+.season{padding-top:8px}.site-close{padding-top:8px}@media(max-width:860px){.site-bar{padding:24px 16px 0 28px}.site-track{padding:32px 16px 64px 28px}.site-track:before{left:12px}.site-track .week:before,.site-hero:before{left:-20px}.site-distances{grid-template-columns:1fr 1fr}.site-hero .thesis{font-size:clamp(2.6rem,14vw,4rem)}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
