/* Rafael Thofehrn — site.css (light). One file, no framework, no build step. */
@font-face{font-family:"InterLogo";src:url("../fonts/logo.woff2") format("woff2");font-weight:700;font-display:block}
@font-face{font-family:"Bricolage";src:url("../fonts/bricolage.woff2") format("woff2");font-weight:200 800;font-display:swap}
:root{
  --bg:#f5f5f3;--bg2:#fff;--ink:#0e0e10;--mut:#6c6c72;--line:#e3e3df;--acc:#2340ff;
  --motion:#ff4d2e;--web:#2340ff;--ai:#12a150;--video:#f59e0b;--branding:#8b5cf6;--social:#ec4899;
  --f:"Bricolage",system-ui,-apple-system,"Segoe UI",sans-serif;
  --m:ui-monospace,"SF Mono",Menlo,Consolas,monospace;
  --pad:clamp(20px,4vw,56px);--max:1280px;--r:16px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;scroll-padding-top:80px}
body{background:var(--bg);color:var(--ink);font:400 clamp(.95rem,.2vw + .9rem,1.05rem)/1.6 var(--f);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
.wrap{max-width:var(--max);margin:0 auto;padding:0 var(--pad)}
.skip{position:absolute;left:-9999px}.skip:focus{left:12px;top:12px;background:var(--ink);color:#fff;padding:8px 14px;border-radius:8px;z-index:99}
:focus-visible{outline:2px solid var(--acc);outline-offset:3px;border-radius:4px}
.mono{font-family:var(--m);font-size:.74rem;letter-spacing:.12em;text-transform:uppercase;color:var(--mut)}
section{padding:clamp(60px,7.5vw,108px) 0}

/* header */
header.top{position:sticky;top:0;z-index:40;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:blur(14px);border-bottom:1px solid var(--line)}
header.top .wrap{display:flex;align-items:center;gap:28px;height:66px}
.brand{font-family:"InterLogo",Inter,system-ui,sans-serif;font-weight:700;font-size:1.2rem;margin-right:auto;color:#0e0e10}
.brand i{font-style:normal;color:#e74c3c}
header nav{display:flex;gap:26px;font-size:.95rem;color:var(--mut)}
header nav a:hover,header nav a[aria-current]{color:var(--ink)}
.btn{display:inline-flex;align-items:center;gap:.5em;padding:.8em 1.4em;border-radius:99px;font-weight:600;font-size:.95rem;border:1px solid var(--line);background:var(--bg2);transition:transform .2s,background .2s,color .2s,border-color .2s,box-shadow .2s}
.btn:hover{transform:translateY(-2px);border-color:var(--ink)}
.btn.pri{background:var(--ink);color:#fff;border-color:var(--ink)}
.btn.pri:hover{box-shadow:0 10px 30px rgba(0,0,0,.22)}
header .btn{padding:.55em 1.1em;font-size:.85rem}

/* hero */
.hero{position:relative;padding:clamp(40px,6vw,88px) 0 clamp(36px,5vw,64px);overflow:hidden}
.orb{position:absolute;left:30%;top:-20%;width:min(60vw,780px);aspect-ratio:1;border-radius:50%;background:conic-gradient(from 0deg,#ffd0c4,#e1ffb8,#b8e4ff,#dcc8ff,#ffd0c4);filter:blur(80px);opacity:.7;animation:spin 40s linear infinite;pointer-events:none}
@keyframes spin{to{transform:rotate(1turn)}}
.hero-grid>*{min-width:0}
.hero-grid{position:relative;display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:clamp(28px,5vw,72px);align-items:center}
.eyebrow{display:inline-flex;align-items:center;gap:10px;border:1px solid var(--line);border-radius:99px;padding:.45em 1em;margin-bottom:26px;background:var(--bg2)}
.eyebrow:before{content:"";width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 4px rgba(34,197,94,.18);animation:pulse 2s ease-in-out infinite}
@keyframes pulse{50%{box-shadow:0 0 0 7px rgba(34,197,94,0)}}
h1{font-weight:800;font-size:clamp(2.3rem,4.7vw,4.5rem);line-height:.98;letter-spacing:-.045em;max-width:14ch}
h1 span{position:relative;white-space:nowrap}
h1 span:after{content:"";position:absolute;left:0;right:0;bottom:.04em;height:.1em;background:var(--c);transform-origin:left;transform:scaleX(0);animation:draw .9s .5s cubic-bezier(.2,.8,.2,1) forwards;opacity:.9}
h1 span:nth-of-type(2):after{animation-delay:.75s}h1 span:nth-of-type(3):after{animation-delay:1s}
@keyframes draw{to{transform:scaleX(1)}}
.lede{max-width:52ch;margin-top:22px;color:var(--mut);font-size:clamp(1rem,.6vw + .85rem,1.2rem);line-height:1.55}
.lede b{color:var(--ink);font-weight:600}
.ctas{display:flex;flex-wrap:wrap;gap:12px;margin-top:28px}
.hero-media{position:relative}
.hero-media .vcard{aspect-ratio:16/9;border-radius:22px;box-shadow:0 30px 70px -20px rgba(20,20,40,.35)}
.vcard{display:block;position:relative;overflow:hidden;background:#d9d9d4 center/cover no-repeat;container-type:size}
.vcard iframe,.vcard video{position:absolute;left:50%;top:50%;width:max(100cqw,177.78cqh);height:max(100cqh,56.25cqw);transform:translate(-50%,-50%) scale(1.3);border:0;pointer-events:none;object-fit:cover}
.vcard .tag{position:absolute;left:16px;bottom:16px;z-index:3;display:inline-flex;gap:8px;align-items:center;padding:.5em 1em;border-radius:99px;background:rgba(255,255,255,.92);font-weight:600;font-size:.85rem;backdrop-filter:blur(8px)}
.vcard .tag:before{content:"";width:0;height:0;border-left:9px solid var(--ink);border-top:6px solid transparent;border-bottom:6px solid transparent}
.vcard.live{cursor:pointer}

/* brands marquee */
.brands{padding:0 0 clamp(40px,6vw,72px)}
.brands h2{text-align:center;font-family:var(--m);font-weight:400;font-size:.78rem;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin-bottom:22px}
.mq{overflow:hidden;-webkit-mask:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);mask:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent)}
.mq-track{display:flex;gap:clamp(30px,4.2vw,56px);width:max-content;align-items:center;animation:mq 60s linear infinite}
.mq:hover .mq-track{animation-play-state:paused}
@keyframes mq{to{transform:translateX(-50%)}}
.brand-i{display:flex;align-items:center;height:36px;color:#a0a0a6;font-weight:800;letter-spacing:-.02em;font-size:1.25rem;white-space:nowrap;transition:color .25s}
.brand-i.tx:hover{color:var(--bc,var(--ink))}
.brand-i img{object-fit:contain;filter:grayscale(1) brightness(.78) opacity(.6);transition:filter .3s,transform .3s}
.brand-i:hover img{filter:none;transform:scale(1.08)}

/* headings */
.sh{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:20px;margin-bottom:clamp(28px,4.5vw,52px)}
h2{font-weight:800;font-size:clamp(2.1rem,5.4vw,4.4rem);line-height:.98;letter-spacing:-.04em}
h2 small{display:block;font-family:var(--m);font-weight:400;font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin-bottom:14px}

/* selected work — expanding cubes */
.cubes{display:flex;flex-direction:column;gap:10px}
.crow{display:flex;gap:10px;height:clamp(190px,23vw,330px)}
.cube{--c:var(--web);display:block;position:relative;flex:1 1 0;min-width:0;border-radius:18px;overflow:hidden;background:#d9d9d4 center/cover no-repeat;container-type:size;transition:flex .65s cubic-bezier(.2,.85,.2,1),box-shadow .4s}
.crow:hover .cube{flex:.75}
.crow .cube:hover{flex:3.3;box-shadow:0 26px 60px -22px rgba(0,0,0,.45)}
.cube img.p{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.cube .yp,.vcard .yp{position:absolute;inset:0;opacity:0;transition:opacity .6s;pointer-events:none}.cube.on .yp,.vcard.on .yp{opacity:1}.cube .yp iframe,.vcard .yp iframe{opacity:1!important}
.cube iframe,.cube video{position:absolute;left:50%;top:50%;width:max(100cqw,177.78cqh);height:max(100cqh,56.25cqw);transform:translate(-50%,-50%) scale(1.3);border:0;pointer-events:none;object-fit:cover;opacity:0;transition:opacity .6s}
.cube.on iframe,.cube.on video{opacity:1}
.cube:after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(10,10,14,.7),transparent 52%);opacity:0;transition:opacity .35s}
.cube:hover:after{opacity:1}
.cube .lb{position:absolute;left:0;right:0;bottom:0;padding:18px 20px;z-index:2;color:#fff;opacity:0;transform:translateY(10px);transition:.35s;white-space:nowrap}
.cube:hover .lb{opacity:1;transform:none}
.cube .lb b{display:block;font-weight:700;font-size:1.25rem;letter-spacing:-.02em}
.cube .lb span{font-family:var(--m);font-size:.66rem;letter-spacing:.12em;text-transform:uppercase;opacity:.85}
.cube .dot{position:absolute;left:14px;top:14px;z-index:2;width:10px;height:10px;border-radius:50%;background:var(--c);box-shadow:0 0 0 3px rgba(255,255,255,.85)}
.more{display:flex;justify-content:center;margin-top:clamp(32px,5vw,56px)}
.more .btn{font-size:1.05rem;padding:1em 2em}

/* local businesses */
.local{padding:0 0 clamp(60px,7vw,100px)}
.lh{font-size:.78rem;font-family:var(--m);font-weight:400;letter-spacing:.14em;text-transform:uppercase;color:var(--mut);margin-bottom:16px}
.lps{display:flex;gap:10px;height:clamp(240px,26vw,340px)}
.lp{position:relative;flex:1 1 0;min-width:0;border-radius:18px;overflow:hidden;background:var(--bg2);border:1px solid var(--line);display:block;transition:flex .6s cubic-bezier(.2,.85,.2,1),box-shadow .4s}
.lps:hover .lp{flex:.7}.lps .lp:hover,.lps .lp:focus-visible{flex:3;box-shadow:0 24px 50px -22px rgba(0,0,0,.4)}
.lp img.p{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.12;filter:grayscale(1);transition:opacity .5s,transform .8s}
.lp:hover img.p,.lp:focus-visible img.p{opacity:1;filter:none;transform:scale(1.04)}
.lp:after{content:"";position:absolute;inset:0;background:linear-gradient(to top,rgba(8,8,10,.9),rgba(8,8,10,.2) 75%);opacity:0;transition:opacity .4s}
.lp:hover:after,.lp:focus-visible:after{opacity:1}
.lp .lg{position:absolute;inset:0;display:grid;place-items:center;padding:16px;z-index:2;text-align:center;transition:.4s}
.lp .lg b{font-weight:800;letter-spacing:-.02em;font-size:1.05rem;line-height:1.15}
.lp .lg img{max-height:84px;max-width:84%;width:auto;height:auto;object-fit:contain}
.lp:hover .lg{inset:auto auto auto 0;top:0;left:0;place-items:start;padding:16px 18px;color:#fff}
.lp:hover .lg img{filter:brightness(0) invert(1)}
.lp .in{position:absolute;left:0;right:0;bottom:0;padding:18px 20px;z-index:3;color:#fff;opacity:0;transform:translateY(12px);transition:.4s .05s;min-width:260px}
.lp:hover .in,.lp:focus-visible .in{opacity:1;transform:none}
.lp .in .mono{opacity:.8;font-size:.66rem}
.lp .in p{margin:6px 0 10px;font-size:.95rem;line-height:1.4;max-width:40ch;white-space:normal}
.lp .in .go{font-weight:600;font-size:.9rem}
.logos{display:flex;flex-wrap:wrap;gap:10px;flex:1}
.logos>*{display:inline-flex;align-items:center;justify-content:center;min-height:50px;padding:8px 18px;border:1px solid var(--line);border-radius:12px;background:var(--bg);font-weight:700;letter-spacing:-.01em;transition:.25s;white-space:nowrap}
.logos img{height:26px;width:auto;max-width:120px;object-fit:contain}
.logos a:hover{border-color:var(--ink);transform:translateY(-2px)}
.logos.dim>*{color:var(--mut);font-weight:600;background:transparent}

/* what I do — native details accordion */
.do details{border-top:1px solid var(--line)}
.do details:last-of-type{border-bottom:1px solid var(--line)}
.do summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:70px 1fr auto;gap:18px;align-items:center;padding:clamp(20px,3vw,34px) 0}
.do summary::-webkit-details-marker{display:none}
.do .n{font-family:var(--m);color:var(--c);font-size:.85rem;font-weight:600}
.do h3{font-weight:700;font-size:clamp(1.5rem,3.6vw,3rem);letter-spacing:-.03em;line-height:1.02;transition:transform .35s,color .35s}
.do summary:hover h3{transform:translateX(10px);color:var(--c)}
.do .plus{width:44px;height:44px;border:1px solid var(--line);border-radius:50%;display:grid;place-items:center;transition:.3s;font-size:1.4rem;line-height:1;background:var(--bg2)}
.do details[open] .plus{transform:rotate(45deg);background:var(--c);color:#fff;border-color:var(--c)}
.do .body{display:grid;grid-template-columns:70px 1fr;gap:18px;padding:0 0 clamp(24px,4vw,40px)}
.do .body div{max-width:62ch;color:var(--mut)}
.do .body p{margin-bottom:14px}
.tags{display:flex;flex-wrap:wrap;gap:8px;margin:16px 0}
.tags span{font-family:var(--m);font-size:.72rem;letter-spacing:.06em;padding:.35em .8em;border:1px solid var(--line);border-radius:99px;color:var(--ink);background:var(--bg2)}
.also{margin-top:24px;color:var(--mut)}
.also b{color:var(--ink);font-weight:600}
.lnk{color:var(--c);font-weight:600;border-bottom:1px solid transparent}.lnk:hover{border-color:var(--c)}

/* filters (work page) */
.filters{display:flex;flex-wrap:wrap;gap:8px}
.filters input{position:absolute;opacity:0;pointer-events:none}
.filters label{--c:var(--ink);cursor:pointer;display:inline-flex;gap:7px;align-items:center;padding:.4em .95em;border:1px solid var(--line);border-radius:99px;font-size:.92rem;font-weight:500;color:var(--mut);background:var(--bg2);transition:.2s;user-select:none}
.filters label:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--c)}
.filters label:hover{color:var(--ink);border-color:var(--c)}
.filters input:checked+label{background:var(--c);color:#fff;border-color:var(--c)}
.filters input:checked+label:before{background:#fff}
.filters input:focus-visible+label{outline:2px solid var(--acc);outline-offset:3px}
.l-all{--c:var(--ink)}.l-motion{--c:var(--motion)}.l-web{--c:var(--web)}.l-ai{--c:var(--ai)}.l-video{--c:var(--video)}.l-branding{--c:var(--branding)}.l-social{--c:var(--social)}

.grid{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(14px,2vw,26px)}
.card{--c:var(--web);position:relative;display:block;border-radius:var(--r);overflow:hidden;background:var(--bg2);border:1px solid var(--line);transition:transform .35s,border-color .35s,box-shadow .35s}
.card .im{aspect-ratio:16/10;overflow:hidden;background:linear-gradient(135deg,color-mix(in srgb,var(--c) 30%,#fff),#eee)}
.card img{width:100%;height:100%;object-fit:cover;transition:transform .7s cubic-bezier(.2,.8,.2,1)}
.card:hover{transform:translateY(-6px);border-color:var(--c);box-shadow:0 22px 50px -20px color-mix(in srgb,var(--c) 45%,transparent)}
.card:hover img{transform:scale(1.05)}
.card .tx{display:flex;justify-content:space-between;gap:16px;align-items:start;padding:18px 20px 22px}
.card h3{font-weight:700;font-size:clamp(1.2rem,2vw,1.55rem);letter-spacing:-.02em;line-height:1.15}
.card .meta{font-family:var(--m);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:var(--c);margin-top:6px}
.card .go{flex:none;width:38px;height:38px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;transition:.3s}
.card:hover .go{background:var(--c);color:#fff;border-color:var(--c);transform:rotate(-45deg)}
.card.wide{grid-column:1/-1}.card.wide .im{aspect-ratio:21/9}

/* work page */
.page-h{padding:clamp(48px,7vw,96px) 0 20px}
.fb{display:flex;align-items:center;justify-content:space-between;gap:16px 28px;flex-wrap:wrap}
.fb h1{font-size:clamp(1.6rem,2.6vw,2.2rem);letter-spacing:-.03em;max-width:none}
.fbar{position:sticky;top:66px;z-index:30;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(14px);border-block:1px solid var(--line);padding:10px 0;margin-top:0}
.wk:has(#f-motion:checked) .card:not([data-g~=motion]),
.wk:has(#f-web:checked) .card:not([data-g~=web]),
.wk:has(#f-ai:checked) .card:not([data-g~=ai]),
.wk:has(#f-video:checked) .card:not([data-g~=video]),
.wk:has(#f-branding:checked) .card:not([data-g~=branding]),
.wk:has(#f-social:checked) .card:not([data-g~=social]){display:none}
.work-wrap{padding:clamp(10px,1.4vw,20px)}
.work-grid{grid-template-columns:repeat(3,1fr);grid-auto-rows:clamp(150px,17vw,270px);grid-auto-flow:dense;gap:clamp(8px,1vw,14px)}
.work-grid .card{height:100%}.work-grid .card.z-w{grid-column:span 2}.work-grid .card.z-t{grid-row:span 2}.work-grid .card.z-b{grid-column:span 2;grid-row:span 2}
.work-grid .card{border-radius:12px;border-color:transparent}
.work-grid .card .im{aspect-ratio:auto;height:100%}
.work-grid .card.wide{grid-column:1/-1}
.work-grid .card.wide .im{aspect-ratio:auto;height:100%;min-height:0}
.work-grid .card .tx{position:absolute;left:0;right:0;bottom:0;padding:clamp(12px,1.6vw,22px);background:linear-gradient(to top,rgba(5,5,6,.85),rgba(5,5,6,.4) 55%,transparent)}
.work-grid .card h3{font-size:clamp(1.05rem,1.5vw,1.45rem);color:#fff}
.work-grid .card.z-b h3{font-size:clamp(1.5rem,2.8vw,2.4rem)}
.work-grid .card .go{border-color:rgba(255,255,255,.5);color:#fff}
.card .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px;align-items:center}
.card .chips .wm{font-family:var(--m);font-size:.62rem;letter-spacing:.08em;text-transform:uppercase;padding:.3em .7em;border-radius:99px;border:1px solid rgba(255,255,255,.4);color:#fff;background:rgba(0,0,0,.3)}
.card .chips .via{font-family:var(--m);font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.75);margin-right:2px}

/* about */
.about{display:grid;grid-template-columns:minmax(0,340px) 1fr;gap:clamp(30px,6vw,90px);align-items:start}
.about .ph{border-radius:var(--r);overflow:hidden;border:1px solid var(--line);aspect-ratio:1}
.about .ph img{width:100%;height:100%;object-fit:cover}
.about p{color:var(--mut);max-width:60ch;margin-bottom:16px}
.about p b{color:var(--ink);font-weight:600}
.edu{display:flex;gap:18px;align-items:flex-start;margin-top:26px;padding:22px 24px;border:1px solid var(--line);border-radius:var(--r);background:var(--bg2);max-width:60ch}
.edu .ic{flex:none;width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--acc) 12%,transparent);font-size:1.2rem}
.edu b{display:block;font-weight:700}
.edu span{color:var(--mut);font-size:.95rem}
.fit{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:clamp(36px,5vw,64px)}
.fit>div{padding:26px;border:1px solid var(--line);border-radius:var(--r);background:var(--bg2)}
.fit h3{font-family:var(--m);font-size:.74rem;font-weight:500;letter-spacing:.14em;text-transform:uppercase;margin-bottom:14px;color:var(--c)}
.fit ul{list-style:none;display:grid;gap:10px;color:var(--mut);font-size:.96rem}
.fit li{padding-left:18px;position:relative}.fit li:before{content:"";position:absolute;left:0;top:.72em;width:8px;height:1px;background:var(--c)}

/* experience */
.xp article{display:grid;grid-template-columns:260px 1fr;gap:clamp(14px,4vw,56px);padding:clamp(24px,3vw,38px) 0;border-top:1px solid var(--line)}
.xp article:last-child{border-bottom:1px solid var(--line)}
.xp time{display:block;font-family:var(--m);font-size:.8rem;color:var(--mut);letter-spacing:.05em;margin-bottom:12px}
.co-logo{display:inline-flex;align-items:center;min-height:46px;padding:8px 16px;border:1px solid var(--line);border-radius:12px;background:var(--bg2);font-weight:800;letter-spacing:-.02em}
.co-logo img{height:26px;width:auto}
.xp h3{font-weight:700;font-size:1.4rem;letter-spacing:-.02em}
.xp .co{color:var(--mut);margin:2px 0 12px;font-weight:500}
.xp p.d{color:var(--mut);max-width:68ch;line-height:1.6}
.sk{display:flex;flex-wrap:wrap;gap:6px}.sk span{padding:.28em .8em;border-radius:99px;background:var(--ink);color:#fff;font-size:.78rem;font-weight:600}
.xp ul.b{list-style:none;display:grid;gap:6px;color:var(--mut);max-width:66ch}
.xp ul.b li:before{content:"→ ";color:var(--ink)}
.xp .row{display:flex;flex-wrap:wrap;gap:8px 20px;align-items:center;margin-top:18px}
.xp .row .mono{flex:none;min-width:70px}
.mini{display:flex;flex-wrap:wrap;gap:8px}
.mini a{--c:var(--web);position:relative;width:64px;height:64px;border-radius:12px;overflow:hidden;border:1px solid var(--line);background:linear-gradient(135deg,color-mix(in srgb,var(--c) 30%,#fff),#eee);transition:transform .25s,box-shadow .25s,width .35s}
.mini a:hover{transform:translateY(-3px);box-shadow:0 12px 26px -10px rgba(0,0,0,.4);width:112px}
.mini img{width:100%;height:100%;object-fit:cover}
.cl{display:flex;flex-wrap:wrap;gap:6px 8px}
.cl span{display:inline-flex;align-items:center;gap:6px;padding:.25em .75em;border:1px solid var(--line);border-radius:99px;background:var(--bg2);font-size:.82rem;font-weight:600;color:var(--mut)}
.cl img{height:16px;width:auto}

/* contact */
.contact{background:var(--ink);color:#fff}
.contact .mono{color:rgba(255,255,255,.6)}
.big{display:block;font-weight:800;font-size:clamp(1.9rem,6.4vw,5.6rem);letter-spacing:-.045em;line-height:1;word-break:break-word;margin:22px 0 clamp(30px,5vw,56px);transition:color .25s}
.big:hover{color:#ffd0c4}
.cols{display:flex;flex-wrap:wrap;gap:20px 60px}
.cols div{min-width:160px}.cols .mono{display:block;margin-bottom:6px}
.cols a:hover{color:#ffd0c4}
footer{padding:28px 0;border-top:1px solid var(--line);color:var(--mut);font-size:.88rem}
footer .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:10px}
.contact+footer{background:var(--ink);color:rgba(255,255,255,.6);border-top-color:rgba(255,255,255,.12)}

/* project pages */
.p-hero{padding:clamp(48px,8vw,110px) 0 clamp(28px,4vw,48px)}
.crumb{margin-bottom:24px}.crumb a:hover{color:var(--ink)}
.p-hero h1{font-size:clamp(2.4rem,7vw,6rem);max-width:18ch}
.p-hero .lede{margin-top:22px}
.p-meta{display:flex;flex-wrap:wrap;gap:8px;margin-top:22px}
.p-meta span{font-family:var(--m);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;padding:.4em .9em;border-radius:99px;border:1px solid var(--line);color:var(--mut);background:var(--bg2)}
.p-meta .cat{color:var(--c);border-color:var(--c)}
.p-media{display:grid;gap:0}
.p-media img{width:100%}
.p-media .vid{position:relative;aspect-ratio:16/9;background:#000;cursor:pointer;overflow:hidden}
.p-media .vid img{width:100%;height:100%;object-fit:cover;opacity:.85}
.p-media .vid:after{content:"";position:absolute;left:50%;top:50%;width:84px;height:84px;margin:-42px 0 0 -42px;border-radius:50%;background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%230e0e10' d='M8 5v14l11-7z'/%3E%3C/svg%3E") center/42px no-repeat;box-shadow:0 10px 40px rgba(0,0,0,.4)}
.p-media .vid iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.p-media.vids{gap:clamp(14px,2vw,24px)}
.p-media.soc{grid-template-columns:repeat(3,1fr);gap:4px}
.p-media.soc img{aspect-ratio:1;object-fit:cover}
.p-info{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:clamp(24px,4vw,56px);padding:clamp(48px,7vw,90px) 0}
.p-info h2{font-size:1rem;letter-spacing:.14em;font-family:var(--m);font-weight:400;color:var(--mut);text-transform:uppercase;margin-bottom:12px;line-height:1.2}
.p-info ul{list-style:none;display:grid;gap:6px}.p-info li:before{content:"→ ";color:var(--acc)}
.p-from{display:flex;flex-wrap:wrap;gap:10px 22px;align-items:center;margin-top:26px;padding-top:22px;border-top:1px solid var(--line)}
.p-from .logos{flex:none}.p-from .logos>*{min-height:44px;padding:6px 16px}
.p-nav{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding-bottom:clamp(56px,8vw,100px)}

/* progressive scroll-driven reveal */
@supports (animation-timeline:view()){
  .rv{animation:rv linear both;animation-timeline:view();animation-range:entry 0% entry 35%}
  @keyframes rv{from{opacity:0;transform:translateY(34px)}to{opacity:1;transform:none}}
}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}html{scroll-behavior:auto}h1 span:after{transform:none}.mq-track{flex-wrap:wrap;width:auto;justify-content:center}}

@media(max-width:900px){
  header nav{display:none}
  .hero-grid{grid-template-columns:1fr}.hero-media .vcard{aspect-ratio:16/10}
  .grid{grid-template-columns:1fr}.work-grid{grid-template-columns:1fr 1fr;grid-auto-rows:46vw}.work-grid .card.z-w,.work-grid .card.z-b{grid-column:span 2}.work-grid .card.z-b{grid-row:span 1}
  .card.wide .im{aspect-ratio:16/10}
  .crow{display:grid;grid-template-columns:repeat(2,1fr);height:auto}
  .cube{aspect-ratio:1}.crow:hover .cube,.crow .cube:hover{flex:none}
  .cube .lb{opacity:1;transform:none}.cube:after{opacity:1}
  .cubes{gap:10px}
  .lps{flex-direction:column;height:auto}.lp,.lps:hover .lp,.lps .lp:hover{flex:none;min-height:150px}.lp img.p{opacity:1}.lp:after{opacity:1}.lp .lg{inset:auto;top:0;left:0;place-items:start;padding:14px 16px;color:#fff}.lp .lg img{filter:brightness(0) invert(1)}.lp .in{opacity:1;transform:none;min-width:0;position:relative;padding-top:54px}.lp{display:flex;flex-direction:column;justify-content:flex-end}
  .fb h1{display:none}.filters{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;margin-inline:-4px;padding:2px 4px}.filters label{white-space:nowrap}.fbar{top:62px}
  .about{grid-template-columns:1fr}.about .ph{max-width:240px}
  .fit{grid-template-columns:1fr}
  .xp article{grid-template-columns:1fr;gap:6px}
  .do summary{grid-template-columns:44px 1fr auto}.do .body{grid-template-columns:44px 1fr}
  .p-media.soc{grid-template-columns:repeat(2,1fr)}
}

/* work page — same expanding cubes as the home page */
.wk-h{padding:clamp(40px,5vw,72px) 0 clamp(18px,2vw,28px)}
.wk-h h1{font-size:clamp(2.2rem,4.6vw,4rem);max-width:none;margin:8px 0 0}
.wk-h .lede{margin-top:12px}
.wk .pn{display:none}
.wk .pn-all{display:flex}
.wk:has(.filters input:not(#f-all):checked) .pn-all{display:none}
.wk:has(#f-all:checked) .pn-all,.wk:has(#f-motion:checked) .pn-motion,.wk:has(#f-web:checked) .pn-web,.wk:has(#f-ai:checked) .pn-ai,.wk:has(#f-video:checked) .pn-video,.wk:has(#f-branding:checked) .pn-branding,.wk:has(#f-social:checked) .pn-social{display:flex}
.wk .crow{height:clamp(220px,26vw,390px)}
@media(max-width:800px){.wk .crow{height:auto}}

/* experience: company on the left (with total time), role steps on a vertical line on the right */
.xp .tot{display:inline-block;margin-bottom:12px;margin-right:8px;font-family:var(--m);font-size:.78rem;letter-spacing:.06em;padding:.3em .8em;border-radius:99px;background:var(--ink);color:#fff}
.xp article>div:first-child small{display:block;margin-top:10px;color:var(--mut);font-size:.82rem;line-height:1.4}
.tl{position:relative;display:grid;gap:34px;padding-left:30px}
.tl:before{content:"";position:absolute;left:5px;top:10px;bottom:10px;width:2px;background:var(--line)}
.tl .step{position:relative}
.tl .step:before{content:"";position:absolute;left:-30px;top:.5em;width:12px;height:12px;border-radius:50%;background:var(--bg2);border:2px solid var(--ink)}
.tl .step:first-child:before{background:var(--ink)}
.tl .when{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:center;margin:4px 0 12px;color:var(--mut);font-size:.9rem}
.tl .when time{display:inline;margin:0;font-size:.8rem}
.tl .when span{padding:.15em .65em;border-radius:99px;border:1px solid var(--line);background:var(--bg2);font-size:.78rem;font-weight:600;color:var(--ink)}

.co-logo{padding:6px 12px}.co-logo img{height:30px;width:auto;border-radius:4px}.co-logo.dk{padding:0;overflow:hidden;border-radius:10px}.co-logo.dk img{border-radius:0;height:46px}
.xp article>div:first-child .co-logo{margin-right:8px;margin-bottom:4px}
.lp.dk{background:#001232;border-color:#001232}.lp.dk .lg img{max-height:none;max-width:100%;width:100%;height:auto;object-fit:contain}.lp.dk:hover .lg img{filter:none}.lp.dk .lg{padding:0}
.lp.dk:hover .lg{inset:0;padding:0}
.lp.dk:hover .lg,.lp.dk:focus-visible .lg{inset:0 0 auto 0;height:50%;padding:12px;place-items:center}
.lp.dk:hover .lg img{width:auto;height:100%;max-width:100%}

/* experience: aligned company badges */
.xp article>div:first-child{display:flex;flex-wrap:wrap;align-content:flex-start;align-items:center;gap:10px}
.xp article>div:first-child .co-logo{margin:0;height:52px;min-height:0;padding:0 14px;box-sizing:border-box;justify-content:center}
.xp article>div:first-child .co-logo img{width:auto;max-width:150px;object-fit:contain}
.xp article>div:first-child .co-logo.dk{padding:0}
.xp article>div:first-child .co-logo.dk img{height:52px!important;max-width:none}
.xp .tot{order:3;margin:0}
.xp article>div:first-child small{order:4;flex-basis:100%;margin-top:4px}
.lp.dk img{background:none}
.xp article>div:first-child:after{content:"";order:2;flex-basis:100%;height:0}
.xp article>div:first-child .co-logo{height:72px;padding:0 18px}
.xp article>div:first-child .co-logo img{max-width:200px}
.xp article>div:first-child .co-logo.dk{padding:0}
.xp article>div:first-child .co-logo.dk img{height:72px!important}

.cl .lg{padding:.35em .9em;height:44px;justify-content:center}.cl .lg img{height:auto;object-fit:contain}
.cl .lg{height:36px;padding:.3em .8em}

/* ---- project notes, tags, screenshots ---- */
.tagp{display:inline-flex;align-items:center;font:600 .72rem/1 var(--mono,ui-monospace,monospace);letter-spacing:.04em;text-transform:uppercase;padding:7px 11px;border-radius:99px;background:var(--ink);color:#fff}
.p-note{margin-top:18px;max-width:62ch;padding:12px 16px;border-left:3px solid var(--video);background:#fff;border-radius:0 10px 10px 0;font-size:.92rem;line-height:1.5;color:#3a3a3d}
.soon{padding:60px 0;text-align:center;color:#8a8a85}
.p-shots{display:grid;gap:clamp(14px,2vw,28px);padding:clamp(12px,2vw,24px) 0}
.p-shots figure,.p-phones figure{margin:0;border-radius:14px;overflow:hidden;border:1px solid #e3e3df;box-shadow:0 18px 50px -24px rgba(14,14,16,.35);background:#fff}
.p-shots img,.p-phones img{display:block;width:100%;height:auto}
.p-phones{display:flex;gap:clamp(14px,2vw,28px);justify-content:center;padding:6px 0 clamp(20px,3vw,40px)}
.p-phones figure{width:min(300px,70vw);border-radius:26px}
/* websites page */
.ws{padding:clamp(28px,4vw,56px) 0;border-top:1px solid #e3e3df}
.ws:first-child{border-top:0}
.ws-t{display:grid;grid-template-columns:56px 1fr;gap:12px;margin-bottom:clamp(16px,2vw,26px)}
.ws-t .mono{color:#8a8a85;padding-top:10px}
.ws-t h2{font-size:clamp(1.6rem,3.4vw,2.6rem);line-height:1.05}
.ws-t p{margin-top:10px;max-width:68ch;color:#3a3a3d}
.ws .p-meta{margin-top:14px;display:flex;flex-wrap:wrap;gap:8px}
.ws .p-meta span:not(.tagp){font-size:.78rem;padding:6px 10px;border-radius:99px;border:1px solid #d8d8d3;color:#4a4a4d}
.ws .ctas{margin-top:18px;display:flex;flex-wrap:wrap;gap:10px}
.ws .br{display:block;border-radius:14px;overflow:hidden;border:1px solid #e3e3df;background:#fff;box-shadow:0 24px 60px -28px rgba(14,14,16,.4);transition:transform .35s}
.ws .br:hover{transform:translateY(-3px)}
.ws .bar{display:flex;align-items:center;gap:6px;padding:10px 14px;background:#f1f1ee;border-bottom:1px solid #e3e3df}
.ws .bar i{width:10px;height:10px;border-radius:50%;background:#d4d4cf}
.ws .bar span{margin-left:10px;font:500 .78rem/1 var(--mono,ui-monospace,monospace);color:#8a8a85;background:#fff;padding:6px 14px;border-radius:99px;flex:0 1 360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ws .br>img{display:block;width:100%;height:auto}
.ws .ph-soon{aspect-ratio:16/8;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:#f7f7f4}
.ws .ph-soon b{font-size:clamp(1.3rem,3vw,2.2rem)}
.ws .ph-soon span{color:#8a8a85}
.ws .more{display:grid;grid-template-columns:repeat(4,1fr);gap:clamp(10px,1.5vw,18px);margin-top:clamp(10px,1.5vw,18px);align-items:start}
.ws .more a{display:block;border-radius:10px;overflow:hidden;border:1px solid #e3e3df;background:#fff}
.ws .more a.ph{border-radius:18px}
.ws .more img{display:block;width:100%;height:auto}
@media(max-width:700px){.ws-t{grid-template-columns:1fr}.ws .more{grid-template-columns:repeat(2,1fr)}}

.subs{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:clamp(8px,2vw,24px) 0 clamp(28px,4vw,56px)}
.sub{display:flex;flex-direction:column;gap:8px;min-height:300px;padding:26px;border-radius:18px;background:#111114;color:#fff;transition:transform .35s,box-shadow .35s}
.sub:hover{transform:translateY(-6px);box-shadow:0 26px 60px -24px rgba(0,0,0,.5)}
.sub .mono{color:#ffb347;opacity:.9}
.sub h3{font-size:clamp(1.6rem,2.6vw,2.2rem);line-height:1.05;margin-top:auto}
.sub b{font-weight:600;opacity:.92}
.sub .cl{font-size:.85rem;opacity:.6}
.sub .go{margin-top:10px;font-family:var(--m);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;opacity:.85}
@media(max-width:800px){.subs{grid-template-columns:1fr}.sub{min-height:200px}}

.sub{position:relative;overflow:hidden;container-type:size;isolation:isolate}
.sub:after{content:"";position:absolute;inset:0;z-index:0;background:linear-gradient(to top,rgba(10,10,14,.88),rgba(10,10,14,.25) 70%);opacity:0;transition:opacity .6s;pointer-events:none}
.sub.on:after{opacity:1}
.sub>*{position:relative;z-index:1}
.sub .yp{position:absolute;inset:0;z-index:-1;opacity:0;transition:opacity .6s;pointer-events:none}
.sub.on .yp{opacity:1}
.sub iframe{position:absolute;left:50%;top:50%;width:max(100cqw,177.78cqh);height:max(100cqh,56.25cqw);transform:translate(-50%,-50%) scale(1.3);border:0;pointer-events:none}

.p-gal{columns:3;column-gap:12px;margin:clamp(8px,2vw,24px) 0 clamp(28px,4vw,56px)}
.p-gal img{width:100%;display:block;margin-bottom:12px;border-radius:12px;break-inside:avoid}
@media(max-width:800px){.p-gal{columns:2;column-gap:8px}.p-gal img{margin-bottom:8px;border-radius:8px}}
.sub .bgi{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-1}
.sub.ph:after{opacity:1}

.cmp{--p:50%;position:relative;aspect-ratio:16/10;max-width:1100px;margin:clamp(8px,2vw,24px) auto clamp(18px,3vw,36px);border-radius:18px;overflow:hidden;background:#f1f0ec;box-shadow:0 24px 60px -28px rgba(14,14,16,.4);user-select:none}
.cmp>img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none}
.cmp .aft{clip-path:inset(0 0 0 var(--p))}
.cmp .bar{position:absolute;top:0;bottom:0;left:var(--p);width:3px;margin-left:-1.5px;background:#fff;box-shadow:0 0 0 1px rgba(0,0,0,.15);pointer-events:none}
.cmp .bar:after{content:"\2194";position:absolute;top:50%;left:50%;width:46px;height:46px;margin:-23px 0 0 -23px;border-radius:50%;background:#fff;display:grid;place-items:center;font-size:20px;box-shadow:0 6px 20px rgba(0,0,0,.3)}
.cmp input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:ew-resize;margin:0}
.cmp .cl{position:absolute;top:14px;padding:6px 12px;border-radius:99px;background:rgba(14,14,16,.7);color:#fff;font-family:var(--m);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;pointer-events:none}
.cmp .cl.b{left:14px}.cmp .cl.a{right:14px}
.p-gal.sq{columns:4}
@media(max-width:800px){.p-gal.sq{columns:2}}
