:root{--bg:#ecebe7;--bg-raised:#e1e0da;--ink:#1a1a1a;--ink-dim:#6b6b67;--line:#d5d4cd}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-family:IBM Plex Sans,sans-serif;line-height:1.6}h1,h2,h3{letter-spacing:-.01em;font-family:Fraunces,serif;font-weight:500}.eyebrow{letter-spacing:.14em;text-transform:uppercase;color:var(--ink-dim);margin-bottom:1.2rem;font-family:IBM Plex Mono,monospace;font-size:.75rem;display:inline-block}section{max-width:860px;margin:0 auto;padding:6rem 2rem}.topbar{z-index:20;background:var(--bg);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:1.6rem 2rem;display:flex;position:sticky;top:0}.logo{color:var(--ink);font-family:Fraunces,serif;font-size:1.4rem;text-decoration:none}.topbar-right{align-items:center;gap:2rem;display:flex}.inline-nav{align-items:center;gap:2.2rem;display:flex}.inline-nav a{color:var(--ink);font-family:IBM Plex Sans,sans-serif;font-size:.95rem;text-decoration:none}.inline-nav a:hover{color:var(--ink-dim)}.topbar-social{align-items:center;gap:1rem;display:flex}.topbar-social a{color:var(--ink);text-decoration:none;display:flex}.topbar-social a:hover{color:var(--ink-dim)}.topbar-social svg{width:17px;height:17px}.hamburger{cursor:pointer;z-index:40;width:30px;height:30px;color:var(--ink);justify-content:center;align-items:center;text-decoration:none;display:flex;position:relative}.hamburger svg{width:22px;height:22px}@media (max-width:720px){.inline-nav,.topbar-social{display:none}}.nav-overlay{background:var(--bg);z-index:30;opacity:0;pointer-events:none;flex-direction:column;justify-content:center;padding:2rem;transition:opacity .35s,transform .35s;display:flex;position:fixed;inset:0;transform:translateY(-12px)}.nav-overlay:target{opacity:1;pointer-events:auto;transform:translateY(0)}.nav-close{color:var(--ink);font-family:IBM Plex Sans,sans-serif;font-size:1.8rem;line-height:1;text-decoration:none;position:absolute;top:1.6rem;right:2rem}.nav-list{width:100%;max-width:640px;margin:0 auto;list-style:none}.nav-list li{border-bottom:1px solid var(--line)}.nav-list a{color:var(--ink);justify-content:space-between;align-items:center;padding:1rem 0;font-family:Fraunces,serif;font-size:clamp(1.8rem,5vw,2.8rem);text-decoration:none;transition:padding-left .25s;display:flex}.nav-list a:hover{padding-left:.6rem}.nav-list a .chev{color:var(--ink-dim);font-family:IBM Plex Sans,sans-serif;font-size:1.4rem}.nav-social{gap:1rem;max-width:640px;margin:2.4rem auto 0;display:flex}.nav-social a{width:2.4rem;height:2.4rem;color:var(--ink-dim);border:1px solid var(--line);border-radius:50%;justify-content:center;align-items:center;text-decoration:none;transition:border-color .25s,color .25s;display:flex}.nav-social a:hover{border-color:var(--ink);color:var(--ink)}.nav-social svg{width:16px;height:16px}.hero{grid-template-columns:1.1fr .9fr;align-items:center;gap:3.5rem;max-width:1040px;padding-top:5rem;padding-bottom:5rem;display:grid}.hero-text .roles{color:var(--ink);margin-bottom:1.8rem;font-family:IBM Plex Sans,sans-serif;font-size:1.1rem}.hero-text h1{color:var(--ink);font-size:clamp(2.6rem,6vw,4.4rem);line-height:1.08}.hero-text h1 .lead{font-weight:400;display:block}.hero-text h1 .name{font-weight:500;display:block}.hero-text .role{color:var(--ink-dim);max-width:46ch;margin-top:1.4rem;font-size:1.1rem}.photo-frame{aspect-ratio:4/5;border:1px solid var(--line);background:var(--bg-raised);border-radius:4px;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}.photo-frame img{object-fit:cover;width:100%;height:100%;display:block}.photo-frame span{color:var(--ink-dim);letter-spacing:.05em;font-family:IBM Plex Mono,monospace;font-size:.78rem}@media (max-width:720px){.hero{grid-template-columns:1fr;padding-top:3rem}.photo-frame{order:-1;max-width:320px;margin:0 auto}}.about-teaser{border-top:1px solid var(--line)}.about-teaser p{color:var(--ink-dim);max-width:62ch;font-size:1.08rem}.about-teaser strong{color:var(--ink);font-weight:600}.read-more{color:var(--ink);border-bottom:1px solid var(--ink);align-items:center;gap:.4rem;margin-top:1.6rem;padding-bottom:.2rem;font-family:IBM Plex Mono,monospace;font-size:.85rem;text-decoration:none;display:inline-flex}.read-more:hover .arrow{transform:translate(3px)}.read-more .arrow{transition:transform .2s;display:inline-block}.placeholder{text-align:center;padding-top:8rem;padding-bottom:8rem}.placeholder h1{margin-bottom:1rem;font-size:clamp(2rem,5vw,3rem)}.placeholder p{color:var(--ink-dim)}.back-link{color:var(--ink);border-bottom:1px solid var(--ink);margin-top:2rem;font-family:IBM Plex Mono,monospace;font-size:.85rem;text-decoration:none;display:inline-block}.admin-auth{max-width:420px;margin:0 auto;padding:6rem 2rem}.admin-auth h1{margin-bottom:1.6rem;font-size:2rem}.admin-form{flex-direction:column;gap:.9rem;display:flex}.admin-form label{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.06em;flex-direction:column;gap:.4rem;font-family:IBM Plex Mono,monospace;font-size:.78rem;display:flex}.admin-form input,.admin-form textarea{border:1px solid var(--line);background:var(--bg-raised);color:var(--ink);border-radius:4px;padding:.7rem .9rem;font-family:IBM Plex Sans,sans-serif;font-size:1rem}.admin-form button{border:1px solid var(--ink);background:var(--ink);color:var(--bg);cursor:pointer;border-radius:4px;width:fit-content;padding:.7rem 1.2rem;font-family:IBM Plex Mono,monospace;font-size:.85rem}.admin-form button:hover{opacity:.85}.admin-form button:disabled{opacity:.5;cursor:not-allowed}.admin-error{color:#b3413a;font-size:.9rem}.admin-dashboard{max-width:960px;margin:0 auto;padding:4rem 2rem 6rem}.admin-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:flex-start;margin-bottom:3rem;padding-bottom:2rem;display:flex}.admin-header h1{font-size:1.8rem}.admin-signout{border:1px solid var(--line);color:var(--ink-dim);cursor:pointer;background:0 0;border-radius:4px;padding:.6rem 1rem;font-family:IBM Plex Mono,monospace;font-size:.8rem}.admin-signout:hover{border-color:var(--ink);color:var(--ink)}.admin-section{margin-bottom:3.5rem}.admin-section h2{margin-bottom:1.2rem;font-size:1.3rem}.admin-form-row{flex-flow:wrap;align-items:center;margin-bottom:1.4rem}.admin-form-row input[name=title]{flex:1;min-width:200px}.admin-form-row input[type=number]{width:80px}.admin-form-stack{border:1px solid var(--line);background:var(--bg-raised);border-radius:6px;margin-bottom:1rem;padding:1.2rem}.admin-form-actions{gap:.8rem;display:flex}.admin-list{flex-direction:column;gap:.6rem;display:flex}.admin-delete{color:#b3413a;background:0 0;border-color:#b3413a}.admin-body-field{flex-direction:column;gap:.6rem;display:flex}.admin-image-upload{border:1px dashed var(--line);width:fit-content;color:var(--ink-dim);cursor:pointer;border-radius:4px;align-items:center;padding:.5rem .9rem;font-family:IBM Plex Mono,monospace;font-size:.78rem;display:inline-flex}.admin-image-upload:hover{border-color:var(--ink);color:var(--ink)}.blog-body{color:var(--ink-dim);max-width:62ch;font-size:1.08rem}.blog-image{border:1px solid var(--line);border-radius:6px;max-width:100%;margin:1.4rem 0;display:block}.blog-list{margin-top:2rem;list-style:none}.blog-list li{border-bottom:1px solid var(--line);justify-content:space-between;align-items:baseline;padding:1.2rem 0;display:flex}.blog-list a{color:var(--ink);font-family:Fraunces,serif;font-size:1.25rem;text-decoration:none}.blog-list a:hover{color:var(--ink-dim)}.blog-date{color:var(--ink-dim);white-space:nowrap;margin-left:1.5rem;font-family:IBM Plex Mono,monospace;font-size:.8rem}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:1.4rem;margin-top:2.2rem;display:grid}.project-card{border:1px solid var(--line);background:var(--bg-raised);border-radius:6px;padding:1.6rem}.project-card h3{margin-bottom:.6rem;font-size:1.15rem}.project-card p{color:var(--ink-dim);font-size:.95rem}.project-card .read-more{margin-top:1rem}@media (max-width:600px){.project-grid{grid-template-columns:1fr}}.about h1{margin-bottom:1.6rem;font-size:clamp(2rem,5vw,3rem)}.about h2{margin-top:3.4rem;margin-bottom:1rem;font-size:1.5rem}.about>p,.about-block p{color:var(--ink-dim);max-width:62ch;font-size:1.08rem}.about-block p+p{margin-top:1.1rem}.about strong{color:var(--ink);font-weight:600}.chips{flex-wrap:wrap;gap:.7rem;margin-top:2.2rem;display:flex}.chip{border:1px solid var(--line);color:var(--ink-dim);border-radius:999px;padding:.5rem 1rem;font-family:IBM Plex Mono,monospace;font-size:.82rem;transition:border-color .25s,color .25s}.chip:hover{border-color:var(--ink);color:var(--ink)}.booklist{grid-template-columns:repeat(2,minmax(0,1fr));gap:.7rem 1.5rem;margin-top:1.2rem;list-style:none;display:grid}.booklist li{color:var(--ink-dim);padding-left:1rem;font-size:.95rem;position:relative}.booklist li:before{content:"—";color:var(--ink);position:absolute;left:0}@media (max-width:600px){.booklist{grid-template-columns:1fr}}.linkedin-link{color:var(--ink);border-bottom:1px solid var(--ink);align-items:center;gap:.4rem;margin-top:1.6rem;padding-bottom:.2rem;font-family:IBM Plex Mono,monospace;font-size:.85rem;text-decoration:none;display:inline-flex}footer{text-align:center;color:var(--ink-dim);letter-spacing:.04em;border-top:1px solid var(--line);padding:3rem 2rem 4rem;font-family:IBM Plex Mono,monospace;font-size:.78rem}a:focus-visible,.hamburger:focus-visible{outline:2px solid var(--ink);outline-offset:3px}@media (max-width:600px){section{padding:4rem 1.4rem}}
