/* ============================================================================
   CHAHAL CONSTRUCTION — OPTION 3 · "ATELIER"
   ----------------------------------------------------------------------------
   LAYOUT CONTRACT (this is what keeps every edge aligned):
   · One page gutter  : --gut       (identical for header, hero, every section)
   · One max width    : --max
   · One grid         : .g12  = 12 equal columns + --gap gutters
   · Every block sits on that grid via .c1-6 / .c7-12 style span classes,
     so the left edge of the logo, every heading and every rule share one axis.
   · Spacing uses one 8px scale (--s1 … --s12). No ad-hoc margins.
   · Component rules never restate width/padding of the container, and every
     descendant selector is scoped with ">" so labels can't hit nested spans.
   ========================================================================== */
:root{
  /* brand */
  --navy:#23365f;          /* logo navy */
  --navy-lt:#33497a;
  --ink:#0b1424;           /* page dark */
  --ink-2:#111c30;
  --bone:#f6f5f2;          /* page light */
  --bone-2:#eceae4;
  --txt:#12161d;
  --mut:#6a7386;
  --mut-d:rgba(255,255,255,.58);
  --hair:rgba(18,22,29,.13);
  --hair-d:rgba(255,255,255,.15);

  /* layout */
  --gut:clamp(20px,4.4vw,72px);
  --max:1480px;
  --gap:clamp(16px,1.7vw,28px);

  /* spacing scale (8px base) */
  --s1:8px;   --s2:16px;  --s3:24px;  --s4:32px;  --s5:40px;
  --s6:56px;  --s7:72px;  --s8:96px;  --s9:120px; --s10:160px;

  --ez:cubic-bezier(.22,.9,.28,1);
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;background:var(--bone);color:var(--txt);
  font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;
  font-size:16px;line-height:1.68;font-weight:300;overflow-x:hidden;
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;
}
img{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
button{font-family:inherit}
h1,h2,h3,h4{font-family:'Sora',sans-serif;font-weight:200;margin:0;letter-spacing:-.03em;line-height:1.04}
h1{font-size:clamp(2.6rem,5.4vw,4.9rem)}
h2{font-size:clamp(2rem,3.7vw,3.3rem)}
h3{font-size:clamp(1.15rem,1.55vw,1.4rem);font-weight:300;letter-spacing:-.02em;line-height:1.25}
p{margin:0}

/* ---------- the single grid ---------- */
.shell{width:100%;max-width:var(--max);margin-inline:auto;padding-inline:var(--gut)}
.g12{display:grid;grid-template-columns:repeat(12,1fr);gap:var(--gap)}
.c1-4{grid-column:1/5}   .c1-5{grid-column:1/6}   .c1-6{grid-column:1/7}
.c1-7{grid-column:1/8}   .c1-8{grid-column:1/9}   .c1-12{grid-column:1/13}
.c5-12{grid-column:5/13} .c6-12{grid-column:6/13} .c7-12{grid-column:7/13}
.c8-12{grid-column:8/13} .c9-12{grid-column:9/13}

/* ---------- type helpers ---------- */
.kick{
  display:flex;align-items:center;gap:var(--s2);
  font-size:.66rem;font-weight:500;letter-spacing:.3em;text-transform:uppercase;
  color:var(--mut);margin-bottom:var(--s4);
}
.kick::before{content:"";width:22px;height:1px;background:currentColor;opacity:.55;flex:none}
.kick.on-d{color:var(--mut-d)}
.lede{font-size:1.05rem;line-height:1.7;color:var(--mut);max-width:54ch}
.on-d .lede,.dark .lede{color:var(--mut-d)}
.thin{font-weight:200}
.hair{height:1px;background:var(--hair);border:0;margin:0}
.hair.d{background:var(--hair-d)}

/* ---------- buttons ---------- */
.cta{
  display:inline-flex;align-items:center;gap:var(--s2);height:56px;padding-inline:var(--s4);
  background:var(--navy);color:#fff;border:1px solid var(--navy);cursor:pointer;
  font-size:.68rem;letter-spacing:.24em;text-transform:uppercase;font-weight:500;
  position:relative;overflow:hidden;isolation:isolate;transition:color .5s var(--ez),border-color .5s var(--ez)
}
.cta > *{position:relative;z-index:2}
.cta::before{content:"";position:absolute;inset:0;z-index:1;background:#fff;
  transform:translateY(100%);transition:transform .55s var(--ez)}
.cta:hover{color:var(--navy)}
.cta:hover::before{transform:translateY(0)}
.cta svg{width:14px;height:14px;flex:none;transition:transform .5s var(--ez)}
.cta:hover svg{transform:translateX(5px)}
.cta.ghost{background:transparent;color:#fff;border-color:var(--hair-d)}
.cta.ghost:hover{color:var(--navy);border-color:#fff}
.tlink{
  display:inline-flex;align-items:center;gap:var(--s2);font-size:.68rem;letter-spacing:.24em;
  text-transform:uppercase;font-weight:500;padding-bottom:var(--s1);position:relative
}
.tlink::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:currentColor;
  transform-origin:right;transition:transform .55s var(--ez)}
.tlink:hover::after{transform:scaleX(0)}
.tlink svg{width:14px;height:14px;transition:transform .5s var(--ez)}
.tlink:hover svg{transform:translateX(5px)}

/* ---------- reveals ---------- */
.rv{opacity:0;transform:translateY(26px);transition:opacity .95s var(--ez),transform .95s var(--ez)}
.rv.in{opacity:1;transform:none}
.rv[data-d="1"]{transition-delay:.09s}
.rv[data-d="2"]{transition-delay:.18s}
.rv[data-d="3"]{transition-delay:.27s}
.clip{overflow:hidden}
.clip > img{transform:scale(1.14);transition:transform 1.5s var(--ez)}
.clip.in > img{transform:scale(1)}
.wipe{position:relative;overflow:hidden}
.wipe::after{content:"";position:absolute;inset:0;background:var(--bone);transform-origin:right;
  transition:transform 1.1s var(--ez);z-index:3}
.wipe.in::after{transform:scaleX(0)}
.dark .wipe::after{background:var(--ink)}

/* ============================ HEADER ============================ */
.hd{position:fixed;inset:0 0 auto;z-index:90;transition:background .55s var(--ez),border-color .55s var(--ez);
  border-bottom:1px solid transparent}
.hd.pin{background:rgba(246,245,242,.92);backdrop-filter:blur(16px) saturate(1.2);border-bottom-color:var(--hair)}
.hd > .shell{display:flex;align-items:center;justify-content:space-between;gap:var(--s5);
  height:84px;transition:height .55s var(--ez)}
.hd.pin > .shell{height:70px}
.mark{display:flex;align-items:center;gap:12px;flex:none}
.mark > svg{width:40px;height:40px;flex:none}
.mark svg rect{fill:#fff;transition:fill .55s var(--ez)}
.hd.pin .mark svg rect{fill:var(--navy)}
.mark > span{display:block;line-height:1}
.mark b{display:block;font-family:'Archivo Black','Archivo',sans-serif;font-weight:400;font-size:1.04rem;letter-spacing:.02em;color:#fff;
  transition:color .55s var(--ez)}
.mark small{display:block;font-family:'Montserrat',sans-serif;font-weight:400;font-size:.5rem;letter-spacing:.4em;color:rgba(255,255,255,.6);margin-top:6px;
  transition:color .55s var(--ez)}
.hd.pin .mark b{color:var(--navy)}
.hd.pin .mark small{color:var(--mut)}
.mnu{display:flex;align-items:center;gap:var(--s5);list-style:none;margin:0;padding:0}
.mnu a{font-size:.7rem;letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.8);
  padding:var(--s1) 0;position:relative;transition:color .5s var(--ez)}
.mnu a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:currentColor;
  transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ez)}
.mnu a:hover::after,.mnu a.act::after{transform:scaleX(1)}
.hd.pin .mnu a{color:var(--mut)}
.hd.pin .mnu a:hover,.hd.pin .mnu a.act{color:var(--navy)}
.hd-r{display:flex;align-items:center;gap:var(--s4);flex:none}
.hd-tel{font-size:.76rem;letter-spacing:.1em;color:#fff;transition:color .55s var(--ez);white-space:nowrap}
.hd.pin .hd-tel{color:var(--navy)}
.bg{display:none;position:relative;z-index:96;width:40px;height:40px;background:none;border:0;padding:0;cursor:pointer;
  flex-direction:column;align-items:flex-end;justify-content:center;gap:7px}
.bg i{display:block;height:1px;width:24px;background:#fff;transition:.45s var(--ez)}
.bg i:last-child{width:15px}
.hd.pin .bg i{background:var(--navy)}
.bg.x i{background:#fff}
/* While the mobile menu is open the header must not create a containing block,
   or the fixed-position menu collapses to the height of the header. */
.hd.nav-open{backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  background:transparent!important;box-shadow:none!important;border-bottom-color:transparent!important}
/* the close icon must stay white over the dark menu, even when the header is pinned */
.hd.nav-open .bg i{background:#fff}
.hd.nav-open .logo-pic .ld{opacity:1}
.hd.nav-open .logo-pic .ll{opacity:0}
.bg.x i:first-child{transform:translateY(4px) rotate(45deg)}
.bg.x i:last-child{width:24px;transform:translateY(-4px) rotate(-45deg)}

/* ============================ HERO ============================ */
.hero{position:relative;background:var(--ink);color:#fff;overflow:hidden}
.hero > .shell{position:relative;z-index:2;min-height:min(94vh,940px);display:grid;align-content:center;
  padding-top:calc(84px + var(--s8));padding-bottom:var(--s8)}
.hero-copy{grid-column:1/8}
.hero h1{color:#fff;max-width:14ch}
.hero h1 .rowl{display:block;overflow:hidden}
.hero h1 .rowl > span{display:block;transform:translateY(112%);animation:rise 1.25s var(--ez) forwards}
.hero h1 .rowl:nth-child(2) > span{animation-delay:.12s}
.hero h1 .rowl:nth-child(3) > span{animation-delay:.24s}
@keyframes rise{to{transform:translateY(0)}}
.hero .kick{opacity:0;animation:fadeu 1s var(--ez) .42s forwards}
.hero-lede{margin-top:var(--s5);opacity:0;animation:fadeu 1s var(--ez) .62s forwards}
.hero-act{display:flex;flex-wrap:wrap;gap:var(--s2);margin-top:var(--s6);opacity:0;
  animation:fadeu 1s var(--ez) .78s forwards}
@keyframes fadeu{from{opacity:0;transform:translateY(18px)}to{opacity:1;transform:none}}
.hero-img{position:absolute;inset:0 0 0 auto;width:52%;z-index:1;overflow:hidden}
.hero-img > img{width:100%;height:100%;object-fit:cover;opacity:0;
  animation:zin 2.4s var(--ez) .15s forwards}
@keyframes zin{from{opacity:0;transform:scale(1.12)}to{opacity:1;transform:scale(1)}}
.hero-img::after{content:"";position:absolute;inset:0;
  background:linear-gradient(90deg,var(--ink) 0%,rgba(11,20,36,.72) 34%,rgba(11,20,36,.12) 100%)}
/* hairline grid — the visible proof that the layout is on a grid */
.grid-lines{position:absolute;inset:0;z-index:2;pointer-events:none;opacity:.5}
.grid-lines > .shell{height:100%}
.grid-lines .g12{height:100%}
.grid-lines i{display:block;height:100%;border-left:1px solid rgba(255,255,255,.055)}
.grid-lines i:last-child{border-right:1px solid rgba(255,255,255,.055)}

/* ============================ FIGURES ============================ */
.figs{background:var(--ink-2);color:#fff;border-top:1px solid var(--hair-d)}
.figs .g12{padding-block:var(--s7)}
.fg{grid-column:span 3;border-left:1px solid var(--hair-d);padding-left:var(--s4)}
.fg:first-child{border-left:0;padding-left:0}
.fg > b{display:block;font-family:'Sora',sans-serif;font-weight:200;font-size:clamp(2.2rem,3.3vw,3.1rem);
  line-height:1;letter-spacing:-.04em;color:#fff}
.fg > span{display:block;margin-top:var(--s2);font-size:.64rem;letter-spacing:.24em;
  text-transform:uppercase;color:var(--mut-d)}
.fg b .num{font:inherit;letter-spacing:inherit;color:inherit}

/* ============================ SECTIONS ============================ */
.sec{padding-block:clamp(var(--s8),9vw,var(--s10))}
.sec.dark{background:var(--ink);color:#fff}
.sec.dark h2,.sec.dark h3{color:#fff}
.sec.tint{background:var(--bone-2)}
.sec.white{background:#fff}
.shead{margin-bottom:var(--s8)}
.shead h2{max-width:16ch}
.shead .lede{padding-top:var(--s2)}

/* ---------- about ---------- */
.ab-media{grid-column:1/6;position:relative}
.ab-a{aspect-ratio:4/5}
.ab-a > img{width:100%;height:100%;object-fit:cover}
.ab-b{position:absolute;right:calc(var(--gap) * -2);bottom:calc(var(--s7) * -1);width:56%;aspect-ratio:1;
  border:var(--s1) solid var(--bone);background:var(--bone)}
.ab-b > img{width:100%;height:100%;object-fit:cover}
.ab-copy{grid-column:7/13}
.pillars{list-style:none;margin:var(--s6) 0 var(--s7);padding:0}
.pillars > li{display:grid;grid-template-columns:56px 1fr;gap:var(--s2);
  padding-block:var(--s4);border-top:1px solid var(--hair)}
.pillars > li:last-child{border-bottom:1px solid var(--hair)}
.pillars .ix{font-size:.66rem;letter-spacing:.2em;color:var(--mut);padding-top:6px}
.pillars h3{margin-bottom:var(--s1)}
.pillars p{font-size:.94rem;color:var(--mut)}

/* ---------- eras ---------- */
.era{grid-column:span 3;padding-top:var(--s5);border-top:1px solid var(--hair-d);position:relative}
.era > b{display:block;font-family:'Sora',sans-serif;font-weight:200;font-size:2.1rem;line-height:1;
  letter-spacing:-.03em;color:#fff}
.era > span{display:block;margin:var(--s3) 0 var(--s2);font-size:.62rem;letter-spacing:.24em;
  text-transform:uppercase;color:var(--mut-d)}
.era > p{font-size:.93rem;color:var(--mut-d)}
.era::before{content:"";position:absolute;left:0;top:-1px;height:1px;width:0;background:#fff;
  transition:width 1.2s var(--ez)}
.era.in::before{width:100%}

/* ---------- services ---------- */
.svc-list{grid-column:1/13;border-top:1px solid var(--hair)}
.srow{
  display:grid;grid-template-columns:repeat(12,1fr);gap:var(--gap);align-items:center;
  padding-block:var(--s5);border-bottom:1px solid var(--hair);position:relative;isolation:isolate
}
.srow::before{content:"";position:absolute;left:calc(var(--gut) * -.5);right:calc(var(--gut) * -.5);
  top:0;bottom:0;background:#fff;opacity:0;transition:opacity .5s var(--ez);z-index:-1}
.srow:hover::before{opacity:1}
.srow > .ix{grid-column:1/2;font-size:.66rem;letter-spacing:.2em;color:var(--mut)}
.srow > h3{grid-column:2/6;transition:transform .55s var(--ez)}
.srow:hover > h3{transform:translateX(10px)}
.srow > p{grid-column:6/12;font-size:.94rem;color:var(--mut)}
.srow > .dot{grid-column:12/13;justify-self:end;width:44px;height:44px;border-radius:50%;
  border:1px solid var(--hair);display:grid;place-items:center;transition:.5s var(--ez)}
.srow > .dot svg{width:15px;height:15px;stroke:var(--navy);stroke-width:1.3;fill:none;transition:.5s var(--ez)}
.srow:hover > .dot{background:var(--navy);border-color:var(--navy)}
.srow:hover > .dot svg{stroke:#fff;transform:translate(2px,-2px)}

/* ---------- projects (indexed list + cursor preview) ---------- */
.pj-head{margin-bottom:var(--s6)}
.pj-tabs{grid-column:1/13;display:flex;flex-wrap:wrap;gap:var(--s5);padding-bottom:var(--s3);
  border-bottom:1px solid var(--hair-d);margin-bottom:var(--s2)}
.pj-tabs > button{background:none;border:0;padding:0 0 6px;cursor:pointer;position:relative;
  font-size:.68rem;letter-spacing:.22em;text-transform:uppercase;color:var(--mut-d);transition:color .45s var(--ez)}
.pj-tabs > button::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:#fff;
  transform:scaleX(0);transform-origin:left;transition:transform .5s var(--ez)}
.pj-tabs > button.act,.pj-tabs > button:hover{color:#fff}
.pj-tabs > button.act::after{transform:scaleX(1)}
.pj-list{grid-column:1/13}
.pj{
  display:grid;grid-template-columns:repeat(12,1fr);gap:var(--gap);align-items:center;
  padding-block:var(--s5);border-bottom:1px solid var(--hair-d);cursor:pointer;position:relative
}
.pj.off{display:none}
.pj > .ix{grid-column:1/2;font-size:.66rem;letter-spacing:.2em;color:var(--mut-d);padding-top:4px}
.pj > .ttl{grid-column:2/7}
.pj > .ttl h3{font-size:clamp(1.25rem,2vw,1.85rem);transition:transform .55s var(--ez)}
.pj:hover > .ttl h3{transform:translateX(10px)}
.pj > .kind{grid-column:7/10;font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;color:var(--mut-d)}
.pj > .yr{grid-column:10/12;font-size:.72rem;letter-spacing:.16em;color:var(--mut-d)}
.pj > .arw{grid-column:12/13;justify-self:end;opacity:.35;transition:.5s var(--ez)}
.pj > .arw svg{width:17px;height:17px;stroke:#fff;stroke-width:1.2;fill:none}
.pj:hover > .arw{opacity:1;transform:translate(3px,-3px)}
.pj-thumbs{position:fixed;top:0;left:0;width:330px;height:410px;pointer-events:none;z-index:60;
  opacity:0;transition:opacity .4s var(--ez);will-change:transform}
.pj-thumbs.show{opacity:1}
.pj-thumbs > figure{position:absolute;inset:0;margin:0;overflow:hidden;opacity:0;
  transition:opacity .45s var(--ez)}
.pj-thumbs > figure.on{opacity:1}
.pj-thumbs img{width:100%;height:100%;object-fit:cover}
/* mobile fallback: real cards */
.pj-cards{display:none;grid-column:1/13;gap:var(--s5)}
.pj-card > .ph{overflow:hidden;aspect-ratio:4/3}
.pj-card > .ph img{width:100%;height:100%;object-fit:cover}
.pj-card > .mt{display:flex;justify-content:space-between;gap:var(--s3);padding-top:var(--s3);
  margin-top:var(--s3);border-top:1px solid var(--hair-d)}
.pj-card .kind{font-size:.66rem;letter-spacing:.18em;text-transform:uppercase;color:var(--mut-d);white-space:nowrap}

/* ---------- process ---------- */
.stp{grid-column:span 3;padding-top:var(--s4);border-top:1px solid var(--hair)}
.stp > b{display:block;font-size:.64rem;letter-spacing:.24em;text-transform:uppercase;color:var(--mut);
  margin-bottom:var(--s4)}
.stp > h3{margin-bottom:var(--s2)}
.stp > p{font-size:.94rem;color:var(--mut)}

/* ---------- quote band ---------- */
.band{position:relative;overflow:hidden;isolation:isolate;color:#fff;
  padding-block:clamp(var(--s8),9vw,var(--s10))}
.band > img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
.band::after{content:"";position:absolute;inset:0;background:rgba(11,20,36,.87);z-index:-1}
.band blockquote{grid-column:2/12;margin:0;text-align:center}
.band blockquote > p{font-family:'Sora',sans-serif;font-weight:200;letter-spacing:-.02em;
  font-size:clamp(1.4rem,2.7vw,2.3rem);line-height:1.32;margin-bottom:var(--s5);min-height:2.7em}
.band cite{font-style:normal;font-size:.66rem;letter-spacing:.24em;text-transform:uppercase;color:var(--mut-d)}
.band .pips{display:flex;gap:var(--s1);justify-content:center;margin-top:var(--s6)}
.band .pips > button{width:24px;height:2px;padding:0;border:0;background:rgba(255,255,255,.28);cursor:pointer;
  transition:background .4s var(--ez)}
.band .pips > button.act{background:#fff}

/* ---------- contact ---------- */
.ct-copy{grid-column:1/5}
.ct-form{grid-column:6/13}
.ct-rows{margin-top:var(--s6)}
.ct-rows > div{display:grid;grid-template-columns:110px 1fr;gap:var(--s3);
  padding-block:var(--s3);border-top:1px solid var(--hair)}
.ct-rows > div:last-child{border-bottom:1px solid var(--hair)}
.ct-rows b{font-size:.64rem;letter-spacing:.22em;text-transform:uppercase;color:var(--mut);font-weight:500;padding-top:4px}
.ct-rows a:hover{color:var(--navy)}
.frow{display:grid;grid-template-columns:1fr 1fr;gap:var(--s5)}
.fld{margin-bottom:var(--s5)}
.fld > label{display:block;font-size:.62rem;letter-spacing:.22em;text-transform:uppercase;color:var(--mut);
  margin-bottom:var(--s2)}
.fld > input,.fld > select,.fld > textarea{
  width:100%;height:44px;padding:0;border:0;border-bottom:1px solid var(--hair);background:transparent;
  font-family:inherit;font-size:1rem;font-weight:300;color:var(--txt);border-radius:0;
  transition:border-color .45s var(--ez)
}
.fld > textarea{height:auto;min-height:104px;padding-top:var(--s1);resize:vertical;line-height:1.6}
.fld > input:focus,.fld > select:focus,.fld > textarea:focus{outline:0;border-bottom-color:var(--navy)}
/* field-level validation */
.fld > label .opt{letter-spacing:.06em;text-transform:none;color:var(--mut);font-size:.68rem}
.ferr{display:block;margin-top:6px;font-size:.78rem;color:#a32626;line-height:1.4}
.fld.bad > input,.fld.bad > select,.fld.bad > textarea{border-bottom-color:#a32626}
.fld.bad > label{color:#a32626}
.ferr-top{display:none;border:1px solid #a32626;color:#8c2b2b;background:rgba(163,38,38,.05);
  padding:var(--s3);margin-bottom:var(--s5);font-size:.9rem}
.ferr-top.show{display:block;animation:fadeu .4s var(--ez)}
.sent{border:1px solid var(--navy);padding:var(--s3);margin-bottom:var(--s5);font-size:.92rem;display:none}
.sent.show{display:block;animation:fadeu .5s var(--ez)}
.fnote{font-size:.79rem;color:var(--mut);margin-top:var(--s4)}

/* ---------- footer ---------- */
.ft{background:var(--ink);color:var(--mut-d);padding-top:var(--s9)}
.ft-brand{grid-column:1/5}
.ft-brand > p{font-size:.93rem;margin-top:var(--s4);max-width:32ch}
.ft-col{grid-column:span 2}
.ft-col:nth-of-type(2){grid-column:6/8}
.ft-col:nth-of-type(3){grid-column:8/10}
.ft-col:nth-of-type(4){grid-column:10/13}
.ft h4{font-size:.64rem;letter-spacing:.24em;text-transform:uppercase;color:#fff;font-weight:400;
  margin-bottom:var(--s4)}
.ft ul{list-style:none;margin:0;padding:0;display:grid;gap:var(--s2);font-size:.92rem}
.ft a:hover{color:#fff}
.ft-bar{margin-top:var(--s8);border-top:1px solid var(--hair-d)}
.ft-bar > .shell{display:flex;justify-content:space-between;gap:var(--s4);flex-wrap:wrap;
  padding-block:var(--s4);font-size:.78rem}
.top{position:fixed;right:var(--gut);bottom:var(--s4);width:46px;height:46px;border-radius:50%;
  background:var(--navy);border:0;cursor:pointer;display:grid;place-items:center;z-index:70;
  opacity:0;pointer-events:none;transform:translateY(12px);transition:.45s var(--ez)}
.top.show{opacity:1;pointer-events:auto;transform:none}
.top svg{width:15px;height:15px;stroke:#fff;stroke-width:1.4;fill:none}

/* ---------- loader ---------- */
#lo{position:fixed;inset:0;z-index:999;background:var(--ink);display:grid;place-items:center;
  transition:opacity .8s var(--ez),visibility .8s}
#lo.off{opacity:0;visibility:hidden}
#lo svg{width:54px;opacity:0;animation:fadeu .9s var(--ez) forwards}
#lo .prog{width:140px;height:1px;background:rgba(255,255,255,.2);margin:var(--s4) auto 0;overflow:hidden}
#lo .prog > i{display:block;height:100%;width:0;background:#fff;animation:grow 1.15s var(--ez) forwards}
@keyframes grow{to{width:100%}}

/* ============================ RESPONSIVE ============================ */
@media(max-width:1180px){
  .hero-copy{grid-column:1/9}
  .hero-img{width:46%}
  .srow > h3{grid-column:2/7}
  .srow > p{grid-column:7/12}
  .ct-copy{grid-column:1/6}
  .ct-form{grid-column:6/13}
}
@media(max-width:1024px){
  .fg{grid-column:span 6;padding-block:var(--s4)}
  .fg:nth-child(3){border-left:0;padding-left:0}
  .era{grid-column:span 6}
  .ab-media,.ab-copy,.ct-copy,.ct-form{grid-column:1/13}
  .ab-copy{margin-top:var(--s9)}
  .ab-b{right:0;bottom:calc(var(--s6) * -1);width:44%}
  .stp{grid-column:span 6}
  .pj > .kind{grid-column:7/11}
  .pj > .yr{display:none}
}
@media(max-width:900px){
  .mnu,.hd-tel{display:none}
  .bg{display:flex}
  .mnu.open{
    display:flex;position:fixed;inset:0;background:var(--ink);flex-direction:column;
    justify-content:center;align-items:center;gap:var(--s4);z-index:95;animation:fadeu .45s var(--ez)
  }
  .mnu.open a{color:#fff!important;font-size:1.25rem;letter-spacing:.14em}
  .hero > .shell{min-height:auto;padding-top:calc(84px + var(--s8));padding-bottom:var(--s8)}
  .hero-copy{grid-column:1/13}
  .hero-img{position:relative;width:100%;height:300px;margin-top:var(--s7);grid-column:1/13}
  .hero-img::after{background:linear-gradient(180deg,rgba(11,20,36,.45),rgba(11,20,36,.1))}
  .grid-lines{display:none}
  .shead{margin-bottom:var(--s6)}
  /* projects become real cards on touch */
  .pj-list,.pj-thumbs{display:none}
  .pj-cards{display:grid}
  .band blockquote{grid-column:1/13}
}
@media(max-width:680px){
  .fg,.era,.stp{grid-column:1/13}
  .frow{grid-template-columns:1fr;gap:0}
  .pillars > li{grid-template-columns:40px 1fr}
  .ct-rows > div{grid-template-columns:1fr;gap:var(--s1)}
  .ft-brand,.ft-col,.ft-col:nth-of-type(2),.ft-col:nth-of-type(3),.ft-col:nth-of-type(4){grid-column:1/13}
  .ft-col{margin-top:var(--s6)}
  .srow{gap:var(--s2) var(--gap)}
  .srow > h3{grid-column:2/13}
  .srow > p,.srow > .dot{display:none}
  .pj > .ttl{grid-column:2/11}
  .pj > .kind{grid-column:2/11;padding-top:var(--s1)}
}
@media(prefers-reduced-motion:reduce){
  *{animation-duration:.01ms!important;transition-duration:.01ms!important}
  .rv{opacity:1;transform:none}
  .clip > img{transform:none}
  .wipe::after{display:none}
}

/* ---------- gallery + lightbox ---------- */
/* ---- gallery: filter + 5-across carousel ---- */
.gal-bar{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;
  flex-wrap:wrap;margin-bottom:var(--s5)}
.gal-filters{display:flex;gap:8px;flex-wrap:wrap}
.gal-filters > button{background:transparent;border:1px solid var(--line);padding:9px 18px;
  cursor:pointer;font-family:inherit;font-size:.68rem;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--mut);transition:.35s var(--ez)}
.gal-filters > button:hover{border-color:var(--navy);color:var(--navy)}
.gal-filters > button.on{background:var(--navy);border-color:var(--navy);color:#fff}
.gal-arrows{display:flex;gap:8px;flex:none}
.gal-arrows > button{width:46px;height:46px;border:1px solid var(--line);background:transparent;
  cursor:pointer;display:grid;place-items:center;transition:.35s var(--ez)}
.gal-arrows > button svg{width:16px;height:16px;stroke:var(--navy);stroke-width:1.5;fill:none}
.gal-arrows > button:hover:not(:disabled){background:var(--navy);border-color:var(--navy)}
.gal-arrows > button:hover:not(:disabled) svg{stroke:#fff}
.gal-arrows > button:disabled{opacity:.28;cursor:default}

.gal{display:flex;gap:14px;overflow-x:auto;scroll-behavior:smooth;
  scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none;padding-bottom:2px}
.gal::-webkit-scrollbar{display:none}
.gal > figure{position:relative;margin:0;overflow:hidden;cursor:zoom-in;background:#0b1424;
  scroll-snap-align:start;flex:0 0 calc((100% - 2 * 14px) / 3)}
.gal > figure.hide{display:none}
.gal > figure > img{width:100%;height:100%;object-fit:cover;aspect-ratio:4/3;
  transition:transform 1.2s var(--ez)}
.gal > figure:hover > img{transform:scale(1.06)}
.gal .gal-proj{position:absolute;left:12px;top:12px;z-index:2;background:rgba(11,20,36,.82);
  color:#fff;font:inherit;font-size:.6rem;font-weight:500;letter-spacing:.16em;text-transform:uppercase;
  padding:6px 11px;border:0;border-radius:0;cursor:pointer;max-width:calc(100% - 24px);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;backdrop-filter:blur(4px);
  transition:background .35s var(--ez)}
.gal .gal-proj:hover,.gal .gal-proj:focus-visible{background:var(--navy)}
.gal figcaption{position:absolute;left:0;right:0;bottom:0;padding:40px 16px 16px;color:#fff;
  font-size:.82rem;letter-spacing:.02em;
  background:linear-gradient(to top,rgba(11,20,36,.94),transparent);
  opacity:0;transform:translateY(8px);transition:.45s var(--ez)}
.gal > figure:hover figcaption{opacity:1;transform:none}
.gal-empty{color:var(--mut);font-size:.95rem;padding:20px 0}
@media(max-width:980px){.gal > figure{flex:0 0 calc((100% - 14px) / 2)}}
@media(max-width:760px){.gal > figure{flex:0 0 calc((100% - 14px) / 2)}
  .gal figcaption{opacity:1;transform:none}}
@media(max-width:520px){.gal > figure{flex:0 0 86%}
  .gal-bar{flex-direction:column;align-items:flex-start}
  /* with several projects the names would stack into a tall column on a phone,
     so they become one swipeable strip instead */
  .gal-filters{flex-wrap:nowrap;overflow-x:auto;max-width:100%;scrollbar-width:none;padding-bottom:2px}
  .gal-filters::-webkit-scrollbar{display:none}
  .gal-filters > button{flex:none;white-space:nowrap}}
.lb{position:fixed;inset:0;z-index:200;background:rgba(8,14,26,.96);display:none;
  align-items:center;justify-content:center;padding:56px 20px}
.lb.on{display:flex;animation:lbIn .35s ease}
@keyframes lbIn{from{opacity:0}to{opacity:1}}
.lb-fig{margin:0;max-width:min(1200px,92vw);text-align:center}
.lb-fig > img{max-width:100%;max-height:78vh;object-fit:contain;margin-inline:auto}
.lb-fig figcaption{color:rgba(255,255,255,.7);font-size:.78rem;letter-spacing:.16em;
  text-transform:uppercase;margin-top:18px}
.lb-x,.lb-nav{position:absolute;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.2);
  color:#fff;cursor:pointer;display:grid;place-items:center;transition:.35s;line-height:1}
.lb-x{top:22px;right:22px;width:46px;height:46px;font-size:26px}
.lb-nav{top:50%;transform:translateY(-50%);width:52px;height:52px;font-size:30px}
.lb-prev{left:22px}.lb-next{right:22px}
.lb-x:hover,.lb-nav:hover{background:#fff;color:#0b1424}
@media(max-width:900px){
  .gal{grid-template-columns:repeat(2,1fr);gap:10px}
  .gal > figure:nth-child(1),.gal > figure:nth-child(6){grid-row:span 1}
  .gal > figure:nth-child(1) > img,.gal > figure:nth-child(6) > img{aspect-ratio:4/3}
  .gal figcaption{opacity:1;transform:none}
  .lb-nav{width:42px;height:42px;font-size:24px}
}
@media(max-width:560px){.gal{grid-template-columns:1fr}}

/* floor-plan images are drawings, not photos: show them whole */
.gal img[src*="plan-"],.card .ph img[src*="plan-"],.proj .shot img[src*="plan-"]{object-fit:contain;background:#fff}

/* ---- official Chahal logo ---- */
.logo-pic-solo{display:block;height:36px;width:auto;flex:none}
.logo-mark-solo{display:block;height:54px;width:auto;margin-inline:auto}
.logo-pic{position:relative;display:block;height:36px;flex:none}
.logo-pic img{display:block;height:36px;width:auto;transition:opacity .5s ease}
.logo-pic .ll{position:absolute;left:0;top:0;opacity:0}
.hd.pin .logo-pic .ld{opacity:0}
.hd.pin .logo-pic .ll{opacity:1}
@media(max-width:640px){.logo-pic,.logo-pic img,.logo-pic-solo{height:32px}}
