/* Lesavra — site styles. Tokens from the Lesavra design system; fonts are self-hosted. */

/* ---------- fonts ---------- */
@font-face{font-family:Montserrat;font-style:normal;font-weight:200;font-display:swap;src:url(/fonts/montserrat-latin-200-normal.woff2?v=4760ae95e8) format("woff2")}
@font-face{font-family:Montserrat;font-style:normal;font-weight:300;font-display:swap;src:url(/fonts/montserrat-latin-300-normal.woff2?v=4760ae95e8) format("woff2")}
@font-face{font-family:Montserrat;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/montserrat-latin-400-normal.woff2?v=4760ae95e8) format("woff2")}
@font-face{font-family:Montserrat;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/montserrat-latin-500-normal.woff2?v=4760ae95e8) format("woff2")}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/jetbrains-mono-latin-400-normal.woff2?v=4760ae95e8) format("woff2")}
@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/jetbrains-mono-latin-500-normal.woff2?v=4760ae95e8) format("woff2")}

/* ---------- tokens ---------- */
:root{
  --ink-0:#000;--ink-50:#050505;--ink-100:#0a0a0a;--ink-300:#2a2a2a;--ink-400:#444;--ink-500:#6b6b6b;--ink-600:#8f8f8f;--ink-700:#b4b4b4;--ink-1000:#fff;
  /* Theme roles: dark values here; [data-theme=light] (the default, set on <html>) swaps the ramp. */
  --bg:var(--ink-0);--fg:var(--ink-1000);--rgb:255,255,255;
  --fg-1:var(--fg);--fg-2:var(--ink-700);--fg-3:var(--ink-600);--fg-4:var(--ink-500);
  --muted-inv:var(--ink-400); /* muted text on an inverted (fg-coloured) surface */
  --line-hair:rgba(var(--rgb),.08);--line-soft:rgba(var(--rgb),.12);--line-strong:rgba(var(--rgb),.2);
  --glow-sm:0 0 12px rgba(var(--rgb),.25);
  --mark-filter:none; /* white brand marks; inverted to black in light mode */
  --grain:.07;
  --font-display:Montserrat,ui-sans-serif,system-ui,sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace;
  --ease-out:cubic-bezier(.16,1,.3,1);--ease-in-out:cubic-bezier(.65,0,.35,1);
  --dur-1:120ms;--dur-2:240ms;--dur-3:480ms;--dur-4:900ms;
  --gutter:clamp(20px,4vw,64px);
  --section:clamp(96px,16vh,200px);
  color-scheme:dark;
}
:root[data-theme=light]{
  --bg:#f4f4f2;--fg:#0a0a0a;--rgb:10,10,10;
  --fg-2:#3d3d3d;--fg-3:#5f5f5f;--fg-4:#8a8a8a;
  --muted-inv:#9a9a9a;
  --line-hair:rgba(var(--rgb),.09);--line-soft:rgba(var(--rgb),.14);--line-strong:rgba(var(--rgb),.24);
  --glow-sm:0 0 12px rgba(var(--rgb),.12);
  --mark-filter:invert(1);
  --grain:.09;
  color-scheme:light;
}

/* ---------- base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{background:var(--bg);-webkit-text-size-adjust:100%;text-size-adjust:100%}
html.lenis,html.lenis body{height:auto}
.lenis.lenis-stopped{overflow:clip}
body{margin:0;background:var(--bg);color:var(--fg-1);font-family:var(--font-display);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:clip;overflow-wrap:break-word}
img,svg{display:block;max-width:100%}
a{color:inherit;text-decoration:none}
h1,h2,h3,p,ol{margin:0}
ol{padding:0;list-style:none}
::selection{background:var(--fg);color:var(--bg)}
:focus-visible{outline:1px solid var(--fg-1);outline-offset:4px}
main:focus{outline:none}
.sprite{position:absolute;width:0;height:0;overflow:hidden}
.skip{position:fixed;left:var(--gutter);top:-60px;z-index:300;padding:10px 14px;background:var(--fg);color:var(--bg);font:500 11px/1 var(--font-mono);letter-spacing:.24em;text-transform:uppercase}
.skip:focus{top:12px}
.icon{width:14px;height:14px;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dim{color:var(--fg-4)}
.eyebrow{display:block;font:400 11px/1.4 var(--font-mono);letter-spacing:.24em;text-transform:uppercase;color:var(--fg-3)}

/* Hero waits for its entrance animation; the fallback shows it anyway if the script never runs. */
.js:not(.is-ready) .hero__title,.js:not(.is-ready) .hero [data-fade],.js:not(.is-ready) .nav{opacity:0;animation:lsv-unhide 0s 3s forwards}

/* ---------- grain + loader ---------- */
.grain{position:fixed;inset:-50%;z-index:200;pointer-events:none;background:url(/assets/grain.webp?v=4760ae95e8) repeat;opacity:var(--grain);animation:lsv-grain 1s steps(6) infinite}
.loader{display:none}
.js .loader{position:fixed;inset:0;z-index:250;display:grid;place-items:center;background:var(--bg);animation:lsv-gone 0s 6s forwards}
.js.is-loaded .loader{display:none}
.loader__mark{width:clamp(80px,10vw,140px);height:auto;opacity:.9;filter:var(--mark-filter)}
.loader__count{position:absolute;right:var(--gutter);bottom:var(--gutter);font:200 clamp(64px,12vw,180px)/.8 var(--font-display);letter-spacing:-.05em;font-variant-numeric:tabular-nums}
.loader__label{position:absolute;left:var(--gutter);bottom:var(--gutter);font:400 11px/1 var(--font-mono);letter-spacing:.24em;text-transform:uppercase;color:var(--fg-3)}

/* ---------- nav ---------- */
/* three columns so the links sit in the true centre whatever the side widths */
.nav{position:fixed;left:0;right:0;top:0;z-index:100;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:24px;height:72px;padding:0 var(--gutter);mix-blend-mode:difference;color:#fff}
.nav__brand{display:block;justify-self:start;padding:10px 0}
.nav__brand img{height:13px;width:auto}
.nav__links{display:flex;gap:clamp(20px,3vw,40px)}
.nav__links a{position:relative;display:flex;align-items:baseline;gap:8px;padding:6px 0;font:400 11px/1.4 var(--font-mono);letter-spacing:.24em;text-transform:uppercase}
.nav__links span{font-size:9px;opacity:.55}
.nav__links a::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:currentColor;transform:scaleX(0);transform-origin:right;transition:transform var(--dur-3) var(--ease-out)}
.nav__links a:hover::after,.nav__links a[aria-current]::after{transform:scaleX(1);transform-origin:left}
.nav__status{display:flex;align-items:center;justify-self:end;gap:16px;font:400 11px/1 var(--font-mono);letter-spacing:.12em;font-variant-numeric:tabular-nums}

/* theme toggle: a square that is half filled, like the brand's status dots */
.theme{display:inline-flex;align-items:center;gap:8px;height:22px;padding:0 9px;border:1px solid currentColor;background:none;color:inherit;font:500 10px/1 var(--font-mono);letter-spacing:.16em;text-transform:uppercase;cursor:pointer}
.theme__swatch{width:8px;height:8px;border:1px solid currentColor;background:linear-gradient(90deg,currentColor 50%,transparent 50%);transition:transform var(--dur-3) var(--ease-out)}
.theme:hover .theme__swatch{transform:rotate(180deg)}
::view-transition-old(root),::view-transition-new(root){animation:none;mix-blend-mode:normal}

/* ---------- badge + buttons ---------- */
.badge{display:inline-flex;align-items:center;gap:8px;height:22px;padding:0 9px;font:500 10px/1 var(--font-mono);letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--line-strong);color:var(--fg-2);white-space:nowrap}
.badge__dot{width:6px;height:6px;background:currentColor;animation:lsv-pulse 1.6s var(--ease-in-out) infinite}
.badge--live{border-color:currentColor;color:inherit}
.badge--live .badge__dot{background:currentColor;box-shadow:0 0 8px currentColor}
.badge--build .badge__dot{background:var(--ink-600)}

.btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:12px;height:52px;padding:0 26px;font:500 12px/1 var(--font-mono);letter-spacing:.24em;text-transform:uppercase;white-space:nowrap;border:1px solid transparent;cursor:pointer;transition:background-color var(--dur-2) var(--ease-out),color var(--dur-2) var(--ease-out),border-color var(--dur-2) var(--ease-out),box-shadow var(--dur-2) var(--ease-out)}
.btn .icon{transition:transform var(--dur-2) var(--ease-out)}
.btn:hover .icon{transform:translate(2px,-2px)}
.btn--primary{background:var(--fg);color:var(--bg);border-color:var(--fg)}
.btn--primary:hover{background:var(--bg);color:var(--fg);box-shadow:var(--glow-sm)}
.btn--ghost{padding:0 4px;color:var(--fg-2)}
.btn--ghost:hover{color:var(--fg-1)}
.btn--ghost:hover .icon{transform:translateX(3px)}

/* ---------- hero ---------- */
.hero{position:relative;display:flex;flex-direction:column;justify-content:flex-end;gap:clamp(24px,4vh,48px);min-height:100vh;min-height:100svh;padding:120px var(--gutter) clamp(28px,5vh,56px);overflow:hidden}
.hero__grid{position:absolute;inset:0;z-index:-1;background-image:linear-gradient(var(--line-hair) 1px,transparent 1px),linear-gradient(90deg,var(--line-hair) 1px,transparent 1px);background-size:64px 64px;-webkit-mask-image:radial-gradient(ellipse 70% 60% at 60% 40%,#000 20%,transparent 100%);mask-image:radial-gradient(ellipse 70% 60% at 60% 40%,#000 20%,transparent 100%)}
.hero__mark{position:absolute;right:-6vw;top:8vh;z-index:-1;height:92vh;aspect-ratio:1063/900;background:url(/assets/monogram.webp?v=4760ae95e8) no-repeat center/contain;opacity:.05;filter:var(--mark-filter);will-change:transform}
.hero__title{font-weight:200;font-size:clamp(64px,14.5vw,250px);line-height:.88;letter-spacing:-.055em;margin-left:-.04em}
.hero__title .line{display:block}
.hero__foot{display:grid;grid-template-columns:minmax(0,1.1fr) auto auto;align-items:end;gap:clamp(24px,4vw,64px);padding-top:clamp(20px,3vh,32px);border-top:1px solid var(--line-soft)}
.hero__lede{max-width:460px;font-size:clamp(15px,1.25vw,18px);font-weight:300;line-height:1.6;color:var(--fg-2);text-wrap:pretty}
.hero__actions{display:flex;align-items:center;gap:24px;flex-wrap:wrap}
.hero__scroll{display:flex;flex-direction:column;align-items:center;gap:10px;font:400 10px/1 var(--font-mono);letter-spacing:.24em;text-transform:uppercase;color:var(--fg-3)}
.hero__scroll i{position:relative;width:1px;height:56px;background:var(--line-soft);overflow:hidden}
.hero__scroll i::after{content:"";position:absolute;left:0;top:0;width:1px;height:40%;background:var(--fg);animation:lsv-drip 2.2s var(--ease-in-out) infinite}

/* ---------- marquee ---------- */
.marquee{overflow:hidden;padding:clamp(20px,3vh,32px) 0;border-block:1px solid var(--line-hair)}
.marquee__track{display:flex;align-items:center;gap:clamp(24px,3vw,48px);padding-right:clamp(24px,3vw,48px);width:max-content;font-weight:200;font-size:clamp(40px,6vw,96px);line-height:1;letter-spacing:-.04em;white-space:nowrap;will-change:transform}
.marquee__track i{font-style:normal;font-size:.35em;color:var(--fg-4)}
.marquee__track span:nth-of-type(even){color:transparent;-webkit-text-stroke:1px rgba(var(--rgb),.35)}

/* ---------- sections ---------- */
.section{position:relative;padding:var(--section) var(--gutter)}
.section__head{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:20px 40px;margin-bottom:clamp(48px,8vh,96px)}
.section__head .eyebrow{grid-column:1 / -1}
.section__title{font-weight:200;font-size:clamp(44px,7vw,120px);line-height:.95;letter-spacing:-.045em}
.section__note{font:400 11px/1.4 var(--font-mono);letter-spacing:.24em;text-transform:uppercase;color:var(--fg-4)}

/* ---------- work: list rows with a cursor-follow preview ---------- */
.projects{border-top:1px solid var(--line-soft)}
.project{position:relative;border-bottom:1px solid var(--line-soft)}
.project__link,.project--soon{position:relative;display:grid;grid-template-columns:clamp(48px,6vw,96px) minmax(0,1.3fr) minmax(0,1fr) clamp(150px,13vw,210px);align-items:center;gap:clamp(16px,2.5vw,40px);padding:clamp(24px,4vh,44px) 0}
.project__link{z-index:0}
.project__link::before{content:"";position:absolute;inset:0 calc(var(--gutter) * -1);z-index:-1;background:var(--fg);transform:scaleY(0);transform-origin:bottom;transition:transform var(--dur-3) var(--ease-out)}
.project__media{display:none}
.project__index{font:400 11px/1 var(--font-mono);letter-spacing:.16em;color:var(--fg-4)}
.project__name{font-weight:200;font-size:clamp(32px,4.2vw,76px);line-height:1;letter-spacing:-.045em;white-space:nowrap;overflow-wrap:normal;transition:transform var(--dur-3) var(--ease-out)}
.project__desc{max-width:380px;font-size:14px;font-weight:300;line-height:1.55;color:var(--fg-3);text-wrap:pretty}
.project__domain{display:flex;align-items:center;justify-content:flex-end;gap:10px;font:400 11px/1 var(--font-mono);letter-spacing:.12em;color:var(--fg-2)}
.project__domain .icon{transition:transform var(--dur-3) var(--ease-out)}
.project__link:hover,.project__link:focus-visible{color:var(--bg)}
.project__link:hover::before,.project__link:focus-visible::before{transform:scaleY(1);transform-origin:top}
.project__link:hover .project__name{transform:translateX(clamp(8px,1.2vw,20px))}
.project__link:hover .project__index,.project__link:hover .project__desc,.project__link:hover .project__domain,
.project__link:focus-visible .project__index,.project__link:focus-visible .project__desc,.project__link:focus-visible .project__domain{color:var(--muted-inv)}
.project__link:hover .project__domain .icon{transform:translate(3px,-3px)}
.project--soon .project__name{color:transparent;-webkit-text-stroke:1px rgba(var(--rgb),.3)}
.project__badge{justify-self:end}

.follow{position:fixed;left:0;top:0;z-index:90;width:clamp(260px,24vw,400px);aspect-ratio:16/10;pointer-events:none;opacity:0;visibility:hidden}
.follow__stack{position:relative;width:100%;height:100%;overflow:hidden;border:1px solid #000;box-shadow:0 30px 80px rgba(0,0,0,.45)}
.follow__stack img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:top}
.follow__label{position:absolute;left:50%;bottom:-14px;display:flex;align-items:center;gap:8px;height:28px;padding:0 12px;background:#000;color:#fff;font:500 10px/1 var(--font-mono);letter-spacing:.2em;text-transform:uppercase;white-space:nowrap;transform:translateX(-50%)}

/* ---------- studio ---------- */
.statement{max-width:1200px;font-weight:200;font-size:clamp(28px,3.8vw,60px);line-height:1.18;letter-spacing:-.03em;text-wrap:pretty}
.statement--sm{max-width:1100px;font-size:clamp(24px,3vw,46px)}
.services{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;margin-top:clamp(64px,10vh,128px);border-top:1px solid var(--line-soft)}
.services li{display:flex;flex-direction:column;gap:14px;padding:28px clamp(16px,2vw,28px) 0 0}
.services li+li{padding-left:clamp(16px,2vw,28px);border-left:1px solid var(--line-hair)}
.services__n{font:400 11px/1 var(--font-mono);letter-spacing:.16em;color:var(--fg-4)}
.services h3{font-weight:300;font-size:clamp(20px,1.8vw,28px);letter-spacing:-.02em;line-height:1.15}
.services p{font-size:14px;font-weight:300;line-height:1.6;color:var(--fg-3);text-wrap:pretty}

/* ---------- layers ---------- */
.layers{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:clamp(40px,6vw,120px);align-items:start;border-top:1px solid var(--line-hair)}
.layers__intro{position:sticky;top:120px;display:flex;flex-direction:column;gap:24px}
.layers__lede{max-width:360px;font-size:16px;font-weight:300;color:var(--fg-2)}
.layers__list{border-top:1px solid var(--line-soft)}
.layers__list li{display:grid;grid-template-columns:44px auto minmax(0,1fr) auto;align-items:baseline;gap:20px;padding:clamp(20px,3vh,32px) 0;border-bottom:1px solid var(--line-soft);transition:padding var(--dur-3) var(--ease-out)}
.layers__list span{font:400 11px/1 var(--font-mono);letter-spacing:.16em;color:var(--fg-4)}
.layers__list strong{font-weight:300;font-size:clamp(24px,2.6vw,40px);letter-spacing:-.03em;line-height:1}
.layers__list em{font:400 11px/1.4 var(--font-mono);font-style:normal;letter-spacing:.06em;color:var(--fg-3)}
.layers__list b{display:flex;align-items:center;gap:8px;font:400 10px/1 var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--fg-2)}
.layers__list b::before{content:"";width:5px;height:5px;background:var(--fg);box-shadow:0 0 8px rgba(var(--rgb),.6)}
@media (hover:hover){.layers__list li:hover{padding-left:16px}}

/* ---------- open projects ---------- */
.open{border-top:1px solid var(--line-hair)}
.steps{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin-top:clamp(56px,9vh,112px);border-top:1px solid var(--line-soft)}
.steps li{display:flex;flex-direction:column;gap:18px;padding:28px 0 0;font-weight:200;font-size:clamp(36px,5vw,80px);line-height:1;letter-spacing:-.045em}
.steps li+li{padding-left:clamp(16px,2vw,32px);border-left:1px solid var(--line-hair)}
.steps span{font:400 11px/1 var(--font-mono);letter-spacing:.16em;color:var(--fg-4)}

/* ---------- process ---------- */
.process{padding-block:clamp(64px,10vh,120px);border-top:1px solid var(--line-hair)}
.process__list{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px;margin-top:28px}
.process__list li{display:flex;align-items:baseline;gap:12px;font:400 clamp(12px,1vw,14px)/1 var(--font-mono);letter-spacing:.24em;text-transform:uppercase}
.process__list span{font-size:10px;color:var(--fg-4)}
.process__bar{height:1px;margin-top:28px;background:var(--line-soft)}
.process__bar i{display:block;height:1px;background:var(--fg);box-shadow:var(--glow-sm);transform-origin:left;transform:scaleX(1)}

/* ---------- contact ---------- */
.contact{display:flex;flex-direction:column;gap:clamp(24px,4vh,40px);min-height:90vh;justify-content:center;border-top:1px solid var(--line-hair)}
.contact__title{font-weight:200;font-size:clamp(56px,11vw,190px);line-height:.9;letter-spacing:-.055em}
.contact__lede{max-width:440px;font-size:clamp(15px,1.25vw,18px);font-weight:300;color:var(--fg-2)}
.contact__email{align-self:flex-start;display:inline-flex;align-items:center;gap:clamp(12px,1.5vw,24px);padding:clamp(14px,2vh,22px) 0;font-weight:200;font-size:clamp(28px,4.4vw,72px);letter-spacing:-.03em;line-height:1;border-bottom:1px solid var(--line-strong);transition:border-color var(--dur-3) var(--ease-out)}
.contact__email .icon{width:.7em;height:.7em;stroke-width:1.25;transition:transform var(--dur-3) var(--ease-out)}
.contact__email:hover{border-color:var(--fg)}
.contact__email:hover .icon{transform:translate(6px,-6px)}

/* ---------- footer ---------- */
.footer{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:28px var(--gutter);border-top:1px solid var(--line-hair);font:400 10px/1 var(--font-mono);letter-spacing:.2em;text-transform:uppercase;color:var(--fg-4)}
.footer__caps i{font-style:normal;margin:0 14px;color:var(--line-strong)}
.footer__top{display:flex;align-items:center;gap:10px;min-height:44px;color:var(--fg-2);transition:color var(--dur-2) var(--ease-out)}
.footer__top:hover{color:var(--fg)}

/* ---------- keyframes ---------- */
@keyframes lsv-unhide{to{opacity:1}}
@keyframes lsv-gone{to{visibility:hidden}}
@keyframes lsv-pulse{0%,100%{opacity:1}50%{opacity:.25}}
@keyframes lsv-blink{0%,49%{opacity:1}50%,100%{opacity:0}}
@keyframes lsv-drip{0%{transform:translateY(-100%)}100%{transform:translateY(250%)}}
@keyframes lsv-grain{0%{transform:translate(0,0)}20%{transform:translate(-8%,4%)}40%{transform:translate(6%,-6%)}60%{transform:translate(-4%,8%)}80%{transform:translate(8%,2%)}100%{transform:translate(0,0)}}

/* ---------- responsive ---------- */
@media (max-width:1100px){
  .footer__caps{display:none}
  .project__link,.project--soon{grid-template-columns:clamp(40px,6vw,72px) minmax(0,1fr) auto}
  .project__desc{grid-column:2;grid-row:2}
  .services{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:40px}
  .services li:nth-child(3){padding-left:0;border-left:0}
}
@media (max-width:860px){
  .hero__foot{grid-template-columns:minmax(0,1fr);gap:24px}
  .hero__scroll{display:none}
  .layers{grid-template-columns:minmax(0,1fr)}
  .layers__intro{position:static}
}
@media (max-width:720px){
  .nav{display:flex;justify-content:space-between;height:60px;mix-blend-mode:normal;background:var(--bg);color:var(--fg);border-bottom:1px solid var(--line-hair)}
  .nav__brand img{filter:var(--mark-filter)}
  .nav__links{position:fixed;left:0;right:0;bottom:0;justify-content:space-around;gap:0;height:calc(60px + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:var(--bg);border-top:1px solid var(--line-hair)}
  .nav__links a{flex:1;flex-direction:column;align-items:center;justify-content:center;gap:4px;letter-spacing:.2em}
  .nav__links a+a{border-left:1px solid var(--line-hair)}
  .nav__links a::after{top:-1px;bottom:auto}
  .nav__clock{display:none}
  body{padding-bottom:calc(60px + env(safe-area-inset-bottom))}
  .hero{padding-top:96px}
  .hero__actions .btn--primary{width:100%;justify-content:space-between}
  .section__head{grid-template-columns:minmax(0,1fr)}
  .project__link,.project--soon{grid-template-columns:minmax(0,1fr) auto;gap:10px 16px;padding:28px 0}
  .project__media{display:block;grid-column:1 / -1;aspect-ratio:16/10;overflow:hidden;border:1px solid var(--line-soft);margin-bottom:8px}
  .project__media img{width:100%;height:100%;object-fit:cover;object-position:top}
  .project__index{grid-column:1;grid-row:2}
  .project__name{grid-column:1 / -1;grid-row:3}
  .project__desc{grid-column:1 / -1;grid-row:4}
  .project__domain{grid-column:2;grid-row:2;justify-self:end}
  .project__link::before{display:none}
  .project__link:hover{color:inherit}
  .project__link:hover .project__name{transform:none}
  .project--soon .project__index{grid-row:1}
  .project--soon .project__name{grid-row:2}
  .project--soon .project__desc{grid-row:3}
  .project__badge{grid-column:2;grid-row:1}
  .services,.steps{grid-template-columns:minmax(0,1fr)}
  .services li,.steps li,.services li+li,.steps li+li{padding:24px 0 0;border-left:0}
  .services li+li,.steps li+li{margin-top:24px;border-top:1px solid var(--line-hair)}
  .layers__list li{grid-template-columns:32px minmax(0,1fr) auto;gap:6px 14px}
  .layers__list em{grid-column:2 / 4;grid-row:2}
  .process__list{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:16px}
  .contact{min-height:auto}
  .contact__email{font-size:clamp(24px,8vw,40px)}
  .footer{flex-wrap:wrap}
}

/* ---------- reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:1ms!important;animation-iteration-count:1!important;transition-duration:1ms!important}
  .grain{animation:none}
}
