﻿*,*::before,*::after{margin:0;padding:0;box-sizing:border-box;}
:root{
  --w:#ffffff;--off:#f8f7f5;--blk:#111111;--ink:#222222;
  --g1:#333;--g2:#555;--g3:#888;--g4:#aaa;--g5:#ccc;--g6:#e5e5e5;--g7:#f4f4f4;
  --line:rgba(0,0,0,.08);--lines:rgba(0,0,0,.14);
  /* Brand colour — Forma forest green */
  --brand:#195f3c;--brand-dk:#123d28;--brand-lt:rgba(25,95,60,.07);--brand-mid:rgba(25,95,60,.14);
}
html{scroll-behavior:smooth;}
body{font-family:'Inter',sans-serif;background:var(--w);color:var(--ink);overflow-x:hidden;cursor:none;-webkit-font-smoothing:antialiased;}

/* CURSOR — dot shaped like the red A-accent in Forma logo
   DEFAULT: display:none on every device.
   Shown ONLY inside the hover:hover + pointer:fine media query below,
   which exclusively matches real mice/trackpads and never matches
   any touch screen, tablet, or stylus. */
#cur{
  display:none;  /* hidden by default — opt-in for mouse only */
  position:fixed;width:11px;height:10px;background:#D0021B;
  clip-path:polygon(50% 0%,100% 100%,50% 68%,0% 100%);
  pointer-events:none;z-index:9999;
  transform:translate(-50%,-50%);transition:width .25s,height .25s;
}
#cur-ring{
  display:none;  /* hidden by default — opt-in for mouse only */
  position:fixed;width:34px;height:34px;
  border:1px solid rgba(0,0,0,.18);border-radius:50%;
  pointer-events:none;z-index:9998;
  transform:translate(-50%,-50%);transition:width .35s,height .35s,opacity .3s;
}
body.hs #cur{width:46px;height:42px;background:#D0021B;}
body.hs #cur-ring{opacity:0;}

/* Only show cursor elements on devices with a fine pointer that can hover
   (i.e. a real mouse or trackpad — never a touchscreen or tablet). */
@media(hover:hover)and(pointer:fine){
  #cur{display:block;}
  #cur-ring{display:block;}
}

/* LOADER */
#loader{position:fixed;inset:0;background:var(--w);z-index:1000;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:2.5rem;transition:opacity .7s ease;}
#loader.out{opacity:0;pointer-events:none;}
.loader-logo-wrap{overflow:hidden;}
.loader-logo{height:clamp(40px,8vw,80px);width:auto;opacity:0;transform:scale(.92);animation:logoReveal .9s cubic-bezier(.16,1,.3,1) .15s forwards;}
@keyframes logoReveal{to{opacity:1;transform:scale(1);}}
.lpb{width:48px;height:1px;background:var(--g6);position:relative;overflow:hidden;}
.lpb::after{content:'';position:absolute;inset:0;background:var(--brand);transform:scaleX(0);transform-origin:left;animation:pbFill 1.3s ease forwards .4s;}

/* NAV */
nav{position:fixed;top:0;left:0;right:0;z-index:100;padding:1.8rem 3.5rem;display:flex;justify-content:space-between;align-items:center;transition:padding .4s,background .4s,border-color .4s;border-bottom:1px solid transparent;}
nav.stuck{padding:1rem 3.5rem;background:rgba(255,255,255,.97);backdrop-filter:blur(12px);border-bottom-color:var(--line);}
.logo{display:flex;align-items:center;text-decoration:none;}
.logo img{height:28px;width:auto;}
.nl{display:flex;gap:2.5rem;align-items:center;}
.nl a{color:var(--g3);text-decoration:none;font-size:.72rem;font-weight:300;letter-spacing:.06em;transition:color .2s;}
.nl a:hover{color:var(--blk);}
.nbtn{font-size:.72rem;font-weight:400;letter-spacing:.04em;color:var(--blk);border:1px solid var(--g5);padding:.5rem 1.4rem;background:none;cursor:none;transition:background .2s,color .2s,border-color .2s;text-decoration:none;display:inline-block;}
.nbtn:hover{background:var(--brand);color:var(--w);border-color:var(--brand);}

/* HERO */
.hero{height:100vh;min-height:680px;position:relative;display:flex;flex-direction:column;justify-content:flex-end;padding:0 3.5rem 5rem;overflow:hidden;}
.hbg{position:absolute;inset:0;background-size:cover;background-position:center;transform:scale(1.06);transition:transform 12s ease-out;}
.hbg.in{transform:scale(1);}
.hero-overlay{position:absolute;inset:0;background:linear-gradient(to bottom,rgba(255,255,255,.02) 0%,rgba(255,255,255,.08) 40%,rgba(255,255,255,.9) 100%);}
.hlines{position:absolute;inset:0;pointer-events:none;}
.hl{position:absolute;top:0;bottom:0;width:1px;background:rgba(0,0,0,.05);}
.hl:nth-child(1){left:25%;}.hl:nth-child(2){left:50%;}.hl:nth-child(3){left:75%;}
.hi{position:relative;z-index:2;max-width:1200px;width:100%;}
.htag{font-size:.68rem;font-weight:300;letter-spacing:.12em;color:var(--g3);margin-bottom:1.5rem;display:flex;align-items:center;gap:1.2rem;opacity:0;transform:translateY(16px);animation:fadeUp .8s ease .3s forwards;}
.htag::before{content:'';display:block;width:28px;height:1px;background:var(--g4);}
.hh1{font-size:clamp(3rem,7.5vw,8rem);font-weight:200;letter-spacing:-.02em;line-height:.96;margin-bottom:2.5rem;color:var(--blk);opacity:0;transform:translateY(24px);animation:fadeUp 1s ease .5s forwards;}
.hbot{display:flex;align-items:flex-end;justify-content:space-between;opacity:0;transform:translateY(16px);animation:fadeUp .8s ease .9s forwards;}
.hsub{font-size:.82rem;font-weight:300;line-height:1.85;color:var(--g2);max-width:380px;}
.hcta{display:flex;flex-direction:column;align-items:flex-end;gap:1.2rem;}
.btn-blk{font-size:.72rem;font-weight:400;letter-spacing:.04em;background:var(--blk);color:var(--w);padding:.85rem 2.2rem;text-decoration:none;display:inline-block;transition:background .25s,transform .3s;border:none;cursor:none;}
.btn-blk:hover{background:var(--brand);transform:translateY(-2px);}
.btn-ghost{font-size:.72rem;font-weight:300;letter-spacing:.04em;color:var(--blk);text-decoration:none;display:flex;align-items:center;gap:.8rem;transition:gap .3s;}
.btn-ghost:hover{gap:1.4rem;}
.shint{position:absolute;bottom:3rem;right:3.5rem;display:flex;flex-direction:column;align-items:center;gap:.5rem;color:var(--g4);font-size:.62rem;letter-spacing:.14em;opacity:0;animation:fadeIn .8s ease 1.4s forwards;}
.stk{width:1px;height:44px;background:linear-gradient(to bottom,var(--brand),transparent);animation:tkPulse 2s ease-in-out infinite;}

/* TICKER */
.ticker{border-top:1px solid var(--line);border-bottom:1px solid var(--line);overflow:hidden;padding:.8rem 0;white-space:nowrap;background:var(--w);}
.tt{display:inline-flex;gap:3rem;animation:ticker 28s linear infinite;}
.ti{font-size:.66rem;font-weight:300;letter-spacing:.12em;color:var(--g4);display:flex;align-items:center;gap:2rem;}
.ti::after{content:'·';font-size:.9rem;color:var(--g5);}

/* ABOUT */
.about{padding:9rem 3.5rem;max-width:1300px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:8rem;align-items:center;}
.sec-label{font-size:.66rem;font-weight:400;letter-spacing:.12em;text-transform:uppercase;color:var(--brand);margin-bottom:2rem;display:flex;align-items:center;gap:1rem;}
.sec-label::before{content:'';display:block;width:20px;height:1px;background:var(--brand);}
.h2{font-size:clamp(1.9rem,3vw,3rem);font-weight:200;line-height:1.15;letter-spacing:-.02em;margin-bottom:2rem;color:var(--blk);}
.bt{font-size:.84rem;font-weight:300;line-height:1.95;color:var(--g2);margin-bottom:1.5rem;}
.mets{display:grid;grid-template-columns:repeat(3,1fr);gap:2rem;margin-top:3rem;padding-top:3rem;border-top:1px solid var(--line);}
.mn{font-size:2.6rem;font-weight:200;letter-spacing:-.02em;line-height:1;margin-bottom:.4rem;color:var(--blk);}
.ml{font-size:.64rem;font-weight:300;letter-spacing:.1em;text-transform:uppercase;color:var(--g4);}
.avis{position:relative;}
.aimg{width:100%;height:620px;object-fit:cover;display:block;}
.aframe{position:absolute;bottom:-1.5rem;left:-1.5rem;width:100px;height:130px;border:1px solid var(--g6);z-index:-1;}
.atag{position:absolute;top:2rem;right:-1rem;background:var(--brand);color:var(--w);padding:.75rem 1.1rem;font-size:.62rem;font-weight:300;letter-spacing:.12em;text-transform:uppercase;writing-mode:vertical-lr;}

/* SERVICES */
.services{border-top:1px solid var(--line);background:var(--off);}
.svtop{padding:6rem 3.5rem 5rem;max-width:1300px;margin:0 auto;display:grid;grid-template-columns:1fr 1fr;gap:6rem;align-items:end;}
.svdesc{font-size:.84rem;font-weight:300;line-height:1.9;color:var(--g2);}
.svgrid{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line);}
.svc{padding:3.5rem 3rem;border-right:1px solid var(--line);position:relative;overflow:hidden;background:var(--off);cursor:none;}
.svc:last-child{border-right:none;}
.svc::after{content:'';position:absolute;left:0;top:0;width:0;height:100%;background:var(--brand);transition:width .5s cubic-bezier(.25,.46,.45,.94);z-index:0;}
.svc:hover::after{width:100%;}
.svc:hover .sn,.svc:hover .st,.svc:hover .sd,.svc:hover .sl{color:var(--w);}
.svc *{position:relative;z-index:1;transition:color .25s;}
.sn{font-size:3rem;font-weight:200;color:var(--g6);line-height:1;margin-bottom:1.8rem;}
.st{font-size:1.1rem;font-weight:400;margin-bottom:1rem;color:var(--blk);}
.sd{font-size:.8rem;font-weight:300;line-height:1.9;color:var(--g2);margin-bottom:2rem;}
.sl{font-size:.68rem;font-weight:400;letter-spacing:.06em;color:var(--g3);text-decoration:none;display:flex;align-items:center;gap:.6rem;transition:gap .3s,color .3s;}
.svc:hover .sl{gap:1.2rem;}

/* PROJECTS */
.projects{padding:8rem 3.5rem;background:var(--w);}
.ptop{max-width:1300px;margin:0 auto 4rem;display:flex;justify-content:space-between;align-items:flex-end;}
.filts{display:flex;gap:.7rem;flex-wrap:wrap;}
.filt{background:none;border:1px solid var(--g6);color:var(--g3);cursor:none;font-family:'Inter',sans-serif;font-size:.68rem;font-weight:300;letter-spacing:.04em;padding:.4rem 1rem;transition:all .2s;}
.filt.on,.filt:hover{background:var(--brand);border-color:var(--brand);color:var(--w);}
.pgrid{max-width:1300px;margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr);gap:3px;}
.proj{position:relative;overflow:hidden;cursor:none;}
.proj.tall{grid-row:span 2;}
.pimg{width:100%;height:320px;object-fit:cover;display:block;transform:scale(1.06);transition:transform 1.1s cubic-bezier(.25,.46,.45,.94),clip-path 1.1s cubic-bezier(.25,.46,.45,.94);clip-path:inset(0 100% 0 0);}
.pimg.revealed{clip-path:inset(0 0% 0 0);}
.proj.tall .pimg{height:100%;min-height:645px;}
.proj:hover .pimg{transform:scale(1);}
.pinfo{position:absolute;bottom:0;left:0;right:0;padding:1.6rem 2rem;background:linear-gradient(to top,rgba(255,255,255,.97) 0%,rgba(255,255,255,.5) 70%,transparent 100%);opacity:.82;transition:opacity .3s;}
.proj:hover .pinfo{opacity:1;}
.pcat{font-size:.62rem;font-weight:300;letter-spacing:.1em;text-transform:uppercase;color:var(--g3);margin-bottom:.3rem;}
.pname{font-size:1rem;font-weight:400;margin-bottom:.2rem;color:var(--blk);}
.ploc{font-size:.7rem;color:var(--g4);font-weight:300;}
.parr{position:absolute;top:1.2rem;right:1.2rem;width:32px;height:32px;border:1px solid var(--g5);background:rgba(255,255,255,.92);display:flex;align-items:center;justify-content:center;opacity:0;transform:translate(4px,-4px);transition:opacity .3s,transform .3s;}
.proj:hover .parr{opacity:1;transform:translate(0,0);}

/* LIGHTBOX */
#lbox{position:fixed;inset:0;z-index:600;display:flex;flex-direction:column;background:rgba(255,255,255,.99);opacity:0;pointer-events:none;transition:opacity .3s;}
#lbox.open{opacity:1;pointer-events:all;}
.lbox-top{display:flex;align-items:center;justify-content:space-between;padding:1.2rem 2.5rem;border-bottom:1px solid var(--line);flex-shrink:0;}
.lbox-meta{display:flex;flex-direction:column;gap:.25rem;}
.lbox-type{font-size:.64rem;font-weight:300;letter-spacing:.1em;text-transform:uppercase;color:var(--g4);}
.lbox-title{font-size:1rem;font-weight:400;color:var(--blk);}
.lbox-loc{font-size:.7rem;color:var(--g4);font-weight:300;}
.lbox-close{background:none;border:1px solid var(--g6);cursor:none;font-size:.7rem;font-weight:300;letter-spacing:.06em;color:var(--g3);font-family:'Inter',sans-serif;transition:all .2s;padding:.4rem 1rem;}
.lbox-close:hover{background:var(--brand);color:var(--w);border-color:var(--brand);}
.lbox-body{display:flex;flex:1;min-height:0;overflow:hidden;}
.lbox-main{flex:1;position:relative;display:flex;align-items:center;justify-content:center;background:var(--g7);overflow:hidden;}
/* position:absolute keeps the image inside the overflow:hidden container
   without ever driving the container's dimensions — prevents portrait/landscape
   images from overlapping or shifting the layout when the src changes */
.lbox-main-img{
  position:absolute;top:0;left:0;right:0;bottom:0;
  margin:auto;
  width:auto;height:auto;
  max-width:100%;max-height:100%;
  object-fit:contain;display:block;
  transition:opacity .2s;
}
.lbox-nav{position:absolute;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.92);border:1px solid var(--g5);width:42px;height:42px;display:flex;align-items:center;justify-content:center;cursor:none;transition:background .2s;}
.lbox-nav:hover{background:var(--brand);}
.lbox-nav:hover svg path{stroke:#fff;}
.lbox-prev{left:1.5rem;}.lbox-next{right:1.5rem;}
.lbox-counter{position:absolute;bottom:1rem;left:50%;transform:translateX(-50%);font-size:.62rem;font-weight:300;letter-spacing:.1em;color:var(--g3);background:rgba(255,255,255,.85);padding:.3rem .8rem;}
.lbox-spinner{display:none;position:absolute;top:50%;left:50%;width:32px;height:32px;margin:-16px 0 0 -16px;border:2px solid var(--g6);border-top-color:var(--brand);border-radius:50%;animation:lbox-spin .7s linear infinite;}
@keyframes lbox-spin{to{transform:rotate(360deg);}}
.lbox-strip{width:150px;flex-shrink:0;overflow-y:auto;border-left:1px solid var(--line);padding:.5rem;display:flex;flex-direction:column;gap:4px;scrollbar-width:thin;scrollbar-color:var(--g5) transparent;}
.lbox-strip::-webkit-scrollbar{width:3px;}.lbox-strip::-webkit-scrollbar-thumb{background:var(--g5);}
.lbox-thumb{width:100%;aspect-ratio:4/3;object-fit:cover;cursor:none;opacity:.45;transition:opacity .2s;border:2px solid transparent;flex-shrink:0;}
.lbox-thumb.active{opacity:1;border-color:var(--brand);}.lbox-thumb:hover{opacity:.8;}
.lbox-desc{padding:.9rem 2.5rem;font-size:.8rem;font-weight:300;line-height:1.75;color:var(--g2);border-bottom:1px solid var(--line);background:var(--brand-lt);flex-shrink:0;}

/* PHILOSOPHY */
.phil{padding:8rem 3.5rem;background:var(--brand);color:var(--w);text-align:center;}
.pq{font-size:clamp(1.3rem,2.5vw,2.4rem);font-weight:200;line-height:1.55;margin:2rem auto 3.5rem;max-width:800px;color:rgba(255,255,255,.88);}
.pdiv{display:flex;align-items:center;gap:2rem;justify-content:center;margin-bottom:3.5rem;}
.pdiv::before,.pdiv::after{content:'';flex:1;max-width:50px;height:1px;background:rgba(255,255,255,.1);}
.pdiv span{font-size:.62rem;font-weight:300;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.3);}
.btn-w{font-size:.72rem;font-weight:400;letter-spacing:.04em;background:var(--w);color:var(--blk);padding:.85rem 2.4rem;text-decoration:none;display:inline-block;transition:background .2s,transform .3s;border:none;cursor:none;}
.btn-w:hover{background:var(--g6);transform:translateY(-2px);}

/* PROCESS */
.process{padding:8rem 3.5rem;border-top:1px solid var(--line);background:var(--w);}
.prin{max-width:1300px;margin:0 auto;}
.prhead{display:grid;grid-template-columns:1fr 1fr;gap:6rem;align-items:end;margin-bottom:5rem;}
.prsteps{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--line);}
.step{padding:2.5rem 2rem;border-right:1px solid var(--line);}
.step:last-child{border-right:none;}
.snum{font-size:.62rem;font-weight:300;letter-spacing:.14em;text-transform:uppercase;color:var(--brand);margin-bottom:1.5rem;display:flex;align-items:center;gap:.7rem;}
.snum::before{content:'';display:block;width:18px;height:1px;background:var(--brand);}
.stitl{font-size:1rem;font-weight:400;margin-bottom:.8rem;color:var(--blk);}
.sdesc{font-size:.78rem;font-weight:300;line-height:1.9;color:var(--g3);}

/* CONTACT */
.contact{padding:9rem 3.5rem;max-width:1300px;margin:0 auto;display:grid;grid-template-columns:1fr 1.2fr;gap:8rem;align-items:start;}
.ciblock{display:flex;flex-direction:column;margin-top:3rem;}
.cirow{padding:1.4rem 0;border-bottom:1px solid var(--line);display:flex;align-items:flex-start;gap:1.4rem;}
.cicon{width:28px;height:28px;flex-shrink:0;border:1px solid var(--g6);display:flex;align-items:center;justify-content:center;color:var(--g4);}
.cval{font-size:.8rem;font-weight:300;line-height:1.7;color:var(--g2);}
.map-link{color:inherit;text-decoration:none;border-bottom:1px solid var(--brand-mid);transition:border-color .2s,color .2s;}
.map-link:hover{color:var(--brand);border-bottom-color:var(--brand);}
.cval strong{display:block;font-weight:400;color:var(--g4);font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;margin-bottom:.25rem;}
.form{display:flex;flex-direction:column;}
.fg{position:relative;border-bottom:1px solid var(--line);transition:border-color .3s;}
.fg:focus-within{border-bottom-color:var(--brand);}
.fg label{position:absolute;top:1.3rem;left:0;font-size:.62rem;font-weight:300;letter-spacing:.08em;text-transform:uppercase;color:var(--g4);transition:all .3s;pointer-events:none;}
.fg input:focus+label,.fg input:not(:placeholder-shown)+label,
.fg textarea:focus+label,.fg textarea:not(:placeholder-shown)+label{top:.4rem;font-size:.54rem;color:var(--g3);}
.fg input,.fg textarea,.fg select{width:100%;background:none;border:none;outline:none;padding:2rem 0 .75rem;font-family:'Inter',sans-serif;font-size:.84rem;font-weight:300;color:var(--blk);}
.fg select option{background:var(--w);}
.fg textarea{resize:none;height:95px;}
.ffoot{margin-top:2.5rem;display:flex;justify-content:flex-end;}

/* FOOTER */
footer{border-top:1px solid var(--line);padding:2.5rem 3.5rem;display:flex;justify-content:space-between;align-items:center;background:var(--w);}
.fl img{height:24px;width:auto;}
.fc{font-size:.64rem;font-weight:300;color:var(--g4);}
.fsoc{display:flex;gap:1rem;}
.soc{width:28px;height:28px;border:1px solid var(--g6);display:flex;align-items:center;justify-content:center;color:var(--g4);text-decoration:none;font-size:.62rem;font-weight:300;transition:all .2s;}
.soc:hover{border-color:var(--brand);color:var(--brand);}

@keyframes slideUp{to{transform:translateY(0);}}
@keyframes pbFill{to{transform:scaleX(1);}}
@keyframes fadeUp{to{opacity:1;transform:translateY(0);}}
@keyframes fadeIn{to{opacity:1;}}
@keyframes ticker{to{transform:translateX(-50%);}}
@keyframes tkPulse{0%,100%{opacity:1;}50%{opacity:.2;}}
.r{opacity:0;transform:translateY(28px);transition:opacity .8s ease,transform .8s ease;}
.r.v{opacity:1;transform:translateY(0);}
.r1{transition-delay:.1s;}.r2{transition-delay:.2s;}.r3{transition-delay:.3s;}.r4{transition-delay:.4s;}

@media(max-width:960px){
  nav{padding:1.2rem 1.5rem;}.nl{display:none;}
  .hero{padding:0 1.5rem 4rem;}
  .hbot{flex-direction:column;align-items:flex-start;gap:2rem;}
  .about{grid-template-columns:1fr;gap:4rem;padding:5rem 1.5rem;}.avis{order:-1;}
  .svtop{grid-template-columns:1fr;gap:2.5rem;padding:4rem 1.5rem 3rem;}
  .svgrid{grid-template-columns:1fr;}.svc{border-right:none;border-bottom:1px solid var(--line);padding:2.5rem 1.5rem;}
  .projects{padding:5rem 1.5rem;}
  .ptop{flex-direction:column;gap:1.5rem;align-items:flex-start;}
  .pgrid{grid-template-columns:1fr 1fr;}.proj.tall{grid-row:auto;}.proj.tall .pimg{min-height:auto;}
  .prhead{grid-template-columns:1fr;gap:2rem;}.prsteps{grid-template-columns:1fr 1fr;}.step{border-bottom:1px solid var(--line);}
  .lbox-strip{width:100px;}.lbox-desc{font-size:.74rem;padding:.7rem 1.5rem;}
  .contact{grid-template-columns:1fr;gap:4rem;padding:5rem 1.5rem;}
  footer{flex-direction:column;gap:1.5rem;padding:2rem 1.5rem;text-align:center;}
}

/* HONEYPOT — hide from real users, visible to bots */
.hp-field{position:absolute;left:-9999px;top:-9999px;width:1px;height:1px;overflow:hidden;opacity:0;pointer-events:none;tab-index:-1;}

/* FORM FEEDBACK MESSAGES */
.form-msg{font-size:.76rem;font-weight:300;letter-spacing:.03em;line-height:1.7;padding:.75rem 1rem;margin-bottom:1rem;display:none;border-left:2px solid transparent;}
.form-msg--ok{display:block;color:#195f3c;background:rgba(25,95,60,.07);border-color:#195f3c;}
.form-msg--err{display:block;color:#b91c1c;background:rgba(185,28,28,.07);border-color:#b91c1c;}


/* ==========================================================
   HAMBURGER BUTTON
   ========================================================== */
.nav-toggle{
  display:none;           /* hidden on desktop — shown only inside ≤960px */
  flex-direction:column;
  justify-content:center;
  align-items:center;
  gap:6px;                /* 6px between each of the three lines */
  width:44px;height:44px;
  background:none;border:none;
  cursor:pointer;padding:0;
  position:relative;z-index:200;
  flex-shrink:0;
}
.nav-toggle span{
  display:block;
  width:28px;             /* 28px wide */
  height:3px;             /* 3px thick */
  background:var(--blk);
  border-radius:2px;
  transition:transform .3s ease,opacity .3s ease,width .3s ease;
  transform-origin:center;
}
/* X animation:
   With height:3px and gap:6px the center-to-center distance
   between outer lines is (3+6) = 9px, so translateY by ±9px. */
.nav-toggle.open span:nth-child(1){transform:translateY(9px) rotate(45deg);}
.nav-toggle.open span:nth-child(2){opacity:0;width:0;}
.nav-toggle.open span:nth-child(3){transform:translateY(-9px) rotate(-45deg);}

/* ==========================================================
   MOBILE FULL-SCREEN MENU
   — display:none on desktop; only rendered when hamburger is shown
   ========================================================== */
.mobile-menu{
  display:none;           /* completely off on desktop */
  position:fixed;inset:0;z-index:150;
  background:var(--w);
  align-items:center;justify-content:center;
  opacity:0;pointer-events:none;
  transition:opacity .35s ease;
}
.mobile-menu.open{opacity:1;pointer-events:all;}
.mobile-menu-inner{
  display:flex;flex-direction:column;
  align-items:center;gap:2.5rem;text-align:center;
}
.mm-link{
  font-size:clamp(1.6rem,6vw,2.4rem);
  font-weight:200;letter-spacing:-.01em;
  color:var(--blk);text-decoration:none;
  display:flex;align-items:center;justify-content:center;
  min-height:44px;
  transition:color .2s;
}
.mm-link:hover,.mm-link:focus{color:var(--brand);}
.mm-cta{
  font-size:.76rem;font-weight:400;
  letter-spacing:.04em;
  background:var(--blk);color:var(--w) !important;
  padding:.9rem 2.8rem;margin-top:1rem;
  min-height:48px;min-width:160px;
}
.mm-cta:hover,.mm-cta:focus{background:var(--brand);}

/* ==========================================================
   TOUCH / MOBILE — suppress custom cursor
   Three CSS layers to complement the JS layers in cursor.js:

   Layer A  @media(pointer:coarse)
            Matches any device whose primary input is coarse
            (finger/stylus). Does NOT require hover:none so it
            catches more devices. Uses !important to beat the
            inline style="cursor:none" on the submit button.

   Layer B  @media(max-width:768px)
            Width-based fallback for narrow screens. Redundant
            with Layer A on most phones but catches edge-cases
            where pointer:coarse isn't reported correctly.

   Layer C  @media(hover:none) and (pointer:coarse)
            Original combined rule kept as a third safety net.
   ========================================================== */

/* --- Layer A: any coarse-pointer (touch / stylus) device --- */
@media(pointer:coarse){
  #cur,#cur-ring{display:none !important;}
  body{cursor:auto !important;}
  /* Restore pointer cursor on every element that had cursor:none.
     !important is required to override the inline style="cursor:none"
     on the submit button (#fbtn). */
  body *{cursor:auto !important;}
  a,button,
  .nbtn,.btn-blk,.btn-ghost,.btn-w,
  .svc,.filt,.proj,.sl,
  .lbox-close,.lbox-nav,.lbox-thumb,
  .nav-toggle,.mm-link{cursor:pointer !important;}
}

/* --- Layer B: narrow screen width --- */
@media(max-width:768px){
  #cur,#cur-ring{display:none !important;}
  body{cursor:auto !important;}
  body *{cursor:auto !important;}
  a,button,
  .nbtn,.btn-blk,.btn-ghost,.btn-w,
  .svc,.filt,.proj,.sl,
  .lbox-close,.lbox-nav,.lbox-thumb,
  .nav-toggle,.mm-link{cursor:pointer !important;}
}

/* --- Layer C: original combined rule (safety net) --- */
@media(hover:none)and(pointer:coarse){
  #cur,#cur-ring{display:none !important;}
  body{cursor:auto !important;}
  a,button,
  .nbtn,.btn-blk,.btn-ghost,.btn-w,
  .svc,.filt,.proj,.sl,
  .lbox-close,.lbox-nav,.lbox-thumb,
  .nav-toggle,.mm-link{cursor:pointer !important;}
}

/* ==========================================================
   BREAKPOINT ≤ 1024px  (small laptops / tablets landscape)
   ========================================================== */
@media(max-width:1024px){
  .about{gap:5rem;}
  .contact{gap:5rem;}
}

/* ==========================================================
   BREAKPOINT ≤ 960px  — show hamburger, general tablet fixes
   (supplements the existing 960px block above)
   ========================================================== */
@media(max-width:960px){
  .nav-toggle{display:flex;}         /* show hamburger */
  .mobile-menu{display:flex;}        /* allow overlay to render (opacity still 0 until .open) */

  /* Hero */
  .hh1{font-size:clamp(2.6rem,8vw,5.5rem);}
  .shint{display:none;}

  /* About image */
  .aimg{height:420px;}
  .aframe,.atag{display:none;}

  /* Services — disable fill-sweep on mobile (hover only) */
  .svc::after{display:none;}

  /* Process */
  .process{padding:5rem 1.5rem;}
  .prin{max-width:100%;}

  /* Philosophy */
  .phil{padding:5rem 1.5rem;}

  /* Lightbox: hide thumbnail strip, stack vertically */
  .lbox-strip{display:none;}
  .lbox-body{flex-direction:column;}
  /* Fixed height so portrait/landscape src swaps never resize the box */
  .lbox-main{height:60vh;flex:none;}
  .lbox-nav{width:52px;height:52px;}
}

/* ==========================================================
   BREAKPOINT ≤ 768px  (phones landscape / small tablets)
   ========================================================== */
@media(max-width:768px){
  /* --- NAV --- */
  nav{padding:1rem 1.25rem;}
  nav.stuck{padding:.85rem 1.25rem;}

  /* --- HERO --- */
  .hero{padding:0 1.25rem 3.5rem;min-height:100svh;}
  .hh1{font-size:clamp(2.2rem,9vw,4rem);line-height:1.02;}
  .hsub{font-size:.8rem;max-width:100%;}
  .hbot{gap:2rem;}
  .hcta{width:100%;align-items:stretch;}
  .btn-blk{
    width:100%;text-align:center;
    min-height:48px;
    display:flex;align-items:center;justify-content:center;
    padding:.9rem 1.5rem;
  }
  .btn-ghost{justify-content:flex-start;}

  /* --- ABOUT --- */
  .about{padding:4rem 1.25rem;gap:3rem;}
  .aimg{height:300px;}
  .mets{gap:1rem;}
  .mn{font-size:2rem;}

  /* --- SERVICES --- */
  .svtop{padding:3.5rem 1.25rem 2.5rem;}
  .svc{padding:2rem 1.25rem;}

  /* --- PROJECTS --- */
  .projects{padding:4rem 1.25rem;}
  .pgrid{grid-template-columns:1fr 1fr;gap:2px;}
  .pimg{height:220px;}
  .pinfo{opacity:1;}
  .parr{display:none;}

  /* --- PHILOSOPHY --- */
  .phil{padding:4rem 1.25rem;}
  .pq{font-size:clamp(1.1rem,4vw,1.8rem);}

  /* --- PROCESS --- */
  .process{padding:4rem 1.25rem;}
  .prhead{gap:1.5rem;margin-bottom:3rem;}
  .prsteps{grid-template-columns:1fr;}
  .step{border-right:none;border-bottom:1px solid var(--line);padding:2rem 1.25rem;}
  .step:last-child{border-bottom:none;}

  /* --- CONTACT / FORM --- */
  .contact{padding:4rem 1.25rem;}
  /* font-size:1rem prevents iOS auto-zoom on input focus */
  .fg input,.fg textarea,.fg select{font-size:1rem;}
  .fg label{font-size:.68rem;}
  .fg textarea{height:110px;}
  .ffoot{justify-content:stretch;}
  .ffoot .btn-blk{
    width:100%;text-align:center;
    min-height:48px;
    display:flex;align-items:center;justify-content:center;
  }

  /* --- FOOTER --- */
  footer{padding:2rem 1.25rem;}

  /* --- LIGHTBOX --- */
  .lbox-top{padding:1rem 1.25rem;}
  .lbox-desc{padding:.75rem 1.25rem;}
  .lbox-nav{width:48px;height:48px;}
  .lbox-prev{left:.75rem;}
  .lbox-next{right:.75rem;}
}

/* ==========================================================
   BREAKPOINT ≤ 480px  (phones portrait)
   ========================================================== */
@media(max-width:480px){
  /* NAV */
  nav{padding:.9rem 1rem;}
  .logo img{height:22px;}

  /* HERO */
  .hero{padding:0 1rem 3rem;}
  .htag{font-size:.6rem;gap:.8rem;margin-bottom:1rem;}
  .hh1{font-size:clamp(2rem,10vw,3.2rem);margin-bottom:1.5rem;}
  .hsub{font-size:.78rem;line-height:1.75;}

  /* ABOUT */
  .about{padding:3rem 1rem;}
  .mets{gap:.5rem;}
  .mn{font-size:1.7rem;}
  .ml{font-size:.58rem;}

  /* SERVICES */
  .svtop{padding:3rem 1rem 2rem;}
  .svc{padding:1.75rem 1rem;}
  .st{font-size:.95rem;}
  .services{padding-bottom:.5rem;}

  /* PROJECTS */
  .projects{padding:3rem 1rem;}
  .pgrid{grid-template-columns:1fr;}
  .proj.tall .pimg{min-height:auto;}
  .pimg{height:260px;}

  /* PHILOSOPHY */
  .phil{padding:3.5rem 1rem;}

  /* PROCESS */
  .process{padding:3rem 1rem;}
  .step{padding:1.75rem 1rem;}

  /* CONTACT */
  .contact{padding:3rem 1rem;}
  .cirow{gap:1rem;}

  /* FOOTER */
  footer{padding:1.75rem 1rem;}
  .fc{font-size:.6rem;}
}

/* ==========================================================
   BREAKPOINT ≤ 320px  (very small phones)
   ========================================================== */
@media(max-width:320px){
  .hh1{font-size:1.9rem;}
  .mets{grid-template-columns:1fr;}
  .pgrid{grid-template-columns:1fr;}
  nav{padding:.75rem .85rem;}
}