:root{--bg-page: #f0ece4;--bg-card: #faf8f5;--bg-input: #faf8f5;--bg-hover: #f5f0ea;--bg-subtle: rgba(45,42,38,.03);--text: #2d2a26;--text-secondary: #6b6560;--text-muted: #9a9490;--border: #d6d0c8;--border-light: #e8e2da;--primary: #2b6cb0;--primary-hover: #1e4e8c;--primary-bg: #e0eaf4;--btn-bg: #e8e2da;--btn-hover: #d6d0c8;--shadow: 0 2px 8px rgba(45,42,38,.06);--bar-bg: #e8e2da;--accent: #c2703e;--header-bg: #2d2a26;--header-text: #f0ece4}[data-theme=dark]{--bg-page: #1a1816;--bg-card: #262320;--bg-input: #2e2b28;--bg-hover: #332f2c;--bg-subtle: rgba(255,248,240,.03);--text: #e8e2d8;--text-secondary: #b0a89e;--text-muted: #807870;--border: #3d3832;--border-light: #332f2c;--primary: #6b9fd4;--primary-hover: #5a8ec3;--primary-bg: #1e2a36;--btn-bg: #332f2c;--btn-hover: #3d3832;--shadow: 0 2px 8px rgba(0,0,0,.2);--bar-bg: #332f2c;--accent: #d4884e;--header-bg: #141210;--header-text: #e8e2d8}*{margin:0;padding:0;box-sizing:border-box}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg-page);color:var(--text);line-height:1.5}.mono{font-family:JetBrains Mono,monospace;font-variant-numeric:tabular-nums}.layout{max-width:1100px;margin:0 auto;padding:0 1rem}header{background:var(--header-bg);color:var(--header-text);padding:.75rem 1.5rem;margin-bottom:1.5rem}.header-inner{max-width:1100px;margin:0 auto;display:flex;justify-content:space-between;align-items:center}.header-logo{width:2rem;height:2rem;flex-shrink:0}header h1{font-size:1.5rem;color:var(--header-text);font-weight:500}.header-right{display:flex;align-items:center;gap:1rem}.header-right .btn-small{background:transparent;border:1px solid rgba(255,255,255,.15);color:var(--header-text)}.header-right .btn-small:hover{background:#ffffff1a}.athlete-name{font-weight:500;color:var(--header-text);opacity:.7}.header-menu-wrap{position:relative}.header-menu-trigger{background:transparent;border:1px solid rgba(255,255,255,.15);color:var(--header-text);padding:.35rem .6rem;border-radius:4px;cursor:pointer;font-size:1.1rem;line-height:1;letter-spacing:.15em}.header-menu-trigger:hover{background:#ffffff1a}.header-menu{position:absolute;top:calc(100% + .4rem);right:0;min-width:180px;background:var(--bg-card);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow),0 8px 24px #0000001f;z-index:100;padding:.35rem 0}.header-menu-item{display:block;width:100%;background:none;border:none;padding:.55rem 1rem;font-size:.85rem;color:var(--text);text-align:left;cursor:pointer}.header-menu-item:hover{background:var(--bg-hover)}.header-menu-item:disabled{opacity:.5;cursor:default}.header-menu-item-danger{color:#b33a3a}.header-menu-divider{height:1px;background:var(--border-light);margin:.35rem 0}.header-home-btn{display:flex;align-items:center;gap:1rem;background:none;border:none;cursor:pointer;padding:0;color:inherit}.header-home-btn:hover{opacity:.8}.race-quick-select{padding:.4rem 2rem .4rem .75rem;border-radius:6px;border:1px solid rgba(255,255,255,.15);font-size:.85rem;font-weight:500;background:#ffffff14 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='rgba(255,255,255,0.5)' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 4.5l3 3 3-3'/%3E%3C/svg%3E") no-repeat right .6rem center;color:var(--header-text);cursor:pointer;max-width:220px;-moz-appearance:none;appearance:none;-webkit-appearance:none;transition:border-color .15s,background-color .15s}.race-quick-select:hover{border-color:#ffffff4d;background-color:#ffffff1f}.race-quick-select:focus{outline:none;border-color:#fff6;box-shadow:0 0 0 2px #ffffff1a}.btn-strava{background:#fc4c02;color:#fff;border:none;padding:.75rem 2rem;font-size:1.1rem;border-radius:8px;cursor:pointer;font-weight:600}.btn-strava:hover{background:#e04400}.btn-strava-connect{background:none;border:none;cursor:pointer;padding:0}.strava-connect-img{height:48px;width:auto}.btn-strava-view{background:#fc4c02;color:#fff;text-decoration:none;font-size:.75rem;padding:.3rem .6rem;border-radius:4px;white-space:nowrap;display:inline-block}.btn-strava-view:hover{background:#e04400}.chart-hint{font-size:.8rem;color:var(--text-muted);font-style:italic;margin-bottom:.75rem}.race-selector{margin-bottom:1.5rem;display:flex;align-items:center;gap:.5rem}.race-selector label{font-weight:600;color:var(--text-secondary)}.race-selector select{padding:.4rem .8rem;border-radius:6px;border:1px solid var(--border);font-size:.95rem;background:var(--bg-input);color:var(--text);cursor:pointer}.btn-small{background:var(--btn-bg);border:1px solid var(--border);padding:.4rem .8rem;border-radius:4px;cursor:pointer;font-size:.85rem;color:var(--text)}.btn-small:hover{background:var(--btn-hover)}.login-container{text-align:center;padding:4rem 1rem}.login-logo{width:4.5rem;height:4.5rem;margin-bottom:1.5rem}.login-container h1{font-size:2rem;margin-bottom:1rem}.login-container p{color:var(--text-secondary);margin-bottom:2rem;font-size:1.1rem}.loading{text-align:center;padding:3rem;color:var(--text-muted);font-size:1.1rem}.error{text-align:center;padding:2rem;color:#b33a3a;background:#fce8e8;border-radius:8px;margin:1rem 0}.dashboard-overview{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:1rem;margin-bottom:2rem}.tab-bar{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;border-bottom:2px solid var(--border)}.tab-buttons{display:flex;gap:0}.tab-btn{background:none;border:none;border-bottom:3px solid transparent;margin-bottom:-2px;padding:.6rem 1.2rem;font-size:.9rem;font-weight:600;color:var(--text-muted);cursor:pointer;transition:color .15s,border-color .15s}.tab-btn:hover{color:var(--text)}.tab-btn.tab-active{color:var(--accent);border-bottom-color:var(--accent)}.discipline-card{background:var(--bg-card);border-radius:12px;padding:0;border-left:5px solid var(--border);box-shadow:var(--shadow);display:flex;overflow:hidden}.discipline-card.status-ready{border-left-color:#3d8b40}.discipline-card.status-on-track{border-left-color:#d4890c}.discipline-card.status-not-ready{border-left-color:#c44040}.discipline-card.status-no-data{border-left-color:#a09890}.discipline-label{writing-mode:vertical-rl;text-orientation:mixed;transform:rotate(180deg);font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--text-secondary);padding:.75rem .4rem;display:flex;align-items:center;justify-content:center;min-width:1.8rem;background:var(--bg-subtle)}.discipline-content{flex:1;padding:1rem 1.25rem}.discipline-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.discipline-icon{display:flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;flex-shrink:0;color:var(--text-muted)}.discipline-icon svg{width:100%;height:100%}.status-badge{font-size:.85rem;font-weight:700;margin-bottom:0;text-transform:uppercase;letter-spacing:.05em}.status-ready .status-badge{color:#2d7a30}.status-on-track .status-badge{color:#c47a0a}.status-not-ready .status-badge{color:#b33a3a}.status-no-data .status-badge{color:#807870}.card-stage-row{display:flex;justify-content:space-between;font-size:.85rem;padding:.25rem 0;border-top:1px solid var(--border-light)}.stage-name{color:var(--text-secondary)}.stage-breakdown{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:var(--shadow)}.stage-breakdown h2{margin-bottom:1rem}.stage-breakdown table{width:100%;border-collapse:collapse;font-size:.9rem}.stage-breakdown th{text-align:left;padding:.6rem .5rem;border-bottom:2px solid var(--border);font-weight:600;color:var(--text-secondary);font-size:.8rem;text-transform:uppercase;letter-spacing:.05em}.stage-breakdown td{padding:.7rem .5rem;border-bottom:1px solid var(--border-light);vertical-align:top;font-family:JetBrains Mono,monospace;font-variant-numeric:tabular-nums;font-size:.85rem}.stage-note{font-size:.75rem;color:var(--text-muted);margin-top:.2rem;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.gap-cell{font-weight:600}.gap-cell.gap-ready{color:#2d7a30}.gap-cell.gap-on-track{color:#c47a0a}.gap-cell.gap-not-ready{color:#b33a3a}.status-pill{display:inline-block;padding:.2rem .6rem;border-radius:14px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.status-pill.status-ready{background:#e6f2e6;color:#2d7a30;border:1px solid #2d7a30}.status-pill.status-on-track{background:#fdf3e0;color:#c47a0a;border:1px solid #c47a0a}.status-pill.status-not-ready{background:#fce8e8;color:#b33a3a;border:1px solid #b33a3a}.status-pill.status-no-data{background:#f0ece4;color:#807870;border:1px solid #807870}.trend-charts,.volume-chart{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:var(--shadow)}.trend-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.trend-header h2{margin-bottom:0}.grade-toggle{display:flex;align-items:center;gap:.4rem;font-size:.85rem;font-weight:500;color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none}.grade-toggle input[type=checkbox]{cursor:pointer}.trend-charts h2,.volume-chart h2{margin-bottom:1rem}.trend-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(450px,100%),1fr));gap:1.5rem}.trend-panel h3{font-size:.95rem;color:var(--text-secondary);margin-bottom:.5rem}.trend-panel.empty{color:var(--text-muted);font-style:italic;padding:2rem;text-align:center}.trend-legend{display:flex;justify-content:center;gap:1.25rem;font-size:.8rem;color:var(--text-secondary)}.trend-legend-item{display:inline-flex;align-items:center;gap:.3rem}.trend-legend-icon{vertical-align:middle}.trend-tooltip{background:var(--bg-card);border:1px solid var(--border);border-radius:6px;padding:.5rem .75rem;font-size:.8rem;box-shadow:0 2px 8px #00000026}.trend-tooltip-date{font-weight:600;margin-bottom:.25rem;color:var(--text-primary)}.trend-tooltip-name{color:var(--text-secondary);margin-bottom:.25rem;font-style:italic}.trend-tooltip-row{color:var(--text-primary)}.longest-efforts{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:var(--shadow)}.longest-efforts h2{margin-bottom:1rem}.race-dist{font-weight:400;color:var(--text-muted);font-size:.85rem}.longest-efforts table{width:100%;border-collapse:collapse;font-size:.85rem}.longest-efforts th{text-align:left;padding:.4rem .5rem;border-bottom:2px solid var(--border);color:var(--text-muted);font-size:.75rem;text-transform:uppercase;letter-spacing:.05em}.longest-efforts td{padding:.4rem .5rem;border-bottom:1px solid var(--border-light);font-family:JetBrains Mono,monospace;font-variant-numeric:tabular-nums;font-size:.8rem}.effort-group-header td{padding-top:1rem;padding-bottom:.4rem;border-bottom:1px solid var(--border);font-size:.95rem;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.pct-good{color:#2d7a30;font-weight:600}.pct-ok{color:#c47a0a;font-weight:600}.pct-low{color:#b33a3a;font-weight:600}.no-data{color:var(--text-muted);font-style:italic;padding:.5rem 0}.weakness-panel{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:var(--shadow)}.weakness-panel h2{margin-bottom:1rem}.all-good{color:#2d7a30;font-weight:500}.weakness-list{list-style:none}.weakness-item{padding:.6rem .75rem;margin-bottom:.5rem;border-radius:6px;font-size:.9rem}.weakness-item.severity-high{background:#fce8e8;border-left:4px solid #c44040}.weakness-item.severity-medium{background:#fdf3e0;border-left:4px solid #d4890c}.header-left{display:flex;align-items:center;gap:1rem}.countdown{font-size:.85rem;font-weight:600;color:var(--primary);background:var(--primary-bg);padding:.2rem .6rem;border-radius:12px}.countdown-soon{color:#c47a0a;background:#fdf3e0}.countdown-past{color:#807870;background:#f0ece4}.btn-primary{background:var(--primary);color:#fff;border:none;padding:.5rem 1rem;border-radius:8px;cursor:pointer;font-size:.9rem;font-weight:600}.btn-primary:hover{background:var(--primary-hover)}.btn-danger{color:#b33a3a;border-color:#f0c8c8}.btn-danger:hover{background:#fce8e8}.btn-active{background:var(--primary);color:#fff;border-color:var(--primary)}.link-button{background:none;border:none;color:var(--primary);cursor:pointer;font-size:inherit;font-weight:600;padding:0;text-decoration:underline}.link-button:hover{color:var(--primary-hover)}.race-list{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:var(--shadow)}.race-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.race-list-empty{text-align:center;padding:3rem 1rem;color:var(--text-muted)}.race-table{width:100%;border-collapse:collapse;font-size:.9rem}.race-table th{text-align:left;padding:.6rem .5rem;border-bottom:2px solid var(--border);font-weight:600;color:var(--text-secondary);font-size:.8rem;text-transform:uppercase;letter-spacing:.05em}.race-table td{padding:.7rem .5rem;border-bottom:1px solid var(--border-light)}.race-actions{display:flex;gap:.5rem}.race-editor{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:var(--shadow)}.race-editor h2{margin-bottom:1rem}.wizard-steps{display:flex;gap:.5rem;margin-bottom:1.5rem;border-bottom:2px solid var(--border-light);padding-bottom:1rem}.wizard-step{display:flex;align-items:center;gap:.5rem;background:none;border:none;padding:.4rem .75rem;font-size:.85rem;font-weight:600;color:var(--text-muted);cursor:default;border-radius:6px}.wizard-step:disabled{opacity:.5}.wizard-step-done{color:var(--text-secondary);cursor:pointer}.wizard-step-done:hover{background:var(--bg-hover)}.wizard-step-active{color:var(--primary);background:var(--primary-bg)}.wizard-step-num{display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;border-radius:50%;font-size:.75rem;font-weight:700;background:var(--border-light);color:var(--text-muted);flex-shrink:0}.wizard-step-active .wizard-step-num,.wizard-step-done .wizard-step-num{background:var(--primary);color:#fff}.review-summary{display:flex;flex-direction:column;gap:1rem}.review-section{padding:1rem;background:var(--bg-hover);border-radius:8px}.review-section h3{font-size:.9rem;margin-bottom:.5rem}.review-row{display:flex;justify-content:space-between;padding:.3rem 0;border-top:1px solid var(--border-light);font-size:.85rem}.review-label{color:var(--text-secondary)}.review-value{font-weight:600}.review-stage{padding:.4rem 0;border-top:1px solid var(--border-light);font-size:.85rem}.review-stage strong{display:block}.review-stage-detail{color:var(--text-secondary);font-size:.8rem}.template-picker{margin-bottom:1.5rem;padding:1rem;background:var(--bg-hover);border-radius:8px}.template-picker label{display:block;font-weight:600;margin-bottom:.5rem;color:var(--text-secondary)}.template-buttons{display:flex;gap:.5rem;flex-wrap:wrap}.editor-header-fields{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1.5rem}.field label{display:block;font-size:.8rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;margin-bottom:.25rem}.field input,.field select{width:100%;padding:.4rem .6rem;border:1px solid var(--border);border-radius:4px;font-size:.9rem;background:var(--bg-input);color:var(--text)}.field-wide{grid-column:1 / -1}.stage-list h3{margin-bottom:.75rem}.stage-card{border:1px solid var(--border);border-radius:8px;padding:1rem;margin-bottom:.75rem;background:var(--bg-hover)}.stage-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.stage-number{font-weight:700;font-size:.85rem;color:var(--text-secondary);text-transform:uppercase}.stage-fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem}.modifiers-section{margin-top:1.5rem;padding:1rem;background:#fdf5e0;border-radius:8px}[data-theme=dark] .modifiers-section{background:#fdf5e00d}.modifiers-section h3{margin-bottom:.75rem}.editor-actions{display:flex;gap:1rem;margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--border)}.race-time-estimate{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:var(--shadow)}.race-time-estimate h2{margin-bottom:.25rem}.estimate-caveat{color:var(--text-muted);font-size:.85rem;font-style:italic;margin-bottom:1rem}.race-time-estimate table{width:100%;border-collapse:collapse;font-size:.9rem}.race-time-estimate th{text-align:left;padding:.6rem .5rem;border-bottom:2px solid var(--border);font-weight:600;color:var(--text-secondary);font-size:.8rem;text-transform:uppercase;letter-spacing:.05em}.race-time-estimate td{padding:.7rem .5rem;border-bottom:1px solid var(--border-light);font-family:JetBrains Mono,monospace;font-variant-numeric:tabular-nums;font-size:.85rem}.race-time-estimate .total-row td{border-top:2px solid var(--border);border-bottom:none;padding-top:.8rem}.time-good{color:#2d7a30;font-weight:600}.time-ok{color:#c47a0a;font-weight:600}.time-bad{color:#b33a3a;font-weight:600}.time-adjusted{font-weight:700}.fatigue-note{font-size:.75rem;font-weight:600;color:var(--text-secondary);font-family:JetBrains Mono,monospace}.fatigue-note.fatigue-none{color:var(--text-muted);font-weight:400}.transition-label{display:block;font-size:.65rem;font-weight:600;color:var(--accent);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;margin-top:.15rem}.projection-badge{font-size:.7rem;font-weight:700;padding:.15rem .5rem;border-radius:10px;margin-left:.5rem;text-transform:uppercase;letter-spacing:.03em}.proj-good{background:#e6f2e6;color:#2d7a30}.proj-bad{background:#fce8e8;color:#b33a3a}.training-plan{margin-bottom:2rem}.tp-section{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:1rem;box-shadow:var(--shadow)}.tp-empty{text-align:center;padding:3rem 1rem;color:var(--text-muted);font-size:1.1rem;background:var(--bg-card);border-radius:12px;box-shadow:var(--shadow)}.tp-profile-toggle{background:none;border:none;font-size:1rem;font-weight:600;color:var(--text);cursor:pointer;display:flex;align-items:center;gap:.5rem;width:100%;text-align:left}.tp-profile-summary{font-weight:400;color:var(--text-muted);font-size:.85rem;margin-left:auto}.tp-profile-form{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border-light)}.tp-profile-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(200px,100%),1fr));gap:1rem;margin-bottom:1rem}.tp-field label{display:block;font-size:.8rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.03em;margin-bottom:.4rem}.tp-field input[type=number],.tp-field select{width:100%;padding:.4rem .6rem;border:1px solid var(--border);border-radius:4px;font-size:.9rem;background:var(--bg-input);color:var(--text)}.tp-radio-group{display:flex;gap:1rem}.tp-radio{display:flex;align-items:center;gap:.5rem;font-size:.9rem;cursor:pointer}.tp-radio input[type=radio]{margin:0;flex-shrink:0}.tp-feasibility-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.tp-feasibility-header h2{margin:0}.tp-rating-badge{display:inline-block;padding:.25rem .75rem;border-radius:12px;font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em}.rating-easy,.rating-achievable{background:#e6f2e6;color:#2d7a30}.rating-nodata{background:#f0ece4;color:#807870}.rating-ambitious{background:#fdf3e0;color:#c47a0a}.rating-unlikely{background:#fce8e8;color:#b33a3a}.tp-summary-text{font-size:.9rem;color:var(--text-secondary);margin-bottom:1rem}.tp-feasibility-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(180px,100%),1fr));gap:.75rem}.tp-feas-card{border-radius:8px;padding:.75rem 1rem;border:1px solid var(--border)}.tp-feas-card.rating-easy,.tp-feas-card.rating-achievable{border-color:#b8d8b8;background:#f5faf5}.tp-feas-card.rating-ambitious{border-color:#e8d4a8;background:#fdfaf2}.tp-feas-card.rating-unlikely{border-color:#e8b8b8;background:#fdf5f5}.tp-feas-card.rating-nodata{border-color:var(--border);background:var(--bg-hover)}.tp-feas-discipline{font-weight:700;font-size:.9rem;margin-bottom:.25rem}.tp-feas-gap{font-size:.85rem;color:var(--text-secondary)}.tp-feas-weeks{font-size:.75rem;color:var(--text-muted);margin-top:.2rem}.tp-feas-rating{font-size:.7rem;font-weight:700;text-transform:uppercase;margin-top:.3rem}.tp-alloc-bars{display:flex;flex-direction:column;gap:.5rem}.tp-alloc-row{display:flex;align-items:center;gap:.75rem}.tp-alloc-label{width:80px;font-size:.85rem;font-weight:600;color:var(--text-secondary);flex-shrink:0}.tp-alloc-bar-bg{flex:1;height:20px;background:var(--bar-bg);border-radius:4px;overflow:hidden}.tp-alloc-bar-fill{height:100%;border-radius:4px;transition:width .3s}.disc-cycle{background:#4a90c4}.disc-mtb{background:#8b6e4e}.disc-run-road{background:#c44040}.disc-run-trail{background:#7a5c3e}.disc-kayak{background:#3d8b60}.disc-swim{background:#6b7fb5}.tp-alloc-value{width:80px;font-size:.8rem;color:var(--text-secondary);text-align:right;flex-shrink:0}.tp-week-table-wrap{overflow-x:auto}.tp-week-table{width:100%;border-collapse:collapse;font-size:.85rem}.tp-week-table th{text-align:left;padding:.5rem .4rem;border-bottom:2px solid var(--border);font-weight:600;color:var(--text-secondary);font-size:.75rem;text-transform:uppercase;letter-spacing:.03em}.tp-week-row{cursor:pointer;transition:background .1s}.tp-week-row:hover{background:var(--bg-hover)}.tp-week-row td{padding:.4rem;border-bottom:1px solid var(--border-light);font-family:JetBrains Mono,monospace;font-variant-numeric:tabular-nums;font-size:.8rem}.tp-week-current{background:var(--primary-bg)!important}.tp-week-recovery{background:#ede4f0}.tp-week-taper{background:#fdf5e0}[data-theme=dark] .tp-week-recovery{background:#ede4f00f}[data-theme=dark] .tp-week-taper{background:#fdf5e00f}.tp-wk-num{font-weight:700;color:var(--text-secondary);width:30px}.tp-wk-dates{white-space:nowrap;color:var(--text-secondary)}.tp-wk-disc{text-align:center}.tp-wk-total{font-weight:600}.tp-flag{display:inline-block;padding:.1rem .4rem;border-radius:8px;font-size:.65rem;font-weight:700;text-transform:uppercase;margin-left:.25rem;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}.tp-flag-recovery{background:#ede4f0;color:#7b1fa2}.tp-flag-taper{background:#fdf3e0;color:#c47a0a}.tp-flag-current{background:var(--primary-bg);color:var(--primary-hover)}[data-theme=dark] .tp-flag-recovery{background:#ede4f01a}[data-theme=dark] .tp-flag-taper{background:#fdf3e01a}.tp-week-detail-row td{padding:0;border-bottom:2px solid var(--border)}.tp-week-detail{padding:.75rem 1rem;background:var(--bg-hover);display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:1rem}.tp-detail-disc strong{font-size:.85rem;display:block;margin-bottom:.3rem}.tp-session-list{list-style:none;padding:0;margin:0}.tp-session{display:flex;gap:.5rem;align-items:baseline;padding:.2rem 0;font-size:.8rem}.tp-session-type{font-weight:700;text-transform:uppercase;font-size:.65rem;padding:.1rem .3rem;border-radius:4px;flex-shrink:0}.tp-session-endurance .tp-session-type{background:#e6f2e6;color:#2d7a30}.tp-session-tempo .tp-session-type{background:#fdf3e0;color:#c47a0a}.tp-session-interval .tp-session-type{background:#fce8e8;color:#b33a3a}[data-theme=dark] .tp-session-endurance .tp-session-type{background:#e6f2e61a}[data-theme=dark] .tp-session-tempo .tp-session-type{background:#fdf3e01a}[data-theme=dark] .tp-session-interval .tp-session-type{background:#fce8e81a}.tp-session-dur{font-weight:600;color:var(--text-secondary);flex-shrink:0}.tp-session-desc{color:var(--text-muted)}.tp-progress-bars{display:flex;flex-direction:column;gap:.75rem}.tp-prog-row{display:flex;align-items:center;gap:.75rem}.tp-prog-label{width:80px;font-size:.85rem;font-weight:600;color:var(--text-secondary);flex-shrink:0}.tp-prog-bar-bg{flex:1;height:16px;background:var(--bar-bg);border-radius:4px;overflow:hidden;position:relative}.tp-prog-bar-fill{height:100%;border-radius:4px;transition:width .3s}.prog-ready{background:#3d8b40}.prog-on-track{background:#d4890c}.prog-not-ready{background:#c44040}.tp-prog-target-line{position:absolute;top:0;bottom:0;left:100%;width:2px;background:var(--text)}.tp-prog-value{width:40px;font-size:.8rem;font-weight:600;color:var(--text-secondary);text-align:right;flex-shrink:0}[data-theme=dark] .tp-feas-card.rating-easy,[data-theme=dark] .tp-feas-card.rating-achievable{border-color:#2d5a30;background:#3d8b4014}[data-theme=dark] .tp-feas-card.rating-ambitious{border-color:#5a4020;background:#d4890c14}[data-theme=dark] .tp-feas-card.rating-unlikely{border-color:#5a2020;background:#c4404014}[data-theme=dark] .rating-easy,[data-theme=dark] .rating-achievable{background:#e6f2e61a}[data-theme=dark] .rating-nodata{background:#f0ece40d}[data-theme=dark] .rating-ambitious{background:#fdf3e01a}[data-theme=dark] .rating-unlikely{background:#fce8e81a}[data-theme=dark] .countdown-soon{background:#fdf3e01a}[data-theme=dark] .countdown-past{background:#f0ece40d}[data-theme=dark] .error{background:#c4404026;color:#e08080}[data-theme=dark] .weakness-item.severity-high{background:#c440401a}[data-theme=dark] .weakness-item.severity-medium{background:#d4890c1a}[data-theme=dark] .status-pill.status-ready{background:#2d7a3026;border-color:#2d7a30}[data-theme=dark] .status-pill.status-on-track{background:#c47a0a26;border-color:#c47a0a}[data-theme=dark] .status-pill.status-not-ready{background:#b33a3a26;border-color:#b33a3a}[data-theme=dark] .status-pill.status-no-data{background:#80787026;border-color:#807870}[data-theme=dark] .proj-good{background:#2d7a3026}[data-theme=dark] .proj-bad{background:#b33a3a26}.home-section{background:var(--bg-card);border-radius:12px;padding:1.5rem;margin-bottom:2rem;box-shadow:var(--shadow)}.home-section h2{margin-bottom:1rem}.section-hint{font-size:.8rem;font-weight:400;color:var(--text-muted);margin-left:.5rem}.home-disciplines{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(280px,100%),1fr));gap:1rem}.home-disc-card{border:1px solid var(--border);border-radius:8px;padding:1rem 1.25rem;background:var(--bg-hover)}.home-disc-header{display:flex;align-items:center;gap:.5rem;margin-bottom:.75rem}.home-disc-name{font-weight:700;font-size:.95rem}.home-metric-rows{display:flex;flex-direction:column}.home-metric-row{display:flex;justify-content:space-between;padding:.3rem 0;border-top:1px solid var(--border-light);font-size:.85rem}.home-metric-label{color:var(--text-secondary)}.home-metric-value{font-weight:600}.home-race-list{display:flex;flex-direction:column;gap:.5rem}.home-race-item{display:flex;align-items:center;gap:1rem;padding:.75rem 1rem;border:1px solid var(--border);border-radius:8px;background:var(--bg-hover);cursor:pointer;font-size:.9rem;text-align:left;width:100%;color:var(--text);transition:background .1s}.home-race-item:hover{background:var(--bg-subtle);border-color:var(--primary)}.home-race-name{font-weight:600;flex:1}.home-race-date{color:var(--text-secondary)}@media (max-width: 768px){.trend-grid{grid-template-columns:1fr}.stage-breakdown{overflow-x:auto}.dashboard-overview,.home-disciplines,.tp-feasibility-cards,.tp-profile-fields{grid-template-columns:1fr}.tp-week-table{font-size:.75rem}.header-inner{flex-wrap:wrap;gap:.5rem}header h1{font-size:1.1rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.race-quick-select{max-width:160px}.athlete-name{display:none}.tab-buttons{overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.tab-buttons::-webkit-scrollbar{display:none}.tab-btn{white-space:nowrap;flex-shrink:0;min-height:44px}.tab-bar{flex-direction:column;align-items:stretch;gap:.5rem}.race-time-estimate,.longest-efforts,.race-list{overflow-x:auto}.header-menu-trigger{min-width:44px;min-height:44px;padding:.5rem .75rem}.btn-small{padding:.5rem 1rem;min-height:44px}.range-label{padding:.4rem .5rem;min-height:44px}.header-menu-item{padding:.75rem 1rem;min-height:44px}}@media (max-width: 480px){.header-left{flex:0 0 100%}.header-right{flex:0 0 100%;justify-content:space-between}header h1{font-size:1rem}.race-quick-select{max-width:none;flex:1}.tab-btn{font-size:.8rem;padding:.5rem .75rem}.range-labels{font-size:.65rem}.range-label{flex:1;text-align:center;padding:.4rem .25rem}.editor-header-fields{grid-template-columns:1fr}.layout{padding:0 .5rem}.stage-breakdown,.trend-charts,.volume-chart,.longest-efforts,.weakness-panel,.race-time-estimate,.home-section,.tp-section,.race-editor{padding:1rem;border-radius:8px;margin-bottom:1rem}h2{font-size:1.1rem}}.date-range-selector{margin:0 0 1.5rem;padding:.75rem 1rem;background:var(--bg-card);border-radius:8px;border:1px solid var(--border-light)}.range-slider{width:100%;height:6px;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bar-bg);border-radius:3px;outline:none;cursor:pointer}.range-slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:18px;height:18px;border-radius:50%;background:var(--primary);cursor:pointer;border:2px solid var(--bg-card);box-shadow:var(--shadow)}.range-slider::-moz-range-thumb{width:18px;height:18px;border-radius:50%;background:var(--primary);cursor:pointer;border:2px solid var(--bg-card);box-shadow:var(--shadow)}.range-labels{display:flex;justify-content:space-between;margin-top:.4rem;font-size:.75rem;color:var(--text-muted)}.range-label{cursor:pointer;padding:.15rem .3rem;border-radius:4px;transition:color .15s}.range-label:hover{color:var(--text)}.range-label-active{color:var(--primary);font-weight:600}.home-race-item-full{display:flex;align-items:center;gap:.5rem}.home-race-main{flex:1;display:flex;align-items:center;gap:1rem;background:none;border:none;padding:.75rem 1rem;cursor:pointer;text-align:left;color:var(--text);font:inherit}.home-race-main:hover{background:var(--bg-hover)}.home-race-actions{display:flex;gap:.35rem;padding-right:.75rem;flex-shrink:0}.beta-banner{padding:.6rem 1rem;margin-bottom:1rem;background:#fef3cd;color:#856404;border:1px solid #ffc107;border-radius:6px;font-size:.85rem;font-weight:500}[data-theme=dark] .beta-banner{background:#3d3520;color:#ffc107;border-color:#665a2e}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal{background:var(--bg-card);border-radius:12px;box-shadow:0 8px 32px #0003;width:100%;max-width:480px;margin:1rem}.modal-header{padding:1.25rem 1.5rem 0}.modal-header h2{margin:0;font-size:1.1rem}.modal-body{padding:1rem 1.5rem}.modal-body textarea{width:100%;padding:.4rem .6rem;border:1px solid var(--border);border-radius:4px;font-size:.9rem;font-family:inherit;background:var(--bg-input);color:var(--text);resize:vertical}.modal-actions{display:flex;justify-content:flex-end;gap:.75rem;padding:0 1.5rem 1.25rem}
