/* mahesh.profigma.com: tokens and components follow design-system.html */
:root{
  --paper:#EDEBE6; --paper-2:#E2DFD8; --ink:#111110; --ink-2:#2A2927;
  --grey:#6F6C66; --grey-dark:#8E8A83; --line:#CFCBC3; --line-dark:#33322F;
  --laterite:#C8452B; --laterite-text:#A3381F; --leaf:#2F6B4F;
  --sans:"Archivo",system-ui,sans-serif; --mono:"IBM Plex Mono",ui-monospace,monospace;
  --gutter:clamp(16px,4vw,56px); --ease:cubic-bezier(.2,.7,.2,1);
}
@view-transition{navigation:auto}
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--paper);color:var(--ink);font:400 17px/1.55 var(--sans);-webkit-font-smoothing:antialiased;overflow-x:hidden;overflow-x:clip}
html{overflow-x:hidden;overflow-x:clip}
img,video{display:block;max-width:100%;height:auto}
a{color:inherit}
h1,h2,h3,p,ul,ol,figure{margin:0}
::selection{background:var(--laterite);color:var(--paper)}
:focus-visible{outline:2px solid var(--laterite);outline-offset:3px}
.skip{position:absolute;left:-999px;top:8px;background:var(--ink);color:var(--paper);padding:8px 12px;z-index:100}
.skip:focus{left:8px}

.wrap{max-width:1440px;margin:0 auto;padding-left:var(--gutter);padding-right:var(--gutter)}
.label{font:500 12px/1.3 var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--grey)}
.idx{font:400 13px/1.3 var(--mono);color:var(--grey)}
.dark{background:var(--ink);color:var(--paper)}
.dark .label,.dark .idx{color:var(--grey-dark)}
.note{color:var(--grey);font-size:15px}
.dark .note{color:var(--grey-dark)}

/* ---------- nav ---------- */
/* no backdrop-filter here: it would trap the fixed mobile menu inside the bar */
.nav{position:sticky;top:0;z-index:50;background:var(--paper);border-bottom:1px solid transparent;transition:border-color .2s}
.nav.scrolled{border-bottom-color:var(--line)}
.nav-in{display:flex;align-items:center;justify-content:space-between;gap:16px;height:72px}
.logo{font:800 20px/1 var(--sans);font-stretch:125%;text-decoration:none;letter-spacing:-.02em}
.logo span{color:var(--laterite)}
.nav-links{display:flex;gap:32px;list-style:none;padding:0}
.nav-links a{text-decoration:none;font:500 15px var(--sans)}
.nav-links a sup{font:400 11px var(--mono);color:var(--grey);margin-left:3px;vertical-align:top}
.nav-links a:hover{color:var(--laterite-text)}
.menu-btn{display:none;font:500 14px var(--sans);background:none;border:1px solid var(--ink);border-radius:999px;padding:8px 14px;cursor:pointer;color:var(--ink)}
@media (max-width:860px){
  .nav-links{display:none;position:fixed;inset:72px 0 0 0;background:var(--paper);flex-direction:column;gap:0;padding:8px var(--gutter)}
  .nav-links.open{display:flex}
  .nav-links li{border-bottom:1px solid var(--line)}
  .nav-links a{display:block;padding:18px 0;font:700 30px/1 var(--sans);font-stretch:112%}
  .menu-btn{display:inline-block}
  .nav .btn{display:none}
}

/* ---------- buttons, pills ---------- */
.btn{display:inline-flex;align-items:center;gap:10px;font:600 15px/1 var(--sans);padding:14px 22px;border-radius:999px;border:1px solid var(--ink);text-decoration:none;cursor:pointer;background:var(--ink);color:var(--paper);transition:background .2s,border-color .2s,color .2s}
.btn:hover{background:var(--laterite);border-color:var(--laterite);color:var(--paper)}
.btn.ghost{background:transparent;color:var(--ink)}
.btn.ghost:hover{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.dark .btn{background:var(--paper);color:var(--ink);border-color:var(--paper)}
.dark .btn:hover{background:var(--laterite);border-color:var(--laterite);color:var(--paper)}
.dark .btn.ghost{background:transparent;color:var(--paper);border-color:var(--paper)}
.btn .arr{display:inline-block;transition:transform .2s var(--ease)}
.btn:hover .arr{transform:translate(3px,-3px)}
.btn.small{padding:10px 16px;font-size:14px}
.pill{display:inline-flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:999px;padding:7px 14px;font:500 13px/1.2 var(--sans);background:var(--paper);text-decoration:none;white-space:nowrap}
a.pill:hover{border-color:var(--ink)}
.dot{width:8px;height:8px;border-radius:50%;background:var(--leaf);box-shadow:0 0 0 0 rgba(47,107,79,.5);animation:pulse 2.4s infinite}
@keyframes pulse{70%{box-shadow:0 0 0 7px rgba(47,107,79,0)}100%{box-shadow:0 0 0 0 rgba(47,107,79,0)}}

/* ---------- hero ---------- */
.hero{position:relative;padding-top:clamp(24px,5vw,56px);overflow:hidden}
.hero-name{font:900 clamp(56px,8.6vw,124px)/.84 var(--sans);font-stretch:125%;letter-spacing:-.035em;text-transform:uppercase;display:flex;justify-content:space-between;gap:.12em;position:relative;z-index:1}
.hero-name > span{white-space:nowrap}
.hero-name .out{color:transparent;-webkit-text-stroke:clamp(1.5px,.22vw,3px) var(--ink)}
.hero-stage{position:relative;display:grid;grid-template-columns:1fr minmax(280px,560px) 1fr;align-items:end;gap:24px;margin-top:clamp(-72px,-4.4vw,-28px)}
.hero-photo{grid-column:2;position:relative;z-index:2}
.hero-photo img{width:100%;filter:contrast(1.04)}
.hero-left{grid-column:1;padding-bottom:clamp(32px,5vw,64px);position:relative;z-index:3}
.hero-left .role{font:600 clamp(22px,2.2vw,30px)/1.1 var(--sans);margin-bottom:12px}
.hero-left p{max-width:32ch;color:var(--ink-2);margin-bottom:24px}
.hero-right{grid-column:3;justify-self:end;display:flex;flex-direction:column;align-items:flex-end;gap:10px;padding-bottom:clamp(32px,5vw,64px);position:relative;z-index:3}
.hero-top{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:clamp(20px,3vw,40px)}
/* desktop and tablet: the hero fills exactly one screen under the 72px menu bar,
   and the photo scales to fit the space left, sitting on the bottom edge */
@media (min-width:861px){
  .hero{height:calc(100svh - 72px);min-height:560px;display:flex;flex-direction:column}
  .hero > .wrap{flex:1;display:flex;flex-direction:column;width:100%;min-height:0}
  .hero-stage{flex:1;min-height:0;grid-template-rows:100%;grid-template-columns:minmax(236px,1fr) minmax(280px,720px) minmax(124px,1fr)}
  .hero-photo{height:100%;min-height:0;display:flex;align-items:flex-end;justify-content:center}
  /* the box fills the cell; the picture keeps its shape and scales to the smaller of width or height */
  .hero-photo img{width:100%;height:100%;object-fit:contain;object-position:center bottom}
}
/* big screens: give the hero more width so the name and photo grow into the height
   instead of leaving an empty band between them */
@media (min-width:1500px) and (min-height:900px){
  .hero > .wrap{max-width:min(1880px,100%)}
  .hero-name{font-size:min(8.2vw,15vh,160px)}
  .hero-stage{grid-template-columns:minmax(280px,1fr) minmax(280px,1300px) minmax(170px,1fr)}
}
@media (max-width:860px){
  .hero-name{flex-direction:column;gap:0;font-size:16vw}
  .hero-stage{grid-template-columns:1fr;margin-top:24px}
  .hero-photo{grid-column:1;grid-row:1;max-width:420px;justify-self:center;width:100%}
  .hero-left{grid-column:1;grid-row:2;padding-bottom:0}
  .hero-right{grid-column:1;grid-row:3;flex-direction:row;flex-wrap:wrap;justify-self:start;align-items:center;padding-bottom:40px}
}

/* ---------- sections ---------- */
.sec{padding:clamp(72px,10vw,140px) 0}
.sec-head{display:grid;grid-template-columns:minmax(80px,1fr) 5fr;gap:24px;margin-bottom:clamp(40px,5vw,72px);align-items:baseline}
.h2{font:700 clamp(38px,5.6vw,84px)/.98 var(--sans);font-stretch:112%;letter-spacing:-.025em}
.h3{font:600 clamp(20px,1.8vw,24px)/1.2 var(--sans)}
.statement{font:500 clamp(26px,3.6vw,52px)/1.18 var(--sans);letter-spacing:-.015em;max-width:24ch}
.statement em{font-style:normal;color:var(--laterite)}
.statement-row{display:grid;grid-template-columns:minmax(80px,1fr) 5fr;gap:24px}
.facts{display:grid;grid-template-columns:repeat(4,1fr);gap:24px;margin-top:clamp(48px,6vw,88px)}
.fact{border-top:2px solid currentColor;padding-top:14px}
.fact b{display:block;font:800 clamp(40px,4.4vw,64px)/1 var(--sans);font-stretch:118%;margin-bottom:6px}
@media (max-width:860px){
  .sec-head,.statement-row{grid-template-columns:1fr;gap:12px}
  .facts{grid-template-columns:repeat(2,1fr)}
}

/* ---------- work index ---------- */
.work-list{border-top:1px solid var(--line);list-style:none;padding:0}
.work-row{display:grid;grid-template-columns:72px minmax(0,1.5fr) minmax(0,1fr) 120px 32px;gap:16px;align-items:center;padding:clamp(18px,2.2vw,28px) 0;border-bottom:1px solid var(--line);text-decoration:none;position:relative}
.work-row .t{font:700 clamp(26px,3.6vw,54px)/1 var(--sans);font-stretch:112%;letter-spacing:-.02em;transition:transform .35s var(--ease),color .2s}
.work-row .d{color:var(--grey);font-size:15px}
.work-row .y{text-align:right}
.work-row .go{font-size:22px;transition:transform .2s var(--ease)}
.work-row .thumb{display:none}
@media (hover:hover){
  .work-row:hover .t{transform:translateX(14px);color:var(--laterite-text)}
  .work-row:hover .go{transform:translate(3px,-3px)}
}
.preview{position:fixed;left:0;top:0;width:min(420px,32vw);aspect-ratio:16/10;pointer-events:none;z-index:40;opacity:0;transform:translate(-50%,-50%) scale(.9);transition:opacity .2s,transform .3s var(--ease);background:var(--paper-2);overflow:hidden;box-shadow:0 20px 50px rgba(0,0,0,.18)}
.preview.on{opacity:1;transform:translate(-50%,-50%) scale(1)}
.preview img{width:100%;height:100%;object-fit:cover;object-position:top center}
@media (max-width:860px){
  .work-row{grid-template-columns:44px 1fr;row-gap:8px}
  .work-row .d{grid-column:2}
  .work-row .y{grid-column:2;text-align:left}
  .work-row .go{display:none}
  .work-row .thumb{display:block;grid-column:1/-1;aspect-ratio:16/10;object-fit:cover;object-position:top;width:100%;margin-top:8px;border:1px solid var(--line)}
  .preview{display:none}
}

/* ---------- services ---------- */
.svc{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line-dark)}
.svc li{list-style:none;padding:28px 24px 32px 0;border-right:1px solid var(--line-dark)}
.svc li+li{padding-left:24px}
.svc li:last-child{border-right:0}
.svc .h3{margin:14px 0 10px}
.svc p{color:#BDB9B1;font-size:15px}
.svc ul{padding:0;margin-top:16px}
@media (max-width:1000px){.svc{grid-template-columns:repeat(2,1fr)}.svc li:nth-child(2){border-right:0}.svc li:nth-child(3){padding-left:0}.svc li{border-bottom:1px solid var(--line-dark)}}
@media (max-width:620px){.svc{grid-template-columns:1fr}.svc li,.svc li+li{padding-left:0;border-right:0}}

/* ---------- process diagram ---------- */
.flow{display:grid;grid-template-columns:1fr 56px 1fr 56px 1fr;align-items:stretch}
.flow .step{border:1px solid var(--ink);padding:24px;background:var(--paper)}
.flow .step.ai{background:var(--ink);color:var(--paper)}
.flow .step.ai .label{color:var(--grey-dark)}
.flow .step .h3{margin:10px 0 12px}
.flow .step ul{padding-left:18px;font-size:15px}
.flow .step li{margin:4px 0}
.flow .arrow{display:flex;align-items:center;justify-content:center;font:400 28px var(--mono);color:var(--laterite)}
@media (max-width:860px){.flow{grid-template-columns:1fr}.flow .arrow{height:48px;transform:rotate(90deg)}}

/* ---------- experience ---------- */
.xp{list-style:none;padding:0;border-top:1px solid var(--line)}
.xp li{display:grid;grid-template-columns:200px 1fr 1.4fr;gap:24px;padding:24px 0;border-bottom:1px solid var(--line)}
.xp .h3{font-size:20px}
.xp p{color:var(--ink-2);font-size:15px}
@media (max-width:860px){.xp li{grid-template-columns:1fr;gap:6px}}

/* ---------- contact ---------- */
.contact-big{font:900 clamp(64px,13vw,200px)/.86 var(--sans);font-stretch:125%;letter-spacing:-.035em;text-transform:uppercase}
.contact-big .out{color:transparent;-webkit-text-stroke:clamp(1.5px,.2vw,3px) var(--paper)}
.paths{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:clamp(40px,5vw,72px)}
.path{border:1px solid var(--line-dark);padding:28px}
.path .h3{margin:10px 0 10px}
.path p{color:#BDB9B1;margin-bottom:22px;font-size:15px}
.path .acts{display:flex;gap:10px;flex-wrap:wrap}
.mail{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin-top:40px;padding-top:28px;border-top:1px solid var(--line-dark)}
.mail a{font:600 clamp(20px,2.4vw,32px) var(--sans);text-decoration:none;border-bottom:2px solid var(--laterite)}
.copy-btn{font:500 13px var(--mono);background:none;border:1px solid var(--grey-dark);color:var(--paper);padding:8px 12px;border-radius:4px;cursor:pointer}
.copy-btn:hover{border-color:var(--paper)}
.mail a.wa{font:500 15px var(--mono);border-bottom:1px solid var(--grey-dark);margin-left:auto}
.mail a.wa:hover{border-color:var(--laterite);color:var(--paper)}
@media (max-width:620px){.mail a.wa{margin-left:0}}
@media (max-width:760px){.paths{grid-template-columns:1fr}}

/* ---------- footer ---------- */
.foot{border-top:1px solid var(--line-dark);padding:28px 0 40px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.foot nav{display:flex;gap:20px;flex-wrap:wrap}
.foot a{text-decoration:none}
.foot a:hover{color:var(--paper)}

/* ---------- case study ---------- */
/* .cs-head sits on a .wrap element: set only top/bottom padding so the side gutter stays */
.cs-head{padding-top:clamp(32px,5vw,64px);padding-bottom:clamp(32px,4vw,48px)}
.crumbs{display:flex;gap:10px;align-items:center;margin-bottom:clamp(24px,4vw,48px)}
.crumbs a{text-decoration:none}
.crumbs a:hover{color:var(--ink)}
.cs-title{font:900 clamp(36px,11vw,190px)/.86 var(--sans);font-stretch:125%;letter-spacing:-.035em;text-transform:uppercase;overflow-wrap:break-word}
.cs-lead{font:500 clamp(22px,2.6vw,36px)/1.25 var(--sans);max-width:30ch;margin-top:clamp(20px,3vw,36px)}
.meta{display:grid;grid-template-columns:repeat(5,1fr);gap:24px;border-top:1px solid var(--line);margin-top:clamp(36px,5vw,64px);padding-top:20px}
.meta div{font-size:15px}
.meta .label{display:block;margin-bottom:6px}
.meta a{text-decoration-color:var(--laterite);text-underline-offset:3px}
@media (max-width:860px){.meta{grid-template-columns:repeat(2,1fr)}}

.cover{background:var(--paper-2);padding:clamp(20px,4vw,64px);display:grid;grid-template-columns:3fr 1fr;gap:clamp(16px,3vw,40px);align-items:end}
.cover .desk{border:1px solid var(--line);box-shadow:0 30px 60px rgba(17,17,16,.12)}
.cover .phone{border:6px solid var(--ink);border-radius:28px;overflow:hidden;box-shadow:0 30px 60px rgba(17,17,16,.2)}
@media (max-width:620px){.cover{grid-template-columns:1fr}.cover .phone{display:none}}

.cs-sec{padding:clamp(64px,8vw,120px) 0;border-top:1px solid var(--line)}
.cs-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:clamp(24px,5vw,96px)}
.cs-grid .h2{font-size:clamp(32px,4vw,56px)}
.prose p{max-width:62ch;margin-bottom:18px;font-size:18px}
.prose p.big{font:500 clamp(22px,2.2vw,30px)/1.35 var(--sans);max-width:36ch}
.prose ul{padding-left:20px;max-width:62ch}
.prose li{margin:8px 0}
@media (max-width:860px){.cs-grid{grid-template-columns:1fr}}

.pains{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:32px}
.pain{border-top:2px solid var(--ink);padding-top:14px}
.pain .h3{margin:8px 0}
.pain p{font-size:15px;color:var(--ink-2)}
@media (max-width:860px){.pains{grid-template-columns:1fr}}

.decisions{display:grid;gap:clamp(28px,3vw,40px)}
.decision{display:grid;grid-template-columns:72px 1fr;gap:16px;border-left:3px solid var(--laterite);padding:2px 0 2px 20px}
.decision .h3{margin-bottom:10px}
.decision p{color:var(--ink-2);max-width:60ch;font-size:16px}
.decision .cost{margin-top:10px;font-size:15px;color:var(--grey)}
.decision .cost b{font:500 12px var(--mono);text-transform:uppercase;letter-spacing:.05em;color:var(--laterite-text);margin-right:6px}
@media (max-width:620px){.decision{grid-template-columns:1fr;gap:6px}}

.constraints{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.tag{display:inline-block;font:500 13px var(--mono);border:1px solid var(--line);border-radius:4px;padding:6px 10px}
.dark .tag{border-color:var(--line-dark)}

.split2{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.split2 .box{border:1px solid var(--line-dark);padding:24px}
.split2 .box ul{padding-left:18px;margin-top:12px;color:#CFCBC3;font-size:15px}
.split2 .box li{margin:6px 0}
@media (max-width:760px){.split2{grid-template-columns:1fr}}

.features{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line)}
.feature{background:var(--paper);padding:22px}
.feature .h3{font-size:18px;margin:8px 0 6px}
.feature p{font-size:14px;color:var(--grey)}
@media (max-width:1000px){.features{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.features{grid-template-columns:1fr}}

.shots{display:grid;gap:clamp(16px,2vw,24px)}
.shot{background:var(--paper-2);padding:clamp(12px,2.4vw,32px)}
.shot img{border:1px solid var(--line);width:100%}
.shot figcaption{margin-top:12px}
.phones{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(12px,2vw,24px);background:var(--paper-2);padding:clamp(16px,3vw,48px)}
.phones img{border:5px solid var(--ink);border-radius:24px}
@media (max-width:620px){.phones{grid-template-columns:1fr 1fr}.phones img:last-child{display:none}}

.next{display:block;text-decoration:none;padding:clamp(56px,8vw,112px) 0}
.next .cs-title{transition:color .2s}
.next:hover .cs-title{color:var(--laterite)}

/* ---------- hero particle field ---------- */
.field{position:absolute;inset:0;width:100%;height:100%;z-index:0;pointer-events:none}
.hero .wrap{position:relative;z-index:1}
.hero-name .ch{display:inline-block;transition:color .25s,-webkit-text-stroke-color .25s,transform .35s var(--ease)}
.hero-name .out .ch:hover{color:var(--ink)}
.hero-name > span:not(.out) .ch:hover{color:var(--laterite)}
.hero-name .ch:hover{transform:translateY(-6%)}
.hero-photo{transition:transform .6s var(--ease);transform-style:preserve-3d}

/* ---------- work groups ---------- */
.group-head{display:flex;justify-content:space-between;align-items:baseline;padding-bottom:12px}
.group-head .label{color:var(--ink);font-size:13px}

/* ---------- client logo strip ---------- */
.clients{padding:0 0 clamp(56px,7vw,96px)}
.clients-head{display:flex;justify-content:space-between;gap:16px;padding-bottom:24px;border-top:1px solid var(--line-dark);padding-top:24px}
/* the mask isolates blending, so the strip needs its own ink background for the logos' black to disappear */
.marquee{overflow:hidden;background:var(--ink);-webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.marquee-track{background:var(--ink);display:flex;align-items:center;gap:clamp(40px,6vw,88px);width:max-content;animation:marquee 40s linear infinite}
.marquee:hover .marquee-track{animation-play-state:paused}
.marquee img{height:clamp(44px,5vw,64px);width:auto;mix-blend-mode:screen;filter:grayscale(1) brightness(1.3);opacity:.7;transition:filter .3s,opacity .3s,transform .3s var(--ease)}
.marquee img:hover{filter:none;opacity:1;transform:scale(1.06)}
@keyframes marquee{to{transform:translateX(-50%)}}

/* ---------- facts ---------- */
.fact .plus{display:inline;color:var(--laterite)}
.fact b[data-count]{display:inline}
.fact .label{display:block;margin-top:6px}

/* ---------- cursor follower (mouse only) ---------- */
.cursor{position:fixed;left:0;top:0;width:36px;height:36px;margin:-18px 0 0 -18px;border:1px solid var(--ink);border-radius:50%;pointer-events:none;z-index:90;display:flex;align-items:center;justify-content:center;font:500 11px var(--mono);text-transform:uppercase;letter-spacing:.05em;color:var(--paper);opacity:0;transition:width .3s var(--ease),height .3s var(--ease),margin .3s var(--ease),background .25s,border-color .25s,opacity .2s}
.cursor.on{opacity:1}
.cursor.link{width:56px;height:56px;margin:-28px 0 0 -28px;border-color:var(--laterite)}
.cursor.view{width:88px;height:88px;margin:-44px 0 0 -44px;background:var(--laterite);border-color:var(--laterite)}
.cursor.on-dark{border-color:var(--paper)}
.cursor span{opacity:0;transition:opacity .2s}
.cursor.view span{opacity:1}
@media (hover:none),(pointer:coarse){.cursor{display:none}}

/* ---------- nav link roll ---------- */
.roll{display:inline-block;overflow:hidden;vertical-align:top;height:1.3em;line-height:1.3}
.roll i{display:block;font-style:normal;transition:transform .35s var(--ease)}
a:hover .roll i{transform:translateY(-100%)}

/* ---------- scroll progress ---------- */
.progress{position:fixed;top:0;left:0;height:2px;width:100%;background:var(--laterite);transform-origin:0 50%;transform:scaleX(0);z-index:60}

/* ---------- image reveal ---------- */
.js .wipe{clip-path:inset(0 0 100% 0);transition:clip-path 1s var(--ease)}
.js .wipe.in{clip-path:inset(0 0 0 0)}

/* ---------- statement words light up as you scroll ---------- */
.js .statement[data-words] .w{opacity:.16;transition:opacity .35s,color .35s}
.js .statement[data-words] .w.lit{opacity:1}

/* ---------- services (3 columns) ---------- */
.svc.svc3{grid-template-columns:repeat(3,1fr)}
.svc.svc3 li:nth-child(3){border-right:0}
.ticks{list-style:none;padding:0;margin-top:18px;font:400 13px/1.4 var(--mono);color:var(--paper)}
.ticks li{padding:8px 0 !important;border:0 !important;border-top:1px solid var(--line-dark) !important;display:flex;gap:10px}
.ticks li::before{content:"→";color:var(--laterite)}
@media (max-width:1000px){.svc.svc3{grid-template-columns:1fr}.svc.svc3 li,.svc.svc3 li+li{padding-left:0;border-right:0}}

/* ---------- tools ---------- */
.tools{list-style:none;padding:0;display:grid;grid-template-columns:repeat(5,1fr);border-top:1px solid var(--line);border-left:1px solid var(--line)}
.tool{border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:22px 18px 20px;display:flex;flex-direction:column;gap:6px;position:relative;overflow:hidden;transition:background .3s}
.tool svg{width:30px;height:30px;color:var(--ink);margin-bottom:14px;transition:color .3s,transform .45s var(--ease)}
.tool b{font:600 16px var(--sans)}
.tool span{font-size:13px;color:var(--grey);line-height:1.35}
.tool::after{content:"";position:absolute;left:0;bottom:0;height:3px;width:100%;background:var(--brand);transform:scaleX(0);transform-origin:left;transition:transform .4s var(--ease)}
.tool:hover{background:#fff}
.tool:hover svg{color:var(--brand);transform:translateY(-3px) rotate(-6deg) scale(1.08)}
.tool:hover::after{transform:scaleX(1)}
@media (max-width:860px){.tools{grid-template-columns:repeat(2,1fr)}}
@media (max-width:620px){.tools{grid-template-columns:repeat(2,1fr)}.tool{padding:16px 14px}}

/* ---------- cookie choice bar ---------- */
.consent{position:fixed;left:16px;right:16px;bottom:16px;z-index:80;max-width:560px;margin-left:auto;background:var(--ink);color:var(--paper);
  padding:16px 18px;display:flex;gap:16px;align-items:center;justify-content:space-between;flex-wrap:wrap;box-shadow:0 18px 40px rgba(0,0,0,.25);animation:rise .45s var(--ease)}
.consent p{margin:0;font-size:14px;line-height:1.45;max-width:36ch;color:#CFCBC3}
.consent a{color:var(--paper);text-underline-offset:3px}
.consent-acts{display:flex;gap:8px}
.consent .btn.ghost{color:var(--paper);border-color:var(--grey-dark)}
.consent .btn:not(.ghost){background:var(--paper);color:var(--ink);border-color:var(--paper)}
.consent.out{opacity:0;transform:translateY(12px);transition:opacity .3s,transform .3s}
@media (max-width:520px){.consent{left:12px;right:12px;bottom:12px}.consent-acts{width:100%}.consent-acts .btn{flex:1;justify-content:center}}

/* ---------- FAQ accordion ---------- */
.faq details{border-top:1px solid var(--line)}
.faq details:last-child{border-bottom:1px solid var(--line)}
.faq summary{list-style:none;cursor:pointer;padding:22px 44px 22px 0;font:600 clamp(18px,1.6vw,22px)/1.3 var(--sans);position:relative}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";position:absolute;right:4px;top:50%;transform:translateY(-50%);font:400 28px var(--mono);color:var(--laterite);transition:transform .3s var(--ease)}
.faq details[open] summary::after{transform:translateY(-50%) rotate(45deg)}
.faq summary:hover{color:var(--laterite-text)}
.faq details p{padding:0 0 24px;max-width:62ch;color:var(--ink-2)}
.faq details[open] p{animation:rise .4s var(--ease)}
.faq a{color:var(--laterite-text);text-underline-offset:3px}

/* ---------- service links ---------- */
.svc .more{display:inline-block;margin-top:18px;font:500 14px var(--sans);color:var(--paper);text-decoration:none;border-bottom:1px solid var(--laterite);padding-bottom:2px}
.svc .more:hover{color:var(--laterite)}
.foot .seo-links{flex-basis:100%;gap:18px;opacity:.85}

/* ---------- gallery + lightbox ---------- */
.gallery{display:grid;gap:clamp(10px,1.4vw,18px)}
.gallery.g2{grid-template-columns:repeat(2,1fr)}
.gallery.g3{grid-template-columns:repeat(3,1fr)}
.gallery.g4{grid-template-columns:repeat(4,1fr)}
.gallery a{display:block;overflow:hidden;background:var(--paper-2);position:relative}
.gallery img{width:100%;height:100%;object-fit:cover;transition:transform .7s var(--ease),filter .4s}
.gallery a:hover img{transform:scale(1.04)}
.gallery .wide{grid-column:span 2}
.gallery figcaption{position:absolute;left:0;bottom:0;right:0;padding:10px 12px;background:linear-gradient(transparent,rgba(17,17,16,.7));color:var(--paper);font:500 12px var(--mono);text-transform:uppercase;letter-spacing:.05em;opacity:0;transform:translateY(8px);transition:opacity .3s,transform .3s var(--ease)}
.gallery a:hover figcaption{opacity:1;transform:none}
@media (max-width:860px){.gallery.g3,.gallery.g4{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.gallery.g2{grid-template-columns:1fr}.gallery .wide{grid-column:auto}}
.videos{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(12px,2vw,24px)}
.videos video{width:100%;background:var(--ink);aspect-ratio:9/16;object-fit:contain;max-height:80vh}
@media (max-width:620px){.videos{grid-template-columns:1fr}}
.jump{display:flex;flex-wrap:wrap;gap:10px;margin-top:28px}

.lb{position:fixed;inset:0;z-index:95;background:rgba(17,17,16,.94);display:none;align-items:center;justify-content:center;padding:56px 16px}
.lb.open{display:flex;animation:fade .25s ease}
.lb img{max-width:min(1400px,100%);max-height:100%;object-fit:contain;box-shadow:0 30px 80px rgba(0,0,0,.5)}
.lb button{position:absolute;background:none;border:1px solid var(--line-dark);color:var(--paper);font:500 13px var(--mono);padding:10px 14px;border-radius:999px;cursor:pointer}
.lb button:hover{border-color:var(--paper)}
.lb .x{top:14px;right:14px}.lb .pv{left:14px;top:50%}.lb .nx{right:14px;top:50%}
.lb .cnt{position:absolute;bottom:16px;left:50%;transform:translateX(-50%);color:var(--grey-dark);font:400 12px var(--mono)}

/* ==========================================================================
   Motion. The "js" class is set in <head> before the first paint (and removed
   again after 4s if site.js never runs), so nothing flashes and nothing stays hidden.
   ========================================================================== */
:root{--d0:0s}
.intro{--d0:.95s}

/* reveal blocks */
.js .rv{opacity:0;transform:translateY(28px);transition:opacity .8s var(--ease),transform .8s var(--ease)}
.js .rv.in{opacity:1;transform:none}

/* staggered children (lists, grids, rows) */
.js [data-stagger] > *{opacity:0;transform:translateY(32px);transition:opacity .7s var(--ease),transform .8s var(--ease);transition-delay:calc(var(--i,0) * 70ms)}
.js [data-stagger].in > *{opacity:1;transform:none}
.js .work-list[data-stagger] > *{transform:translateX(-40px)}
.js .work-list[data-stagger].in > *{transform:none}
.js .tools[data-stagger] > *{transform:translateY(24px) scale(.94)}
.js .tools[data-stagger].in > *{transform:none}

/* headings: each word slides up from behind a mask */
.wm{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.08em;margin-bottom:-.08em}
.wm > span{display:inline-block}
.js [data-mask] .wm > span{transform:translateY(110%);transition:transform .9s var(--ease);transition-delay:calc(var(--i,0) * 60ms)}
.js [data-mask].in .wm > span{transform:none}

/* first visit: an ink curtain with the MK mark lifts away */
.intro body::before{content:"";position:fixed;inset:0;background:var(--ink);z-index:200;animation:curtain .9s cubic-bezier(.7,0,.2,1) .35s forwards;pointer-events:none}
.intro body::after{content:"MK.";position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);z-index:201;color:var(--paper);font:800 clamp(40px,8vw,88px)/1 var(--sans);font-stretch:125%;letter-spacing:-.02em;animation:markOut .5s var(--ease) .3s forwards;pointer-events:none}
@keyframes curtain{to{transform:translateY(-100%)}}
@keyframes markOut{to{opacity:0;transform:translate(-50%,-80%)}}

/* hero entrance, in order */
.js .nav-in > *{animation:drop .7s var(--ease) backwards;animation-delay:calc(var(--d0) + .05s)}
.js .nav-links li{animation:drop .7s var(--ease) backwards}
.js .nav-links li:nth-child(1){animation-delay:calc(var(--d0) + .1s)}
.js .nav-links li:nth-child(2){animation-delay:calc(var(--d0) + .15s)}
.js .nav-links li:nth-child(3){animation-delay:calc(var(--d0) + .2s)}
.js .nav-links li:nth-child(4){animation-delay:calc(var(--d0) + .25s)}
.js .nav-links li:nth-child(5){animation-delay:calc(var(--d0) + .3s)}
.js .hero-top > *{animation:rise .8s var(--ease) backwards;animation-delay:calc(var(--d0) + .2s)}
.js .hero-name:not(.split){visibility:hidden}
.js .hero-name .ch{animation:letter 1s var(--ease) backwards;animation-delay:calc(var(--d0) + .25s + var(--i,0) * 45ms)}
.js .hero-photo img{animation:photoIn 1.3s var(--ease) backwards;animation-delay:calc(var(--d0) + .45s)}
.js .hero-left > *{animation:rise .8s var(--ease) backwards}
.js .hero-left > :nth-child(1){animation-delay:calc(var(--d0) + .7s)}
.js .hero-left > :nth-child(2){animation-delay:calc(var(--d0) + .8s)}
.js .hero-left > :nth-child(3){animation-delay:calc(var(--d0) + .9s)}
.js .hero-right > *{animation:rise .7s var(--ease) backwards}
.js .hero-right > :nth-child(1){animation-delay:calc(var(--d0) + .8s)}
.js .hero-right > :nth-child(2){animation-delay:calc(var(--d0) + .87s)}
.js .hero-right > :nth-child(3){animation-delay:calc(var(--d0) + .94s)}
.js .hero-right > :nth-child(4){animation-delay:calc(var(--d0) + 1.01s)}
.js .field{animation:fadeOnly 1.6s ease backwards;animation-delay:calc(var(--d0) + .6s)}

/* case study and 404 headers */
.js .cs-head > :not(.cs-title){animation:rise .8s var(--ease) backwards}
.js .cs-head > :nth-child(1){animation-delay:calc(var(--d0) + .1s)}
.js .cs-head > :nth-child(3){animation-delay:calc(var(--d0) + .45s)}
.js .cs-head > :nth-child(4){animation-delay:calc(var(--d0) + .6s)}
.js .cs-head > :nth-child(5){animation-delay:calc(var(--d0) + .7s)}

.settled .nav-in > *,.settled .nav-links li,.settled .hero-top > *,.settled .hero-name .ch,.settled .hero-photo img,
.settled .hero-left > *,.settled .hero-right > *,.settled .field,.settled .cs-head > *{animation:none}

@keyframes rise{from{transform:translateY(24px);opacity:0}}
@keyframes drop{from{transform:translateY(-16px);opacity:0}}
@keyframes letter{from{transform:translateY(60%) rotate(6deg);opacity:0}}
@keyframes photoIn{from{clip-path:inset(100% 0 0 0);transform:translateY(60px) scale(1.06)}}
@keyframes fadeOnly{from{opacity:0}}

/* scroll-driven pieces are moved by JS; these keep them smooth */
.hero-name,.hero-left,.hero-right{will-change:transform}
.wipe{overflow:hidden}
.wipe img{transform:scale(1.08);transform-origin:center}
.contact-big .cl{display:inline-block;will-change:transform}
.marquee{transition:transform .25s ease-out}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  .js .rv,.js [data-stagger] > *,.js [data-mask] .wm > span{opacity:1;transform:none}
  .js .hero-name:not(.split){visibility:visible}
  .wipe img{transform:none}
  html{scroll-behavior:auto}
}

/* ==========================================================================
   Phones: tighter section spacing, quicker and smaller reveals, no slide-ins
   ========================================================================== */
@media (max-width:860px){
  .sec{padding:64px 0}
  .cs-sec{padding:52px 0}
  .sec-head{margin-bottom:32px}
  .cs-head{padding-top:28px;padding-bottom:28px}
  .cs-lead{margin-top:16px}
  .meta{margin-top:28px;gap:18px 16px}
  .h2{font-size:clamp(32px,9vw,44px)}
  .cs-grid .h2{font-size:clamp(30px,8.4vw,40px)}
  .statement{font-size:clamp(24px,7vw,30px)}
  .facts{margin-top:40px;gap:20px 16px}
  .work-row{padding:20px 0}
  .work-row .t{font-size:clamp(24px,7vw,32px)}
  .clients{padding-bottom:48px}
  .contact-big{font-size:clamp(56px,18vw,96px)}
  .contact-big .cl{transform:none!important}
  .paths{margin-top:32px;gap:16px}
  .path{padding:22px}
  .mail{margin-top:28px;padding-top:22px}
  .feature{padding:18px}
  .decision{padding-left:16px}
  .shot,.phones{padding:12px}
  .cover{padding:12px}
  .flow .step{padding:20px}
  .faq summary{padding:18px 40px 18px 0}
  /* case-study "How AI fit in" boxes carry an inline 2-column grid; stack them on phones */
  .flow{grid-template-columns:1fr!important}
  .flow .arrow{height:40px;transform:rotate(90deg)}
  .cs-title{font-size:clamp(32px,10vw,60px)}
  .foot{padding:24px 0 32px}
  /* reveals: shorter travel and a short, capped stagger so fast scrolling never shows empty space */
  .js .rv,.js [data-stagger] > *{transform:translateY(14px)}
  .js .work-list[data-stagger] > *{transform:translateY(14px)}
  .js .rv,.js [data-stagger] > *{transition-duration:.45s}
  .js [data-stagger] > *{transition-delay:calc(min(var(--i,0),5) * 40ms)}
  .js [data-mask] .wm > span{transition-duration:.6s}
  .wipe img{transform:none!important}
  .js .wipe{clip-path:none}
  .hero-name,.hero-left,.hero-right{will-change:auto}
}
