/* Shared public layouts keep their footer below content and at least at the viewport bottom. */
body[data-page]:has(>footer){display:flex;flex-direction:column;min-height:100vh;min-height:100dvh}
body[data-page]:has(>footer)>main{flex:1 0 auto}
body[data-page]:has(>footer)>header,body[data-page]:has(>footer)>footer{flex-shrink:0}
body[data-page="map"]>.map-app,body[data-page="network-map"]>.map-app{min-height:0}
.reveal{opacity:1;transform:none}
.js body[data-page="home"] .reveal{opacity:0;transform:translateY(18px);transition:opacity .5s ease,transform .5s ease}
.js body[data-page="home"] .reveal.is-visible{opacity:1;transform:none}
.fit-title{max-width:100%;overflow:visible!important;text-overflow:clip!important}
@media(prefers-reduced-motion:reduce){.js body[data-page="home"] .reveal{opacity:1;transform:none;transition:none}}

.photo-open{display:block;border-radius:inherit;cursor:zoom-in}
.photo-open:focus-visible{outline:3px solid #0b51e6;outline-offset:5px}
.photo-dialog{position:fixed;inset:0;box-sizing:border-box;width:calc(100% - 24px);max-width:1200px;max-height:calc(100dvh - 24px);margin:auto;border:0;border-radius:20px;padding:58px 12px max(16px,env(safe-area-inset-bottom));background:#061532;color:white;text-align:center}
.photo-dialog::backdrop{background:#020a20df}
.photo-dialog img{display:block;width:100%;height:auto;max-height:calc(100dvh - 120px);object-fit:contain}
.photo-dialog-close{position:absolute;right:10px;top:8px;width:44px;height:44px;border:1px solid #7384a7;border-radius:50%;background:#fff;color:#071c4b;font-size:30px;cursor:pointer}
.photo-dialog :focus-visible{outline:3px solid #9dc7ff;outline-offset:3px}

/* One responsive ceiling for every location hero; JavaScript may only shrink it. */
body[data-page] :is(.home-hero,.place-hero,.satellite-hero,.page-hero) h1[data-fit-title]{font-size:clamp(3.25rem,6.6vw,5.5rem);transform:none!important}
body[data-page] :is(.home-hero,.place-hero,.satellite-hero,.page-hero) h1.hero-title--wrapped{white-space:normal;overflow-wrap:anywhere;line-height:1.12}
.place-hero:has(.hero-title--wrapped),.satellite-hero:has(.hero-title--wrapped){height:auto;min-height:220px;aspect-ratio:auto}
.place-hero:has(.hero-title--wrapped) .place-hero-copy{padding-top:70px;padding-bottom:40px}
@media(max-width:620px){body[data-page] :is(.home-hero,.place-hero,.satellite-hero,.page-hero) h1[data-fit-title]{font-size:clamp(2rem,12.2vw,3.25rem)}}

/* Compact 36px visual surface inside a 44px keyboard/touch target. */
body :is(.back-link,.detail-back,.map-back-link,.map-back,.primary-button,.button-primary),body[data-page="page"] .content-page-hero .back-link,body .place-hero .detail-back{box-sizing:border-box;display:inline-flex;min-height:44px;align-items:center;justify-content:center;padding:4px 12px;border:4px solid transparent;border-radius:14px;background-clip:padding-box;font-size:.76rem;font-weight:800;line-height:1.3;gap:7px;box-shadow:none}
body .detail-bottom-button{width:fit-content;max-width:100%;margin-inline:auto}
body .nearby-network-panel>a,body .nearby-strip>a{min-height:44px;padding-inline:12px;font-size:.76rem;line-height:1.25}
@media(max-width:620px){
  body :is(.back-link,.detail-back,.map-back-link,.map-back,.primary-button,.button-primary),body[data-page="page"] .content-page-hero .back-link,body .place-hero .detail-back{padding-inline:10px;font-size:.68rem}
  body .nearby-network-panel>a,body .nearby-strip>a{min-height:44px;font-size:.65rem}
}
