@import"https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;600&family=JetBrains+Mono:wght@400;500;600&family=Space+Grotesk:wght@400;500;600;700&display=swap";:root{--color-paper: oklch(97.8% .008 250);--color-paper-2: oklch(94.5% .014 250);--color-paper-3: oklch(90% .022 250);--color-ink: oklch(20% .03 258);--color-ink-2: oklch(32% .028 257);--color-muted: oklch(47% .025 257);--color-rule: oklch(78% .04 252);--color-rule-strong: oklch(66% .065 254);--color-rule-dark: oklch(38% .035 257);--color-accent: oklch(56% .21 255);--color-accent-strong: oklch(47% .2 258);--color-accent-ink: oklch(98% .006 250);--color-focus: oklch(58% .2 256);--color-success: oklch(42% .12 150);--color-error: oklch(50% .18 28);--color-graphite: oklch(21% .022 258);--color-graphite-2: oklch(25% .026 258);--color-inverse: oklch(95% .01 250);--color-inverse-muted: oklch(76% .025 250);--color-overlay: oklch(18% .026 258 / .76);--color-flow-bg: oklch(97.2% .012 250);--color-flow-line: oklch(54% .14 255);--color-flow-accent: oklch(58% .2 256);--font-display: "Space Grotesk", "Arial Narrow", sans-serif;--font-body: "IBM Plex Sans", Arial, sans-serif;--font-outlier: var(--font-body);--font-mono: "JetBrains Mono", "Courier New", monospace;--space-3xs: .125rem;--space-2xs: .25rem;--space-xs: .5rem;--space-sm: .75rem;--space-md: 1rem;--space-lg: 1.5rem;--space-xl: 2.5rem;--space-2xl: 4rem;--space-3xl: 6rem;--space-4xl: 9rem;--text-xs: .76rem;--text-sm: .9rem;--text-base: 1.0625rem;--text-md: 1.34rem;--text-lg: 1.66rem;--text-xl: 2.08rem;--text-2xl: 2.58rem;--text-3xl: 3.22rem;--text-4xl: 4rem;--text-display: clamp(3.4rem, 7vw + .5rem, 6.9rem);--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-in: cubic-bezier(.7, 0, .84, 0);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--dur-micro: .12s;--dur-short: .22s;--dur-mid: .42s;--dur-long: .5s;--radius-input: .375rem;--radius-card: .625rem;--radius-pill: .375rem;--rule-hair: 1px;--page-max: 90rem;--page-gutter: clamp(1rem, 4vw, 4rem);--banner-height: 4.5rem;--z-base: 1;--z-raised: 10;--z-dropdown: 100;--z-sticky: 200;--z-sticky-nav: 220;--z-modal: 400;--z-toast: 500;--z-tooltip: 600}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:Inter,system-ui,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}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;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:JetBrains Mono,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.pointer-events-none{pointer-events:none}.fixed{position:fixed}.absolute{position:absolute}.inset-0{top:0;right:0;bottom:0;left:0}.z-0{z-index:0}.block{display:block}.h-screen{height:100vh}.w-full{width:100%}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.resize{resize:both}.overflow-hidden{overflow:hidden}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;min-width:20rem;overflow-x:clip;scroll-behavior:smooth;scroll-padding-top:calc(var(--banner-height) + var(--space-lg))}body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-base);font-weight:350;line-height:1.58;text-rendering:optimizeLegibility}body:before{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;content:"";background:radial-gradient(circle at 76% 12%,color-mix(in oklch,var(--color-accent) 14%,transparent) 0,transparent 28%),radial-gradient(circle at 6% 70%,color-mix(in oklch,var(--color-accent-strong) 9%,transparent) 0,transparent 24%)}::-moz-selection{background:var(--color-accent);color:var(--color-accent-ink)}::selection{background:var(--color-accent);color:var(--color-accent-ink)}a{color:inherit;text-decoration:none}a:active,button:active{opacity:.82}button,a{-webkit-tap-highlight-color:transparent}button{color:inherit;font:inherit}button:disabled,[aria-disabled=true]{cursor:not-allowed;opacity:.48}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid var(--color-focus);outline-offset:4px}img{display:block;max-width:100%}.shell{position:relative;z-index:var(--z-base);width:min(100%,var(--page-max));margin-inline:auto;padding-inline:var(--page-gutter)}.section{position:relative;z-index:var(--z-base)}.section-title{min-width:0;margin:0;color:var(--color-ink);font-family:var(--font-display);font-size:clamp(2.5rem,5.2vw,5.1rem);font-style:normal;font-weight:750;letter-spacing:-.045em;line-height:.98;overflow-wrap:anywhere}.section-lede{max-width:62ch;margin:0;color:var(--color-ink-2);font-size:var(--text-md)}.eyeline{display:inline-flex;align-items:center;gap:var(--space-sm);color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);font-weight:600;letter-spacing:.11em;text-transform:uppercase}.eyeline:before{width:.65rem;height:.65rem;border:var(--rule-hair) solid var(--color-accent);content:"";transform:rotate(45deg)}.action{display:inline-flex;min-height:2.85rem;align-items:center;justify-content:center;gap:var(--space-sm);padding:var(--space-sm) var(--space-lg);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-pill);background:var(--color-paper-2);color:var(--color-ink);font-family:var(--font-outlier);font-size:var(--text-sm);font-weight:600;line-height:1;white-space:nowrap;cursor:pointer;transition:transform var(--dur-micro) var(--ease-out),background-color var(--dur-short) var(--ease-out),border-color var(--dur-short) var(--ease-out),color var(--dur-short) var(--ease-out),opacity var(--dur-short) var(--ease-out)}.action:hover,.action.is-hover{border-color:var(--color-accent);background:var(--color-paper-3)}.action:active,.action.is-active{transform:translateY(1px)}.action[aria-disabled=true],.action:disabled{opacity:.45;pointer-events:none}.action[aria-busy=true]{cursor:wait;opacity:.72}.action[data-state=error]{border-style:dashed;border-color:var(--color-error)}.action[data-state=success]{border-color:var(--color-success)}.action--accent{border-color:var(--color-accent);background:var(--color-accent);color:var(--color-accent-ink)}.action--accent:hover,.action--accent:focus-visible{background:var(--color-focus)}.text-link{display:inline-flex;min-height:2.75rem;align-items:center;gap:var(--space-sm);border-block-end:var(--rule-hair) solid var(--color-rule);color:var(--color-ink);font-family:var(--font-outlier);font-size:var(--text-sm);white-space:nowrap;transition:border-color var(--dur-short) var(--ease-out),color var(--dur-short) var(--ease-out),transform var(--dur-micro) var(--ease-out)}.text-link:hover,.text-link:focus-visible{border-color:var(--color-accent);color:var(--color-accent)}.text-link:active{transform:translateY(1px)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (pointer: coarse){.action,.text-link{min-height:3rem}}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.15s!important;animation-iteration-count:1!important;transition-duration:.15s!important;scroll-behavior:auto!important}}.nav{position:fixed;inset:0 0 auto;z-index:var(--z-sticky-nav);height:var(--banner-height);padding-block:0;border-block-end:var(--rule-hair) solid var(--color-rule);background:color-mix(in oklch,var(--color-paper) 82%,transparent);-webkit-backdrop-filter:saturate(1.25) blur(14px);backdrop-filter:saturate(1.25) blur(14px);transition:background-color var(--dur-mid) var(--ease-out),border-color var(--dur-mid) var(--ease-out),backdrop-filter var(--dur-mid) var(--ease-out)}.nav.is-floating{padding-block:var(--space-2xs);border-color:transparent;background:transparent;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0)}.nav__inner{display:flex;width:calc(100% - (var(--page-gutter) * 2));max-width:var(--page-max);min-height:var(--banner-height);align-items:center;justify-content:space-between;gap:var(--space-md);margin-inline:auto;padding:var(--space-sm) 0;border:var(--rule-hair) solid transparent;border-radius:0;background:transparent;-webkit-backdrop-filter:blur(0);backdrop-filter:blur(0);transform:translateY(0);transition:transform var(--dur-mid) var(--ease-out),background-color var(--dur-mid) var(--ease-out),border-color var(--dur-mid) var(--ease-out),border-radius var(--dur-mid) var(--ease-out),backdrop-filter var(--dur-mid) var(--ease-out)}.nav.is-floating .nav__inner{max-width:58rem;min-height:calc(var(--banner-height) - var(--space-md));padding:var(--space-xs) var(--space-md);border-color:var(--color-rule);border-radius:var(--radius-pill);background:color-mix(in oklch,var(--color-paper-2) 91%,transparent);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);transform:translateY(var(--space-sm))}.nav__brand,.nav__links button,.nav__toggle,.nav__mobile button,.footer button{border:0;background:transparent;cursor:pointer}.nav__brand{display:inline-flex;align-items:center;gap:var(--space-sm);color:var(--color-ink);font-family:var(--font-display);font-weight:750;letter-spacing:-.03em;white-space:nowrap}.nav__brand-mark{display:grid;width:2rem;aspect-ratio:1;place-items:center;border:var(--rule-hair) solid var(--color-accent);border-radius:50%;color:var(--color-accent);font-family:var(--font-outlier);font-size:var(--text-xs);letter-spacing:-.08em}.nav__links{display:none;align-items:center;gap:var(--space-xs)}.nav__links button{min-height:2.75rem;padding-inline:var(--space-md);border-radius:var(--radius-pill);color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);white-space:nowrap;transition:color var(--dur-short) var(--ease-out),background-color var(--dur-short) var(--ease-out),transform var(--dur-micro) var(--ease-out)}.nav__links button:hover,.nav__links button:focus-visible,.nav__links button.is-active{background:var(--color-paper-3);color:var(--color-ink)}.nav__links button:active{transform:translateY(1px)}.nav__availability{display:none;min-height:2.75rem;align-items:center;gap:var(--space-xs);font-family:var(--font-outlier);font-size:var(--text-xs);white-space:nowrap}.nav__availability span{width:.45rem;aspect-ratio:1;border-radius:50%;background:var(--color-success)}.nav__toggle{display:grid;width:2.75rem;height:2.75rem;place-content:center;gap:.35rem;border:var(--rule-hair) solid var(--color-rule);border-radius:50%}.nav__toggle i{display:block;width:1rem;height:1px;background:var(--color-ink);transition:transform var(--dur-short) var(--ease-out)}.nav__toggle[aria-expanded=true] i:first-of-type{transform:translateY(.2rem) rotate(45deg)}.nav__toggle[aria-expanded=true] i:last-of-type{transform:translateY(-.2rem) rotate(-45deg)}.nav__mobile{display:grid;width:calc(100% - (var(--page-gutter) * 2));margin-inline:auto;padding:var(--space-xs) var(--space-lg);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper-2);opacity:0;pointer-events:none;transform:translateY(-.5rem);transition:opacity var(--dur-short) var(--ease-out),transform var(--dur-short) var(--ease-out)}.nav__mobile.is-open{opacity:1;pointer-events:auto;transform:translateY(var(--space-sm))}.nav__mobile button{display:flex;min-height:3.25rem;align-items:center;justify-content:space-between;border-block-end:var(--rule-hair) solid var(--color-rule);color:var(--color-ink);text-align:start;white-space:nowrap}.hero{padding-block:calc(var(--banner-height) + var(--space-lg)) var(--space-4xl)}.hero__grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-2xl);align-items:center}.hero__copy{min-width:0}.hero__title{max-width:12ch;min-width:0;margin:var(--space-lg) 0;color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-display);font-style:normal;font-weight:780;letter-spacing:-.065em;line-height:.9;overflow-wrap:anywhere}.hero__title span{position:relative;color:var(--color-accent)}.hero__title span:after{position:absolute;inset:auto 0 -.08em;height:2px;background:var(--color-accent);content:"";transform:rotate(-1deg)}.hero__lede{max-width:56ch;margin:0;color:var(--color-ink-2);font-size:var(--text-md)}.hero__actions{display:flex;flex-wrap:wrap;gap:var(--space-md);margin-block-start:var(--space-xl)}.hero__visual{width:min(100%,27rem);margin:0 auto}.hero__portrait-wrap{position:relative;aspect-ratio:4 / 5;overflow:hidden;border-radius:48% 48% var(--radius-card) var(--radius-card);background:var(--color-paper-2)}.hero__portrait-wrap:before{position:absolute;top:12%;right:8%;bottom:8%;left:8%;z-index:var(--z-raised);border:var(--rule-hair) solid color-mix(in oklch,var(--color-ink) 26%,transparent);border-radius:48% 48% var(--radius-card) var(--radius-card);content:"";pointer-events:none}.hero__portrait-wrap img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;-o-object-position:center top;object-position:center top;filter:saturate(.75) contrast(1.05)}.hero__portrait-wrap:after{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(to top,var(--color-paper) 0%,transparent 55%);content:""}.hero__code{position:absolute;inset:auto var(--space-lg) var(--space-lg);z-index:var(--z-raised);display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--space-xs) var(--space-md);padding:var(--space-md);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-input);background:var(--color-paper-2);font-family:var(--font-outlier);font-size:var(--text-xs)}.hero__code span{color:var(--color-muted)}.hero__code strong{color:var(--color-ink);font-weight:600}.hero__visual figcaption{display:flex;justify-content:space-between;gap:var(--space-md);margin-block-start:var(--space-md);color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs)}.hero__visual figcaption span:last-child{text-align:end}.hero__reveal{opacity:0;transform:translateY(.5rem);animation:hero-reveal var(--dur-long) var(--ease-out) forwards;animation-delay:calc(var(--i, 0) * 90ms)}@keyframes hero-reveal{to{opacity:1;transform:none}}.hero__marquee{display:flex;gap:var(--space-xl);margin-block-start:var(--space-2xl);padding-block-start:var(--space-lg);border-block-start:var(--rule-hair) solid var(--color-rule);overflow:hidden}.hero__marquee span{flex:0 0 auto;color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-sm)}.hero__marquee span:after{margin-inline-start:var(--space-xl);color:var(--color-accent);content:"◆";font-size:.55em}.about{padding-block:var(--space-4xl) var(--space-3xl)}.about__grid,.experience__layout,.skills__layout,.activities__layout{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-2xl)}.about__intro{display:grid;gap:var(--space-lg)}.about__story{display:grid;gap:var(--space-lg);color:var(--color-ink-2)}.about__story p{max-width:62ch;margin:0}.about__lead{color:var(--color-ink);font-size:var(--text-lg);line-height:1.4}.about__facts{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-xs);margin-block-start:var(--space-lg)}.about__facts div{display:flex;align-items:baseline;justify-content:space-between;gap:var(--space-md);padding-block:var(--space-md);border-block-end:var(--rule-hair) solid var(--color-rule)}.about__facts strong{color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-xl);font-variant-numeric:tabular-nums}.about__facts span{color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);text-align:end}.experience{padding-block:var(--space-3xl) var(--space-4xl);background:var(--color-paper-2)}.experience__heading{display:grid;gap:var(--space-lg);align-content:start}.experience__list{display:grid}.experience__item{display:grid;grid-template-columns:auto minmax(0,1fr);gap:var(--space-lg);padding-block:var(--space-xl);border-block-start:var(--rule-hair) solid var(--color-rule)}.experience__index{color:var(--color-accent);font-family:var(--font-outlier);font-size:var(--text-sm);font-variant-numeric:tabular-nums}.experience__meta{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-sm)}.experience__meta p{margin:0;color:var(--color-ink-2);font-family:var(--font-outlier);font-size:var(--text-sm)}.experience__meta span{color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs)}.experience__item h3{margin:var(--space-xs) 0 var(--space-md);color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-2xl);letter-spacing:-.035em}.experience__summary{max-width:60ch;margin:0;color:var(--color-ink-2)}.experience__item ul,.project-card ul,.skills__group ul{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin:var(--space-lg) 0 0;padding:0;list-style:none}.experience__item li,.project-card li,.skills__group li{padding:var(--space-xs) var(--space-sm);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-pill);color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);white-space:nowrap}.skills{padding-block:var(--space-4xl)}.skills__heading{display:grid;gap:var(--space-lg);align-content:start}.skills__groups{display:grid}.skills__group{padding-block:var(--space-xl);border-block-start:var(--rule-hair) solid var(--color-rule)}.skills__group h3{margin:0;color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-lg)}.skills__group ul{margin-block-start:var(--space-lg)}.projects{padding-block:var(--space-3xl) var(--space-4xl)}.projects__head{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-xl)}.projects__head>div{display:grid;gap:var(--space-lg)}.projects__filters{display:flex;flex-wrap:wrap;gap:var(--space-xs);margin-block:var(--space-xl)}.projects__filters button{display:inline-flex;min-height:2.75rem;align-items:center;gap:var(--space-sm);padding-inline:var(--space-md);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-pill);background:transparent;color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs);white-space:nowrap;cursor:pointer;transition:background-color var(--dur-short) var(--ease-out),border-color var(--dur-short) var(--ease-out),color var(--dur-short) var(--ease-out),transform var(--dur-micro) var(--ease-out)}.projects__filters button span{display:grid;min-width:1.35rem;height:1.35rem;place-items:center;border-radius:50%;background:var(--color-paper-3);color:var(--color-ink-2)}.projects__filters button:hover,.projects__filters button:focus-visible{border-color:var(--color-muted);color:var(--color-ink)}.projects__filters button:active{transform:translateY(1px)}.projects__grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-lg);animation:filter-in .3s var(--ease-out) both}@keyframes filter-in{0%{opacity:0;transform:translateY(.35rem)}to{opacity:1;transform:none}}.project-card{display:grid;min-width:0;overflow:hidden;border-radius:var(--radius-card);background:var(--color-paper-2)}.project-card__content{display:flex;min-width:0;flex-direction:column;padding:var(--space-lg)}.project-card__source{margin:0 0 var(--space-md);color:var(--color-accent);font-family:var(--font-outlier);font-size:var(--text-xs)}.project-card h3{min-width:0;margin:0 0 var(--space-md);color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-xl);letter-spacing:-.035em;line-height:1.05;overflow-wrap:anywhere}.project-card__content>p:not(.project-card__source){margin:0;color:var(--color-ink-2)}.project-card__links{display:flex;flex-wrap:wrap;gap:var(--space-lg);margin-block-start:auto;padding-block-start:var(--space-lg)}.projects__github{margin-block-start:var(--space-xl)}.project-visual{position:relative;display:grid;min-height:16rem;place-items:center;overflow:hidden;background:var(--color-paper-3)}.project-visual>span{position:absolute;inset:auto var(--space-md) var(--space-md);z-index:var(--z-raised);color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs)}.project-visual svg{width:100%;height:100%}.project-visual--graph svg path{fill:none;stroke:var(--color-rule);stroke-width:2}.project-visual--graph svg circle{fill:var(--color-paper-2);stroke:var(--color-accent);stroke-width:2}.project-visual--manga{grid-template-columns:repeat(6,minmax(0,1fr));grid-template-rows:repeat(5,1fr);gap:var(--space-xs);padding:var(--space-lg)}.manga-panel{width:100%;height:100%;border-radius:var(--radius-input);background:var(--color-paper)}.manga-panel--one{grid-area:1 / 1 / 6 / 4;background:linear-gradient(145deg,var(--color-paper),var(--color-paper-2))}.manga-panel--two{grid-area:1 / 4 / 3 / 7;background:var(--color-accent)}.manga-panel--three{grid-area:3 / 4 / 6 / 7;border:var(--rule-hair) solid var(--color-rule)}.project-visual--locxuan{background:var(--color-paper-3)}.project-visual--locxuan>span{color:var(--color-muted)}.gift-box{position:relative;width:9rem;height:7rem;border:var(--rule-hair) solid var(--color-accent)}.gift-box:before,.gift-box:after{position:absolute;background:var(--color-accent);content:""}.gift-box:before{inset:0 auto 0 50%;width:var(--rule-hair)}.gift-box:after{inset:45% 0 auto;height:var(--rule-hair)}.gift-box i{position:absolute;width:2rem;height:2rem;border:var(--rule-hair) solid var(--color-accent);border-radius:50%}.gift-box i:nth-child(1){inset:-1.6rem auto auto 2.1rem}.gift-box i:nth-child(2){inset:-1.6rem 2.1rem auto auto}.gift-box i:nth-child(3){inset:1rem auto auto 1rem}.gift-box i:nth-child(4){inset:1rem 1rem auto auto}.project-visual--terminal{align-content:center;gap:var(--space-sm);padding:var(--space-xl)}.project-visual--terminal div{display:grid;width:min(100%,21rem);grid-template-columns:auto 1fr;gap:var(--space-lg);padding-block:var(--space-sm);border-block-end:var(--rule-hair) solid var(--color-rule);font-family:var(--font-outlier)}.project-visual--terminal span{color:var(--color-accent)}.project-visual--terminal strong{color:var(--color-ink);font-weight:500}.activities{padding-block:var(--space-4xl);background:var(--color-paper-2)}.activities__layout>header{display:grid;gap:var(--space-lg)}.activities__list{display:grid}.activities__list article{padding-block:var(--space-xl);border-block-start:var(--rule-hair) solid var(--color-rule)}.activities__list article>p:first-child{margin:0 0 var(--space-sm);color:var(--color-accent);font-family:var(--font-outlier);font-size:var(--text-xs)}.activities__list h3{margin:0 0 var(--space-md);color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-xl);letter-spacing:-.03em}.activities__list article>p:last-child{max-width:58ch;margin:0;color:var(--color-ink-2)}.contact{padding-block:var(--space-4xl)}.contact__panel{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--space-xl);padding-block:var(--space-2xl)}.contact__copy{display:grid;gap:var(--space-lg)}.contact__copy h2{max-width:15ch;min-width:0;margin:0;color:var(--color-ink);font-family:var(--font-display);font-size:clamp(3rem,7vw,6.75rem);font-style:normal;font-weight:780;letter-spacing:-.06em;line-height:.9;overflow-wrap:anywhere}.contact__copy>p:last-child{max-width:52ch;margin:0;color:var(--color-ink-2);font-size:var(--text-md)}.contact__actions{display:flex;flex-wrap:wrap;align-content:start;gap:var(--space-md)}.contact__details{display:grid;grid-template-columns:minmax(0,1fr);margin:0}.contact__details div{padding-block:var(--space-md);border-block-start:var(--rule-hair) solid var(--color-rule)}.contact__details dt{color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs)}.contact__details dd{margin:var(--space-xs) 0 0;color:var(--color-ink);overflow-wrap:anywhere}.contact__details a{text-decoration:underline;text-decoration-color:var(--color-rule);text-underline-offset:.25em;white-space:nowrap}.footer{padding-block:var(--space-2xl) var(--space-xl);background:var(--color-paper-2)}.footer__statement{max-width:24ch;margin:0;color:var(--color-ink);font-family:var(--font-display);font-size:clamp(2rem,5vw,4.2rem);font-weight:750;letter-spacing:-.045em;line-height:1}.footer__meta{display:grid;gap:var(--space-lg);margin-block-start:var(--space-2xl);padding-block-start:var(--space-lg);border-block-start:var(--rule-hair) solid var(--color-rule);color:var(--color-muted);font-family:var(--font-outlier);font-size:var(--text-xs)}.footer__meta button{justify-self:start;color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-md);font-weight:750;white-space:nowrap}.footer__meta div{display:flex;flex-wrap:wrap;gap:var(--space-lg)}.footer__meta a{min-height:2.75rem;display:inline-flex;align-items:center;white-space:nowrap}@media (min-width: 40rem){.about__facts{grid-template-columns:repeat(3,minmax(0,1fr))}.about__facts div{display:grid;justify-content:initial;align-content:start}.projects__grid{grid-template-columns:repeat(2,minmax(0,1fr))}.project-card--featured:first-child{grid-column:span 2;grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr)}.project-card--featured:first-child .project-visual{min-height:29rem}.contact__details{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--space-xl)}.footer__meta{grid-template-columns:auto minmax(0,1fr) auto;align-items:center}.footer__meta div{justify-content:center}}@media (min-width: 60rem){.nav__toggle,.nav__mobile{display:none}.nav__links,.nav__availability{display:flex}.hero__grid{grid-template-columns:minmax(0,1.18fr) minmax(0,.82fr)}.hero__visual{justify-self:end}.about__grid{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:var(--space-4xl)}.experience__layout,.skills__layout,.activities__layout{grid-template-columns:minmax(0,.72fr) minmax(0,1.28fr);gap:var(--space-4xl)}.experience__heading,.skills__heading,.activities__layout>header{position:sticky;top:calc(var(--banner-height) + var(--space-xl));align-self:start}.projects__head{grid-template-columns:minmax(0,1.35fr) minmax(18rem,.65fr);align-items:end}.contact__panel{grid-template-columns:minmax(0,1.25fr) minmax(18rem,.75fr)}.contact__details{grid-column:1 / -1;grid-template-columns:repeat(4,minmax(0,1fr))}}@media (min-width: 90rem){.projects__grid{grid-template-columns:repeat(12,minmax(0,1fr))}.project-card{grid-column:span 4}.project-card--featured:first-child{grid-column:span 8}.project-card--featured:nth-child(2){grid-column:span 4}}@media (prefers-reduced-motion: reduce){.hero__reveal{opacity:1;transform:none;animation:none}.projects__grid{animation:none}.nav.is-floating .nav__inner{transform:none}}body:before{display:none}.portfolio-content{background:color-mix(in oklch,var(--color-paper) 38%,transparent)}.section-title,.hero__title,.contact__copy h2,.footer__statement{font-style:normal;text-wrap:balance}.section-title,.contact__copy h2{font-weight:700}.about .eyeline,.experience .eyeline,.skills .eyeline,.activities .eyeline,.contact .eyeline{display:none}.eyeline{color:var(--color-ink-2);font-family:var(--font-outlier);font-weight:500;letter-spacing:.08em}.eyeline:before{width:var(--space-xs);height:var(--space-xs);border:0;border-radius:1px;background:var(--color-accent);transform:none}.nav,.nav.is-floating{padding-block:0;border-block-end:var(--rule-hair) solid var(--color-rule);background:color-mix(in oklch,var(--color-paper) 92%,transparent);-webkit-backdrop-filter:saturate(1.1) blur(10px);backdrop-filter:saturate(1.1) blur(10px)}.nav__inner,.nav.is-floating .nav__inner{width:calc(100% - (var(--page-gutter) * 2));max-width:var(--page-max);min-height:var(--banner-height);padding:var(--space-sm) 0;border:0;border-radius:0;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;transform:none}.nav__brand{font-family:var(--font-display);font-weight:700;letter-spacing:-.025em}.nav__brand-mark{border-radius:var(--radius-input);background:var(--color-accent);color:var(--color-accent-ink);font-family:var(--font-outlier);font-weight:600}.nav__links button{border-radius:var(--radius-input);font-family:var(--font-body);font-weight:600}.nav__links button:hover,.nav__links button:focus-visible,.nav__links button.is-active{background:color-mix(in oklch,var(--color-accent) 8%,transparent);color:var(--color-accent-strong)}.nav__availability{padding-inline:var(--space-md);border-radius:var(--radius-input);background:var(--color-accent);color:var(--color-accent-ink);font-family:var(--font-outlier);font-weight:500}.nav__availability span{width:var(--space-xs);border:var(--rule-hair) solid var(--color-accent-ink);background:transparent}.nav__toggle,.nav__mobile{border-radius:var(--radius-input)}.nav__toggle{gap:var(--space-xs)}.nav__mobile{background:var(--color-paper)}.hero{min-height:min(52rem,100dvh);display:grid;align-items:center}.hero__title{max-width:11ch;font-size:clamp(3.25rem,6.5vw,5.8rem);font-weight:700;letter-spacing:-.06em;line-height:.94}.hero__title span:after{height:var(--rule-hair);background:var(--color-accent);transform:none}.hero__lede{color:var(--color-ink-2);font-size:var(--text-md)}.action{border-color:var(--color-rule-strong);border-radius:var(--radius-input);background:color-mix(in oklch,var(--color-paper) 88%,transparent);font-family:var(--font-body);font-weight:600}.action:hover,.action.is-hover{border-color:var(--color-accent);background:var(--color-paper);color:var(--color-accent-strong)}.action--accent,.action--accent:hover,.action--accent:focus-visible{border-color:var(--color-accent);background:var(--color-accent);color:var(--color-accent-ink)}.text-link{border-color:var(--color-rule-strong);font-family:var(--font-body);font-weight:600}.hero__portrait-wrap{border:var(--rule-hair) solid var(--color-rule-strong);border-radius:var(--radius-card);background:color-mix(in oklch,var(--color-paper-2) 88%,transparent)}.hero__portrait-wrap:before{inset:var(--space-lg);border-color:color-mix(in oklch,var(--color-accent) 35%,var(--color-rule));border-radius:var(--radius-input)}.hero__portrait-wrap img{filter:saturate(.55) contrast(1.04)}.hero__portrait-wrap:after{background:linear-gradient(to top,var(--color-paper) 0%,transparent 48%)}.hero__code{border-color:var(--color-rule-dark);border-radius:var(--radius-input);background:var(--color-graphite);color:var(--color-inverse);font-family:var(--font-mono)}.hero__code span{color:var(--color-inverse-muted)}.hero__code strong{color:var(--color-inverse)}.hero__visual figcaption,.hero__marquee span{color:var(--color-ink-2);font-family:var(--font-outlier)}.hero__marquee{border-color:var(--color-rule-strong)}.about__facts div{padding:var(--space-md);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-input);background:color-mix(in oklch,var(--color-paper) 78%,transparent)}.about__facts strong{color:var(--color-accent-strong);font-family:var(--font-outlier);font-size:var(--text-lg);font-weight:600}.experience{border-block:var(--rule-hair) solid var(--color-rule-dark);background:var(--color-graphite)}.experience .section-title,.experience .experience__item h3{color:var(--color-inverse)}.experience .section-lede,.experience .experience__summary,.experience .experience__meta p,.experience .experience__meta span{color:var(--color-inverse-muted)}.experience .experience__item{border-color:var(--color-rule-dark)}.experience .experience__index{color:var(--color-accent)}.experience .experience__item li{border-color:var(--color-rule-dark);background:var(--color-graphite-2);color:var(--color-inverse-muted)}.skills__group{border-color:var(--color-rule-strong)}.skills__group li,.project-card li{border-radius:var(--radius-input);background:color-mix(in oklch,var(--color-paper) 74%,transparent);color:var(--color-ink-2)}.projects{background:color-mix(in oklch,var(--color-paper) 62%,transparent)}.projects__filters button{border-color:var(--color-rule-strong);border-radius:var(--radius-input);background:color-mix(in oklch,var(--color-paper) 76%,transparent);color:var(--color-ink-2);font-family:var(--font-outlier)}.projects__filters button span{border-radius:2px;background:var(--color-paper-3)}.projects__filters button[aria-pressed=true]{border-color:var(--color-accent);background:var(--color-accent);color:var(--color-accent-ink)}.project-card{border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);background:color-mix(in oklch,var(--color-paper) 92%,transparent);transition:border-color var(--dur-short) var(--ease-out)}.project-card:hover,.project-card:focus-within{border-color:var(--color-accent)}.project-card__source{font-family:var(--font-mono)}.project-visual,.project-visual--locxuan{border-block-end:var(--rule-hair) solid var(--color-rule);background:var(--color-paper-2)}.gift-box{border-radius:var(--radius-input)}.activities{border-block:var(--rule-hair) solid var(--color-rule);background:color-mix(in oklch,var(--color-paper-2) 78%,transparent)}.activities__list article,.contact__details div{border-color:var(--color-rule-strong)}.activities__list article>p:first-child,.contact__details dt{font-family:var(--font-outlier)}.contact__panel{padding-inline:var(--space-lg);border:var(--rule-hair) solid var(--color-rule-strong);border-radius:var(--radius-card);background:color-mix(in oklch,var(--color-paper) 88%,transparent)}.footer{border-block-start:var(--rule-hair) solid var(--color-rule-strong);background:color-mix(in oklch,var(--color-paper) 94%,transparent)}.footer__statement{max-width:46ch;color:var(--color-ink-2);font-family:var(--font-outlier);font-size:var(--text-md);font-weight:600;letter-spacing:-.02em;line-height:1.4}.footer__meta{border-color:var(--color-rule-strong);font-family:var(--font-outlier)}.footer__meta button{font-family:var(--font-display);font-weight:700}@media (min-width: 60rem){.nav__inner,.nav.is-floating .nav__inner{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}.nav__brand{justify-self:start}.nav__links{justify-self:center}.nav__availability{justify-self:end}.project-card--featured:nth-child(2n) .project-visual{order:-1}.contact__panel{padding-inline:var(--space-2xl)}}@media (hover: hover) and (pointer: fine){.action:hover{transform:translateY(-1px)}}@media (prefers-reduced-motion: reduce){.action:hover{transform:none}}.App{min-height:100dvh;isolation:isolate}.portfolio-content{position:relative;z-index:var(--z-base)}.scroll-progress{position:fixed;inset:0 auto auto 0;z-index:var(--z-sticky-nav);width:100%;height:2px;background:var(--color-accent);transform:scaleX(var(--scroll-progress, 0));transform-origin:left center}
