:root{font-family:system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;line-height:1.5;font-weight:400;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--color-bg-body: #f5f5f7;--color-bg-body-alt: #e5e7eb;--color-surface-glass: rgba(255, 255, 255, .82);--color-surface-glass-strong: rgba(255, 255, 255, .94);--color-surface-glass-soft: rgba(255, 255, 255, .72);--color-surface-glass-dark: rgba(15, 23, 42, .12);--color-border-soft: rgba(148, 163, 184, .3);--color-border-strong: rgba(148, 163, 184, .55);--color-accent: #ec4899;--color-accent-soft: rgba(236, 72, 153, .16);--color-accent-subtle: rgba(236, 72, 153, .08);--color-text-primary: #111827;--color-text-secondary: #4b5563;--color-text-muted: #6b7280;--color-danger: #b3261e;--color-warning: #f97316;--radius-lg: 1.5rem;--radius-md: 1rem;--radius-sm: .75rem;--radius-pill: 999px;--shadow-soft: 0 18px 45px rgba(15, 23, 42, .25);--shadow-strong: 0 30px 80px rgba(15, 23, 42, .45);--blur-glass-strong: 22px;--blur-glass-soft: 18px;--font-size-xs: .75rem;--font-size-sm: .82rem;--font-size-md: .9rem;--font-size-lg: 1rem;--font-size-xl: 1.15rem;--font-weight-normal: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--font-weight-extrabold: 800}body{margin:0;min-width:320px;min-height:100vh}#root{min-height:100vh}a{color:inherit;text-decoration:none}button{font:inherit}#root{margin:0;padding:0;min-height:100vh;display:flex;justify-content:center}.app-root{position:relative;flex:1;display:flex;flex-direction:column;width:100%;max-width:480px;margin:0 auto;padding:env(safe-area-inset-top,0) 0 env(safe-area-inset-bottom,0) 0;overflow:hidden}.app-splash{position:fixed;inset:0;z-index:10;display:flex;align-items:center;justify-content:center;padding:2.5rem 1.25rem 2.25rem;background:radial-gradient(circle at top left,#fee2e2e6,#feb2d9d9),radial-gradient(circle at bottom right,#dbeafee6,#ddd6fee6);backdrop-filter:blur(26px) saturate(140%);-webkit-backdrop-filter:blur(26px) saturate(140%);transition:opacity .42s cubic-bezier(.19,1,.22,1),transform .42s cubic-bezier(.19,1,.22,1),visibility .42s ease-out}.app-splash--hidden{opacity:0;visibility:hidden;transform:scale(1.02) translateY(-4px);pointer-events:none}.app-splash-orbit{position:absolute;inset:6%;border-radius:9999px;border:none;background:radial-gradient(circle at 50% 50%,#ffffffbf 0,#fff0 58%),conic-gradient(from -20deg,rgba(244,114,182,.65) 0deg 18deg,transparent 18deg 32deg,rgba(96,165,250,.55) 32deg 50deg,transparent 50deg 64deg,rgba(251,191,36,.65) 64deg 82deg,transparent 82deg 96deg,rgba(244,114,182,.65) 96deg 114deg,transparent 114deg 360deg);filter:blur(1.5px);opacity:.82;mix-blend-mode:screen;animation:app-splash-rays-spin 24s linear infinite}.app-splash-orbit-inner{position:absolute;inset:13%;border-radius:inherit;background:radial-gradient(circle at 0% 0%,rgba(251,113,133,.4),transparent 65%),radial-gradient(circle at 100% 100%,rgba(129,140,248,.35),transparent 65%);opacity:.9;filter:blur(1px)}.app-splash-card{position:relative;z-index:1;width:100%;max-width:360px;padding:1.6rem 1.4rem 1.5rem;border-radius:1.6rem;background:linear-gradient(135deg,#fffffff0,#fff7fcf5);box-shadow:0 18px 55px #0f172a59,0 0 0 1px #f871be40;display:flex;flex-direction:column;align-items:center;gap:.75rem;transform:translateY(4px) scale(.98);animation:app-splash-pop-in .72s cubic-bezier(.16,1,.3,1) .52s forwards,app-splash-card-breathe 7s ease-in-out 1.8s infinite}.app-splash .app-splash-card{border-radius:1.7rem;background:radial-gradient(circle at 0% 0%,#ffe4f1f5,#ffe4f166),linear-gradient(135deg,#fffffffa,#fff7fcfa);box-shadow:0 22px 55px #0f172a59,0 0 0 1px #f8bbd0cc}.app-splash-logos-row{width:100%;display:flex;align-items:center;justify-content:center;gap:.75rem}.app-splash-metro-logo{width:2.6rem;height:2.6rem;border-radius:.9rem;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 30% 0%,#fecaca,#fee2e2);box-shadow:0 10px 24px #dc262673,0 0 0 1px #f87171b3}.app-splash-metro-m{font-weight:900;font-size:1.4rem;color:#b91c1c;text-shadow:0 2px 4px rgba(248,250,252,.9)}.app-splash-logo{width:4.1rem;height:4.1rem;border-radius:9999px;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 30% 0%,#fee2f2,#fecaca),radial-gradient(circle at 80% 100%,#e0f2fe,#f5f3ff);box-shadow:0 12px 30px #f871be66,0 0 0 1px #f472b6b3}.app-splash-logo-img{width:3.4rem;height:3.4rem}.app-splash-floaters{position:absolute;inset:0;z-index:0;pointer-events:none;overflow:hidden}.app-splash-heart,.app-splash-star{position:absolute;width:1.6rem;height:1.6rem;opacity:0}.app-splash-heart{background:radial-gradient(circle at 30% 0%,#fee2f2,#fb7185),radial-gradient(circle at 70% 100%,#fecaca,#f97316);box-shadow:0 8px 20px #f871be8c;transform:rotate(-45deg);border-radius:.9rem .9rem .9rem 0}.app-splash-heart:before,.app-splash-heart:after{content:"";position:absolute;width:100%;height:100%;border-radius:9999px;background:radial-gradient(circle at 30% 0%,#fee2f2,#fb7185),radial-gradient(circle at 70% 100%,#fecaca,#f97316)}.app-splash-heart:before{top:-50%;left:0}.app-splash-heart:after{left:50%;top:0}.app-splash-star{border-radius:9999px;background:radial-gradient(circle at 50% 0%,#fefce8,#fde68a),radial-gradient(circle at 80% 100%,#fee2e2,#f97316);box-shadow:0 6px 16px #facc15a6,0 0 18px #fbbf24cc}.app-splash-heart--1{top:15%;left:14%;animation:app-splash-float-1 5.6s ease-in-out infinite alternate;animation-delay:.62s}.app-splash-heart--2{top:70%;left:18%;animation:app-splash-float-2 6.2s ease-in-out infinite alternate;animation-delay:.78s}.app-splash-heart--3{top:24%;right:12%;animation:app-splash-float-3 6.8s ease-in-out infinite alternate;animation-delay:.94s}.app-splash-star--1{top:78%;right:9%;animation:app-splash-star-twinkle 4.2s ease-in-out infinite;animation-delay:1.1s}.app-splash-star--2{top:10%;right:26%;animation:app-splash-star-twinkle 4.8s ease-in-out infinite;animation-delay:1.45s}.app-splash-star--3{top:64%;left:8%;animation:app-splash-star-twinkle 5.1s ease-in-out infinite;animation-delay:1.72s}.app-splash-sparkles{position:absolute;inset:-6%}.app-splash-sparkles .app-splash-sparkle{position:absolute;width:.55rem;height:.55rem;border-radius:9999px;background:radial-gradient(circle at 30% 0%,#fff7fb,#fed7e2),radial-gradient(circle at 80% 100%,#e0f2fe,#fbcfe8);box-shadow:0 0 0 1px #f8bbd0bf,0 0 12px #f472b6a6;opacity:0;animation:app-splash-sparkle-twinkle 3s ease-in-out infinite}.app-splash-sparkles .app-splash-sparkle:nth-child(1){top:6%;left:24%;animation-delay:.12s}.app-splash-sparkles .app-splash-sparkle:nth-child(2){top:18%;right:18%;animation-delay:.24s}.app-splash-sparkles .app-splash-sparkle:nth-child(3){top:32%;left:6%;animation-delay:.36s}.app-splash-sparkles .app-splash-sparkle:nth-child(4){top:40%;right:6%;animation-delay:.48s}.app-splash-sparkles .app-splash-sparkle:nth-child(5){top:58%;left:20%;animation-delay:.6s}.app-splash-sparkles .app-splash-sparkle:nth-child(6){top:66%;right:22%;animation-delay:.72s}.app-splash-sparkles .app-splash-sparkle:nth-child(7){top:76%;left:32%;animation-delay:.84s}.app-splash-sparkles .app-splash-sparkle:nth-child(8){top:82%;right:30%;animation-delay:.96s}.app-splash-sparkles .app-splash-sparkle:nth-child(9){top:50%;left:40%;animation-delay:1.08s}.app-splash-sparkles .app-splash-sparkle:nth-child(10){top:30%;right:40%;animation-delay:1.2s}.app-splash-sparkles .app-splash-sparkle:nth-child(11){top:12%;left:44%;animation-delay:1.28s}.app-splash-sparkles .app-splash-sparkle:nth-child(12){top:88%;right:44%;animation-delay:1.36s}.app-splash-sparkles .app-splash-sparkle:nth-child(13){top:4%;right:6%;animation-delay:1.44s}.app-splash-sparkles .app-splash-sparkle:nth-child(14){top:94%;left:8%;animation-delay:1.52s}.app-splash-sparkles .app-splash-sparkle:nth-child(15){top:46%;left:48%;animation-delay:1.6s}.app-splash-sparkles .app-splash-sparkle:nth-child(16){top:54%;right:48%;animation-delay:1.68s}.app-splash-sparkles .app-splash-sparkle:nth-child(17){top:20%;left:12%;animation-delay:.18s}.app-splash-sparkles .app-splash-sparkle:nth-child(18){top:8%;right:12%;animation-delay:.3s}.app-splash-sparkles .app-splash-sparkle:nth-child(19){top:26%;right:22%;animation-delay:.42s}.app-splash-sparkles .app-splash-sparkle:nth-child(20){top:38%;left:26%;animation-delay:.54s}.app-splash-sparkles .app-splash-sparkle:nth-child(21){top:44%;right:28%;animation-delay:.66s}.app-splash-sparkles .app-splash-sparkle:nth-child(22){top:62%;left:14%;animation-delay:.78s}.app-splash-sparkles .app-splash-sparkle:nth-child(23){top:72%;right:16%;animation-delay:.9s}.app-splash-sparkles .app-splash-sparkle:nth-child(24){top:84%;left:36%;animation-delay:1.02s}.app-splash-sparkles .app-splash-sparkle:nth-child(25){top:12%;left:32%;animation-delay:1.14s}.app-splash-sparkles .app-splash-sparkle:nth-child(26){top:22%;right:34%;animation-delay:1.22s}.app-splash-sparkles .app-splash-sparkle:nth-child(27){top:34%;left:44%;animation-delay:1.3s}.app-splash-sparkles .app-splash-sparkle:nth-child(28){top:46%;right:42%;animation-delay:1.38s}.app-splash-sparkles .app-splash-sparkle:nth-child(29){top:68%;left:52%;animation-delay:1.46s}.app-splash-sparkles .app-splash-sparkle:nth-child(30){top:78%;right:52%;animation-delay:1.54s}.app-splash-sparkles .app-splash-sparkle:nth-child(31){top:90%;left:22%;animation-delay:1.62s}.app-splash-sparkles .app-splash-sparkle:nth-child(32){top:94%;right:20%;animation-delay:1.7s}.app-splash-title{margin:.45rem 0 0;font-size:1.25rem;font-weight:800;letter-spacing:.03em}.app-splash-subtitle{margin:0;font-size:.9rem;color:#9f1239}.app-splash-hello{font-weight:800;letter-spacing:.08em;text-transform:uppercase}.app-splash-credits{margin:.35rem 0 0;font-size:.7rem;letter-spacing:.16em;text-transform:uppercase;color:#0f172a8c}.app-splash-button{margin-top:.9rem;border-radius:9999px;border:none;padding:.75rem 1.5rem;font-size:.95rem;font-weight:700;background:linear-gradient(135deg,#fb7185,#ec4899,#f97316);color:#fff7fb;box-shadow:0 14px 32px #be185d8c,0 0 0 1px #f8fafc99;cursor:pointer;transform:translateY(0);transition:transform .16s ease-out,box-shadow .16s ease-out,filter .16s ease-out}.app-splash-button:active{transform:translateY(1px) scale(.99);box-shadow:0 10px 24px #be185d8c,0 0 0 1px #f8fafc99;filter:brightness(.97)}.app-map-layer{position:fixed;inset:0;z-index:0}.app-overlay{position:relative;z-index:1;display:flex;flex-direction:column;min-height:100vh;background:transparent;pointer-events:none}.app-header{position:fixed;top:calc(env(safe-area-inset-top,0) + .75rem);left:50%;transform:translate(-50%);width:calc(100% - 3rem);max-width:420px;z-index:2;display:flex;align-items:center;pointer-events:auto;padding:.6rem 1rem;background:radial-gradient(circle at 0% 0%,#ffe6f5e6,#ffe6f54d),linear-gradient(135deg,#fffffff0,#fff7fcf5);backdrop-filter:blur(22px) saturate(170%);-webkit-backdrop-filter:blur(22px) saturate(170%);color:#2f102f;box-shadow:0 18px 45px #f472b673,0 0 0 1px #f8bbd0cc;border-radius:1.25rem;overflow:hidden;animation:app-header-drop-in .42s cubic-bezier(.16,1,.3,1) .14s both;will-change:opacity}.app-header:before{content:"";position:absolute;inset:-3px;border-radius:inherit;background:linear-gradient(135deg,#fce7f3e6,#dbeafea6);opacity:.7;z-index:-1}.app-header-logo{position:relative;display:flex;align-items:center;justify-content:center;width:2.6rem;height:2.6rem;border-radius:9999px;background:radial-gradient(circle at 30% 0%,#fee2f2,#fecaca),radial-gradient(circle at 80% 100%,#e0f2fe,#f5f3ff);box-shadow:0 10px 26px #f871be80,0 0 0 1px #f8bbd0e6;margin-right:.75rem;animation:float-soft 6s ease-in-out infinite alternate;will-change:transform}.app-header-logo-img{width:2.1rem;height:2.1rem}.app-header-logo-initials{position:absolute;right:-.1rem;bottom:-.15rem;font-size:.7rem;font-weight:800}.app-header-text{display:flex;flex-direction:column;min-width:0}.app-header-title{margin:0;font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-header-subtitle{margin:0;font-size:var(--font-size-sm);font-weight:var(--font-weight-medium)}.app-header-actions{display:flex;align-items:center;gap:.5rem}.app-header-action{padding:.25rem .5rem;border-radius:.25rem;background:linear-gradient(135deg,#ff8ac4,#ff69b4);color:#fff4fb;font-size:.8rem;cursor:pointer}.app-header-action:hover{background:linear-gradient(135deg,#ffd9f0,#ffc0e5)}.app-main{flex:1;padding:.75rem 1rem 5.25rem;overflow-y:auto;pointer-events:none}.route-form{display:flex;flex-direction:column;gap:.75rem;margin-bottom:1rem}.field{display:flex;flex-direction:column;gap:.25rem}.field-label{font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);color:#b44a87;text-transform:uppercase;letter-spacing:.08em}.field-input{border-radius:1rem;border:1px solid rgba(148,163,184,.35);padding:.75rem .9rem;font-size:var(--font-size-md);background-color:#fffffff5;color:var(--color-text-primary)}.field-input::placeholder{color:var(--color-text-muted)}.field-input:focus{outline:2px solid var(--color-accent);outline-offset:1px;border-color:var(--color-accent)}.field-suggestions{position:absolute;left:0;right:0;bottom:calc(100% + .35rem);margin:0;padding:.25rem 0;list-style:none;border-radius:var(--radius-md);background-color:var(--color-surface-glass-strong);box-shadow:var(--shadow-soft);max-height:9rem;overflow-y:auto;z-index:3}.suggestion-item{padding:.35rem .75rem;font-size:var(--font-size-sm);color:var(--color-text-primary);cursor:pointer}.suggestion-item:hover,.suggestion-item--active{background-color:var(--color-accent-subtle)}.swap-button{align-self:center;margin-top:.1rem;margin-bottom:.1rem;width:2.4rem;height:2.4rem;display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;border:1px solid rgba(148,163,184,.35);background:linear-gradient(145deg,#ffffffeb,#fff0f8e6);color:var(--color-text-primary);font-size:1.05rem;flex-shrink:0;box-shadow:0 12px 26px #94a3b880;transform:rotate(90deg)}.swap-button:hover{background:linear-gradient(145deg,var(--color-accent-subtle),#ffd9f0);box-shadow:0 12px 26px #94a3b880}.primary-button{margin-top:.5rem;border-radius:var(--radius-md);border:none;padding:.9rem 1.1rem;font-size:var(--font-size-md);font-weight:var(--font-weight-bold);background:linear-gradient(135deg,var(--color-accent),#f97316);color:#fdf2f8;box-shadow:0 8px 20px #0f172a59}.primary-button:active{transform:translateY(1px)}.route-placeholder{margin-top:.5rem;margin-bottom:.5rem;padding:.55rem .75rem;border-radius:.95rem;background:linear-gradient(135deg,#ffffffd1,#fff7fce6);border:1px solid rgba(248,187,208,.6);box-shadow:0 10px 26px #94a3b859,0 0 0 1px #f8bbd080;backdrop-filter:blur(18px) saturate(150%);-webkit-backdrop-filter:blur(18px) saturate(150%);pointer-events:auto}.placeholder-text{margin:0;font-size:var(--font-size-sm);color:var(--color-text-secondary)}.error-text{margin:0;font-size:var(--font-size-sm);color:var(--color-danger)}.route-result{display:flex;flex-direction:column;gap:.6rem;padding:.85rem .85rem 1rem;margin-top:.55rem;margin-bottom:.35rem;border-radius:1.2rem;background:radial-gradient(circle at 0% 0%,#ffe6f5e6,#ffe6f54d),linear-gradient(135deg,#ffffffeb,#fff7fcfa);box-shadow:none;border:1px solid rgba(248,187,208,.7);backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%)}.route-result-scroll{display:flex;flex-direction:column;gap:.6rem;max-height:40vh;overflow-y:auto;padding-bottom:.75rem}.route-summary{display:flex;justify-content:space-between;align-items:center;font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold);color:var(--color-text-secondary);padding:.25rem .15rem .3rem;border-bottom:1px solid var(--color-border-soft)}.summary-time{padding-right:.5rem}.summary-transfers{font-weight:var(--font-weight-medium)}.route-steps{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}.route-step{display:flex;align-items:flex-start;gap:.55rem;padding:.55rem .65rem;border-radius:1rem;background:linear-gradient(135deg,#ffffffe6,#fff7fcf2);box-shadow:none;border:1px solid rgba(248,187,208,.4);backdrop-filter:blur(14px) saturate(150%);-webkit-backdrop-filter:blur(14px) saturate(150%);animation:fade-in-up .2s ease-out;transition:transform .15s ease-out,box-shadow .15s ease-out,background-color .15s ease-out;will-change:transform,box-shadow,background-color}.route-step--transfer .step-title{color:#b44a87}.route-step--transfer{background:linear-gradient(135deg,#fff8ebfa,#fef0c7f5);border:1px dashed rgba(234,88,12,.7);box-shadow:none}.line-pill{width:7px;border-radius:9999px;align-self:stretch;background-color:#e5e7eb;opacity:.98}.line-pill--dual{display:flex;flex-direction:column;width:8px;border-radius:9999px;overflow:hidden}.line-pill-half{flex:1}.step-dot{width:10px;height:10px;border-radius:9999px;margin-top:.2rem;background-color:#ff9ecb}.step-dot--transfer{background-color:#f97316}.step-body{flex:1}.step-title{font-size:.86rem;font-weight:600}.step-subtitle{font-size:.8rem;color:#b44a87}.step-meta{margin-top:.1rem;font-size:.76rem;color:#9ca3af}.step-station-list{margin:.35rem 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:.14rem}.step-station-item{display:flex;align-items:center;gap:.35rem;font-size:.78rem;color:#4b164c;padding:.06rem .1rem;border-radius:.35rem;background:transparent}.step-station-bullet{width:6px;height:6px;border-radius:9999px;background-color:#ec4899e6;box-shadow:0 0 0 2px #f8bbd0d9;flex-shrink:0}.step-station-name{flex:1}.bottom-route-details{margin-top:.5rem;max-height:40vh;overflow:visible;transition:max-height .2s ease-out,opacity .2s ease-out,transform .2s ease-out;will-change:max-height,opacity,transform}.bottom-route-details--closed{max-height:0;opacity:0;transform:translateY(6px);overflow:hidden}.bottom-route-details--open{opacity:1;transform:translateY(0)}@keyframes fade-in-up{0%{opacity:0;transform:translateY(3px)}to{opacity:1;transform:translateY(0)}}@keyframes app-splash-orbit-spin{0%{transform:rotate(0) scale(.9);box-shadow:0 0 0 1px #fff1f6b3,0 14px 32px #be185d33}18%{transform:rotate(65deg) scale(1.05);box-shadow:0 0 0 3px #fff1f6f2,0 26px 60px #be185d73}35%{transform:rotate(130deg) scale(.96);box-shadow:0 0 0 2px #fff1f6d9,0 20px 45px #be185d52}52%{transform:rotate(195deg) scale(1.08);box-shadow:0 0 0 4px #fff1f6,0 30px 70px #be185d8c}75%{transform:rotate(280deg) scale(.94);box-shadow:0 0 0 2px #fff1f6d9,0 18px 38px #be185d47}to{transform:rotate(360deg) scale(.9);box-shadow:0 0 0 1px #fff1f6b3,0 14px 32px #be185d33}}@keyframes app-splash-rays-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes app-splash-backdrop-intro{0%{opacity:0;transform:scale(.96) translateY(18px)}50%{opacity:1;transform:scale(.99) translateY(4px)}to{opacity:1;transform:scale(1) translateY(0)}}@keyframes app-splash-orbit-intro{0%{opacity:0}to{opacity:.95}}@keyframes app-splash-card-breathe{0%{transform:translateY(0) scale(1)}35%{transform:translateY(-2px) scale(1.02)}70%{transform:translateY(0) scale(.995)}to{transform:translateY(0) scale(1)}}@keyframes app-splash-float-1{0%{transform:translateZ(0) rotate(-45deg) scale(.9);opacity:.8}to{transform:translate3d(6px,-16px,0) rotate(-45deg) scale(1.05);opacity:1}}@keyframes app-splash-float-2{0%{transform:translateZ(0) rotate(-45deg) scale(1);opacity:.9}to{transform:translate3d(-10px,-20px,0) rotate(-45deg) scale(1.08);opacity:1}}@keyframes app-splash-float-3{0%{transform:translateZ(0) rotate(-45deg) scale(.95);opacity:.85}to{transform:translate3d(4px,-18px,0) rotate(-45deg) scale(1.06);opacity:1}}@keyframes app-splash-star-twinkle{0%{transform:translateZ(0) scale(.95) rotate(0);opacity:.7;box-shadow:0 6px 14px #facc1566,0 0 12px #fbbf2499}40%{transform:translate3d(-4px,-6px,0) scale(1.08) rotate(10deg);opacity:1;box-shadow:0 8px 20px #facc15cc,0 0 24px #fbbf24f2}80%{transform:translate3d(2px,-10px,0) scale(1.02) rotate(-8deg);opacity:.9;box-shadow:0 7px 18px #facc1599,0 0 18px #fbbf24cc}to{transform:translateZ(0) scale(.95) rotate(0);opacity:.7;box-shadow:0 6px 14px #facc1566,0 0 12px #fbbf2499}}@keyframes app-splash-sparkle-twinkle{0%{opacity:0;transform:translate3d(0,4px,0) scale(.9);box-shadow:0 0 0 1px #f8bbd0b3,0 0 8px #f472b680}15%{opacity:1;transform:translateZ(0) scale(1.1);box-shadow:0 0 0 1px #f8bbd0f2,0 0 22px #f472b6}80%{opacity:1;transform:translate3d(0,-2px,0) scale(1.05);box-shadow:0 0 0 1px #f8bbd0e6,0 0 18px #f472b6e6}to{opacity:0;transform:translate3d(0,4px,0) scale(.9);box-shadow:0 0 0 1px #f8bbd099,0 0 6px #f472b666}}@keyframes app-splash-pop-in{0%{opacity:0;transform:translateY(12px) scale(.94)}60%{opacity:1;transform:translateY(-2px) scale(1.02)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes bottom-sheet-intro{0%{transform:translateY(16px);opacity:0}to{transform:translateY(0);opacity:1}}@keyframes app-header-drop-in{0%{opacity:0}to{opacity:1}}@keyframes float-soft{0%{transform:translateY(0)}to{transform:translateY(-2px)}}@keyframes chip-pop-in{0%{opacity:0;transform:translateY(6px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes fab-pop-in{0%{opacity:0;transform:translateY(calc(-50% + 7rem)) scale(.9)}to{opacity:1;transform:translateY(calc(-50% + 7rem)) scale(1)}}@keyframes banner-slide-up{0%{opacity:0;transform:translate(-50%,12px)}to{opacity:1;transform:translate(-50%)}}@keyframes modal-backdrop-fade{0%{opacity:0}to{opacity:1}}@keyframes modal-card-pop{0%{opacity:0;transform:translateY(12px) scale(.94)}to{opacity:1;transform:translateY(0) scale(1)}}.metro-map-wrapper{position:absolute;inset:0;border-radius:0;background:radial-gradient(circle at top left,#ffe0f2,#ffeaf8);overflow:hidden}.metro-map-svg,.metro-map-labels{position:absolute;inset:0;width:100%;height:100%;display:block}.metro-map-svg{touch-action:none}.metro-map-labels{pointer-events:none}.metro-map-zoom-controls{position:absolute;right:1rem;top:50%;bottom:auto;transform:translateY(-50%);display:flex;flex-direction:column;gap:.5rem;pointer-events:auto}.metro-map-zoom-button{width:2.4rem;height:2.4rem;border-radius:9999px;border:1px solid rgba(248,187,208,.85);background:radial-gradient(circle at 30% 0%,#ffe6f5fa,#ffe6f566),linear-gradient(135deg,#fffffff5,#fff7fcf5);color:#be185d;font-size:1.2rem;display:flex;align-items:center;justify-content:center;box-shadow:0 10px 26px #94a3b88c,0 0 0 1px #94a3b873;transition:transform .15s ease-out,box-shadow .15s ease-out,background-color .15s ease-out;will-change:transform,box-shadow,background-color}.metro-map-zoom-button:hover{background:linear-gradient(135deg,#ffeef8,#ffd1e3);transform:translateY(-1px);box-shadow:0 10px 24px #94a3b88c}.metro-map-zoom-button:active{transform:scale(.96);box-shadow:0 8px 20px #94a3b880;filter:brightness(.96)}.metro-station-node{cursor:pointer}.editor-fab{position:fixed;right:1rem;top:50%;bottom:auto;transform:translateY(calc(-50% + 7rem));z-index:3;width:2.3rem;height:2.3rem;border-radius:9999px;border:1px solid rgba(248,187,208,.85);background:radial-gradient(circle at 30% 0%,#ffe6f5f5,#ffe6f566),linear-gradient(135deg,#fffffff5,#fff7fcf5);box-shadow:0 10px 26px #94a3b899,0 0 0 1px #f8bbd0cc;color:#be185d;font-size:1.1rem;display:flex;align-items:center;justify-content:center;cursor:pointer;pointer-events:auto;transition:transform .16s ease-out,box-shadow .16s ease-out,background-color .16s ease-out;animation:fab-pop-in .36s cubic-bezier(.16,1,.3,1) .22s both;will-change:transform,box-shadow}.editor-fab--active{background:linear-gradient(135deg,#ec4899,#db2777);color:#fff4fb;box-shadow:0 10px 26px #be185d99}.editor-tools-stack{position:fixed;right:3.6rem;top:50%;transform:translateY(calc(-50% + 7rem));z-index:3;display:flex;flex-direction:row;gap:.4rem;pointer-events:auto}.editor-fab--small{position:static;right:auto;top:auto;bottom:auto;transform:none;width:2rem;height:2rem;font-size:.9rem;box-shadow:0 8px 20px #94a3b88c,0 0 0 1px #f8bbd0bf}.editor-fab--secondary{border-style:dashed;background:radial-gradient(circle at 30% 0%,#fff2f8f0,#fff2f866),linear-gradient(135deg,#fffffff5,#fffafcf5)}.hub-editor-panel{position:fixed;left:.9rem;top:50%;transform:translateY(calc(-50% + 6rem));z-index:3;width:min(280px,80vw);max-height:60vh;padding:.75rem .85rem .85rem;border-radius:1rem;background:linear-gradient(145deg,#fffffff7,#fff7fcf7);box-shadow:0 14px 32px #94a3b899,0 0 0 1px #f8bbd0e6;display:flex;flex-direction:column;gap:.6rem;overflow:hidden;pointer-events:auto}.hub-editor-header{border-bottom:1px solid rgba(248,187,208,.6);padding-bottom:.4rem;margin-bottom:.2rem}.hub-editor-title-row{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.hub-editor-title{font-size:.9rem;font-weight:600;color:#4b164c}.hub-editor-close{border-radius:9999px;border:1px solid rgba(248,187,208,.9);background:#fffffff5;width:1.4rem;height:1.4rem;display:flex;align-items:center;justify-content:center;font-size:.9rem;line-height:1;color:#be185d;cursor:pointer}.hub-editor-subtitle{margin-top:.2rem;font-size:.75rem;color:#6b21a8}.hub-editor-section{padding-top:.2rem}.hub-editor-section-title{font-size:.8rem;font-weight:600;color:#4b164c;margin-bottom:.15rem}.hub-editor-section-subtitle{font-size:.74rem;color:#6b21a8;margin-bottom:.2rem}.hub-editor-list{list-style:none;margin:0;padding:0;max-height:7.5rem;overflow-y:auto}.hub-editor-list--compact{max-height:9rem}.hub-editor-list-item{display:flex;align-items:center;gap:.35rem;font-size:.76rem;color:#374151;padding:.12rem 0}.hub-editor-list-item--muted{color:#9ca3af}.hub-editor-line-dot{width:.55rem;height:.55rem;border-radius:9999px;background:#d1d5db}.hub-editor-station-name,.hub-editor-connection-main{flex:1}.hub-editor-connection-meta{font-size:.7rem;color:#6b7280}.hub-editor-connection-toggle{border-radius:9999px;border:1px solid rgba(148,163,184,.6);padding:.1rem .5rem;font-size:.7rem;background:#fffffff5;color:#4b164c;cursor:pointer;white-space:nowrap}.hub-editor-connection-toggle--transfer{border-color:#ec4899d9;background:radial-gradient(circle at 0% 0%,#ffe4f1f5,#ffe4f180),linear-gradient(135deg,#fffffffa,#fff7fcfa);color:#be185d}.hub-editor-connection-minutes{width:3.1rem;border-radius:9999px;border:1px solid rgba(209,213,219,.9);padding:.05rem .4rem;font-size:.7rem;text-align:right;margin-right:.2rem}.hub-editor-connection-minutes-label{font-size:.7rem;opacity:.8}.hub-editor-hub-select-row{display:flex;align-items:center;gap:.4rem;margin-top:.25rem}.hub-editor-hub-select{flex:1;min-width:0;border-radius:9999px;border:1px solid rgba(248,187,208,.9);padding:.25rem .6rem;font-size:.78rem;background:radial-gradient(circle at 0% 0%,#ffe6f5f5,#ffe6f580);color:#4b164c}.hub-editor-hub-new{flex-shrink:0;border-radius:9999px;border:1px dashed rgba(248,187,208,.9);padding:.2rem .55rem;font-size:.72rem;background:#fffffff5;color:#be185d;cursor:pointer}.bottom-sheet{position:fixed;left:0;right:0;bottom:0;z-index:4;padding:.75rem .85rem calc(env(safe-area-inset-bottom,0) + .9rem);background:linear-gradient(180deg,#ffffffd1,#fff7fcf5);backdrop-filter:blur(22px) saturate(170%);-webkit-backdrop-filter:blur(22px) saturate(170%);box-shadow:none;border:1px solid rgba(248,187,208,.7);pointer-events:auto;transform:translateY(0);border-top-left-radius:1.3rem;border-top-right-radius:1.3rem;border-bottom-left-radius:0;border-bottom-right-radius:0;transition:transform .22s ease-out,box-shadow .22s ease-out,background-color .22s ease-out,border-radius .22s ease-out}.bottom-sheet--with-route{animation:bottom-sheet-intro .26s cubic-bezier(.16,1,.3,1)}.bottom-sheet-inner{display:flex;flex-direction:column;gap:.6rem;overflow:visible}.bottom-fields-row{display:flex;flex-direction:row;align-items:stretch;gap:.5rem}.bottom-sheet--mobile-collapsed,.bottom-sheet--mobile-expanded{transform:translateY(0)}.bottom-field{position:relative;flex:1;min-width:0}.bottom-input{width:100%;box-sizing:border-box;border-radius:9999px;border:1px solid rgba(248,187,208,.9);padding:.85rem 2.4rem .85rem 1.1rem;font-size:.95rem;background:radial-gradient(circle at 0% 0%,#ffe6f5f5,#ffe6f580);color:#2f102f;box-shadow:0 8px 22px #f871be40,0 0 0 1px #f8bbd08c;transition:border-color .16s ease-out,box-shadow .16s ease-out,background-color .16s ease-out,transform .12s ease-out}.bottom-input--active{border-color:#ec4899;box-shadow:0 0 0 1px #ec489959,0 4px 12px #f472b638}.bottom-input::placeholder{color:#d08bb2}.bottom-input:focus{outline:2px solid #ff8ac4;outline-offset:1px;border-color:#ff8ac4}.bottom-input--active{border-color:#ec4899;box-shadow:0 0 0 2px #ec489966}.bottom-input-clear{position:absolute;right:.6rem;top:50%;transform:translateY(-50%);width:1.6rem;height:1.6rem;border-radius:9999px;border:none;padding:0;display:flex;align-items:center;justify-content:center;background:transparent;color:#d08bb2;cursor:pointer}.bottom-input-clear:hover{background-color:var(--color-accent-subtle);color:#be185d}.bottom-input-clear:active{transform:translateY(-50%) scale(.96);background-color:var(--color-accent-soft)}.bottom-route-summary-scroll{display:flex;align-items:center;gap:.5rem;padding-top:.25rem;padding-bottom:.3rem;margin-top:.35rem;margin-bottom:.2rem;overflow-x:auto;overflow-y:visible}.bottom-route-chip{flex-shrink:0;border-radius:9999px;padding:.6rem .95rem;border:1px solid rgba(248,187,208,.7);background-color:#fffffff5;color:#2f102f;display:flex;flex-direction:column;align-items:flex-start;box-shadow:none;animation:chip-pop-in .26s cubic-bezier(.16,1,.3,1) both;transition:transform .16s ease-out,background-color .16s ease-out,border-color .16s ease-out;will-change:transform,background-color,border-color}.bottom-route-chip:hover{transform:translateY(-1px);border-color:#f8bbd0f2}.bottom-route-chip--active{background:radial-gradient(circle at 0% 0%,#ffe6f5f5,#ffe6f566),linear-gradient(135deg,#fffffffc,#fff7fcfc);border-color:#f472b6f2}.bottom-route-chip--active .bottom-route-chip-main{color:#be185d}.bottom-route-chip--active .bottom-route-chip-sub{color:#9f1239}.bottom-route-chip-main{font-size:.86rem;font-weight:600}.bottom-route-chip-sub{font-size:.78rem;color:#6b7280}.route-choices-desktop{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.9rem}.route-choice-chip{padding-inline:.9rem}.bottom-sheet-handle{align-self:center;margin-top:.25rem;width:56px;height:18px;border-radius:9999px;border:none;background:transparent;box-shadow:none;display:flex;align-items:center;justify-content:center}.bottom-sheet-handle:before{content:"";width:28px;height:4px;border-radius:9999px;background-color:#94a3b8f2}.update-banner{position:fixed;left:50%;bottom:1rem;transform:translate(-50%);z-index:5;display:inline-flex;align-items:center;gap:.75rem;padding:.55rem .85rem;border-radius:9999px;background:radial-gradient(circle at 0% 0%,#ffe6f5eb,#ffe6f54d),linear-gradient(135deg,#fffffff0,#fff7fcfa);backdrop-filter:blur(18px) saturate(170%);-webkit-backdrop-filter:blur(18px) saturate(170%);box-shadow:0 18px 40px #94a3b88c,0 0 0 1px #f8bbd0cc;animation:banner-slide-up .32s cubic-bezier(.16,1,.3,1) both;will-change:transform,opacity}.update-banner-text{font-size:.8rem;font-weight:500;color:#4b164c}.update-banner-button{border:none;border-radius:9999px;padding:.35rem .9rem;font-size:.8rem;font-weight:600;background:linear-gradient(135deg,#fb7185,#ec4899);color:#fff7fb;box-shadow:0 8px 18px #be185d80;cursor:pointer}.update-banner-button:active{transform:translateY(1px)}.install-guide-backdrop{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;padding:1.5rem 1.1rem;background:radial-gradient(circle at top,#0f172aa6,#0f172ad9);pointer-events:auto;animation:modal-backdrop-fade .22s ease-out both;will-change:opacity}.install-guide-card{width:100%;max-width:420px;border-radius:1.5rem;padding:1.25rem 1.15rem 1.1rem;background:radial-gradient(circle at 0% 0%,#ffe6f5f5,#ffe6f566),linear-gradient(135deg,#fffffffa,#fff7fcfa);backdrop-filter:blur(26px) saturate(180%);-webkit-backdrop-filter:blur(26px) saturate(180%);box-shadow:0 30px 70px #0f172abf,0 0 0 1px #f8bbd0cc;transform:translateY(6px) scale(.96);animation:modal-card-pop .26s cubic-bezier(.16,1,.3,1) forwards;will-change:transform,opacity}.install-guide-title{margin:0 0 .4rem;font-size:1.05rem;font-weight:700;color:#4b164c}.install-guide-subtitle{margin:0 0 .75rem;font-size:.84rem;color:#6b7280}.install-guide-steps{margin:0 0 .75rem;padding-left:1.1rem;font-size:.82rem;color:#4b164c}.install-guide-steps li+li{margin-top:.25rem}.install-guide-note{margin:0 0 .75rem;font-size:.78rem;color:#9ca3af}.install-guide-actions{display:flex;justify-content:flex-end}.install-guide-close-button{border:none;border-radius:9999px;padding:.45rem .9rem;font-size:.82rem;font-weight:600;background:linear-gradient(135deg,#fee2f2,#e5e7eb);color:#4b164c;box-shadow:0 8px 20px #94a3b873;cursor:pointer}@media(max-width:1023.98px){.app-root{max-width:100%}.bottom-sheet-inner{flex-direction:column}.bottom-field{width:100%}.route-result{border-top-left-radius:1.2rem;border-top-right-radius:1.2rem;border-bottom-left-radius:0;border-bottom-right-radius:0}.bottom-sheet--mobile-expanded,.bottom-sheet--with-route{border-bottom-left-radius:0;border-bottom-right-radius:0}}@media(min-width:768px){.app-root{max-width:720px}.app-header{max-width:540px}.bottom-sheet-inner{max-width:540px;margin:0 auto}}@media(min-width:1024px){.app-root{max-width:100%}.app-header{left:1.75rem;top:1.5rem;transform:none;width:340px;max-width:340px}.bottom-sheet{top:50%;bottom:auto;left:1.5rem;right:auto;transform:translateY(-50%);width:360px;max-height:calc(100vh - 3rem);padding:1.2rem 1.1rem 1.1rem;border-radius:1.5rem;box-shadow:none}.bottom-sheet-inner{flex-direction:column;max-width:none}.bottom-route-details{max-height:none;overflow:visible}.route-result-scroll{max-height:calc(100vh - 10rem);overflow-y:auto;padding-right:.3rem}.swap-button{transform:rotate(0)}.bottom-fields-row{flex-direction:column;align-items:stretch}}:root{color-scheme:light}body{background:radial-gradient(circle at 0% 0%,#ffe4f1f5,#ffe4f166),radial-gradient(circle at 100% 100%,#dbeafef5,#dbeafe66),radial-gradient(circle at 15% 100%,rgba(254,249,195,.9),transparent 60%),linear-gradient(135deg,#fdf2ff,#fee2f2 32%,#eef2ff 68%,#fef9c3)}#root{background:radial-gradient(circle at 0% 0%,#fffffff5,#ffffffb3),radial-gradient(circle at 100% 100%,#fffffff5,#e5e7ebbf);color:var(--color-text-primary)}.app-root{color:var(--color-text-primary)}.app-header,.bottom-sheet,.route-placeholder,.route-result,.route-step,.history-item,.update-banner,.install-guide-card,.app-splash-card,.bottom-route-chip{background:var(--color-surface-glass-strong);border-radius:var(--radius-lg);border:1px solid var(--color-border-soft);box-shadow:var(--shadow-soft);backdrop-filter:blur(var(--blur-glass-strong));-webkit-backdrop-filter:blur(var(--blur-glass-strong))}.route-step,.history-item,.bottom-route-chip{border-radius:var(--radius-md)}.app-header-title,.summary-time,.bottom-route-chip-main,.history-title,.install-guide-title{color:var(--color-text-primary)}.app-header-subtitle,.summary-transfers,.step-meta,.history-meta,.install-guide-subtitle,.install-guide-note,.bottom-route-chip-sub{color:var(--color-text-muted)}.error-text{color:var(--color-danger)}.bottom-input,.field-input{background:var(--color-surface-glass-strong);border-radius:var(--radius-pill);border:1px solid var(--color-border-soft);box-shadow:0 10px 26px #0f172a2e}.bottom-input--active,.field-input:focus{border-color:var(--color-accent);box-shadow:0 0 0 1px var(--color-accent-soft),0 12px 30px #0f172a47}.swap-button,.editor-fab,.metro-map-zoom-button,.install-guide-close-button,.update-banner-button,.primary-button{background:var(--color-surface-glass-strong);border-radius:var(--radius-pill);border:1px solid var(--color-border-soft);box-shadow:0 16px 40px #0f172a59;color:var(--color-text-primary)}.swap-button:hover,.editor-fab:hover,.metro-map-zoom-button:hover,.install-guide-close-button:hover,.update-banner-button:hover,.primary-button:hover{background:linear-gradient(135deg,var(--color-surface-glass-strong),var(--color-accent-subtle))}.primary-button,.update-banner-button{background:linear-gradient(135deg,var(--color-accent),#f97316);color:#fdf2f8;border-color:transparent}.primary-button:hover,.update-banner-button:hover{filter:brightness(1.03)}.bottom-sheet{border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg)}.metro-map-wrapper{background:radial-gradient(circle at 0% 0%,#fffffff5,#e5e7ebe6)}.app-splash{background:radial-gradient(circle at 0% 0%,#fffffff5,#ffffffb3),radial-gradient(circle at 100% 100%,#e5e7ebe6,#d1d5dba6)}.install-guide-backdrop{background:radial-gradient(circle at top,#0f172a2e,#0f172a66)}.route-steps{gap:.65rem}.step-station-list{gap:.22rem}.route-result,.route-step{box-shadow:none}
