:root{--font-display:"Frank Ruhl Libre", Georgia, "Times New Roman", serif;--font-body:"Heebo", system-ui, -apple-system, "Segoe UI", sans-serif;--sport-running:#3b6fe0;--sport-cycling:#e8572a;--sport-swimming:#1ba39c;--sport-strength:#e0a21b;--sport-walking:#e0679a;--sport-other:#7b5cd6;--zone-1:#9aa0a6;--zone-2:#3b82f6;--zone-3:#22a861;--zone-4:#f08c2a;--zone-5:#e5484d;--radius:16px;--gap:12px;--tabbar-height:64px;--safe-bottom:var(--tg-safe-area-inset-bottom,env(safe-area-inset-bottom,0px));--safe-top:var(--tg-content-safe-area-inset-top,0px)}:root[data-theme=light]{--bg:#f4f0e8;--card:#fff;--text:#1d1c1a;--muted:#77736b;--line:#e7e1d6;--skeleton:#ece6da;--accent:#3b6fe0;--warn:#c2410c;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#15171b;--card:#1f2227;--text:#eceae4;--muted:#9a978f;--line:#2c3036;--skeleton:#2a2e34;--accent:#6d93ee;--warn:#f59e5b;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--text);font-family:var(--font-body);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent;margin:0;font-size:16px;line-height:1.45}button{font:inherit;color:inherit}.num{font-variant-numeric:tabular-nums;direction:ltr;unicode-bidi:isolate}.app{min-height:100vh;padding:calc(16px + var(--safe-top)) 16px calc(var(--tabbar-height) + var(--safe-bottom) + 24px);max-width:560px;margin:0 auto}.page-header{margin:8px 0 20px}.kicker{letter-spacing:.08em;color:var(--muted);font-size:11px;font-weight:500}.page-title{font-family:var(--font-display);margin:4px 0 6px;font-size:34px;font-weight:500;line-height:1.1}.page-subtitle{color:var(--muted);margin:0}.grid{gap:var(--gap);display:grid}.grid-2{grid-template-columns:1fr 1fr}.card{background:var(--card);border-radius:var(--radius);border:1px solid var(--line);padding:16px}.card-title{font-family:var(--font-display);margin:4px 0 2px;font-size:20px;font-weight:500}.card-caption{color:var(--muted);margin:0 0 12px;font-size:14px}.stat-value{font-family:var(--font-display);margin-top:6px;font-size:32px;font-weight:500;line-height:1.1}.stat-sub{color:var(--muted);font-size:13px}.skeleton{background:var(--skeleton);border-radius:8px;animation:1.6s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.55}}@media (prefers-reduced-motion:reduce){.skeleton{animation:none}}.soon{color:var(--muted);border:1px dashed var(--line);border-radius:999px;margin-top:10px;padding:2px 10px;font-size:12px;display:inline-block}.range{align-items:center;gap:8px;margin-bottom:16px;display:flex}.segmented{background:var(--card);border:1px solid var(--line);border-radius:12px;flex:1;grid-template-columns:repeat(3,1fr);padding:3px;display:grid}.segmented button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:9px;padding:8px 0;font-weight:500}.segmented button[aria-pressed=true]{background:var(--text);color:var(--bg)}.arrow{border:1px solid var(--line);background:var(--card);cursor:pointer;border-radius:12px;width:40px;height:40px}.arrow:disabled{opacity:.35;cursor:default}.range-label{color:var(--muted);margin:-8px 0 16px;font-size:13px}.banner{background:var(--card);border:1px solid var(--line);border-radius:12px;margin-bottom:16px;padding:10px 12px;font-size:14px}.bar{background:var(--skeleton);border-radius:999px;height:4px;margin-top:8px;overflow:hidden}.bar>span{background:var(--accent);border-radius:999px;height:100%;transition:width .6s;display:block}.legend{flex-wrap:wrap;gap:6px 14px;font-size:13px;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.dot{border-radius:3px;width:10px;height:10px;display:inline-block}.tabbar{inset-inline:0;height:calc(var(--tabbar-height) + var(--safe-bottom));padding-bottom:var(--safe-bottom);background:var(--card);border-top:1px solid var(--line);z-index:10;grid-template-columns:repeat(5,1fr);display:grid;position:fixed;bottom:0}.tabbar button{color:var(--muted);cursor:pointer;background:0 0;border:0;flex-direction:column;justify-content:center;align-items:center;gap:2px;font-size:11px;display:flex}.tabbar button .icon{filter:grayscale();opacity:.7;font-size:20px}.tabbar button[aria-current=page]{color:var(--text);font-weight:500}.tabbar button[aria-current=page] .icon{filter:none;opacity:1}.center{text-align:center;place-items:center;min-height:100vh;padding:24px;display:grid}.center h1{font-family:var(--font-display);margin:0 0 8px;font-size:30px;font-weight:500}.center p{color:var(--muted);margin:0}
