/* One gallery, with an optional interactive 3D spatial navigator. */
.villa-explorer {display:grid;grid-template-columns:minmax(0,1.45fr) minmax(0,1fr);grid-template-areas:"tabs tabs" "viewer map";gap:20px 36px;align-items:center;overflow-anchor:none}
.explorer-tabs {grid-area:tabs;min-width:0}
.explorer-tabs .gallery-rooms {margin:0;padding:4px 0 12px;gap:4px;scrollbar-width:none}
.explorer-tabs button {font-size:14px;padding:10px 14px;min-height:44px;font-weight:400;white-space:nowrap}
.explorer-tabs button[aria-pressed=true] {background:#ffffffa8;color:#30584b;font-weight:500;box-shadow:0 4px 22px #1b3d2d07}
.explorer-viewer {grid-area:viewer;min-width:0}
.explorer-viewer .gallery-track {background:transparent;outline-offset:5px;border-radius:6px}
.explorer-viewer .gallery-track img {height:min(65svh,620px);object-fit:contain;aspect-ratio:auto}
.explorer-viewer .gallery-track figcaption {text-align:center;font-size:13px;padding:10px 0;min-height:40px;color:var(--muted)}
.explorer-viewer .gallery-nav {margin-top:0;padding-top:4px;gap:12px}
.explorer-viewer .gallery-nav button {font-size:13px;min-height:44px}
.explorer-plan {grid-area:map;min-width:0;scroll-margin-top:100px;align-self:center}
.explorer-plan > summary {display:flex;align-items:center;justify-content:space-between;gap:12px;list-style:none;cursor:pointer;padding:12px 0;font-size:20px;font-family:var(--type-display);min-height:48px}
.explorer-plan > summary::-webkit-details-marker {display:none}
.plan-disclosure {font-family:var(--type-body);font-size:20px;transition:transform .25s ease}
.explorer-plan[open] .plan-disclosure {transform:rotate(180deg)}
.explorer-hint {font-size:12px;color:var(--muted);margin:0 0 10px}
.plan-stage {perspective:1000px;padding:30px 6px 36px;isolation:isolate;position:relative}
.plan-stage::before {content:"";position:absolute;inset:18% 3% 3%;z-index:-1;background:radial-gradient(ellipse,#bed0be60,transparent 72%);filter:blur(18px)}
.plan-stage .plan-map {position:relative;transform:rotateX(13deg) rotateZ(-2deg);transform-origin:50% 65%;background:#fff;box-shadow:0 4px 0 #dddcd3,0 8px 0 #e9e8de,0 24px 36px -15px #203b3040;border-radius:5px}
.plan-stage .plan-map > img {display:block;width:100%;height:auto;border-radius:5px}
.plan-stage .plan-dot {width:30px;height:30px;min-height:0;font:500 11px/1 var(--type-body);background:#18332fe6;color:#fff;border:2px solid #fff;box-shadow:0 3px 8px #142b2330;transition:background .22s ease,box-shadow .22s ease;z-index:2}
.plan-stage .plan-dot.plan-bath {background:#fcfaf6f5;color:#25463d;border-color:#d8e0d9}
.plan-stage .plan-dot[aria-pressed=true] {background:#b58b46;color:#fff;border-color:#fff;box-shadow:0 0 0 5px #bc95532b,0 5px 12px #41331a22}
.plan-stage .plan-dot:focus-visible {outline:3px solid #b58b46;outline-offset:4px}
.explorer-zone {font-size:26px;font-weight:400;line-height:1.2;min-height:1.2em;margin:6px 0 14px;color:var(--ink)}
.explorer-plan-notes {font-size:11px;line-height:1.7;color:var(--muted);max-width:45ch}
.explorer-plan-notes a {font-weight:400}
.explorer-footer {display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px 24px;margin-top:16px}
.explorer-footer .button {padding-inline:0;font-size:12px;letter-spacing:.02em}
.explorer-facts {margin-top:24px;padding-block:20px;background:linear-gradient(90deg,transparent,#ffffff60,transparent)}
.explorer-facts .plan-key dl {display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}
.explorer-facts .plan-key dt {font-size:12px}
.explorer-facts .plan-key dd {font-size:20px;font-weight:400}
@media(prefers-reduced-motion:no-preference) {
 .explorer-plan[open] .plan-stage {animation:plan-reveal .55s ease-out both}
 @keyframes plan-reveal {from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}
}
/* Real 3D model: the original drawing remains available if WebGL is unavailable. */
.model-viewport {height:430px;position:relative;overflow:hidden;border-radius:8px;background:#f4f4f4;isolation:isolate;direction:ltr;touch-action:none}
.model-viewport[hidden],.model-tools[hidden],.model-options[hidden],.plan-stage[hidden]{display:none}
.villa-model-canvas {display:block;width:100%;height:100%;cursor:grab;touch-action:none;outline:none}
.model-viewport.is-orbiting .villa-model-canvas {cursor:grabbing}
.model-pin {position:absolute;transform:translate(-50%,-50%);width:26px;height:26px;min-height:0;padding:0;display:grid;place-items:center;border:1.5px solid white;border-radius:50%;font:500 10px/1 system-ui,sans-serif;background:#303030;color:white;box-shadow:0 2px 7px #0003;z-index:2;cursor:pointer}
.model-pin.plan-bath {background:#fff;color:#222;border-color:#777}
.model-pin[aria-pressed=true] {background:#000;color:#fff;box-shadow:0 0 0 5px #0002}
.model-pin[hidden]{display:none}
.model-tools,.model-options {display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:8px 0}
.model-tools button,.model-options button {border:0;background:transparent;border-radius:6px;min-height:38px;padding:6px 9px;font-size:11px;letter-spacing:0;font-weight:400;color:#343434;cursor:pointer}
.model-options button[aria-pressed=true],.model-tools button:hover,.model-options button:hover {background:#fff9}
.model-options button[data-model-zoom],.model-options button[data-model-expand] {font-size:22px;min-width:42px}
.model-options [data-model-expand] {margin-inline-start:auto}
.model-roof-modes {display:flex;flex-wrap:wrap;gap:3px;flex:1 0 100%;padding-bottom:2px}
.model-roof-modes button {min-height:40px;padding:8px 12px;font-size:12px;color:#606060}
.model-roof-modes button[aria-pressed=true] {background:#ffffffb8;color:#171717;box-shadow:0 3px 14px #00000008}
.model-viewport:focus-visible,.model-pin:focus-visible {outline:2px solid #333;outline-offset:3px}
.villa-explorer.model-focus {grid-template-columns:minmax(0,1fr);grid-template-areas:"tabs" "map" "viewer"}
.model-focus .model-viewport {height:min(72svh,720px)}
.model-focus .explorer-plan {width:100%}
.model-focus .explorer-viewer {max-width:900px;width:100%;margin-inline:auto}
.explorer-plan-body:has(.model-viewport[data-ready=true]) .explorer-hint {display:block;font-size:12px}
.explorer-viewer .gallery-track {cursor:grab}
.explorer-viewer .gallery-track.is-dragging {cursor:grabbing;scroll-snap-type:none;scroll-behavior:auto;user-select:none}
@media(max-width:900px){
 .model-viewport {height:330px}
 .model-focus .model-viewport {height:min(60svh,520px)}
 .model-tools {gap:2px}
 .model-tools button {padding:5px 7px;font-size:10px}
 .model-pin {width:24px;height:24px;font-size:10px}
}
@media(max-width:900px) {
 .villa-explorer {grid-template-columns:minmax(0,1fr);grid-template-areas:"tabs" "map" "viewer";gap:8px}
 .explorer-tabs button {font-size:12px;padding:8px 10px}
 .explorer-tabs .gallery-rooms {padding-bottom:4px}
 .explorer-plan > summary {padding:6px 10px;font-family:var(--type-body);font-size:13px;background:#ffffff70;border-radius:6px}
 .explorer-plan-body {padding:8px 5px 12px}
 .explorer-hint {display:none}
 .plan-stage {padding:12px 4px 20px;max-width:550px;margin-inline:auto}
 .plan-stage .plan-map {transform:rotateX(8deg) rotateZ(-1deg)}
 .plan-stage .plan-dot {width:27px;height:27px;font-size:10px}
 .explorer-zone {font-size:22px;margin:4px 0 8px}
 .explorer-plan-notes {font-size:10px;max-width:none}
 .explorer-viewer .gallery-track {align-items:flex-start}
 .explorer-viewer .gallery-track img,
 .villa-explorer:has(.explorer-plan[open]) .gallery-track img {
   width:100%;height:auto;max-height:none;aspect-ratio:auto;object-fit:contain;
 }
 .explorer-viewer .gallery-track figcaption {min-height:30px;padding:6px 0;font-size:12px}
 .explorer-viewer .gallery-nav {font-size:12px}
 .explorer-footer {margin-top:6px;gap:4px 12px}
 .explorer-footer .button {font-size:11px}
 .explorer-facts {margin-top:12px;padding-block:12px}
 .explorer-facts .plan-key dl {grid-template-columns:1fr 1fr;gap:12px 20px}
 .explorer-facts .plan-key dd {font-size:17px}
}

/* Native touch momentum; resize only after the photograph settles. */
.explorer-viewer .gallery-track[data-swipe]{touch-action:pan-x pan-y pinch-zoom;scroll-snap-type:x mandatory;overflow-anchor:none;-webkit-overflow-scrolling:touch}
.explorer-viewer .gallery-track figure{scroll-snap-stop:always}
@media(max-width:900px){.explorer-viewer .gallery-track{transition:height .32s ease}}
@media(prefers-reduced-motion:reduce){.explorer-viewer .gallery-track{transition:none}}
/* Open phone tour: model and selected photograph share the visible screen. */
@media(max-width:900px){
 .villa-explorer.mobile-plan-active{height:var(--explorer-screen,calc(100svh - 140px));min-height:0;grid-template-areas:"map" "viewer";grid-template-rows:minmax(0,1.1fr) minmax(0,1fr);gap:6px;align-items:stretch}
 .mobile-plan-active .explorer-tabs{display:none}
 .mobile-plan-active .explorer-plan{display:block;min-height:0;height:100%;align-self:stretch;width:100%}
 .mobile-plan-active .explorer-plan>summary{height:40px;min-height:0;padding:4px 8px;font-size:13px}
 .mobile-plan-active .explorer-plan-body{display:grid;grid-template-rows:40px minmax(0,1fr) 40px;height:calc(100% - 40px);min-height:0;padding:0;gap:0}
 .mobile-plan-active .explorer-plan::details-content{height:calc(100% - 40px)}
 @supports selector(details::details-content){.mobile-plan-active .explorer-plan-body{height:100%}}
 .mobile-plan-active .explorer-hint,.mobile-plan-active .explorer-zone,.mobile-plan-active .explorer-plan-notes{display:none!important}
 .mobile-plan-active .model-viewport{height:100%;min-height:0;border-radius:5px}
 .mobile-plan-active .model-tools,.mobile-plan-active .model-options{padding:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;gap:2px;min-width:0}
 .mobile-plan-active .model-tools button,.mobile-plan-active .model-options button{flex:none;white-space:nowrap;min-height:40px;padding:4px 8px;font-size:10px}
 .mobile-plan-active .model-roof-modes{display:contents}
 .mobile-plan-active .model-options [data-model-zoom]{font-size:20px;min-width:36px}
 .mobile-plan-active [data-model-expand]{display:none}
 .mobile-plan-active .explorer-viewer{display:grid;grid-template-rows:minmax(0,1fr) 44px;min-height:0;max-width:none;width:100%}
 .mobile-plan-active .gallery-track{height:100%!important;min-height:0;transition:none;align-items:stretch}
 .mobile-plan-active .gallery-track figure{height:100%;display:grid;grid-template-rows:minmax(0,1fr) 24px;min-height:0;margin:0}
 .villa-explorer.mobile-plan-active .gallery-track img{width:100%;height:100%!important;min-height:0;max-height:100%!important;object-fit:contain;aspect-ratio:auto}
 .mobile-plan-active .gallery-track figcaption{padding:3px 0;min-height:0;font-size:11px;line-height:18px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 .mobile-plan-active .gallery-nav{padding:0;min-height:0;align-items:center}
 .mobile-plan-active .plan-stage{grid-row:1/-1;min-height:0;padding:0;display:flex;align-items:center;justify-content:center}
 .mobile-plan-active .plan-stage[hidden]{display:none}
 .mobile-plan-active .plan-map{max-height:100%;aspect-ratio:1776/886;width:auto;max-width:100%;transform:none}
 .mobile-plan-active .plan-map>img{max-height:100%;object-fit:contain}
 body:has(.mobile-plan-active) .ambient-toggle{display:none}
}
@media(max-width:900px) and (orientation:landscape){
 .villa-explorer.mobile-plan-active{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-areas:"map viewer";grid-template-rows:minmax(0,1fr);gap:12px}
}
/* Full-screen photographs, retaining their original aspect ratio. */
.explorer-viewer{position:relative}
.gallery-expand{position:absolute;inset-inline-end:8px;top:8px;z-index:3;width:44px;height:44px;padding:0;border:0;border-radius:5px;background:#fffC;color:#18332f;font:26px/1 system-ui;cursor:pointer}
.gallery-expand:hover{background:#fff}
body.gallery-modal-open{position:fixed;inset-inline:0;overflow:hidden;width:100%}
.gallery-lightbox{position:fixed;inset:0;width:100%;max-width:none;height:100dvh;max-height:none;margin:0;border:0;padding:env(safe-area-inset-top) 12px env(safe-area-inset-bottom);background:#111916;color:#fff;overflow:hidden}
.gallery-lightbox:not([open]){display:none}
.gallery-lightbox[open]{display:grid;grid-template-rows:48px minmax(0,1fr) 52px;gap:4px}
.gallery-lightbox::backdrop{background:#111916}
.gallery-close{justify-self:end;min-width:48px;min-height:48px;border:0;background:transparent;color:#fff;font:32px/1 system-ui;cursor:pointer}
.gallery-lightbox .gallery-track{height:100%!important;min-height:0;background:transparent;align-items:stretch;border-radius:0;scrollbar-width:none;transition:none}
.gallery-lightbox .gallery-track[data-swipe]{touch-action:pan-x pan-y pinch-zoom;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch}
.gallery-lightbox .gallery-track figure{height:100%;min-height:0;display:grid;grid-template-rows:minmax(0,1fr) 28px;margin:0}
.gallery-lightbox .gallery-track img{width:100%;height:100%!important;max-height:100%!important;min-height:0;object-fit:contain;aspect-ratio:auto;border-radius:0}
.gallery-lightbox .gallery-track figcaption{padding:4px 0;min-height:0;font-size:12px;line-height:20px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#fff}
.gallery-lightbox .gallery-nav{margin:0;padding:0;align-items:center;color:#fff}
.gallery-lightbox .gallery-nav button{color:#fff;background:transparent;min-height:48px}
.gallery-lightbox button:focus-visible{outline:2px solid #fff;outline-offset:-3px}
