:root{color-scheme:light dark;--bg:#0b1120;--surface:#111c33;--surface-2:#17233d;--border:#23314f;--text:#e6edf7;--text-muted:#94a3b8;--accent:#38bdf8;--danger:#f87171;--radius:12px}*{box-sizing:border-box}body,html{margin:0;padding:0;height:100%;overflow:hidden;background:var(--bg);color:var(--text);font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,sans-serif;-webkit-font-smoothing:antialiased}button{font:inherit;cursor:pointer}input,select,textarea{font:inherit;width:100%;padding:.55rem .7rem;border-radius:9px;border:1px solid var(--border);background:var(--surface-2);color:var(--text)}input:focus,select:focus,textarea:focus{outline:2px solid var(--accent);outline-offset:1px}.app-shell{width:100%;padding:1rem;height:100dvh;flex-direction:column}.app-shell,.topbar{display:flex;gap:.75rem}.topbar{flex-wrap:wrap;align-items:center;justify-content:space-between;flex:none}.topbar h1{margin:0;font-size:1.35rem;letter-spacing:-.01em}.month-nav{display:flex;align-items:center;gap:.5rem}.month-nav strong{min-width:10.5rem;text-align:center;font-size:1.05rem}.btn{display:inline-flex;align-items:center;gap:.35rem;border:1px solid var(--border);background:var(--surface-2);color:var(--text);border-radius:9px;padding:.5rem .85rem;line-height:1}.btn-primary,.btn:hover{border-color:var(--accent)}.btn-primary{background:var(--accent);color:#05203a;font-weight:600}.btn-danger,.btn-ghost{background:transparent}.btn-danger{color:var(--danger);border-color:transparent}.filters{flex-wrap:wrap;align-items:center;flex:none}.choice-row,.filters{display:flex;gap:.4rem}.choice-row{flex-wrap:wrap}.chip-removable{padding:0;overflow:hidden}.chip-main,.chip-remove{background:none;border:0;color:inherit;display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .55rem;font-size:.82rem}.chip-remove{color:var(--text-muted);padding-left:.2rem;padding-right:.5rem}.chip-remove:hover{color:var(--danger)}.preview-list{list-style:none;margin:0;padding:.5rem .7rem;border:1px solid var(--border);border-radius:9px;background:var(--surface-2);font-size:.82rem;max-height:8.5rem;overflow-y:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(9rem,1fr));grid-gap:.15rem .6rem;gap:.15rem .6rem}.chip{display:inline-flex;align-items:center;gap:.35rem;border-radius:999px;border:1px solid var(--border);background:transparent;color:var(--text-muted);padding:.3rem .7rem;font-size:.82rem}.chip[data-active=true]{color:var(--text);border-color:currentColor}.chip .dot{width:9px;height:9px;border-radius:50%;background:currentColor}.calendar{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;background:var(--surface);flex:1 1;min-height:0;display:flex;flex-direction:column}.calendar-grid,.calendar-head{display:grid}.calendar-month .calendar-grid,.calendar-month .calendar-head{grid-template-columns:repeat(7,minmax(0,1fr)) 7.5rem}.calendar-week .calendar-grid,.calendar-week .calendar-head{grid-template-columns:repeat(7,minmax(0,1fr))}.calendar-head{flex:none}.calendar-head div{padding:.5rem .6rem;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted);border-bottom:1px solid var(--border)}.calendar-grid{flex:1 1;min-height:0}.calendar-month .calendar-grid{grid-template-rows:repeat(6,minmax(0,1fr))}.day{min-height:0;overflow-y:auto;border-right:1px solid var(--border);border-bottom:1px solid var(--border);padding:.35rem;display:flex;flex-direction:column;gap:.25rem;background:transparent;text-align:left;color:inherit;border-top:0;border-left:0}.day:hover{background:var(--surface-2)}.day[data-outside=true]{opacity:.45}.day-totals{justify-content:center;cursor:default}.day-totals,.day-totals:hover{background:rgba(255,255,255,.02)}.day-number{font-size:.8rem;color:var(--text-muted);display:flex;justify-content:space-between;align-items:center;flex:none}.day[data-today=true] .day-number span:first-child{background:var(--accent);color:#05203a;border-radius:999px;padding:0 .4rem;font-weight:700}.event{border-radius:6px;padding:.22rem .4rem;font-size:.76rem;line-height:1.25;display:block;width:100%;min-width:0;flex:none;text-align:left;border:0;border-left:3px solid;color:var(--text);transition:opacity .12s ease}.event[data-dimmed=true]{opacity:.22}.event[data-dimmed=true]:hover{opacity:.6}.event[data-status=PLANNED]{border-left-style:dashed}.event[data-status=SKIPPED]{opacity:.45}.event[data-status=SKIPPED] .event-title{text-decoration:line-through}.event[data-detailed=true]{padding:.35rem .5rem;font-size:.8rem}.event-title{display:flex;align-items:center;gap:.25rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.event[data-detailed=true] .event-title{white-space:normal}.event-title svg{flex:none}.event small{display:block;color:var(--text-muted);font-size:.7rem}.event-structure{display:flex;flex-direction:column;gap:.1rem;margin-top:.15rem;color:var(--text);opacity:.75}.event-labels{display:flex;gap:.2rem;margin-top:.25rem}.week-totals{display:flex;flex-direction:column;gap:.25rem;font-size:.78rem;padding:.1rem .3rem}.week-totals-empty{color:var(--text-muted);opacity:.5}.week-totals-done{color:var(--text);font-weight:600}.week-totals-planned{color:var(--text-muted)}.sport-distances{display:flex;flex-wrap:wrap;gap:.1rem .5rem;margin-top:.15rem}.sport-distance{display:inline-flex;align-items:center;gap:.2rem;font-size:.7rem;white-space:nowrap}.sport-distance,.week-totals small{font-weight:400;color:var(--text-muted)}.week-totals small{display:block;font-size:.68rem}.week-footer{flex:none;border-top:1px solid var(--border);padding:.35rem .6rem;background:rgba(255,255,255,.02)}.week-footer .week-totals{flex-direction:row;gap:1.25rem;align-items:baseline}.view-switch{display:flex}.view-switch .btn:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.view-switch .btn:last-child{border-top-left-radius:0;border-bottom-left-radius:0;margin-left:-1px}.view-switch .btn[data-active=true]{background:var(--accent);border-color:var(--accent);color:#05203a;font-weight:600}.filters-sep{width:1px;height:20px;background:var(--border)}.period-totals{margin-left:auto}.period-totals .week-totals{flex-direction:row;gap:.9rem;align-items:baseline}.section-toggle{display:inline-flex;align-items:center;gap:.35rem;background:none;border:0;color:var(--text);font-size:.85rem;padding:.2rem 0}.section-toggle:hover{color:var(--accent)}.interval-editor{margin-top:.5rem;border:1px solid var(--border);border-radius:9px;padding:.6rem;display:flex;flex-direction:column;gap:.45rem}.interval-step{display:grid;grid-template-columns:6.5rem 1fr 1fr 1fr;grid-gap:.35rem;gap:.35rem;align-items:center}.interval-step-label{font-size:.75rem;color:var(--text-muted)}.interval-step input{padding:.35rem .5rem;font-size:.82rem}.interval-block{border-left:2px solid var(--accent);padding-left:.5rem;display:flex;flex-direction:column;gap:.35rem}.interval-block-head{display:flex;align-items:center;gap:.4rem}.interval-repeat{width:4rem;padding:.3rem .45rem}.interval-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.interval-total{margin-left:auto}.face-row{display:flex;gap:.15rem;flex-wrap:wrap}.face{background:none;border:1px solid transparent;border-radius:8px;color:var(--text-muted);padding:.25rem;display:inline-flex;opacity:.55;transition:opacity .12s ease,border-color .12s ease}.face:hover{opacity:1}.face[data-active=true]{opacity:1;border-color:currentColor}.dialog-backdrop{position:fixed;inset:0;background:rgba(2,6,23,.72);display:flex;align-items:center;justify-content:center;padding:1rem;z-index:50}.dialog{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);width:min(520px,100%);max-height:92vh;overflow-y:auto;padding:1.25rem}.dialog h2{margin:0 0 1rem;font-size:1.1rem}.field{margin-bottom:.85rem}.field label{display:block;font-size:.78rem;color:var(--text-muted);margin-bottom:.3rem}.field-row{display:grid;grid-template-columns:1fr 1fr;grid-gap:.7rem;gap:.7rem}.dialog-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:1.1rem}.auth-card{max-width:380px;margin:12vh auto;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem}.error{color:var(--danger);font-size:.83rem;margin:.5rem 0 0}.muted{color:var(--text-muted);font-size:.85rem}@media (max-width:720px){.app-shell{padding:.6rem;gap:.5rem}.topbar{gap:.5rem}.month-nav{flex-wrap:wrap}.month-nav strong{min-width:8.5rem;font-size:.95rem}.day{padding:.25rem}.calendar-month .calendar-grid,.calendar-month .calendar-head{grid-template-columns:repeat(7,minmax(0,1fr))}.day-totals,.totals-head{display:none}.event{height:7px;padding:0;font-size:0;border-radius:4px;border-left-width:0;background:var(--sport-color,var(--accent))!important}.event small{display:none}}.event-external{display:inline-flex;align-items:center;gap:.2rem;margin-top:.25rem;font-size:.7rem;color:#fc5200;cursor:pointer}.event-external:hover{text-decoration:underline}.activity-link{display:inline-flex;align-items:center;gap:.35rem;margin:-.5rem 0 .9rem;font-size:.82rem;color:#fc5200;text-decoration:none}.activity-link:hover{text-decoration:underline}.provider-message{font-size:.75rem;max-width:12rem}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(1turn)}}.recap-table{width:100%;border-collapse:collapse;margin-bottom:1rem;font-size:.85rem}.recap-table td,.recap-table th{text-align:right;padding:.35rem .4rem;border-bottom:1px solid var(--border)}.recap-table thead th{font-size:.7rem;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);font-weight:500}.recap-table tbody th{text-align:left;font-weight:500;color:var(--text-muted)}.recap-actual{font-weight:600}.recap-table td[data-over=true]{color:#22c55e}.recap-table td[data-over=false]{color:#f59e0b}.settings-line{margin:0 0 .6rem;font-size:.86rem}.settings-note{border:1px solid var(--border);border-radius:9px;padding:.7rem;font-size:.83rem}.settings-note code{background:var(--surface-2);border-radius:4px;padding:.05rem .3rem;font-size:.78rem}.settings-message,.settings-note a{color:var(--accent)}.settings-message{font-size:.83rem;margin:.5rem 0 0}.event[data-race=true]{border-left-width:0;border:2px solid var(--text);font-weight:700;box-shadow:0 0 0 1px rgba(255,255,255,.35)}.event[data-race=true] small{color:rgba(11,17,32,.75)}.race-toggle[data-active=true]{background:#eab308;border-color:#eab308;color:#0b1120;font-weight:600}