@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-vietnamese.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Bricolage Grotesque;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-vietnamese.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Bricolage Grotesque;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:800;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-vietnamese.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:800;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Bricolage Grotesque;font-style:normal;font-weight:800;font-stretch:100%;font-display:swap;src:url(/fonts/bricolage-grotesque-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito Sans;font-style:italic;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-cyrillic-ext-italic.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito Sans;font-style:italic;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-cyrillic-italic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Nunito Sans;font-style:italic;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-vietnamese-italic.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito Sans;font-style:italic;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-latin-ext-italic.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Nunito Sans;font-style:italic;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-latin-italic.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito Sans;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-cyrillic-ext.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito Sans;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Nunito Sans;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-vietnamese.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito Sans;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Nunito Sans;font-style:normal;font-weight:500;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Nunito Sans;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-cyrillic-ext.woff2) format("woff2");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Nunito Sans;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-cyrillic.woff2) format("woff2");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Nunito Sans;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-vietnamese.woff2) format("woff2");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Nunito Sans;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,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:Nunito Sans;font-style:normal;font-weight:700;font-stretch:100%;font-display:swap;src:url(/fonts/nunito-sans-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--ink: #2b2530;--ink-soft: #6a5f6b;--ink-faint: #a2969f;--plate: #fbf6ec;--plate-edge: #e6dcc9;--plate-shadow: 0 10px 28px -12px rgba(70, 50, 40, .45), 0 2px 6px -2px rgba(70, 50, 40, .25);--teal: #1f9c94;--teal-ink: #0f6b66;--coral: #ee6b5c;--coral-ink: #b6412f;--gold: #f4c95d;--focus: 0 0 0 3px rgba(31, 156, 148, .45);--display: "Bricolage Grotesque", "Avenir Next", "Segoe UI", sans-serif;--body: "Nunito Sans", "Avenir Next", "Segoe UI", sans-serif;--ease-out: cubic-bezier(.16, 1, .3, 1)}*{box-sizing:border-box}html,body{height:100%;margin:0}body{font-family:var(--body);color:var(--ink);background:#c9dff0;overflow:hidden;-webkit-font-smoothing:antialiased}::selection{background:#1f9c944d}#app{position:fixed;top:0;right:0;bottom:0;left:0}#scene{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;cursor:grab;touch-action:none}#scene.is-dragging{cursor:grabbing}.hint{display:flex;flex-direction:column;gap:3px}.hint__touch{display:none}@media (pointer: coarse){.hint__mouse{display:none}.hint__touch{display:block}.tool kbd,.btn kbd,.menu-item kbd{display:none}}.hint__gpu{font-weight:500;opacity:.8;display:flex;gap:10px}.hint__fps{font-variant-numeric:tabular-nums;font-weight:700;color:var(--teal-ink)}.hint__fps.is-low{color:var(--coral-ink)}.plate{position:absolute;background:var(--plate);border-radius:14px;box-shadow:var(--plate-shadow),inset 0 0 0 1px #fff9;padding:14px 18px}.plate:after{content:"";position:absolute;top:8px;left:50%;width:6px;height:6px;margin-left:-3px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#ffe9a8,#b8862c);box-shadow:0 1px 1px #00000040}.plate--title{top:calc(22px + env(safe-area-inset-top));left:calc(22px + env(safe-area-inset-left));min-width:230px}.plate--title h1{font-family:var(--display);font-size:26px;font-weight:800;letter-spacing:-.02em;margin:6px 0 2px;line-height:1}.plate--title p{margin:0;color:var(--ink-soft);font-size:13px;font-weight:500}.plate--hud{top:calc(22px + env(safe-area-inset-top));right:calc(22px + env(safe-area-inset-right));width:316px;padding-top:18px}.hud-speed{display:flex;align-items:baseline;gap:8px;font-family:var(--display)}.hud-speed__value{font-size:56px;font-weight:800;line-height:.95;letter-spacing:-.03em;font-variant-numeric:tabular-nums;min-width:96px}.hud-speed__unit{font-size:15px;font-weight:700;color:var(--ink-soft)}.hud-grid,.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px 10px;margin:14px 0 0}.summary-grid{grid-template-columns:repeat(3,1fr)}.hud-grid>div,.summary-grid>div{min-width:0}dt{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}dd{margin:1px 0 0;font-family:var(--display);font-size:19px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.01em;white-space:nowrap}dd small{font-size:11px;font-weight:700;color:var(--ink-soft);margin-left:2px}dd.is-air{color:var(--teal-ink)}dd.is-hot{color:var(--coral-ink)}.hud-profile{display:block;width:100%;height:72px;margin-top:14px;border-radius:8px;background:#f1eadb}.hud-state{margin:10px 0 0;font-size:13px;font-weight:700;color:var(--ink-soft)}.hud-state.is-good{color:var(--teal-ink)}.hud-state.is-bad{color:var(--coral-ink)}.plate--commission{top:calc(22px + env(safe-area-inset-top));left:50%;width:min(540px,calc(100% - 760px));min-width:420px;transform:translate(-50%);padding:18px 16px 12px}.plate--commission[hidden]{display:none}.commission__form{display:flex;gap:8px}.commission__form input{flex:1;min-width:0;padding:10px 12px;border:0;border-radius:10px;background:#fff;box-shadow:inset 0 0 0 1.5px var(--plate-edge);font:600 14px var(--body);color:var(--ink)}.commission__form input::placeholder{color:var(--ink-faint);font-weight:500}.commission__form input:focus{outline:none;box-shadow:inset 0 0 0 1.5px var(--teal),var(--focus)}.commission__chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.commission__chip{padding:4px 10px;border-radius:999px;background:#efe6d4;color:var(--ink-soft);font:700 12px var(--body);transition:background .2s,color .2s}.commission__chip:hover{background:var(--plate-edge);color:var(--ink)}.is-busy .commission__chips{display:none}.commission__thought{margin:10px 0 0;padding:8px 10px;border-radius:8px;background:#f1e9d8;color:var(--ink-soft);font:500 12.5px/1.45 var(--body);font-style:italic;height:4.35em;overflow:hidden;box-sizing:content-box}.commission__thought[hidden]{display:none}.commission__sign{margin-top:12px;animation:sign-in .5s var(--ease-out)}.commission__sign[hidden]{display:none}.commission__sign h2{margin:0;font:800 24px/1.05 var(--display);letter-spacing:-.02em}.commission__sign p{margin:4px 0 0;color:var(--ink-soft);font-size:13.5px;line-height:1.4}.commission__status{margin:8px 0 0;min-height:17px;color:var(--ink-faint);font-size:12px;font-weight:600}.commission__status:empty{display:none}.is-busy .commission__status{color:var(--teal-ink)}@keyframes sign-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media (max-width: 1180px){.plate--commission{display:none}}@media (prefers-reduced-motion: reduce){.commission__sign{animation:none}}.summary-stars{color:var(--gold);letter-spacing:2px;font-size:18px;margin:0 0 4px;text-shadow:0 1px 0 rgba(70,50,40,.25)}.summary-stars:empty{display:none}.plate--summary{left:50%;top:50%;width:360px;transform:translate(-50%,-50%);padding:22px 24px 20px;animation:plate-in .5s var(--ease-out)}.plate--summary[hidden]{display:none}.plate--summary h2{font-family:var(--display);font-size:28px;font-weight:800;letter-spacing:-.02em;margin:4px 0 6px}.plate--summary p{margin:0;color:var(--ink-soft);font-size:14px;line-height:1.45}.summary-actions{display:flex;gap:10px;margin-top:18px}@keyframes plate-in{0%{opacity:0;transform:translate(-50%,-50%) scale(.94) translateY(12px)}to{opacity:1;transform:translate(-50%,-50%) scale(1) translateY(0)}}.dock{position:absolute;left:50%;bottom:calc(22px + env(safe-area-inset-bottom));transform:translate(-50%);display:flex;flex-direction:column;align-items:center;gap:10px}.dock-status{margin:0;padding:6px 14px;border-radius:999px;background:#2b2530b8;color:#fbf6ec;font-size:13px;font-weight:700;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:background .3s}.dock-status.is-good{background:var(--teal)}.dock-status.is-bad{background:var(--coral)}.dock-row{display:flex;align-items:center;gap:12px;padding:10px;background:var(--plate);border-radius:18px;box-shadow:var(--plate-shadow),inset 0 0 0 1px #fff9}.dock.is-riding .group{opacity:.35;pointer-events:none}.dock-pieces,.dock-actions{display:contents}.dock-pieces .group{order:1}.dock-actions .group[aria-label=Lift]{order:2}.dock-actions .group[aria-label=Edit]{order:3}#btn-follow{order:4}#btn-continuous{order:5}#btn-ride{order:6}.group{display:flex;align-items:center;gap:4px;padding:4px;background:#f1eadb;border-radius:12px;transition:opacity .3s}button{font:inherit;color:inherit;border:0;background:none;cursor:pointer}button:focus-visible{outline:none;box-shadow:var(--focus)}.tool{position:relative;width:44px;height:44px;border-radius:10px;display:grid;place-items:center;color:var(--ink);transition:background .15s,color .15s,transform .15s var(--ease-out)}.tool svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.tool kbd{position:absolute;right:4px;bottom:3px;font-family:var(--body);font-size:9px;font-weight:700;color:var(--ink-faint)}.tool:hover{background:#fff;color:var(--teal-ink)}.tool:active{transform:scale(.94)}.tool:disabled{opacity:.35;cursor:not-allowed}.tool:disabled:hover{background:none;color:var(--ink)}.tool.is-blocked{opacity:.4}.tool.is-blocked:hover{background:none;color:var(--ink)}.tool--toggle[aria-pressed=true]{background:var(--ink);color:#fbf6ec}.tool--toggle[aria-pressed=true] kbd{color:#fbf6ec99}.tool--danger:hover{color:var(--coral-ink)}.tool--danger.is-armed{background:var(--coral);color:#fff}.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:12px;font-weight:800;font-size:14px;background:#e6dcc9;color:var(--ink);transition:transform .15s var(--ease-out),background .2s,box-shadow .2s}.btn svg{width:18px;height:18px;fill:currentColor;stroke:none}.btn kbd{font-family:var(--body);font-size:10px;font-weight:700;opacity:.7;padding:2px 5px;border-radius:4px;background:#ffffff40}.btn:hover{transform:translateY(-1px)}.btn:active{transform:translateY(0) scale(.97)}.btn--primary{background:var(--teal);color:#fff;box-shadow:0 6px 16px -6px #1f9c94b3}.btn--primary:hover{background:#22aca3}.btn--primary:disabled{background:#b9c9c6;box-shadow:none;cursor:not-allowed;transform:none}.btn--ride{height:52px;padding:0 18px 0 16px;border-radius:14px;font-size:15px}.btn--ride.is-stop{background:var(--coral);box-shadow:0 6px 16px -6px #ee6b5cb3}.btn--ride.is-done{background:var(--ink);box-shadow:0 6px 16px -6px #2b253099}.btn--ride.is-done:hover{background:#3b3340}.btn--ride.is-stop:hover{background:#f27a6b}.btn--ride.is-ready{animation:ready-pop .6s var(--ease-out)}@keyframes ready-pop{0%{transform:scale(.9)}60%{transform:scale(1.06)}to{transform:scale(1)}}.plate--library{left:50%;bottom:calc(var(--dock-top, 94px) + 10px + var(--strip-h, 0px));transform:translate(-50%);width:min(420px,calc(100vw - 32px));max-height:min(56vh,520px);padding:16px 18px 14px;display:flex;flex-direction:column;gap:10px;animation:library-in .22s var(--ease-out) both}.plate--library[hidden]{display:none}#library:not([hidden])~.dock .dock-status{display:none}@keyframes tray-in{0%{opacity:0;transform:translateY(8px) scale(.98)}to{opacity:1;transform:none}}@keyframes panel-in-rail{0%{opacity:0;transform:translateY(10px) scale(.97)}to{opacity:1;transform:none}}@keyframes library-in{0%{opacity:0;transform:translate(-50%) translateY(10px) scale(.97)}to{opacity:1;transform:translate(-50%) translateY(0) scale(1)}}.library__head{display:flex;align-items:baseline;justify-content:space-between}.library__head h2{margin:0;font-family:var(--display);font-size:19px;font-weight:800;letter-spacing:-.01em}.library__close{font-size:22px;line-height:1;color:var(--ink-faint);padding:0 4px;border-radius:8px}.library__close:hover{color:var(--ink)}.library__open{margin:0;font-size:12.5px;font-weight:700;color:var(--ink-soft)}.library__open .is-dirty{color:var(--coral-ink)}.library__save{display:flex;gap:8px}.library__save .btn{flex:1;justify-content:center;padding:9px 12px}.library__name{display:flex;gap:8px}.library__name[hidden]{display:none}.library__name input,.lib-item__rename input{flex:1;min-width:0;font:inherit;font-weight:700;font-size:14px;color:var(--ink);padding:8px 12px;border:0;border-radius:10px;background:#f1eadb;box-shadow:inset 0 0 0 1px var(--plate-edge)}.library__name input:focus-visible,.lib-item__rename input:focus-visible{outline:none;box-shadow:var(--focus)}.library__name .btn{padding:8px 12px}.library__ask{background:#f7ede0;border-radius:12px;padding:10px 12px;box-shadow:inset 0 0 0 1px var(--plate-edge)}.library__ask[hidden]{display:none}.library__ask p{margin:0 0 8px;font-size:13px;font-weight:700;color:var(--ink-soft)}.library__ask-row{display:flex;gap:6px}.library__ask-row .btn{flex:1;justify-content:center;padding:7px 8px;font-size:12.5px}.library__empty{margin:4px 0;font-size:13px;color:var(--ink-soft)}.library__empty[hidden]{display:none}.library__list{list-style:none;margin:0;padding:0;overflow-y:auto;display:flex;flex-direction:column;gap:2px}.lib-item{display:flex;align-items:center;gap:2px;border-radius:10px}.lib-item:hover{background:#f1eadb}.lib-item.is-open{background:#1f9c941f}.lib-item__load{flex:1;min-width:0;text-align:left;padding:8px 10px;border-radius:10px;display:flex;flex-direction:column;gap:1px}.lib-item__name{font-weight:700;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.lib-item__meta{font-size:11.5px;color:var(--ink-soft);font-weight:500}.lib-item__act{width:32px;height:32px;border-radius:8px;display:grid;place-items:center;color:var(--ink-soft);flex:none}.lib-item__act svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.lib-item__act:hover{background:#fff;color:var(--teal-ink)}.lib-item__act--danger:hover{color:var(--coral-ink)}.lib-item__act--danger.is-armed{background:var(--coral);color:#fff}.lib-item__rename{flex:1;display:flex;gap:6px;padding:4px}.lib-item__rename .btn{padding:6px 10px;font-size:12.5px}.library__foot{display:flex;gap:8px;border-top:1px solid var(--plate-edge);padding-top:10px}.btn--quiet{flex:1;justify-content:center;background:none;color:var(--ink-soft);font-size:13px;padding:7px 10px}.btn--quiet:hover{background:#f1eadb;color:var(--ink)}.piece__label{margin:12px 2px 6px;font-family:var(--body);font-size:10px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.piece__label[hidden],.piece__swaps[hidden]{display:none}.piece__swaps+.btn{margin-top:12px;margin-bottom:8px}.plate--piece{left:50%;bottom:calc(var(--dock-top, 94px) + 10px + var(--strip-h, 0px));transform:translate(-50%);width:min(360px,calc(100vw - 24px));padding:14px 16px;display:flex;flex-direction:column;gap:10px;animation:library-in .2s var(--ease-out) both}.plate--piece[hidden]{display:none}.piece__head{display:flex;align-items:baseline;justify-content:space-between}.piece__head h2{margin:0;font-family:var(--display);font-size:18px;font-weight:800}.piece__hint{margin:0;font-size:12.5px;color:var(--ink-soft)}.piece__swaps{display:flex;flex-wrap:wrap;gap:6px}.piece__swaps .tool:disabled{opacity:.25}.btn--danger-solid{background:var(--coral);color:#fff;justify-content:center}.btn--danger-solid:hover{background:#f27a6b}#piece-sheet:not([hidden])~.dock .dock-status{display:none}.plate--goals{left:50%;bottom:calc(var(--dock-top, 94px) + 10px + var(--strip-h, 0px));transform:translate(-50%);width:min(420px,calc(100vw - 24px));max-height:min(52vh,440px);padding:14px 16px;display:flex;flex-direction:column;gap:10px;animation:library-in .2s var(--ease-out) both}.plate--goals[hidden]{display:none}#goals:not([hidden])~.dock .dock-status{display:none}.goal-item{border-radius:10px}.goal-item:hover{background:#f1eadb}.goal-item.is-pinned{background:#1f9c941f}.goal-item__btn{display:flex;flex-direction:column;gap:2px;padding:8px 10px;width:100%;text-align:left}.goal-item__name{font-weight:700;font-size:14px}.goal-item__brief{font-size:11.5px;color:var(--ink-soft)}.goal-item__state{font-size:11.5px;font-weight:700;color:var(--teal-ink)}.ladder{margin:0 0 14px}.ladder__depth{margin:0 0 8px;font-size:12px;font-weight:700;color:#2b25308c}.ladder__rung{display:flex;flex-direction:column;gap:4px;width:100%;padding:12px 14px;border:2px solid var(--ink);border-radius:12px;background:var(--plate);font:inherit;text-align:left;cursor:pointer;transition:transform .15s var(--ease-out),box-shadow .15s var(--ease-out)}.ladder__rung:hover{transform:translateY(-1px);box-shadow:0 4px 0 var(--ink)}.ladder__rung.is-pinned{background:#1f9c941f}.ladder__name{font-family:var(--display);font-size:17px;font-weight:800}.ladder__brief{font-size:12.5px;color:#2b2530b8}.ladder__classics{margin:0 0 8px;font-family:var(--display);font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:#2b25308c}.above-dock{position:absolute;left:50%;bottom:calc(var(--dock-top, 94px) + 10px);transform:translate(-50%);pointer-events:none}.goals-strip{margin:0;display:flex;gap:14px;padding:8px 14px;border-radius:999px;background:#2b2530b8;color:#fbf6ec;font-size:12.5px;font-weight:700;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}.goals-strip[hidden]{display:none}.goals-strip .is-missed{color:var(--coral)}.hint{position:absolute;left:26px;top:calc(78px + env(safe-area-inset-top));margin:0;font-size:12px;font-weight:700;color:#2b25308c}.hint kbd{font-family:var(--body);padding:1px 5px;border-radius:4px;background:#ffffff80}.toast{position:absolute;left:50%;bottom:calc(var(--stack-top, 137px) + 14px);transform:translate(-50%) translateY(8px);width:max-content;max-width:min(88vw,420px);padding:8px 14px;border-radius:999px;background:var(--ink);color:#fbf6ec;font-size:13px;font-weight:700;opacity:0;pointer-events:none;transition:opacity .25s,transform .4s var(--ease-out)}.toast.is-on{opacity:1;transform:translate(-50%) translateY(0)}@media (max-width: 900px){.plate--title{min-width:0;padding:10px 14px}.plate--title h1{font-size:20px}.plate--title p{display:none}.plate--hud{width:250px;padding:14px}.hud-speed__value{font-size:40px;min-width:70px}.hud-profile{height:56px}.hint{display:none}.dock{bottom:calc(12px + env(safe-area-inset-bottom));width:calc(100% - 24px)}.dock-row{flex-wrap:wrap;justify-content:center;max-width:100%;gap:8px}.tool{width:40px;height:40px}.plate--summary{width:calc(100% - 32px)}}@media (max-width: 600px){.plate--title{top:calc(12px + env(safe-area-inset-top));left:calc(12px + env(safe-area-inset-left));padding:8px 12px}.plate--title h1{font-size:17px;margin-top:4px}.plate--hud{top:calc(64px + env(safe-area-inset-top));left:calc(12px + env(safe-area-inset-left));right:calc(12px + env(safe-area-inset-right));width:auto;padding:12px 14px}.hud-speed__value{font-size:34px;min-width:60px}.hud-grid{margin-top:8px;gap:6px}.hud-grid dt{font-size:9px;letter-spacing:.03em}.hud-grid dd{font-size:16px}.tool{width:36px;height:36px}.group{gap:2px}.hud-profile{height:44px;margin-top:8px}.hud-state{margin-top:6px;font-size:12px}.dock-status{font-size:12px}.btn--ride{height:44px;font-size:14px}}@media (max-width: 600px){.dock-row{flex-wrap:nowrap;flex-direction:column;align-items:stretch;gap:8px;padding:8px}.dock-pieces{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;padding-bottom:2px}.dock-pieces::-webkit-scrollbar{display:none}.dock-pieces .group{flex:none}.dock-pieces .group[aria-label=Inversions]{order:2}.dock-pieces .group[aria-label=Elevation]{order:3}.dock-pieces{mask-image:linear-gradient(to right,#000 calc(100% - 22px),transparent);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 22px),transparent)}.dock-actions{display:flex;align-items:center;gap:8px}.dock-actions .btn--ride{flex:1;justify-content:center;height:44px}.dock-row{position:relative}.plate--hud{padding:8px 10px}body:not(.is-riding) .plate--hud .hud-speed,body:not(.is-riding) .plate--hud .hud-grid,body:not(.is-riding) .plate--hud .hud-state{display:none}body:not(.is-riding) .hud-profile{margin-top:0;height:38px}.dock.is-riding .dock-pieces,.dock.is-riding .dock-actions .group,.dock.is-riding .dock-status{display:none}.plate--library{max-height:min(52vh,420px);width:calc(100vw - 24px)}}@media (max-height: 520px) and (orientation: landscape){.dock{left:auto;right:calc(12px + env(safe-area-inset-right));top:calc(12px + env(safe-area-inset-top));bottom:calc(12px + env(safe-area-inset-bottom));transform:none;width:108px;justify-content:flex-end}.dock-status{position:fixed;left:calc(12px + env(safe-area-inset-left));bottom:calc(12px + env(safe-area-inset-bottom));white-space:nowrap;font-size:12px}.dock-row{flex-direction:column;align-items:stretch;flex:1;min-height:0;gap:8px;padding:8px;position:relative}.dock-pieces{display:flex;flex-direction:column;flex:1;min-height:0;gap:8px;overflow-y:auto;overflow-x:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;mask-image:linear-gradient(to bottom,#000 calc(100% - 20px),transparent);-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 20px),transparent)}.dock-pieces::-webkit-scrollbar{display:none}.dock-pieces .group{flex:none;flex-wrap:wrap;justify-content:center}.dock-pieces .group[aria-label=Inversions]{order:2}.dock-pieces .group[aria-label=Elevation]{order:3}.dock-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.dock-actions .btn--ride{flex:1 0 100%;height:44px;justify-content:center;font-size:14px}.tool{width:40px;height:40px}.dock.is-riding .dock-pieces,.dock.is-riding .dock-actions .group,.dock.is-riding .dock-status{display:none}.plate--title{padding:6px 12px;min-width:0}.plate--title h1{font-size:16px;margin-top:4px}.plate--title p{display:none}.plate--hud{top:calc(12px + env(safe-area-inset-top));right:calc(var(--rail-w, 84px) + 12px);width:210px;padding:10px 12px}.hud-speed__value{font-size:30px;min-width:52px}.hud-grid{margin-top:6px;gap:4px 8px}.hud-grid dt{font-size:9px}.hud-grid dd{font-size:14px}.hud-profile{height:36px;margin-top:6px}.hud-state{display:none}body:not(.is-riding) .plate--hud .hud-speed,body:not(.is-riding) .plate--hud .hud-grid{display:none}body:not(.is-riding) .hud-profile{margin-top:0}.plate--library,.plate--piece,.plate--goals{left:calc(12px + env(safe-area-inset-left));right:calc(var(--rail-w, 84px) + 12px);bottom:calc(var(--dock-top, 0px) + 12px + env(safe-area-inset-bottom) + var(--strip-h, 0px));width:auto;max-width:none;transform:none;animation-name:panel-in-rail;max-height:62%}.above-dock{left:calc(50% - var(--rail-w, 84px) / 2);bottom:calc(var(--dock-top, 0px) + 12px + env(safe-area-inset-bottom))}.toast{left:calc(50% - var(--rail-w, 84px) / 2);bottom:max(calc(var(--stack-top, 0px) + 14px),calc(20px + env(safe-area-inset-bottom)))}.plate--summary{width:min(360px,calc(100% - var(--rail-w, 84px) - 24px));max-height:calc(100% - 24px);overflow-y:auto;padding:16px 18px 14px}}#splash{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:calc(9vh + env(safe-area-inset-top)) calc(24px + env(safe-area-inset-right)) calc(24px + env(safe-area-inset-bottom)) calc(24px + env(safe-area-inset-left));background:linear-gradient(180deg,#f7e3cf,#c9dff0);transition:opacity .42s var(--ease-out)}#splash:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background:url(/splash-portrait.webp) center / cover no-repeat;animation:splash-drift 7s linear both}@media (orientation: landscape){#splash{padding-top:calc(7vh + env(safe-area-inset-top))}#splash:before{background-image:url(/splash-wide.webp)}}@keyframes splash-drift{0%{transform:scale(1)}to{transform:scale(1.07)}}.splash__words{text-align:center;max-width:min(600px,90vw);animation:splash-settle .7s .12s var(--ease-out) both}.splash__title{font-family:var(--display);color:var(--teal-ink);font-size:clamp(30px,8.5vw,52px);font-weight:800;letter-spacing:-.03em;line-height:1;margin:0 0 10px}.splash__sub{margin:0;color:#3d6260;font-size:clamp(14px,3.7vw,17px);font-weight:500;line-height:1.4;max-width:34ch;margin-inline:auto;text-wrap:balance}.splash__bar{width:min(220px,52vw);height:3px;margin:26px auto 0;border-radius:2px;background:#0f6b6626;overflow:hidden}.splash__bar>i{display:block;height:100%;border-radius:inherit;background:var(--teal-ink);transform-origin:left center;animation:splash-load 3.4s var(--ease-out) both}@keyframes splash-load{0%{transform:scaleX(0)}to{transform:scaleX(.96)}}@keyframes splash-settle{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}#splash.is-out{opacity:0;pointer-events:none;transform:scale(1.04);transition:opacity .42s var(--ease-out),transform .62s var(--ease-out)}@media (prefers-reduced-motion: reduce){.splash__words,#splash:before{animation:none}.splash__bar>i{animation-duration:3.4s}#splash.is-out{transform:none;transition:opacity .42s linear}}.btn-menu{position:absolute;z-index:3;top:calc(22px + env(safe-area-inset-top));left:calc(22px + env(safe-area-inset-left));background:var(--plate);box-shadow:var(--plate-shadow),inset 0 0 0 1px #fff9}.btn-menu[aria-expanded=true]{background:var(--ink);color:#fbf6ec}.plate--menu{z-index:3;top:calc(76px + env(safe-area-inset-top));left:calc(22px + env(safe-area-inset-left));width:min(280px,calc(100vw - 44px));padding:10px;animation:library-in-left .18s var(--ease-out) both}.plate--menu[hidden]{display:none}.menu-scrim{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;background:#2b25303d;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:scrim-in .22s var(--ease-out) both}.menu-scrim[hidden]{display:none}@keyframes scrim-in{0%{opacity:0}to{opacity:1}}@keyframes library-in-left{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}.menu-head{position:relative;padding:2px 4px 12px;margin-bottom:4px;border-bottom:1px solid rgba(43,37,48,.08)}.menu-head h2{margin:0;font-family:var(--display);font-size:21px;font-weight:800;letter-spacing:-.025em;color:var(--ink)}.menu-head p{display:none}.menu-head .library__close{position:absolute;top:-2px;right:0}.menu-list{list-style:none;margin:0;padding:0}.menu-build{margin:18px 0 0;font-size:11px;letter-spacing:.02em;color:color-mix(in srgb,var(--ink) 45%,transparent);-webkit-user-select:text;user-select:text}.menu-heading{margin:12px 6px 6px;font-family:var(--body);font-size:10px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-soft)}.menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border-radius:10px;font-size:14px;font-weight:700;color:var(--ink);text-align:left;transition:background .15s,color .15s}.menu-item svg{width:19px;height:19px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.menu-item span{flex:1}.menu-item kbd{font-family:var(--body);font-size:10px;font-weight:700;color:var(--ink-faint);padding:1px 5px;border-radius:4px;background:#ffffff8c}.menu-list li+li .menu-item{box-shadow:0 -1px #2b25300f}.menu-item:hover{background:#fff;color:var(--teal-ink)}.menu-item:active{transform:scale(.99)}.menu-item:disabled{opacity:.4;cursor:not-allowed}.menu-item:disabled:hover{background:none;color:var(--ink)}.menu-item[aria-pressed=true]{background:var(--ink);color:#fbf6ec}.menu-item[aria-pressed=true] kbd{color:#fff2e299;background:#ffffff1f}.menu-item--danger{color:var(--coral-ink)}.plate--title{position:absolute}.plate--title[hidden]{display:none}.plate--title .library__close{position:absolute;top:6px;right:10px}.tip{position:fixed;z-index:200;transform:translate(-50%,-100%);padding:7px 11px;border-radius:9px;background:#2b2530f0;color:#fbf6ec;font-size:13px;font-weight:700;white-space:nowrap;pointer-events:none;box-shadow:0 6px 18px #2b253040;animation:tip-in .12s var(--ease-out) both}.tip[hidden]{display:none}@keyframes tip-in{0%{opacity:0;transform:translate(-50%,-100%) translateY(4px)}to{opacity:1;transform:translate(-50%,-100%)}}button{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}@media (pointer: coarse){body{-webkit-user-select:none;user-select:none}input,textarea{-webkit-user-select:text;user-select:text}}@media (max-width: 600px),(max-height: 520px) and (orientation: landscape){.plate--menu{top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));bottom:max(12px,env(safe-area-inset-bottom));left:max(12px,env(safe-area-inset-left));width:auto;max-width:none;overflow-y:auto;padding:18px 14px 14px;animation:menu-in-full .22s var(--ease-out) both}@keyframes menu-in-full{0%{opacity:0}to{opacity:1}}.menu-scrim{background:#2b253057;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px)}.menu-head{padding:6px 4px 14px;margin-bottom:6px}.menu-head h2{font-size:27px}.menu-head p{display:block;margin:3px 0 0;font-size:13px;font-weight:500;color:var(--ink-soft)}.menu-head .library__close{top:2px}.menu-item{padding:14px 12px;font-size:16px;gap:14px}.menu-item svg{width:22px;height:22px}.menu-heading{margin:18px 8px 6px;font-size:11px}}::selection{background:#1f9c9438;color:var(--ink)}.plate--dialog{z-index:4;top:50%;left:50%;transform:translate(-50%,-50%);width:min(420px,calc(100vw - 32px));padding:20px 20px 18px;animation:dialog-in .22s var(--ease-out) both}.plate--dialog[hidden]{display:none}@keyframes dialog-in{0%{opacity:0}to{opacity:1}}.plate--dialog h2{margin:0;font-family:var(--display);font-size:22px;font-weight:800;letter-spacing:-.025em;color:var(--ink)}.plate--dialog>p{margin:4px 0 16px;font-size:13px;font-weight:500;color:var(--ink-soft)}.plate--dialog .library__close{position:absolute;top:14px;right:16px}.dialog-choices{display:grid;gap:10px}.choice{display:grid;grid-template-columns:26px 1fr;grid-template-rows:auto auto;gap:2px 12px;padding:14px;border-radius:12px;background:#f1eadb;text-align:left;color:var(--ink);transition:background .15s,box-shadow .15s,transform .15s var(--ease-out)}.choice svg{grid-row:1 / 3;align-self:center;width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.choice strong{font-size:15px;font-weight:800}.choice span{font-size:12px;font-weight:500;color:var(--ink-soft)}.choice:hover{background:#fff;box-shadow:inset 0 0 0 1px #1f9c9459}.choice:active{transform:scale(.99)}.choice--primary{background:var(--teal);color:#fff}.choice--primary span{color:#ffffffd1}.choice--primary:hover{background:var(--teal-ink);box-shadow:none}@media (max-width: 600px){.plate--dialog{width:calc(100vw - 24px);padding:18px 16px 16px}.choice{padding:16px 14px}}#origin{position:fixed;top:0;right:0;bottom:0;left:0;z-index:110;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:clamp(18px,3.2vh,36px);padding:6vh max(6vw,32px);background:linear-gradient(180deg,#f7e3cf,#c9dff0);color:var(--ink);transition:opacity .48s var(--ease-out),transform .48s var(--ease-out)}#origin.is-out{opacity:0;transform:translateY(-2vh);pointer-events:none}.origin__eyebrow{margin:0;font:800 clamp(13px,1.3vw,18px) var(--body);letter-spacing:.16em;text-transform:uppercase;color:var(--coral-ink)}.origin__prompt{margin:0;max-width:22em;font:800 clamp(30px,4.6vw,72px)/1.08 var(--display);letter-spacing:-.03em;text-wrap:balance;animation:origin-in .9s var(--ease-out) both}.origin__facts{display:flex;flex-wrap:wrap;gap:clamp(24px,5vw,80px);margin:0;animation:origin-in .9s .25s var(--ease-out) both}.origin__facts dt{font:800 clamp(40px,5.4vw,84px)/1 var(--display);letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--teal-ink)}.origin__facts dd{margin:6px 0 0;font:700 clamp(14px,1.4vw,20px) var(--body);color:var(--ink-soft)}.origin__go{display:inline-flex;align-items:center;gap:14px;padding:16px 30px;border-radius:18px;background:var(--teal);color:#fff;font:800 clamp(20px,2vw,28px) var(--display);box-shadow:0 10px 24px -8px #1f9c94bf;transition:transform .15s var(--ease-out),background .2s;animation:origin-in .9s .5s var(--ease-out) both}.origin__go:hover{background:#22aca3;transform:translateY(-2px)}.origin__go:active{transform:translateY(1px)}.origin__go kbd{font:700 12px var(--body);padding:3px 8px;border-radius:6px;background:#ffffff38}@keyframes origin-in{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.origin__prompt,.origin__facts,.origin__go{animation:none}}
