@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-vietnamese-wght-normal.CnvboYUG.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-ext-wght-normal.Ca2vKHc0.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-wght-normal.ukD16Tqj.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(data:font/woff2;base64,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) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/manrope-cyrillic-wght-normal.Dvxsihut.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/manrope-greek-wght-normal.DL7QRZyv.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/manrope-vietnamese-wght-normal.usUDDRr7.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/manrope-latin-ext-wght-normal.Ch3YOpNY.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Manrope Variable;font-style:normal;font-display:swap;font-weight:200 800;src:url(/_astro/manrope-latin-wght-normal.DHIcAJRg.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,: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:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";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:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,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}h1{font-size:1.875rem;line-height:2.25rem;line-height:1.25}@media(min-width:768px){h1{font-size:3rem;line-height:1}}h2{font-size:1.5rem;line-height:2rem;line-height:1.25}@media(min-width:768px){h2{font-size:1.875rem;line-height:2.25rem}}h3{font-size:1.25rem;line-height:1.75rem;line-height:1.25}a{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s}.page-shell{position:relative;margin-left:auto;margin-right:auto;display:flex;min-height:100vh;max-width:92rem;flex-direction:column;gap:1.25rem;padding-left:1rem;padding-right:1rem;padding-bottom:4rem;padding-top:0}@media(min-width:768px){.page-shell{padding-left:2rem;padding-right:2rem}}.reveal-section,.reveal-item,.projects-page-back{opacity:0;transform:translateY(18px);transition:opacity .55s ease,transform .55s ease}.reveal-section.is-visible,.reveal-item.is-visible,.projects-page-back.is-visible,.reveal-section.is-visible .reveal-item{opacity:1;transform:translateY(0)}.page-ambient{pointer-events:none;position:fixed;inset:0;background:radial-gradient(circle at 18% 16%,rgba(90,173,255,.08) 0 3px,transparent 4px),radial-gradient(circle at 74% 28%,rgba(24,196,155,.06) 0 2px,transparent 3px),linear-gradient(transparent,rgba(var(--surface),.018));background-size:240px 240px,320px 320px,auto;transform:translateY(calc(var(--scroll) * .08px))}.site-header{position:sticky;top:0;z-index:30;display:flex;align-items:center;justify-content:space-between;gap:1rem;border-bottom-width:1px;padding:1rem;--tw-backdrop-blur: blur(8px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;margin-inline:-1rem;border-color:rgba(var(--surface),.18);background:rgba(var(--ink),.92)}html[data-scrolled=true] .site-header{padding-top:.5rem;padding-bottom:.5rem;background:rgba(var(--ink),.97)}html[data-theme=dark] .site-header:after{pointer-events:none;position:absolute;left:2rem;right:2rem;bottom:0;height:1px;--tw-content: "";content:var(--tw-content);background:linear-gradient(90deg,#5aadff00,#5aadfff2,#6779ffcc,#5aadff00);box-shadow:0 0 18px #5aadff94}.brand-lockup{display:flex;align-items:center;gap:.75rem;text-decoration-line:none;color:rgb(var(--sand))}.brand-avatar{height:2.5rem;width:2.5rem;border-radius:9999px;-o-object-fit:cover;object-fit:cover;border:1px solid rgba(var(--surface),.24);-o-object-position:center 18%;object-position:center 18%}.brand-copy{display:none;flex-direction:column;font-size:.875rem;line-height:1.25rem;color:rgb(var(--mist))}@media(min-width:640px){.brand-copy{display:flex}}.brand-copy strong{font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-size:1rem;line-height:1.5rem;font-weight:600;color:rgb(var(--sand))}.site-nav{display:none;align-items:center;gap:.75rem;font-size:.875rem;line-height:1.25rem;color:rgb(var(--mist))}@media(min-width:768px){.site-nav{display:flex}}.site-nav a:hover,.project-links a:hover{color:#5aadff}.theme-toggle{display:inline-flex;align-items:center;border-radius:9999px;padding:.25rem;font-size:.875rem;line-height:1.25rem;border:1px solid rgba(var(--surface),.18);background:rgba(var(--surface),.06);color:rgb(var(--sand))}.theme-track{position:relative;display:grid;height:2.25rem;width:4.5rem;grid-template-columns:repeat(2,minmax(0,1fr));align-items:center;border-radius:9999px;padding:.25rem;gap:.2rem;background:rgba(var(--surface),.08)}.theme-thumb{position:absolute;left:.25rem;top:.25rem;height:1.75rem;width:1.75rem;border-radius:9999px;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.3s;background:linear-gradient(135deg,#5aadfff2,#6779ffe6);box-shadow:0 10px 24px #5aadff47}html[data-theme=dark] .theme-thumb{transform:translate(2rem)}.theme-slot{position:relative;z-index:1;display:grid;height:1.75rem;width:1.75rem;place-items:center;border-radius:9999px;color:rgba(var(--sand),.45)}.theme-slot svg{height:.875rem;width:.875rem}html[data-theme=light] .theme-slot-sun,html[data-theme=dark] .theme-slot-moon{color:rgb(var(--ink))}html[data-theme=light] .theme-slot-moon,html[data-theme=dark] .theme-slot-sun{color:rgba(var(--sand),.46)}.hero-shell{position:relative;isolation:isolate;overflow:hidden;border-radius:2rem;border-width:1px;padding:2rem 1.25rem}@media(min-width:768px){.hero-shell{padding-left:2rem;padding-right:2rem}}@media(min-width:1024px){.hero-shell{padding-left:2.5rem;padding-right:2.5rem}}.hero-shell{min-height:calc(100svh - var(--header-height) - 1.5rem);scroll-margin-top:calc(var(--header-height) + 12px);border-color:rgba(var(--surface),.18);background:linear-gradient(180deg,rgba(var(--surface),.05),rgba(var(--surface),.02)),rgba(var(--surface),.03);box-shadow:inset 0 1px rgba(var(--surface),.04),0 18px 48px #04080e1a;display:flex;flex-direction:column;justify-content:center}.hero-backdrop{position:absolute;inset:0;overflow:hidden}.hero-backdrop-canvas{height:100%;width:100%}.hero-grid{position:relative;z-index:1;display:grid;align-items:center;gap:2rem}@media(min-width:1024px){.hero-grid{grid-template-columns:1.05fr .82fr}}.hero-grid{flex:1 1 auto}.hero-copy>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.hero-copy{border-radius:1.6rem;padding:1.5rem}@media(min-width:1024px){.hero-copy{max-width:42rem}}.hero-copy{border:1px solid rgba(var(--surface),.22);background:linear-gradient(135deg,rgba(90,173,255,.12),transparent 42%),rgba(var(--panel),.38);box-shadow:0 24px 60px #060c1429}.hero-role{font-size:.875rem;line-height:1.25rem;text-transform:uppercase;letter-spacing:.24em;color:rgba(var(--sand),.58)}.accent-text{position:relative;display:inline-block;color:rgb(var(--sand));text-shadow:0 0 24px rgba(90,173,255,.22)}.accent-text:after{position:absolute;bottom:-.25rem;left:0;height:.22rem;width:6rem;border-radius:9999px;--tw-content: "";content:var(--tw-content);background:linear-gradient(90deg,#5aadff,#6779ff)}.accent-text-subtle{color:#5aadff}.hero-summary{max-width:48rem;font-size:1rem;line-height:1.75rem;color:rgb(var(--mist))}.button-primary,.button-secondary{display:inline-flex;align-items:center;justify-content:center;border-radius:9999px;padding:.375rem .75rem;font-size:13px;font-weight:600;text-decoration-line:none}.button-secondary{background-color:transparent;color:rgb(var(--sand));border:0;background:transparent;box-shadow:none;min-width:auto}.button-secondary:hover,.button-cta:hover{color:#5aadff;border-color:transparent;background:transparent;box-shadow:none}.button-with-icon{gap:.5rem}.button-with-icon svg{height:1rem;width:1rem}.hero-aside{position:relative;z-index:1;display:flex;justify-content:center}@media(min-width:1024px){.hero-aside{justify-content:center}}.portrait-panel{overflow:hidden;border-radius:1.7rem;padding:.75rem;width:min(100%,22rem);border:1px solid rgba(var(--surface),.24);background:linear-gradient(180deg,rgba(var(--surface),.08),rgba(var(--surface),.03)),rgb(var(--panel));box-shadow:0 30px 80px #0000003d}.portrait-panel img{margin-left:auto;margin-right:auto;aspect-ratio:4/5;width:100%;border-radius:1.3rem;-o-object-fit:cover;object-fit:cover;-o-object-position:center 18%;object-position:center 18%}.portrait-meta{display:flex;flex-direction:column;gap:.25rem;padding:1rem .5rem .5rem;font-size:.875rem;line-height:1.25rem;color:rgb(var(--mist))}.highlight-stack{position:relative;z-index:1;margin-top:1.25rem;display:grid;gap:.75rem}@media(min-width:768px){.highlight-stack{grid-template-columns:repeat(3,minmax(0,1fr))}}.highlight-card,.panel,.project-card{border-radius:1.4rem;padding:1.25rem;--tw-backdrop-blur: blur(8px);backdrop-filter:var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);border:1px solid rgba(var(--surface),.24);background:linear-gradient(180deg,rgba(var(--surface),.08),rgba(var(--surface),.03)),rgba(var(--surface),var(--surface-alpha));box-shadow:inset 0 1px rgba(var(--surface),.07),0 12px 30px #00000014}.highlight-card p,.panel p,.project-card p,.section-intro,.body-large{font-size:1rem;line-height:1.75rem;color:rgb(var(--mist))}.section-shell{display:grid;gap:1rem;border-radius:1.8rem;border-width:1px;padding:1.25rem}@media(min-width:1280px){.section-shell{grid-template-columns:18rem minmax(0,1fr)}}.section-shell{scroll-margin-top:calc(var(--header-height) + 18px);border-color:rgba(var(--surface),.16);background:linear-gradient(180deg,rgba(var(--surface),.04),rgba(var(--surface),.02)),rgba(var(--surface),.02)}.section-heading>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.section-title-accent{position:relative;display:inline-block}.section-title-accent:after{position:absolute;bottom:-.25rem;left:0;height:1px;width:100%;--tw-content: "";content:var(--tw-content);background:linear-gradient(90deg,rgba(90,173,255,.9),transparent)}.section-content{min-width:0px}.eyebrow,.meta-line{font-size:11px;text-transform:uppercase;letter-spacing:.24em;color:rgba(var(--sand),.56)}.about-grid,.education-grid{display:grid;gap:1rem}@media(min-width:768px){.about-grid,.education-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.expertise-grid,.project-grid{display:grid;gap:1rem}@media(min-width:1280px){.expertise-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:768px){.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1280px){.project-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}.project-marquee{position:relative;overflow:hidden;width:100%;-webkit-mask-image:linear-gradient(90deg,transparent,black 6%,black 94%,transparent);mask-image:linear-gradient(90deg,transparent,black 6%,black 94%,transparent)}.project-marquee-track{display:flex;width:-moz-max-content;width:max-content;gap:1rem;animation:project-marquee 38s linear infinite;will-change:transform}.project-marquee:hover .project-marquee-track{animation-play-state:paused}.project-marquee-card{width:min(20rem,calc(100vw - 5rem));flex:0 0 auto}.expertise-card{display:flex;height:100%;flex-direction:column;gap:.75rem;border:1px solid rgba(255,255,255,.16);background:linear-gradient(180deg,#ffffff14,#ffffff08),rgba(var(--surface),.03);box-shadow:inset 0 1px #ffffff0f,0 12px 28px #00000014}.expertise-card h3{color:rgb(var(--sand))}.chip-row{display:flex;flex-wrap:wrap;gap:.5rem}.chip-row li{border-radius:9999px;padding:.125rem .5rem;font-size:11px;font-weight:500;--chip-fg: rgb(255 178 77);--chip-border: rgba(255, 178, 77, .32);--chip-bg-top: rgba(255, 178, 77, .18);--chip-bg-bottom: rgba(255, 178, 77, .1);color:var(--chip-fg);border:1px solid var(--chip-border);background:linear-gradient(180deg,var(--chip-bg-top),var(--chip-bg-bottom)),rgba(var(--surface),.04);box-shadow:inset 0 1px #ffffff0d}.chip-row li:nth-child(5n+1){--chip-fg: rgb(255 178 77);--chip-border: rgba(255, 178, 77, .32);--chip-bg-top: rgba(255, 178, 77, .18);--chip-bg-bottom: rgba(255, 178, 77, .1)}.chip-row li:nth-child(5n+2){--chip-fg: rgb(255 107 157);--chip-border: rgba(255, 107, 157, .32);--chip-bg-top: rgba(255, 107, 157, .18);--chip-bg-bottom: rgba(255, 107, 157, .1)}.chip-row li:nth-child(5n+3){--chip-fg: rgb(24 196 155);--chip-border: rgba(24, 196, 155, .32);--chip-bg-top: rgba(24, 196, 155, .18);--chip-bg-bottom: rgba(24, 196, 155, .1)}.chip-row li:nth-child(5n+4){--chip-fg: rgb(255 178 77);--chip-border: rgba(255, 178, 77, .32);--chip-bg-top: rgba(255, 178, 77, .18);--chip-bg-bottom: rgba(255, 178, 77, .1)}.chip-row li:nth-child(5n){--chip-fg: rgb(160 122 255);--chip-border: rgba(160, 122, 255, .32);--chip-bg-top: rgba(160, 122, 255, .18);--chip-bg-bottom: rgba(160, 122, 255, .1)}.detail-list>:not([hidden])~:not([hidden]),.certification-list>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.detail-list li,.certification-list li{border-bottom-width:1px;padding-bottom:1rem;border-color:rgba(var(--surface),.12)}.detail-list.compact li{padding-bottom:.75rem}.detail-list span,.certification-list span{display:block;font-size:.875rem;line-height:1.25rem;text-transform:uppercase;letter-spacing:.18em;color:rgba(var(--sand),.54)}.detail-list strong,.certification-list strong{margin-top:.25rem;display:block;font-size:1.125rem;line-height:1.75rem;color:rgb(var(--sand))}.certification-list em{margin-top:.25rem;display:block;font-size:.875rem;line-height:1.25rem;font-style:normal;color:rgb(var(--mist))}.timeline{position:relative}.timeline>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem * var(--tw-space-y-reverse))}.timeline{padding-top:.5rem;padding-bottom:.5rem}.timeline:before{position:absolute;bottom:0;left:1rem;top:0;width:2px;--tw-content: "";content:var(--tw-content);background:#5aadffe0;box-shadow:0 0 20px #5aadff6b;z-index:0}.timeline-card{position:relative;display:grid;gap:.75rem;padding-left:3rem}@media(min-width:1024px){.timeline-card{grid-template-columns:minmax(0,1fr) 2.5rem minmax(0,1fr);align-items:center;gap:1rem;padding-left:0}}.timeline-card{min-height:13rem}.timeline-column{min-width:0px}.timeline-panel>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.timeline-panel{border:1px solid rgba(255,255,255,.18);background:linear-gradient(180deg,#ffffff14,#ffffff08),rgba(var(--surface),.03);position:relative;z-index:1;box-shadow:inset 0 1px #ffffff0f,0 12px 28px #0000001a}.timeline-panel:after{position:absolute;left:-2rem;top:50%;height:2px;width:2rem;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));--tw-content: "";content:var(--tw-content);background:#5aadffe0;box-shadow:0 0 12px #5aadff4d}.timeline-marker{position:absolute;left:1rem;top:50%;height:1rem;width:1rem;--tw-translate-x: -50%;--tw-translate-y: -50%;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@media(min-width:1024px){.timeline-marker{position:static;grid-column-start:2;--tw-translate-x: 0px;--tw-translate-y: 0px;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skew(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));align-self:center;justify-self:center}}.timeline-marker{z-index:2}.timeline-marker:before{display:block;height:1rem;width:1rem;border-radius:9999px;border-width:5px;border-color:rgb(var(--ink));background:#5aadff;box-shadow:0 0 18px #5aadff94;content:""}.timeline-head,.project-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:.75rem}.timeline-meta{padding-left:3rem}@media(min-width:1024px){.timeline-meta{padding-left:0}}.timeline-period{font-size:.875rem;font-weight:500;line-height:1.5rem;color:rgba(var(--sand),.72)}.company-line{margin-top:.5rem;font-size:1rem;line-height:1.5rem;color:rgba(var(--sand),.82)}.timeline-points{display:grid;gap:.5rem;font-size:.875rem;line-height:1.5rem;color:rgb(var(--mist))}.timeline-emphasis{display:inline-block;font-weight:600;padding-bottom:.02rem;border-bottom:2px solid rgba(255,255,255,.18);line-height:1.2;color:inherit}.timeline-emphasis-amber{border-bottom-color:#ffb24db8}.timeline-emphasis-teal{border-bottom-color:#18c49bb8}.timeline-emphasis-violet{border-bottom-color:#a07affb8}.project-card{display:flex;height:100%;flex-direction:column;gap:.625rem;overflow:hidden;padding:1rem;border:1px solid rgba(var(--surface),.34);box-shadow:inset 0 1px rgba(var(--surface),.07),0 14px 32px #00000014}.project-image-link{position:relative;display:block}.project-image{height:7rem;width:100%;border-radius:.9rem;-o-object-fit:cover;object-fit:cover;border:1px solid rgba(var(--surface),.16)}.project-github-badge{position:absolute;right:.75rem;top:.75rem;display:grid;height:2rem;width:2rem;place-items:center;border-radius:9999px;--tw-text-opacity: 1;color:rgb(255 255 255 / var(--tw-text-opacity, 1));background:#070c14d1;border:1px solid rgba(255,255,255,.18);box-shadow:0 8px 18px #0000003d,0 0 0 1px #5aadff14}.project-github-badge svg{height:1rem;width:1rem}.featured-project{border-color:#5aadff7a}.project-head span{color:rgba(var(--sand),.62)}.contact-footer{margin-top:.5rem;border-top-width:1px;padding-top:1.25rem;border-color:rgba(var(--surface),.16);scroll-margin-top:calc(var(--header-height) + 18px)}.contact-footer-note{margin-bottom:1rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgb(var(--mist))}.contact-strip{display:flex;flex-wrap:wrap;justify-content:center;gap:.75rem}.contact-item{display:flex;align-items:center;gap:.75rem;border-radius:9999px;padding:.625rem 1rem;text-decoration-line:none;border:1px solid rgba(var(--surface),.16);background:rgba(var(--surface),.04)}.contact-item:hover{border-color:rgba(var(--surface),.28)}.contact-icon{display:grid;height:2.25rem;width:2.25rem;place-items:center;border-radius:9999px;font-size:.875rem;line-height:1.25rem;color:rgb(var(--sand));border:1px solid rgba(var(--surface),.16);background:rgba(var(--surface),.04)}.contact-icon svg{height:1rem;width:1rem}.contact-text{display:flex;min-width:0px;flex-direction:column}.contact-text small{font-size:11px;text-transform:uppercase;letter-spacing:.18em;color:rgba(var(--sand),.5)}.contact-text strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:.875rem;line-height:1.25rem;color:rgb(var(--sand))}.site-footer{display:flex;flex-direction:column;justify-content:space-between;gap:.5rem;padding-top:1.25rem;padding-bottom:1.25rem;text-align:center;font-size:.875rem;line-height:1.25rem;color:rgb(var(--mist))}@media(min-width:768px){.site-footer{flex-direction:row}}.projects-more{margin-top:1.25rem;display:flex;width:100%;justify-content:center}.projects-page-back{display:flex;justify-content:center;padding-top:1rem;scroll-margin-top:calc(var(--header-height) + 18px)}.credential-link{margin-top:.75rem;display:inline-flex;align-items:center;gap:.5rem;font-size:.875rem;line-height:1.25rem;text-decoration-line:none;color:rgb(var(--sand))}.credential-link svg{height:.875rem;width:.875rem}@media(min-width:768px){.project-grid-archive{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:1280px){.project-grid-archive{grid-template-columns:repeat(3,minmax(0,1fr))}}.absolute{position:absolute}.resize{resize:both}.scroll-smooth{scroll-behavior:smooth}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.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)}.bg-ink{background-color:rgb(var(--ink))}.text-sand{color:rgb(var(--sand))}:root{--ink: 11 16 24;--sand: 234 241 248;--mist: 151 165 182;--line: 63 77 95;--accent: 90 173 255;--accent-2: 103 121 255;--accent-3: 24 196 155;--panel: 16 22 31;--surface: 255 255 255;--surface-alpha: .05;--scroll: 0;--header-height: 84px}html[data-theme=light]{--ink: 243 247 252;--sand: 16 23 33;--mist: 89 101 116;--line: 195 205 220;--accent: 33 104 215;--accent-2: 84 92 225;--accent-3: 0 150 125;--panel: 255 255 255;--surface: 12 20 30;--surface-alpha: .04}html[data-theme=dark]{--ink: 11 16 24;--sand: 234 241 248;--mist: 151 165 182;--line: 63 77 95;--accent: 90 173 255;--accent-2: 103 121 255;--accent-3: 24 196 155;--panel: 16 22 31;--surface: 255 255 255;--surface-alpha: .05}html{background:rgb(var(--ink));scroll-padding-top:calc(var(--header-height) + 18px)}body{font-family:Manrope Variable,sans-serif;min-height:100vh;background:linear-gradient(to right,rgba(var(--surface),.05) 1px,transparent 1px),linear-gradient(to bottom,rgba(var(--surface),.05) 1px,transparent 1px),radial-gradient(circle at 12% 10%,rgba(90,173,255,.12),transparent 24%),radial-gradient(circle at 84% 14%,rgba(var(--accent-2),.1),transparent 22%),radial-gradient(circle at 50% 78%,rgba(var(--accent-3),.08),transparent 18%),rgb(var(--ink));background-size:58px 58px,58px 58px,auto,auto,auto,auto;background-attachment:fixed}h1,h2,h3,strong{font-family:Fraunces Variable,serif;font-weight:600;letter-spacing:-.03em}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}@media(min-width:768px){.site-header{margin-inline:-2rem;padding-inline:2rem}}@media(min-width:1024px){.timeline:before{left:50%;transform:translate(-50%)}.timeline-card.is-left .timeline-column{grid-column:1;grid-row:1}.timeline-card.is-right .timeline-column{grid-column:3;grid-row:1}.timeline-card .timeline-marker{grid-column:2;grid-row:1;align-self:center}.timeline-card .timeline-meta{grid-row:1;align-self:center}.timeline-card.is-left .timeline-meta{grid-column:3;justify-self:start;text-align:left;padding-left:.1rem}.timeline-card.is-right .timeline-meta{grid-column:1;justify-self:end;text-align:right;padding-right:.1rem}.timeline-card.is-left .timeline-panel:after{left:auto;right:-2.25rem;width:2.25rem}.timeline-card.is-right .timeline-panel:after{left:-2.25rem;width:2.25rem}}@keyframes project-marquee{0%{transform:translate(0)}to{transform:translate(calc(-50% - .5rem))}}
