:root{--wine:#6b1c2a;--wine-mid:#8b2e3f;--wine-pale:#f5eaec;--off-white:#f4f2ee;--white:#fff;--ink:#111110;--ink-mid:#3a3a38;--ink-muted:#787872;--ink-subtle:#b5b5ae;--rule:#e0ddd7;--overlay-bg:#111110}@media (prefers-color-scheme:dark){:root{--off-white:#141412;--white:#1c1c1a;--ink:#f0ede8;--ink-mid:#c8c5be;--ink-muted:#8a8880;--ink-subtle:#5a5a54;--rule:#2c2c28}}.portfolio-root{background:var(--off-white);color:var(--ink);overflow-x:hidden}@media (pointer:fine){.portfolio-root{cursor:none}}.cursor-dot{width:5px;height:5px;background:var(--wine);border-radius:50%;z-index:9999}.cursor-dot,.cursor-ring{position:fixed;top:0;left:0;pointer-events:none;transform:translate(-50%,-50%);will-change:transform}.cursor-ring{width:28px;height:28px;border:1.5px solid var(--wine);border-radius:50%;z-index:9998;transition:opacity .2s}@media (pointer:coarse){.cursor-dot,.cursor-ring{display:none}}.pf-navbar{position:fixed;top:0;left:0;right:0;z-index:50;display:flex;align-items:center;justify-content:space-between;padding:2rem 3rem;mix-blend-mode:normal;transition:transform .35s ease}.pf-navbar--hidden{transform:translateY(-100%)}.pf-navbar-logo{display:flex;align-items:center;gap:.4rem}.pf-navbar-logo-part{height:5.6rem;width:auto;opacity:.5;filter:grayscale(1);transition:opacity .2s}.pf-navbar:hover .pf-navbar-logo-part{opacity:.75}.pf-menu-btn{background:none;border:none;cursor:pointer;display:flex;flex-direction:column;gap:5px;padding:4px}@media (pointer:fine){.pf-menu-btn{cursor:none}}.pf-menu-btn span{display:block;width:24px;height:1.5px;background:var(--ink);transform-origin:center;transition:background .2s}.pf-menu-btn:hover span{background:var(--wine)}.pf-hero{min-height:100svh;display:grid;grid-template-rows:1fr auto auto auto;padding:7rem 3rem 2.5rem}.pf-hero-display{align-self:end;margin-bottom:2rem}.pf-hero-display h1{font-size:clamp(3.5rem,10vw,9rem);font-weight:800;line-height:.92;letter-spacing:-.025em;color:var(--ink);margin:0}.pf-hero-display h1 em{font-style:normal;color:var(--wine)}.pf-rule{height:1px;background:var(--rule);margin:0;border:none}.pf-hero-nav{display:grid;grid-template-columns:repeat(4,1fr);padding:1.4rem 0;border-bottom:1px solid var(--rule)}.pf-hero-nav-item{display:flex;flex-direction:column;gap:.25rem;text-decoration:none;color:var(--ink-muted);transition:color .2s}.pf-hero-nav-item:hover{color:var(--wine)}.pf-hero-nav-num{font-size:.65rem;letter-spacing:.1em;color:var(--ink-subtle)}.pf-hero-nav-label{font-size:.85rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase}.pf-hero-footer{display:flex;justify-content:space-between;align-items:flex-end;padding-top:1.5rem}.pf-hero-bio{font-size:.8rem;color:var(--ink-muted);max-width:28ch;line-height:1.6}.pf-hero-scroll{font-size:.65rem;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-subtle);display:flex;align-items:center;gap:.5rem}.pf-hero-scroll:before{content:"";display:block;width:20px;height:1px;background:var(--ink-subtle)}.pf-section{padding:6rem 3rem;border-top:1px solid var(--rule)}.pf-section-header{display:flex;align-items:baseline;gap:1.5rem;margin-bottom:4rem}.pf-section-num{font-size:.65rem;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-subtle);font-weight:500}.pf-section-title{font-size:clamp(2.5rem,5vw,4.5rem);font-weight:800;letter-spacing:-.025em;line-height:1;color:var(--ink);margin:0}.pf-project-item,.pf-project-list{display:flex;flex-direction:column}.pf-project-item{border-bottom:1px solid var(--rule)}.pf-project-item:first-child{border-top:1px solid var(--rule)}.pf-project-row{display:grid;grid-template-columns:3rem 1fr auto;align-items:start;gap:2rem;padding:2rem 0;cursor:pointer}@media (pointer:fine){.pf-project-row{cursor:none}}.pf-project-meta{display:flex;flex-direction:column;align-items:flex-end;gap:.6rem;padding-top:.3rem}.pf-project-num{font-size:.65rem;letter-spacing:.1em;color:var(--ink-subtle);padding-top:.3rem;font-weight:500}.pf-project-body{display:flex;flex-direction:column;gap:.75rem}.pf-project-name{font-size:clamp(1.4rem,3vw,2.2rem);font-weight:700;letter-spacing:-.02em;color:var(--ink);line-height:1;transition:color .2s}.pf-project-item.is-open .pf-project-row .pf-project-name,.pf-project-row:hover .pf-project-name{color:var(--wine)}.pf-project-desc{font-size:.85rem;color:var(--ink-muted);line-height:1.65;max-width:55ch}.pf-project-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.25rem}.pf-tag{font-size:.6rem;letter-spacing:.1em;text-transform:uppercase;padding:.25rem .65rem;border:1px solid var(--rule);color:var(--ink-muted);border-radius:100px}.pf-project-year{font-size:.75rem;color:var(--ink-subtle);padding-top:.4rem;font-weight:500}.pf-about-grid{display:grid;grid-template-columns:1fr 1fr;gap:4rem}.pf-about-statement{font-size:clamp(1rem,1.5vw,1.2rem);line-height:1.75;color:var(--ink-mid);font-weight:400}.pf-about-statement strong{color:var(--wine);font-weight:600}.pf-about-cols{display:flex;flex-direction:column;gap:3rem}.pf-about-block-title{font-size:.65rem;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-subtle);font-weight:500;margin:0 0 1.2rem}.pf-edu-item{margin-bottom:1.4rem}.pf-edu-degree{font-size:.9rem;font-weight:600;color:var(--ink);line-height:1.3}.pf-edu-field{font-size:.82rem;color:var(--ink-muted);margin-top:.1rem}.pf-edu-meta{font-size:.75rem;color:var(--ink-subtle);margin-top:.2rem}.pf-org-link{text-decoration:none;display:block;font-weight:600;opacity:.75;transition:opacity .2s}.pf-org-link:hover{opacity:1}.pf-org-link--gradient{-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;color:transparent}.pf-exp-list{gap:0}.pf-exp-item,.pf-exp-list{display:flex;flex-direction:column}.pf-exp-item{border-bottom:1px solid var(--rule)}.pf-exp-item:first-child{border-top:1px solid var(--rule)}.pf-exp-row{display:grid;grid-template-columns:1fr auto;align-items:center;gap:2rem;padding:1.2rem 0;cursor:pointer}@media (pointer:fine){.pf-exp-row{cursor:none}}.pf-exp-right{display:flex;flex-direction:column;align-items:flex-end;gap:.5rem}.pf-exp-title{font-size:.9rem;font-weight:600;color:var(--ink)}.pf-exp-company{font-size:.8rem;color:var(--ink-muted);margin-top:.15rem}.pf-exp-period{font-size:.7rem;color:var(--ink-subtle);white-space:nowrap;letter-spacing:.02em}.pf-vol-grid{display:grid;grid-template-columns:1fr 1fr;gap:.5rem 4rem}.pf-vol-item{display:flex;flex-direction:column;border-bottom:1px solid var(--rule)}.pf-vol-row{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem;padding:.9rem 0;cursor:pointer}@media (pointer:fine){.pf-vol-row{cursor:none}}.pf-vol-role{font-size:.85rem;font-weight:600;color:var(--ink)}.pf-vol-org{font-size:.78rem;color:var(--ink-muted);margin-top:.1rem}.pf-vol-period{font-size:.68rem;color:var(--ink-subtle);margin-top:.15rem}.pf-expand-icon{font-size:.85rem;font-weight:300;line-height:1;color:var(--ink-subtle);transition:transform .35s cubic-bezier(.4,0,.2,1),color .2s;user-select:none;flex-shrink:0}.pf-exp-row:hover .pf-expand-icon,.pf-project-row:hover .pf-expand-icon,.pf-vol-row:hover .pf-expand-icon{color:var(--ink-muted)}.is-open .pf-expand-icon{transform:rotate(45deg);color:var(--wine)}.pf-expand-wrap{display:grid;grid-template-rows:0fr;transition:grid-template-rows .42s cubic-bezier(.4,0,.2,1)}.pf-expand-wrap.is-open{grid-template-rows:1fr}.pf-expand-inner{overflow:hidden}.pf-expand-content{display:flex;flex-direction:column;gap:1.1rem;padding:0 0 1.75rem;opacity:0;transform:translateY(6px);transition:opacity .3s ease .12s,transform .3s ease .12s}.pf-expand-wrap.is-open .pf-expand-content{opacity:1;transform:translateY(0)}.pf-project-item .pf-expand-content{padding-left:calc(3rem + 2rem)}.pf-expand-desc{font-size:.84rem;color:var(--ink-muted);line-height:1.75;max-width:60ch}.pf-expand-cta{display:inline-flex;align-items:center;gap:.35rem;font-size:.65rem;letter-spacing:.13em;text-transform:uppercase;font-weight:600;color:var(--wine);text-decoration:none;transition:opacity .2s;align-self:flex-start}.pf-expand-cta:hover{opacity:.65}.pf-skills-grid{display:grid;grid-template-columns:1fr 1fr;gap:4rem}.pf-skills-block-title{font-size:.65rem;letter-spacing:.15em;text-transform:uppercase;color:var(--ink-subtle);font-weight:500;margin:0 0 1.5rem}.pf-pill-list{display:flex;flex-wrap:wrap;gap:.5rem}.pf-pill{font-size:.75rem;font-weight:500;padding:.5rem 1rem;background:var(--white);border:1px solid var(--rule);color:var(--ink-mid);transition:border-color .2s,color .2s}.pf-pill:hover{border-color:var(--wine);color:var(--wine)}.pf-contact-display{font-size:clamp(2rem,5vw,5rem);font-weight:800;letter-spacing:-.025em;line-height:.95;color:var(--ink);margin-bottom:3rem}.pf-contact-display a{color:inherit;text-decoration:none;transition:color .2s}.pf-contact-display a:hover{color:var(--wine)}.pf-contact-links{display:flex;gap:2rem}.pf-contact-link{display:flex;align-items:center;gap:.5rem;font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-muted);text-decoration:none;font-weight:500;transition:color .2s}.pf-contact-link:hover{color:var(--wine)}.pf-contact-link:after{content:"↗";font-size:.8rem}.pf-footer{border-top:1px solid var(--rule);padding:2rem 3rem;display:flex;justify-content:space-between;align-items:center}.pf-footer-copy{font-size:.65rem;letter-spacing:.08em;color:var(--ink-subtle);text-transform:uppercase}.pf-footer-logo{display:flex;align-items:center;gap:.5rem}.pf-footer-logo-part{height:2.8rem;width:auto;opacity:.35;filter:grayscale(1);transition:opacity .2s}.pf-footer:hover .pf-footer-logo-part{opacity:.6}.pf-overlay{position:fixed;inset:0;background:var(--overlay-bg);z-index:100;display:flex;flex-direction:column;padding:2.5rem 3rem;clip-path:inset(0 0 100% 0);overflow:hidden}.pf-overlay-top{display:flex;justify-content:space-between;align-items:center}.pf-overlay-name{font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:hsla(38,21%,93%,.4)}.pf-close-btn{background:none;border:1px solid hsla(38,21%,93%,.15);color:hsla(38,21%,93%,.7);width:44px;height:44px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:1rem;transition:border-color .2s,color .2s}@media (pointer:fine){.pf-close-btn{cursor:none}}.pf-close-btn:hover{border-color:var(--wine-mid);color:var(--wine-mid)}.pf-overlay-nav{flex:1;display:flex;flex-direction:column;justify-content:center;gap:0}.pf-overlay-item{display:flex;align-items:baseline;gap:1.5rem;padding:1rem 0;border-bottom:1px solid hsla(38,21%,93%,.07);text-decoration:none;overflow:hidden;cursor:pointer}@media (pointer:fine){.pf-overlay-item{cursor:none}}.pf-overlay-item:first-child{border-top:1px solid hsla(38,21%,93%,.07)}.pf-overlay-num{font-size:.65rem;letter-spacing:.12em;color:hsla(38,21%,93%,.3);font-weight:500;flex-shrink:0;width:2rem}.pf-overlay-label{font-size:clamp(2.5rem,7vw,6rem);font-weight:800;letter-spacing:-.025em;color:hsla(38,21%,93%,.9);line-height:1;transition:color .15s}.pf-overlay-item:hover .pf-overlay-label{color:var(--wine-mid)}.pf-overlay-footer{display:flex;justify-content:space-between;align-items:flex-end}.pf-overlay-location{text-transform:uppercase}.pf-overlay-email,.pf-overlay-location{font-size:.7rem;letter-spacing:.1em;color:hsla(38,21%,93%,.3)}.pf-overlay-email{text-decoration:none;transition:color .2s}.pf-overlay-email:hover{color:var(--wine-mid)}.pf-reveal{overflow:hidden}.pf-reveal-inner{display:block}@media (max-width:768px){.pf-navbar{padding:1.5rem}.pf-hero{padding:6rem 1.5rem 2rem}.pf-hero-nav{grid-template-columns:repeat(2,1fr);gap:1rem}.pf-section{padding:4rem 1.5rem}.pf-about-grid,.pf-skills-grid{grid-template-columns:1fr;gap:2.5rem}.pf-vol-grid{grid-template-columns:1fr;gap:0}.pf-project-row{grid-template-columns:2rem 1fr auto;gap:1rem}.pf-project-year{display:none}.pf-project-item .pf-expand-content{padding-left:calc(2rem + 1rem)}.pf-overlay{padding:1.5rem}.pf-section-header{flex-direction:column;gap:.5rem;margin-bottom:2.5rem}.pf-contact-display{font-size:clamp(1.6rem,8vw,3rem)}.pf-footer{padding:1.5rem}.pf-footer,.pf-hero-footer{flex-direction:column;gap:1rem;align-items:flex-start}.pf-footer-logo-part{height:2.2rem}.pf-navbar-logo-part{height:2.8rem}.pf-contact-links{flex-wrap:wrap;gap:1rem}}@media (max-width:390px){.pf-navbar{padding:1.25rem 1rem}.pf-hero{padding:5rem 1rem 2rem}.pf-section{padding:3rem 1rem}.pf-footer,.pf-overlay{padding:1.25rem 1rem}}