@property --grad-a{syntax:"<angle>";inherits:false;initial-value:0deg}@property --grad-x{syntax:"<percentage>";inherits:false;initial-value:20%}@property --grad-y{syntax:"<percentage>";inherits:false;initial-value:30%}@keyframes drift{0%{--grad-a:0deg;--grad-x:18%;--grad-y:28%}50%{--grad-a:180deg;--grad-x:72%;--grad-y:44%}to{--grad-a:360deg;--grad-x:18%;--grad-y:28%}}@keyframes bob{0%{transform:translateY(0)}to{transform:translateY(8px)}}:root{--bg:oklch(98.5% .004 250);--surface:oklch(95.5% .021 249);--ink:oklch(26% .045 262);--ink-soft:oklch(46% .03 262);--line:oklch(87% .02 255);--accent-hue:250;--accent:oklch(.6 .19 var(--accent-hue));--accent-deep:oklch(34% .09 262);--warm:oklch(72% .15 55);--pad:clamp(1.25rem, 5vw, 6rem);--fs-label:clamp(.68rem, .5rem + .4vw, .8rem);--maxw:82rem;--font-display:"Schibsted Grotesk", sans-serif;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=dark]{--bg:oklch(17% .02 262);--surface:oklch(21.5% .024 260);--ink:oklch(93% .012 252);--ink-soft:oklch(67% .024 258);--line:oklch(31% .024 258);--accent:oklch(72% .16 250);--accent-deep:oklch(34% .09 262);--warm:oklch(75% .14 60);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=dark] a:hover{color:color-mix(in oklch, var(--accent) 60%, white)}[data-theme=dark] .hero .grain,[data-theme=dark] .loader-grain{mix-blend-mode:screen;opacity:.22}[data-theme=dark] .modal .m-cta{color:oklch(17% .02 262)}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased}body{background:var(--bg);color:var(--ink);font-family:Instrument Sans,system-ui,sans-serif;font-size:clamp(1rem,.95rem + .3vw,1.125rem);line-height:1.6;overflow-x:hidden}a{color:var(--accent);text-decoration:none;transition:color .35s}a:hover{color:var(--accent-deep)}.portfolio{--cursor-size:18px;min-block-size:100dvh;position:relative}.portfolio h1,.portfolio h2,.portfolio h3,.portfolio .display{font-family:var(--font-display);letter-spacing:-.02em;text-wrap:balance;font-weight:600}.portfolio p{text-wrap:pretty}.portfolio .label{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.22em;text-transform:uppercase;color:var(--ink-soft);align-items:center;gap:.6em;display:inline-flex}.portfolio .label:before{content:"";background:var(--line);block-size:1px;inline-size:1.8rem}.portfolio .num{color:var(--accent);font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.1em}.portfolio .wrap{inline-size:min(100% - calc(var(--pad) * 2), var(--maxw));margin-inline:auto}.portfolio section{padding-block:clamp(5rem,12vh,11rem);position:relative}.portfolio section+section{border-block-start:1px solid var(--line)}.cursor,.cursor-dot{pointer-events:none;z-index:9999;mix-blend-mode:difference;border-radius:50%;position:fixed;inset-block-start:0;inset-inline-start:0;translate:-50% -50%}.cursor{border:1px solid oklch(70% .02 250);block-size:34px;inline-size:34px;transition:width .3s,height .3s,background .3s,border-color .3s}.cursor-dot{background:oklch(90% 0 0);block-size:5px;inline-size:5px}.portfolio:has(.is-hovering) .cursor{background:color-mix(in oklch, var(--accent) 22%, transparent);border-color:#0000;block-size:64px;inline-size:64px}@media (hover:none),(pointer:coarse){.cursor,.cursor-dot{display:none}}@media (prefers-reduced-motion:reduce){.cursor,.cursor-dot{display:none}}.topbar{z-index:60;padding:clamp(1rem, 2.4vw, 1.6rem) var(--pad);mix-blend-mode:normal;background:linear-gradient(to bottom, color-mix(in oklch, var(--bg) 80%, transparent), transparent);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);justify-content:space-between;align-items:center;display:flex;position:fixed;inset-block-start:0;inset-inline:0}.topbar .brand{font-family:var(--font-display);letter-spacing:-.01em;color:var(--ink);font-size:1.05rem;font-weight:600}.topbar .brand b{color:var(--accent)}.topbar .brand .brand-short{display:none}.topbar .topbar-end{align-items:center;gap:clamp(1rem,2.4vw,2.2rem);display:flex}.topbar nav{gap:clamp(1rem,2.4vw,2.4rem);display:flex}.topbar nav a{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);padding-block-end:3px;position:relative}.topbar nav a:after{content:"";background:var(--accent);transform-origin:0;block-size:1px;transition:scale .4s cubic-bezier(.2,.7,.2,1);position:absolute;inset-block-end:0;inset-inline:0;scale:0 1}.topbar nav a:hover{color:var(--ink)}.topbar nav a:hover:after{scale:1}.topbar nav a.is-active{color:var(--ink)}.topbar nav a.is-active:after{scale:1}.theme-toggle{border:1px solid var(--line);block-size:38px;inline-size:38px;color:var(--ink);cursor:pointer;background:0 0;border-radius:50%;place-items:center;padding:0;transition:border-color .3s,background .3s,transform .4s cubic-bezier(.2,.7,.2,1);display:grid}.theme-toggle:hover{border-color:var(--accent);background:color-mix(in oklch, var(--accent) 12%, transparent);transform:rotate(40deg)}.theme-toggle svg{block-size:16px;inline-size:16px}.theme-toggle .tt-sun{display:none}[data-theme=dark] .theme-toggle .tt-sun{display:block}[data-theme=dark] .theme-toggle .tt-moon{display:none}@media (width<=640px){.topbar{padding-inline:1.1rem}.topbar .brand .brand-full{display:none}.topbar .brand .brand-short{display:inline}.topbar .topbar-end{gap:.9rem}.topbar nav{gap:.85rem}.topbar nav a{letter-spacing:.08em;padding-block-end:2px;font-size:.58rem}.theme-toggle{block-size:32px;inline-size:32px}.theme-toggle svg{block-size:14px;inline-size:14px}}.hero{align-items:center;min-block-size:100dvh;padding-block:clamp(6rem,15vh,9rem) clamp(6.5rem,16vh,9rem);display:grid;overflow:clip}.hero .haze{z-index:0;pointer-events:none;background:radial-gradient(42rem 42rem at var(--grad-x) var(--grad-y), color-mix(in oklch, var(--accent) 28%, transparent), transparent 60%), radial-gradient(38rem 38rem at calc(100% - var(--grad-x)) calc(100% - var(--grad-y)), color-mix(in oklch, var(--accent-deep) 20%, transparent), transparent 62%);filter:blur(10px);animation:22s linear infinite drift;position:absolute;inset:-20%}.hero .grain{z-index:1;pointer-events:none;opacity:.5;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.28'/%3E%3C/svg%3E");position:absolute;inset:0}.hero .wrap{z-index:2;position:relative}@media (prefers-reduced-motion:reduce){.hero .haze{animation:none}}.hero .kicker{margin-block-end:clamp(1.4rem,4vh,2.6rem)}.hero h1{letter-spacing:-.035em;font-size:clamp(2.9rem,1.5rem + 9vw,9.5rem);font-weight:700;line-height:.96}.hero h1 .line{margin-block-end:-.18em;padding-block-end:.18em;display:block;overflow:clip}.hero h1 .reveal{display:inline-block}.hero h1 .line.l2{flex-wrap:wrap;align-items:baseline;gap:.08em .28em;display:flex;overflow:visible}.rotator{vertical-align:bottom;block-size:.96em;color:var(--accent);display:inline-block;position:relative;overflow:clip}.rotator .rtrack{will-change:transform;flex-direction:column;display:flex}.rotator .word{white-space:nowrap;block-size:.96em;line-height:.96;display:block}.hero h1 .fixed{color:var(--ink)}.hero .sub{max-inline-size:34rem;color:var(--ink-soft);margin-block-start:clamp(1.6rem,4vh,2.8rem);font-size:clamp(1.05rem,1rem + .4vw,1.35rem)}.scrollcue{z-index:3;align-items:center;gap:.8rem;display:flex;position:absolute;inset-block-end:clamp(1.4rem,4vh,2.6rem);inset-inline-start:var(--pad)}.scrollcue .track{background:var(--line);block-size:3.2rem;inline-size:1px;position:relative;overflow:hidden}.scrollcue .track:after{content:"";background:var(--accent);block-size:50%;animation:2.1s cubic-bezier(.7,0,.3,1) infinite scrolldown;position:absolute;inset-block-start:-50%;inset-inline:0}@keyframes scrolldown{0%{transform:translateY(0)}60%,to{transform:translateY(300%)}}.scrollcue span{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.2em;text-transform:uppercase;color:var(--ink-soft)}@media (prefers-reduced-motion:reduce){.scrollcue .track:after{animation:none}}.about .grid{grid-template-columns:1fr;gap:clamp(2rem,6vw,5rem);display:grid}@container portfolio (width>=60rem){.about .grid{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);align-items:start}}.about .lede{font-family:var(--font-display);letter-spacing:-.02em;font-size:clamp(1.5rem,1.1rem + 2vw,2.9rem);font-weight:500;line-height:1.15}.about .lede em{color:var(--accent);font-style:normal}.about .body{color:var(--ink-soft);gap:1.1rem;max-inline-size:40rem;display:grid}.about .stats{border-block-start:1px solid var(--line);grid-template-columns:repeat(3,1fr);gap:1.5rem;margin-block-start:clamp(2rem,5vh,3.4rem);padding-block-start:clamp(1.6rem,4vh,2.4rem);display:grid}.about .stats .k{font-family:var(--font-display);letter-spacing:-.03em;font-size:clamp(2rem,1.4rem + 3vw,3.4rem);font-weight:700;line-height:1}.about .stats .k .warm{color:var(--warm)}.about .stats .v{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-soft);margin-block-start:.5rem;display:block}.sechead{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:2rem;margin-block-end:clamp(2.4rem,6vh,4.5rem);display:flex}.sechead h2{letter-spacing:-.03em;font-size:clamp(2rem,1.4rem + 3.5vw,4.5rem);font-weight:700;line-height:1}.sechead .num{align-self:start}.skills{overflow:clip}.mq{gap:clamp(.4rem,1.4vh,1rem);display:grid}@keyframes mq-l{0%{transform:translate(0)}to{transform:translate(-50%)}}@keyframes mq-r{0%{transform:translate(-50%)}to{transform:translate(0)}}.mq-row{overflow:clip;-webkit-mask-image:linear-gradient(90deg,#0000,#000 8% 92%,#0000);mask-image:linear-gradient(90deg,#0000,#000 8% 92%,#0000)}.mq-track{will-change:transform;align-items:baseline;gap:clamp(.8rem,2vw,1.8rem);width:max-content;display:flex}.mq-a .mq-track{animation:34s linear infinite mq-l}.mq-b .mq-track{animation:30s linear infinite mq-r}.mq:hover .mq-track{animation-play-state:paused}.mq-item{font-family:var(--font-display);letter-spacing:-.03em;color:var(--ink);cursor:default;white-space:nowrap;align-items:baseline;gap:.3em;font-size:clamp(2rem,1.2rem + 5vw,5.5rem);font-weight:600;line-height:1.05;transition:color .35s,opacity .35s;display:inline-flex}.mq-item i{letter-spacing:.1em;color:var(--accent);font-family:JetBrains Mono,monospace;font-size:.24em;font-style:normal;transform:translateY(-1.4em)}.mq-track:has(.mq-item:hover) .mq-item:not(:hover){color:color-mix(in oklch, var(--ink) 22%, transparent)}.mq-item:hover{color:var(--accent)}.mq-sep{font-family:var(--font-display);color:var(--line);font-size:clamp(1.6rem,4vw,4rem);font-weight:300}@media (prefers-reduced-motion:reduce){.mq-a .mq-track,.mq-b .mq-track{animation:none}.mq-row{-webkit-mask-image:none;mask-image:none}.mq-track{flex-wrap:wrap;width:100%}}.scrollprog{z-index:8000;transform-origin:0;background:var(--accent);pointer-events:none;block-size:2px;animation:linear both sp-grow;animation-timeline:scroll(root);position:fixed;inset-block-start:0;inset-inline:0;scale:0 1}@keyframes sp-grow{0%{scale:0 1}to{scale:1}}@media (prefers-reduced-motion:reduce){.scrollprog{display:none}}.avatar{aspect-ratio:1;cursor:pointer;isolation:isolate;border-radius:18px;place-items:center;inline-size:clamp(88px,12vw,132px);margin-block-end:clamp(1.4rem,4vh,2.4rem);display:grid;position:relative}.avatar .avatar-ascii{pointer-events:none;opacity:1;z-index:2;block-size:200%;inline-size:200%;transition:opacity .5s,transform .6s cubic-bezier(.2,.7,.2,1);position:absolute;inset:-50%}.avatar .avatar-photo{object-fit:contain;object-position:center top;opacity:0;z-index:3;filter:drop-shadow(0 10px 22px oklch(34% .09 262/.35));block-size:100%;inline-size:100%;transition:opacity .5s,scale .6s cubic-bezier(.2,.7,.2,1);position:absolute;inset:0;scale:.86}.avatar .avatar-ring{border-radius:inherit;border:1px solid var(--line);z-index:1;transition:border-color .5s,scale .6s cubic-bezier(.2,.7,.2,1);position:absolute;inset:0}.avatar:hover .avatar-ascii,.avatar.is-flipped .avatar-ascii{opacity:0;transform:scale(1.05)}.avatar:hover .avatar-photo,.avatar.is-flipped .avatar-photo{opacity:1;scale:1}.avatar:hover .avatar-ring,.avatar.is-flipped .avatar-ring{border-color:color-mix(in oklch, var(--accent) 50%, var(--line));scale:1.04}@media (width<=560px){.avatar{inline-size:82px}}.projects .list{background:var(--line);border-block:1px solid var(--line);gap:clamp(1px,.2vw,2px);display:grid}.pcard{--img:oklch(.62 .19 var(--accent-hue));background:var(--bg);isolation:isolate;grid-template-columns:auto 1fr auto;align-items:center;gap:clamp(1rem,3vw,3rem);padding:clamp(1.6rem,4vw,3.2rem) clamp(.4rem,2vw,2rem);transition:background .5s,color .5s;display:grid;position:relative}.pcard .p-num{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);color:var(--ink-soft);letter-spacing:.1em;transition:color .5s}.pcard .p-main{min-inline-size:0}.pcard h3{letter-spacing:-.025em;font-size:clamp(1.6rem,1.1rem + 3vw,3.6rem);font-weight:600;line-height:1;transition:transform .55s cubic-bezier(.2,.7,.2,1)}.pcard .p-meta{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.08em;color:var(--ink-soft);text-transform:uppercase;flex-wrap:wrap;gap:1.4rem;margin-block-start:.9rem;transition:color .5s;display:flex}.pcard .p-arrow{font-family:var(--font-display);opacity:.3;font-size:clamp(1.4rem,2.5vw,2.2rem);transition:transform .55s cubic-bezier(.2,.7,.2,1),opacity .5s}.pcard .p-thumb{z-index:3;aspect-ratio:4/3;opacity:0;pointer-events:none;background-image:repeating-linear-gradient(45deg, color-mix(in oklch, var(--img) 90%, black) 0 8px, var(--img) 8px 16px);border-radius:10px;inline-size:clamp(12rem,22vw,20rem);transition:opacity .5s,scale .5s cubic-bezier(.2,.7,.2,1),rotate .5s,translate .1s linear;position:absolute;inset-block-start:50%;inset-inline-end:clamp(2rem,8vw,8rem);overflow:hidden;translate:0 -50%;rotate:-4deg;scale:.86;box-shadow:0 30px 60px -20px oklch(34% .09 262/.45)}.pcard .p-thumb .ph{letter-spacing:.14em;text-transform:uppercase;color:oklch(99% 0 0/.85);place-items:center;font-family:JetBrains Mono,monospace;font-size:.7rem;display:grid;position:absolute;inset:0}.pcard .p-thumb img{object-fit:cover;object-position:top;block-size:100%;inline-size:100%;position:absolute;inset:0}.pcard:hover{background:var(--accent-deep);color:oklch(98% .01 250)}.pcard:hover .p-num,.pcard:hover .p-meta{color:oklch(98% .01 250/.7)}.pcard:hover h3{transform:translate(clamp(.4rem,1.5vw,1.4rem))}.pcard:hover .p-arrow{opacity:1;color:oklch(98% .01 250);transform:translate(8px)translateY(-8px)}.pcard:hover .p-thumb{opacity:1;rotate:3deg;scale:1}@media (width<=720px){.pcard{grid-template-columns:auto 1fr}.pcard .p-arrow,.pcard .p-thumb{display:none}}.lab .lab-intro{max-inline-size:42rem;color:var(--ink-soft);margin-block-end:clamp(2.4rem,6vh,4rem);font-size:clamp(1.1rem,1rem + .6vw,1.5rem)}.lab .lab-grid{grid-template-columns:1fr;gap:clamp(1rem,1.6vw,1.4rem);display:grid}@container portfolio (width>=44rem){.lab .lab-grid{grid-template-columns:repeat(2,1fr)}}.lcard{--edge:color-mix(in oklch, var(--accent) 45%, var(--line));text-align:start;background:color-mix(in oklch, var(--surface) 40%, var(--bg));border:1px solid var(--line);color:var(--ink);cursor:pointer;font:inherit;appearance:none;border-radius:18px;grid-template-columns:1fr auto;align-items:start;gap:.55rem 1rem;padding:clamp(1.6rem,3vw,2.6rem);transition:transform .55s cubic-bezier(.2,.7,.2,1),border-color .55s,background .55s,box-shadow .55s;display:grid;position:relative;overflow:hidden}.lcard:before{content:"";z-index:0;background:radial-gradient(120% 90% at 100% 0%, color-mix(in oklch, var(--accent) 14%, transparent), transparent 60%);opacity:0;transition:opacity .55s;position:absolute;inset:0}.lcard:after{content:"";background:var(--accent);transform-origin:0;block-size:2px;transition:scale .6s cubic-bezier(.2,.7,.2,1);position:absolute;inset-block-start:0;inset-inline:0;scale:0 1}.lcard>*{z-index:1;position:relative}.lcard:hover{border-color:var(--edge);background:var(--bg);transform:translateY(-6px);box-shadow:0 30px 60px -30px oklch(34% .09 262/.5)}.lcard:hover:after{scale:1}.lcard:hover:before{opacity:1}.lcard .lcard-ghost{z-index:0;font-family:var(--font-display);letter-spacing:-.04em;color:color-mix(in oklch, var(--accent) 10%, transparent);pointer-events:none;font-size:clamp(3.4rem,8vw,6rem);font-weight:700;line-height:1;transition:color .55s,transform .55s cubic-bezier(.2,.7,.2,1);position:absolute;inset-block-start:clamp(.6rem,2vw,1.4rem);inset-inline-end:clamp(.8rem,2vw,1.6rem)}.lcard:hover .lcard-ghost{color:color-mix(in oklch, var(--accent) 20%, transparent);transform:translateY(-3px)}.lcard .lcard-tag{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);grid-column:1}.lcard .lcard-state{letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--line);color:var(--accent);background:var(--bg);border-radius:999px;grid-area:1/2;justify-self:end;align-items:center;gap:.4rem;padding:.3rem .65rem;font-family:JetBrains Mono,monospace;font-size:.6rem;display:inline-flex}.lcard .lcard-state:before{content:"";background:var(--accent);border-radius:50%;block-size:6px;inline-size:6px}.lcard.is-soon .lcard-state{color:var(--ink-soft)}.lcard.is-soon .lcard-state:before{background:var(--ink-soft)}.lcard h3{font-family:var(--font-display);letter-spacing:-.025em;grid-column:1/-1;margin-block-start:clamp(1.4rem,4vw,2.6rem);font-size:clamp(1.5rem,1.1rem + 1.6vw,2.2rem);font-weight:600;line-height:1.02}.lcard p{color:var(--ink-soft);grid-column:1/-1;max-inline-size:34rem;font-size:1rem}.lcard .lcard-cta{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.12em;text-transform:uppercase;color:var(--accent);grid-column:1/-1;align-items:center;gap:.5rem;margin-block-start:clamp(.8rem,2vw,1.4rem);display:inline-flex}.lcard.is-soon{background:0 0;border-style:dashed}.lcard .lcard-cta .a{transition:transform .5s cubic-bezier(.2,.7,.2,1);display:inline-block}.lcard:hover .lcard-cta .a{transform:translate(5px)}.modal{z-index:9500;place-items:center;padding:clamp(1rem,4vw,3rem);display:grid;position:fixed;inset:0}.modal[hidden]{display:none}.modal .modal-scrim{background:color-mix(in oklch, var(--accent-deep) 42%, transparent);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);opacity:0;position:absolute;inset:0}.modal .modal-panel{background:var(--bg);border:1px solid var(--line);clip-path:inset(0 round 22px);border-radius:22px;max-block-size:min(88dvh,44rem);inline-size:min(100%,42rem);padding:clamp(1.8rem,4vw,3.2rem);position:relative;overflow:auto;box-shadow:0 50px 100px -30px oklch(34% .09 262/.6)}.modal .modal-close{border:1px solid var(--line);background:var(--bg);cursor:pointer;border-radius:50%;place-items:center;block-size:42px;inline-size:42px;transition:background .3s,border-color .3s,transform .3s;display:grid;position:absolute;inset-block-start:clamp(1rem,2vw,1.6rem);inset-inline-end:clamp(1rem,2vw,1.6rem)}.modal .modal-close:hover{background:var(--surface);border-color:var(--accent);transform:rotate(90deg)}.modal .mc-x{block-size:15px;inline-size:15px;position:relative}.modal .mc-x:before,.modal .mc-x:after{content:"";background:var(--ink);block-size:1.5px;inline-size:100%;position:absolute;inset-block-start:50%;inset-inline-start:0}.modal .mc-x:before{transform:rotate(45deg)}.modal .mc-x:after{transform:rotate(-45deg)}.modal .m-anim{will-change:transform, opacity}.modal .m-head{flex-wrap:wrap;align-items:center;gap:.9rem;padding-inline-end:clamp(3rem,6vw,3.6rem);display:flex}.modal .m-idx{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.1em;color:var(--accent)}.modal .m-tag{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft)}.modal .m-state{letter-spacing:.16em;text-transform:uppercase;border:1px solid var(--line);color:var(--accent);border-radius:999px;align-items:center;gap:.4rem;margin-inline-start:auto;padding:.3rem .65rem;font-family:JetBrains Mono,monospace;font-size:.6rem;display:inline-flex}.modal .m-state:before{content:"";background:currentColor;border-radius:50%;block-size:6px;inline-size:6px}.modal .m-state.is-soon{color:var(--ink-soft)}.modal .m-title{font-family:var(--font-display);letter-spacing:-.03em;margin-block:clamp(1.2rem,3vw,1.8rem) clamp(.8rem,2vw,1.2rem);font-size:clamp(2rem,1.4rem + 3vw,3.4rem);font-weight:700;line-height:1}.modal .m-desc{color:var(--ink-soft);max-inline-size:34rem;font-size:clamp(1rem,.95rem + .3vw,1.15rem);line-height:1.65}.modal .m-stack{border-block-start:1px solid var(--line);margin-block-start:clamp(1.6rem,4vw,2.4rem);padding-block-start:clamp(1.2rem,3vw,1.8rem)}.modal .m-stack-label{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft);margin-block-end:.9rem;display:block}.modal .m-chips{flex-wrap:wrap;gap:.5rem;display:flex}.modal .m-chips span{letter-spacing:.04em;border:1px solid var(--line);color:var(--ink);background:color-mix(in oklch, var(--surface) 45%, transparent);border-radius:999px;padding:.4rem .8rem;font-family:JetBrains Mono,monospace;font-size:.78rem}.modal .m-foot{margin-block-start:clamp(1.6rem,4vw,2.4rem)}.modal .m-cta{background:var(--accent);color:oklch(99% 0 0);font-family:var(--font-display);letter-spacing:-.01em;border-radius:999px;align-items:center;gap:.6rem;padding:.9rem 1.5rem;font-weight:600;transition:background .3s,transform .3s;display:inline-flex}.modal .m-cta:after{content:"→";transition:transform .35s cubic-bezier(.2,.7,.2,1)}.modal .m-cta:hover{background:var(--accent-deep);color:oklch(99% 0 0);transform:translateY(-2px)}.modal .m-cta:hover:after{transform:translate(4px)}.modal .m-cta[hidden],.modal .m-soon[hidden]{display:none}.modal .m-soon{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-soft);align-items:center;gap:.6rem;display:inline-flex}.modal .m-soon .dot{background:var(--warm);border-radius:50%;block-size:8px;inline-size:8px}.portfolio:has(.modal:not([hidden])){overflow:clip}.contact{text-align:start}.contact .cta{font-family:var(--font-display);letter-spacing:-.04em;color:var(--ink);font-size:clamp(3rem,1rem + 13vw,12rem);font-weight:700;line-height:.9;transition:color .4s;display:block}.contact .cta:hover,.contact .cta .at{color:var(--accent)}.contact .row{flex-wrap:wrap;justify-content:space-between;align-items:end;gap:clamp(1rem,4vw,4rem);margin-block-start:clamp(2.6rem,7vh,5rem);display:flex}.contact .links{flex-wrap:wrap;gap:clamp(1rem,2.4vw,2.4rem);display:flex}.contact .links a{font-family:var(--font-display);color:var(--ink);padding-block-end:4px;font-size:clamp(1.1rem,.9rem + 1vw,1.7rem);font-weight:500;position:relative}.contact .links a:after{content:"";background:var(--accent);transform-origin:0;block-size:1.5px;transition:scale .45s cubic-bezier(.2,.7,.2,1);position:absolute;inset-block-end:0;inset-inline:0;scale:0 1}.contact .links a:hover{color:var(--accent)}.contact .links a:hover:after{scale:1}.contact .avail{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-soft);align-items:center;gap:.6rem;display:inline-flex}.contact .avail .dot{background:var(--warm);block-size:8px;inline-size:8px;box-shadow:0 0 0 0 color-mix(in oklch, var(--warm) 60%, transparent);border-radius:50%;animation:2.4s ease-out infinite pulse}@keyframes pulse{0%{box-shadow:0 0 0 0 color-mix(in oklch, var(--warm) 55%, transparent)}70%,to{box-shadow:0 0 0 12px #0000}}@media (prefers-reduced-motion:reduce){.contact .avail .dot{animation:none}}.foot{border-block-start:1px solid var(--line);padding-block:2rem}.foot .wrap{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-soft);flex-wrap:wrap;justify-content:space-between;gap:1rem;display:flex}.magnet{will-change:transform;display:inline-block}.loader{z-index:9000;background:var(--bg);color:var(--ink);padding:var(--pad);clip-path:inset(0);will-change:clip-path;place-items:center start;display:grid;position:fixed;inset:0}.loader.is-done{pointer-events:none}.loader .loader-grain{z-index:0;opacity:.5;mix-blend-mode:multiply;pointer-events:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.28'/%3E%3C/svg%3E");position:absolute;inset:0}.loader .loader-inner{z-index:2;position:relative}.loader .loader-kick{font-family:JetBrains Mono,monospace;font-size:var(--fs-label);letter-spacing:.24em;text-transform:uppercase;color:var(--ink-soft);margin-block-end:clamp(1rem,3vh,2rem);overflow:clip}.loader .loader-kick .lk{will-change:transform;display:inline-block}.loader .loader-name{font-family:var(--font-display);letter-spacing:-.035em;font-size:clamp(2.8rem,1.4rem + 9vw,9rem);font-weight:700;line-height:.92}.loader .loader-name .lrow{margin-block-end:-.12em;padding-block-end:.12em;display:block;overflow:clip}.loader .loader-name .lw{will-change:transform;display:inline-block}.loader .loader-name .lrow:last-child .lw{color:var(--accent)}.loader .loader-name .lk-dot{color:var(--warm)}.loader .loader-count{z-index:2;font-family:var(--font-display);letter-spacing:-.02em;color:var(--ink);align-items:baseline;gap:.15em;font-size:clamp(3rem,1rem + 9vw,8rem);font-weight:600;line-height:1;display:flex;position:absolute;inset-block-end:var(--pad);inset-inline-end:var(--pad)}.loader .loader-count .lc-pct{color:var(--ink-soft);letter-spacing:.1em;font-family:JetBrains Mono,monospace;font-size:.2em}.loader .loader-bar{z-index:2;inset-inline:var(--pad);background:var(--line);block-size:2px;position:absolute;inset-block-end:0}.loader .loader-bar-fill{background:var(--accent);block-size:100%;inline-size:0%;display:block}.portfolio:has(.loader:not(.is-done)){block-size:100dvh;overflow:clip}@media (prefers-reduced-motion:reduce){.loader .loader-grain{display:none}}:where(a,button):focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:3px}.reveal-line{will-change:transform, opacity}
