:root{--bg: #0b0d10;--bg-2: #0f1319;--text: #ece9e2;--muted: #9e9c95;--line: rgba(236, 233, 226, .2);--line-soft: rgba(236, 233, 226, .1);--accent: #c6aa6f;--shadow: rgba(0, 0, 0, .48);--ease-out: cubic-bezier(.22, 1, .36, 1);--max-width: 1200px;--sans: "Avenir Next", "IBM Plex Sans", "Segoe UI", sans-serif;--serif: "Cormorant Garamond", "Iowan Old Style", "Times New Roman", serif}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-height:100vh;color:var(--text);background:radial-gradient(900px 480px at 14% -8%,rgba(194,159,103,.12) 0%,transparent 56%),radial-gradient(860px 400px at 92% 94%,rgba(95,112,132,.1) 0%,transparent 58%),var(--bg);font-family:var(--sans);line-height:1.45;letter-spacing:.01em}body:before{content:"";position:fixed;inset:0;background:#0000;pointer-events:none;transition:background .22s var(--ease-out);z-index:0}body.focus-mode:before{background:#0000006b}a{color:inherit;text-decoration:none}p{margin:0;color:var(--muted)}h1{margin:0;font-family:var(--serif);font-size:clamp(2rem,5.2vw,3.6rem);font-weight:600;line-height:.95;letter-spacing:.02em}.container{position:relative;z-index:1;width:min(var(--max-width),92vw);margin:0 auto;padding:1.2rem 0 3.2rem}.topnav{display:flex;gap:1.2rem;margin-bottom:1.4rem;padding-bottom:.85rem;border-bottom:1px solid var(--line-soft)}.topnav-link{position:relative;font-size:.72rem;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);transition:color .19s var(--ease-out)}.topnav-link:after{content:"";position:absolute;left:0;bottom:-.3rem;width:100%;height:1px;transform:scaleX(0);transform-origin:left;background:#ece9e2bd;transition:transform .19s var(--ease-out)}.topnav-link:hover,.topnav-link.active{color:var(--text)}.topnav-link:hover:after,.topnav-link.active:after{transform:scaleX(1)}.page-head{display:flex;justify-content:space-between;align-items:end;gap:1rem;margin-bottom:1rem}.page-head--home{margin-top:.6rem}.eyebrow{margin-bottom:.2rem;font-size:.68rem;text-transform:uppercase;letter-spacing:.16em;color:var(--accent)}.page-subtitle{max-width:34ch;font-size:.9rem;color:#c3c0b7;text-align:right}.site-intro{max-width:72ch;margin:.4rem 0 .5rem;font-size:.96rem}.site-contact{margin:0 0 1.5rem;font-size:.84rem}.dot{opacity:.6}.project-filters{display:grid;gap:.55rem;margin:0 0 1.2rem}.filter-block{display:flex;align-items:baseline;gap:.9rem;flex-wrap:wrap}.filter-label{font-size:.68rem;text-transform:uppercase;letter-spacing:.12em;color:#8f8c84}.filter-links{display:flex;gap:.8rem;flex-wrap:wrap}.filter-link{border:0;padding:0;background:transparent;color:#9c9a93;font:inherit;font-size:.74rem;text-transform:uppercase;letter-spacing:.08em;cursor:pointer;transition:color .18s var(--ease-out)}.filter-link:hover,.filter-link.is-active{color:var(--text)}.project-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:.9rem}.project-card{position:relative;display:block;overflow:hidden;border:1px solid var(--line-soft);background:var(--bg-2)}.project-card[hidden]{display:none}.project-card-media{aspect-ratio:4 / 5}.project-card-image{width:100%;height:100%;object-fit:cover;display:block;filter:contrast(1.04) saturate(.9);transform:scale(1);transition:transform .22s var(--ease-out),filter .22s var(--ease-out)}.project-card-overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:end;padding:.78rem;background:linear-gradient(180deg,#05060814 26%,#050608ad 86%);transition:background .22s var(--ease-out)}.project-card-meta{margin-bottom:.2rem;color:#cec9bd;font-size:.66rem;letter-spacing:.1em;text-transform:uppercase;opacity:.82}.project-card-title{margin:0;font-family:var(--serif);font-size:1.22rem;line-height:.95;letter-spacing:.03em;transform:translateY(6px);opacity:.9;transition:transform .22s var(--ease-out),opacity .22s var(--ease-out)}.project-card:hover .project-card-image{transform:scale(1.035);filter:contrast(1.07) saturate(.95)}.project-card:hover .project-card-overlay{background:linear-gradient(180deg,#0506081f 24%,#050608cc 90%)}.project-card:hover .project-card-title{transform:translateY(0);opacity:1}.back-link{display:inline-block;margin:0 0 .8rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.1em;color:#c5bba3;transition:color .18s var(--ease-out)}.back-link:hover{color:#e4d7b7}.project-meta{margin-bottom:.95rem;transition:opacity .19s var(--ease-out),transform .19s var(--ease-out),max-height .19s var(--ease-out),margin .19s var(--ease-out)}.project-meta h1{margin-bottom:.45rem}.project-meta-line{font-size:.72rem;letter-spacing:.11em;text-transform:uppercase}.project-description{max-width:64ch;margin:0 0 1rem;font-size:.9rem;transition:opacity .19s var(--ease-out),transform .19s var(--ease-out),max-height .19s var(--ease-out),margin .19s var(--ease-out)}.project-viewer{display:grid;gap:.9rem;grid-template-columns:1fr}.thumb-rail{display:flex;gap:.55rem;overflow-x:auto;padding-bottom:.15rem;scrollbar-width:thin}.thumb{width:68px;min-width:68px;aspect-ratio:3 / 4;border:1px solid transparent;background:transparent;padding:0;cursor:pointer;opacity:.5;transition:opacity .18s var(--ease-out),border-color .18s var(--ease-out),transform .18s var(--ease-out)}.thumb img{width:100%;height:100%;object-fit:cover;display:block}.thumb:hover,.thumb.is-active{opacity:1}.thumb.is-active{border-color:#ece9e2bf}.viewer-stage{display:grid;gap:.7rem}.viewer-frame{position:relative;display:flex;align-items:center;justify-content:center;min-height:66vh;border:1px solid var(--line-soft);background:radial-gradient(120% 120% at 50% 8%,rgba(150,158,170,.08) 0%,transparent 48%),#090b0eeb;box-shadow:inset 0 0 0 1px #ece9e205;transition:border-color .21s var(--ease-out),min-height .21s var(--ease-out)}.viewer-main{width:100%;min-height:66vh;border:0;padding:.7rem;background:transparent;display:flex;align-items:center;justify-content:center;cursor:zoom-in;touch-action:pan-y;transition:padding .21s var(--ease-out)}.viewer-main img{max-width:100%;max-height:79vh;width:auto;height:auto;border:1px solid rgba(236,233,226,.22);box-shadow:0 18px 44px -24px var(--shadow);transition:max-height .21s var(--ease-out),border-color .21s var(--ease-out)}.viewer-footer{display:flex;align-items:center;justify-content:space-between;gap:.85rem;transition:opacity .18s var(--ease-out)}.image-counter{font-size:.75rem;letter-spacing:.14em;text-transform:uppercase;color:#d8d3c6;display:flex;gap:.38rem}.viewer-controls{display:flex;gap:.75rem}.viewer-control{border:0;border-bottom:1px solid var(--line);background:transparent;color:#c7c3b8;font:inherit;font-size:.72rem;text-transform:uppercase;letter-spacing:.11em;padding:0 0 .15rem;cursor:pointer;transition:color .18s var(--ease-out),border-color .18s var(--ease-out)}.viewer-control:hover{color:var(--text);border-color:#ece9e2cc}body.focus-mode .topnav,body.focus-mode .back-link,body.focus-mode [data-project-meta],body.focus-mode .project-description{opacity:0;transform:translateY(-8px);margin:0;max-height:0;overflow:hidden;pointer-events:none}body.focus-mode .project-shell{width:min(96vw,1400px)}body.focus-mode .viewer-frame,body.focus-mode .viewer-main{min-height:calc(100vh - 6rem)}body.focus-mode .viewer-main{cursor:zoom-out;padding:.45rem}body.focus-mode .viewer-main img{max-height:92vh;border-color:#ece9e257}.about-layout{display:grid;grid-template-columns:minmax(260px,350px) minmax(0,1fr);gap:1.3rem;align-items:start}.about-photo{width:100%;aspect-ratio:3 / 4;object-fit:cover;border:1px solid var(--line-soft)}.about-copy{padding:1rem 1.05rem;border:1px solid var(--line-soft);background:#0c1014b8}.about-contact{margin-top:.8rem}.empty-state{margin-top:1.4rem;font-size:.9rem}code{font-family:IBM Plex Mono,SFMono-Regular,Menlo,monospace;font-size:.86em}@media(min-width:901px){.project-viewer{grid-template-columns:84px minmax(0,1fr);gap:1rem}.thumb-rail{flex-direction:column;max-height:calc(100vh - 210px);overflow-y:auto;overflow-x:hidden;padding-right:.15rem}.thumb{width:78px;min-width:78px}}@media(max-width:900px){.container{width:min(1200px,94vw);padding-top:1rem}.page-head{display:block;margin-bottom:.85rem}.page-subtitle{margin-top:.65rem;text-align:left}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.viewer-frame,.viewer-main{min-height:62svh}.viewer-main img{max-height:68svh}body.focus-mode .viewer-frame,body.focus-mode .viewer-main{min-height:calc(100svh - 4.5rem)}}@media(max-width:620px){h1{font-size:clamp(1.8rem,11vw,2.7rem)}.topnav{gap:.85rem}.project-grid{gap:.68rem}.project-card-overlay{padding:.64rem}.project-card-title{font-size:1.05rem}.about-layout{grid-template-columns:1fr}}
