body.map-mode{overflow:hidden}.map-mode .header{height:74px;max-width:none;padding:0 32px;background:var(--white);border-bottom:1px solid var(--line)}.map-mode .header .brand{font-size:20px}.map-mode #main{margin:0;max-width:none;height:calc(100dvh - 108px);min-height:0}.map-mode .footer{display:none}.map-workspace{display:grid;grid-template-columns:392px minmax(0,1fr);height:100%;position:relative}.map-canvas-wrap{grid-column:2;grid-row:1;position:relative;min-width:0;height:100%;background:#f0ece6;overflow:hidden}#family-map{height:100%;width:100%;z-index:0;background:#f0ece6}.map-mode .leaflet-tile-pane{filter:grayscale(.85) contrast(.65) brightness(1.25);opacity:.6}.map-mode .map-detailed .leaflet-tile-pane{filter:saturate(.65);opacity:1}.map-controls button.map-detail-toggle{font-size:11px;color:var(--primary)}.map-controls button.map-detail-toggle[aria-pressed=true]{background:var(--pale)}.map-toolbar{position:absolute;top:24px;left:24px;right:85px;z-index:401;pointer-events:none}.map-toolbar>*{pointer-events:auto}#map-search{display:flex;align-items:center;gap:12px;max-width:435px;background:var(--white);border:1px solid #e6ddd4;border-radius:13px;padding:5px 10px 5px 17px;box-shadow:0 4px 16px #344d3917;height:52px}#map-search>span{color:#66738a;display:flex}#map-search input{flex:1;min-width:0;border:0;background:transparent;color:var(--ink);outline:none;font-size:14px}#map-search button{width:38px;height:38px;display:grid;place-items:center;border-radius:9px;background:#f3eee8}.map-chips{display:flex;gap:8px;margin-top:12px;flex-wrap:wrap}.map-chip{background:var(--white);border:1px solid #e6ddd4;border-radius:24px;box-shadow:0 2px 5px #233d3110;display:flex;align-items:center;gap:7px;padding:9px 14px;font-size:12px;min-height:40px;white-space:nowrap}.map-chip svg{width:17px;height:17px}.map-chip.on{background:var(--primary);border-color:var(--primary);color:#fff}.map-controls{position:absolute;right:24px;top:24px;display:grid;gap:8px;z-index:402}.map-controls button{width:44px;height:44px;display:grid;place-items:center;background:var(--white);border:1px solid #e6ddd4;border-radius:12px;box-shadow:0 4px 12px #344d3917;font-size:22px}.map-controls button:first-child{margin-bottom:10px;color:var(--primary)}.map-controls button:disabled{opacity:.5}.map-legend{position:absolute;bottom:43px;right:18px;display:flex;gap:14px;align-items:center;background:#fffffff0;padding:8px 13px;border-radius:8px;font-size:10px;z-index:400;pointer-events:none}.map-legend i{display:inline-block;width:8px;height:8px;background:#c64a2c;border-radius:3px;margin-right:5px}.map-legend i.outdoor{background:var(--primary)}.origin-label{position:absolute;bottom:43px;left:18px;background:#fffffff0;padding:8px 12px;font-size:10px;border-radius:8px;z-index:400}.nearby-panel{grid-column:1;grid-row:1;background:var(--paper);border-right:1px solid #e6ddd4;display:flex;flex-direction:column;min-height:0;z-index:403;box-shadow:5px 0 14px #39513206}.nearby-heading{padding:26px 23px 0}.nearby-heading .eyebrow{font-size:9px;letter-spacing:.13em}.nearby-title h1{font-size:27px;margin:10px 0 9px;letter-spacing:.005em}.nearby-context{display:flex;justify-content:space-between;align-items:center;font-size:11px;color:var(--muted);gap:5px}.text-button{font-size:11px;color:var(--primary);padding:5px 0}.weather-mini{display:flex;align-items:center;gap:12px;background:#fff0ab;padding:13px 14px;border-radius:11px;margin:18px 0 14px;color:#69531c;font-size:12px}.weather-mini svg{width:25px;height:25px}.weather-mini small{font-size:10px;color:var(--muted);display:block;margin-top:3px}.nearby-count{display:flex;align-items:center;justify-content:space-between;font-size:12px;padding:5px 0 12px}.nearby-count .sort{font-size:10px;max-width:125px}.nearby-list{overflow:auto;overscroll-behavior:contain;padding:0 17px 8px;position:relative;scrollbar-width:thin}.nearby-card{margin:0 0 12px;padding:15px;background:var(--white);border:1px solid var(--line);border-radius:14px;transition:border-color .15s,background .15s}.nearby-card.selected{border-color:#2a72ad;background:#eaf3fb;box-shadow:0 0 0 1px #2a72ad33}.nearby-select{padding:0;display:flex;gap:12px;text-align:left;width:100%}.nearby-image{width:91px;height:107px;flex:none;border-radius:9px;overflow:hidden;position:relative}.nearby-image .nearby-setting{position:absolute;bottom:5px;left:5px;background:#fffdf2eb;padding:1px 6px;border-radius:4px;font-size:9px}.nearby-copy{min-width:0;flex:1}.nearby-category{font-size:9px;color:var(--muted)}.nearby-copy h2{font:600 15px/1.55 var(--sans);margin:5px 0}.nearby-meta{font-size:10px;color:var(--muted)}.nearby-meta span{margin:0 4px}.parent-tag{display:inline-flex;align-items:center;gap:5px;font-size:10px;color:#225b50;background:#d8f5df;padding:3px 6px;border-radius:4px;margin-top:8px}.parent-tag svg{width:14px;height:14px}.nearby-bottom{display:flex;align-items:center;gap:8px;font-size:10px;margin-top:10px}.nearby-bottom>span{margin-right:auto;color:var(--muted)}.nearby-bottom button{min-height:34px}.nearby-bottom button[aria-pressed=true]{color:var(--coral)}.nearby-bottom button[aria-pressed=true] svg{fill:#e5484d;stroke:#e5484d}.nearby-bottom svg{width:18px;height:18px}.nearby-detail{background:#e3eff9;border-radius:7px;padding:5px 9px;color:var(--primary);font-size:11px}.nearby-reason{font-size:10px;color:#2a6aa3;border-top:1px solid var(--line);padding-top:10px;margin-top:6px;display:flex;gap:6px}.nearby-reason svg{width:14px;height:14px;flex:none}.panel-foot{font-size:9px;padding:10px 17px;color:var(--muted);border-top:1px solid var(--line);margin-top:auto;background:var(--paper)}.place-pin-wrap{background:none;border:0}.place-pin{display:inline-flex;align-items:center;gap:7px;border:2px solid #fff;color:#fff;background:#c64a2c;box-shadow:0 3px 9px #3444353d;padding:8px 11px;border-radius:22px;white-space:nowrap;font:500 12px var(--sans);position:relative}.place-pin:after{content:'';position:absolute;bottom:-5px;left:15px;width:8px;height:8px;background:inherit;border-bottom:2px solid #fff;border-right:2px solid #fff;transform:rotate(45deg)}.place-pin svg{width:18px;height:18px}.place-pin.outdoor{background:#2a72ad}.place-pin.active{background:#24699f;outline:5px solid #fff8;transform:scale(1.06);z-index:999}.map-load-error{position:absolute;bottom:86px;left:20px;right:20px;border-radius:8px;padding:9px 12px;background:#fff6e5;color:#805932;font-size:12px;z-index:410}.nearby-empty{padding:25px 15px;text-align:center;font-size:12px}.nearby-empty h2{font:600 17px var(--sans);margin:12px 0}.nearby-empty p{color:var(--muted);margin-bottom:20px}.sheet-handle,.mobile-expand{display:none}.map-mode .leaflet-control-attribution{font-size:10px;padding:4px 7px;background:#fffffff0}.map-mode .toast{z-index:1200}dialog{z-index:2000}.leaflet-container:focus-visible{outline:3px solid var(--coral);outline-offset:-3px}
@media(min-width:651px) and (max-width:1000px){.map-workspace{grid-template-columns:340px minmax(0,1fr)}.nearby-heading{padding:20px 18px 0}.nearby-list{padding:0 12px}.nearby-card{padding:12px}.nearby-image{width:72px;height:99px}.nearby-copy h2{font-size:14px}.map-toolbar{top:18px;left:16px;right:70px}.map-controls{right:14px;top:18px}.map-chips{gap:5px}.map-chip{font-size:10px;padding:7px 10px}.map-legend{left:12px;right:auto;font-size:9px}.origin-label{bottom:82px;left:12px}.nearby-title h1{font-size:25px}.map-mode .header{padding:0 23px}}
@media(max-width:800px){.map-mode .header{height:62px;padding:0 19px}.map-mode .header .brand{font-size:17px}.map-mode #main{height:calc(100dvh - 93px - 74px - env(safe-area-inset-bottom));min-height:340px;margin:0}.map-workspace{display:block;height:100%}.map-canvas-wrap{height:calc(100% - 227px)}.map-toolbar{top:13px;left:14px;right:14px}#map-search{height:45px;border-radius:11px;max-width:none;padding-left:12px}#map-search input{font-size:12px}#map-search button{height:32px;width:32px}.map-chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-top:9px;padding-bottom:5px;gap:6px}.map-chip{padding:7px 10px;font-size:11px;min-height:36px}.map-chip svg{width:15px;height:15px}.map-controls{top:111px;right:14px;gap:6px}.map-controls button{width:36px;height:36px;font-size:20px;border-radius:9px}.map-controls button:first-child{margin-bottom:1px}.map-legend{bottom:28px;left:12px;right:auto;font-size:9px;gap:9px;padding:5px 8px}.map-legend>span:last-child{display:none}.origin-label{bottom:28px;right:12px;left:auto;font-size:9px;padding:5px 7px;max-width:200px}.map-mode .leaflet-control-attribution{font-size:8px;padding:3px 5px}.nearby-panel{position:absolute;height:240px;bottom:0;left:0;right:0;z-index:500;border:1px solid #e6ddd4;border-bottom:0;border-radius:20px 20px 0 0;box-shadow:0 -6px 20px #344d3914;transition:height .25s,transform .2s;overflow:hidden}.nearby-panel.expanded{height:calc(100% - 98px)}.sheet-handle{display:grid;place-items:center;min-height:18px;width:100%;padding:7px;touch-action:none}.sheet-handle span{width:32px;height:4px;border-radius:4px;background:#d9cfc5}.nearby-heading{padding:0 18px;flex:none}.nearby-heading .eyebrow{display:none}.nearby-title{display:flex;align-items:center;justify-content:space-between}.nearby-title h1{font-size:19px;margin:0 0 2px}.mobile-expand{display:block;font-size:10px;color:var(--primary);padding:7px}.nearby-context{font-size:9px}.text-button{font-size:9px}.weather-mini{display:none}.nearby-count{font-size:10px;padding:0 0 5px}.nearby-count .sort{font-size:9px;padding:3px 0;min-height:24px}.nearby-list{display:flex;gap:9px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;padding:0 14px 10px;flex:1;min-height:0;align-items:flex-start}.nearby-card{min-width:calc(100vw - 51px);width:calc(100vw - 51px);margin:0;padding:9px;scroll-snap-align:start;border-radius:11px}.nearby-select{gap:9px}.nearby-image{width:58px;height:67px}.nearby-category{font-size:8px}.nearby-copy h2{font-size:12px;margin:1px 0}.nearby-meta{font-size:9px}.parent-tag{font-size:9px;margin-top:4px;padding:1px 4px}.parent-tag svg{width:12px;height:12px}.nearby-bottom{margin:4px 0 0;font-size:9px}.nearby-bottom button{min-height:27px}.nearby-detail{font-size:9px;padding:3px 7px}.nearby-reason,.panel-foot{display:none}.nearby-panel:not(.expanded) .nearby-bottom{display:flex}.nearby-panel.expanded .nearby-list{display:block;overflow-y:auto;overflow-x:hidden;padding:0 15px 10px}.nearby-panel.expanded .nearby-card{width:100%;min-width:0;margin-bottom:10px;padding:13px}.nearby-panel.expanded .nearby-image{width:83px;height:92px}.nearby-panel.expanded .nearby-copy h2{font-size:15px;margin:4px 0}.nearby-panel.expanded .nearby-category{font-size:10px}.nearby-panel.expanded .nearby-meta{font-size:11px}.nearby-panel.expanded .parent-tag{font-size:10px;padding:3px 5px;margin-top:7px}.nearby-panel.expanded .nearby-bottom{font-size:10px;margin-top:7px}.nearby-panel.expanded .nearby-detail{font-size:11px;padding:5px 10px;min-height:35px}.nearby-panel.expanded .nearby-reason{display:flex}.nearby-panel.expanded .weather-mini{display:flex;margin:10px 0;font-size:11px;padding:10px 12px}.nearby-panel.expanded .weather-mini small{font-size:9px}.nearby-panel.expanded .nearby-count{padding-bottom:8px}.map-load-error{font-size:10px;bottom:56px;left:12px;right:58px}.place-pin{font-size:10px;padding:6px 8px;gap:4px}.place-pin svg{width:15px;height:15px}.map-mode .mobile-nav{z-index:600;min-height:74px}.nearby-empty{padding:7px 10px;min-width:100%;font-size:10px}.nearby-empty h2{font-size:13px;margin:4px}.nearby-empty p{margin-bottom:7px}.nearby-empty .primary{font-size:10px;min-height:33px;padding:5px 10px}.map-mode .toast{bottom:85px}.nearby-card.selected{box-shadow:none}}
.origin-label a{color:var(--primary);font-weight:700;text-decoration:none}
.origin-label:empty{display:none}

@media(min-width:651px) and (max-width:800px){.map-mode .desktop-nav{display:none}.map-mode .mobile-nav{display:flex;position:fixed;bottom:0;left:0;right:0;justify-content:space-around;background:var(--white);border-top:1px solid var(--line);padding:8px}.map-mode .mobile-nav .nav-item{flex-direction:column;gap:3px;font-size:10px;padding:3px 14px}.map-mode .nearby-card{min-width:360px;width:360px}}

/* Airier recommendations: name, distance and practical tags come first. */
.nearby-card{padding:17px;margin-bottom:14px}
.nearby-copy h2{font-size:17px;line-height:1.5;margin:5px 0 7px}
.nearby-category{font-size:11px}
.nearby-meta{font-size:12px;display:flex;align-items:center;flex-wrap:wrap;gap:3px}
.nearby-distance{color:var(--ink);font-weight:700}
.parent-tag{font-size:11px;padding:4px 7px}
.nearby-bottom{margin-top:12px;font-size:12px}
.nearby-detail{font-size:12px;min-height:36px;padding:6px 12px}
.nearby-price{font-weight:600}
.nearby-reason{font-size:11px;line-height:1.6}
@media(max-width:800px){
 .map-canvas-wrap{height:calc(100% - 300px)}
 .nearby-panel{height:300px}
 .nearby-heading{padding:0 18px}
 .nearby-title h1{font-size:20px}
 .nearby-context{font-size:10px;line-height:1.7}
 .nearby-count{font-size:11px;padding:4px 0 9px}
 .nearby-list{padding:0 14px 12px;gap:12px}
 .nearby-card{padding:12px;min-width:calc(100vw - 44px);width:calc(100vw - 44px)}
 .nearby-image{width:66px;height:83px}
 .nearby-category{font-size:10px}
 .nearby-copy h2{font-size:15px;line-height:1.5;margin:2px 0 4px}
 .nearby-meta{font-size:11px}
 .parent-tag{font-size:10px;margin-top:6px;padding:3px 6px}
 .nearby-bottom{margin-top:9px;font-size:11px}
 .nearby-bottom button{min-height:34px}
 .nearby-detail{font-size:11px;padding:5px 10px}
 .nearby-panel.expanded .nearby-copy h2{font-size:16px}
 .nearby-panel.expanded .nearby-meta{font-size:12px}
 .nearby-panel.expanded .nearby-category{font-size:11px}
 .nearby-panel.expanded .nearby-bottom{font-size:12px}
 .nearby-panel.expanded .nearby-reason{font-size:11px}
}
@media(min-width:651px) and (max-width:800px){.nearby-card{min-width:370px;width:370px}}

.map-mode .map-vector .leaflet-tile-pane{filter:none;opacity:1}

@media(max-width:359px){.map-canvas-wrap{height:calc(100% - 320px)}.nearby-panel{height:320px}}

.panel-map-credit{display:none}
@media(max-width:800px){.nearby-panel.expanded .panel-foot{display:block;flex:none;padding:7px 15px}.nearby-panel.expanded .panel-map-credit{display:block;font-size:9px}.panel-map-credit a{text-decoration:underline}}

.map-mode-select{cursor:pointer;padding-right:10px;max-width:130px}.map-mode-select option{background:var(--white);color:var(--ink)}

/* Two-row dropdown grows over the map without shifting the filter row. */
.outing-dropdown{--outing-row:40px;position:relative;flex:none;width:94px;height:var(--outing-row);z-index:5}
.outing-popup{position:absolute;inset:0 0 auto;height:var(--outing-row);overflow:hidden;border:1px solid var(--primary);border-radius:20px;background:var(--primary);color:white;box-shadow:0 3px 10px #24304718;transition:height .22s ease,border-radius .22s ease,background .22s ease}
.outing-trigger,.outing-options button{height:calc(var(--outing-row) - 1px);width:100%;padding:0 14px;display:flex;align-items:center;justify-content:space-between;font-size:12px;text-align:left}
.outing-chevron{display:block;width:12px;height:12px;flex:none;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.outing-options{position:absolute;top:0;left:0;width:100%;visibility:hidden;opacity:0;transition:opacity .15s ease}
.outing-options button{color:var(--ink);background:var(--white)}
.outing-options button[aria-pressed=true]{color:var(--primary);background:var(--pale);font-weight:600}
.outing-options button:hover,.outing-options button:focus-visible{background:#d9e9f7;color:var(--primary);outline:none}.outing-options button[aria-pressed=true]:hover,.outing-options button[aria-pressed=true]:focus-visible{background:#c9e0f3}.outing-options button{transition:background-color .15s ease}
.outing-dropdown.open .outing-popup{height:calc(var(--outing-row)*2);border-radius:13px;background:var(--white)}
.outing-dropdown.open .outing-trigger{visibility:hidden}
.outing-dropdown.open .outing-options{visibility:visible;opacity:1}
@media(max-width:800px){.map-chips{overflow:visible}.outing-dropdown{--outing-row:36px;width:82px}.outing-trigger,.outing-options button{font-size:11px;padding:0 12px}.map-chips{gap:5px}.map-chip{padding-left:8px;padding-right:8px}}
@media(max-width:359px){.outing-dropdown{width:74px}.map-chip{font-size:10px;padding-left:6px;padding-right:6px;gap:4px}.map-chip svg{width:13px}}

.age-chip{min-width:105px;gap:8px}.age-chip .outing-chevron{width:12px;height:12px;margin-left:2px}
@media(max-width:800px){.map-chip.age-chip{min-width:96px;gap:6px;padding-left:10px;padding-right:10px}}
@media(max-width:359px){.map-chip.age-chip{min-width:87px;gap:4px;padding-left:7px;padding-right:7px}.map-chip.age-chip>svg.outing-chevron{width:12px}}
@media(max-width:359px){.map-chips>.map-chip:not(.age-chip)>svg{display:none}}

.parent-tag.unconfirmed{background:#f1ede8;color:#66707e}
/* Cover photo inside the compact nearby thumbnail: credit shrinks to a marked corner. */
.nearby-image .photo-credit.compact{left:auto;right:4px;top:4px;bottom:auto;padding:1px 4px;font-size:8px;border-radius:4px}
.nearby-image .photo-failed .photo-fallback,.nearby-image .photo-fallback{font-size:9px;padding:4px;line-height:1.4}

.nearby-image>.fiction{top:4px;bottom:auto;left:4px;right:auto;font-size:8px;line-height:1.4;padding:2px 4px;white-space:nowrap}

/* Keep the mobile map primary; recommendations expand on demand. */
@media(max-width:800px){
 .map-canvas-wrap{height:calc(100% - 120px)}
 .nearby-panel{height:120px}
 .nearby-panel:not(.expanded) .nearby-list{display:none}
 .nearby-panel:not(.expanded) .nearby-count .sort{display:none}
 .mobile-expand{min-height:44px;font-size:12px;padding:8px 4px 8px 12px}
 .nearby-panel:not(.expanded) .nearby-title h1{font-size:18px}
 .nearby-panel:not(.expanded) .nearby-count{padding:2px 0 8px}
}
@media(prefers-reduced-motion:reduce){.nearby-panel{transition:none}}

/* Phone browsing: one search row, filters on demand, dedicated list view. */
.brand-mark .brand-sun-mobile{display:none}
@media(max-width:800px){.brand-sun-desktop{display:none}.brand-mark .brand-sun-mobile{display:block;width:.7490234375em;height:1em}}
.mobile-filter-toggle{display:none}
@media(max-width:800px){
 .map-mode .preview{display:none}
 .map-mode .header{height:56px}
 .map-mode #main{height:calc(100dvh - 56px - 74px - env(safe-area-inset-bottom));min-height:0}
 .map-toolbar{display:grid;grid-template-columns:minmax(0,1fr) 64px;gap:8px}
 #map-search{height:44px}
 .mobile-filter-toggle{display:flex;align-items:center;justify-content:center;gap:4px;background:white;border:1px solid var(--line);border-radius:11px;font-size:11px;min-height:44px}
 .mobile-filter-toggle svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
 .mobile-filter-toggle[aria-expanded=true]{background:var(--pale);color:var(--primary)}
 .map-toolbar .map-chips{display:none;grid-column:1 / -1;margin-top:0}
 .map-toolbar.filters-open .map-chips{display:flex}
 .map-controls{top:auto;bottom:65px}
 .map-controls [data-map-zoom],.map-controls .map-detail-toggle{display:none}
 .map-controls button:first-child{width:44px;height:44px;margin:0}
 
 
 .nearby-panel.expanded{height:100%;border-radius:0;border-top:0}
 .map-workspace:has(.nearby-panel.expanded) .map-canvas-wrap{visibility:hidden}
 .nearby-panel.expanded .sheet-handle{visibility:hidden;min-height:10px;height:10px;padding:0}
 .nearby-panel.expanded .weather-mini{display:none}
 .nearby-panel.expanded .nearby-heading{padding-top:8px}
}

/* Scale the complete desktop brand, never the sun and lettering separately. */
@media(max-width:800px){
 .header .brand{width:177px;padding:10px 0 0 22px;transform:scale(.8709677419);transform-origin:left center;margin-right:-22.84px}
 .header .brand-logo{width:155px}
 .header .brand .brand-mark{font-size:46px;left:0;top:-2px}
}
@media(max-width:359px){
 .header .brand{transform:scale(.7741935484);margin-right:-39.97px}
}

/* Blend the complete transformed logo with the page, including on Safari. */
.header .brand{mix-blend-mode:multiply}
.header .brand .brand-mark{z-index:0}
.header .brand-logo{position:relative;z-index:1;mix-blend-mode:normal}

/* Keep a nationwide result readable: use compact point markers at high density. */
.place-pin.dense{display:block;width:14px;height:14px;min-width:14px;padding:0;border:2px solid #fff;border-radius:50%;background:var(--coral);box-shadow:0 2px 7px #243d4666}
.place-pin.dense.outdoor{background:var(--primary)}
.place-pin.dense:after{display:none}
@media(max-width:800px){.nearby-panel.expanded{height:100%;border-radius:0}.place-pin.dense{width:12px;height:12px;min-width:12px}}

/* Start with neutral category dots; reveal place information only after selection. */
.place-pin.dot{display:block;width:14px;height:14px;min-width:14px;padding:0;border:2px solid #fff;border-radius:50%;background:#c64a2c;box-shadow:0 2px 7px #243d4666;transition:width .22s ease,height .22s ease,min-width .22s ease,font-size .22s ease,transform .22s ease,opacity .2s ease,box-shadow .2s ease}
.place-pin.dot.outdoor{background:#2a72ad}
.place-pin.dot:after{display:none}
.place-pin.dot.active{outline:0;transform:scale(1.3);box-shadow:0 0 0 5px #ffffffb8,0 3px 10px #243d4675}
.family-place-popup .leaflet-popup-content-wrapper{border-radius:14px;box-shadow:0 10px 30px #20364435;padding:0}
.family-place-popup .leaflet-popup-content{margin:0;width:auto!important}
.family-place-popup .leaflet-popup-tip{box-shadow:3px 3px 8px #20364420}
.family-place-popup .leaflet-popup-close-button{width:34px;height:34px;padding:7px 9px;color:#66738a;font-size:20px}
.map-place-popup{min-width:220px;padding:16px 17px 15px;color:var(--ink);font-family:var(--sans)}
.map-place-popup-kicker{padding-right:22px;color:var(--muted);font-size:10px;line-height:1.4}
.map-place-popup h2{margin:5px 24px 7px 0;font:700 17px/1.4 var(--sans)}
.map-place-popup-meta,.map-place-popup-tags{display:flex;flex-wrap:wrap;gap:5px 8px;color:var(--muted);font-size:11px;line-height:1.5}
.map-place-popup-meta span+span:before{content:'·';margin-right:8px}
.map-place-popup-tags{margin-top:8px}
.map-place-popup-tags span{padding:3px 7px;border-radius:5px;background:#f3eee8;color:#56637a}
.map-place-popup a{display:flex;align-items:center;justify-content:center;min-height:38px;margin-top:12px;border-radius:8px;background:var(--primary);color:#fff;font-weight:700;font-size:12px;text-decoration:none}
.map-place-popup a:hover,.map-place-popup a:focus-visible{background:#24699f;outline:3px solid #9cc8ea;outline-offset:2px}
@media(max-width:800px){.place-pin.dot{width:13px;height:13px;min-width:13px}.map-place-popup{min-width:205px;padding:14px 15px}.map-place-popup h2{font-size:16px}.family-place-popup .leaflet-popup-content-wrapper{max-width:calc(100vw - 42px)}}

.place-pin.dot.zoom-xs{width:8px;height:8px;min-width:8px;border-width:1.5px;box-shadow:0 1px 3px #243d4660}
.place-pin.dot.zoom-sm{width:10px;height:10px;min-width:10px;border-width:2px;box-shadow:0 1px 4px #243d4660}
.place-pin.dot.zoom-md{width:12px;height:12px;min-width:12px}
.place-pin.dot.zoom-lg{width:14px;height:14px;min-width:14px}
.map-legend i.you{background:transparent;border:0;box-shadow:none;box-sizing:border-box;width:12px;height:16px;border-radius:0;margin-right:4px;vertical-align:middle;overflow:visible}
.map-legend .legend-sun{display:block;width:12px;height:16px}
.legend-you{display:inline-flex;align-items:center}

/* You-are-here: coral brand sun, larger than place dots */
/* Kill Leaflet default white fill + #666 border on our origin divIcon */
.leaflet-div-icon.origin-pin,
.leaflet-div-icon.origin-accuracy-wrap,
.leaflet-marker-icon.origin-pin,
.leaflet-marker-icon.origin-accuracy-wrap,
.origin-pin,
.origin-accuracy-wrap{
  background:transparent!important;
  border:0!important;
  border-width:0!important;
  border-style:none!important;
  box-shadow:none!important;
  outline:none!important;
}

/* Morph host */
.origin-morph{
  position:relative;
  display:block;
  width:36px;
  height:36px;
  background:transparent!important;
  border:0!important;
  box-shadow:none!important;
  border-radius:0!important;
  overflow:visible;
}
.origin-morph .origin-sun,
.origin-morph .origin-dot{
  position:absolute;
  left:50%;
  top:50%;
  margin:0;
  border:0!important;
  outline:none!important;
  box-shadow:none!important;
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transform:translate(-50%,-50%) scale(.2);
  transition:opacity .95s cubic-bezier(.4,0,.2,1), transform .95s cubic-bezier(.4,0,.2,1), visibility 0s linear .95s;
}
.origin-morph.near .origin-sun,
.origin-morph.far .origin-dot{
  transition:opacity .95s cubic-bezier(.4,0,.2,1), transform .95s cubic-bezier(.4,0,.2,1), visibility 0s linear 0s;
}
/* Sun = brand SVG only (no disc fill, no ring) */
.origin-morph .origin-sun{
  width:32px;
  height:43px;
  border-radius:0!important;
  background:transparent!important;
  filter:drop-shadow(0 1px 2px rgba(36,48,71,.18));
}
/* Far zoom = soft coral disc, no hard edge / no dark ring */
.origin-morph .origin-dot{
  width:22px;
  height:22px;
  border-radius:50%;
  background:radial-gradient(circle,
    #ff8a7a 0%,
    #ff8466 45%,
    rgba(255,107,87,.55) 70%,
    rgba(255,107,87,0) 100%);
}
.origin-morph.demo .origin-dot{
  background:radial-gradient(circle,
    #ff9a8c 0%,
    #ff7d6c 45%,
    rgba(255,125,108,.5) 70%,
    rgba(255,125,108,0) 100%);
}
.origin-morph.near .origin-sun{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,-50%) rotate(0deg) scale(1);
}
.origin-morph.near .origin-dot{
  opacity:0;
  visibility:hidden;
  transform:translate(-50%,-50%) rotate(0deg) scale(.35);
}
.origin-morph.far .origin-sun{
  opacity:0;
  visibility:hidden;
  transform:translate(-50%,-50%) rotate(180deg) scale(.2);
}
.origin-morph.far .origin-dot{
  opacity:1;
  visibility:visible;
  transform:translate(-50%,-50%) rotate(180deg) scale(1);
}
@media (prefers-reduced-motion:reduce){
  .origin-morph .origin-sun,
  .origin-morph .origin-dot,
  .origin-morph.near .origin-sun,
  .origin-morph.far .origin-dot{transition:opacity .2s ease, visibility 0s linear .2s}
  .origin-morph.near .origin-sun,
  .origin-morph.far .origin-dot{transition:opacity .2s ease, visibility 0s linear 0s}
}

.origin-accuracy-wrap{
  background:transparent!important;
  border:0!important;
  overflow:visible!important;
}
.origin-accuracy-glow{
  border-radius:50%;
  border:0!important;
  box-shadow:none!important;
  background:radial-gradient(circle,
    rgba(255,107,87,.40) 0%,
    rgba(255,107,87,.22) 30%,
    rgba(255,107,87,.10) 50%,
    rgba(255,107,87,.03) 65%,
    rgba(255,107,87,0) 76%);
  pointer-events:none;
}


/* GPS live pulse — only when located; pause while user pans/zooms */
@keyframes origin-pulse{
  0%,100%{transform:translate(-50%,-50%) scale(1); filter:drop-shadow(0 1px 2px rgba(36,48,71,.18));}
  50%{transform:translate(-50%,-50%) scale(1.08); filter:drop-shadow(0 2px 6px rgba(255,107,87,.45));}
}
@keyframes origin-dot-pulse{
  0%,100%{transform:translate(-50%,-50%) scale(1); opacity:1;}
  50%{transform:translate(-50%,-50%) scale(1.12); opacity:.92;}
}
@keyframes origin-ripple{
  0%{transform:translate(-50%,-50%) scale(.35); opacity:.45;}
  70%{opacity:.12;}
  100%{transform:translate(-50%,-50%) scale(2.4); opacity:0;}
}
.origin-morph .origin-ripple{
  position:absolute;
  left:50%;
  top:50%;
  width:28px;
  height:28px;
  margin:0;
  border-radius:50%;
  pointer-events:none;
  background:radial-gradient(circle, rgba(255,107,87,.55) 0%, rgba(255,107,87,.2) 45%, rgba(255,107,87,0) 70%);
  opacity:0;
  transform:translate(-50%,-50%) scale(.35);
  z-index:0;
}
.origin-morph .origin-sun,
.origin-morph .origin-dot{z-index:1;}
.origin-morph.gps.near:not(.is-interacting):not(.is-locating) .origin-sun{
  animation:origin-pulse 2.2s ease-in-out infinite;
}
.origin-morph.gps.far:not(.is-interacting):not(.is-locating) .origin-dot{
  animation:origin-dot-pulse 2.2s ease-in-out infinite;
}
.origin-morph.ripple-play .origin-ripple{
  animation:origin-ripple .9s ease-out 1;
}
@media (prefers-reduced-motion:reduce){
  .origin-morph.gps.near .origin-sun,
  .origin-morph.gps.far .origin-dot{animation:none;}
  .origin-morph.ripple-play .origin-ripple{animation:none; opacity:0;}
}

.place-pin-wrap.has-multi{overflow:visible !important;background:transparent !important;border:0 !important}
.place-pin.dot.multi{
  display:flex !important;
  align-items:center;
  justify-content:center;
  box-sizing:border-box !important;
  padding:0 !important;
  border-radius:50% !important;
  width:var(--pin-size,28px) !important;
  height:var(--pin-size,28px) !important;
  min-width:var(--pin-size,28px) !important;
  font-size:var(--pin-font,12px) !important;
  font-weight:700 !important;
  color:#fff !important;
  line-height:1 !important;
  letter-spacing:-0.02em;
}
.place-pin.dot.multi.zoom-xs,
.place-pin.dot.multi.zoom-sm,
.place-pin.dot.multi.zoom-md,
.place-pin.dot.multi.zoom-lg{
  width:var(--pin-size,28px) !important;
  height:var(--pin-size,28px) !important;
  min-width:var(--pin-size,28px) !important;
}
.place-pin.dot.multi .place-pin-count{pointer-events:none}
.place-pin.dot.multi.active{transform:scale(1.06)}

.place-pin.dot.pin-enter{opacity:0;transform:scale(0.72)}
.place-pin.dot.pin-exit{pointer-events:none}
.place-pin.dot.multi{
  transition:width .22s ease,height .22s ease,min-width .22s ease,font-size .22s ease,transform .22s ease,opacity .2s ease,box-shadow .2s ease;
  background:#2a72ad;
}
.place-pin.dot.type-nature,.map-legend i.type-nature{background:#1b7a46}
.place-pin.dot.type-park,.map-legend i.type-park{background:#e09200}
.place-pin.dot.type-museum,.map-legend i.type-museum{background:#6b46a3}
.place-pin.dot.type-culture,.map-legend i.type-culture{background:#c2512c}
.place-pin.dot.type-scenic,.map-legend i.type-scenic{background:#0f8f86}
.place-pin.dot.type-coast,.map-legend i.type-coast{background:#1565c0}
.place-pin.dot.type-oldstreet,.map-legend i.type-oldstreet{background:#a14a68}
.place-pin.dot.type-heritage,.map-legend i.type-heritage{background:#7a4b2e}
.place-pin.dot.type-temple,.map-legend i.type-temple{background:#c4374e}
.place-pin.dot.type-rail,.map-legend i.type-rail{background:#3949ab}
.place-pin.dot.type-civic,.map-legend i.type-civic{background:#546e7a}
.place-pin.dot.type-farm,.map-legend i.type-farm{background:#6d8f1f}
.place-pin.dot.type-theme,.map-legend i.type-theme{background:#d4528a}
.place-pin.dot.type-other,.map-legend i.type-other{background:#6b7280}
.map-legend i.cluster{background:#2a72ad}
.nearby-category,.map-place-popup-kicker{word-break:keep-all}
.map-type-select,.outing-type-select{appearance:none;-webkit-appearance:none;height:40px;margin:0;width:calc(var(--type-chars,4)*1em + 40px);flex:none;border:1px solid var(--line);border-radius:20px;background-color:var(--white);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path d='m4 6 4 4 4-4' fill='none' stroke='%23203747' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>");background-repeat:no-repeat;background-position:right 10px center;background-size:12px 12px;padding:0 28px 0 12px;font-size:12px;line-height:1.2;color:var(--ink)}
.map-type-select.on,.outing-type-select.on{background-color:var(--primary);color:#fff;border-color:var(--primary);background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path d='m4 6 4 4 4-4' fill='none' stroke='%23ffffff' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>")}
.map-type-select option,.outing-type-select option{color:var(--ink);background:#fff}
.legend-far,.legend-near{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px}
.legend-near{display:none}
.map-canvas-wrap.pins-typed .legend-far{display:none}
.map-canvas-wrap.pins-typed .legend-near{display:flex;max-width:min(420px,48vw)}
.map-canvas-wrap.pins-typed .map-legend{align-items:flex-start;line-height:1.3}
.legend-kicker{flex:none;font-weight:700;color:var(--muted)}
.map-legend i.type-nature,.map-legend i.type-park,.map-legend i.type-museum,.map-legend i.type-culture,.map-legend i.type-scenic,.map-legend i.type-coast,.map-legend i.type-oldstreet,.map-legend i.type-heritage,.map-legend i.type-temple,.map-legend i.type-rail,.map-legend i.type-civic,.map-legend i.type-farm,.map-legend i.type-theme,.map-legend i.type-other,.map-legend i.cluster{border-radius:50%}
@media(max-width:800px){
 .map-type-select{height:36px;width:calc(var(--type-chars,4)*1em + 36px);font-size:11px;padding-left:10px}
 .map-toolbar.filters-open .map-chips{flex-wrap:wrap;row-gap:6px}
 .map-canvas-wrap.pins-typed .legend-near{max-width:64vw;gap:3px 7px}
 .map-canvas-wrap.pins-typed .legend-kicker{display:none}
 .legend-count{display:none}
}

/* Map panel: wide weather banner with 切換地區 / 全部景點 */
.nearby-heading .weather-banner{display:flex;align-items:center;justify-content:space-between;gap:8px;height:68px;padding:0 0 0 12px;margin:12px 0;border-radius:14px;overflow:hidden;font-size:11px}
.weather-banner-actions{display:flex;gap:6px;flex-wrap:wrap}
.weather-banner-art{flex:none;align-self:flex-end;height:68px}
.nearby-heading .weather-banner-art svg{width:109px;height:68px;display:block}
.tool-button{font-size:11px;color:var(--primary);background:#fffffff0;border:1px solid #ffffff;border-radius:18px;padding:5px 11px;min-height:30px;white-space:nowrap;box-shadow:0 1px 3px #24304714}
.tool-button:hover{background:#fff}
@media(max-width:800px){.nearby-heading .weather-banner{display:flex;height:56px;padding-left:10px;margin:8px 0}.nearby-heading .weather-banner-art{height:56px}.nearby-heading .weather-banner-art svg{width:90px;height:56px}.tool-button{font-size:10px;min-height:28px;padding:4px 9px}
.nearby-panel.expanded .nearby-heading .weather-banner{display:flex}.nearby-panel:not(.expanded) .nearby-heading .weather-banner{height:auto;margin:6px 0;padding:0;background:none}.nearby-panel:not(.expanded) .weather-banner-art{display:none}.nearby-panel:not(.expanded) .tool-button{border-color:#e6ddd4;box-shadow:none}}
@media(min-width:801px){.map-canvas-wrap.pins-typed .origin-label{bottom:96px}}
/* Phone readability pass (Henry 2026-09-24): larger text, compact cards. 16px search input stops iOS focus zoom. */
@media(max-width:800px){
 .map-workspace #map-search input{font-size:16px}
 .map-workspace .map-chip{font-size:13px;min-height:40px;padding:8px 12px}
 .map-workspace .map-type-select{font-size:13px;height:40px}
 .map-workspace .mobile-filter-toggle{font-size:13px}
 .map-workspace .map-legend{font-size:11px}
 .map-mode .leaflet-control-attribution{font-size:10px}
 .map-workspace .origin-label{left:12px;right:70px;bottom:84px;max-width:none;font-size:12px}
 .map-workspace .nearby-title h1{font-size:21px}
 .map-workspace .nearby-context{font-size:12px}
 .map-workspace .nearby-count{font-size:13px}
 .map-workspace .nearby-count .sort-toggle button{font-size:13px;min-height:34px;padding:4px 12px}
 .map-workspace .tool-button{font-size:13px;min-height:40px;padding:6px 14px}
 .map-workspace .nearby-heading .weather-banner{height:64px}
 .map-workspace .nearby-heading .weather-banner-art{height:64px}
 .map-workspace .nearby-heading .weather-banner-art svg{width:103px;height:64px}
 .mobile-nav .nav-item{font-size:12px}
 /* Compact list card: 76px photo, three lines beside it, actions under the text column */
 .map-workspace .nearby-panel.expanded .nearby-card{padding:10px 12px;margin-bottom:8px}
 .map-workspace .nearby-panel.expanded .nearby-select{gap:12px;align-items:flex-start}
 .map-workspace .nearby-panel.expanded .nearby-image{width:76px;height:76px}
 .map-workspace .nearby-image .nearby-setting{font-size:10px}
 .map-workspace .nearby-panel.expanded .nearby-category{display:block;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 .map-workspace .nearby-panel.expanded .nearby-copy h2{font-size:17px;line-height:1.35;margin:2px 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
 .map-workspace .nearby-panel.expanded .nearby-meta{font-size:13px}
 .map-workspace .nearby-panel.expanded .parent-tag{font-size:12px;padding:2px 6px;margin-top:4px}
 .map-workspace .nearby-panel.expanded .nearby-bottom{margin:6px 0 0 88px;font-size:13px;gap:8px}
 .map-workspace .nearby-panel.expanded .nearby-bottom button{min-height:40px;min-width:40px}
 .map-workspace .nearby-panel.expanded .nearby-detail{font-size:13px;padding:0 12px}
 .map-workspace .nearby-panel.expanded .nearby-reason{font-size:12px}
}
.meta-price{display:none}
@media(max-width:800px){
 /* Open list on phone: the card itself opens details, so no action row; ♡ sits top-right, price joins the meta line */
 .map-workspace .nearby-count .sort{max-width:none}
 .map-workspace .nearby-panel.expanded .nearby-card{position:relative}
 .map-workspace .nearby-panel.expanded .nearby-category{padding-right:36px}
 .map-workspace .nearby-panel.expanded .meta-price{display:inline}
 .map-workspace .nearby-panel.expanded .nearby-bottom{position:absolute;top:4px;right:4px;margin:0}
 .map-workspace .nearby-panel.expanded .nearby-bottom>span,.map-workspace .nearby-panel.expanded .nearby-bottom .nearby-detail{display:none}
 .map-workspace .nearby-panel.expanded .meta-price{white-space:nowrap}
 .map-workspace .nearby-panel.expanded .nearby-bottom button{min-height:44px;min-width:44px;display:grid;place-items:center}
 .map-workspace .nearby-panel.expanded .nearby-bottom svg{width:20px;height:20px}
}
@media(max-width:800px){
 /* Closed sheet fits handle + title + one line + the two buttons; map area shrinks to match */
 .map-workspace .nearby-panel:not(.expanded){height:150px}
 .map-workspace .map-canvas-wrap{height:calc(100% - 150px)}
 .map-workspace .nearby-panel:not(.expanded) .nearby-count{display:none}
 .map-workspace .nearby-panel:not(.expanded) .nearby-heading .weather-banner{margin:8px 0 0}
}
@media(max-width:800px){
 /* No sort-context line; bigger heading; closed sheet = handle + heading + buttons */
 .map-workspace .nearby-title h1,.map-workspace .nearby-panel:not(.expanded) .nearby-title h1{font-size:25px;line-height:1.25}
}
@media(max-width:800px){.map-workspace .nearby-panel:not(.expanded){height:128px}.map-workspace .map-canvas-wrap{height:calc(100% - 128px)}}
/* Weather banner buttons: bigger, and the two share the space left of the picture evenly (Henry 2026-09-24) */
.nearby-heading .weather-banner{height:76px;padding:0 0 0 14px;gap:12px}
.nearby-heading .weather-banner-art{height:76px}
.nearby-heading .weather-banner-art svg{width:122px;height:76px}
.weather-banner-actions{flex:1;min-width:0;flex-wrap:nowrap;gap:10px}
.weather-banner-actions .tool-button{flex:1;min-width:0;font-size:14px;font-weight:600;min-height:44px;padding:8px 10px;border-radius:22px;text-align:center}
@media(max-width:800px){
 .map-workspace .nearby-heading .weather-banner{height:72px;padding-left:12px}
 .map-workspace .nearby-heading .weather-banner-art{height:72px}
 .map-workspace .nearby-heading .weather-banner-art svg{width:115px;height:72px}
 .map-workspace .weather-banner-actions .tool-button{font-size:15px;min-height:46px;padding:8px 10px}
 .map-workspace .nearby-panel:not(.expanded) .nearby-heading .weather-banner{height:auto;padding:0}
}
.nearby-more{flex:none;width:1px;height:1px}
/* Off-screen list cards skip layout/paint until scrolled near (1090-card lists stay fast) */
.nearby-card{content-visibility:auto;contain-intrinsic-size:auto 220px}
@media(max-width:800px){.nearby-panel.expanded .nearby-card{contain-intrinsic-size:auto 120px}}
/* Phone header: logo centred at its real size (replaces the old left-anchored scale-down) */
@media(max-width:650px){
 .header .brand{width:auto;transform:none;margin-right:0;padding:8px 0 0 22px}
 .header .brand-logo{width:150px}
 .map-mode .header .brand{padding-top:5px}
 .map-mode .header .brand-logo{width:138px}
}
@media(max-width:359px){.header .brand-logo{width:128px}.map-mode .header .brand-logo{width:120px}}
/* Phone: one top bar on every tab so the logo never jumps (no thin info bar, 64px bar, 150px logo) */
@media(max-width:650px){
 .preview{display:none}
 .header,.map-mode .header{height:64px;padding:0 19px}
 .header .brand,.map-mode .header .brand{padding-top:8px}
 .header .brand-logo,.map-mode .header .brand-logo{width:150px}
 .map-mode #main{height:calc(100dvh - 64px - 74px - env(safe-area-inset-bottom))}
}
@media(max-width:359px){.header .brand-logo,.map-mode .header .brand-logo{width:128px}}
/* Desktop/tablet: the map page's full-width bar places logo, tabs and ☀ exactly where the other pages'
   centred 1256px bar does (same height, same side padding, plus the scrollbar the map page lacks). */
@media(min-width:651px){.header,.map-mode .header{height:74px}}
@media(min-width:901px){.map-mode .header{--g:max(0px,calc((100vw - var(--sbw,0px) - 1256px) / 2));padding-left:calc(var(--g) + 36px);padding-right:calc(var(--g) + 36px + var(--sbw,0px))}}
@media(min-width:651px) and (max-width:900px){.map-mode .header{padding-left:28px;padding-right:calc(28px + var(--sbw,0px))}}
@media(min-width:651px){.header .location{order:-1}}
@media(min-width:651px){.header .brand{grid-column:1}.header .desktop-nav{grid-column:2}.header .header-actions{grid-column:3}}
/* Phone layout in a desktop browser with a classic scrollbar: pad the (never-scrolling) map bar the same way */
@media(max-width:650px){.map-mode .header{padding-right:calc(19px + var(--sbw,0px))}}
/* Phone layout: identical bar on every tab — same background and bottom line; the line is a shadow so it takes no height */
@media(max-width:650px){
 .header,.map-mode .header{background:var(--white);border-bottom:0;box-shadow:0 1px 0 var(--line);position:relative;z-index:6}
}
/* One top bar for every tab at every width: same background, a bottom line that takes no height (shadow),
   and the same content box. Non-map pages were a transparent 1256px box; the map bar was full width with a
   1px border that nudged its contents up 0.5px. --sbx adds the scrollbar the map page lacks. */
.header,.map-mode .header{background:var(--white);border-bottom:0;box-shadow:0 1px 0 var(--line);position:relative;z-index:6}
@media(min-width:651px){
 .header,.map-mode .header{max-width:none;margin:0;--sbx:0px;--g:max(0px, calc((100% - var(--sbx) - 1256px) / 2));padding-left:calc(var(--g) + 36px);padding-right:calc(var(--g) + 36px + var(--sbx))}
 .map-mode .header{--sbx:var(--sbw,0px)}
}
@media(min-width:651px) and (max-width:900px){.header,.map-mode .header{padding-left:28px;padding-right:calc(28px + var(--sbx))}}
/* No top bar (Henry): the header area is the page background on every tab, map included; the ☀/☾ button floats */
.header,.map-mode .header{background:transparent;border-bottom:0;box-shadow:none}
@media(max-width:650px){.header,.map-mode .header{background:transparent;box-shadow:none}}
.theme-toggle{box-shadow:0 2px 10px #2430471f}
/* Map page keeps a bar (edge against the busy map); the line is a shadow so nothing shifts vs the bar-less tabs */
.map-mode .header{background:var(--white);box-shadow:0 1px 0 var(--line)}
@media(max-width:650px){.map-mode .header{background:var(--white);box-shadow:0 1px 0 var(--line)}}
/* Full-bleed map (Henry 2026-09-24): the map runs up under the header; logo, tabs and ☀ float on a fade.
   The header keeps its exact position (same as other tabs); --hdr is its height at each size. */
.map-mode{--hdr:74px}
@media(max-width:650px){.map-mode{--hdr:64px}}
.map-mode .header{position:relative;z-index:1100;background:linear-gradient(to bottom,color-mix(in srgb,var(--paper) 96%,transparent) 0%,color-mix(in srgb,var(--paper) 82%,transparent) 50%,transparent 100%);box-shadow:none}
@media(max-width:650px){.map-mode .header{background:linear-gradient(to bottom,color-mix(in srgb,var(--paper) 96%,transparent) 0%,color-mix(in srgb,var(--paper) 82%,transparent) 50%,transparent 100%);box-shadow:none}}
.map-mode .map-canvas-wrap{margin-top:calc(-1 * var(--hdr));height:calc(100% + var(--hdr))}
.map-mode .map-toolbar{top:calc(24px + var(--hdr))}
@media(min-width:801px){.map-mode .map-controls{top:calc(24px + var(--hdr))}}
/* Phone sheet layout: the workspace is a block, so contain the negative margin instead of letting it collapse through */
.map-mode .map-workspace{display:flow-root}
@media(min-width:801px){.map-mode .map-workspace{display:grid}}
@media(max-width:800px){
 .map-mode .map-canvas-wrap{height:calc(100% - 128px + var(--hdr))}
 .map-mode .map-toolbar{top:calc(12px + var(--hdr))}
}
/* Full-bleed polish (Henry): longer top fade, side list fades into the map, quiet list scrollbar */
.map-mode .header::after{content:'';position:absolute;left:0;right:0;top:100%;height:56px;pointer-events:none;background:linear-gradient(to bottom,color-mix(in srgb,var(--paper) 55%,transparent),transparent)}
.map-mode .header{background:linear-gradient(to bottom,color-mix(in srgb,var(--paper) 96%,transparent) 0%,color-mix(in srgb,var(--paper) 78%,transparent) 60%,color-mix(in srgb,var(--paper) 55%,transparent) 100%)}
@media(max-width:650px){.map-mode .header{background:linear-gradient(to bottom,color-mix(in srgb,var(--paper) 96%,transparent) 0%,color-mix(in srgb,var(--paper) 78%,transparent) 60%,color-mix(in srgb,var(--paper) 55%,transparent) 100%)}}
@media(min-width:801px){
 .map-mode .nearby-panel{position:relative;border-right:0;box-shadow:none}
 .map-mode .nearby-panel::after{content:'';position:absolute;top:0;bottom:0;left:100%;width:40px;pointer-events:none;background:linear-gradient(to right,var(--paper),color-mix(in srgb,var(--paper) 45%,transparent) 45%,transparent)}
}
.nearby-list{scrollbar-width:thin;scrollbar-color:transparent transparent;transition:scrollbar-color .2s}
.nearby-list:hover,.nearby-list:focus-within,.nearby-list.is-scrolling{scrollbar-color:color-mix(in srgb,var(--muted) 45%,transparent) transparent}
.nearby-list::-webkit-scrollbar{width:6px;height:6px}
.nearby-list::-webkit-scrollbar-thumb{background:transparent;border-radius:6px}
.nearby-list:hover::-webkit-scrollbar-thumb,.nearby-list.is-scrolling::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--muted) 45%,transparent)}
.nearby-list::-webkit-scrollbar-track{background:transparent}
/* Seamless fades v2 (Henry): one eased fade for header + 56px below (no two-piece band), side fade runs up
   through the header strip, and the map buttons centre under ☀/☾. */
.map-mode .header,.map-mode .header::after{background:transparent}
@media(max-width:650px){.map-mode .header{background:transparent}}
.map-mode .header::after{display:none}
.map-mode .header::before{content:'';position:absolute;left:0;right:0;top:0;height:calc(100% + 56px);z-index:-1;pointer-events:none;
 background:linear-gradient(to bottom,
  color-mix(in srgb,var(--paper) 97%,transparent) 0%,
  color-mix(in srgb,var(--paper) 94%,transparent) 18%,
  color-mix(in srgb,var(--paper) 86%,transparent) 34%,
  color-mix(in srgb,var(--paper) 73%,transparent) 48%,
  color-mix(in srgb,var(--paper) 56%,transparent) 61%,
  color-mix(in srgb,var(--paper) 38%,transparent) 73%,
  color-mix(in srgb,var(--paper) 21%,transparent) 84%,
  color-mix(in srgb,var(--paper) 8%,transparent) 93%,
  transparent 100%)}
@media(min-width:801px){
 .map-mode .nearby-panel::after{top:calc(-1 * var(--hdr));width:56px;
  background:linear-gradient(to right,
   var(--paper) 0%,
   color-mix(in srgb,var(--paper) 80%,transparent) 20%,
   color-mix(in srgb,var(--paper) 52%,transparent) 42%,
   color-mix(in srgb,var(--paper) 26%,transparent) 64%,
   color-mix(in srgb,var(--paper) 8%,transparent) 84%,
   transparent 100%)}
}
@media(min-width:901px){.map-mode .map-controls{right:calc(max(0px, (100vw - var(--sbw,0px) - 1256px) / 2) + 36px + var(--sbw,0px) - 1px)}}
@media(min-width:801px) and (max-width:900px){.map-mode .map-controls{right:calc(28px + var(--sbw,0px) - 1px)}}
/* No divider above the footnote; the list fades into it instead of being cut by a line */
.panel-foot{border-top:0;position:relative}
.panel-foot::before{content:'';position:absolute;left:0;right:0;bottom:100%;height:20px;pointer-events:none;background:linear-gradient(to top,var(--paper),transparent)}
/* Full-width header on every tab (Henry): logo at the left edge, tabs centred on screen, ☀/☾ at the right edge.
   No 1256px column any more, so on very wide screens the logo lines up with the map page's side list. */
@media(min-width:901px){
 .header,.map-mode .header{--g:0px}
 .map-mode .map-controls{right:calc(36px + var(--sbw,0px) - 1px)}
}
/* Desktop map (Henry): side fade starts where the cards end (map runs 24px under the list's right padding),
   longer eased fade; search bar and filter row centred in the visible map. */
@media(min-width:801px){
 .map-mode .map-canvas-wrap{margin-left:calc(-1 * var(--bleed,24px))}
 .map-mode .nearby-panel{background-color:transparent!important;background-image:linear-gradient(to right,var(--paper) calc(100% - var(--bleed,24px)),color-mix(in srgb,var(--paper) 84%,transparent))!important}
 .map-mode .nearby-panel::after{width:96px;background:linear-gradient(to right,
   color-mix(in srgb,var(--paper) 84%,transparent) 0%,
   color-mix(in srgb,var(--paper) 62%,transparent) 22%,
   color-mix(in srgb,var(--paper) 40%,transparent) 44%,
   color-mix(in srgb,var(--paper) 20%,transparent) 66%,
   color-mix(in srgb,var(--paper) 6%,transparent) 86%,
   transparent 100%)}
}
@media(min-width:801px){.map-mode .map-toolbar{left:48px}}
@media(min-width:801px){
 /* Cover the 24px of map under the list in the header band too (it showed as a dark sliver above the list) */
 .map-mode .nearby-panel::after{left:calc(100% - var(--bleed,24px));width:120px;background:linear-gradient(to right,
   var(--paper) 0%,
   color-mix(in srgb,var(--paper) 84%,transparent) 20%,
   color-mix(in srgb,var(--paper) 62%,transparent) 38%,
   color-mix(in srgb,var(--paper) 40%,transparent) 55%,
   color-mix(in srgb,var(--paper) 20%,transparent) 73%,
   color-mix(in srgb,var(--paper) 6%,transparent) 89%,
   transparent 100%)}
}
@media(min-width:801px){
 /* One fade layer only: the list background stops hard where the ::after fade begins (the overlap made a step = visible line) */
 .map-mode .nearby-panel{background-image:linear-gradient(to right,var(--paper) calc(100% - var(--bleed,24px)),transparent calc(100% - var(--bleed,24px)))!important}
 .map-mode .panel-foot{background:linear-gradient(to right,var(--paper) calc(100% - var(--bleed,24px)),transparent calc(100% - var(--bleed,24px)))}
}
@media(min-width:801px){.map-mode .panel-foot{background:linear-gradient(to right,var(--paper) calc(100% - var(--bleed,24px)),transparent calc(100% - var(--bleed,24px)))!important}}
.map-toolbar.toolbar-centred #map-search{margin-inline:auto}
.map-toolbar.toolbar-centred .map-chips{justify-content:center}
/* Phone (Henry): slimmer bottom tab bar and closed list sheet, more room for the map */
@media(max-width:800px){
 .mobile-nav,.map-mode .mobile-nav{min-height:0;padding:4px 8px calc(4px + env(safe-area-inset-bottom))}
 .mobile-nav .nav-item,.map-mode .mobile-nav .nav-item{gap:1px;padding:3px 14px}
 .mobile-nav .nav-item svg{width:21px;height:21px}
 .map-mode #main{height:calc(100dvh - 64px - var(--navh,58px) - env(safe-area-inset-bottom))}
 .map-workspace .nearby-panel:not(.expanded){height:112px}
 .map-workspace .map-canvas-wrap{height:calc(100% - 112px)}
 .map-mode .map-canvas-wrap{height:calc(100% - 112px + var(--hdr))}
 .map-workspace .nearby-panel:not(.expanded) .sheet-handle{min-height:12px;padding:5px}
 .map-workspace .nearby-panel:not(.expanded) .nearby-heading{padding-top:2px}
 .map-workspace .nearby-panel:not(.expanded) .weather-banner-actions .tool-button{min-height:42px;padding:6px 10px}
}
@media(max-width:800px){.map-workspace .nearby-panel:not(.expanded){height:120px}.map-workspace .map-canvas-wrap{height:calc(100% - 120px)}.map-mode .map-canvas-wrap{height:calc(100% - 120px + var(--hdr))}}
/* Home-screen app (standalone, viewport-fit=cover): the page runs under the status bar and home indicator.
   All insets are 0 in a normal browser tab, so these rules only change the installed app. */
body{padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}
@media(max-width:800px){
 .header,.map-mode .header{height:calc(64px + var(--sat,0px));padding-top:var(--sat,0px)}
 .map-mode{--hdr:calc(64px + var(--sat,0px))}
 .map-mode #main{height:calc(100dvh - 64px - var(--sat,0px) - var(--navh,58px) - env(safe-area-inset-bottom))}
}

/* Map popup: larger on phones (Henry) */
@media(max-width:800px){
 .map-place-popup{min-width:260px;padding:16px 18px 16px}
 .map-place-popup-kicker{font-size:13px}
 .map-place-popup h2{font-size:20px;line-height:1.35;margin:6px 26px 8px 0}
 .map-place-popup-meta{font-size:14px}
 .map-place-popup-tags{font-size:13px;margin-top:10px}
 .map-place-popup-tags span{padding:4px 9px}
 .map-place-popup a{min-height:46px;font-size:15px;margin-top:14px;border-radius:10px}
 .family-place-popup .leaflet-popup-close-button{width:40px;height:40px;font-size:24px;padding:8px 10px}
}
@media(max-width:800px){.map-place-popup{min-width:min(300px,calc(100vw - 48px))}}
/* iOS/iPadOS draw the ✳ character as a green emoji tile: use the coral sun image at every width */
.brand-sun-desktop{display:none}
.brand-mark .brand-sun-mobile{display:block;width:.7490234375em;height:1em}
.seed img{display:block;width:11px;height:auto}
/* The map runs --bleed px under the list; keep it no wider than the list's right padding (iPad portrait: 12px) */
@media(min-width:801px) and (max-width:1000px){.map-mode{--bleed:10px}}
/* 全部類型 pill: room for the text plus the chevron at every size */
.map-type-select,.outing-type-select{width:calc(var(--type-chars,4)*1em + 46px)}
@media(max-width:800px){.map-workspace .map-type-select{width:calc(var(--type-chars,4)*1em + 44px)}}
@media(min-width:1001px){.map-mode{--bleed:16px}}
/* Installed app (html.app): compact 56px top bar under a 14px clearance */
@media(max-width:800px){
 html.app .header,html.app .map-mode .header{height:calc(56px + var(--sat,0px))}
 html.app .header .brand,html.app .map-mode .header .brand{padding-top:4px}
 html.app .header .brand-logo,html.app .map-mode .header .brand-logo{width:140px}
 html.app .header .theme-toggle,html.app .header .location{width:36px;height:36px}
 html.app .map-mode{--hdr:calc(56px + var(--sat,0px))}
 html.app .map-mode #main{height:calc(100dvh - 56px - var(--sat,0px) - var(--navh,58px) - env(safe-area-inset-bottom))}
}

/* Redesign stage 1: the two-sun mark sits left of the wordmark (no longer behind 親) */
.header .brand{padding-left:40px}
.header .brand .brand-mark{font-size:30px;left:0;top:50%;transform:translateY(-42%)}
.brand-mark .brand-suns{display:block;width:1.0704em;height:1em}
.seed img{width:14px}
@media(max-width:800px){.header .brand{width:195px;margin-right:-25.16px}}
@media(max-width:359px){.header .brand{margin-right:-44.06px}}
@media(max-width:650px){.header .brand{width:auto;margin-right:0}}
/* Contrast (axe audit 2026-09-24): 查看詳情 text and map credit links; dark.css keeps its own colours. */
.nearby-detail{color:#1f5f95}
.map-mode .leaflet-control-attribution a{color:#1f5f95;text-decoration:underline}

/* Popup ✕ sat on the rounded corner (Henry 2026-09-25): a round button inside the card, text kept clear of it. */
.family-place-popup .leaflet-popup-close-button{top:10px!important;right:10px!important;width:34px!important;height:34px!important;padding:0!important;display:grid;place-items:center;border-radius:50%;font:400 22px/1 var(--sans)!important;text-decoration:none}
.family-place-popup .leaflet-popup-close-button:hover,.family-place-popup .leaflet-popup-close-button:focus-visible{background:var(--pale,#f3eee8)}
.family-place-popup .leaflet-popup-close-button span{display:block;line-height:1;transform:translateY(-1px)}
.map-place-popup-kicker{padding-right:40px}
.map-place-popup h2{margin-right:36px}
/* Separators end the previous item, so a wrapped line never starts with "·". */
.map-place-popup-meta span+span:before{content:none}
.map-place-popup-meta span{white-space:nowrap}
.map-place-popup-meta span:not(:last-child):after{content:'·';margin-left:8px}
