:root{--blue:#2878f0;--ink:#101927;--muted:#5e6b7d;--soft:#f4f8fd;--border:#dde7f1;--white:#fff;--max:1190px}*{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth}body{margin:0;color:var(--ink);font:17px/1.48 Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;background:#fff}a{color:inherit;text-decoration:none}.container{width:min(calc(100% - 48px),var(--max));margin:auto}.skip-link{position:fixed;z-index:20;left:12px;top:-50px;padding:9px 12px;background:#fff;color:#000}.skip-link:focus{top:12px}.hero{min-height:414px;color:#f7faff;position:relative;isolation:isolate;background:#0b111a;overflow:hidden}.hero-background{position:absolute;inset:0;z-index:-2;background:linear-gradient(90deg,#0a121d 0%,rgba(10,18,29,.9) 30%,rgba(10,18,29,.23) 72%,rgba(10,18,29,.22)),url('assets/hero.webp') center/cover no-repeat}.hero:after{content:"";position:absolute;z-index:-1;inset:auto 0 0;height:48%;background:linear-gradient(transparent,rgba(4,10,17,.77))}.nav{height:56px;display:flex;align-items:center;gap:26px;position:relative;z-index:4}.brand{font-weight:800;font-size:19px;letter-spacing:-.5px;white-space:nowrap}.brand span{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--blue);margin-left:5px}.nav-links{display:flex;gap:30px;margin:auto;font-size:14px}.nav-links a:first-child,.nav-links a:hover{color:#65a7ff}.button{border:0;background:#2672e4;color:#fff;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;padding:9px 20px;border-radius:4px;font-size:14px;font-weight:700;box-shadow:0 5px 14px rgba(20,104,245,.22);transition:.18s transform,.18s background}.button:hover{transform:translateY(-2px);background:#1665dc}.button-outline{border:1px solid #a8b6c7;background:transparent;box-shadow:none}.nav-cta{padding-inline:18px}.menu-toggle{display:none}.hero-content{display:flex;justify-content:space-between;min-height:300px;padding-top:27px}.hero-copy{width:min(510px,58%)}.eyebrow{margin:0 0 7px;font-size:12px;font-weight:800;letter-spacing:1.35px;color:#3487fa}.hero h1{margin:0;font-size:clamp(40px,4.05vw,61px);line-height:1.03;letter-spacing:-1.9px}.hero h1 em{font-style:normal;color:#3788ff}.lead{max-width:492px;margin:12px 0 16px;font-size:15px;line-height:1.46}.hero-actions{display:flex;gap:13px}.specialisms{display:flex;flex-wrap:wrap;gap:23px;margin:28px 0 0;padding:0;list-style:none;font-size:12px;color:#d6e5fa}.specialisms li::first-letter{color:#55a0ff}.stats{width:187px;align-self:stretch;margin-top:0;padding:25px 28px;background:rgba(17,31,47,.69);border-radius:7px;backdrop-filter:blur(7px);display:grid;grid-template-columns:1fr;align-content:center}.stats strong{font-size:25px;line-height:1.1;margin-top:10px}.stats span{font-size:12px;color:#e5eaf2}.location{position:relative;z-index:1;display:flex;justify-content:flex-end;padding-bottom:18px;font-size:13px}.section{padding:18px 0}.projects-section{background:linear-gradient(110deg,#f8fbff,#edf7ff)}.section-head{display:flex;align-items:end;justify-content:space-between;gap:24px;margin:0 10px 15px}.section h2{font-size:clamp(28px,2.4vw,38px);letter-spacing:-1.1px;line-height:1.12;margin:0 0 3px}.section-head>div>p:last-child,.skills>p:not(.eyebrow),.about>p{margin:0;color:var(--muted);font-size:15px}.text-button{flex:none;border:0;background:none;color:#166bea;font-size:13px;font-weight:800;cursor:pointer;padding:8px}.text-button span{font-size:19px;margin-left:4px}.projects-toggle-wrap{display:flex;justify-content:center;margin-top:8px}.project-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;min-height:598px}.project-card{background:#fff;border:1px solid #e7eef5;border-radius:4px;min-width:0;overflow:hidden;box-shadow:0 3px 10px rgba(38,65,90,.05);transition:.2s transform,.2s box-shadow;cursor:pointer}.project-card:hover{transform:translateY(-4px);box-shadow:0 12px 24px rgba(38,65,90,.14)}.card-title-btn:focus-visible{outline:3px solid var(--blue);outline-offset:2px;border-radius:2px}.project-art{aspect-ratio:16/10;padding:12px;position:relative;overflow:hidden;color:#213343;background:var(--soft) center/cover}.project-art:after{content:"View case study ↗";position:absolute;inset:0;z-index:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:0 16px;background:rgba(11,17,26,.6);color:#fff;font-size:12px;font-weight:800;letter-spacing:.3px;opacity:0;transition:.2s opacity}.project-card:hover .project-art:after,.project-card:focus-visible .project-art:after{opacity:1}.project-art.peach{background:linear-gradient(120deg,#fcf6ec,#e6c6a6)}.project-art.green{color:white;background:linear-gradient(120deg,#0e5335,#82a53c)}.project-art.mint{background:linear-gradient(120deg,#e4f5e6,#9dcf98)}.project-art.slate{color:#fff;background:linear-gradient(120deg,#193648,#617a86)}.project-art.aqua{color:#fff;background:linear-gradient(120deg,#07546a,#26a2aa)}.project-art.blue{color:#fff;background:#234f91}.project-art.purple{color:#fff;background:#563b83}.fake-browser{display:flex;gap:3px;height:9px;border-radius:2px;background:rgba(255,255,255,.7);padding:3px}.fake-browser i{width:3px;height:3px;border-radius:50%;background:#93a1ad}.card-content{padding:9px 10px 11px;position:relative}.card-content>a{position:absolute;right:9px;top:6px;font-size:21px}.card-content h3{font-size:14px;margin:0 0 1px;padding-right:24px}.card-title-btn{display:block;width:100%;border:0;background:none;padding:0;margin:0;font:inherit;font-weight:inherit;color:inherit;text-align:left;cursor:pointer}.card-content p{height:34px;margin:0;font-size:12px;color:#536173;line-height:1.35;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden}.card-content ul{display:flex;flex-wrap:wrap;gap:3px;list-style:none;margin:7px 0 0;padding:0}.card-content li{font-size:10px;background:#e9f2fb;color:#3f5269;border-radius:4px;padding:3px 5px}.project-card[hidden]{display:none}.two-col{display:grid;grid-template-columns:1fr 1fr;gap:0;background:linear-gradient(90deg,#f1f8ff 0 51%,#fff 51%)}.skills,.about{padding:20px 28px}.skill-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:14px;margin-top:24px}.skill-item{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;background:#fff;border:1px solid var(--border);border-radius:10px;padding:18px 8px;text-align:center;transition:.2s border-color,.2s box-shadow,.2s transform}.skill-item:hover{border-color:var(--blue);box-shadow:0 10px 22px rgba(40,120,240,.14);transform:translateY(-2px)}.skill-item span{width:34px;height:34px;flex:none;display:grid;place-items:center;color:var(--blue)}.skill-item span svg{width:100%;height:100%}.skill-item small{font-size:10px;color:#4c5969;line-height:1.25;font-weight:700}.about{padding-left:40px}.about .button{margin-top:14px}.about-github{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;margin-top:18px;border-radius:50%;background:#fff;box-shadow:0 3px 12px #d5e2ef;color:#1c2836;transition:.2s transform,.2s color}.about-github svg{width:19px;height:19px}.about-github:hover{transform:translateY(-3px);color:var(--blue)}.lower{display:grid;grid-template-columns:1fr 1.25fr;gap:14px;padding-top:10px;padding-bottom:10px}.testimonial,.final-cta{border-radius:8px;padding:18px 30px;min-height:141px}.testimonial{background:#f5f9fd;position:relative;padding-left:72px}.quote{position:absolute;left:29px;top:16px;color:#176de1;font-size:49px;font-weight:800;line-height:1}.testimonial p{margin:5px 0 12px;font-size:14px}.testimonial div{display:flex;gap:11px;align-items:center;font-size:12px}.testimonial small{font-size:10px;color:#687381}.testimonial strong{color:#b8860b;font-size:19px;margin-left:auto}.final-cta{color:#fff;background:linear-gradient(105deg,#0b1724 5%,rgba(10,25,39,.85)),url('assets/hero.webp') right 67%/cover;padding-left:32px}.final-cta h2{font-size:25px}.final-cta>p:not(.eyebrow){font-size:13px;max-width:380px;margin:7px 0 10px;color:#d9e2ed}.final-cta-actions{display:flex;align-items:center;gap:18px;flex-wrap:wrap}.final-cta-email{font-size:13px;font-weight:700;color:#bcd3f4;text-decoration:underline;text-underline-offset:3px}.final-cta-email:hover{color:#fff}footer{border-top:1px solid #e6edf4;padding:16px 0}.footer-inner{display:flex;align-items:center;justify-content:space-between;gap:20px}.footer-inner>div:first-child{display:grid}.footer-inner small{font-size:11px;color:#687386}.footer-inner nav{display:flex;gap:22px;font-size:12px}.footer-meta{display:flex;align-items:center;gap:16px}.footer-meta span{font-size:20px;font-weight:800}@media(max-width:1050px){.project-grid{grid-template-columns:repeat(3,1fr);min-height:963px}.stats{margin-right:0}.hero-background{background-position:60% center}}@media(max-width:720px){.container{width:min(calc(100% - 32px),var(--max))}.hero{min-height:620px}.nav{height:58px}.menu-toggle{display:grid;gap:4px;margin-left:auto;background:none;border:0;padding:9px}.menu-toggle i{display:block;width:22px;height:2px;background:#fff}.nav-cta{display:none}.nav-links{display:none}.nav-links.open{display:flex;position:fixed;inset:58px 0 0;background:#0d1724;z-index:3;flex-direction:column;align-items:center;justify-content:center;gap:31px;font-size:19px}.menu-open{overflow:hidden}.hero-background{background:linear-gradient(0deg,#0a111b 6%,rgba(10,18,29,.35) 100%),url('assets/hero.webp') 63% center/auto 100% no-repeat}.hero-content{padding-top:28px;display:block}.hero-copy{width:100%}.hero h1{font-size:clamp(41px,12vw,56px)}.lead{font-size:15px;max-width:430px}.stats{display:flex;width:auto;min-height:0;margin-top:140px;padding:9px 12px;gap:6px;align-items:center;justify-content:space-between}.stats strong{font-size:19px;margin:0}.stats span{font-size:10px;max-width:50px}.location{padding-bottom:14px}.section{padding:25px 0}.section-head{margin:0 0 15px;align-items:start}.section-head>div>p:last-child{max-width:510px}.project-grid{grid-template-columns:1fr;min-height:3059px}.two-col{grid-template-columns:1fr;background:#fff;gap:10px}.skills,.about{padding:20px 0}.skills{background:#f1f8ff;padding-inline:16px}.about{padding-inline:16px}.lower{grid-template-columns:1fr;padding-top:0}.testimonial,.final-cta{padding:20px;min-height:0}.testimonial{padding-left:62px}.footer-inner{align-items:flex-start;flex-direction:column}.footer-inner nav{flex-wrap:wrap;gap:10px 20px}.footer-meta{flex-wrap:wrap}.specialisms{gap:9px 14px}.hero-actions{gap:9px}.button{padding-inline:14px}}@media(max-width:390px){.stats{margin-top:116px}.stats span{max-width:42px}.testimonial strong{font-size:15px}.section-head{flex-direction:column;gap:4px}.text-button{padding-left:0}}
body.modal-open{overflow:hidden}
.project-modal{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:26px;opacity:0;pointer-events:none;transition:opacity .25s ease}
.project-modal.open{opacity:1;pointer-events:auto}
.project-modal-backdrop{position:absolute;inset:0;background:rgba(8,14,22,.62);backdrop-filter:blur(3px)}
.project-modal-panel{position:relative;background:#fff;border-radius:16px;max-width:1040px;width:100%;max-height:88vh;overflow:hidden;box-shadow:0 30px 80px rgba(10,20,35,.35);transform:translateY(18px) scale(.97);transition:.28s transform cubic-bezier(.2,.8,.2,1)}
.project-modal.open .project-modal-panel{transform:translateY(0) scale(1)}
.project-modal-close{position:absolute;top:12px;right:12px;z-index:3;width:34px;height:34px;flex:none;border-radius:50%;border:0;background:#fff;box-shadow:0 4px 14px rgba(20,40,70,.22);font-size:15px;cursor:pointer;display:grid;place-items:center;color:#1c2836}
.project-modal-scroll{display:grid;grid-template-columns:1fr 1fr;align-items:start;max-height:88vh;overflow:auto}
.project-modal-aside{position:sticky;top:0;align-self:start}
.project-modal-media{aspect-ratio:16/10;background:var(--soft);padding-top:34px}
.project-modal-media img{width:100%;height:100%;object-fit:contain;display:block}
.project-modal-body{padding:34px 36px 30px;min-width:0}
.project-modal-side{padding:20px 36px 34px}
.project-modal-subtitle{font-size:27px;font-weight:800;letter-spacing:-.6px;margin:2px 0 16px;line-height:1.15;color:var(--ink)}
.project-modal-badge{display:inline-flex;align-items:center;gap:6px;background:#eaf2fe;color:#1f66d6;font-size:12px;font-weight:700;padding:7px 13px;border-radius:20px;margin-bottom:20px}
.project-modal-desc{font-size:15px;color:var(--muted);line-height:1.55;margin:0 0 6px}
.project-modal-grid{display:grid;grid-template-columns:1fr;gap:22px}
.modal-block h4{display:flex;align-items:center;gap:7px;margin:0 0 11px;font-size:12px;font-weight:800;letter-spacing:.4px;color:#42536b;text-transform:uppercase}
.modal-block ul{margin:0;padding:0;list-style:none;display:grid;gap:10px}
.modal-block.check li{position:relative;padding-left:23px;font-size:14px;color:#33465c;line-height:1.42}
.modal-block.check li:before{content:"✓";position:absolute;left:0;top:0;color:#1f9d55;font-weight:800}
.modal-block.plain li{font-size:14px;color:#33465c;line-height:1.42}
.project-modal-tech{display:flex;flex-wrap:wrap;gap:8px}
.project-modal-tech span{background:#eef4fb;color:#2c4257;font-size:12px;font-weight:700;padding:7px 12px;border-radius:6px}
.project-modal-note{display:flex;gap:14px;margin:0;padding:17px 19px;background:#f3f7fc;border-radius:10px;border:1px solid #e2ecf6}
.project-modal-note b{flex:none;color:#f0a323;font-size:19px}
.project-modal-note p{margin:0;font-size:13px;color:#3c4c60;line-height:1.5}
.project-modal-cta{margin-top:20px}
@media(max-width:820px){.project-modal-scroll{grid-template-columns:1fr}.project-modal-aside{position:static}.project-modal-media{aspect-ratio:16/10;padding-top:0}.project-modal-side{padding:0 36px 34px}.project-modal-note{margin-top:0}}
@media(max-width:720px){.project-modal{padding:0}.project-modal-panel{border-radius:0;max-width:none;max-height:100vh}.project-modal-scroll{max-height:100vh}.project-modal-body{padding:24px 20px 32px}.project-modal-subtitle{font-size:23px}.project-modal-side{padding:0 20px 30px}}
@media(prefers-reduced-motion:reduce){.project-modal,.project-modal-panel{transition:none}}
