@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:200 800;font-stretch:100%;font-display:swap;src:url(../media/caa77eaf0c6cae2c-s.ce707e0a.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:200 800;font-stretch:100%;font-display:swap;src:url(../media/6260001f568fa40d-s.db06404a.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Bricolage Grotesque;font-style:normal;font-weight:200 800;font-stretch:100%;font-display:swap;src:url(../media/2aa781f449db21e3-s.p.41de2d8b.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Bricolage Grotesque Fallback;src:local(Arial);ascent-override:88.21%;descent-override:25.61%;line-gap-override:0.0%;size-adjust:105.43%}.bricolage_grotesque_8ca9eeaf-module__sTqQdG__className{font-family:Bricolage Grotesque,Bricolage Grotesque Fallback;font-style:normal}.bricolage_grotesque_8ca9eeaf-module__sTqQdG__variable{--font-sans:"Bricolage Grotesque","Bricolage Grotesque Fallback"}
@font-face{font-family:Newsreader;font-style:italic;font-weight:200 800;font-display:swap;src:url(../media/ca8956476e4b15e1-s.1a010527.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Newsreader;font-style:italic;font-weight:200 800;font-display:swap;src:url(../media/0ada71b763703d9d-s.9e0ef734.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Newsreader;font-style:italic;font-weight:200 800;font-display:swap;src:url(../media/2b7d3311b69a4dca-s.p.41f06129.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Newsreader;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/6632a144c419935f-s.a483f402.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Newsreader;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/7b27d9904b50e540-s.70ee461d.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Newsreader;font-style:normal;font-weight:200 800;font-display:swap;src:url(../media/d38f3bca7db33566-s.p.b6a8de2a.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Newsreader Fallback;src:local(Times New Roman);ascent-override:69.68%;descent-override:25.12%;line-gap-override:0.0%;size-adjust:105.48%}.newsreader_c7a10c8b-module__XcRGDa__className{font-family:Newsreader,Newsreader Fallback}.newsreader_c7a10c8b-module__XcRGDa__variable{--font-serif:"Newsreader","Newsreader Fallback"}
@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5ce348bf30bf5439-s.56c1f21e.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/4fa387ec64143e14-s.3b336396.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/6306c77e7c8268e4-s.e3369375.woff2)format("woff2");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/7d817b4c03b0c5f1-s.a40b9a8b.woff2)format("woff2");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/bbc41e54d2fcbd21-s.fe42ddf4.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/797e433ab948586e-s.p.29207c2f.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Fallback;src:local(Arial);ascent-override:74.67%;descent-override:21.92%;line-gap-override:0.0%;size-adjust:134.59%}.geist_mono_b092efcb-module__rdjX_G__className{font-family:Geist Mono,Geist Mono Fallback;font-style:normal}.geist_mono_b092efcb-module__rdjX_G__variable{--font-mono:"Geist Mono","Geist Mono Fallback"}
@font-face{font-family:Caveat;font-style:normal;font-weight:600;font-display:swap;src:url(../media/f037ea83db21dbd3-s.d117dd86.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Caveat;font-style:normal;font-weight:600;font-display:swap;src:url(../media/3dc1de47b9d80a0b-s.3401e624.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Caveat;font-style:normal;font-weight:600;font-display:swap;src:url(../media/fe1d9b66fdac40b2-s.93bf2b57.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Caveat;font-style:normal;font-weight:600;font-display:swap;src:url(../media/a24d9e981578d580-s.84c21a52.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Caveat Fallback;src:local(Arial);ascent-override:124.77%;descent-override:38.99%;line-gap-override:0.0%;size-adjust:76.94%}.caveat_b50e10be-module__4S2J1G__className{font-family:Caveat,Caveat Fallback;font-style:normal;font-weight:600}.caveat_b50e10be-module__4S2J1G__variable{--font-hand:"Caveat","Caveat Fallback"}
*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--font-sans),system-ui,-apple-system,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--font-mono),ui-monospace,SF Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.\!visible{visibility:visible!important}.visible{visibility:visible}.fixed{position:fixed}.inset-0{inset:0}.bottom-6{bottom:1.5rem}.right-6{right:1.5rem}.z-\[1000\]{z-index:1000}.z-\[90\]{z-index:90}.mx-auto{margin-left:auto;margin-right:auto}.mb-5{margin-bottom:1.25rem}.mb-6{margin-bottom:1.5rem}.mb-8{margin-bottom:2rem}.ml-auto{margin-left:auto}.mr-2\.5{margin-right:.625rem}.mt-3\.5{margin-top:.875rem}.mt-4{margin-top:1rem}.mt-5{margin-top:1.25rem}.mt-6{margin-top:1.5rem}.mt-8{margin-top:2rem}.flex{display:flex}.inline-flex{display:inline-flex}.table{display:table}.grid{display:grid}.hidden{display:none}.size-11{width:2.75rem;height:2.75rem}.max-h-\[300px\]{max-height:300px}.min-h-screen{min-height:100vh}.w-\[90\%\]{width:90%}.w-max{width:max-content}.max-w-\[500px\]{max-width:500px}.flex-1{flex:1}.transform{transform:translate(var(--tw-translate-x),var(--tw-translate-y))rotate(var(--tw-rotate))skewX(var(--tw-skew-x))skewY(var(--tw-skew-y))scaleX(var(--tw-scale-x))scaleY(var(--tw-scale-y))}.cursor-pointer{cursor:pointer}.resize{resize:both}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.items-baseline{align-items:baseline}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1\.5{gap:.375rem}.gap-2\.5{gap:.625rem}.gap-3\.5{gap:.875rem}.self-start{align-self:flex-start}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.rounded-\[3px\]{border-radius:3px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.border{border-width:1px}.border-0{border-width:0}.border-b{border-bottom-width:1px}.border-t{border-top-width:1px}.border-\[var\(--border\)\]{border-color:var(--border)}.bg-\[var\(--bg\)\]{background-color:var(--bg)}.bg-\[var\(--bg-sub\)\]{background-color:var(--bg-sub)}.bg-black\/40{background-color:#0006}.bg-transparent{background-color:#0000}.object-contain{object-fit:contain}.p-2{padding:.5rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\[5px\]{padding-left:5px;padding-right:5px}.py-2\.5{padding-top:.625rem;padding-bottom:.625rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.py-px{padding-top:1px;padding-bottom:1px}.pb-10{padding-bottom:2.5rem}.pb-12{padding-bottom:3rem}.pb-4{padding-bottom:1rem}.pb-6{padding-bottom:1.5rem}.pb-7{padding-bottom:1.75rem}.pt-12{padding-top:3rem}.pt-5{padding-top:1.25rem}.pt-\[15vh\]{padding-top:15vh}.font-sans{font-family:var(--font-sans),system-ui,-apple-system,sans-serif}.text-\[10px\]{font-size:10px}.text-\[12\.5px\]{font-size:12.5px}.text-\[13px\]{font-size:13px}.text-\[clamp\(7rem\,28vw\,13rem\)\]{font-size:clamp(7rem,28vw,13rem)}.text-sm{font-size:.875rem;line-height:1.25rem}.font-\[var\(--font-serif\)\]{font-weight:var(--font-serif)}.font-medium{font-weight:500}.italic{font-style:italic}.leading-\[0\.9\]{line-height:.9}.tracking-\[-0\.02em\]{letter-spacing:-.02em}.text-\[var\(--text\)\]{color:var(--text)}.text-\[var\(--text-2\)\]{color:var(--text-2)}.text-\[var\(--text-3\)\]{color:var(--text-3)}.opacity-60{opacity:.6}.shadow-\[0_20px_25px_-5px_rgba\(0\,0\,0\,0\.1\)\,0_10px_10px_-5px_rgba\(0\,0\,0\,0\.04\)\]{--tw-shadow:0 20px 25px -5px #0000001a,0 10px 10px -5px #0000000a;--tw-shadow-colored:0 20px 25px -5px var(--tw-shadow-color),0 10px 10px -5px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.shadow-\[0_4px_12px_rgba\(0\,0\,0\,0\.08\)\]{--tw-shadow:0 4px 12px #00000014;--tw-shadow-colored:0 4px 12px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.blur{--tw-blur:blur(8px);filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.filter{filter:var(--tw-blur)var(--tw-brightness)var(--tw-contrast)var(--tw-grayscale)var(--tw-hue-rotate)var(--tw-invert)var(--tw-saturate)var(--tw-sepia)var(--tw-drop-shadow)}.backdrop-blur-sm{--tw-backdrop-blur:blur(4px);-webkit-backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia);backdrop-filter:var(--tw-backdrop-blur)var(--tw-backdrop-brightness)var(--tw-backdrop-contrast)var(--tw-backdrop-grayscale)var(--tw-backdrop-hue-rotate)var(--tw-backdrop-invert)var(--tw-backdrop-opacity)var(--tw-backdrop-saturate)var(--tw-backdrop-sepia)}.transition-\[background-color_100ms_ease\,color_100ms_ease\]{transition-property:background-color .1s ease,color .1s ease;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-\[transform_160ms_cubic-bezier\(0\.23\,1\,0\.32\,1\)\,background-color_160ms_ease\,color_160ms_ease\]{transition-property:transform .16s cubic-bezier(.23,1,.32,1),background-color .16s ease,color .16s ease;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}.ease-out{transition-timing-function:cubic-bezier(0,0,.2,1)}:root{--font-display:var(--font-sans);--radius-xs:2px;--radius-sm:4px;--radius-md:8px;--bg:#f6f7f9;--bg-sub:#eef0f3;--surface:#fff;--border:#d3d7dd;--border-faint:#e5e8ec;--text:#0f1217;--text-2:#2c323b;--text-3:#596070;--accent:#2b3af0;--live:#ef4444;--accent-live:#b45309;--live-glow:#ef444429;--surface-inverse:#101319;--text-on-inverse:#e6e9ef;--text-on-inverse-muted:#8b93a3;--content-width:800px;--page-x:32px;--ease-out:cubic-bezier(.23,1,.32,1);--ease-in-out:cubic-bezier(.77,0,.175,1)}.dark{--bg:#0b0d11;--bg-sub:#12151b;--surface:#161a22;--border:#2b313c;--border-faint:#1d222b;--text:#eceef2;--text-2:#cfd3da;--text-3:#9aa1ad;--accent:#909bff;--accent-live:#ffb454;--live-glow:#ef444433}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:focus-visible{outline:2px solid var(--text);outline-offset:2px}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}html,body{overflow-x:clip}body{font-family:var(--font-sans);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:18px;font-weight:400;line-height:1.68;transition:background .25s,color .25s}::selection{background:var(--accent);color:var(--bg)}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.dark ::-webkit-scrollbar-thumb{background:#ffffff26}a{color:inherit;text-decoration:none}.no-scrollbar{scrollbar-width:none;-ms-overflow-style:none}.no-scrollbar::-webkit-scrollbar{display:none}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.content-narrow{max-width:var(--content-width);padding:0 var(--page-x);margin:0 auto}.double-rule{background:var(--border);height:1px}.hover-line{transition:color .15s var(--ease-out);display:inline-block;position:relative}.hover-line:after{content:"";transform-origin:0;width:100%;height:1px;transition:transform .18s var(--ease-out);background:currentColor;position:absolute;bottom:-1px;left:0;transform:scaleX(0)}.hover-line:hover:after{transform:scaleX(1)}.project-badge{font-family:var(--font-sans);letter-spacing:.08em;color:var(--text-3);border:1px dashed var(--text-3);text-transform:uppercase;border-radius:var(--radius-xs);padding:1px 6px;font-size:12px;font-weight:600}.project-bottom{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.project-tags{flex-wrap:wrap;gap:6px;display:flex}.project-tag{font-family:var(--font-sans);color:var(--text-3);background:var(--bg-sub);border:1px solid var(--border);border-radius:var(--radius-xs);padding:3px 10px;font-size:13px;font-weight:500}.project-links{font-size:15px;font-family:var(--font-sans);gap:16px;font-weight:500;display:flex}.project-links a{color:var(--text-3);text-decoration:none;transition:color .15s}.project-links a:hover{color:var(--text)}.project-links a.live-link{color:var(--live)}.live-dot{background:var(--live);width:6px;height:6px;box-shadow:0 0 0 3px var(--live-glow);vertical-align:middle;border-radius:50%;margin-right:4px;display:inline-block}.modal-overlay{z-index:1000;-webkit-backdrop-filter:blur(8px);animation:fade-in .2s var(--ease-out)forwards;background:#0006;justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.modal-content{background:var(--bg);border:1px solid var(--border);overscroll-behavior:contain;transform-origin:50%;width:100%;max-width:720px;max-height:90vh;animation:modal-slide-up .25s var(--ease-out)forwards;border-radius:8px;position:relative;overflow-y:auto;box-shadow:0 20px 40px #0003}.modal-close{background:var(--bg-sub);border:1px solid var(--border);color:var(--text-2);cursor:pointer;width:28px;height:28px;font-family:var(--font-sans);transition:transform .16s var(--ease-out),background-color .16s var(--ease-out),color .16s var(--ease-out);border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;font-size:16px;line-height:1;display:flex}.modal-close:hover{background:var(--text);color:var(--bg)}.modal-close:active{transform:scale(.94)}.modal-cover{aspect-ratio:21/9;border:1px solid var(--border);background-color:var(--surface-inverse);background-image:radial-gradient(circle,color-mix(in srgb,var(--text-on-inverse)16%,transparent)1px,transparent 1.5px);background-size:14px 14px;border-radius:12px;margin:14px 20px 0;position:relative;overflow:hidden}.modal-cover:after{content:"";background:linear-gradient(to top,color-mix(in srgb,var(--surface-inverse)92%,transparent),transparent 60%);position:absolute;inset:0}.modal-cover-text{z-index:1;flex-direction:column;gap:2px;display:flex;position:absolute;bottom:14px;left:20px}.modal-cover-name{letter-spacing:-.02em;color:var(--text-on-inverse);font-size:21px;font-weight:700}.modal-cover-domain{font-family:var(--font-sans);color:var(--text-on-inverse-muted);font-size:13px}.modal-body{padding:28px}.modal-nav{justify-content:space-between;align-items:center;padding:14px 20px 0;display:flex}.modal-back{font-family:var(--font-sans);color:var(--text-3);cursor:pointer;background:0 0;border:none;padding:0;font-size:13px;transition:color .15s}.modal-back:hover{color:var(--text)}.modal-title{letter-spacing:-.02em;color:var(--text);flex-wrap:wrap;align-items:center;gap:10px;margin:0 0 4px;font-size:22px;font-weight:700;display:flex}.modal-live{font-family:var(--font-sans);color:var(--text-3);font-size:14px;transition:color .15s}.modal-live:hover{color:var(--text)}.modal-prose{color:var(--text-2);text-wrap:pretty;margin:0 0 14px;font-size:16px;line-height:1.7}.modal-shots{margin:24px 0 8px}.modal-shot{margin:0}.modal-shot.will-reveal{clip-path:inset(8% 4%);opacity:0;transition:clip-path .7s var(--ease-in-out),opacity .5s var(--ease-out)}.modal-shot.will-reveal.revealed{clip-path:inset(0);opacity:1}.modal-shot:first-of-type{width:88%}.modal-shot:not(:last-of-type){padding-bottom:56px}.modal-shot-frame{border:1px solid var(--border);background:var(--bg-sub);border-radius:10px;overflow:hidden;box-shadow:0 12px 32px #0000001f}.dark .modal-shot-frame{box-shadow:0 12px 32px #00000073}.modal-shot-frame img{width:100%;height:auto;display:block}.modal-shot figcaption{font-family:var(--font-sans);color:var(--text-3);margin-top:8px;font-size:13px}.modal-shot:nth-of-type(2){width:68%;margin-top:-48px;margin-left:auto;position:relative;transform:rotate(1.2deg)}.modal-shot:nth-of-type(3){width:68%;margin-top:-48px;position:relative;transform:rotate(-1.2deg)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-slide-up{0%{opacity:0;transform:translateY(14px)scale(.97)}to{opacity:1;transform:translateY(0)scale(1)}}.hero-top{--hero-name-size:clamp(1.75rem,6.5vw,3.4rem);align-items:flex-start;gap:18px;margin-bottom:30px;display:flex;position:relative}.hero-identity{flex:1;min-width:0}.avatar-frame{border:1px dashed var(--border);background:var(--bg);border-radius:18px;flex-shrink:0;padding:5px;position:relative}.avatar-frame:after{content:"";border:1px solid var(--border);pointer-events:none;border-radius:14px;position:absolute;inset:3px}.avatar-img{width:calc(var(--hero-name-size) + 71px);height:calc(var(--hero-name-size) + 71px);object-fit:cover;border-radius:11px;display:block}.hero-name{font-family:var(--font-sans);font-size:var(--hero-name-size);letter-spacing:-.045em;color:var(--text);-webkit-user-select:none;user-select:none;margin:0 0 8px -.03em;line-height:1}.hero-name-line{white-space:nowrap;display:block}.hero-name-letter{font-weight:360;display:inline-block}@media (prefers-reduced-motion:reduce){.hero-name-letter{font-weight:600}}.hero-role{font-family:var(--font-sans);letter-spacing:.01em;color:var(--text-3);margin-top:0;font-size:14px;font-weight:600}.theme-switch{width:28px;height:28px;color:var(--text-3);cursor:pointer;transition:background-color .15s ease,color .15s ease,transform .15s var(--ease-out);background:0 0;border:0;border-radius:50%;flex-shrink:0;place-items:center;padding:0;display:inline-grid;position:relative}.theme-switch:hover{background:var(--bg-sub);color:var(--text)}.theme-switch:active{transform:scale(.92)}.theme-switch-icon{transition:opacity .2s ease,transform .3s var(--ease-out);place-items:center;display:grid;position:absolute;inset:0}.theme-switch-icon svg{width:16px;height:16px;display:block}.theme-switch-moon{opacity:0;transform:rotate(45deg)scale(.7)}.dark .theme-switch-sun{opacity:0;transform:rotate(-45deg)scale(.7)}.dark .theme-switch-moon{opacity:1;transform:rotate(0)scale(1)}@media (prefers-reduced-motion:reduce){.theme-switch,.theme-switch-icon{transition:none}}.hero-meta{font-family:var(--font-sans);letter-spacing:.02em;color:var(--text-3);font-variant-numeric:tabular-nums;margin-top:3px;font-size:13.5px}.hero-status{color:var(--text);font-weight:600}@media (max-width:360px){.hero-top{padding-top:44px}.hero-top .theme-switch{position:absolute;top:0;right:0}}.hero-bio-list{flex-direction:column;gap:10px;display:flex}.hero-tldr{font-family:var(--font-mono);letter-spacing:.11em;color:var(--text-3);margin:0 0 10px;font-size:11px}.hero-rule{border-top:1px dashed var(--border);margin:0 0 20px}.hero-rule--below{margin:28px 0 4px}.hero-bio{color:var(--text-2);text-wrap:pretty;margin:0;font-size:19px;line-height:1.65}.sketch-word{display:inline-block;position:relative}.sketch-line{pointer-events:none;opacity:0;width:100%;height:6px;transition:opacity .2s;position:absolute;bottom:-5px;left:0;right:0;overflow:visible}.sketch-line path{fill:none;stroke:currentColor;stroke-width:1.5px;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1px;transition:stroke-dashoffset .35s}.sketch-word:hover .sketch-line,.sketch-word:focus-within .sketch-line,.sketch-word:active .sketch-line{opacity:1}.sketch-word:hover .sketch-line path,.sketch-word:focus-within .sketch-line path,.sketch-word:active .sketch-line path{stroke-dashoffset:0}.music-word{display:inline-block}.eq-bars{vertical-align:baseline;align-items:flex-end;gap:2px;height:12px;margin-left:5px;display:inline-flex}.eq-bars i{background:currentColor;width:2.5px;height:30%;animation:.5s ease-in-out infinite alternate paused eq-bounce}.eq-bars i:nth-child(2){animation-duration:.4s;animation-delay:-.25s}.eq-bars i:nth-child(3){animation-duration:.62s;animation-delay:-.12s}.music-word:hover .eq-bars i,.music-word:active .eq-bars i{animation-play-state:running}@keyframes eq-bounce{0%{height:25%}to{height:100%}}.dots-banner{background-image:radial-gradient(circle,var(--border)1px,transparent 1.4px);background-size:14px 14px;height:130px;margin:16px 0 0;position:relative;overflow:hidden;-webkit-mask-image:linear-gradient(#0000,#000 18% 82%,#0000);mask-image:linear-gradient(#0000,#000 18% 82%,#0000)}.dots-banner:after{content:"";background-image:radial-gradient(circle,var(--text-3)1px,transparent 1.4px);-webkit-mask-image:radial-gradient(110px circle at var(--mx,50%)var(--my,50%),black,transparent 70%);mask-image:radial-gradient(110px circle at var(--mx,50%)var(--my,50%),black,transparent 70%);-webkit-mask-image:radial-gradient(110px circle at var(--mx,50%)var(--my,50%),black,transparent 70%);opacity:0;pointer-events:none;background-size:14px 14px;transition:opacity .3s;position:absolute;inset:0}@media (hover:hover) and (pointer:fine){.dots-banner:hover:after{opacity:.85}}@media (prefers-reduced-motion:reduce){.dots-banner:after{display:none}}footer .dots-banner{margin:8px 0 0}.section-title-wrap{margin:32px 0 20px}.section-title{font-family:var(--font-sans);letter-spacing:-.01em;color:var(--text);margin:0;font-size:22px;font-weight:700;line-height:1.1}.socials-label{letter-spacing:-.01em;color:var(--text);margin:0 0 10px;font-size:22px;font-weight:700}.social-links{font-family:var(--font-mono);color:var(--text-2);flex-wrap:wrap;gap:8px 20px;font-size:13px;display:flex}.social-links a{text-decoration:underline;-webkit-text-decoration-color:var(--border);text-decoration-color:var(--border);text-underline-offset:3px;transition:color .15s,text-decoration-color .15s}.social-links a:hover{color:var(--text);-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.pcard-grid{grid-template-columns:repeat(2,1fr);gap:16px;display:grid}.pcard{background:var(--bg);border:1px solid var(--border);cursor:pointer;transition:transform .18s var(--ease-out);border-radius:10px;padding:18px;position:relative}.pcard-writeup{font-family:var(--font-sans);color:var(--accent);margin-top:14px;font-size:14px;font-weight:600;transition:color .15s;display:inline-flex}.pcard-writeup:hover{color:var(--text)}@media (hover:hover) and (pointer:fine){.pcard:hover .pcard-arrow{color:var(--text);transform:translate(3px)}.exp-row:hover .exp-chev{color:var(--text)}}@media (pointer:coarse){.pcard-links a{width:32px;height:32px}.pcard-links a svg{width:17px;height:17px}}.pcard:active{transform:scale(.98)}.pcard:focus-visible{outline:2px solid var(--text);outline-offset:2px}.pcard-top{justify-content:space-between;align-items:center;margin-bottom:14px;display:flex}.pcard-status{font-family:var(--font-sans);color:var(--text-3);align-items:center;gap:7px;font-size:13px;font-weight:500;display:inline-flex}.pcard-dot{background:var(--text-3);border-radius:50%;flex-shrink:0;width:6px;height:6px}.pcard-status.is-live,.pcard-status.is-building{color:var(--accent-live)}.pcard-status.is-live .pcard-dot,.pcard-status.is-building .pcard-dot{background:var(--accent-live);animation:2s ease-in-out infinite live-pulse}@keyframes live-pulse{0%,to{opacity:1}50%{opacity:.45}}.pcard-links{align-items:center;gap:4px;display:flex}.pcard-links a{width:26px;height:26px;color:var(--text-3);transition:color .15s var(--ease-out),transform .15s var(--ease-out);justify-content:center;align-items:center;display:inline-flex}.pcard-links a:hover{color:var(--text)}.pcard-links a:active{transform:scale(.9)}.pcard-links a svg{width:15px;height:15px}.pcard-namerow{justify-content:space-between;align-items:baseline;gap:12px;margin:0 0 8px;display:flex}.pcard-name{font-family:var(--font-sans);color:var(--text);letter-spacing:-.02em;margin:0;font-size:18px;font-weight:600;line-height:1.2}.pcard-arrow{font-family:var(--font-sans);color:var(--text-3);transition:transform .15s var(--ease-out),color .15s var(--ease-out);flex-shrink:0;font-size:15px}.pcard-desc{color:var(--text-2);margin:0 0 16px;font-size:16px;line-height:1.6}.pcard-tags{flex-wrap:wrap;gap:6px;margin-bottom:18px;display:flex}.pcard-tags span{font-family:var(--font-sans);color:var(--text-3);border:1px solid var(--border);background:var(--bg);border-radius:4px;align-items:center;padding:2px 8px;font-size:13px;font-weight:500;display:inline-flex}.pcard-tags .pcard-more{font-variant-numeric:tabular-nums;border-style:dashed}.pcard-foot{border-top:1px dashed var(--border);flex-direction:column;gap:2px;padding-top:12px;display:flex}.pcard-label{color:var(--text-3);font-size:13px}.pcard-value{font-family:var(--font-sans);color:var(--text);font-variant-numeric:tabular-nums;font-size:15px;font-weight:600}.pcard-value small{font-family:var(--font-sans);color:var(--text-3);margin-left:6px;font-size:12.5px;font-weight:400}.pcard-note{color:var(--text-2);font-size:14px;line-height:1.55}@media (max-width:640px){.pcard-grid{grid-template-columns:1fr}.modal-shot:first-of-type{width:100%}.modal-shot:nth-of-type(2),.modal-shot:nth-of-type(3){width:100%;margin-top:0;margin-left:0;transform:none}.modal-shot:not(:last-of-type){padding-bottom:0}.modal-shot{margin-bottom:20px}.modal-shot:last-of-type{margin-bottom:0}}.skill-groups{flex-direction:column;gap:18px;display:flex}.skill-group{border-top:1px dashed var(--border-faint);grid-template-columns:150px 1fr;align-items:start;gap:12px 20px;padding:12px 0;display:grid}.skill-group:first-child{border-top:none;padding-top:0}.skill-group:last-child{padding-bottom:0}.skill-group-label{font-family:var(--font-sans);letter-spacing:.04em;color:var(--text-3);padding-top:7px;font-size:12.5px;font-weight:600}.skills-flow{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.skill-chip{font-family:var(--font-mono);letter-spacing:.04em;color:var(--text-2);background:var(--surface);border:1px solid var(--border-faint);border-radius:3px;padding:5px 9px;font-size:11.5px;transition:border-color .15s,color .15s}@media (hover:hover) and (pointer:fine){.skill-chip:hover{border-color:var(--border);color:var(--text)}}.exp-list{flex-direction:column;gap:14px;display:flex}.exp-row{background:var(--bg);border:1px solid var(--border);transition:transform .18s var(--ease-out);border-radius:10px;padding:18px;position:relative}@media (hover:hover) and (pointer:fine){.exp-row:hover .exp-chev{color:var(--text)}}.exp-row:active{transform:scale(.99)}.exp-row-head{width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;-webkit-user-select:none;user-select:none;background:0 0;border:none;align-items:center;gap:14px;padding:0;display:flex}.exp-row-head:focus-visible{outline:2px solid var(--text);outline-offset:4px}.exp-logo{background:var(--surface);border:1px solid var(--border);border-radius:10px;flex-shrink:0;justify-content:center;align-items:center;width:44px;height:44px;display:flex;overflow:hidden}.exp-logo-mark{color:var(--text-2)}.exp-b2b{font-family:var(--font-sans);letter-spacing:.04em;color:var(--text);font-size:13px;font-weight:700}.exp-headtext{flex:1;min-width:0}.exp-titlerow{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.exp-company{letter-spacing:-.02em;color:var(--text);margin:0;font-size:18px;font-weight:600;line-height:1.2}.exp-kind{font-family:var(--font-sans);color:var(--text-2);background:var(--bg);border:1px solid var(--border);white-space:nowrap;border-radius:5px;padding:2px 8px;font-size:13px;font-weight:600}.exp-role{color:var(--text-2);margin:2px 0 0;font-size:15px}.exp-side{text-align:right;flex-direction:column;flex-shrink:0;align-items:flex-end;gap:2px;margin-left:auto;display:flex}.exp-period{font-family:var(--font-sans);color:var(--text);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:14px;font-weight:600}.exp-location{font-family:var(--font-sans);color:var(--text-3);white-space:nowrap;font-size:13px}.exp-chev{width:18px;height:18px;color:var(--text-3);transition:transform .22s var(--ease-out),color .15s var(--ease-out);flex-shrink:0}.exp-chev.is-open{transform:rotate(180deg)}.exp-panel{transition:grid-template-rows .28s var(--ease-out);grid-template-rows:0fr;display:grid}.exp-panel.open{grid-template-rows:1fr}.exp-panel-inner{opacity:0;min-height:0;transition:opacity .2s var(--ease-out);overflow:hidden}.exp-panel.open .exp-panel-inner{opacity:1}.exp-body{border-top:1px dashed var(--border);margin-top:14px;padding:16px 0 2px}.exp-bullets{flex-direction:column;gap:8px;margin:0 0 14px;padding:0;list-style:none;display:flex}.exp-bullets li{color:var(--text-2);padding-left:16px;font-size:16px;line-height:1.6;position:relative}.exp-bullets li:before{content:"•";color:var(--text-3);position:absolute;left:0}.exp-skills{flex-wrap:wrap;gap:8px;display:flex}.exp-chip{color:var(--text-2);background:var(--bg);border:1px solid var(--border);border-radius:8px;align-items:center;padding:4px 12px;font-size:14px;display:inline-flex}.page-title{font-family:var(--font-display);letter-spacing:-.03em;color:var(--text);margin:0;font-size:36px;font-weight:700;line-height:1.05}.page-count{font-family:var(--font-sans);color:var(--text-3);font-variant-numeric:tabular-nums;font-size:14px;font-weight:500}.page-sub{color:var(--text-3);margin-top:6px;font-size:16px;line-height:1.5}@media (max-width:560px){:root{--page-x:20px}body{font-size:17px}.dots-banner{height:110px;margin-top:12px}.hero-bio{font-size:17px}.hero-top{gap:14px;margin-bottom:26px;position:relative}.avatar-frame{border-radius:14px;padding:4px}.avatar-frame:after{border-radius:11px;inset:2px}.avatar-img{border-radius:9px;width:72px;height:72px}.hero-role,.hero-meta{font-size:13px}.page-title{font-size:30px}.project-bottom{flex-direction:column;align-items:flex-start;gap:12px}.skills-flow{gap:16px 18px}.exp-row-head{flex-wrap:wrap;padding-right:30px;position:relative}.exp-chev{position:absolute;top:22px;right:0}.exp-side{text-align:left;flex-direction:row;flex-basis:100%;align-items:flex-start;gap:8px;margin-left:58px}.modal-overlay{align-items:stretch;padding:0}.modal-content{border-left:none;border-right:none;border-radius:0;max-width:100%;min-height:100dvh;max-height:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}html{scroll-behavior:auto}}.f1{cursor:pointer;-webkit-tap-highlight-color:transparent;border-radius:4px;outline:none;font-weight:700;display:inline-block;position:relative}.f1:focus-visible{outline-offset:2px;outline:2px solid}.f1-text{transition:transform .22s var(--ease-out),opacity .18s ease-out;display:inline-block}.f1-car{opacity:0;width:1.8em;transition:transform .28s var(--ease-out),opacity .2s ease-out;pointer-events:none;position:absolute;top:50%;left:50%;transform:translate(-50%,-54%)scale(.5)}.f1-car svg{width:100%;height:auto;display:block;overflow:visible}.f1:hover .f1-text,.f1:focus-visible .f1-text,.f1.on .f1-text{opacity:0;transform:scale(.6)}.f1:hover .f1-car,.f1:focus-visible .f1-car,.f1.on .f1-car{opacity:1;transform:translate(-50%,-54%)scale(1)}@media (prefers-reduced-motion:reduce){.f1-text,.f1-car{transition-duration:.01ms!important}}.chess{white-space:nowrap;font:inherit;letter-spacing:inherit;line-height:inherit;vertical-align:baseline;cursor:default;-webkit-tap-highlight-color:transparent;outline:none;display:inline-block;position:relative}.chess:focus-visible{outline-offset:2px;border-radius:4px;outline:2px solid}.chess-l{will-change:transform,opacity;opacity:1;filter:blur();transform-origin:50% 55%;transition:transform .3s cubic-bezier(.2,.8,.2,1)var(--rd,0s),opacity .16s ease-out var(--rd,0s),filter .16s ease-out var(--rd,0s);display:inline-block;transform:none}.chess-c,.chess-h{--rd:70ms}.chess-e{--rd:.15s}.chess-s1{--rd:.17s}.chess-s2{--rd:.21s}.chess-pawn{opacity:0;clip-path:inset(100% 0 0);will-change:transform,opacity,clip-path;width:1.05em;height:1.05em;margin:-.525em 0 0 -.525em;transition:transform .16s cubic-bezier(.4,0,1,1),opacity .12s ease-in,clip-path .16s ease-in;position:absolute;top:50%;left:50%;transform:scale(.72)translateY(.06em)}.chess-pawn svg{fill:currentColor;width:100%;height:100%;display:block;overflow:visible}.chess:hover .chess-l,.chess:focus-visible .chess-l,.chess.on .chess-l{transition-delay:0s}.chess:hover .chess-s2,.chess:focus-visible .chess-s2,.chess.on .chess-s2{opacity:0;filter:blur(1.5px);transition:transform .1s cubic-bezier(.5,0,.9,.6),opacity .14s ease-out .12s,filter .14s ease-out .12s;transform:translate(-.5em)}.chess:hover .chess-s1,.chess:focus-visible .chess-s1,.chess.on .chess-s1{opacity:0;filter:blur(1.5px);transition:transform .14s ease-out .12s,opacity .14s ease-out .12s,filter .14s ease-out .12s;transform:scale(.7)}.chess:hover .chess-c,.chess:focus-visible .chess-c,.chess.on .chess-c{opacity:0;transition:transform .22s cubic-bezier(.2,.9,.25,1.05) 70ms,opacity .11s ease-in .25s;transform:translate(1.11em,-.36em)rotate(90deg)scale(.82)}.chess:hover .chess-h,.chess:focus-visible .chess-h,.chess.on .chess-h{opacity:0;transition:transform .2s cubic-bezier(.2,.9,.25,1) .1s,opacity .11s ease-in .25s;transform:translate(.5em,.1em)scale(.78,.6)}.chess:hover .chess-e,.chess:focus-visible .chess-e,.chess.on .chess-e{opacity:0;filter:blur(1.5px);transition:transform .14s ease-out .12s,opacity .13s ease-out .12s,filter .13s ease-out .12s;transform:translate(-.1em)scale(.55)}.chess:hover .chess-pawn,.chess:focus-visible .chess-pawn,.chess.on .chess-pawn{opacity:1;clip-path:inset(0);transition:transform .27s cubic-bezier(.34,1.45,.5,1) .19s,opacity .1s ease-out .19s,clip-path .21s cubic-bezier(.2,.8,.2,1) .19s;transform:none}@media (prefers-reduced-motion:reduce){.chess-l,.chess-pawn,.chess:hover .chess-l,.chess:hover .chess-pawn,.chess.on .chess-l,.chess.on .chess-pawn{transition-duration:1ms!important;transition-delay:0s!important}}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}.site-header{border-bottom:1px solid var(--border-faint)}.site-header-inner{align-items:center;gap:24px;min-height:64px;display:flex}.site-mark{font-family:var(--font-sans);letter-spacing:-.02em;color:var(--text);white-space:nowrap;align-items:center;gap:9px;font-size:17px;font-weight:600;display:inline-flex}.site-mark-dot{background:var(--accent);border-radius:1px;flex-shrink:0;width:8px;height:8px}.site-nav{align-items:center;gap:20px;margin-left:auto;display:flex}.site-nav a{font-family:var(--font-sans);color:var(--text-3);font-size:13.5px;font-weight:500;transition:color .15s}.site-nav a:hover,.site-nav a.is-current{color:var(--text)}.site-nav a.is-current{box-shadow:inset 0 -1px 0 var(--text)}.site-theme{flex-shrink:0}.eyebrow{font-family:var(--font-mono);letter-spacing:.11em;text-transform:uppercase;color:var(--text-3);font-size:11.5px;font-weight:500}.writing-shell{max-width:680px;padding-top:48px;padding-bottom:48px}.writing-bar{font-family:var(--font-mono);color:var(--text-3);justify-content:space-between;align-items:center;gap:16px;margin-bottom:56px;font-size:12px;display:flex}.writing-back{transition:color .15s}.writing-back:hover{color:var(--text)}.writing-title{font-family:var(--font-sans);letter-spacing:-.03em;color:var(--text);margin:0 0 20px;font-size:clamp(1.8rem,4vw,2.2rem);font-weight:700;line-height:1.1}.post-list{border-top:1px solid var(--border-faint);margin:0;padding:0;list-style:none}.post-line{border-bottom:1px solid var(--border-faint);justify-content:space-between;align-items:baseline;gap:20px;padding:16px 0;display:flex}.post-line a{font-family:var(--font-sans);letter-spacing:-.015em;color:var(--text);font-size:clamp(1.05rem,2vw,1.2rem);font-weight:600}.post-line time{font-family:var(--font-mono);color:var(--text-3);flex-shrink:0;font-size:11.5px}.writing-empty{color:var(--text-3);margin-top:24px;font-size:15px}.writing-teaser{border-top:1px solid var(--border-faint);border-bottom:1px solid var(--border-faint);flex-direction:column;gap:6px;padding:16px 0;display:flex}.writing-teaser-title{font-family:var(--font-sans);letter-spacing:-.02em;color:var(--text);text-wrap:balance;max-width:52ch;font-size:18px;font-weight:600;line-height:1.35}.writing-teaser-desc{color:var(--text-2);text-wrap:pretty;max-width:64ch;font-size:15.5px;line-height:1.5}.article-shell{max-width:760px;padding-top:52px;padding-bottom:52px}.article-bar{justify-content:space-between;align-items:center;gap:16px;display:flex}.article-guard{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}.article-guard ::selection{background:0 0}.article-back{font-family:var(--font-mono);color:var(--text-3);font-size:12px;transition:color .15s}.article-back:hover{color:var(--text)}.article-header{border-bottom:1px solid var(--text);margin-top:30px;padding-bottom:24px}.article-title{font-family:var(--font-sans);letter-spacing:-.03em;color:var(--text);text-wrap:balance;margin:12px 0 14px;font-size:clamp(2rem,4.6vw,3rem);font-weight:700;line-height:1.1}.article-deck{color:var(--text-2);text-wrap:pretty;max-width:60ch;font-size:17px;line-height:1.55}.article-end{border-top:1px dashed var(--border);font-family:var(--font-sans);color:var(--text-3);text-wrap:pretty;margin-top:48px;padding-top:18px;font-size:14px;line-height:1.6}.article-end a{color:var(--text);text-underline-offset:3px;text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.prose{font-family:var(--font-sans);color:var(--text-2);margin-top:32px;font-size:17.5px;line-height:1.7}.prose-part>*+*,.prose-part>div>*+*{margin-top:1.15em}.prose-part>h2:first-child,.prose-part>div>h2:first-child{margin-top:0}.prose p{text-wrap:pretty}.prose h2{font-family:var(--font-sans);letter-spacing:-.025em;color:var(--text);text-wrap:balance;margin-top:2.1em;margin-bottom:.6em;scroll-margin-top:28px;font-size:clamp(1.35rem,2.4vw,1.6rem);font-weight:700;line-height:1.2}.prose h3{font-family:var(--font-sans);letter-spacing:-.015em;color:var(--text);margin-top:1.8em;margin-bottom:.45em;scroll-margin-top:28px;font-size:1.1rem;font-weight:600;line-height:1.3}.prose strong{color:var(--text);font-weight:600}.prose a{color:var(--text);text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:3px;text-decoration-thickness:1px}.prose a:hover{color:var(--accent)}.prose ul,.prose ol{padding-left:1.25em}.prose li{margin-top:.35em;padding-left:.15em}.prose li::marker{color:var(--text-3);font-family:var(--font-mono);font-size:.8em}.prose blockquote{border-left:2px solid var(--accent);color:var(--text);padding-left:20px;font-style:italic}.prose hr{border:0;border-top:1px solid var(--border);margin:2.6em 0}.prose code{font-family:var(--font-mono);background:var(--bg-sub);border:1px solid var(--border-faint);border-radius:3px;padding:.1em .34em;font-size:.82em}.prose .code-block{border:1px solid var(--border);background:var(--surface-inverse);border-radius:8px;margin:1.9em 0;overflow:hidden}.prose .code-block figcaption{font-family:var(--font-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--text-on-inverse-muted);border-bottom:1px solid color-mix(in srgb,var(--text-on-inverse)12%,transparent);background:color-mix(in srgb,var(--text-on-inverse)4%,transparent);padding:8px 16px;font-size:10.5px}.prose .code-block pre{margin:0;padding:16px 18px;overflow-x:auto}.prose .code-block code{font-family:var(--font-mono);color:var(--text-on-inverse);background:0 0;border:0;padding:0;font-size:13.5px;line-height:1.65}.table-wrap{border:1px solid var(--border);border-radius:8px;margin:1.9em 0;overflow-x:auto}.prose table{border-collapse:collapse;width:100%;font-family:var(--font-sans);font-variant-numeric:tabular-nums;font-size:13.5px;line-height:1.5}.prose th{text-align:left;color:var(--text);background:var(--bg-sub);border-bottom:1px solid var(--border);white-space:nowrap;padding:10px 12px;font-weight:600}.prose td{border-top:1px solid var(--border-faint);color:var(--text-2);padding:9px 12px}.prose tr:first-child td{border-top:0}.bucket-demo{border:1px solid var(--border);background:var(--surface);font-family:var(--font-sans);color:var(--text-2);border-radius:10px;margin:2.4em 0;padding:20px 22px 18px;font-size:14px;line-height:1.5}.bucket-head{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.bucket-kicker{font-family:var(--font-mono);letter-spacing:.11em;text-transform:uppercase;color:var(--text-3);font-size:10.5px}.bucket-count{font-family:var(--font-mono);color:var(--text);font-variant-numeric:tabular-nums;font-size:21px;line-height:1}.bucket-count span{color:var(--text-3);font-size:11px}.bucket-track{grid-template-columns:repeat(10,minmax(0,1fr));gap:4px;margin:15px 0 16px;display:grid}.bucket-slot{border:1px dashed var(--border);border-radius:3px;height:36px;position:relative;overflow:hidden}.bucket-slot.is-full{background:var(--accent);border:1px solid var(--accent)}.bucket-slot.is-partial:after{content:"";width:var(--fill);background:var(--accent);opacity:.5;height:100%;position:absolute;bottom:0;left:0}.bucket-controls{flex-wrap:wrap;gap:8px;display:flex}.bucket-btn{font-family:var(--font-sans);border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;transition:background-color .15s ease,color .15s ease,border-color .15s ease,transform .15s var(--ease-out);border-radius:999px;padding:6px 13px;font-size:13px;font-weight:500}.bucket-btn:hover{background:var(--text);border-color:var(--text);color:var(--bg)}.bucket-btn:active{transform:scale(.96)}.bucket-btn--quiet{color:var(--text-3);border-style:dashed}.bucket-hint{font-family:var(--font-mono);color:var(--text-3);margin-top:12px;font-size:11px}.bucket-status{color:var(--text);margin-top:6px;font-size:13.5px}.bucket-log{border-top:1px dashed var(--border);font-family:var(--font-mono);color:var(--text-3);flex-direction:column;gap:3px;margin:12px 0 0;padding:10px 0 0;font-size:11px;list-style:none;display:flex}.bucket-log li{flex-wrap:wrap;gap:4px 12px;display:flex}.bucket-log .is-denied{color:var(--live)}.bucket-log .is-allowed{color:var(--text-2)}.article-diagram{border:1px solid var(--border-faint);background:var(--surface);border-radius:12px;margin:2rem 0;padding:20px 20px 14px}.article-diagram-scroll{overflow-x:auto}.article-diagram svg{width:100%;height:auto;display:block}.article-diagram figcaption{font-family:var(--font-mono);color:var(--text-3);text-wrap:pretty;margin-top:12px;font-size:11.5px;line-height:1.5}.dg-hand{font-family:var(--font-hand);fill:var(--text);font-size:24px}.dg-mono,.dg-code{font-family:var(--font-mono);fill:var(--text-2);font-size:12px}.dg-box{fill:none;stroke:var(--text);stroke-width:2px}.dg-box--soft{stroke:var(--text-3);stroke-dasharray:5 4}.dg-panel{fill:none;stroke:var(--border);stroke-width:1.5px;stroke-dasharray:7 5}.dg-arrow{fill:none;stroke:var(--text);stroke-width:2px;stroke-linecap:round}.dg-token{fill:var(--text)}.dg-token--empty{fill:none;stroke:var(--text-3);stroke-width:1.5px}.dg-warn{fill:var(--accent-live)}.dg-step{fill:var(--surface);stroke:var(--text);stroke-width:1.5px}.dg-step-num{font-family:var(--font-mono);fill:var(--text);font-size:10.5px}@media (max-width:860px){.writing-shell{padding-top:48px}.skill-group{grid-template-columns:1fr;gap:8px}.skill-group-label{padding-top:0}}@media (max-width:640px){.article-diagram{padding:14px 14px 10px}.article-diagram svg{width:640px;max-width:none}.writing-shell{padding-top:36px;padding-bottom:36px}.writing-bar{margin-bottom:40px}.post-line{flex-direction:column;gap:3px;padding:14px 0}.article-shell{padding-top:36px;padding-bottom:40px}.article-header{margin-top:26px}.article-title{margin-bottom:12px;font-size:clamp(1.9rem,8vw,2.5rem)}.prose{margin-top:28px;font-size:17px;line-height:1.68}.prose .code-block{margin-left:-8px;margin-right:-8px}.prose .code-block code{font-size:12.5px}.bucket-demo{margin-left:-8px;margin-right:-8px;padding:16px 16px 14px}.bucket-track{gap:3px}.bucket-slot{height:30px}.writing-teaser{padding:14px 0}}@media (max-width:560px){.site-header-inner{gap:12px;min-height:56px}.site-mark{gap:7px;font-size:15.5px}.site-nav{gap:13px}.site-nav a{font-size:12.5px}.site-nav a[href="/feed.xml"]{display:none}}.crawler-canvas{pointer-events:none;z-index:80;opacity:0;width:100%;height:100%;transition:opacity .4s;position:fixed;inset:0}.hover\:text-\[var\(--text\)\]:hover{color:var(--text)}
