:root{--paper: #f4f0e8;--paper-soft: #ece6d8;--ink: #14110d;--ink-soft: #3a362e;--muted: #7a7468;--rule: #c8bfae;--accent: #6b2a1f;--accent-warm: #a8411f;--cream: #faf7ef}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:80px}body{font-family:Inter Tight,sans-serif;font-weight:400;background:var(--paper);color:var(--ink);line-height:1.55;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:100;opacity:.5;mix-blend-mode:multiply;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='3' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0.08 0 0 0 0 0.07 0 0 0 0 0.05 0 0 0 0.12 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}.serif,h1,h2,h3,.display{font-family:Fraunces,serif;font-weight:400;letter-spacing:-.01em}.mono{font-family:JetBrains Mono,monospace}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}nav.top{position:fixed;top:0;left:0;right:0;z-index:50;display:flex;justify-content:space-between;align-items:center;padding:1.5rem 2.5rem;background:#f4f0e8d9;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid transparent;transition:border-color .4s ease,padding .4s ease}nav.top.scrolled{border-bottom-color:var(--rule);padding:1rem 2.5rem}nav .mark{font-family:Fraunces,serif;font-weight:500;font-style:italic;font-size:1.35rem;letter-spacing:-.02em}nav .mark span{color:var(--accent)}nav ul{list-style:none;display:flex;gap:2.5rem}nav ul a{font-family:JetBrains Mono,monospace;font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;color:var(--ink-soft);position:relative;padding:.25rem 0;transition:color .2s ease}nav ul a:after{content:"";position:absolute;left:0;bottom:-2px;width:0;height:1px;background:var(--accent);transition:width .3s ease}nav ul a:hover{color:var(--accent)}nav ul a:hover:after{width:100%}nav .resume-btn{font-family:JetBrains Mono,monospace;font-size:.68rem;text-transform:uppercase;letter-spacing:.14em;color:var(--paper);background:var(--ink);padding:.65rem 1.1rem;border:1px solid var(--ink);transition:background .25s ease,color .25s ease;display:inline-flex;align-items:center;gap:.5rem;margin-left:.5rem}nav .resume-btn:hover{background:var(--accent);border-color:var(--accent);color:var(--cream)}nav .resume-btn .ico{font-family:Fraunces,serif;font-style:italic;font-size:.9rem;letter-spacing:0}.resume-inline{display:inline-flex;align-items:baseline;gap:.6rem;margin-top:2rem;font-family:Fraunces,serif;font-size:1.15rem;font-style:italic;color:var(--ink);border-bottom:1px solid var(--ink);padding-bottom:.35rem;transition:color .25s ease,border-color .25s ease,gap .3s ease}.resume-inline:hover{color:var(--accent);border-color:var(--accent);gap:.9rem}.resume-inline .ico{font-family:JetBrains Mono,monospace;font-style:normal;font-size:.7rem;letter-spacing:.15em;text-transform:uppercase;color:var(--muted)}.resume-inline:hover .ico{color:var(--accent)}.tech-stack{margin-top:3rem;padding-top:2rem;border-top:1px solid var(--rule)}.tech-stack-head{font-family:JetBrains Mono,monospace;font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:1.5rem}.tech-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:2rem}.tech-col .tech-label{font-family:Fraunces,serif;font-style:italic;font-size:.95rem;color:var(--accent);margin-bottom:.75rem;padding-bottom:.5rem;border-bottom:1px dotted var(--rule)}.tech-col ul{list-style:none}.tech-col ul li{font-family:JetBrains Mono,monospace;font-size:.78rem;letter-spacing:.04em;color:var(--ink-soft);padding:.25rem 0;line-height:1.5}.hero{min-height:100vh;position:relative;padding:8rem 2.5rem 4rem;display:grid;grid-template-columns:1fr 1fr;gap:3rem;align-items:center}.hero-meta{font-family:JetBrains Mono,monospace;font-size:.7rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted);position:absolute;top:8rem;left:2.5rem;display:flex;align-items:center;gap:1rem}.hero-meta:before{content:"";display:inline-block;width:2.5rem;height:1px;background:var(--accent)}.hero-text h1{font-size:clamp(3.5rem,9vw,8.5rem);line-height:.95;font-weight:300;letter-spacing:-.035em;margin-bottom:2rem}.hero-text h1 em{font-style:italic;font-weight:400;color:var(--accent)}.hero-text .tagline{font-family:Fraunces,serif;font-size:1.3rem;line-height:1.5;font-weight:300;max-width:28rem;color:var(--ink-soft);margin-bottom:2.5rem}.hero-text .locale{font-family:JetBrains Mono,monospace;font-size:.72rem;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);display:flex;flex-wrap:wrap;gap:1.5rem}.hero-text .locale span{display:flex;align-items:center;gap:.5rem}.hero-text .locale span:before{content:"◦";color:var(--accent)}.hero-photo{position:relative;aspect-ratio:4/5;overflow:hidden;background:var(--ink);box-shadow:0 30px 60px -20px #14110d59;transform:translateY(-1rem)}.hero-photo img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;-o-object-fit:cover;object-fit:cover}.hero-photo .caption{position:absolute;bottom:1rem;left:1rem;right:1rem;font-family:Fraunces,serif;font-style:italic;font-size:.85rem;color:var(--cream);z-index:2;display:flex;justify-content:space-between;text-shadow:0 1px 8px rgba(0,0,0,.6)}.hero-photo svg{width:100%;height:100%;display:block}.rule-row{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:1.5rem;padding:0 2.5rem;margin:.5rem 0}.rule-row:before,.rule-row:after{content:"";height:1px;background:var(--rule)}.rule-row .glyph{font-family:Fraunces,serif;font-style:italic;font-size:1rem;color:var(--muted)}section{padding:8rem 2.5rem;position:relative}.section-head{display:grid;grid-template-columns:1fr 3fr;gap:3rem;margin-bottom:4rem;align-items:baseline}.section-num{font-family:JetBrains Mono,monospace;font-size:.72rem;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}.section-num:before{content:"§ ";color:var(--accent)}.section-title{font-size:clamp(2.25rem,5vw,4rem);font-weight:300;letter-spacing:-.025em;line-height:1.05}.section-title em{font-style:italic;color:var(--accent)}.edu-school{font-family:Fraunces,serif;font-size:1.6rem;font-weight:400;letter-spacing:-.015em;margin-bottom:.25rem}.edu-degree{font-family:JetBrains Mono,monospace;font-size:.75rem;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:2rem}.edu-courses-head{font-family:JetBrains Mono,monospace;font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:1rem}.edu-courses{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:2rem}.edu-courses span{font-family:JetBrains Mono,monospace;font-size:.75rem;letter-spacing:.06em;color:var(--ink-soft);padding:.35rem .75rem;border:1px solid var(--rule)}.about-grid{display:grid;grid-template-columns:1fr 3fr;gap:3rem}.about-label{font-family:JetBrains Mono,monospace;font-size:.7rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);padding-top:.4rem}.about-prose p{font-family:Fraunces,serif;font-size:1.35rem;line-height:1.6;font-weight:300;color:var(--ink-soft);margin-bottom:1.5rem;max-width:44rem}.about-prose p:first-child:first-letter{font-family:Fraunces,serif;font-size:4.5rem;font-weight:400;float:left;line-height:.9;padding:.5rem .75rem 0 0;color:var(--accent)}.sidebar-strip{margin-top:3rem;padding-top:2rem;border-top:1px solid var(--rule);display:grid;grid-template-columns:repeat(3,1fr);gap:2rem}.strip-item .k{font-family:JetBrains Mono,monospace;font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;color:var(--muted);margin-bottom:.5rem}.strip-item .v{font-family:Fraunces,serif;font-size:1.05rem;line-height:1.4}.photo-band{display:grid;grid-template-columns:2fr 1fr;gap:.75rem;height:70vh;padding:0 2.5rem;margin:2rem 0 0}.photo-band .photo-cell{position:relative;overflow:hidden;background:var(--ink)}.photo-band .photo-cell svg{width:100%;height:100%}.photo-band .photo-cell img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block}.photo-band .photo-caption{position:absolute;bottom:1rem;left:1rem;font-family:Fraunces,serif;font-style:italic;font-size:.8rem;color:var(--cream);text-shadow:0 1px 6px rgba(0,0,0,.7)}.experience-list{border-top:1px solid var(--rule)}.job{display:grid;grid-template-columns:1fr 2fr 1fr;gap:2.5rem;padding:2.5rem 0;border-bottom:1px solid var(--rule);align-items:baseline;transition:background .3s ease;position:relative}.job:hover{background:linear-gradient(to right,transparent,var(--paper-soft) 30%,var(--paper-soft) 70%,transparent)}.job:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--accent);transform:scaleY(0);transform-origin:top;transition:transform .4s ease}.job:hover:before{transform:scaleY(1)}.job-date{font-family:JetBrains Mono,monospace;font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.job-main h3{font-size:1.9rem;font-weight:400;letter-spacing:-.015em;margin-bottom:.35rem}.job-main h3 em{font-style:italic;color:var(--accent)}.job-main .role{font-family:Fraunces,serif;font-style:italic;font-size:1.05rem;color:var(--ink-soft);margin-bottom:1rem}.job-main ul{list-style:none;font-size:.95rem;color:var(--ink-soft);line-height:1.6}.job-main ul li{padding-left:1.25rem;position:relative;margin-bottom:.4rem}.job-main ul li:before{content:"—";position:absolute;left:0;color:var(--accent)}.job-stack{font-family:JetBrains Mono,monospace;font-size:.68rem;letter-spacing:.08em;color:var(--muted);text-transform:uppercase;line-height:1.8;text-align:right}.projects-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:2.5rem 3rem}.project{border-top:1px solid var(--ink);padding-top:1.5rem;position:relative;cursor:pointer;transition:transform .4s cubic-bezier(.19,1,.22,1)}.project:hover{transform:translateY(-4px)}.project-num{font-family:JetBrains Mono,monospace;font-size:.68rem;letter-spacing:.2em;color:var(--muted);position:absolute;top:-1.5rem;right:0;background:var(--paper);padding:0 .5rem}.project h3{font-size:1.75rem;font-weight:400;letter-spacing:-.015em;margin-bottom:.75rem;display:flex;align-items:baseline;justify-content:space-between;gap:1rem}.project h3 .arrow{font-family:Fraunces,serif;font-style:italic;color:var(--accent);font-size:1.25rem;transition:transform .3s ease;display:inline-block}.project:hover h3 .arrow{transform:translate(6px)}.project p{font-family:Fraunces,serif;font-size:1.05rem;line-height:1.55;font-weight:300;color:var(--ink-soft);margin-bottom:1rem}.project .tags{font-family:JetBrains Mono,monospace;font-size:.65rem;letter-spacing:.12em;color:var(--muted);text-transform:uppercase}.gallery-intro{display:grid;grid-template-columns:1fr 1fr;gap:4rem;margin-bottom:4rem;align-items:end}.gallery-intro .lead{font-family:Fraunces,serif;font-size:1.35rem;line-height:1.6;font-weight:300;font-style:italic;color:var(--ink-soft)}.gallery-intro .gear{font-family:JetBrains Mono,monospace;font-size:.7rem;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);line-height:2;text-align:right}.gallery-intro .gear span{color:var(--ink)}.gallery{display:grid;grid-template-columns:repeat(12,1fr);gap:1rem;grid-auto-rows:80px}.gallery .plate{position:relative;overflow:hidden;background:var(--ink);cursor:pointer;transition:transform .5s cubic-bezier(.19,1,.22,1)}.gallery .plate:hover{transform:scale(.99)}.gallery .plate svg{width:100%;height:100%;display:block;transition:transform .8s ease}.gallery .plate:hover svg{transform:scale(1.04)}.gallery .plate img{width:100%;height:100%;-o-object-fit:cover;object-fit:cover;display:block;transition:transform .8s ease}.gallery .plate:hover img{transform:scale(1.04)}.gallery .plate .cap{position:absolute;bottom:.75rem;left:.75rem;font-family:Fraunces,serif;font-style:italic;font-size:.78rem;color:var(--cream);opacity:0;transition:opacity .3s ease;text-shadow:0 1px 6px rgba(0,0,0,.7);z-index:2}.gallery .plate:hover .cap{opacity:1}.plate.p1{grid-column:span 7;grid-row:span 5}.plate.p2{grid-column:span 5;grid-row:span 3}.plate.p3{grid-column:span 5;grid-row:span 2}.plate.p4,.plate.p5,.plate.p6{grid-column:span 4;grid-row:span 4}.plate.p7,.plate.p8{grid-column:span 6;grid-row:span 3}.plate.p9,.plate.p10,.plate.p11{grid-column:span 4;grid-row:span 4}.plate.p12{grid-column:span 12;grid-row:span 3}.contact{padding:10rem 2.5rem;background:var(--ink);color:var(--cream);position:relative}.contact:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(ellipse at 30% 20%,rgba(168,65,31,.18),transparent 60%);pointer-events:none}.contact-inner{max-width:1200px;margin:0 auto;position:relative}.contact .section-num{color:#ffffff80}.contact .section-num:before{color:var(--accent-warm)}.contact h2{font-size:clamp(3rem,8vw,7rem);font-weight:300;line-height:.95;letter-spacing:-.035em;margin:2rem 0 3rem}.contact h2 em{font-style:italic;color:var(--accent-warm)}.contact-cta{font-family:Fraunces,serif;font-size:2.5rem;font-weight:300;letter-spacing:-.02em;display:inline-flex;align-items:center;gap:1rem;color:var(--cream);border-bottom:1px solid rgba(255,255,255,.3);padding-bottom:.5rem;transition:border-color .3s ease,color .3s ease}.contact-cta:hover{border-color:var(--accent-warm);color:var(--accent-warm)}.contact-cta .arrow{font-style:italic;transition:transform .3s ease}.contact-cta:hover .arrow{transform:translate(8px)}.contact-links{margin-top:5rem;display:grid;grid-template-columns:repeat(4,1fr);gap:2rem;padding-top:3rem;border-top:1px solid rgba(255,255,255,.15)}.contact-links .col .label{font-family:JetBrains Mono,monospace;font-size:.68rem;letter-spacing:.18em;text-transform:uppercase;color:#ffffff80;margin-bottom:.75rem}.contact-links .col a,.contact-links .col .val{font-family:Fraunces,serif;font-size:1.1rem;color:var(--cream);border-bottom:1px solid transparent;transition:border-color .2s ease;display:inline-block}.contact-links .col a:hover{border-bottom-color:var(--accent-warm)}footer{padding:2rem 2.5rem;background:var(--ink);color:#ffffff73;display:flex;justify-content:space-between;align-items:center;font-family:JetBrains Mono,monospace;font-size:.68rem;letter-spacing:.12em;text-transform:uppercase;border-top:1px solid rgba(255,255,255,.1)}.lightbox{position:fixed;top:0;right:0;bottom:0;left:0;z-index:200;background:#14110df2;display:flex;align-items:center;justify-content:center;padding:1rem;cursor:zoom-out}.lb-content{display:flex;flex-direction:column;align-items:center;gap:1rem;max-width:900px;width:100%;cursor:default}.lb-content img{max-height:82vh;max-width:100%;-o-object-fit:contain;object-fit:contain;display:block}.lb-cap{font-family:JetBrains Mono,monospace;font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;color:#faf7ef80}.lb-close{position:absolute;top:1.25rem;right:1.5rem;background:none;border:none;cursor:pointer;font-size:1.75rem;color:#faf7ef80;line-height:1;transition:color .2s ease}.lb-close:hover{color:var(--cream)}.lb-prev,.lb-next{position:absolute;top:50%;transform:translateY(-50%);background:none;border:none;cursor:pointer;font-size:2.5rem;color:#faf7ef66;padding:1rem;transition:color .2s ease;line-height:1}.lb-prev{left:.5rem}.lb-next{right:.5rem}.lb-prev:hover,.lb-next:hover{color:var(--cream)}.reveal{opacity:0;transform:translateY(24px);transition:opacity .9s cubic-bezier(.19,1,.22,1),transform .9s cubic-bezier(.19,1,.22,1)}.reveal.in{opacity:1;transform:translateY(0)}@media (max-width: 960px){nav.top{padding:1rem 1.25rem}nav ul{gap:1rem}nav ul a{font-size:.62rem}nav ul li.resume-li{display:none}.tech-grid{grid-template-columns:repeat(2,1fr);gap:1.5rem}.hero{grid-template-columns:1fr;padding:7rem 1.25rem 3rem;gap:2rem}.hero-meta{position:static;margin-bottom:1rem}.hero-photo{transform:none;aspect-ratio:4/5;max-height:60vh}section{padding:5rem 1.25rem}.section-head,.about-grid{grid-template-columns:1fr;gap:1rem}.sidebar-strip{grid-template-columns:1fr;gap:1.5rem}.photo-band{grid-template-columns:1fr;height:auto;padding:0 1.25rem}.photo-band .photo-cell{height:50vh}.job{grid-template-columns:1fr;gap:.75rem}.job-stack{text-align:left}.projects-grid{grid-template-columns:1fr}.gallery-intro{grid-template-columns:1fr;gap:1.5rem}.gallery-intro .gear{text-align:left}.gallery{grid-auto-rows:60px;gap:.5rem}.plate.p1,.plate.p2,.plate.p3,.plate.p4,.plate.p5,.plate.p6,.plate.p7,.plate.p8,.plate.p9,.plate.p10,.plate.p11,.plate.p12{grid-column:span 12;grid-row:span 3}.contact{padding:6rem 1.25rem}.contact-links{grid-template-columns:repeat(2,1fr);gap:2rem 1.5rem}.contact-cta{font-size:1.5rem}footer{flex-direction:column;gap:.5rem;text-align:center}}
