/* Home page (index.html) styles, in the order sections appear. Needs base.css. */

/* one environment: a slow drifting light behind everything */
.env{position:fixed;inset:-20%;z-index:-1;pointer-events:none;background:
  radial-gradient(40% 35% at 20% 25%,var(--glow),transparent 70%);
  animation:envDrift 70s ease-in-out infinite alternate;animation-delay:-20s}
@keyframes envDrift{from{transform:translate3d(-3%,-2%,0)}to{transform:translate3d(3%,3%,0)}}

/* nav */
/* full at the top (brand row + links row), condensed (.mini) after scrolling: links row folds away, menu button slides in.
   Fixed, so its height change never moves the page; mirrors the shop header (shop.css .top) */
.nav{position:fixed;inset:0 0 auto 0;z-index:50;isolation:isolate;background:transparent;border-bottom:1px solid color-mix(in srgb,var(--line) 28%,transparent);transition:box-shadow .4s var(--ease-soft)}
.nav.mini{box-shadow:0 10px 30px -24px rgba(18,24,22,.5)}
.nav.instant,.nav.instant *{transition:none!important}
.nbar{display:flex;align-items:center;gap:16px;padding:12px max(16px,3vw);transition:padding .4s var(--ease)}
.nav.mini .nbar{padding-top:8px;padding-bottom:8px}
.nlwrap{display:grid;grid-template-rows:1fr;transition:grid-template-rows .45s var(--ease)}
.nav.mini .nlwrap{grid-template-rows:0fr}
/* the five links do not fit at phone width; they live in the menu panel there (nav-menu.js keeps the bar condensed) */
@media(max-width:550px){.nlwrap{display:none}}
.nlinks{min-height:0;display:flex;gap:4px;padding:0 max(16px,3vw);overflow-x:auto;overflow-y:hidden;scrollbar-width:none}
.nlinks::-webkit-scrollbar{display:none}
.nl{flex:none;padding:10px 14px 12px;color:var(--text-secondary);font-size:15px;position:relative;text-decoration:none;transition:color .3s var(--ease-soft)}
.nlinks .nl:first-child{margin-left:-14px}
.nl::after{content:"";position:absolute;left:14px;right:14px;bottom:0;height:2.5px;border-radius:2px;background:var(--text-primary);transform:scaleX(0);transition:transform .4s var(--ease)}
.nl:hover{color:var(--text-primary)}
.nl:hover::after{transform:scaleX(1)}
/* menu button: hidden in the full bar, slides in when condensed */
.burger{display:inline-flex;align-items:center;justify-content:center;flex:none;width:0;height:44px;padding:0;opacity:0;margin-right:-16px;overflow:hidden;pointer-events:none;border-radius:50%;border:0;background:transparent;color:var(--text-primary);cursor:pointer;transition:width .4s var(--ease),opacity .3s var(--ease-soft),margin .4s var(--ease),background .3s var(--ease-soft)}
.nav.mini .burger{width:44px;opacity:1;margin-left:-8px;margin-right:-4px;pointer-events:auto}
.burger:hover{background:var(--panel)}
.burger svg{width:22px;height:22px;flex:none}
.burger path{transition:transform .35s var(--ease),opacity .2s var(--ease-soft);transform-origin:12px 12px}
.burger[aria-expanded="true"] .m1{transform:translateY(5px) rotate(45deg)}
.burger[aria-expanded="true"] .m2{opacity:0}
.burger[aria-expanded="true"] .m3{transform:translateY(-5px) rotate(-45deg)}
.nav-panel{position:absolute;left:0;right:0;top:100%;z-index:-1;border-bottom:1px solid var(--hairline);box-shadow:0 24px 40px -28px rgba(18,24,22,.55);padding:18px max(16px,3vw) 1px;opacity:0;transform:translateY(-8px);transition:opacity .3s var(--ease-soft),transform .35s var(--ease)}
.nav-panel.open{opacity:1;transform:none}
.nav-panel nav{display:flex;flex-wrap:wrap;align-items:center;gap:6px 18px}
.nav-panel .mono{flex-basis:100%;margin-bottom:4px}
.np-links{display:flex;flex-wrap:wrap;gap:2px 4px;margin-left:-14px}
@media(max-width:640px){
  .np-links{flex-direction:column;margin-left:0;flex-basis:100%}
  .np-links .nl{padding:12px 0;font-size:17px;border-bottom:1px solid var(--hairline)}
  .np-links .nl:last-child{border-bottom:0}
  .np-links .nl::after{left:0;right:auto;width:28px;bottom:-1px}
}
@media(pointer:coarse){.nl{min-height:44px;display:inline-flex;align-items:center}}
@media(prefers-reduced-motion:reduce){.nav-panel{opacity:1;transform:none}}

/* hero (scrub) */
.hero{position:relative;height:430vh}
.stage{position:sticky;top:0;height:100vh;height:100svh;overflow:hidden;background:var(--panel)}
.poster,.vid{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background-size:cover;background-position:center}
.vid{opacity:0;transition:opacity .7s var(--ease-soft);will-change:transform;transform:translateZ(0)}
.video-ready .vid{opacity:1}
.video-failed .vid{display:none}
.wash{position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(var(--canvas-rgb),.55) 0%,rgba(var(--canvas-rgb),0) 38%)}
.ring{position:absolute;right:max(16px,3vw);bottom:28px;width:44px;height:44px;color:var(--accent);transform:rotate(-90deg);transition:opacity .6s var(--ease-soft)}
.video-ready .ring{opacity:0}
.chev{position:absolute;right:max(16px,3vw);bottom:30px;font:500 12px var(--mono);letter-spacing:.14em;color:var(--text-primary);display:none}
.video-failed .chev{display:block}
.video-failed .ring{display:none}
.band{position:absolute;left:max(16px,6vw);top:max(17vh,130px);width:min(640px,88vw);opacity:0;pointer-events:none;color:#121816;background:transparent;isolation:isolate}
.band::before{content:none}   /* no glow behind the hero copy */
.band,.band *{color:#121816}   /* hero copy stays #121816 in light and dark */
.band.live{pointer-events:auto}
.band h1,.band h2{font-size:clamp(44px,6vw,96px);line-height:.98;margin:14px 0 18px}   /* same type as h2.big */
.band p.sub{font-size:19px;max-width:34ch}   /* same size as .lede */
.band .cta-row{margin-top:26px;opacity:var(--kb,0);transform:translateY(calc((1 - var(--kb,0))*12px))}
.band .mono{opacity:var(--kc0,var(--k,0))}
.band .sub{opacity:clamp(0,(var(--k,0) - .45)*3,1)}
.w{display:inline-block;--kc:clamp(0,(var(--k,0) - var(--th,0))*2.8,1);opacity:var(--kc);transform:translateY(calc((1 - var(--kc))*-22px));margin-right:.22em}
.cue{position:absolute;left:50%;bottom:22px;translate:-50% 0;font:500 12px var(--mono);letter-spacing:.14em;color:var(--text-primary);display:flex;flex-direction:column;align-items:center;gap:8px;transition:opacity .5s var(--ease-soft)}
.cue i{width:1.5px;height:30px;background:var(--text-primary);transform-origin:top;animation:cue 2.6s var(--ease-soft) infinite;animation-delay:-1.1s}
@keyframes cue{0%{transform:scaleY(0)}50%{transform:scaleY(1)}100%{transform:scaleY(0);transform-origin:bottom}}
@media(max-height:560px){.cue{display:none}}
/* pause button for the scrolling video, bottom left of the stage */
.vpause{position:absolute;left:max(16px,3vw);bottom:24px;width:44px;height:44px;border-radius:50%;border:1px solid var(--accent);background:var(--accent);color:var(--on-accent);display:grid;place-items:center;cursor:pointer;transition:background .3s var(--ease-soft)}
.vpause:hover{background:var(--accent-hover)}   /* stays dark so the white icon shows */
.vpause svg{width:16px;height:16px}
.vpause .ipl,.vpause[aria-pressed="true"] .ip{display:none}
.vpause[aria-pressed="true"] .ipl{display:inline}
/* nothing to pause until the video can play */
.vpause{display:none}
.video-ready .vpause{display:grid}
.video-failed .vpause{display:none}

/* static hero: reduced motion only (phones scrub the portrait cut) */
.static-hero{display:none;position:relative;min-height:100svh;align-items:start;padding:110px 20px 48px;overflow:hidden}
.static-hero img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 40%;z-index:-1}
.static-hero::after{content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;background:linear-gradient(180deg,rgba(var(--canvas-rgb),.9) 0%,rgba(var(--canvas-rgb),.55) 48%,rgba(var(--canvas-rgb),.1) 100%)}
.static-hero h1{font-size:clamp(48px,13vw,96px);line-height:.96;margin:12px 0 16px}
.static-hero p{max-width:32ch;margin-bottom:24px}
.static-hero .inner{align-self:start;margin-top:8vh}
@media (prefers-reduced-motion:reduce){
  .hero{display:none}
  .static-hero{display:flex}
}

/* sections: light bands on the canvas, dark bands on the ink, images square and edge to edge */
section.s{padding:clamp(80px,10vw,140px) max(16px,6vw)}
.wrap{max-width:1280px;margin:0 auto}
/* entrances: a short rise from a faded, never invisible, start. Only when scripts run, so without JavaScript nothing waits */
.reveal .part{transition:opacity .9s var(--ease),transform .9s var(--ease);transition-delay:calc(var(--i,0)*110ms)}
@media(scripting:enabled){
  .reveal .part{opacity:.4;transform:translateY(18px)}
  .slab{transform:scaleX(.6);opacity:.4}
  .row .txt::before{transform:scaleX(0)}
}
.reveal.in .part{opacity:1;transform:none}
.reveal.in .part.done{transition-delay:0s}
h2.big{font-size:clamp(44px,6vw,96px);line-height:.98;max-width:16ch;margin-top:14px}
.lede{color:var(--text-secondary);max-width:46ch;margin-top:20px;font-size:19px}
.band-foot{margin-top:40px}

/* shop by room: a row of serif tabs, then a 3:2 room image and the room's text and pieces */
.rtabs{display:flex;gap:clamp(16px,3vw,44px);margin-top:40px;border-bottom:1px solid var(--hairline);overflow-x:auto;scrollbar-width:none}
.rtabs::-webkit-scrollbar{display:none}
.rtabs [role="tab"]{position:relative;flex:none;background:none;border:0;padding:14px 0 12px;cursor:pointer;font:400 clamp(20px,2.4vw,32px)/1 var(--serif);color:var(--text-secondary);transition:color .3s var(--ease-soft)}
.rtabs [role="tab"]::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .4s var(--ease)}
.rtabs [role="tab"]:hover,.rtabs [aria-selected="true"]{color:var(--text-primary)}
.rtabs [aria-selected="true"]::after{transform:none}
.rpanel{display:grid;grid-template-columns:minmax(0,55fr) minmax(0,45fr);gap:clamp(24px,4vw,64px);margin-top:36px;align-items:start}
.rpanel:focus-visible{outline-offset:8px}
/* room and booking photos: an <img> cropped by zooming (--z) toward its focus point, so it loads lazily and has a size */
.rp-img,.book-ph{position:relative;overflow:hidden;max-width:100%;background:var(--tile)}
.rp-img{aspect-ratio:3/2}
.rp-img img,.book-ph img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scale(var(--z,1));transition:transform .8s var(--ease)}
.rp-img:hover img,.book-ph:hover img{transform:scale(calc(var(--z,1)*1.03))}
.rp-txt{display:grid;gap:14px;justify-items:start}
.rp-from{color:var(--accent)}
.rp-from:empty{display:none}
.rp-txt h3{font-size:clamp(32px,3.2vw,48px)}
.rp-txt p{color:var(--text-secondary);max-width:40ch}
/* room pieces: one row of 3 inside a window; the row slides and loops (CF.loop in carousel.js) */
.rp-loop{justify-self:stretch;overflow:hidden;margin-top:18px}
.rp-thumbs{display:flex;gap:12px;touch-action:pan-y;transition:transform .45s var(--ease)}
.rp-thumbs>.ptile{flex:0 0 calc((100% - 24px)/3);min-width:0;user-select:none;-webkit-user-select:none}
.rp-thumbs:empty{display:none}
.rp-arrows{justify-self:end;display:flex;gap:8px;min-height:40px}   /* keeps its height when the arrows hide, so the panel never jumps */
.rp-arrows .arrow{width:40px;height:40px}
.rp-txt p{min-height:3.2em}   /* room copy is one or two lines; two lines of room keeps every room the same height */
@media(max-width:820px){.rpanel{grid-template-columns:1fr}}
@media(max-width:480px){.rtabs [role="tab"]{font-size:19px}.rtabs{gap:14px}}

/* inside the sofa: dark band, the drawing on the studio grey, layer tabs with their numbers */
.sofa-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(28px,5vw,80px);align-items:start;margin-top:48px}
.lab{position:relative;background:var(--tile);padding:16px;aspect-ratio:1/.74;max-width:100%;overflow:hidden}
.lab svg{width:100%;height:100%;overflow:visible}
.layer{will-change:transform}
.layer text{font-family:var(--mono);font-size:11px;letter-spacing:.12em;fill:var(--text-secondary)}
.holdbar{display:flex;align-items:center;gap:18px;margin-top:22px}
.hold{position:relative;overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none}
.hold .fill{position:absolute;inset:0;background:var(--accent-hover);transform-origin:left;transform:scaleX(var(--hp,0));z-index:0}
.hold span{position:relative;z-index:1}
.pct{font:500 13px var(--mono);color:var(--on-ink-2);min-width:4ch}
#holdhelp{margin-top:12px;font-size:11px}
@media(max-width:860px){.sofa-grid{grid-template-columns:1fr}}

/* diptych: two square halves edge to edge, text at the bottom left of each */
.diptych{display:grid;grid-template-columns:1fr 1fr}
.diptych a{position:relative;aspect-ratio:1;max-width:100%;display:block;overflow:hidden;background:var(--tile);color:var(--text-primary);text-decoration:none}
.diptych a+a{background:var(--panel-deep)}
.dp-art{position:absolute;inset:6% 0 26%;display:grid;place-items:center}
.dp-art svg{width:74%;height:auto;transition:transform .8s var(--ease)}
.diptych a:hover .dp-art svg{transform:scale(1.03)}
.dp-txt{position:absolute;left:clamp(20px,4vw,56px);right:clamp(20px,4vw,56px);bottom:clamp(20px,4vw,56px);display:grid;gap:12px;justify-items:start}
.dp-h{font:400 clamp(32px,3.8vw,60px)/1 var(--serif);letter-spacing:-.01em}
@media(max-width:720px){.diptych{grid-template-columns:1fr}}

/* inside the bed */
#bed{background:var(--surface)}
.bed-head{display:flex;justify-content:space-between;align-items:end;gap:30px;flex-wrap:wrap}
.stack{margin-top:56px;display:grid;border-top:1px solid var(--hairline)}
.row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center;gap:0 clamp(20px,5vw,80px);padding:14px 0;border-bottom:1px solid var(--hairline)}
.slab{height:var(--h,56px);position:relative;transform-origin:left;transition:transform 1.1s var(--ease),opacity .8s var(--ease);transition-delay:calc(var(--i)*160ms)}
.in .slab{transform:none;opacity:1}
.row .txt{position:relative;padding-left:56px}
.row .txt::before{content:"";position:absolute;left:0;top:16px;width:40px;height:1px;background:var(--accent);transform-origin:left;transition:transform .9s var(--ease);transition-delay:calc(var(--i)*160ms + 500ms)}
.in .txt::before{transform:scaleX(1)}
.row h3{font-size:clamp(24px,2.2vw,30px);margin-bottom:2px}
.row p{font-size:15.5px;color:var(--text-secondary);max-width:40ch}
.s1{background:linear-gradient(180deg,#F8F4EA,#E9E2D2)}.s2{background:linear-gradient(180deg,#B9CFD3,#9FB9C2)}.s3{background:repeating-linear-gradient(90deg,#51666E 0 10px,#7C9097 10px 14px)}.s4{background:linear-gradient(180deg,#E9E2D2,#D6CDB7)}.s5{background:repeating-linear-gradient(90deg,var(--oak) 0 46px,var(--oak-deep) 46px 50px)}
@media(max-width:720px){.row{grid-template-columns:1fr;gap:12px}.row .txt{padding-left:0;padding-top:6px}.row .txt::before{display:none}.slab{--h:40px}}

/* most reviewed: square tiles on a scroll-snap track, arrows top right */
.lift-head{display:flex;justify-content:space-between;align-items:end;gap:24px;flex-wrap:wrap}
.arrows{display:flex;gap:8px}
.arrow{width:48px;height:48px;border-radius:50%;border:1px solid var(--line);background:transparent;color:var(--text-primary);display:grid;place-items:center;cursor:pointer;transition:background .3s var(--ease-soft),opacity .3s var(--ease-soft)}
.arrow svg{width:20px;height:20px}
.arrow:hover:not([aria-disabled="true"]){background:var(--panel)}
.arrow[aria-disabled="true"]{opacity:.3;cursor:default}
.track{list-style:none;padding:0;margin:36px 0 0;display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 48px)/4);gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none}
.track::-webkit-scrollbar{display:none}
.track li{scroll-snap-align:start;min-width:0}
@media(max-width:900px){.track{grid-auto-columns:calc((100% - 32px)/3)}}
@media(max-width:560px){.track{grid-auto-columns:calc((100% - 12px)/2.2);gap:12px}}

/* visit: the suite at 2:1, headline top left, the service row along the bottom.
   2:1 is the minimum: the text sits in the flow, so the band grows taller when it needs the room (tablets, large text) */
.visit-band{position:relative;isolation:isolate;display:grid;grid-template-rows:1fr auto;min-height:50vw;overflow:hidden;color:var(--on-ink)}
.visit-band img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
.visit-band::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(18,24,22,.55) 0%,rgba(18,24,22,.12) 45%,rgba(18,24,22,.72) 100%)}
.vb-in{align-self:start;padding:clamp(32px,7vw,100px) max(16px,6vw) 40px;display:grid;gap:16px;justify-items:start}
.vb-in .mono{color:var(--on-ink)}
.vb-in h2{font-size:clamp(48px,7vw,112px);line-height:.95}
.services{display:grid;grid-template-columns:repeat(4,1fr);list-style:none;padding:0;margin:0;border-top:1px solid rgba(250,250,248,.3)}
.services li{padding:20px max(16px,2vw);font:500 12px/1.3 var(--body);letter-spacing:.12em;text-transform:uppercase}
.services li+li{border-left:1px solid rgba(250,250,248,.3)}
@media(max-width:720px){.visit-band{min-height:125vw}.services{grid-template-columns:1fr 1fr}.services li:nth-child(3){border-left:0}.services li:nth-child(n+3){border-top:1px solid rgba(250,250,248,.3)}}

/* booking: text and form beside a square photo */
.book-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(28px,6vw,90px);align-items:start}
.book-ph{aspect-ratio:1}
.form{margin-top:36px;display:grid;gap:16px;max-width:520px}
.form label{display:grid;gap:6px;font:400 12px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--text-secondary)}
.form input,.form select{font:400 17px var(--body);padding:14px 16px;border-radius:var(--r-2);border:1px solid var(--line);background:var(--surface);color:var(--text-primary);min-height:50px}
.form input::placeholder{color:var(--ink-3)}
.form .btn{justify-self:start}
.form-note{font-size:15px;color:var(--text-secondary);padding:12px 14px;border-radius:var(--r-2);background:var(--panel)}
.thanks{display:none;margin-top:36px;padding:26px;border-radius:var(--r-2);background:var(--panel);max-width:520px}
.thanks.show{display:block}
.thanks h3{font-size:32px;margin-bottom:8px}
@media(max-width:820px){.book-grid{grid-template-columns:1fr}}

/* faq */
.faq{margin-top:48px;display:grid;max-width:880px}
details{border-top:1px solid var(--hairline);padding:22px 0}
details:last-child{border-bottom:1px solid var(--hairline)}
summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;gap:20px;font:400 clamp(22px,2.2vw,30px)/1.15 var(--serif)}
summary::-webkit-details-marker{display:none}
summary::after{content:"+";font:400 24px/1 var(--mono);color:var(--accent);transition:transform .4s var(--ease)}
details[open] summary::after{transform:rotate(45deg)}
details p{margin-top:12px;color:var(--text-secondary);max-width:62ch}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important;transition-delay:0s!important;scroll-behavior:auto!important}
  .reveal .part{opacity:1;transform:none}
  .slab{opacity:1;transform:none}
  .row .txt::before{transform:none}
}
.navr{display:flex;align-items:center;gap:10px;margin-left:auto}
.navr .btn{white-space:nowrap}
/* phone: sound, Book a tour and the night-mode toggle must all fit beside the logo and menu button */
@media(max-width:480px){.nbar{gap:10px;padding-left:12px;padding-right:12px}.navr{gap:4px}.nav .brand{font-size:19px;gap:6px}.nav .brand svg{width:22px;height:22px}.navr .btn{padding:12px 8px;letter-spacing:.06em}.snd{padding:9px 8px}}
.snd{display:inline-flex;align-items:center;gap:8px;background:transparent;border:1.5px solid var(--line);color:var(--text-secondary);font:500 12px var(--mono);letter-spacing:.1em;text-transform:uppercase;padding:9px 14px;border-radius:var(--r-2);cursor:pointer;transition:color .3s var(--ease-soft),border-color .3s var(--ease-soft)}
.snd:hover,.snd[aria-pressed="true"]{color:var(--accent);border-color:var(--accent)}
.eq{display:flex;align-items:end;gap:2px;height:12px}
.eq i{width:2px;height:4px;background:currentColor;border-radius:1px;transform-origin:bottom}
.snd[aria-pressed="true"] .eq i{animation:eq 1.2s ease-in-out infinite}
.snd[aria-pressed="true"] .eq i:nth-child(2){animation-delay:-.4s}
.snd[aria-pressed="true"] .eq i:nth-child(3){animation-delay:-.8s}
@keyframes eq{0%,100%{transform:scaleY(1)}50%{transform:scaleY(2.8)}}
@media(max-width:480px){.snd .sl{display:none}}
@media(pointer:coarse){.snd{min-height:44px}}
