:root{color-scheme:light dark;--bg: #ffffff;--bg-soft: #f5f5f5;--card: #ffffff;--text: #000000;--text-2: #4a4a4a;--line: #d4d4d4;--accent: #000000;--accent-text: #ffffff;--accent-soft: #f0f0f0;--focus: #000000;--live-bg: #000000;--live-fg: #ffffff;--review-bg: #e6e6e6;--review-fg: #000000;--oss-bg: #ffffff;--oss-fg: #000000;--case-bg: #eeeeee;--case-fg: #3a3a3a;--radius: 18px;--radius-sm: 12px;--shadow: 0 1px 2px rgb(0 0 0 / .04), 0 4px 16px rgb(0 0 0 / .06);--max: 1100px;--gutter: clamp(16px, 4vw, 32px);--font: "Overpass Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-display: "Overpass Variable", -apple-system, "Helvetica Neue", Arial, sans-serif;--font-mono: "Overpass Mono Variable", ui-monospace, Menlo, monospace;--sun: #000000;--mesh-1: rgb(0 0 0 / .06);--mesh-2: rgb(0 0 0 / .04);--mesh-3: rgb(0 0 0 / .03);--lift-shadow: 0 14px 36px rgb(0 0 0 / .12)}@media(prefers-color-scheme:dark){:root{--bg: #000000;--bg-soft: #141414;--card: #0d0d0d;--text: #ffffff;--text-2: #b3b3b3;--line: #3a3a3a;--accent: #ffffff;--accent-text: #000000;--accent-soft: #1f1f1f;--focus: #ffffff;--sun: #ffffff;--live-bg: #ffffff;--live-fg: #000000;--review-bg: #2a2a2a;--review-fg: #ffffff;--oss-bg: #000000;--oss-fg: #ffffff;--case-bg: #2c2c2c;--case-fg: #d1d1d1;--shadow: 0 1px 2px rgb(0 0 0 / .5);--mesh-1: rgb(255 255 255 / .07);--mesh-2: rgb(255 255 255 / .05);--mesh-3: rgb(255 255 255 / .03);--lift-shadow: 0 14px 36px rgb(0 0 0 / .6)}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{margin:0;min-height:100dvh;display:flex;flex-direction:column;background:var(--bg);color:var(--text);font-family:var(--font);font-size:1.0625rem;line-height:1.55;overflow-wrap:break-word;-webkit-font-smoothing:antialiased}main{flex:1}img{max-width:100%;height:auto;display:block}h1,h2,h3{line-height:1.15;text-wrap:balance;margin:0 0 .5em;font-weight:700}h1,h2{font-family:var(--font-display);font-weight:650;line-height:1.08}h1{font-size:clamp(2.25rem,1.6rem + 3vw,3.75rem)}h2{font-size:clamp(1.5rem,1.25rem + 1.2vw,2.25rem)}h3{font-size:1.1875rem;font-weight:600}p,li{text-wrap:pretty}p{margin:0 0 1em}a{color:var(--accent);text-underline-offset:.18em}a:hover{text-decoration-thickness:2px}:focus-visible{outline:3px solid var(--focus);outline-offset:3px;border-radius:6px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.skip{position:absolute;left:16px;top:-100px;z-index:30;background:var(--accent);color:var(--accent-text);padding:10px 16px;border-radius:10px;font-weight:600;text-decoration:none}.skip:focus{top:12px}.wrap{width:100%;max-width:var(--max);margin:0 auto;padding:0 var(--gutter)}.muted{color:var(--text-2)}.small{font-size:.9375rem}.lead{font-size:clamp(1.1875rem,1.05rem + .6vw,1.5rem);line-height:1.4;color:var(--text-2);max-width:40ch}.prose{max-width:68ch}.site-header{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 88%,transparent);border-bottom:1px solid var(--line);backdrop-filter:saturate(1.4) blur(12px);-webkit-backdrop-filter:saturate(1.4) blur(12px);padding-top:env(safe-area-inset-top)}.site-header .wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px 20px;padding-top:10px;padding-bottom:10px}.brand{display:inline-flex;align-items:center;gap:10px;color:var(--text);text-decoration:none;font-weight:600}.brand img{width:36px;height:36px;border-radius:9px}.site-nav ul{list-style:none;display:flex;flex-wrap:wrap;gap:2px 4px;margin:0;padding:0;align-items:center}.site-nav a{display:inline-block;padding:8px 10px;border-radius:10px;color:var(--text);text-decoration:none;font-size:.9375rem}.site-nav a:hover{background:var(--bg-soft)}.site-nav a[aria-current=page]{color:var(--accent);font-weight:600}.site-nav .lang a{border:1px solid var(--line)}.section{padding:clamp(48px,7vw,96px) 0}.section+.section{padding-top:0}.section-soft{background:var(--bg-soft);padding:clamp(48px,7vw,96px) 0}.section-soft+.section{padding-top:clamp(48px,7vw,96px)}.eyebrow{font-size:.9375rem;font-weight:600;color:var(--text-2);margin-bottom:8px}.hero{padding:clamp(56px,9vw,120px) 0 clamp(32px,5vw,56px)}.hero h1{margin-bottom:.3em}.grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr))}.grid-2{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr))}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:24px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:10px;min-width:0}.section-soft .card{border-color:transparent}.card h3,.card p{margin:0}.card .card-foot{margin-top:auto;padding-top:6px;display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center}.strengths{list-style:none;margin:0;padding:0;display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr))}.strengths li{background:var(--card);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);font-weight:500}.strengths .num{display:block;color:var(--accent);font-weight:700;font-variant-numeric:tabular-nums;margin-bottom:6px}.badge{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;padding:4px 10px;border-radius:999px;font-size:.8125rem;font-weight:600;line-height:1.3}.badge:before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}.badge-live{background:var(--live-bg);color:var(--live-fg)}.badge-review{background:var(--review-bg);color:var(--review-fg)}.badge-opensource{background:var(--oss-bg);color:var(--oss-fg)}.badge-case{background:var(--case-bg);color:var(--case-fg)}.stack{font-size:.875rem;color:var(--text-2)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:10px 20px;border-radius:999px;font:inherit;font-weight:600;font-size:1rem;line-height:1.2;text-align:center;text-decoration:none;cursor:pointer;border:1px solid transparent;background:var(--accent);color:var(--accent-text)}.btn:hover{text-decoration:none;filter:brightness(1.08)}.btn-ghost{background:transparent;color:var(--accent);border-color:var(--line)}.btn-ghost:hover{background:var(--accent-soft);filter:none}.btn-sm{min-height:36px;padding:6px 14px;font-size:.9375rem}.actions{display:flex;flex-wrap:wrap;gap:12px;align-items:center}.mode-switch{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:6px;border-radius:22px;background:var(--bg-soft);border:1px solid var(--line);max-width:720px}.mode-switch a{display:flex;align-items:center;justify-content:center;text-align:center;min-height:64px;padding:12px 14px;border-radius:16px;font-weight:600;font-size:clamp(1rem,.9rem + .5vw,1.25rem);line-height:1.25;color:var(--text);text-decoration:none}.mode-switch a:hover{background:var(--card)}.mode-switch a[data-mode=hire],html[data-mode=book] .mode-switch a[data-mode=book],.modes:has(#book:target) .mode-switch a[data-mode=book]{background:var(--accent);color:var(--accent-text);box-shadow:var(--shadow)}html[data-mode=book] .mode-switch a[data-mode=hire],.modes:has(#book:target) .mode-switch a[data-mode=hire]{background:transparent;color:var(--text);box-shadow:none}html[data-mode=book] .mode-switch a[data-mode=hire]:hover{background:var(--card)}.mode-panel{margin-top:32px;scroll-margin-top:120px}.mode-panel[data-panel=book]{display:none}html[data-mode=book] .mode-panel[data-panel=book],.modes:has(#book:target) .mode-panel[data-panel=book]{display:block}html[data-mode=book] .mode-panel[data-panel=hire],.modes:has(#book:target) .mode-panel[data-panel=hire]{display:none}html[data-mode=hire] .mode-panel[data-panel=hire]{display:block}html[data-mode=hire] .mode-panel[data-panel=book]{display:none}.roles{margin:0;padding-left:1.1em}.roles li+li{margin-top:2px}.offers{display:flex;flex-wrap:wrap;gap:16px}.offers>*{flex:1 1 320px}html[data-mode=book] .offers .offer-book{order:-1}.timeline{list-style:none;margin:0;padding:0;border-left:2px solid var(--line)}.timeline>li{position:relative;padding:0 0 36px 24px}.timeline>li:last-child{padding-bottom:0}.timeline>li:before{content:"";position:absolute;left:-7px;top:8px;width:12px;height:12px;border-radius:50%;background:var(--accent);border:2px solid var(--bg)}.timeline .dates{font-size:.9375rem;color:var(--text-2);font-variant-numeric:tabular-nums;margin:0 0 2px}.timeline h3{margin:0 0 2px}.timeline .org{margin:0 0 8px;color:var(--text-2)}.timeline ul{margin:0;padding-left:1.1em}.timeline ul li+li{margin-top:4px}.timeline .note{margin:8px 0 0;font-size:.875rem;color:var(--text-2)}.chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}.chips li{background:var(--bg-soft);border:1px solid var(--line);border-radius:999px;padding:4px 12px;font-size:.9375rem}.section-soft .chips li{background:var(--card)}.plain-list{margin:0;padding-left:1.1em}.plain-list li+li{margin-top:6px}dl.facts{display:grid;grid-template-columns:max-content 1fr;gap:10px 20px;margin:0}dl.facts dt{font-weight:600}dl.facts dd{margin:0;min-width:0}@media(max-width:520px){dl.facts{grid-template-columns:1fr;gap:2px}dl.facts dd{margin-bottom:12px}}.contact-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px}.contact-row .value{font-size:1.1875rem;font-weight:600;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}.copy-status{font-size:.875rem;color:var(--text-2);min-width:4em}.cv-list{list-style:none;margin:0;padding:0;display:grid;gap:12px}.cv-list li{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);padding:16px 20px}.site-footer{border-top:1px solid var(--line);background:var(--bg-soft);padding:40px 0 calc(40px + env(safe-area-inset-bottom));font-size:.9375rem;color:var(--text-2)}.site-footer .cols{display:grid;gap:24px;grid-template-columns:repeat(auto-fit,minmax(min(100%,200px),1fr))}.site-footer h2{font-size:.9375rem;color:var(--text);margin:0 0 8px}.site-footer ul{list-style:none;margin:0;padding:0}.site-footer li+li{margin-top:4px}.site-footer a{color:var(--text-2)}.site-footer a:hover{color:var(--text)}.site-footer .bottom{margin-top:28px}@media(prefers-reduced-motion:no-preference){.btn,.mode-switch a,.site-nav a{transition:background-color .15s ease-out,color .15s ease-out,filter .15s ease-out}a.card-link{transition:transform .15s ease-out}a.card-link:hover{transform:translateY(-2px)}}a.card-link{color:inherit;text-decoration:none}a.card-link:hover h3{color:var(--accent)}.arrow{color:var(--accent);font-weight:600}#main:focus{outline:none}.card h3 a{text-decoration:none}.card h3 a:hover{text-decoration:underline}.page-head{padding:clamp(48px,7vw,88px) 0 clamp(24px,4vw,40px)}.page-head h1{margin-bottom:.25em}.block+.block{margin-top:clamp(40px,6vw,64px)}.h3-size{font-size:1.1875rem;font-weight:600;margin:0}.site-header .wrap{position:relative}.nav-menu summary{list-style:none;cursor:pointer;display:inline-flex;align-items:center;gap:6px;padding:8px 10px;border-radius:10px;font-size:.9375rem;color:var(--text)}.nav-menu summary::-webkit-details-marker{display:none}.nav-menu summary:after{content:"";width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg)}.nav-menu[open] summary:after{transform:translateY(2px) rotate(-135deg)}.nav-menu summary:hover{background:var(--bg-soft)}.nav-menu summary[aria-current=page]{color:var(--accent);font-weight:600}.site-nav .nav-panel{position:absolute;top:calc(100% - 4px);right:var(--gutter);z-index:25;width:min(360px,calc(100% - 2 * var(--gutter)));display:flex;flex-direction:column;align-items:stretch;gap:2px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius-sm);box-shadow:0 8px 32px #00000029;padding:8px}.site-nav .nav-panel a{display:block;padding:10px 12px}@media(max-width:640px){.site-header{position:static}}.hero{position:relative;isolation:isolate;overflow:hidden;padding:clamp(40px,7vw,96px) 0 clamp(32px,5vw,64px)}.hero h1{font-size:clamp(2.75rem,1.6rem + 5vw,5.25rem);margin-bottom:.25em}.hero-bg{position:absolute;inset:0;z-index:-1;pointer-events:none;background:radial-gradient(42% 55% at 82% 28%,var(--mesh-1),transparent 70%),radial-gradient(36% 45% at 64% 92%,var(--mesh-2),transparent 70%),radial-gradient(40% 50% at 6% 8%,var(--mesh-3),transparent 70%);-webkit-mask-image:linear-gradient(to bottom,#000 75%,transparent);mask-image:linear-gradient(to bottom,#000 75%,transparent)}.hero-bg:after{content:"";position:absolute;inset:0;opacity:.22;mix-blend-mode:soft-light;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .5 0 0 0 0 .5 0 0 0 0 .5 0 0 0 .9 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}.hero-grid{display:grid;gap:clamp(24px,4vw,48px);align-items:center}@media(min-width:880px){.hero-grid{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr)}}.hero-text{min-width:0}.hero-actions{margin-top:28px}.globe{margin:0;min-width:0;text-align:center}.globe-stage{position:relative;width:min(100%,500px);aspect-ratio:1;margin:0 auto}@media(max-width:879px){.globe-stage{width:min(100%,340px)}}.globe-canvas{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:grab;touch-action:pan-y;contain:layout paint size}.globe.is-dragging .globe-canvas{cursor:grabbing}.globe-fallback{position:absolute;inset:7%;border-radius:50%;background:radial-gradient(circle at 34% 30%,rgb(255 255 255 / .9),transparent 42%),radial-gradient(circle at 50% 50%,var(--accent-soft) 0 58%,color-mix(in srgb,var(--accent) 28%,var(--accent-soft)) 100%);box-shadow:inset -18px -24px 60px color-mix(in srgb,var(--accent) 22%,transparent),0 30px 80px var(--mesh-1)}.globe-fallback:after{content:"";position:absolute;inset:0;border-radius:50%;opacity:.35;background-image:radial-gradient(circle,var(--accent) 1.2px,transparent 1.6px);background-size:11px 11px;-webkit-mask-image:radial-gradient(circle at 48% 46%,#000 30%,transparent 68%);mask-image:radial-gradient(circle at 48% 46%,#000 30%,transparent 68%)}@media(prefers-color-scheme:dark){.globe-fallback{background:radial-gradient(circle at 34% 30%,rgb(255 255 255 / .14),transparent 42%),radial-gradient(circle at 50% 50%,#1c1c1c 0 58%,#0c0c0c)}}.globe.is-ready .globe-canvas{opacity:1}.globe.is-ready .globe-fallback{opacity:0}@media(prefers-reduced-motion:no-preference){.globe-canvas,.globe-fallback{transition:opacity .6s ease-out}}.globe figcaption{margin-top:8px}.globe-route{font-weight:600;margin:0 0 10px;color:var(--text)}.globe-places{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:6px}.globe-places li{display:inline-flex;align-items:center;gap:6px;font-size:.8125rem;line-height:1.3;padding:4px 10px;border-radius:999px;background:color-mix(in srgb,var(--card) 80%,transparent);border:1px solid var(--line);color:var(--text-2)}.globe-places li:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent)}.globe-places li.here{color:var(--text);font-weight:600;border-color:color-mix(in srgb,var(--sun) 55%,var(--line))}.globe-places li.here:before{background:var(--sun);width:8px;height:8px}.here-tag{font-weight:500;color:var(--text-2)}.tools{position:relative;border-block:1px solid var(--line);padding:14px 0 18px;background:var(--bg)}.tools-label{margin-bottom:10px;font-size:.8125rem;font-weight:600;color:var(--text-2)}.tools-viewport{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}.tools-track{display:flex;width:max-content}.tools-list{list-style:none;display:flex;align-items:center;gap:40px;margin:0;padding:0 40px 0 0}.tools-list li{display:inline-flex;align-items:center;gap:10px;white-space:nowrap;color:var(--text-2);font-weight:500;font-size:.9375rem}.tools-list svg{flex:none;color:var(--text);opacity:.8}.tools-ctrl{max-width:none;padding:0 12px;position:absolute;inset:auto 0 0;height:62px;display:flex;justify-content:flex-end;align-items:center;pointer-events:none}.tools-toggle{pointer-events:auto;display:grid;place-items:center;width:36px;height:36px;border-radius:50%;border:1px solid var(--line);background:var(--card);color:var(--text);cursor:pointer;box-shadow:var(--shadow)}.tools-toggle .i-play{display:none}.tools-toggle[aria-pressed=true] .i-play{display:block}.tools-toggle[aria-pressed=true] .i-pause{display:none}@media(prefers-reduced-motion:no-preference){.tools-track{animation:tools-scroll 70s linear infinite}.tools-viewport:hover .tools-track,.tools:focus-within .tools-track,.tools-viewport.is-paused .tools-track,.tools-viewport.is-offscreen .tools-track{animation-play-state:paused}}@keyframes tools-scroll{to{transform:translate3d(-50%,0,0)}}@media(prefers-reduced-motion:reduce){.tools-viewport{-webkit-mask-image:none;mask-image:none}.tools-track{width:auto;justify-content:center}.tools-list{flex-wrap:wrap;justify-content:center;gap:14px 28px;padding:0 var(--gutter)}.tools-dup,.tools-ctrl{display:none}}.studio{position:relative;isolation:isolate;overflow:hidden}.studio-mark{position:absolute;z-index:-1;pointer-events:none;width:clamp(240px,36vw,440px);height:auto;right:clamp(-120px,-6vw,-40px);top:clamp(24px,5vw,64px);border-radius:50%;opacity:.05;transform:rotate(-12deg)}@media(prefers-color-scheme:dark){.studio-mark{opacity:.06}}.studio .offers{margin-top:24px}.studio .small-lead{font-size:1.1rem;max-width:760px}.studio-teaser{font-size:1.125rem;font-weight:600;max-width:62ch;margin:20px 0 0}.studio .offer{border:1px solid color-mix(in srgb,var(--accent) 30%,var(--line));border-top:4px solid var(--accent);padding:26px 24px 24px;gap:12px}.offer-icon{display:grid;place-items:center;width:48px;height:48px;border-radius:14px;background:var(--accent-soft);color:var(--accent)}.studio .offer h3{margin:4px 0 0}.studio .offer-buy{margin-top:auto;align-self:flex-start}.studio .price{font-family:var(--font-display);font-weight:700;color:var(--accent);font-size:clamp(2rem,1.6rem + 1.4vw,2.6rem);line-height:1;margin:0 0 4px;font-variant-numeric:tabular-nums}.lift{position:relative}.lift:after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:var(--lift-shadow);opacity:0}@media(prefers-reduced-motion:no-preference){.lift{transition:transform .18s ease-out}.lift:after{transition:opacity .18s ease-out}}@media(hover:hover){.lift:hover,.lift:focus-within{transform:translateY(-4px)}.lift:hover:after,.lift:focus-within:after{opacity:1}}@media(prefers-reduced-motion:reduce){.lift:hover,.lift:focus-within{transform:none}}.project-card{padding:0;gap:0}.cover{aspect-ratio:16 / 10;overflow:hidden;background:var(--bg-soft);border-radius:calc(var(--radius) - 1px) calc(var(--radius) - 1px) 0 0;border-bottom:1px solid var(--line)}.cover picture{display:block;height:100%}.cover img,.cover svg{display:block;width:100%;height:100%;object-fit:cover}.cover-initial{font-family:var(--font-display);font-size:300px;font-weight:800}.cover-sub{font-family:var(--font);font-size:26px;font-weight:600}@media(prefers-reduced-motion:no-preference){.cover img,.cover svg{transition:transform .3s ease-out}@media(hover:hover){.project-card:hover .cover img,.project-card:hover .cover svg{transform:scale(1.03)}}}.project-card h2{font-size:clamp(1.4rem,1.25rem + .5vw,1.65rem);margin:0}.project-body{display:flex;flex-direction:column;gap:10px;padding:20px 24px 24px;flex:1;min-width:0}.gh-head{display:flex;align-items:center;flex-wrap:wrap;gap:6px 10px}.gh-head svg{flex:none}.stats{list-style:none;margin:6px 0;padding:0;display:grid;gap:10px;grid-template-columns:repeat(3,minmax(0,1fr))}.stats li{background:var(--bg-soft);border-radius:var(--radius-sm);padding:14px 14px 12px;min-width:0}.section-soft .stats li{background:var(--bg)}.stat-num{display:block;font-family:var(--font);font-weight:750;color:var(--accent);line-height:1.05;font-size:clamp(1.75rem,1.3rem + 1.8vw,2.75rem);font-variant-numeric:tabular-nums}.stat-num [data-count]{display:inline-block;text-align:right}.stat-label{display:block;margin-top:4px;font-size:.875rem;color:var(--text-2);line-height:1.3}.shots{--shot-h: clamp(300px, 48vw, 460px)}.shots-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px 24px;margin-bottom:18px}.shots-head h2{margin-bottom:.2em}.shots-head p{margin:0}.shots-nav{display:flex;gap:8px}.shots-nav[hidden],.embla-dots[hidden]{display:none}.round-btn{display:grid;place-items:center;width:44px;height:44px;border-radius:50%;cursor:pointer;border:1px solid var(--line);background:var(--card);color:var(--text);box-shadow:var(--shadow)}.round-btn:hover{background:var(--bg-soft)}.round-btn:disabled{opacity:.4;cursor:default}.embla-viewport{overflow-x:auto;scroll-snap-type:x mandatory;overscroll-behavior-x:contain;border-radius:var(--radius-sm)}.shots.is-embla .embla-viewport{overflow:hidden;scroll-snap-type:none;cursor:grab}.embla-container{display:flex;list-style:none;margin:0;padding:0;touch-action:pan-y pinch-zoom}.embla-slide{flex:0 0 auto;min-width:0;margin-right:16px;scroll-snap-align:start}.embla-slide figure{margin:0;width:min-content}.embla-slide picture{display:block}.embla-slide img{height:var(--shot-h);width:auto;max-width:calc(100vw - 2 * var(--gutter));object-fit:contain;border-radius:var(--radius-sm);background:var(--bg-soft);border:1px solid var(--line);user-select:none;-webkit-user-drag:none}.embla-slide.is-wide img{height:auto;width:min(calc(var(--shot-h) * var(--ar)),calc(100vw - 2 * var(--gutter)))}.embla-slide figcaption{margin-top:10px;font-size:.875rem;line-height:1.4}.embla-dots{display:flex;flex-wrap:wrap;justify-content:center;gap:2px;margin-top:14px}.embla-dots .dot{width:28px;height:28px;padding:0;border:0;background:transparent;cursor:pointer;display:grid;place-items:center}.embla-dots .dot:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--line)}.embla-dots .dot[aria-current=true]:before{background:var(--accent)}.shots-section+.section{padding-top:0}@keyframes reveal-in{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:no-preference){@supports (animation-timeline: view()){.reveal{animation:reveal-in linear both;animation-timeline:view();animation-range:entry 0px entry 220px}}.reveal-on .reveal{opacity:0;transform:translateY(16px);transition:opacity .6s ease-out,transform .6s ease-out}.reveal-on .reveal.is-in{opacity:1;transform:none}}.badge-opensource,[data-status=opensource]{border:1px solid currentColor}h1,h2,.display{letter-spacing:-.01em}.btn-wip{opacity:.55;cursor:not-allowed;pointer-events:none}.wip-note{margin-top:6px;color:var(--muted, #666)}
