*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}:root{--accent: #f97316;--accent-dark: #ea6a00;--bg: #f8fafc;--surface: #ffffff;--border: #e2e8f0;--text: #1e293b;--muted: #64748b;--danger: #ef4444;--today-bg: #fff7ed;--today-border:#f97316;--has-data-bg: #f0fdf4;--race-color: #7c3aed;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif}body{background:var(--bg);color:var(--text);min-height:100vh}.app{display:flex;flex-direction:column;min-height:100vh}.app-header{background:var(--surface);border-bottom:1px solid var(--border);padding:0 1.5rem;height:56px;display:flex;align-items:center;justify-content:space-between;position:sticky;top:0;z-index:10}.app-logo{font-size:1.1rem;font-weight:700;letter-spacing:-.3px}.app-header-right{display:flex;align-items:center;gap:1rem}.app-user{color:var(--muted);font-size:.875rem}.app-main{flex:1;padding:1.5rem;max-width:1100px;margin:0 auto;width:100%}button{cursor:pointer;border:none;background:none;font:inherit}.btn{display:inline-flex;align-items:center;gap:.4rem;padding:.4rem 1rem;border-radius:6px;font-size:.875rem;font-weight:500;transition:background .15s,opacity .15s}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover:not(:disabled){background:var(--accent-dark)}.btn-ghost{color:var(--text)}.btn-ghost:hover{background:var(--border)}.btn-outline{border:1px solid var(--border);color:var(--text)}.btn-outline:hover{background:var(--border)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:#dc2626}.btn-danger:disabled{opacity:.35}.btn-full{width:100%;justify-content:center;padding:.6rem 1rem}.link-btn{color:var(--accent);text-decoration:underline;background:none;border:none;cursor:pointer;font:inherit}.form-group{display:flex;flex-direction:column;gap:.3rem}.form-group label{font-size:.8rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.4px}.form-group input,.form-group textarea{border:1px solid var(--border);border-radius:6px;padding:.5rem .75rem;font:inherit;font-size:.95rem;color:var(--text);background:var(--surface);transition:border .15s}.form-group input:focus,.form-group textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px #f9731626}.form-group textarea{resize:vertical}.form-error{color:var(--danger);font-size:.85rem}.auth-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#fff7ed,#f8fafc);padding:1.5rem}.auth-card{background:var(--surface);border:1px solid var(--border);border-radius:12px;padding:2.5rem 2rem;width:100%;max-width:380px;box-shadow:0 4px 24px #0000000f}.auth-title{font-size:1.5rem;font-weight:800;text-align:center;margin-bottom:.25rem}.auth-subtitle{text-align:center;color:var(--muted);font-size:.9rem;margin-bottom:1.75rem}.auth-form{display:flex;flex-direction:column;gap:1rem}.auth-toggle{margin-top:1.25rem;text-align:center;font-size:.875rem;color:var(--muted)}.calendar-wrap{display:flex;flex-direction:column;gap:1rem}.cal-nav{display:flex;align-items:center;gap:.75rem}.cal-title{display:flex;align-items:baseline;gap:.75rem;flex:1}.cal-title h2{font-size:1.4rem;font-weight:700}.cal-loading{font-size:.8rem;color:var(--muted)}.cal-grid{background:var(--surface);border:1px solid var(--border);border-radius:12px;overflow:hidden}.cal-header-row{display:grid;grid-template-columns:repeat(7,1fr) 72px;background:var(--bg);border-bottom:1px solid var(--border)}.cal-header-cell{padding:.5rem;text-align:center;font-size:.75rem;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}.cal-week-row{display:grid;grid-template-columns:repeat(7,1fr) 72px;border-bottom:1px solid var(--border)}.cal-week-row:last-child{border-bottom:none}.cal-day{min-height:90px;padding:.5rem;border-right:1px solid var(--border);cursor:pointer;display:flex;flex-direction:column;gap:3px;transition:background .12s;position:relative}.cal-day:hover{background:#f1f5f9}.cal-day:last-of-type{border-right:none}.cal-day-out{background:#fafafa;opacity:.45}.cal-day-today{background:var(--today-bg)!important;border-top:2px solid var(--today-border)}.cal-day-has-data{background:var(--has-data-bg)}.cal-day-has-data:hover{background:#dcfce7}.cal-day-num{font-size:.78rem;font-weight:700;color:var(--muted);line-height:1}.cal-day-today .cal-day-num{background:var(--accent);color:#fff;width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center}.cal-day-miles{font-size:1rem;font-weight:700;color:var(--text);line-height:1;margin-top:2px}.cal-day-race{font-size:.72rem;color:var(--race-color);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.cal-day-notes-dot{position:absolute;top:6px;right:6px;font-size:.45rem;color:var(--accent)}.cal-week-total{background:var(--bg)}.cal-week-total-cell{display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--bg);padding:.5rem;min-height:90px}.cal-week-miles{font-size:1.05rem;font-weight:800;color:var(--accent);line-height:1}.cal-week-label{font-size:.65rem;font-weight:600;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}.cal-week-empty{color:var(--border);font-size:1.1rem}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;z-index:100;display:flex;align-items:center;justify-content:center;padding:1rem;animation:fadeIn .15s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal{background:var(--surface);border-radius:12px;width:100%;max-width:440px;box-shadow:0 20px 60px #0003;animation:slideUp .18s ease;overflow:hidden}@keyframes slideUp{0%{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.5rem 0}.modal-header h2{font-size:1rem;font-weight:700}.modal-close{color:var(--muted);font-size:1rem;padding:.25rem;border-radius:4px}.modal-close:hover{background:var(--border)}.modal-body{padding:1.25rem 1.5rem 1.5rem;display:flex;flex-direction:column;gap:1rem}.modal-actions{display:flex;justify-content:space-between;align-items:center;margin-top:.5rem}.modal-actions-right{display:flex;gap:.5rem}:root{--strava: #FC4C02;--strava-dark: #d93f00}.strava-connect-btn{background:var(--strava);color:#fff;display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;padding:.35rem .85rem;border-radius:6px}.strava-connect-btn:hover{background:var(--strava-dark)}.strava-badge{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem;font-weight:600;padding:.3rem .6rem;border-radius:6px;background:#fff3ee;color:var(--strava);border:1px solid #fcd5c0}.strava-disconnect{margin-left:.2rem;color:var(--muted);font-size:.7rem;padding:.1rem .3rem;border-radius:3px}.strava-disconnect:hover{background:var(--border);color:var(--text)}.strava-banner{padding:.65rem 1.5rem;font-size:.875rem;font-weight:500}.strava-banner.success{background:#f0fdf4;color:#15803d;border-bottom:1px solid #bbf7d0}.strava-banner.error{background:#fef2f2;color:#b91c1c;border-bottom:1px solid #fecaca}.strava-week-btn{margin-top:4px;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--strava);color:#fff;font-size:.6rem;transition:background .15s,transform .1s;flex-shrink:0}.strava-week-btn:hover{background:var(--strava-dark);transform:scale(1.1)}.strava-modal .modal-header{padding-bottom:.25rem}.strava-modal-title{display:flex;align-items:center;gap:.5rem;font-size:1rem;font-weight:700;color:var(--strava)}.strava-week-range{font-size:.9rem;color:var(--muted);font-weight:500}.strava-hint{font-size:.85rem;color:var(--muted)}.strava-import-btn{background:var(--strava);color:#fff}.strava-import-btn:hover:not(:disabled){background:var(--strava-dark)}.strava-import-btn:disabled{opacity:.5}.strava-preview-table{width:100%;border-collapse:collapse;font-size:.875rem}.strava-preview-table th{text-align:left;padding:.4rem .5rem;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.4px;color:var(--muted);border-bottom:2px solid var(--border)}.strava-preview-table td{padding:.4rem .5rem;border-bottom:1px solid var(--border)}.strava-preview-table tfoot td{border-top:2px solid var(--border);border-bottom:none;padding-top:.5rem}.strava-row-has-data{background:#fff3ee}.strava-mi{color:var(--strava);font-weight:700}.current-mi{color:var(--muted);font-size:.8rem}.overwrite-warn{color:var(--accent);font-size:.75rem;margin-left:.2rem;cursor:default}@media (max-width: 700px){.app-main{padding:.75rem}.cal-title h2{font-size:1.1rem}.cal-day{min-height:72px;padding:.35rem}.cal-day-miles{font-size:.9rem}.cal-week-total-cell{min-height:72px}.cal-week-miles{font-size:.95rem}.cal-header-cell{padding:.4rem .2rem;font-size:.65rem}}@media (max-width: 480px){.app-main{padding:.4rem}.app-header{padding:0 .75rem}.app-user{display:none}.strava-connect-btn,.strava-badge{font-size:.7rem;padding:.25rem .5rem}.cal-nav{gap:.3rem}.cal-title h2{font-size:.95rem}.btn-outline{padding:.3rem .6rem;font-size:.78rem}.cal-header-row,.cal-week-row{grid-template-columns:repeat(7,1fr) 42px}.cal-header-cell{padding:.3rem 0;font-size:.58rem;letter-spacing:0;text-align:center}.cal-day{min-height:52px;padding:.2rem .15rem;gap:1px}.cal-day-num{font-size:.62rem}.cal-day-today .cal-day-num{width:16px;height:16px;font-size:.58rem}.cal-day-miles{font-size:.72rem;margin-top:1px}.cal-day-race,.cal-day-notes-dot{display:none}.cal-week-total-cell{min-height:52px;padding:.2rem .1rem}.cal-week-miles{font-size:.75rem}.cal-week-label{font-size:.5rem}.cal-week-empty{font-size:.75rem}.strava-week-btn{width:16px;height:16px;margin-top:3px}.strava-week-btn svg{width:8px;height:8px}}
