:root{--bg:#0f172a;--surface:#fff;--text:#1e293b;--muted:#64748b;--line:#e2e8f0;color:var(--text);font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif}body{background:var(--bg);overflow:hidden}:root{--green-900:#0c3b32;--green-800:#0d4d41;--green-700:#0f766e;--green-500:#14b8a6;--coral:#ff6a3d;--coral-dark:#e8542a;--amber:#f59e0b;--ink:#16241f;--muted:#5e6f69;--surface:#fff;--bg:#eaf0ed;--line:#e1e8e4;--font-display:"Fraunces", Georgia, serif;--font-ui:"Plus Jakarta Sans", system-ui, sans-serif;--shadow-sm:0 2px 8px #0c3b321a;--shadow-md:0 6px 22px #0c3b3229;--shadow-lg:0 14px 40px #0c3b323d;font-family:var(--font-ui);color:var(--ink)}*{box-sizing:border-box}html,body,#root{width:100%;height:100%;margin:0}body{background:var(--bg)}button{cursor:pointer;font-family:inherit}.app{width:calc(100vw / var(--ui-scale,1));height:calc(100dvh / var(--ui-scale,1));zoom:var(--ui-scale,1);background:var(--bg);flex-direction:column;display:flex}.topbar{background:linear-gradient(110deg, var(--green-900), var(--green-700) 70%);color:#fff;justify-content:space-between;align-items:center;padding:13px 18px;display:flex}.brand{color:inherit;cursor:pointer;background:0 0;border:none;align-items:center;gap:10px;padding:0;display:flex}.brand-mark{background:var(--coral);color:#fff;border-radius:10px;place-items:center;width:32px;height:32px;display:grid;box-shadow:0 4px 12px #ff6a3d73}.brand-name{font-family:var(--font-display);letter-spacing:-.01em;font-size:21px;font-weight:600}.brand-name em{color:var(--green-500);margin-left:4px;font-style:italic;font-weight:500}.top-actions{align-items:center;gap:10px;display:flex}.scale-ctl{background:#ffffff24;border:1px solid #ffffff40;border-radius:999px;align-items:center;gap:2px;padding:3px;display:inline-flex}.scale-ctl button{color:#fff;background:0 0;border:none;border-radius:50%;place-items:center;width:28px;height:28px;transition:background .15s;display:grid}.scale-ctl button:hover{background:#ffffff38}.scale-a{color:#fff;padding:0 2px;font-size:13px;font-weight:700}.itin-toggle{color:#fff;background:#ffffff24;border:1px solid #ffffff40;border-radius:999px;align-items:center;gap:7px;padding:8px 15px;font-size:14.5px;font-weight:600;transition:background .15s;display:inline-flex}.itin-toggle:hover{background:#ffffff42}.toolbar{border-bottom:1px solid var(--line);box-shadow:var(--shadow-sm);z-index:5;background:#fff;flex-direction:column;gap:11px;padding:12px 14px;display:flex}.search{z-index:30;position:relative}.search-box{height:50px;box-shadow:var(--shadow-md);background:#fff;border-radius:14px;align-items:center;gap:10px;padding:0 14px;display:flex}.search-icon{color:var(--green-700);place-items:center;display:grid}.search-box input{color:var(--ink);background:0 0;border:none;outline:none;flex:1;min-width:0;font-family:inherit;font-size:16px}.search-box input::placeholder{color:#9aa8a3}.search-clear{width:28px;height:28px;color:var(--muted);background:#eef2f0;border:none;border-radius:50%;place-items:center;display:grid}.search-results{box-shadow:var(--shadow-lg);background:#fff;border-radius:14px;max-height:62vh;margin:0;padding:8px;list-style:none;position:absolute;top:58px;left:0;right:0;overflow-y:auto}.search-results li button{text-align:left;width:100%;color:var(--ink);background:0 0;border:none;border-radius:11px;align-items:center;gap:13px;padding:11px 10px;font-size:15px;display:flex}.search-results li button:hover{background:#f1f6f4}.res-icon{background:color-mix(in srgb, var(--c) 16%, white);width:38px;height:38px;color:var(--c);border-radius:11px;flex:none;place-items:center;display:grid}.res-text{flex-direction:column;line-height:1.25;display:flex}.res-text small{color:var(--muted);font-size:12.5px}.search-empty{color:var(--muted);padding:14px 12px;font-size:14px}.filters{-webkit-overflow-scrolling:touch;scrollbar-width:none;gap:9px;padding:0;display:flex;overflow-x:auto}.filters::-webkit-scrollbar{display:none}.filter{border:1.5px solid var(--line);color:var(--muted);white-space:nowrap;box-shadow:var(--shadow-sm);background:#fff;border-radius:999px;flex:none;align-items:center;gap:7px;padding:9px 15px;font-size:14px;font-weight:600;transition:all .15s;display:inline-flex}.filter svg{color:#9aa8a3}.filter.on{color:var(--c,var(--green-700));border-color:var(--c,var(--green-700));background:color-mix(in srgb, var(--c,var(--green-700)) 12%, white)}.filter.on svg{color:var(--c,var(--green-700))}.stage{flex:1;min-height:0;position:relative}.map{position:absolute;inset:0}.poi-pin{background:var(--pin);color:#fff;cursor:pointer;border:2.5px solid #fff;border-radius:50%;place-items:center;width:32px;height:32px;transition:transform .12s;display:grid;position:relative;transform:translateY(-6px);box-shadow:0 3px 8px #0000004d}.poi-pin:after{content:"";border-left:6px solid #0000;border-right:6px solid #0000;border-top:8px solid var(--pin);filter:drop-shadow(0 2px 1px #0003);position:absolute;bottom:-7px;left:50%;transform:translate(-50%)}.poi-pin.is-hotel{width:38px;height:38px;box-shadow:0 0 0 4px color-mix(in srgb, var(--pin) 35%, transparent), 0 3px 8px #0000004d}.poi-pin.is-sel{z-index:10;width:42px;height:42px;box-shadow:0 0 0 5px color-mix(in srgb, var(--pin) 30%, transparent), 0 6px 14px #00000059}.gm-style-iw-c{border-radius:14px!important;padding:0!important;overflow:hidden!important;box-shadow:0 10px 30px #0c3b3247!important}.gm-style-iw-d{max-width:none!important;padding:0!important;overflow:hidden!important}.hovercard{cursor:pointer;width:240px;font-family:var(--font-ui)}.hc-img{object-fit:cover;background:#e2e8e6;width:100%;height:112px;display:block}.hc-body{padding:10px 13px 13px}.hc-cat{color:var(--c);text-transform:uppercase;letter-spacing:.03em;align-items:center;gap:5px;font-size:11px;font-weight:800;display:inline-flex}.hc-name{font-family:var(--font-display);color:var(--ink);margin:3px 0 5px;font-size:15.5px;font-weight:600;line-height:1.15;display:block}.hc-desc{color:#4a5a54;-webkit-line-clamp:3;-webkit-box-orient:vertical;margin:0 0 7px;font-size:12.5px;line-height:1.42;display:-webkit-box;overflow:hidden}.hc-more{color:var(--green-700);font-size:12px;font-weight:700}.zone-label{letter-spacing:.02em;color:var(--z);border:1.5px solid var(--z);white-space:nowrap;text-transform:uppercase;background:#ffffffe6;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:800;display:inline-block;box-shadow:0 2px 6px #0003}.station-dot{background:#1d4ed8;border:2.5px solid #fff;border-radius:50%;width:11px;height:11px;box-shadow:0 1px 4px #0006}.bus-stop-pin{color:#475569f2;background:#fffffff5;border:1.5px solid #64748b8c;border-radius:50%;place-items:center;width:18px;height:18px;display:grid;box-shadow:0 1px 4px #0f172a2e}.bus-stop-pin.compact{width:16px;height:16px}.bus-stop-pin svg{display:block}.me-dot{background:#2563eb;border:3px solid #fff;border-radius:50%;width:18px;height:18px;position:relative;box-shadow:0 1px 6px #00000059}.me-pulse{background:#2563eb4d;border-radius:50%;animation:1.8s ease-out infinite pulse;position:absolute;inset:-6px}@keyframes pulse{0%{opacity:.8;transform:scale(.6)}to{opacity:0;transform:scale(2.2)}}.map-controls{z-index:15;flex-direction:column;gap:10px;display:flex;position:absolute;bottom:26px;right:14px}.fab{width:50px;height:50px;color:var(--green-700);box-shadow:var(--shadow-md);background:#fff;border:none;border-radius:16px;place-items:center;transition:transform .12s,background .12s;display:grid}.fab:hover{transform:translateY(-2px)}.fab.active{background:var(--green-700);color:#fff}.fab.loading svg{animation:.9s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.legend{z-index:18;width:290px;max-width:calc(100% - 28px);max-height:70%;box-shadow:var(--shadow-lg);background:#fff;border-radius:16px;padding:14px 16px 16px;position:absolute;bottom:26px;left:14px;overflow-y:auto}.legend-head{justify-content:space-between;align-items:center;margin-bottom:8px;display:flex}.legend-head h3{font-family:var(--font-display);margin:0;font-size:16px;font-weight:600}.legend-head button{width:28px;height:28px;color:var(--muted);background:#eef2f0;border:none;border-radius:50%;place-items:center;display:grid}.legend-section{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);align-items:center;gap:6px;margin:12px 0 7px;font-size:12px;font-weight:700;display:flex}.legend-lines,.legend-zones{gap:8px;margin:0;padding:0;list-style:none;display:grid}.legend-lines li{align-items:center;gap:11px;display:flex}.line-swatch{background:var(--lc);border-radius:3px;flex:none;width:26px;height:5px}.line-swatch.dashed{background:repeating-linear-gradient(90deg, var(--lc) 0 5px, transparent 5px 9px)}.line-info{flex-direction:column;line-height:1.25;display:flex}.line-info small{color:var(--muted);align-items:center;gap:5px;font-size:12px;display:inline-flex}.legend-zones{grid-template-columns:1fr 1fr}.legend-zones li{align-items:center;gap:8px;font-size:13.5px;display:flex}.zone-swatch{background:color-mix(in srgb, var(--zc) 25%, white);border:2px solid var(--zc);border-radius:50%;flex:none;width:14px;height:14px}.legend-tip{color:#4a5a54;margin:9px 0 0;font-size:12.5px;line-height:1.45}.legend-note{color:#516058;align-items:center;gap:8px;margin-top:10px;font-size:12px;display:flex}.route-banner{z-index:16;background:var(--green-800);color:#fff;max-width:calc(100% - 28px);box-shadow:var(--shadow-md);border-radius:999px;align-items:center;gap:9px;padding:9px 10px 9px 15px;font-size:13.5px;display:inline-flex;position:absolute;top:14px;left:50%;transform:translate(-50%)}.route-banner b{font-weight:700}.route-banner button{color:#fff;background:#ffffff2e;border:none;border-radius:50%;place-items:center;width:26px;height:26px;display:grid}.panel{background:var(--surface);max-height:80%;box-shadow:var(--shadow-lg);z-index:20;border-radius:22px 22px 0 0;padding:22px 20px 32px;animation:.2s ease-out slideUp;position:absolute;bottom:0;left:0;right:0;overflow-y:auto}@keyframes slideUp{0%{opacity:.4;transform:translateY(24px)}}.panel-close{width:34px;height:34px;color:var(--muted);z-index:2;background:#eef2f0;border:none;border-radius:50%;place-items:center;display:grid;position:absolute;top:14px;right:14px}.panel-title{font-family:var(--font-display);letter-spacing:-.01em;margin:10px 0 6px;padding-right:34px;font-size:24px;font-weight:600;line-height:1.15}.chip{background:color-mix(in srgb, var(--c) 15%, white);color:var(--c);border-radius:999px;align-items:center;gap:6px;padding:5px 12px;font-size:12.5px;font-weight:700;display:inline-flex}.rating{align-items:center;gap:7px;font-size:14px;display:flex}.rating .open{color:#16a34a;font-weight:700}.rating .closed{color:#dc2626;font-weight:700}.streetview{background:#e2e8e6;border:0;border-radius:16px;width:100%;height:220px;margin:14px 0}.desc{color:#33433d;font-size:15px;line-height:1.55}.prices{border:1px solid var(--line);background:#f6faf8;border-radius:14px;margin:14px 0;padding:13px 15px}.price-row{color:#2c3a35;align-items:center;gap:9px;padding:4px 0;font-size:14px;display:flex}.price-row svg{color:var(--green-700);flex:none}.price-note{color:var(--muted);margin:6px 0 0;font-size:11.5px;font-style:italic}.travel{margin:16px 0}.rec{border-radius:15px;flex-direction:column;gap:4px;padding:13px 15px;display:flex}.rec-mode{align-items:center;gap:8px;font-size:16px;font-weight:800;display:inline-flex}.rec-walk{background:color-mix(in srgb, var(--green-500) 16%, white);color:var(--green-800)}.rec-metro{color:#1e40af;background:#dbeafe}.rec-reason{opacity:.95;font-size:13px;line-height:1.45}.facts{color:#33433d;gap:9px;margin:12px 0 0;padding:0;font-size:13.5px;list-style:none;display:grid}.facts li{align-items:flex-start;gap:8px;display:flex}.facts svg{color:var(--green-700);flex:none;margin-top:1px}.route-btn{border:1.5px solid var(--green-700);width:100%;color:var(--green-700);background:#fff;border-radius:13px;justify-content:center;align-items:center;gap:8px;margin-top:14px;padding:12px;font-size:14.5px;font-weight:700;transition:all .15s;display:inline-flex}.route-btn:hover{background:color-mix(in srgb, var(--green-700) 8%, white)}.route-btn.on{background:var(--green-700);color:#fff}.days{margin:16px 0}.days-label{color:var(--muted);margin-bottom:8px;font-size:13px;font-weight:600;display:block}.days-row{flex-wrap:wrap;gap:7px;display:flex}.day-btn{border:1.5px solid var(--line);color:var(--muted);background:#fff;border-radius:10px;padding:9px 13px;font-size:14px;font-weight:600}.day-btn.active{background:var(--green-800);color:#fff;border-color:var(--green-800)}.cta{background:var(--coral);color:#fff;border-radius:14px;justify-content:center;align-items:center;gap:9px;margin:10px 0 4px;padding:14px;font-size:15px;font-weight:700;text-decoration:none;transition:background .15s;display:flex;box-shadow:0 6px 16px #ff6a3d59}.cta:hover{background:var(--coral-dark)}.reviews{border-top:1px solid var(--line);margin-top:20px;padding-top:16px}.reviews h3{margin:0 0 12px;font-size:16px}.review{margin-bottom:15px;font-size:14px}.review-head{flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:3px;display:flex}.review-stars{gap:1px;display:inline-flex}.review p{color:#4a5a54;margin:2px 0;line-height:1.5}.muted{color:var(--muted);font-size:13.5px}.itin-day h3{font-family:var(--font-display);color:var(--green-800);margin:16px 0 8px;font-size:16px;font-weight:600}.itin-day ul{gap:7px;margin:0;padding:0;list-style:none;display:grid}.itin-day li{background:#f4f8f6;border-radius:12px;justify-content:space-between;align-items:center;gap:8px;padding:7px 8px 7px 10px;display:flex}.link{color:var(--ink);text-align:left;background:0 0;border:none;flex:1;align-items:center;gap:10px;padding:4px 0;font-size:14.5px;font-weight:600;display:flex}.link-icon{background:color-mix(in srgb, var(--c) 16%, white);width:30px;height:30px;color:var(--c);border-radius:9px;flex:none;place-items:center;display:grid}.remove{color:#9aa8a3;background:0 0;border:none;place-items:center;width:28px;height:28px;display:grid}.setup{background:linear-gradient(140deg, var(--green-900), var(--green-700));place-items:center;height:100%;padding:20px;display:grid}.setup-card{max-width:470px;box-shadow:var(--shadow-lg);background:#fff;border-radius:20px;padding:32px}.setup-card h1{font-family:var(--font-display);color:var(--green-800);margin-top:0}.setup-card pre{background:var(--green-900);color:#d7f0ea;border-radius:10px;padding:13px;font-size:13px;overflow-x:auto}.setup-card code{background:#eef2f0;border-radius:5px;padding:1px 6px;font-size:13px}.landing{z-index:50;background:radial-gradient(1200px 600px at 80% -10%, var(--green-700), transparent), linear-gradient(150deg, var(--green-900) 10%, var(--green-800) 90%);color:#fff;justify-content:center;align-items:center;padding:32px 22px;animation:.3s ease-out fadeIn;display:flex;position:absolute;inset:0;overflow-y:auto}@keyframes fadeIn{0%{opacity:0}}.landing-glow{pointer-events:none;background:radial-gradient(circle,#ff6a3d4d,#0000 68%);width:460px;height:460px;position:absolute;bottom:-140px;right:-100px}.landing-inner{width:100%;max-width:560px;position:relative}.landing-mark{background:var(--coral);color:#fff;border-radius:18px;place-items:center;width:56px;height:56px;margin-bottom:22px;display:grid;box-shadow:0 10px 30px #ff6a3d80}.landing-title{font-family:var(--font-display);letter-spacing:-.02em;margin:0 0 14px;font-size:clamp(38px,8vw,56px);font-weight:600;line-height:1.02}.landing-title em{color:var(--green-500);font-style:italic;font-weight:500;display:block}.landing-tagline{color:#ffffffdb;max-width:480px;margin:0 0 22px;font-size:17px;line-height:1.55}.landing-trip{flex-wrap:wrap;gap:9px;margin-bottom:26px;display:flex}.trip-chip{background:#ffffff1f;border:1px solid #fff3;border-radius:999px;align-items:center;gap:7px;padding:8px 14px;font-size:13.5px;font-weight:600;display:inline-flex}.landing-features{gap:13px;margin:0 0 30px;padding:0;list-style:none;display:grid}.landing-features li{color:#ffffffeb;align-items:center;gap:13px;font-size:15px;display:flex}.feat-icon{width:38px;height:38px;color:var(--green-500);background:#14b8a62e;border-radius:11px;flex:none;place-items:center;display:grid}.landing-actions{flex-wrap:wrap;gap:12px;margin-bottom:24px;display:flex}.btn-primary{background:var(--coral);color:#fff;border:none;border-radius:14px;align-items:center;gap:9px;padding:15px 26px;font-size:16px;font-weight:700;transition:transform .15s,background .15s;display:inline-flex;box-shadow:0 10px 26px #ff6a3d73}.btn-primary:hover{background:var(--coral-dark);transform:translateY(-2px)}.btn-ghost{color:#fff;background:#ffffff1a;border:1px solid #ffffff47;border-radius:14px;align-items:center;gap:9px;padding:15px 22px;font-size:15px;font-weight:600;transition:background .15s;display:inline-flex}.btn-ghost:hover{background:#fff3}.landing-foot{color:#ffffff8c;margin:0;font-size:12.5px}.ai-panel{flex-direction:column;display:flex}.ai-head{align-items:center;gap:10px;margin-bottom:14px;display:flex}.ai-icon{background:color-mix(in srgb, var(--green-700) 15%, white);width:32px;height:32px;color:var(--green-700);border-radius:50%;place-items:center;display:grid}.chat-area{flex-direction:column;flex:1;gap:12px;min-height:200px;max-height:400px;margin-bottom:16px;padding-right:8px;display:flex;overflow-y:auto}.chat-bubble{border-radius:14px;max-width:85%;padding:10px 14px;font-size:14.5px;line-height:1.5}.chat-bubble.ai{border:1px solid var(--line);color:#2c3a35;background:#f4f8f6;border-bottom-left-radius:4px;align-self:flex-start}.chat-bubble.user{background:var(--green-700);color:#fff;border-bottom-right-radius:4px;align-self:flex-end}.chat-bubble.loading{color:var(--muted);align-items:center;gap:8px;font-size:13.5px;font-style:italic;display:flex}.chat-input{gap:8px;display:flex}.chat-input input{border:1px solid var(--line);box-shadow:var(--shadow-sm);background:#fff;border-radius:999px;outline:none;flex:1;padding:10px 16px;font-size:14.5px}.chat-input input:focus{border-color:var(--green-500)}.chat-input button{background:var(--green-700);color:#fff;width:42px;height:42px;box-shadow:var(--shadow-sm);border:none;border-radius:50%;place-items:center;transition:opacity .15s;display:grid}.chat-input button:disabled{opacity:.5;cursor:not-allowed}@media (width>=900px){.panel{border-radius:0;width:420px;max-height:none;animation:.2s ease-out slideRight;inset:0 0 0 auto;box-shadow:-8px 0 30px #0c3b322e}@keyframes slideRight{0%{opacity:.4;transform:translate(30px)}}.search{max-width:560px}.map-controls{bottom:30px}}
