*,:before,:after{box-sizing:border-box;margin:0;padding:0}[data-theme=light]{--bg:#f2efe7;--bg2:#eae6dc;--fg:#1e1b17;--fg2:#847e73;--fg3:#b8b2a8;--accent:#4e63c4;--accent-bg:#4e63c414;--accent-border:#4e63c438;--border:#ded9cf;--surface:#e4e0d7;--card:#fdfbf7}[data-theme=dark]{--bg:#0f0e0b;--bg2:#181510;--fg:#eae6dc;--fg2:#7a7469;--fg3:#4a4640;--accent:#8b9ae6;--accent-bg:#8b9ae614;--accent-border:#8b9ae633;--border:#eae6dc1a;--surface:#1d1a14;--card:#191612}html{scroll-behavior:smooth;font-size:18px}section[id],footer{scroll-margin-top:88px}.reveal{opacity:0;transition:opacity .7s,transform .7s;transform:translateY(26px)}.reveal.in-view{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transition:none;transform:none}.proj-row,.proj-row.is-dim,.proj-row.is-near,.proj-row.is-focus{opacity:1;transition:none}}html,body{background:var(--bg);min-height:100vh;color:var(--fg);font-family:DM Sans,sans-serif;transition:background .4s,color .4s}body{overflow-x:hidden}body:before{content:"";background-image:radial-gradient(circle,var(--border) 1px,transparent 1px);opacity:.6;pointer-events:none;z-index:0;background-size:28px 28px;transition:opacity .4s;position:fixed;inset:0}.sec-bg{z-index:0;pointer-events:none;opacity:.16;transition:opacity .4s;position:fixed;inset:0;-webkit-mask-image:linear-gradient(#0000,#000 18% 82%,#0000);mask-image:linear-gradient(#0000,#000 18% 82%,#0000)}[data-theme=light] .sec-bg{opacity:.1}nav{z-index:100;border-bottom:1px solid var(--border);background:var(--bg);justify-content:space-between;align-items:center;height:64px;padding:0 4rem;transition:background .4s,border-color .4s;display:flex;position:fixed;top:0;left:0;right:0}.nav-logo{align-items:baseline;gap:.4rem;font-family:Cormorant,serif;line-height:1;text-decoration:none;display:flex}.nl-first{color:var(--fg2);letter-spacing:-.01em;font-size:1.3rem;font-style:italic;font-weight:600;transition:color .2s}.nl-last{color:var(--fg);letter-spacing:-.02em;font-size:1.3rem;font-weight:700;transition:color .2s}.nav-logo:hover .nl-first,.nav-logo:hover .nl-last{color:var(--accent)}.nav-right{align-items:center;gap:3rem;display:flex}.nav-links{gap:2rem;list-style:none;display:flex}.nav-links a{color:var(--fg2);letter-spacing:.04em;font-size:.78rem;text-decoration:none;transition:color .2s}.nav-links a:hover{color:var(--fg)}.theme-btn{border:1px solid var(--border);background:var(--surface);cursor:pointer;width:36px;height:36px;color:var(--fg2);border-radius:50%;justify-content:center;align-items:center;font-size:15px;transition:all .2s;display:flex}.theme-btn:hover{border-color:var(--accent);color:var(--accent)}.nav-toggle{border:1px solid var(--border);background:var(--surface);cursor:pointer;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;gap:4px;width:36px;height:36px;transition:border-color .2s;display:none}.nav-toggle:hover{border-color:var(--accent)}.nav-toggle-bar{background:var(--fg2);width:16px;height:2px;transition:transform .25s,opacity .2s;display:block}nav.menu-open .nav-toggle-bar:first-child{transform:translateY(6px)rotate(45deg)}nav.menu-open .nav-toggle-bar:nth-child(2){opacity:0}nav.menu-open .nav-toggle-bar:nth-child(3){transform:translateY(-6px)rotate(-45deg)}.hero{z-index:1;grid-template-columns:1fr 320px;align-items:center;gap:4rem;max-width:1280px;min-height:100vh;margin:0 auto;padding:8rem 4rem 4rem;display:grid;position:relative}.eyebrow{opacity:0;align-items:center;gap:1rem;margin-bottom:2.5rem;animation:.55s .1s forwards up;display:flex}.eyebrow-line{background:var(--accent);flex-shrink:0;width:32px;height:1px}.eyebrow-text{letter-spacing:.14em;text-transform:uppercase;color:var(--fg2);font-family:IBM Plex Mono,monospace;font-size:.68rem}.avatar-sm{border:1px solid var(--border);background:var(--accent-bg);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:96px;height:96px;display:flex;overflow:hidden}.avatar-sm img{object-fit:cover;object-position:top;width:100%;height:100%;display:block}.avatar-initials{color:var(--accent);letter-spacing:.02em;-webkit-user-select:none;user-select:none;font-family:Cormorant,serif;font-size:2rem;font-weight:700;line-height:1}.hero-name{opacity:0;margin-bottom:1.75rem;animation:.55s .2s forwards up}.name-line1{color:var(--fg2);letter-spacing:-.01em;font-family:Cormorant,serif;font-size:clamp(3.8rem,8.5vw,7.5rem);font-style:italic;font-weight:600;line-height:.9;display:block}.name-line2{color:var(--fg);letter-spacing:-.02em;font-family:Cormorant,serif;font-size:clamp(4rem,9vw,8rem);font-style:normal;font-weight:700;line-height:.88;display:block}.divider{opacity:0;align-items:center;gap:0;height:1px;margin:2rem 0;animation:.55s .3s forwards up;display:flex}.div-thick{background:var(--fg);width:48px;height:2px}.div-thin{background:var(--border);flex:1;height:1px}.role-row{opacity:0;align-items:center;gap:.75rem;margin-bottom:2rem;animation:.55s .38s forwards up;display:flex}.role-label{letter-spacing:.1em;text-transform:uppercase;color:var(--fg3);font-family:IBM Plex Mono,monospace;font-size:.7rem}.role-sep{background:var(--border);width:1px;height:14px}.role-typed{color:var(--accent);letter-spacing:.04em;font-family:IBM Plex Mono,monospace;font-size:.78rem}.role-cursor{background:var(--accent);vertical-align:middle;width:2px;height:.85em;margin-left:1px;animation:1s step-end infinite blink;display:inline-block}.hero-bio{color:var(--fg2);opacity:0;max-width:500px;margin-bottom:2.5rem;font-size:1rem;font-weight:400;line-height:1.85;animation:.55s .46s forwards up}.hero-bio em{color:var(--fg);font-style:normal;font-weight:500}.cta-row{opacity:0;align-items:center;gap:2rem;margin-bottom:3rem;animation:.55s .54s forwards up;display:flex}.btn-main{background:var(--fg);color:var(--bg);cursor:pointer;letter-spacing:.02em;border:none;align-items:center;gap:.6rem;padding:.75rem 2rem;font-family:DM Sans,sans-serif;font-size:.82rem;font-weight:500;text-decoration:none;transition:all .2s;display:inline-flex}.btn-main:hover{background:var(--accent);color:#fff}.btn-text{color:var(--fg2);letter-spacing:.02em;border-bottom:1px solid var(--border);align-items:center;gap:.4rem;padding-bottom:1px;font-size:.82rem;text-decoration:none;transition:color .2s;display:inline-flex}.btn-text:hover{color:var(--fg);border-color:var(--fg)}.socials{opacity:0;gap:1.75rem;animation:.55s .62s forwards up;display:flex}.s-link{color:var(--fg3);letter-spacing:.1em;text-transform:uppercase;align-items:center;gap:.4rem;font-family:IBM Plex Mono,monospace;font-size:.68rem;text-decoration:none;transition:color .2s;display:flex}.s-link svg{width:12px;height:12px}.s-link:hover{color:var(--accent)}.hero-right{opacity:0;align-self:start;animation:.55s .7s forwards up}.r-focus{flex-wrap:wrap;gap:.5rem;margin-bottom:clamp(3rem,5vw,5.5rem);display:flex}.r-focus-item{letter-spacing:.03em;color:var(--fg2);border:1px solid var(--border);background:var(--card);cursor:default;padding:.5rem .85rem;font-family:IBM Plex Mono,monospace;font-size:.72rem;transition:color .2s,border-color .2s,background .2s}.r-focus-item:hover{color:var(--accent);border-color:var(--accent-border);background:var(--accent-bg)}.r-rule{background:var(--border);width:100%;height:1px;margin:0 0 1.75rem}.r-label{letter-spacing:.16em;text-transform:uppercase;color:var(--fg3);margin-bottom:1rem;font-family:IBM Plex Mono,monospace;font-size:.58rem}.r-edu-list{flex-direction:column;gap:1.1rem;margin-bottom:1.75rem;display:flex}.r-edu-item{align-items:flex-start;gap:.85rem;display:flex}.r-edu-dot{background:var(--accent);border-radius:50%;flex-shrink:0;width:5px;height:5px;margin-top:.45rem}.r-edu-title{color:var(--fg);margin-bottom:.2rem;font-size:.85rem;font-weight:500;line-height:1.3}.r-edu-sub{color:var(--fg3);letter-spacing:.02em;font-family:IBM Plex Mono,monospace;font-size:.65rem}.r-contact{flex-direction:column;gap:.55rem;display:flex}.r-contact-row{align-items:center;gap:.65rem;display:flex}.r-contact-icon{color:var(--fg3);flex-shrink:0}.r-contact-icon svg{width:12px;height:12px;display:block}.r-contact-text{color:var(--fg2);letter-spacing:.02em;font-family:IBM Plex Mono,monospace;font-size:.68rem}.r-contact-text a{color:var(--accent);text-decoration:none}.r-contact-text a:hover{text-decoration:underline}@keyframes up{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}.skills-section{z-index:1;border-top:1px solid var(--border);max-width:1280px;margin:0 auto;padding:6rem 4rem;position:relative}.skills-index{border-top:1px solid var(--border);margin-top:3.5rem}.skill-row{border-bottom:1px solid var(--border);border-left:2px solid #0000;grid-template-columns:220px 1fr;align-items:baseline;gap:0 3rem;padding:1.6rem 0;transition:padding-left .25s,background .25s,border-left-color .25s;display:grid}.skill-row:hover{background:var(--bg2);border-left-color:var(--accent);padding-left:1.25rem}.sk-category{letter-spacing:.14em;text-transform:uppercase;color:var(--fg3);flex-shrink:0;align-items:center;gap:.55rem;padding-top:.1rem;font-family:IBM Plex Mono,monospace;font-size:.62rem;display:inline-flex}.sk-cat-icon{color:var(--fg2);flex-shrink:0;transition:color .25s;display:inline-flex}.sk-cat-icon svg{width:16px;height:16px;display:block}.skill-row:hover .sk-cat-icon{color:var(--accent)}.sk-list{flex-wrap:wrap;align-items:center;gap:.3rem 0;display:flex}.sk{color:var(--fg2);letter-spacing:.02em;cursor:default;white-space:nowrap;font-family:IBM Plex Mono,monospace;font-size:.78rem;transition:color .2s}.sk:hover{color:var(--accent)}.sk-sep{color:var(--border);-webkit-user-select:none;user-select:none;margin:0 .6rem;font-size:.7rem}.projects-section{z-index:1;border-top:1px solid var(--border);max-width:1280px;margin:0 auto;padding:6rem 4rem;position:relative}.sec-eyebrow{align-items:center;gap:1rem;margin-bottom:1rem;display:flex}.sec-eyebrow .sec-line{background:var(--accent);flex-shrink:0;width:32px;height:1px}.sec-eyebrow span{letter-spacing:.14em;text-transform:uppercase;color:var(--fg2);font-family:IBM Plex Mono,monospace;font-size:.68rem}.sec-heading{letter-spacing:-.02em;color:var(--fg);margin-bottom:3.5rem;font-family:Cormorant,serif;font-size:clamp(2.4rem,4.5vw,3.8rem);font-weight:700;line-height:.95}.proj-index{border-top:1px solid var(--border)}.proj-row{border-bottom:1px solid var(--border);opacity:1;border-left:2px solid #0000;outline:none;grid-template-columns:72px 1fr auto;align-items:center;gap:0 2.5rem;padding:2rem 1.75rem 2rem 0;text-decoration:none;transition:border-color .45s,padding-left .45s,background .45s,opacity .45s;display:grid}.proj-row.is-dim{opacity:.4}.proj-row.is-near{opacity:.68}.proj-row.is-focus{opacity:1;border-left-color:var(--accent);background:var(--bg2);padding-left:1.25rem}.proj-row.is-focus .pr-num,.proj-row.is-focus .pr-name{color:var(--accent)}.proj-row.is-focus .pr-arrow{color:var(--accent);transform:translate(3px,-3px)}.proj-row:focus-visible{opacity:1;border-left-color:var(--accent);background:var(--bg2);padding-left:1.25rem}.proj-row:focus-visible .pr-name{color:var(--accent)}.proj-row:focus-visible .pr-arrow{color:var(--accent);transform:translate(3px,-3px)}.pr-num{color:var(--border);letter-spacing:-.02em;-webkit-user-select:none;user-select:none;align-self:flex-start;padding-top:.1rem;font-family:Cormorant,serif;font-size:3rem;font-weight:700;line-height:1;transition:color .25s}.pr-main{flex-direction:column;gap:.5rem;min-width:0;display:flex}.pr-title-row{flex-wrap:wrap;align-items:baseline;gap:1rem;display:flex}.pr-name{color:var(--fg);letter-spacing:-.01em;font-family:Cormorant,serif;font-size:1.9rem;font-weight:700;line-height:1;transition:color .25s}.pr-badge{letter-spacing:.1em;text-transform:uppercase;color:var(--accent);border:1px solid var(--accent-border);background:var(--accent-bg);flex-shrink:0;align-self:center;padding:.2rem .55rem;font-family:IBM Plex Mono,monospace;font-size:.6rem}.pr-badge--cloud{color:var(--bg);background:var(--accent);border-color:var(--accent)}.proj-row--cloud{border-left-color:var(--accent-border)}.proj-row--cloud .pr-num{color:var(--accent)}.pr-desc{color:var(--fg2);white-space:nowrap;text-overflow:ellipsis;font-size:.82rem;line-height:1.6;overflow:hidden}.pr-tags{flex-wrap:wrap;gap:1rem;display:flex}.pr-tag{letter-spacing:.06em;color:var(--fg3);font-family:IBM Plex Mono,monospace;font-size:.62rem}.pr-right{flex-shrink:0;justify-content:flex-end;align-items:center;display:flex}.pr-arrow{color:var(--fg3);transition:transform .25s,color .25s;display:block}.pr-arrow svg{width:20px;height:20px;display:block}.edu-row{grid-template-columns:250px 1fr 200px;align-items:stretch;padding:0;overflow:hidden}.edu-row:hover{background:0 0;border-left-color:#0000;padding-left:0}.edu-row>div:first-child,.edu-row>div:nth-child(2){padding:2rem 0}.edu-period{margin-bottom:.5rem;display:block}.edu-loc{color:var(--fg3)}.edu-loc--accent{color:var(--accent)}.edu-img-wrap{align-self:stretch;min-height:140px;position:relative;overflow:hidden}.edu-img{object-fit:cover;object-position:center;filter:grayscale(30%);width:100%;height:100%;display:block}.edu-img-wrap:before{content:"";background:linear-gradient(to right, var(--bg2) 0%, transparent 30%);z-index:1;pointer-events:none;position:absolute;inset:0}.edu-degree{color:var(--fg);letter-spacing:-.01em;margin-bottom:.3rem;font-family:Cormorant,serif;font-size:1.5rem;font-weight:700}.edu-inst{color:var(--fg2);font-family:IBM Plex Mono,monospace;font-size:.72rem}.edu-inst--spaced{margin-bottom:.6rem}.edu-detail{color:var(--fg3);font-size:.8rem;line-height:1.7}.contact-section{z-index:1;border-top:1px solid var(--border);max-width:1280px;margin:0 auto;padding:6rem 4rem 0;position:relative}.contact-statement-wrap{border-bottom:1px solid var(--border);margin-top:1rem;padding-bottom:4rem}.contact-statement{letter-spacing:-.025em;color:var(--fg);font-family:Cormorant,serif;font-size:clamp(3rem,7vw,6.5rem);font-weight:700;line-height:.92}.contact-statement-em{color:var(--fg2);font-style:italic}.contact-grid{border-bottom:1px solid var(--border);grid-template-columns:1fr 1fr;gap:0;display:grid}.contact-left{border-right:1px solid var(--border);flex-direction:column;justify-content:space-between;gap:3rem;padding:3rem 4rem 3rem 0;display:flex}.contact-desc{color:var(--fg2);max-width:380px;font-size:.92rem;line-height:1.9}.contact-desc-em{color:var(--fg)}.contact-btns{flex-direction:column;gap:1rem;display:flex}.contact-btn-primary,.contact-btn-outline{justify-content:space-between;align-items:center;padding:1.1rem 1.5rem;font-family:DM Sans,sans-serif;font-size:.85rem;font-weight:500;text-decoration:none;display:inline-flex}.contact-btn-primary{background:var(--fg);color:var(--bg);letter-spacing:.01em;transition:background .2s}.contact-btn-primary:hover{background:var(--accent)}.contact-btn-outline{color:var(--fg);border:1px solid var(--border);background:0 0;transition:border-color .2s,color .2s}.contact-btn-outline:hover{border-color:var(--accent);color:var(--accent)}.contact-btn-primary svg,.contact-btn-outline svg{flex-shrink:0;width:16px;height:16px}.contact-right{flex-direction:column;justify-content:center;padding:3rem 0 3rem 4rem;display:flex}.contact-link-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:1.4rem 0;text-decoration:none;transition:padding-left .2s;display:flex}a.contact-link-row:hover{padding-left:.75rem}.contact-link-row--static{border-bottom:none}.c-link-label{letter-spacing:.14em;text-transform:uppercase;color:var(--fg3);margin-bottom:.3rem;font-family:IBM Plex Mono,monospace;font-size:.58rem}.c-link-value{color:var(--fg);letter-spacing:-.01em;font-family:Cormorant,serif;font-size:1.3rem;font-weight:600}.c-link-arrow{color:var(--fg3);flex-shrink:0;display:flex}.c-link-arrow svg{width:16px;height:16px}.c-link-aside{color:var(--fg3);letter-spacing:.04em;font-family:IBM Plex Mono,monospace;font-size:.68rem}.site-footer{z-index:1;border-top:1px solid var(--border);justify-content:space-between;align-items:center;max-width:1280px;margin:0 auto;padding:2rem 4rem;display:flex;position:relative}.footer-text{letter-spacing:.08em;color:var(--fg3);font-family:IBM Plex Mono,monospace;font-size:.62rem}@media (width<=960px){nav{padding:0 2rem}.hero{grid-template-columns:1fr;gap:3rem;min-height:auto;padding:7rem 2rem 3rem}.hero-bio{max-width:none}.skills-section,.projects-section{padding:4.5rem 2rem}.contact-section{padding:4.5rem 2rem 0}.contact-grid{grid-template-columns:1fr}.contact-left{border-right:none;border-bottom:1px solid var(--border);padding:0 0 2.5rem}.contact-right{padding:2.5rem 0 0}.edu-row{grid-template-columns:200px 1fr 150px}.site-footer{padding:2rem}}@media (width<=640px){html{font-size:16px}section[id],footer{scroll-margin-top:72px}nav{height:60px;padding:0 1.25rem}.nav-right{gap:.75rem}.nav-toggle{display:flex}.nav-links{background:var(--bg);border-bottom:1px solid var(--border);opacity:0;pointer-events:none;flex-direction:column;gap:0;max-height:0;padding:.5rem 1.25rem;transition:max-height .3s,opacity .25s;position:fixed;top:60px;left:0;right:0;overflow:hidden}nav.menu-open .nav-links{opacity:1;pointer-events:auto;max-height:70vh}.nav-links li{width:100%}.nav-links a{letter-spacing:.04em;border-bottom:1px solid var(--border);padding:.85rem 0;font-size:.95rem;display:block}.nav-links li:last-child a{border-bottom:none}.hero{gap:2.5rem;padding:6rem 1.25rem 2.5rem}.eyebrow{gap:.75rem;margin-bottom:1.75rem}.avatar-sm{width:72px;height:72px}.hero-bio{font-size:.95rem;line-height:1.75}.cta-row{flex-direction:column;align-items:flex-start;gap:1.25rem;margin-bottom:2.5rem}.btn-main{justify-content:center;width:100%;padding:.9rem 2rem}.socials{flex-wrap:wrap;gap:1rem 1.5rem}.skills-section,.projects-section{padding:3.5rem 1.25rem}.contact-section{padding:3.5rem 1.25rem 0}.skill-row{grid-template-columns:1fr;gap:.6rem;padding:1.3rem 0}.skill-row:hover{padding-left:.75rem}.edu-row{grid-template-columns:1fr;padding:1.5rem 0 1.75rem;overflow:visible}.edu-row:hover{padding-left:0}.edu-row>div:first-child,.edu-row>div:nth-child(2){padding:0}.edu-row>div:nth-child(2){margin-bottom:.25rem}.edu-img-wrap{min-height:auto;max-height:200px;margin-top:1rem}.edu-img-wrap:before{background:0 0}.proj-row{grid-template-columns:1fr auto;align-items:flex-start;gap:0 1.25rem;padding:1.6rem 0}.proj-row.is-focus,.proj-row:focus-visible{padding-left:.75rem}.pr-num{display:none}.pr-name{font-size:1.5rem}.pr-desc{white-space:normal}.pr-right{align-self:center}.contact-statement-wrap{padding-bottom:2.5rem}.contact-btn-primary,.contact-btn-outline{padding:1rem 1.25rem}.c-link-value{font-size:1.15rem}.c-link-aside{display:none}.site-footer{flex-direction:column;align-items:flex-start;gap:.6rem;padding:1.75rem 1.25rem}}
