:root{--ob:#101010;--iv:#F5F0E8;--ch:#252525;--br:#A88861;--bd:#7a5f3e;--tp:#B5A99A;--serif:"Cormorant Garamond","Iowan Old Style",Georgia,serif;--sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--e:cubic-bezier(.22,.61,.36,1);--pad:clamp(20px,5vw,72px)}
*{box-sizing:border-box;margin:0}
html{scroll-behavior:smooth;scroll-padding-top:72px}
body{background:var(--iv);color:var(--ob);font:16px/1.6 var(--sans);-webkit-font-smoothing:antialiased;padding-bottom:76px}
a{color:inherit;text-decoration:none}img{display:block;max-width:100%}
a:focus-visible,button:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--br);outline-offset:3px}
h1,h2,h3{font-family:var(--serif);font-weight:500;line-height:1.02;letter-spacing:-.01em}
h2{font-size:clamp(2.2rem,6vw,4.6rem)}
section,footer{padding:clamp(72px,12vw,150px) var(--pad)}
.dark{background:var(--ob);color:var(--iv)}
.lb,.eb{font:600 11px/1.4 var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--bd);margin-bottom:14px}
.dark .lb,.dark .eb{color:var(--br)}
.sub{max-width:38ch;margin-top:20px;opacity:.8}
.fine{font-size:13px;opacity:.65;margin-top:28px}
.cta{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}
.btn{display:inline-flex;align-items:center;justify-content:center;min-height:48px;padding:0 28px;font:600 12px var(--sans);letter-spacing:.16em;text-transform:uppercase;border:1px solid;cursor:pointer;transition:background .3s,color .3s}
.btn-p{background:var(--br);border-color:var(--br);color:var(--ob)}
.btn-p:hover{background:var(--iv);border-color:var(--iv)}
.btn-g:hover{background:var(--iv);color:var(--ob)}
.btn-o:hover{background:var(--ob);color:var(--iv)}
[hidden]{display:none!important}

/* image slots */
.slot{position:relative;overflow:hidden;background:linear-gradient(160deg,#3a342d,#1c1a17)}
.slot::before{content:attr(data-label);position:absolute;left:14px;bottom:12px;font:600 10px var(--sans);letter-spacing:.16em;text-transform:uppercase;color:var(--tp)}
.slot img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}

/* header */
.hd{position:fixed;inset:0 0 auto;z-index:50;display:flex;align-items:center;gap:16px;padding:10px var(--pad);min-height:64px;background:rgba(16,16,16,.92);backdrop-filter:blur(10px);color:var(--iv)}
.logo{margin-right:auto;font:600 15px var(--sans);letter-spacing:.24em}.logo span{color:var(--br);font-weight:400}
#nav{display:flex;gap:28px;font:600 11px var(--sans);letter-spacing:.16em;text-transform:uppercase}
#nav a:hover{color:var(--br)}
.sm{min-height:44px;padding:0 22px}
.mb{display:none;background:none;border:1px solid var(--tp);color:var(--iv);min-height:44px;padding:0 16px;font:600 11px var(--sans);letter-spacing:.16em;text-transform:uppercase}
.bar{display:none}
@media(max-width:799px){
 .hd-book{display:none}.mb{display:block}
 #nav{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;background:var(--ob)}
 #nav.open{display:flex}#nav a{padding:18px var(--pad);border-top:1px solid #2c2c2c}
 .bar{display:block;position:fixed;inset:auto 0 0;z-index:40;padding:10px var(--pad) calc(10px + env(safe-area-inset-bottom));background:rgba(16,16,16,.95)}
 .bar .btn{width:100%}
}
@media(min-width:800px){body{padding-bottom:0}}

/* hero */
.hero{min-height:100svh;display:grid;gap:36px;align-items:center;padding-top:104px}
.hero h1{font-size:clamp(3.6rem,14vw,9rem);margin:18px 0 22px}
.lead{max-width:28ch;font-size:1.15rem;color:var(--tp)}
.meta{font-size:12px;letter-spacing:.14em;text-transform:uppercase;opacity:.6}
.hero-i{width:100%;aspect-ratio:4/5;max-height:70svh}
@media(min-width:900px){.hero{grid-template-columns:1.1fr .9fr;gap:6vw}.hero-i{height:78svh;max-height:none;aspect-ratio:auto}}

/* precision line */
.pl{position:relative;display:grid;gap:28px;padding-left:calc(var(--pad) + 36px)}
.plsvg{position:absolute;left:8px;top:0;width:28px;height:100%;pointer-events:none}
#plp,.plsvg path{fill:none;stroke:var(--br);stroke-width:1.5}
html.js #plp{stroke-dasharray:1;stroke-dashoffset:1}
.pl-i{aspect-ratio:4/5}
.pl-b{max-width:40ch}
@media(min-width:900px){
 .pl{grid-template-columns:1fr 1fr;column-gap:14%;padding-left:var(--pad);align-items:center}
 .plsvg{left:0;width:100%}
 .pl-a{grid-area:1/1}.pl-b{grid-area:2/1}.pl-i{grid-area:1/2/3/3}
}

/* services */
.svg-wrap{display:grid;gap:28px;margin-top:48px}
.sv{list-style:none;padding:0;order:2}
.sv li{display:grid;grid-template-columns:2.6rem 1fr auto;gap:14px;padding:22px 0;border-top:1px solid #cfc7ba;cursor:pointer;transition:padding .3s var(--e)}
.sv li:last-child{border-bottom:1px solid #cfc7ba}
.sv .n{font:500 1.6rem var(--serif);color:var(--tp)}
.sv li.on .n{color:var(--bd)}
.sv h3{font-size:1.6rem}.sv p{font-size:14px;opacity:.75;margin-top:4px}
.sv small{display:block;margin-top:6px;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--bd)}
.sv b{font:600 14px var(--sans);white-space:nowrap;text-align:right}
.pv{order:1;aspect-ratio:16/10}
.pv img{opacity:0;transition:opacity .5s var(--e)}.pv img.on{opacity:1}
@media(min-width:900px){.svg-wrap{grid-template-columns:1.2fr .8fr;gap:6vw}.sv{order:1}.pv{order:2;position:sticky;top:96px;aspect-ratio:4/5;align-self:start}.sv li.on{padding-left:14px}}

/* gallery */
.gal{display:flex;gap:12px;overflow-x:auto;scroll-snap-type:x mandatory;margin:48px calc(var(--pad)*-1) 0;padding:0 var(--pad)}
.gal figure{flex:0 0 76%;aspect-ratio:4/5;scroll-snap-align:center}
@media(min-width:900px){
 .gal{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:16px;overflow:visible;margin:56px 0 0;padding:0}
 .gal figure{aspect-ratio:4/5}.gal figure:nth-child(1){grid-row:1/3;aspect-ratio:auto;min-height:100%}
 .gal figure:nth-child(4){grid-column:2/4;aspect-ratio:2/1}
}
/* mirror reveal */
html.js .mr img{clip-path:inset(0 100% 0 0);transition:clip-path 1.2s var(--e)}
html.js .mr.in img{clip-path:inset(0)}
.mr::after{content:"";position:absolute;top:0;bottom:0;left:0;width:12%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.4),transparent);transform:translateX(-120%) skewX(-12deg);opacity:0;pointer-events:none}
.mr.in::after{animation:sweep 1.3s var(--e) .1s both}
@keyframes sweep{0%{transform:translateX(-120%) skewX(-12deg);opacity:1}100%{transform:translateX(900%) skewX(-12deg);opacity:0}}

/* team */
.tg{display:grid;gap:40px;margin-top:48px}
.tg figure{aspect-ratio:4/5;margin-bottom:18px}
.tg h3{font-size:2rem;display:flex;align-items:center;gap:14px}
.dl{flex:1;max-width:90px;height:1px;background:var(--br);transform-origin:left;transition:transform 1s var(--e) .3s}
html.js .rv:not(.in) .dl{transform:scaleX(0)}
.tg .lb{margin:8px 0}
@media(min-width:800px){.tg{grid-template-columns:1fr 1fr;gap:6vw;max-width:980px}.tg article:nth-child(2){margin-top:72px}}

/* experience */
.pr{list-style:none;padding:0;display:grid;gap:36px;margin-top:56px}
.pr span{font:500 3rem var(--serif);color:var(--br)}
.pr h3{font-size:1.7rem;margin:6px 0 8px}.pr p{opacity:.75;max-width:34ch}
@media(min-width:800px){.pr{grid-template-columns:repeat(3,1fr);gap:5vw}}

/* reviews */
.rl{display:flex;gap:16px;overflow-x:auto;scroll-snap-type:x mandatory;margin:44px calc(var(--pad)*-1) 0;padding:0 var(--pad)}
.rl blockquote{flex:0 0 min(84%,380px);scroll-snap-align:start;padding:28px;border:1px dashed var(--tp)}
.rl em{font:600 10px var(--sans);letter-spacing:.18em;text-transform:uppercase;color:var(--bd)}
.rl p{font:1.4rem/1.3 var(--serif);margin:14px 0 18px}.rl cite{font-size:12px;opacity:.65}

/* booking */
.bk{position:relative;overflow:hidden;text-align:center}
.bk .bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.22}
.bk>div{position:relative}.bk .sub{margin-inline:auto}.bk .cta{justify-content:center}
.bk h2{font-size:clamp(2.6rem,9vw,6.5rem)}
.note{margin-top:22px;font-size:12px;color:var(--tp)}

/* footer */
.ft{border-top:1px solid #2c2c2c}
.fg{display:grid;gap:32px;margin-top:48px}
.fg h3{font:600 11px var(--sans);letter-spacing:.2em;text-transform:uppercase;color:var(--br);margin-bottom:10px}
.fg a{text-decoration:underline;text-underline-offset:3px;display:inline-block;padding:4px 0;margin-right:12px}
.fn{display:flex;flex-wrap:wrap;gap:8px 24px;margin-top:48px;font:600 11px var(--sans);letter-spacing:.16em;text-transform:uppercase}
.legal{margin-top:36px;font-size:12px;opacity:.55}
@media(min-width:800px){.fg{grid-template-columns:repeat(3,1fr)}}

/* motion: reveals + staggered headline lines */
html.js .rv{opacity:0;transform:translateY(18px);transition:opacity .9s var(--e),transform .9s var(--e)}
html.js .rv.in{opacity:1;transform:none}
.l{display:block;overflow:hidden;padding-bottom:.08em}.l>span{display:block}
html.js .l>span{transform:translateY(108%);transition:transform 1s var(--e)}
html.js .l:nth-child(2)>span{transition-delay:.12s}html.js .l:nth-child(3)>span{transition-delay:.24s}
html.js .hl.in .l>span{transform:none}

/* intro */
#intro{display:none}
html.intro-on #intro{display:grid;place-items:center;position:fixed;inset:0;z-index:100;background:var(--ob);animation:out .6s var(--e) 2.6s forwards}
#intro svg{position:absolute;inset:0;width:100%;height:100%}
#intro path{fill:none;stroke:var(--br);stroke-width:1.5;stroke-dasharray:1;stroke-dashoffset:1;animation:draw 1.7s var(--e) .2s forwards}
.wm{position:relative;font:500 clamp(2.2rem,9vw,5.5rem)/1 var(--serif);letter-spacing:.3em;margin-right:-.3em;color:transparent;background:linear-gradient(105deg,var(--tp) 40%,#fff 50%,var(--tp) 60%);background-size:300% 100%;background-position:100% 0;-webkit-background-clip:text;background-clip:text;opacity:0;animation:fin .8s var(--e) 1s forwards,shine 1.2s var(--e) 1.5s forwards}
#skip{position:absolute;right:var(--pad);bottom:24px;background:none;border:0;color:var(--tp);font:600 11px var(--sans);letter-spacing:.16em;text-transform:uppercase;min-height:44px;padding:0 8px;cursor:pointer}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes fin{to{opacity:1}}
@keyframes shine{to{background-position:0 0}}
@keyframes out{to{opacity:0;visibility:hidden}}

@media(prefers-reduced-motion:reduce){
 *{scroll-behavior:auto!important;transition:none!important;animation:none!important}
 html.js .rv{opacity:1;transform:none}html.js .l>span{transform:none}
 html.js .mr img{clip-path:none}html.js #plp{stroke-dashoffset:0!important}
 #intro{display:none!important}
}