:root{--paper:#f2f0ec;--ink:#0d0c0b;--muted:rgba(13,12,11,.64);--line:rgba(13,12,11,.16);--accent:#0a0908}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:'Inter Tight','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:14px}a{color:inherit;text-decoration:none}button,input,textarea{font:inherit}button,a,input,textarea{touch-action:manipulation}button{cursor:pointer;color:inherit}button:focus-visible,a:focus-visible,input:focus-visible{outline:2px solid #688226;outline-offset:4px}.top{height:96px;display:flex;align-items:center;justify-content:space-between;padding:0 4vw;border-bottom:1px solid var(--line)}.logo{font-size:29px;letter-spacing:-1.8px;font-weight:600}.logo span{color:#92958a}.nav{display:flex;gap:30px;align-items:center}.nav a{color:var(--muted);font-size:13px}.nav a.active{color:var(--ink)}.nav a.active:before{content:'●';font-size:7px;margin-right:7px}.nav .contact{border:1px solid var(--line);padding:11px 18px;border-radius:30px;color:var(--ink)}main{padding:65px 4vw 80px;min-height:calc(100vh - 178px)}.eyebrow{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}.intro{display:flex;justify-content:space-between;align-items:end;gap:25px;margin-bottom:50px}.intro h1{font-size:clamp(48px,7vw,100px);font-weight:400;line-height:.95;letter-spacing:-.06em;margin:18px 0 0}.intro p{max-width:310px;line-height:1.8;color:var(--muted)}.badge{display:inline-flex;align-items:center;gap:8px;padding:9px 13px;border:1px solid var(--line);border-radius:30px;font-size:11px}.badge:before{content:'';width:6px;height:6px;border-radius:50%;background:#75974b}.line{border-top:1px solid var(--line)}.foot{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);margin:0 4vw;padding:25px 0;font-size:11px;color:var(--muted)}.btn{border:1px solid var(--ink);background:var(--ink);color:white;border-radius:30px;padding:13px 22px;display:inline-flex;justify-content:center;align-items:center;gap:20px;font-size:12px;min-height:42px}.btn.light{background:transparent;border-color:var(--line);color:var(--ink)}.btn.small{padding:8px 13px;min-height:36px}.muted{color:var(--muted)}.grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:45px 25px}.project-image{width:100%;aspect-ratio:1.32;object-fit:cover;display:block;transition:transform .5s}.project a{display:block;overflow:hidden}.project a:hover .project-image{transform:scale(1.025)}.project-meta{display:flex;justify-content:space-between;padding-top:16px;gap:15px}.project h2{font-size:23px;font-weight:400;letter-spacing:-.04em;margin:0 0 7px}.project-meta p{font-size:11px;color:var(--muted);margin:0}.arrow{font-size:24px}.filters{display:flex;gap:8px;margin-bottom:30px;flex-wrap:wrap}.filter{border:1px solid var(--line);border-radius:30px;background:transparent;padding:9px 17px;font-size:12px;min-height:36px}.filter.active{background:var(--ink);color:white;border-color:var(--ink)}.field{display:flex;flex-direction:column;gap:10px;margin:22px 0}.field label{font-size:12px}.field input,.field textarea{width:100%;border:0;border-bottom:1px solid var(--line);padding:13px 0;background:transparent;border-radius:0;outline-offset:4px}.field textarea{min-height:80px}.hint{font-size:11px!important}.error{color:#a33!important;min-height:18px}.resume{display:grid;grid-template-columns:1fr 1.5fr;gap:9vw}.portrait{width:100%;aspect-ratio:.82;object-fit:cover}.caption{display:flex;justify-content:space-between;padding-top:14px;font-size:11px;color:var(--muted)}.bio h2{font-weight:400;font-size:35px;letter-spacing:-.04em;line-height:1.25;margin:0 0 25px}.bio>p{color:var(--muted);line-height:1.9;max-width:500px}.section-title{font-size:11px;text-transform:uppercase;letter-spacing:.12em;margin:55px 0 20px}.experience{display:grid;grid-template-columns:100px 1fr;gap:15px;border-top:1px solid var(--line);padding:23px 0}.experience small{color:var(--muted)}.experience h3{font-size:17px;font-weight:500;margin:0 0 8px}.experience p{font-size:12px;color:var(--muted);margin:0}.tags{display:flex;gap:8px;flex-wrap:wrap}.tag{border:1px solid var(--line);padding:9px 13px;border-radius:25px;font-size:12px}.photo{border:0;background:none;padding:0;position:relative;overflow:hidden;display:block}.photo img{width:100%;aspect-ratio:1;object-fit:cover;display:block;transition:filter .3s}.photo:hover img{filter:brightness(.92)}.photo span{position:absolute;left:12px;bottom:12px;color:white;font-size:10px;text-shadow:0 1px 8px #000}.detail-head{padding:10px 0 35px}.detail-head h1{font-size:clamp(50px,8vw,110px);font-weight:400;letter-spacing:-.06em;margin:30px 0}.detail-meta{display:grid;grid-template-columns:1fr 1fr 2fr;gap:25px;border-top:1px solid var(--line);padding-top:22px;line-height:1.8}.detail-meta small{display:block;color:var(--muted);font-size:10px;text-transform:uppercase;margin-bottom:7px}.detail-gallery{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:40px}.detail-gallery .photo:first-child{grid-column:1/-1}.detail-gallery img{aspect-ratio:1.4}.detail-gallery .photo:first-child img{aspect-ratio:1.9}.row{display:flex;align-items:center;justify-content:space-between;gap:15px;flex-wrap:wrap}.row h2{font-size:20px;font-weight:400;margin:0}.actions{display:flex;gap:7px;flex-wrap:wrap}.icon-btn{min-width:30px;min-height:32px;border:1px solid var(--line);background:transparent;border-radius:4px;font-size:11px}.empty{padding:50px;border:1px dashed var(--line);text-align:center;color:var(--muted)}#toast{position:fixed;bottom:25px;left:50%;transform:translateX(-50%);background:var(--ink);color:white;padding:15px 25px;border-radius:30px;font-size:12px;z-index:100;display:none}#viewer{position:fixed;border:0;padding:65px 70px 45px;width:100vw;height:100dvh;max-width:none;max-height:none;background:#181916;color:white}#viewer[open]{display:flex;align-items:center;justify-content:center}#viewer::backdrop{background:#181916}#viewer img{max-width:90%;max-height:85%;object-fit:contain;touch-action:pinch-zoom}#viewer button{position:absolute;background:transparent;border:1px solid #666;color:white;border-radius:50%;width:40px;height:40px;font-size:22px}.viewer-close{right:25px;top:20px}.previous{left:15px;top:50%}.next{right:15px;top:50%}#viewer p{position:absolute;bottom:10px;font-size:12px;color:#aaa}.sample{font-size:10px;color:var(--muted);margin-top:20px}
@media(min-width:1600px){main{max-width:1650px;margin:auto}}@media(max-width:800px){.top{height:76px}.nav{gap:16px}.nav .contact{display:none}main{padding-top:38px}.intro{align-items:start;flex-direction:column;margin-bottom:30px}.intro p{margin:0}.resume{gap:35px;grid-template-columns:1fr 1.2fr}}
@media(max-width:520px){.nav{gap:13px}.nav a{font-size:11px}.logo{font-size:25px}.grid{grid-template-columns:1fr;gap:30px}.resume{grid-template-columns:1fr}.portrait{aspect-ratio:1.1}.intro h1{font-size:60px}.detail-meta{grid-template-columns:1fr 1fr}.detail-meta>div:last-child{grid-column:1/-1}.detail-gallery{gap:10px}.foot{font-size:10px}.bio h2{font-size:30px}.project-meta h2{font-size:21px}}

/* Shared reconn identity: the same header on every route. */
body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-weight:400;}
.top{height:80px;padding:max(14px,calc(env(safe-area-inset-top,0px) + 12px)) clamp(16px,3.4vw,44px) 14px;gap:18px;}
.logo{font-size:26px;font-weight:500;letter-spacing:-.045em;line-height:1;flex-shrink:0;}
.top .nav{display:flex;align-items:center;gap:clamp(14px,2.4vw,32px);}
.top .nav a,.top .nav a:not(.pill){display:inline-flex;align-items:center;min-height:40px;font-size:14px;letter-spacing:-.008em;white-space:nowrap;text-decoration:none;color:var(--muted);opacity:1;}
.top .nav a:hover,.top .nav a.active{color:var(--ink);}
.top .nav a.active:before{content:none;}
.top .nav a.active{text-decoration:underline;text-underline-offset:7px;text-decoration-thickness:1px;}
.home .top{position:fixed;inset:0 0 auto;z-index:40;border:0;background:linear-gradient(to bottom,rgba(242,240,236,.94),rgba(242,240,236,.78) 72%,rgba(242,240,236,0));}
.home main.panels{padding:0;min-height:0;max-width:none;margin:0;}
.home .foot{margin:0;border:0;max-width:none;}
.home .eyebrow{letter-spacing:.045em;text-transform:none;}
.home h1{color:var(--ink);}
main:not(.panels){padding-left:clamp(16px,3.4vw,44px);padding-right:clamp(16px,3.4vw,44px);}
.badge:before{background:var(--ink);}

@media(max-width:520px){.top{height:72px;gap:12px;}.logo{font-size:23px;}.top .nav{gap:14px;}.top .nav a,.top .nav a:not(.pill){font-size:12px;}.home .foot{font-size:10px;}.home .eyebrow{font-size:11px;}}
.home .foot{justify-content:center;}

/* Viewer: zoom, pan, swipe (shared/viewer.js) */
#viewer{touch-action:none;overflow:hidden;user-select:none;-webkit-user-select:none}
#viewer img{touch-action:none;-webkit-user-drag:none;cursor:zoom-in;will-change:transform}
#viewer.zoomed img{cursor:grab;max-width:90%;max-height:85%}
#viewer.zoomed img:active{cursor:grabbing}
#viewer .previous,#viewer .next,#viewer .viewer-close{z-index:2}
#viewer.zoomed .previous,#viewer.zoomed .next{opacity:0;pointer-events:none}
#viewer p,#viewer .viewer-zoom{z-index:2}
.viewer-zoom{position:absolute;right:20px;bottom:14px;display:flex;align-items:center;gap:6px}
#viewer .viewer-zoom button{position:static;width:34px;height:34px;font-size:18px;line-height:1}
.viewer-zoom output{min-width:52px;text-align:center;font-size:12px;color:#aaa;cursor:pointer}
/* Form errors (shared/core.js fieldError) */
.error{font-size:12px;line-height:1.5;margin:8px 0 18px!important;display:flex;align-items:center;gap:8px}
.error:empty{margin:0 0 18px!important}
.error:not(:empty)::before{content:'';flex:none;width:5px;height:5px;border-radius:50%;background:currentColor}
.field.invalid label{color:#a33}
.field.invalid input{border-bottom-color:#a33;animation:field-nudge .32s ease}
@keyframes field-nudge{25%{transform:translateX(-4px)}75%{transform:translateX(4px)}}
@media(prefers-reduced-motion:reduce){.field.invalid input{animation:none}}

/* Viewer on phones/tablets: edge to edge, controls float over the photo, tap hides them. */
@media(max-width:820px){
 #viewer{padding:0;background:#000}
 #viewer::backdrop{background:#000}
 #viewer img,#viewer.zoomed img{max-width:100vw;max-height:100dvh}
 #viewer .previous,#viewer .next{display:none}
 #viewer .viewer-close{top:max(12px,env(safe-area-inset-top));right:12px;background:rgba(0,0,0,.45);border-color:rgba(255,255,255,.25)}
 #viewer p{left:0;right:0;bottom:0;margin:0;padding:40px 120px max(16px,env(safe-area-inset-bottom)) 16px;text-align:left;background:linear-gradient(transparent,rgba(0,0,0,.55))}
 #viewer .viewer-zoom{bottom:max(10px,env(safe-area-inset-bottom));right:10px}
 #viewer .viewer-close,#viewer p,#viewer .viewer-zoom{transition:opacity .2s}
 #viewer.ui-hidden .viewer-close,#viewer.ui-hidden p,#viewer.ui-hidden .viewer-zoom{opacity:0;pointer-events:none}
}
