:root{--paper:#f2f8fc;--tint:#eaf2f8;--navy:#14324a;--soft:#31536d;--blue:#4ba3d3;--deep:#2c6d9e;--bright:#74c2e8;--line:rgba(20,50,74,.14)}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth;scroll-padding-top:82px}body{overflow-x:hidden;background:var(--paper);color:var(--navy);font:17px/1.6 Inter,sans-serif}h1,h2,h3{font-family:"Space Grotesk",sans-serif;line-height:1.08}a{color:inherit}a:focus-visible,button:focus-visible{outline:3px solid var(--bright);outline-offset:3px}.wrap{width:min(1180px,100%);margin:auto;padding:0 32px}section{padding:92px 0}.tag{display:block;margin-bottom:14px;color:var(--deep);font:500 .72rem "IBM Plex Mono",monospace;letter-spacing:.08em;text-transform:uppercase}.head{max-width:780px;margin-bottom:38px}.head h2{font-size:clamp(2rem,4vw,3rem)}.head p,.copy{margin-top:16px;color:var(--soft)}.btn{display:inline-block;padding:12px 22px;border:1px solid var(--navy);border-radius:3px;text-decoration:none;font-weight:600}.btn.primary{background:var(--navy);color:var(--paper)}header{position:sticky;top:0;z-index:50;border-bottom:1px solid var(--line);background:rgba(251,253,254,.94);backdrop-filter:blur(7px)}header.scrolled{box-shadow:0 8px 24px rgba(10,31,47,.07)}.navbar{display:flex;align-items:center;gap:24px;max-width:1440px;margin:auto;padding:14px 32px}.brand{display:flex;align-items:center;gap:11px;text-decoration:none;font:600 1.16rem "Space Grotesk",sans-serif}.brand img{height:36px;width:auto}.brand small{display:block;color:#808888;font:500 .54rem "IBM Plex Mono",monospace;letter-spacing:.2em}.navbar nav{margin-left:auto}.navbar ul{display:flex;align-items:center;gap:clamp(12px,1.5vw,23px);list-style:none}.navbar nav a{color:var(--soft);font-size:.85rem;font-weight:500;text-decoration:none;white-space:nowrap}.navbar nav a:hover,.navbar nav a[aria-current=page]{color:var(--deep)}.nav-toggle{display:none;width:42px;height:42px;border:1px solid var(--line);background:var(--paper);color:var(--navy)}.nav-toggle svg{width:22px;fill:none;stroke:currentColor;stroke-width:2}.nav-cta{padding:10px 19px;border-radius:3px;background:var(--navy);color:var(--paper);font-size:.86rem;font-weight:600;text-decoration:none}.hero{position:relative;overflow:hidden;padding:108px 0 94px;background:var(--tint);border-bottom:1px solid var(--line)}.hero:after{content:"";position:absolute;right:-170px;bottom:-240px;width:560px;height:560px;border:1px solid rgba(75,163,211,.22);border-radius:50%;box-shadow:0 0 0 75px rgba(75,163,211,.05),0 0 0 150px rgba(75,163,211,.03)}.hero-inner{position:relative;z-index:1}.hero h1{max-width:16ch;font-size:clamp(2.8rem,6vw,5rem)}.hero p{max-width:72ch;margin-top:24px;color:var(--soft);font-size:1.05rem}.actions{display:flex;flex-wrap:wrap;gap:13px;margin-top:30px}.grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.card{min-width:0;padding:26px;border:1px solid var(--line);border-top:3px solid var(--blue);border-radius:6px;background:#e1eef5}.card .meta{display:block;margin-bottom:12px;color:var(--deep);font:500 .68rem "IBM Plex Mono",monospace;letter-spacing:.04em;text-transform:uppercase}.card h3{font-size:1.18rem;overflow-wrap:anywhere}.card p{margin-top:11px;color:var(--soft);font-size:.9rem}.card a{display:inline-block;margin-top:18px;color:var(--deep);font-weight:600;text-decoration:none}.dark{background:var(--navy);color:var(--paper)}.dark .tag{color:var(--bright)}.dark .head p,.dark .copy{color:rgba(242,248,252,.72)}.dark .card{border-color:rgba(242,248,252,.18);background:rgba(242,248,252,.06)}.dark .card p{color:rgba(242,248,252,.72)}.empty{padding:38px;border:1px dashed rgba(44,109,158,.38);border-radius:6px;background:white;text-align:center}.empty strong{display:block;color:var(--deep);font:600 .76rem "IBM Plex Mono",monospace;letter-spacing:.07em;text-transform:uppercase}.empty p{max-width:68ch;margin:13px auto 0;color:var(--soft)}.metric strong{display:block;font:600 clamp(2.2rem,4vw,3.4rem) "Space Grotesk",sans-serif}.timeline{display:grid;gap:14px;border-left:2px solid var(--blue);padding-left:26px}.timeline article{position:relative;padding:22px;border:1px solid var(--line);border-radius:6px;background:white}.timeline article:before{content:"";position:absolute;left:-34px;top:27px;width:14px;height:14px;border:3px solid var(--paper);border-radius:50%;background:var(--deep)}footer{padding:56px 0 28px;background:var(--navy);color:rgba(242,248,252,.7)}.footer-grid{display:grid;grid-template-columns:1.25fr 1fr 1fr;gap:36px;padding-bottom:35px;border-bottom:1px solid rgba(255,255,255,.12)}footer h3{margin-bottom:13px;color:white}footer h4{margin-bottom:13px;color:rgba(255,255,255,.5);font:500 .72rem "IBM Plex Mono",monospace;text-transform:uppercase}footer ul{display:grid;gap:8px;list-style:none}footer a{text-decoration:none}.footer-bottom{display:flex;justify-content:space-between;gap:12px;padding-top:22px;font:400 .76rem "IBM Plex Mono",monospace}.reveal{opacity:1}.motion-ready .reveal{transition:opacity .75s cubic-bezier(.22,1,.36,1),transform .75s cubic-bezier(.22,1,.36,1);transition-delay:var(--delay,0ms)}.motion-ready .reveal:not(.is-visible){opacity:0;transform:translateY(22px)}@media(max-width:1080px){.nav-toggle{display:grid;place-items:center;margin-left:auto}.navbar nav{display:none;position:absolute;top:65px;right:20px;left:20px;max-height:calc(100vh - 82px);overflow:auto;border:1px solid var(--line);background:var(--paper);box-shadow:0 14px 30px rgba(20,50,74,.12)}.navbar nav.is-open{display:block}.navbar ul{flex-direction:column;align-items:stretch;gap:0}.navbar nav a{padding:12px 18px}.grid{grid-template-columns:repeat(2,1fr)}.footer-grid{grid-template-columns:1fr}}@media(max-width:600px){.wrap,.navbar{padding-left:20px;padding-right:20px}section{padding:70px 0}.hero{padding:80px 0 70px}.nav-cta{display:inline-block;padding:9px 12px;font-size:.78rem}.grid{grid-template-columns:1fr}.actions{flex-direction:column}.actions .btn{text-align:center}.footer-bottom{flex-direction:column}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}.motion-ready .reveal,.motion-ready .reveal:not(.is-visible){opacity:1!important;transform:none!important}}
.project-gallery{display:grid;gap:16px;margin-top:32px}.project-gallery__photo{position:relative;min-width:0;overflow:hidden;border:1px solid var(--line);border-radius:6px;background:var(--navy)}.project-gallery__photo img{display:block;width:100%;height:100%;object-fit:cover}.project-gallery--two{grid-template-columns:minmax(0,1.45fr) minmax(240px,.75fr);height:clamp(400px,42vw,560px)}.project-gallery--two .project-gallery__photo:nth-child(2) img{object-position:center 58%}.project-gallery--three{grid-template-columns:repeat(3,minmax(0,1fr))}.project-gallery--three .project-gallery__photo{aspect-ratio:2/3}.dark .project-gallery__photo{border-color:rgba(242,248,252,.18)}@media(max-width:768px){.project-gallery--two,.project-gallery--three{grid-template-columns:1fr;height:auto}.project-gallery--two .project-gallery__photo:first-child{aspect-ratio:3/2}.project-gallery--two .project-gallery__photo:nth-child(2),.project-gallery--three .project-gallery__photo{aspect-ratio:3/4}}

/* Larger, consistent site navigation. */
html{scroll-padding-top:104px}
.navbar{gap:28px;padding:18px 36px}
.brand{gap:14px;font-size:1.35rem}
.brand img{width:auto;height:54px;flex:0 0 auto}
.brand small{font-size:.6rem}
.navbar ul{gap:clamp(14px,1.55vw,25px)}
.navbar nav a{font-size:.98rem}
.nav-toggle{width:48px;height:48px}
.nav-toggle svg{width:25px}
.nav-cta{padding:12px 24px;font-size:.96rem}

