@font-face{font-family:Geist;src:url(/assets/Geist-Variable-p2GUc8qZ.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Geist Mono;src:url(/assets/GeistMono-Variable-bOGSM49p.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}@font-face{font-family:Noto Sans SC;src:url(/assets/NotoSansSC-subset-CxiWdwrd.woff2) format("woff2");font-weight:100 900;font-style:normal;font-display:swap}:root{--color-off-white: #F1EEE7;--color-black: #232323;--color-black-deep: #000000;--color-white: #FFFFFF;--color-text: #1A1A1A;--color-dark-grey: #5B5A56;--color-ghost-grey: #DEDEDE;--color-mid-grey: #CBCBCB;--color-accent: #FF9100;--color-accent-deep: #A05200;--color-muted: #8A8A8A;--color-border: rgba(0, 0, 0, .08);--color-border-dark: rgba(255, 255, 255, .12);--color-tok-keyword: #FF9100;--color-tok-comment: #6A9955;--color-tok-string: #CE9178;--color-tok-function: #DCDCAA;--color-tok-number: #B5CEA8;--color-tok-default: #D4D4D4;--font-sans: "Geist", "Noto Sans SC", system-ui, sans-serif;--font-mono: "Geist Mono", "JetBrains Mono", "Fira Code", monospace;--text-headline-2: clamp(2.5rem, 7vw, 5rem);--text-headline-1: clamp(1.875rem, 5vw, 3.5rem);--text-h1: clamp(1.75rem, 4vw, 2.75rem);--text-h2: clamp(1.375rem, 2.5vw, 2rem);--text-h3: clamp(1.125rem, 1.8vw, 1.375rem);--text-body-large: clamp(1rem, 1.4vw, 1.25rem);--text-body: clamp(.875rem, 1.1vw, 1rem);--text-body-small: clamp(.8125rem, 1vw, .9375rem);--text-mono-large: clamp(.875rem, 1vw, 1rem);--text-mono: clamp(.75rem, .9vw, .875rem);--text-mono-small: clamp(.6875rem, .8vw, .75rem);--weight-regular: 400;--weight-medium: 500;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--space-16: 4rem;--space-20: 5rem;--space-32: 8rem;--space-40: 10rem;--radius-4: 4px;--radius-8: 8px;--radius-full: 9999px;--ease-out: cubic-bezier(.23, 1, .32, 1);--ease-standard: cubic-bezier(.4, 0, .2, 1);--duration-fast: .15s;--duration-base: .28s;--duration-slow: .5s;--shadow-card: 0 1px 2px rgba(0,0,0,.04), 0 4px 12px rgba(0,0,0,.06);--shadow-raised: 0 4px 8px rgba(0,0,0,.08), 0 12px 32px rgba(0,0,0,.1);--shadow-dark: 0 1px 3px rgba(0,0,0,.4), 0 8px 24px rgba(0,0,0,.3);--dotted-bg: repeating-conic-gradient(rgba(255,255,255,.22) 0% 25%, transparent 0% 50%);--container-max: 1440px;--gutter-mobile: 1rem;--gutter-desktop: 5rem;--gutter-tablet: clamp(1rem, 25vw - 176px, 5rem);--gutter: var(--gutter-mobile)}@media(min-width:769px){:root{--gutter: var(--gutter-tablet)}}@media(min-width:1024px){:root{--gutter: var(--gutter-desktop)}}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font-sans);font-size:var(--text-body);font-weight:var(--weight-regular);line-height:1.5;color:var(--color-text);background-color:var(--color-off-white);overflow-x:hidden;min-height:100svh;display:flex;flex-direction:column}main{flex:1}h1,h2,h3,h4{font-family:var(--font-sans);font-weight:var(--weight-medium);letter-spacing:-.02em;line-height:1.1;color:var(--color-text);text-wrap:balance}h1{font-size:var(--text-h1)}h2{font-size:var(--text-h2)}h3{font-size:var(--text-h3)}p{max-width:65ch;color:var(--color-dark-grey);line-height:1.6}a{color:inherit;text-decoration:none;transition:color var(--duration-fast) var(--ease-standard)}img{display:block;max-width:100%;height:auto}:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}#hero :focus-visible,#intro :focus-visible,#internship :focus-visible,#honors :focus-visible{outline-color:var(--color-accent-deep)}.mono-label{font-family:var(--font-mono);font-size:var(--text-mono);font-weight:var(--weight-regular);text-transform:uppercase;letter-spacing:.02em;color:var(--color-dark-grey)}.mono-label--dark{color:var(--color-ghost-grey)}.mono-label--accent{color:var(--color-accent)}.container{width:100%;max-width:var(--container-max);margin:0 auto;padding:0 var(--gutter)}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.text-balance{text-wrap:balance}.text-lead{font-size:var(--text-body-large);max-width:60ch}.text-lead--spaced{margin-bottom:var(--space-10)}.object-bottom{object-position:center 90%}.js-count{display:inline-block;font-variant-numeric:tabular-nums}section[id]{scroll-margin-top:0}#projects{scroll-margin-top:96px}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}::selection{background-color:#ff910040;color:var(--color-text)}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--color-off-white)}::-webkit-scrollbar-thumb{background:#00000026;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#00000040}@keyframes cursorBlink{0%,49.9%{opacity:1}50%,to{opacity:0}}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.animate-on-scroll{opacity:1}.anim .animate-on-scroll{opacity:0}.anim .animate-on-scroll.is-visible{animation-name:fadeUp;animation-duration:.7s;animation-timing-function:var(--ease-out);animation-fill-mode:both}.anim .stagger-1{animation-delay:.06s}.anim .stagger-2{animation-delay:.12s}.anim .stagger-3{animation-delay:.18s}.anim .stagger-4{animation-delay:.24s}.scroll-progress{position:fixed;top:0;left:0;width:100%;height:2px;background:var(--color-accent);transform:scaleX(0);transform-origin:0 50%;pointer-events:none;z-index:150}@media(prefers-reduced-motion:reduce){.anim .animate-on-scroll{opacity:1}.anim .animate-on-scroll.is-visible{animation:none}}.text-watermark{position:relative;overflow:hidden}.text-watermark:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='600' height='300'%3E%3Cg transform='rotate(-15 300 150)' fill='white' fill-opacity='0.045' font-family='monospace' font-size='16'%3E%3Ctext x='0' y='48'%3EROS2 · LQR · VMC · ROBOTICS · RL · FREERTOS ·%3C/text%3E%3Ctext x='0' y='96'%3EROS2 · LQR · VMC · ROBOTICS · RL · FREERTOS ·%3C/text%3E%3Ctext x='0' y='144'%3EROS2 · LQR · VMC · ROBOTICS · RL · FREERTOS ·%3C/text%3E%3Ctext x='0' y='192'%3EROS2 · LQR · VMC · ROBOTICS · RL · FREERTOS ·%3C/text%3E%3Ctext x='0' y='240'%3EROS2 · LQR · VMC · ROBOTICS · RL · FREERTOS ·%3C/text%3E%3C/g%3E%3C/svg%3E");background-size:600px 300px;background-repeat:repeat;pointer-events:none;z-index:0}.text-watermark>*{position:relative;z-index:1}.char-matrix-bg{position:absolute;top:0;right:0;bottom:0;left:0;overflow:hidden;pointer-events:none;z-index:0}.char-matrix-bg canvas{display:block;width:100%;height:100%}.term-divider{display:flex;align-items:center;gap:1em;font-family:var(--font-mono);font-size:1.0625rem;color:var(--color-ghost-grey);border-top:1px solid var(--color-border-dark);border-bottom:1px solid var(--color-border-dark);max-width:none;padding:14px 20px;margin:0 calc(var(--space-2) - var(--gutter)) var(--space-10)}@media(min-width:1024px){.term-divider{margin-left:calc(var(--space-8) - var(--gutter));margin-right:calc(var(--space-8) - var(--gutter))}}.term-divider__cmd{white-space:nowrap;overflow:hidden}.term-divider__dots{display:flex;gap:7px;flex-shrink:0}.term-divider__dots span{width:11px;height:11px;border-radius:50%;background:#ffffff2e}.term-divider__prompt{color:var(--color-accent);margin-right:.5em}.term-divider__cursor{display:inline-block;width:.55em;height:1.05em;background:var(--color-accent);vertical-align:text-bottom;margin-left:.35em;animation:term-blink 1.1s steps(1) infinite}@keyframes term-blink{50%{opacity:0}}@media(prefers-reduced-motion:reduce){.term-divider__cursor{animation:none}}.cta-split{display:inline-flex;align-items:stretch;height:48px;background:var(--color-black-deep);background-image:var(--dotted-bg);background-size:4px 4px;border:1px solid var(--color-border-dark);border-radius:var(--radius-8);overflow:hidden;box-shadow:var(--shadow-card);text-decoration:none;transition:transform var(--duration-base) var(--ease-out),box-shadow var(--duration-base) var(--ease-out)}.cta-split>*{position:relative;z-index:1}.cta-split:hover{transform:translateY(-2px);box-shadow:var(--shadow-raised)}.cta-split__left{display:flex;align-items:center;padding:0 28px;font-family:var(--font-mono);font-size:14px;font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--color-white)}.cta-split__right{position:relative;display:flex;align-items:center;justify-content:center;width:48px;font-size:22px;font-weight:700;-webkit-text-stroke:.5px currentColor;color:var(--color-accent);border-left:1px solid var(--color-border-dark);overflow:hidden}.cta-split__arrow{position:relative;z-index:0;display:block;line-height:1}.cta-split__right:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;background:var(--color-accent);transform:translate(-101%,101%);transition:transform .22s var(--ease-out) .05s}.cta-split__right:after{content:"↗";position:absolute;top:0;right:0;bottom:0;left:0;z-index:2;display:flex;align-items:center;justify-content:center;line-height:1;color:var(--color-black-deep);transform:translate(-40px,40px);transition:transform .16s cubic-bezier(.55,0,.9,1)}@media(hover:hover)and (pointer:fine){.cta-split:hover .cta-split__right:before{transform:translate(0);transition:transform .18s var(--ease-out)}.cta-split:hover .cta-split__right:after{transform:translate(0);transition:transform .26s var(--ease-out)}.cta-split:active .cta-split__right:after{animation:ctaArrowNudge .32s var(--ease-out) .02s}}@keyframes ctaArrowNudge{0%{transform:translate(0)}40%{transform:translate(5px,-5px)}to{transform:translate(0)}}.cta-split:active .cta-split__right:before{transform:translate(0);transition:transform .18s var(--ease-out)}.cta-split:active .cta-split__right:after{transform:translate(0)}.cta-split:active{transform:translateY(0);box-shadow:var(--shadow-card)}@media(prefers-reduced-motion:reduce){.cta-split__right:before,.cta-split__right:after,.cta-split__arrow{transition:none}.cta-split:hover .cta-split__right:after,.cta-split:active .cta-split__right:after{animation:none}}.tok-k{color:var(--color-tok-keyword)}.tok-c{color:var(--color-tok-comment)}.tok-s{color:var(--color-tok-string)}.tok-f{color:var(--color-tok-function)}.tok-n{color:var(--color-tok-number)}.hero__visual{display:none}.spiral-text__svg{width:100%;height:100%}.spiral-text__ring{transform-origin:50% 50%;transform-box:fill-box}.spiral-text__ring--r1{opacity:.18}.spiral-text__ring--r2{opacity:.38}.spiral-text__ring--r3{opacity:.62}.spiral-text__ring--r4{opacity:.84}html.spiral-on .spiral-text__ring--r1{animation:spiralSpin 160s linear infinite}html.spiral-on .spiral-text__ring--r2{animation:spiralSpin 150s linear infinite}html.spiral-on .spiral-text__ring--r3{animation:spiralSpin 140s linear infinite}html.spiral-on .spiral-text__ring--r4{animation:spiralSpin 130s linear infinite}html.spiral-on .spiral-text__ring--r5{animation:spiralSpin 120s linear infinite}html.spiral-on .spiral-text__ring--r6{animation:spiralSpin 110s linear infinite}html.spiral-on .spiral-text__ring--r7{animation:spiralSpin 100s linear infinite}html.spiral-on .spiral-text__ring--r8{animation:spiralSpin 90s linear infinite}html.spiral-on .spiral-text__ring--r9{animation:spiralSpin 80s linear infinite}html.spiral-on .spiral-text__ring--r10{animation:spiralSpin 70s linear infinite}html.spiral-on .spiral-text__ring--r11{animation:spiralSpin 60s linear infinite}html.spiral-on .spiral-text__ring--r12{animation:spiralSpin 55s linear infinite}html.spiral-on .spiral-text__ring--r13{animation:spiralSpin 50s linear infinite}html.spiral-on .spiral-text__ring--r14{animation:spiralSpin 45s linear infinite}html.spiral-on .spiral-text__ring--r15{animation:spiralSpin 42s linear infinite}html.spiral-on .spiral-text__ring--r16{animation:spiralSpin 40s linear infinite}@keyframes spiralSpin{to{transform:rotate(360deg)}}.hero__visual.is-paused .spiral-text__ring{animation-play-state:paused}@media(prefers-reduced-motion:reduce){html.spiral-on .spiral-text__ring{animation:none}}.footer__ascii{display:block;width:100%;max-width:640px;height:auto;-webkit-user-select:none;user-select:none}.footer__grid{display:grid;grid-template-columns:1fr 1fr;gap:48px}.footer__cta-title{font-size:20px;font-weight:500;color:var(--color-white);margin-bottom:16px}.footer__nav{display:flex;justify-content:flex-end;gap:64px}.footer__col{list-style:none;display:flex;flex-direction:column;gap:12px;margin:0;padding:0}.footer__col a{font-family:var(--font-mono);font-size:12px;color:var(--color-ghost-grey);text-align:right;transition:color var(--duration-fast) var(--ease-standard)}.footer__col a:hover{color:var(--color-white)}.footer__bottom{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;padding-top:24px;border-top:1px solid rgba(255,255,255,.1)}.footer__bottom span{font-family:var(--font-mono);font-size:10px;color:#ffffff8c;text-transform:uppercase;letter-spacing:.02em}.nav{position:fixed;top:32px;left:50%;transform:translate(-50%);z-index:100;display:flex;align-items:center;gap:24px;height:52px;padding:8px 20px 8px 12px;background:var(--color-black-deep);background-image:var(--dotted-bg);background-size:4px 4px;border:1px solid var(--color-border-dark);border-radius:10px;box-shadow:var(--shadow-dark);transition:transform var(--duration-base) var(--ease-out),opacity var(--duration-base) var(--ease-out)}.nav>*{position:relative;z-index:1}.nav__brand-link{display:flex;align-items:center;flex-shrink:0}.nav__brand{display:block;width:20px;height:20px}.nav--scrolled{transform:translate(-50%) scale(.96);opacity:.92}.nav__logo{font-family:var(--font-mono);font-size:13px;font-weight:500;color:var(--color-white);letter-spacing:.01em;text-transform:uppercase;white-space:nowrap}.nav__links{position:relative;display:flex;gap:4px;list-style:none}.nav__links-indicator{position:absolute;top:0;left:0;width:40px;height:0;background:#ffffff24;border-radius:10px;z-index:0;pointer-events:none;transition:transform var(--duration-base) var(--ease-out),width var(--duration-base) var(--ease-out),height var(--duration-base) var(--ease-out),top var(--duration-base) var(--ease-out)}.nav__links a{position:relative;z-index:1;font-family:var(--font-mono);font-size:11px;color:#ffffff8c;font-weight:var(--weight-regular);text-transform:uppercase;letter-spacing:.02em;padding:8px 12px;border-radius:10px;white-space:nowrap;transition:color var(--duration-fast) var(--ease-standard),background var(--duration-fast) var(--ease-standard)}.nav__links a:hover{color:var(--color-white);background:#ffffff14}.nav__links a.nav--active{color:var(--color-white)}.hero{min-height:100svh;display:grid;grid-template-columns:1fr;grid-template-rows:auto 1fr auto;align-items:center;padding:8rem var(--gutter) 4rem;position:relative;overflow:hidden;background:var(--color-off-white)}@media(min-width:1024px){.hero{grid-template-columns:repeat(12,1fr);grid-template-rows:1fr auto;padding:0 var(--gutter);gap:0;background:linear-gradient(to right,var(--color-off-white) 0%,var(--color-off-white) 50%,var(--color-black) 50%,var(--color-black) 100%)}.hero:after{content:"";position:absolute;top:0;right:0;bottom:0;left:50%;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='0.12'/%3E%3C/svg%3E");background-size:200px 200px;background-repeat:repeat;pointer-events:none;z-index:0;mix-blend-mode:overlay}}.hero__content{max-width:100%}@media(min-width:1024px){.hero__content{grid-column:1 / span 6;padding-top:4rem}}.hero__term{display:flex;align-items:center;gap:.6em;width:max-content;font-family:var(--font-mono),"Noto Sans SC";font-size:var(--text-body-large);color:var(--color-dark-grey);margin-bottom:var(--space-4);opacity:0;animation:fadeUp .7s var(--ease-out) .1s forwards}.hero__term-prompt{color:var(--color-accent-deep)}.hero__term-cursor{width:.55em;height:1.05em;background:var(--color-accent);animation:cursorBlink 1.1s infinite}@media(prefers-reduced-motion:reduce){.hero__term-cursor{animation:none}}.hero__title{font-size:min(var(--text-headline-2),calc((100vw - 2 * var(--gutter) - 16px) / 9),3rem);font-weight:var(--weight-medium);letter-spacing:-.03em;line-height:1;color:var(--color-text);margin-bottom:var(--space-6);text-wrap:balance;opacity:0;animation:fadeUp .7s var(--ease-out) .2s forwards}@media(min-width:1024px){.hero__title{font-size:min(var(--text-headline-2),calc((50vw - var(--gutter)) / 9))}}.hero__subtitle{font-size:var(--text-body-large);color:var(--color-dark-grey);font-weight:var(--weight-regular);max-width:52ch;line-height:1.6;margin-bottom:var(--space-10);opacity:0;animation:fadeUp .7s var(--ease-out) .35s forwards}.hero__cta{opacity:0;animation:fadeUp .7s var(--ease-out) .5s forwards;display:inline-flex}.hero__contact{display:flex;align-items:center;gap:var(--space-3);font-family:var(--font-mono);font-size:var(--text-mono);color:var(--color-dark-grey);margin-top:var(--space-6);opacity:0;animation:fadeUp .7s var(--ease-out) .6s forwards}.hero__contact a{border-bottom:1px solid var(--color-mid-grey);transition:color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard)}.hero__contact a:hover{color:var(--color-accent);border-color:var(--color-accent)}@media(min-width:1024px){.hero__visual{grid-column:7 / span 6;grid-row:1 / -1;display:block;position:static;pointer-events:none;z-index:1}.hero__visual .spiral-text__svg{position:absolute;top:50%;left:50%;margin-left:25vw;transform:translate(-50%,-50%);width:72.5vw;height:auto;aspect-ratio:1 / 1;max-height:none;clip-path:inset(0 0 0 calc(7.25vw + 80px))}}.section{padding:var(--space-20) var(--gutter);position:relative}@media(min-width:769px)and (max-width:1023.98px){.section{padding-top:clamp(6rem,12.5vw,8rem)}}@media(min-width:1024px){.section{padding:var(--space-32) var(--gutter) var(--space-40)}}.section--dark{background:var(--color-black);color:var(--color-white)}#projects{padding-top:0}@media(max-width:767px){#projects{padding-top:var(--space-12)}}#techstack{padding-top:var(--space-16)}@media(max-width:767px){#techstack{padding-top:var(--space-12)}}@media(min-width:769px)and (max-width:1023.98px){#techstack{padding-top:clamp(6rem,12.5vw,8rem)}}.section--dark .section__title,.section--dark h1,.section--dark h2,.section--dark h3{color:var(--color-white)}.section--dark p,.section--dark .section__kicker{color:var(--color-ghost-grey)}.section__header{margin-bottom:var(--space-12)}@media(min-width:1024px){.section__header{margin-bottom:var(--space-20);display:grid;grid-template-columns:repeat(12,1fr);gap:var(--space-4)}.section__header>*{grid-column:1 / span 8}}.section__kicker{font-family:var(--font-mono);font-size:var(--text-mono-large);color:var(--color-dark-grey);text-transform:uppercase;letter-spacing:.02em;margin-bottom:var(--space-4)}.section__title{font-size:var(--text-headline-1);font-weight:var(--weight-medium);letter-spacing:-.025em;line-height:1.1;text-wrap:balance;max-width:18ch}.section__body{max-width:100%}#intro .section__body{display:grid;grid-template-columns:1fr;gap:var(--space-8);align-items:start}#intro .section__body>div:first-child{display:grid;grid-template-columns:1fr;gap:var(--space-6)}#intro .section__body>div:first-child>p:first-of-type{font-size:var(--text-body-large)}#intro .section__body>img{width:100%;aspect-ratio:4 / 3;object-fit:cover;object-position:20% 35%;border-radius:var(--radius-8)}.project-list{display:flex;flex-direction:column;gap:var(--space-20)}@media(min-width:1024px){.project-list{gap:var(--space-32)}}.project-list>.project-item+.project-item{border-top:1px solid var(--color-border-dark);padding-top:var(--space-20)}.project-list--bordered{border-top:1px solid var(--color-border-dark);padding-top:var(--space-20);margin-top:var(--space-20)}@media(min-width:1024px){.project-list>.project-item+.project-item,.project-list--bordered{padding-top:var(--space-32)}.project-list--bordered{margin-top:var(--space-32)}}.project-item{display:flex;flex-direction:column;gap:var(--space-6)}@media(min-width:1024px){.project-item{display:grid;grid-template-columns:132px 1fr 1fr;gap:var(--space-8);align-items:start}}.project-item__header{display:flex;flex-direction:column;gap:var(--space-2)}.project-item__num{display:flex;align-items:center}.project-item__role{font-family:var(--font-mono);font-size:var(--text-mono);color:var(--color-ghost-grey);text-transform:uppercase;letter-spacing:.02em;white-space:nowrap}.project-item__title{font-size:var(--text-headline-1);font-weight:var(--weight-medium);color:var(--color-white);letter-spacing:-.025em;line-height:1.1;margin-bottom:var(--space-4);text-wrap:balance;grid-column:2 / -1}.project-item__desc{font-size:var(--text-body-large);color:var(--color-ghost-grey);line-height:1.65;max-width:70ch;margin-bottom:var(--space-6);grid-column:2 / 3}.project-item__tags{display:flex;gap:var(--space-4);flex-wrap:wrap;margin-bottom:var(--space-8);grid-column:2 / -1}.project-tag{font-family:var(--font-mono);font-size:var(--text-mono);color:var(--color-ghost-grey);padding:.25rem .75rem;border:1px solid var(--color-border-dark);border-radius:var(--radius-4);transition:all var(--duration-fast) var(--ease-standard)}.project-tag:hover{color:var(--color-white);border-color:var(--color-white)}@media(hover:hover)and (pointer:fine){.project-tag{will-change:transform;transition:transform .28s cubic-bezier(.23,1,.32,1),color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard)}.project-tag.is-pulled{color:var(--color-accent);border-color:#ff910080}}.project-item__section{margin-bottom:var(--space-8);grid-column:2 / -1}.project-item__section>.mono-label{margin-bottom:var(--space-4)}.project-item__section--results{grid-column:3 / 4}.project-item__results{list-style:none;padding:0;display:flex;flex-direction:column;gap:var(--space-3)}.project-item__results li{font-size:var(--text-body-large);color:var(--color-ghost-grey);padding-left:var(--space-6);position:relative}.project-item__results li:before{content:"→";position:absolute;left:0;color:var(--color-white);font-family:var(--font-mono)}.project-item__image{grid-column:2 / -1;margin-top:var(--space-4)}.project-item__image img{width:100%;aspect-ratio:16 / 9;object-fit:cover;border-radius:var(--radius-8);transition:transform var(--duration-slow) var(--ease-out)}.project-item:hover .project-item__image img{transform:scale(1.01)}.project-item__video{grid-column:2 / -1;margin-top:var(--space-4)}.project-item__video .video-cover--hero,.project-item__video .video-cover--hero video{border-radius:var(--radius-8)}.video-grid{display:grid;grid-template-columns:1fr;gap:var(--space-4)}@media(min-width:768px){.video-grid{grid-template-columns:repeat(3,1fr);gap:var(--space-4)}}.video-cover__label{display:block;line-height:1.6;font-family:var(--font-mono);font-size:var(--text-mono-small);color:var(--color-ghost-grey);text-align:center;margin-top:var(--space-2);text-transform:uppercase;letter-spacing:.02em}.tech-filter{display:flex;gap:var(--space-6);flex-wrap:wrap;margin-bottom:var(--space-16);padding-bottom:var(--space-4);border-bottom:1px solid var(--color-border-dark)}.tech-filter__btn{font-family:var(--font-mono);font-size:var(--text-mono);color:#ffffff80;background:transparent;border:none;padding:var(--space-2) 0;cursor:pointer;text-transform:uppercase;letter-spacing:.02em;position:relative;transition:color var(--duration-fast) var(--ease-standard)}.tech-filter__btn:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--color-white);transform:scaleX(0);transform-origin:left;transition:transform var(--duration-base) var(--ease-out)}.tech-filter__btn:hover{color:var(--color-ghost-grey)}.tech-filter__btn.is-active{color:var(--color-white)}.tech-filter__btn.is-active:after{transform:scaleX(1)}.tech-cat{display:flex;flex-direction:column;gap:var(--space-4);padding:var(--space-8) 0;border-bottom:1px solid var(--color-border-dark);transition:opacity var(--duration-base) var(--ease-out)}@media(min-width:1024px){.tech-cat{flex-direction:row;gap:var(--space-8);padding:var(--space-10) 0}}.tech-cat__title{font-size:var(--text-h2);font-weight:var(--weight-medium);color:var(--color-white);letter-spacing:-.02em;line-height:1.2}.tech-cat__list{list-style:none;padding:0;display:grid;grid-template-columns:1fr;gap:var(--space-2) var(--space-8)}@media(min-width:768px){.tech-cat__list{grid-template-columns:repeat(2,1fr)}}.tech-cat__list li{font-size:var(--text-body);color:var(--color-ghost-grey);padding-left:var(--space-6);position:relative;line-height:1.5}.tech-cat__list li:before{content:"—";position:absolute;left:0;color:#ffffff4d;font-family:var(--font-mono)}.chip-board{border:2px solid rgba(255,255,255,.14);border-radius:var(--radius-8);background:#0000004d;padding:34px 28px}.chip-board__header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;padding-bottom:16px;border-bottom:1px solid rgba(255,255,255,.12)}.chip-board__title{font-family:var(--font-mono);font-size:14px;letter-spacing:.25em;color:var(--color-white)}.chip-board__sub{font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;color:var(--color-ghost-grey)}.chip-board__grid{display:grid;grid-template-columns:1fr;gap:18px;padding-top:20px}@media(min-width:768px){.chip-board__grid{grid-template-columns:repeat(2,1fr)}}@media(min-width:1280px){.chip-board__grid{grid-template-columns:repeat(3,1fr)}}.chip-board .tech-cat{flex-direction:column;gap:12px;padding:24px 20px;min-height:150px;border:1px solid rgba(255,255,255,.1);border-bottom:1px solid rgba(255,255,255,.1);border-radius:6px;background:#ffffff05;transition:opacity var(--duration-base) var(--ease-out),border-color var(--duration-base) var(--ease-out)}.chip-board .tech-cat:hover{border-color:#ffffff47}.chip-board .tech-cat.is-dimmed{opacity:.2}.chip-board .tech-cat__head{display:flex;align-items:center;justify-content:space-between}.chip-board .tech-cat__label{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--color-accent)}.chip-board .tech-cat__title{font-size:var(--text-h3);margin:4px 0 14px}.chip-board .tech-cat__list{display:flex;flex-wrap:wrap;gap:8px}.chip-board .tech-cat__list li{padding:6px 14px;border:1px solid rgba(255,255,255,.12);border-radius:4px;font-size:var(--text-mono-small);color:var(--color-ghost-grey);line-height:1.5}.chip-board .tech-cat__list li:before{content:none}.chip-board .tech-cat__list--rated{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.chip-board .tech-cat__list--rated li{display:flex;flex-direction:column;align-items:stretch;gap:9px;min-width:0;padding:10px 12px 11px;background:#ffffff05;line-height:1.4;transition:border-color var(--duration-base) var(--ease-out)}.chip-board .tech-cat__list--rated li:hover{border-color:#ffffff47}.tech-skill__name{color:var(--color-ghost-grey);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tech-skill__meter{display:flex;align-items:center;gap:8px}.tech-skill__track{flex:1;min-width:0;height:3px;border-radius:2px;background:#ffffff1f;overflow:hidden}.tech-skill__fill{display:block;height:100%;border-radius:2px;background:#c8c1b2}.tech-skill__lv{flex:0 0 auto;font-family:var(--font-mono);font-size:10px;letter-spacing:.02em;color:#fff6}.chip-board .tech-cat__list--rated li[data-lv="5"] .tech-skill__fill{width:100%}.chip-board .tech-cat__list--rated li[data-lv="4"] .tech-skill__fill{width:80%}.chip-board .tech-cat__list--rated li[data-lv="3"] .tech-skill__fill{width:60%}.chip-board .tech-cat__list--rated li[data-lv="2"] .tech-skill__fill{width:40%}.chip-board .tech-cat__list--rated li[data-lv="1"] .tech-skill__fill{width:20%}.chip-board .tech-cat__list--rated li[data-lv="5"] .tech-skill__lv{color:#fffc}.chip-board .tech-cat__list--rated li[data-lv="4"] .tech-skill__lv{color:#ffffffad}.chip-board .tech-cat__list--rated li[data-lv="3"] .tech-skill__lv{color:#ffffff8c}.chip-board .tech-cat__list--rated li[data-lv="2"] .tech-skill__lv{color:#ffffff75}.chip-board .tech-cat__list--rated li[data-lv="1"] .tech-skill__lv{color:#fff6}@media(prefers-reduced-motion:reduce){.chip-board .tech-cat__list--rated li{transition:none}}.chip-board__pins{display:flex;justify-content:space-between;gap:4px;padding:14px 8px 0}.chip-board__pins span{width:12px;height:12px;border:1.5px solid rgba(255,255,255,.25);border-radius:50%}.tools-shelf{margin-top:40px;padding:28px 24px;border:2px solid rgba(255,255,255,.14);border-radius:var(--radius-8);background:#0000004d}.tools-shelf__header{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;padding-bottom:16px;border-bottom:1px solid rgba(255,255,255,.12);margin-bottom:24px}.tools-shelf__label{font-family:var(--font-mono);font-size:13px;letter-spacing:.22em;text-transform:uppercase;color:var(--color-accent)}.tools-shelf__grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px 12px;justify-items:center}@media(min-width:768px){.tools-shelf__grid{grid-template-columns:repeat(9,1fr);gap:20px 10px}}.tool-icon{display:flex;flex-direction:column;align-items:center;gap:10px;transition:transform var(--duration-base) var(--ease-out);cursor:default}.tool-icon:hover{transform:translateY(-3px)}.tool-icon__img{width:48px;height:48px;object-fit:contain;filter:drop-shadow(0 2px 6px rgba(0,0,0,.4))}@media(min-width:1280px){.tool-icon__img{width:56px;height:56px}}.tool-icon--light{width:48px;height:48px;display:flex;align-items:center;justify-content:center;background:#fff;border-radius:12px}@media(min-width:1280px){.tool-icon--light{width:56px;height:56px;border-radius:14px}}.term-board{border:1px solid var(--color-border-dark);border-radius:var(--radius-8);background:#0a0a0a;overflow:hidden;box-shadow:var(--shadow-dark)}.term-board__bar{display:flex;align-items:center;gap:6px;padding:10px 14px;background:#141414;border-bottom:1px solid rgba(255,255,255,.1)}.term-board__dot{width:10px;height:10px;border-radius:50%}.term-board__dot:nth-child(1){background:#ff5f57}.term-board__dot:nth-child(2){background:#febc2e}.term-board__dot:nth-child(3){background:#28c840}.term-board__title{font-family:var(--font-mono);font-size:11px;color:#ffffff80;margin-left:8px;letter-spacing:.04em}.term-board__body{margin:0;padding:16px 20px;font-family:var(--font-mono);font-size:12.5px;line-height:1.8;color:var(--color-tok-default);overflow-x:auto}.term-board__body .tok-f{color:var(--color-tok-function)}.life-grid{display:grid;grid-template-columns:1fr;gap:var(--space-12)}@media(min-width:1024px){.life-grid{grid-template-columns:1fr 1fr;align-items:start}}.life-left{display:grid;grid-template-rows:auto 1fr;gap:var(--space-6);height:100%}.life-portrait{display:grid;grid-template-columns:1fr 1fr;gap:12px;min-height:0}.life-portrait__item{margin:0;min-height:0}.life-portrait__item img{width:100%;height:100%;object-fit:cover;border-radius:var(--radius-8);display:block}.life-gallery{display:grid;grid-template-columns:repeat(2,1fr);grid-auto-rows:1fr;gap:12px;height:100%}.life-gallery__item img{height:100%;object-fit:cover}.life-gallery__item{margin:0}.life-gallery__item img{width:100%;aspect-ratio:4 / 3;object-fit:cover;border-radius:var(--radius-8);display:block}.timeline-list{display:flex;flex-direction:column;gap:0}.timeline-list__item{display:flex;flex-direction:column;gap:var(--space-2);padding:28px 0;border-bottom:1px solid var(--color-border)}.section--dark .timeline-list__item{border-bottom-color:var(--color-border-dark)}.timeline-list__item:first-child{padding-top:0}.timeline-list__item:last-child{padding-bottom:0;border-bottom:none}@media(min-width:1024px){.timeline-list__item{flex-direction:row;gap:var(--space-8);padding:32px 0}}.timeline-list__date{font-family:var(--font-mono);font-size:var(--text-mono-large);color:var(--color-dark-grey);text-transform:uppercase;letter-spacing:.02em;flex-shrink:0;min-width:160px;padding-top:.15em}.section--dark .timeline-list__date{color:var(--color-ghost-grey)}.timeline-list__award{font-family:var(--font-mono);font-size:var(--text-mono);color:var(--color-dark-grey);letter-spacing:.02em;flex-shrink:0;align-self:flex-start;padding-top:.55em}.section--dark .timeline-list__award{color:var(--color-ghost-grey)}#internship .timeline-list__award{padding-top:.75em}#honors .timeline-list__award{font-size:var(--text-h3);font-weight:var(--weight-medium);color:var(--color-text);padding-top:.05em}.timeline-list__title{font-size:clamp(1.25rem,2.1vw,1.625rem);font-weight:var(--weight-medium);color:var(--color-text);letter-spacing:-.01em;line-height:1.3;text-wrap:balance;flex:1}.section--dark .timeline-list__title{color:var(--color-white)}#internship .timeline-list__date{min-width:190px}#internship .timeline-list__title{font-size:clamp(1.4375rem,2.4vw,1.875rem)}#internship .timeline-list__meta{font-size:var(--text-mono-large)}#internship .internship__list li{font-size:var(--text-body-large);line-height:1.8;max-width:66ch}#internship .internship__list li strong{font-weight:var(--weight-medium);color:var(--color-text)}#internship .internship__note{font-size:var(--text-body-small)}.timeline-list__content{display:flex;flex-direction:column;gap:var(--space-3);min-width:0;flex:1}.timeline-list__meta{font-family:var(--font-mono);font-size:var(--text-mono-small);color:var(--color-accent-deep);text-transform:uppercase;letter-spacing:.02em;padding-top:.2em}.internship__list{list-style:none;padding:0;margin:var(--space-2) 0 0;display:flex;flex-direction:column;gap:var(--space-3)}.internship__list li{font-size:var(--text-body);line-height:1.75;color:var(--color-dark-grey);padding-left:var(--space-6);position:relative;max-width:68ch}.internship__list li:before{content:"→";position:absolute;left:0;color:var(--color-accent);font-family:var(--font-mono)}.internship__note{font-family:var(--font-mono);font-size:var(--text-mono-small);color:var(--color-dark-grey);text-transform:uppercase;letter-spacing:.02em;margin:var(--space-2) 0 0}.video-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#0d0d0feb;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);align-items:center;justify-content:center;padding:var(--space-8)}.video-modal.is-open{display:flex}.video-modal__inner{position:relative;width:100%;max-width:960px;aspect-ratio:16 / 9;min-height:0;max-height:calc(100svh - 2 * var(--space-8))}.video-modal__content{position:relative;width:100%;height:100%}.video-modal__overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;border-radius:var(--radius-8);background:#0d0d0f8c;cursor:pointer}.video-modal__overlay[hidden]{display:none}.video-modal__play{display:flex;align-items:center;justify-content:center;width:72px;height:72px;padding-left:4px;border:1px solid rgba(255,255,255,.42);border-radius:50%;background:#0d0d0f80;color:var(--color-white);font-size:20px;line-height:1;cursor:pointer;transition:transform var(--duration-base) var(--ease-out),border-color var(--duration-fast) var(--ease-standard),color var(--duration-fast) var(--ease-standard)}.video-modal__play:hover{transform:scale(1.06);border-color:var(--color-accent);color:var(--color-accent)}.video-modal__play[hidden]{display:none}.video-modal__hint{margin:0;font-family:var(--font-mono);font-size:var(--text-mono-small);color:var(--color-muted)}.video-modal__inner iframe,.video-modal__inner video{width:100%;height:100%;border:none;border-radius:var(--radius-8)}.video-modal__inner video{object-fit:contain}.video-modal__close{position:absolute;top:-40px;right:0;background:none;border:none;color:var(--color-muted);font-size:var(--text-h3);cursor:pointer;transition:color var(--duration-fast)}.video-modal__close:hover{color:var(--color-white)}.video-cover{position:relative;display:block;width:100%;padding:0;border:none;background:none;font:inherit;color:inherit;text-align:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;border-radius:var(--radius-8);overflow:hidden}.video-cover img,.video-cover video{width:100%;aspect-ratio:16 / 9;object-fit:cover;display:block}.video-cover video{pointer-events:none}.qr-modal__inner{position:relative;width:100%;max-width:400px;padding:var(--space-8);border-radius:var(--radius-8);background:var(--color-off-white);text-align:center}.qr-modal__title{font-family:var(--font-mono);font-size:var(--text-mono);color:var(--color-dark-grey);text-transform:uppercase;letter-spacing:.02em;margin-bottom:var(--space-6)}.qr-modal__img{display:block;width:100%;height:auto;max-width:300px;margin:0 auto;border-radius:var(--radius-4)}.qr-modal__id{margin-top:var(--space-6);font-size:var(--text-body);color:var(--color-text)}.qr-modal__id strong{font-family:var(--font-mono);font-weight:var(--weight-medium)}.qr-modal__hint{margin-top:var(--space-2);font-size:var(--text-body-small);color:var(--color-dark-grey);line-height:1.6}.qr-modal .contact-chip{margin-top:var(--space-4);color:var(--color-dark-grey);border-color:var(--color-mid-grey)}.qr-modal .contact-chip:hover{color:var(--color-text);border-color:var(--color-dark-grey)}.qr-modal .contact-chip.is-copied{color:var(--color-accent-deep);border-color:var(--color-accent-deep)}.video-cover__play{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;background:#0d0d0f40;transition:background var(--duration-base) var(--ease-out)}.video-cover:hover .video-cover__play{background:#0d0d0f26}.video-cover__play-icon{position:relative;width:64px;height:64px;border-radius:50%;background:#0d0d0f6b;border:1px solid rgba(255,255,255,.38);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;transition:transform var(--duration-base) var(--ease-out),background var(--duration-fast) var(--ease-standard)}.video-cover:hover .video-cover__play-icon{transform:scale(1.1);background:#0d0d0f9e}.video-cover__ring{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;transform:rotate(-90deg);pointer-events:none}.video-cover__ring circle{fill:none;stroke:var(--color-accent);stroke-width:2;stroke-linecap:round;stroke-dasharray:194.78;stroke-dashoffset:194.78;transition:stroke-dashoffset .22s var(--ease-out)}.video-cover:hover .video-cover__ring circle{stroke-dashoffset:0;transition:stroke-dashoffset .65s var(--ease-standard)}@media(prefers-reduced-motion:reduce){.video-cover__ring circle{transition:none}}.video-cover__play-icon:before{content:"";display:block;width:0;height:0;border-style:solid;border-width:10px 0 10px 18px;border-color:transparent transparent transparent var(--color-white);margin-left:4px}.footer{background:var(--color-black-deep);color:var(--color-white);padding:96px var(--gutter) 48px;display:flex;flex-direction:column;gap:48px;border-top:1px solid var(--color-border-dark);margin-top:auto}@media(max-width:1023.98px){.footer{padding:64px var(--gutter) 32px}}.contact-list{display:flex;flex-direction:column;gap:0}.contact-item-big{display:flex;align-items:center;gap:var(--space-4);padding:var(--space-6) 0;border-bottom:1px solid var(--color-border-dark);transition:all var(--duration-base) var(--ease-out)}.contact-item-big:first-child{padding-top:0}.contact-item-big:last-child{padding-bottom:0;border-bottom:none}.contact-item-big:hover{padding-left:var(--space-4)}.contact-item-big:hover .contact-item-big__value{color:var(--color-white)}.contact-item-big__icon{width:40px;height:40px;flex-shrink:0;transition:transform var(--duration-base) var(--ease-out)}.contact-item-big:hover .contact-item-big__icon{transform:scale(1.05)}.contact-item-big__label{font-family:var(--font-mono);font-size:var(--text-mono);color:var(--color-ghost-grey);text-transform:uppercase;letter-spacing:.02em;margin-bottom:var(--space-2)}.contact-item-big__value{font-size:var(--text-body-large);font-weight:var(--weight-medium);color:var(--color-white);letter-spacing:-.01em;transition:color var(--duration-fast) var(--ease-standard)}.contact-item-big__actions{display:flex;align-items:center;gap:var(--space-2);flex-shrink:0}.contact-chip{min-width:5.5em;padding:5px 10px;border:1px solid var(--color-border-dark);border-radius:var(--radius-4);background:none;color:var(--color-ghost-grey);font-family:var(--font-mono);font-size:var(--text-mono-small);letter-spacing:.02em;cursor:pointer;transition:color var(--duration-fast) var(--ease-standard),border-color var(--duration-fast) var(--ease-standard)}.contact-chip:hover{color:var(--color-white);border-color:var(--color-mid-grey)}.contact-chip.is-copied{color:var(--color-accent);border-color:var(--color-accent)}@media(max-width:768px){.contact-chip{min-width:4.5em;padding:5px 8px}}@media(max-width:1023.98px){.hero__visual{display:none}}@media(max-width:768px){.nav{top:16px;height:44px;padding:6px 14px 6px 10px;gap:8px;max-width:calc(100vw - 2rem);border-radius:10px}.nav__brand{width:20px;height:20px}.nav__logo{font-size:11px}.nav__links{gap:2px}.nav__links a{font-size:10px;padding:6px 8px}.hero{padding-top:6rem;min-height:90svh}.hero__title{line-height:1.05}.hero__visual{display:none}.cta-split{height:44px}.cta-split__left{padding:0 20px;font-size:12px}.cta-split__right{width:44px;font-size:20px}.section{padding:var(--space-16) var(--gutter)}.section__header{margin-bottom:var(--space-8)}.project-list{gap:var(--space-16)}.project-list>.project-item+.project-item{padding-top:var(--space-16)}.project-item__title{font-size:var(--text-h1)}.tech-cat__title{font-size:var(--text-h2)}.tech-filter{gap:var(--space-4);margin-bottom:var(--space-8);overflow-x:auto;flex-wrap:nowrap;-webkit-overflow-scrolling:touch;padding-bottom:var(--space-2)}.tech-filter__btn{flex-shrink:0;font-size:var(--text-mono-small)}.timeline-list__item{padding:var(--space-6) 0}.timeline-list__title{font-size:var(--text-h3)}.contact-item-big{padding:var(--space-6) 0;gap:var(--space-4)}.contact-item-big__icon{width:40px;height:40px}.contact-item-big__value{font-size:var(--text-h3)}.footer{padding:64px 20px 32px;gap:32px}.footer__grid{grid-template-columns:1fr;gap:32px}.footer__nav{justify-content:flex-start;gap:48px}.footer__col a{text-align:left}.footer__bottom{flex-direction:column;align-items:flex-start;gap:8px}.video-grid{grid-template-columns:1fr}.term-divider{font-size:.875rem;padding:11px var(--gutter)}.term-divider__dots span{width:9px;height:9px}.term-divider__path{display:none}}@media(max-width:480px){.nav__links li:first-of-type{display:none}.hero__cta .cta-split{width:100%}.footer__nav{flex-direction:column;gap:24px}}
