:root{--ink:#111;--muted:#626262;--line:#dedede;--soft:#f6f6f4;--white:#fff;--max:1200px;--ease:180ms ease}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:80px}body{margin:0;color:var(--ink);background:var(--white);font:16px/1.6 Inter,Arial,sans-serif}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible{outline:3px solid var(--ink);outline-offset:4px}.shell{width:min(calc(100% - 48px),var(--max));margin:auto}.skip-link{position:fixed;z-index:10;top:-100px;left:24px;padding:10px 16px;background:var(--ink);color:var(--white)}.skip-link:focus{top:16px}.site-header{position:sticky;top:0;z-index:5;background:rgba(255,255,255,.94);border-bottom:1px solid var(--line);backdrop-filter:blur(8px)}.nav-wrap{min-height:68px;display:flex;align-items:center;gap:30px}.wordmark{font-weight:800;font-size:1.25rem;letter-spacing:-.08em}.wordmark span,h1 span{color:var(--muted)}.site-nav{display:flex;gap:24px;margin-left:auto}.site-nav a,.nav-cta{font-size:.82rem;font-weight:600}.site-nav a{padding:12px 0;border-bottom:1px solid transparent}.site-nav a:hover,.site-nav a.active{border-color:var(--ink)}.nav-cta{padding:10px 14px;border:1px solid var(--ink)}.nav-cta:hover{background:var(--ink);color:var(--white)}.menu-toggle{display:none;background:none;border:0;font:600 .82rem Inter;padding:12px 0}.hero{min-height:calc(100dvh - 68px);padding:80px 0;display:grid;grid-template-columns:1.25fr .75fr;gap:clamp(32px,8vw,120px);align-items:center}.eyebrow,.section-label{font-size:.72rem;letter-spacing:.13em;text-transform:uppercase;font-weight:700}.eyebrow{margin:0 0 22px}.hero h1{margin:0;font-size:clamp(3.5rem,8vw,7.4rem);line-height:.9;letter-spacing:-.085em}.hero-summary{max-width:620px;margin:32px 0 0;font-size:clamp(1.1rem,2vw,1.38rem);line-height:1.55;color:var(--muted)}.hero-actions{display:flex;flex-wrap:wrap;align-items:center;gap:24px;margin-top:32px}.button{min-height:46px;display:inline-flex;align-items:center;justify-content:center;gap:12px;padding:11px 18px;font-weight:700;font-size:.9rem;border:1px solid}.button-primary{color:var(--white);background:var(--ink);border-color:var(--ink)}.button-primary:hover{background:var(--white);color:var(--ink)}.text-link,.project-link{font-size:.9rem;font-weight:700;border-bottom:1px solid var(--ink);padding-bottom:2px}.social-list{display:flex;gap:20px;padding:0;margin:30px 0 0;list-style:none;font-size:.84rem;font-weight:600}.social-list a:hover,.text-link:hover,.project-link:hover{color:var(--muted)}.portrait-frame{margin:0;background:var(--soft);aspect-ratio:4/5;overflow:hidden}.portrait-frame img{width:100%;height:100%;display:block;object-fit:cover;filter:grayscale(1);object-position:center top}.section{padding:100px 0;border-top:1px solid var(--line)}.about-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(32px,9vw,140px);padding:20px 0 70px}.about-grid h2{font-size:clamp(2rem,4vw,3.55rem);line-height:1.04;letter-spacing:-.055em;margin:0}.about-grid p{margin:0 0 20px;color:var(--muted)}.capability-grid{border-top:1px solid var(--line);display:grid;grid-template-columns:repeat(3,1fr)}.capability-grid article{padding:26px 26px 26px 0;border-bottom:1px solid var(--line)}.capability-grid article+article{padding-left:26px;border-left:1px solid var(--line)}.capability-grid span,.project-meta{font:700 .7rem/1 Inter;letter-spacing:.12em;color:var(--muted)}.capability-grid h3{margin:26px 0 6px;font-size:1rem}.capability-grid p{margin:0;color:var(--muted);font-size:.9rem}.tag-row{display:flex;flex-wrap:wrap;gap:7px;margin-top:28px}.tag-row span{border:1px solid var(--line);padding:4px 8px;font-size:.72rem;font-weight:600}.section-heading{display:flex;justify-content:space-between;gap:32px;align-items:baseline;margin-bottom:38px}.section-heading p{max-width:380px;color:var(--muted);font-size:.92rem;margin:0}.selected-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px}.project-image{display:block;aspect-ratio:1.75;overflow:hidden;background:var(--soft);border:1px solid var(--line)}.project-image img{display:block;width:100%;height:100%;object-fit:cover;transition:transform var(--ease)}.project-image:hover img{transform:scale(1.025)}.project-meta{display:flex;justify-content:space-between;margin:18px 0}.project h2{font-size:1.35rem;letter-spacing:-.04em;margin:0}.project p{font-size:.9rem;color:var(--muted);margin:12px 0 0}.project .tag-row{margin:18px 0}.additional-work{margin-top:110px;padding-top:32px;border-top:1px solid var(--ink)}.work-index{display:grid;grid-template-columns:1fr 1fr;gap:56px}.work-group h3{font-size:.78rem;letter-spacing:.13em;text-transform:uppercase;margin:0;border-bottom:1px solid var(--ink);padding-bottom:13px}.work-group>a,.work-unavailable{display:grid;grid-template-columns:1.5fr 1fr auto;gap:12px;align-items:baseline;padding:14px 0;border-bottom:1px solid var(--line);font-size:.86rem}.work-group>a:hover{background:var(--soft)}.work-group small{font-size:.75rem;color:var(--muted)}.work-group b{font-size:.8rem;font-weight:600}.work-unavailable{color:var(--muted)}.work-unavailable b{font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em}.resume-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(32px,9vw,140px);padding-top:20px}.resume-grid h2{font-size:1.6rem;letter-spacing:-.04em;margin:0 0 22px}.timeline{list-style:none;margin:0;padding:0}.timeline li{padding:22px 0;border-top:1px solid var(--line)}.timeline h3{font-size:1rem;margin:0}.timeline p{font-size:.84rem;color:var(--muted);margin:3px 0}.timeline span{font-size:.86rem;color:var(--muted)}.contact-section{background:var(--ink);color:var(--white);padding:90px 0}.contact-inner{display:grid;grid-template-columns:1.15fr .85fr;gap:80px;align-items:end}.contact-inner h2{font-size:clamp(2.5rem,5vw,4.8rem);line-height:.95;letter-spacing:-.07em;margin:16px 0 0}.contact-inner p:not(.eyebrow){margin:0 0 28px;color:#d7d7d7}.button-light{background:var(--white);border-color:var(--white);color:var(--ink)}.button-light:hover{background:var(--ink);color:var(--white)}.site-footer{font-size:.76rem;padding:20px 0;color:var(--muted)}.site-footer>.shell{display:flex;justify-content:space-between;gap:24px}.site-footer div{display:flex;gap:18px}.site-footer a:hover{color:var(--ink)}.back-to-top{position:fixed;bottom:20px;right:20px;width:44px;height:44px;border:1px solid var(--ink);background:var(--white);color:var(--ink);font-size:1.2rem;cursor:pointer;opacity:0;visibility:hidden;transform:translateY(8px);transition:opacity var(--ease),transform var(--ease),background var(--ease)}.back-to-top.visible{opacity:1;visibility:visible;transform:none}.back-to-top:hover{background:var(--ink);color:var(--white)}.reveal{opacity:0;transform:translateY(16px);transition:opacity 450ms ease-out,transform 450ms ease-out}.reveal.visible{opacity:1;transform:none}@media(max-width:800px){.shell{width:min(calc(100% - 32px),var(--max))}.menu-toggle{display:block;margin-left:auto}.nav-cta{display:none}.site-nav{display:none;position:absolute;left:0;right:0;top:68px;padding:14px 16px 20px;background:var(--white);border-bottom:1px solid var(--line);margin:0;flex-direction:column;gap:0}.site-nav.open{display:flex}.site-nav a{padding:11px 0}.hero{grid-template-columns:1fr;padding:56px 0 70px}.portrait-frame{max-width:420px;order:-1}.about-grid,.contact-inner{grid-template-columns:1fr;gap:28px}.capability-grid{grid-template-columns:1fr}.capability-grid article+article{padding-left:0;border-left:0}.selected-grid{grid-template-columns:1fr 1fr}.work-index,.resume-grid{grid-template-columns:1fr;gap:50px}.section{padding:72px 0}}@media(max-width:540px){body{font-size:16px}.hero h1{font-size:3.45rem}.hero-summary{font-size:1.05rem}.section-heading{display:block}.section-heading p{margin-top:12px}.selected-grid{grid-template-columns:1fr}.work-group>a,.work-unavailable{grid-template-columns:1fr auto}.work-group small{grid-column:1}.work-group b{grid-column:2;grid-row:1}.site-footer>.shell{display:block}.site-footer div{margin-top:10px;flex-wrap:wrap}.contact-section{padding:70px 0}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transform:none;transition:none}.project-image img,.back-to-top{transition:none}}
