:root{--bg:#D9E6FF;--ink:#0B1B3A;--card:#F4F8FF;--accent:#2F6BFF;--on-accent:#fff;--muted:#4A5B7C;--line:#0B1B3A;--tint:#BCD3FF;--blob:#2F6BFF;--below:#F6F9FE;--cta:#0B1B3A}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#0A1328;--ink:#E6EEFF;--card:#0F1C38;--accent:#6EA2FF;--on-accent:#0A1328;--muted:#93A6C8;--line:#5B73A6;--tint:#1B2E58;--blob:#2F6BFF;--below:#060C1A;--cta:#101C34}}:root[data-theme=dark]{--bg:#0A1328;--ink:#E6EEFF;--card:#0F1C38;--accent:#6EA2FF;--on-accent:#0A1328;--muted:#93A6C8;--line:#5B73A6;--tint:#1B2E58;--blob:#2F6BFF;--below:#060C1A;--cta:#101C34}*{box-sizing:border-box;margin:0}body{background:var(--below);color:var(--ink);font:400 16px/1.55 Instrument Sans,system-ui,sans-serif;transition:background .3s}a{color:inherit;text-decoration:none}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.wrap{max-width:1200px;margin:0 auto;padding:0 24px}main{overflow-x:clip;padding-bottom:64px}.top{--card-h:clamp(200px,min(19vw,28vh),260px);min-height:100svh;padding-top:100px;display:flex;flex-direction:column;background:linear-gradient(to bottom,var(--bg) calc(100% - 48px - var(--card-h) / 2),var(--below) 0)}.top>.wrap{flex:1 1;width:100%;display:flex;flex-direction:column}.row{display:flex;align-items:center;gap:10px}.navbar{position:fixed;top:16px;left:0;right:0;z-index:50;padding:0 24px;pointer-events:none}.nav{pointer-events:auto;max-width:1200px;height:68px;margin:0 auto;padding:0 15px 0 28px;display:flex;justify-content:space-between;align-items:center;background:var(--card);border:1px solid var(--line);border-radius:22px}.logo{font-size:30px;font-weight:500;letter-spacing:-.04em;line-height:1}.icon-btn,.toggle{width:38px;height:38px;padding:0;display:grid;place-items:center;font:500 16px/1 Instrument Sans,sans-serif;color:var(--ink);background:transparent;border:1px solid var(--line);border-radius:10px;cursor:pointer;transition:background .2s}.icon-btn:hover,.toggle:hover{background:var(--tint)}.hero{text-align:center}.copy,.hero{flex:1 1;display:flex;flex-direction:column}.copy{position:relative;justify-content:center;padding:24px 0}h1{font-size:clamp(36px,min(6.5vw,10vh),76px);line-height:1.12;font-weight:500;letter-spacing:-.05em}.avatar{width:.85em;height:.85em;vertical-align:-.1em;border-radius:50%;object-fit:cover;border:2px solid var(--line);background:var(--tint)}.sub{max-width:34em;margin:24px auto 0;color:var(--muted);font-size:clamp(15px,1.6vw,18px)}.cards{--gap:28px;display:grid;grid-template-columns:repeat(3,1fr);grid-gap:var(--gap);gap:var(--gap);padding-bottom:48px}.card{--b:#CFE0FF;position:relative;min-height:var(--card-h);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:24px 20px 40px;text-align:center;background:var(--card);border:1px solid var(--line);border-radius:20px;transform:translate(calc((1 - var(--i)) * (100% + var(--gap))),140px) rotate(var(--r));transition:transform 1.1s cubic-bezier(.22,1,.36,1) calc(var(--i) * 70ms),border-color .2s}.cards[data-open] .card{transform:none}.card:nth-child(2){--b:#A9C8FF}.card:nth-child(3){--b:#7FAAFF}.card:hover{border-color:var(--accent)}.card svg{width:52px;height:52px;color:var(--accent);margin-bottom:8px}.card strong{font-size:20px;font-weight:500}.card span{font-size:14px;color:var(--muted);max-width:18em}.go{position:absolute;bottom:-22px;left:50%;translate:-50% 0;width:44px;height:44px;display:grid;place-items:center;font-style:normal;background:var(--b);color:#0B1B3A;border:1px solid var(--line);border-radius:50%}.sticker{position:absolute;padding:6px 14px;font:500 13px/1 JetBrains Mono,monospace;background:var(--tint);color:var(--ink);border:1px solid var(--line);border-radius:8px;animation:float 6s ease-in-out infinite alternate}.s0{top:14%;left:3%;rotate:-8deg}.s1{top:8%;right:8%;rotate:7deg;animation-delay:-2s}.s2{top:44%;left:0;rotate:5deg;animation-delay:-4s}.s3{top:40%;right:1%;rotate:-6deg;animation-delay:-1s}@keyframes float{to{translate:0 -10px}}.hero-cta{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:14px;margin-top:28px}.btn-pill{display:inline-flex;align-items:center;gap:16px;padding:6px 6px 6px 24px;font-size:16px;font-weight:500;color:var(--card);background:var(--ink);border-radius:999px;transition:transform .2s,box-shadow .2s;box-shadow:0 10px 24px -12px rgba(11,27,58,.55)}.btn-pill span{width:40px;height:40px;display:grid;place-items:center;font-size:18px;color:var(--ink);background:var(--card);border-radius:50%;transition:transform .2s}.btn-pill:hover{transform:translateY(-2px);box-shadow:0 14px 28px -12px rgba(11,27,58,.6)}.btn-pill:hover span{transform:translate(2px,-2px) rotate(8deg)}.btn-ghost{padding:13px 22px;font-size:16px;font-weight:500;border:1px solid var(--line);border-radius:999px;background:color-mix(in srgb,var(--card) 55%,transparent);transition:background .2s,border-color .2s}.btn-ghost:hover{background:var(--card);border-color:var(--accent)}@media (max-height:740px){.hero-cta{margin-top:18px}.copy{padding:8px 0}.sub{margin-top:14px}}.work{margin-top:clamp(96px,14vh,140px);scroll-margin-top:100px;text-align:center}.work h2{font-size:clamp(34px,4vw,46px);line-height:1.1;font-weight:500;letter-spacing:-.04em}.work-sub{max-width:38em;margin:16px auto 0;color:var(--muted);font-size:clamp(16px,1.5vw,19px)}.proj-list{display:flex;flex-direction:column;gap:40px;margin-top:56px;text-align:left}.proj{position:-webkit-sticky;position:sticky;top:calc(110px + var(--i) * 28px);transform:scale(var(--s,1));transform-origin:top center;display:grid;grid-template-columns:1fr 1.1fr;grid-gap:48px;gap:48px;align-items:center;min-height:480px;padding:32px 36px;background:var(--card);border:1px solid var(--line);border-radius:22px}.proj h3{font-size:clamp(28px,3vw,36px);font-weight:500;letter-spacing:-.03em;line-height:1.1}.proj-tags{margin-top:14px;font-size:13px;letter-spacing:.04em;text-transform:uppercase}.proj-desc{margin-top:20px;max-width:24em;color:var(--muted);font-size:17px}.btn-outline{display:inline-block;margin-top:28px;padding:12px 22px;font-size:15px;font-weight:500;border:1px solid var(--line);border-radius:10px;box-shadow:0 3px 0 var(--line);transition:background .2s}.btn-outline:hover{background:var(--tint)}.proj-art{align-self:stretch;display:grid;place-items:center;background:var(--tint);border:1px solid var(--line);border-radius:18px;padding:28px}.sketch{width:min(100%,420px);height:auto}.sk-win{fill:var(--card)}.sk-line,.sk-win{stroke:var(--line);stroke-width:1.5}.sk-dot{fill:var(--line);opacity:.35}.sk-bar{fill:var(--accent)}.sk-faint{fill:var(--line);opacity:.18}.sk-box{fill:var(--tint);stroke:var(--line);stroke-width:1.5}.sk-chart{stroke:var(--accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}.more{margin-top:56px;text-align:center}.more p{font-size:18px}.more .btn-outline{margin-top:16px}.about{display:grid;grid-template-columns:minmax(280px,5fr) 6fr;grid-gap:clamp(32px,6vw,72px);gap:clamp(32px,6vw,72px);align-items:center;margin-top:clamp(96px,16vh,160px);scroll-margin-top:100px}.blob{width:100%;max-width:440px;justify-self:center;overflow:visible}.blob-line{stroke:var(--line);fill:var(--line)}.blob-fill{fill:var(--blob)}.tape{fill:var(--card);stroke:var(--line);stroke-width:1.5}.tape-dots{color:var(--ink);opacity:.8}.badge{fill:var(--card);stroke:var(--line);stroke-width:1.5}.badge-text{font:600 12px JetBrains Mono,monospace;fill:var(--ink)}.badge-icon{fill:none;stroke:var(--ink);stroke-width:1.5;stroke-linejoin:round}.spin{transform-box:fill-box;transform-origin:center;animation:spin 30s linear infinite}@keyframes spin{to{rotate:1turn}}.about-text{display:flex;flex-direction:column;align-items:flex-start;gap:16px}h2{font-size:clamp(30px,4.4vw,52px);line-height:1.1;font-weight:500;letter-spacing:-.03em}h2 i{font-style:italic}.about-text p{color:var(--muted);max-width:34em;font-size:15px}.groups{width:100%;max-width:34em;margin-top:8px;border-top:1px solid var(--line)}.groups div{display:grid;grid-template-columns:9em 1fr;grid-gap:12px;gap:12px;padding:12px 0;border-bottom:1px solid var(--line);font-size:14px}.groups dt{color:var(--muted)}.caps{text-align:center;margin-top:clamp(80px,14vh,140px)}.caps p{color:var(--muted);max-width:30em;margin:16px auto 0}.pills{list-style:none;padding:0;margin:32px 0 0;display:flex;flex-wrap:wrap;justify-content:center;gap:12px}.pills li{display:inline-flex;gap:8px;padding:10px 20px;background:var(--card);border:1px solid var(--line);border-radius:999px;font-size:15px}.pills span{color:var(--accent)}@media (max-width:560px){.nav.has-back{padding-left:12px;gap:10px}.nav.has-back .logo{display:none}}@media (max-width:800px){.about,.cards{grid-template-columns:1fr}.cards{gap:36px}.card{transform:none;transition:none}.card,.proj{min-height:0}.proj{grid-template-columns:1fr;gap:24px;padding:24px}.sticker{display:none}}@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.blog{margin-top:clamp(96px,14vh,140px);padding-bottom:clamp(72px,12vh,120px);text-align:center;scroll-margin-top:100px}.blog h2{font-size:clamp(34px,4vw,46px);line-height:1.1;font-weight:500;letter-spacing:-.04em}.blog-sub{max-width:36em;margin:16px auto 0;color:var(--muted);font-size:clamp(16px,1.5vw,19px)}.blog-grid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:32px;gap:32px;max-width:1000px;margin:48px auto 40px;text-align:left}.blog-card{display:flex;flex-direction:column;overflow:hidden;background:var(--card);border:1px solid var(--line);border-radius:20px;transition:border-color .2s}.blog-card:hover{border-color:var(--accent)}.blog-art{aspect-ratio:3/2;display:grid;place-items:center;background:var(--tint);border-bottom:1px solid var(--line)}.blog-card:nth-child(2) .blog-art{background:color-mix(in srgb,var(--tint) 55%,var(--card))}.blog-art-svg{width:62%;height:auto}.ba-ring{stroke:var(--line);stroke-width:2}.ba-accent{stroke:var(--accent)}.ba-dot{fill:var(--accent)}.ba-bar{fill:var(--card);stroke:var(--line);stroke-width:2}.ba-bar.ba-accent{fill:var(--accent);stroke:var(--line)}.ba-base{stroke:var(--line);stroke-width:2;stroke-linecap:round}.blog-body{display:flex;flex-direction:column;gap:12px;padding:24px 26px 22px}.blog-body h3{font-size:clamp(21px,2.1vw,25px);font-weight:500;letter-spacing:-.03em;line-height:1.25}.blog-body p{color:var(--muted);font-size:15px}.blog-meta{display:flex;gap:10px;align-items:center;margin-top:8px;padding-top:16px;border-top:1px solid var(--line);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.blog-meta i{font-style:normal;font-size:8px}.blog .btn-outline{margin-top:0}.projects-page{--gap:32px;--cw:calc((min(1100px, 100vw - 48px) - var(--gap)) / 2);--ch:calc(var(--cw) * 0.88)}.phead{padding:130px 0 calc(56px + var(--ch, 0px) / 2);text-align:center;background:var(--bg)}.phead h1{font-size:clamp(36px,4.8vw,58px)}.phead .sub{max-width:32em;margin-top:18px}.pwrap{padding-bottom:clamp(80px,12vh,120px)}.pgrid{display:grid;grid-template-columns:repeat(2,1fr);grid-gap:var(--gap);gap:var(--gap);max-width:1100px;margin:calc(var(--ch) / -2) auto 0}.pcard{position:relative;display:block;aspect-ratio:1/.88;overflow:hidden;background:var(--card);border:1px solid var(--line);border-radius:20px;cursor:pointer;transition:border-color .2s,opacity .6s,transform .6s cubic-bezier(.22,1,.36,1)}.pcard:hover{border-color:var(--accent)}.pcard.pre{opacity:0;transform:translateY(24px)}.pcard.pre.in{opacity:1;transform:none}.pcard-art{position:absolute;inset:0;display:grid;place-items:center;padding:8%;background:var(--tint)}.pcard:nth-child(3n+2) .pcard-art{background:color-mix(in srgb,var(--tint) 60%,var(--card))}.pcard:nth-child(3n) .pcard-art{background:color-mix(in srgb,var(--tint) 85%,var(--accent) 15%)}.pcard .sketch{width:100%;max-width:440px}.vm{position:absolute;left:var(--px,50%);top:var(--py,50%);width:132px;height:38px;overflow:hidden;translate:-50% -50%;display:flex;align-items:center;border-radius:999px;background:var(--card);border:1px solid var(--line);pointer-events:none;opacity:0;scale:.85;transition:opacity .18s,scale .18s}.pcard:hover .vm{opacity:1;scale:1}.vm-track{display:flex;flex:none;animation:vm-run 4s linear infinite}.vm-track b{flex:none;padding:0 14px;font-size:12px;font-weight:600;letter-spacing:.06em;white-space:nowrap}@keyframes vm-run{to{transform:translateX(-50%)}}.cover-img{width:100%;height:100%;object-fit:cover;display:block}.pcard-art:has(.cover-img),.proj-art:has(.cover-img){padding:0}.proj-art .cover-img{border-radius:inherit}.phead.plain{padding-bottom:56px}.phead.dhead{text-align:left}.phead.dhead .wrap{max-width:860px}.phead.dhead .sub{margin-left:0;margin-right:0;max-width:40em}.nav-back{padding:8px 14px;font-size:14px;font-weight:500;white-space:nowrap;border:1px solid var(--line);border-radius:999px;transition:background .2s}.nav-back:hover{background:var(--tint)}.detail-back{margin-top:56px;text-align:center}.detail-back .btn-outline{margin-top:0}.dmeta{margin-bottom:14px;font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent)}.dhead h1{font-size:clamp(32px,4.4vw,52px)}.detail-cover{display:block;width:100%;max-width:960px;margin:0 auto 48px;border:1px solid var(--line);border-radius:20px}.prose{max-width:720px;margin:0 auto;font-size:18px;line-height:1.7}.prose blockquote,.prose figure,.prose ol,.prose p,.prose ul{margin-top:1.2em}.prose h2{margin-top:2em;font-size:30px;line-height:1.2;font-weight:500;letter-spacing:-.03em}.prose h3{margin-top:1.8em;font-size:22px;line-height:1.3;font-weight:500;letter-spacing:-.02em}.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}.prose ol,.prose ul{padding-left:1.4em}.prose li{margin-top:.4em}.prose blockquote{padding-left:1em;border-left:3px solid var(--accent);color:var(--muted)}.prose img{width:100%;border:1px solid var(--line);border-radius:14px}.prose code{padding:.1em .35em;font:.9em JetBrains Mono,monospace;background:var(--tint);border-radius:6px}.detail-links{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;margin-top:48px}.detail-links .btn-outline{margin-top:0}.empty{text-align:center;color:var(--muted)}.blog-grid.list{grid-template-columns:repeat(auto-fill,minmax(min(100%,420px),1fr));max-width:1100px;margin-top:0}main.flush{padding-bottom:0}.cband{padding-top:120px;background:linear-gradient(to bottom,var(--bg) calc(100% - 200px),var(--below) 0)}.chero{position:relative;text-align:center;padding:clamp(24px,6vh,56px) 0 48px}.chero h1{max-width:12em;margin:0 auto;font-size:clamp(34px,4.8vw,58px)}.chero .sub{max-width:30em}.c0{top:14%;left:6%;rotate:-8deg}.c1{top:8%;right:7%;rotate:6deg;animation-delay:-2s}.c2{top:62%;right:14%;rotate:-5deg;animation-delay:-3s}.touch{scroll-margin-top:104px;display:grid;grid-template-columns:1fr 1.25fr;grid-gap:clamp(32px,6vw,72px);gap:clamp(32px,6vw,72px);max-width:960px;margin:0 auto;padding:clamp(28px,4vw,48px);background:var(--card);border:1px solid var(--line);border-radius:22px}.touch h2{font-size:clamp(26px,2.6vw,32px);font-weight:500;letter-spacing:-.03em}.touch p{margin-top:12px;color:var(--muted);font-size:15px;max-width:22em}.info{list-style:none;padding:0;margin-top:28px;display:grid;grid-gap:18px;gap:18px}.info li{display:flex;gap:14px;align-items:center;font-size:14px;color:var(--muted)}.info svg{color:var(--accent);flex:none}.info strong{display:block;color:var(--ink);font-weight:500;font-size:15px}.cform{display:grid;grid-gap:22px;gap:22px;align-content:start}.cform label{display:grid;grid-gap:6px;gap:6px;font-size:13px;color:var(--muted)}.cform input,.cform textarea{width:100%;padding:6px 0 10px;font:400 15px/1.5 Instrument Sans,sans-serif;color:var(--ink);background:transparent;border:0;border-bottom:1px solid var(--line);border-radius:0;resize:vertical}.cform input::placeholder,.cform textarea::placeholder{color:var(--muted);opacity:.8}.cform input:focus,.cform textarea:focus{outline:none;border-bottom-color:var(--accent)}.cform .btn-outline{justify-self:start;margin-top:4px;background:transparent;color:var(--ink);font-family:inherit;cursor:pointer}.cform .btn-outline:disabled{opacity:.6;cursor:progress}.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.form-note{min-height:1.4em;margin:0;font-size:14px;color:var(--muted)}.faq{padding:clamp(72px,12vh,120px) 0;text-align:center}.faq h2{font-size:clamp(30px,3.6vw,42px);font-weight:500;letter-spacing:-.04em}.faq-sub{max-width:30em;margin:14px auto 0;color:var(--muted)}.faq-list{max-width:760px;margin:36px auto 0;display:grid;grid-gap:14px;gap:14px;text-align:left}.faq details{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:18px 22px}.faq summary{display:flex;justify-content:space-between;align-items:center;gap:16px;font-size:16px;font-weight:500;cursor:pointer;list-style:none}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:"+";font-size:22px;line-height:1;color:var(--accent)}.faq details[open] summary:after{content:"−"}.faq details p{margin-top:12px;color:var(--muted);font-size:15px;max-width:40em}.cta{position:relative;padding:clamp(80px,12vh,120px) 24px 28px;text-align:center;color:#fff;background:var(--cta)}.cta h2{max-width:11em;margin:20px auto 0;font-size:clamp(36px,5vw,60px);line-height:1.05;font-weight:500;letter-spacing:-.04em;color:#fff}.cta p{max-width:30em;margin:18px auto 0;color:rgba(255,255,255,.75)}.cta-btn{display:inline-block;margin-top:28px;padding:12px 24px;font-size:15px;font-weight:500;color:var(--cta);background:#fff;border-radius:10px;transition:transform .2s}.cta-btn:hover{transform:translateY(-2px)}.bubble{width:44px;color:#fff}.note{display:block;margin:18px 0 0 clamp(0px,8vw,120px);font:500 22px/1.1 Caveat,cursive;color:rgba(255,255,255,.85);rotate:-6deg}.cta-badge{position:absolute;top:0;right:clamp(24px,12vw,200px);width:104px;translate:0 -50%}.cb-fill{fill:var(--accent);stroke:var(--line);stroke-width:1.5}.cb-text{font:600 12px JetBrains Mono,monospace;fill:#0B1B3A}.cb-icon{fill:none;stroke:#0B1B3A;stroke-width:1.5;stroke-linejoin:round}.cfoot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;max-width:1200px;margin:clamp(64px,10vh,100px) auto 0;padding-top:22px;border-top:1px solid rgba(255,255,255,.18);font-size:13px;color:rgba(255,255,255,.7)}.cfoot span:last-child{display:flex;gap:22px}.cfoot a:hover{color:#fff}@media (max-width:800px){.blog-grid,.touch{grid-template-columns:1fr}.projects-page{--cw:calc(100vw - 48px)}.pgrid{grid-template-columns:1fr}.c0,.c1,.c2{display:none}}