/* Palmer Estate: imagery, dark forest surfaces and an explicit night theme. */
:root{color-scheme:dark;--bg:#142b22;--surface:#193329;--raised:#203d31;--text:#f2f0e6;--muted:#bac6ba;--gold:#d6bd82;--line:#d4d8be26;--gutter:clamp(24px,4.5vw,76px);--dock-bottom:max(18px,env(safe-area-inset-bottom));--brand-width:300px;--header-height:88px}
*{box-sizing:border-box}html{font-size:16px;scroll-padding-top:100px}body{margin:0;min-width:0;background:var(--bg);color:var(--text);font:400 var(--type-body)/1.6 var(--font-body);transition:background .65s,color .65s}body:has(dialog:modal){overflow:hidden}body[data-chapter=arrival],body[data-chapter=map]{overflow:hidden}a{color:inherit;text-decoration:none}button,a,summary,select{touch-action:manipulation;-webkit-tap-highlight-color:transparent}button{color:inherit;background:none;border:0;font:500 var(--type-ui)/1.4 var(--font-body);cursor:pointer;min-height:44px}button:disabled{opacity:.5;cursor:default}button,a,summary{transition:color .18s,background .18s,border-color .18s}a:focus-visible,button:focus-visible,select:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--gold);outline-offset:4px}img{display:block;max-width:100%}[hidden]{display:none!important}h1,h2,h3,p{margin:0}h1,h2,h3{font-weight:500;line-height:1.12}h1,h2{font-size:var(--type-section);letter-spacing:-.02em}h3{font-size:var(--type-card)}p{max-width:62ch}strong{font-weight:500}.eyebrow{text-transform:uppercase;color:var(--gold);font-size:var(--type-eyebrow);letter-spacing:.1em}.secondary,.fine-print{color:var(--muted);font-size:var(--type-caption);line-height:1.6}.sr-only,.skip:not(:focus){position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.skip:focus{position:fixed;z-index:200;top:5px;left:5px;padding:12px;background:var(--surface)}
/* The logo is the source artwork's exact alpha contour, exported in white. */
.site-header{position:sticky;top:0;z-index:25;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:16px;height:var(--header-height);padding:0 var(--gutter);background:var(--bg);transition:background .65s}.brand{display:flex;align-items:center;min-height:44px}.brand img{width:var(--brand-width);height:auto;max-width:none}#sound-toggle{color:var(--gold);display:flex;align-items:center;justify-self:start;gap:10px;min-width:44px;padding:0 8px}#sound-label{font-size:var(--type-caption)}.sound-icon{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round}.sound-waves{display:none}[aria-pressed=true] .sound-waves{display:block}[aria-pressed=true] .sound-muted{display:none}.contact-trigger{color:var(--gold);justify-self:end;display:flex;align-items:center;gap:12px;min-height:44px;font-size:var(--type-ui)}.contact-trigger:hover,#sound-toggle:hover{color:var(--gold)}body[data-chapter=arrival] .site-header,body[data-chapter=map] .site-header{position:fixed;inset:0 0 auto;background:linear-gradient(#081a16ba,#081a1660 68%,transparent);height:110px;align-items:start;padding-top:22px;pointer-events:none}body[data-chapter=arrival] .site-header>*,body[data-chapter=map] .site-header>*{pointer-events:auto}.site-header .brand{justify-content:center}
.button{display:inline-flex;align-items:center;justify-content:space-between;gap:28px;min-height:50px;padding:13px 21px;border:1px solid var(--line);border-radius:7px;font:500 var(--type-ui)/1.4 var(--font-body)}.primary,.gold{background:transparent;color:var(--gold);border-color:#d6bd8273}.primary:hover,.gold:hover{background:var(--gold);color:#14271f}.outline:hover{background:var(--raised)}.quiet-link,.quiet-enquiry,.next-chapter{display:inline-flex;align-items:center;gap:24px;min-height:44px;color:var(--gold);font-size:var(--type-ui)}.quiet-enquiry,.next-chapter{border-bottom:1px solid #d6bd8255}
.chapter{padding:36px var(--gutter) 120px;min-height:calc(100dvh - var(--header-height));animation:chapter-in .4s ease both}.chapter-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:40px;margin-bottom:28px}.chapter-heading .eyebrow{margin-bottom:12px}.chapter-heading>p{max-width:33ch;color:var(--muted);font-size:1rem}.chapter h1:focus{outline:none}.chapter-nav{position:fixed;z-index:35;bottom:var(--dock-bottom);left:50%;transform:translateX(-50%);display:flex;gap:4px;padding:8px;background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:0 8px 28px #0003;width:max-content;max-width:calc(100% - 32px);transition:background .65s}.chapter-nav a{display:flex;justify-content:center;align-items:center;min-height:44px;padding:9px 20px;font-size:var(--type-ui);white-space:nowrap;border-radius:9px;color:var(--muted)}.chapter-nav a[aria-current=page]{color:var(--gold);background:var(--raised)}.chapter-nav a:hover{color:var(--text)}body[data-chapter=map] .chapter-nav{display:none}
/* Mounted map retains the visitor's position throughout the property journey. */
#map,#map[hidden]{display:block!important;position:fixed;inset:0;width:100%;height:100dvh;padding:0;margin:0;min-height:0;animation:none;z-index:0}#map[hidden]{visibility:hidden;pointer-events:none}body[data-chapter=arrival] #map[hidden]{visibility:visible;pointer-events:none}.map-frame,.map-frame iframe{width:100%;height:100%!important;border:0;display:block;background:#19372a}
.arrival{position:fixed;inset:0;z-index:10;display:flex;align-items:flex-end;justify-content:flex-start;padding:120px 10vw 16vh;min-height:100dvh;color:#f5f3eb;background:linear-gradient(90deg,#0b211ca1,transparent 85%),linear-gradient(0deg,#091e16b3,transparent 80%);animation:none}.arrival-copy{max-width:720px}.arrival h1{font-size:clamp(48px,5.6vw,80px);margin:18px 0 20px;max-width:12ch;line-height:1.04}.arrival-intro{white-space:nowrap;font-size:var(--type-body);color:#e0e5da;line-height:1.65;margin-bottom:30px}.arrival .primary{background:#142f25;border-color:#bdb7895c;color:#f1eee1;min-width:268px}.arrival .primary:hover{background:#244839}.silent-entry{display:inline-flex;align-items:center;gap:10px;min-height:44px;padding:8px 10px;margin-left:12px;color:#d8dfd1;font-size:var(--type-caption)}.silent-entry:hover{color:#fff}.arrival-foot{position:absolute;bottom:30px;left:10vw;color:#b8c4b6;text-transform:uppercase;font-size:11px}
/* A brief movement guide on first map entry; the visitor dismisses it once. */
.map-guide{width:410px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 36px);padding:42px 24px 24px;background:#112d21;color:var(--text);border:1px solid #d4d8be33;border-radius:18px;text-align:center;box-shadow:0 20px 90px #0006;overflow:auto}.map-guide::backdrop{background:#06191099;backdrop-filter:blur(3px)}.map-guide .guide-close{position:absolute;right:7px;top:5px;width:44px;min-height:44px;font-size:25px;color:var(--muted)}.map-guide h2{font-size:38px;margin:12px 0}.map-guide>p:not(.eyebrow){font-size:15px;color:var(--muted);line-height:1.5}.guide-gestures{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:6px 0 24px}.guide-gestures>div{display:flex;flex-direction:column;align-items:center;gap:12px}.guide-gestures svg{width:72px;height:68px;fill:none;stroke:var(--gold);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;overflow:visible}.guide-gestures span{font-size:13px;color:var(--text);white-space:nowrap}.map-guide .primary{min-width:230px;justify-content:center}.map-guide .guide-keyboard{font-size:11px!important;margin:18px 0 0;color:#9eb3a3!important}.guide-touch{display:none}.guide-pan{animation:guide-pan 3s ease-in-out infinite}.guide-scroll{animation:guide-scroll 2s ease-in-out infinite}.guide-pulse{transform-origin:40px 35px;animation:guide-pulse 2.7s ease-out infinite}.guide-pinch-out{animation:pinch-out 2.5s ease-in-out infinite}.guide-pinch-in{animation:pinch-in 2.5s ease-in-out infinite}
@keyframes guide-pan{0%,100%{transform:translateX(-4px)}50%{transform:translateX(4px)}}@keyframes guide-scroll{0%,100%{transform:translateY(-3px)}50%{transform:translateY(3px)}}@keyframes guide-pulse{0%{opacity:.7;transform:scale(.7)}85%,100%{opacity:0;transform:scale(1.15)}}
@media(pointer:coarse),(max-width:600px){.guide-touch{display:block}.guide-desktop,.guide-keyboard{display:none!important}}
@media(max-width:600px){.map-guide{padding:40px 16px 22px}.map-guide h2{font-size:34px}.guide-gestures{gap:8px}.guide-gestures svg{width:62px;height:62px}.map-guide>p:not(.eyebrow){font-size:14px}}
@media(max-height:520px){.map-guide{padding-top:22px}.map-guide h2{margin:7px 0;font-size:30px}.guide-gestures{margin:14px 0;gap:24px}.guide-gestures svg{height:48px}.map-guide .guide-keyboard{margin-top:10px}}
/* Residence: architecture leads; copy and facts sit alongside it on wide screens. */
.estate-chapter{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(300px,1fr);align-items:center;gap:clamp(32px,4.5vw,76px);padding-top:24px}.estate-stage{position:relative;min-width:0;overflow:hidden;background:var(--bg);border-radius:4px}.estate-stage>img{width:100%;height:auto;aspect-ratio:16/10;object-fit:contain;transition:opacity .3s}.stage-topline{position:absolute;top:16px;left:18px;right:18px;pointer-events:none}.stage-topline>span{font-size:var(--type-caption);padding:6px 10px;color:#eeeedd;background:#0c201aad;border-radius:4px}.stage-bottomline{position:absolute;bottom:16px;left:18px;right:18px;display:flex;align-items:center;justify-content:space-between;gap:10px}.glass-button{display:inline-flex;align-items:center;justify-content:center;gap:16px;min-height:44px;padding:10px 14px;background:#10251eea;color:#eeeee1;font-size:var(--type-ui);border:1px solid #d4dcc32b;border-radius:8px}.glass-button:hover{background:#274739}.segmented{display:flex;gap:2px;padding:4px;background:var(--surface);border:1px solid var(--line);border-radius:10px}.segmented button{min-width:60px;padding:8px 14px;border-radius:6px;font-size:var(--type-ui);color:var(--muted)}.segmented button[aria-pressed=true]{color:var(--gold);background:var(--raised)}.estate-story{padding:24px 0;max-width:560px}.estate-story .chapter-heading{margin-bottom:22px}.estate-story h1{font-size:clamp(40px,4vw,60px);max-width:12ch}.estate-description{font-size:var(--type-body);color:var(--muted)}.estate-facts{display:flex;gap:35px;margin:32px 0;padding-top:24px;border-top:1px solid var(--line)}.estate-facts>span{display:flex;flex-direction:column;gap:6px;font-size:var(--type-caption);color:var(--muted)}.estate-facts strong{font:500 38px/1.15 var(--font-display);color:var(--text)}.estate-facts small{font:400 1rem var(--font-body)}.render-caption{font-size:var(--type-caption);color:var(--muted);margin-top:20px}
.experience-layout{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(280px,1fr);gap:clamp(30px,4vw,70px);align-items:center}.experience-visual{position:relative;min-width:0;background:#0e1714;overflow:hidden;border-radius:4px}.experience-visual>img{width:100%;height:auto;aspect-ratio:16/9;object-fit:contain}.experience-tools{position:absolute;top:14px;left:14px;right:14px;display:flex;justify-content:space-between;gap:10px}.experience-copy h2{font-size:clamp(36px,3.3vw,48px);margin:16px 0 22px;max-width:16ch}.experience-copy>p:not(.eyebrow){font-size:var(--type-body)}.experience-copy .secondary{font-size:var(--type-caption)!important;margin-top:18px}.experience-copy .secondary:empty{display:none}.experience-pagination{display:flex;align-items:center;gap:22px;margin-top:26px}.experience-pagination button{width:44px;border:1px solid var(--line);border-radius:50%;font-size:24px}.experience-pagination button:hover{background:var(--raised)}.experience-pagination>span{font-size:var(--type-caption);color:var(--muted);font-variant-numeric:tabular-nums}.experience-index{display:grid;grid-template-columns:repeat(8,minmax(100px,1fr));overflow-x:auto;margin-top:32px;border-top:1px solid var(--line);padding-bottom:8px}.experience-index button{text-align:left;min-height:88px;padding:14px 12px;border-top:2px solid transparent;color:var(--muted);font-size:var(--type-caption);font-weight:400}.experience-index button span{display:block;color:var(--gold);margin-bottom:8px;font-size:12px}.experience-index button[aria-pressed=true]{color:var(--text);border-top-color:var(--gold);background:var(--surface)}.gallery-controls{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);display:flex;gap:3px;background:#10271fe8;border:1px solid #d4dcc32b;border-radius:10px;padding:3px}.gallery-controls button{width:44px;border-radius:6px;color:#d9e0d4;font-size:var(--type-caption)}.gallery-controls button[aria-pressed=true]{color:#e7d3a2;background:#2a4437}
.project-layout{display:grid;grid-template-columns:minmax(280px,.85fr) minmax(0,1.4fr);gap:clamp(30px,5vw,85px);padding:20px 0 45px;align-items:start}.project-summary h2{font-size:clamp(36px,3vw,46px);margin-bottom:26px}.spec-grid{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:0}.spec-grid>div{padding-top:12px;border-top:1px solid var(--line)}.spec-grid dt{font-size:var(--type-caption);color:var(--muted)}.spec-grid dd{font:500 42px/1.15 var(--font-display);margin:7px 0 0}.spec-grid dd span{font:400 1rem var(--font-body)}.project-quick{display:flex;flex-wrap:wrap;gap:6px 24px;font-size:var(--type-caption);color:var(--muted);margin:24px 0}.plan-panel{background:var(--surface);padding:24px;min-width:0;border:1px solid var(--line);border-radius:8px}.plan-heading{display:flex;justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:18px}.plan-heading h2{font-size:32px}.plan-tabs{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:16px}.plan-tabs button{padding:8px 12px;font-size:var(--type-ui);border-radius:6px;color:var(--muted)}.plan-tabs button[aria-pressed=true]{color:var(--gold);background:var(--raised)}.plan-image{position:relative;display:block;width:100%;padding:0;background:#fff}.plan-image img{width:100%;height:auto;aspect-ratio:16/10;object-fit:contain}.plan-image>span{position:absolute;bottom:10px;right:10px;background:#142b22;color:#eeeadd;padding:10px 14px;font-size:var(--type-caption);border-radius:5px}.plan-panel>p{margin-top:15px;font-size:var(--type-caption);color:var(--muted)}.project-information{display:grid;grid-template-columns:1fr 1fr;gap:8vw;border-top:1px solid var(--line);padding:40px 0}.project-information h2{font-size:36px;margin-top:12px}.project-introduction p{margin:0 0 16px}.project-close{display:flex;align-items:center;justify-content:space-between;gap:32px;padding:35px 0;border-top:1px solid var(--line)}.project-close h2{font-size:36px;max-width:20ch}footer{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px 25px;padding:20px 0;border-top:1px solid var(--line);font-size:var(--type-caption);color:var(--muted)}
/* Destination and property dialogs share dark, opaque reading surfaces. */
dialog{color:var(--text);background:var(--surface);padding:0;border:1px solid var(--line);border-radius:12px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 40px);box-shadow:0 15px 50px #0005;overscroll-behavior:contain;scrollbar-color:#667e6d var(--surface)}dialog::backdrop{background:#050e0bd1}dialog[open]{animation:panel-in .25s ease both}.close-button{display:flex;align-items:center;justify-content:center;gap:10px;min-height:44px;min-width:44px;padding:8px 12px;font-size:var(--type-caption);z-index:3;border-radius:8px}.close-button:hover{background:var(--raised)}.close-button span{font-size:26px;line-height:1}.place-dialog{position:fixed;z-index:40;inset:auto 24px calc(var(--dock-bottom) + 80px) auto;width:400px;max-height:calc(100dvh - 210px);margin:0;overflow-y:auto}.place-dialog>.close-button{position:sticky;top:0;float:right;background:var(--surface);margin-bottom:-44px}.place-heading{padding:26px 28px 18px;border-bottom:1px solid var(--line)}.place-heading img{display:none}.place-heading .eyebrow{padding-right:55px}.place-heading h2{font-size:28px;margin:13px 15px 10px 0;max-width:23ch}.place-heading>p:last-child{font-size:var(--type-caption);color:var(--muted)}.place-body{padding:22px 28px 24px}.place-summary,.place-relevance p{font-size:var(--type-body);line-height:1.65}.place-body details{margin-top:16px}.place-body summary{display:flex;align-items:center;justify-content:space-between;min-height:44px;cursor:pointer;list-style:none;border-top:1px solid var(--line);font-size:var(--type-ui);color:var(--muted)}.place-body summary::-webkit-details-marker{display:none}.place-body summary:after{content:'+';font-size:22px}.place-body details[open] summary:after{content:'−'}.place-body ul{padding-left:18px;margin:12px 0;font-size:var(--type-body);color:var(--muted)}.place-body li{margin:9px 0}.place-relevance{margin:20px 0;border-left:1px solid var(--gold);padding-left:16px;color:var(--gold)}.place-body .button{margin-top:12px;padding:12px 0;border:0;border-radius:0;border-bottom:1px solid #d6bd8266;color:var(--gold);min-height:44px;line-height:1.5}.place-body .quiet-link{margin-top:8px;font-size:var(--type-caption)}.place-body .fine-print:empty{display:none}
.directory-dialog{width:780px;padding:34px}.directory-dialog>.close-button{position:sticky;top:0;float:right;background:var(--surface)}.directory-dialog h2{margin:12px 0 26px}#directory-list{display:grid;grid-template-columns:1fr 1fr;gap:26px}#directory-list h3{margin-bottom:10px}#directory-list button{display:block;text-align:left;width:100%;border-top:1px solid var(--line);padding:12px 0;font-size:var(--type-ui)}.image-dialog{width:min(1500px,96vw);height:92dvh;max-height:92dvh}.image-dialog[open]{display:flex;flex-direction:column}.image-dialog-header{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:12px 22px;flex-shrink:0}.image-dialog-header h2{font-size:var(--type-card)}.image-scroll{display:flex;align-items:center;justify-content:center;min-height:0;flex:1;overflow:auto;background:#070f0c}.image-scroll img{width:100%;height:100%;object-fit:contain}.image-dialog>p,.film-dialog>p{max-width:none;padding:15px 24px;font-size:var(--type-caption);color:var(--muted)}.image-dialog.is-plan .image-scroll{display:block;background:#fff}.image-dialog.is-plan img{width:100%;height:auto;max-width:none;cursor:zoom-in}.image-dialog.is-plan.is-zoomed img{width:max(1800px,160%);cursor:zoom-out}.image-dialog.is-plan>p{display:flex;align-items:center;justify-content:space-between;gap:20px}.plan-zoom{border:1px solid var(--line);padding:8px 14px;white-space:nowrap;border-radius:6px}.film-dialog{width:min(1200px,96vw)}.film-dialog video{display:block;width:100%;max-height:74dvh;background:#000}
.enquiry-dialog{width:550px;padding:40px}.enquiry-dialog>.close-button{position:absolute;right:12px;top:12px}.estate-seal{width:32px;height:auto;margin-bottom:22px}.enquiry-dialog h2{font-size:48px;margin:14px 0 22px}.enquiry-dialog>p:not(.eyebrow){font-size:1rem}.enquiry-dialog label{display:block;margin:26px 0 8px;font-size:var(--type-ui)}.enquiry-dialog select{width:100%;min-height:50px;border:1px solid var(--line);border-radius:5px;padding:10px;color:var(--text);background:var(--bg);font-size:1rem;margin-bottom:18px}.enquiry-dialog .button{width:100%}.enquiry-dialog .email-note{font-size:var(--type-caption)!important;color:var(--muted);margin-top:12px}.direct-email{display:flex;justify-content:space-between;align-items:center;gap:10px;border-top:1px solid var(--line);padding-top:15px;margin-top:20px;font-size:var(--type-ui);overflow-wrap:anywhere}.direct-email button{border:1px solid var(--line);border-radius:5px;padding:8px 12px}#copy-status{font-size:var(--type-caption);min-height:1.6em;margin-top:7px}
.explorer-dialog{width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border:0;border-radius:0;margin:0;background:var(--bg);overflow:hidden}.viewport{position:absolute;inset:0;overflow:hidden;touch-action:none;cursor:grab}.viewport.dragging{cursor:grabbing}#estate-world{position:absolute;top:0;left:0;width:1600px;height:900px;transform-origin:0 0;will-change:transform}#estate-world>img{width:1600px;height:900px;max-width:none;object-fit:cover;pointer-events:none}.estate-marker{position:absolute;transform:translate(-50%,-50%);width:44px;height:44px;padding:0;display:grid;place-items:center}.estate-marker:before{content:'';display:block;width:13px;height:13px;border-radius:50%;background:#e8d3a3;border:2px solid #fff4ce;box-shadow:0 0 0 5px #d3bc7940}.estate-marker span{position:absolute;top:42px;left:50%;transform:translateX(-50%);white-space:nowrap;background:#10251ef2;color:#f1eddf;font:500 14px/1.4 var(--font-body);padding:8px 12px;border:1px solid #d4dcc32b;border-radius:6px;visibility:hidden}.estate-marker:hover span,.estate-marker:focus-visible span{visibility:visible}.explorer-top,.explorer-bottom{position:absolute;left:0;right:0;display:flex;align-items:center;justify-content:space-between;padding:20px;gap:20px;pointer-events:none}.explorer-top>*,.explorer-bottom>*{pointer-events:auto}.explorer-top{top:0;background:linear-gradient(#07150fbb,transparent)}.explorer-top>span{font-size:var(--type-ui)}.explorer-top .close-button{background:var(--surface)}.explorer-bottom{bottom:0;background:linear-gradient(transparent,#07150fbb)}.explorer-bottom>p{font-size:var(--type-caption)}.explorer-tools{display:flex;gap:8px}.explorer-tools>button{min-width:44px;background:var(--surface);border:1px solid var(--line);border-radius:8px;font-size:22px}.noscript{position:fixed;inset:0;z-index:200;background:var(--bg);padding:10vh 10vw}.media-unavailable{min-height:160px;background:var(--surface)}
@keyframes chapter-in{from{opacity:0;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@keyframes panel-in{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}
@media(min-width:1700px){.chapter:not(.arrival):not(.map-chapter){max-width:1900px;margin:auto}}
@media(max-width:1000px){.estate-chapter{display:block}.estate-stage{max-width:1100px;margin:auto}.estate-stage>img{aspect-ratio:16/9}.estate-story{max-width:none;display:grid;grid-template-columns:1fr 1fr;gap:0 40px;padding-top:32px}.estate-story .chapter-heading{grid-column:1;grid-row:1/3;margin:0}.estate-story h1{font-size:48px}.estate-description{grid-column:2}.estate-facts{grid-column:2;margin:22px 0;padding-top:20px}.estate-story>.button{grid-column:1;align-self:start;justify-self:start;margin-top:24px}.render-caption{grid-column:2}.experience-layout{grid-template-columns:1fr;gap:26px}.experience-copy{max-width:650px}.experience-copy h2{max-width:none}.project-layout{grid-template-columns:1fr;gap:35px}.spec-grid{grid-template-columns:repeat(4,1fr)}.chapter-heading{gap:25px}.chapter-heading>p{max-width:27ch}.place-dialog{right:16px}}
@media(max-width:600px){:root{--gutter:24px;--brand-width:220px;--header-height:76px}.site-header{padding:0 16px;gap:8px}#sound-toggle{padding:0;min-width:44px}#sound-label{display:none}.contact-trigger{font-size:14px;gap:0}.contact-trigger span{display:none}body[data-chapter=arrival] .site-header,body[data-chapter=map] .site-header{height:102px;padding:18px 16px 0}.chapter{padding-top:24px}.chapter-heading{display:block;margin-bottom:24px}.chapter-heading>p{margin-top:15px;font-size:1rem;max-width:35ch}.chapter-heading .next-chapter{margin-top:14px}.chapter-nav{width:calc(100% - 32px);max-width:410px;gap:0;padding:7px}.chapter-nav a{flex:1;padding:9px 6px;font-size:14px}.arrival{padding:110px 30px 21vh;background:linear-gradient(0deg,#0b211ce0,#0b211c60 60%,#0b211c08)}.arrival h1{font-size:48px;max-width:10ch;margin:18px 0 22px}.arrival-intro{font-size:clamp(13px,3.65vw,16px);max-width:none;margin-bottom:25px}.arrival-intro br{display:none}.arrival .primary{padding:13px 18px;min-width:265px}.silent-entry{display:flex;margin:10px 0 0;padding:8px 0}.arrival-foot{bottom:24px;left:30px;font-size:10px}.estate-chapter{padding-top:0}.estate-stage{margin:0 calc(-1*var(--gutter));border-radius:0}.estate-stage>img{aspect-ratio:16/11;object-fit:contain}.stage-topline{top:10px;left:14px}.stage-topline>span{font-size:11px;padding:5px 8px}.stage-bottomline{left:14px;right:14px;bottom:10px}.glass-button{font-size:14px;padding:9px 12px}.segmented button{font-size:14px;padding:7px 12px;min-width:54px}.estate-story{display:block;padding:28px 0 0}.estate-story .chapter-heading{margin-bottom:16px}.estate-story h1{font-size:40px;max-width:none}.estate-description{line-height:1.7}.estate-description br{display:none}.estate-facts{justify-content:space-between;gap:24px;margin:25px 0;padding-top:20px}.estate-facts strong{font-size:36px}.estate-story>.button{margin-top:0}.render-caption{font-size:12px;margin-top:18px}.experience-visual{margin:0 calc(-1*var(--gutter));border-radius:0}.experience-tools{left:10px;right:10px;top:10px;gap:6px}.experience-tools .glass-button{font-size:13px;padding:9px}.experience-copy h2{font-size:36px;margin:12px 0 18px}.experience-index{margin:24px -4px 0;grid-template-columns:repeat(8,135px)}.experience-index button{font-size:14px;padding:12px}.gallery-controls{bottom:10px}.spec-grid{grid-template-columns:1fr 1fr}.project-summary h2{font-size:36px}.plan-panel{padding:16px;margin:0 -8px}.plan-heading .eyebrow{display:none}.plan-tabs{gap:2px}.plan-tabs button{font-size:14px;padding:8px}.plan-image img{aspect-ratio:4/3}.plan-image>span{font-size:13px;padding:8px}.project-information{grid-template-columns:1fr;gap:25px;padding:30px 0}.project-close{flex-direction:column;align-items:flex-start;gap:24px}.project-close h2{font-size:32px}footer{flex-direction:column;gap:12px}.place-dialog{inset:auto 10px calc(var(--dock-bottom) + 78px);width:calc(100% - 20px);max-width:420px;max-height:min(57dvh,540px);margin:0 auto}.place-heading{padding:22px 24px 14px}.place-heading h2{font-size:26px}.place-body{padding:18px 24px 22px}.place-dialog>.close-button{min-width:44px;padding:8px}.directory-dialog{padding:26px}#directory-list{grid-template-columns:1fr}.image-dialog{width:100%;max-width:calc(100vw - 12px)}.image-dialog-header{padding:10px 14px;gap:10px}.image-dialog-header h2{font-size:24px}.image-dialog>p,.film-dialog>p{padding:12px 16px;font-size:13px}.image-dialog.is-plan>p{flex-wrap:wrap;gap:10px}.enquiry-dialog{padding:32px 25px;max-width:calc(100vw - 20px)}.enquiry-dialog h2{font-size:40px}.direct-email{font-size:14px}.explorer-top,.explorer-bottom{padding:12px}.explorer-top>span{font-size:14px;max-width:190px}.explorer-bottom{flex-direction:column;align-items:flex-start;gap:10px}.explorer-tools{align-self:flex-end}}
@media(max-width:380px){:root{--brand-width:200px}.site-header{gap:4px}.chapter-nav a{font-size:13px}.arrival h1{font-size:44px}.contact-trigger{font-size:13px}}
@media(max-height:580px){.arrival{padding-top:90px;padding-bottom:45px;align-items:center}.arrival h1{font-size:40px;max-width:none;margin:12px 0}.arrival-intro{margin-bottom:15px;font-size:14px}.arrival-foot{display:none}.silent-entry{display:inline-flex;margin:0 0 0 12px}.place-dialog{max-height:calc(100dvh - 125px);bottom:88px}.arrival .eyebrow{font-size:11px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}


body[data-chapter=arrival] #sound-toggle{visibility:hidden;pointer-events:none}
body.has-map-shortcuts .place-dialog{bottom:calc(var(--dock-bottom) + 146px);max-height:min(57dvh,calc(100dvh - 240px))}
@media(max-width:350px){:root{--brand-width:180px}.arrival{padding-left:24px;padding-right:24px}.arrival-foot{left:24px}}
@keyframes pinch-out{0%,100%{transform:translate(0,0)}55%{transform:translate(4px,-3.25px)}}
@keyframes pinch-in{0%,100%{transform:translate(0,0)}55%{transform:translate(-4px,3.25px)}}
/* Reviewed desktop composition: one content width, aligned image and reading columns. */
.site-header{background:#0b2119;border-bottom:1px solid #d6bd8226}
#sound-toggle{color:var(--text)}
#sound-toggle[aria-pressed=true]{color:var(--gold)}
#sound-toggle:hover{background:#ffffff0a;color:inherit;border-radius:8px}
#sound-toggle[aria-pressed=true]:hover{color:var(--gold)}
.brand{position:absolute;left:50%;transform:translateX(-50%)}
.contact-trigger{grid-column:3}
body[data-chapter=arrival] .site-header,body[data-chapter=map] .site-header{border:0}
.chapter:not(.arrival):not(.map-chapter){width:100%;max-width:1568px;margin-inline:auto;padding:48px var(--gutter) 128px}
.chapter-heading{align-items:center;margin-bottom:32px}
.chapter-heading h1{font-size:clamp(38px,3.4vw,52px)}
.chapter-heading .eyebrow{margin-bottom:8px}
.chapter-heading .next-chapter{border:1px solid #d6bd8273;border-radius:7px;padding:12px 18px;min-height:50px}
.button{justify-content:center}
.arrival h1{max-width:none}
.arrival .primary{min-width:242px}
.map-guide{width:440px;padding:48px 24px 26px}
.guide-gestures{margin:0 0 30px;gap:18px}
.guide-gestures>div{gap:16px}
.map-guide .primary{min-width:190px;min-height:46px;padding:11px 18px}
.map-guide .primary:focus-visible{outline-offset:3px}
.estate-chapter{grid-template-columns:minmax(0,2fr) minmax(300px,1fr);gap:48px;align-items:center}
.estate-stage>img{aspect-ratio:16/9;object-fit:contain}
.estate-story{padding:0;max-width:none}
.estate-story h1{font-size:clamp(40px,3.5vw,54px);max-width:13ch}
.estate-facts{gap:32px;margin:28px 0}
.estate-description{max-width:32ch}
.experience-layout{grid-template-columns:minmax(0,2fr) minmax(290px,1fr);gap:40px;align-items:start}
.experience-copy h2{font-size:36px;max-width:none;margin:0 0 16px}
.experience-copy>p{color:var(--muted)}
.experience-index{grid-template-columns:1fr 1fr;overflow:visible;gap:0 14px;margin:26px 0 0;border:0;padding:0}
.experience-index button{display:flex;align-items:center;gap:10px;min-height:58px;padding:10px 8px;font-size:14px;line-height:1.4;border-top:1px solid var(--line);border-radius:0}
.experience-index button span{margin:0;font-size:11px;flex:none}
.experience-index button[aria-pressed=true]{border-color:var(--gold);color:var(--gold)}
.project-layout{grid-template-columns:minmax(280px,.72fr) minmax(0,1.8fr);gap:48px;padding:0 0 36px}
.project-summary h2{font-size:30px;margin:0 0 24px}
.spec-grid{gap:24px 20px}
.spec-grid dd{font-size:38px}
.project-quick{display:grid;gap:8px;margin:28px 0 0}
.plan-panel{padding:20px}
.plan-heading{margin-bottom:12px}
.plan-heading h2{font-size:30px}
.plan-image{background:transparent}
.plan-image img{aspect-ratio:auto;height:auto}
.project-contact{display:flex;justify-content:space-between;align-items:center;gap:36px;padding:30px 0;border-top:1px solid var(--line)}
.project-contact h2{font-size:32px;margin-bottom:8px}
.project-contact p{font-size:var(--type-ui);color:var(--muted)}
.project-contact .button{flex:none}
footer{padding:20px 0;align-items:center}
.place-body .button{padding:12px 16px;border:1px solid #d6bd8273;border-radius:7px}
.place-body .quiet-link{display:flex;margin-top:12px;font-size:var(--type-caption)}
.image-dialog{height:fit-content;width:min(1400px,calc(100vw - 48px));max-height:calc(100dvh - 48px);overflow:hidden}
.image-scroll{flex:0 1 auto;overflow:auto;min-height:0}
.image-scroll img{display:block;width:auto;height:auto;max-width:100%;max-height:calc(100dvh - 128px);object-fit:contain}
.image-dialog.is-plan .image-scroll{display:flex;background:#0c1c15}
.image-dialog.is-plan img{width:100%;height:auto;max-width:100%;max-height:calc(100dvh - 190px);object-fit:contain}
.image-tools{display:flex;justify-content:flex-end;gap:12px;padding:10px 18px;flex:none;border-top:1px solid var(--line)}
.image-dialog.is-plan.is-zoomed{height:calc(100dvh - 48px)}
.image-dialog.is-plan.is-zoomed .image-scroll{display:block;flex:1;align-items:initial}
.image-dialog.is-plan.is-zoomed img{width:max(1800px,160%);max-width:none;max-height:none;cursor:zoom-out}
.enquiry-dialog{width:520px;padding:38px}
.enquiry-dialog h2{font-size:44px;margin:0 0 26px}
.enquiry-dialog label{margin-top:0}
@media(min-width:1001px){
 .estate-chapter{min-height:min(860px,calc(100dvh - var(--header-height)))}
 .spaces-chapter{min-height:0}
}
@media(min-width:601px) and (max-width:1000px){
 .estate-chapter{display:block}
 .estate-story{padding-top:32px;display:grid;grid-template-columns:1fr 1fr;gap:0 32px}
 .estate-story h1{max-width:13ch;font-size:44px}
 .experience-layout{grid-template-columns:1fr}
 .experience-copy{max-width:none;display:grid;grid-template-columns:1fr 1fr;gap:0 32px}
 .experience-copy h2{grid-column:1;margin-bottom:16px}
 .experience-copy>p{grid-column:1;grid-row:2}
 .experience-index{grid-column:2;grid-row:1/4;margin:0}
 .project-layout{grid-template-columns:1fr;gap:28px}
 .spec-grid{grid-template-columns:repeat(4,1fr)}
 .project-quick{display:flex;gap:8px 28px;flex-wrap:wrap;margin-top:20px}
}
@media(max-width:600px){
 .site-header{grid-template-columns:64px minmax(0,1fr) 64px;gap:0;padding-inline:12px}
 #sound-toggle{justify-self:center;justify-content:center;width:44px;padding:0}
 .contact-trigger{justify-self:center}
 body[data-chapter=arrival] .site-header,body[data-chapter=map] .site-header{padding:18px 12px 0}
 .chapter:not(.arrival):not(.map-chapter){padding:28px 24px 112px}
 .chapter-heading{margin-bottom:24px}
 .chapter-heading h1{font-size:38px}
 .chapter-heading .next-chapter{padding:10px 14px;min-height:44px}
 .arrival .primary{min-width:230px}
 .map-guide{padding:42px 18px 24px}
 .guide-gestures{gap:10px;margin-bottom:30px}
 .guide-gestures>div{gap:14px}
 .guide-gestures svg{width:58px;height:60px}
 .guide-gestures span{font-size:12px}
 .map-guide .primary{min-width:180px}
 .estate-chapter{display:block}
 .estate-story{display:block;padding-top:26px}
 .estate-story h1{font-size:40px;max-width:14ch}
 .estate-description{max-width:none}
 .estate-stage>img{aspect-ratio:16/10}
 .experience-layout{grid-template-columns:1fr;gap:26px}
 .experience-copy{max-width:none}
 .experience-copy h2{font-size:34px;margin:0 0 14px}
 .experience-index{grid-template-columns:1fr 1fr;margin-top:24px}
 .experience-index button{font-size:14px;min-height:58px;padding-inline:6px}
 .project-layout{grid-template-columns:1fr;gap:28px;padding-bottom:28px}
 .spec-grid{grid-template-columns:1fr 1fr}
 .project-quick{margin-top:24px}
 .plan-panel{padding:14px;margin-inline:-8px}
 .plan-tabs button{font-size:13px;padding-inline:8px}
 .plan-image>span{position:static;display:block;width:max-content;margin:10px 0 0 auto;background:transparent;color:var(--gold);padding:8px 0}
 .project-contact{display:block;padding:26px 0}
 .project-contact .button{margin-top:22px}
 footer{align-items:flex-start}
 .image-dialog{width:calc(100vw - 16px);max-width:calc(100vw - 16px);max-height:calc(100dvh - 32px)}
 .image-scroll img{max-height:calc(100dvh - 112px)}
 .image-dialog.is-plan img{max-height:calc(100dvh - 170px)}
 .image-tools{padding:9px 14px}
 .image-dialog.is-plan.is-zoomed{height:calc(100dvh - 32px)}
 .enquiry-dialog{padding:30px 24px}
 .enquiry-dialog h2{font-size:38px}
}
@media(max-width:350px){
 .site-header{grid-template-columns:52px minmax(0,1fr) 60px;padding-inline:8px}
 body[data-chapter=arrival] .site-header,body[data-chapter=map] .site-header{padding-inline:8px}
 .guide-gestures{gap:6px}.guide-gestures span{font-size:11px}
}
@media(min-width:1001px){
 body:not([data-chapter=arrival]):not([data-chapter=map]){--header-height:132px}
 body:not([data-chapter=arrival]):not([data-chapter=map]) .site-header{align-items:start;padding-top:18px}
 body:not([data-chapter=arrival]):not([data-chapter=map]) .site-header .brand{top:18px}
 .chapter-nav{top:76px;bottom:auto;padding:0;gap:12px;background:transparent;border:0;box-shadow:none;border-radius:0}
 .chapter-nav a{min-height:42px;padding:8px 16px;border-radius:0;border-bottom:1px solid transparent}
 .chapter-nav a[aria-current=page]{background:transparent;border-color:var(--gold)}
 .chapter:not(.arrival):not(.map-chapter){padding-top:36px;padding-bottom:60px}
}
/* Keep every header item on the same optical centreline. */
.site-header .brand{top:calc((var(--header-height) - 44px)/2)}
body[data-chapter=arrival] .site-header .brand,body[data-chapter=map] .site-header .brand{top:22px}
.map-guide .primary:focus-visible{outline-offset:0;border-color:var(--gold)}
@media(min-width:1001px){body:not([data-chapter=arrival]):not([data-chapter=map]) .site-header .brand{top:18px}}
@media(max-width:600px){body[data-chapter=arrival] .site-header .brand,body[data-chapter=map] .site-header .brand{top:18px}}

/* Map-first panels: measured against the selected node, not a fixed bottom sheet. */
.place-dialog{padding:0;border-radius:11px;background:#112d21f5;overflow:auto;overscroll-behavior:contain;box-shadow:0 6px 24px #0004;animation:none}
.place-dialog[open]{animation:none;transform:none}
.place-heading{position:sticky;top:0;z-index:1;padding:14px 48px 3px 16px;background:#112d21;border:0}
.place-heading h2{font-size:26px;line-height:1.08;margin:0;max-width:none}
.place-heading .close-button{position:absolute;right:5px;top:4px;width:40px;min-width:40px;height:40px;min-height:40px;font-size:23px;padding:4px}
#place-kicker{font-size:11px;color:var(--muted);margin:6px 0 0;line-height:1.4}
.place-actions{display:flex;gap:8px;padding:0 10px 3px}.place-actions button{font-size:12px;color:var(--gold);padding:5px 8px;min-height:36px}
.place-actions button[aria-expanded=true]{text-decoration:underline;text-underline-offset:5px}
.place-body{padding:15px 17px 18px;border-top:1px solid var(--line)}
.place-body .place-summary{font-size:15px;line-height:1.6}.place-body .place-relevance{padding:0;margin:14px 0;border:0;font-size:14px}
#place-facts{font-size:14px;padding-left:18px;margin:14px 0}.place-body .fine-print{font-size:12px}.place-body .button{font-size:13px;min-height:44px;margin-top:12px}
#place-context{padding:6px 12px 12px}#place-context svg{display:block;width:100%;height:auto;border-radius:6px}#place-context p{font-size:12px;margin-top:6px}
body.map-moving .place-dialog{visibility:hidden;pointer-events:none}
.place-dialog[data-pending=true]{visibility:hidden;pointer-events:none}
/* Gallery pagination lives below the picture and never replaces the focused button. */
.experience-visual{overflow:visible}.gallery-bar{display:flex;align-items:center;justify-content:center;gap:12px;min-height:44px}
.gallery-controls{position:static;transform:none;padding:0;border:0;background:none;display:flex;gap:0}
.gallery-controls button{display:grid;place-items:center;min-width:44px;width:44px;height:44px;padding:0;background:none;border:0;border-radius:0}
.gallery-controls button:after{content:'';width:18px;height:3px;background:#9cab9e;border-radius:3px}
.gallery-controls button[aria-pressed=true]{background:none}.gallery-controls button[aria-pressed=true]:after{background:var(--gold)}
#gallery-count{font-size:11px;color:var(--muted)}.space-picker{display:none}
/* A stable canvas for continuous drawing zoom; no fixed white page extension. */
.image-dialog.is-plan{height:fit-content}
.image-dialog.is-plan .image-scroll{position:relative;display:block;flex:none;aspect-ratio:16/9;width:100%;max-height:calc(100dvh - 170px);min-height:0;overflow:hidden;touch-action:none;cursor:grab;background:#10251d}
.image-dialog.is-plan .image-scroll:active{cursor:grabbing}.image-dialog.is-plan .image-scroll img{position:absolute;user-select:none;pointer-events:none;transform-origin:center;object-fit:contain}
.image-dialog.is-plan .image-tools{justify-content:center;gap:12px}.image-tools button{border:1px solid var(--line);border-radius:6px;min-width:48px;padding:7px 14px;font-size:16px}
/* Day/night belongs to the Residence card; the surrounding site stays green. */
#estate{border-radius:14px;margin-block:28px;max-width:calc(100% - 48px);padding:30px;min-height:0;background:#19362a}
#estate[data-time=day]{--text:#23392d;--muted:#435b4b;--gold:#755a27;--line:#31543b36;background:#e7e8dd;color:var(--text);color-scheme:light}
#estate[data-time=day] .primary{background:#183b2b;color:#f4f0df;border-color:#183b2b}
#estate .stage-bottomline,#estate .stage-topline{--text:#eceee0;--gold:#dec48a;--muted:#b5c4b4;--surface:#203e30;--line:#d4d8be26;color:var(--text);color-scheme:dark}
#estate[data-time=night]{background:#173126}
body.sound-requested[data-chapter=arrival] #sound-toggle{visibility:visible;pointer-events:auto}
#sound-toggle[data-pending=true] .sound-icon{opacity:.65}
.experience-copy,.project-summary,.plan-panel,.chapter-heading>div{min-width:0}
@media(max-width:600px){
 .place-heading h2{font-size:24px}.place-heading{padding-top:12px}.place-actions button{min-height:38px}
 .space-picker{display:flex;align-items:center;gap:12px;font-size:12px;padding:4px 16px 10px;color:var(--muted)}
 .space-picker select{min-width:0;flex:1;width:auto;margin:0;padding:10px 28px 10px 10px;font-size:13px;min-height:44px;background:#203e30;color:var(--text);border:1px solid var(--line);border-radius:6px}
 #estate{max-width:calc(100% - 24px);margin-block:14px;padding:16px 16px 26px}
 #estate .estate-stage{margin:0;border-radius:8px}#estate .estate-story{padding-top:24px}#estate .estate-story h1{font-size:36px}
 .image-dialog.is-plan{height:fit-content}
 .gallery-bar{min-height:44px}.experience-tools .glass-button{font-size:11px;padding:8px}
}
@media(max-height:650px) and (max-width:799px){
 .place-heading{position:relative;padding:10px 42px 2px 12px}.place-heading h2{font-size:20px;line-height:1.04}
 #place-kicker{margin-top:4px;font-size:10px}.place-actions{padding-bottom:2px}.place-actions button{min-height:34px;font-size:11px}
 .place-heading .close-button{position:fixed;top:var(--place-close-top);left:var(--place-close-left);right:auto;z-index:3;background:#112d21;border-radius:6px}
 .place-body{padding-right:40px;font-size:13px}
}



/* Place card: all information shows and scrolls inside; a slim gold indicator and a
   soft bottom fade appear when there is more to read (iOS hides native scrollbars). */
.place-dialog{overflow-y:auto;overscroll-behavior:contain;scrollbar-width:none}
.place-dialog::-webkit-scrollbar{display:none}
.place-scrollbar{position:fixed;top:var(--place-bar-top);left:var(--place-bar-left);width:3px;height:var(--place-bar-height,0);border-radius:2px;background:#dec48a1f;opacity:0;transition:opacity .2s;pointer-events:none;z-index:3}
.place-scrollbar>b{position:absolute;left:0;right:0;top:var(--place-thumb-top,0);height:var(--place-thumb-height,0);border-radius:2px;background:#dec48ab3}
.place-dialog.can-scroll .place-scrollbar{opacity:1}
.place-dialog.can-scroll:not(.at-end){-webkit-mask-image:linear-gradient(#000 calc(100% - 26px),transparent);mask-image:linear-gradient(#000 calc(100% - 26px),transparent)}
#place-title{padding-bottom:.08em}
/* Arrival on upright tablets: a larger, higher copy cluster rather than a stretched
   phone layout. The map then places the bay behind wherever the copy sits. */
@media (min-width:700px) and (max-width:1100px) and (orientation:portrait){
 .arrival{padding:120px 8vw 24vh;align-items:flex-end}
 .arrival .eyebrow{font-size:13px}
 .arrival h1{font-size:72px;margin:16px 0 24px}
 .arrival-intro{font-size:19px;margin-bottom:34px}
 .arrival .primary{min-width:300px;padding:16px 24px;font-size:16px}
 .arrival .silent-entry{font-size:15px}
}

/* The centred wordmark always leaves clear space for Sound and Enquire either side. */
.brand img{width:min(var(--brand-width),calc(100vw - 180px))}

/* Place card header: only the title is pinned; the descriptor scrolls with the body.
   Phones add previous/next controls beside close (the place buttons are hidden). */
.place-dialog .place-heading{position:sticky;top:0;z-index:2;background:#112d21;padding-bottom:8px}
.place-body #place-kicker{margin:0 0 8px;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--gold);line-height:1.5}
.place-steps{display:none}
.place-dialog.is-phone .place-heading{padding-right:128px}
.place-dialog.is-phone .place-steps{display:flex;position:fixed;top:var(--place-close-top);left:calc(var(--place-close-left) - 80px);z-index:3}
.place-steps button{width:40px;min-width:40px;height:40px;min-height:40px;padding:0 0 3px;font-size:26px;line-height:1;color:var(--gold);background:#112d21;border-radius:6px}
.place-steps button:hover{background:var(--raised)}

/* 27 Sep review fixes. Pictures dim while the next one loads (no stale room under a new title). */
#experience-image,#plan-image,#estate-image{transition:opacity .25s}
img.is-loading{opacity:.3}
#experience-image{touch-action:pan-y}
.experience-copy .next-chapter{margin-top:26px}
/* Facade points keep one on-screen size at any zoom; touch screens always show short names. */
.estate-marker{transform:translate(-50%,-50%) scale(var(--inverse,1))}
.is-touch .estate-marker span{visibility:visible;top:34px;font-size:12px;padding:4px 9px}
/* Phones and tablets: the Residence card clears the floating chapter bar. */
@media(max-width:1000px){#estate{margin-bottom:calc(var(--dock-bottom) + 96px)}}

/* Plans: specifications as one numbers band, then the drawing beside its live room list. */
.project-layout{grid-template-columns:1fr!important;gap:40px}
.project-summary{display:grid;gap:0 48px}
.spec-grid{grid-template-columns:repeat(5,minmax(0,1fr))!important;gap:26px 24px!important}
.spec-grid dd{font-size:clamp(30px,2.6vw,40px)}
.project-quick{display:flex!important;flex-wrap:wrap;gap:8px 28px!important;margin:26px 0 0!important}
.plan-heading{align-items:baseline}
.plan-area{font-size:var(--type-caption);color:var(--muted)}
.plan-body{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:28px;align-items:stretch}
.plan-image{background:#f5efe2;border-radius:4px;overflow:hidden}
.plan-image img{display:block;aspect-ratio:1800/1594;object-fit:cover}
.plan-image>span.plan-marks,.plan-marks{position:absolute;inset:0;display:block;width:auto;margin:0;padding:0;background:none;border-radius:0;pointer-events:none}
.plan-marks i{position:absolute;width:34px;height:34px;border-radius:50%;border:2px solid #b8913f;box-shadow:0 0 0 6px #b8913f40;transform:translate(-50%,-50%) scale(var(--inverse,1));opacity:0;transition:opacity .2s}
.plan-marks i.is-active{opacity:1;animation:room-pulse 1.6s ease-out infinite}
@keyframes room-pulse{0%{box-shadow:0 0 0 0 #b8913f80}100%{box-shadow:0 0 0 14px #b8913f00}}
.plan-image>.plan-enlarge{position:absolute;bottom:10px;right:10px;background:#142b22;color:#eeeadd;padding:10px 14px;font-size:var(--type-caption);border-radius:5px}
.plan-rooms{list-style:none;margin:0;padding:0 6px 0 0;contain:size;overflow:auto;border-top:1px solid var(--line)}
.plan-rooms button{display:grid;grid-template-columns:30px 1fr auto;gap:2px 10px;width:100%;min-height:0;padding:10px 6px;text-align:left;border-bottom:1px solid var(--line);border-radius:0;font-weight:400}
.plan-rooms button:hover,.plan-rooms button.is-active{background:var(--raised)}
.room-number{grid-row:1/3;color:var(--gold);font-size:12px;padding-top:3px}
.room-name{font-weight:500;color:var(--text);font-size:15px}
.room-size{color:var(--gold);font-size:13px;white-space:nowrap}
.room-text{grid-column:2/4;color:var(--muted);font-size:13px;line-height:1.45}
@media(max-width:1000px){.spec-grid{grid-template-columns:repeat(3,minmax(0,1fr))!important}}
@media(max-width:800px){.plan-body{grid-template-columns:1fr;gap:18px}.plan-rooms{contain:none;overflow:visible}}
@media(max-width:600px){.spec-grid{grid-template-columns:1fr 1fr!important;gap:20px 18px!important}.spec-grid dd{font-size:32px}.plan-image>.plan-enlarge{position:absolute;bottom:8px;right:8px;margin:0;width:auto;background:#142b22;color:#eeeadd;padding:8px 12px}}

/* Enlarged plan: level tabs and the same room list; picking a room flies to it. */
.viewer-tabs{padding:0 18px 10px;margin:0;flex:none}
.image-dialog:not(.is-plan) .viewer-tabs,.image-dialog:not(.is-plan) .viewer-rooms{display:none}
.image-body{display:flex;flex-direction:column;min-height:0;flex:0 1 auto}
.image-dialog.is-plan .image-body{flex-direction:row;gap:0;border-top:1px solid var(--line)}
.image-dialog.is-plan .image-scroll{flex:1.5 1 0;width:auto;max-height:calc(100dvh - 230px);background:#f5efe2}
.viewer-rooms{flex:1 1 0;max-width:420px;padding:0 10px;border-top:0;border-left:1px solid var(--line)}
@media(max-width:800px){
 .image-dialog.is-plan .image-body{flex-direction:column}
 .image-dialog.is-plan .image-scroll{flex:none;width:100%;max-height:calc(100dvh - 330px)}
 .viewer-rooms{contain:none;max-width:none;max-height:26dvh;border-left:0;border-top:1px solid var(--line);padding:0 8px}
 .viewer-tabs{padding:0 10px 8px}.viewer-tabs button{font-size:13px;padding-inline:8px}
}
@media(max-width:800px){
 .image-dialog.is-plan{height:calc(100dvh - 32px)!important}
 .image-dialog.is-plan .image-body{flex:1 1 auto;min-height:0}
 .image-dialog.is-plan .viewer-rooms{flex:1 1 0;min-height:0;max-height:none;overflow:auto}
}
@media(max-width:600px){.spec-grid{gap:14px 18px!important}.spec-grid dd{font-size:28px}.spec-grid>div{padding-top:10px}}

/* Map gesture hint: a clear overlay, no panel. A ball-flight arc for moving; a pinch
   (touch) or scroll wheel (mouse) for zoom. It never blocks the map underneath. */
.map-hint{position:fixed;inset:0;z-index:30;display:flex;align-items:center;justify-content:center;gap:clamp(40px,7vw,110px);padding:0 24px 60px;pointer-events:none;opacity:0;transition:opacity .45s;background:radial-gradient(ellipse 62% 48% at 50% 47%,#04110bb8,#04110b59 55%,transparent 80%)}
.map-hint.is-visible{opacity:1}
.map-hint[hidden]{display:none}
.hint-item{display:flex;flex-direction:column;align-items:center;text-align:center;color:#f5f1e3;text-shadow:0 1px 14px #000a}
.hint-item svg{width:160px;height:64px;overflow:visible}
.hint-item p{font:500 clamp(30px,3vw,40px)/1.05 var(--font-display);margin:14px 0 0;max-width:none}
.hint-flight{fill:none;stroke:#f5f1e3;stroke-width:1.4;stroke-linecap:round;stroke-dasharray:.5 7;opacity:.75}
.hint-trace{fill:none;stroke:#dec48a;stroke-width:1.6;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;animation:hint-trace 3.4s cubic-bezier(.45,0,.55,1) infinite}
@keyframes hint-trace{0%{stroke-dashoffset:1}50%{stroke-dashoffset:0}100%{stroke-dashoffset:1}}
.hint-item circle{fill:#fff}
.hint-item .hint-halo{fill:#dec48a2e;stroke:#dec48a;stroke-width:1.3}
.hint-finger{transition:none}
.hint-a{animation:pinch-a 2.4s ease-in-out infinite}
.hint-b{animation:pinch-b 2.4s ease-in-out infinite}
@keyframes pinch-a{0%,15%{transform:translate(68px,38px)}55%,70%{transform:translate(42px,52px)}100%{transform:translate(68px,38px)}}
@keyframes pinch-b{0%,15%{transform:translate(92px,26px)}55%,70%{transform:translate(118px,12px)}100%{transform:translate(92px,26px)}}
.hint-mouse{fill:none;stroke:#f5f1e3;stroke-width:1.5}
.hint-wheel{fill:#dec48a;animation:hint-wheel 1.6s ease-in-out infinite}
@keyframes hint-wheel{0%{transform:translateY(0);opacity:1}70%{transform:translateY(8px);opacity:0}100%{transform:translateY(0);opacity:0}}
.for-touch{display:none}
.is-touch .for-touch{display:inline}.is-touch .map-hint .for-mouse{display:none}.is-touch g.for-touch{display:block}
@media(max-width:700px){.map-hint{flex-direction:column;gap:44px;padding-bottom:90px;background:radial-gradient(ellipse 80% 42% at 50% 46%,#04110bc2,#04110b61 58%,transparent 82%)}.hint-item p{font-size:34px}}
@media(prefers-reduced-motion:reduce){.hint-a{transform:translate(50px,46px)}.hint-b{transform:translate(110px,16px)}}

/* 30 Sep. Residence: the time-of-day and Full view controls sit below the picture, in the card's own colours. */
#estate .stage-topline{display:none}
#estate .estate-stage{overflow:visible;background:transparent}
#estate .estate-stage>img{border-radius:6px}
#estate .estate-stage .stage-bottomline{position:static;padding:10px 0 0;--text:inherit;--gold:inherit;--muted:inherit;--line:inherit;color:inherit;color-scheme:inherit}
#estate .stage-bottomline .segmented{background:transparent;border:1px solid var(--line);padding:3px;border-radius:9px}
#estate .stage-bottomline .segmented button{min-width:0;min-height:36px;padding:6px 12px;font-size:13px;color:var(--muted)}
#estate .stage-bottomline .segmented button[aria-pressed=true]{color:var(--text);background:color-mix(in srgb,var(--text) 11%,transparent)}
#estate .stage-bottomline .glass-button{min-height:36px;padding:6px 14px;font-size:13px;background:transparent;color:var(--text);border:1px solid var(--line)}
#estate .stage-bottomline .glass-button:hover{background:color-mix(in srgb,var(--text) 8%,transparent)}
.explorer-tools .segmented button{min-width:0;padding:8px 11px}

/* Plans: numbers only, stepping down; one quiet line for price. */
.spec-grid{grid-template-columns:repeat(7,minmax(0,1fr))!important;gap:24px 20px!important}
.spec-grid dd{font-size:clamp(28px,2.3vw,38px)}
.project-quick{font-size:var(--type-caption);color:var(--muted)}
@media(max-width:1000px){.spec-grid{grid-template-columns:repeat(5,minmax(0,1fr))!important}}
@media(max-width:600px){.spec-grid{grid-template-columns:repeat(3,minmax(0,1fr))!important;gap:14px 14px!important}.spec-grid dd{font-size:26px}.spec-grid dt{font-size:12px}}
/* Room list: tighter so the deck's lines sit on one line; larger once enlarged. */
.plan-rooms button{grid-template-columns:24px 1fr auto;gap:1px 8px;padding:9px 4px}
.room-name{font-size:14px}.room-size{font-size:12px}.room-text{font-size:12px;line-height:1.4}
.viewer-rooms .room-name{font-size:16px}.viewer-rooms .room-size{font-size:13px}.viewer-rooms .room-text{font-size:14px;line-height:1.45}
.viewer-rooms button{grid-template-columns:28px 1fr auto;padding:11px 6px}

/* Enlarged photos: the same pinch / wheel zoom stage as the plans. */
.image-dialog.is-photo{height:fit-content}
.image-dialog.is-photo .image-scroll{position:relative;display:block;flex:none;aspect-ratio:16/9;width:100%;max-height:calc(100dvh - 170px);min-height:0;overflow:hidden;touch-action:none;cursor:grab;background:#070f0c}
.image-dialog.is-photo .image-scroll:active{cursor:grabbing}
.image-dialog.is-photo .image-scroll img{position:absolute;user-select:none;pointer-events:none;object-fit:contain}
.image-dialog.is-photo #viewer-marks{display:none}
.image-dialog.is-photo .image-tools{justify-content:center}
/* Phones: the enlarged plan rises to the top of the screen for the tallest canvas. */
@media(max-width:800px){.image-dialog.is-plan{margin:max(8px,env(safe-area-inset-top)) auto auto;height:calc(100dvh - 16px)!important;max-height:calc(100dvh - 16px)}}

/* The floating chapter bar takes the header's darker green, so it stands off the page. */
.chapter-nav{background:#0b2119;border-color:#d6bd8233;box-shadow:0 10px 30px #0006}
.chapter-nav a[aria-current=page]{background:#1c3a2d}
@media(min-width:1001px){.chapter-nav{background:transparent;border-color:transparent;box-shadow:none}.chapter-nav a[aria-current=page]{background:transparent}}
#experience-image{-webkit-user-drag:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}

/* Residence card follows the time of day: morning is a warm parchment (golden hour,
   the floor-plan deck's cream), afternoon the cool light card, evening the deep green. */
#estate{transition:background-color .6s ease,color .6s ease}
#estate[data-time=morning]{--text:#2c3527;--muted:#5d5a45;--gold:#7a5a22;--line:#7a5a2233;background:#efe5cc;color:var(--text);color-scheme:light}
#estate[data-time=morning] .primary{background:#183b2b;color:#f4f0df;border-color:#183b2b}

/* 30 Sep, second pass: three clearly different scenes — honey-gold morning, bright
   daylight afternoon, deep green evening. --card is the card colour for inverted text. */
#estate[data-time=morning]{--card:#e6d2a4;--text:#2b2a1c;--muted:#5a5236;--gold:#6e4f16;--line:#6e4f1638;background:var(--card)}
#estate[data-time=day]{--card:#f5f4ef;--text:#1f3328;--muted:#4b5d50;--gold:#755a27;--line:#31543b2e;background:var(--card)}
#estate[data-time=night]{--card:#173126}
/* Full view is the scene's main action: a filled button with a frame icon, a soft
   pulse each time the scene changes, and the picture itself opens it. */
#estate .stage-bottomline .glass-button.is-cta{gap:8px;padding:6px 16px;background:var(--text);color:var(--card);border-color:var(--text);font-weight:500}
#estate .stage-bottomline .glass-button.is-cta:hover{background:var(--text);filter:brightness(1.15)}
#estate .is-cta svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
#estate .is-cta.is-nudged{animation:cta-nudge 1.2s ease-out .35s}
@keyframes cta-nudge{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--text) 45%,transparent)}100%{box-shadow:0 0 0 14px transparent}}
#estate-image{cursor:zoom-in}

/* A slimmer header on the reading pages, so more of each page shows. */
@media(max-width:1000px){body:not([data-chapter=arrival]):not([data-chapter=map]){--header-height:60px}}
@media(min-width:1001px){
 body:not([data-chapter=arrival]):not([data-chapter=map]){--header-height:104px}
 body:not([data-chapter=arrival]):not([data-chapter=map]) .site-header{padding-top:12px}
 body:not([data-chapter=arrival]):not([data-chapter=map]) .site-header .brand{top:12px}
 .chapter-nav{top:56px}
}

/* Residence controls: one layout rule for every phone. Under 520 px the scene
   selector spans the card in equal thirds and Full view sits full-width beneath it;
   wider screens keep them side by side. The pulse stays inside its own space. */
#estate .stage-bottomline{gap:12px}
@media(max-width:520px){
 #estate .estate-stage .stage-bottomline{flex-direction:column;align-items:stretch}
 #estate .stage-bottomline .segmented{display:grid;grid-template-columns:repeat(3,1fr)}
 #estate .stage-bottomline .glass-button.is-cta{justify-content:center;min-height:44px;font-size:14px}
}
@keyframes cta-nudge{0%{box-shadow:0 0 0 0 color-mix(in srgb,var(--text) 40%,transparent)}100%{box-shadow:0 0 0 7px transparent}}
/* Full view: a single round close button, no title bar. */
.explorer-top{justify-content:flex-end;background:none}
.explorer-close{width:44px;min-width:44px;height:44px;padding:0;border-radius:50%;font-size:24px;line-height:1;background:#0b2119cc!important;border:1px solid #d4d8be33}

/* Full view: a blurred, dimmed copy of the scene sits behind the picture, so pinching
   out never shows empty bands. Bottom: the note, then the scene selector, centred. */
.explorer-backdrop{position:absolute;inset:-60px;background:center/cover no-repeat;filter:blur(30px) brightness(.45) saturate(1.1);transform:translateZ(0);pointer-events:none}
.explorer-dialog .viewport{background:transparent}
.explorer-bottom{flex-direction:column;align-items:center;gap:10px;padding:18px 16px max(16px,env(safe-area-inset-bottom))}
.explorer-bottom>p{margin:0;text-align:center;font-size:13px;color:#eef0e3;text-shadow:0 1px 8px #000a}
.explorer-tools{justify-content:center;align-self:center}
.explorer-tools .segmented{background:#0b2119e6;border-color:#d4d8be33}
.is-touch .explorer-bottom .for-mouse{display:none}

/* Full view anchors to the top (iOS counts screen height two ways; centring floated
   the bar). iOS 26 reports its floating toolbar as unsafe area, so the bar's own
   bottom inset is capped. */
.explorer-dialog{inset:0 auto auto 0}
.explorer-bottom{padding-bottom:max(16px,min(env(safe-area-inset-bottom),24px))}
/* Points speak the map's language: a pale node with the same slow pulse ring. */
.estate-marker span{display:none!important}
.estate-marker:before{width:12px;height:12px;background:#f5f1e6;border:2px solid #f5f1e6;box-shadow:0 0 0 1.5px #213f2c,0 2px 5px #17302180}
.estate-marker:after{content:'';position:absolute;inset:8px;border-radius:50%;border:1.5px solid #f5f1e6cc;animation:node-pulse 2.7s linear infinite;pointer-events:none}
.estate-marker.is-open:before{background:var(--gold,#dec48a);border-color:#fff4ce}
@keyframes node-pulse{0%{opacity:0;transform:scale(1)}15%{opacity:.75}80%{opacity:0;transform:scale(2.05)}100%{opacity:0;transform:scale(2.05)}}
/* Room card: rises over the house; the house stays behind it. */
.room-card{position:absolute;z-index:4;left:12px;right:12px;bottom:12px;max-height:calc(100% - 90px);overflow:auto;background:#0f261dF2;border:1px solid #d4d8be2e;border-radius:16px;box-shadow:0 18px 50px #0008;color:var(--text);opacity:0;transform:translateY(24px);transition:opacity .3s ease,transform .3s ease}
.room-card.is-open{opacity:1;transform:none}
.room-card[hidden]{display:none}
.room-media{position:relative}
.room-media img{display:block;width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:15px 15px 0 0;touch-action:pan-y;-webkit-user-drag:none;user-select:none}
.room-dots{position:absolute;left:0;right:0;bottom:6px;display:flex;justify-content:center}
.room-dots button{width:32px;min-width:32px;height:28px;min-height:28px;padding:0;display:grid;place-items:center}
.room-dots button:after{content:'';width:16px;height:3px;border-radius:3px;background:#ffffff8c}
.room-dots button[aria-pressed=true]:after{background:var(--gold)}
.room-copy{padding:16px 18px 20px}
.room-copy h2{font-size:28px;margin:0 0 8px}
.room-copy p{margin:0;font-size:15px;color:var(--muted);line-height:1.55}
.room-close{position:absolute;z-index:2;top:10px;right:10px;width:40px;min-width:40px;height:40px;min-height:40px;border-radius:50%;padding:0;font-size:22px;line-height:1;background:#0b2119d9;border:1px solid #d4d8be40;color:#fff}
.explorer-dialog.has-room .explorer-bottom{opacity:0;pointer-events:none}
.explorer-dialog.has-room .explorer-top{opacity:0;pointer-events:none}
.explorer-bottom,.explorer-top{transition:opacity .25s}
@media(min-width:760px){.room-card{left:auto;right:24px;top:50%;bottom:auto;width:420px;transform:translateY(calc(-50% + 24px))}.room-card.is-open{transform:translateY(-50%)}}

/* Room view: full screen, entered by flying into the point. The photo settles from a
   slight push-in and drifts across; name and deck line sit low over a soft shade. */
.room-view{position:absolute;inset:0;z-index:4;background:#06120d;opacity:0;pointer-events:none;transition:opacity .45s ease .2s;border:0;border-radius:0;box-shadow:none;left:0;right:0;top:0;bottom:0;width:auto;max-height:none;transform:none}
.room-view.is-open{opacity:1;pointer-events:auto;transform:none}
.room-view[hidden]{display:none}
.room-stage{position:absolute;inset:0;overflow:hidden;transform:scale(1.07);transition:transform 1.4s cubic-bezier(.2,.7,.2,1) .2s}
.room-view.is-open .room-stage{transform:none}
.room-stage img{position:absolute;max-width:none;user-select:none;-webkit-user-drag:none;-webkit-touch-callout:none;transition:opacity .4s}
.room-stage img.is-loading{opacity:0}
.room-view:after{content:'';position:absolute;left:0;right:0;bottom:0;height:58%;background:linear-gradient(#06120d00,#06120dcc 55%,#06120df2);pointer-events:none}
.room-view .room-copy{position:absolute;z-index:2;left:0;right:0;bottom:0;padding:24px 22px max(22px,min(env(safe-area-inset-bottom),28px));color:#f3efe2;opacity:0;transform:translateY(14px);transition:opacity .5s ease .55s,transform .6s ease .55s}
.room-view.is-open .room-copy{opacity:1;transform:none}
.room-eyebrow{margin:0 0 8px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#dec48a}
.room-view .room-copy h2{font:500 clamp(36px,5vw,56px)/1.04 var(--font-display);margin:0 0 10px;color:#f7f3e6}
.room-view .room-copy #room-text{margin:0;max-width:34em;font-size:15px;line-height:1.55;color:#d8dccd}
.room-view .room-dots{position:static;justify-content:flex-start;margin:12px 0 0 -8px}
.room-view .room-close{top:14px;right:14px;width:44px;min-width:44px;height:44px;min-height:44px;font-size:24px;background:#0b2119cc;z-index:3}
@media(min-width:760px){.room-view .room-copy{padding:44px 56px 48px;max-width:720px}}

/* Room view, uncropped (30 Sep, fourth pass). The whole render sits at full width —
   never cropped, never covered — over a blurred, dimmed copy of itself; the words sit
   in the space beneath. No automatic motion: pinch or scroll to look closer. */
.room-view{display:flex;flex-direction:column;justify-content:center;align-items:center;padding:64px 0 max(20px,min(env(safe-area-inset-bottom),28px));background:#06120d}
.room-view[hidden]{display:none}
.room-view:after{display:none}
.room-backdrop{position:absolute;inset:-60px;background:center/cover no-repeat;filter:blur(34px) brightness(.34) saturate(1.1);pointer-events:none}
.room-body{position:relative;z-index:1;width:100%;display:flex;flex-direction:column;align-items:center}
.room-view .room-stage{position:relative;inset:auto;width:min(100%,calc((100dvh - 270px) * 16 / 9));aspect-ratio:16/9;overflow:hidden;touch-action:none;cursor:grab;background:#000;transform:none;transition:none}
.room-view .room-stage img{position:absolute;max-width:none;opacity:1;transition:opacity .35s ease}
.room-view .room-stage img.is-loading{opacity:0}
.room-view .room-copy{position:static;width:min(100%,calc((100dvh - 270px) * 16 / 9));padding:18px 20px 0;opacity:0;transform:translateY(10px);transition:opacity .5s ease .45s,transform .5s ease .45s;color:#f3efe2}
.room-view.is-open .room-copy{opacity:1;transform:none}
.room-view .room-copy h2{font:500 clamp(30px,4vw,44px)/1.05 var(--font-display);margin:0 0 12px;color:#f7f3e6}
.room-views{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.room-views button{min-height:36px;padding:6px 14px;border-radius:18px;border:1px solid #d4d8be40;background:#0b211999;color:#d8dccd;font-size:13px}
.room-views button[aria-pressed=true]{border-color:#dec48a;color:#dec48a;background:#dec48a1f}
.room-view .room-copy #room-text{margin:0;font-size:15px;line-height:1.55;color:#d8dccd;max-width:40em}
.room-view .room-close{position:absolute;top:12px;right:12px;z-index:3}
@media(min-width:760px){.room-view .room-stage{border-radius:6px}.room-view .room-copy{padding:20px 0 0}}
.room-view .room-eyebrow{margin:0 0 8px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#dec48a}
.room-view .room-copy{max-width:none}
.room-view .room-stage,.room-view .room-copy{width:min(100%,calc((100dvh - 300px) * 16 / 9))}

/* Room view, 1 Oct: the photo fills everything above the words and pans once, left to
   right; the words sit at the bottom on the blurred copy of the scene. */
.room-view{justify-content:flex-start;align-items:stretch;padding:0}
.room-view .room-body{flex:1;min-height:0;height:100%;align-items:stretch}
.room-view .room-stage,.room-view .room-copy{width:100%}
.room-view .room-stage{flex:1 1 auto;min-height:0;aspect-ratio:auto;border-radius:0;touch-action:none;cursor:grab;background:transparent}
.room-view .room-stage.is-dragging{cursor:grabbing}
.room-view .room-stage img{will-change:transform;user-select:none;-webkit-user-drag:none;pointer-events:none}
.room-view .room-copy{flex:none;padding:18px 20px max(22px,min(env(safe-area-inset-bottom),28px))}
@media(min-width:760px){.room-view .room-stage{border-radius:0}.room-view .room-copy{padding:22px max(40px,calc((100% - 1100px)/2)) 30px}}
/* Flicker fixes: the old picture hides instantly (no fade-out while the next one loads);
   the backdrop is a tiny upscaled copy with a light blur on its own layer. */
.room-view .room-stage img.is-loading{opacity:0;transition:none}
.room-backdrop{filter:blur(14px) brightness(.34) saturate(1.1);transform:translateZ(0)}
/* Room line: never more than two lines, so the render never gives up height. */
.room-view .room-copy #room-text{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}

/* Performance (measured with tools/look.mjs): no live blur behind rooms or the house
   (the backdrops are tiny pre-darkened copies, scaled up), and the house leaves the
   compositor once a room has faded in. Room pans then hold 60 fps. */
.room-backdrop,.explorer-backdrop{filter:none;inset:0;background-size:cover;transform:none}
.explorer-dialog.room-settled #estate-viewport,.explorer-dialog.room-settled .explorer-backdrop{visibility:hidden}
/* Opening line may wrap on narrow phones. */
.arrival-intro{white-space:normal;max-width:22em}
.arrival-intro span{display:block}

/* Scenes (1 Oct): the same layout as a room. The facade fills everything above;
   the words, the room tabs and 'Back to your day' sit beneath on the soft backdrop. */
.explorer-dialog[open]{display:flex;flex-direction:column}
.explorer-dialog .viewport{position:relative;inset:auto;flex:1 1 auto;min-height:0;width:100%}
.explorer-dialog.room-settled .scene-panel{visibility:hidden}


/* ---------------------------------------------------------------------------
   Your Day, 2 Oct. One card, read top to bottom: choose the time, see the house,
   read what the hour is for, see which rooms it holds, step in. The card fills the
   screen between the header and the bar; spare height goes to the picture.
   Colours are Erwin's three (1 Oct) in shades that carry text: an airy mist for
   morning, pale cream for afternoon, a deep night slate for evening.
   --------------------------------------------------------------------------- */
#estate[data-time=morning]{--card:#e4efed;--text:#16292a;--muted:#48605f;--gold:#2d5f5b;--line:#16292a24;background:var(--card);color:var(--text);color-scheme:light}
#estate[data-time=day]{--card:#fff3c8;--text:#2b2a1c;--muted:#5d563c;--gold:#7a5a22;--line:#2b2a1c24;background:var(--card);color:var(--text);color-scheme:light}
#estate[data-time=night]{--card:#141a23;--text:#eef1f4;--muted:#a9b4c1;--gold:#dec48a;--line:#eef1f424;background:var(--card);color:var(--text);color-scheme:dark}
#estate{display:flex;flex-direction:column;align-items:stretch;gap:0;padding:0;overflow:hidden;border:1px solid var(--line);min-height:calc(100dvh - var(--header-height) - 14px - var(--dock-bottom) - 96px)}
#estate .day-times{display:grid;grid-template-columns:repeat(3,1fr);flex:none;border-bottom:1px solid var(--line)}
#estate .day-times button{position:relative;min-height:50px;padding:0 6px;font-size:12px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);border-radius:0}
#estate .day-times button[aria-pressed=true]{color:var(--text)}
#estate .day-times button:after{content:'';position:absolute;left:18%;right:18%;bottom:-1px;height:2px;background:var(--gold);transform:scaleX(0);transition:transform .35s ease}
#estate .day-times button[aria-pressed=true]:after{transform:none}
#estate .estate-stage{position:relative;flex:1 1 auto;min-height:calc((100vw - 58px)*.5625);margin:16px 16px 0;border-radius:8px;overflow:hidden;background:transparent}
#estate .estate-stage>img{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto;object-fit:cover;border-radius:0}
#estate[data-time=morning] .estate-stage>img{object-position:42% 50%}
#estate .day-label{display:none}
#estate .estate-story{display:flex;flex-direction:column;flex:none;max-width:none;padding:20px 20px 20px}
#estate .estate-story .eyebrow{margin:0 0 8px;font-size:11px;letter-spacing:.14em;color:var(--gold)}
#estate .estate-story h1{font-size:34px;line-height:1.06;max-width:none;margin:0 0 10px}
#estate .estate-description{max-width:38ch;font-size:15px;line-height:1.55;color:var(--muted)}
#estate .day-rooms{list-style:none;display:flex;flex-wrap:wrap;margin:16px 0 0;padding:14px 0 0;border-top:1px solid var(--line);font-size:13px;line-height:1.6;font-weight:500;color:var(--text)}
#estate .day-rooms li:not(:last-child):after{content:"·";margin:0 8px;color:var(--gold)}
#estate .day-cta{display:flex;align-items:center;justify-content:space-between;gap:16px;width:100%;min-height:52px;margin-top:18px;padding:0 20px;border-radius:8px;background:var(--text);color:var(--card);font-size:15px;font-weight:500;transition:filter .18s}
#estate .day-cta:hover{filter:brightness(1.15)}
#estate .day-cta span:last-child{font-size:18px}
@media(min-width:601px) and (max-width:1000px){
 #estate .estate-stage{margin:24px 24px 0}
 #estate .estate-story{padding:28px 28px 28px}
 #estate .estate-story h1{font-size:44px}
 #estate .estate-description{font-size:17px}
 #estate .day-rooms{font-size:15px}
 #estate .day-times button{font-size:13px;min-height:56px}
}
@media(min-width:1001px){
 #estate{display:grid;grid-template-columns:minmax(0,1.75fr) minmax(340px,1fr);grid-template-rows:auto 1fr;align-items:stretch;gap:0;min-height:0}
 #estate .estate-stage{grid-column:1;grid-row:1/3;margin:24px 0 24px 24px;min-height:0}
 #estate .estate-stage>img{position:static;height:auto;aspect-ratio:16/9}
 #estate .day-times{grid-column:2;grid-row:1;margin:24px 32px 0;border-top:0}
 #estate .day-times button{min-height:52px}
 #estate .estate-story{grid-column:2;grid-row:2;padding:32px 32px 32px}
 #estate .estate-story h1{font-size:clamp(38px,3.2vw,50px);margin-bottom:14px}
 #estate .estate-description{font-size:16px}
 #estate .day-rooms{margin-top:22px;padding-top:18px;font-size:14px}
 #estate .day-cta{margin-top:auto}
}

/* Scenes, 2 Oct. The facade sits above a solid panel in the hour's own dark tone: what
   the hour is, one line, then each room by its floor plan name with its size, and the
   way on. Upright screens keep the facade wide enough to show every room at once. */
.explorer-dialog{--scene-bg:#0e211a}
.explorer-dialog[data-time=morning]{--scene-bg:#0f2224}
.explorer-dialog[data-time=night]{--scene-bg:#10141b}
.scene-panel{position:relative;z-index:1;display:flex;flex-direction:column;gap:14px;padding:20px 20px max(14px,min(env(safe-area-inset-bottom),24px));background:var(--scene-bg);border-top:1px solid #dec48a4d;color:#f3efe2}
.scene-panel .room-eyebrow{margin:0 0 6px}
.scene-panel h2{font:500 clamp(28px,3.2vw,40px)/1.08 var(--font-display);margin:0;color:#f7f3e6}
.scene-panel #scene-text{margin:8px 0 0;max-width:46ch;font-size:14px;line-height:1.5;color:#c6cdc6}
.scene-side{display:flex;flex-direction:column}
.scene-rooms{display:flex;flex-direction:column;border-top:1px solid #f3efe21f}
.scene-rooms button{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:44px;padding:0 2px;border-radius:0;border-bottom:1px solid #f3efe21f;text-align:left;font-weight:400}
.scene-rooms button:hover .scene-room-name{color:#dec48a}
.scene-room-name{font-size:15px;font-weight:500;color:#f3efe2;transition:color .18s}
.scene-room-stat{display:flex;align-items:center;gap:10px;font-size:12px;letter-spacing:.04em;color:#dec48a;white-space:nowrap}
.scene-room-stat:after{content:'›';font-size:18px;line-height:1;color:#f3efe299}
.scene-back{display:inline-flex;align-items:center;gap:10px;align-self:flex-end;min-height:44px;margin:4px 0 0;padding:0;color:#dec48a;font-size:14px;font-weight:500}
@media(orientation:portrait){
 .explorer-dialog .viewport{flex:0 1 95vw}
 .scene-panel{flex:1 0 auto;justify-content:space-between}
 .scene-rooms button{flex:1 1 44px;max-height:58px}
}
@media(orientation:portrait) and (min-width:700px){
 .scene-panel{padding:28px 40px 28px}
 .scene-panel #scene-text{font-size:16px}
 .scene-room-name{font-size:17px}.scene-room-stat{font-size:14px}
}
@media(orientation:portrait) and (max-height:700px){.scene-panel #scene-text{display:none}}
@media(orientation:landscape) and (min-width:760px){
 .scene-panel{flex-direction:row;align-items:flex-end;justify-content:space-between;gap:48px;padding:24px max(40px,calc((100% - 1200px)/2)) 20px}
 .scene-head{flex:1 1 auto;padding-bottom:12px}
 .scene-side{flex:0 0 min(420px,38%)}
}
/* The Cinema's point in the evening is the Palmer emblem. It holds one on-screen size
   like the other points, but never shrinks below the object it sits over in the render. */
.estate-marker.is-emblem{transform:translate(-50%,-50%) scale(max(.867,var(--inverse,1)))}
.estate-marker.is-emblem:before,.estate-marker.is-emblem.is-open:before{width:30px;height:30px;border:0;border-radius:6px;background:url(assets/palmer-mark-label.svg) center/100% 100% no-repeat;box-shadow:0 2px 8px #000a}
.estate-marker.is-emblem:after{inset:5px;border-radius:9px;border-color:#dec48acc}
/* A room's words sit on the same solid panel as its scene. */
.room-view .room-copy{background:var(--scene-bg);border-top:1px solid #dec48a4d}

/* 1 Oct, late. Your Day palette (Erwin): morning mint, afternoon cream, evening deep
   green. One dark green (#0c1c16) is the button on the light cards and the evening
   card itself, whose button is champagne. */
#estate[data-time=morning] .day-cta,#estate[data-time=day] .day-cta{background:#0c1c16;color:#f1ebdd}
#estate[data-time=night]{--card:#0c1c16;--text:#f1ebdd;--muted:#b8bdb3;--gold:#d3bd83;--line:#344238;border-color:#344238}
#estate[data-time=night] .day-cta{background:#d3bd83;color:#0c1c16}
.explorer-dialog[data-time=night]{--scene-bg:#0c1c16}
/* Wide screens: the card sits in the middle of the space under the header. */
@media(min-width:1001px){body[data-chapter=estate] main{display:flex;flex-direction:column;justify-content:center;min-height:calc(100dvh - var(--header-height))}}
/* The Cinema's point is the round Palmer shield from the map. */
.estate-marker.is-emblem:before,.estate-marker.is-emblem.is-open:before{width:30px;height:30px;border:2px solid #d9b25f;border-radius:50%;background:#112d21 url(map/palmer-mark-gold.svg) center/58% no-repeat;box-shadow:0 0 0 1.5px #3d3019,0 2px 6px #000a}
.estate-marker.is-emblem:after{inset:5px;border-radius:50%}
/* Scene panel: everything that can be pressed looks pressable. Rooms are bordered
   buttons; the way on is its own outlined gold button. */
.scene-rooms{gap:8px;border-top:0}
.scene-rooms button{min-height:46px;padding:0 14px;border:1px solid #f3efe226;border-radius:8px;background:#f3efe20a;transition:border-color .18s,background .18s}
.scene-rooms button:hover{border-color:#dec48a99;background:#dec48a14}
.scene-back{align-self:stretch;justify-content:center;min-height:46px;margin:0;padding:0 20px;border:1px solid #dec48a99;border-radius:8px;white-space:nowrap}
.scene-back:hover{background:#dec48a;color:#0c1c16}
@media(orientation:portrait){.scene-rooms button{flex:1 1 46px;max-height:56px}.scene-panel{gap:12px}}
/* Wide screens: one low band. Words left, rooms two-up in the middle, the way on at the right. */
@media(orientation:landscape) and (min-width:760px){
 .scene-panel{align-items:center;gap:32px;padding:20px max(40px,calc((100% - 1400px)/2))}
 .scene-head{padding:0}
 .scene-panel h2{font-size:clamp(26px,2.5vw,36px)}
 .scene-side{flex:0 1 min(640px,46%)}
 .scene-rooms{display:grid;grid-template-columns:1fr 1fr}
 .scene-back{align-self:center;flex:none}
}

/* Map gesture hint, 3 Oct: one quiet line in the map's own bar style, just above the
   bottom bar. Nothing dims or covers the map. */
.map-hint{inset:auto 0 calc(var(--dock-bottom) + 74px);display:flex;flex-direction:row;justify-content:center;gap:0;padding:0 16px;background:none}
.map-hint p{display:flex;align-items:center;gap:10px;margin:0;max-width:none;padding:9px 16px;border-radius:999px;background:#0b2119e6;border:1px solid #d6bd8240;box-shadow:0 6px 20px #0005;color:#f1ebdd;font:400 13px/1.3 var(--font-body);letter-spacing:.02em;white-space:nowrap}
.map-hint i{width:3px;height:3px;border-radius:50%;background:#d6bd82}
@media(max-width:700px){.map-hint{flex-direction:row;gap:0;padding-bottom:0;background:none}}
/* 3 Oct: the card picture always shows the whole render (16:9) on every phone; on
   taller screens the card simply ends higher instead of cropping the facade. */
@media(max-width:1000px){
 #estate{min-height:0}
 #estate .estate-stage{flex:none;min-height:0;aspect-ratio:16/9}
}

/* ---------------------------------------------------------------------------
   Golf (3 Oct), replacing Life Inside. The reason to buy, in one read: the Cinema
   leads with its film, the numbers follow, three frames show how it plays and who
   watches, then the green outside, then two ways on. Built to take more later
   (events, partners, Loch Palm).
   --------------------------------------------------------------------------- */
.golf-chapter{display:flex;flex-direction:column;gap:clamp(36px,5vw,72px)}
.golf-hero{position:relative;margin:calc(-1*28px) calc(-1*var(--gutter)) 0;background:#06120d}
.golf-hero img{width:100%;height:auto;aspect-ratio:4/3;object-fit:cover}
.golf-hero-copy{padding:24px var(--gutter) 0;background:var(--bg)}
.golf-hero-copy .eyebrow{margin-bottom:10px;font-size:11px;letter-spacing:.14em}
.golf-hero h1{font-size:clamp(34px,4.2vw,64px);line-height:1.04;max-width:16ch;margin:0 0 22px}
.golf-film{display:inline-flex;align-items:center;gap:12px;min-height:48px;padding:0 22px 0 16px;border-radius:999px;background:#d3bd83;color:#0c1c16;font-size:15px;font-weight:500;transition:filter .18s}
.golf-film:hover{filter:brightness(1.08)}
.golf-film svg{width:18px;height:18px;fill:currentColor}
.golf-band{display:grid;grid-template-columns:repeat(3,1fr);gap:0;margin:0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.golf-band>div{padding:18px 14px 18px 0}
.golf-band>div+div{padding-left:14px}
.golf-band>div:not(.golf-total)+div:not(.golf-total){border-left:1px solid var(--line)}
.golf-band .golf-total{grid-column:1/-1;padding:22px 0;border-bottom:1px solid var(--line);display:flex;align-items:baseline;justify-content:space-between;gap:16px}
.golf-band .golf-total+div{padding-left:0}
.golf-band dt{font-size:12px;line-height:1.35;color:var(--muted)}
.golf-band dd{margin:6px 0 0;font:500 34px/1.05 var(--font-display);color:var(--text)}
.golf-band dd span{font:400 14px var(--font-body);color:var(--muted)}
.golf-band .golf-total dt{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}
.golf-band .golf-total dd{margin:0;font-size:56px}
.golf-frames{display:grid;gap:40px}
.golf-picture{display:block;width:100%;min-height:0;padding:0;border-radius:8px;overflow:hidden;cursor:zoom-in;background:#06120d}
.golf-picture img{width:100%;height:auto;transition:transform .6s ease}
.golf-picture:hover img{transform:scale(1.02)}
.golf-frame .eyebrow,.golf-outside .eyebrow{margin:18px 0 8px;font-size:11px;letter-spacing:.14em}
.golf-frame h2,.golf-outside h2{font-size:28px;line-height:1.1;margin:0 0 10px}
.golf-frame p:last-child,.golf-outside p:last-child{font-size:15px;line-height:1.6;color:var(--muted);max-width:44ch}
.golf-partner{margin:calc(-1*clamp(12px,2vw,32px)) 0 0;max-width:none;padding-top:18px;border-top:1px solid var(--line);font-size:13px;color:var(--muted)}
.golf-outside{display:grid;gap:0}
.golf-outside .eyebrow{margin-top:18px}
.golf-exits{display:grid;gap:10px}
.golf-exits .button{justify-content:space-between;width:100%;min-height:52px;border-radius:8px;font-size:15px;cursor:pointer}
.golf-exits .gold{background:#d3bd83;color:#0c1c16;border-color:#d3bd83}
.golf-exits .outline{color:var(--gold);border-color:#d6bd8273}
.golf-exits .outline:hover{background:#d6bd8214}
@media(min-width:800px){
 .golf-hero{margin-top:calc(-1*36px)}
 .golf-hero img{aspect-ratio:auto;height:min(72dvh,56.25vw);object-fit:cover}
 .golf-hero-copy{position:absolute;inset:auto 0 0;padding:120px var(--gutter) 44px;background:linear-gradient(#06120d00,#06120dcc 60%,#06120df2)}
 .golf-hero h1{margin-bottom:26px}
 .golf-band{grid-template-columns:1.25fr 1fr 1fr 1fr}
 .golf-band>div,.golf-band>div+div{padding:26px 24px}
 .golf-band .golf-total{grid-column:auto;display:block;border-bottom:0;padding:26px 24px 26px 0}
 .golf-band .golf-total+div{padding-left:24px;border-left:1px solid var(--line)}
 .golf-band .golf-total dd{margin-top:6px;font-size:clamp(52px,5vw,76px)}
 .golf-band dd{font-size:clamp(34px,3.2vw,48px)}
 .golf-band dt{font-size:13px}
 .golf-frames{grid-template-columns:repeat(3,minmax(0,1fr));gap:32px}
 .golf-outside{grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr);gap:48px;align-items:center}
 .golf-outside .eyebrow{margin-top:0}
 .golf-outside h2{font-size:clamp(30px,2.8vw,42px)}
 .golf-exits{grid-template-columns:repeat(2,minmax(0,360px));gap:16px}
}
@media(min-width:1001px){.golf-hero{margin-top:calc(-1*36px)}}
@media(min-width:800px){.golf-hero-copy{inset:0;display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start;padding:0 var(--gutter) 48px;background:linear-gradient(90deg,#06120de0,#06120d99 30%,#06120d00 58%)}}

/* ---------------------------------------------------------------------------
   Golf, 4 Oct: the motion pass. A film-led page built from the camera moves that
   already exist. Hero: the push towards the screens. The rise: scroll lifts the
   camera through the double height. Two moving frames, four stills, the arc of a
   shot, the green. Less text, more show. (Supersedes the 3 Oct layout above.)
   --------------------------------------------------------------------------- */
.golf-chapter{gap:clamp(44px,6vw,96px);padding-bottom:calc(150px + env(safe-area-inset-bottom))!important}
.golf-hero{position:relative;height:calc(100svh - var(--header-height));min-height:480px;margin:-28px calc(-1*var(--gutter)) 0;overflow:hidden;background:#040b08}
.golf-loop{display:block;width:100%;height:100%;object-fit:cover;background:#040b08;transition:opacity .5s ease}
.golf-loop.is-turning{opacity:0}
.golf-hero-copy{position:absolute;inset:auto 0 0;display:block;padding:140px var(--gutter) calc(var(--dock-bottom) + 96px);background:linear-gradient(#040b0800,#040b08b3 45%,#040b08eb)}
.golf-hero-copy .eyebrow{margin-bottom:10px;font-size:11px;letter-spacing:.14em}
.golf-hero h1{font-size:clamp(34px,4.4vw,68px);line-height:1.04;max-width:15ch;margin:0 0 22px;text-wrap:balance}
/* Numbers */
.golf-band b{font:inherit}
.golf-band>div{opacity:0;transform:translateY(10px);transition:opacity .7s ease,transform .7s ease}
.golf-band.is-in>div{opacity:1;transform:none}
.golf-band.is-in>div:nth-child(2){transition-delay:.12s}.golf-band.is-in>div:nth-child(3){transition-delay:.24s}.golf-band.is-in>div:nth-child(4){transition-delay:.36s}
/* The rise */
.golf-rise{height:300svh;margin:0 calc(-1*var(--gutter))}
.golf-rise-stage{position:sticky;top:var(--header-height);height:calc(100svh - var(--header-height));overflow:hidden;background:#040b08}
#golf-rise-canvas{display:block;width:100%;height:100%}
.golf-rise-stage:before{content:'';position:absolute;inset:0;background:linear-gradient(90deg,#040b08b8,#040b0800 46%),linear-gradient(0deg,#040b08a6,#040b0800 34%);pointer-events:none}
.golf-gauge{position:absolute;left:var(--gutter);top:16%;bottom:calc(var(--dock-bottom) + 150px);width:200px}
.golf-gauge:before,.golf-gauge i{content:'';position:absolute;left:0;bottom:0;width:1px;height:100%;background:#f1ebdd3d}
.golf-gauge i{width:2px;left:-.5px;background:#d3bd83;transform-origin:bottom;transform:scaleY(var(--rise,0))}
.golf-gauge span{position:absolute;left:0;padding-left:18px;transform:translateY(50%);font:500 22px/1.15 var(--font-display);color:#f1ebdd;opacity:.34;transition:opacity .45s ease}
.golf-gauge span:before{content:'';position:absolute;left:-4px;top:50%;width:9px;height:9px;margin-top:-4.5px;border-radius:50%;background:#040b08;border:1.5px solid #f1ebdd8c;transition:background .3s,border-color .3s}
.golf-gauge span.is-on{opacity:1}
.golf-gauge span.is-on:before{background:#d3bd83;border-color:#d3bd83}
.golf-gauge em{display:block;margin-bottom:3px;font:500 10px/1.3 var(--font-body);letter-spacing:.16em;text-transform:uppercase;color:#d3bd83}
.golf-rise-hint,.golf-rise-word{position:absolute;left:var(--gutter);right:var(--gutter);bottom:calc(var(--dock-bottom) + 92px);margin:0;max-width:none;transition:opacity .5s ease,transform .6s ease}
.golf-rise-hint{font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:#f1ebddb3}
.golf-rise-hint:after{content:'';display:inline-block;width:26px;height:1px;margin-left:12px;vertical-align:middle;background:#d3bd83;transform-origin:left;animation:golf-hint 1.8s ease-in-out infinite}
@keyframes golf-hint{0%,100%{transform:scaleX(.35)}50%{transform:scaleX(1)}}
.is-started .golf-rise-hint{opacity:0}
.golf-rise-word{font:500 clamp(44px,7vw,96px)/1 var(--font-display);color:#f7f3e6;opacity:0;transform:translateY(18px)}
.is-top .golf-rise-word{opacity:1;transform:none}
/* Moving frames and stills */
.golf-block{display:grid;gap:0}
.golf-media{aspect-ratio:16/9;border-radius:8px;overflow:hidden;background:#040b08}
.golf-words .eyebrow{margin:20px 0 8px;font-size:11px;letter-spacing:.14em}
.golf-words h2{font-size:clamp(28px,2.8vw,44px);line-height:1.08;margin:0 0 10px;text-wrap:balance}
.golf-words p:last-child{font-size:15px;line-height:1.6;color:var(--muted);max-width:40ch}
.golf-reveal{opacity:0;transform:translateY(22px);transition:opacity .9s ease,transform .9s cubic-bezier(.2,.7,.2,1)}
.golf-reveal.is-in{opacity:1;transform:none}
.golf-stills{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.golf-stills .golf-picture{position:relative}
.golf-stills .golf-picture:after{content:attr(aria-label);position:absolute;left:0;right:0;bottom:0;padding:26px 12px 10px;text-align:left;font:500 12px/1.2 var(--font-body);letter-spacing:.04em;color:#f1ebdd;background:linear-gradient(#040b0800,#040b08cc)}
.golf-partner{margin:calc(-1*clamp(20px,3vw,56px)) 0 0;padding-top:16px}
/* The arc of a shot, from the bay to the grass */
.golf-arc{display:block;width:100%;height:110px;overflow:visible;margin-bottom:calc(-1*clamp(28px,4vw,72px))}
.golf-arc path{fill:none;vector-effect:non-scaling-stroke}
.golf-arc-trace{stroke:#f1ebdd40;stroke-width:1;stroke-dasharray:1 7;stroke-linecap:round}
.golf-arc-flight{stroke:#d3bd83;stroke-width:1.5;stroke-linecap:round}
.golf-arc-ball{fill:#fff;opacity:0}
.golf-outside .golf-words .eyebrow{margin-top:20px}
@media(min-width:800px){
 .golf-hero{margin-top:-36px;height:calc(100svh - var(--header-height))}
 .golf-hero-copy{inset:0;display:flex;flex-direction:column;justify-content:flex-end;align-items:flex-start;padding:0 var(--gutter) 64px;background:linear-gradient(90deg,#040b08d9,#040b0880 32%,#040b0800 60%)}
 .golf-gauge{top:18%;bottom:22%;width:320px}
 .golf-gauge span{font-size:30px;padding-left:26px}
 .golf-gauge em{font-size:11px}
 .golf-rise-hint,.golf-rise-word{bottom:56px}
 .golf-block{grid-template-columns:minmax(0,1.5fr) minmax(280px,1fr);gap:56px;align-items:center}
 .golf-block.is-flipped .golf-media{order:2}
 .golf-words .eyebrow{margin-top:0}
 .golf-stills{grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
 .golf-arc{height:150px}
}
@media(prefers-reduced-motion:reduce){.golf-rise{height:auto}.golf-rise-stage{position:relative;top:0;height:70svh}.golf-reveal,.golf-band>div{opacity:1;transform:none}.golf-gauge span{opacity:1}.golf-rise-word{opacity:1;transform:none}.golf-rise-hint{display:none}}
/* Every close control is the cross alone. */
.directory-dialog>.close-button,.image-dialog .close-button,.film-dialog .close-button,.enquiry-dialog>.close-button{width:44px;min-width:44px;height:44px;padding:0;border-radius:50%;font-size:26px;line-height:1;flex:none}
.golf-stills .golf-picture:after{content:attr(data-label)}
.golf-gauge{bottom:calc(var(--dock-bottom) + 215px)}
@media(min-width:800px){.golf-gauge{bottom:26%}}
.golf-arc path{vector-effect:none}
@media(min-width:800px){.golf-hero h1{max-width:20ch}}

/* Golf, 8 Oct. The rise carries less shade over a brighter picture; the Motion Plate
   film sits beside the console; the green drifts in its frame; the land is one
   full-width closing band with its words on the picture. */
.golf-rise-stage:before{background:linear-gradient(90deg,#040b0885,#040b0800 40%),linear-gradient(0deg,#040b0880,#040b0800 28%)}
.golf-duo{display:grid;gap:10px}
.golf-duo .golf-media{position:relative}
.golf-duo .golf-media:after{content:attr(data-label);position:absolute;left:0;right:0;bottom:0;padding:26px 12px 10px;font:500 12px/1.2 var(--font-body);letter-spacing:.04em;color:#f1ebdd;background:linear-gradient(#040b0800,#040b08cc);pointer-events:none}
.golf-drift img{transform:scale(1.12);will-change:transform;transition:none}
.golf-land{position:relative;margin:0 calc(-1*var(--gutter));aspect-ratio:4/3;overflow:hidden;background:#040b08}
.golf-land-copy{position:absolute;inset:auto 0 0;padding:90px var(--gutter) 22px;background:linear-gradient(#040b0800,#040b08d9)}
.golf-land-copy .eyebrow{margin:0 0 6px;font-size:11px;letter-spacing:.14em}
.golf-land-copy h2{font-size:clamp(28px,3.4vw,52px);line-height:1.05;margin:0;color:#f7f3e6}
@media(min-width:800px){
 .golf-block.is-wide{grid-template-columns:1fr;gap:28px}
 .golf-duo{grid-template-columns:1fr 1fr;gap:16px}
 .golf-block.is-wide .golf-words{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:0 56px;align-items:end}
 .golf-block.is-wide .golf-words .eyebrow{grid-column:1/-1;margin:0 0 8px}
 .golf-block.is-wide .golf-words h2{margin:0}
 .golf-land{aspect-ratio:auto;height:min(76svh,50vw)}
 .golf-land-copy{padding:140px var(--gutter) 40px}
}

/* ---------------------------------------------------------------------------
   Plans, 8 Oct. Twelve numbers (two across on phones, six on wide screens), then the
   drawing with one clear way in ("Look inside") and the brochure to keep. Inside,
   a ring sits exactly on each numbered badge; rooms with a render show a preview
   beside the node and a thumbnail in the list.
   --------------------------------------------------------------------------- */
.spec-grid{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:0 20px!important}
.spec-grid>div{padding:14px 0 16px!important}
.spec-grid dt{font-size:13px!important}
.spec-grid dd{font-size:34px!important;margin-top:4px}
.project-summary{display:block}
@media(min-width:800px){.spec-grid{grid-template-columns:repeat(6,minmax(0,1fr))!important;gap:0 24px!important}.spec-grid dd{font-size:clamp(30px,2.6vw,42px)!important}.spec-grid>div{padding:18px 0 22px!important}}
.plan-panel{max-width:980px;margin-inline:auto;width:100%}
.plan-panel .plan-image{display:block;width:100%;cursor:pointer}
.plan-image>.plan-enlarge{position:absolute;left:50%;right:auto;bottom:14px;transform:translateX(-50%);display:inline-flex;align-items:center;gap:10px;width:auto;margin:0;padding:12px 22px;border-radius:999px;background:#d3bd83;color:#0c1c16;font-size:15px;font-weight:500;white-space:nowrap;box-shadow:0 6px 22px #0006;animation:plan-invite 2.6s ease-out infinite}
@keyframes plan-invite{0%{box-shadow:0 6px 22px #0006,0 0 0 0 #d3bd8399}70%,100%{box-shadow:0 6px 22px #0006,0 0 0 14px #d3bd8300}}
.plan-brochure{display:flex;align-items:center;gap:12px;min-height:54px;margin-top:14px;padding:0 18px;border:1px solid #d6bd8273;border-radius:8px;color:var(--gold);font-size:15px;font-weight:500}
.plan-brochure:hover{background:#d6bd8214}
.plan-brochure small{margin-left:auto;font-size:12px;font-weight:400;color:var(--muted);white-space:nowrap}
.plan-brochure svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
/* Rings: the size of the printed badge (2.2% of the drawing's width), so they scale with it. */
.plan-marks .plan-mark{position:absolute;width:2.5%;aspect-ratio:1;min-height:0;padding:0;border-radius:50%;transform:translate(-50%,-50%);background:none;border:0;pointer-events:auto;cursor:pointer}
.plan-marks .plan-mark:before{content:'';position:absolute;inset:-45%;border-radius:50%}
.plan-marks .plan-mark:after{content:'';position:absolute;inset:0;border-radius:50%;box-shadow:0 0 0 calc(2.5px*var(--inverse,1)) #e8c56a,0 0 0 calc(7px*var(--inverse,1)) #e8c56a40;opacity:0;transition:opacity .25s}
.plan-marks .plan-mark.is-active:after{opacity:1;animation:mark-pulse 1.8s ease-out infinite}
@keyframes mark-pulse{0%{box-shadow:0 0 0 calc(2.5px*var(--inverse,1)) #e8c56a,0 0 0 calc(2.5px*var(--inverse,1)) #e8c56a80}100%{box-shadow:0 0 0 calc(2.5px*var(--inverse,1)) #e8c56a,0 0 0 calc(13px*var(--inverse,1)) #e8c56a00}}
.plan-peek{position:absolute;left:100%;top:50%;width:132px;display:block;padding:4px;border-radius:9px;background:#0c1c16f2;border:1px solid #d6bd8280;box-shadow:0 8px 26px #000a;transform:translate(calc(16px*var(--inverse,1)),-50%) scale(calc(var(--inverse,1)*.9));transform-origin:left center;opacity:0;pointer-events:none;transition:opacity .3s ease .25s,transform .35s ease .25s}
.plan-peek.is-left{left:auto;right:100%;transform-origin:right center;transform:translate(calc(-16px*var(--inverse,1)),-50%) scale(calc(var(--inverse,1)*.9))}
.plan-mark.is-active .plan-peek{opacity:1;pointer-events:auto;transform:translate(calc(16px*var(--inverse,1)),-50%) scale(var(--inverse,1))}
.plan-mark.is-active .plan-peek.is-left{transform:translate(calc(-16px*var(--inverse,1)),-50%) scale(var(--inverse,1))}
.plan-peek img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;border-radius:6px}
.plan-peek span{display:flex;align-items:center;justify-content:space-between;padding:6px 6px 3px;font:500 12px/1 var(--font-body);color:#d3bd83}
.plan-peek span:after{content:'→';font-size:14px}
.viewer-rooms button{grid-template-columns:28px 1fr auto auto}
.viewer-rooms .room-text{grid-column:2/4}
.room-peek{grid-column:4;grid-row:1/3;align-self:center;margin-left:6px;width:64px;border-radius:6px;overflow:hidden;border:1px solid #d6bd8266}
.room-peek img{display:block;width:100%;aspect-ratio:16/11;object-fit:cover}
.photo-views{padding:0 18px 10px;margin:0}
.photo-views:empty{display:none}
.image-dialog.is-plan .photo-views{display:none}

/* Plans, 8 Oct (second pass). No added ring: the printed badge is the node. The chosen
   badge sends out two slow pulse rings, light with a dark edge so they read on grass,
   water, stone and roof alike. Nothing else is drawn on the plan. */
.plan-image img{aspect-ratio:2000/1758}
.plan-marks .plan-mark{width:2.3%;height:0;padding:0 0 2.3%;aspect-ratio:auto;box-sizing:content-box}
.plan-marks .plan-mark:after{display:none}
.plan-mark i{position:absolute;inset:0;border-radius:50%;border:calc(2px*var(--inverse,1)) solid #fff8dc;box-shadow:0 0 0 calc(1px*var(--inverse,1)) #0c1c16b3,inset 0 0 0 calc(1px*var(--inverse,1)) #0c1c1666;opacity:0;pointer-events:none}
.plan-mark.is-active i{animation:plan-pulse 2.4s ease-out infinite}
.plan-mark.is-active i+i{animation-delay:1.2s}
@keyframes plan-pulse{0%{opacity:0;transform:scale(1)}12%{opacity:.95}100%{opacity:0;transform:scale(2.5)}}
@media(prefers-reduced-motion:reduce){.plan-mark.is-active i{animation:none;opacity:.9;transform:scale(1.5)}}
/* Numbers: gold small-cap labels over slightly smaller figures. */
.spec-grid dt{font-size:11px!important;letter-spacing:.14em;text-transform:uppercase;color:var(--gold)!important;line-height:1.4}
.spec-grid dd{font-size:31px!important;margin-top:6px}
.spec-grid dd span{font-size:14px;color:var(--muted)}
@media(min-width:800px){.spec-grid dd{font-size:clamp(28px,2.4vw,38px)!important}}
/* List thumbnails read as something to open. */
.room-peek{position:relative;width:72px}
.room-peek:after{content:'';position:absolute;right:4px;bottom:4px;width:16px;height:16px;border-radius:50%;background:#0c1c16d9 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M6 4.5h5.5V10M11.5 4.5 4.5 11.5' fill='none' stroke='%23d3bd83' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/10px no-repeat}
.plan-marks .plan-mark i{width:auto;height:auto;transform:none}
/* Look inside: dark with a gold edge, so it reads on sand, grass and water alike. */
.plan-image>.plan-enlarge{background:#0c1c16;color:#e6cf93;border:1px solid #d3bd83;box-shadow:0 6px 22px #0009}

/* Plans: the chosen room is shown by light. The plan dims softly around a wide, feathered
   spot centred on the room; nothing is drawn on the badge itself. */
.plan-mark i{display:none}
.plan-spot{position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .5s ease;background:radial-gradient(circle at var(--sx,50%) var(--sy,50%),#04100b00 0,#04100b00 var(--sr,48px),#04100b99 calc(var(--sr,48px)*3),#04100bb3 100%)}
.plan-spot.is-on{opacity:1}
.image-dialog:not(.is-plan) .plan-spot{display:none}
.plan-spot{display:none}

/* Look inside sits across the bottom edge of the drawing, half on and half off; the
   brochure follows with room to breathe. */
.plan-panel .plan-image{overflow:visible}
.plan-panel .plan-image img{border-radius:4px}
.plan-image>.plan-enlarge{bottom:0;transform:translate(-50%,50%);padding:9px 18px;font-size:14px;gap:8px}
.plan-brochure{margin-top:40px}

/* ---------------------------------------------------------------------------
   9 Oct. Golf hero: a slightly brighter clip with less shade over the picture, so the
   room reads while staying dark.
   --------------------------------------------------------------------------- */
.golf-hero-copy{background:linear-gradient(#040b0800,#040b0885 48%,#040b08d1)}
@media(min-width:800px){.golf-hero-copy{background:linear-gradient(90deg,#040b08c2,#040b0866 28%,#040b0800 52%)}}

/* Evening scene: the way on is a slide into Golf. A ball rests at the left of the
   track; sliding it to the cup at the right opens the Golf page. */
.scene-back[hidden],.scene-slide[hidden]{display:none}
.scene-slide{--x:0px;--p:0;position:relative;flex:none;align-self:stretch;height:52px;border:1px solid #dec48a99;border-radius:999px;background:#f3efe20a;overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none;cursor:grab;outline-offset:3px}
.scene-slide.is-dragging{cursor:grabbing}
.scene-slide-fill{position:absolute;left:0;top:0;bottom:0;width:calc(var(--x) + 60px);background:linear-gradient(90deg,#dec48a14,#dec48a3d);border-radius:999px}
.scene-slide-label{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:0 52px;font-size:14px;font-weight:500;letter-spacing:.02em;white-space:nowrap;opacity:calc(1 - var(--p)*1.7);color:#dec48a;background:linear-gradient(100deg,#dec48a 35%,#fff6dc 50%,#dec48a 65%) 0 0/250% 100%;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:slide-sheen 3.2s linear infinite}
@keyframes slide-sheen{0%{background-position:120% 0}100%{background-position:-130% 0}}
.scene-slide-cup{position:absolute;right:11px;top:50%;width:30px;height:30px;margin-top:-15px;border-radius:50%;background:#040a07;box-shadow:inset 0 4px 7px #000,0 0 0 1.5px #dec48a8c}
.scene-slide-ball{position:absolute;left:4px;top:4px;width:42px;height:42px;border-radius:50%;background:radial-gradient(circle at 36% 30%,#fff 0,#f1ecdd 45%,#b9b29c 100%);box-shadow:0 2px 8px #0009;transform:translateX(var(--x));transition:transform .35s cubic-bezier(.3,.8,.3,1)}
.scene-slide.is-dragging .scene-slide-ball{transition:none}
.scene-slide.is-dragging .scene-slide-fill{transition:none}
.scene-slide.is-nudged .scene-slide-ball{animation:slide-nudge .7s ease}
@keyframes slide-nudge{0%,100%{transform:translateX(0)}40%{transform:translateX(34px)}}
.scene-slide.is-done .scene-slide-ball{transform:translateX(var(--x)) scale(.62);opacity:.0;transition:transform .4s ease,opacity .3s ease .2s}
@media(orientation:landscape) and (min-width:760px){.scene-slide{align-self:center;width:250px}}
@media(prefers-reduced-motion:reduce){.scene-slide-label{animation:none}}

/* Your Day on computers: the phone card exactly, scaled up. Times across the top, the
   whole render (16:9, never cropped), then the heading, its line and the way in beneath.
   The card is as wide as the screen height allows, so all of it shows without scrolling. */
@media(min-width:1001px){
 #estate{--below:216px;display:flex;flex-direction:column;align-self:center;width:min(calc(100% - 56px),max(640px,calc((100dvh - var(--header-height) - 56px - 96px - 60px - 22px - var(--below))*16/9 + 48px)));max-width:none;min-height:0;margin:28px auto}
 #estate .day-times{display:grid;grid-template-columns:repeat(3,1fr);margin:0;border-top:0}
 #estate .day-times button{min-height:60px;font-size:14px}
 #estate .estate-stage{position:relative;flex:none;aspect-ratio:16/9;min-height:0;margin:22px 24px 0;border-radius:10px}
 #estate .estate-stage>img{position:absolute;inset:0;width:100%;height:100%;aspect-ratio:auto;object-fit:cover;object-position:50% 50%!important}
 #estate .estate-story{display:flex;flex-direction:column;height:var(--below);padding:22px 28px 24px}
 #estate .estate-story h1{font-size:clamp(36px,3vw,46px);line-height:1.06;margin:0 0 8px}
 #estate .estate-description{max-width:none;font-size:17px;line-height:1.5}
 #estate .day-cta{width:100%;min-height:58px;margin-top:auto;padding:0 24px;font-size:16px}
}

/* 9 Oct. Small labels on dark green carry a lighter gold and full strength, so they read
   at eyebrow size (11-12 px, per the typography guide). */
.arrival .eyebrow,.golf-hero-copy .eyebrow,.golf-words .eyebrow,.spec-grid dt,.golf-band .golf-total dt,.scene-panel .room-eyebrow,.room-view .room-eyebrow{color:#e6d09a!important}
.golf-band dt{color:#d5dccf}
.golf-gauge em{font-size:11px;color:#e6d09a}
.golf-gauge span{opacity:.66;text-shadow:0 1px 10px #000c}
.golf-gauge span.is-on{opacity:1}
.golf-rise-hint{font-size:12px;color:#f7f3e6;text-shadow:0 1px 8px #000c}
.plan-brochure small,.plan-area{color:#cdd6c9}

/* Computers use the same bottom navigation bar as phones; the header is one slim row. */
@media(min-width:1001px){
 body:not([data-chapter=arrival]):not([data-chapter=map]){--header-height:68px}
 body:not([data-chapter=arrival]):not([data-chapter=map]) .site-header{align-items:center;padding-top:0}
 body:not([data-chapter=arrival]):not([data-chapter=map]) .site-header .brand{top:calc((var(--header-height) - 44px)/2)}
 .chapter-nav{top:auto;bottom:var(--dock-bottom);gap:4px;padding:8px;background:#0b2119;border:1px solid #d6bd8233;border-radius:16px;box-shadow:0 10px 30px #0006}
 .chapter-nav a{min-height:46px;padding:9px 26px;border-radius:9px;border-bottom:0;font-size:16px}
 .chapter-nav a[aria-current=page]{background:#1c3a2d;border-color:transparent}
 .chapter:not(.arrival):not(.map-chapter){padding-bottom:130px}
 body[data-chapter=estate] main{justify-content:flex-start}
 #estate.chapter{padding-bottom:0;margin:28px auto 0}
 .golf-hero-copy{padding-bottom:112px}
 .golf-rise-hint,.golf-rise-word{bottom:112px}
}

/* Full view on computers: the render sits flush under the top edge at its own 16:9 shape,
   so no empty band is left above or below it. Everything else is one panel beneath:
   the hour's title over its rooms in a single even row, and the way on set apart at the right. */
@media(orientation:landscape) and (min-width:760px){
 html:not(.is-touch) .explorer-dialog .viewport{flex:0 0 auto;height:min(56.25vw,calc(100dvh - 190px))}
 html:not(.is-touch) .scene-panel{flex:1 1 auto;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:auto auto;align-content:center;align-items:center;gap:18px 64px;padding:22px max(48px,calc((100% - 1500px)/2))}
 html:not(.is-touch) .scene-head{grid-column:1;grid-row:1;padding:0}
 html:not(.is-touch) .scene-panel h2{font-size:clamp(30px,2.6vw,42px)}
 html:not(.is-touch) .scene-side{grid-column:1;grid-row:2;flex:none}
 html:not(.is-touch) .scene-rooms{display:grid;grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:12px}
 html:not(.is-touch) .scene-rooms button{min-height:56px;max-height:none;padding:0 18px}
 html:not(.is-touch) .scene-room-name{font-size:16px}
 html:not(.is-touch) .scene-back,html:not(.is-touch) .scene-slide{grid-column:2;grid-row:1/3;align-self:center;width:300px;height:64px;min-height:64px;margin:0}
 html:not(.is-touch) .scene-back{font-size:16px}
 html:not(.is-touch) .scene-slide-ball{width:54px;height:54px}
 html:not(.is-touch) .scene-slide-cup{width:38px;height:38px;margin-top:-19px;right:13px}
 html:not(.is-touch) .scene-slide-label{font-size:16px;padding:0 64px}
}

/* The film is modal: its sound control must remain reachable inside it. */
.film-dialog .image-dialog-header h2{flex:1;min-width:0}
#film-sound-toggle{font-size:var(--type-ui);color:var(--gold);padding:0 8px;white-space:nowrap;min-height:44px;flex:none}

/* 10 Oct. All-Weather Play: one clear statement straight after the Golf hero. */
.golf-weather{text-align:center;padding:clamp(8px,2vw,28px) 0 0}
.golf-weather .eyebrow{margin:0 0 12px;font-size:11px;letter-spacing:.16em;color:#e6d09a}
.golf-weather h2{font:500 clamp(46px,7.4vw,112px)/1 var(--font-display);letter-spacing:-.02em;margin:0 0 16px;color:#f7f3e6;text-wrap:balance}
.golf-weather p:last-child{margin:0 auto;max-width:30ch;font-size:16px;line-height:1.55;color:var(--muted)}
@media(min-width:800px){.golf-weather p:last-child{font-size:18px;max-width:none}}
/* Enlarged plan: the level tabs sit in the bottom bar between − and + (no Fit; a level
   tab shows the whole plan). Photos keep − and + alone. */
.image-foot{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 12px;flex:none;border-top:1px solid var(--line)}
.image-foot .image-tools{display:contents}
.image-foot .image-tools button:first-child{order:0}
.image-foot .viewer-tabs{order:1;padding:0;margin:0;flex:0 1 auto;flex-wrap:nowrap;gap:2px}
.image-foot .image-tools button:last-child{order:2}
.image-foot .viewer-tabs button{white-space:nowrap}
@media(max-width:480px){.image-foot{gap:4px;padding:9px 8px}.image-foot .viewer-tabs button{font-size:12.5px;padding:8px 7px}.image-foot .image-tools button{min-width:40px;padding:7px 10px}}

/* 10 Oct, second pass. */
/* Registered mark: small and raised in display headings. */
sup.reg{font:400 .36em/0 var(--font-body);vertical-align:1.25em;margin-left:.06em;letter-spacing:0}
/* Golf hero: no shade over the film; the words carry their own soft shadow. */
.golf-hero-copy{background:none!important;text-shadow:0 1px 2px #000c,0 2px 22px #000b}
/* All-Weather Play is the film's button: one large gold pill that closes the indoor story. */
.golf-weather{padding:clamp(4px,1.5vw,20px) 0}
.golf-weather .eyebrow{margin-bottom:18px}
.golf-weather-play{min-height:0;gap:14px;padding:18px 34px 18px 26px;border-radius:999px;background:#d3bd83;color:#0c1c16;font:500 clamp(26px,3.6vw,44px)/1 var(--font-display);letter-spacing:-.01em;box-shadow:0 10px 34px #0007,0 0 0 1px #f1dfae inset;animation:weather-invite 2.8s ease-out infinite}
.golf-weather-play svg{width:.72em;height:.72em;flex:none}
.golf-weather-play:hover{filter:brightness(1.07)}
@keyframes weather-invite{0%{box-shadow:0 10px 34px #0007,0 0 0 1px #f1dfae inset,0 0 0 0 #d3bd8380}70%,100%{box-shadow:0 10px 34px #0007,0 0 0 1px #f1dfae inset,0 0 0 18px #d3bd8300}}
.golf-weather p:last-child{margin-top:20px}
@media(prefers-reduced-motion:reduce){.golf-weather-play{animation:none}}
/* 7 metres: a little smaller, and lower on phones so it stands clear of the level labels. */
.golf-rise-word{font-size:clamp(36px,5.6vw,80px)}
@media(max-width:799px){.golf-rise-word{bottom:calc(var(--dock-bottom) + 72px)!important}}
/* The shot from the bay to the grass: ground line, fading flight, a ball with a little
   light, and a ring where it lands. */
.golf-flight{margin-bottom:calc(-1*clamp(20px,3vw,56px))}
.golf-flight .golf-arc{height:120px;margin:0}
.golf-flight p{display:flex;justify-content:space-between;margin:10px 0 0;max-width:none;font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:#e6d09a}
.golf-arc-ground{stroke:#f1ebdd26;stroke-width:1;fill:none}
.golf-arc-trace{stroke:#f1ebdd2e;stroke-dasharray:1 8}
.golf-arc-flight{stroke:url(#golf-arc-fade);stroke-width:1.75}
.golf-arc-ball{filter:drop-shadow(0 0 5px #fff) drop-shadow(0 0 12px #f1dfae99)}
.golf-arc-ring{fill:none;stroke:#f1dfae;stroke-width:1.25;opacity:0;transform-box:fill-box;transform-origin:center}
.golf-arc.is-landed .golf-arc-ring{animation:arc-land 1.5s ease-out forwards}
@keyframes arc-land{0%{opacity:.9;transform:scale(1,.4)}100%{opacity:0;transform:scale(7,2.6)}}
@media(min-width:800px){.golf-flight .golf-arc{height:170px}.golf-flight p{font-size:11px}}
/* Enlarged plan: the bottom bar is its own darker band with a gold edge; the level tabs
   are one control, and the level in view is solid gold. */
.image-foot{background:#081a13;border-top:1px solid #d3bd8380;padding:12px}
.image-foot .viewer-tabs{padding:3px;border:1px solid #d3bd8359;border-radius:10px;background:#0f261d}
.image-foot .viewer-tabs button{border-radius:7px;color:#d8dccd}
.image-foot .viewer-tabs button[aria-pressed=true]{background:#d3bd83;color:#0c1c16;font-weight:500}
.image-foot .image-tools button{border-color:#d3bd8359;color:#e6d09a;background:#0f261d;border-radius:10px;min-height:44px}
@media(max-width:480px){.image-foot{padding:10px 8px}}

/* ---------------------------------------------------------------------------
   10 Oct, third pass.
   --------------------------------------------------------------------------- */
/* Registered mark in display headings: measured, not guessed. Cormorant's capitals are
   0.63 em tall; this DM Sans mark is 0.42 em of its own size. At .78 em it stands 52% of
   a capital's height, with its top level with the capitals. */
sup.reg{font:400 .78em/0 var(--font-body);vertical-align:.09em;margin-left:.04em;letter-spacing:0}
/* Enlarged plan: no − / +. The levels are one floating control over the foot of the plan. */
.image-dialog.is-plan .image-tools{display:none}
.image-dialog.is-plan .image-foot{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:5;width:max-content;max-width:calc(100% - 20px);padding:0;border:0;background:none}
.image-dialog.is-plan .image-foot .viewer-tabs{padding:5px;gap:3px;border:1px solid #d3bd8399;border-radius:999px;background:#07140ff2;box-shadow:0 12px 34px #000b,0 2px 6px #0008}
.image-dialog.is-plan .image-foot .viewer-tabs button{min-height:42px;padding:0 16px;border-radius:999px;font-size:14px}
.image-dialog.is-plan .viewer-rooms{padding-bottom:78px}
@media(max-width:480px){.image-dialog.is-plan .image-foot .viewer-tabs button{padding:0 12px;font-size:13.5px}}
/* Golf hero: the footage's own colour, shown wide (4:5) on upright screens so both
   consoles are in view; the words are centred low on the dark floor. */
.golf-hero-copy{inset:auto 0 0!important;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;text-align:center;padding:0 16px 26px!important}
.golf-hero-copy .eyebrow{margin-inline:auto}
.golf-hero h1{max-width:19ch;margin:0 auto}
@media(orientation:portrait){.golf-hero{height:auto;min-height:0;aspect-ratio:4/5;max-height:calc(100svh - var(--header-height))}}
@media(orientation:landscape){.golf-hero-copy{padding-bottom:calc(var(--dock-bottom) + 96px)!important}.golf-hero h1{max-width:24ch}}
/* All-Weather block: centred as one group, a little closer to what it concludes. */
.golf-weather{margin-top:calc(-1*clamp(10px,2vw,30px));margin-bottom:clamp(10px,2vw,30px)}
.golf-weather .eyebrow{margin-inline:auto;max-width:none}
.golf-weather p:last-child{max-width:none}
/* Sun behind a cloud under the flight: fine gold line-work in the page's own language.
   The cloud is filled with the page colour, so it hides the sun until it drifts away. */
.golf-sky{pointer-events:none}
.golf-sun circle{fill:none;stroke:#e6d09a;stroke-width:1.25;opacity:calc(.35 + var(--p,0)*.65)}
.golf-sun path{fill:none;stroke:#e6d09a;stroke-width:1.25;stroke-linecap:round;opacity:calc(var(--p,0)*1.5 - .45)}
.golf-cloud{fill:var(--bg);stroke:#d5dccf;stroke-width:1.25;stroke-linejoin:round;opacity:calc(1 - var(--p,0)*1.5);transform:translate(calc(6px - var(--p,0)*34px),4px)}
/* One layout for every picture-and-words pair on wide screens: the picture is always the
   wider column, sides alternate, and the flight keeps one shape instead of stretching. */
.golf-flight{max-width:880px;margin-inline:auto;width:100%}
@media(min-width:800px){
 .golf-block,.golf-outside{grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:clamp(32px,4vw,64px);align-items:center}
 .golf-block.is-flipped{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr)}
 .golf-block.is-wide{grid-template-columns:1fr;gap:24px}
 .golf-block.is-wide .golf-words{grid-template-columns:1fr 1fr;gap:0 16px;align-items:start}
 .golf-block.is-wide .golf-words p:last-child{grid-column:2;grid-row:2;align-self:start;margin-top:.35em;max-width:44ch;font-size:16px}
 .golf-block.is-wide .golf-words h2{grid-column:1;grid-row:2}
 .golf-words h2{font-size:clamp(28px,2.7vw,42px)}
 .golf-words p:last-child{font-size:16px}
 .golf-flight .golf-arc{height:190px}
}
@media(orientation:portrait){.golf-hero h1{max-width:none;width:100%;font-size:clamp(30px,7.6vw,56px)}}

/* ---------------------------------------------------------------------------
   10 Oct, fourth pass (Golf page and plan levels). Rules are prefixed #golf so they
   settle the earlier passes above.
   --------------------------------------------------------------------------- */
/* Hero: the film is never covered. The picture stands alone and the words sit beneath it.
   Upright screens show the 4:5 cut; wide screens the full frame. The picture is as tall
   as the screen allows while the words and the bottom bar still fit on the first screen. */
#golf .golf-hero{display:flex;flex-direction:column;height:auto;min-height:0;max-height:none;aspect-ratio:auto;overflow:visible;background:none}
#golf .golf-hero .golf-loop{flex:none;width:100%;height:var(--hero-h);object-fit:cover;object-position:50% 60%}
#golf .golf-hero-copy{position:static!important;inset:auto!important;display:block;background:none!important;text-shadow:none;text-align:center;padding:22px 16px 0!important}
#golf .golf-hero-copy .eyebrow{margin:0 auto 10px;max-width:none}
#golf .golf-hero h1{margin:0 auto;max-width:none;width:auto;text-wrap:balance}
@media(orientation:portrait){
 #golf .golf-hero{--hero-h:min(125vw,calc(100svh - var(--header-height) - 248px))}
 #golf .golf-hero h1{font-size:clamp(28px,7.3vw,54px);line-height:1.08}
}
@media(orientation:landscape){
 #golf .golf-hero{--hero-h:min(calc(min(100vw,1568px)*.5625),calc(100svh - var(--header-height) - 236px))}
 #golf .golf-hero h1{font-size:clamp(30px,3.4vw,54px);line-height:1.08}
}
/* Clips and pictures. Phones: more air between the two stacked clips. */
#golf .golf-duo{gap:22px}
/* Wide screens: every moving picture is the same size (half the page), and every set of
   words reads the same way: label, heading, line, top to bottom. */
@media(min-width:800px){
 #golf .golf-block,#golf .golf-outside{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;align-items:center}
 #golf .golf-block.is-wide{grid-template-columns:minmax(0,1fr);gap:24px}
 #golf .golf-duo{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px}
 #golf .golf-media,#golf .golf-outside .golf-picture{aspect-ratio:16/9;width:100%}
 #golf .golf-outside .golf-picture img{width:100%;height:100%;object-fit:cover}
 #golf .golf-words{display:block;padding:0 0 0 clamp(16px,3vw,56px)}
 #golf .golf-block.is-flipped .golf-words{padding:0 clamp(16px,3vw,56px) 0 0}
 #golf .golf-block.is-wide .golf-words{display:block;padding:0;max-width:calc(50% - 12px)}
 #golf .golf-words .eyebrow{margin:0 0 10px}
 #golf .golf-words h2{font-size:clamp(28px,2.7vw,42px);line-height:1.08;margin:0 0 12px;grid-column:auto;grid-row:auto}
 #golf .golf-words p:last-child,#golf .golf-block.is-wide .golf-words p:last-child{grid-column:auto;grid-row:auto;margin:0;max-width:44ch;font-size:16px;line-height:1.6}
}
/* The green: it opens close and eases out, then breathes slowly, so it moves like the clips. */
#golf .golf-drift{overflow:hidden}
#golf .golf-drift img{transform:scale(1.2);will-change:transform;transition:none}
#golf .golf-outside.is-in .golf-drift img{animation:golf-zoom 15s cubic-bezier(.4,0,.6,1) infinite alternate}
@keyframes golf-zoom{from{transform:scale(1.2)}to{transform:scale(1)}}
@media(prefers-reduced-motion:reduce){#golf .golf-outside.is-in .golf-drift img{animation:none;transform:none}}
/* Sun and cloud: larger and higher under the flight; line weights stay fine at any size. */
#golf .golf-flight .golf-arc{height:156px}
#golf .golf-sky *{vector-effect:non-scaling-stroke}
@media(min-width:800px){#golf .golf-flight .golf-arc{height:210px}}
/* Enlarged plan, wide screens: room beneath the drawing for the lower half of the level
   control (placed by placeLevels); the list no longer needs clearance. */
@media(min-width:801px){
 .image-dialog.is-plan .image-body{margin-bottom:36px}
 .image-dialog.is-plan .image-foot{bottom:auto;transform:translateX(-50%)}
 .image-dialog.is-plan .viewer-rooms{padding-bottom:0}
}
@media(orientation:portrait) and (min-width:600px){#golf .golf-hero{--hero-h:min(125vw,calc(100svh - var(--header-height) - 300px))}}

/* ---------------------------------------------------------------------------
   10 Oct, fifth pass.
   --------------------------------------------------------------------------- */
/* Enlarged plan, every screen: the level pill is centred on the whole pop-up and floats
   half off its bottom edge. The pop-up leaves room beneath for the lower half. */
.image-dialog.is-plan{overflow:visible;max-height:calc(100dvh - 96px)}
.image-dialog.is-plan .image-body{margin-bottom:0;overflow:hidden;border-radius:0 0 11px 11px}
.image-dialog.is-plan .image-foot{left:50%!important;top:auto!important;bottom:0;transform:translate(-50%,50%)}
.image-dialog.is-plan .viewer-rooms{padding-bottom:36px}
@media(max-width:800px){.image-dialog.is-plan{height:calc(100dvh - 60px)!important;max-height:calc(100dvh - 60px)}}
/* Golf hero: the words sit on the film, small and to the left, on the dark floor between
   the screen and the hitting mats (placed from the footage's own geometry, so they sit
   above the mats on every screen). Nothing is left beneath the film. */
#golf .golf-hero{container-type:inline-size;position:relative}
#golf .golf-hero-copy{position:absolute!important;inset:auto!important;padding:0!important;text-align:left;pointer-events:none;text-shadow:0 1px 2px #000d,0 0 18px #000c}
#golf .golf-hero-copy .eyebrow{margin:0 0 6px;font-size:10.5px}
#golf .golf-hero h1{margin:0;text-wrap:balance}
@media(orientation:portrait){
 #golf .golf-hero{--hero-h:min(125vw,calc(100svh - var(--header-height) - 104px))}
 #golf .golf-hero-copy{left:var(--gutter)!important;bottom:calc(40% - 20cqw)!important;max-width:70cqw}
 #golf .golf-hero h1{font-size:clamp(18px,4.8cqw,32px);line-height:1.1}
}
@media(orientation:portrait) and (min-width:600px){#golf .golf-hero{--hero-h:min(125vw,calc(100svh - var(--header-height) - 110px))}}
@media(orientation:landscape){
 #golf .golf-hero{--hero-h:min(calc(min(100vw,1568px)*.5625),calc(100svh - var(--header-height) - 104px))}
 #golf .golf-hero-copy{left:32.5cqw!important;bottom:calc(40% - 9cqw)!important;max-width:35cqw}
 #golf .golf-hero h1{font-size:clamp(18px,2cqw,30px);line-height:1.1}
}
/* The green follows the shot (golf.js): no timed animation. */
#golf .golf-drift img,#golf .golf-outside.is-in .golf-drift img{animation:none;transform-origin:41% 22%;transform:scale(2.5)}
/* How it plays: two paragraphs. Wide screens: both clips stacked on the left, words on the right. */
#golf .golf-words p+p{margin-top:.9em}
#golf .golf-words p:not(.eyebrow){font-size:15px;line-height:1.6;color:var(--muted);max-width:44ch}
@media(min-width:800px){
 #golf .golf-block.is-wide{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;align-items:center}
 #golf .golf-block.is-wide .golf-duo{grid-template-columns:minmax(0,1fr);gap:24px}
 #golf .golf-block.is-wide .golf-words{max-width:none;padding:0 0 0 clamp(16px,3vw,56px)}
 #golf .golf-words p:not(.eyebrow){font-size:16px}
 #golf .golf-words p+p{margin-top:.9em!important}
}

/* ---------------------------------------------------------------------------
   11 Oct. The shot is one pinned stage (golf.js): the page holds on the button, the
   flight and the green while the scroll plays the shot, as the rise does.
   --------------------------------------------------------------------------- */
#golf .golf-band{border-top:0}
#golf .golf-shot{padding-bottom:115svh}
#golf .golf-shot-stage{position:sticky;top:calc(var(--header-height) + 22px);display:flex;flex-direction:column;gap:18px}
#golf .golf-shot-stage>*{margin:0;transform:none}
#golf .golf-weather{padding:0}
#golf .golf-flight{max-width:none;width:100%}
#golf .golf-flight .golf-arc{height:133px}
#golf .golf-flight p{margin-top:8px}
#golf .golf-flight p span{opacity:0;transition:opacity .45s ease}
#golf .golf-flight.is-launched p span:first-child,#golf .golf-flight.is-landed p span:last-child{opacity:1}
/* Only the cloud at first; the sun fades in once the ball is away, then its rays. */
#golf .golf-sun circle{opacity:calc(var(--p,0)*6 - .25)}
@media(min-width:800px){
 /* The arc takes whatever height is left, so the button, the flight and the green all sit above the menu bar. */
 #golf .golf-shot-stage{--green-h:calc((min(100vw,1568px) - 2*var(--gutter) - 24px)/2*.5625);top:calc(var(--header-height) + 14px);gap:14px}
 #golf .golf-flight{max-width:880px;margin-inline:auto}
 #golf .golf-flight .golf-arc{height:clamp(96px,calc(100svh - var(--header-height) - 372px - var(--green-h)),178px)}
 #golf .golf-weather-play{font-size:clamp(26px,2.4vw,36px);padding:14px 30px 14px 22px}
 #golf .golf-weather .eyebrow{margin-bottom:12px}
 #golf .golf-weather p:last-child{margin-top:12px;font-size:16px}
}
@media(prefers-reduced-motion:reduce){#golf .golf-shot{padding-bottom:0}#golf .golf-shot-stage{position:static}#golf .golf-flight p span{opacity:1}}
/* How it plays: two headed parts. Wide screens: each part sits beside its own clip. */
#golf .golf-part+.golf-part{margin-top:22px}
#golf .golf-part h2{white-space:nowrap}
@media(min-width:800px){
 #golf .golf-block.is-wide{align-items:stretch}
 #golf .golf-block.is-wide .golf-words{display:grid;grid-template-rows:1fr 1fr;gap:24px}
 #golf .golf-part{align-self:center}
 #golf .golf-part+.golf-part{margin-top:0}
}
/* A sticky box can only travel inside its parent's content, so the scroll room is a spacer, not padding. */
#golf .golf-shot{padding-bottom:0}
#golf .golf-shot:after{content:'';display:block;height:115svh}
@media(prefers-reduced-motion:reduce){#golf .golf-shot:after{display:none}}
@media(min-width:800px){
 #golf .golf-block.is-wide .golf-words{grid-template-columns:minmax(0,1fr)}
 #golf .golf-flight .golf-arc{height:clamp(96px,calc(100svh - var(--header-height) - 300px - var(--green-h)),178px)}
}
/* ---------------------------------------------------------------------------
   11 Oct (evening). One round control everywhere: every × and every card's sound
   button is the same 38 px circle. Sound sits top left, opposite the ×, on every
   card that covers the header (not on the floor plans).
   --------------------------------------------------------------------------- */
:is(.close-button,.room-close,.sound-button){display:flex;align-items:center;justify-content:center;flex:none;width:38px!important;min-width:38px!important;height:38px!important;min-height:38px!important;padding:0!important;border-radius:50%!important;font-size:22px!important;line-height:1!important;background:#0b2119cc!important;border:1px solid #d4d8be33!important;color:#fff}
:is(.close-button,.room-close,.sound-button):hover{background:#17352ae6!important}
.sound-button .sound-icon{width:20px;height:20px}
.sound-button[aria-pressed=true]{color:var(--gold)}
.explorer-top{justify-content:space-between}
.room-view .room-sound{position:absolute;top:12px;left:12px;z-index:3}
.image-dialog-header h2{flex:1;min-width:0}
.image-dialog.is-plan .sound-button{display:none}
.enquiry-dialog>.enquiry-sound{position:absolute;left:12px;top:12px}
.enquiry-dialog h2{margin-top:30px}
.direct-whatsapp{border-top:0;padding-top:0;margin-top:14px}
.direct-whatsapp span{color:var(--muted)}
/* The film is a bare player on a dark screen: it takes the whole window, so turning a phone
   sideways gives the film the whole screen. Its own controls do everything. */
.film-dialog{inset:0;width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;margin:0;border:0;border-radius:0;box-shadow:none;background:#020605f5;overflow:hidden}
.film-dialog[open]{display:flex;align-items:center;justify-content:center}
.film-dialog video{width:min(100vw,177.78dvh);height:auto;max-height:100dvh;aspect-ratio:16/9;background:#000}
.film-dialog .close-button{position:absolute;top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));z-index:2}
/* The four levels always share one row. */
#plan-tabs{flex-wrap:nowrap;gap:2px}
#plan-tabs button{flex:0 1 auto;min-width:0;white-space:nowrap;padding:8px clamp(6px,2.2vw,12px);font-size:clamp(12px,3.5vw,15px)}
/* Phones: with the top rule gone, the space above the total matches the space beneath the band. */
@media(max-width:799px){
 #golf .golf-band{margin-top:-20px}
 #golf .golf-band .golf-total{padding-top:0}
}
/* Tall wide screens (an upright iPad): the shot has air above it and between its parts. The
   flight takes only the height that lets the plot card beneath come fully into view above the
   menu bar while the stage is still held, so the page ends at rest with both on screen. */
@media(min-width:800px) and (min-height:1000px){
 /* the page ends exactly where the held stage and the plot sit together */
 .golf-chapter{padding-bottom:calc(133px + env(safe-area-inset-bottom))!important}
 #golf .golf-shot{margin-top:clamp(24px,4svh,64px)}
 #golf .golf-shot-stage{--air:clamp(24px,3.4svh,44px);top:calc(var(--header-height) + var(--air));gap:var(--air)}
 #golf .golf-flight .golf-arc{height:clamp(130px,calc(100svh - var(--header-height) - 3*var(--air) - 280px - 2*var(--green-h) - clamp(44px,6vw,96px)),36vw)}
}
