:root{--grass-1: #a8e07f;--grass-2: #7fcb5b;--grass-3: #5fb043;--grass-dark: #2f6b2a;--soil: #e3c59a;--soil-2: #d2ab78;--soil-dark: #a57a47;--cream: #fffaf0;--paper: #ffffff;--ink: #1f2d1b;--ink-soft: #52604c;--ink-faint: #7d8a77;--line: #e8e1cf;--coral: #d9482a;--coral-hover: #bf3a1f;--coral-soft: #ffe3da;--sun: #ffd166;--sun-soft: #fff4d1;--mint-soft: #e3f6d8;--sky: #e6f5ff;--danger: #b42318;--danger-soft: #fde8e6;--ok: #2f7d32;--strava: #fc5200;--radius: 18px;--radius-sm: 12px;--shadow: 0 1px 2px rgba(31, 45, 27, .06), 0 6px 20px rgba(31, 45, 27, .08);--shadow-lg: 0 10px 40px rgba(31, 45, 27, .16);--font-display: "Fredoka", "Nunito", system-ui, sans-serif;--font-body: "Nunito", system-ui, -apple-system, "Segoe UI", sans-serif;color-scheme:light}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;font-family:var(--font-body);color:var(--ink);background:radial-gradient(circle at 10% -10%,#fff7d6 0,transparent 40%),linear-gradient(180deg,#f3fbe9,#e9f6dc);background-attachment:fixed;min-height:100vh;line-height:1.5}img{max-width:100%}a{color:var(--grass-dark);font-weight:700}a:hover{color:var(--coral)}h1,h2,h3,h4{font-family:var(--font-display);line-height:1.15;margin:0 0 .4em;font-weight:600;letter-spacing:-.01em}h1{font-size:clamp(1.8rem,4vw,2.6rem)}h2{font-size:clamp(1.3rem,3vw,1.7rem)}h3{font-size:1.15rem}p{margin:0 0 .8em}:focus-visible{outline:3px solid #1d7cf2;outline-offset:2px;border-radius:6px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.container{width:100%;max-width:1180px;margin:0 auto;padding:0 16px}main.page{padding:24px 0 96px}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:20px}.page-head p{color:var(--ink-soft);margin:0}.grid{display:grid;gap:20px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}@media (max-width: 860px){.grid-2,.grid-3{grid-template-columns:1fr}}.stack{display:flex;flex-direction:column;gap:12px}.row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.spread{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.muted{color:var(--ink-soft)}.faint{color:var(--ink-faint);font-size:.9rem}.small{font-size:.875rem}.site-header{position:sticky;top:0;z-index:40;background:#fffaf0e6;-webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--line)}.site-header .container{display:flex;align-items:center;gap:16px;height:64px}.brand{display:flex;align-items:center;gap:8px;text-decoration:none;color:var(--ink);font-family:var(--font-display);font-size:1.35rem;font-weight:700}.brand:hover{color:var(--ink)}.brand img{width:34px;height:34px}.nav{display:flex;align-items:center;gap:2px;margin-left:auto}.nav a,.nav button.linklike{text-decoration:none;color:var(--ink-soft);font-weight:700;padding:8px 12px;border-radius:999px;font-size:.95rem;background:none;border:0;cursor:pointer;font-family:inherit}.nav a:hover,.nav button.linklike:hover{background:var(--mint-soft);color:var(--ink)}.nav a.active{background:var(--grass-dark);color:#fff}.btn.nav-toggle{display:none;margin-left:auto}.nav.nav-guest{gap:8px}@media (max-width: 980px){.btn.nav-toggle{display:inline-flex}.nav{display:none;position:absolute;top:64px;left:0;right:0;flex-direction:column;align-items:stretch;background:var(--cream);border-bottom:1px solid var(--line);padding:8px 16px 16px;box-shadow:var(--shadow)}.nav.open{display:flex}.nav.nav-guest{display:flex;position:static;flex-direction:row;align-items:center;background:none;border:0;box-shadow:none;padding:0}.nav.nav-guest a{padding:8px 12px}.nav a,.nav button.linklike{padding:12px 14px;border-radius:12px;text-align:left}}.card{background:var(--paper);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;border:1px solid rgba(232,225,207,.6)}.card h2,.card h3{margin-top:0}.card-tight{padding:14px 16px}.card-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;flex-wrap:wrap}.card-head h2,.card-head h3{margin:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font:700 .98rem/1 var(--font-body);padding:12px 18px;min-height:44px;border-radius:999px;border:2px solid transparent;cursor:pointer;text-decoration:none;transition:transform .12s ease,background .15s ease,box-shadow .15s ease;white-space:nowrap}.btn:active{transform:translateY(1px) scale(.98)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--coral);color:#fff;box-shadow:0 3px #9b2f17}.btn-primary:hover:not(:disabled){background:var(--coral-hover);color:#fff}.btn-secondary{background:var(--paper);color:var(--ink);border-color:var(--line)}.btn-secondary:hover:not(:disabled){border-color:var(--grass-3);color:var(--ink)}.btn-ghost{background:transparent;color:var(--ink-soft);padding:8px 12px;min-height:36px}.btn-ghost:hover:not(:disabled){background:var(--mint-soft);color:var(--ink)}.btn-danger{background:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:#8f1c13;color:#fff}.btn-sm{padding:7px 12px;min-height:34px;font-size:.87rem}.btn-block{width:100%}.btn-strava{background:var(--strava);color:#fff;font-weight:800;box-shadow:0 3px #b33a00}.btn-strava:hover:not(:disabled){background:#e04800;color:#fff}.fab{position:fixed;right:20px;bottom:20px;z-index:30;box-shadow:var(--shadow-lg),0 3px #9b2f17;padding:16px 22px;font-size:1.05rem}@media (max-width: 600px){.fab{right:16px;bottom:16px;left:16px}}.field{display:flex;flex-direction:column;gap:6px}.field label,.label{font-weight:800;font-size:.92rem}.field .hint{color:var(--ink-faint);font-size:.85rem}.field .error,.form-error{color:var(--danger);font-size:.88rem;font-weight:700}.form-error{background:var(--danger-soft);padding:10px 14px;border-radius:var(--radius-sm)}.input,select.input,textarea.input{font:600 1rem var(--font-body);color:var(--ink);background:#fff;border:2px solid var(--line);border-radius:var(--radius-sm);padding:10px 12px;min-height:46px;width:100%;transition:border-color .15s}.input:focus{border-color:var(--grass-3);outline:none;box-shadow:0 0 0 3px #5fb04340}.input[aria-invalid=true]{border-color:var(--danger)}textarea.input{min-height:84px;resize:vertical}.input-group{display:flex;gap:8px}.input-group .input:first-child{flex:1}.input-group select.input{width:auto}.form{display:flex;flex-direction:column;gap:16px}.form-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}@media (max-width: 520px){.form-row{grid-template-columns:1fr}}.checkbox{display:flex;align-items:flex-start;gap:10px;cursor:pointer;font-weight:600}.checkbox input{width:20px;height:20px;margin-top:2px;accent-color:var(--grass-dark);flex:none}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{display:inline-flex;align-items:center;gap:6px;padding:8px 14px;border-radius:999px;border:2px solid var(--line);background:#fff;font:700 .9rem var(--font-body);color:var(--ink-soft);cursor:pointer;min-height:40px}.chip[aria-pressed=true]{background:var(--grass-dark);color:#fff;border-color:var(--grass-dark)}.chip .count{background:#00000014;border-radius:999px;padding:0 7px;font-size:.78rem}.chip[aria-pressed=true] .count{background:#ffffff40}.segmented{display:inline-flex;background:#fff;border:2px solid var(--line);border-radius:999px;padding:3px;gap:2px;flex-wrap:wrap}.segmented button{border:0;background:none;padding:8px 14px;border-radius:999px;font:700 .9rem var(--font-body);color:var(--ink-soft);cursor:pointer;min-height:36px}.segmented button[aria-pressed=true]{background:var(--grass-dark);color:#fff}.option-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}@media (max-width: 640px){.option-cards{grid-template-columns:1fr}}.option-card{text-align:left;border:2px solid var(--line);background:#fff;border-radius:var(--radius-sm);padding:14px;cursor:pointer;font-family:inherit;color:var(--ink)}.option-card strong{display:block;font-size:1rem}.option-card span{color:var(--ink-soft);font-size:.87rem}.sport-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.sport-option{text-align:center;padding:12px 8px}.sport-option .sport-emoji{display:block;font-size:1.8rem;line-height:1.2;color:inherit}.option-card[aria-checked=true]{border-color:var(--grass-dark);background:var(--mint-soft);box-shadow:inset 0 0 0 1px var(--grass-dark)}.option-card:disabled{opacity:.55;cursor:not-allowed}.option-card[aria-pressed=true]{border-color:var(--grass-dark);background:var(--mint-soft);box-shadow:inset 0 0 0 1px var(--grass-dark)}.badge{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:999px;font-size:.78rem;font-weight:800;white-space:nowrap}.badge-manual{background:var(--sky);color:#1f5a85}.badge-strava{background:#fff0e8;color:#b33a00}.badge-ok{background:var(--mint-soft);color:var(--ok)}.badge-warn{background:var(--sun-soft);color:#7a5300}.badge-off{background:#eef0ec;color:var(--ink-soft)}.badge-danger{background:var(--danger-soft);color:var(--danger)}.progress{height:12px;background:#eef3e8;border-radius:999px;overflow:hidden}.progress>span{display:block;height:100%;background:linear-gradient(90deg,var(--grass-3),#9fdc6a);border-radius:inherit;transition:width .8s ease}.progress.sun>span{background:linear-gradient(90deg,#f2a83b,var(--sun))}.stat{display:flex;flex-direction:column}.stat .value{font-family:var(--font-display);font-size:1.9rem;font-weight:600;line-height:1.1}.stat .label{color:var(--ink-soft);font-size:.85rem;font-weight:700}.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px}.stats .stat{background:var(--cream);border-radius:var(--radius-sm);padding:12px 14px}.notice{display:flex;gap:12px;align-items:flex-start;padding:12px 16px;border-radius:var(--radius-sm);background:var(--sun-soft);border:1px solid #f3dc97}.notice.info{background:var(--sky);border-color:#bfe3fb}.notice.danger{background:var(--danger-soft);border-color:#f5c2bd}.notice.ok{background:var(--mint-soft);border-color:#bfe4a9}.notice>:last-child{margin-bottom:0}.list{list-style:none;margin:0;padding:0}.list>li{padding:12px 0;border-bottom:1px solid var(--line)}.list>li:last-child{border-bottom:0}.table-wrap{overflow-x:auto}table.table{width:100%;border-collapse:collapse;font-size:.95rem}.table th{text-align:left;font-size:.8rem;text-transform:uppercase;letter-spacing:.04em;color:var(--ink-faint);padding:8px 10px;border-bottom:2px solid var(--line);white-space:nowrap}.table td{padding:12px 10px;border-bottom:1px solid var(--line);vertical-align:middle}.table tr.me td{background:#fff8e6}.table .num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.activity-item{display:grid;grid-template-columns:44px 1fr auto;gap:12px;align-items:center}.activity-item .sport-icon{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;font-size:1.4rem;background:var(--mint-soft)}.activity-item .dist{font-family:var(--font-display);font-size:1.15rem;font-weight:600;text-align:right;white-space:nowrap}.activity-item.excluded .dist{color:var(--ink-faint);text-decoration:line-through;text-decoration-thickness:2px}.activity-item .title{font-weight:800}.activity-item .meta{font-size:.85rem;color:var(--ink-soft);display:flex;gap:6px 10px;flex-wrap:wrap;align-items:center}.activity-actions{display:flex;gap:4px;justify-content:flex-end;flex-wrap:wrap;margin-top:4px}.avatar{width:40px;height:40px;border-radius:50%;object-fit:cover;flex:none;display:inline-grid;place-items:center;font-weight:800;color:#fff;font-family:var(--font-display);border:3px solid #fff;box-shadow:0 1px 4px #00000026}.avatar-lg{width:96px;height:96px;font-size:2rem}.person{display:flex;align-items:center;gap:10px;text-decoration:none;color:inherit}.race-hero{background:var(--paper);border-radius:24px;box-shadow:var(--shadow);overflow:hidden;border:1px solid rgba(232,225,207,.6)}.race-hero-head{padding:16px 20px;display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}.race-hero-head h1{font-size:clamp(1.4rem,3vw,2rem);margin:0}.leader-banner{display:flex;align-items:center;gap:10px;padding:10px 20px;background:linear-gradient(90deg,#fff4d1,#fffaf0);border-top:1px solid #f3e3b0;border-bottom:1px solid #f3e3b0;font-weight:700;flex-wrap:wrap}.leader-banner .crown{font-size:1.4rem}.track-wrap{position:relative;background:var(--grass-2)}.track-svg{display:block;width:100%;height:auto;-webkit-user-select:none;user-select:none}.track-svg .snail-g{cursor:pointer}.track-svg .snail-label{font-family:var(--font-body);font-weight:800;pointer-events:none}.track-svg .snail-body{transform-box:fill-box;transform-origin:50% 100%}.track-svg .moving .snail-body{animation:squish .5s ease-in-out infinite alternate}.track-svg .moving .photo-token{animation:hop .45s ease-in-out infinite alternate}.track-svg .stalk{transform-box:fill-box;transform-origin:50% 100%;animation:wobble 2.4s ease-in-out infinite}.track-svg .stalk.b{animation-delay:-1.1s}.track-svg .flag{transform-box:fill-box;transform-origin:0 50%;animation:flutter 1.6s ease-in-out infinite}.track-svg .bob{animation:bob 3s ease-in-out infinite}@keyframes squish{0%{transform:scaleX(1) scaleY(1)}to{transform:scaleX(1.12) scaleY(.9)}}@keyframes wobble{0%,to{transform:rotate(-6deg)}50%{transform:rotate(7deg)}}@keyframes flutter{0%,to{transform:skewY(0)}50%{transform:skewY(-6deg) scaleX(.95)}}@keyframes hop{0%{transform:translateY(0)}to{transform:translateY(-5px)}}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(-3px)}}@media (prefers-reduced-motion: reduce){.track-svg .stalk,.track-svg .flag,.track-svg .bob,.track-svg .moving .snail-body,.track-svg .moving .photo-token{animation:none}.progress>span{transition:none}}.track-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;pointer-events:none}.track-empty div{background:#ffffffeb;padding:14px 20px;border-radius:16px;font-weight:700;box-shadow:var(--shadow);text-align:center;max-width:80%}.snail-tip{position:absolute;z-index:5;pointer-events:none;background:#fff;border-radius:14px;box-shadow:var(--shadow-lg);padding:10px 14px;min-width:180px;transform:translate(-50%,calc(-100% - 12px));font-size:.9rem}.snail-tip strong{font-family:var(--font-display);font-size:1.05rem}.standings{padding:8px 20px 20px}.standing-row{display:grid;grid-template-columns:36px 44px minmax(0,1fr) auto;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line)}.standing-row:last-child{border-bottom:0}.standing-row.me{background:#fff8e6;margin:0 -10px;padding:10px;border-radius:12px}.rank{font-family:var(--font-display);font-size:1.2rem;font-weight:700;text-align:center;color:var(--ink-soft)}.rank.r1{color:#b8860b}.rank.r2{color:#7a7f86}.rank.r3{color:sienna}.standing-row .name{font-weight:800;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.standing-row .bar{margin-top:4px}.standing-row .right{text-align:right;font-variant-numeric:tabular-nums}.standing-row .right strong{font-family:var(--font-display);font-size:1.1rem}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#1f2d1b73;z-index:100;display:grid;place-items:center;padding:16px;animation:fadein .15s ease}.modal{background:var(--paper);border-radius:22px;box-shadow:var(--shadow-lg);width:100%;max-width:520px;max-height:calc(100vh - 32px);overflow:auto;padding:24px;animation:pop .2s ease}.modal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px;gap:12px}.modal-head h2{margin:0}@keyframes fadein{0%{opacity:0}}@keyframes pop{0%{transform:scale(.96) translateY(8px);opacity:0}}@media (prefers-reduced-motion: reduce){.modal,.modal-backdrop{animation:none}}.toasts{position:fixed;z-index:200;left:50%;transform:translate(-50%);bottom:24px;display:flex;flex-direction:column;gap:8px;width:min(440px,calc(100% - 32px));pointer-events:none}.toast{background:var(--ink);color:#fff;padding:12px 16px;border-radius:14px;box-shadow:var(--shadow-lg);font-weight:700;animation:pop .2s ease;pointer-events:auto}.toast.error{background:var(--danger)}.spinner{width:28px;height:28px;border-radius:50%;border:4px solid var(--mint-soft);border-top-color:var(--grass-3);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.loading-block{display:grid;place-items:center;padding:48px 16px;gap:10px;color:var(--ink-soft);font-weight:700}.skeleton{background:linear-gradient(90deg,#eef3e8 25%,#f7faf3 37%,#eef3e8 63%);background-size:400% 100%;animation:shimmer 1.4s ease infinite;border-radius:12px}@keyframes shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}.empty{text-align:center;padding:36px 16px;color:var(--ink-soft)}.empty .emoji{font-size:2.6rem;display:block;margin-bottom:6px}.empty h3{color:var(--ink)}.auth-wrap{min-height:calc(100vh - 64px);display:grid;place-items:center;padding:32px 16px}.auth-card{width:100%;max-width:420px}.auth-card h1{font-size:2rem}.landing-hero{display:grid;grid-template-columns:1.05fr 1fr;gap:32px;align-items:center;padding:48px 0 32px}.landing-hero h1{font-size:clamp(2.2rem,5.5vw,3.6rem)}.landing-hero .lede{font-size:1.15rem;color:var(--ink-soft);max-width:34em}@media (max-width: 860px){.landing-hero{grid-template-columns:1fr;padding-top:24px}}.feature{display:flex;gap:14px;align-items:flex-start}.feature .icon{font-size:1.8rem;width:52px;height:52px;border-radius:16px;background:var(--mint-soft);display:grid;place-items:center;flex:none}.snail-card{display:flex;gap:18px;align-items:center}.snail-card svg{flex:none}.photo-edit{display:flex;gap:20px;align-items:center;flex-wrap:wrap}.powered-strava{font-size:.8rem;font-weight:800;color:var(--strava);letter-spacing:.02em}.log-table td,.log-table th{font-size:.85rem;padding:8px}.camera-frame{position:relative;aspect-ratio:1;width:100%;border-radius:18px;overflow:hidden;background:#1f2d1b}.camera-frame video,.camera-frame img{width:100%;height:100%;object-fit:cover;display:block}.camera-frame video.mirrored{transform:scaleX(-1)}.camera-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:#fff;font-weight:700}.camera-guide{position:absolute;top:8%;right:8%;bottom:8%;left:8%;border-radius:50%;border:3px dashed rgba(255,255,255,.85);box-shadow:0 0 0 999px #1f2d1b59;pointer-events:none}hr.sep{border:0;border-top:1px solid var(--line);margin:20px 0}.footer{text-align:center;color:var(--ink-faint);font-size:.85rem;padding:24px 16px 40px}
