:root{--bg: #0f1720;--surface: #17222e;--surface-2: #1f2d3a;--text: #e8eef4;--muted: #9fb0c0;--accent: #4ade80;--ride: #60a5fa;--user: #2b6cb0;--error: #f87171;--radius: 12px;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text)}.app{max-width:760px;margin:0 auto;min-height:100vh;display:flex;flex-direction:column}.app__header{position:relative;display:flex;flex-direction:column;align-items:center;gap:10px;padding:32px 16px 20px;border-bottom:1px solid var(--surface-2);background:radial-gradient(ellipse 45% 90% at 30% 0%,rgba(74,222,128,.14),transparent 70%),radial-gradient(ellipse 45% 90% at 70% 0%,rgba(96,165,250,.14),transparent 70%)}.brand{display:flex;align-items:center;justify-content:center;gap:24px}.brand__text{text-align:center}.brand__badge{display:grid;place-items:center;width:64px;height:64px;flex-shrink:0;border-radius:50%;font-size:34px;background:var(--surface-2);transition:transform .2s ease}.brand__badge--run{background:#dcfce7;box-shadow:0 0 0 3px var(--accent),0 0 20px #4ade8066;transform:rotate(-10deg)}.brand__badge--ride{background:#dbeafe;box-shadow:0 0 0 3px var(--ride),0 0 20px #60a5fa66;transform:rotate(8deg)}.brand__badge--run:hover,.brand__badge--ride:hover{transform:rotate(0) scale(1.08)}.brand__route{width:100%;max-width:420px;height:auto}.app__title{margin:0;font-size:32px;font-weight:800;letter-spacing:-.02em;background:linear-gradient(90deg,var(--accent),var(--ride));-webkit-background-clip:text;background-clip:text;color:transparent}.app__tagline{margin:4px 0 0;color:var(--muted);font-size:14px}.menu{position:absolute;top:12px;right:16px;z-index:20}.menu__button{display:grid;place-items:center;width:40px;height:40px;padding:0;border-radius:10px;background:var(--surface-2);color:var(--text);transition:background .15s ease}.menu__button:hover,.menu__button--open{background:#2a3b4b}.menu__button:focus-visible,.menu__item:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.menu__bars{display:flex;flex-direction:column;gap:4px;width:18px}.menu__bars span{display:block;height:2px;border-radius:2px;background:currentColor;transition:transform .2s ease,opacity .2s ease}.menu__button--open .menu__bars span:nth-child(1){transform:translateY(6px) rotate(45deg)}.menu__button--open .menu__bars span:nth-child(2){opacity:0}.menu__button--open .menu__bars span:nth-child(3){transform:translateY(-6px) rotate(-45deg)}.menu__panel{position:absolute;top:calc(100% + 8px);right:0;min-width:220px;padding:6px;display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--surface-2);border-radius:var(--radius);box-shadow:0 12px 32px #00000073;animation:menu-in .12s ease-out}@keyframes menu-in{0%{opacity:0;transform:translateY(-4px)}}.menu__caption{padding:8px 10px 10px;margin-bottom:4px;border-bottom:1px solid var(--surface-2);color:var(--muted);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.menu__item{background:transparent;color:var(--text);text-align:left;font-weight:500;padding:10px;border-radius:8px}.menu__item:hover,.menu__item:focus-visible{background:var(--surface-2)}@media (prefers-reduced-motion: reduce){.menu__panel,.menu__bars span{animation:none;transition:none}}@media (max-width: 640px){.app__header{padding-top:60px}}@media (max-width: 520px){.brand{gap:14px}.brand__badge{width:48px;height:48px;font-size:26px}.app__title{font-size:26px}.app__tagline{font-size:13px}}.app__main{flex:1;display:flex;flex-direction:column;padding:16px}button{background:var(--accent);color:#06210f;border:0;border-radius:var(--radius);padding:10px 16px;font-weight:600;cursor:pointer}button:disabled{opacity:.5;cursor:default}.button--secondary{background:var(--surface-2);color:var(--text)}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:30;display:flex;align-items:flex-start;justify-content:center;padding:16px;background:#050a0fb3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);overflow-y:auto}.modal__card{margin-top:min(12vh,96px);margin-bottom:16px}.modal__form{display:flex;flex-direction:column;gap:12px}.modal__actions{display:flex;justify-content:flex-end;gap:8px}.success{color:var(--accent)}input{background:var(--surface-2);border:1px solid transparent;border-radius:var(--radius);color:var(--text);padding:12px 14px;font-size:15px}input:focus{outline:none;border-color:var(--accent)}.card{background:var(--surface);border-radius:var(--radius);padding:24px;width:100%;max-width:480px;margin:40px auto;display:flex;flex-direction:column;gap:12px}.card h2{margin:0}.muted{color:var(--muted);font-size:13px}.error{color:var(--error);font-size:13px}.notice{margin:0;color:var(--accent);font-size:13px}.card__links{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;margin:4px 0 0}button.link{padding:0;background:none;border-radius:0;color:var(--ride);font-weight:500;font-size:13px;text-decoration:underline;text-underline-offset:2px}button.link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.chat{display:flex;flex-direction:column;flex:1;gap:12px}.chat__log{flex:1;display:flex;flex-direction:column;gap:10px;overflow-y:auto;padding-bottom:8px}.chat__empty{margin:auto;text-align:center}.bubble{padding:12px 14px;border-radius:var(--radius);max-width:80%;white-space:pre-wrap;line-height:1.45}.bubble--user{background:var(--user);align-self:flex-end}.bubble--assistant{background:var(--surface);align-self:flex-start}.runner{display:inline-flex;flex-direction:column;align-items:center;width:28px}.runner__body{display:inline-block;font-size:22px;line-height:1;animation:jog .5s ease-in-out infinite;transform-origin:50% 100%}.runner__shadow{width:16px;height:3px;margin-top:2px;border-radius:50%;background:var(--muted);animation:jog-shadow .5s ease-in-out infinite}@keyframes jog{0%,50%,to{transform:translateY(0) rotate(0)}25%{transform:translateY(-5px) rotate(-6deg)}75%{transform:translateY(-5px) rotate(6deg)}}@keyframes jog-shadow{0%,50%,to{transform:scaleX(1);opacity:.6}25%,75%{transform:scaleX(.6);opacity:.3}}@media (prefers-reduced-motion: reduce){.runner__body,.runner__shadow{animation:none}}.chat__input{display:flex;gap:8px}.chat__input input{flex:1}.turn{display:flex;flex-direction:column;gap:8px}.turn--user{align-items:flex-end}.turn--assistant{align-items:flex-start}.waiting{display:inline-flex;align-items:center;gap:10px;vertical-align:middle}.bubble>.waiting{display:flex;margin-top:4px}.waiting__status{color:var(--muted);font-size:14px}.route-map{width:100%;margin:0;border-radius:var(--radius);overflow:hidden;background:var(--surface);border:1px solid var(--surface-2)}.route-map--loading{padding:40px 16px;text-align:center;color:var(--muted);font-size:14px}.route-map__canvas{width:100%;height:340px}.route-map__notice{margin:0;padding:8px 12px;color:var(--muted);font-size:13px}.route-map__options{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;padding:10px}.route-map__option{display:flex;align-items:flex-start;gap:10px;text-align:left;padding:10px;border-radius:10px;background:var(--surface-2);color:var(--text);font-weight:400;border:2px solid transparent;transition:border-color .15s ease,background .15s ease}.route-map__option:hover{background:#2a3b4b}.route-map__option--active{border-color:var(--route-color)}.route-map__option:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.route-map__label{display:grid;place-items:center;flex-shrink:0;width:26px;height:26px;border-radius:50%;background:var(--route-color);color:#fff;font-weight:700;font-size:14px}.route-map__stats{display:flex;flex-direction:column;gap:2px;font-size:13px;color:var(--muted)}.route-map__stats strong{color:var(--text);font-size:15px}.route-map .maplibregl-ctrl.maplibregl-ctrl-attrib{font-size:11px;color:#1f2937;background-color:#ffffffd9}.route-map .maplibregl-ctrl-attrib a{color:#1f2937}@media (max-width: 520px){.route-map__canvas{height:260px}}
