:root{--bg: #f5f3ee;--ink: #1f1d1a;--ink-soft: rgba(31, 29, 26, .65);--ink-faint: rgba(31, 29, 26, .4);--ink-line: rgba(31, 29, 26, .12);--ink-line-strong: rgba(31, 29, 26, .2);--accent: #3d5a44;--accent-soft: rgba(61, 90, 68, .1);--pad-x: 56px}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--ink);font-family:Manrope,system-ui,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:inherit}.mono{font-family:JetBrains Mono,ui-monospace,monospace}:focus{outline:none}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='160' height='160'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0  0 0 0 0 0  0 0 0 0 0  0 0 0 0.06 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");opacity:.55;mix-blend-mode:multiply}.app{min-height:100vh;display:flex;flex-direction:column}.nav{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:22px var(--pad-x);border-bottom:1px solid var(--ink-line-strong);font-family:JetBrains Mono,monospace;font-size:13px;position:sticky;top:0;z-index:100;background:var(--bg);box-shadow:0 1px 0 var(--ink-line)}.nav-name{display:flex;align-items:center;gap:12px}.nav-photo{width:28px;height:28px;border-radius:50%;background:var(--ink);color:var(--bg);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;letter-spacing:.02em;background-image:linear-gradient(135deg,transparent 40%,rgba(255,255,255,.08) 50%,transparent 60%),repeating-linear-gradient(135deg,currentColor 0 1px,transparent 1px 7px)}.nav-name b{font-weight:600}.nav-name span{color:var(--ink-faint)}.nav-links{display:flex;gap:4px;justify-self:center;position:relative}.nav-links a{color:var(--ink);text-decoration:none;padding:6px 14px;position:relative;z-index:1;transition:color .25s ease}.nav-links a.is-active{color:var(--accent)}.nav-links a:hover:not(.is-active){color:var(--ink)}.nav-bracket{position:absolute;top:0;bottom:0;pointer-events:none;transition:transform .42s cubic-bezier(.6,.05,.2,1),width .42s cubic-bezier(.6,.05,.2,1);display:flex;align-items:center;justify-content:space-between;color:var(--accent);font-weight:600;padding:0 4px;opacity:0}.nav-bracket.ready{opacity:1}.nav-bracket:before{content:"["}.nav-bracket:after{content:"]"}.nav-meta{justify-self:end;color:var(--ink-faint);font-variant-numeric:tabular-nums;display:flex;align-items:center;gap:14px}.nav-meta .clock{color:var(--ink-soft)}.nav-meta .dot{width:6px;height:6px;border-radius:50%;background:var(--accent);animation:pulse 2.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.35;transform:scale(1)}50%{opacity:1;transform:scale(1.35)}}.page{flex:1;opacity:0;transform:translateY(8px);animation:page-in .55s cubic-bezier(.2,.7,.2,1) forwards}@keyframes page-in{to{opacity:1;transform:translateY(0)}}.page.exiting{animation:page-out .25s cubic-bezier(.5,0,.7,.3) forwards}@keyframes page-out{to{opacity:0;transform:translateY(-6px)}}.stagger>*{opacity:0;transform:translateY(10px);animation:row-in .55s cubic-bezier(.2,.7,.2,1) forwards}.stagger>*:nth-child(1){animation-delay:60ms}.stagger>*:nth-child(2){animation-delay:.11s}.stagger>*:nth-child(3){animation-delay:.16s}.stagger>*:nth-child(4){animation-delay:.21s}.stagger>*:nth-child(5){animation-delay:.26s}.stagger>*:nth-child(6){animation-delay:.31s}.stagger>*:nth-child(7){animation-delay:.36s}.stagger>*:nth-child(8){animation-delay:.41s}.stagger>*:nth-child(9){animation-delay:.46s}.stagger>*:nth-child(10){animation-delay:.51s}@keyframes row-in{to{opacity:1;transform:translateY(0)}}.section{padding:64px var(--pad-x);border-bottom:1px solid var(--ink-line)}.section-head{display:grid;grid-template-columns:140px 1fr auto;align-items:baseline;margin-bottom:32px;font-family:JetBrains Mono,monospace}.section-head .idx{font-size:12px;color:var(--accent);letter-spacing:.08em;font-variant-numeric:tabular-nums}.section-head h2{font-family:Manrope,sans-serif;font-size:32px;margin:0;font-weight:600;letter-spacing:-.015em}.section-head .more{font-size:12px;text-decoration:none;color:var(--ink);padding-bottom:2px;border-bottom:1px solid var(--ink);transition:color .2s,border-color .2s}.section-head .more:hover{color:var(--accent);border-color:var(--accent)}.hero{display:grid;grid-template-columns:1.2fr .8fr;gap:48px;padding:96px var(--pad-x) 72px;border-bottom:1px solid var(--ink-line)}.hero-num{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-faint);letter-spacing:.06em;margin-bottom:28px}.hero h1{font-size:68px;line-height:1.05;letter-spacing:-.03em;font-weight:700;margin:0 0 28px}.hero h1 .accent{color:var(--accent)}.hero p{font-size:18px;line-height:1.6;max-width:560px;margin:0 0 28px;color:var(--ink-soft)}.hero p a{color:var(--accent);text-decoration:none;border-bottom:1px solid currentColor}.hero-prompt{font-family:JetBrains Mono,monospace;font-size:14px;color:var(--ink-soft);margin-top:8px;display:flex;align-items:center;gap:6px}.hero-prompt:before{content:"$";color:var(--accent)}.caret{display:inline-block;width:8px;height:1.1em;background:var(--ink);margin-left:4px;transform:translateY(2px);animation:blink 1.05s steps(2,end) infinite}@keyframes blink{50%{opacity:0}}.stat-grid{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--ink-line);border-left:1px solid var(--ink-line)}.stat{border-right:1px solid var(--ink-line);border-bottom:1px solid var(--ink-line);padding:22px 24px;position:relative;transition:background .25s ease}.stat:hover{background:var(--accent-soft)}.stat-label{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--ink-faint);letter-spacing:.08em;text-transform:uppercase;margin-bottom:14px}.stat-val{font-size:32px;font-weight:600;letter-spacing:-.02em;line-height:1.1}.stat-val small{font-size:14px;color:var(--ink-faint);font-weight:500;margin-left:4px}.stat-val .mono-small{display:block;font-family:JetBrains Mono,monospace;font-size:16px;font-weight:500;line-height:1.5}.stat-sub{font-size:13px;color:var(--ink-faint);margin-top:8px;font-family:JetBrains Mono,monospace}.work-list{display:grid;gap:0}.work-item{display:grid;grid-template-columns:120px 1fr 220px 100px;gap:24px;padding:24px 0;align-items:baseline;border-top:1px solid var(--ink-line);font-family:JetBrains Mono,monospace;position:relative;cursor:pointer;transition:padding-left .35s cubic-bezier(.2,.7,.2,1)}.work-item:first-child{border-top:none}.work-item:before{content:"";position:absolute;left:0;top:50%;width:0;height:1px;background:var(--accent);transform:translateY(-50%);transition:width .35s cubic-bezier(.2,.7,.2,1)}.work-item:hover{padding-left:28px}.work-item:hover:before{width:18px}.work-item:hover .what b,.work-item:hover .when{color:var(--accent)}.work-item:hover .arrow{color:var(--accent);transform:translate(4px)}.work-item .when{font-size:12px;color:var(--ink-faint);transition:color .25s}.work-item .what{font-family:Manrope,sans-serif}.work-item .what b{font-size:18px;font-weight:600;letter-spacing:-.005em;transition:color .25s}.work-item .what em{font-style:normal;color:var(--ink-soft);font-weight:500;margin-left:8px;font-size:15px}.work-item .where{font-size:13px;color:var(--ink-soft)}.work-item .arrow{text-align:right;font-size:13px;color:var(--accent);font-weight:600;transition:color .25s,transform .25s cubic-bezier(.2,.7,.2,1)}.work-row{border-top:1px solid var(--ink-line);padding:28px 0}.work-row:first-child{border-top:none}.work-row .head{display:grid;grid-template-columns:120px 1fr 200px;gap:24px;align-items:baseline;cursor:pointer;position:relative;width:100%;padding:0;margin:0;background:transparent;border:0;text-align:left;font:inherit;color:inherit}.work-row .head .toggle{position:absolute;right:0;top:0;font-family:JetBrains Mono,monospace;color:var(--accent);font-size:13px;font-weight:600;transition:transform .2s ease}.work-row .head:hover .toggle{transform:translate(-2px)}.work-row .when{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-faint)}.work-row .co{font-size:22px;font-weight:700;letter-spacing:-.015em}.work-row .role{display:block;font-size:15px;color:var(--ink-soft);margin-top:4px;font-weight:500}.work-row .where{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-faint);text-align:right}.work-row .body{display:grid;grid-template-columns:120px 1fr 200px;gap:24px;margin-top:20px;font-size:15px;line-height:1.6;color:var(--ink-soft)}.work-row .body ul{margin:0;padding:0;list-style:none}.work-row .body li{position:relative;padding:4px 0 4px 18px}.work-row .body li:before{content:"·";position:absolute;left:4px;color:var(--accent)}.work-row .body .stack{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-faint);display:flex;flex-direction:column;gap:4px;border-left:1px solid var(--ink-line);padding-left:16px}.work-row .body .stack b{color:var(--ink);font-weight:500;display:block;margin-bottom:4px;font-size:11px;letter-spacing:.08em;text-transform:uppercase}.proj-grid{display:grid;grid-template-columns:1fr 1fr;gap:0;border-top:1px solid var(--ink-line);border-left:1px solid var(--ink-line)}.proj{border-right:1px solid var(--ink-line);border-bottom:1px solid var(--ink-line);padding:36px;position:relative;cursor:pointer;transition:background .3s ease;min-height:280px;display:flex;flex-direction:column}.proj:hover{background:var(--accent-soft)}.proj .num{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--ink-faint);letter-spacing:.08em;margin-bottom:18px}.proj .name{font-size:26px;font-weight:700;letter-spacing:-.02em;margin:0 0 10px;transition:color .25s}.proj:hover .name{color:var(--accent)}.proj .desc{font-size:15px;line-height:1.55;color:var(--ink-soft);margin:0 0 20px;max-width:460px}.proj .meta{margin-top:auto;font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-faint);display:flex;gap:14px;flex-wrap:wrap;align-items:center}.proj .meta .tag:before{content:"#";color:var(--accent)}.proj .arrow{position:absolute;top:32px;right:36px;font-family:JetBrains Mono,monospace;color:var(--ink-faint);transition:transform .35s cubic-bezier(.2,.7,.2,1),color .25s}.proj:hover .arrow{transform:translate(4px,-4px);color:var(--accent)}.about-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:48px;padding:72px var(--pad-x)}.about-bio h1{font-size:52px;line-height:1.05;letter-spacing:-.03em;font-weight:700;margin:0 0 32px}.about-bio h1 .accent{color:var(--accent)}.about-bio p{font-size:17px;line-height:1.7;color:var(--ink-soft);margin:0 0 18px;max-width:580px}.about-bio p strong{color:var(--ink);font-weight:600}.skills{display:flex;flex-direction:column;gap:18px;font-family:JetBrains Mono,monospace}.skills .group h3{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent);margin:0 0 8px;font-weight:600}.skills .chips{display:flex;flex-wrap:wrap;gap:5px}.skills .chip{font-size:11.5px;padding:4px 9px;border:1px solid var(--ink-line-strong);border-radius:4px;color:var(--ink-soft);background:var(--bg);transition:border-color .2s,color .2s,background .2s;white-space:nowrap}.skills .chip:hover{border-color:var(--accent);color:var(--accent);background:var(--accent-soft)}.skills .chip.solid{background:var(--ink);color:var(--bg);border-color:var(--ink)}.about-edu{border-top:1px solid var(--ink-line);padding:64px var(--pad-x)}.about-edu .row{display:grid;grid-template-columns:140px 1fr 200px;gap:24px;padding:22px 0;border-bottom:1px solid var(--ink-line);align-items:baseline}.about-edu .row:last-child{border-bottom:none}.about-edu .row .when{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-faint)}.about-edu .row .what b{font-size:18px;font-weight:700;letter-spacing:-.005em}.about-edu .row .what span{display:block;font-size:14px;color:var(--ink-soft);margin-top:4px}.about-edu .row .gpa{font-family:JetBrains Mono,monospace;font-size:13px;color:var(--ink-soft);text-align:right}.about-edu .row .gpa b{color:var(--accent)}.contact{padding:80px var(--pad-x) 64px;border-top:1px solid var(--ink-line)}.contact h2{font-size:56px;line-height:1;letter-spacing:-.03em;margin:0 0 24px;font-weight:700}.contact h2 .accent{color:var(--accent)}.contact p{font-size:17px;line-height:1.6;color:var(--ink-soft);max-width:520px;margin:0 0 32px}.contact .links{display:flex;flex-direction:column;gap:0;border-top:1px solid var(--ink-line)}.contact .links a{display:grid;grid-template-columns:140px 1fr 80px;gap:24px;padding:18px 0;border-bottom:1px solid var(--ink-line);font-family:JetBrains Mono,monospace;text-decoration:none;color:var(--ink);align-items:baseline;position:relative;transition:padding-left .3s cubic-bezier(.2,.7,.2,1)}.contact .links a:hover{padding-left:16px}.contact .links a:before{content:"→";position:absolute;left:-16px;opacity:0;color:var(--accent);transition:opacity .25s,transform .3s cubic-bezier(.2,.7,.2,1)}.contact .links a:hover:before{opacity:1;transform:translate(8px)}.contact .links a .label{font-size:12px;color:var(--ink-faint);letter-spacing:.08em;text-transform:uppercase}.contact .links a .value{font-size:15px}.contact .links a:hover .value{color:var(--accent)}.contact .links a .arr{text-align:right;color:var(--ink-faint);font-size:13px}footer.foot{padding:24px var(--pad-x);border-top:1px solid var(--ink-line);display:flex;justify-content:space-between;font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-faint)}.scramble{font-variant-numeric:tabular-nums}.notice{font-family:JetBrains Mono,monospace;font-size:12px;color:var(--ink-faint);padding:8px 12px;border:1px dashed var(--ink-line-strong);border-radius:4px;display:inline-block;margin-bottom:24px}.notice b{color:var(--accent);font-weight:500}@media(max-width:960px){:root{--pad-x: 32px}.hero{grid-template-columns:1fr;gap:36px;padding:72px var(--pad-x) 56px}.hero h1{font-size:52px}.about-grid{grid-template-columns:1fr;gap:40px;padding:56px var(--pad-x)}.about-bio h1{font-size:42px}.section{padding:48px var(--pad-x)}.contact h2{font-size:44px}}@media(max-width:640px){:root{--pad-x: 18px}.nav{grid-template-columns:auto 1fr;gap:8px;padding:14px var(--pad-x);font-size:12px}.nav-name{gap:8px}.nav-name span{display:none}.nav-name b{font-size:13px}.nav-photo{width:24px;height:24px;font-size:10px}.nav-links{grid-column:1 / -1;justify-self:start;gap:0;margin-top:2px;margin-left:-10px}.nav-links a{padding:4px 10px;font-size:12px}.nav-bracket{padding:0 2px}.nav-meta{grid-column:2;grid-row:1;font-size:11px;gap:8px}.hero{padding:48px var(--pad-x) 40px;gap:28px}.hero-num{margin-bottom:16px}.hero h1{font-size:34px;line-height:1.08;margin-bottom:20px}.hero p{font-size:16px;margin-bottom:20px}.hero-prompt{font-size:12px}.stat-grid{grid-template-columns:1fr 1fr}.stat{padding:16px 14px}.stat-val{font-size:24px}.stat-val .mono-small{font-size:13px}.stat-sub{font-size:12px}.section{padding:40px var(--pad-x)}.section-head{grid-template-columns:1fr auto;gap:6px 12px;margin-bottom:22px}.section-head .idx{grid-column:1 / -1}.section-head h2{font-size:26px}.section-head .more{font-size:11px}.work-list{gap:0}.work-item{grid-template-columns:auto 1fr auto;grid-template-areas:"when  arrow arrow" "what  what  what" "where where where";gap:4px 12px;padding:18px 0}.work-item .when{grid-area:when;font-size:11px}.work-item .what{grid-area:what}.work-item .where{grid-area:where;font-size:12px}.work-item .arrow{grid-area:arrow;font-size:12px}.work-item .what b{font-size:16px}.work-item .what em{display:block;margin-left:0;margin-top:2px;font-size:13px}.work-item:hover{padding-left:12px}.work-row{padding:22px 0}.work-row .head{grid-template-columns:1fr auto;gap:4px 12px}.work-row .head .when{grid-column:1}.work-row .head .toggle{position:static;grid-column:2;grid-row:1 / span 2;align-self:start}.work-row .head>div:nth-child(2){grid-column:1}.work-row .head .where{grid-column:1;text-align:left;margin-top:4px}.work-row .co{font-size:19px}.work-row .role{font-size:14px}.work-row .body{grid-template-columns:1fr;gap:14px;margin-top:14px;font-size:14px}.work-row .body>div:first-child{display:none}.work-row .body .stack{border-left:none;padding-left:0;border-top:1px solid var(--ink-line);padding-top:12px;flex-direction:row;flex-wrap:wrap;gap:6px 10px}.work-row .body .stack b{margin-bottom:0;width:100%}.proj-grid{grid-template-columns:1fr}.proj{padding:24px 20px;min-height:0}.proj .name{font-size:22px}.proj .arrow{top:22px;right:20px}.about-bio h1{font-size:32px;margin-bottom:22px}.about-bio p{font-size:15px;line-height:1.65}.skills{flex-direction:row;flex-wrap:wrap;gap:18px 24px}.skills .group{flex:1 1 140px;min-width:0}.about-edu{padding:40px var(--pad-x)}.about-edu .row{grid-template-columns:1fr auto;gap:4px 12px}.about-edu .row .when{grid-column:1}.about-edu .row .gpa{grid-column:2;grid-row:1;text-align:right}.about-edu .row .what{grid-column:1 / -1}.about-edu .row .what b{font-size:16px}.about-edu .row .what span{font-size:13px}.contact{padding:56px var(--pad-x) 40px}.contact h2{font-size:34px}.contact p{font-size:15px}.contact .links a{grid-template-columns:1fr auto;gap:2px 12px;padding:14px 0}.contact .links a .label{grid-column:1;font-size:11px}.contact .links a .arr{grid-column:2;grid-row:1 / span 2;align-self:center}.contact .links a .value{grid-column:1;font-size:14px;word-break:break-all}.contact .links a:hover{padding-left:8px}footer.foot{flex-direction:column;gap:6px;align-items:flex-start;padding:20px var(--pad-x);font-size:11px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}.stagger>*{opacity:1;transform:none}.page{opacity:1;transform:none}.caret{animation:none;opacity:1}}
