/* COMPONENTS: nav, hero, work card, experiment card, tag, lightbox, about, footer. All values come from tokens.css. */
:root.dark .gl:before{opacity:.12}
html{scroll-behavior:smooth;scroll-padding-top:env(safe-area-inset-top,0px)}
*,*:before,*:after{box-sizing:inherit}
body{margin:0;background:var(--bg);color:var(--ink);font:400 var(--t-base)/var(--lh-body) "General Sans",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-font-smoothing:antialiased;overflow-x:hidden}
h1,h2,h3{margin:0;font-weight:var(--h-weight);letter-spacing:var(--h-track);line-height:var(--lh-head)}
p{margin:0 0 1.2em}a{color:inherit}
:focus-visible{outline:1.5px solid #8f86d9;outline-offset:3px;border-radius:6px}
[hidden]{display:none!important}
.ic{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;flex:none}
/* side nav */
.side{position:fixed;left:0;top:0;bottom:0;width:var(--side);padding:40px 28px 40px 48px;display:flex;flex-direction:column;justify-content:center;gap:28px;opacity:0;transform:translateX(-14px);pointer-events:none;transition:opacity .6s,transform .6s;z-index:30}
.side.on{opacity:1;transform:none;pointer-events:auto}
.side nav{position:relative;display:flex;flex-direction:column;gap:14px}
.ball{will-change:transform;position:absolute;left:0;top:0;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;border-radius:50%;background:linear-gradient(135deg,#ffb8d4,#ffd8b0 35%,#a9e8f2 70%,#a9c4ff);opacity:0;pointer-events:none;transition:opacity .4s}.ball.on{opacity:1}
.side a{color:var(--text-3);text-decoration:none;font-size:var(--t-base);transition:color .25s}
.side a:hover,.side a.act{color:var(--text-1)}.side a.act{font-weight:500}
.side .mk{position:absolute;top:calc(44px + env(safe-area-inset-top,0px));left:48px;color:var(--ink);font-weight:var(--h-weight);letter-spacing:var(--h-track);font-size:var(--t-md);display:inline-block}
.wig{animation:wig .7s}
@keyframes wig{20%{transform:rotate(-8deg) scale(1.08)}50%{transform:rotate(7deg)}80%{transform:rotate(-3deg)}}
/* hero */
.hero{position:relative;min-height:100svh;display:flex;align-items:center;padding:0 var(--pad) 0 var(--left);overflow:hidden;cursor:default}
.blob{position:absolute;border-radius:50%;filter:blur(80px);opacity:.6;animation:fl 18s ease-in-out infinite alternate}
.b1{width:44vmax;height:30vmax;left:-6%;top:14%;background:var(--p6);border-radius:60% 40% 55% 45%}
.b2{width:34vmax;height:24vmax;left:20%;top:30%;background:var(--p1);animation-duration:23s;animation-delay:-7s}
.b3{width:32vmax;height:22vmax;left:-4%;top:52%;background:var(--p5);animation-duration:27s;animation-delay:-12s}
.b4{width:34vmax;height:24vmax;left:30%;top:50%;background:var(--p3);opacity:.5;animation-duration:30s}
@keyframes fl{to{transform:translate(9vw,-6vh) scale(1.18)}}
.cur{position:absolute;left:0;top:0;width:26vmax;height:26vmax;margin:-13vmax 0 0 -13vmax;border-radius:50%;background:radial-gradient(closest-side,rgba(255,200,226,.5),transparent);transition:transform 1.4s var(--ease);pointer-events:none}
.hero .in{position:relative;max-width:900px;animation:rise 1.4s var(--ease) both}
@keyframes rise{from{opacity:0;filter:blur(14px);transform:translateY(14px)}}
.hero h1{font-size:clamp(var(--t-2xl),8.5vw,var(--t-4xl));margin-bottom:.28em;letter-spacing:var(--h-track);font-weight:var(--h-weight-display)}
.hero p{font-size:var(--t-md);max-width:44ch;color:var(--text-2)}
#hw{position:absolute;left:0;top:-30px;width:100%;height:calc(36% + 30px);filter:blur(10px);-webkit-mask-image:linear-gradient(#000 45%,transparent);mask-image:linear-gradient(#000 45%,transparent);pointer-events:none}
.down{position:absolute;left:var(--left);bottom:36px;display:grid;place-items:center start;width:24px;height:64px;border:0;border-radius:var(--r-md);color:var(--mute);transition:color .3s,transform .3s}
.down:hover{color:var(--ink);transform:translateY(3px)}
.rip{position:absolute;width:20px;height:20px;margin:-10px;border-radius:50%;background:radial-gradient(circle,rgba(255,190,220,.7),rgba(190,180,255,.35) 60%,transparent 70%);animation:rp 1.3s ease-out forwards;pointer-events:none}
@keyframes rp{to{transform:scale(16);opacity:0}}
.fog{position:fixed;top:0;left:0;right:0;height:calc(120px + env(safe-area-inset-top,0px));z-index:25;pointer-events:none;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);background:linear-gradient(rgba(var(--bg-rgb),.78),rgba(var(--bg-rgb),0));-webkit-mask-image:linear-gradient(#000 35%,transparent);mask-image:linear-gradient(#000 35%,transparent);opacity:0;transition:opacity .5s}.fog.on{opacity:1}
.sp{position:fixed;width:26px;height:26px;margin:-13px 0 0 -13px;pointer-events:none;z-index:90;animation:spk 1.1s ease-out forwards;filter:drop-shadow(0 0 5px rgba(169,196,255,.9))}.sp svg{width:100%;height:100%;display:block}
@keyframes spk{from{transform:scale(.2) rotate(0);opacity:1}60%{opacity:1}to{transform:translateY(-34px) scale(var(--s,1.1)) rotate(80deg);opacity:0}}
/* sections */
main{padding-left:var(--side)}
.sec{position:relative;padding:clamp(52px,10vh,110px) var(--pad)}
.sec>h2{font-size:clamp(var(--t-xl),4.4vw,var(--t-3xl));margin-bottom:clamp(36px,6vw,72px)}
/* work */
.wl{max-width:780px}
.wc{display:block;position:relative;margin-bottom:clamp(40px,6vw,72px)}
.wc .img{position:relative;aspect-ratio:16/10;overflow:hidden;border:var(--bd);border-radius:var(--r-md);background:var(--card)}
.wc .info{width:min(1040px,calc(100vw - var(--side) - var(--pad) - var(--pad)));padding:0 2px 16px;display:flex;justify-content:space-between;gap:20px;align-items:flex-start}
.wc p{margin:0;color:var(--text-2);font-size:var(--t-base);line-height:1.65;max-width:none}
.tags b{color:var(--text-1);font-weight:500}.tags em{color:var(--text-3);font-style:normal}.tags .sep{display:inline-block;width:1px;height:12px;margin:0 10px;background:currentColor;opacity:.3;vertical-align:-2px}
.wc small{color:var(--text-3);font-size:var(--t-xs);white-space:nowrap;margin-top:3px}
/* mocks */
.m{position:relative;width:100%;height:100%;background:linear-gradient(160deg,#f2f2f5,#ebebef);display:grid;place-items:center;overflow:hidden}
.ac{background:var(--a)}
.ph{height:84%;aspect-ratio:9/17;background:var(--card);border:1px solid #e2e2e7;border-radius:22px;padding:8% 7%;display:flex;flex-direction:column;gap:8px;overflow:hidden}
.ln{height:6px;border-radius:3px;background:#e6e6ea;flex:none;display:block}
.bx{border-radius:8px;background:#efeff2;min-height:0;display:block}
.btn{height:26px;border-radius:8px;flex:none;display:block;margin-top:auto}
.rw{display:flex;gap:8px;align-items:center}.dot{width:22px;height:22px;border-radius:50%;background:#e9e9ed;flex:none}.rw>div{flex:1;display:flex;flex-direction:column;gap:5px}
.bb{border-radius:10px;background:#efeff2;padding:8px;display:flex;flex-direction:column;gap:5px;width:70%}.bb.me{align-self:flex-end}
.gr{flex:1;display:grid;grid-template-columns:1fr 1fr;gap:6px}
.win{width:80%;height:72%;border:1px solid #e2e2e7;background:var(--card);border-radius:var(--r-md);display:flex;overflow:hidden}
.sd{width:24%;padding:12px;border-right:1px solid #ececf0;display:flex;flex-direction:column;gap:8px}
.mn{flex:1;padding:14px;display:flex;flex-direction:column;gap:10px;min-width:0}
.ch{flex:1;display:flex;align-items:flex-end;gap:6%}.ch i{flex:1;border-radius:4px 4px 0 0;transform-origin:bottom}
.rw2{display:flex;gap:8px;height:22%}.rw2 .bx{flex:1}
.vid .ph,.vid .win{animation:bob 6s ease-in-out infinite}.vid .ch i{animation:gw 3.2s ease-in-out infinite alternate}.vid .btn{animation:wd 4s ease-in-out infinite alternate}
@keyframes bob{50%{transform:translateY(-5%) rotate(-1.2deg)}}@keyframes gw{from{transform:scaleY(.55)}}@keyframes wd{from{width:40%}}
.paused *{animation-play-state:paused!important}
/* experiments */
.xs{columns:2;column-gap:20px;max-width:1040px}
.xc{position:relative;margin:0 0 20px;break-inside:avoid;border:var(--bd);border-radius:var(--r-md);overflow:hidden;cursor:zoom-in;background:var(--card)}
.tags{position:absolute;left:12px;top:12px;display:flex;gap:6px}
.tags span{font-size:var(--t-xs);line-height:1;padding:7px 12px;border-radius:var(--r-pill);background:rgba(250,250,250,.55);border:1px solid rgba(60,60,80,.07);backdrop-filter:blur(8px);color:var(--text-2);opacity:.85}
.ib{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;border:1px solid rgba(60,60,80,.08);background:rgba(250,250,250,.6);backdrop-filter:blur(10px);color:var(--ink);cursor:pointer;padding:0;transition:transform .25s,background .25s}
.ib:hover{background:rgba(250,250,250,.9);transform:scale(1.08)}
.xc .fs{position:absolute;z-index:2;right:12px;top:12px;opacity:0;transition:opacity .3s}.xc:hover .fs,.xc:focus-within .fs{opacity:1}
.xc .pp{position:absolute;z-index:2;right:12px;bottom:12px}
.xc:after{content:"";position:absolute;z-index:1;left:0;right:0;bottom:0;height:58%;pointer-events:none;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);background:linear-gradient(transparent,rgba(250,250,250,.8));-webkit-mask-image:linear-gradient(transparent,#000 60%);mask-image:linear-gradient(transparent,#000 60%);opacity:0;transition:opacity .45s}.xc:hover:after,.xc:focus-within:after{opacity:1}
.xc figcaption{position:absolute;z-index:2;left:0;right:0;bottom:0;padding:40px 62px 16px 16px;font-size:var(--t-base);line-height:1.45;color:var(--text-1);opacity:0;transform:translateY(6px);transition:.35s;pointer-events:none}
.xc:hover figcaption,.xc:focus-within figcaption{opacity:1;transform:none}
@media(hover:none){.xc .fs{opacity:1}.xc:after{opacity:1}.xc figcaption{opacity:1;transform:none}}
.lb{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px;background:rgba(250,250,250,.55);backdrop-filter:blur(26px) saturate(1.2);-webkit-backdrop-filter:blur(26px);opacity:0;transition:opacity .4s}
.lb.show{opacity:1}
.lbs{--r:1;width:min(90vw,calc(72vh*var(--r)));aspect-ratio:var(--r);border:var(--bd);border-radius:14px;overflow:hidden;transition:opacity .25s,transform .35s}
.lbs.sw{opacity:0;transform:scale(.97)}
.lbd{margin:0;font-size:var(--t-base);color:var(--text-2);text-align:center;padding:0 60px;max-width:560px}
.lb .c{position:absolute;top:calc(20px + env(safe-area-inset-top,0px));right:20px}
.lb .pv,.lb .nx{position:absolute;top:50%;margin-top:-17px}.lb .pv{left:20px}.lb .nx{right:20px}
/* about */
.ab{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:clamp(32px,6vw,96px);align-items:start}
.gl:before{content:"";position:absolute;inset:4% 0 auto 8%;height:70%;z-index:-1;pointer-events:none;background:radial-gradient(40% 55% at 28% 45%,var(--p6),transparent 70%),radial-gradient(38% 50% at 62% 55%,var(--p1),transparent 70%),radial-gradient(34% 45% at 85% 40%,var(--p3),transparent 70%);filter:blur(60px);opacity:.45;animation:drift 20s ease-in-out infinite alternate}
:root.dark .gl>h2,.ab{position:relative;z-index:1}
.pics{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
.pf{margin:0;border:var(--bd);border-radius:var(--r-md);background:linear-gradient(160deg,var(--ph-a),var(--ph-b));display:grid;place-items:center;transition:transform .6s var(--ease);cursor:pointer}
.pf:nth-child(1){grid-row:span 2;aspect-ratio:3/4.6;transform:rotate(-1.2deg)}.pf:nth-child(2){aspect-ratio:1;transform:rotate(1deg);margin-top:36px}.pf:nth-child(3){aspect-ratio:4/3;transform:rotate(-.6deg)}
.pf{overflow:hidden}.pf img{width:100%;height:100%;object-fit:cover;object-position:center;display:block;border-radius:inherit}.pf:hover{transform:rotate(0) translateY(-4px)}.pf svg{width:34%;fill:var(--ph-ic);stroke:var(--ph-ic);stroke-width:3;stroke-linejoin:round;stroke-linecap:round}
.ab p{font-size:var(--t-md);line-height:1.85;max-width:32em}
@keyframes drift{to{transform:translate(4%,6%) scale(1.1)}}
.gd{cursor:pointer;border-bottom:1px dashed rgba(128,128,140,.5)}
.lf{display:inline-block;width:0;height:1em;vertical-align:-.12em;overflow:hidden;transition:width .8s cubic-bezier(.3,1.4,.4,1);-webkit-text-fill-color:initial}
.lf.g{width:1.1em;margin-left:.2em}.lf svg{width:1.05em;height:1em;fill:none;stroke:#6e9c74;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
/* detail */
.dt{padding:clamp(56px,10vh,110px) var(--pad) 120px;animation:rise .9s var(--ease) both;padding-left:calc(var(--side) + var(--pad))}
.dt>*{max-width:820px}
.back{display:inline-flex;gap:6px;align-items:center;color:var(--mute);text-decoration:none;font-size:var(--t-xs);margin-bottom:48px;transition:color .25s}.back:hover{color:var(--ink)}
.dt h1{font-size:clamp(var(--t-xl),5vw,var(--t-3xl));margin-bottom:.4em}.dt .lead{font-size:var(--t-md);color:var(--text-2);max-width:34em}
.meta{display:flex;flex-wrap:wrap;gap:12px 48px;margin:36px 0 48px;padding:22px 0;border-block:1px solid var(--line)}
.meta div{font-size:var(--t-xs);color:var(--text-3)}.meta b{display:block;color:var(--text-1);font-weight:500;font-size:var(--t-base)}
.fig{border:var(--bd);border-radius:var(--r-md);overflow:hidden;margin:0 0 56px}
.dt h3{font-size:var(--t-lg);margin:0 0 .5em}.dt p{max-width:38em}
.two{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:0 0 56px}.two .fig{margin:0}
.nxt{display:flex;justify-content:space-between;align-items:center;margin-top:72px;padding:22px 24px;border:var(--bd);border-radius:var(--r-md);text-decoration:none;transition:background .3s}.nxt:hover{background:#f3f3f6}
/* footer */
footer{position:relative;padding:clamp(80px,15vh,170px) var(--pad) 0 var(--left);overflow:hidden;min-height:640px}
footer .row{position:relative;z-index:2;display:flex;justify-content:space-between;gap:48px;flex-wrap:wrap}
footer h3{font-size:clamp(var(--t-lg),3vw,var(--t-xl));margin-bottom:.15em}footer .loc{color:var(--mute);margin:0}
.mail{display:inline-flex;align-items:center;gap:8px;font-size:clamp(var(--t-md),2.4vw,var(--t-lg));font-weight:500;letter-spacing:var(--h-track);text-decoration:none;color:var(--ink);background:linear-gradient(90deg,#f28cb8,#f5b87a,#e9d65a,#7fd1a3,#6fcbe0,#7f9cf5,#a98cf0) 0 100%/0 2px no-repeat;transition:background-size .5s,color .3s}
.mail .ic{width:.8em;height:.8em;opacity:0;transform:translate(-8px,8px);transition:.4s}
.mail:hover{background-size:100% 2px}.mail:hover .ic{opacity:1;transform:none}
.soc{display:flex;gap:18px;margin-top:26px}.soc a{display:inline-flex;gap:7px;align-items:center;color:var(--text-3);text-decoration:none;font-size:var(--t-base);transition:color .25s,transform .25s}.soc a:hover{color:var(--ink);transform:translateY(-2px)}
#wave{position:absolute;left:0;right:0;bottom:0;width:100%;height:260px;filter:blur(6px);z-index:1}
.built{position:absolute;z-index:2;left:50%;transform:translateX(-50%);white-space:nowrap;bottom:calc(14px + env(safe-area-inset-bottom,0px));font-size:var(--t-xs);line-height:1.4;padding:5px 14px;border-radius:var(--r-pill);background:rgba(250,250,250,.78);backdrop-filter:blur(8px);color:var(--text-2);margin:0}
.cof{cursor:pointer;display:inline-block}.cup{width:1.2em;height:1.2em;vertical-align:-.3em;margin-left:.3em}
/* responsive */
@media(max-width:1100px){:root{--side:150px}.side{padding:36px 20px}.side .mk{left:20px}.ball{display:none}}
@media(max-width:860px){
:root{--side:0px}
.side{top:auto;bottom:calc(14px + env(safe-area-inset-bottom,0px));left:50%;right:auto;width:auto;padding:10px 20px;flex-direction:row;gap:0;border:var(--bd);border-radius:var(--r-pill);background:rgba(var(--bg-rgb),.72);backdrop-filter:blur(14px);transform:translate(-50%,14px)}
.side.on{transform:translate(-50%,0)}.side .mk{display:none}.side nav{flex-direction:row;gap:22px}
.dt{padding-left:var(--pad)}.ab{grid-template-columns:1fr}.down{display:none}
.wc .info{flex-direction:column;gap:6px}.wc .ar{display:none}
}
@media(max-width:640px){:root{--u:17px}.xs{columns:1}.two{grid-template-columns:1fr}footer{min-height:600px}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition-duration:.01ms!important}html{scroll-behavior:auto}}

/* COMPONENTS added for the repo build */
.plink{position:absolute;z-index:2;left:var(--left);bottom:calc(18px + env(safe-area-inset-bottom,0px));font-size:var(--t-xs);color:var(--text-3);text-decoration:underline;text-underline-offset:.18em}.plink:hover{color:var(--text-1)}
.xc img,.xc video,.lbs img,.lbs video,.wc .img img,.fig img{display:block;width:100%;height:100%;object-fit:cover}
.legal{max-width:calc(46rem + var(--left) + var(--pad));padding:clamp(56px,10vh,110px) var(--pad) 96px var(--left)}.legal h1{font-size:var(--t-3xl);margin:0 0 .4em}.legal h2{font-size:var(--t-lg);margin:2em 0 .4em}.legal p,.legal li{color:var(--text-2)}.legal a{color:var(--text-1)}.legal .back{display:inline-block;margin-bottom:var(--sp-7)}
