:root{--bg-0:#e7eef3;--bg-1:#f3f6f8;--bg-2:#ffffff;--ink:#18212b;--ink-muted:#4a5866;--ink-soft:#6b7a88;--line:rgba(24, 33, 43, 0.12);--accent:#0f6e6a;--accent-hover:#0a5552;--accent-soft:rgba(15, 110, 106, 0.1);--shadow:0 1px 0 rgba(24, 33, 43, 0.04), 0 12px 32px rgba(24, 33, 43, 0.06);--radius:14px;--font-display:"Syne", sans-serif;--font-body:"Source Serif 4", Georgia, serif;--measure:40rem;--container:68rem;--space-1:0.5rem;--space-2:1rem;--space-3:1.5rem;--space-4:2.5rem;--space-5:4rem;--space-6:6rem}*,*::before,*::after{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;min-height:100vh;color:var(--ink);font-family:var(--font-body);font-size:1.125rem;line-height:1.7;background:radial-gradient(ellipse 80% 50% at 10% -10%,rgba(15,110,106,.12),transparent 55%),radial-gradient(ellipse 70% 45% at 100% 0%,rgba(70,110,150,.14),transparent 50%),linear-gradient(180deg,var(--bg-0) 0%,var(--bg-1) 45%,#eef2f5 100%);background-attachment:fixed}img{max-width:100%;height:auto;display:block}a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:.18em;transition:color 160ms ease,transform 220ms ease,box-shadow 220ms ease,background-color 160ms ease}a:hover{color:var(--accent-hover)}h1,h2,h3,h4{font-family:var(--font-display);font-weight:600;line-height:1.15;letter-spacing:-.02em;margin:0 0 .6em}p{margin:0 0 1em}ul{margin:0;padding:0;list-style:none}.container{width:min(100% - 2rem,var(--container));margin-inline:auto}.container.narrow{width:min(100% - 2rem,42rem)}.skip-link{position:absolute;left:1rem;top:-3rem;z-index:100;padding:.5rem .75rem;background:var(--ink);color:var(--bg-2);border-radius:6px}.skip-link:focus{top:1rem}.site-header{position:sticky;top:0;z-index:20;backdrop-filter:blur(12px);background:rgba(243,246,248,.82);border-bottom:1px solid var(--line)}.header-inner{display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);min-height:4rem}.brand{font-family:var(--font-display);font-weight:700;font-size:1.05rem;letter-spacing:-.02em;color:var(--ink);text-decoration:none}.brand:hover{color:var(--accent)}.nav{display:flex;gap:1.25rem}.nav a{font-family:var(--font-display);font-size:.95rem;font-weight:500;color:var(--ink-muted);text-decoration:none}.nav a:hover{color:var(--ink)}.hero{padding:clamp(3.5rem,10vw,6.5rem)0 clamp(2.5rem,6vw,4rem)}.hero-inner{max-width:40rem;animation:rise 700ms ease both}.hero-role{margin:0 0 .75rem;font-family:var(--font-display);font-size:.95rem;font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--accent)}.hero-name{margin:0 0 .85rem;font-size:clamp(2.75rem,7vw,4.25rem);font-weight:700;letter-spacing:-.04em;line-height:1.02}.hero-tagline{margin:0;max-width:28rem;font-size:clamp(1.2rem,2.4vw,1.4rem);color:var(--ink-muted);line-height:1.55}.hero-cta{margin-top:1.75rem}.button{display:inline-flex;align-items:center;justify-content:center;padding:.8rem 1.35rem;font-family:var(--font-display);font-size:.95rem;font-weight:600;color:#fff;background:var(--accent);border-radius:10px;text-decoration:none;box-shadow:0 8px 20px rgba(15,110,106,.22)}.button:hover{color:#fff;background:var(--accent-hover);transform:translateY(-1px)}.section{padding:var(--space-5)0}.section-intro{max-width:34rem;margin-bottom:var(--space-4)}.section-intro h1,.section-intro h2{font-size:clamp(1.85rem,3.5vw,2.35rem);margin-bottom:.4em}.section-intro p{color:var(--ink-muted);margin:0}.project-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem}.project-card{min-height:100%;background:var(--bg-2);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);transition:transform 220ms ease,box-shadow 220ms ease,border-color 220ms ease;animation:rise 700ms ease both}.project-card:nth-child(2){animation-delay:80ms}.project-card:nth-child(3){animation-delay:160ms}.project-card:hover{transform:translateY(-3px);border-color:rgba(15,110,106,.28);box-shadow:0 1px rgba(24,33,43,4%),0 18px 40px rgba(24,33,43,.1)}.project-card-link{display:flex;flex-direction:column;height:100%;padding:1.4rem 1.35rem 1.3rem;color:inherit;text-decoration:none}.project-tag{display:inline-block;margin-bottom:1rem;font-family:var(--font-display);font-size:.78rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent)}.project-card-title{margin:0 0 .65rem;font-size:1.35rem}.project-card-summary{flex:1;margin:0 0 1.25rem;color:var(--ink-muted);font-size:1.02rem;line-height:1.55}.project-card-cta{font-family:var(--font-display);font-size:.9rem;font-weight:600;color:var(--accent)}.project-card:hover .project-card-cta{color:var(--accent-hover)}.featured-footer{display:flex;justify-content:flex-end;margin-top:1.35rem}.text-link{font-family:var(--font-display);font-weight:600;font-size:.98rem;text-decoration:none}.text-link:hover{text-decoration:underline}.about{padding-bottom:var(--space-6)}.about-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:clamp(2rem,5vw,4rem);align-items:start;padding:clamp(2rem,4vw,3rem);background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:calc(var(--radius) + 4px);box-shadow:var(--shadow)}.about-copy h2{font-size:clamp(1.85rem,3.5vw,2.35rem)}.about-meta{margin-top:1.25rem;color:var(--ink-soft);font-size:.98rem}.services-heading{margin:0 0 1.25rem;font-size:1rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft)}.services-list{display:grid;gap:1.15rem}.service-item{padding-bottom:1.15rem;border-bottom:1px solid var(--line)}.service-item:last-child{padding-bottom:0;border-bottom:0}.service-item h4{margin:0 0 .35rem;font-size:1.15rem}.service-item p{margin:0;color:var(--ink-muted);font-size:1.02rem;line-height:1.55}.prose{max-width:var(--measure)}.prose>*:first-child{margin-top:0}.prose>*:last-child{margin-bottom:0}.prose p,.prose li{color:var(--ink-muted)}.prose ul,.prose ol{margin:0 0 1em;padding-left:1.25rem;list-style:disc}.prose li+li{margin-top:.35rem}.prose a{font-weight:600}.prose h2{margin-top:2rem;font-size:1.5rem}.prose h3{margin-top:1.5rem;font-size:1.2rem}.page{padding:var(--space-5)0 var(--space-6)}.page-header{margin-bottom:var(--space-4)}.eyebrow{margin:0 0 .75rem;font-family:var(--font-display);font-size:.9rem;font-weight:500}.eyebrow a{text-decoration:none;color:var(--ink-soft)}.eyebrow a:hover{color:var(--accent)}.page-header h1{font-size:clamp(2.2rem,5vw,3.2rem);margin-bottom:.5rem}.page-tag{margin:0 0 .85rem;font-family:var(--font-display);font-size:.85rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--accent)}.page-lede{margin:0;font-size:1.25rem;color:var(--ink-muted);line-height:1.5}.project-links{display:flex;flex-wrap:wrap;gap:1rem;margin-top:2rem;padding-top:1.5rem;border-top:1px solid var(--line)}.project-links a{font-family:var(--font-display);font-weight:600;text-decoration:none}.contact-panel{margin-top:2.25rem;padding:1.5rem 1.4rem;background:rgba(255,255,255,.78);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.contact-panel-heading{margin:0 0 1.1rem;font-size:1.25rem}.contact-details{display:grid;gap:1rem}.contact-details li{display:grid;gap:.2rem}.contact-label{font-family:var(--font-display);font-size:.78rem;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft)}.contact-details a{font-weight:600;text-decoration:none}.contact-social a{font-family:var(--font-display);font-weight:500}.contact-panel-footer{margin:1.35rem 0 0;padding-top:1.15rem;border-top:1px solid var(--line)}.about-resume{width:min(100% - 2rem,52rem)}.about-resume-header{display:grid;grid-template-columns:1.4fr .8fr;gap:clamp(1.5rem,4vw,3rem);align-items:start;padding-bottom:var(--space-4);border-bottom:1px solid var(--line)}.about-resume-role{margin:0 0 .65rem;font-family:var(--font-display);font-size:.9rem;font-weight:500;letter-spacing:.04em;text-transform:uppercase;color:var(--accent)}.about-resume-meta{padding:1.2rem 1.25rem;background:rgba(255,255,255,.78);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.about-resume-meta p{margin:0 0 .45rem;color:var(--ink-muted);font-size:1rem;line-height:1.45}.about-resume-meta p:last-child{margin-bottom:0}.about-resume-name{font-family:var(--font-display);font-weight:600;color:var(--ink)!important}.about-resume-contact-link{margin-top:.85rem!important}.about-resume-body{margin:var(--space-4)0 0}.resume-sections{display:grid;gap:var(--space-5);margin-top:var(--space-5)}.resume-section h2{margin:0 0 1.25rem;font-size:1rem;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft)}.resume-timeline{display:grid;gap:1.75rem;margin:0;padding:0;list-style:none}.resume-entry-head{display:flex;justify-content:space-between;gap:1.25rem;align-items:baseline}.resume-entry h3{margin:0 0 .25rem;font-size:1.25rem}.resume-org{margin:0;color:var(--ink-muted);font-size:1.05rem}.resume-entry-meta{flex-shrink:0;text-align:right}.resume-dates,.resume-place{margin:0;font-family:var(--font-display);font-size:.9rem;color:var(--ink-soft);line-height:1.4}.resume-summary{margin:.75rem 0 0;color:var(--ink-muted)}.resume-highlights{margin:.75rem 0 0;padding-left:1.2rem;list-style:disc}.resume-highlights li{color:var(--ink-muted)}.resume-highlights li+li{margin-top:.35rem}.resume-skills{display:grid;grid-template-columns:repeat(3,1fr);gap:1.25rem}.resume-skill-group{padding:1.15rem 1.2rem;background:rgba(255,255,255,.72);border:1px solid var(--line);border-radius:var(--radius)}.resume-skill-group h3{margin:0 0 .45rem;font-size:1.05rem}.resume-skill-group p{margin:0;color:var(--ink-muted);font-size:1rem;line-height:1.5}.about-more{margin-top:1.25rem}.page-list{padding-top:var(--space-4)}.page-list .section-intro h1{font-size:clamp(2.2rem,5vw,3rem)}.project-grid--list{grid-template-columns:repeat(2,1fr)}.site-footer{border-top:1px solid var(--line);padding:1.5rem 0 2rem;background:rgba(243,246,248,.65)}.footer-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem}.footer-copy{margin:0;font-size:.95rem;color:var(--ink-soft)}.footer-social{display:flex;gap:1.1rem}.footer-social a{font-family:var(--font-display);font-size:.92rem;font-weight:500;color:var(--ink-muted);text-decoration:none}.footer-social a:hover{color:var(--accent)}@keyframes rise{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{animation:none!important;transition:none!important}}@media(max-width:900px){.project-grid,.project-grid--list,.about-grid,.about-resume-header,.resume-skills{grid-template-columns:1fr}.resume-entry-head{flex-direction:column;gap:.5rem}.resume-entry-meta{text-align:left}.featured-footer{justify-content:flex-start}}@media(max-width:600px){body{font-size:1.05rem}.header-inner{min-height:3.5rem}.hero{padding-top:2.75rem}.about-grid{padding:1.35rem}}