:root{--valley-dark: #101612;--valley-green: #2c4632;--rock-warm: #54402f;--sandstone: #c46a34;--sandstone-deep: #71351b;--dusk-pink: #d98a83;--dusk-lav: #75648c;--summit-indigo: #221f3e;--summit-ink: #131226;--paper: #f1ece1;--ink: #1c1912;--rope: #e8c15a;--rope-bright: #f4d98a;--rope-dim: rgba(232, 193, 90, .3);--sand-fade: #89775f;--rail-w: 112px}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:IBM Plex Mono,monospace;background:var(--valley-dark);color:var(--paper);overflow-x:hidden}h1,h2,h3{font-family:Fraunces,serif;font-weight:600;letter-spacing:-.01em}a{color:inherit}img{display:block;width:100%;height:100%;object-fit:cover}:focus-visible{outline:2px solid var(--rope);outline-offset:3px}body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:900;pointer-events:none;opacity:.055;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}section{position:relative;min-height:100vh;display:flex;align-items:center;padding:6rem 8vw 6rem calc(var(--rail-w) + 28px);overflow:hidden}.bg-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:0;will-change:transform}.bg-layer img{position:absolute;top:-14%;left:0;width:100%;height:128%}.scrim{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1}.content{position:relative;z-index:2;width:100%}.reveal{opacity:0;transform:translateY(38px);transition:opacity .9s cubic-bezier(.16,.8,.3,1),transform .9s cubic-bezier(.16,.8,.3,1)}.reveal.in{opacity:1;transform:translateY(0)}.reveal.d1{transition-delay:.1s}.reveal.d2{transition-delay:.22s}.reveal.d3{transition-delay:.34s}.reveal.d4{transition-delay:.46s}.section-eyebrow{display:flex;align-items:center;gap:.9rem;margin-bottom:1.6rem}.section-eyebrow .num{font-family:Fraunces,serif;font-style:italic;font-size:1.1rem;color:var(--rope)}.section-eyebrow .name{font-size:.72rem;letter-spacing:.28em;text-transform:uppercase;opacity:.72}.photo-cap{position:absolute;bottom:0;left:0;right:0;padding:.9rem 1.1rem;background:linear-gradient(0deg,rgba(8,8,8,.85),transparent);font-size:.64rem;letter-spacing:.12em;text-transform:uppercase;z-index:2}.tag-row{display:flex;gap:.6rem;flex-wrap:wrap;margin-top:1.8rem;max-width:520px}.tag-row span{font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;border:1px solid rgba(241,236,225,.3);padding:.4rem .8rem;border-radius:20px;opacity:.85}.float-photo{position:absolute;z-index:3;width:var(--w, 230px);will-change:transform}.float-photo figure{position:relative;aspect-ratio:var(--ar, 4/3);overflow:hidden;border:1px solid rgba(241,236,225,.35);box-shadow:0 22px 44px -14px #0000008c;transform:rotate(var(--tilt, -2deg));background:var(--ink)}.float-photo .photo-cap{font-size:.56rem;padding:.6rem .7rem}@media (max-width:1080px){:root{--rail-w:64px}.float-photo{display:none}}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}.reveal{opacity:1;transform:none;transition:none}.bg-layer{will-change:auto}}@media (max-width: 700px){:root{--rail-w: 0px}section{padding-right:6vw}}.float-photo figure{cursor:pointer;transition:transform .35s ease,box-shadow .35s ease}.float-photo figure:hover,.float-photo figure:focus-visible{transform:rotate(0) scale(1.05);box-shadow:0 30px 62px -16px #000000b8}@media (prefers-reduced-motion: reduce){.float-photo figure{transition:none}}#topnav{position:fixed;top:0;left:0;right:0;z-index:600;display:flex;justify-content:space-between;align-items:center;padding:1.1rem 8vw 1.1rem calc(var(--rail-w) + 28px);background:linear-gradient(180deg,#0c100db8,#0c100d00)}#topnav .brand{font-family:Fraunces,serif;font-style:italic;font-weight:600;font-size:1.15rem;text-decoration:none;color:var(--paper)}#topnav ul{display:flex;gap:2.4rem;list-style:none}#topnav ul a{font-size:.7rem;letter-spacing:.2em;text-transform:uppercase;text-decoration:none;opacity:.85;padding-bottom:.3rem;border-bottom:1px solid transparent;transition:opacity .2s ease,border-color .2s ease,color .2s ease}#topnav ul a:hover{opacity:1;color:var(--rope-bright);border-bottom-color:var(--rope-dim)}@media (max-width: 700px){#topnav{padding:.9rem 6vw .9rem calc(var(--rail-w) + 24px)}#topnav .brand{white-space:nowrap;font-size:1rem}#topnav ul{gap:1.1rem}#topnav ul a{font-size:.58rem;letter-spacing:.12em}}#rail{position:fixed;left:0;top:0;bottom:0;width:var(--rail-w);z-index:500}#rail svg{position:absolute;left:34px;top:0;width:44px;height:100%}#rail .track{fill:none;stroke:#f1ece129;stroke-width:1.5}#rail .fill{fill:none;stroke:var(--rope);stroke-width:2.5;stroke-linecap:round;filter:drop-shadow(0 0 5px var(--rope-dim))}.anchor{position:absolute;left:56px;transform:translate(-50%,-50%);width:14px;height:14px;border-radius:50%;background:var(--valley-dark);border:2px solid rgba(241,236,225,.5);cursor:pointer;padding:0;transition:background .25s ease,border-color .25s ease,box-shadow .25s ease}.anchor:after{content:attr(data-label);position:absolute;left:24px;top:50%;transform:translateY(-50%);font-family:IBM Plex Mono,monospace;font-size:.62rem;letter-spacing:.16em;text-transform:uppercase;color:var(--paper);white-space:nowrap;opacity:0;transition:opacity .2s ease;background:#101612e0;padding:4px 9px;border:1px solid rgba(241,236,225,.22)}.anchor:hover:after,.anchor:focus-visible:after{opacity:1}.anchor.passed{background:var(--rope);border-color:var(--rope);box-shadow:0 0 10px 2px var(--rope-dim)}.anchor.active{background:var(--rope-bright);border-color:#fff;box-shadow:0 0 14px 3px var(--rope-dim)}@media (max-width:1080px){#rail svg{left:18px}.anchor{left:40px}}@media (max-width: 700px){#rail{display:none}}#hero{align-items:flex-end;padding-bottom:5rem}#hero .bg-layer img{top:-4%;height:112%;object-position:left 72%;transform-origin:40% 70%;animation:kenburns 7s cubic-bezier(.2,.6,.3,1) both}@keyframes kenburns{0%{transform:scale(1.09)}to{transform:scale(1)}}#hero .scrim{background:linear-gradient(180deg,#080c091f,#080c092e 45%,#0a0e0be6)}.hero-stamp{display:inline-flex;align-items:center;gap:.8rem;font-size:.72rem;letter-spacing:.3em;text-transform:uppercase;color:var(--rope);margin-bottom:1.5rem}.hero-stamp:before,.hero-stamp:after{content:"";width:34px;height:1px;background:var(--rope-dim)}#hero h1{font-size:clamp(3.4rem,7.2vw,6.4rem);line-height:.94;text-shadow:0 4px 30px rgba(0,0,0,.4)}#hero h1 em{font-style:italic;font-weight:500;color:var(--rope-bright)}.hero-role{font-size:1.02rem;margin-top:1.3rem;max-width:620px;opacity:.92;line-height:1.65}.hero-role .co{color:var(--rope);font-weight:600}.scroll-cue{position:absolute;bottom:2.6rem;right:8vw;display:flex;flex-direction:column;align-items:center;gap:.7rem;font-size:.66rem;letter-spacing:.26em;text-transform:uppercase;opacity:.85;animation:bob 2.6s ease-in-out infinite}.scroll-cue .line{width:1px;height:40px;background:linear-gradient(to bottom,var(--rope),transparent)}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(8px)}}@media (prefers-reduced-motion: reduce){#hero .bg-layer img,.scroll-cue{animation:none}}@media (max-width: 700px){#hero h1{font-size:2.7rem}.hero-role{font-size:.88rem}.scroll-cue{right:6vw}}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:4vh 4vw;background:#131226e0;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);animation:lb-fade .25s ease}.lightbox-print{display:flex;flex-direction:column;max-width:min(1000px,92vw);max-height:88vh;background:#ece5d6;border:10px solid #ece5d6;border-radius:2px;box-shadow:0 40px 90px -20px #000c;animation:lb-pop .3s cubic-bezier(.2,.8,.3,1)}.lightbox-print img{display:block;max-width:100%;max-height:72vh;object-fit:contain}.lightbox-print figcaption{padding:.85rem .35rem .35rem;color:var(--ink);font-family:IBM Plex Mono,monospace}.lightbox-caption{font-size:.72rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase}.lightbox-story{margin-top:.45rem;font-size:.8rem;line-height:1.6;opacity:.8;max-width:62ch}.lightbox-close{position:fixed;top:1.1rem;right:1.5rem;width:44px;height:44px;border:1px solid rgba(241,236,225,.4);border-radius:50%;background:#13122699;color:var(--paper);font-size:1.5rem;line-height:1;cursor:pointer;transition:border-color .2s ease,color .2s ease}.lightbox-close:hover{border-color:var(--rope);color:var(--rope-bright)}@keyframes lb-fade{0%{opacity:0}to{opacity:1}}@keyframes lb-pop{0%{opacity:0;transform:scale(.94) translateY(14px)}to{opacity:1;transform:scale(1) translateY(0)}}@media (prefers-reduced-motion: reduce){.lightbox,.lightbox-print{animation:none}}#approach{background:linear-gradient(180deg,var(--valley-dark),#22301f 55%,var(--rock-warm) 100%)}#approach .bg-layer{left:auto;right:0;width:48%}#approach .bg-layer img{filter:blur(1.2px) saturate(.85) contrast(1.02) brightness(.88);transform:scale(1.03)}#approach .scrim{background:linear-gradient(90deg,var(--valley-dark) 0%,rgba(16,22,18,.98) 38%,rgba(16,22,18,.55) 60%,rgba(16,22,18,.15) 82%,transparent 100%)}#approach .float-photo{width:min(26vw,400px)}#approach .float-photo figure{border:8px solid #ece5d6;box-shadow:0 34px 70px -18px #000000b3}#approach h2{font-size:3.4rem;line-height:1.02;margin-bottom:1.6rem}#approach p{max-width:520px;font-size:1rem;line-height:1.85;opacity:.9}#approach p+p{margin-top:1.1rem}@media (max-width:1080px){#approach{flex-direction:column;align-items:flex-start}}@media (max-width: 700px){#approach h2{font-size:2.3rem}#approach .bg-layer{width:100%;opacity:.3}#approach .scrim{background:linear-gradient(180deg,var(--valley-dark) 0%,rgba(16,22,18,.72) 100%)}}#experience{flex-direction:column;align-items:stretch;padding-top:7rem;padding-bottom:5rem;padding-right:0;padding-left:0;background:linear-gradient(180deg,var(--rock-warm) 0%,#64381f 30%,var(--sandstone-deep) 62%,var(--sandstone) 100%)}#experience .bg-layer{opacity:.42;mix-blend-mode:soft-light}#experience .bg-layer img{top:-26%;height:134%;object-position:center top;filter:contrast(1.2) saturate(1.35);-webkit-mask-image:linear-gradient(180deg,#000 80%,transparent 94%);mask-image:linear-gradient(180deg,#000 80%,transparent 94%)}.exp-head{padding:0 8vw 0 calc(var(--rail-w) + 28px);margin-bottom:4.2rem;position:relative;z-index:2}.exp-head h2{font-size:3.4rem}.exp-head .sub{margin-top:.8rem;font-size:.92rem;opacity:.85;max-width:560px;line-height:1.7}.job{position:relative;z-index:2;padding:2.5rem 8vw 2.5rem calc(var(--rail-w) + 28px);border-top:1px solid rgba(241,236,225,.18);display:grid;grid-template-columns:110px 1fr 200px;gap:2.5rem;align-items:start}.job:last-of-type{border-bottom:1px solid rgba(241,236,225,.18)}.job .years{font-family:Fraunces,serif;font-weight:700;font-style:italic;font-size:1.7rem;color:var(--rope);line-height:1.1;padding-top:.2rem}.job .years small{display:block;font-family:IBM Plex Mono,monospace;font-style:normal;font-weight:400;font-size:.6rem;letter-spacing:.14em;text-transform:uppercase;color:var(--paper);opacity:.6;margin-top:.35rem}.job .co{font-size:.78rem;letter-spacing:.06em;color:var(--rope-bright);margin-bottom:.4rem;text-transform:uppercase}.job h3{font-size:1.6rem;margin-bottom:.8rem}.job p{font-size:.9rem;line-height:1.75;opacity:.92;max-width:640px}.job .stack{font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;opacity:.7;border-left:2px solid var(--rope-dim);padding-left:1rem;line-height:1.9;justify-self:end}@media (max-width:1080px){.job{grid-template-columns:80px 1fr}.job .stack{display:none}}@media (max-width: 700px){.exp-head h2{font-size:2.3rem}.job{gap:1.2rem}}#projects{flex-direction:column;align-items:stretch;padding:0 0 6.5rem;background:linear-gradient(180deg,var(--sandstone) 0%,#c9ab8a 26%,#a8937a 55%,#89775f 100%)}.proj-banner{position:relative;min-height:46vh;display:flex;flex-direction:column;justify-content:flex-end;padding:7rem 8vw 2.8rem calc(var(--rail-w) + 28px)}.proj-banner .banner-img{position:absolute;top:0;left:0;width:100%;height:155%;object-fit:cover;object-position:center top;filter:blur(.7px) saturate(.92) brightness(.94);-webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 17%,#000 52%,transparent 94%);mask-image:linear-gradient(180deg,transparent 0%,#000 17%,#000 52%,transparent 94%)}.proj-banner:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse 720px 340px at 20% 82%,rgba(26,14,9,.58),transparent 72%),linear-gradient(180deg,#1a0e0961,#5d343f24 55%,#b09a7c1f);-webkit-mask-image:linear-gradient(180deg,transparent 0%,#000 26%,#000 70%,transparent 100%);mask-image:linear-gradient(180deg,transparent 0%,#000 26%,#000 70%,transparent 100%)}.proj-head{position:relative;z-index:2}.proj-grid,#projects .proj-grid{position:relative;z-index:2;margin:3rem 8vw 0 calc(var(--rail-w) + 28px)}.proj-head h2{font-size:3.4rem;max-width:700px;text-shadow:0 2px 18px rgba(0,0,0,.35)}.proj-head .sub{margin-top:1rem;font-size:.92rem;max-width:560px;line-height:1.7;opacity:.9}.proj-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.8rem}.proj-card{background:#120d144d;border:1px solid rgba(255,255,255,.22);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);padding:1.9rem 1.7rem 2rem;display:flex;flex-direction:column;min-height:330px;transition:transform .35s ease,border-color .35s ease,background .35s ease}.proj-card:hover{transform:translateY(-6px);border-color:#ffffff73;background:#120d1466}.proj-card .pnum{font-family:Fraunces,serif;font-style:italic;color:var(--rope-bright);font-size:1.05rem;margin-bottom:1rem}.proj-card h3{font-size:1.3rem;line-height:1.2;margin-bottom:.9rem}.proj-card p{font-size:.84rem;line-height:1.7;opacity:.92;flex:1}.proj-card .stack{margin-top:1.2rem;font-size:.64rem;letter-spacing:.08em;text-transform:uppercase;opacity:.78;border-top:1px solid rgba(255,255,255,.2);padding-top:.9rem}.proj-card .where{margin-top:.9rem;font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;color:var(--rope-bright)}@media (max-width:1080px){.proj-grid{grid-template-columns:1fr}}@media (max-width: 700px){.proj-head h2{font-size:2.3rem}}#contact{flex-direction:column;align-items:center;justify-content:center;text-align:center;background:linear-gradient(180deg,#89775f 0%,#6a5d68 18%,#3d3560 42%,var(--summit-indigo) 62%,var(--summit-ink) 100%)}#contact .bg-layer{opacity:.55}#contact .bg-layer img{object-position:center 30%}#contact .scrim{background:radial-gradient(ellipse at 50% 28%,#221f3e0d,#131226e0 78%)}#stars{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none}.star{position:absolute;width:2px;height:2px;border-radius:50%;background:#fff;opacity:0;animation:twinkle var(--tw, 4s) ease-in-out infinite;animation-delay:var(--td, 0s)}@keyframes twinkle{0%,to{opacity:0}50%{opacity:var(--to, .8)}}#contact .content{max-width:760px;margin:0 auto}#contact .section-eyebrow{justify-content:center}#contact h2{font-size:3.8rem;line-height:1.04;margin-bottom:1.3rem}#contact h2 em{font-style:italic;color:var(--rope-bright);font-weight:500}#contact .lede{font-size:1rem;line-height:1.8;opacity:.88;max-width:540px;margin:0 auto 2.6rem}.contact-card{border:1px solid rgba(241,236,225,.3);background:#ffffff0a;padding:2.2rem 2.6rem;text-align:left;max-width:540px;margin:0 auto}.contact-row{display:flex;justify-content:space-between;align-items:center;padding:.85rem 0;border-top:1px dashed rgba(241,236,225,.22);font-size:.9rem}.contact-row:first-child{border-top:none}.contact-row .k{opacity:.6;font-size:.7rem;letter-spacing:.1em;text-transform:uppercase}.contact-row a{text-decoration:none;border-bottom:1px solid var(--rope-dim);transition:border-color .2s ease,color .2s ease}.contact-row a:hover{border-color:var(--rope);color:var(--rope-bright)}.reveal-inline{display:inline-block}.resume-btn{display:inline-block;margin-top:2rem;padding:.9rem 2.2rem;border:1px solid var(--rope);color:var(--rope-bright);text-decoration:none;font-size:.76rem;letter-spacing:.16em;text-transform:uppercase;transition:background .25s ease,color .25s ease}.resume-btn:hover{background:var(--rope);color:var(--summit-ink)}footer{margin-top:4rem;font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;opacity:.5}@media (prefers-reduced-motion: reduce){.star{animation:none;opacity:.5}}@media (max-width: 700px){#contact h2{font-size:2.4rem}.contact-card{padding:1.6rem 1.4rem}}@media (max-width: 1560px){#contact .float-photo{width:calc(var(--w, 230px) * .8)}}
