*,*:before,*:after{box-sizing:border-box}body{margin:0}#root{width:100%}:root{--bg: #1a1a1a;--bg-card: #222222;--border: rgba(225, 225, 225, .1);--border-card: rgba(225, 225, 225, .14);--accent: #1beb9e;--accent-dim: rgba(27, 235, 158, .12);--text: #e1e1e1;--text-muted: #898989;--text-bright: #f2f2f2;--font-mono: "JetBrains Mono", ui-monospace, "Cascadia Code", monospace;--font-sans: "JetBrains Mono", ui-monospace, "Cascadia Code", monospace;--radius: 0px;--radius-lg: 0px;--transition: .12s ease;--max-w: 640px;--c-cyan: #1beb9e;--c-purple: #b462ff;--c-fuchsia: #ff45b4;--c-blue: #18b6ff;--c-green: #1beb9e;--c-orange: #ff9528;--c-yellow: #dddd25}[data-color=cyan]{--accent: var(--c-cyan)}[data-color=purple]{--accent: var(--c-purple)}[data-color=fuchsia]{--accent: var(--c-fuchsia)}[data-color=blue]{--accent: var(--c-blue)}[data-color=green]{--accent: var(--c-green)}[data-color=orange]{--accent: var(--c-orange)}[data-color=yellow]{--accent: var(--c-yellow)}[data-theme=light]{--bg: #fafaf8;--bg-card: #f1f1ee;--border: rgba(28, 26, 34, .14);--border-card: rgba(28, 26, 34, .18);--accent: #008f5d;--accent-dim: rgba(0, 143, 93, .1);--text: #1c1a22;--text-muted: #6a6a72;--text-bright: #0a0910;--c-cyan: #008f5d;--c-purple: #7d2fc4;--c-fuchsia: #d10765;--c-blue: #0a72e0;--c-green: #008f5d;--c-orange: #c25e00;--c-yellow: #6b6e00}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;overscroll-behavior:none;background:var(--bg);color:var(--text);transition:background .3s ease,color .3s ease;font-family:var(--font-mono);font-size:15px;line-height:1.85;letter-spacing:.01em;font-weight:400;-webkit-font-smoothing:antialiased}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--bg);overflow-x:hidden;transition:background .3s ease}a{color:inherit;text-decoration:none}.bio-text a,.inline-link,.pub-link,.contact-icon,.footer-link{color:var(--accent);transition:color var(--transition),background var(--transition);padding:0 1px}.bio-text a:hover,.inline-link:hover,.pub-link:hover,.contact-icon:hover,.footer-link:hover{color:var(--bg);background:var(--accent);opacity:1}.theme-toggle{position:fixed;top:18px;right:24px;z-index:100;display:inline-flex;align-items:center;gap:.55ch;height:34px;border-radius:var(--radius);border:1px solid var(--border-card);background:var(--bg-card);cursor:pointer;padding:0 12px;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.02em;line-height:1;white-space:nowrap;-webkit-user-select:none;user-select:none;transition:border-color var(--transition),background var(--transition),box-shadow var(--transition)}.theme-toggle .tt-prompt{color:var(--c-green)}.theme-toggle .tt-cmd{color:var(--text)}.theme-toggle .tt-flag{color:var(--accent);transition:color var(--transition)}.theme-toggle .tt-cursor{width:.62ch;height:1.05em;margin-left:.1ch;background:var(--accent);animation:tt-blink 1.05s steps(1) infinite;transition:background var(--transition)}@keyframes tt-blink{0%,49%{opacity:1}50%,to{opacity:0}}.theme-toggle:hover{border-color:var(--accent);background:var(--accent);box-shadow:0 0 14px var(--accent-dim)}.theme-toggle:hover .tt-prompt,.theme-toggle:hover .tt-cmd,.theme-toggle:hover .tt-flag{color:var(--bg)}.theme-toggle:hover .tt-cursor{background:var(--bg)}.theme-toggle:focus-visible{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-dim)}@media (prefers-reduced-motion: reduce){.theme-toggle .tt-cursor{animation:none;opacity:1}}.page{position:relative;min-height:100vh}.layout{position:relative;z-index:1;display:grid;grid-template-columns:330px minmax(0,var(--max-w));gap:56px;justify-content:center;max-width:1080px;margin:0 auto;padding:0 32px;align-items:start}.sidebar{align-self:start;padding:72px 0 40px}.stagger{opacity:0;transform:translateY(14px)}.sidebar.visible .stagger{animation:rise-in .35s cubic-bezier(.22,.61,.36,1) forwards}.sidebar.visible .stagger:nth-child(1){animation-delay:0s}.sidebar.visible .stagger:nth-child(2){animation-delay:.05s}.sidebar.visible .stagger:nth-child(3){animation-delay:.1s}.sidebar.visible .stagger:nth-child(4){animation-delay:.15s}.sidebar.visible .stagger:nth-child(5){animation-delay:.2s}.sidebar.visible .stagger:nth-child(6){animation-delay:.25s}.sidebar.visible .stagger:nth-child(7){animation-delay:.3s}@keyframes rise-in{to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.stagger{opacity:1;transform:none;animation:none!important}}.ascii-art{font-family:var(--font-mono);font-size:.8rem;line-height:1.15;color:var(--c-cyan);margin-bottom:4px;white-space:pre;-webkit-user-select:none;user-select:none}.code-art{font-family:var(--font-mono);font-size:.74rem;line-height:1.6;white-space:pre;color:var(--text);margin:18px 0 4px;padding:10px 12px 10px 0;border-left:2px solid var(--accent);background:linear-gradient(90deg,var(--accent-dim),transparent 55%);-webkit-user-select:none;user-select:none}.code-art-body{display:block}.code-line{display:flex}.code-gutter{flex:0 0 auto;width:2.4ch;margin-right:1.2ch;text-align:right;color:var(--text-muted);opacity:.45;-webkit-user-select:none;user-select:none}.code-content{flex:1 1 auto;min-width:0}.ca-kw{color:var(--c-purple)}.ca-fn{color:var(--c-cyan)}.ca-str{color:var(--c-green)}.ca-punc{color:var(--text-muted)}.scramble{display:inline;overflow-wrap:break-word}.scramble-char{color:var(--c-cyan);opacity:.7}.bio-prompt{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.02em;color:var(--text-muted);margin-bottom:14px;min-height:1.2em}.bio-prompt-sigil{color:var(--c-green)}.tw-cursor{display:inline-block;margin-left:1px;color:var(--c-cyan);animation:tw-blink 1s steps(1) infinite}@keyframes tw-blink{0%,50%{opacity:1}50.01%,to{opacity:0}}@media (prefers-reduced-motion: reduce){.tw-cursor{animation:none}}.sidebar-stats{margin-top:22px;font-size:.72rem;line-height:1.8;color:var(--text-muted)}.stat-line{display:flex;align-items:center;gap:.5ch;white-space:nowrap}.sidebar-nav{display:flex;flex-direction:column;gap:2px;margin:26px 0 22px}.sidebar-contact{display:flex;flex-direction:column;gap:2px;padding-top:18px;margin-top:4px;border-top:1px solid var(--border)}.sidebar-contact .nav-link{color:var(--text-muted)}.nav-link{font-size:.9rem;color:var(--accent);width:fit-content;padding:0 2px;transition:color var(--transition),background var(--transition)}.nav-link:hover{color:var(--bg);background:var(--accent)}.container{position:relative;z-index:1;min-width:0;padding:72px 0 80px}@media (max-width: 880px){.layout{grid-template-columns:1fr;gap:0;max-width:var(--max-w);padding:0 24px}.sidebar{position:static;padding:64px 0 0}.sidebar-nav{flex-direction:row;flex-wrap:wrap;gap:4px 14px}.sidebar-contact{flex-direction:row;flex-wrap:wrap;gap:4px 14px;border-top:none;padding-top:0}.container{padding:36px 0 64px}}.divider{height:1px;background:var(--border);margin:52px 0}.fade-section{opacity:0;transform:translateY(14px);transition:opacity .35s ease,transform .35s ease}.fade-section.is-visible{opacity:1;transform:none}.section-title{font-family:var(--font-mono);font-size:.95rem;font-weight:500;letter-spacing:.02em;text-transform:lowercase;color:var(--text-bright);margin-bottom:24px;display:flex;align-items:center;gap:14px}.section-title .section-title-text:before{content:"// ";color:var(--accent);font-weight:400}.section-title:after{content:"";flex:1;height:1px;background:var(--border)}.hero{padding-bottom:8px}.hero-name{font-family:var(--font-mono);font-size:clamp(2.6rem,4.5vw,3.6rem);font-weight:200;color:var(--text-bright);letter-spacing:-.02em;line-height:1;display:flex;flex-direction:column;align-items:flex-start;gap:0;margin:14px 0 4px}.hero-bear{font-size:1.3rem;font-weight:400;letter-spacing:0;color:var(--c-cyan);white-space:nowrap;align-self:flex-start;margin-top:12px;cursor:default;-webkit-user-select:none;user-select:none;transform-origin:center bottom;transition:transform .25s cubic-bezier(.34,1.56,.64,1)}.hero-bear--inline{display:inline-block;font-size:1.05rem;margin-top:0;vertical-align:-.1em}.hero-bear[data-tilt="-1"]{transform:translateY(-3px) rotate(-9deg)}.hero-bear[data-tilt="1"]{transform:translateY(-3px) rotate(9deg)}.name-token{display:inline-flex;flex-direction:column;align-items:flex-start;color:inherit;font-family:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;text-align:left}.name-token-row{display:inline-flex;align-items:center;gap:.32em}.name-token-text{font-size:clamp(2.6rem,4.5vw,3.6rem);font-weight:200;color:var(--text-bright);transition:color .2s;line-height:1;letter-spacing:-.02em}.name-token-ipa{font-size:.7rem;font-weight:400;font-family:var(--font-mono, monospace);letter-spacing:.03em;color:var(--text-muted);opacity:0;transform:translateY(-2px);transition:opacity .2s,transform .2s;line-height:1.4}.name-token:hover .name-token-ipa,.name-token:focus-within .name-token-ipa{opacity:1;transform:none}.speaker-btn{display:inline-flex;align-items:center;gap:1px;background:none;border:none;padding:0 2px;margin-bottom:.32em;color:var(--accent);font-family:var(--font-mono);font-size:.95rem;font-weight:400;line-height:1;letter-spacing:0;cursor:pointer;transition:color var(--transition),background var(--transition),transform var(--transition)}.speaker-btn:hover{color:var(--bg);background:var(--accent);transform:translateY(-1px)}.speaker-btn:active{transform:translateY(0)}.speaker-btn:focus-visible{outline:none;color:var(--accent)}.speaker-btn:focus-visible .speaker-glyph{text-decoration:underline}.speaker-bracket{opacity:.85}.speaker-glyph{padding:0 1px}.eq{display:inline-flex;align-items:flex-end;gap:1.5px;height:.9em;padding:0 2px}.eq-bar{width:2px;height:100%;background:currentColor;transform-origin:bottom;animation:eq-bounce .7s ease-in-out infinite}.eq-bar:nth-child(1){animation-delay:0s}.eq-bar:nth-child(2){animation-delay:.18s}.eq-bar:nth-child(3){animation-delay:.36s}.eq-bar:nth-child(4){animation-delay:.1s}@keyframes eq-bounce{0%,to{transform:scaleY(.28)}50%{transform:scaleY(1)}}@media (prefers-reduced-motion: reduce){.eq-bar{animation:none;transform:scaleY(.7)}}.hero-tagline{margin-top:8px;font-size:.9rem;color:var(--text-muted)}.hero-body{display:flex;gap:32px;align-items:flex-start;opacity:0;transform:translateY(12px);transition:opacity .35s ease .05s,transform .35s ease .05s}.hero-body.visible{opacity:1;transform:none}.avatar-wrap{display:none}.avatar{width:108px;height:108px;border-radius:var(--radius);object-fit:cover;border:1px solid var(--border-card);display:block}.avatar-glow{display:none}.bio-text{flex:1}.bio-text p{font-size:.9rem;color:var(--text);margin-bottom:12px;line-height:1.7}.bio-text p:last-of-type{margin-bottom:18px}.bio-greeting{color:var(--text-bright)}.bio-availability{margin-top:20px;padding-left:14px;border-left:2px solid var(--c-green);color:var(--text-bright)}.bio-availability:before{content:"// open to work";display:block;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.08em;color:var(--c-green);margin-bottom:6px}.bio-text a{text-underline-offset:2px}.bio-text a[href^=http]:after,.inline-link[href^=http]:after{content:"↗";margin-left:2px;font-size:.85em}.kw{font-style:normal;font-weight:500;color:var(--text)}.kw-cyan{color:var(--c-cyan)}.kw-fuchsia{color:var(--c-fuchsia)}.contact-row{display:flex;gap:14px}.contact-icon{display:flex;align-items:center}.timeline{list-style:none;border-left:1px solid var(--border-card);padding-left:22px;margin-left:2px}.timeline-item{position:relative;display:grid;grid-template-columns:60px 1fr;align-items:baseline;gap:16px;padding:9px 0}.timeline-dot{position:absolute;left:-26px;top:17px;width:5px;height:5px;border-radius:50%;background:var(--accent)}.timeline-date{font-family:var(--font-mono);font-size:.75rem;color:var(--text-muted);white-space:nowrap}.timeline-text{font-size:.9rem;color:var(--text)}.inline-link{text-underline-offset:2px}.projects-list{display:flex;flex-direction:column;gap:28px}.project-item-header{display:flex;align-items:baseline;gap:12px;margin-bottom:5px;flex-wrap:wrap}.project-title{font-size:.92rem;font-weight:500;color:var(--text-bright)}.project-title:before{content:"> ";color:var(--accent);font-weight:400}.project-tech{font-family:var(--font-mono);font-size:.73rem;color:var(--text-muted)}.tech-sep{color:var(--text-muted);opacity:.5}.tech-tag{transition:color var(--transition)}.tech-c0{color:var(--c-cyan)}.tech-c1{color:var(--c-purple)}.tech-c2{color:var(--c-orange)}.tech-c3{color:var(--c-blue)}.tech-c4{color:var(--c-yellow)}.project-desc{font-size:.87rem;color:var(--text);margin-bottom:10px;line-height:1.65}.project-preview{margin:0 0 12px;border:1px solid var(--border-card);border-radius:4px;overflow:hidden;background:var(--bg-card);line-height:0}.project-preview img{display:block;width:100%;height:auto}.project-links{display:flex;flex-wrap:wrap;gap:4px 10px}.project-links>*{white-space:nowrap}.pub-list{list-style:none;display:flex;flex-direction:column;gap:28px}.pub-venue-line{font-size:.8rem;margin-bottom:10px}.pub-venue-year{font-family:var(--font-mono);font-size:.78rem;font-weight:600;color:var(--accent)}.pub-venue-detail{font-size:.78rem;color:var(--text-muted)}.pub-title{font-size:.92rem;font-weight:500;color:var(--text-bright);margin-bottom:5px;line-height:1.55}.pub-title:before{content:"> ";color:var(--accent);font-weight:400}.pub-authors{font-size:.83rem;color:var(--text-muted);margin-bottom:10px;line-height:1.5}.pub-me{color:var(--text);text-decoration:underline}.pub-equal-note{font-size:.75rem;color:var(--text-muted)}.pub-links{display:flex;flex-wrap:wrap;gap:4px 10px}.pub-links>*{white-space:nowrap}.pub-link{font-family:var(--font-mono);font-size:.78rem}.footer{margin-top:64px;padding-top:20px;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:14px;font-size:.78rem;color:var(--text-muted)}.footer-links{display:flex;gap:14px}.footer-link{display:flex;align-items:center}@media (max-width: 600px){.hero{padding-top:60px}.hero-name,.name-token-text{font-size:1.5rem}.hero-body{flex-direction:column;gap:20px}.avatar{width:88px;height:88px}.container{padding:0 18px 60px}.timeline-item{grid-template-columns:52px 1fr;gap:10px}.footer{flex-direction:column;align-items:flex-start}}.filter-bar{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 10px;margin:-6px 0 22px;font-size:.75rem}.filter-prompt{color:var(--text-muted)}.filter-chip,.link-btn,.tech-tag{font:inherit;background:none;border:none;padding:0;cursor:pointer;color:inherit}.filter-chip{color:var(--text-muted);border-bottom:1px dashed transparent;transition:color var(--transition),border-color var(--transition)}.filter-chip:hover{color:var(--accent)}.filter-chip.is-active{color:var(--accent);border-bottom-color:var(--accent)}.filter-chip:focus-visible,.link-btn:focus-visible,.tech-tag:focus-visible{outline:1px dashed var(--accent);outline-offset:2px}.project-context{font-size:.72rem;color:var(--text-muted)}.project-tech{margin-bottom:6px}.tech-tag{color:inherit}.tech-tag:hover{text-decoration:underline;text-underline-offset:2px}.tech-tag.is-active{text-decoration:underline;text-decoration-thickness:2px;text-underline-offset:3px}.link-btn{color:var(--accent);font-size:.78rem;line-height:inherit}.timeline-toggle{margin:8px 0 0 26px}.pub-link:hover,.link-btn:hover{text-decoration:underline;text-underline-offset:2px}.project-story{margin:0 0 12px;font-size:.84rem;line-height:1.7}.project-story p{margin-bottom:10px}.thesis .project-story{margin-bottom:0}.metrics{display:flex;flex-wrap:wrap;gap:10px 26px;margin:0 0 14px}.metric{min-width:0}.metric-value{font-size:.95rem;font-weight:600;color:var(--accent);line-height:1.3}.metric-label{margin:0;font-size:.7rem;color:var(--text-muted);line-height:1.4;max-width:22ch}.project-highlights{list-style:none;margin:0 0 12px;padding-left:0;font-size:.82rem;line-height:1.6}.project-highlights li{position:relative;padding-left:18px;margin-bottom:6px}.project-highlights li:before{content:"-";position:absolute;left:4px;color:var(--accent)}.empty-note{font-size:.85rem;color:var(--text-muted)}.edu-item{margin-bottom:30px}.edu-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;flex-wrap:wrap}.edu-date{font-size:.75rem;color:var(--text-muted);white-space:nowrap}.edu-degree{font-size:.85rem;color:var(--text);margin:2px 0 16px}.thesis{margin-bottom:22px}.thesis-label{font-size:.75rem;color:var(--text-muted)}.thesis-title{font-size:.88rem;font-weight:500;color:var(--text-bright);margin:2px 0 8px;line-height:1.5}.grade{color:var(--text-bright)}.courses .filter-bar{margin:0 0 10px}.course-table{width:100%;border-collapse:collapse;font-size:.82rem}.course-table th{text-align:left;font-weight:400;font-size:.72rem;color:var(--text-muted);border-bottom:1px solid var(--border-card);padding:4px 8px 4px 0}.course-table td{padding:5px 8px 5px 0;border-bottom:1px solid var(--border);vertical-align:baseline}.course-table th:nth-child(n+2),.course-table td:nth-child(n+2){text-align:right;white-space:nowrap}.course-term{color:var(--text-muted);font-size:.75rem}.course-note{margin-top:8px;font-size:.72rem;color:var(--text-muted)}.skills{display:flex;flex-direction:column;gap:8px}.skill-row{display:grid;grid-template-columns:170px 1fr;gap:14px;font-size:.82rem;line-height:1.6}.skill-label{font-size:.75rem;padding-top:1px}.skill-items{margin:0}.skill-link{text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px}.skill-link:hover{color:var(--accent)}@media (max-width: 600px){.skill-row{grid-template-columns:1fr;gap:0}}.lang-list{list-style:none;display:flex;flex-direction:column;gap:6px}.lang-row{display:grid;grid-template-columns:170px 80px 1fr;gap:14px;align-items:baseline;font-size:.85rem}.lang-meter{color:var(--accent);letter-spacing:.15em;font-size:.8rem}.lang-meter-off{color:var(--text-muted);opacity:.5}.lang-level{font-size:.78rem;color:var(--text-muted)}@media (max-width: 600px){.lang-row{grid-template-columns:1fr auto}.lang-level{grid-column:1 / -1;margin-top:-4px}}.topnav{position:fixed;top:0;left:0;right:0;z-index:100;background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);border-bottom:1px solid var(--border)}.topnav-inner{max-width:1080px;margin:0 auto;padding:0 32px;height:52px;display:flex;align-items:center;gap:24px}.topnav-brand{font-size:.85rem;font-weight:600;color:var(--c-green)}.topnav-brand-dim{color:var(--text-muted);font-weight:400}.topnav-links{display:flex;gap:4px 16px;flex:1;overflow-x:auto;scrollbar-width:none;white-space:nowrap}.topnav-links::-webkit-scrollbar{display:none}.topnav-link{font-size:.8rem;color:var(--text-muted);padding:2px;border-bottom:1px solid transparent;transition:color var(--transition),border-color var(--transition)}.topnav-link:hover{color:var(--accent)}.topnav-link.is-active{color:var(--accent);border-bottom-color:var(--accent)}.topnav-link:focus-visible{outline:1px dashed var(--accent);outline-offset:2px}.topnav .theme-toggle{position:static;height:30px;flex:none}section[id]{scroll-margin-top:72px}.layout{padding-top:40px}.topnav-menu-btn{display:none;align-items:center;gap:.5ch;height:30px;padding:0 10px;border:1px solid var(--border-card);border-radius:var(--radius);background:var(--bg-card);color:var(--text);font-family:var(--font-mono);font-size:.78rem;cursor:pointer;white-space:nowrap}.topnav-menu-btn .tt-prompt{color:var(--c-green)}.topnav-menu-current{color:var(--accent)}.topnav-menu-caret{color:var(--text-muted);font-size:.7rem}.topnav-menu-btn:focus-visible{outline:1px dashed var(--accent);outline-offset:2px}@media (max-width: 880px){.topnav-inner{padding:0 16px;gap:12px;justify-content:space-between}.topnav .theme-toggle .tt-cmd{display:none}.topnav-menu-btn{display:inline-flex;margin-right:auto}.topnav-links{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;gap:0;padding:8px 16px 12px;overflow:visible;background:var(--bg);border-bottom:1px solid var(--border);max-height:calc(100vh - 52px);overflow-y:auto}.topnav.is-open .topnav-links{display:flex}.topnav-link{font-size:.9rem;padding:10px 2px;border-bottom:none}.topnav-link.is-active{border-bottom:none}.topnav-link.is-active:before{content:"> "}}.course-list{list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:4px 20px;font-size:.82rem}.course-list li{position:relative;padding-left:16px}.course-list li:before{content:"-";position:absolute;left:3px;color:var(--accent)}.projects-list{gap:0}.project-item{padding:26px 0;border-top:1px solid var(--border)}.project-item:first-child{border-top:none;padding-top:4px}.project-item-header{margin-bottom:4px}.project-title{font-size:1rem}.project-context:before{content:"// ";opacity:.6}.project-context{font-size:.74rem}.project-tech{font-size:.75rem;margin-bottom:10px}.project-desc{font-size:.9rem;line-height:1.7;color:var(--text-bright);margin-bottom:14px}.metrics{gap:12px 28px;padding:10px 0;margin-bottom:14px;border-top:1px dashed var(--border-card);border-bottom:1px dashed var(--border-card)}.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}.metric-value{font-size:1.08rem}.metric-label{font-size:.74rem;color:var(--text);opacity:.75;max-width:24ch}.project-story{font-size:.88rem;line-height:1.8;color:var(--text);margin-bottom:14px}.project-story p+p{margin-top:2px}.thesis .project-story{font-size:.86rem}.project-preview{margin-bottom:14px}.project-title{margin-bottom:0}.project-context{font-size:.75rem;color:var(--text-muted);margin-bottom:10px}.project-context:before{content:none}.metrics{border:none;padding:0}.project-stack{font-size:.8rem;color:var(--text);line-height:1.6;margin-bottom:10px}.project-stack-label{display:inline-block;min-width:7ch;color:var(--text-muted)}.project-stack-label:after{content:":"}@media (max-width: 600px){.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}}.roadmap-prompt{font-size:.75rem;color:var(--text-muted);margin:-6px 0 14px}.roadmap{font-size:.84rem}.roadmap-row{display:grid;grid-template-columns:auto 64px 1fr;gap:14px;align-items:baseline;line-height:1.9}.roadmap-head{grid-template-columns:auto 1fr;font-size:.72rem;color:var(--text-muted);margin-bottom:2px}.roadmap-lanes{display:inline-flex;align-self:stretch}.roadmap-head .roadmap-lanes{align-self:auto}.roadmap-lane{position:relative;width:2.2ch;text-align:center;color:var(--accent)}.roadmap-lane.up:before,.roadmap-lane.down:after{content:"";position:absolute;left:50%;width:1px;margin-left:-.5px;background:var(--accent);opacity:.7}.roadmap-lane.up:before{top:0;height:.95em}.roadmap-lane.down:after{top:.95em;bottom:0}.roadmap-row:not(.roadmap-head) .roadmap-lane.dot{background:radial-gradient(circle at 50% .95em,var(--accent) 3.5px,transparent 4px)}.roadmap-legend{display:flex;flex-wrap:wrap;gap:0 14px}.roadmap-legend-item{color:var(--accent)}.roadmap-date{font-size:.75rem;color:var(--text-muted);white-space:nowrap}.roadmap-text{color:var(--text);transition:color var(--transition)}.roadmap-row:not(.roadmap-head):hover .roadmap-text{color:var(--accent)}.roadmap-ref{color:var(--accent);font-weight:600}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}@media (max-width: 600px){.roadmap-row{grid-template-columns:auto 1fr;gap:2px 10px;line-height:1.6;padding:4px 0}.roadmap-row:not(.roadmap-head) .roadmap-date{grid-column:2}.roadmap-row:not(.roadmap-head) .roadmap-text{grid-column:2}.roadmap-row:not(.roadmap-head) .roadmap-lanes{grid-row:1 / span 2}}.courses .thesis-label{margin-bottom:6px}.edu-item:last-child .thesis{margin-bottom:0}.tech-c0,.tech-c1,.tech-c2,.tech-c3,.tech-c4{color:var(--accent)}[data-color=bright]{--accent: var(--text-bright)}[data-color=muted]{--accent: var(--text-muted)}:root{--glow: 0 0 8px color-mix(in srgb, currentColor 45%, transparent)}[data-theme=light]{--glow: none}.section-title-text:before,.project-title:before,.metric-value,.roadmap-ref,.topnav-brand,.topnav-link.is-active,.hero-name{text-shadow:var(--glow)}.roadmap-row:not(.roadmap-head) .roadmap-lane.dot[data-color=section]{filter:drop-shadow(0 0 3px var(--accent))}[data-theme=light] .roadmap-row:not(.roadmap-head) .roadmap-lane.dot{filter:none}[data-theme=dark] .project-preview img{filter:invert(.92) hue-rotate(180deg) contrast(.95)}.thesis-title{font-size:.92rem;font-weight:500;color:var(--accent);margin:4px 0 12px;line-height:1.55}.thesis-title:before,.thesis-title:after{color:var(--text-muted);font-weight:400}.thesis-title:before{content:"“"}.thesis-title:after{content:"”"}.thesis-title{text-wrap:balance}
