:root{--bg:#121417;--bg-elev:#1b1f24;--bg-card:#232830;--text:#e8ebee;--text-muted:#9aa3ad;--text-dim:#6b7480;--rule:#2a3038;--accent:#7cc4ff;--accent-soft:#7cc4ff1f;--warn:#f0b95f;--good:#7adb8a;--bad:#f08080;--link:#7cc4ff;--link-hover:#a3d6ff;--sport-run:#7adb8a;--sport-ride:#7cc4ff;--sport-swim:#6fd6e8;--sport-strength:#f0b95f;--athlete-carl:#7cc4ff;--athlete-carrie:#f0b95f;--athlete-becca:#c39bd3;--athlete-tandra:#7adb8a}*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}html,body{background:var(--bg);color:var(--text);-webkit-text-size-adjust:100%;margin:0;padding:0}body{padding:0 16px max(16px, env(safe-area-inset-bottom));min-height:100vh;font:16px/1.6 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}a{color:var(--link);text-decoration:none}a:hover{color:var(--link-hover)}.portal{max-width:760px;margin:0 auto;padding:24px 0 64px}.topbar{border-bottom:1px solid var(--rule);justify-content:space-between;align-items:baseline;gap:12px;margin:0 0 28px;padding:0 0 14px;display:flex}.topbar-brand{letter-spacing:.02em;text-transform:uppercase;color:var(--text-muted);font-size:.92rem;font-weight:600}.topbar-brand .dot{color:var(--accent)}.topbar-nav{gap:14px;font-size:.88rem;display:flex}.topbar-nav a{color:var(--text-muted);border-bottom:1px dotted #0000;text-decoration:none}.topbar-nav a:hover,.topbar-nav a.active{color:var(--text);border-bottom-color:var(--accent)}.page-title{letter-spacing:-.01em;margin:0 0 6px;font-size:1.7rem;font-weight:700}.page-lead{color:var(--text-muted);margin:0 0 28px;font-size:1rem}.section-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin:28px 0 12px;font-size:.78rem;font-weight:600}.race-card{background:var(--bg-elev);border:1px solid var(--rule);color:var(--text);border-radius:14px;margin:0 0 14px;padding:18px 18px 16px;text-decoration:none;transition:border-color .12s,transform .12s;display:block}.race-card:hover{border-color:var(--accent);transform:translateY(-1px)}.race-card .race-when{color:var(--text-muted);font-variant-numeric:tabular-nums;align-items:baseline;gap:10px;margin-bottom:6px;font-size:.85rem;display:flex}.race-card .race-countdown{color:var(--accent);font-weight:600}.race-card .race-countdown.race-past{color:var(--text-dim)}.race-card .race-name{letter-spacing:-.01em;color:var(--text);margin:0 0 8px;font-size:1.18rem;font-weight:600}.race-card .race-detail{color:var(--text-muted);margin:0 0 14px;font-size:.92rem}.race-card .race-attrs{flex-wrap:wrap;gap:6px;margin-bottom:14px;display:flex}.race-attr{background:var(--bg-card);color:var(--text-muted);letter-spacing:.02em;border-radius:20px;padding:3px 9px;font-size:.74rem}.race-card .race-athletes{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.race-card .race-athletes-label{color:var(--text-dim);letter-spacing:.05em;text-transform:uppercase;font-size:.78rem}.race-card .race-no-athletes{color:var(--text-dim);font-size:.88rem;font-style:italic}.athlete-pill{background:var(--bg-card);border:1px solid var(--rule);color:var(--text);border-radius:22px;align-items:center;gap:8px;padding:4px 10px 4px 4px;font-size:.88rem;text-decoration:none;transition:border-color .12s;display:inline-flex}.athlete-pill:hover{border-color:var(--accent);color:var(--text)}.avatar{background:var(--accent);width:28px;height:28px;color:var(--bg);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:.78rem;font-weight:700;display:inline-flex}.avatar.lg{width:44px;height:44px;font-size:1.05rem}.avatar.xl{width:56px;height:56px;font-size:1.3rem}.avatar-carl{background:var(--athlete-carl)}.avatar-carrie{background:var(--athlete-carrie)}.avatar-becca{background:var(--athlete-becca)}.avatar-tandra{background:var(--athlete-tandra)}.athlete-header{border-bottom:1px solid var(--rule);align-items:center;gap:16px;margin-bottom:24px;padding:20px 0 24px;display:flex}.athlete-header .athlete-id{flex-direction:column;gap:4px;display:flex}.athlete-header .athlete-name{letter-spacing:-.01em;color:var(--text);margin:0;font-size:1.6rem;font-weight:700;line-height:1.1}.athlete-header .athlete-context{color:var(--text-muted);margin:0;font-size:.94rem}.athlete-header .athlete-context .race-link{color:var(--text);border-bottom:1px dotted var(--rule);font-weight:500;text-decoration:none}.athlete-header .athlete-context .race-link:hover{border-bottom-color:var(--accent);color:var(--accent)}.athlete-header .athlete-context .no-race{color:var(--text-dim);font-style:italic}.snapshot{background:var(--bg-elev);border:1px solid var(--rule);border-radius:14px;margin:0 0 24px;padding:16px 18px}.snapshot-head{justify-content:space-between;align-items:baseline;margin-bottom:10px;display:flex}.snapshot-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin:0;font-size:.78rem;font-weight:600}.snapshot-fresh{color:var(--text-dim);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.72rem}.snapshot-fresh.stale{color:var(--warn)}.snapshot-grid{grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:10px;display:grid}.snapshot-cell{flex-direction:column;gap:2px;display:flex}.snapshot-label{letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);font-size:.72rem}.snapshot-value{font-variant-numeric:tabular-nums;color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:1.3rem;font-weight:600}.snapshot-value.pos{color:var(--good)}.snapshot-value.neg{color:var(--warn)}.snapshot-value.unset{color:var(--text-dim);font-size:1rem}.snapshot-read{color:var(--text-muted);margin:6px 0 0;font-size:.88rem;line-height:1.45}.snapshot-read .zone{color:var(--accent);font-weight:600}.constraints{background:var(--bg-elev);border:1px solid var(--rule);border-radius:14px;margin:0 0 24px;padding:14px 16px 12px}.constraints-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin:0 0 8px;font-size:.78rem;font-weight:600}.constraint-row{color:var(--text);border-top:1px solid var(--rule);align-items:flex-start;gap:10px;padding:6px 0;font-size:.92rem;display:flex}.constraint-row:first-of-type{border-top:0;padding-top:4px}.constraint-row .marker{letter-spacing:.06em;text-transform:uppercase;border-radius:4px;flex-shrink:0;margin-top:2px;padding:2px 7px;font-size:.72rem;font-weight:600}.marker-hard{color:var(--bad);background:#f0808026}.marker-preference{color:var(--accent);background:#7cc4ff21}.marker-medical-safety{color:var(--warn);background:#f0b95f2e}.marker-info{background:var(--bg-card);color:var(--text-muted)}.constraint-text{flex:1}.constraint-text .desc{display:block}.constraint-text .meta{color:var(--text-dim);margin-top:2px;font-size:.78rem;display:block}.artifact{background:var(--bg-elev);border:1px solid var(--rule);color:var(--text);border-radius:12px;align-items:stretch;margin:0 0 10px;padding:14px 16px;text-decoration:none;transition:border-color .12s,transform .12s;display:flex}.artifact:hover{border-color:var(--accent);color:var(--text);transform:translate(1px)}.artifact-body{flex-direction:column;flex:1;gap:2px;display:flex}.artifact-title{letter-spacing:-.005em;color:var(--text);font-size:1.02rem;font-weight:600}.artifact-meta{color:var(--text-muted);font-variant-numeric:tabular-nums;font-size:.84rem}.artifact-kicker{letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim);margin-bottom:4px;font-size:.72rem}.artifact-arrow{color:var(--text-dim);align-items:center;margin-left:12px;font-size:1.2rem;display:flex}.artifact:hover .artifact-arrow{color:var(--accent)}.artifact.featured{background:var(--accent-soft);border-color:#7cc4ff52}.artifact.featured .artifact-kicker{color:var(--accent)}.archive{margin-top:14px}.archive>summary{cursor:pointer;background:var(--bg-elev);border:1px solid var(--rule);color:var(--text-muted);border-radius:10px;justify-content:space-between;align-items:center;padding:10px 14px;font-size:.88rem;list-style:none;display:flex}.archive>summary::-webkit-details-marker{display:none}.archive>summary:after{content:"▾";color:var(--text-dim);font-size:.8rem;transition:transform .12s}.archive[open]>summary:after{transform:rotate(180deg)}.archive .archive-body{padding:8px 0 0}.archive .artifact{background:0 0}.archive .artifact .artifact-title{color:var(--text-muted);font-weight:500}.archive .artifact:hover .artifact-title{color:var(--text)}.tools{background:var(--bg-elev);border:1px solid var(--rule);border-radius:14px;margin-top:28px;padding:16px 18px}.tools-title{letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin:0 0 10px;font-size:.78rem;font-weight:600}.tools-list{flex-direction:column;gap:4px;display:flex}.tool-link{color:var(--text);border-bottom:1px solid var(--rule);align-items:center;gap:10px;padding:9px 4px;font-size:.94rem;text-decoration:none;display:flex}.tool-link:last-child{border-bottom:0}.tool-link:hover{color:var(--accent)}.tool-link .tool-arrow{color:var(--text-dim);margin-left:auto;font-size:1rem}.tool-link:hover .tool-arrow{color:var(--accent)}.q-section{background:var(--bg-elev);border:1px solid var(--rule);border-radius:14px;margin:0 0 16px;padding:18px 20px}.q-section-title{color:var(--text);margin:0 0 6px;font-size:1.05rem;font-weight:600}.q-section-lead{color:var(--text-muted);margin:0 0 14px;font-size:.92rem}.q-field{flex-direction:column;gap:6px;margin-bottom:14px;display:flex}.q-field:last-child{margin-bottom:0}.q-field label{color:var(--text);font-size:.86rem;font-weight:600}.q-hint{color:var(--text-dim);margin-top:-2px;font-size:.8rem}.q-field input[type=text],.q-field input[type=number],.q-field input[type=email],.q-field textarea,.q-field select{background:var(--bg);border:1px solid var(--rule);color:var(--text);border-radius:8px;width:100%;padding:10px 12px;font-family:inherit;font-size:.95rem}.q-field textarea{resize:vertical;min-height:88px;line-height:1.45}.q-field input:focus,.q-field textarea:focus,.q-field select:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px #7cc4ff2e}.q-checkbox-grid{grid-template-columns:repeat(auto-fit,minmax(110px,1fr));gap:6px;display:grid}.q-checkbox{background:var(--bg);border:1px solid var(--rule);cursor:pointer;-webkit-user-select:none;user-select:none;border-radius:8px;align-items:center;gap:8px;padding:8px 10px;font-size:.9rem;display:flex}.q-checkbox input{accent-color:var(--accent);margin:0}.q-checkbox:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}.q-who-card{background:var(--bg);border:1px solid var(--rule);cursor:pointer;text-align:center;-webkit-user-select:none;user-select:none;border-radius:10px;flex-direction:column;align-items:center;gap:8px;padding:14px 10px;display:flex}.q-who-card input{opacity:0;pointer-events:none;position:absolute}.q-who-card .q-who-name{font-size:.92rem;font-weight:600}.q-who-grid{grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:8px;display:grid}.q-who-card:has(input:checked){border-color:var(--accent);background:var(--accent-soft)}.q-submit{background:var(--accent);width:100%;color:var(--bg);cursor:pointer;text-align:center;border:0;border-radius:10px;margin-top:8px;padding:14px;font-family:inherit;font-size:1rem;font-weight:600;text-decoration:none;display:block}.q-submit:hover{background:var(--link-hover)}.q-submit-meta{color:var(--text-dim);text-align:center;margin:10px 0 0;font-size:.82rem}.q-status{text-align:center;min-height:1.2em;margin:12px 0 0;font-size:.88rem}.q-status.info{color:var(--text-muted,#7c8a99)}.q-status.success{color:var(--good,#2e7d32);font-weight:600}.q-status.warn{color:var(--warn,#c77700)}.q-status.error{color:var(--err,#b3261e)}.gate-wrap{justify-content:center;align-items:center;min-height:100vh;padding:32px 16px;display:flex}.gate-card{background:var(--bg-elev);border:1px solid var(--rule);text-align:center;border-radius:14px;width:100%;max-width:380px;padding:28px 24px 24px}.gate-card .gate-brand{letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted);margin-bottom:4px;font-size:.78rem}.gate-card .gate-brand .dot{color:var(--accent)}.gate-card h1{letter-spacing:-.01em;color:var(--text);margin:0 0 8px;font-size:1.45rem;font-weight:700}.gate-card p{color:var(--text-muted);margin:0 0 20px;font-size:.92rem;line-height:1.5}.gate-input{background:var(--bg);border:1px solid var(--rule);width:100%;color:var(--text);border-radius:8px;margin-bottom:10px;padding:12px 14px;font-family:inherit;font-size:1rem}.gate-input:focus{border-color:var(--accent);outline:none;box-shadow:0 0 0 3px #7cc4ff2e}.gate-error{color:var(--bad);min-height:1.2em;margin:0 0 10px;font-size:.86rem}.gate-button{background:var(--accent);width:100%;color:var(--bg);cursor:pointer;border:0;border-radius:8px;padding:12px;font-family:inherit;font-size:1rem;font-weight:600}.gate-button:hover{background:var(--link-hover)}.gate-footnote{color:var(--text-dim);margin-top:18px;font-size:.78rem}.portal-footer{border-top:1px solid var(--rule);text-align:center;color:var(--text-dim);margin-top:48px;padding:18px 0 0;font-size:.82rem}.portal-footer a{color:var(--text-muted);border-bottom:1px dotted var(--rule);text-decoration:none}.portal-footer a:hover{color:var(--accent);border-bottom-color:var(--accent)}@media (max-width:420px){body{padding-left:12px;padding-right:12px}.page-title{font-size:1.42rem}.race-card{padding:16px 14px}.athlete-header .athlete-name{font-size:1.32rem}.snapshot-grid{grid-template-columns:repeat(2,1fr)}.snapshot-value{font-size:1.18rem}.race-card .race-name{font-size:1.08rem}}.week-analysis-section{margin-top:20px}.week-analysis-prose{color:var(--text);font-size:.95rem;line-height:1.55}.week-analysis-prose p{margin:0 0 14px}.week-analysis-prose p:last-child{margin-bottom:0}.debug-details{border-top:1px solid var(--border,#eee);margin-top:18px;padding-top:10px}.debug-details summary{cursor:pointer;color:var(--text-muted,#6a6a6a);-webkit-user-select:none;user-select:none;font-size:.82rem}.debug-block{color:var(--text-muted,#5a5a5a);white-space:pre;margin:10px 0 0;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:.72rem;line-height:1.4;overflow-x:auto}.recent-activities{margin-top:24px}.recent-list{margin:8px 0 0;padding:0;list-style:none}.recent-row{border-bottom:1px solid var(--border,#eee);grid-template-columns:88px 64px 1fr auto auto;align-items:baseline;gap:12px;padding:8px 0;font-size:.88rem;display:grid}.recent-row:last-child{border-bottom:0}.recent-date{color:var(--text-muted,#7c8a99);font-variant-numeric:tabular-nums}.recent-type{color:var(--text-muted,#7c8a99)}.recent-name{color:var(--text,#1a1a1a);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.recent-stats{color:var(--text-muted,#7c8a99);font-variant-numeric:tabular-nums}.recent-correction{text-transform:uppercase;letter-spacing:.05em;color:var(--accent,#3d5a80);background:#3d5a8014;border-radius:3px;padding:2px 6px;font-size:.72rem}@media (max-width:480px){.recent-row{grid-template-columns:76px 1fr;gap:4px 10px}.recent-type,.recent-stats,.recent-correction{grid-column:2}}.muted{color:var(--text-muted,#7c8a99);font-style:italic}
