.site-nav.svelte-1h32yp1{z-index:500;background:#f1ece000;border-bottom:1px solid #0000;padding-block:16px;transition:background .35s,border-color .35s,padding .35s;position:fixed;top:0;left:0;right:0}.site-nav.scrolled.svelte-1h32yp1{-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-color:var(--color-line);background:#f1ece0db;padding-block:10px}.nav-inner.svelte-1h32yp1{justify-content:space-between;align-items:center;gap:24px;display:flex}.brand.svelte-1h32yp1{font-family:var(--font-mono);letter-spacing:.08em;align-items:center;gap:10px;font-size:.78rem;display:flex}.brand-mark.svelte-1h32yp1{flex:none;width:30px;height:30px}.brand-mark.svelte-1h32yp1 svg:where(.svelte-1h32yp1){width:100%;height:100%;display:block}.brand.svelte-1h32yp1 b:where(.svelte-1h32yp1){font-weight:600}.primary-links.svelte-1h32yp1{align-items:center;gap:clamp(18px,2.4vw,34px);display:flex}.primary-links.svelte-1h32yp1 a:where(.svelte-1h32yp1){font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--color-ink-70);padding-block:4px;font-size:.74rem;position:relative}.primary-links.svelte-1h32yp1 a:where(.svelte-1h32yp1):after{content:"";background:var(--color-accent);width:0%;height:1px;transition:width .3s;position:absolute;bottom:0;left:0}.primary-links.svelte-1h32yp1 a:where(.svelte-1h32yp1):hover:after,.primary-links.svelte-1h32yp1 a.active:where(.svelte-1h32yp1):after{width:100%}.primary-links.svelte-1h32yp1 a.active:where(.svelte-1h32yp1),.primary-links.svelte-1h32yp1 a.resume-link:where(.svelte-1h32yp1){color:var(--color-ink)}.primary-links.svelte-1h32yp1 a.resume-link:where(.svelte-1h32yp1) span:where(.svelte-1h32yp1){opacity:.55;font-size:.9em}.nav-right.svelte-1h32yp1{align-items:center;gap:22px;display:flex}.menu-btn.svelte-1h32yp1{flex-direction:column;gap:5px;padding:6px;display:none}.menu-btn.svelte-1h32yp1 span:where(.svelte-1h32yp1){background:var(--color-ink);width:22px;height:2px;display:block}.mobile-menu.svelte-1h32yp1{background:var(--color-canvas);z-index:600;visibility:hidden;flex-direction:column;justify-content:center;gap:2px;padding:32px;transition:transform .45s cubic-bezier(.7,0,.2,1),visibility 0s linear .45s;display:flex;position:fixed;inset:0;overflow:hidden;transform:translateY(-100%)}.mobile-menu.open.svelte-1h32yp1{visibility:visible;transition:transform .45s cubic-bezier(.7,0,.2,1),visibility linear;transform:translateY(0)}.mobile-menu.svelte-1h32yp1 a:where(.svelte-1h32yp1){font-family:var(--font-display);text-transform:uppercase;border-bottom:1px solid var(--color-line);padding-block:.15em;font-size:clamp(2.2rem,11vw,4.4rem);font-weight:700;line-height:1.15}.mobile-menu.svelte-1h32yp1 .close-btn:where(.svelte-1h32yp1){font-family:var(--font-mono);letter-spacing:.1em;font-size:.8rem;position:absolute;top:22px;right:22px}@media (prefers-reduced-motion:reduce){.mobile-menu.svelte-1h32yp1{transition:none}}@media (width<=980px){.primary-links.svelte-1h32yp1{display:none}.menu-btn.svelte-1h32yp1{display:flex}}.eyebrow.svelte-1m51eln{font-family:var(--font-mono);letter-spacing:.16em;text-transform:uppercase;color:var(--color-ink-45);align-items:center;gap:.55em;font-size:.72rem;display:inline-flex}.eyebrow.dark.svelte-1m51eln{color:#f3eee280}.eyebrow.svelte-1m51eln:before{content:"";background:var(--color-accent);border-radius:1px;flex:none;width:7px;height:7px;display:inline-block}.hero.svelte-1q37ri0{padding-top:clamp(150px,22vw,210px);padding-bottom:clamp(70px,9vw,110px);position:relative;overflow:hidden}.hero-top.svelte-1q37ri0{z-index:2;justify-content:space-between;align-items:flex-start;gap:20px;margin-bottom:18px;display:flex;position:relative}.hero-name.svelte-1q37ri0{z-index:2;font-family:var(--font-display);text-transform:uppercase;letter-spacing:-.025em;color:var(--color-ink);font-size:clamp(3.1rem,11.2vw,9rem);font-weight:900;line-height:.94;position:relative}.hero-foot.svelte-1q37ri0{z-index:2;grid-template-columns:1.15fr .85fr;align-items:end;gap:40px;margin-top:clamp(28px,4vw,46px);display:grid;position:relative}.hero-desc.svelte-1q37ri0{color:var(--color-ink-70);text-wrap:balance;max-width:34ch;font-size:clamp(1.05rem,1.6vw,1.32rem)}.hero-cta-row.svelte-1q37ri0{flex-wrap:wrap;align-items:center;gap:22px;display:flex}.btn-ghost.svelte-1q37ri0{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--color-ink-70);align-items:center;gap:8px;font-size:.76rem;display:inline-flex}.btn-ghost.svelte-1q37ri0 .chev:where(.svelte-1q37ri0){animation:1.6s ease-in-out infinite svelte-1q37ri0-bob}@keyframes svelte-1q37ri0-bob{0%,to{transform:translateY(0)}50%{transform:translateY(5px)}}@media (prefers-reduced-motion:reduce){.btn-ghost.svelte-1q37ri0 .chev:where(.svelte-1q37ri0){animation:none}}@media (width<=640px){.hero-foot.svelte-1q37ri0{grid-template-columns:1fr;gap:22px}}.section-head.svelte-1e6mq4h{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:30px;margin-bottom:clamp(40px,6vw,72px);display:flex}.section-title.svelte-1e6mq4h{font-family:var(--font-display);text-transform:uppercase;letter-spacing:-.02em;margin-top:14px;font-size:clamp(2.2rem,5.6vw,4.4rem);font-weight:800;line-height:1}.section-note.svelte-1e6mq4h{max-width:34ch;color:var(--color-ink-70);text-wrap:balance;font-size:1rem}.section-head.dark.svelte-1e6mq4h .section-note:where(.svelte-1e6mq4h){color:#f3eee29e}.section-title.svelte-1e6mq4h .accent-word{color:var(--color-accent)}@media (width<=640px){.section-head.svelte-1e6mq4h{align-items:flex-start}}.case-card.svelte-3pufga{border-radius:6px;flex-direction:column;justify-content:space-between;min-height:520px;padding:clamp(28px,3vw,44px);display:flex;position:relative;overflow:hidden}.case-il.svelte-3pufga{background:var(--color-ink);color:var(--color-dark-ink);background-image:radial-gradient(at 78% 12%,#de422247,#0000 55%)}.case-csio.svelte-3pufga{color:#efe9dd;background:#101014 radial-gradient(at 20% 100%,#de422252,#0000 60%)}.case-top.svelte-3pufga{z-index:2;justify-content:space-between;align-items:flex-start;gap:14px;display:flex;position:relative}.case-logo.svelte-3pufga{filter:brightness(0)saturate()invert(85%);width:38px;height:38px}.case-monogram.svelte-3pufga{width:38px;height:38px;font-family:var(--font-display);letter-spacing:-.02em;color:#fff;border:1px solid #efe9dd59;border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:.82rem;font-weight:800;display:flex}.case-eyebrow.svelte-3pufga{font-family:var(--font-mono);letter-spacing:.12em;text-transform:uppercase;color:#f3eee28c;font-size:.68rem}.case-index.svelte-3pufga{font-family:var(--font-mono);color:#f3eee266;font-size:.68rem}.case-title.svelte-3pufga{z-index:2;font-family:var(--font-display);text-transform:uppercase;letter-spacing:-.015em;margin-top:auto;padding-top:16px;font-size:clamp(1.9rem,3.4vw,2.9rem);font-weight:800;line-height:1;position:relative}.case-sub.svelte-3pufga{z-index:2;color:#efe9ddb8;text-wrap:balance;max-width:44ch;margin-top:14px;font-size:.98rem;position:relative}.case-sub.wide.svelte-3pufga{text-wrap:pretty;max-width:58ch}.stat-row.svelte-3pufga{z-index:2;flex-wrap:wrap;gap:clamp(18px,3vw,34px);margin-top:26px;display:flex;position:relative}.stat-row.svelte-3pufga div:where(.svelte-3pufga){flex-direction:column;gap:2px;display:flex}.stat-num.svelte-3pufga{font-family:var(--font-display);color:#fff;font-variant-numeric:tabular-nums;font-size:clamp(1.5rem,2.4vw,2.1rem);font-weight:800;line-height:1}.stat-label.svelte-3pufga{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:#efe9dd8c;font-size:.63rem}.feature-panel.svelte-3pufga{z-index:2;background:#ffffff08;border:1px solid #efe9dd2e;border-radius:4px;margin-top:22px;padding:14px 16px;position:relative}.feature-panel.svelte-3pufga .row:where(.svelte-3pufga){font-family:var(--font-mono);color:#efe9ddb3;border-bottom:1px solid #efe9dd14;justify-content:space-between;align-items:center;gap:12px;padding-block:6px;font-size:.72rem;display:flex}.feature-panel.svelte-3pufga .row:where(.svelte-3pufga):last-child{border-bottom:none}.feature-panel.svelte-3pufga .pill:where(.svelte-3pufga){background:var(--color-accent);color:#fff;white-space:nowrap;border-radius:20px;padding:.15em .6em;font-size:.62rem}.case-link.svelte-3pufga{z-index:2;font-family:var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:#fff;border-bottom:1px solid #fff6;align-items:center;gap:8px;width:fit-content;margin-top:22px;padding-bottom:2px;font-size:.76rem;transition:border-color .25s,color .25s;display:inline-flex;position:relative}.case-link.svelte-3pufga:hover{border-color:var(--color-accent);color:var(--color-accent)}@media (width<=980px){.case-card.svelte-3pufga{min-height:420px}}@media (width<=640px){.stat-row.svelte-3pufga{gap:16px}}.dev-grid.svelte-1ti8ej0{grid-template-columns:1.55fr 1fr;align-items:stretch;gap:clamp(20px,2.4vw,30px);display:grid}@media (width<=980px){.dev-grid.svelte-1ti8ej0{grid-template-columns:1fr}}.gallery-item.svelte-u72qyp{background:var(--color-paper);border:1px solid var(--color-line);cursor:pointer;aspect-ratio:1;text-align:left;border-radius:5px;width:100%;padding:0;display:block;position:relative;overflow:hidden}.gallery-item.svelte-u72qyp img:where(.svelte-u72qyp){object-fit:cover;width:100%;height:100%;transition:transform .7s var(--ease-out-soft)}.gallery-item.svelte-u72qyp:hover img:where(.svelte-u72qyp),.gallery-item.svelte-u72qyp:focus-visible img:where(.svelte-u72qyp){transform:scale(1.06)}.info.svelte-u72qyp{color:#fff;transition:transform .4s var(--ease-out-soft);background:linear-gradient(#0000,#0f0d09db);padding:14px 16px;position:absolute;bottom:0;left:0;right:0;transform:translateY(100%)}.gallery-item.svelte-u72qyp:hover .info:where(.svelte-u72qyp),.gallery-item.svelte-u72qyp:focus-visible .info:where(.svelte-u72qyp){transform:translateY(0)}.info.svelte-u72qyp .name:where(.svelte-u72qyp){font-family:var(--font-display);text-transform:uppercase;font-size:1rem;font-weight:700;line-height:1;display:block}.info.svelte-u72qyp .cat:where(.svelte-u72qyp){font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--color-accent-soft);margin-top:4px;font-size:.62rem;display:block}@media (prefers-reduced-motion:reduce){.gallery-item.svelte-u72qyp img:where(.svelte-u72qyp),.info.svelte-u72qyp{transition:none}}.backdrop.svelte-lnsl0r{z-index:900;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0f0d09d6;justify-content:center;align-items:center;padding:clamp(16px,4vw,48px);display:flex;position:fixed;inset:0;overflow:auto}.backdrop.animate.svelte-lnsl0r{animation:.24s both svelte-lnsl0r-fade}.panel.svelte-lnsl0r{background:var(--color-paper);border:1px solid var(--color-line);border-radius:6px;flex-direction:column;gap:14px;max-width:min(100%,880px);padding:clamp(14px,2vw,20px);display:flex}.panel.svelte-lnsl0r:focus{outline:none}.backdrop.animate.svelte-lnsl0r .panel:where(.svelte-lnsl0r){animation:svelte-lnsl0r-rise .28s var(--ease-out-soft) both}.panel-head.svelte-lnsl0r{justify-content:space-between;align-items:center;gap:16px;display:flex}.counter.svelte-lnsl0r{font-family:var(--font-mono);letter-spacing:.14em;color:var(--color-ink-45);font-size:.7rem}.close.svelte-lnsl0r{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--color-ink-70);font-size:.72rem;transition:color .2s}.close.svelte-lnsl0r:hover{color:var(--color-accent)}.plate.svelte-lnsl0r{background:var(--color-canvas);border:1px solid var(--color-line);border-radius:4px;justify-content:center;align-items:center;padding:clamp(12px,3vw,28px);display:flex}.plate.svelte-lnsl0r img:where(.svelte-lnsl0r){border-radius:2px;width:auto;max-width:100%;height:auto;max-height:74vh}.panel-foot.svelte-lnsl0r{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px;display:flex}.meta.svelte-lnsl0r{flex-direction:column;gap:3px;display:flex}.meta.svelte-lnsl0r .name:where(.svelte-lnsl0r){font-family:var(--font-display);text-transform:uppercase;font-size:1.15rem;font-weight:700;line-height:1}.meta.svelte-lnsl0r .cat:where(.svelte-lnsl0r){font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--color-accent);font-size:.64rem}.nav.svelte-lnsl0r{gap:8px;display:flex}.nav.svelte-lnsl0r button:where(.svelte-lnsl0r){border:1px solid var(--color-line-strong);width:34px;height:34px;color:var(--color-ink-70);border-radius:50%;justify-content:center;align-items:center;font-size:.95rem;transition:border-color .2s,background .2s,color .2s;display:flex}.nav.svelte-lnsl0r button:where(.svelte-lnsl0r):hover{border-color:var(--color-accent);background:var(--color-accent);color:var(--color-accent-ink)}@keyframes svelte-lnsl0r-fade{0%{opacity:0}to{opacity:1}}@keyframes svelte-lnsl0r-rise{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.backdrop.svelte-lnsl0r,.panel.svelte-lnsl0r{animation:none}.close.svelte-lnsl0r,.nav.svelte-lnsl0r button:where(.svelte-lnsl0r){transition:none}}.gallery.svelte-1b3b0q4{grid-template-columns:repeat(6,1fr);gap:14px;display:grid}@media (width<=980px){.gallery.svelte-1b3b0q4{grid-template-columns:repeat(4,1fr)}}@media (width<=640px){.gallery.svelte-1b3b0q4{grid-template-columns:repeat(2,1fr)}}.canvas-wrap.svelte-1etjdkk{border:1px solid var(--color-dark-line);background:#0f0d0a;border-radius:4px;height:130px;margin-top:16px;position:relative;overflow:hidden}canvas.svelte-1etjdkk{width:100%;height:100%;display:block}.lab-card.svelte-h6s9jx{background:var(--color-dark-paper);border:1px solid var(--color-dark-line);min-height:300px;transform-style:preserve-3d;will-change:transform;border-radius:6px;flex-direction:column;justify-content:space-between;padding:26px;transition:transform .25s,border-color .3s;display:flex;position:relative}.lab-card.svelte-h6s9jx:hover{border-color:#de422280}.lab-num.svelte-h6s9jx{font-family:var(--font-mono);letter-spacing:.08em;color:#f3eee266;font-size:.78rem}.lab-num.svelte-h6s9jx b:where(.svelte-h6s9jx){color:var(--color-accent)}.lab-title.svelte-h6s9jx{font-family:var(--font-display);text-transform:uppercase;margin-top:20px;font-size:1.7rem;font-weight:800;line-height:1}.lab-desc.svelte-h6s9jx{color:#f3eee299;max-width:38ch;margin-top:12px;font-size:.9rem}.lab-tags.svelte-h6s9jx{flex-wrap:wrap;gap:7px;margin-top:18px;display:flex}.tag.svelte-h6s9jx{font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:#f3eee2b3;white-space:nowrap;border:1px solid #f3eee238;border-radius:2px;padding:.4em .75em;font-size:.66rem}@media (prefers-reduced-motion:reduce){.lab-card.svelte-h6s9jx{transition:border-color .3s}}.labs.svelte-aqpf83{background:var(--color-dark-canvas);color:var(--color-dark-ink)}.labs-grid.svelte-aqpf83{grid-template-columns:repeat(3,1fr);gap:22px;display:grid}.labs-empty.svelte-aqpf83{text-align:center;border:1px dashed #f3eee238;border-radius:6px;flex-direction:column;align-items:center;gap:16px;padding:clamp(44px,7vw,76px) clamp(24px,4vw,40px);display:flex}.labs-empty.svelte-aqpf83 .rule:where(.svelte-aqpf83){background:var(--color-accent);width:26px;height:1px}.labs-empty.svelte-aqpf83 .marker:where(.svelte-aqpf83){font-family:var(--font-mono);letter-spacing:.18em;text-transform:uppercase;color:#f3eee26b;font-size:.7rem}.labs-empty.svelte-aqpf83 h3:where(.svelte-aqpf83){font-family:var(--font-display);text-transform:uppercase;letter-spacing:-.015em;font-size:clamp(1.5rem,3.4vw,2.3rem);font-weight:800;line-height:1.02}.labs-empty.svelte-aqpf83 p:where(.svelte-aqpf83){color:#f3eee299;text-wrap:balance;max-width:46ch;font-size:.98rem}@media (width<=980px){.labs-grid.svelte-aqpf83{grid-template-columns:1fr 1fr}.labs-grid.svelte-aqpf83>:nth-child(3){grid-column:span 2}}@media (width<=640px){.labs-grid.svelte-aqpf83{grid-template-columns:1fr}.labs-grid.svelte-aqpf83>:nth-child(3){grid-column:span 1}}.about-grid.svelte-22v3ng{grid-template-columns:1.3fr 1fr;gap:clamp(30px,5vw,70px);display:grid}.about-lede.svelte-22v3ng{font-family:var(--font-display);text-transform:uppercase;letter-spacing:-.005em;font-size:clamp(1.6rem,3.2vw,2.5rem);font-weight:600;line-height:1.08}.about-lede.svelte-22v3ng .accent-word:where(.svelte-22v3ng){color:var(--color-accent)}.about-copy.svelte-22v3ng{color:var(--color-ink-70);max-width:52ch;margin-top:22px;font-size:1.02rem}.about-copy.svelte-22v3ng+.about-copy:where(.svelte-22v3ng){margin-top:14px}.resume-cta.svelte-22v3ng{margin-top:30px}.skills-table.svelte-22v3ng{border-top:1px solid var(--color-line);margin-top:8px}.skills-row.svelte-22v3ng{border-bottom:1px solid var(--color-line);grid-template-columns:110px 1fr;gap:16px;padding-block:14px;display:grid}.col-label.svelte-22v3ng{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--color-accent);font-size:.7rem}.col-items.svelte-22v3ng{color:var(--color-ink-70);flex-wrap:wrap;gap:8px 18px;font-size:.92rem;display:flex}.about-location.svelte-22v3ng{font-family:var(--font-mono);color:var(--color-ink-45);align-items:center;gap:14px;margin-top:30px;font-size:.75rem;display:flex}.crosshair.svelte-22v3ng{flex:none;width:20px;height:20px}@media (width<=980px){.about-grid.svelte-22v3ng{grid-template-columns:1fr}}svg.svelte-7hbioq{fill:#f3eee2d9;width:15px;height:15px}.contact.svelte-1mt7jo5{background:var(--color-ink);color:var(--color-dark-ink);text-align:left}.contact-title.svelte-1mt7jo5{font-family:var(--font-display);text-transform:uppercase;letter-spacing:-.02em;margin-top:16px;font-size:clamp(2.3rem,6.8vw,5.4rem);font-weight:900;line-height:.98}.contact-title.svelte-1mt7jo5 .accent-word:where(.svelte-1mt7jo5){color:var(--color-accent)}.site-foot.svelte-1mt7jo5{border-top:1px solid #f3eee224;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-top:clamp(50px,8vw,90px);padding-top:26px;display:flex}.foot-brand.svelte-1mt7jo5{font-family:var(--font-mono);letter-spacing:.1em;color:#f3eee2a6;align-items:center;gap:10px;font-size:.78rem;display:flex}.foot-brand.svelte-1mt7jo5 .rule:where(.svelte-1mt7jo5){background:var(--color-accent);width:26px;height:1px;display:inline-block}.socials.svelte-1mt7jo5{gap:16px;display:flex}.socials.svelte-1mt7jo5 a:where(.svelte-1mt7jo5){border:1px solid #f3eee233;border-radius:50%;justify-content:center;align-items:center;width:34px;height:34px;transition:border-color .25s,background .25s;display:flex}.socials.svelte-1mt7jo5 a:where(.svelte-1mt7jo5):hover{border-color:var(--color-accent);background:var(--color-accent)}
