@font-face{font-family:Jost;font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/jost-400.woff2') format('woff2')}
@font-face{font-family:Jost;font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/jost-500.woff2') format('woff2')}
@font-face{font-family:Jost;font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/jost-600.woff2') format('woff2')}
@font-face{font-family:'EB Garamond';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/eb-garamond-400.woff2') format('woff2')}@font-face{font-family:'EB Garamond';font-style:normal;font-weight:700;font-display:swap;src:url('/fonts/eb-garamond-700.woff2') format('woff2')}
:root{--grain:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%22180%22%20height%3D%22180%22%3E%3Cfilter%20id%3D%22grain%22%3E%3CfeTurbulence%20type%3D%22fractalNoise%22%20baseFrequency%3D%220.85%22%20numOctaves%3D%223%22%20stitchTiles%3D%22stitch%22%2F%3E%3CfeColorMatrix%20type%3D%22saturate%22%20values%3D%220%22%2F%3E%3CfeComponentTransfer%3E%3CfeFuncA%20type%3D%22linear%22%20slope%3D%220%22%20intercept%3D%220.05%22%2F%3E%3C%2FfeComponentTransfer%3E%3C%2Ffilter%3E%3Crect%20width%3D%22100%25%22%20height%3D%22100%25%22%20filter%3D%22url%28%23grain%29%22%2F%3E%3C%2Fsvg%3E");--bg:#040404;--bg-raise:#0c0c0c;--line:rgba(255,255,255,.14);--ink:#fff;--ink-nav:rgba(255,255,255,.95);--ink-body:rgba(255,255,255,.55);--ink-mute:rgba(255,255,255,.48);--accent:#f47a3e;--sans:"Jost",system-ui,sans-serif;--serif:"EB Garamond",Georgia,serif;--track-nav:.25em;--track-label:.4em;--track-title:.2em;--wrap:1240px;--gutter:clamp(16px,4vw,48px);--ease-out:cubic-bezier(.16,1,.3,1);color-scheme:dark;scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.25) var(--bg)}
*{box-sizing:border-box}body{margin:0;background:var(--bg) var(--grain) repeat;color:var(--ink-body);font:400 15px/1.65 var(--sans);letter-spacing:.01em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.menu-open{overflow:hidden}main{overflow-x:clip}a{color:inherit;text-underline-offset:4px}button,input,textarea,select{font:inherit}button,a,input,textarea,select,summary{touch-action:manipulation}a,button,summary{cursor:pointer}button{color:var(--ink);background:none;border:0}img{display:block;max-width:100%;height:auto}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible,summary:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}::selection{background:var(--accent);color:#000}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-thumb{background:rgba(255,255,255,.25)}::-webkit-scrollbar-track{background:var(--bg)}[hidden]{display:none!important}.wrap{max-width:calc(var(--wrap) + 2*var(--gutter));padding-inline:var(--gutter);margin-inline:auto}.label{font:600 14px/1.5 var(--sans);text-transform:uppercase;letter-spacing:var(--track-label);color:var(--ink);text-wrap:balance}h1,h2,h3,p{margin-top:0}p{margin-bottom:1.5em}h3{margin-top:2.5em;margin-bottom:1em}.button{display:inline-block;border:2px solid white;border-radius:0;padding:13px 26px;font:700 12px/1.4 var(--serif);text-transform:uppercase;letter-spacing:.2em;text-decoration:none;color:#fff;background:transparent;transition:background 250ms,color 250ms}.button:hover{background:#fff;color:#000}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.skip-link{position:fixed;z-index:20;top:8px;left:8px;transform:translateY(-150%);background:var(--bg);padding:12px;color:white}.skip-link:focus{transform:none}
.header{display:flex;align-items:center;justify-content:space-between;gap:28px;padding-top:48px;padding-bottom:48px}.logo{flex-shrink:0}.logo img{height:47px;width:auto}.desktop-nav{display:flex;gap:22px;align-items:center}.desktop-nav a,footer nav a,.neighbors a{font:600 12px/1.5 var(--sans);text-transform:uppercase;letter-spacing:var(--track-nav);text-decoration:none;color:var(--ink-nav);transition:color 200ms}.desktop-nav a:hover,footer nav a:hover,.neighbors a:hover{color:var(--ink-mute)}.nav-group{position:relative}.dropdown{position:absolute;z-index:10;left:-20px;top:100%;min-width:260px;padding:20px;background:#000;opacity:0;visibility:hidden;transform:translateY(4px);transition:opacity 200ms,transform 200ms,visibility 200ms}.nav-group:last-child .dropdown{left:auto;right:-20px}.dropdown a{display:block;padding:8px 0}.nav-group:hover .dropdown,.nav-group:focus-within .dropdown{opacity:1;visibility:visible;transform:translateY(0)}.menu-toggle{display:none;width:34px;padding:3px}.menu-toggle svg,.menu-close svg{width:28px;fill:none;stroke:currentColor;stroke-width:1}.menu-close{position:absolute;right:var(--gutter);top:28px;padding:12px}dialog{position:fixed;inset:0;width:100%;max-width:none;height:100%;max-height:none;margin:0;padding:90px var(--gutter) 40px;border:0;background:#000;color:#fff}dialog::backdrop{background:#000}dialog nav{max-width:600px;margin:auto}dialog details{border-bottom:1px solid var(--line);padding:15px 0}dialog summary{font:600 14px/1.7 var(--sans);letter-spacing:var(--track-nav)}dialog nav a{display:block;padding:12px 20px;font:600 12px/1.6 var(--sans);letter-spacing:var(--track-nav);text-decoration:none}.call{text-align:center;margin:30px var(--gutter) 42px}.call a{text-decoration:none}.page-intro{text-align:center;margin-bottom:50px}.page-intro h1{margin-bottom:24px}.page-intro p{max-width:68ch;margin:0 auto}.page-heading{text-align:center;margin:0 0 50px}.contact-row{text-align:center;margin:56px auto 70px}footer{padding:44px var(--gutter);text-align:center;background:transparent}footer p{margin-bottom:22px}footer a{text-decoration:none}footer nav{display:flex;justify-content:center;flex-wrap:wrap;gap:12px 26px}
.filter-bar{display:none;position:sticky;top:0;z-index:5;background:var(--grain) rgba(4,4,4,.92);backdrop-filter:blur(8px);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.js .filter-bar{display:block}.filters{display:none;padding:22px var(--gutter);overflow-x:auto;white-space:nowrap;gap:30px;scrollbar-width:thin}.js .filters{display:flex;justify-content:safe center}.filters button{position:relative;flex-shrink:0;padding:0 0 7px;font:600 12px/1.5 var(--sans);letter-spacing:var(--track-nav);text-transform:uppercase;color:var(--ink-mute)}.filters button:hover,.filters button[aria-pressed=true]{color:var(--ink)}.filters button[aria-pressed=true]::after{content:"";position:absolute;bottom:0;left:0;right:0;height:1px;background:#fff}.filter-scroll,.thumb-scroll{position:absolute;top:0;bottom:0;z-index:1;width:36px;padding:0;display:flex;align-items:center;justify-content:center;color:#fff;opacity:0;visibility:hidden;pointer-events:none;transition:opacity 200ms,visibility 200ms}.filter-scroll::before,.thumb-scroll::before{content:"";position:absolute;top:0;bottom:0;width:48px;pointer-events:none}.filter-scroll-prev,.thumb-scroll-prev{left:0}.filter-scroll-next,.thumb-scroll-next{right:0}.filter-scroll-prev::before,.thumb-scroll-prev::before{left:0;background:linear-gradient(to right,#040404,transparent)}.filter-scroll-next::before,.thumb-scroll-next::before{right:0;background:linear-gradient(to left,#040404,transparent)}.filter-scroll svg,.thumb-scroll svg{position:relative;width:24px;height:24px;opacity:.7;transition:opacity 200ms}.filter-scroll:hover svg,.thumb-scroll:hover svg{opacity:1}.filter-bar.can-prev .filter-scroll-prev,.filter-bar.can-next .filter-scroll-next,.thumb-strip.can-prev .thumb-scroll-prev,.thumb-strip.can-next .thumb-scroll-next{opacity:1;visibility:visible;pointer-events:auto}.stage{padding-top:36px}.service-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.tile{position:relative;display:block;aspect-ratio:3/2;overflow:hidden;text-decoration:none;color:white}.tile img{width:100%;height:100%;object-fit:cover;transition:transform 900ms var(--ease-out)}.tile::after{content:"";position:absolute;inset:0;background:rgba(0,0,0,.3);transition:background 900ms var(--ease-out)}.tile:hover img{transform:scale(1.04)}.tile:hover::after{background:rgba(0,0,0,.15)}.tile-title,.panel-title{font:400 clamp(22px,2.6vw,36px)/1.25 var(--serif);text-transform:uppercase;letter-spacing:var(--track-title);color:white;text-align:center;text-wrap:balance}.tile-title{position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;padding:26px}.tile.reveal-pending{opacity:.001;transform:translateY(12px)}.tile.revealed{opacity:1;transform:none;transition:opacity 700ms var(--ease-out),transform 700ms var(--ease-out);transition-delay:var(--stagger,0ms)}.service-panel{margin-top:70px;scroll-margin-top:85px}.js .service-panel{margin-top:0}.panel-title{margin:20px 0 40px}.service-columns{display:grid;grid-template-columns:minmax(0,44fr) minmax(0,56fr);grid-template-areas:"copy media";gap:56px;align-items:start}.service-columns>.copy{grid-area:copy}.panel-media{grid-area:media;min-width:0;position:sticky;top:130px}.copy{max-width:68ch}.copy h3:first-child{margin-top:0}.copy p:last-child{margin-bottom:0}.copy-list{list-style:none;margin:0 0 25px;padding:0}.copy-list li{position:relative;padding-left:18px;margin-bottom:10px}.copy-list li::before{content:"";width:4px;height:4px;background:var(--ink-mute);position:absolute;left:0;top:.7em}.neighbors{display:flex;justify-content:space-between;gap:24px;padding-top:44px;margin-top:56px;border-top:1px solid var(--line);text-align:center}.neighbors a{flex:1}.neighbors a:first-child{text-align:left}.neighbors a:last-child{text-align:right}.panel-enter{animation:panel-in 450ms var(--ease-out) both}@keyframes panel-in{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
/* The glow box matches only the stage; its layers extend 40px on every side. */
.slideshow{position:relative;isolation:isolate;min-width:0}.slide-glow{position:absolute;top:0;left:0;right:0;aspect-ratio:3/2;z-index:-1;pointer-events:none}.glow-layer{position:absolute;inset:-40px;background:center/cover no-repeat;filter:blur(48px) saturate(1.25);opacity:0;transition:opacity 1s ease-in-out}.glow-layer.is-on{opacity:.32}.slide-stage{position:relative;aspect-ratio:3/2;overflow:hidden;touch-action:pan-y}.slide{position:absolute;inset:0;opacity:0;transition:opacity 0s 1s;pointer-events:none}.slide.active{z-index:1;opacity:1;transition:opacity 1s ease-in-out}.slide img{width:100%;height:100%;object-fit:cover}.thumb-strip{position:relative;margin-top:8px}.thumb-scroll{top:6px;bottom:12px}.thumb-scroll::before{width:40px}.thumb-scroll svg{width:20px;height:20px}.thumbnails{display:none;gap:8px;overflow-x:auto;padding:6px 3px 12px}.js .thumbnails{display:flex}.thumbnails button{width:84px;min-width:84px;aspect-ratio:3/2;opacity:.45;padding:0;margin:0;transition:opacity 200ms}.thumbnails button img{width:100%;height:100%;object-fit:cover}.thumbnails button:hover{opacity:.8}.thumbnails button[aria-pressed=true]{opacity:1;outline:1px solid #fff;outline-offset:2px}.thumbnails button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.home-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:40px 28px}.home-grid article a{text-decoration:none}.home-grid article img{width:100%;aspect-ratio:1/1;object-fit:cover}.home-grid h2{margin:26px 0 18px}.home-grid p{max-width:68ch}.text-page{max-width:68ch;margin:0 auto 48px}.wrap>.slideshow{margin-bottom:56px}
.booking-form{position:relative}.booking-grid{display:grid;gap:26px 28px;margin:32px 0}.form-field{min-width:0}.form-field label{display:block;margin-bottom:8px;color:white;font:500 12px/1.6 var(--sans);text-transform:uppercase;letter-spacing:.25em}.form-field input,.form-field textarea,.form-field select{display:block;width:100%;border:0;border-bottom:1px solid var(--line);border-radius:0;background:var(--bg);color:white;padding:10px 0;font-size:15px;caret-color:var(--accent)}.form-field input,.form-field select{height:44px}.form-field input[type=date]{color-scheme:dark}.form-field textarea{resize:vertical}.form-field [aria-invalid=true]{border-bottom-color:var(--accent)}.field-error{color:var(--accent);font-size:14px;margin:8px 0 0}.form-error{border-left:1px solid var(--accent);padding-left:20px;margin:24px 0}.form-error h3{margin:0 0 12px}.form-error p:last-child{margin-bottom:0}#booking-error-message{margin-bottom:.5em}.booking-honeypot{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}.booking-actions{display:flex;flex-direction:column;align-items:center;text-align:center}.booking-form .cf-turnstile{margin-bottom:24px}.booking-form .button:disabled{opacity:.5;cursor:wait}.sms-disclaimer{white-space:pre-wrap;margin-top:36px}#booking-success{padding:24px 0}
@media(min-width:700px){.booking-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.form-field{grid-column:1/-1}.form-field-firstName,.form-field-lastName,.form-field-email,.form-field-phone,.form-field-eventDate,.form-field-eventTime{grid-column:auto}}

.cover{height:100svh;min-height:620px;overflow:hidden}.cover main{min-height:100%;display:grid;place-items:center;position:relative;padding:40px var(--gutter)}.cover-photo{position:absolute;inset:0;overflow:hidden}.cover-photo img{width:100%;height:100%;object-fit:cover}.cover-photo.is-loaded{animation:photo-settle 2.4s var(--ease-out) both}.cover-photo::after{content:"";position:absolute;inset:0;background:rgba(36,41,46,.5)}.cover-content{--cover-h1:clamp(26px,min(calc(4.18*max(1vw,1.4svh) - 1.5px),calc((100vw - 32px)/11.2)),92px);position:relative;z-index:1;isolation:isolate;text-align:center;max-width:100%;color:white}.cover-content::before{content:"";position:absolute;z-index:-1;inset:-14% -12%;background:radial-gradient(closest-side,rgba(2,19,31,.72),rgba(4,27,41,.48) 60%,transparent);pointer-events:none}.cover-logo{width:min(440px,75vw);margin:0 auto 41px;transform:translateX(-7.9%)}.cover h1{max-width:11.5em;margin-inline:auto;font:400 var(--cover-h1)/1 var(--sans);text-transform:uppercase;letter-spacing:var(--track-title);margin-bottom:36px;animation:cover-in 1.6s var(--ease-out) both;text-wrap:balance}.cover .label{margin-bottom:20px}.cover-intro{font:400 15px/1.6 var(--sans);max-width:min(100%,calc(var(--cover-h1)*8.15));margin:0 auto 28px;color:rgba(255,255,255,.82);text-shadow:0 1px 2px rgba(0,0,0,.85),0 0 18px rgba(0,0,0,.7)}.cover-content>.label,.cover-content>.cover-intro,.cover-content>.button{animation:soft-in 1.6s var(--ease-out) both}@keyframes photo-settle{from{transform:scale(1.06)}to{transform:scale(1)}}@keyframes cover-in{from{opacity:0;letter-spacing:.45em}to{opacity:1;letter-spacing:.2em}}@keyframes soft-in{from{opacity:0}to{opacity:1}}

@media(max-width:899px){.service-columns{grid-template-columns:1fr;grid-template-areas:"media" "copy";gap:32px}.panel-media{position:static}.home-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.call{margin-top:24px}.neighbors{flex-wrap:wrap}.neighbors a{min-width:28%}}
@media(max-width:699px){.service-grid,.home-grid{grid-template-columns:1fr}.filters{gap:26px}.panel-title{margin-top:10px}.neighbors{flex-direction:column;align-items:center}.neighbors a:first-child,.neighbors a:last-child{text-align:center}.cover{min-height:560px;overflow:auto}.cover h1{overflow-wrap:anywhere}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.tile.reveal-pending{opacity:1;transform:none}.tile:hover img{transform:none}}
.filters,.thumbnails{scrollbar-width:none}.filters::-webkit-scrollbar,.thumbnails::-webkit-scrollbar{display:none}

/* Cover headline sizing: the photo is cover-fitted (2500x1786), so it renders max(100vw,140svh) wide and the
   presenter's body starts 18.8% of that right of centre. AUDIOVISUAL is ~11.1em wide; shifting the block 4% left
   (onto the brighter part of the screen) and sizing from the photo width keeps the last letter clear of him. */
@media(min-aspect-ratio:1/1){.cover-content{transform:translateX(calc(-4*max(1vw,1.4svh)))}}

/* Header nav steps down in three stages (measured from Jost 12px labels + the 323px logo; menu labels are short,
   "AUDIO" not "AUDIO RENTALS"): one line beside the logo >=1190px; logo above a centred 3x2 grid 560-1189px; the
   menu dialog below 560px. One-line fit: (323px logo + 28px gap + 744px nav at 30px gaps) / .92 = 1190px.
   Grid fit: (155 + 167 + 81px columns + 2x40px gaps) / .92 = 527px, so 560px leaves room. */
.desktop-nav{align-items:center;gap:30px}.desktop-nav .nav-group>a{white-space:nowrap}.nav-group:nth-last-child(-n+3) .dropdown{left:auto;right:-20px}
@media(max-width:1189px){.header{flex-direction:column;justify-content:flex-start;gap:28px;padding-top:36px;padding-bottom:36px}.desktop-nav{display:grid;grid-template-columns:repeat(3,auto);justify-content:center;justify-items:center;gap:18px 40px}.desktop-nav .nav-group>a{width:auto;white-space:nowrap}.nav-group:nth-child(3n) .dropdown{left:auto;right:-20px}.nav-group:nth-child(3n+1) .dropdown,.nav-group:nth-child(3n+2) .dropdown{left:-20px;right:auto}}
@media(max-width:559px){.header{flex-direction:row;gap:28px;justify-content:flex-start;padding-top:30px;padding-bottom:30px;flex-wrap:wrap}.js .menu-toggle{display:block}.js .desktop-nav{display:none}.desktop-nav{position:relative;display:flex;width:100%;flex-wrap:wrap}.desktop-nav .nav-group{position:static}.desktop-nav .nav-group .dropdown{left:0;right:0;min-width:0}.logo img{height:39px}}
/* The live cover button is Futura PT 500 14px, unlike the Garamond content buttons. */
.cover .button{font:500 14px/1.4 var(--sans);letter-spacing:.2em}
/* The cover button sits where the screen edge splits the photo into light and dark; a smoked-glass fill
   evens out what shows through so the label reads against one surface. */
.cover .button{background:rgba(4,16,26,.58);-webkit-backdrop-filter:blur(10px) saturate(1.15);backdrop-filter:blur(10px) saturate(1.15);box-shadow:0 8px 28px rgba(0,0,0,.35)}.cover .button:hover{background:#fff;color:#000}
/* Single page photo (About): the neon sign on dark concrete, edges masked so the wall dissolves into the page. */
.page-photo{max-width:760px;margin:0 auto 56px}.page-photo img{width:100%;-webkit-mask-image:radial-gradient(ellipse 50% 50% at 50% 50%,#000 52%,transparent 100%);mask-image:radial-gradient(ellipse 50% 50% at 50% 50%,#000 52%,transparent 100%)}

/* Service panels: copy reads from the top left; the slideshow sits top right and stays in view
   beside long copy. Sticky top: bar 68.5px (44px padding + 16.5px line + 7px button padding + 1px border)
   + call strip 37.5px (20px padding + 16.5px line + 1px border) + 24px breathing room = 130px. Panels flagged longCopy float the media instead, so their label + list groups fill the space
   beside the image and then run three-up beneath it. */
.dock-call{margin:0;text-align:center;font:600 12px/1.5 var(--sans);letter-spacing:var(--track-nav);text-transform:uppercase}.dock-call a{text-decoration:none;color:var(--ink);transition:color 200ms}.dock-call a:hover{color:var(--ink-mute)}
/* Category pages: CONTACT sits midway between the last content (tiles or prev/next links) and the footer's phone line. */
.category>.contact-row{margin-bottom:12px}
.copy-group h3{margin-top:0}.copy-group .copy-list{margin-bottom:0}.copy-group{margin-bottom:28px}.copy-groups>h3{margin-top:12px}
@media(min-width:1200px){.panel-long .service-columns{display:flow-root}.panel-long .panel-media{float:right;width:calc((100% - 56px)*.56);margin:0 0 40px 56px;position:static}.panel-long .copy{max-width:none}.panel-long .copy>p,.panel-long .copy>h3{max-width:68ch}.copy-groups{margin-right:-40px}.copy-group{display:inline-block;vertical-align:top;width:calc(33.33% - 40px);margin:0 40px 32px 0}.panel-long .neighbors{clear:both}}
/* All category views and widths: once the filter bar sticks (header call line out of view), a matching
   strip docks beneath the bar. It is out of flow so showing it never shifts the page. The stage's 36px padding
   + panel title's 20px margin (10px on phones) clear the 37.5px strip by 18.5px (8.5px on phones). */
/* Nested inside the blurred bar, a backdrop-filter here would see only the bar, so the strip is near-opaque instead. */
.dock-call{position:absolute;top:100%;left:0;right:0;padding:10px var(--gutter);background:var(--grain) rgba(4,4,4,.97);border-bottom:1px solid var(--line);opacity:0;visibility:hidden;transform:translateY(-6px);transition:opacity 250ms var(--ease-out),transform 250ms var(--ease-out),visibility 0s 250ms}.filter-bar.docked .dock-call{opacity:1;visibility:visible;transform:none;transition:opacity 250ms var(--ease-out),transform 250ms var(--ease-out)}

/* True crossfade (rules beside .slide above): the incoming slide fades in on top over 1 s while the outgoing one stays
   fully opaque beneath it, then drops out unseen, so the black stage never shows through mid-fade.
   Ken Burns on autoplaying slideshows: the active image drifts to 108% over the 4.5 s hold + 1 s crossfade, toward a
   different point per slide, at a constant speed so it is visibly moving from the first frame of the fade-in. The
   outgoing slide is marked .leaving by JS and keeps zooming until it is covered, then resets unseen.
   The global reduced-motion rule (transition:none) turns this off. */
.slideshow[data-autoplay=true] .slide img{transform:scale(1);transition:none}
.slideshow[data-autoplay=true] .slide.active img,.slideshow[data-autoplay=true] .slide.leaving img{transform:scale(1.08);transition:transform 6.5s linear}
.slideshow[data-autoplay=true] .slide:nth-child(3n+1) img{transform-origin:35% 40%}
.slideshow[data-autoplay=true] .slide:nth-child(3n+2) img{transform-origin:65% 55%}
.slideshow[data-autoplay=true] .slide:nth-child(3n) img{transform-origin:50% 30%}
/* Specificity must beat the zoom rule above (same selector shape), or the first image sits frozen at 108%. */
.slideshow[data-autoplay=true].kb-wait .slide.active img{transform:scale(1)}
@media(prefers-reduced-motion:reduce){.slideshow[data-autoplay=true] .slide.active img{transform:none}}

/* Warm stage spotlight (decided 2026-10-13): a faint amber pool and beam falling from above the page heading, like
   one stage light over the title. Anchored to the top of the page (not main, which starts below the header) so the
   light enters from above the viewport with no visible edge. Behind content via body's stacking context. Not on the
   cover, which has its own photo. */
body:not(.cover){position:relative;isolation:isolate}
body:not(.cover)::before{content:"";position:absolute;z-index:-1;pointer-events:none;top:0;left:0;right:0;height:760px;background:radial-gradient(ellipse min(590px,59vw) 430px at 50% 163px,rgba(255,170,110,.16),rgba(150,80,40,.07) 45%,transparent 72%),conic-gradient(from 180deg at 50% -39px,transparent 168deg,rgba(255,190,140,.05) 176deg,rgba(255,190,140,.08) 180deg,rgba(255,190,140,.05) 184deg,transparent 192deg)}
/* Text pages: section headings get clear separation; a section's subheadings (About > Hospitality) step down. */
.text-page h2.label{margin:3.4em 0 1.2em}.text-page h2.label:first-child{margin-top:0}.text-page h3.label{font-size:12px;letter-spacing:.32em;color:rgba(255,255,255,.8);margin:2.2em 0 .8em}
/* Cover logo optics: the lettering sits 7.9% of the logo's width right of the image centre (the orange mark fills
   the left), so the image shifts left to centre the wordmark on the headline and the mark hangs. 41px below it
   leaves the same visible gap (tagline to LUXURY caps) as AUDIOVISUAL's baseline to IMPECCABLE HOSPITALITY. */

/* Title legibility over photos without a visible shape: a wide scrim on an eased falloff (no edge to find) plus a
   glow that follows the letters. Stays on hover. */
.tile-title>span{position:relative;isolation:isolate;text-shadow:0 1px 2px rgba(0,0,0,.55),0 0 12px rgba(0,0,0,.5),0 0 28px rgba(0,0,0,.4)}
.tile-title>span::before{content:"";position:absolute;z-index:-1;inset:-2.5em -5em;background:radial-gradient(ellipse closest-side,rgba(0,0,0,.4),rgba(0,0,0,.36) 22%,rgba(0,0,0,.28) 40%,rgba(0,0,0,.18) 57%,rgba(0,0,0,.09) 72%,rgba(0,0,0,.03) 86%,transparent);pointer-events:none}
/* Sibling of the swipe stage; the control stays above the photo and clear of thumbnails. */
.slide-viewport{position:relative}
.slide-pause{display:none;position:absolute;right:12px;bottom:12px;z-index:2;width:44px;height:44px;padding:0;align-items:center;justify-content:center;border:0;border-radius:0;color:#fff;background:none;opacity:0;transition:opacity 200ms}
.js .slide-pause{display:flex}
/* Hidden at rest; always shown while paused (every device), and on mouse hover or keyboard focus. */
.slide-pause:focus-visible,.is-paused .slide-pause{opacity:.9}
@media(hover:hover) and (pointer:fine){.slideshow:hover .slide-pause{opacity:.9}.slideshow .slide-pause:hover{opacity:1}}
.slide-pause svg{width:16px;height:16px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.7))}
.slide-pause .play-icon,.is-paused .slide-pause .pause-icon{display:none}
.is-paused .slide-pause .play-icon{display:block}
.slideshow[data-autoplay=true].is-held .slide img{transform:scale(1);transition:none}
@media(prefers-reduced-motion:no-preference){.js .slideshow[data-autoplay=true] .slide-stage{cursor:pointer}}
@media(prefers-reduced-motion:reduce){.js .slide-pause{display:none}}
/* Booking page centred like the live site: headings, notes and the disclaimer centre over a narrower form column;
   field labels stay left-aligned inside it (easier to scan). Two-up rows still fit at 560px. */
#booking-intake form>h2,#booking-intake form>p,#booking-success,.sms-disclaimer{text-align:center}
#booking-intake,.sms-disclaimer{max-width:560px;margin-inline:auto}
