@charset "UTF-8";
:root{--ink:#244b42;--green:#1c6454;--paper:#fbfbf6;--muted:#7b8a7d;--sage:#84977b;--line:#dce3d9;--coral:#bd704f;--purple:#756691;--shadow:0 7px 28px #1c3b2c16,0 1px 5px #1c3b2c08;--font:-apple-system,BlinkMacSystemFont,"PingFang SC","Microsoft YaHei",sans-serif}
*{box-sizing:border-box}html,body{height:100%;width:100%;margin:0;overflow:hidden}body{font:13px/1.65 var(--font);color:var(--ink);background:#e8eee4}button,input,textarea{font:inherit;color:inherit}button{cursor:pointer;border:0;background:none}a{color:inherit;text-underline-offset:3px}button,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}:focus-visible{outline:2px solid var(--coral);outline-offset:4px}[hidden]{display:none!important}
#map{position:absolute;inset:0;background:#edf0e8;z-index:0}.leaflet-container{font-family:var(--font)}.floating{background:rgba(252,253,247,.95);border:1px solid rgba(255,255,255,.95);box-shadow:var(--shadow);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}.map-brand{position:absolute;left:24px;top:24px;z-index:700;display:flex;align-items:center;gap:13px;width:354px;padding:14px 15px;border-radius:15px}.brand-home{width:40px;height:40px;flex-shrink:0;display:grid;place-items:center;border-radius:50%;background:var(--green);color:#f6d6a1;font-size:28px;text-decoration:none}.map-brand h1{font-size:16px;margin:0;font-weight:650;line-height:1.4;letter-spacing:.5px}.map-brand h1>span{font-size:10px;color:var(--muted);font-weight:400;margin-left:11px;letter-spacing:0}.map-brand p{font-size:10px;color:var(--muted);margin:4px 0 0}.round-button{width:29px;height:29px;border-radius:50%;display:grid;place-items:center;border:1px solid var(--line);background:#fffef8;font-size:15px;flex-shrink:0}.map-brand .round-button{margin-left:auto;font-size:11px}.top-actions{position:absolute;top:29px;right:26px;display:flex;gap:9px;z-index:700}.action-button{border-radius:10px;padding:11px 16px;font-size:12px}.action-button>span{display:inline-grid;place-items:center;background:var(--green);color:white;border-radius:5px;margin-left:4px;min-width:20px;height:20px;font-size:10px}.map-chooser{position:absolute;left:24px;top:117px;z-index:700;width:354px;border-radius:14px;overflow:hidden}.preset-row{display:flex;gap:4px;padding:9px;border-bottom:1px solid #e5e9df}.preset-row>button{padding:8px 10px;border-radius:8px;font-size:11px;white-space:nowrap;flex:1}.preset-row>button.active{background:var(--green);color:#fff}.preset-row>button:hover:not(.active){background:#e9eee4}.category-row{display:flex;align-items:center;gap:4px;padding:9px 10px;flex-wrap:wrap}.category-row>button{border-radius:20px;padding:3px 9px;color:var(--muted);font-size:10px}.category-row>button.active{background:#e3eade;color:var(--green)}.chooser-hint{width:100%;padding:4px 9px 0;color:var(--muted);font-size:9px}.map-tools{position:absolute;top:103px;right:26px;z-index:650;display:grid;gap:8px}.tool-button{width:40px;height:40px;display:grid;place-items:center;border-radius:10px;font-size:20px}.tool-button[aria-pressed=true]{background:var(--green);color:white}.map-status{position:absolute;left:50%;top:28px;transform:translateX(-50%);font-size:10px;color:var(--muted);background:#f9fbf5e8;border:1px solid #fff;border-radius:25px;padding:7px 15px;z-index:600;pointer-events:none}.map-status.error{color:var(--coral)}.map-instruction{position:absolute;top:calc(50% - 20px);left:50%;transform:translateX(-50%);z-index:650;display:flex;align-items:center;gap:8px;padding:8px 11px 8px 15px;border-radius:25px;color:var(--muted);font-size:10px;background:#fcfdf8ed;box-shadow:0 3px 14px #193e2812;white-space:nowrap}.instruction-dot,.status-dot{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--green)}.map-instruction>button{color:#8a988a;padding:0 3px;font-size:16px;line-height:1}.trip-summary{position:absolute;left:24px;bottom:51px;z-index:700;width:354px;border-radius:15px;padding:15px 17px 12px;transition:transform .2s,opacity .2s}.summary-heading{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}.summary-heading>span{display:flex;align-items:center;gap:7px}.summary-heading strong{font-size:11px;font-weight:600}.text-button{font-size:9px;color:var(--muted);padding:3px 0}.summary-metrics{display:grid;grid-template-columns:1fr 1.2fr 1fr;gap:8px}.summary-metrics>div{border-left:1px solid var(--line);padding-left:12px}.summary-metrics>div:first-child{border:0;padding:0}.summary-metrics strong{display:block;font-size:19px;line-height:1.5;font-weight:550;letter-spacing:-.4px;font-variant-numeric:tabular-nums}.summary-metrics span{font-size:8px;color:var(--muted);display:block;margin-top:2px}.summary-footer{border-top:1px solid var(--line);margin-top:13px;padding-top:10px;display:flex;align-items:center;justify-content:space-between;gap:10px}.play-button{display:flex;align-items:center;gap:7px;font-size:10px;color:var(--green);padding:0}.play-button:disabled{color:var(--muted);cursor:default}.play-button>#play-icon{background:#e5ece0;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font-size:9px}.summary-footer>span{color:var(--muted);font-size:8px}.data-attribution{position:absolute;bottom:0;left:0;right:0;z-index:900;background:#fafcf4ef;color:#778676;display:flex;justify-content:space-between;align-items:center;gap:10px;min-height:31px;padding:5px 15px;font-size:8px;line-height:1.5}.leaflet-control-attribution{display:none}.detail-panel{position:absolute;right:24px;top:90px;bottom:52px;z-index:800;width:354px;border-radius:16px;display:flex;flex-direction:column;overflow:hidden;animation:panel-in .22s ease-out}.panel-header{padding:14px 17px 11px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line)}.panel-header>span{font-size:9px;letter-spacing:1px;color:var(--muted)}.panel-content{padding:21px 20px 23px;overflow:auto;overscroll-behavior:contain;flex:1}.panel-content h2{font-size:23px;font-weight:600;line-height:1.4;margin:0 0 10px;letter-spacing:-.3px}.panel-content h3{font-size:12px;margin:20px 0 9px;font-weight:600}.panel-content p{font-size:11px;line-height:1.85;margin:8px 0;color:#637b6a}.panel-tag{display:inline-block;font-size:9px;padding:3px 8px;background:#e7ecdf;color:var(--green);border-radius:5px;margin-bottom:12px}.venue-category{display:flex;align-items:center;gap:10px;font-size:10px;color:var(--muted);margin-bottom:12px}.category-symbol{display:grid;place-items:center;width:37px;height:37px;border-radius:12px;background:#edf0e5;font-size:21px;color:var(--green)}.panel-address{font-size:11px!important;color:var(--ink)!important}.panel-stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;padding:14px 0;margin:13px 0;border-block:1px solid var(--line)}.panel-stats strong{display:block;font-size:19px;line-height:1.5;font-weight:500}.panel-stats span{font-size:9px;color:var(--muted)}.primary-button,.secondary-button,.danger-button{display:flex;align-items:center;justify-content:center;text-align:center;border-radius:8px;padding:11px 14px;text-decoration:none;font-size:11px;min-height:39px}.primary-button{background:var(--green);color:#fff;width:100%}.secondary-button{border:1px solid var(--line);background:#fafcf5;color:var(--ink)}.danger-button{background:#f4e9dc;color:#99583c;width:100%}.button-row{display:flex;gap:8px;margin:10px 0}.button-row>a,.button-row>button{flex:1}.muted-note{font-size:9px!important;color:var(--muted)!important}.rain-note{border-left:2px solid var(--coral);padding-left:10px;color:#98664d!important;margin:15px 0!important}.coordinates-note{border-radius:7px;padding:9px 10px;background:#edf0e5;color:var(--muted);font-size:9px;line-height:1.8;margin:14px 0}.panel-divider{height:1px;background:var(--line);margin:20px 0}.road-step{display:grid;grid-template-columns:20px 1fr;gap:6px;padding:10px 0;border-bottom:1px solid #e5eadf;font-size:10px;line-height:1.7;color:#607560}.road-step>span:first-child{color:var(--green);font-family:Georgia,serif}.road-step small{display:block;font-size:9px;color:var(--muted)}.journey-list{list-style:none;padding:0;margin:15px 0}.journey-row{display:flex;align-items:center;gap:9px;position:relative;border-bottom:1px solid var(--line);padding:12px 0}.journey-row .row-number{font-size:11px;color:var(--sage);width:18px;flex-shrink:0}.journey-title{text-align:left;flex:1;min-width:0;padding:0}.journey-title strong{display:block;font-size:11px;font-weight:550}.journey-title small{color:var(--muted);font-size:9px}.order-buttons{display:flex;gap:4px}.order-buttons button{width:25px;height:26px;border:1px solid var(--line);border-radius:5px;padding:0;font-size:12px;color:var(--muted)}.order-buttons button:disabled{opacity:.3;cursor:default}.route-mini{display:block;font-size:9px;color:var(--green);padding:5px 0 5px 27px;text-align:left}.setting-row{display:flex;align-items:center;justify-content:space-between;padding:14px 0;border-bottom:1px solid var(--line);font-size:11px;gap:10px}.setting-row input[type=time]{border:1px solid var(--line);border-radius:6px;background:var(--paper);padding:5px 9px}.setting-row input[type=checkbox]{accent-color:var(--green);width:17px;height:17px}.cost-item{display:flex;justify-content:space-between;font-size:11px;margin:9px 0;color:#617661}.cost-item>strong{font-weight:500}.source-list{padding-left:17px;color:var(--muted);font-size:10px;line-height:2}.source-list li{margin-bottom:8px}.inline-link{font-size:10px}.toast{position:absolute;left:50%;bottom:58px;transform:translate(-50%,10px);opacity:0;pointer-events:none;z-index:1100;background:var(--green);color:white;padding:11px 18px;border-radius:9px;max-width:calc(100% - 40px);font-size:11px;transition:all .2s;text-align:center}.toast.visible{opacity:1;transform:translate(-50%,0)}.fatal-message{position:fixed;inset:30%;background:var(--paper);z-index:1200;border-radius:15px;padding:30px;font-size:14px}.fatal-message a{display:block;margin-top:15px}
/* All merchant chips share their source building's actual geographic point. */
.venue-map-icon{background:none!important;border:0!important}.venue-stack{position:absolute;left:0;bottom:0;display:flex;flex-direction:column;gap:5px;transform:translate(-50%,-13px);width:max-content;min-width:104px;max-width:150px;pointer-events:none}.venue-stack:after{content:"";position:absolute;left:50%;bottom:-9px;width:1px;height:10px;background:#78947e}.venue-chip{pointer-events:auto;white-space:nowrap;display:flex;align-items:center;gap:7px;text-align:left;background:#fffef9f7;color:#415d47;border:1px solid #fff;border-radius:8px;padding:6px 10px 6px 6px;box-shadow:0 3px 11px #1b48361a;font-size:10px;line-height:1.35;transition:all .15s}.venue-chip>i{font-style:normal;width:23px;height:23px;display:grid;place-items:center;border-radius:6px;background:#eaf0e3;font-size:12px;flex-shrink:0}.venue-chip>span{display:block}.venue-chip small{display:block;font-size:7px;color:#8b9b87;margin-top:1px;letter-spacing:.1px}.venue-chip.selected{background:var(--green);color:white;border-color:var(--green)}.venue-chip.selected>i{background:#ffffff25;color:#fff;font-size:11px}.venue-chip.selected small{color:#d8e5d7}.venue-chip:hover{box-shadow:0 3px 14px #1b48362c;transform:translateY(-1px)}.venue-chip.focused{outline:3px solid #e5ad7270;outline-offset:2px}.anchor-point{width:9px;height:9px;background:var(--green);border:2px solid white;border-radius:50%;box-shadow:0 0 0 3px #1c64541a}.map-label{font-family:var(--font);font-size:9px;font-weight:450;text-shadow:0 1px 2px #fff,1px 0 2px #fff;color:#a4aca0;white-space:nowrap;pointer-events:none;transform:translate(-50%,-50%);text-align:center}.map-label.building{font-size:10px;color:#9aa593;letter-spacing:.6px}.map-label.road{font-size:9px;color:#a0a99a;letter-spacing:4px}.map-label.lake{font-family:"Songti SC",serif;color:#7dada4;font-size:24px;letter-spacing:15px}.map-label.minor{font-size:8px;color:#b3baaa}.segment-label{border:0!important;box-shadow:0 1px 5px #24493018!important;border-radius:9px!important;background:#fbfdf4ee!important;color:var(--green)!important;font-size:8px!important;padding:2px 6px!important}.segment-label:before{display:none!important}.leaflet-tooltip.road-tooltip{border:0;border-radius:7px;font-size:10px;background:#fcfdf6;color:var(--ink);box-shadow:var(--shadow);padding:7px 10px}.walker-icon{width:27px!important;height:27px!important;border:3px solid white!important;border-radius:50%;background:var(--coral)!important;color:#fff;display:grid!important;place-items:center;box-shadow:0 0 0 5px #b66d4222,0 2px 10px #1b3d3525;font-size:15px;line-height:1}.leaflet-control-scale{margin-bottom:43px!important;margin-left:calc(50vw - 50px)!important}.leaflet-control-scale-line{background:#fcfdf4bd;border-color:#899a80;color:#75856c;font-size:8px}.leaflet-pane.leaflet-tooltip-pane{z-index:610}.leaflet-interactive.route-line:focus{outline:0;filter:drop-shadow(0 0 3px #a8c7ae)}
@keyframes panel-in{from{opacity:0;transform:translateX(12px)}to{opacity:1;transform:translateX(0)}}dialog{border:1px solid var(--line);border-radius:14px;width:min(500px,calc(100% - 36px));padding:22px;background:var(--paper)}dialog::backdrop{background:#17392c70}dialog h2{font-size:16px}dialog textarea{width:100%;height:180px;font-size:11px;background:white;border:1px solid var(--line);border-radius:8px;padding:10px;margin-bottom:12px}
@media(max-width:1000px){.map-status{top:auto;bottom:44px;left:50%;font-size:8px;padding:4px 10px}.detail-panel{width:330px}.map-brand,.map-chooser,.trip-summary{width:320px}.preset-row>button{font-size:10px;padding:8px}.summary-metrics strong{font-size:17px}.chooser-hint{font-size:8px}.attribution-extra{display:none}}
@media(max-width:680px){.map-brand{left:12px;top:12px;width:calc(100% - 116px);max-width:310px;border-radius:12px;padding:10px;gap:9px}.brand-home{height:33px;width:33px;font-size:23px}.map-brand h1{font-size:14px}.map-brand h1>span{display:none}.map-brand p{font-size:9px;margin-top:2px}.map-brand .round-button{width:24px;height:24px;font-size:10px}.top-actions{top:15px;right:12px;gap:5px;flex-direction:column}.action-button{font-size:9px;padding:5px 9px;border-radius:7px;line-height:1.4}.action-button>span{font-size:8px;height:15px;min-width:16px;margin-left:3px}.map-chooser{left:12px;top:88px;width:calc(100% - 24px);max-width:354px;border-radius:12px}.preset-row{padding:7px;gap:3px}.preset-row>button{font-size:10px;padding:7px}.category-row{padding:6px 8px}.category-row>button{font-size:9px;padding:2px 8px}.chooser-hint{font-size:8px;width:auto;margin-left:auto;padding:0 3px;max-width:132px}.map-tools{right:12px;top:210px;gap:7px}.tool-button{height:33px;width:33px;border-radius:8px;font-size:18px}.trip-summary{left:12px;bottom:44px;width:calc(100% - 24px);max-width:354px;border-radius:12px;padding:11px 13px 9px}.summary-heading{margin-bottom:8px}.summary-heading strong{font-size:10px}.summary-metrics strong{font-size:18px}.summary-metrics span{font-size:8px}.summary-footer{padding-top:7px;margin-top:8px}.summary-footer>span{font-size:8px}.summary-metrics>div{padding-left:12px}.text-button{font-size:8px}.map-instruction{top:48%;font-size:8px;padding:6px 9px;gap:6px;max-width:calc(100vw - 32px)}.map-instruction>button{font-size:15px}.map-status{bottom:205px;max-width:calc(100% - 40px);white-space:nowrap;font-size:8px}.data-attribution{font-size:7px;min-height:30px;padding:5px 8px;line-height:1.5}.detail-panel{left:8px;right:8px;top:auto;bottom:37px;width:auto;max-height:54vh;border-radius:16px;box-shadow:0 -4px 30px #193e2b24;animation:panel-in .2s}.panel-header{padding:10px 14px 8px}.panel-header>span{font-size:8px}.panel-content{padding:16px 18px 21px}.panel-content h2{font-size:21px}.panel-content p{font-size:11px}.panel-content .primary-button,.panel-content .danger-button{position:sticky;bottom:0;z-index:3;box-shadow:0 0 0 5px #fcfdf6;min-height:40px}.panel-open .trip-summary{opacity:0;pointer-events:none;transform:translateY(15px)}.panel-open .map-status{display:none}.venue-chip{font-size:9px;padding:5px 8px 5px 5px;gap:5px;border-radius:7px}.venue-chip>i{width:21px;height:21px;font-size:11px}.venue-chip small{font-size:7px}.venue-stack{min-width:92px;gap:4px}.map-label.building{font-size:8px}.map-label.road{font-size:8px;letter-spacing:2px}.map-label.lake{font-size:20px}.leaflet-control-scale{margin-left:calc(100vw - 115px)!important;margin-bottom:208px!important}.toast{bottom:213px;font-size:10px}.panel-open .toast{bottom:calc(54vh + 48px)}.fatal-message{inset:25% 20px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
