/* Fonts: latin subsets, variable weight, self-hosted */
@font-face{font-family:'Newsreader';font-style:normal;font-weight:300 500;font-display:swap;src:url(../fonts/newsreader-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Geist';font-style:normal;font-weight:400 600;font-display:swap;src:url(../fonts/geist-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* Tokens: light by default, dark from the system unless the visitor chose light, or when they chose dark */
:root{--paper:#FDFBF7;--ink:#1F1A16;--quiet:#6B6258;--sheet:#F2ECE1;--red:#B8402F;--hair:rgba(31,26,22,.1);--hi:rgba(255,255,255,.75);--ease:cubic-bezier(.32,.72,0,1);color-scheme:light}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--paper:#14100D;--ink:#F1E9DC;--quiet:#A59B8E;--sheet:#1E1814;--red:#E8705F;--hair:rgba(241,233,220,.13);--hi:rgba(255,255,255,.07);color-scheme:dark}}
:root[data-theme="dark"]{--paper:#14100D;--ink:#F1E9DC;--quiet:#A59B8E;--sheet:#1E1814;--red:#E8705F;--hair:rgba(241,233,220,.13);--hi:rgba(255,255,255,.07);color-scheme:dark}

html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
[hidden]{display:none!important}
body{margin:0;min-height:100dvh;overflow-x:clip;background:var(--paper);color:var(--ink);font-family:'Newsreader',Georgia,serif;font-size:19px;line-height:1.6;-webkit-font-smoothing:antialiased}
/* Grain: one fixed layer, never interactive */
body::after{content:"";position:fixed;inset:0;z-index:30;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>")}
a{color:var(--red)}
a.plain{color:inherit;text-decoration:none}
a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--red);outline-offset:3px}
svg{overflow:visible}
.ui{font-family:'Geist',system-ui,sans-serif}
.wrap{max-width:1160px;margin:0 auto;padding:0 clamp(16px,4vw,32px)}
.sec{padding:clamp(72px,10vw,128px) 0 0}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

.skip{position:fixed;top:12px;left:12px;z-index:40;display:inline-flex;align-items:center;min-height:44px;padding:0 18px;border-radius:999px;background:var(--ink);color:var(--paper);font:500 15px/1 'Geist',system-ui,sans-serif;text-decoration:none;transform:translateY(-200%);transition:transform .2s var(--ease)}
.skip:focus{transform:none}

/* Double-bezel card */
.shell{background:color-mix(in srgb,var(--ink) 4%,transparent);box-shadow:0 0 0 1px var(--hair);padding:6px;border-radius:32px}
.core{background:var(--paper);border-radius:26px;box-shadow:inset 0 1px 1px var(--hi);height:100%;box-sizing:border-box}
.eyebrow{display:inline-block;margin:0;font:500 11px/1 'Geist',system-ui,sans-serif;text-transform:uppercase;letter-spacing:.2em;padding:8px 12px;border-radius:999px;background:color-mix(in srgb,var(--ink) 4%,transparent);box-shadow:0 0 0 1px var(--hair);color:var(--quiet)}
.h2{margin:18px 0 0;font-weight:400;font-size:clamp(2rem,4vw,3.2rem);line-height:1.1;letter-spacing:-.015em}

/* Pill buttons, arrow in its own circle */
.btn{display:inline-flex;align-items:center;gap:16px;padding:8px 8px 8px 24px;border-radius:999px;font:500 16px/1.25 'Geist',system-ui,sans-serif;text-decoration:none;cursor:pointer;border:0;transition:transform .16s var(--ease),opacity .2s var(--ease)}
.btn:active{transform:scale(.98)}
a.btn,button.btn{background:var(--ink);color:var(--paper)}
a.btn.ghost{background:transparent;color:var(--ink);box-shadow:0 0 0 1px var(--hair)}
.btn .ic{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--paper) 16%,transparent);transition:transform .2s var(--ease)}
.btn.ghost .ic{background:color-mix(in srgb,var(--ink) 7%,transparent)}
@media (hover:hover) and (pointer:fine){.btn:hover .ic{transform:translate(4px,-1px) scale(1.05)}.btn:hover{opacity:.94}}
button.btn:disabled{cursor:progress;opacity:.6}

/* Floating glass nav */
.nav{position:fixed;top:20px;left:50%;translate:-50% 0;z-index:20;width:min(780px,calc(100% - 32px));box-sizing:border-box;display:flex;align-items:center;justify-content:space-between;gap:16px;padding:8px 8px 8px 24px;border-radius:999px;background:color-mix(in srgb,var(--paper) 72%,transparent);-webkit-backdrop-filter:blur(24px) saturate(1.4);backdrop-filter:blur(24px) saturate(1.4);box-shadow:0 0 0 1px var(--hair),0 12px 32px -16px color-mix(in srgb,var(--ink) 25%,transparent)}
.nav .name{display:inline-flex;align-items:center;min-height:44px;font:600 16px/1 'Geist',system-ui,sans-serif;letter-spacing:-.01em}
.navlinks{display:flex;gap:28px;font:400 15px/1 'Geist',system-ui,sans-serif}
.navlinks a{display:inline-flex;align-items:center;min-height:44px;color:var(--quiet);text-decoration:none;transition:color .2s ease}
@media (hover:hover) and (pointer:fine){.navlinks a:hover{color:var(--ink)}}
.right{display:flex;align-items:center;gap:8px}
button.theme{display:inline-flex;align-items:center;gap:10px;font:400 14px/1 'Geist',system-ui,sans-serif;color:var(--ink);background:transparent;border:0;border-radius:999px;padding:0 14px;min-height:44px;cursor:pointer;transition:transform .16s var(--ease)}
button.theme:active{transform:scale(.97)}
.track{width:36px;height:20px;border-radius:10px;position:relative;box-shadow:inset 0 0 0 1px var(--quiet);transition:opacity .25s var(--ease)}
.knob{position:absolute;top:3px;left:3px;width:14px;height:14px;border-radius:50%;background:var(--ink);transition:transform .25s var(--ease)}
button.theme[aria-checked="true"] .track{background:var(--ink)}
button.theme[aria-checked="true"] .knob{transform:translateX(16px);background:var(--paper)}
.burger{display:none;position:relative;width:44px;height:44px;border:0;border-radius:50%;background:transparent;cursor:pointer}
.burger i{position:absolute;left:14px;width:16px;height:1.5px;background:var(--ink);transition:transform .25s var(--ease)}
.burger i:nth-child(1){top:19px}
.burger i:nth-child(2){top:25px}
.burger[aria-expanded="true"] i:nth-child(1){transform:translateY(3px) rotate(45deg)}
.burger[aria-expanded="true"] i:nth-child(2){transform:translateY(-3px) rotate(-45deg)}
.overlay{display:none}
@media (max-width:767px){
.navlinks{display:none}
.theme .lbl{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap}
.burger{display:block}
.overlay{display:flex;position:fixed;inset:0;z-index:15;flex-direction:column;justify-content:center;gap:12px;padding:0 32px;background:color-mix(in srgb,var(--paper) 84%,transparent);-webkit-backdrop-filter:blur(32px);backdrop-filter:blur(32px);opacity:0;pointer-events:none;transition:opacity .3s var(--ease)}
.overlay[data-open="true"]{opacity:1;pointer-events:auto;transition-duration:.7s}
.overlay a{font-size:2.6rem;line-height:1.15;letter-spacing:-.02em;text-decoration:none;color:var(--ink);opacity:0;transform:translateY(48px);transition:transform .2s var(--ease),opacity .2s var(--ease)}
/* Open slowly with a stagger, close fast */
.overlay[data-open="true"] a{opacity:1;transform:none;transition-duration:.7s}
.overlay[data-open="true"] a:nth-child(1){transition-delay:100ms}
.overlay[data-open="true"] a:nth-child(2){transition-delay:150ms}
.overlay[data-open="true"] a:nth-child(3){transition-delay:200ms}
}

/* Home */
.hero{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,.7fr);gap:clamp(32px,5vw,72px);align-items:center;padding-top:clamp(128px,16vw,176px)}
.h1{margin:24px 0 0;font-weight:300;font-size:clamp(2.6rem,6.4vw,5.6rem);line-height:1.02;letter-spacing:-.025em}
@media (max-width:767px){.hero{grid-template-columns:1fr}}
.lede{margin:28px 0 0;max-width:32em;color:var(--quiet)}
.actions{margin:36px 0 0;display:flex;flex-wrap:wrap;align-items:center;gap:16px}
.stamp{padding:24px;display:grid;place-items:center}
.postmark{width:100%;max-width:320px;height:auto}

.proof{margin:20px 0 0;max-width:22em;font-weight:300;font-size:clamp(1.6rem,3.2vw,2.6rem);line-height:1.25;letter-spacing:-.01em}

.bento{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:24px;margin-top:40px}
.bento>*:nth-child(1){grid-column:span 7}
.bento>*:nth-child(2){grid-column:span 5}
.bento>*:nth-child(3){grid-column:span 5}
.bento>*:nth-child(4){grid-column:span 7}
.bento.steps>*:nth-child(1){grid-column:span 5}
.bento.steps>*:nth-child(2){grid-column:span 7}
.bento.steps>*:nth-child(3){grid-column:span 7}
.bento.steps>*:nth-child(4){grid-column:span 5}
@media (max-width:767px){.bento{grid-template-columns:1fr;gap:16px}.bento>*:nth-child(n),.bento.steps>*:nth-child(n){grid-column:auto}}
a.card{display:block;text-decoration:none;color:inherit;transition:transform .25s var(--ease)}
a.card:active{transform:scale(.985)}
@media (hover:hover) and (pointer:fine){a.card:hover{transform:translateY(-4px)}a.card:hover .go{transform:translate(4px,-1px) scale(1.05)}}
.card .core{padding:12px;display:flex;flex-direction:column}
.go{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;flex:none;background:color-mix(in srgb,var(--ink) 7%,transparent);color:var(--ink);transition:transform .2s var(--ease)}
.art{background:var(--sheet);border-radius:18px;padding:24px}
.art svg{display:block;width:100%;height:auto}
.cardfoot{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;padding:20px 12px 12px}
.cardtitle{margin:14px 0 0;font-size:22px;line-height:1.3;letter-spacing:-.005em}

.num{font:500 13px/1 'Geist',system-ui,sans-serif;letter-spacing:.14em;color:var(--quiet)}
.step{padding:32px}
.step h3{margin:28px 0 8px;font-size:28px;line-height:1.2;font-weight:400}
.step p{margin:0;font-size:18px;line-height:1.5;color:var(--quiet);max-width:30em}

/* Toolkit: an open, ruled list beside the heading, so it reads differently from the card grids around it */
.kit-wrap{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2.2fr);gap:40px 56px;align-items:start}
.kit{margin:0}
.kit-row{display:grid;grid-template-columns:minmax(0,11rem) minmax(0,1fr);gap:6px 32px;align-items:baseline;padding:26px 0;box-shadow:0 -1px 0 var(--hair)}
.kit-row:last-child{box-shadow:0 -1px 0 var(--hair),0 1px 0 var(--hair)}
.kit dt{font-size:13px;line-height:1.4;font-weight:500;letter-spacing:.14em;text-transform:uppercase;color:var(--quiet)}
.kit dd{margin:0;font-size:clamp(1.3rem,2.2vw,1.65rem);line-height:1.3;font-weight:300;letter-spacing:-.005em}
@media (max-width:767px){.kit-wrap{grid-template-columns:1fr}.kit-row{grid-template-columns:1fr;padding:22px 0}}

.band{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:32px;padding:clamp(28px,5vw,64px)}
.band p{margin:20px 0 0;color:var(--quiet)}
.bandtext{max-width:34em}
.projtext{max-width:32em}
html:not(.js) #contact-form{display:none}
.project{margin-top:40px}
.project .core{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:28px;padding:clamp(28px,5vw,48px)}
.project h3{margin:0;font-size:32px;line-height:1.2;font-weight:400}
.project .desc{margin:10px 0 0;color:var(--quiet)}
.project .more{margin:20px 0 0}

/* Contact */
.contact{padding-bottom:clamp(72px,10vw,128px)}
.contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(300px,100%),1fr));gap:48px 64px;align-items:start}
.where{margin:24px 0 0;display:flex;align-items:center;gap:16px}
.where span{color:var(--quiet)}
.li{display:inline-flex;min-width:44px;min-height:44px;align-items:center;color:var(--ink)}
.formcore{padding:clamp(24px,4vw,40px)}
.inputs{display:flex;flex-direction:column;gap:20px}
.lab{display:block;margin:0 0 8px;font:500 13px/1 'Geist',system-ui,sans-serif;letter-spacing:.04em;color:var(--quiet)}
.lrow{display:flex;justify-content:space-between;align-items:baseline;margin:0 0 8px}.lrow .lab{margin:0}
.req{font:500 11px/1 'Geist',system-ui,sans-serif;letter-spacing:.14em;text-transform:uppercase;color:var(--quiet)}
.err{margin:8px 0 0;font:400 14px/1.4 'Geist',system-ui,sans-serif;color:var(--red)}
.fld{font:400 17px/1.5 'Geist',system-ui,sans-serif;background:var(--sheet);color:var(--ink);border:0;border-radius:16px;box-shadow:0 0 0 1px var(--hair);padding:14px 16px;min-height:48px;box-sizing:border-box;width:100%;margin:0}
.fld[aria-invalid="true"]{box-shadow:0 0 0 1.5px var(--red)}
textarea.fld{resize:vertical}
.hp{display:none}
.status:empty{display:none}
.status{margin:20px 0 0;font:400 15px/1.5 'Geist',system-ui,sans-serif;color:var(--red)}
.status.done{margin:0;max-width:34em;font:inherit;color:var(--ink)}
.status.done:focus{outline:none}
.nojs{margin:0 0 20px;font:400 15px/1.5 'Geist',system-ui,sans-serif}

/* Case studies */
.cs-top{padding-top:clamp(112px,14vw,152px)}
.cs-tag{margin-top:48px}
.cs-title{font-size:clamp(2.2rem,5vw,4rem);max-width:18em}
.facts{margin-top:48px}
.facts .core{padding:28px;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:24px 32px}
.facts p{margin:0;font-size:18px;line-height:1.45}
.split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2.2fr);gap:20px 56px;align-items:start}
@media (max-width:767px){.split{grid-template-columns:1fr}}
.split p{margin:0 0 18px;max-width:36em;font-size:20px;line-height:1.6}
.split p:last-child{margin-bottom:0}
.evidence{margin-top:24px}
.evidence>.core{padding:clamp(20px,3vw,36px)}
.scroll{overflow-x:auto}
.tbl{width:100%;min-width:640px;border-collapse:collapse}
.tbl.wide{min-width:820px}
.tbl th{font:500 11px/1 'Geist',system-ui,sans-serif;text-transform:uppercase;letter-spacing:.16em;text-align:left;color:var(--quiet);padding:0 20px 16px 0;border-bottom:1px solid var(--hair)}
.tbl td{padding:18px 20px 18px 0;border-bottom:1px solid var(--hair);vertical-align:top;font-size:17px;line-height:1.5}
.tbl tr:last-child td{border-bottom:0}
.tbl td:first-child{font:600 15px/1.5 'Geist',system-ui,sans-serif}
.note{margin-top:28px;padding-top:28px;box-shadow:0 -1px 0 var(--hair)}
.note p{margin:0;max-width:40em;font-size:18px;line-height:1.6;color:var(--quiet)}
.cs-end{padding-bottom:clamp(72px,10vw,128px)}

/* Motion. Scroll reveals use translate so card hover transforms still work after the reveal */
@keyframes rise{from{opacity:0;translate:0 40px}to{opacity:1;translate:0 0}}
@supports (animation-timeline:view()){.rv{animation:rise cubic-bezier(.32,.72,0,1) both;animation-timeline:view();animation-range:entry 0% entry 40%}}
@keyframes settle{from{opacity:0;translate:0 6px}to{opacity:1;translate:0 0}}
@keyframes fadein{from{opacity:0}to{opacity:1}}
.sent{animation:settle 700ms var(--ease) both}
@keyframes press{0%{opacity:0;transform:scale(1.5) rotate(-14deg)}65%{opacity:1;transform:scale(.97) rotate(-8deg)}100%{opacity:1;transform:scale(1) rotate(-8deg)}}
.postmark{transform:rotate(-8deg);animation:press .9s var(--ease) both}
/* Reduced motion: no movement, only short opacity fades */
@media (prefers-reduced-motion: reduce){
.rv{animation:none}
@supports (animation-timeline:view()){.rv{animation:fadein linear both;animation-timeline:view();animation-range:entry 0% entry 40%}}
.postmark{animation:fadein .3s ease-out both}
.sent{animation:fadein 150ms ease-out both}
.btn,.btn .ic,a.card,.go,.knob,.burger i,.skip,button.theme{transition-duration:.01ms;transition-delay:0ms}
.btn:active,button.theme:active,a.card:active,a.card:hover,.btn:hover .ic,a.card:hover .go{transform:none}
.overlay a,.overlay[data-open="true"] a{transform:none;transition:opacity .2s ease-out;transition-delay:0ms}
.overlay,.overlay[data-open="true"]{transition:opacity .2s ease-out}
}
