*,*:before,*:after{box-sizing:border-box}body,h1,h2,h3,h4,h5,h6,p,figure,blockquote,dl,dd{margin:0}html{scroll-behavior:smooth;color-scheme:light dark}body{min-height:100vh;line-height:1.6;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}#root,#app{isolation:isolate}ul[role=list],ol[role=list]{list-style:none;padding:0}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}:root{--gray-50: oklch(98% .005 250);--gray-100: oklch(96% .005 250);--gray-200: oklch(90% .008 250);--gray-300: oklch(83% .008 250);--gray-400: oklch(65% .01 250);--gray-500: oklch(55% .01 250);--gray-600: oklch(44% .01 250);--gray-700: oklch(37% .01 250);--gray-800: oklch(27% .01 250);--gray-900: oklch(20% .015 250);--gray-950: oklch(14% .015 250);--accent: oklch(55% .2 260);--accent-hover: oklch(48% .2 260);--accent-subtle: oklch(92% .04 260);--accent-text: oklch(42% .15 260);--color-bg: oklch(96% .005 80);--color-bg-subtle: var(--gray-50);--color-text: var(--gray-900);--color-text-secondary: var(--gray-500);--color-text-tertiary: var(--gray-400);--color-border: var(--gray-200);--color-border-subtle: var(--gray-100);--color-surface: oklch(99.5% .003 250);--color-surface-raised: oklch(99.5% .003 250);--color-link: var(--accent);--color-link-hover: var(--accent-hover);--font-display: "Cormorant Garamond", Georgia, "Times New Roman", serif;--font-sans: "Outfit", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace;--text-xs: .75rem;--text-sm: .875rem;--text-base: 1rem;--text-lg: 1.125rem;--text-xl: 1.25rem;--text-2xl: 1.5rem;--text-3xl: 1.875rem;--text-4xl: 2.25rem;--text-5xl: 3rem;--text-6xl: 3.75rem;--text-hero: clamp(3rem, 8vw, 7rem);--text-display: clamp(2rem, 4vw, 3.75rem);--text-heading: clamp(1.5rem, 3vw, 2.25rem);--leading-tight: 1.2;--leading-normal: 1.6;--leading-relaxed: 1.75;--tracking-tight: -.025em;--tracking-normal: 0;--tracking-wide: .025em;--weight-normal: 400;--weight-medium: 500;--weight-semibold: 600;--weight-bold: 700;--space-1: .25rem;--space-2: .5rem;--space-3: .75rem;--space-4: 1rem;--space-5: 1.25rem;--space-6: 1.5rem;--space-8: 2rem;--space-10: 2.5rem;--space-12: 3rem;--space-16: 4rem;--space-20: 5rem;--space-24: 6rem;--space-32: 8rem;--container-max: 1120px;--container-padding: var(--space-6);--section-gap: var(--space-32);--radius-sm: 4px;--radius-md: 8px;--radius-lg: 12px;--radius-full: 9999px;--ease-out-quart: cubic-bezier(.25, 1, .5, 1);--ease-out-expo: cubic-bezier(.16, 1, .3, 1);--ease-in: cubic-bezier(.7, 0, .84, 0);--ease-in-out: cubic-bezier(.65, 0, .35, 1);--transition-fast: .15s var(--ease-out-quart);--transition-base: .2s var(--ease-out-quart);--transition-slow: .3s var(--ease-out-quart);--shadow-sm: 0 1px 2px oklch(0% 0 0 / .04);--shadow-md: 0 2px 8px oklch(0% 0 0 / .06), 0 1px 2px oklch(0% 0 0 / .04);--shadow-lg: 0 8px 24px oklch(0% 0 0 / .08), 0 2px 8px oklch(0% 0 0 / .04);--z-base: 0;--z-above: 10;--z-nav: 100;--z-modal: 200;--z-toast: 300}[data-theme=dark]{--color-bg: oklch(12% .015 250);--color-bg-subtle: var(--gray-900);--color-text: var(--gray-50);--color-text-secondary: var(--gray-400);--color-text-tertiary: var(--gray-600);--color-border: var(--gray-800);--color-border-subtle: var(--gray-900);--color-surface: oklch(16% .015 250);--color-surface-raised: oklch(20% .015 250);--accent-subtle: oklch(25% .06 260);--accent-text: oklch(78% .12 260)}.container{max-width:var(--container-max);margin-inline:auto;padding-inline:var(--container-padding)}.sr-only,.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.sr-only-focusable:focus,.sr-only-focusable:focus-within{position:static;width:auto;height:auto;padding:inherit;margin:inherit;overflow:visible;clip:auto;white-space:normal}.skip-link{position:absolute;top:-100%;left:var(--space-4);z-index:9999;padding:var(--space-2) var(--space-4);background:var(--accent);color:#fff;border-radius:var(--radius-md);font-size:var(--text-sm);font-weight:600;text-decoration:none}.skip-link:focus{top:var(--space-2)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.text-balance{text-wrap:balance}.navbar{position:fixed;top:0;left:0;right:0;z-index:var(--z-nav);background:transparent;border-bottom:1px solid transparent;transition:background .3s var(--ease-out-expo),border-color .3s var(--ease-out-expo),transform .3s var(--ease-out-expo)}.navbar.is-scrolled{background:#f3f1eed9;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom-color:var(--color-border-subtle)}[data-theme=dark] .navbar.is-scrolled{background:#0a0a0ad9}.navbar.is-hidden{transform:translateY(-100%)}.nav-inner{display:flex;align-items:center;justify-content:space-between;height:64px;max-width:var(--container-max);margin-inline:auto;padding-inline:var(--container-padding)}.nav-logo{font-weight:600;font-size:var(--text-lg);letter-spacing:-.02em;color:var(--color-text);text-decoration:none}.nav-menu{display:flex;align-items:center;gap:var(--space-4)}.nav-links{display:flex;align-items:center;gap:var(--space-8);list-style:none;margin:0;padding:0}.nav-links a{font-size:var(--text-sm);font-weight:500;color:var(--color-text-secondary);text-decoration:none;transition:color .2s var(--ease-out-quart)}.nav-links a:hover{color:var(--color-text)}.nav-links a.is-active{color:var(--accent);font-weight:600}.theme-toggle{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;border-radius:var(--radius-md);background:transparent;color:var(--color-text-secondary);cursor:pointer;transition:background .15s var(--ease-out-quart)}.theme-toggle:hover{background:var(--color-bg-subtle)}.menu-toggle{display:none;flex-direction:column;justify-content:center;gap:5px;width:40px;height:40px;border:none;background:transparent;cursor:pointer;padding:var(--space-2)}.menu-toggle span{display:block;width:100%;height:2px;background:var(--color-text);border-radius:var(--radius-full);transition:transform var(--transition-fast),opacity var(--transition-fast)}.nav-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000004d;opacity:0;pointer-events:none;transition:opacity var(--transition-base);z-index:calc(var(--z-nav) - 1)}.nav-backdrop.is-open{opacity:1;pointer-events:auto}@media(max-width:768px){.menu-toggle{display:flex}.nav-menu{position:fixed;top:64px;right:0;width:280px;height:calc(100vh - 64px);background:var(--color-surface);border-left:1px solid var(--color-border);transform:translate(100%);transition:transform var(--transition-slow);z-index:var(--z-nav);overflow-y:auto}.nav-menu.is-open{transform:translate(0)}.nav-links{flex-direction:column;align-items:stretch;gap:0;padding:var(--space-4)}.nav-links a{display:block;padding:var(--space-3) var(--space-4);font-size:var(--text-base)}}.hero{min-height:100vh;display:flex;align-items:center;padding-block:var(--space-24);position:relative}[data-theme=dark] .hero{color:#eceff2}@media(prefers-reduced-motion:reduce){.hero:before{animation:none}}.hero>.container{position:relative;z-index:1}.hero-content{max-width:720px;padding-block:var(--space-12)}@keyframes heroReveal{0%{opacity:0;transform:translateY(24px)}to{opacity:1;transform:translateY(0)}}.hero [data-animate]{opacity:0;animation:heroReveal .5s var(--ease-out-expo) forwards;animation-delay:var(--animate-delay, 0ms)}.hero-meta{display:flex;align-items:center;gap:0;margin-bottom:var(--space-6)}.hero-meta-link{display:flex;align-items:center;justify-content:center;width:32px;height:32px;color:#6d7277;transition:color var(--transition-fast);text-decoration:none;display:inline-flex}.hero-meta-link svg{width:18px;height:18px;display:block}.hero-meta-link:hover{color:var(--accent)}[data-theme=dark] .hero-meta-link{color:#5f6469}.hero-name{font-family:var(--font-display);font-size:var(--text-hero);font-weight:400;font-style:normal;line-height:.85;letter-spacing:.1em;color:var(--color-text);margin:0;text-transform:uppercase;transform-origin:left top;animation:heroNamePulse 6s var(--ease-in-out) infinite}@keyframes heroNamePulse{0%{letter-spacing:.1em;transform:scaleX(.55) scaleY(1.4)}50%{letter-spacing:.2em;transform:scaleX(.62) scaleY(1.32)}to{letter-spacing:.1em;transform:scaleX(.55) scaleY(1.4)}}@media(prefers-reduced-motion:reduce){.hero-name{animation:none;letter-spacing:.1em;transform:scaleX(.55) scaleY(1.4)}}.hero-name-sub{font-family:var(--font-display);font-size:var(--text-sm);font-weight:400;font-style:normal;letter-spacing:.15em;color:var(--color-text-tertiary);opacity:.3;margin-top:var(--space-2);padding-left:.3em;display:inline-flex;align-items:baseline;gap:var(--space-2);transform:scaleX(.55);transform-origin:left top}.hero-name-cn{font-family:"Noto Serif TC",serif;font-weight:450;letter-spacing:.25em;opacity:.6}.hero-tags{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-2);margin:var(--space-6) 0 0;position:relative;z-index:1}.hero-tag{font-size:var(--text-xs);font-weight:500;padding:var(--space-1) var(--space-3);border-radius:var(--radius-full);border:1px solid var(--color-border);color:var(--color-text-secondary);letter-spacing:var(--tracking-normal);display:inline-flex;align-items:center;gap:var(--space-1);white-space:nowrap}.hero-subtitle{font-size:var(--text-xl);font-weight:400;letter-spacing:var(--tracking-wide);text-transform:uppercase;color:var(--color-text-secondary);margin:var(--space-4) 0 0}.hero-description{font-size:var(--text-lg);color:var(--color-text-secondary);margin:var(--space-6) 0 0}[data-theme=dark] .hero-tag{border-color:#44484d;color:#9a9fa5}[data-theme=dark] .hero-subtitle,[data-theme=dark] .hero-description{color:#8b9095;max-width:65ch;line-height:var(--leading-relaxed)}.hero-disclaimers{display:flex;gap:var(--space-8);margin-top:var(--space-10)}.disclaimer-details{flex:1;max-width:360px}@media(max-width:768px){.hero-disclaimers{flex-direction:column;gap:var(--space-4)}}.disclaimer-summary{font-size:var(--text-sm);font-weight:500;color:var(--color-text-tertiary);cursor:pointer;list-style:none;letter-spacing:var(--tracking-wide);transition:color var(--transition-fast)}.disclaimer-summary::-webkit-details-marker{display:none}.disclaimer-summary:hover{color:var(--color-text-secondary)}.disclaimer-details[open] .disclaimer-summary{color:var(--color-text-secondary);margin-bottom:var(--space-6)}.disclaimer-content{padding-left:var(--space-1);border-left:1px solid oklch(50% .01 250 / .15);animation:disclaimerReveal .4s var(--ease-out-quart)}@keyframes disclaimerReveal{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.disclaimer-item{display:flex;gap:var(--space-3);padding:var(--space-3) var(--space-4)}.disclaimer-number{font-family:var(--font-display);font-size:var(--text-lg);color:var(--accent);min-width:1.5ch;line-height:1;padding-top:2px;opacity:.6}.disclaimer-title{font-size:var(--text-sm);font-weight:500;color:var(--color-text-secondary)}.disclaimer-desc{font-size:var(--text-xs);color:var(--color-text-tertiary);margin-top:var(--space-1);line-height:var(--leading-relaxed)}[data-theme=dark] .disclaimer-summary{color:#51565b}[data-theme=dark] .disclaimer-details[open] .disclaimer-summary{color:#6d7277}[data-theme=dark] .disclaimer-title{color:#9a9fa5}[data-theme=dark] .disclaimer-desc{color:#5f6469}.btn{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-3) var(--space-6);font-size:var(--text-sm);font-weight:500;border-radius:var(--radius-full);transition:transform var(--transition-fast),box-shadow var(--transition-fast),background var(--transition-fast),border-color var(--transition-fast);cursor:pointer;text-decoration:none;font-family:inherit}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--accent);color:#fff;border:none}.btn-primary:hover{background:var(--accent-hover);transform:translateY(-1px);box-shadow:var(--shadow-md)}.btn-ghost{background:transparent;color:var(--color-text);border:1px solid var(--color-border)}[data-theme=dark] .hero .btn-ghost{color:#cbced1;border-color:#44484d}[data-theme=dark] .hero .btn-ghost:hover{border-color:#7c8186;background:#13161a80}.btn-ghost:hover{border-color:var(--color-text-tertiary);background:var(--color-bg-subtle)}[data-animate]:not(.hero-name){opacity:0;transform:translateY(20px);transition:opacity var(--transition-slow),transform var(--transition-slow);transition-delay:var(--animate-delay, 0ms)}[data-animate]:not(.hero-name).is-visible{opacity:1;transform:translateY(0)}.hero-name[data-animate]{opacity:0;transition:opacity .6s var(--ease-out-expo)}.hero-name[data-animate].is-visible{opacity:1}@media(max-width:768px){.hero-name{font-size:var(--text-5xl);transform:scaleX(.6) scaleY(1.3)}.hero-subtitle{font-size:var(--text-lg)}.hero-description{font-size:var(--text-base)}}.carousel{position:relative;overflow:hidden}.carousel-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;gap:var(--space-6);padding-bottom:var(--space-4);-ms-overflow-style:none;scrollbar-width:none}.carousel-track::-webkit-scrollbar{display:none}.carousel-slide{flex:0 0 min(85%,720px);scroll-snap-align:start;border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-8);background:var(--color-surface);transition:border-color .3s var(--ease-out-quart),box-shadow .3s var(--ease-out-quart),opacity .3s var(--ease-out-quart),transform .3s var(--ease-out-quart)}.carousel-track:hover .carousel-slide:not(.is-current){opacity:.4;transform:scale(.98)}.carousel-track:hover .carousel-slide:not(.is-current):hover{opacity:1;transform:scale(1);border-color:var(--accent);box-shadow:var(--shadow-md)}.carousel-slide.is-featured{border-color:var(--accent);border-width:2px}.carousel-slide.is-current{flex:0 0 260px;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;border:none;background:transparent;padding:var(--space-6)}.carousel-slide.is-current:hover{box-shadow:none;border-color:transparent}.current-since{font-size:var(--text-xs);color:var(--color-text-tertiary);letter-spacing:var(--tracking-wide);text-transform:uppercase}.current-title{font-family:var(--font-display);font-size:var(--text-xl);font-weight:400;margin-top:var(--space-3);line-height:var(--leading-tight)}.current-company{font-size:var(--text-sm);color:var(--color-text-secondary);margin-top:var(--space-2)}.carousel-nav{display:flex;align-items:center;justify-content:center;gap:var(--space-4);margin-top:var(--space-6)}.timeline-axis{display:flex;align-items:center;gap:var(--space-3);margin-bottom:var(--space-4)}.timeline-label{font-size:var(--text-xs);color:var(--color-text-tertiary);letter-spacing:var(--tracking-wide);text-transform:uppercase;white-space:nowrap;opacity:.5}.timeline-year{font-family:var(--font-display);font-size:var(--text-base);color:var(--accent);opacity:1;min-width:3ch;text-align:center;transition:all .25s var(--ease-out-quart)}.timeline-line{flex:1;height:1px;background:linear-gradient(to right,var(--accent),var(--color-border),var(--color-text-tertiary));opacity:.3}.carousel-arrow{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:1px solid oklch(50% .01 250 / .2);border-radius:50%;background:#dbdee166;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);color:var(--color-text-secondary);font-size:var(--text-lg);cursor:pointer;transition:all var(--transition-fast);font-family:inherit}.carousel-arrow:hover{border-color:var(--accent);color:var(--accent);background:#dbdee199;box-shadow:0 2px 12px #0000000f}[data-theme=dark] .carousel-arrow{background:#13161a66;border-color:#44484d4d}[data-theme=dark] .carousel-arrow:hover{background:#1e222699}.carousel-dots{display:flex;gap:var(--space-2)}.carousel-dot{width:8px;height:8px;border-radius:50%;border:none;background:var(--color-border);cursor:pointer;padding:0;transition:all var(--transition-fast)}.carousel-dot.is-active{background:var(--accent);width:24px;border-radius:var(--radius-full)}.experience-tag{font-size:var(--text-xs);font-weight:500;padding:var(--space-1) var(--space-3);border-radius:var(--radius-full);white-space:nowrap}.tag-work{color:#059669;background:#ecfdf5;border:1px solid #a7f3d0}.tag-internship{color:var(--accent);background:var(--accent-subtle);border:1px solid #93c5fd}.tag-activity{color:#7c3aed;background:#f5f3ff;border:1px solid #c4b5fd}[data-theme=dark] .tag-work{color:#6ee7b7;background:#064e3b4d;border-color:#064e3b99}[data-theme=dark] .tag-activity{color:#c4b5fd;background:#5b21b633;border-color:#5b21b666}.experience-date{font-size:var(--text-sm);color:var(--color-text-tertiary);margin-left:var(--space-3)}.experience-title{font-size:var(--text-xl);font-weight:600;margin-top:var(--space-3)}.experience-company{display:block;font-size:var(--text-sm);color:var(--color-text-secondary);margin-top:var(--space-1)}.experience-summary{font-size:var(--text-base);color:var(--color-text-secondary);line-height:var(--leading-relaxed);margin-top:var(--space-4);max-width:65ch}.carousel-slide .btn-ghost{margin-top:var(--space-4)}.experience-tags{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-4)}.experience-cat-chip{font-size:var(--text-xs);font-weight:500;padding:var(--space-1) var(--space-3);border-radius:var(--radius-full);background:transparent;color:var(--accent);border:1px solid var(--accent)}.experience-skill-chip{font-size:var(--text-xs);color:var(--color-text-tertiary);font-style:italic}.experience-skill-chip+.experience-skill-chip:before{content:" · ";font-style:normal}.edu-thesis-row{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-4);margin-top:var(--space-3)}.edu-thesis-row .exp-highlights-link{flex-shrink:0}.edu-thesis{font-size:var(--text-sm);color:var(--color-text-secondary);line-height:var(--leading-relaxed);margin:0}.edu-thesis strong{color:var(--color-text);font-weight:600}.edu-years{font-family:var(--font-display);font-size:var(--text-sm);color:var(--color-text-tertiary)}.edu-clubs{font-size:var(--text-xs);color:var(--color-text-tertiary);margin-top:var(--space-2);font-style:italic}.edu-footer-row{display:flex;justify-content:space-between;align-items:flex-end;margin-top:auto;padding-top:var(--space-4);gap:var(--space-4)}.edu-links-bottom{display:flex;gap:var(--space-4)}.exp-highlights-link{font-size:var(--text-sm);font-weight:500;color:var(--color-text-secondary);background:none;border:none;padding:0;cursor:pointer;font-family:inherit;position:relative;transition:color var(--transition-fast);margin-left:auto;align-self:flex-end}.exp-highlights-link:after{content:"";position:absolute;bottom:-2px;left:0;width:0;height:1px;background:var(--accent);transition:width .3s var(--ease-out-expo)}.exp-highlights-link:hover{color:var(--accent)}.exp-highlights-link:hover:after{width:100%}.carousel-slide:not(.is-current){display:flex;flex-direction:column}@media(max-width:768px){.carousel-slide{flex:0 0 90%;padding:var(--space-6)}.carousel-arrow{width:36px;height:36px}}.skills-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:var(--space-6)}.skill-card{border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-6);background:var(--color-surface)}.skill-card-title{font-size:var(--text-lg);font-weight:600;margin-bottom:var(--space-4);display:flex;align-items:center;gap:var(--space-2)}.skill-card-title .icon{color:var(--accent);width:20px;height:20px;flex-shrink:0}.skill-group{margin-bottom:var(--space-3)}.skill-group:last-child{margin-bottom:0}.skill-group-label{display:block;font-size:var(--text-xs);font-weight:500;color:var(--color-text-secondary);margin-bottom:var(--space-1);letter-spacing:var(--tracking-wide);text-transform:uppercase}.skill-chips{display:flex;flex-wrap:wrap;gap:var(--space-2)}.skill-chip{font-size:var(--text-xs);padding:var(--space-1) var(--space-3);border-radius:var(--radius-full);border:1px solid var(--color-border);color:var(--color-text-secondary);background:var(--color-bg-subtle);transition:border-color var(--transition-fast),color var(--transition-fast)}.skill-chip:hover{border-color:var(--accent);color:var(--accent)}.cert-badge{display:flex;align-items:center;gap:var(--space-2);margin-top:var(--space-4);font-size:var(--text-sm);color:var(--color-text-secondary)}.cert-badge a{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.cert-badge a:hover{color:var(--accent-hover)}@media(max-width:768px){.skills-grid{grid-template-columns:1fr}}.about-section .section-heading{font-size:var(--text-display);margin-bottom:var(--space-12)}.about-grid{display:flex;flex-direction:column;gap:var(--section-gap)}.education-list{display:flex;flex-direction:column}.edu-row{position:relative;padding:var(--space-6) 0;cursor:pointer;outline:none}.edu-row-inner{display:flex;align-items:baseline;gap:var(--space-4)}.edu-years{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:400;color:var(--color-text-tertiary);min-width:8ch;white-space:nowrap;transition:color var(--transition-base)}.edu-degree{font-size:var(--text-lg);font-weight:500;transition:color var(--transition-base)}.edu-reveal{max-height:0;overflow:hidden;opacity:0;padding-left:calc(8ch + var(--space-4));transition:max-height .4s var(--ease-out-quart),opacity .3s var(--ease-out-quart)}.edu-details{font-size:var(--text-sm);color:var(--color-text-secondary);line-height:var(--leading-relaxed)}.edu-cert{display:inline-block;font-size:var(--text-xs);color:var(--color-text-secondary);margin-top:var(--space-2);text-decoration:underline;text-underline-offset:2px}.edu-cert:hover{color:var(--accent)}.edu-award{font-size:var(--text-sm);color:var(--accent);margin-top:var(--space-2);font-weight:500}.edu-line{position:absolute;bottom:0;left:0;right:0;height:1px;background:var(--color-border)}.edu-line:after{content:"";position:absolute;bottom:0;left:0;width:0;height:1px;background:var(--accent);transition:width .4s var(--ease-out-expo)}.edu-row:hover .edu-years,.edu-row:focus-visible .edu-years{color:var(--accent)}.edu-row:hover .edu-reveal,.edu-row:focus-visible .edu-reveal{max-height:12rem;opacity:1;margin-top:var(--space-3)}.edu-row:hover .edu-line:after,.edu-row:focus-visible .edu-line:after{width:100%}@media(max-width:768px){.edu-row-inner{flex-direction:column;gap:var(--space-1)}.edu-reveal{padding-left:0}}.values-list{display:flex;flex-direction:column}.value-row{position:relative;padding:var(--space-6) 0;cursor:pointer;outline:none}.value-row-inner{display:flex;align-items:baseline;gap:var(--space-4)}.value-number{font-family:var(--font-display);font-size:var(--text-2xl);font-weight:400;color:var(--color-text-tertiary);min-width:2.5ch;transition:color var(--transition-base)}.value-title{font-size:var(--text-lg);font-weight:500;transition:color var(--transition-base)}.value-description{font-size:var(--text-sm);color:var(--color-text-secondary);line-height:var(--leading-relaxed);max-height:0;overflow:hidden;opacity:0;padding-left:calc(2.5ch + var(--space-4));transition:max-height .4s var(--ease-out-quart),opacity .3s var(--ease-out-quart)}.value-line{position:absolute;bottom:0;left:0;right:0;height:1px;background:var(--color-border)}.value-line:after{content:"";position:absolute;bottom:0;left:0;width:0;height:1px;background:var(--accent);transition:width .4s var(--ease-out-expo)}.value-row:hover .value-number,.value-row:focus-visible .value-number{color:var(--accent)}.value-row:hover .value-description,.value-row:focus-visible .value-description{max-height:4rem;opacity:1;margin-top:var(--space-2)}.value-row:hover .value-line:after,.value-row:focus-visible .value-line:after{width:100%}.contact-section{padding-block:var(--space-16);border-top:1px solid var(--color-border-subtle)}.contact-end{display:flex;flex-direction:column;align-items:center;gap:var(--space-4)}.contact-label{font-family:var(--font-display);font-size:var(--text-lg);color:var(--color-text-tertiary);letter-spacing:var(--tracking-wide);text-transform:lowercase}.contact-row{display:flex;align-items:center;flex-wrap:wrap;justify-content:center;gap:var(--space-3)}.contact-dot{color:var(--color-text-tertiary);opacity:.3}.contact-inline{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);font-weight:500;color:var(--color-text-secondary);text-decoration:none;padding:var(--space-1) 0;position:relative;transition:color var(--transition-fast)}.contact-inline:after{content:"";position:absolute;bottom:0;left:0;width:0;height:1px;background:var(--accent);transition:width .3s var(--ease-out-expo)}.contact-inline:hover{color:var(--accent)}.contact-inline:hover:after{width:100%}.footer{border-top:1px solid var(--color-border-subtle);padding:var(--space-6) 0;display:flex;align-items:center;justify-content:space-between;font-size:var(--text-sm);color:var(--color-text-tertiary)}.footer a{color:var(--color-text-tertiary);text-decoration:none;transition:color var(--transition-fast)}.footer a:hover{color:var(--color-text-secondary)}@media(max-width:768px){.footer{flex-direction:column;gap:var(--space-2);text-align:center}}dialog{padding:0;border:none;border-radius:var(--radius-lg);max-width:800px;width:90vw;max-height:85vh;background:var(--color-surface);color:var(--color-text)}dialog::backdrop{background:#00000080;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}dialog[open]{animation:fadeIn .2s var(--ease-out-expo)}@keyframes fadeIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.modal-header{position:sticky;top:0;display:flex;justify-content:space-between;align-items:center;padding:var(--space-6);border-bottom:1px solid var(--color-border-subtle);background:var(--color-surface);z-index:1}.modal-title{font-size:var(--text-xl);font-weight:600}.modal-close{display:flex;align-items:center;justify-content:center;width:40px;height:40px;border:none;border-radius:var(--radius-md);background:transparent;color:var(--color-text-secondary);cursor:pointer;transition:background var(--transition-fast)}.modal-close:hover{background:var(--color-bg-subtle)}.modal-body{padding:var(--space-6);overflow-y:auto}.highlight-card{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-6);margin-bottom:var(--space-4);transition:box-shadow var(--transition-fast)}.highlight-card:hover{box-shadow:var(--shadow-sm)}.highlight-card:last-child{margin-bottom:0}.highlight-metrics{list-style:none;padding:0;margin:var(--space-3) 0 0;display:flex;flex-direction:column;gap:var(--space-2);font-size:var(--text-sm);color:var(--color-text-secondary)}.highlight-images{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--space-3);margin-top:var(--space-4)}.highlight-images img{width:100%;border-radius:var(--radius-md);border:1px solid var(--color-border);cursor:pointer;transition:opacity var(--transition-fast)}.highlight-images img:hover{opacity:.85}dialog.lightbox{max-width:90vw;max-height:90vh;padding:var(--space-4);background:var(--gray-950);border-radius:var(--radius-lg)}dialog.lightbox::backdrop{background:#000000d9;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}dialog.lightbox img{max-width:100%;max-height:80vh;object-fit:contain;display:block;margin:0 auto}.theme-toggle-icon{transition:transform var(--transition-fast)}.icon-sun{display:inline}.icon-moon,[data-theme=dark] .icon-sun{display:none}[data-theme=dark] .icon-moon{display:inline}.blog-header{text-align:center;padding-block:var(--space-16) var(--space-8)}.blog-subtitle{font-family:var(--font-display);font-size:var(--text-display);font-weight:400;color:var(--color-text)}.blog-index-search{margin-top:var(--space-6)}.blog-search{width:100%;padding:var(--space-2) 0;font-size:var(--text-sm);font-family:inherit;border:none;border-bottom:1px solid var(--color-border-subtle);background:transparent;color:var(--color-text);outline:none;transition:border-color var(--transition-fast)}.blog-search::placeholder{color:var(--color-text-tertiary)}.blog-search:focus{border-bottom-color:var(--accent);outline:none}.blog-filters,.blog-filters-bottom{display:flex;flex-wrap:wrap;gap:var(--space-2);justify-content:center}.blog-filters{margin-top:var(--space-4)}.blog-index{max-width:720px;margin-inline:auto;padding-inline:var(--container-padding);margin-top:var(--space-16)}.blog-index-heading{font-family:var(--font-display);font-size:var(--text-xl);font-weight:400;color:var(--color-text-tertiary);margin-bottom:var(--space-6)}.blog-index-section{margin-bottom:var(--space-8)}.blog-index-label{display:block;font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--color-text-tertiary);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border);margin-bottom:0}.blog-index-row{display:flex;justify-content:space-between;align-items:baseline;gap:var(--space-4);padding:var(--space-3) 0;border-bottom:1px solid var(--color-border-subtle);text-decoration:none;transition:all var(--transition-fast)}a.blog-index-row:hover{padding-left:var(--space-2)}a.blog-index-row:hover .blog-index-title{color:var(--accent)}.blog-index-title{font-size:var(--text-sm);font-weight:500;color:var(--color-text);transition:color var(--transition-fast)}.blog-index-meta{font-size:var(--text-xs);color:var(--color-text-tertiary);white-space:nowrap;flex-shrink:0}@media(max-width:768px){.blog-index-row{flex-direction:column;gap:var(--space-1)}}.blog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:var(--space-6);max-width:var(--container-max);margin-inline:auto;padding-inline:var(--container-padding)}.blog-card{position:relative;overflow:hidden;border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);cursor:pointer;transition:var(--transition-fast)}.blog-card:before{content:"";position:absolute;top:0;left:0;width:100%;height:3px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform var(--transition-base)}.blog-card:hover{border-color:var(--color-text-tertiary);transform:translateY(-2px);box-shadow:var(--shadow-md)}.blog-card:hover:before{transform:scaleX(1)}.blog-card:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.blog-card-body{padding:var(--space-6)}.blog-card-category{font-size:var(--text-xs);font-weight:500;text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--accent)}.blog-card-title{font-size:var(--text-lg);font-weight:600;margin-top:var(--space-2);line-height:var(--leading-tight)}.blog-card-excerpt{font-size:var(--text-sm);color:var(--color-text-secondary);margin-top:var(--space-3);line-height:var(--leading-relaxed);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.blog-card-meta{display:flex;align-items:center;gap:var(--space-4);margin-top:var(--space-4);font-size:var(--text-xs);color:var(--color-text-tertiary)}.blog-empty{text-align:center;padding:var(--space-16);color:var(--color-text-tertiary)}#blog-idea-graph{position:relative;width:100%;height:60vh;min-height:400px;max-height:700px;max-width:var(--container-max);margin-inline:auto}#blog-idea-graph canvas{width:100%;height:100%}.blog-cards-carousel{max-width:var(--container-max);margin-inline:auto;padding-inline:var(--container-padding);margin-top:var(--space-8);overflow:hidden}.blog-cards-track{display:flex;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;gap:var(--space-6);padding-bottom:var(--space-4);-ms-overflow-style:none;scrollbar-width:none}.blog-cards-track::-webkit-scrollbar{display:none}.blog-cards-track .blog-card{flex:0 0 min(85%,360px);scroll-snap-align:start}.blog-cards-track .blog-empty{flex:0 0 100%}#idea-graph{position:relative;width:100%;height:80vh;min-height:500px;max-height:900px}#idea-graph canvas{width:100%;height:100%}.graph-legend{display:flex;justify-content:center;gap:var(--space-2);margin-top:var(--space-4)}.graph-legend-btn{display:inline-flex;align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-4);font-family:inherit;font-size:var(--text-xs);font-weight:500;color:var(--color-text-tertiary);background:transparent;border:1px solid var(--color-border);border-radius:var(--radius-full);cursor:pointer;transition:all var(--transition-fast)}.graph-legend-btn:hover{color:var(--color-text-secondary);border-color:var(--color-text-tertiary)}.graph-legend-btn.is-active{color:var(--color-text);border-color:var(--color-text);background:var(--color-bg-subtle)}.graph-legend-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--accent)}.graph-legend-dot--project{background:#305880}.graph-tooltip{position:absolute;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:var(--space-4);max-width:300px;box-shadow:var(--shadow-lg);z-index:var(--z-above);pointer-events:auto;animation:fadeIn .2s var(--ease-out-quart)}.graph-tooltip-category{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--accent);font-weight:500}.graph-tooltip-title{font-size:var(--text-base);font-weight:600;margin-top:var(--space-1);line-height:var(--leading-tight)}.graph-tooltip-excerpt{font-size:var(--text-sm);color:var(--color-text-secondary);margin-top:var(--space-2);line-height:var(--leading-relaxed);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.graph-tooltip-meta{font-size:var(--text-xs);color:var(--color-text-tertiary);margin-top:var(--space-2)}.graph-tooltip-link{display:inline-block;font-size:var(--text-sm);font-weight:500;color:var(--accent);margin-top:var(--space-3);text-decoration:none}.graph-tooltip-link:hover{text-decoration:underline}@media(max-width:768px){#idea-graph{height:60vh;min-height:350px}.graph-tooltip{max-width:250px}}.blog-article,.article-layout{max-width:720px;margin-inline:auto;padding-inline:var(--container-padding);padding-block:var(--space-12)}@media(min-width:1024px){.article-layout{display:grid;grid-template-columns:1fr 200px;gap:var(--space-12);max-width:960px}}.article-header{margin-bottom:var(--space-12)}.article-back{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);color:var(--color-text-secondary);text-decoration:none;margin-bottom:var(--space-6)}.article-back:hover{color:var(--accent)}.article-category{font-size:var(--text-sm);font-weight:500;text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--accent)}.article-title{font-size:var(--text-display);font-weight:700;margin-top:var(--space-3);line-height:var(--leading-tight)}.article-meta{display:flex;gap:var(--space-4);margin-top:var(--space-4);font-size:var(--text-sm);color:var(--color-text-tertiary)}.article-tags{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-4)}.article-tag{font-size:var(--text-xs);padding:var(--space-1) var(--space-3);border-radius:var(--radius-full);border:1px solid var(--color-border);color:var(--color-text-secondary)}.article-content{font-size:var(--text-lg);line-height:var(--leading-relaxed);color:var(--color-text)}.article-content p{margin-bottom:var(--space-6)}.article-content h2{font-size:var(--text-2xl);font-weight:700;margin-top:var(--space-12);margin-bottom:var(--space-4);padding-bottom:var(--space-2);border-bottom:1px solid var(--color-border-subtle)}.article-content h3{font-size:var(--text-xl);font-weight:600;margin-top:var(--space-8);margin-bottom:var(--space-3)}.article-content blockquote{border-left:3px solid var(--accent);padding-left:var(--space-6);margin:var(--space-6) 0;color:var(--color-text-secondary);font-style:italic}.article-content ul,.article-content ol{padding-left:var(--space-6);margin-bottom:var(--space-6)}.article-content li{margin-bottom:var(--space-2)}.article-content a{color:var(--accent);text-decoration:none;background-image:linear-gradient(var(--accent),var(--accent));background-size:0% 1px;background-position:left bottom;background-repeat:no-repeat;transition:background-size var(--transition-base)}.article-content a:hover{background-size:100% 1px}.article-content code{font-family:var(--font-mono);font-size:.875em;background:var(--color-bg-subtle);padding:2px 6px;border-radius:var(--radius-sm)}.article-content pre{background:var(--color-bg-subtle);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-6);overflow-x:auto;margin-bottom:var(--space-6)}.article-content pre code{background:none;padding:0;border-radius:0;font-size:inherit}.article-content hr{border:none;border-top:1px solid var(--color-border-subtle);margin:var(--space-8) 0}.article-content strong{font-weight:600;color:var(--color-text)}.article-content img{border-radius:var(--radius-md);margin:var(--space-6) 0;width:100%}.article-toc{display:none}@media(min-width:1024px){.article-toc{display:block;position:sticky;top:80px;align-self:start}}.toc-title{font-size:var(--text-sm);font-weight:600;text-transform:uppercase;letter-spacing:var(--tracking-wide);color:var(--color-text-tertiary);margin-bottom:var(--space-4)}.toc-list{list-style:none;padding:0}.toc-link{font-size:var(--text-sm);color:var(--color-text-tertiary);text-decoration:none;display:block;padding:var(--space-1) 0;border-left:2px solid transparent;padding-left:var(--space-3);transition:var(--transition-fast)}.toc-link:hover{color:var(--color-text-secondary)}.toc-link.is-active{color:var(--accent);border-left-color:var(--accent)}.article-footer{margin-top:var(--space-12);padding-top:var(--space-8);border-top:1px solid var(--color-border-subtle)}.article-share{display:flex;gap:var(--space-3);align-items:center}.article-share-btn{display:inline-flex;align-items:center;gap:var(--space-2);font-size:var(--text-sm);padding:var(--space-2) var(--space-4);border-radius:var(--radius-md);border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);cursor:pointer;transition:var(--transition-fast)}.article-share-btn:hover{border-color:var(--color-text-tertiary);color:var(--color-text)}body{font-family:var(--font-sans);font-size:var(--text-base);color:var(--color-text);background:transparent;line-height:var(--leading-normal);transition:background-color var(--transition-slow),color var(--transition-slow)}.site-bg-canvas{position:fixed;top:0;right:0;bottom:0;left:0;width:100%;height:100%;z-index:-1;pointer-events:none}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;pointer-events:none;opacity:.025;background:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}a{color:var(--color-link);text-decoration-thickness:1px;text-underline-offset:2px;transition:color var(--transition-fast)}a:hover{color:var(--color-link-hover)}h1,h2,h3,h4,h5,h6{font-weight:var(--weight-bold);line-height:var(--leading-tight);letter-spacing:var(--tracking-tight);color:var(--color-text)}code{font-family:var(--font-mono);font-size:.9em}::selection{background:var(--accent-subtle);color:var(--accent-text)}#experience,#about,.blog-preview,#contact{padding-block:var(--section-gap)}.section-subtle{background-color:transparent}.section-heading{font-family:var(--font-display);font-size:var(--text-display);font-weight:400;margin-bottom:var(--space-12)}.article-content a,.experience-summary a{text-decoration:none;background-image:linear-gradient(var(--accent),var(--accent));background-size:0% 1px;background-position:left bottom;background-repeat:no-repeat;transition:background-size var(--transition-base)}.article-content a:hover,.experience-summary a:hover{background-size:100% 1px}
