:root{--ease:cubic-bezier(.77,0,.18,1)}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
body{font-family:Jost,system-ui,sans-serif;-webkit-font-smoothing:antialiased;line-height:1.6}
img,video{display:block;max-width:100%}
a{color:inherit}
.ph-note{display:inline-block;font:600 10px/1 'IBM Plex Mono',monospace;letter-spacing:.12em;text-transform:uppercase;background:#ffcc33;color:#111;padding:4px 7px;border-radius:2px;vertical-align:middle;margin-left:8px}
/* ---------- placeholders ---------- */
.ph{background:linear-gradient(135deg,var(--ph1),var(--ph2));position:relative}
.ph::after{content:attr(data-label);position:absolute;inset:auto 0 12px 0;text-align:center;font:500 11px 'IBM Plex Mono',monospace;letter-spacing:.15em;text-transform:uppercase;opacity:.55}
/* ---------- SPLIT HOME ---------- */
.split{display:flex;height:100vh;height:100svh;overflow:hidden;background:#000;position:relative}
.half{position:relative;flex:1;display:flex;align-items:flex-end;text-decoration:none;color:#fff;overflow:hidden;transition:flex .9s var(--ease)}
.half .bg{position:absolute;inset:0;background-size:cover;background-position:center;transform:scale(1.06);transition:transform 1.4s var(--ease),filter .9s}
.half video.bg{width:100%;height:100%;object-fit:cover}
.half::before{content:"";position:absolute;inset:0;z-index:1;transition:opacity .9s}
.half.res::before{background:linear-gradient(180deg,rgba(13,12,10,.15),rgba(13,12,10,.85))}
.half.com::before{background:linear-gradient(180deg,rgba(17,22,28,.2),rgba(17,22,28,.88))}
.half.res .bg.ph{--ph1:#3a2f22;--ph2:#0d0c0a}
.half.com .bg.ph{--ph1:#3c4a58;--ph2:#11161c}
.split:hover .half{flex:.7}.split:hover .half:hover{flex:1.3}
.half:hover .bg{transform:scale(1)}
.split:hover .half:not(:hover) .bg{filter:grayscale(.7) brightness(.55)}
.half .copy{position:relative;z-index:2;padding:0 7vw 12vh;max-width:640px}
.half .eyebrow{font-size:12px;letter-spacing:.35em;text-transform:uppercase;opacity:.8}
.res .copy h2{font:300 clamp(48px,7vw,104px)/.95 'Cormorant Garamond',serif;margin:.25em 0 .2em}
.res .copy h2 em{color:#c9a96e}
.com .copy h2{font:600 clamp(42px,6vw,88px)/.95 'Inter Tight',sans-serif;letter-spacing:-.03em;margin:.25em 0 .2em;text-transform:uppercase}
.com .copy h2 span{color:#6f8fd6}
.half p{max-width:420px;opacity:0;transform:translateY(14px);transition:.7s .15s;font-weight:300}
.half:hover p,.half:focus p{opacity:.85;transform:none}
.enter{display:inline-flex;gap:12px;align-items:center;margin-top:28px;font-size:12px;letter-spacing:.3em;text-transform:uppercase;padding:14px 26px;border:1px solid currentColor;transition:.4s}
.res .enter{color:#c9a96e}.res:hover .enter{background:#c9a96e;color:#0d0c0a}
.com .enter{font-family:'IBM Plex Mono',monospace;color:#c7d0d9}.com:hover .enter{background:#c7d0d9;color:#11161c}
.seam{position:absolute;z-index:5;left:50%;top:0;bottom:0;width:1px;background:rgba(255,255,255,.25);pointer-events:none;transition:opacity .5s}
.split:hover .seam{opacity:0}
.brand{position:absolute;z-index:6;top:4vh;left:50%;transform:translateX(-50%);text-align:center;color:#fff;pointer-events:none}
.brand img{height:clamp(64px,8vw,104px);width:auto;margin:auto;filter:drop-shadow(0 2px 12px rgba(0,0,0,.5))}
.wordmark{font:500 15px 'Jost';letter-spacing:.5em;text-transform:uppercase}
.wordmark small{display:block;font-size:10px;letter-spacing:.6em;opacity:.7;margin-top:6px}
.home-foot{position:absolute;z-index:6;bottom:3vh;left:50%;transform:translateX(-50%);display:flex;gap:22px;font-size:11px;letter-spacing:.25em;text-transform:uppercase;color:#fff}
.home-foot a{text-decoration:none;opacity:.75}.home-foot a:hover{opacity:1}
@media(max-width:800px){.split{flex-direction:column}.split:hover .half,.split:hover .half:hover{flex:1}.half .copy{padding:0 7vw 7vh}.half p{opacity:.85;transform:none}.seam{left:0;right:0;top:50%;bottom:auto;width:auto;height:1px}.brand{top:50%;transform:translate(-50%,-50%);background:rgba(0,0,0,.55);padding:12px 18px;backdrop-filter:blur(6px)}.home-foot{display:none}.enter{margin-top:14px}}

/* ---------- SIDE PAGES (shared) ---------- */
.nav{position:fixed;inset:0 0 auto 0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:22px 5vw;transition:.4s}
.nav.solid{padding:14px 5vw;background:var(--bg);box-shadow:0 1px 0 var(--line)}
.nav .logo{text-decoration:none;display:flex;align-items:center;gap:12px}
.nav .logo img{height:56px;width:auto}.nav.solid .logo img{height:46px}
.nav ul{display:flex;gap:30px;list-style:none;align-items:center}
.nav ul a{text-decoration:none;font-size:12px;letter-spacing:.2em;text-transform:uppercase;opacity:.8}
.nav ul a:hover{opacity:1}
.btn{display:inline-block;text-decoration:none;font-size:12px;letter-spacing:.22em;text-transform:uppercase;padding:14px 28px;border:1px solid var(--accent);background:var(--accent);color:var(--bg);cursor:pointer;transition:.3s;font-family:inherit}
.btn:hover{background:transparent;color:var(--accent)}
.btn.ghost{background:transparent;color:var(--fg)}
.burger{display:none;background:none;border:0;color:var(--fg);font-size:26px}
section{padding:clamp(80px,12vw,160px) 6vw}
.wrap{max-width:1320px;margin:auto}
.kicker{font-size:12px;letter-spacing:.35em;text-transform:uppercase;color:var(--accent)}
.hero{min-height:100svh;display:flex;align-items:flex-end;position:relative;color:#fff;padding-bottom:12vh;overflow:hidden}
.hero .bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;background-size:cover;background-position:center}
.hero::before{content:"";position:absolute;inset:0;z-index:1;background:var(--hero-shade)}
.hero .wrap{position:relative;z-index:2;width:100%}
.hero p.lead{max-width:540px;font-size:18px;font-weight:300;opacity:.9;margin:24px 0 36px}
.hero .actions{display:flex;gap:14px;flex-wrap:wrap}
.hero .switch{position:absolute;z-index:3;right:5vw;bottom:5vh;font-size:11px;letter-spacing:.25em;text-transform:uppercase;text-decoration:none;opacity:.7}
.filters{display:flex;gap:10px;flex-wrap:wrap;margin:30px 0 40px}
.filters button{background:none;border:1px solid var(--line);color:var(--fg);padding:9px 18px;font:inherit;font-size:12px;letter-spacing:.18em;text-transform:uppercase;cursor:pointer}
.filters button.on{background:var(--accent);border-color:var(--accent);color:var(--bg)}
.gallery{columns:3 320px;column-gap:14px}
.tile{break-inside:avoid;margin-bottom:14px;position:relative;cursor:zoom-in;overflow:hidden;background:var(--panel)}
.tile img,.tile video{width:100%;height:auto;transition:transform 1s var(--ease)}
.tile:hover img,.tile:hover video{transform:scale(1.04)}
.tile .ph{aspect-ratio:var(--ar,3/2)}
.tile .cap{position:absolute;inset:auto 0 0 0;padding:16px;background:linear-gradient(transparent,rgba(0,0,0,.7));color:#fff;font-size:13px;opacity:0;transition:.4s}
.tile:hover .cap{opacity:1}
.tile .play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:64px;height:64px;border-radius:50%;border:1px solid #fff;display:grid;place-items:center;color:#fff;background:rgba(0,0,0,.3);backdrop-filter:blur(4px)}
.lb{position:fixed;inset:0;z-index:100;background:rgba(0,0,0,.94);display:none;align-items:center;justify-content:center}
.lb.open{display:flex}
.lb .stage{max-width:92vw;max-height:84vh}
.lb .stage img,.lb .stage video{max-width:92vw;max-height:84vh;object-fit:contain}
.lb .stage .ph{width:min(80vw,1100px);aspect-ratio:3/2}
.lb button{position:absolute;background:none;border:0;color:#fff;font-size:34px;cursor:pointer;padding:20px;opacity:.7}
.lb button:hover{opacity:1}
.lb .x{top:10px;right:14px}.lb .prev{left:10px}.lb .next{right:10px}
.lb .lcap{position:absolute;bottom:22px;left:0;right:0;text-align:center;color:#ccc;font-size:13px;letter-spacing:.1em}
.services{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1px;background:var(--line);border:1px solid var(--line);margin-top:50px}
.svc{background:var(--bg);padding:40px 32px;transition:.4s}
.svc:hover{background:var(--panel)}
.svc .n{font:500 12px 'IBM Plex Mono',monospace;color:var(--accent);letter-spacing:.15em}
.svc h3{margin:18px 0 10px}
.svc p{opacity:.72;font-size:15px}
.process{display:grid;grid-template-columns:repeat(4,1fr);gap:30px;margin-top:60px;counter-reset:s}
.step{border-top:1px solid var(--accent);padding-top:24px}
.step b{display:block;font-size:13px;letter-spacing:.2em;text-transform:uppercase;color:var(--accent);margin-bottom:10px}
.step p{opacity:.75;font-size:15px}
.quotes{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:30px;margin-top:50px}
.quote{padding:36px;border:1px dashed var(--line);position:relative}
.quote blockquote{font-size:19px;opacity:.85}
.quote cite{display:block;margin-top:18px;font-style:normal;font-size:12px;letter-spacing:.2em;text-transform:uppercase;opacity:.6}
.contact{display:grid;grid-template-columns:1fr 1.3fr;gap:6vw;align-items:start}
form.qf{display:grid;grid-template-columns:1fr 1fr;gap:18px;background:var(--panel);padding:clamp(24px,4vw,52px);border:1px solid var(--line)}
.qf label{display:flex;flex-direction:column;gap:7px;font-size:11px;letter-spacing:.2em;text-transform:uppercase;opacity:.9}
.qf .full{grid-column:1/-1}
.qf input,.qf select,.qf textarea{font:inherit;font-size:15px;letter-spacing:0;text-transform:none;background:transparent;border:0;border-bottom:1px solid var(--line);color:var(--fg);padding:10px 2px;outline:none}
.qf input:focus,.qf select:focus,.qf textarea:focus{border-color:var(--accent)}
.qf select option{background:var(--bg)}
.qf fieldset{border:0;display:flex;flex-wrap:wrap;gap:10px}
.qf fieldset legend{font-size:11px;letter-spacing:.2em;text-transform:uppercase;margin-bottom:10px}
.chip{position:relative}.chip input{position:absolute;opacity:0}
.chip span{display:inline-block;padding:9px 16px;border:1px solid var(--line);font-size:13px;letter-spacing:.05em;text-transform:none;cursor:pointer;transition:.25s}
.chip input:checked+span{background:var(--accent);border-color:var(--accent);color:var(--bg)}
.qf .msg{grid-column:1/-1;font-size:14px}
.info p{margin:12px 0;opacity:.8}
.social{display:flex;gap:14px;margin-top:26px}
.social a{width:44px;height:44px;border:1px solid var(--line);display:grid;place-items:center;text-decoration:none;transition:.3s}
.social a:hover{border-color:var(--accent);color:var(--accent)}
.social svg{width:18px;height:18px;fill:currentColor}
footer{padding:40px 6vw;border-top:1px solid var(--line);display:flex;justify-content:space-between;flex-wrap:wrap;gap:16px;font-size:12px;letter-spacing:.12em;opacity:.7}
.sticky-cta{position:fixed;z-index:40;right:22px;bottom:22px;box-shadow:0 10px 30px rgba(0,0,0,.35)}
.reveal{opacity:0;transform:translateY(30px);transition:1s var(--ease)}
.reveal.in{opacity:1;transform:none}
@media(max-width:900px){.nav ul{position:fixed;inset:0;flex-direction:column;justify-content:center;background:var(--bg);gap:28px;transform:translateX(100%);transition:.5s var(--ease)}.nav ul.open{transform:none}.nav ul a{font-size:16px}.burger{display:block;z-index:60}.process{grid-template-columns:1fr 1fr}.contact{grid-template-columns:1fr}form.qf{grid-template-columns:1fr}}
@media(max-width:520px){.process{grid-template-columns:1fr}.sticky-cta{left:16px;right:16px;bottom:14px;text-align:center}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto}.reveal{opacity:1;transform:none}}

/* ---------- THEME: LUXE RESIDENTIAL ---------- */
.t-res{--bg:#0d0c0a;--panel:#171411;--fg:#f3ede3;--accent:#c9a96e;--line:rgba(201,169,110,.22);--ph1:#3a2f22;--ph2:#14110d;--hero-shade:linear-gradient(180deg,rgba(13,12,10,.25) 0%,rgba(13,12,10,.2) 40%,rgba(13,12,10,.92));background:var(--bg);color:var(--fg)}
.t-res h1,.t-res h2,.t-res h3,.t-res blockquote{font-family:'Cormorant Garamond',serif;font-weight:300}
.t-res h1{font-size:clamp(52px,8vw,124px);line-height:.95}
.t-res h1 em,.t-res h2 em{color:var(--accent)}
.t-res h2{font-size:clamp(38px,5vw,72px);line-height:1.02;margin-top:14px}
.t-res h3{font-size:30px}
.t-res .svc h3{font-size:30px}
.t-res .wordmark{color:var(--fg)}
/* ---------- THEME: PRO COMMERCIAL ---------- */
.t-com{--bg:#11161c;--panel:#18202a;--fg:#e9eef3;--accent:#6f8fd6;--line:rgba(199,208,217,.16);--ph1:#3c4a58;--ph2:#151b22;--hero-shade:linear-gradient(90deg,rgba(17,22,28,.9) 0%,rgba(17,22,28,.35) 70%),linear-gradient(0deg,rgba(17,22,28,.7),transparent 50%);background:var(--bg);color:var(--fg);font-family:'Inter Tight',system-ui,sans-serif}
.t-com h1,.t-com h2,.t-com h3{font-family:'Inter Tight',sans-serif;letter-spacing:-.03em}
.t-com h1{font-size:clamp(46px,7vw,108px);line-height:.93;font-weight:600;text-transform:uppercase}
.t-com h1 span,.t-com h2 span{color:var(--accent)}
.t-com h2{font-size:clamp(34px,4.4vw,62px);line-height:1;font-weight:600;margin-top:14px}
.t-com h3{font-size:22px;font-weight:600}
.t-com .kicker,.t-com .nav ul a,.t-com .btn,.t-com .filters button,.t-com .step b,.t-com .qf label,.t-com footer{font-family:'IBM Plex Mono',monospace}
.t-com .kicker::before{content:"// "}
.t-com section.alt{background:#e9eef3;color:#11161c;--fg:#11161c;--bg:#e9eef3;--panel:#dde4ea;--line:rgba(17,22,28,.14);--accent:#4a6fc1}
.t-com .stats{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);margin-top:60px}
.t-com .stats div{padding:26px 0;border-right:1px solid var(--line);padding-left:20px}
.t-com .stats b{display:block;font-size:34px;font-weight:600}
.t-com .stats small{font-family:'IBM Plex Mono';font-size:11px;letter-spacing:.15em;text-transform:uppercase;opacity:.6}
@media(max-width:700px){.t-com .stats{grid-template-columns:1fr 1fr}}
.t-com .hero .kicker,.t-com .stats b{color:var(--accent)}
.t-com .svc:hover{box-shadow:inset 3px 0 0 #4a6fc1}
@media(min-width:901px){.services{grid-template-columns:repeat(3,1fr)}.services .svc:nth-child(5):last-child{grid-column:span 2}}
.bgv{opacity:0;transition:opacity 1.2s ease}.bgv.on{opacity:1}
.half .bgv,.hero .bgv{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.half .bgv{transform:scale(1.06);transition:opacity 1.2s ease,transform 1.4s var(--ease),filter .9s}.half:hover .bgv{transform:scale(1)}.split:hover .half:not(:hover) .bgv{filter:grayscale(.7) brightness(.55)}
.tile img{aspect-ratio:auto}.tile .pv{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.tile .cap b{display:block;font-size:11px;letter-spacing:.18em;text-transform:uppercase;opacity:.75;font-weight:500;margin-bottom:3px}
.credit{flex-basis:100%;font-size:10px;opacity:.6;letter-spacing:.05em}
/* imagery pass */
.band{position:relative;height:min(78vh,760px);overflow:hidden}
.band .bandimg,.cta-band .bandimg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.bandcap{position:absolute;left:5vw;bottom:5vh;color:#fff;font-size:11px;letter-spacing:.25em;text-transform:uppercase;text-shadow:0 1px 8px rgba(0,0,0,.6)}
.projects{padding-bottom:0}.strip{display:flex;gap:14px;overflow-x:auto;padding:24px 5vw 10px;scroll-snap-type:x mandatory;scrollbar-width:thin}
.proj{flex:0 0 clamp(240px,24vw,360px);scroll-snap-align:start;position:relative;text-decoration:none;color:#fff;aspect-ratio:4/5;overflow:hidden}
.proj img{width:100%;height:100%;object-fit:cover;transition:transform 1s var(--ease)}.proj:hover img{transform:scale(1.06)}
.proj span{position:absolute;left:0;right:0;bottom:0;padding:40px 18px 16px;background:linear-gradient(transparent,rgba(0,0,0,.75));font-size:13px;letter-spacing:.12em;text-transform:uppercase}
.svc[style*="--img"],.step[style*="--img"]{position:relative;isolation:isolate;color:#fff}
.svc[style*="--img"]::before,.step[style*="--img"]::before{content:"";position:absolute;inset:0;z-index:-2;background:var(--img) center/cover}
.svc[style*="--img"]::after,.step[style*="--img"]::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(180deg,rgba(0,0,0,.55),rgba(0,0,0,.82));transition:.4s}
.svc[style*="--img"]:hover::after{background:linear-gradient(180deg,rgba(0,0,0,.35),rgba(0,0,0,.75))}
.step[style*="--img"]{padding:28px 22px;min-height:240px}
.who .auds{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;margin-top:30px}
.aud{position:relative;aspect-ratio:3/2;display:flex;align-items:flex-end;padding:18px;text-decoration:none;color:#fff;background:linear-gradient(transparent 30%,rgba(0,0,0,.8)),var(--img) center/cover;font-size:14px;letter-spacing:.14em;text-transform:uppercase;transition:.4s}
.aud:hover{filter:brightness(1.12)}
.area .towns{display:flex;flex-wrap:wrap;gap:10px;list-style:none;padding:0;margin-top:24px}.area .towns li{border:1px solid var(--line);padding:8px 14px;font-size:13px}
.subhero{min-height:78svh}.sub .nav{position:sticky}
.two{display:grid;grid-template-columns:1fr 1fr;gap:6vw}.ticks{list-style:none;padding:0;margin-top:20px}.ticks li{padding:12px 0 12px 28px;border-bottom:1px solid var(--line);position:relative}.ticks li::before{content:"";position:absolute;left:0;top:20px;width:12px;height:1px;background:var(--accent)}
.pgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;margin-top:30px}.pcard{margin:0}.pcard img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}.pcard figcaption{font-size:13px;opacity:.8;padding:10px 0}.pcard b{display:block;opacity:1;letter-spacing:.08em}
details.faq{border-bottom:1px solid var(--line);padding:18px 0}details.faq summary{cursor:pointer;font-size:18px;list-style:none}details.faq summary::after{content:"+";float:right;color:var(--accent)}details.faq[open] summary::after{content:"\2212"}details.faq p{margin-top:12px;opacity:.85;max-width:760px}
.cta-band{position:relative;color:#fff;padding:18vh 0;overflow:hidden;isolation:isolate}.cta-band .bandimg{z-index:-2}.cta-band::after{content:"";position:absolute;inset:0;z-index:-1;background:rgba(0,0,0,.6)}
.xlinks{display:flex;flex-wrap:wrap;gap:18px;margin:26px 0}.xlink{font-size:12px;letter-spacing:.18em;text-transform:uppercase;text-decoration:none;opacity:.85}
@media(max-width:800px){.two{grid-template-columns:1fr}.band{height:56vh}}
/* multifamily */
.vgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;margin-top:30px}.vcard{margin:0;position:relative}.vcard video{width:100%;aspect-ratio:16/9;object-fit:cover;display:block;background:#000}.vcard figcaption{padding:10px 0;font-size:14px;opacity:.8}.vcard figcaption b{display:block;font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.15em;text-transform:uppercase;color:var(--accent)}
.mf .aud span small{display:block;font-size:13px;opacity:.85;margin-top:6px;text-transform:none;letter-spacing:0;font-family:'Inter Tight',sans-serif}
.mf .hero h1{font-size:clamp(44px,6.4vw,100px)}
footer .credits{flex-basis:100%;margin:0;font-size:10px;letter-spacing:.06em;text-transform:none;opacity:.85;line-height:1.6}
.gbadge{margin-top:14px}.gbadge a{display:inline-block;padding:6px 12px;border:1px solid var(--line);font-size:13px;letter-spacing:.08em;text-decoration:none}
