*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth}html,body{margin:0;padding:0}:root{--title-font: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--body-font: "Open Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--bg: #f7f6f5;--text: #000;--text-2: rgba(25, 25, 25, .56);--accent: #2200ff;--surface: #fff;--surface-alt: #f2f5fa;--border: rgba(0, 0, 0, .06);--white-50: rgba(255, 255, 255, .72);--backdrop: rgba(247, 246, 245, .82)}body{font-family:var(--body-font);font-size:16px;line-height:1.5;color:var(--text);background:var(--bg)}a{color:var(--text);text-decoration:none}a:hover{color:var(--accent);text-decoration:underline}.aura{display:none}.wrap{position:relative;z-index:1;max-width:880px;margin:0 auto;padding:108px 20px 64px}.site-nav{position:fixed;z-index:20;top:0;left:0;right:0;padding:20px 16px 0}.site-nav nav{display:flex;justify-content:center}.nav-pill{position:relative;display:flex;list-style:none;margin:0;padding:10px;border-radius:50px;background:var(--backdrop);backdrop-filter:blur(20px) saturate(1.7);-webkit-backdrop-filter:blur(20px) saturate(1.7);box-shadow:0 10px 40px #00000014}.nav-pill li{display:flex;position:relative;z-index:1}.nav-pill a{color:var(--text-2);font-size:15px;font-weight:500;padding:8px 18px;border-radius:24px;text-decoration:none;transition:color .2s ease}.nav-pill a:hover,.nav-pill a.active{color:var(--text);text-decoration:none}.nav-tab{position:absolute;top:0;left:0;border-radius:24px;background:var(--white-50);z-index:0;opacity:0;pointer-events:none;transition:transform .22s ease,width .22s ease,height .22s ease,opacity .2s ease}.nav-tab.visible{opacity:1}.hero{margin-top:-10px;min-height:calc(100svh - 98px);padding:4.5rem 0 2.5rem;box-sizing:border-box}.hero h1{font-family:var(--title-font);font-weight:700;letter-spacing:-.03em;line-height:1.05;margin:0 0 12px;color:var(--text);font-size:clamp(2.6rem,7vw,4.2rem);text-align:center}.hero-sub{text-align:center;color:var(--text-2);margin:0 0 14px;font-size:16px}.hero-links{display:flex;justify-content:center;flex-wrap:wrap;gap:10px 22px;list-style:none;margin:0 0 3rem;padding:0}.hero-links a{display:inline-flex;align-items:center;gap:8px;color:var(--text-2);font-size:14px;text-decoration:none}.hero-links a:hover{color:var(--text);text-decoration:none}.hero-links img,.hero-links svg{width:16px;height:16px;flex-shrink:0}.deets{display:grid;grid-template-columns:minmax(240px,320px) 1fr;gap:48px;align-items:center}.me{position:relative;width:100%;max-width:320px}.me-frame{position:relative;z-index:1;overflow:hidden;aspect-ratio:1;border-radius:46% 54% 48% 52%/42% 48% 52% 58%;background:var(--bg)}.me-frame:after{content:"";position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse 72% 72% at 50% 42%,transparent 52%,var(--bg) 100%)}.me img{width:100%;height:100%;display:block;object-fit:cover;object-position:center 18%;mix-blend-mode:multiply;filter:saturate(.92) contrast(1.06)}.intro-title{font-family:var(--title-font);font-size:clamp(1.45rem,2.8vw,1.85rem);font-weight:700;letter-spacing:-.02em;line-height:1.25;margin:0 0 14px;color:var(--text);text-transform:none}.blurb p{margin:0 0 12px;color:var(--text-2);font-size:16px;line-height:1.55;max-width:48ch}.blurb p:last-child{margin-bottom:0}.page-title{font-family:var(--title-font);font-size:clamp(2.2rem,6vw,3.2rem);font-weight:700;letter-spacing:-.03em;line-height:1.1;margin:24px 0 10px;color:var(--text)}.meta{font-family:var(--body-font);color:var(--text-2);margin:0 0 18px;font-size:15px}section{margin-top:36px;scroll-margin-top:96px}h2{font-family:var(--body-font);font-size:12px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--text-2);margin:0 0 12px}h2.intro-title{font-family:var(--title-font);font-size:clamp(1.45rem,2.8vw,1.85rem);font-weight:700;letter-spacing:-.02em;line-height:1.25;margin:0 0 14px;color:var(--text);text-transform:none}.card{background:#ffffff6b;border:1px solid rgba(0,0,0,.06);border-radius:12px;padding:18px 18px 16px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);box-shadow:0 1px 2px #00000008;transition:transform .35s cubic-bezier(.22,1,.36,1),box-shadow .35s cubic-bezier(.22,1,.36,1),background .35s ease,border-color .35s ease}.card:hover{transform:translateY(-5px);background:#ffffffc7;border-color:#00000014;box-shadow:0 18px 40px #00000014}a.project-card{display:block;position:relative;color:inherit;text-decoration:none;padding-right:44px}a.project-card:hover{color:inherit;text-decoration:none}a.project-card:active{transform:translateY(-2px) scale(.992);transition-duration:.12s}.card-arrow{position:absolute;top:18px;right:16px;font-size:18px;line-height:1;color:var(--text);transition:transform .3s cubic-bezier(.22,1,.36,1)}a.project-card:hover .card-arrow{transform:translate(6px)}.card-list,.card-grid{display:grid;gap:12px}.card-grid{grid-template-columns:1fr 1fr}.contact-grid{align-items:start}.row{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.row strong{font-weight:600;color:var(--text)}.dates{color:var(--text-2);font-size:14px;white-space:nowrap}ul{margin:8px 0 0;padding-left:18px;color:var(--text-2)}li{margin-bottom:4px}.project-card h3,.project h3{font-family:var(--title-font);font-size:20px;margin:0 0 2px;font-weight:700;letter-spacing:-.02em;color:var(--text)}.back-link{display:inline-block;margin-bottom:8px;font-size:14px;color:var(--text-2)}.back-link:hover{color:var(--text)}.detail-p{margin:0 0 12px;color:var(--text-2);line-height:1.6}.detail-p:last-child{margin-bottom:0}.route-list{margin:0;padding-left:18px;font-size:14px;color:var(--text-2)}.links{font-size:14px;margin:10px 0 0}.links span,.sep{color:var(--text-2);margin:0 6px}.stack{color:var(--text-2);font-size:14px;margin:0}.other h3{font-size:18px}.skills-card{display:flex;flex-direction:column;gap:22px}.skill-label{margin:0 0 10px;font-size:12px;font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--text-2)}.skill-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}.skill-grid li{display:flex;align-items:center;gap:8px;margin:0;padding:8px 10px;border:1px solid var(--border);border-radius:8px;background:var(--surface-alt);color:var(--text);font-size:13px}.skill-grid img{width:18px;height:18px;object-fit:contain;flex-shrink:0}.contact-block p{margin:0 0 8px;color:var(--text-2)}.contact-block p:last-child{margin-bottom:0}form{display:flex;flex-direction:column;gap:10px}label{font-size:14px;color:var(--text-2)}input,textarea{font:inherit;padding:8px 10px;border:1px solid var(--border);border-radius:8px;width:100%;background:var(--surface);color:var(--text)}textarea{min-height:120px;resize:vertical}button{font:inherit;padding:8px 16px;border:1px solid var(--text);background:var(--text);color:var(--bg);border-radius:4px;cursor:pointer;width:fit-content}button:hover{background:var(--accent);border-color:var(--accent)}.ok{color:var(--text);font-size:15px}.err{color:#b42318;font-size:15px}footer{margin-top:48px;padding-top:14px;border-top:1px solid var(--border);color:var(--text-2);font-size:13px}.hero h1,.hero-sub,.hero-links,.hero .deets{animation:drop 1.45s cubic-bezier(.22,1,.36,1) both}.hero-sub{animation-delay:.16s}.hero-links{animation-delay:.24s}.hero .deets{animation-delay:.4s}@keyframes drop{0%{opacity:0;transform:translateY(-40px)}to{opacity:1;transform:none}}.reveal>h2,.reveal>.card-list,.reveal>.card-grid,.reveal>.card{opacity:0;transform:translateY(32px);transition:opacity .8s cubic-bezier(.22,1,.36,1),transform .8s cubic-bezier(.22,1,.36,1)}.reveal.is-in>h2,.reveal.is-in>.card-list,.reveal.is-in>.card-grid,.reveal.is-in>.card{opacity:1;transform:none}.reveal.is-in>.card-list,.reveal.is-in>.card-grid,.reveal.is-in>.card{transition-delay:.1s}@media(max-width:640px){.card-grid,.contact-grid,.deets{grid-template-columns:1fr}.me{max-width:260px;margin:0 auto}.nav-pill a{padding:8px 12px;font-size:14px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}main>*,.hero h1,.hero-sub,.hero-links,.hero .deets,.card,.nav-tab,.reveal>h2,.reveal>.card-list,.reveal>.card-grid,.reveal>.card{animation:none;transition:none;opacity:1;transform:none}.card:hover{transform:none}}
