/*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before{box-sizing:border-box;border:0 solid;margin:0;padding:0}::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-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}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){-webkit-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.block{display:block}.contents{display:contents}.grid{display:grid}.hidden{display:none}.inline{display:inline}.table{display:table}.grow{flex-grow:1}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded{border-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}@font-face{font-family:Swei B2 Sugar CJK SC;src:url(/fonts/Swei-B2-Sugar-CJK-SC-Regular.woff2)format("woff2");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:Swei B2 Sugar CJK SC;src:url(/fonts/Swei-B2-Sugar-CJK-SC-Medium.woff2)format("woff2");font-style:normal;font-weight:500;font-display:swap}@font-face{font-family:HarmonyOS Sans SC;src:url(/fonts/HarmonyOS-Sans-SC-Regular.woff2)format("woff2");font-style:normal;font-weight:400;font-display:swap}:root{--background:#fffdfd;--foreground:#2a2a2a;--surface:#fff;--work-card-surface:#fffdfd;--page-texture:url(/assets/content-paper-tile.webp);--page-texture-tint:#fffdfd29;--focus:#196f78;--primary-50:#b7cdd0;--primary-100:#9fbec1;--primary-500:#87aeb1;--primary-600:#5fabb0;--primary-900:#2e6b7c;--neutral-900:#141414;--neutral-800:#2a2a2a;--neutral-700:#555;--neutral-600:#7f7e7e;--asset-filter:none;--nav-art-filter:brightness(0) saturate(100%) invert(33%);--mode-icon-filter:none;--mode-icon-hover-filter:brightness(2.02381);--nav-text:#2a2a2a;--nav-hover:var(--neutral-700);--font-display:"Swei B2 Sugar CJK SC","Microsoft YaHei",sans-serif;--font-ui:"HarmonyOS Sans SC","Microsoft YaHei",sans-serif}:root[data-theme=dark]{--background:#1c1c1d;--foreground:#f4eeee;--surface:#29292b;--work-card-surface:#29292b;--page-texture:url(/assets/content-paper-tile-dark.webp);--page-texture-tint:#1c1c1d6b;--primary-50:#f3b18a;--primary-100:#e8874f;--primary-500:#e26923;--primary-600:#d9580e;--primary-900:#7b3f1c;--neutral-900:#fffdfd;--neutral-800:#e0dede;--neutral-700:#cac9c9;--neutral-600:#bfbebe;--asset-filter:invert(1) brightness(1.55);--nav-art-filter:brightness(0) saturate(100%) invert(83%);--mode-icon-filter:invert(1) brightness(1.145);--mode-icon-hover-filter:brightness(2.02381);--nav-text:#f4eeee;--nav-hover:var(--neutral-700);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background-color:var(--background);background-image:linear-gradient(var(--page-texture-tint),var(--page-texture-tint)),var(--page-texture);color:var(--foreground);font-family:var(--font-display);background-position:top;background-repeat:repeat,repeat;background-size:auto,768px 768px;margin:0;font-weight:400;transition:background-color .35s,color .35s}button,a{color:inherit;font:inherit}a{text-decoration:none}button{cursor:pointer}button:focus-visible{outline:3px solid var(--focus);outline-offset:4px}a:focus-visible{outline:3px solid var(--focus);outline-offset:4px}[role=img]:focus-visible{outline:3px solid var(--focus);outline-offset:4px}.page-shell{z-index:0;width:min(100%,1280px);min-height:calc(2153px + max(0px,45dvh - 420px));margin:auto;padding-inline:150px;position:relative}.site-header{z-index:100;pointer-events:none;will-change:transform;justify-content:space-between;align-items:flex-end;height:148px;display:flex;position:absolute;top:48px;left:150px;right:138px}.nav-scene,.mode-switcher{pointer-events:auto}.mobile-nav-shell{display:none}.nav-scene{align-items:flex-end;gap:12px;height:148px;display:flex}.home-zone{flex:0 0 40px;justify-content:center;align-items:flex-end;width:40px;height:148px;display:flex}.home-link{flex:0 0 40px;width:40px;height:40px;position:relative;overflow:visible}.home-default,.home-hover{pointer-events:none;display:block;position:absolute;top:50%;left:50%}.home-default{opacity:1;width:24px;height:9.23px;transition:opacity .12s;transform:translate(calc(-50% - .33px),calc(.33px - 50%))}.home-default img{object-fit:fill;width:100%;height:100%;filter:var(--asset-filter);display:block}.home-hover{opacity:0;background:0 0;width:52px;height:45px;transition:opacity .12s,transform .38s cubic-bezier(.22,1,.36,1);overflow:hidden;transform:translate(-50%,-50%)scale(.84)}.home-hover img{background:0 0;width:97px;height:auto;display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.state-home .home-default{opacity:0}.state-home .home-hover{opacity:1;transform:translate(-50%,-50%)scale(1)}:root[data-theme=dark] .home-hover img{filter:invert()}.nav-zone{flex-direction:column;justify-content:flex-end;align-items:center;width:116px;height:148px;padding:4px 8px;display:flex;position:relative;overflow:visible}.nav-reveal{z-index:2;opacity:0;visibility:hidden;pointer-events:none;place-items:center;width:102px;height:64px;transition:opacity .18s,transform .42s cubic-bezier(.22,1,.36,1),visibility 0s .42s;display:grid;position:absolute;top:42px;left:7px;transform:translateY(12px)scale(.86)}.nav-zone:hover .nav-reveal,.state-projects .nav-projects .nav-reveal,.state-notes .nav-notes .nav-reveal,.state-connect .nav-connect .nav-reveal,.state-resume .nav-resume .nav-reveal,.state-about .nav-about .nav-reveal{opacity:1;visibility:visible;transition-delay:0s;transform:none}.nav-connect:hover .nav-reveal,.state-connect .nav-connect .nav-reveal{pointer-events:auto}.nav-illustration{object-fit:contain;width:60px;height:60px;filter:var(--nav-art-filter);padding:2px;display:block;overflow:visible}.nav-projects .nav-reveal{width:120px;left:-2px}.nav-projects .nav-illustration{width:72px;height:64px;padding:0}.nav-connect .nav-illustration{display:none}.nav-about .nav-reveal{top:44px}.nav-about .nav-illustration{width:88px;height:56px;padding:0}.nav-notes .nav-reveal{top:42px}.nav-notes-illustration-frame{width:62px;height:64px;display:block;position:relative;overflow:visible}.nav-notes-illustration-frame .nav-illustration{object-fit:contain;width:77.5623px;max-width:none;height:69.3808px;padding:0;position:absolute;top:-2px;left:-12.48px}.nav-label{width:84px;height:30px;color:var(--nav-text);font-family:var(--font-ui);letter-spacing:-.045em;white-space:nowrap;place-items:center;font-size:16px;font-weight:400;line-height:1.03;transition:color .18s;display:grid;position:relative}.nav-zone:hover .nav-label,.state-projects .nav-projects .nav-label,.state-notes .nav-notes .nav-label,.state-connect .nav-connect .nav-label,.state-resume .nav-resume .nav-label,.state-about .nav-about .nav-label{color:var(--nav-hover)}.nav-label:focus-visible{color:var(--nav-hover)}.nav-zone.is-active .nav-label{color:var(--neutral-900)}.active-underline{background:var(--primary-500);pointer-events:none;width:87.8145px;height:6.87717px;display:block;position:absolute;top:calc(100% + 1px);left:50%;transform:translate(-50%);-webkit-mask-position:50%;mask-position:50%;-webkit-mask-size:87.8145px 6.87717px;mask-size:87.8145px 6.87717px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}.nav-resume .active-underline{-webkit-mask-image:url(/assets/resume-active-underline.svg);mask-image:url(/assets/resume-active-underline.svg)}.nav-about .active-underline{-webkit-mask-image:url(/assets/about-active-underline.svg);mask-image:url(/assets/about-active-underline.svg)}.nav-projects .active-underline,.nav-notes .active-underline{-webkit-mask-image:url(/assets/projects-active-underline.svg);mask-image:url(/assets/projects-active-underline.svg)}.active-underline img{opacity:0;width:87.8145px;max-width:none;height:6.87717px;display:block}.drawn-ring{opacity:0;pointer-events:none;position:absolute;inset:0;overflow:visible}.drawn-ring-svg{width:104px;height:40px;display:block;position:absolute;top:50%;left:50%;overflow:visible;transform:translate(-50%,-50%)}.drawn-ring-svg>svg{width:104px;max-width:none;height:40px;filter:var(--nav-art-filter);display:block;overflow:visible}.nav-about .drawn-ring-svg,.nav-about .drawn-ring-svg>svg{width:104px;height:43px;overflow:visible}.state-projects .nav-projects .drawn-ring,.state-notes .nav-notes .drawn-ring,.state-connect .nav-connect .drawn-ring,.state-resume .nav-resume .drawn-ring,.state-about .nav-about .drawn-ring{opacity:1}.social-actions{justify-items:center;gap:3px;width:max-content;min-width:102px;display:grid}.social-action{width:max-content;min-width:102px;height:30px;font-family:var(--font-ui);letter-spacing:-.045em;pointer-events:auto;background:0 0;border:0;justify-content:center;align-items:center;padding:0;font-size:16px;font-weight:400;line-height:1.03;display:flex;position:relative;overflow:visible}.social-icon-frame{flex:0 0 30px;place-items:center;width:30px;height:30px;display:grid}.social-actions .social-icon{object-fit:contain;filter:var(--asset-filter);flex:none;display:block}.social-actions .social-icon-wechat{width:26.5px;height:22.32px}.social-actions .social-icon-email{width:22px;height:16px}.social-label{width:max-content;max-width:0;color:var(--nav-hover);opacity:0;visibility:hidden;white-space:nowrap;pointer-events:none;flex:none;margin-left:0;transition:max-width .34s cubic-bezier(.22,1,.36,1),margin-left .34s cubic-bezier(.22,1,.36,1),opacity .16s,transform .3s cubic-bezier(.22,1,.36,1),visibility 0s .34s;overflow:hidden;transform:translate(-4px)}:is(.social-action:hover .social-label,.social-action:focus-visible .social-label){opacity:1;visibility:visible;max-width:220px;margin-left:6px;transition-delay:0s;transform:none}.mode-switcher{box-shadow:none;background:0 0;border-radius:100px;gap:12px;padding:12px 12px 4px;display:flex}.mode-switcher button{background:0 0;border:0;place-items:center;width:30px;height:30px;padding:0;display:grid}.mode-switcher img{object-fit:contain;filter:var(--mode-icon-filter);transition:filter .18s;display:block}:is(.mode-switcher button:hover img,.mode-switcher button:focus-visible img){filter:var(--mode-icon-hover-filter)}.switch-icon-language-sc,.switch-icon-language-en,.switch-icon-theme-moon,.switch-icon-theme-sun{display:block;position:relative;overflow:visible}.switch-icon-language-sc{width:17.371px;height:17.184px}.switch-icon-language-sc img{width:20.175px;max-width:none;height:20.192px;position:absolute;top:-1.481px;left:-1.296px}.switch-icon-language-en{width:20.771px;height:14.598px}.switch-icon-language-en img{width:30px;max-width:none;height:30px;position:absolute;top:-9px;left:-4px}.switch-icon-theme-moon{width:19px;height:19px}.switch-icon-theme-moon img{width:30px;max-width:none;height:30px;position:absolute;top:-5.5px;left:-5.5px}.switch-icon-theme-sun{width:21px;height:21px}.switch-icon-theme-sun img{width:23.995px;max-width:none;height:23.995px;position:absolute;top:-1.508px;left:-1.487px}.hero{width:819px;position:absolute;top:264px;left:150px}.hero-title-row{align-items:center;gap:24px;display:flex}.avatar{--avatar-size:60px;--avatar-art-size:69.143px;--avatar-center-offset:.43px;--avatar-hover-offset:2.89px;flex:0 0 var(--avatar-size);width:var(--avatar-size);height:var(--avatar-size);background:#fff;border-radius:100px;display:block;position:relative;overflow:hidden}.avatar-art{left:calc(50% - var(--avatar-center-offset));top:calc(50% - var(--avatar-center-offset));width:var(--avatar-art-size);height:var(--avatar-art-size);position:absolute;transform:translate(-50%,-50%)}.avatar-base{object-fit:cover;width:100%;height:100%;display:block;position:absolute;inset:0}.avatar-hover-layer{top:2.33%;bottom:-4.28%;left:calc(50% + var(--avatar-hover-offset));aspect-ratio:1;opacity:0;position:absolute;overflow:hidden;transform:translate(-50%)}.avatar-hover-layer img{width:122.7%;max-width:none;height:107.92%;display:block;position:absolute;top:-2.48%;left:-11.35%}:is(.avatar:hover .avatar-hover-layer,.avatar:focus-visible .avatar-hover-layer){opacity:1}.hero h1{font-family:var(--font-display);letter-spacing:-.045em;white-space:nowrap;margin:0;padding:10px;font-size:50px;font-weight:500;line-height:1.2}.hero p{width:819px;min-height:108px;font-family:var(--font-display);letter-spacing:-.045em;margin:8px 0 0;font-size:24px;font-weight:400;line-height:1.52}.page-shell:before{content:none}.portfolio-stage{width:calc(100vw - 32px);height:calc(824px + max(420px,45dvh));margin-left:calc(16px - 50vw);position:absolute;top:575px;left:50%}.canvas{touch-action:pan-y;transform-origin:top;will-change:transform;width:100%;height:824px;position:sticky;top:48px;overflow:visible}.card-layout{transform-origin:50%;will-change:left,top,width,height,transform;position:absolute}.card-drag{--drag-x:0px;--drag-y:0px;width:100%;height:100%;transform:translate3d(var(--drag-x),var(--drag-y),0);-webkit-user-select:none;user-select:none;transition:transform .34s cubic-bezier(.22,1,.36,1),filter .2s}.card-drag.is-draggable{cursor:grab;touch-action:none}.card-drag[data-dragging=true]{cursor:grabbing;filter:drop-shadow(0 15px 16px #0003);transition:none}.card-media{background:0 0;border-radius:0;width:100%;height:100%;display:block;position:relative;overflow:hidden}.project-card,.snapshot-card{background:var(--neutral-600)}.project-card:after,.snapshot-card:after{content:"";z-index:2;background:var(--page-texture) center / 384px 384px repeat;opacity:.28;pointer-events:none;position:absolute;inset:0}.card-media img{z-index:1;object-fit:cover;filter:saturate(0);pointer-events:none;border-radius:0;width:100%;height:100%;transition:filter .28s;display:block;position:relative}:is(.card-project .card-media:hover img,.card-project .card-media:focus-visible img,.card-snapshot .card-media:hover img){filter:saturate()}.project-card{--tilt-x:0deg;--tilt-y:0deg;transform:perspective(900px) rotateX(var(--tilt-x)) rotateY(var(--tilt-y));transform-style:preserve-3d;transform-origin:50%;cursor:pointer;will-change:transform}.project-card[aria-disabled=true]{cursor:default}.decorative-card{background:0 0;border-radius:0;overflow:visible}.decorative-card:after{content:none}.decorative-card img{object-fit:contain;border-radius:0}.stage-default .card-decorative img,.stage-transitioning .card-decorative img{filter:saturate(0)}.stage-assembled .card-decorative img{filter:saturate()}.stage-transitioning .card-drag{pointer-events:none}footer{width:980px;height:176px;font-family:var(--font-ui);letter-spacing:-.045em;justify-content:space-between;align-items:flex-start;padding-bottom:128px;font-size:16px;font-weight:400;line-height:1.03;display:flex;position:absolute;top:calc(1947px + max(0px,45dvh - 420px));left:150px}footer p{margin:16px 0 0}.back-top{background:0 0;border:0;width:48px;height:48px;padding:0}.back-top img{width:34px;height:48px;filter:var(--asset-filter);transform:rotate(180deg)}.modal-backdrop{z-index:300;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#0a0a0a8f;place-items:center;display:grid;position:fixed;inset:0}.modal-dismiss{background:0 0;border:0;width:100%;height:100%;padding:0;position:absolute;inset:0}.qr-modal{z-index:1;background:var(--surface);text-align:center;border-radius:24px;width:360px;padding:32px;position:relative}.modal-close{background:0 0;border:0;font-size:30px;position:absolute;top:10px;right:14px}.qr-image{object-fit:contain;width:min(100%,240px);height:auto;max-height:420px;margin:auto;display:block}.qr-missing{aspect-ratio:1;border:2px dashed var(--neutral-700);width:190px;color:var(--neutral-700);font-family:var(--font-ui);letter-spacing:.08em;border-radius:16px;place-items:center;margin:auto;font-size:30px;display:grid}.qr-modal h2{margin:20px 0 6px}.qr-modal p{margin:0}.placeholder-page{background:var(--background);min-height:100vh;color:var(--foreground);padding:12vw}.subpage-shell{z-index:0;width:min(100%,1280px);min-height:100vh;margin:auto;padding:48px 150px 0;position:relative}.subpage-header{height:148px;font-family:var(--font-ui);letter-spacing:-.045em;align-items:flex-end;gap:32px;font-size:16px;line-height:1.03;display:flex}.subpage-home{place-items:center;width:40px;height:40px;display:grid}.subpage-home img{width:24px;filter:var(--asset-filter)}.subpage-header nav{align-items:center;gap:28px;padding-bottom:12px;display:flex}.subpage-header nav a{white-space:nowrap;color:var(--nav-text);position:relative}.subpage-header nav a:after{content:"";opacity:0;background:currentColor;border-radius:2px;height:2px;transition:opacity .18s,transform .28s;position:absolute;bottom:-7px;left:0;right:0;transform:scaleX(.35)}.subpage-header nav a:hover:after,.subpage-header nav a[aria-current=page]:after{opacity:1;transform:scaleX(1)}.subpage-header nav a:focus-visible:after{opacity:1;transform:scaleX(1)}.subpage-switchers{gap:12px;margin-left:auto;padding-bottom:4px;display:flex}.subpage-switchers button{width:30px;height:30px;font-family:var(--font-ui);background:0 0;border:0;place-items:center;padding:0;font-size:13px;display:grid}.subpage-switchers img{object-fit:contain;width:30px;height:30px;filter:var(--mode-icon-filter)}.content-page{padding-top:254px}.content-page-title{border-bottom:1px solid var(--foreground);padding-bottom:74px}@supports (color:color-mix(in lab, red, red)){.content-page-title{border-bottom:1px solid color-mix(in srgb,var(--foreground) 22%,transparent)}}.content-page-title p,.section-index{color:var(--neutral-600);font-family:var(--font-ui);letter-spacing:-.03em;margin:0 0 16px;font-size:15px}.content-page-title h1,.about-section h1{letter-spacing:-.055em;margin:0;font-size:clamp(52px,7vw,88px);font-weight:500;line-height:1.05}.resume-page{color:var(--foreground);flex-direction:column;gap:24px;padding-top:216px;display:flex}.resume-page .content-page-title{border:0;align-items:center;gap:24px;min-height:84px;padding:12px 0;display:flex}.resume-page .content-page-title h1{color:var(--neutral-900);font-family:var(--font-display);letter-spacing:-.045em;margin:0;font-size:50px;font-weight:500;line-height:1.2}.resume-download{width:170px;height:60px;color:var(--neutral-800);font-family:var(--font-ui);letter-spacing:-.045em;text-align:center;background:0 0;border:0;border-radius:0;flex:0 0 170px;justify-content:center;align-items:flex-end;gap:12px;margin-left:auto;padding:10px;font-size:16px;font-weight:400;line-height:1.03;text-decoration:none;display:flex;overflow:hidden}.resume-download-icon{background:currentColor;flex:0 0 14px;width:14px;height:14px;display:none;-webkit-mask:none 50%/contain no-repeat;mask:none 50%/contain no-repeat}:is(.resume-download:hover,.resume-download:focus-visible){color:var(--neutral-700)}:is(.resume-download:hover .resume-download-icon,.resume-download:focus-visible .resume-download-icon){display:block;-webkit-mask-image:url(/assets/download-hover.svg);mask-image:url(/assets/download-hover.svg)}:is(.resume-download:hover .resume-download-label,.resume-download:focus-visible .resume-download-label,.resume-download:active .resume-download-label){text-underline-position:from-font;text-decoration:underline}.resume-download:active{color:var(--neutral-900)}.resume-download:active .resume-download-icon,.resume-download.is-downloading .resume-download-icon{display:block;-webkit-mask-image:url(/assets/download-pressed.svg);mask-image:url(/assets/download-pressed.svg)}.resume-section{border:0;flex-direction:column;gap:2px;padding:0;display:flex}.resume-section>h2{min-height:44px;color:var(--foreground);font-family:var(--font-display);letter-spacing:-.045em;align-items:center;gap:12px;margin:0;padding:4px;font-size:24px;font-weight:400;line-height:1.52;display:flex}.resume-section-marker{flex:0 0 20px;width:20px;height:20px;position:relative;overflow:visible}.resume-section-marker:before{content:"";background:var(--primary-500);width:23.999px;height:23.5968px;position:absolute;top:-2.45px;left:-2.125px;-webkit-mask:url(/assets/resume-section-marker.svg) 50%/100% 100% no-repeat;mask:url(/assets/resume-section-marker.svg) 50%/100% 100% no-repeat}.resume-section-marker img{opacity:0;width:23.999px;max-width:none;height:23.5968px;display:block;position:absolute;top:-2.45px;left:-2.125px}.resume-section>p,.resume-section>.resume-entry,.resume-section>.skill-groups{margin-left:10px;margin-right:10px}.resume-entry{padding:10px 0}.resume-entry:last-child{padding-bottom:0}.resume-entry-heading{justify-content:space-between;align-items:flex-start;gap:30px;display:flex}.resume-entry h3,.skill-groups h3{font-family:var(--font-display);letter-spacing:-.045em;margin:0;font-size:24px;font-weight:400;line-height:1.52}.resume-entry time{color:var(--foreground);font-family:var(--font-display);letter-spacing:-.045em;text-align:right;flex:none;font-size:24px;line-height:1.52}.resume-entry-body p,.resume-profile p,.resume-gaming p,.skill-groups p{font-family:var(--font-ui);letter-spacing:0;margin:0;font-size:16px;line-height:1.25}.resume-entry-body p+p,.resume-profile p+p,.resume-gaming p+p{margin-top:10px}.resume-labels{flex-wrap:wrap;gap:0;width:max-content;max-width:100%;margin:0;padding:0;list-style:none;display:flex}.resume-labels li{background:var(--primary-500);color:#2a2a2a;min-height:20px;font-family:var(--font-ui);letter-spacing:0;border:0;border-right:1px solid #e0dede;border-radius:0;align-items:center;padding:0 10px;font-size:16px;font-weight:400;line-height:1.25;display:flex}.resume-labels li:last-child{border-right:0}.resume-skills{gap:10px}.skill-groups{flex-direction:column;gap:8px;padding:0;display:flex}.skill-groups>div{flex-direction:column;justify-content:center;align-items:flex-start;display:flex}.skill-groups h3{font-family:var(--font-ui);letter-spacing:0;padding:0;font-size:16px;line-height:1.25}.skill-groups p{margin:0;padding:0}.caption-row{color:var(--foreground);font-family:var(--font-ui);letter-spacing:0;justify-content:space-between;align-items:flex-start;gap:10px;font-size:16px;font-weight:400;line-height:1.25;display:flex}.caption-row p{margin:0}.caption-row time{color:var(--foreground);font-family:var(--font-ui);letter-spacing:0;text-align:right;flex:none;padding:0;font-size:16px;line-height:1.25}.education-qualification{color:var(--neutral-900)}.education-qualification span,.caption-row p>span:not(.entry-divider){color:var(--foreground)}.entry-divider{margin-inline:5px}.compact-entry{flex-direction:column;gap:4px;display:flex}.compact-entry-description{color:var(--foreground);font-family:var(--font-ui);letter-spacing:0;margin:0;font-size:16px;line-height:1.25}.about-page{flex-direction:column;gap:48px;padding-top:216px;display:flex}.about-section{flex-direction:column;gap:24px;padding:0;display:flex}.about-section+.about-section{border:0;padding:0}.about-section h1{color:var(--foreground);font-family:var(--font-display);letter-spacing:-.045em;margin:0;font-size:50px;font-weight:500;line-height:1.2}.about-copy{width:100%;margin:0}.about-copy p{color:var(--foreground);font-family:var(--font-ui);letter-spacing:0;margin:0;font-size:16px;line-height:1.25}.about-copy p+p{margin-top:20px}.about-site-illustration{object-fit:fill;width:219.119px;height:184.865px;filter:var(--asset-filter);margin-left:auto;display:block}html[lang=en] .resume-page :is(.resume-entry-body p,.resume-profile p,.resume-gaming p,.skill-groups h3,.skill-groups p,.resume-labels li,.caption-row,.caption-row time,.compact-entry-description),html[lang=en] .about-copy p{letter-spacing:-.045em}.subpage-footer{justify-content:space-between;align-items:flex-start;width:100%;height:176px;margin-top:128px;padding-bottom:128px;display:flex;position:static}.subpage-footer button{background:0 0;border:0;width:48px;height:48px;padding:0}.subpage-footer button img{width:34px;height:48px;filter:var(--asset-filter);transform:rotate(180deg)}.works-page{padding-top:216px}.works-page>h1{width:100%;min-height:60px;color:var(--neutral-800);font-family:var(--font-display);letter-spacing:-.045em;margin:0;font-size:50px;font-weight:500;line-height:1.2}.works-layout{grid-template-columns:minmax(0,680px) 215.358px;align-items:start;gap:89.642px;margin-top:20px;display:grid}.works-list{flex-direction:column;gap:24px;min-width:0;display:flex}.work-card{--work-tilt-x:0deg;--work-tilt-y:0deg;isolation:isolate;background:var(--work-card-surface);width:100%;min-height:446px;color:var(--neutral-800);cursor:pointer;padding:16px 16px 0;transition:filter .16s;position:relative;overflow:hidden;transform:none}.work-card.is-tilt-enabled{transform:perspective(1100px) rotateX(var(--work-tilt-x)) rotateY(var(--work-tilt-y));transform-style:preserve-3d;will-change:transform}.work-card:before{content:"";z-index:0;background:var(--page-texture) center / 384px 384px repeat;opacity:.64;pointer-events:none;position:absolute;inset:0}.work-card>*{z-index:1;position:relative}.work-card-link{color:inherit;display:block}.work-card-link>*{z-index:1;position:relative}.work-card:after{content:"";z-index:3;background:var(--primary-50);opacity:0;mix-blend-mode:multiply;pointer-events:none;transition:opacity .16s,box-shadow .1s;position:absolute;inset:0}:is(.work-card:hover,.work-card:focus-visible){filter:drop-shadow(0 4px 2px #7f7e7e99);outline:0}.work-card:hover:after{opacity:.5}.work-card:focus-visible:after{opacity:.5}.work-card:active{filter:none}.work-card:active:after{opacity:1;box-shadow:inset 0 4px 4px #7f7e7e73}.work-card-media{background:#2a2a2a;width:100%;height:306px;position:relative;overflow:hidden}.work-card-cover{z-index:2;object-fit:cover;opacity:0;width:100%;height:100%;transition:opacity .24s;display:block;position:relative}.work-card-media.is-loaded .work-card-cover{opacity:1}.work-card-placeholder{z-index:1;background:#2a2a2a;place-items:center;display:grid;position:absolute;inset:0}.work-card-placeholder img{opacity:.65;filter:invert();width:64px;height:64px;animation:1.4s ease-in-out infinite work-placeholder-pulse}.work-card-media.is-loaded .work-card-placeholder{display:none}.work-card-media.is-error .work-card-placeholder img{opacity:.85;animation:none}@keyframes work-placeholder-pulse{0%,to{opacity:.35;transform:scale(.96)}50%{opacity:.8;transform:scale(1)}}.work-card-copy{flex-direction:column;gap:8px;height:auto;min-height:122px;padding:8px 0 16px;display:flex;overflow:visible}.work-card-copy h2{font-family:var(--font-display);letter-spacing:-.045em;margin:0;padding:8px 0;font-size:24px;font-weight:400;line-height:1.52}.work-card-meta{min-height:20px;font-family:var(--font-ui);letter-spacing:0;align-items:flex-start;gap:8px;font-size:16px;line-height:1.25;display:flex}.work-card-meta time{border-right:1px solid var(--neutral-700);flex:none;padding-right:8px}.work-card-meta ul{flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none;display:flex}.work-card-meta li,.tag-options button{background:var(--primary-500);min-height:20px;color:var(--neutral-800);font-family:var(--font-ui);letter-spacing:0;border:0;padding:0 10px;font-size:16px;font-weight:400;line-height:1.25}.work-card-copy>p{width:100%;min-width:0;font-family:var(--font-ui);letter-spacing:0;text-overflow:ellipsis;white-space:nowrap;flex:none;margin:0;font-size:16px;line-height:26px;overflow:hidden}.works-filters{color:var(--neutral-800);flex-direction:column;gap:24px;display:flex;position:sticky;top:48px}.filter-group{flex-direction:column;align-items:flex-start;display:flex}.filter-group h2{min-height:44px;font-family:var(--font-display);letter-spacing:-.045em;align-items:center;margin:0;padding:4px;font-size:24px;font-weight:400;line-height:1.52;display:flex}.year-options{flex-direction:column;width:100%;display:flex}.year-options button{border:0;border-bottom:1px solid var(--neutral-600);width:100%;min-height:41px;color:var(--neutral-800);font-family:var(--font-ui);text-align:left;background:0 0;padding:10px;font-size:16px;line-height:1.25;transition:background-color .15s,color .15s,box-shadow .15s}:is(.year-options button:hover,.year-options button:focus-visible){background:var(--primary-600);color:var(--neutral-700)}.year-options button.is-active{background:var(--primary-900);color:var(--background);box-shadow:inset 0 0 0 1px var(--primary-900)}.tag-options{flex-wrap:wrap;gap:8px;width:100%;display:flex}.tag-options button{transition:background-color .15s,color .15s,box-shadow .15s}:is(.tag-options button:hover,.tag-options button:focus-visible){background:var(--primary-600);color:var(--neutral-700)}.tag-options button.is-active{background:var(--primary-900);color:var(--background);box-shadow:inset 0 0 0 1px var(--primary-900)}.clear-filters,.works-empty button{color:var(--neutral-700);font-family:var(--font-ui);background:0 0;border:0;border-bottom:1px solid;align-self:flex-start;padding:6px 0;font-size:16px}.works-empty{border:1px solid var(--neutral-600);min-height:220px;color:var(--neutral-800);font-family:var(--font-ui);flex-direction:column;align-items:flex-start;gap:20px;padding:40px;display:flex}.works-empty p{margin:0}html[lang=en] .work-card-copy :is(p,.work-card-meta),html[lang=en] .works-filters button{letter-spacing:-.045em}@media (max-width:800px){.subpage-shell{padding:24px 32px 0}.subpage-header{align-items:center;gap:16px;height:auto;min-height:92px}.subpage-header nav{gap:14px;padding:0;overflow-x:auto}.subpage-header nav a{font-size:13px}.subpage-switchers{gap:4px;padding:0}.content-page,.resume-page{padding-top:72px}.resume-page .content-page-title{flex-wrap:wrap}.resume-entry-heading{flex-direction:column;gap:4px}.resume-entry time{text-align:left;padding:0}.caption-row{flex-direction:column;gap:4px}.caption-row time{text-align:left}.about-copy,.about-links{margin-left:0}.works-page{padding-top:72px}.works-layout{grid-template-columns:1fr;gap:32px}.works-filters{order:-1;position:static}.year-options{flex-flow:wrap;gap:8px}.year-options button{border:1px solid var(--neutral-600);width:auto;min-height:36px}.work-card{transform-style:flat;will-change:auto;filter:none;content-visibility:auto;contain-intrinsic-size:auto 446px;min-height:0;transform:none}.work-card:before,.work-card:after{content:none}:is(.work-card:hover,.work-card:focus-visible,.work-card:active){filter:none}.work-card-media{aspect-ratio:648/306;height:auto}}@media (max-width:560px){.subpage-shell{padding-inline:20px}.subpage-header{flex-wrap:wrap;padding:12px 0}.subpage-header nav{order:3;width:100%}.content-page-title h1,.about-section h1{font-size:46px}.skill-groups>div{grid-template-columns:1fr;gap:6px}.about-copy p{font-size:18px}.works-page>h1{font-size:46px}.work-card{padding:10px 10px 0}.work-card-copy{gap:10px;height:auto;min-height:0;padding:12px 4px 16px;overflow:visible}.work-card-copy h2{padding:0;font-size:22px}.work-card-meta{flex-direction:column;gap:6px}.work-card-meta time{border-right:0;padding-right:0}.work-card-copy>p{white-space:nowrap;text-overflow:ellipsis;flex:none;margin-top:2px;line-height:1.5;overflow:hidden}}.notes-page{padding-top:216px}.works-page,.notes-page,.resume-page,.about-page{isolation:isolate;position:relative}.works-page:before,.notes-page:before,.resume-page:before,.about-page:before{content:none}.notes-page>h1{min-height:60px;color:var(--neutral-800);font-family:var(--font-display);letter-spacing:-.045em;margin:0;font-size:50px;font-weight:500;line-height:1.2}.notes-layout{grid-template-columns:minmax(0,680px) 215.358px;align-items:start;gap:89.642px;margin-top:20px;display:grid}.notes-list{flex-direction:column;gap:8px;min-height:1285px;display:flex}.note-card{width:100%;min-height:120px;color:var(--neutral-800);flex-direction:column;align-items:flex-start;gap:12px;padding:8px 12px;transition:background .16s,color .16s;display:flex}.note-card-title{border-bottom:1px solid var(--neutral-600);align-items:center;width:100%;height:48px;display:flex}.note-card-title h2{color:inherit;font-family:var(--font-display);letter-spacing:-.045em;text-overflow:ellipsis;white-space:nowrap;margin:0;font-size:24px;font-weight:400;line-height:1.52;overflow:hidden}.note-card-meta{font-family:var(--font-ui);flex-direction:column;align-items:flex-start;gap:4px;font-size:16px;line-height:1.25;display:flex}.note-card-meta ul{flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none;display:flex}.note-card-meta li{background:var(--primary-500);min-height:20px;color:var(--neutral-800);padding:0 10px}.note-card:hover,.note-card:focus-within{background:var(--primary-50);color:var(--neutral-700)}.note-card:active{background:var(--primary-100);color:var(--neutral-900)}.notes-empty{border-bottom:1px solid var(--neutral-600);min-height:120px;color:var(--neutral-700);font-family:var(--font-ui);flex-direction:column;align-items:flex-start;gap:16px;padding:28px 0;font-size:16px;display:flex}.notes-empty p{margin:0}.notes-empty button{color:inherit;font:inherit;background:0 0;border:0;border-bottom:1px solid;padding:6px 0}html[lang=en] .note-card-meta{letter-spacing:-.045em}.detail-page{color:var(--foreground);padding-top:216px}.detail-back{color:var(--neutral-700);font-family:var(--font-ui);border-bottom:1px solid;margin-bottom:28px;font-size:16px;display:inline-block}.detail-hero{border-bottom:1px solid var(--neutral-600);flex-direction:column;gap:16px;padding-bottom:32px;display:flex}.detail-hero h1{max-width:820px;color:var(--neutral-900);font-family:var(--font-display);letter-spacing:-.045em;margin:0;font-size:50px;font-weight:500;line-height:1.2}.detail-hero>p{max-width:780px;font-family:var(--font-ui);margin:0;font-size:16px;line-height:1.5}.detail-meta{color:var(--neutral-700);font-family:var(--font-ui);align-items:flex-start;gap:8px;font-size:16px;line-height:1.25;display:flex}.detail-meta time{border-right:1px solid var(--neutral-600);padding-right:8px}.detail-meta ul{flex-wrap:wrap;gap:4px;margin:0;padding:0;list-style:none;display:flex}.detail-meta li{background:var(--primary-500);min-height:20px;color:var(--neutral-800);padding:0 10px}.markdown-content{width:min(100%,780px);font-family:var(--font-ui);margin-top:48px;font-size:18px;line-height:1.7}.detail-project .markdown-content{width:100%}.detail-project .markdown-content>:not(.content-media){max-width:780px}.markdown-content>:first-child{margin-top:0}.markdown-content h1,.markdown-content h2,.markdown-content h3,.markdown-content h4{font-family:var(--font-display);letter-spacing:-.035em;font-weight:500;line-height:1.25}.markdown-content h1{margin:72px 0 24px;font-size:42px}.markdown-content h2{margin:64px 0 20px;font-size:34px}.markdown-content h3{margin:48px 0 16px;font-size:26px}.markdown-content h4{margin:36px 0 12px;font-size:21px}.markdown-content p,.markdown-content ul,.markdown-content ol,.markdown-content blockquote{margin:0 0 24px}.markdown-content ul,.markdown-content ol{padding-left:1.4em}.markdown-content a{color:var(--primary-900);border-bottom:1px solid}.markdown-content blockquote{border-left:4px solid var(--primary-500);background:var(--surface);padding:16px 20px}@supports (color:color-mix(in lab, red, red)){.markdown-content blockquote{background:color-mix(in srgb,var(--surface) 70%,transparent)}}.markdown-content blockquote{color:var(--neutral-700);white-space:pre-line}.markdown-content :not(pre)>code{background:var(--neutral-600);border-radius:4px;padding:.08em .32em}@supports (color:color-mix(in lab, red, red)){.markdown-content :not(pre)>code{background:color-mix(in srgb,var(--neutral-600) 14%,transparent)}}.markdown-content :not(pre)>code{white-space:normal;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:.9em}.markdown-content pre{background:var(--neutral-900);color:var(--background);margin:0 0 28px;padding:20px;font-size:14px;line-height:1.6;overflow:auto}.content-media{width:100%;margin:40px 0}.content-media.media-wide{width:min(980px,100vw - 48px)}.detail-project .content-media.media-wide{width:100%}.content-media img{background:var(--surface);width:100%;height:auto;display:block}.content-image-preview{cursor:zoom-in;background:0 0;border:0;width:100%;padding:0;display:block;overflow:hidden}.detail-project .content-image-preview{border:1px solid var(--neutral-600)}@supports (color:color-mix(in lab, red, red)){.detail-project .content-image-preview{border:1px solid color-mix(in srgb,var(--neutral-600) 55%,transparent)}}.content-image-preview:focus-visible{outline:2px solid var(--primary-500);outline-offset:3px}.content-media video{object-fit:contain;background:var(--surface);width:100%;height:auto;max-height:78vh;display:block}.content-media figcaption{color:var(--neutral-700);font-family:var(--font-ui);text-align:center;margin-top:10px;font-size:14px;line-height:1.4}.image-lightbox{z-index:3000;background:var(--background);grid-template-rows:auto 1fr;padding:24px;display:grid;position:fixed;inset:0}@supports (color:color-mix(in lab, red, red)){.image-lightbox{background:color-mix(in srgb,var(--background) 92%,transparent)}}.image-lightbox{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.image-lightbox-dismiss{background:0 0;border:0;width:100%;height:100%;position:absolute;inset:0}.image-toolbar{z-index:1;justify-self:end;align-items:center;gap:8px;margin-bottom:16px;display:flex;position:relative}.image-toolbar button,.image-toolbar output{border:1px solid var(--neutral-600);background:var(--surface);min-width:44px;height:40px;color:var(--neutral-900);font-family:var(--font-ui);place-items:center;padding:0 12px;font-size:15px;display:grid}:is(.image-toolbar button:hover,.image-toolbar button:focus-visible){background:var(--primary-100)}.image-lightbox-viewport{z-index:1;border:1px solid var(--neutral-600);background:var(--surface);-webkit-user-select:none;user-select:none;place-items:center;min-height:0;display:grid;position:relative;overflow:hidden}.image-lightbox-viewport.is-draggable{cursor:grab;touch-action:none}.image-lightbox-viewport.is-dragging{cursor:grabbing}.image-lightbox-canvas{transform-origin:50%;width:max-content;max-width:90vw;transition:transform .18s}.image-lightbox-viewport.is-dragging .image-lightbox-canvas{transition:none}.image-lightbox-canvas img{background:0 0;width:auto;max-width:90vw;height:auto;max-height:calc(100vh - 130px);display:block}.content-columns{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:32px;width:100%;margin:40px 0;display:grid}.content-columns.columns-1-2{grid-template-columns:minmax(0,1fr) minmax(0,2fr)}.content-columns.columns-2-1{grid-template-columns:minmax(0,2fr) minmax(0,1fr)}.content-column{min-width:0}.content-column>.markdown-content{width:100%;margin:0}.content-column .content-media.media-wide{width:100%}.locale-notice{border-left:4px solid var(--primary-500);background:var(--primary-50);width:min(100%,780px);margin:0 0 32px;padding:14px 18px}@supports (color:color-mix(in lab, red, red)){.locale-notice{background:color-mix(in srgb,var(--primary-50) 78%,transparent)}}.locale-notice{color:var(--neutral-800);font-family:var(--font-ui);font-size:16px;line-height:1.5}.content-table-scroll{border:1px solid var(--neutral-600);background:var(--surface);width:100%;margin:40px 0;overflow-x:auto}@supports (color:color-mix(in lab, red, red)){.content-table-scroll{background:color-mix(in srgb,var(--surface) 74%,transparent)}}.content-table-scroll{scrollbar-color:var(--neutral-600) transparent}.content-table-scroll:focus-visible{outline:2px solid var(--primary-500);outline-offset:3px}.content-table-scroll table{border-collapse:collapse;width:100%;min-width:600px;font-size:16px;line-height:1.5}.content-table-scroll th,.content-table-scroll td{border-right:1px solid var(--neutral-600);border-bottom:1px solid var(--neutral-600);vertical-align:top;padding:14px 16px}.content-table-scroll th:last-child,.content-table-scroll td:last-child{border-right:0}.content-table-scroll tbody tr:last-child td{border-bottom:0}.content-table-scroll th{background:var(--primary-100);color:var(--neutral-900);font-weight:600}.content-table-scroll tbody tr:nth-child(2n){background:var(--primary-50)}@supports (color:color-mix(in lab, red, red)){.content-table-scroll tbody tr:nth-child(2n){background:color-mix(in srgb,var(--primary-50) 42%,transparent)}}.content-mermaid{width:100%;margin:40px 0}.mermaid-preview{border:1px solid var(--neutral-600);background:var(--surface);width:100%;min-height:220px;padding:24px;display:block;overflow:auto}@supports (color:color-mix(in lab, red, red)){.mermaid-preview{background:color-mix(in srgb,var(--surface) 78%,transparent)}}.mermaid-preview{color:var(--neutral-900);cursor:zoom-in}.mermaid-preview:disabled{cursor:default}.mermaid-preview:focus-visible{outline:2px solid var(--primary-500);outline-offset:3px}.mermaid-svg{min-width:560px}.mermaid-svg svg{width:100%;height:auto;max-height:70vh;margin:auto;display:block}.mermaid-loading{color:var(--neutral-700);margin:0}.mermaid-error{text-align:left}.mermaid-error p{color:var(--neutral-700);margin:0 0 12px}.mermaid-error pre{margin:0}.mermaid-lightbox{z-index:3000;background:var(--background);grid-template-rows:auto 1fr;padding:24px;display:grid;position:fixed;inset:0}@supports (color:color-mix(in lab, red, red)){.mermaid-lightbox{background:color-mix(in srgb,var(--background) 92%,transparent)}}.mermaid-lightbox{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.mermaid-lightbox-dismiss{background:0 0;border:0;width:100%;height:100%;position:absolute;inset:0}.mermaid-toolbar{z-index:1;justify-self:end;align-items:center;gap:8px;margin-bottom:16px;display:flex;position:relative}.mermaid-toolbar button,.mermaid-toolbar output{border:1px solid var(--neutral-600);background:var(--surface);min-width:44px;height:40px;color:var(--neutral-900);font-family:var(--font-ui);place-items:center;padding:0 12px;font-size:15px;display:grid}:is(.mermaid-toolbar button:hover,.mermaid-toolbar button:focus-visible){background:var(--primary-100)}.mermaid-lightbox-viewport{z-index:1;border:1px solid var(--neutral-600);background:var(--surface);place-items:center;min-height:0;display:grid;position:relative;overflow:auto}.mermaid-lightbox-canvas{transform-origin:50%;width:min(1200px,90vw);padding:40px;transition:transform .18s}.mermaid-lightbox-canvas svg{width:100%;height:auto;display:block}.content-drawing{width:100%;margin:40px 0}.drawing-preview{border:1px solid var(--neutral-600);background:var(--surface);width:100%;padding:0;display:block;overflow:hidden}@supports (color:color-mix(in lab, red, red)){.drawing-preview{background:color-mix(in srgb,var(--surface) 78%,transparent)}}.drawing-preview{cursor:zoom-in}.drawing-preview:focus-visible{outline:2px solid var(--primary-500);outline-offset:3px}.drawing-picture{width:100%;display:block}.drawing-picture img{width:100%;height:auto;display:block}.drawing-dark{display:none!important}html[data-theme=dark] .drawing-picture:has(.drawing-dark) .drawing-light{display:none}html[data-theme=dark] .drawing-picture .drawing-dark{display:block!important}.content-drawing figcaption{color:var(--neutral-700);font-size:var(--caption-size);letter-spacing:var(--caption-tracking);margin-top:12px}.drawing-lightbox{z-index:3000;background:var(--background);grid-template-rows:auto 1fr;padding:24px;display:grid;position:fixed;inset:0}@supports (color:color-mix(in lab, red, red)){.drawing-lightbox{background:color-mix(in srgb,var(--background) 92%,transparent)}}.drawing-lightbox{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.drawing-lightbox-dismiss{background:0 0;border:0;width:100%;height:100%;position:absolute;inset:0}.drawing-toolbar{z-index:1;justify-self:end;align-items:center;gap:8px;margin-bottom:16px;display:flex;position:relative}.drawing-toolbar button,.drawing-toolbar output{border:1px solid var(--neutral-600);background:var(--surface);min-width:44px;height:40px;color:var(--neutral-900);font-family:var(--font-ui);place-items:center;padding:0 12px;font-size:15px;display:grid}:is(.drawing-toolbar button:hover,.drawing-toolbar button:focus-visible){background:var(--primary-100)}.drawing-lightbox-viewport{z-index:1;border:1px solid var(--neutral-600);background:var(--surface);place-items:center;min-height:0;display:grid;position:relative;overflow:auto}.drawing-lightbox-canvas{transform-origin:50%;width:min(1200px,90vw);padding:40px;transition:transform .18s}.content-video-embed{width:100%;margin:40px 0}.video-embed-frame{aspect-ratio:16/9;border:1px solid var(--neutral-600);background:var(--neutral-900);width:100%;position:relative;overflow:hidden}.video-embed-frame iframe{border:0;width:100%;height:100%;position:absolute;inset:0}.content-video-embed figcaption{color:var(--neutral-700);font-size:var(--caption-size);letter-spacing:var(--caption-tracking);margin-top:12px}@media (max-width:800px){.notes-page{padding-top:130px}.notes-layout{grid-template-columns:1fr;gap:36px}.notes-filters{grid-row:1;position:static}.notes-list{min-height:0}.content-columns,.content-columns.columns-1-2,.content-columns.columns-2-1{grid-template-columns:1fr}}@media (max-width:560px){.notes-page>h1{font-size:46px}.note-card{padding-inline:8px}.note-card-title h2{font-size:22px}.detail-page{padding-top:130px}.detail-hero h1{font-size:40px}.detail-meta{flex-direction:column}.detail-meta time{border-right:0}.markdown-content{margin-top:32px;font-size:16px}.markdown-content h2{font-size:30px}}@media (max-width:600px){html,body{max-width:100%;overflow-x:clip}.page-shell{min-height:auto;padding:0 24px}.subpage-shell{z-index:auto;max-width:100%;overflow-x:clip}.site-header{z-index:1000;background:var(--background);-webkit-backdrop-filter:none;backdrop-filter:none;pointer-events:auto;align-items:center;height:72px;padding:12px 24px;position:fixed;top:0;left:0;right:0;overflow:visible}.desktop-nav-scene{display:none}.mobile-nav-shell{pointer-events:auto;display:block}.mobile-menu-toggle{z-index:130;touch-action:manipulation;background:0 0;border:0;flex-direction:column;justify-content:center;gap:6px;width:44px;height:44px;padding:10px 8px;display:flex;position:relative}.mobile-menu-toggle span{background:var(--neutral-900);transform-origin:50%;border-radius:2px;width:28px;height:2px;transition:transform .25s,opacity .18s;display:block}.mobile-menu-toggle[aria-expanded=true] span:first-child{transform:translateY(8px)rotate(45deg)}.mobile-menu-toggle[aria-expanded=true] span:nth-child(2){opacity:0}.mobile-menu-toggle[aria-expanded=true] span:nth-child(3){transform:translateY(-8px)rotate(-45deg)}.mobile-nav-layer{z-index:120;pointer-events:none;visibility:hidden;transition:visibility 0s .32s;position:fixed;inset:0}.mobile-nav-layer.is-open{pointer-events:auto;visibility:visible;transition-delay:0s}.mobile-nav-backdrop{opacity:0;background:#14141475;border:0;width:100%;height:100%;padding:0;transition:opacity .25s;position:absolute;inset:0}.mobile-nav-layer.is-open .mobile-nav-backdrop{opacity:1}.mobile-nav-drawer{background-color:var(--surface);background-image:linear-gradient(var(--page-texture-tint),var(--page-texture-tint)),var(--page-texture);background-size:auto,768px 768px;width:min(86vw,360px);height:100dvh;padding:92px 28px 32px;transition:transform .32s cubic-bezier(.22,1,.36,1);position:absolute;inset:0 auto 0 0;overflow-y:auto;transform:translate(-104%);box-shadow:18px 0 40px #14141433}.mobile-nav-layer.is-open .mobile-nav-drawer{transform:translate(0)}.mobile-nav-drawer nav{flex-direction:column;align-items:flex-start;gap:4px;display:flex}.mobile-nav-drawer nav>a{width:fit-content;font-family:var(--font-ui);color:var(--neutral-800);padding:14px 8px;font-size:26px;line-height:1.2;position:relative}.mobile-nav-drawer nav>a.is-active{color:var(--neutral-900);background:var(--primary-500);font-weight:500}@supports (color:color-mix(in lab, red, red)){.mobile-nav-drawer nav>a.is-active{background:color-mix(in srgb,var(--primary-500) 22%,transparent)}}.mobile-nav-drawer nav>a.is-active:after{content:none}.mobile-contact-group{gap:8px;width:100%;margin-top:24px;padding-top:16px;display:grid}.mobile-contact-group p{color:var(--neutral-700);font-family:var(--font-ui);margin:0 0 4px;padding-inline:8px;font-size:16px}.mobile-contact-group a,.mobile-contact-group button{min-height:48px;color:var(--neutral-800);font-family:var(--font-ui);text-align:left;background:0 0;border:0;align-items:center;gap:12px;padding:8px;font-size:16px;display:flex}.mobile-contact-group img{object-fit:contain;width:28px;height:28px;filter:var(--asset-filter)}.mode-switcher{gap:4px;padding:5px}.mode-switcher button{width:26px;height:26px}.mode-switcher .mode-language{position:relative;left:-12px}.hero,.portfolio-stage,footer{width:auto;position:relative;top:auto;left:auto}.hero{padding-top:130px}.hero h1{white-space:normal;font-size:clamp(30px,7vw,46px)}.hero p{width:auto;font-size:20px}.portfolio-stage{height:auto;margin:60px 0 0}.canvas{grid-template-columns:minmax(0,1fr);gap:24px;width:100%;height:auto;display:grid;position:relative;top:auto;overflow:visible}.card-layout{width:auto!important;height:auto!important;position:relative!important;top:auto!important;left:auto!important;transform:none!important}.card-layout.card-snapshot,.card-layout.card-decorative{display:none}.card-layout.card-project{justify-self:center;width:min(88%,560px)!important}.card-layout.card-project .card-drag,.card-layout.card-project .card-media{height:auto}.card-layout.card-project .card-media img{object-fit:contain;filter:saturate(0);height:auto}.card-drag{pointer-events:auto;cursor:default;touch-action:pan-y;transform:none}.project-card,.project-card:hover{transform:none}.project-card:focus-visible{transform:none}:is(.card-project .card-media:hover img,.card-project .card-media:focus-visible img){filter:saturate(0)}.detail-page,.detail-hero,.markdown-content{min-width:0;max-width:100%}.markdown-content :is(h1,h2,h3,h4,p,li,blockquote,a,figcaption){overflow-wrap:anywhere;word-break:break-word}.content-table-scroll,.markdown-content pre,.mermaid-preview{overscroll-behavior-inline:contain;max-width:100%;overflow-x:auto}.markdown-content>:is(.content-media,.content-drawing,.content-mermaid,.content-table-scroll,.content-columns){content-visibility:auto;contain-intrinsic-size:auto 420px}:is(.avatar:hover .avatar-hover-layer,.avatar:focus-visible .avatar-hover-layer){opacity:0}footer .back-top,.subpage-footer button{display:none}footer{height:150px;margin-top:128px;padding-bottom:60px}}:root[data-theme=dark] :is(.project-card,.snapshot-card):after{opacity:.14}:root[data-theme=dark] .work-card:before{opacity:.2}:root[data-theme=dark] .work-card:after{mix-blend-mode:normal}:root[data-theme=dark] .work-card:hover:after{opacity:.22}:root[data-theme=dark] .work-card:focus-visible:after{opacity:.22}:root[data-theme=dark] .work-card:active:after{opacity:.38}:root[data-theme=dark] .note-card:hover,:root[data-theme=dark] .note-card:focus-within,:root[data-theme=dark] .note-card:hover .note-card-meta li,:root[data-theme=dark] .note-card:focus-within .note-card-meta li{color:#141414}@media (max-width:560px){.site-header{padding-inline:16px}.hero-title-row{align-items:flex-start;gap:12px}.avatar{--avatar-size:48px;--avatar-art-size:55.314px;--avatar-center-offset:.344px;--avatar-hover-offset:2.312px}.hero h1{padding:4px 0}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}.card-layout,.project-card{transform:none!important}}html[data-restoring-preferences] body{visibility:hidden}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
