@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2c55a0e60120577a-s.03ez25a9g3i0n.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:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/9c72aa0f40e4eef8-s.3i9rha7jpxn0q.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/ad66f9afd8947f86-s.2o7ko1d-5m1xu.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/5476f68d60460930-s.1ee5w62fj497l.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/2bbe8d2671613f1f-s.1way2z9fj6cig.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:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/1bffadaabf893a1e-s.0szrwpqb9mkwe.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter;font-style:normal;font-weight:100 900;font-display:swap;src:url(../media/83afe278b6a6bb3c-s.p.45535valc9rzk.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:Inter Fallback;src:local(Arial);ascent-override:90.44%;descent-override:22.52%;line-gap-override:0.0%;size-adjust:107.12%}.inter_c15e96cb-module__0bjUvq__className{font-family:Inter,Inter Fallback;font-style:normal}.inter_c15e96cb-module__0bjUvq__variable{--font-inter:"Inter", "Inter Fallback"}
@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(../media/fc0a7394b875fa43-s.3zvkfbs08rnj_.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Serif;font-style:italic;font-weight:400;font-display:swap;src:url(../media/7ebf22b5a21034f8-s.p.3strvg7o-g5v2.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:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../media/ccf27e5a7366fb23-s.1wwzpfhzaj2r0.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Serif;font-style:normal;font-weight:400;font-display:swap;src:url(../media/e41d5df559864f9e-s.p.2rlzm4mj5kw8e.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:Instrument Serif Fallback;src:local(Times New Roman);ascent-override:117.94%;descent-override:36.93%;line-gap-override:0.0%;size-adjust:83.94%}.instrument_serif_52824f12-module__z_izKq__className{font-family:Instrument Serif,Instrument Serif Fallback;font-weight:400}.instrument_serif_52824f12-module__z_izKq__variable{--font-serif:"Instrument Serif", "Instrument Serif Fallback"}
@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/13bf9871fe164e7f-s.3bz3aq452sydg.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:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/cc545e633e20c56d-s.2sb9jzhmrh7ny.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/71b036adf157cdcf-s.343obqi851wr5.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/89b21bb081cb7469-s.40kcwrf1wub16.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:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/3fe682a82f50d426-s.200l3jur7oygh.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:100 800;font-display:swap;src:url(../media/70bc3e132a0a741e-s.p.269kn9uafm0ti.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:JetBrains Mono Fallback;src:local(Arial);ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.0%;size-adjust:134.59%}.jetbrains_mono_6104e6b7-module__s6uLTa__className{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.jetbrains_mono_6104e6b7-module__s6uLTa__variable{--font-mono:"JetBrains Mono", "JetBrains Mono Fallback"}
:root,[data-theme=dark]{--bg:#0a0a0a;--surface:#141414;--surface-2:#1c1c1c;--line:#ffffff14;--line-strong:#ffffff26;--text:#fafafa;--muted:#bcbcbc;--dim:#888;--accent:#4ade80;--inverse-text:#080808;--inverse-hover:#fff;--float-bg:#141414d1;--float-bg-hover:#262626f2;--lightbox-bg:#040404e8;--avatar-bg:linear-gradient(135deg, #3a3a3a, #171717);--radius:14px}[data-theme=light]{--bg:#fbfbf9;--surface:#fff;--surface-2:#f1f1ee;--line:#1012141a;--line-strong:#10121438;--text:#090a0b;--muted:#40454a;--dim:#62686f;--accent:#15873c;--inverse-text:#fbfbf9;--inverse-hover:#000;--float-bg:#ffffffdb;--float-bg-hover:#fffffffa;--lightbox-bg:#f5f5f3ed;--avatar-bg:linear-gradient(135deg, #e6e6e2, #cfcfca);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*{box-sizing:border-box}html{background:var(--bg);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html,body{min-height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--font-inter), system-ui, sans-serif;-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.55}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}a{color:inherit;text-decoration:none}p,h1,h2,dl,dd{margin:0}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}::selection{color:var(--inverse-text);background:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.portfolio-shell{--left-width:423px;grid-template-columns:var(--left-width) minmax(0, 1fr);height:100dvh;display:grid;position:relative;overflow:hidden}.portfolio-shell.is-resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.scroll-column{scrollbar-width:none;overscroll-behavior:contain;height:100dvh;overflow:auto}.scroll-column::-webkit-scrollbar{display:none}.image-loading-surface{isolation:isolate}.image-loading-surface:after{background:linear-gradient(105deg, transparent 30%, color-mix(in srgb, var(--text) 8%, transparent) 48%, transparent 66%), var(--surface);content:"";pointer-events:none;z-index:0;background-size:230% 100%;transition:opacity .32s;animation:1.25s ease-in-out infinite image-shimmer;position:absolute;inset:0}.image-loading-surface:has(.smooth-image.is-loaded):after{opacity:0;animation-play-state:paused}.image-loading-surface .smooth-image{z-index:1}.smooth-image.is-loaded{animation:.5s cubic-bezier(.2,.7,.2,1) image-reveal-in}.smooth-image.is-loaded.is-reused{animation:none}@keyframes image-shimmer{0%{background-position:100% 0}to{background-position:-100% 0}}@keyframes image-reveal-in{0%{opacity:0}to{opacity:1}}.sidebar>:where(.identity,.intro,.availability,.actions,.skill-marquee,.sidebar-section,.contact-card,.footer),.work-header{animation:.52s cubic-bezier(.2,.7,.2,1) backwards site-entry-in}.sidebar>:first-child{animation-delay:30ms}.sidebar>:nth-child(2){animation-delay:70ms}.sidebar>:nth-child(3){animation-delay:.11s}.sidebar>:nth-child(4){animation-delay:.15s}.sidebar>:nth-child(n+5){animation-delay:.19s}.work-header{animation-delay:80ms}@keyframes site-entry-in{0%{opacity:0;transform:translateY(8px)}}.sidebar{border-right:1px solid var(--line);padding:32px 36px 112px}.identity{align-items:center;gap:12px;display:flex}.avatar{appearance:none;background:var(--avatar-bg);border:1px solid var(--line-strong);border-radius:var(--radius);cursor:zoom-in;flex:none;width:40px;height:40px;padding:0;transition:border-color .25s;display:block;position:relative;overflow:hidden}.avatar:hover,.avatar:focus-visible{border-color:var(--line-strong)}.avatar img{object-fit:cover;object-position:50% 22%;transition:transform .8s cubic-bezier(.2,.7,.2,1)}.avatar:hover img,.avatar:focus-visible img{transform:scale(1.035)}.name{letter-spacing:-.01em;font-size:15px;font-weight:500}.role{color:var(--muted);font-size:12px}.intro{text-wrap:pretty;max-width:35ch;margin-top:26px;font-size:16px;line-height:1.5}.intro strong{font-family:var(--font-mono), monospace;letter-spacing:-.03em;font-size:15px;font-weight:500}.intro span{color:var(--muted)}.availability{color:var(--muted);align-items:center;gap:8px;margin-top:20px;font-size:12px;display:flex}.availability span{background:var(--accent);box-shadow:0 0 10px color-mix(in srgb, var(--accent) 70%, transparent);border-radius:50%;width:6px;height:6px;animation:2s ease-in-out infinite pulse}@keyframes pulse{50%{opacity:.35}}.actions{flex-wrap:wrap;gap:8px;margin-top:16px;display:flex}.pill{border:1px solid var(--line-strong);cursor:pointer;border-radius:999px;justify-content:center;align-items:center;gap:10px;height:38px;padding:0 16px;font-size:13px;font-weight:500;transition:background .2s,border-color .2s,color .2s,transform .2s;display:inline-flex}.pill.primary{background:var(--text);border-color:var(--text);color:var(--inverse-text)}.pill.secondary{color:var(--text);background:0 0}.pill:not(:disabled):hover{transform:translateY(-2px)}.pill.primary:not(:disabled):hover{background:var(--inverse-hover)}.pill.secondary:not(:disabled):hover{background:var(--surface);border-color:var(--text)}.pill:disabled{background:color-mix(in srgb, var(--surface) 45%, transparent);border-color:var(--line);color:var(--dim);cursor:not-allowed;opacity:.55}.pill-icon{width:14px;height:14px;display:block}.pill-icon-brand{fill:currentColor}.download-spinner{border:1.7px solid;border-right-color:#0000;border-radius:50%;width:14px;height:14px;animation:.7s linear infinite download-spin;display:block}.download-check{color:#35b96f;animation:.25s ease-out both download-check-in}@keyframes download-spin{to{transform:rotate(360deg)}}@keyframes download-check-in{0%{opacity:0;transform:scale(.55)}to{opacity:1;transform:scale(1)}}.skill-marquee{cursor:grab;touch-action:pan-y;-webkit-user-select:none;user-select:none;margin-top:44px;overflow:hidden;-webkit-mask-image:linear-gradient(90deg,#0000,#000 8% 92%,#0000);mask-image:linear-gradient(90deg,#0000,#000 8% 92%,#0000)}.skill-marquee.is-dragging{cursor:grabbing}.skill-track{color:var(--muted);will-change:transform;align-items:center;gap:44px;width:max-content;display:flex}.skill-mark{opacity:.9;justify-content:center;align-items:center;min-width:24px;height:24px;transition:color .2s,opacity .2s;display:flex;position:relative}.skill-logo{fill:currentColor;width:22px;height:22px;display:block}.skill-logo-csharp path:last-child{fill:var(--bg)}.skill-mark:hover{color:var(--accent);opacity:1}.skill-tip{background:var(--bg);border:1px solid var(--line);color:var(--text);font-family:var(--font-mono), monospace;letter-spacing:.08em;pointer-events:none;text-transform:uppercase;white-space:nowrap;z-index:60;border-radius:6px;padding:4px 8px;font-size:9px;position:fixed;transform:translate(-50%)}.sidebar-section{border-top:1px solid var(--line);margin-top:36px;padding-top:36px}.section-title{font-family:var(--font-mono), monospace;letter-spacing:-.03em;margin-bottom:16px;font-size:14px;font-weight:500}.section-title span{color:var(--accent)}.muted-copy{color:var(--muted);max-width:35ch;font-size:13.5px;line-height:1.62}.stats{gap:10px;margin-top:20px;display:grid}.stat{grid-template-columns:52px 1fr;align-items:baseline;gap:10px;display:grid}.stat-value{font-family:var(--font-serif), serif;font-variant-numeric:tabular-nums;font-size:22px}.stat-value sup{color:var(--muted);vertical-align:super;margin-left:1px;font-size:11px}.stat-label{color:var(--muted);font-size:13px}.stat-label:before{background:var(--dim);content:"";vertical-align:middle;width:11px;height:1px;margin-right:9px;display:inline-block}.services{gap:16px;display:grid}.service{grid-template-columns:28px 1fr;align-items:center;gap:14px;display:grid}.service-mark{background:var(--surface);border:1px solid var(--line);color:var(--muted);border-radius:7px;justify-content:center;align-items:center;width:28px;height:28px;display:flex}.service-icon{width:15px;height:15px;display:block}.service strong,.service small{display:block}.service strong{font-size:13.5px;font-weight:400}.service small{color:var(--dim);font-size:12px}.timeline{margin:0;padding:0;list-style:none;display:grid;position:relative}.timeline-entry{position:relative}.timeline-entry:before{background:var(--line);content:"";width:1px;position:absolute;top:20px;bottom:-20px;left:3px}.timeline-entry:last-child:before{content:none}.timeline-row{color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:minmax(0,1fr) auto;align-items:baseline;column-gap:12px;width:100%;padding:9px 0 9px 22px;transition:padding .25s;display:grid}.timeline-node{background:var(--bg);border:1px solid var(--line-strong);border-radius:50%;width:7px;height:7px;transition:background .22s,border-color .22s,box-shadow .22s;position:absolute;top:16px;left:0}.timeline-role{font-size:13.5px;font-weight:500}.timeline-row time{color:var(--dim);font-family:var(--font-mono), monospace;white-space:nowrap;font-size:10px}.timeline-org{color:var(--muted);font-size:12px;transition:color .2s}.timeline-caret{color:var(--dim);justify-self:end;font-size:11px;transition:transform .3s cubic-bezier(.33,1,.68,1);display:none}.timeline-detail{grid-template-rows:0fr;padding-left:22px;transition:grid-template-rows .34s cubic-bezier(.33,1,.68,1);display:grid}.timeline-detail-clip{opacity:0;transition:opacity .26s;overflow:hidden}.timeline-detail-clip p{color:var(--muted);max-width:39ch;font-size:13px;line-height:1.55}.timeline-detail-clip p:last-child{margin-bottom:14px}.timeline-detail-clip .timeline-programme{color:var(--dim);font-family:var(--font-mono), monospace;letter-spacing:.06em;text-transform:uppercase;margin-bottom:5px;font-size:10px}.timeline-entry.is-open .timeline-detail{grid-template-rows:1fr}.timeline-entry.is-open .timeline-detail-clip{opacity:1}.timeline-entry.is-open .timeline-node{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent)}@media (hover:hover){.timeline-entry:hover .timeline-detail{grid-template-rows:1fr}.timeline-entry:hover .timeline-detail-clip{opacity:1}.timeline-entry:hover .timeline-node{background:var(--accent);border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--accent) 14%, transparent)}.timeline-entry:hover .timeline-row{padding-left:26px}.timeline-entry:hover .timeline-org{color:var(--text)}}@media (hover:none){.timeline-caret{display:block}.timeline-entry.is-open .timeline-caret{transform:rotate(180deg)}}.timeline-entry.is-current .timeline-node{background:var(--accent);border-color:var(--accent);box-shadow:0 0 9px color-mix(in srgb, var(--accent) 55%, transparent);animation:2s ease-in-out infinite pulse}.timeline-entry.is-current .timeline-row time{color:var(--accent)}.contact-card{background:radial-gradient(120% 80% at 0 0, color-mix(in srgb, var(--accent) 12%, transparent), transparent 55%), var(--surface);border:1px solid var(--line);border-radius:var(--radius);margin-top:36px;padding:18px}.contact-card h2{font-family:var(--font-mono), monospace;letter-spacing:-.03em;max-width:14ch;font-size:22px;font-weight:500;line-height:1.2}.contact-card em{color:var(--accent);font-style:normal;font-weight:500}@property --contact-spin{syntax:"<angle>";inherits:false;initial-value:0deg}.contact-card{position:relative}.contact-card:before{background:conic-gradient(from var(--contact-spin), transparent 0deg, transparent 250deg, color-mix(in srgb, var(--accent) 8%, transparent) 282deg, color-mix(in srgb, var(--accent) 34%, transparent) 306deg, color-mix(in srgb, var(--accent) 78%, transparent) 324deg, #eaffb0 332deg, color-mix(in srgb, var(--accent) 78%, transparent) 340deg, color-mix(in srgb, var(--accent) 30%, transparent) 350deg, transparent 360deg);border-radius:inherit;content:"";filter:blur(.6px) drop-shadow(0 0 6px color-mix(in srgb, var(--accent) 55%, transparent));opacity:0;pointer-events:none;-webkit-mask-composite:xor;padding:1.5px;position:absolute;inset:-1px;-webkit-mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);mask-image:linear-gradient(#000 0 0),linear-gradient(#000 0 0);-webkit-mask-clip:content-box,border-box;mask-clip:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude}.contact-card.is-highlighted:before{animation:1.15s cubic-bezier(.35,0,.25,1) contact-sweep}@keyframes contact-sweep{0%{--contact-spin:0deg;opacity:0}10%{opacity:1}78%{opacity:1}to{--contact-spin:360deg;opacity:0}}@media (prefers-reduced-motion:reduce){.contact-card.is-highlighted:before{animation:none}}.contact-links{margin-top:14px;display:grid}.contact-links a{border-top:1px solid var(--line);justify-content:space-between;align-items:center;padding:10px 0;font-size:13px;display:flex}.contact-links a:first-child{border-top:0}.contact-links span{color:var(--dim);font-family:var(--font-mono), monospace;letter-spacing:.08em;text-transform:uppercase;font-size:10px}.contact-links strong{font-weight:400;transition:color .2s,transform .2s}.contact-links a:hover strong{color:var(--accent);transform:translate(-5px)}.footer{color:var(--dim);font-family:var(--font-mono), monospace;justify-content:space-between;margin-top:40px;font-size:10px;display:flex}.footer-clock{font-variant-numeric:tabular-nums;letter-spacing:.06em;align-items:center;gap:6px;display:inline-flex}.clock-icon{width:12px;height:12px;display:block}.column-resizer{--grip-y:50%;--grip-lean:0px;--grip-squeeze:0;cursor:col-resize;height:100dvh;left:calc(var(--left-width) - 5px);touch-action:none;z-index:50;background:0 0;border:0;width:11px;padding:0;position:fixed;top:0}.column-resizer:after{background:var(--text);content:"";opacity:0;transition:opacity .15s;position:absolute;inset:0 5px}.column-resizer:hover:after,.portfolio-shell.is-resizing .column-resizer:after{opacity:.52}.work-column-frame{min-width:0;min-height:0;position:relative;overflow:hidden}.work-column{padding:32px 36px 112px;position:relative}.project-overlay{background:var(--bg);z-index:30;height:auto;padding:32px 36px 112px;position:absolute;inset:0;overflow:auto}.work-header{background:color-mix(in srgb, var(--bg) 94%, transparent);z-index:20;justify-content:space-between;align-items:center;margin-bottom:14px;padding:8px 0;display:flex;position:sticky;top:0}.work-header>p{color:var(--dim);font-family:var(--font-mono), monospace;font-size:11px}.filters{flex-wrap:wrap;gap:4px;display:flex}.filters button{border:1px solid var(--line);color:var(--muted);cursor:pointer;background:0 0;border-radius:999px;padding:7px 12px;font-size:12px;transition:background .22s,border-color .22s,color .22s}.filters button:hover{border-color:var(--line-strong);color:var(--text)}.filters button.active{background:var(--text);border-color:var(--text);color:var(--inverse-text)}.masonry{column-count:2;column-gap:14px}.project-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);break-inside:avoid;height:var(--project-height);margin-bottom:14px;transition:border-color .25s;display:block;position:relative}.masonry.swapping .project-card{opacity:0;transition:border-color .25s,opacity .14s,transform .14s;transform:translateY(4px)}.project-card.filter-enter{animation:filter-card-in .26s cubic-bezier(.2,.7,.2,1) var(--enter-delay,0s) both;animation-play-state:paused}.masonry.enter-ready .project-card.filter-enter{animation-play-state:running}@keyframes filter-card-in{0%{opacity:0;transform:translateY(6px)scale(.99)}}.project-card:hover{border-color:var(--line-strong)}.project-card-static-media{background:var(--surface);border-radius:inherit;display:block;position:absolute;inset:0;overflow:hidden}.project-flight-frame{background:var(--surface);border-radius:inherit;display:block;position:absolute;inset:0;overflow:hidden;container-type:size}.project-flight-media{height:max(100cqh, calc(100cqw / var(--media-aspect)));width:max(100cqw, calc(100cqh * var(--media-aspect)));margin:auto;display:block;position:absolute;inset:0}.project-flight-media.is-stretch{width:100%;height:100%;margin:0}.project-card img{filter:grayscale()contrast(1.02)brightness(.9);object-fit:cover;transition:filter .5s,transform .8s cubic-bezier(.2,.7,.2,1)}.project-card:hover img{filter:grayscale(0);transform:scale(1.035)}.project-card-media{object-fit:cover;width:100%;height:100%;position:absolute;inset:0}.project-card:hover .project-card-media{transform:scale(1.035)}.project-shade{border-radius:inherit;opacity:0;background:linear-gradient(#0000 48%,#000000d6);transition:opacity .3s;position:absolute;inset:0}.project-info{color:#fff;opacity:0;z-index:2;justify-content:space-between;align-items:flex-end;padding:14px 16px;transition:opacity .3s,transform .3s;display:flex;position:absolute;bottom:0;left:0;right:0;transform:translateY(8px)}.project-info span,.project-info strong,.project-info small{display:block}.project-info strong{font-size:14px;font-weight:500}.project-info small{color:#ffffffb3;font-family:var(--font-mono), monospace;font-size:10px}.project-card:hover .project-shade,.project-card:hover .project-info{opacity:1}.project-card:hover .project-info{transform:none}.project-card.is-flying{z-index:25}.project-card.is-flying .project-shade,.project-card.is-flying .project-info{opacity:0}.project-card.is-flying img{transform:none}.top-button{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:var(--float-bg);border:1px solid var(--line-strong);color:var(--text);cursor:pointer;z-index:30;border-radius:999px;align-items:center;gap:10px;padding:9px 14px;font-size:12px;transition:background .2s,transform .2s;display:flex;position:fixed;bottom:28px;right:28px}.top-button:hover{background:var(--float-bg-hover);transform:translateY(-2px)}.top-button kbd{border:1px solid var(--line);color:var(--dim);font-family:var(--font-mono), monospace;border-radius:4px;padding:2px 5px;font-size:9px}.project-detail{isolation:isolate}.detail-reveal{animation:.42s cubic-bezier(.2,.7,.2,1) both detail-reveal-in}.reveal-1{animation-delay:60ms}.reveal-2{animation-delay:.1s}.reveal-3{animation-delay:.14s}.reveal-4{animation-delay:.18s}.reveal-5{animation-delay:.22s}.reveal-6{animation-delay:.26s}@keyframes view-enter{0%{opacity:0}}@keyframes detail-reveal-in{0%{opacity:0;transform:translateY(10px)}}.back-button{background:var(--surface);border:1px solid var(--line);border-radius:999px;align-items:center;gap:8px;padding:8px 14px;font-size:12px;transition:background .2s,border-color .2s,transform .2s;display:inline-flex}.back-button:hover{background:var(--surface-2);border-color:var(--line-strong);transform:translateY(-1px)}.zoom-image{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);cursor:zoom-in;width:100%;padding:0;transition:background .25s,border-color .25s;display:block;position:relative;overflow:hidden}.zoom-image img{object-fit:cover}.zoom-image.is-flying{z-index:5;background:0 0;border-color:#0000;transition:none}.zoom-badge{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:var(--float-bg);border:1px solid var(--line-strong);opacity:0;z-index:2;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;transition:opacity .2s,transform .2s;display:flex;position:absolute;bottom:10px;right:10px;transform:translateY(5px)}.zoom-image:hover .zoom-badge{opacity:1;transform:none}.detail-hero{aspect-ratio:16/10;margin-top:18px;overflow:visible}.detail-embed{aspect-ratio:var(--embed-w) / var(--embed-h);border:1px solid var(--line);border-radius:var(--radius);contain:layout paint;max-width:calc(var(--embed-w) * 1px);background:#000;width:100%;margin-top:18px;position:relative;overflow:hidden}.detail-embed iframe{height:calc(var(--embed-h) * 1px);transform:scale(var(--embed-scale,1));transform-origin:0 0;width:calc(var(--embed-w) * 1px);border:0;display:block;position:absolute;top:0;left:0}.embed-close{-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:var(--float-bg);border:1px solid var(--line-strong);color:var(--text);z-index:2;border-radius:50%;justify-content:center;align-items:center;width:28px;height:28px;font-size:12px;transition:background .2s;display:flex;position:absolute;top:10px;right:10px}.embed-close:hover{background:var(--float-bg-hover)}.pill-play{font-size:9px;line-height:1}.detail-video{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);object-fit:contain;width:100%;display:block}.project-detail.is-greed-dungeon .detail-hero{aspect-ratio:960/400}.detail-heading{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:20px;margin-top:22px;display:flex}.eyebrow{color:var(--dim);font-family:var(--font-mono), monospace;letter-spacing:.1em;text-transform:uppercase;margin-bottom:6px;font-size:10px}.detail-heading h1{font-family:var(--font-mono), monospace;letter-spacing:-.05em;font-size:clamp(2rem,4vw,2.9rem);font-weight:500;line-height:1}.detail-tag{color:var(--dim);font-family:var(--font-mono), monospace;letter-spacing:.08em;text-transform:uppercase;font-size:10px}.detail-meta{background:var(--line);border:1px solid var(--line);border-radius:var(--radius);grid-template-columns:repeat(4,1fr);gap:1px;margin-top:24px;display:grid;overflow:hidden}.detail-meta div{background:var(--bg);padding:14px 16px}.detail-meta dt{color:var(--dim);font-family:var(--font-mono), monospace;letter-spacing:.1em;text-transform:uppercase;margin-bottom:4px;font-size:9px}.detail-meta dd{font-size:14px}.detail-copy{grid-template-columns:1fr 1fr;gap:36px;margin-top:28px;display:grid}.detail-copy p{color:var(--muted);max-width:46ch;font-size:14px;line-height:1.65}.detail-copy .lead{color:var(--text);font-family:var(--font-mono), monospace;letter-spacing:-.03em;font-size:15px;font-weight:500;line-height:1.55}.detail-links{flex-wrap:wrap;gap:8px;margin-top:18px;display:flex}.detail-gallery{grid-template-columns:2fr 1fr;gap:14px;margin-top:32px;display:grid}.detail-gallery.is-single{grid-template-columns:1fr}.detail-gallery>.zoom-image{aspect-ratio:4/3}.detail-gallery>div{grid-auto-rows:1fr;gap:14px;display:grid}.detail-gallery>div .zoom-image{min-height:0}.detail-video-section{margin-top:32px}.detail-video-section .eyebrow{margin-bottom:12px}.disclosure-rule{align-items:center;gap:18px;display:flex}.disclosure-rule:before,.disclosure-rule:after{background:var(--line);content:"";flex:1;height:1px}.disclosure-toggle{border:1px solid var(--line);color:var(--text);cursor:pointer;font-family:var(--font-mono), monospace;letter-spacing:-.03em;white-space:nowrap;background:0 0;border-radius:999px;flex-shrink:0;align-items:center;gap:8px;padding:9px 16px;font-size:13px;font-weight:500;transition:border-color .2s,transform .2s;display:inline-flex}.disclosure-toggle:hover{border-color:var(--line-strong);transform:translateY(-1px)}.disclosure-caret{color:var(--accent);font-size:12px;line-height:1;transition:color .2s,transform .3s cubic-bezier(.33,1,.68,1)}.disclosure-rule-end{margin-top:30px}.engineering{margin-top:32px}.engineering.is-open .disclosure-caret{color:var(--dim);transform:rotate(180deg)}.engineering-body{padding:30px 0 0}.engineering-intro{grid-template-columns:minmax(0,.75fr) minmax(0,1.25fr);gap:clamp(28px,4vw,64px);display:grid}.engineering-intro .eyebrow{margin-bottom:8px}.engineering-intro>div>p:last-child{color:var(--text);font-size:15px;line-height:1.65}.engineering-focus>p:last-child{color:var(--muted);font-size:14px}.engineering-label{margin-top:36px;margin-bottom:6px}.engineering-caption{color:var(--muted);max-width:66ch;margin-bottom:18px;font-size:13.5px;line-height:1.6}.engineering-flow{list-style:none;display:grid}.engineering-flow li{min-width:0;padding:0 0 22px 38px;position:relative}.engineering-flow li:last-child{padding-bottom:0}.engineering-flow li:not(:last-child):after{background:var(--line);content:"";width:1px;position:absolute;top:27px;bottom:0;left:12px}.engineering-step{background:var(--bg);border:1px solid var(--line-strong);color:var(--accent);font-family:var(--font-mono), monospace;z-index:1;border-radius:50%;justify-content:center;align-items:center;width:25px;height:25px;font-size:9px;display:flex;position:absolute;top:0;left:0}.engineering-flow code{color:var(--dim);font-family:var(--font-mono), monospace;letter-spacing:.02em;overflow-wrap:break-word;font-size:10px;display:block}.engineering-flow h3{font-family:var(--font-inter), system-ui, sans-serif;letter-spacing:-.015em;margin-top:5px;font-size:15px;font-weight:600;line-height:1.3}.engineering-flow p{color:var(--muted);max-width:68ch;margin-top:7px;font-size:13px;line-height:1.6}.engineering-decisions{grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:10px;display:grid}.engineering-decision{border:1px solid var(--line);border-radius:10px;flex-direction:column;padding:18px;display:flex}.engineering-decision-head{justify-content:space-between;align-items:center;gap:12px;display:flex}.engineering-decision-head span{color:var(--accent);font-family:var(--font-mono), monospace;letter-spacing:.09em;text-transform:uppercase;font-size:9px}.engineering-decision-head a{color:var(--dim);font-family:var(--font-mono), monospace;font-size:9px;text-decoration:none;transition:color .2s}.engineering-decision-head a:hover{color:var(--text)}.engineering-decision-head span.engineering-source-private{color:var(--dim);text-transform:none;letter-spacing:0}.engineering-decision h3{font-family:var(--font-inter), system-ui, sans-serif;letter-spacing:-.02em;margin-top:13px;font-size:18px;font-weight:600;line-height:1.28}.engineering-decision dl{border-top:1px solid var(--line);gap:13px;margin-top:16px;padding-top:15px;display:grid}.engineering-decision dl div{gap:4px;display:grid}.engineering-decision dt{color:var(--dim);font-family:var(--font-mono), monospace;letter-spacing:.08em;text-transform:uppercase;font-size:9px}.engineering-decision dd{color:var(--muted);font-size:12.5px;line-height:1.58}.engineering-next{border-bottom:1px solid var(--line);border-top:1px solid var(--line);margin-top:28px;padding:17px 0}.engineering-next h3{font-family:var(--font-inter), system-ui, sans-serif;letter-spacing:-.015em;font-size:16px;font-weight:600}.engineering-next>p:last-child{color:var(--muted);max-width:76ch;margin-top:7px;font-size:12.5px;line-height:1.6}.next-project{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);justify-content:space-between;align-items:center;margin-top:32px;padding:20px;display:flex}.next-project p{font-family:var(--font-mono), monospace;letter-spacing:-.03em;font-size:19px;font-weight:500}.next-project em{color:var(--accent);font-style:normal}.lightbox{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:var(--lightbox-bg);z-index:100;justify-content:center;align-items:center;padding:42px;display:flex;position:fixed;inset:0}.lightbox-close,.lightbox-step{background:var(--surface);border:1px solid var(--line-strong);color:var(--text);cursor:pointer;z-index:2;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;padding:0;transition:background .2s,border-color .2s,transform .3s;display:flex;position:absolute}.lightbox-close svg,.lightbox-step svg{width:18px;height:18px;display:block}.lightbox-close{top:20px;right:22px}.lightbox-close:hover{border-color:var(--accent);transform:rotate(90deg)}.lightbox-step{top:50%;transform:translateY(-50%)}.lightbox-step:hover{background:var(--surface-2);border-color:var(--accent)}.lightbox-prev{left:22px}.lightbox-next{right:22px}.lightbox-count{color:var(--muted);font-family:var(--font-mono), monospace;letter-spacing:.1em;font-size:10px;position:absolute;bottom:22px}.lightbox-media{justify-content:center;align-items:center;width:auto;max-width:calc(100vw - 160px);height:auto;max-height:calc(100dvh - 110px);display:flex;position:relative}.lightbox-image{border-radius:var(--radius);object-fit:contain;width:auto;max-width:calc(100vw - 160px);height:auto;max-height:calc(100dvh - 110px);display:block}.not-found{flex-direction:column;justify-content:center;max-width:620px;min-height:100dvh;margin:0 auto;padding:64px 36px 32px;display:flex}.requested-path{border:1px solid var(--line);color:var(--text);font-family:var(--font-mono), monospace;overflow-wrap:anywhere;border-radius:6px;max-width:100%;margin-top:8px;padding:6px 10px;font-size:12px;display:inline-block}.not-found-code{font-family:var(--font-serif), serif;font-variant-numeric:tabular-nums;letter-spacing:-.04em;margin:24px 0 22px;font-size:clamp(6rem,22vw,13rem);line-height:.85}.not-found h1{font-family:var(--font-mono), monospace;letter-spacing:-.05em;font-size:clamp(1.6rem,4vw,2.2rem);font-weight:500;line-height:1.15}.not-found .muted-copy{max-width:42ch;margin-top:14px}.not-found .actions{flex-wrap:wrap;margin-top:28px}.not-found .footer{border-top:1px solid var(--line);margin-top:56px;padding-top:16px}.portfolio-shell:has(.not-found){height:100dvh;display:block;overflow:auto}.portfolio-shell:has(.not-found)>:not(.work-column-frame){display:none}:is(.portfolio-shell:has(.not-found)>.work-column-frame,.portfolio-shell:has(.not-found) .work-column){border:0;height:auto;min-height:100dvh;padding:0;overflow:visible}@media (max-width:760px){.not-found{padding:48px 20px 24px}}@media (max-width:1000px){.portfolio-shell{--left-width:360px!important}.sidebar{padding-inline:28px}.work-column,.project-overlay{padding-inline:24px}.column-resizer{display:none}.project-card{--project-height:360px!important}}@media (max-width:900px){.engineering-intro{grid-template-columns:1fr;gap:20px}.engineering-decisions{grid-template-columns:1fr}}@media (max-width:760px){.portfolio-shell{height:auto;display:block;overflow:visible}.scroll-column{height:auto;overflow:visible}.sidebar{border-right:0;padding:24px 14px 64px}.intro{max-width:none;font-size:18px}.intro strong{font-size:17px}.muted-copy,.timeline-detail-clip p{max-width:none}.work-column{border-top:1px solid var(--line);min-height:100dvh;padding:20px 14px 90px}.project-overlay{height:100dvh;padding:20px 14px 90px;position:fixed;overflow:auto}.work-header{align-items:flex-start;gap:14px;padding-block:10px}.filters{max-width:310px}.masonry{column-count:1}.project-card{--project-height:72vw!important}.project-info,.project-shade{opacity:1}.project-info{transform:none}.detail-meta{grid-template-columns:1fr 1fr}.detail-copy{grid-template-columns:1fr;gap:18px}.detail-gallery{grid-template-columns:1fr}.detail-gallery>.zoom-image{aspect-ratio:4/3}.detail-gallery>div{grid-template-rows:none;grid-template-columns:1fr 1fr}.detail-gallery>div .zoom-image{aspect-ratio:1}.next-project{flex-direction:column;align-items:flex-start;gap:18px}.disclosure-rule{gap:12px}.engineering-body{padding:24px 0 0}.top-button{bottom:16px;right:14px}.lightbox{padding:16px}.lightbox-step{width:34px;height:34px}.lightbox-prev{left:10px}.lightbox-next{right:10px}.lightbox-media,.lightbox-image{max-width:calc(100vw - 96px);max-height:calc(100dvh - 120px)}}.project-card[data-project-slug=zumi-the-slime],.project-card[data-project-slug=old-abyss]{aspect-ratio:16/9;height:auto}.project-card[data-project-slug=physic-games],.project-card[data-project-slug=tele-platfrom],.project-card[data-project-slug=smuggle-rush]{aspect-ratio:1294/743;height:auto}.project-card[data-project-slug=ddos-detection]{aspect-ratio:2912/2176;height:auto}.project-card[data-project-slug=greed-dungeon]{aspect-ratio:960/400;height:auto}.project-card[data-project-slug=bolt-bolt],.project-card[data-project-slug=scaleform]{aspect-ratio:189/150;height:auto}.project-card[data-project-slug=ar-solar-system]{aspect-ratio:1250/826;height:auto}.project-card[data-project-slug=bolt-bolt] .project-flight-media,.project-card[data-project-slug=scaleform] .project-flight-media,.project-detail.is-bolt-bolt .project-flight-media,.project-detail.is-scaleform .project-flight-media{margin-block:0 auto}.project-card[data-project-slug=chess-in-java]{aspect-ratio:1;height:auto}.project-detail.is-bolt-bolt .detail-hero,.project-detail.is-scaleform .detail-hero,.project-detail.is-chess-in-java .detail-hero{aspect-ratio:16/10}.project-detail.is-old-abyss .detail-hero{aspect-ratio:1294/743;max-width:1294px;margin-inline:auto}.project-detail.is-old-abyss .detail-gallery{max-width:1000px;margin-inline:auto}.project-detail.is-old-abyss .detail-gallery>.zoom-image{aspect-ratio:987/560}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.sidebar>*,.work-header{animation-delay:0s!important}}[data-theme=light] .project-card img{filter:grayscale()contrast(1.02)brightness(1.02)}[data-theme=light] .project-card:hover img{filter:grayscale(0)}[data-theme=light] .project-detail .detail-video,[data-theme=light] .detail-embed{background:#0a0a0a}[data-theme=light] .project-card,[data-theme=light] .contact-card,[data-theme=light] .next-project{box-shadow:0 1px 2px #1012140d}.settings-dock{z-index:45;flex-direction:column;align-items:flex-end;gap:10px;display:flex;position:fixed;bottom:28px;right:28px}.settings-fab{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:var(--float-bg);border:1px solid var(--line-strong);color:var(--muted);cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:40px;height:40px;padding:0;transition:background .2s,color .2s,transform .3s;display:flex}.settings-fab svg{width:17px;height:17px;display:block}.settings-fab:hover{background:var(--float-bg-hover);color:var(--text);transform:rotate(45deg)}.settings-fab.is-open{color:var(--text);transform:rotate(45deg)}.settings-panel{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:var(--float-bg);border:1px solid var(--line-strong);border-radius:var(--radius);transform-origin:100% 100%;grid-template-columns:auto auto;align-items:center;gap:10px 14px;width:max-content;padding:14px;animation:.18s cubic-bezier(.2,.7,.2,1) both settings-panel-in;display:grid}@keyframes settings-panel-in{0%{opacity:0;transform:translateY(6px)scale(.97)}}.settings-row{display:contents}.settings-label{color:var(--dim);font-family:var(--font-mono), monospace;letter-spacing:.1em;text-transform:uppercase;justify-self:end;font-size:9px}.settings-seg{background:var(--surface-2);border:1px solid var(--line);border-radius:999px;gap:2px;padding:2px;display:flex}.settings-seg button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:999px;justify-content:center;align-items:center;min-width:38px;height:24px;padding:0 10px;font-size:11px;line-height:1;transition:background .2s,color .2s;display:flex}.settings-seg-icon{width:13px;height:13px;display:block}.settings-seg button:hover{color:var(--text)}.settings-seg button.is-active{background:var(--text);color:var(--inverse-text)}@media (max-width:760px){.settings-dock{align-items:flex-start;bottom:16px;left:14px;right:auto}.settings-panel{transform-origin:0 100%}}
