:root{
  --bg:#0a0a0b; --bg2:#101012; --ivory:#efe9df; --muted:#9a948a; --line:rgba(239,233,223,.14);
  --red:#b3261a; --red-soft:#d4503f; --serif:'Cormorant Garamond','Cormorant',Georgia,'Times New Roman',serif;
  --sans:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --ease:cubic-bezier(.2,.7,.1,1); --gutter:clamp(20px,5vw,72px);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{background:var(--bg);color:var(--ivory);font-family:var(--sans);font-weight:300;line-height:1.7;overflow-x:hidden;-webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}
::selection{background:var(--red);color:#fff}
.grain{position:fixed;inset:0;pointer-events:none;z-index:50;opacity:.07;mix-blend-mode:overlay;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1  0 0 0 0 1  0 0 0 0 1  0 0 0 .9 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}

/* nav */
.nav{position:fixed;top:0;left:0;right:0;z-index:40;display:flex;align-items:center;justify-content:space-between;
  padding:22px var(--gutter);transition:background .5s var(--ease),padding .5s var(--ease),border-color .5s;border-bottom:1px solid transparent}
.nav.scrolled{background:rgba(10,10,11,.72);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);padding:14px var(--gutter);border-color:var(--line)}
.nav img{height:24px;width:auto;display:block}
.nav ul{display:flex;gap:clamp(18px,3vw,44px);list-style:none}
.nav ul a{font-size:.72rem;letter-spacing:.22em;text-transform:uppercase;color:var(--muted);position:relative;padding:6px 0;transition:color .4s}
.nav ul a::after{content:"";position:absolute;left:0;bottom:0;height:1px;width:100%;background:var(--red-soft);transform:scaleX(0);transform-origin:left;transition:transform .6s var(--ease)}
.nav ul a:hover{color:var(--ivory)} .nav ul a:hover::after{transform:scaleX(1)}

/* hero */
.hero{position:relative;min-height:100svh;display:flex;align-items:flex-end;padding:0 var(--gutter) clamp(48px,9vh,110px);overflow:hidden;isolation:isolate}
#lattice{position:absolute;inset:0;width:100%;height:100%;z-index:-1;
  -webkit-mask-image:radial-gradient(ellipse 75% 85% at 72% 42%,#000 25%,transparent 78%);mask-image:radial-gradient(ellipse 75% 85% at 72% 42%,#000 25%,transparent 78%)}
.hero::after{content:"";position:absolute;inset:0;z-index:-2;background:radial-gradient(ellipse 60% 55% at 74% 40%,rgba(179,38,26,.20),transparent 70%)}
.hero-inner{max-width:1200px;width:100%}
.eyebrow{font-size:.72rem;letter-spacing:.34em;text-transform:uppercase;color:var(--red-soft);display:flex;align-items:center;gap:16px;margin-bottom:clamp(20px,3vh,36px)}
.eyebrow::before{content:"";width:48px;height:1px;background:var(--red-soft)}
h1{font-family:var(--serif);font-weight:300;font-size:clamp(3rem,9.2vw,8.6rem);line-height:.95;letter-spacing:-.02em}
h1 em{font-style:italic;color:var(--red-soft);font-weight:300}
h1 .line{display:block;overflow:hidden;padding-bottom:.06em}
h1 .line span{display:inline-block;transform:translateY(105%);animation:rise 1.4s var(--ease) forwards}
h1 .line:nth-child(2) span{animation-delay:.18s}
.hero-sub{max-width:34rem;margin-top:clamp(24px,4vh,44px);color:var(--muted);font-size:clamp(.95rem,1.2vw,1.08rem);opacity:0;animation:fade 1.6s .7s var(--ease) forwards}
.scroll-cue{position:absolute;right:var(--gutter);bottom:clamp(48px,9vh,110px);display:flex;flex-direction:column;align-items:center;gap:14px;
  font-size:.62rem;letter-spacing:.34em;text-transform:uppercase;color:var(--muted);writing-mode:vertical-rl;opacity:0;animation:fade 1.6s 1.2s forwards}
.scroll-cue::after{content:"";width:1px;height:64px;background:linear-gradient(var(--red-soft),transparent);animation:drip 2.4s ease-in-out infinite}
@keyframes rise{to{transform:none}} @keyframes fade{to{opacity:1}}
@keyframes drip{0%{transform:scaleY(0);transform-origin:top}50%{transform:scaleY(1);transform-origin:top}51%{transform-origin:bottom}100%{transform:scaleY(0);transform-origin:bottom}}

/* marquee */
.marquee{border-block:1px solid var(--line);overflow:hidden;white-space:nowrap;padding:22px 0;background:var(--bg2)}
.marquee-track{display:inline-flex;gap:3rem;animation:slide 48s linear infinite;will-change:transform}
.marquee span{font-family:var(--serif);font-style:italic;font-size:clamp(1.4rem,3vw,2.4rem);color:transparent;-webkit-text-stroke:1px rgba(239,233,223,.45);display:inline-flex;align-items:center;gap:3rem}
.marquee span::after{content:"";width:9px;height:9px;background:var(--red);transform:rotate(45deg)}
@keyframes slide{to{transform:translateX(-50%)}}

/* sections */
section{padding:clamp(80px,14vw,200px) var(--gutter)}
.wrap{max-width:1200px;margin:0 auto}
.label{font-size:.7rem;letter-spacing:.34em;text-transform:uppercase;color:var(--red-soft);margin-bottom:clamp(28px,5vw,64px);display:flex;align-items:center;gap:16px}
.label i{font-style:normal;color:var(--muted)}
.statement{font-family:var(--serif);font-weight:300;font-size:clamp(1.9rem,4.6vw,4.2rem);line-height:1.18;letter-spacing:-.01em;max-width:21em}
.statement .w{opacity:.14;transition:opacity .5s linear}
.statement .w.on{opacity:1}
.statement em{color:var(--red-soft)}

/* company split with photograph */
.split{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:clamp(32px,6vw,96px);align-items:center}
.split .statement{max-width:none}
.frame{position:relative;overflow:hidden;aspect-ratio:3/4;max-height:78vh;justify-self:end;width:min(100%,420px);border:1px solid var(--line)}
.frame img{position:absolute;inset:-8% 0;width:100%;height:116%;object-fit:cover;will-change:transform;filter:saturate(.85)}
.frame::after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(10,10,11,.45),transparent 45%);pointer-events:none}

/* practice */
.practice{background:var(--bg2);border-top:1px solid var(--line)}
.rows{border-top:1px solid var(--line)}
.row{display:grid;grid-template-columns:90px 1fr 1.2fr;gap:clamp(16px,4vw,64px);align-items:baseline;padding:clamp(28px,4vw,52px) 0;border-bottom:1px solid var(--line);position:relative;transition:padding .6s var(--ease)}
.row::before{content:"";position:absolute;left:0;bottom:-1px;height:1px;width:100%;background:var(--red-soft);transform:scaleX(0);transform-origin:left;transition:transform .9s var(--ease)}
.row:hover::before{transform:scaleX(1)} .row:hover{padding-left:12px}
.row .n{font-family:var(--serif);font-style:italic;color:var(--muted);font-size:1.3rem}
.row h3{font-family:var(--serif);font-weight:400;font-size:clamp(1.7rem,3.4vw,3rem);line-height:1.1;letter-spacing:-.01em;transition:color .5s}
.row:hover h3{color:var(--red-soft)}
.row p{color:var(--muted);max-width:30rem}

/* principles */
.principles{position:relative;overflow:hidden;isolation:isolate}
.principles .bgphoto{position:absolute;inset:-6% 0;width:100%;height:112%;object-fit:cover;z-index:-2;opacity:.4;filter:grayscale(.3) contrast(1.05);will-change:transform;
  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 22%,#000 78%,transparent);mask-image:linear-gradient(to bottom,transparent,#000 22%,#000 78%,transparent)}
.principles::after{content:"";position:absolute;inset:0;z-index:-1;background:radial-gradient(ellipse 80% 70% at 50% 50%,rgba(10,10,11,.55),rgba(10,10,11,.85))}
.cols{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(28px,5vw,80px);border-top:1px solid var(--line);padding-top:clamp(28px,4vw,52px)}
.col h3{font-family:var(--serif);font-weight:400;font-size:clamp(1.7rem,3vw,2.6rem);line-height:1.1;margin-bottom:16px}
.col p{color:var(--muted);max-width:22rem}
@media (max-width:760px){.cols{grid-template-columns:1fr}}

/* contact, with the Lisbon scene behind it */
.contact{position:relative;overflow:hidden;isolation:isolate;padding:0;min-height:clamp(600px,100vh,980px);display:flex;align-items:flex-end;justify-content:center;text-align:center;border-top:1px solid var(--line)}
.contact>img.scene{position:absolute;left:0;top:-6%;width:100%;height:112%;object-fit:cover;object-position:35% 50%;z-index:-2;will-change:transform;filter:saturate(.8) brightness(.78) contrast(1.05)}
.contact::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(to top,rgba(10,10,11,.95) 0,rgba(10,10,11,.82) 34%,rgba(10,10,11,.4) 52%,rgba(10,10,11,.08) 70%,rgba(10,10,11,.55) 100%)}
.contact-inner{text-shadow:0 1px 18px rgba(10,10,11,.9)}
.contact-inner{width:100%;padding:clamp(110px,16vh,150px) var(--gutter) clamp(40px,8vh,96px)}
.contact .label{justify-content:center;margin-bottom:clamp(18px,3vh,32px)}
.place{font-family:var(--serif);font-weight:300;font-size:clamp(1.5rem,3vw,2.4rem);line-height:1.1;letter-spacing:-.01em}
.place em{font-style:italic;color:var(--red-soft)}
.coords{margin:10px 0 clamp(28px,5vh,56px);font-size:.7rem;letter-spacing:.3em;text-transform:uppercase;color:var(--muted)}
.shimmer{animation:shimmer 7s ease-in-out infinite alternate} .shimmer:nth-child(2n){animation-duration:9s;animation-delay:-3s}
@keyframes shimmer{from{transform:translateX(-22px);opacity:.35}to{transform:translateX(22px);opacity:.9}}
/* enquiry form */
.enquiry{text-shadow:none;width:min(100%,520px);margin:0 auto;text-align:left;padding:clamp(22px,3vw,34px);background:rgba(10,10,11,.58);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid var(--line)}
.field{position:relative;margin-bottom:22px}
.field input,.field textarea{width:100%;background:transparent;border:0;border-bottom:1px solid rgba(239,233,223,.28);color:var(--ivory);font:inherit;font-size:1rem;padding:18px 0 8px;border-radius:0;outline:none;resize:none;transition:border-color .5s var(--ease)}
.field label{position:absolute;left:0;top:18px;font-size:.78rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);pointer-events:none;transition:all .4s var(--ease)}
.field input:focus,.field textarea:focus{border-color:var(--red-soft)}
.field input:focus+label,.field textarea:focus+label,.field input:not(:placeholder-shown)+label,.field textarea:not(:placeholder-shown)+label{top:0;font-size:.6rem;color:var(--red-soft)}
.field input:-webkit-autofill{-webkit-text-fill-color:var(--ivory);transition:background-color 9999s}
.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.enquiry button{margin-top:6px;width:100%;background:transparent;color:var(--ivory);border:1px solid rgba(239,233,223,.4);padding:15px 20px;font:inherit;font-size:.74rem;letter-spacing:.3em;text-transform:uppercase;cursor:pointer;position:relative;overflow:hidden;transition:color .5s var(--ease),border-color .5s var(--ease)}
.enquiry button::before{content:"";position:absolute;inset:0;background:var(--red);transform:scaleX(0);transform-origin:left;transition:transform .7s var(--ease);z-index:-1}
.enquiry button span{position:relative}
.enquiry button:hover,.enquiry button:focus-visible{border-color:var(--red);color:#fff;outline:none}
.enquiry button:hover::before,.enquiry button:focus-visible::before{transform:scaleX(1)}
.enquiry button:disabled{opacity:.55;cursor:wait}
.enquiry .status{min-height:1.4em;margin-top:14px;font-size:.88rem;color:var(--ivory);text-align:center}
.enquiry .status.err{color:var(--red-soft)}
.enquiry.sent .field,.enquiry.sent button,.enquiry.sent .note{display:none}
.enquiry.sent .status{font-family:var(--serif);font-size:1.5rem;line-height:1.3;padding:18px 0;min-height:0;margin:0}
.contact p.note{margin-top:14px;color:var(--muted);font-size:.78rem;text-align:center}
footer{border-top:1px solid var(--line);padding:32px var(--gutter);display:flex;justify-content:space-between;align-items:center;gap:20px;flex-wrap:wrap;color:var(--muted);font-size:.74rem;letter-spacing:.16em;text-transform:uppercase}
footer img{height:20px;width:auto;opacity:.85}

/* reveal */
.reveal{opacity:0;transform:translateY(34px);transition:opacity 1.2s var(--ease),transform 1.2s var(--ease);transition-delay:var(--d,0s)}
.reveal.in{opacity:1;transform:none}

@media (max-width:760px){
  .nav{padding:16px var(--gutter)} .nav.scrolled{padding:12px var(--gutter)}
  .nav img{height:20px}
  .nav ul{gap:18px} .nav ul li:first-child{display:none}
  .nav ul a{font-size:.64rem;letter-spacing:.18em}
  .eyebrow{font-size:.6rem;letter-spacing:.2em;gap:10px;line-height:1.7} .eyebrow::before{width:22px;flex:none}
  .contact{min-height:max(520px,78svh)}
  .contact>img.scene{object-position:30% 50%}
  .split{grid-template-columns:1fr} .frame{justify-self:start;width:min(100%,360px);aspect-ratio:4/3;max-height:none}
  .contact-inner{padding-bottom:44px}
  .place{font-size:1.35rem}
  .coords{font-size:.6rem;letter-spacing:.24em;margin:8px 0 26px}
  .enquiry{padding:20px} .field{margin-bottom:18px}
  .contact p.note{font-size:.8rem;margin-top:16px}
  footer{padding:24px var(--gutter);font-size:.62rem}

  .row{grid-template-columns:1fr;gap:8px} .row .n{font-size:1.1rem}
  .scroll-cue{display:none}
  #lattice{-webkit-mask-image:radial-gradient(ellipse 110% 60% at 60% 30%,#000 20%,transparent 80%);mask-image:radial-gradient(ellipse 110% 60% at 60% 30%,#000 20%,transparent 80%)}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.001s!important;animation-iteration-count:1!important;transition-duration:.001s!important}
  h1 .line span{transform:none} .hero-sub,.scroll-cue,.reveal{opacity:1;transform:none} .statement .w{opacity:1}
  .marquee-track{animation:none}
}
