@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/assets/archivo-vietnamese-standard-normal-rJmnGBSt.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/assets/archivo-latin-ext-standard-normal-7khWdh9v.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;font-stretch:62% 125%;src:url(/assets/archivo-latin-standard-normal-DY7AcnAa.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--grey-50:#f7f7f8;--grey-100:#ececef;--grey-200:#dbdce1;--grey-300:#c0c2c8;--grey-400:#999ba3;--grey-500:#6e717c;--grey-600:#595c69;--grey-700:#3e414c;--grey-800:#282a34;--grey-900:#171821;--cobalt-50:#f2f6fd;--cobalt-100:#e1e9f9;--cobalt-200:#c1d0f0;--cobalt-300:#95ade4;--cobalt-400:#6080d2;--cobalt-500:#3b62c4;--cobalt-600:#2d50a9;--cobalt-700:#233e8b;--cobalt-800:#182b67;--cobalt-900:#0f1943;--vermilion-50:#fff1eb;--vermilion-100:#fedfd2;--vermilion-200:#fbbda7;--vermilion-300:#f69274;--vermilion-400:#ef6948;--vermilion-500:#e14323;--vermilion-600:#bd341f;--vermilion-700:#98271b;--vermilion-800:#741c16;--vermilion-900:#501310;--lake-100:#daf4f6;--lake-300:#6ec8cf;--lake-500:#1f717a;--lake-700:#14525c;--ochre-100:#fdeec4;--ochre-300:#efc561;--ochre-500:#bc811a;--ochre-700:#7b4b14;--plum-100:#f0e4f6;--plum-300:#c79fdb;--plum-500:#894ea6;--plum-700:#5f3172;--crimson-50:#fdf1f3;--crimson-100:#fadbdf;--crimson-300:#e28d98;--crimson-500:#c13346;--crimson-600:#a32939;--crimson-700:#841f2c;--crimson-900:#4b1118;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--space-9:96px;--space-10:128px;--text-xs:12px;--text-sm:14px;--text-base:16px;--text-lg:18px;--text-xl:20px;--text-2xl:24px;--text-3xl:30px;--text-4xl:36px;--text-5xl:48px;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--radius-full:999px;--font:"Archivo Variable", "Archivo", system-ui, sans-serif;--wide:115%;--narrow:92%;--content-width:1180px}:root,:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:var(--grey-50);--surface:#fdfdfe;--sunken:var(--grey-100);--line:var(--grey-200);--line-strong:var(--grey-300);--text:var(--grey-900);--text-2:var(--grey-600);--text-3:var(--grey-500);--accent:var(--cobalt-600);--accent-strong:var(--cobalt-700);--accent-soft:var(--cobalt-100);--on-accent:var(--grey-50);--route:var(--vermilion-500);--contour:#d4d6dd;--danger:var(--crimson-600);--danger-soft:var(--crimson-50);--danger-line:var(--crimson-100);--success-soft:var(--cobalt-50);--success-line:var(--cobalt-200);--trend-up:var(--lake-500);--trend-down:var(--crimson-600);--heat-0:var(--grey-100);--heat-1:var(--cobalt-100);--heat-2:var(--cobalt-300);--heat-3:var(--cobalt-500);--heat-4:var(--cobalt-700);--chart-altitude:var(--cobalt-500);--chart-speed:var(--lake-500);--chart-heartRate:var(--crimson-500);--chart-power:var(--ochre-500);--chart-cadence:var(--plum-500);--chart-temperature:var(--vermilion-600);--hover-overlay:#1718210d;--active-overlay:#1718211a;--shadow-1:0 1px 2px #24294214, 0 0 0 1px #2429420d;--shadow-2:0 2px 6px -1px #2429421a, 0 1px 2px #24294214, 0 0 0 1px #2429420a;--shadow-3:0 8px 16px -4px #24294224, 0 2px 4px -2px #24294214;--shadow-4:0 16px 32px -8px #24294233, 0 4px 8px -4px #2429420f;--shadow-5:0 28px 56px -12px #1b1f3252}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#14151a;--surface:#1d1e25;--sunken:#0f1014;--line:#30323b;--line-strong:#464853;--text:#eaebf1;--text-2:#abadba;--text-3:#898c9a;--accent:var(--cobalt-300);--accent-strong:var(--cobalt-300);--accent-soft:#212b45;--on-accent:var(--cobalt-900);--route:var(--vermilion-400);--contour:#272830;--danger:var(--crimson-300);--danger-soft:#321b1e;--danger-line:#562e34;--success-soft:#1d2334;--success-line:#353f5a;--trend-up:var(--lake-300);--trend-down:var(--crimson-300);--heat-0:#292b32;--heat-1:#283352;--heat-2:#374b81;--heat-3:var(--cobalt-400);--heat-4:var(--cobalt-300);--chart-altitude:var(--cobalt-300);--chart-speed:var(--lake-300);--chart-heartRate:var(--crimson-300);--chart-power:var(--ochre-300);--chart-cadence:var(--plum-300);--chart-temperature:var(--vermilion-300);--hover-overlay:#eaebf10f;--active-overlay:#eaebf11c;--shadow-1:0 0 0 1px #eaebf10f;--shadow-2:inset 0 1px 0 #eaebf10d, 0 0 0 1px #eaebf10f, 0 2px 6px #0000004d;--shadow-3:inset 0 1px 0 #eaebf10f, 0 0 0 1px #eaebf114, 0 8px 16px -4px #00000073;--shadow-4:inset 0 1px 0 #eaebf10f, 0 0 0 1px #eaebf114, 0 16px 32px -8px #0000008c;--shadow-5:0 0 0 1px #eaebf114, 0 28px 56px -12px #000000b3}*,:before,:after{box-sizing:border-box}html{background:var(--bg)}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:var(--text-base);font-synthesis:none;-webkit-font-smoothing:antialiased;margin:0;line-height:1.5}h1,h2,h3,p{margin:0}h1,h2,h3{line-height:1.25}a{color:inherit;text-decoration:none}button,input{font:inherit;color:inherit}button{cursor:pointer;background:0 0;border:0;padding:0}button:disabled{opacity:.5;cursor:default}button,a,input{-webkit-tap-highlight-color:transparent}button,a{touch-action:manipulation}:is(button,a,input):focus-visible{outline:2px solid var(--accent);outline-offset:2px}.unit{color:var(--text-2);font-weight:400;font-stretch:100%}.muted{color:var(--text-2)}.accent{color:var(--accent)}.primary-button,.outline-button,.danger-button{justify-content:center;align-items:center;gap:var(--space-2);min-height:40px;padding:0 var(--space-4);border-radius:var(--radius-md);font-size:var(--text-sm);white-space:nowrap;font-weight:600;display:inline-flex}.primary-button{background:var(--accent-strong);color:var(--on-accent);box-shadow:inset 0 1px #a8bff038,0 1px 2px #0b133259}:root[data-theme=dark] .primary-button{box-shadow:inset 0 1px #dce6f973,0 1px 2px #0006}.outline-button{background:var(--surface);color:var(--text);box-shadow:var(--shadow-1)}.danger-button{background:var(--crimson-600);color:#fff;box-shadow:inset 0 1px #f5a3ae33,0 1px 2px #3d0f154d}.text-button,.link-button{align-items:center;gap:var(--space-2);color:var(--accent);font-size:var(--text-sm);font-weight:600;display:inline-flex}.icon-button{border-radius:var(--radius-md);width:36px;height:36px;color:var(--text-2);justify-content:center;align-items:center;display:inline-flex}.topbar{align-items:center;gap:var(--space-6);height:64px;padding:0 max(var(--space-5), calc((100% - var(--content-width)) / 2));border-bottom:1px solid var(--line);box-shadow:inset 0 3px 0 var(--route);z-index:40;background:var(--bg);display:flex;position:sticky;top:0}.app-shell:has(.map-panel-expanded) .topbar{z-index:auto;position:static}.brand{align-items:center;gap:var(--space-3);display:inline-flex}.brand-name{font-size:var(--text-xl);font-weight:750;font-stretch:var(--wide);letter-spacing:-.01em}.brand-mark{flex-shrink:0;display:block}.main-nav{align-self:stretch;gap:var(--space-5);flex:1;display:flex}.main-nav a{align-items:center;gap:var(--space-2);color:var(--text-2);font-size:var(--text-sm);border-bottom:2px solid #0000;margin-bottom:-1px;font-weight:600;display:inline-flex}.main-nav svg{color:var(--text-3)}.main-nav a[aria-current=page]{color:var(--text);border-bottom-color:var(--accent)}.main-nav a[aria-current=page] svg{color:var(--accent)}.topbar-actions{align-items:center;gap:var(--space-1);display:flex}.main-content{isolation:isolate;max-width:calc(var(--content-width) + 2 * var(--space-5));padding:var(--space-7) var(--space-5) var(--space-6);margin:0 auto;position:relative}.main-content:before{content:"";z-index:-1;background:var(--contour);-webkit-mask-composite:source-in;pointer-events:none;width:min(760px,100%);height:332px;position:absolute;top:0;right:0;-webkit-mask-image:url(/assets/contours-BccUY3D7.svg),linear-gradient(to bottom left,#000 35%,#0000 85%);mask-image:url(/assets/contours-BccUY3D7.svg),linear-gradient(to bottom left,#000 35%,#0000 85%);-webkit-mask-position:100% 0,0 0;mask-position:100% 0,0 0;-webkit-mask-size:760px,auto;mask-size:760px,auto;-webkit-mask-repeat:no-repeat,repeat;mask-repeat:no-repeat,repeat;-webkit-mask-clip:border-box,border-box;mask-clip:border-box,border-box;-webkit-mask-origin:border-box,border-box;mask-origin:border-box,border-box;-webkit-mask-composite:source-in;mask-composite:intersect;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.page-heading{justify-content:space-between;align-items:flex-end;gap:var(--space-5);margin-bottom:var(--space-7);display:flex}.page-heading h1,.ride-detail-heading h1{font-size:var(--text-5xl);letter-spacing:-.015em;font-weight:700;line-height:1.05}.page-heading p{margin-top:var(--space-3);color:var(--text-2);font-size:var(--text-lg)}.page-section+.page-section{margin-top:var(--space-8)}.section-heading,.section-top{justify-content:space-between;align-items:baseline;gap:var(--space-2) var(--space-4);flex-wrap:wrap;display:flex}.section-heading{margin-bottom:var(--space-4)}.section-heading h2,.section-top h2{font-size:var(--text-lg);font-weight:650}.section-meta{color:var(--text-3);font-size:var(--text-sm)}.footer{justify-content:space-between;gap:var(--space-4);margin-top:var(--space-9);padding-top:var(--space-5);border-top:1px solid var(--line);color:var(--text-3);font-size:var(--text-xs);display:flex}.period-grid{gap:var(--space-4);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.period-card{min-width:0;padding:var(--space-5);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-2)}.period-card-heading{justify-content:space-between;align-items:baseline;gap:var(--space-3);display:flex}.period-card-heading h3{font-size:var(--text-sm);font-weight:650}.period-card-heading span{color:var(--text-3);font-size:var(--text-xs);white-space:nowrap}.period-hero{align-items:baseline;gap:0 var(--space-2);margin:var(--space-4) 0 var(--space-5);flex-wrap:wrap;display:flex}.period-hero strong{font-size:var(--text-4xl);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-weight:700;line-height:1}.period-hero .unit{font-size:var(--text-lg)}.period-hero .period-previous{margin-top:var(--space-2);flex-basis:100%}.period-stats{gap:var(--space-3);padding-top:var(--space-4);border-top:1px solid var(--line);grid-template-columns:repeat(3,minmax(0,1fr));margin:0;display:grid}.period-stats dt{color:var(--text-3);font-size:var(--text-xs)}.period-stats dd{align-items:baseline;gap:0 var(--space-1);margin:var(--space-1) 0 0;font-size:var(--text-sm);font-variant-numeric:tabular-nums;white-space:nowrap;flex-wrap:wrap;display:flex}.period-stats strong{font-weight:650}.period-stats .period-previous{flex-basis:100%;margin-top:2px}.period-previous{align-items:center;gap:var(--space-1);font-size:var(--text-xs);white-space:nowrap;font-weight:500;display:inline-flex}.trend-up{color:var(--trend-up)}.trend-down{color:var(--trend-down)}.trend-equal{color:var(--text-3)}.logbook-month+.logbook-month{margin-top:var(--space-6)}.logbook-month-heading{justify-content:space-between;align-items:baseline;gap:var(--space-3);margin:0 0 var(--space-2);padding:0 var(--space-1);font-size:var(--text-sm);font-weight:650;display:flex}.logbook-month-heading .section-meta{font-variant-numeric:tabular-nums;font-weight:400}.logbook{border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-2);margin:0;padding:0;list-style:none;overflow:hidden}.logbook li+li{border-top:1px solid var(--line)}.ride-row{align-items:center;gap:var(--space-4);padding:var(--space-3) var(--space-5) var(--space-3) var(--space-4);grid-template-columns:44px minmax(0,1fr) auto 18px;display:grid}.ride-row-date{flex-direction:column;align-items:center;line-height:1.1;display:flex}.ride-row-date strong{font-size:var(--text-xl);font-weight:650;font-stretch:var(--narrow);font-variant-numeric:tabular-nums}.ride-row-date span{color:var(--text-3);font-size:var(--text-xs)}.ride-row-title{flex-direction:column;min-width:0;display:flex}.ride-row-title strong{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.ride-row-title span{color:var(--text-3);font-size:var(--text-xs)}.ride-row-values{color:var(--text-2);font-size:var(--text-sm);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;grid-template-columns:6.5rem 4.5rem 7rem 4.5rem;display:grid}.ride-row-distance{color:var(--text)}.ride-row-distance strong{font-size:var(--text-base);font-weight:650}.ride-row-arrow{color:var(--text-3)}.empty-state{max-width:34rem;margin:var(--space-6) auto;padding:var(--space-8) var(--space-6);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-2);text-align:center;flex-direction:column;align-items:center;display:flex}.empty-state-icon{width:56px;height:56px;margin-bottom:var(--space-5);background:var(--accent-soft);color:var(--accent);border-radius:50%;place-items:center;display:grid}.empty-state h2{font-size:var(--text-2xl);font-weight:700}.empty-state p{margin:var(--space-3) 0 var(--space-6);color:var(--text-2)}.ride-detail{transition:opacity .15s}.is-loading{opacity:.5;pointer-events:none}.ride-detail-heading{justify-content:space-between;align-items:flex-end;gap:var(--space-5);margin-bottom:var(--space-6);display:flex}.ride-detail-heading>div{min-width:0}.ride-detail-heading h1{font-size:var(--text-4xl);overflow-wrap:anywhere}.ride-date{margin-bottom:var(--space-2);color:var(--text-2);font-size:var(--text-sm);font-weight:600}.ride-meta{gap:var(--space-1) var(--space-4);margin-top:var(--space-3);color:var(--text-3);font-size:var(--text-sm);flex-wrap:wrap;display:flex}.ride-actions{align-items:center;gap:var(--space-2);flex-shrink:0;display:flex}.ride-actions .delete-ride-button{color:var(--danger)}.ride-menu{flex-shrink:0;display:none;position:relative}.ride-menu-button{width:40px;padding:0}.ride-menu-list{top:calc(100% + var(--space-2));z-index:30;min-width:232px;max-width:calc(100vw - 32px);padding:var(--space-1);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-3);flex-direction:column;display:flex;position:absolute;right:0}.ride-menu-list>:is(a,button){align-items:center;gap:var(--space-3);width:100%;padding:var(--space-3);border-radius:var(--radius-md);font-size:var(--text-sm);text-align:left;white-space:nowrap;display:flex}.ride-menu-list svg{color:var(--text-3)}.ride-menu-list>:is(a,button):focus-visible{outline-offset:-2px}.ride-menu-list .ride-menu-delete,.ride-menu-list .ride-menu-delete svg{color:var(--danger)}.ride-menu-separator{height:1px;margin:var(--space-1) var(--space-2);background:var(--line)}.ride-sheet{margin-bottom:var(--space-6);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-2);overflow:hidden}.map-panel{background:var(--sunken);height:380px;position:relative;overflow:hidden}.map-canvas,.map-fallback,.map-panel>.map-canvas{position:absolute;inset:0}.map-fallback{color:var(--text-3);justify-content:center;align-items:center;display:flex}.route-trace{width:100%;height:100%;padding:var(--space-4) var(--space-7) var(--space-6)}.route-trace-line{stroke:var(--route)}.route-trace-start{fill:var(--route);stroke:var(--surface)}.route-trace-finish{fill:var(--surface);stroke:var(--route)}.map-label{left:var(--space-4);bottom:var(--space-3);padding:2px var(--space-2);border-radius:var(--radius-sm);background:var(--surface);color:var(--text-2);font-size:var(--text-xs);pointer-events:none;position:absolute}.map-notice{left:50%;bottom:var(--space-7);align-items:center;gap:var(--space-2);max-width:92%;padding:var(--space-2) var(--space-3);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-3);color:var(--text-2);font-size:var(--text-xs);display:flex;position:absolute;transform:translate(-50%)}.map-notice>svg{color:var(--route);flex-shrink:0}.map-actions{gap:var(--space-2);display:flex;position:absolute;bottom:34px;right:10px}.map-actions button{border-radius:var(--radius-sm);background:var(--surface);width:32px;height:32px;color:var(--text);box-shadow:var(--shadow-2);place-items:center;display:grid}.no-gps{text-align:center}.no-gps svg{margin-bottom:var(--space-3)}:is(.map-panel:fullscreen,.map-panel.map-panel-expanded){border-radius:0;width:100%;height:100%}.map-panel.map-panel-expanded{z-index:1000;height:100dvh;position:fixed;inset:0}.mapboxgl-ctrl-attrib{font-size:10px!important}.map-panel .mapboxgl-ctrl-group{border-radius:var(--radius-sm);box-shadow:var(--shadow-2);overflow:hidden}:root[data-theme=dark] .map-panel .mapboxgl-ctrl-group{background:var(--surface)}:root[data-theme=dark] .map-panel .mapboxgl-ctrl-group button+button{border-top-color:var(--line)}:root[data-theme=dark] .map-panel .mapboxgl-ctrl-icon{filter:invert()brightness(1.15)}:root[data-theme=dark] .map-panel .mapboxgl-ctrl button:not(:disabled):hover{background-color:#0000;background-image:linear-gradient(var(--hover-overlay), var(--hover-overlay))}.map-panel .mapboxgl-ctrl-group button:focus:not(:focus-visible){box-shadow:none}.map-panel .mapboxgl-ctrl-group button:focus-visible{box-shadow:inset 0 0 0 2px var(--accent)}.ride-stats{border-top:1px solid var(--line);grid-template-columns:repeat(4,minmax(0,1fr));margin:0;display:grid}.ride-stats>div{padding:var(--space-5)}.ride-stats>div+div{border-left:1px solid var(--line)}.ride-stats dt{color:var(--text-3);font-size:var(--text-sm)}.ride-stats dd{align-items:baseline;gap:var(--space-2);margin:var(--space-1) 0 0;display:flex}.ride-stats strong{font-size:var(--text-3xl);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-weight:700}.chart-panel{padding:var(--space-5) var(--space-6);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-2)}.metric-tabs{gap:var(--space-5);margin-top:var(--space-4);box-shadow:inset 0 -1px 0 var(--line);overscroll-behavior-x:contain;scrollbar-width:none;display:flex;overflow:auto hidden}.metric-tabs::-webkit-scrollbar{display:none}.metric-tabs button{align-items:center;gap:var(--space-2);padding:var(--space-3) 0;color:var(--text-2);font-size:var(--text-sm);white-space:nowrap;border-bottom:2px solid #0000;flex-shrink:0;font-weight:600;display:flex}.metric-tabs button svg{color:var(--text-3)}.metric-tabs button.active{color:var(--text);border-bottom-color:var(--accent)}.metric-tabs button.active svg{color:var(--accent)}.chart-summary{justify-content:space-between;align-items:baseline;gap:var(--space-2) var(--space-4);padding-top:var(--space-5);color:var(--text-2);font-size:var(--text-sm);flex-wrap:wrap;display:flex}.chart-summary>div{align-items:baseline;gap:var(--space-2);display:flex}.chart-summary b{margin-left:var(--space-1);color:var(--text);font-variant-numeric:tabular-nums;font-weight:600}.chart-current{font-size:var(--text-3xl);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-weight:700;line-height:1}.chart-wrap{height:220px;margin-top:var(--space-4)}.chart-empty{justify-content:center;align-items:center;gap:var(--space-2);height:236px;color:var(--text-3);text-align:center;flex-direction:column;display:flex}.chart-empty p{color:var(--text);font-weight:600}.chart-empty span{max-width:26rem;font-size:var(--text-sm)}.chart-note{align-items:center;gap:var(--space-1) var(--space-4);margin-top:var(--space-4);color:var(--text-2);font-size:var(--text-sm);flex-wrap:wrap;display:flex}.chart-note .text-button{gap:var(--space-1)}.chart-note-error{margin:var(--space-3) 0 0}.recharts-surface:focus:not(:focus-visible){outline:none}.recharts-surface:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:var(--radius-sm)}.recharts-wrapper [tabindex="-1"]:focus{outline:none}.year-switch{align-items:center;gap:var(--space-1);padding:var(--space-1);border-radius:var(--radius-md);background:var(--surface);box-shadow:var(--shadow-1);display:flex}.year-switch strong{text-align:center;min-width:56px;font-size:var(--text-lg);font-variant-numeric:tabular-nums;font-weight:700}.year-switch .icon-button:disabled{opacity:.3}.dashboard-pair{gap:var(--space-5);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.dashboard-pair+.dashboard-pair,.dashboard-pair+.dashboard-panel{margin-top:var(--space-5)}.dashboard-pair>.dashboard-panel{min-width:0}.dashboard-panel .chart-summary{padding-top:var(--space-3)}.dashboard-chart{height:240px}.dashboard-chart-small{height:200px}.dashboard-chart-empty{height:216px}.heatmap-scroll{margin-top:var(--space-5);padding-bottom:var(--space-2);position:relative;overflow-x:auto}.heatmap{gap:3px;min-width:560px;display:grid}.heatmap-month,.heatmap-weekday{color:var(--text-3);font-size:var(--text-xs);white-space:nowrap;line-height:1}.heatmap-month{padding-bottom:var(--space-2)}.heatmap-weekday{padding-right:var(--space-2);align-self:center}.heatmap-cell{aspect-ratio:1;background:var(--heat-0);border-radius:2px;display:block}.heatmap-cell.level-1{background:var(--heat-1)}.heatmap-cell.level-2{background:var(--heat-2)}.heatmap-cell.level-3{background:var(--heat-3)}.heatmap-cell.level-4{background:var(--heat-4)}.heatmap-cell.future{opacity:.4}.heatmap-cell.today{box-shadow:0 0 0 1.5px var(--route)}.heatmap-legend{justify-content:flex-end;gap:var(--space-2) var(--space-4);margin-top:var(--space-3);color:var(--text-3);font-size:var(--text-xs);flex-wrap:wrap;display:flex}.heatmap-legend>span{align-items:center;gap:var(--space-2);display:inline-flex}.heatmap-legend .heatmap-cell{width:11px}.dashboard-records{margin-top:var(--space-8)}.record-grid{gap:var(--space-4);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.record-card{min-width:0;padding:var(--space-5);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-2);flex-direction:column;display:flex}.record-label{color:var(--text-2);font-size:var(--text-sm);font-weight:600}.record-card strong{align-items:baseline;gap:var(--space-2);margin:var(--space-2) 0 var(--space-4);font-size:var(--text-3xl);font-variant-numeric:tabular-nums;letter-spacing:-.02em;font-weight:700;display:flex}.record-card small{color:var(--text-2);font-size:var(--text-base);letter-spacing:0;font-weight:400}.record-context{align-items:center;gap:var(--space-2);padding-top:var(--space-3);border-top:1px solid var(--line);color:var(--text-3);font-size:var(--text-xs);margin-top:auto;display:flex}.record-context>span{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.record-context svg{color:var(--accent);flex-shrink:0;margin-left:auto}.notice{align-items:center;gap:var(--space-3);margin-bottom:var(--space-5);padding:var(--space-3) var(--space-4);border-radius:var(--radius-md);background:var(--success-soft);box-shadow:inset 3px 0 0 var(--accent);color:var(--text);font-size:var(--text-sm);overflow-wrap:anywhere;display:flex}.notice>svg{color:var(--accent);flex-shrink:0}.notice .icon-button{width:28px;height:28px;margin-left:auto}.notice.error{background:var(--danger-soft);box-shadow:inset 3px 0 0 var(--danger)}.notice.error>svg{color:var(--danger)}.loading-main{justify-content:center;align-items:center;gap:var(--space-3);padding:var(--space-9) var(--space-5);color:var(--text-2);display:flex}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.drop-overlay{inset:var(--space-3);z-index:100;justify-content:center;align-items:center;gap:var(--space-4);border:2px dashed var(--accent);border-radius:var(--radius-lg);background:color-mix(in srgb, var(--bg) 94%, transparent);color:var(--accent);text-align:center;flex-direction:column;display:flex;position:fixed}.drop-overlay>*{pointer-events:none}.drop-overlay h2{color:var(--text);font-size:var(--text-3xl);font-weight:700}.drop-overlay p{color:var(--text-2)}.settings-dialog{width:min(480px,100% - 32px);padding:var(--space-6);border-radius:var(--radius-lg);background:var(--surface);color:var(--text);box-shadow:var(--shadow-5);border:0}.settings-dialog::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#10111880}.dialog-top{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-3);display:flex}.dialog-top .icon-button{margin:-6px -8px 0 0}.settings-dialog h2{font-size:var(--text-2xl);font-weight:700}.settings-dialog p{color:var(--text-2);font-size:var(--text-sm);line-height:1.6}.settings-dialog form{gap:var(--space-4);margin-top:var(--space-4);flex-direction:column;display:flex}.dialog-actions{justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-2);display:flex}.token-error{color:var(--danger)!important}.ride-action-dialog #delete-description{overflow-wrap:anywhere}.field{flex-direction:column;gap:6px;display:flex}.field label{font-size:var(--text-sm);font-weight:600}.field input{width:100%;min-height:44px;padding:0 var(--space-3);border:1px solid var(--line-strong);border-radius:var(--radius-md);background:var(--bg);color:var(--text);font-size:var(--text-base);box-shadow:inset 0 1px 2px #24294214}.field input:focus-visible{outline:2px solid var(--accent);outline-offset:0;border-color:var(--accent)}.field small{color:var(--text-3);font-size:var(--text-xs)}.import-dialog{width:min(560px,100% - 32px);max-height:calc(100dvh - 40px);overflow-y:auto}.import-status{align-items:flex-start;gap:var(--space-3);margin:var(--space-5) 0 var(--space-4);display:flex}.import-status>svg{color:var(--accent);flex-shrink:0}.import-status>div{min-width:0;font-size:var(--text-sm)}.import-status span{margin-top:var(--space-1);color:var(--text-2);display:block}.import-filename{overflow-wrap:anywhere}.import-progress{border-radius:var(--radius-full);background:var(--sunken);width:100%;height:8px;accent-color:var(--accent);border:0;display:block;overflow:hidden}.import-progress::-webkit-progress-bar{background:var(--sunken)}.import-progress::-webkit-progress-value{background:var(--accent)}.import-progress::-moz-progress-bar{background:var(--accent)}.import-counts{gap:var(--space-3);margin:var(--space-5) 0;grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.import-counts strong{font-size:var(--text-2xl);font-variant-numeric:tabular-nums;font-weight:700;display:block}.import-counts span{color:var(--text-2);font-size:var(--text-xs);display:block}.import-details{margin:0 0 var(--space-5);max-height:200px;padding:0;list-style:none;overflow-y:auto}.import-details li{padding:var(--space-3) 0;border-top:1px solid var(--line);font-size:var(--text-sm);overflow-wrap:anywhere}.import-details strong,.import-details span{display:block}.import-details span{margin-top:var(--space-1);color:var(--text-2)}.import-dialog .import-warning{margin-bottom:var(--space-5)}.import-dialog .import-hint{font-size:var(--text-xs)}.settings-dialog .primary-button{width:100%}.ride-action-dialog .dialog-actions .primary-button{width:auto}.weather-dialog{width:min(560px,100% - 32px);max-height:calc(100dvh - 40px);overflow-y:auto}.weather-dialog h3{margin:var(--space-5) 0 var(--space-1);font-size:var(--text-sm);font-weight:650}.weather-dialog dl{gap:var(--space-2);margin:var(--space-5) 0 0;padding:var(--space-4);border-radius:var(--radius-md);background:var(--sunken);font-size:var(--text-sm);display:grid}.weather-dialog dl div{justify-content:space-between;gap:2px var(--space-3);flex-wrap:wrap;display:flex}.weather-dialog dt{color:var(--text-2)}.weather-dialog dd{text-align:right;margin:0}.weather-dialog .weather-links{gap:var(--space-2) var(--space-5);margin-top:var(--space-5);flex-wrap:wrap;display:flex}.weather-dialog .weather-links a{align-items:center;gap:var(--space-1);color:var(--accent);font-weight:600;display:inline-flex}.weather-dialog .primary-button{margin-top:var(--space-5);white-space:normal}.switch{align-items:center;gap:var(--space-2);color:var(--text-2);font-size:var(--text-sm);cursor:pointer;-webkit-user-select:none;user-select:none;flex-shrink:0;display:inline-flex}.switch input{opacity:0;width:1px;height:1px;position:absolute}.switch-track{border-radius:var(--radius-full);background:var(--line-strong);flex-shrink:0;width:36px;height:20px;transition:background .15s;position:relative;box-shadow:inset 0 1px 2px #12142126}.switch-track:after{content:"";background:var(--surface);border-radius:50%;width:16px;height:16px;transition:transform .15s;position:absolute;top:2px;left:2px;box-shadow:0 1px 2px #1214214d}.switch input:checked+.switch-track{background:var(--accent)}.switch input:checked+.switch-track:after{transform:translate(16px)}.switch input:focus-visible+.switch-track{outline:2px solid var(--accent);outline-offset:2px}.auth-page{isolation:isolate;justify-content:center;align-items:center;gap:var(--space-6);min-height:100dvh;padding:var(--space-6) var(--space-4);flex-direction:column;display:flex;position:relative}html:has(.auth-page){overscroll-behavior:none}.auth-page:before{content:"";z-index:-1;background:var(--contour);position:absolute;inset:0;-webkit-mask:url(/assets/contours-BccUY3D7.svg) 50%/cover no-repeat;mask:url(/assets/contours-BccUY3D7.svg) 50%/cover no-repeat}.auth-intro{align-items:center;gap:var(--space-3);text-align:center;flex-direction:column;display:flex}.auth-intro p{max-width:22rem;color:var(--text-2);font-size:var(--text-sm)}.auth-card{gap:var(--space-4);width:min(400px,100%);padding:var(--space-6);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-4);flex-direction:column;display:flex}.auth-card h1{font-size:var(--text-3xl);font-weight:700}.auth-card>p{margin-top:calc(-1 * var(--space-2));color:var(--text-2);font-size:var(--text-sm)}.auth-card .notice{margin:0}.auth-card .primary-button{margin-top:var(--space-2);min-height:44px}.auth-switch{color:var(--text-2);font-size:var(--text-sm);text-align:center}@media (hover:hover){:is(.primary-button,.danger-button,.outline-button,.icon-button,.map-actions button,.ride-menu-list>a,.ride-menu-list>button):hover:not(:disabled){background-image:linear-gradient(var(--hover-overlay), var(--hover-overlay))}:is(.primary-button,.danger-button):hover:not(:disabled){background-image:linear-gradient(#ffffff14,#ffffff14)}.icon-button:hover:not(:disabled),:is(.main-nav a,.metric-tabs button):hover{color:var(--text)}:is(.text-button,.link-button,.weather-dialog .weather-links a):hover:not(:disabled){text-underline-offset:3px;text-decoration:underline}.ride-row:hover{background:var(--hover-overlay)}.ride-row:hover .ride-row-arrow{color:var(--accent)}a.record-card:hover{box-shadow:var(--shadow-3)}.switch:hover{color:var(--text)}}:is(.primary-button,.danger-button,.outline-button,.icon-button,.map-actions button,.ride-row,.ride-menu-list>a,.ride-menu-list>button):active:not(:disabled){background-image:linear-gradient(var(--active-overlay), var(--active-overlay))}:is(.primary-button,.danger-button):active:not(:disabled){box-shadow:inset 0 1px 2px #00000040}a.record-card:active{box-shadow:var(--shadow-1)}.ride-row:focus-visible,a.record-card:focus-visible{outline-offset:-2px}@media (width<=1100px){.period-grid,.record-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.ride-actions .outline-button span{display:none}.ride-actions .outline-button{width:40px;padding:0}}@media (width<=900px){.dashboard-pair{grid-template-columns:minmax(0,1fr)}.ride-row-values{grid-template-columns:6rem 4.5rem 4.5rem}.ride-row-values>:nth-child(3){display:none}}@media (width<=760px){.topbar{gap:var(--space-4);padding:0 var(--space-4)}.brand-name{font-size:var(--text-lg)}.main-nav{gap:var(--space-4)}.main-nav span{display:none}.main-nav a{padding:0 var(--space-1)}.main-content{padding:var(--space-6) var(--space-4) var(--space-5)}.main-content:before{height:240px;-webkit-mask-size:560px,auto;mask-size:560px,auto}.page-heading{margin-bottom:var(--space-6);flex-wrap:wrap;align-items:flex-start}.page-heading h1{font-size:var(--text-4xl)}.page-heading p{font-size:var(--text-base);margin-top:var(--space-2)}.ride-detail-heading{align-items:flex-start}.ride-detail-heading h1{font-size:var(--text-3xl)}.ride-actions{display:none}.ride-menu{display:block}.map-panel{height:300px}.ride-stats{grid-template-columns:repeat(2,minmax(0,1fr))}.ride-stats>div:nth-child(3){border-left:0}.ride-stats>div:nth-child(n+3){border-top:1px solid var(--line)}.ride-stats>div{padding:var(--space-4)}.ride-stats strong{font-size:var(--text-2xl)}.chart-panel{padding:var(--space-4)}.chart-wrap{height:190px}.chart-current{font-size:var(--text-2xl)}.page-section+.page-section{margin-top:var(--space-7)}.footer>span:last-child{display:none}.settings-dialog{padding:var(--space-5)}.settings-dialog h2{font-size:var(--text-xl)}}@media (width<=640px){.period-grid,.record-grid{grid-template-columns:minmax(0,1fr)}.period-card{padding:var(--space-4) var(--space-5)}.period-hero{margin:var(--space-3) 0 var(--space-4)}.period-hero strong{font-size:var(--text-3xl)}.ride-row{row-gap:var(--space-1);padding:var(--space-3) var(--space-4) var(--space-3) var(--space-3);grid-template-columns:40px minmax(0,1fr) 16px;grid-template-areas:"date title arrow""date values arrow"}.ride-row-date{grid-area:date;align-self:start;padding-top:2px}.ride-row-title{grid-area:title}.ride-row-title span{display:none}.ride-row-values{gap:0 var(--space-3);text-align:left;font-size:var(--text-xs);flex-wrap:wrap;grid-area:values;display:flex}.ride-row-values>:nth-child(3){display:inline}.ride-row-distance strong{font-size:var(--text-xs)}.ride-row-arrow{grid-area:arrow}.empty-state{padding:var(--space-7) var(--space-5)}}@media (width<=374px){.topbar{gap:var(--space-3);padding:0 var(--space-3)}.brand-name{display:none}.page-heading h1{font-size:var(--text-3xl)}}@media (width>=1600px){.map-panel{height:440px}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
