:root{--paper: #fcfaf7;--paper-2: #f6f2ec;--paper-3: #efe9e1;--ink: #191613;--ink-2: #4a443d;--ink-3: #8b8378;--line: #e4dcd2;--line-2: #d3c9bc;--accent: #b0533a;--accent-tint: rgba(176, 83, 58, .07);--accent-ring: rgba(176, 83, 58, .3);--font-display: "Space Grotesk", "Inter", sans-serif;--font-sans: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--t-xs: .6875rem;--t-sm: .8125rem;--t-base: .9375rem;--t-md: 1.0625rem;--t-lg: 1.375rem;--t-xl: 1.875rem;--lh-tight: 1.25;--lh-body: 1.68;--s-1: 4px;--s-2: 8px;--s-3: 12px;--s-4: 16px;--s-5: 24px;--s-6: 32px;--s-7: 48px;--s-8: 72px;--rail-w: 300px;--content-w: 880px;--label-col: 116px}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-sans);font-size:var(--t-base);line-height:var(--lh-body);-webkit-font-smoothing:antialiased}h1,h2,h3,h4{margin:0;font-family:var(--font-display);font-weight:600;line-height:var(--lh-tight);letter-spacing:-.015em}p{margin:0}ul{margin:0;padding:0;list-style:none}a{color:inherit;text-decoration:none}.mono{font-family:var(--font-mono);font-size:var(--t-xs);letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3)}.meta{font-family:var(--font-mono);font-size:var(--t-sm);color:var(--ink-3)}.body-text{color:var(--ink-2)}.chip{display:inline-block;font-family:var(--font-mono);font-size:var(--t-sm);color:var(--ink-2);border:1px solid var(--line);background:var(--paper-2);border-radius:3px;padding:3px var(--s-2);line-height:1.4;transition:transform .15s ease,border-color .15s ease,color .15s ease,background .15s ease}.chip:hover{transform:translateY(-2px);border-color:var(--accent);color:var(--accent);background:var(--paper)}.link{color:var(--ink);border-bottom:1px solid var(--line-2);transition:border-color .15s ease,color .15s ease}.link:hover{color:var(--accent);border-color:var(--accent)}.shell{display:grid;grid-template-columns:var(--rail-w) minmax(0,1fr);min-height:100vh}.rail,.content{min-width:0}.rail{border-right:1px solid var(--line);background:var(--paper-3)}.rail-inner{position:sticky;top:0;height:100vh;padding:var(--s-7) var(--s-5);display:flex;flex-direction:column;gap:var(--s-5);overflow-y:auto}.rail-id{display:flex;flex-direction:column;gap:var(--s-4)}.rail-photo{width:96px;height:96px;border-radius:50%;object-fit:cover;border:1px solid var(--line-2);transition:transform .3s cubic-bezier(.22,1,.36,1),border-color .3s ease}.rail-photo:hover{transform:translateY(-3px) scale(1.02);border-color:var(--accent)}.rail-name{font-size:var(--t-xl);line-height:1.1;margin-bottom:var(--s-2)}.rail-title{font-size:var(--t-base);color:var(--ink-2);margin-bottom:var(--s-1)}.rail-location{display:block}.rail-nav{display:flex;flex-direction:column;margin-top:var(--s-2)}.rail-nav a{display:flex;align-items:baseline;gap:var(--s-3);padding:var(--s-2) 0;color:var(--ink-3);transition:color .18s ease}.rail-nav-idx{font-family:var(--font-mono);font-size:var(--t-xs);color:var(--line-2);transition:color .18s ease}.rail-nav-label{font-family:var(--font-mono);font-size:var(--t-sm);letter-spacing:.04em;position:relative}.rail-nav-label:after{content:"";position:absolute;left:0;bottom:-3px;height:1px;width:100%;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .28s cubic-bezier(.22,1,.36,1)}.rail-nav a:hover{color:var(--ink)}.rail-nav a:hover .rail-nav-label:after{transform:scaleX(1);opacity:.4}.rail-nav a.active{color:var(--ink)}.rail-nav a.active .rail-nav-idx{color:var(--accent)}.rail-nav a.active .rail-nav-label:after{transform:scaleX(1)}.rail-links{margin-top:auto;display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-4);padding-top:var(--s-5);border-top:1px solid var(--line)}.rail-links a{font-family:var(--font-mono);font-size:var(--t-sm);color:var(--ink-2);border-bottom:1px solid transparent;transition:color .15s ease,border-color .15s ease}.rail-links a:hover{color:var(--accent);border-color:var(--accent)}.cursor{display:inline-block;width:.42em;height:.9em;margin-left:.12em;background:var(--accent);vertical-align:-.05em;animation:blink 1.1s steps(1,end) infinite}@keyframes blink{0%,49%{opacity:1}50%,to{opacity:0}}.rail-opento{font-family:var(--font-mono);font-size:var(--t-sm);line-height:1.5;color:var(--ink-3);padding-left:var(--s-3);border-left:1px solid var(--line-2);margin-top:calc(var(--s-5) * -1 + var(--s-3))}.availability{display:inline-flex;align-items:flex-start;gap:var(--s-2);padding:var(--s-2) var(--s-3);border:1px solid var(--accent);border-radius:3px;background:var(--accent-tint);color:var(--accent);font-family:var(--font-mono);font-size:var(--t-sm);line-height:1.45}.availability .dot{width:6px;height:6px;margin-top:7px;border-radius:50%;background:var(--accent);flex-shrink:0;animation:pulse 2.2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1;box-shadow:0 0 0 0 var(--accent-ring)}50%{opacity:.6;box-shadow:0 0 0 5px #0000}}.content{padding:var(--s-7) var(--s-7) 0;max-width:calc(var(--content-w) + var(--s-7) * 2)}.section{padding-top:var(--s-8)}.intro-section{padding-top:0}.section-head{position:relative;display:flex;align-items:baseline;gap:var(--s-3);padding-bottom:var(--s-3);margin-bottom:var(--s-6);border-bottom:1px solid var(--line)}.section-head h2{font-size:var(--t-lg)}.section-head .idx{font-family:var(--font-mono);font-size:var(--t-xs);color:var(--ink-3)}.section-head:after{content:"";position:absolute;left:0;bottom:-1px;height:1px;width:100%;background:var(--accent);transform:scaleX(0);transform-origin:left}.section.reveal-in .section-head:after{animation:draw .75s cubic-bezier(.22,1,.36,1) .1s forwards}@keyframes draw{0%{transform:scaleX(0);opacity:.9}60%{transform:scaleX(1);opacity:.9}to{transform:scaleX(1);opacity:0}}.intro-section .entry{padding-bottom:0}.lead{font-family:var(--font-display);font-size:var(--t-md);color:var(--ink);margin-bottom:var(--s-4)}.facts{display:flex;flex-direction:column;gap:var(--s-1);padding-bottom:var(--s-5);border-bottom:1px solid var(--line);margin-bottom:var(--s-5)}.intro{display:flex;flex-direction:column;gap:var(--s-3)}.panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--s-4);margin-top:var(--s-6)}.panel{padding:var(--s-4) var(--s-5);border:1px solid var(--line);border-radius:3px;background:var(--paper-2)}.panel-accent{border-left:2px solid var(--accent)}.panel>.mono{display:block;margin-bottom:var(--s-3)}.panel-list{display:flex;flex-direction:column;gap:var(--s-3)}.panel-label{display:block;font-family:var(--font-mono);font-size:var(--t-sm);color:var(--accent);margin-bottom:2px}.panel-value{color:var(--ink-2);font-size:var(--t-base)}.entries{display:flex;flex-direction:column}.entry{display:grid;grid-template-columns:var(--label-col) minmax(0,1fr);gap:var(--s-5);padding:var(--s-5) 0;border-top:1px solid var(--line)}.entry:first-child{border-top:0;padding-top:0}.entry-when{font-family:var(--font-mono);font-size:var(--t-sm);color:var(--ink-3);line-height:1.5;padding-top:2px}.entry-title{font-size:var(--t-md);margin-bottom:var(--s-1)}.entry-org{font-size:var(--t-base);color:var(--ink-2);margin-bottom:var(--s-3)}.entry-org .sep{color:var(--line-2);margin:0 var(--s-2)}.bullets{display:flex;flex-direction:column;gap:var(--s-2)}.bullets li{position:relative;padding-left:var(--s-4);color:var(--ink-2)}.bullets li:before{content:"";position:absolute;left:0;top:.72em;width:5px;height:1px;background:var(--line-2);transition:width .2s ease,background .2s ease}.bullets li:hover:before{width:10px;background:var(--accent)}.section.reveal-in .bullets li{animation:rise .45s cubic-bezier(.22,1,.36,1) both}.bullets li:nth-child(1){animation-delay:.05s}.bullets li:nth-child(2){animation-delay:.11s}.bullets li:nth-child(3){animation-delay:.17s}.bullets li:nth-child(4){animation-delay:.23s}.tags{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-top:var(--s-3)}.course-groups{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--s-5);margin-top:var(--s-5)}.course-group>.mono{display:block;margin-bottom:var(--s-3)}.course-list{display:flex;flex-direction:column;gap:var(--s-2)}.course-list li{display:grid;grid-template-columns:82px 1fr;gap:var(--s-3);align-items:baseline;color:var(--ink-2);transition:color .15s ease}.course-list li:hover{color:var(--ink)}.course-list .code{font-family:var(--font-mono);font-size:var(--t-sm);color:var(--ink-3);white-space:nowrap;transition:color .15s ease}.course-list li:hover .code{color:var(--accent)}.course-title{line-height:1.45}.course-group.is-current{grid-column:1 / -1;padding-top:var(--s-4);border-top:1px solid var(--line)}.course-group.is-current>.mono{color:var(--accent)}.course-group.is-current .course-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--s-2) var(--s-5)}.course-group.is-current .course-list li{color:var(--ink)}.subhead{margin-top:var(--s-6);padding-top:var(--s-4);border-top:1px solid var(--line);margin-bottom:var(--s-4)}.project{border-top:1px solid var(--line);padding:var(--s-5) 0}.project:first-child{border-top:0;padding-top:0}.project-head{width:100%;display:flex;align-items:baseline;justify-content:space-between;gap:var(--s-4);background:none;border:0;padding:0;text-align:left;cursor:pointer;color:inherit;font:inherit}.project-title{display:block;transition:color .18s ease}.project-head:hover .project-title{color:var(--accent)}.project-right{display:flex;align-items:center;gap:var(--s-3);flex-shrink:0}.project-toggle{font-family:var(--font-mono);font-size:var(--t-sm);color:var(--ink-3);transition:color .15s ease}.project-head:hover .project-toggle{color:var(--accent)}.project-body{margin-top:var(--s-4);animation:expand .35s cubic-bezier(.22,1,.36,1) both}@keyframes expand{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}.pisi{display:flex;flex-direction:column;gap:var(--s-4)}.pisi-row{display:grid;grid-template-columns:var(--label-col) minmax(0,1fr);gap:var(--s-5)}.pisi-row .mono{padding-top:3px}.skill-groups{display:flex;flex-direction:column;gap:var(--s-6)}.skill-group+.skill-group{padding-top:var(--s-6);border-top:1px solid var(--line)}.skill-group-title{display:grid;grid-template-columns:var(--label-col) minmax(0,1fr);gap:var(--s-5);font-size:var(--t-md);margin-bottom:var(--s-5)}.skill-group-title:after{content:"";align-self:center;height:1px;background:var(--line)}.skill-rows{display:flex;flex-direction:column;gap:var(--s-4)}.skill-row{display:grid;grid-template-columns:var(--label-col) minmax(0,1fr);gap:var(--s-5)}.skill-row .mono{padding-top:4px}.skill-row .chips{display:flex;flex-wrap:wrap;gap:var(--s-2)}.resume-links{display:flex;flex-wrap:wrap;gap:var(--s-3)}.resume-links a{font-family:var(--font-mono);font-size:var(--t-sm);color:var(--ink-2);border:1px solid var(--line);background:var(--paper-2);border-radius:3px;padding:var(--s-2) var(--s-3);transition:color .15s ease,border-color .15s ease,transform .15s ease}.resume-links a:hover{color:var(--accent);border-color:var(--accent);transform:translateY(-1px)}.contact-list{display:flex;flex-direction:column}.contact-row{display:grid;grid-template-columns:var(--label-col) minmax(0,1fr) auto;gap:var(--s-5);align-items:center;padding:var(--s-4) 0;border-top:1px solid var(--line);transition:color .15s ease}.contact-row:first-child{border-top:0}.contact-row:hover{color:var(--accent)}.contact-row .value{color:var(--ink-2);transition:color .15s ease,transform .2s ease}.contact-row:hover .value{color:var(--accent);transform:translate(2px)}.contact-row .arrow{font-family:var(--font-mono);color:var(--ink-3);transition:transform .2s ease,color .15s ease}.contact-row:hover .arrow{color:var(--accent);transform:translate(4px)}.footer{margin-top:var(--s-8);padding:var(--s-5) 0;border-top:1px solid var(--line);font-family:var(--font-mono);font-size:var(--t-sm);color:var(--ink-3);display:flex;flex-direction:column;gap:var(--s-3)}.footer-row{display:flex;justify-content:space-between;gap:var(--s-4);flex-wrap:wrap}.footer-interests{display:flex;gap:var(--s-3);flex-wrap:wrap;align-items:baseline;color:var(--ink-2)}.reveal{opacity:0;transform:translateY(8px)}.reveal-in{opacity:1;transform:none;transition:opacity .5s ease,transform .5s ease}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.rail-id,.availability,.rail-opento,.rail-nav,.rail-links{animation:rise .6s cubic-bezier(.22,1,.36,1) both}.rail-id{animation-delay:.02s}.availability{animation-delay:.1s}.rail-opento{animation-delay:.14s}.rail-nav{animation-delay:.18s}.rail-links{animation-delay:.26s}@media (min-width: 1500px){:root{--rail-w: 340px}.content{padding-left:var(--s-8);padding-right:var(--s-8)}}@media (max-width: 1024px){:root{--rail-w: 250px}.content{padding:var(--s-7) var(--s-6) 0}}@media (max-width: 860px){.shell{grid-template-columns:minmax(0,1fr)}.rail{border-right:0;border-bottom:1px solid var(--line)}.rail-inner{position:static;height:auto;padding:var(--s-6) var(--s-5);overflow:visible}.rail-id{flex-direction:row;align-items:center;gap:var(--s-4)}.rail-photo{width:72px;height:72px}.rail-nav{flex-direction:row;flex-wrap:wrap;gap:var(--s-2) var(--s-4)}.availability{display:flex}.rail-nav-idx{display:none}.rail-links{margin-top:0}.content{padding:var(--s-6) var(--s-5) 0;max-width:none}.section{padding-top:var(--s-7)}}@media (max-width: 680px){:root{--t-xl: 1.625rem;--s-8: 56px}.panels,.course-groups,.course-group.is-current .course-list{grid-template-columns:minmax(0,1fr)}.rail-id{align-items:flex-start}.entry,.pisi-row,.skill-row,.contact-row{grid-template-columns:1fr;gap:var(--s-2)}.entry-when{order:-1}.course-list li{grid-template-columns:74px 1fr}.contact-row .arrow{display:none}.project-head{flex-direction:column;gap:var(--s-2);align-items:flex-start}.project-right{width:100%;justify-content:space-between}}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}.reveal,.reveal-in,.rail-id,.availability,.rail-nav,.rail-links,.project-body,.section.reveal-in .bullets li{animation:none;opacity:1;transform:none;transition:none}.cursor,.availability .dot,.rail-opento{animation:none}.section.reveal-in .section-head:after{animation:none}.rail-photo:hover,.chip:hover,.contact-row:hover .arrow,.contact-row:hover .value{transform:none}}
