@import url("https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=Space+Mono:wght@400;700&display=swap");:root{--font-display:"Space Grotesk",-apple-system,sans-serif;--font-body:"Space Grotesk",-apple-system,sans-serif;--font-mono:"Space Mono",ui-monospace,monospace;--color-bg:#F5F2EA;--color-bg-raised:#EDE8DC;--color-surface-card:#FBF9F4;--color-fg:#15140F;--color-fg-secondary:#514D42;--color-fg-tertiary:#8C8676;--color-border:#DFD9C9;--color-border-strong:#C9C2AC;--color-accent:#FF4300;--color-accent-hover:#E23B00;--color-accent-press:#C93400;--color-accent-tint:#FFE4D6;--color-accent-fg:#FBF9F4;--color-negative:#A8351F;--color-negative-tint:#F4E1DA;--color-positive:var(--color-accent);--color-focus-ring:#15140F;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--space-9:96px;--space-10:128px;--container-max:1160px;--gutter:24px;--text-display-1:clamp(2.75rem,7vw,6rem);--text-display-2:clamp(2rem,4.5vw,3.25rem);--text-heading:clamp(1.375rem,2.6vw,1.875rem);--text-body-lg:1.25rem;--text-body:1.0625rem;--text-meta:0.9375rem;--text-micro:0.75rem;--leading-tight:1.02;--leading-snug:1.15;--leading-normal:1.5;--tracking-tight:-0.02em;--tracking-normal:0em;--tracking-micro:0.12em;--weight-regular:400;--weight-medium:500;--weight-bold:700;--radius-sm:10px;--radius-md:18px;--radius-lg:28px;--radius-xl:36px;--radius-pill:999px;--shadow-card:0 1px 2px rgba(21,20,15,.05),0 8px 20px rgba(21,20,15,.06),0 28px 56px rgba(21,20,15,.06);--shadow-card-hover:0 2px 4px rgba(21,20,15,.06),0 14px 28px rgba(21,20,15,.08),0 36px 72px rgba(21,20,15,.08);--shadow-raised:0 1px 1px rgba(21,20,15,.04),0 4px 10px rgba(21,20,15,.05);--shadow-popover:0 4px 8px rgba(21,20,15,.08),0 20px 40px rgba(21,20,15,.14)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--color-bg);font-family:var(--font-body);-webkit-font-smoothing:antialiased}a{-webkit-text-decoration-color:var(--color-border-strong);text-decoration-color:var(--color-border-strong)}a:hover{-webkit-text-decoration-color:var(--color-accent);text-decoration-color:var(--color-accent)}::selection{background:var(--color-accent);color:var(--color-accent-fg)}a,body{color:var(--color-fg)}a{text-decoration:none;transition:color .15s ease}a:hover{color:var(--color-accent)}button{border-radius:0}@keyframes titleRoll{0%,26%{transform:translateY(0)}33.3%,59.3%{transform:translateY(-25%)}66.6%,92.6%{transform:translateY(-50%)}to{transform:translateY(-75%)}}@keyframes rise{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}@keyframes orbitSpin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.rise{animation:rise .55s ease-out both}.rise-05{animation:rise .55s ease-out .05s both}.rise-12{animation:rise .55s ease-out .12s both}.rise-2{animation:rise .5s ease-out .2s both}.rise-3{animation:rise .5s ease-out .3s both}.section{width:100%;box-sizing:border-box}.wrap{width:100%;max-width:var(--container-max);margin:0 auto}.hero{min-height:100vh;box-sizing:border-box;display:flex;flex-direction:column;padding:var(--space-5) var(--gutter) var(--space-7)}.site-head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-4)}.logo{font-family:var(--font-display);font-weight:700;font-size:19px;letter-spacing:var(--tracking-tight)}.logo span{color:var(--color-accent)}.head-right{display:flex;align-items:center;gap:var(--space-4)}.head-mail{font-size:var(--text-meta);text-decoration:underline;-webkit-text-decoration-color:var(--color-border-strong);text-decoration-color:var(--color-border-strong)}.head-mail,.resume-btn{font-family:var(--font-mono)}.resume-btn{display:inline-flex;align-items:center;gap:8px;font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);padding:9px 16px;border:1px solid var(--color-border-strong);border-radius:999px;color:var(--color-fg);text-decoration:none;white-space:nowrap;transition:background .25s ease,color .25s ease,border-color .25s ease}.resume-arrow{display:inline-block;transform:rotate(-45deg);transition:transform .25s ease}.resume-btn:hover{background:var(--color-fg);color:var(--color-accent-fg);border-color:var(--color-fg)}.resume-btn:hover .resume-arrow{transform:rotate(-45deg) translateX(4px)}.hero-body{flex:1 1;justify-content:center}.hero-body,.hero-stage{display:flex;flex-direction:column}.hero-stage{position:relative;align-items:center}.roll-window{font-size:clamp(2.75rem,10.5vw,8rem);height:1.16em;overflow:hidden;text-align:center;width:100%}.roll-track{display:flex;flex-direction:column;align-items:center;animation:titleRoll var(--anim-duration,7.8s) cubic-bezier(.76,0,.24,1) infinite}.roll-track span{font-family:var(--font-display);font-weight:700;font-size:clamp(2.75rem,10.5vw,8rem);line-height:1.16;letter-spacing:-.035em;text-transform:uppercase;white-space:nowrap}.hero-locale{width:100%;display:flex;justify-content:flex-end;font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary);padding:0 var(--space-2)}.name-cluster{display:flex;align-items:center;justify-content:center;gap:var(--space-3);margin-top:-.14em}.name-hey{font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary);white-space:nowrap}.portrait{position:relative;z-index:2;display:flex;align-items:center;justify-content:center;width:clamp(170px,20vw,224px);height:clamp(200px,24vw,264px);background:var(--color-bg-raised);box-shadow:var(--shadow-card);overflow:hidden;flex:none}.portrait img{width:96%;height:96%;object-fit:contain;transform:translateY(6px)}.name-full{font-family:var(--font-display);font-weight:700;font-size:var(--text-heading);line-height:1.05;letter-spacing:var(--tracking-tight);white-space:nowrap}.hero-intro{display:flex;flex-direction:column;align-items:center;gap:var(--space-5);margin-top:var(--space-6)}.hero-lede{margin:0;max-width:560px;text-align:center;font-family:var(--font-body);font-size:var(--text-body-lg);line-height:var(--leading-normal);color:var(--color-fg-secondary);text-wrap:pretty}.cta-row{display:flex;gap:var(--space-4);flex-wrap:wrap;justify-content:center}.badge,.cta-row{align-items:center}.badge{display:inline-flex;gap:10px;background:var(--color-surface-card);box-shadow:var(--shadow-card);padding:14px 20px;box-sizing:border-box}.badge .dot{width:9px;height:9px;border-radius:50%;background:var(--color-accent);flex:none}.badge span:last-child{color:var(--color-fg)}.badge span:last-child,.btn{font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro)}.btn{display:inline-flex;align-items:center;justify-content:center;height:48px;padding:0 24px;border:none;background:var(--color-fg);text-decoration:none;cursor:pointer;transition:background .18s ease}.btn,.btn:hover{color:var(--color-accent-fg)}.btn:hover{background:var(--color-accent)}.btn:active{background:var(--color-accent-press)}.stats-section{position:relative;padding:var(--space-9) var(--gutter);overflow:hidden}.stats-strip{position:relative;z-index:1;width:100%;display:flex;flex-wrap:wrap;box-shadow:var(--shadow-card);background:var(--color-surface-card)}.stat{flex:1 1 200px;text-align:center;padding:var(--space-7) var(--space-4);border-right:1px solid var(--color-border)}.stat:last-child{border-right:none}.stat-num{font-family:var(--font-display);font-weight:700;font-size:var(--text-display-2);letter-spacing:var(--tracking-tight);color:var(--color-fg)}.stat-num.accent{color:var(--color-accent)}.stat-label{margin-top:var(--space-2);font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary)}.orbit-wrap{position:absolute;inset:0;z-index:0;display:flex;align-items:center;justify-content:center;overflow:hidden;pointer-events:none}.orbit-svg{opacity:.5}.orbit-spin{animation:orbitSpin 90s linear infinite;transform-origin:310px 310px}.section-pad{padding:var(--space-9) var(--gutter)}.eyebrow{font-family:var(--font-mono);font-size:var(--text-micro);letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary);margin-bottom:var(--space-2)}.eyebrow,.section-title{text-transform:uppercase}.section-title{margin:0;font-family:var(--font-display);font-weight:700;font-size:var(--text-display-2);letter-spacing:var(--tracking-tight)}.section-head{display:flex;justify-content:space-between;align-items:flex-end;flex-wrap:wrap;gap:var(--space-4)}.section-head p{margin:0;max-width:340px;font-family:var(--font-body);font-size:var(--text-body);color:var(--color-fg-secondary)}.stack-7{display:flex;flex-direction:column;gap:var(--space-7)}.proj-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));grid-gap:var(--space-6);gap:var(--space-6);align-items:start}.project-card{background:var(--color-surface-card);box-shadow:var(--shadow-card);padding:var(--space-4);display:flex;flex-direction:column;gap:var(--space-4);transform:perspective(900px) rotateX(0deg) rotateY(0deg);will-change:transform;transition:box-shadow .2s ease}.project-card:hover{box-shadow:var(--shadow-card-hover)}.proj-cover{position:relative;aspect-ratio:4/3;overflow:hidden;background:var(--color-bg-raised)}.proj-cover>*{width:100%;height:100%}.proj-meta{display:flex;flex-direction:column;gap:6px}.proj-top{display:flex;justify-content:space-between;align-items:flex-start;gap:var(--space-3)}.proj-name{font-family:var(--font-display);font-weight:700;font-size:var(--text-heading);letter-spacing:var(--tracking-tight)}.proj-tag{font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary)}.proj-arrow{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;flex:none;border-radius:999px;font-size:18px;line-height:1;background:#000;color:#fff;text-decoration:none;transition:background .2s ease,color .2s ease,transform .2s ease}.proj-arrow:hover{background:var(--color-accent);color:var(--color-accent-fg);transform:translate(2px,-2px)}.proj-desc{max-height:0;opacity:0;overflow:hidden;transition:max-height .4s ease,opacity .3s ease;display:flex;flex-direction:column;gap:6px}.project-card:hover .proj-desc{max-height:260px;opacity:1}.proj-desc .lead{font-size:14px;font-weight:600;line-height:1.4;color:var(--color-fg)}.proj-desc .body,.proj-desc .lead{margin:0;font-family:var(--font-body)}.proj-desc .body{font-size:13px;line-height:var(--leading-normal);color:var(--color-fg-secondary)}.personal-grid{display:grid;grid-template-columns:1fr 1.3fr 1fr;grid-gap:var(--space-4);gap:var(--space-4);align-items:stretch}.tile{background:var(--color-surface-card)}.map-tile,.tile{position:relative;box-shadow:var(--shadow-card)}.map-tile{display:block;height:100%;min-height:280px;background:var(--color-bg-raised);overflow:hidden;cursor:pointer;text-decoration:none;transition:box-shadow .2s ease}.map-tile:hover{box-shadow:var(--shadow-card-hover)}.map-img{object-fit:contain;object-position:center}.map-tag{left:var(--space-3);top:var(--space-3);background:var(--color-bg);padding:6px 12px;font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);z-index:2}.map-tag,.map-tile:after{position:absolute;pointer-events:none}.map-tile:after{content:"";left:0;right:0;bottom:0;height:55%;background:linear-gradient(0deg,rgba(0,0,0,.95) 0,rgba(0,0,0,.85) 20%,rgba(0,0,0,.45) 55%,rgba(0,0,0,0));z-index:1}.map-caption{position:absolute;left:var(--space-3);bottom:var(--space-3);z-index:2;pointer-events:none}.map-caption .city{font-family:var(--font-display);font-weight:700;font-size:1.5rem;letter-spacing:.04em;text-transform:uppercase;color:var(--color-bg);text-shadow:0 1px 12px rgba(0,0,0,.4)}.map-caption .coord{font-family:var(--font-mono);font-size:var(--text-micro);color:var(--color-bg);opacity:.85}.mid-col{gap:var(--space-4)}.mid-col,.panel{display:flex;flex-direction:column}.panel{position:relative;background:var(--color-surface-card);box-shadow:var(--shadow-card);padding:var(--space-4);gap:var(--space-3)}.panel-label{font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary)}.step-title{font-family:var(--font-display);font-weight:700;font-size:var(--text-meta);letter-spacing:var(--tracking-tight)}.step-desc{margin:6px 0 0;font-family:var(--font-body);font-size:13px;line-height:var(--leading-normal);color:var(--color-fg-secondary)}.step-btns{display:flex;gap:6px;flex-wrap:wrap}.step-btn{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:var(--tracking-micro);white-space:nowrap;border:1px solid var(--color-border-strong);background:transparent;color:var(--color-fg);padding:7px 12px;cursor:pointer;transition:background .15s ease,color .15s ease}.step-btn.active{background:var(--color-fg);color:var(--color-bg)}.mistake-head{display:flex;align-items:center;justify-content:space-between}.mistake-head .lesson{color:var(--color-accent)}.mistake-quote{font-family:var(--font-display);font-weight:700;font-size:var(--text-meta);line-height:1.35;letter-spacing:var(--tracking-tight)}.mistake-note{margin:0;font-family:var(--font-body);font-size:13px;line-height:var(--leading-normal);color:var(--color-fg-secondary)}.photo-tile{position:relative;height:100%;min-height:280px;background:var(--color-surface-card);box-shadow:var(--shadow-card);overflow:hidden;cursor:pointer;display:flex;flex-direction:column;padding:var(--space-4);transition:box-shadow .2s ease}.photo-tile:hover{box-shadow:var(--shadow-card-hover)}.photo-stack{position:relative;flex:1 1;min-height:0;overflow:hidden;display:flex;align-items:center;justify-content:center}.photo-stack .ph{aspect-ratio:1/1;background:var(--color-bg-raised);overflow:hidden}.photo-stack .ph1{transform:rotate(-9deg) translate(-22px,4px);z-index:1}.photo-stack .ph1,.photo-stack .ph2{position:absolute;width:62%;box-shadow:var(--shadow-card)}.photo-stack .ph2{transform:rotate(8deg) translate(22px,-2px);z-index:2}.photo-stack .ph3{position:relative;width:62%;box-shadow:var(--shadow-card-hover);z-index:3}.photo-title{font-family:var(--font-display);font-weight:700;font-size:var(--text-meta)}.photo-sub{font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary)}.slot{display:flex;align-items:center;justify-content:center;overflow:hidden;background:var(--color-bg-raised)}.slot,.slot img{width:100%;height:100%}.slot img{object-fit:cover;display:block}.slot.placeholder{font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary);text-align:center;padding:var(--space-3);border:1px dashed var(--color-border-strong)}.gallery-overlay{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;background:rgba(21,20,15,.55);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);padding:var(--space-6);box-sizing:border-box}.gallery-overlay[hidden]{display:none}.gallery-modal{position:relative;width:min(960px,94vw);max-height:88vh;background:var(--color-bg);box-shadow:var(--shadow-popover);display:flex;flex-direction:column}.gallery-head{display:flex;align-items:center;justify-content:space-between;padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--color-border)}.gallery-head .title{font-family:var(--font-display);font-weight:700;font-size:var(--text-heading);letter-spacing:var(--tracking-tight)}.gallery-close{font-family:var(--font-mono);font-size:var(--text-meta);background:transparent;border:1px solid var(--color-border-strong);width:36px;height:36px;cursor:pointer}.gallery-stage{display:flex;align-items:center;justify-content:center;gap:var(--space-4);padding:var(--space-6) var(--space-5)}.gallery-nav{flex:none;width:44px;height:44px;font-family:var(--font-mono);font-size:18px;background:var(--color-surface-card);box-shadow:var(--shadow-card);border:none;cursor:pointer}.gallery-frames{position:relative;flex:1 1;max-width:600px;height:min(50vh,380px);display:flex;align-items:center;justify-content:center;overflow:hidden}.gallery-frames .side{position:absolute;width:34%;height:78%;filter:blur(3px);opacity:.45;transform:scale(.92);transition:all .35s ease;background:var(--color-bg-raised);box-shadow:var(--shadow-card);overflow:hidden;z-index:1}.gallery-frames .side.left{left:2%}.gallery-frames .side.right{right:2%}.gallery-frames .center{position:relative;width:52%;height:100%;box-shadow:var(--shadow-card-hover);background:var(--color-bg-raised);overflow:hidden;z-index:2;transition:all .35s ease}.gallery-count{text-align:center;padding:0 0 var(--space-4);font-family:var(--font-mono);font-size:var(--text-micro);letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary)}.site-footer{border-top:1px solid var(--color-border);padding:var(--space-6) var(--gutter)}.footer-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--space-4)}.footer-links{display:flex;flex-wrap:wrap;gap:var(--space-5)}.footer-links a{font-family:var(--font-mono);font-size:var(--text-micro);text-transform:uppercase;letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary);transition:color .2s ease}.footer-links a:hover{color:var(--color-accent)}.footer-note{margin:0;font-family:var(--font-mono);font-size:var(--text-micro);letter-spacing:var(--tracking-micro);color:var(--color-fg-tertiary)}.footer-heart{color:var(--color-accent)}@media (max-width:960px){.section-pad,.stats-section{padding:var(--space-8) var(--gutter)}}@media (max-width:860px){.personal-grid{grid-template-columns:1fr}}@media (max-width:720px){.site-head{flex-wrap:wrap;row-gap:var(--space-3)}.head-right{flex-wrap:wrap;gap:var(--space-3)}.head-mail{font-size:var(--text-micro)}.footer-inner{flex-direction:column;align-items:flex-start}}@media (max-width:560px){.name-hey{display:none}.section-head{align-items:flex-start}.section-pad,.stats-section{padding:var(--space-7) var(--gutter)}.cta-row{width:100%}.gallery-frames .side{display:none}.gallery-frames .center{width:88%}.gallery-stage{gap:var(--space-2);padding:var(--space-5) var(--space-3)}}@media (hover:none){.proj-desc{max-height:none;opacity:1}}@media (prefers-reduced-motion:reduce){.orbit-spin,.roll-track,[class*=" rise"],[class^=rise]{animation:none}}