@font-face{font-family:DM;src:url('/assets/dm-sans.woff2') format('woff2');font-weight:100 1000;font-style:normal;font-display:swap}
/* 🔴 Space Grotesk is our display face and home-v2.css sets --display to it, but
   nothing ever SHIPPED it: no @font-face, no Google Fonts link. It looked right
   to us only because it is installed on our Macs — every visitor without it got
   generic sans-serif on the big display headings. Self-hosted (SIL OFL), variable
   300-700, subset to Latin, same treatment as DM Sans. Found at go-live, 15 Oct. */
@font-face{font-family:'Space Grotesk';src:url('/assets/space-grotesk.woff2') format('woff2');font-weight:300 700;font-style:normal;font-display:swap}:root{--bg:#101312;--fg:#f6f7f3;--mint:#bdf4d1;--muted:#a7afa9;--line:#ffffff20;--paper:#f6f7f3;font-family:DM,Arial,sans-serif;color:var(--fg);background:var(--bg);font-synthesis:none}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0}a{color:inherit;text-decoration:none}button,input,select{font:inherit}button{cursor:pointer}button,a,input,select{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible{outline:2px solid var(--mint);outline-offset:6px}.skip{position:fixed;top:-60px;left:16px;z-index:200;background:var(--paper);color:var(--bg);padding:16px}.skip:focus{top:16px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.wrap{width:min(1280px,88%);margin-inline:auto}.narrow{max-width:760px}.nav{height:102px;display:flex;align-items:center;justify-content:space-between;padding:0 5%;gap:28px;border-bottom:1px solid var(--line);position:relative;z-index:20;background:var(--bg)}.wordmark{font-size:29px;font-weight:600;letter-spacing:-1.6px}.wordmark span{color:var(--mint)}.nav nav{display:flex;gap:35px;align-items:center;font-size:14px}.nav nav>a:not(.nav-cta){color:#c6cec8;transition:color .2s}.nav nav>a:hover,.nav nav>a[aria-current]{color:var(--mint)}.nav-cta{background:var(--fg);color:var(--bg);padding:13px 22px;border-radius:30px}.menu-toggle{display:none;color:var(--fg);background:none;border:1px solid var(--line);padding:9px 15px;border-radius:30px}.button{display:inline-flex;justify-content:center;align-items:center;min-height:52px;padding:16px 27px;border:1px solid transparent;border-radius:50px;font-size:15px;font-weight:600;transition:background .2s,transform .2s}.button:hover{transform:translateY(-2px)}.light{background:var(--fg);color:var(--bg)}.light:hover{background:var(--mint)}.text-link{font-size:15px;display:inline-block;border-bottom:1px solid currentColor;padding-bottom:5px}.kicker{font-size:12px;letter-spacing:1.5px;text-transform:uppercase;margin:0 0 23px;font-weight:500}.hero{height:calc(100svh - 102px);min-height:650px;max-height:1050px;position:relative;overflow:hidden;background:#101312}.hero video,.hero-poster,.hero-poster img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}.hero-poster{z-index:0}.hero video{z-index:1}.hero-shade{position:absolute;inset:0;z-index:2;background:linear-gradient(90deg,#101312d9 0%,#10131255 45%,transparent 80%),linear-gradient(0deg,#101312aa,transparent 70%)}.hero-content{position:absolute;z-index:3;left:6%;top:50%;transform:translateY(-42%);max-width:88%}.hero h1{font-size:clamp(56px,6.55vw,103px);line-height:1.01;letter-spacing:-.065em;font-weight:500;margin:0 0 24px}.hero h1 span{color:var(--mint)}.hero-content>p:not(.kicker){font-size:18px;color:#e2e8e2;max-width:340px;line-height:1.5;margin-bottom:30px}.hero-bottom{position:absolute;bottom:30px;left:6%;right:6%;display:flex;align-items:center;justify-content:space-between;z-index:4;font-size:12px;letter-spacing:.2px;color:#bdc8c0}.hero-bottom button{color:var(--fg);border:1px solid #ffffff50;background:#10131280;backdrop-filter:blur(12px);border-radius:30px;padding:10px 18px;font-size:13px}.section{padding-block:108px}.section-head{display:flex;align-items:end;justify-content:space-between;gap:32px;margin-bottom:44px}h1,h2,h3,p{overflow-wrap:break-word}h2{font-size:clamp(36px,4.3vw,64px);font-weight:500;line-height:1.07;letter-spacing:-.055em;margin:0 0 24px}h3{font-weight:500}.section-head h2{margin:0}.project-grid{display:grid;grid-template-columns:1.12fr 1fr;gap:35px}.project.wide{grid-row:span 2}.project-image{height:290px;overflow:hidden;padding:30px 12% 0;background:#dfe1d5;position:relative}.project-image.eirconnect{height:647px;padding:65px 9% 0;background:#b7c7bc}.project-image.aintree{height:205px;background:#dedb62;padding:18px 19% 0}.project-image img{width:100%;display:block;box-shadow:0 12px 45px #0004;transition:transform .6s}.project:hover img{transform:translateY(-14px)}.project-caption{display:flex;justify-content:space-between;align-items:center;gap:18px;padding-top:18px}.project-caption h3{font-size:19px;letter-spacing:-.5px;margin:0}.project-caption span{font-size:12px;color:var(--muted)}.mint-section{background:var(--mint);color:#102319;padding-block:100px}.feature-grid{display:grid;grid-template-columns:.95fr 1.05fr;gap:10%;align-items:center}.feature-grid>div>p:not(.kicker){font-size:18px;line-height:1.6}.feature-grid .text-link{margin-top:20px}.demo-console{background:#f8faf6;padding:26px;border-radius:12px;box-shadow:0 30px 70px #204c2820;color:#1b3021}.demo-bar{display:flex;justify-content:space-between;align-items:center;gap:15px;padding-bottom:20px;font-size:14px;border-bottom:1px solid #26382922}.demo-bar small{font-size:11px;color:#66766b}.demo-tabs{display:flex;gap:8px;padding-top:18px}.demo-tabs button{background:transparent;border:1px solid #10231933;border-radius:30px;padding:9px 18px;font-size:13px;color:#102319}.demo-tabs button[aria-selected=true]{background:#102319;color:var(--mint);border-color:#102319}.cap-content{min-height:210px;padding-top:26px}.chat{font-size:16px;background:#e9ede6;padding:16px 18px;border-radius:12px;line-height:1.45;max-width:88%;margin:0 0 12px}.customer{background:#d7f1df;margin-left:auto}.demo-label{font-size:12px;color:#58675d;line-height:1.5}.sample-price{font-size:62px;letter-spacing:-3px;margin:5px 0 18px}.sample-options{display:flex;flex-wrap:wrap;gap:10px}.sample-options button{font-size:14px;border:1px solid #10231944;background:white;border-radius:7px;padding:12px;color:#102319}.sample-options button[aria-pressed=true]{background:#bdf4d1;border-color:#102319}.service-pair{display:grid;grid-template-columns:1fr 1fr;gap:50px}.service-pair>a{padding:45px 0 10px;border-top:1px solid var(--line)}.service-pair h3{font-size:clamp(30px,3.3vw,49px);letter-spacing:-2px;line-height:1.1;margin:25px 0}.service-pair p{font-size:17px;color:var(--muted);line-height:1.6}.service-pair .text-link{margin-top:22px}.price-teaser{border-block:1px solid var(--line);padding-block:70px;display:grid;grid-template-columns:1fr 1fr;gap:50px;align-items:center}.price-teaser p:not(.kicker){font-size:15px;color:var(--muted)}.price-teaser .teaser-price{font-size:68px!important;letter-spacing:-4px;color:var(--fg)!important;margin:0}.teaser-price span{font-size:19px;letter-spacing:-.5px;color:var(--muted)}.price-teaser .text-link{margin-top:15px}.proof{text-align:center;max-width:940px}.proof blockquote{font-size:clamp(30px,4vw,58px);line-height:1.18;letter-spacing:-2px;margin:35px 0}.proof>p:not(.kicker){font-size:14px;color:var(--muted)}.founder-strip{display:flex;justify-content:center;align-items:center;margin-top:45px}.founder-strip img{width:47px;height:47px;object-fit:cover;border-radius:50%;border:2px solid var(--bg)}.founder-strip img+img{margin-left:-10px}.founder-strip a{font-size:14px;margin-left:16px}.closing{padding-block:100px;border-top:1px solid var(--line)}.closing h2{font-size:clamp(45px,7vw,100px);margin-bottom:35px}.page-head{padding-top:95px;padding-bottom:50px}.page-head h1{font-size:clamp(49px,6.7vw,96px);line-height:1.03;letter-spacing:-.065em;font-weight:500;max-width:1000px;margin:0 0 26px}.lede{font-size:21px;line-height:1.6;color:var(--muted);max-width:670px;margin:0 0 30px}.page-head .button{margin-top:10px}.pricing-page{background:#080909;--bg:#080909}.pricing-shell{max-width:700px;margin:auto;text-align:center;padding:85px 0 60px}.pricing-shell h1{font-size:clamp(47px,5.2vw,72px);line-height:1.04;letter-spacing:-3.5px;font-weight:600;margin:0 0 22px}.pricing-shell .kicker{color:var(--mint)}.pricing-intro{font-size:18px;color:#a9adab;margin:0 0 42px}.plan-toggle{display:grid;grid-template-columns:1fr 1fr;background:#191b1a;padding:5px;border-radius:50px}.plan-toggle button{background:transparent;border:none;border-radius:40px;color:#919693;font-size:17px;font-weight:600;padding:15px 20px}.plan-toggle button[aria-selected=true]{background:#080909;color:#f6f7f3;box-shadow:0 1px 8px #0004}.plan-price{font-size:65px;line-height:1;letter-spacing:-3px;margin:35px 0 13px;font-weight:500}.plan-price>span+span{font-size:19px;letter-spacing:0;margin-left:3px;color:#9da39f}#plan-description{font-size:16px;color:#bdc4be;min-height:25px;margin:0 0 30px}.comparison{border:1px solid #3b413c;border-radius:24px;padding:14px 27px 19px;text-align:left}.comparison table{border-collapse:collapse;width:100%;font-size:17px}.comparison th{text-align:left;font-weight:400}.comparison thead th{font-size:14px;color:#9ca49e;padding:19px 0 20px;font-weight:500}.comparison th:not(:first-child),.comparison td{text-align:center;width:110px}.comparison tbody th,.comparison td{padding:15px 0}.comparison tbody th{padding-right:15px;font-size:16px}.comparison td{color:#89918b;font-size:14px}.comparison .selected-column{color:var(--mint)}.comparison .check{font-size:27px;line-height:1}.comparison .optional{font-size:12px}.plan-action{display:flex;background:var(--fg);color:#080909;font-size:19px;padding:19px;margin-top:35px;min-height:63px}.plan-action:hover{background:var(--mint)}.plan-terms{font-size:14px;color:#ecefed;line-height:1.5;margin:20px 0 8px}.plan-extra{color:#909a93;font-size:13px;line-height:1.6;min-height:22px;margin:0}.store-pricing{font-size:13px;line-height:1.7;color:#949f98;margin:30px 0 0}.store-pricing a{color:#e3eae5;text-decoration:underline;text-underline-offset:4px}.pricing-faq{padding-top:50px}.pricing-faq h2{font-size:37px}.faq{margin-top:35px}.faq details{border-top:1px solid var(--line)}.faq details:last-child{border-bottom:1px solid var(--line)}.faq summary{list-style:none;padding:25px 36px 25px 0;cursor:pointer;font-size:17px;position:relative}.faq summary::-webkit-details-marker{display:none}.faq summary:after{content:'+';position:absolute;right:3px;top:23px;font-size:22px;color:var(--mint)}.faq details[open] summary:after{content:'−'}.faq p{color:var(--muted);font-size:16px;line-height:1.75;margin:0 25px 25px 0}.client-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:25px}.client-grid>a{display:flex;flex-direction:column;padding:35px 28px;border:1px solid var(--line);min-height:220px;background:#171c18}.client-grid img{object-fit:contain;object-position:left center;width:160px;height:68px;margin-bottom:30px}.client-grid h3{font-size:17px;margin:0 0 10px}.client-grid span{color:var(--muted);font-size:13px}.client-grid .client-type{font-size:28px;letter-spacing:-1px;color:var(--fg);margin-bottom:35px;height:68px}.project-grid+.section-head{margin-top:100px}.founder-grid{display:grid;grid-template-columns:1fr 1fr;gap:10%;padding-top:45px}.founder-grid img{width:100%;height:380px;object-fit:cover;object-position:50% 30%;border-radius:2px;filter:saturate(.65);margin-bottom:35px}.founder-grid h2{font-size:39px}.founder-grid article>p:not(.kicker){font-size:17px;line-height:1.7;color:var(--muted);max-width:450px}.founder-grid a{font-size:15px;text-decoration:underline;text-underline-offset:5px}.benefit-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:55px 40px}.benefit-grid article{border-top:1px solid var(--line);padding-top:28px}.benefit-grid h2,.benefit-grid h3{font-size:27px;line-height:1.15;letter-spacing:-1px;margin:0 0 18px}.benefit-grid p{font-size:16px;line-height:1.7;color:var(--muted);margin:0}.inline-action{padding-block:55px;border-block:1px solid var(--line);display:flex;justify-content:space-between;gap:25px;font-size:20px}.store-callout{border-top:1px solid var(--line)}.store-callout p:not(.kicker){color:var(--muted);font-size:18px}.store-callout .button{margin-top:20px}.contact-grid{display:grid;grid-template-columns:1.1fr 1fr;gap:10%;padding-top:40px}.contact-main{padding:45px;background:#191e1a;border-radius:12px}.contact-main h2{font-size:43px}.contact-main>p:not(.kicker){font-size:17px;line-height:1.7;color:var(--muted)}.contact-main .button{margin-top:15px}.contact-main .small{font-size:12px!important}.contact-main .text-link{line-height:1.7;font-size:14px;margin-top:20px}.contact-details a{display:block;padding:30px 0;border-top:1px solid var(--line)}.contact-details span{display:block;font-size:13px;color:var(--muted);margin-bottom:13px}.contact-details strong{font-size:24px;font-weight:400;letter-spacing:-.7px}.contact-details p{color:var(--muted);font-size:16px;line-height:1.7;margin-top:25px}.chosen-plan{color:var(--mint)!important}.process-list{padding-top:20px}.process-list article{display:grid;grid-template-columns:1fr 3fr;gap:40px;padding-block:50px;border-top:1px solid var(--line)}.process-list article>span{font-size:18px;color:var(--mint)}.process-list h2{font-size:38px}.process-list p{font-size:18px;color:var(--muted);line-height:1.7;max-width:650px}.demo-page{display:grid;grid-template-columns:1.1fr 1fr;gap:10%;padding-top:30px}.quote-app{background:var(--paper);color:#101312;padding:40px;border-radius:15px}.quote-app h2{font-size:36px}.quote-app fieldset{border:0;padding:0;margin:30px 0}.quote-app legend{font-size:14px;margin-bottom:12px}.quote-app fieldset label{display:flex;align-items:center;gap:10px;font-size:15px;padding:15px 0;border-bottom:1px solid #10131222;cursor:pointer}.quote-app input{width:18px;height:18px;accent-color:#145b35}.quote-app label span{margin-left:auto;font-size:13px;color:#5c6a60}.select-label{font-size:14px;display:block}.select-label select{display:block;width:100%;margin-top:10px;background:white;border:1px solid #b6c2b9;padding:14px;border-radius:7px;color:#101312}.quote-total{display:flex;justify-content:space-between;align-items:center;margin:30px 0;font-size:14px}.quote-total output{font-size:48px;letter-spacing:-2px}.small{font-size:13px;line-height:1.6;color:var(--muted)}.quote-app .small{color:#59645b}.demo-aside{padding-top:35px}.demo-aside p:not(.kicker){font-size:18px;line-height:1.7;color:var(--muted)}.demo-aside .button{margin-top:20px}.audit-action{margin-top:60px}.article-list{display:grid;grid-template-columns:repeat(2,1fr);gap:0 65px;padding-bottom:100px}.article-list>a{padding-block:40px;border-top:1px solid var(--line)}.article-list h2{font-size:34px;line-height:1.2;letter-spacing:-1.1px}.article-list .text-link{margin-top:10px}.prose{max-width:760px;padding-top:30px;padding-bottom:90px;line-height:1.85;font-size:18px;color:#c4cdc6}.prose h2{font-size:34px;margin-top:65px;color:var(--fg);letter-spacing:-1px}.prose h3{font-size:24px;color:var(--fg);margin-top:35px}.prose p{margin-block:22px}.prose a{text-decoration:underline;text-underline-offset:5px;color:var(--mint)}.prose strong{color:var(--fg);font-weight:500}.prose blockquote{border-left:2px solid var(--mint);margin:35px 0;padding-left:28px}.prose ul,.prose ol{padding-left:25px}.prose li{margin:12px 0}.article-page .page-head{max-width:1000px}.article-page .page-head h1{font-size:clamp(44px,5.5vw,78px)}.article-back{padding-bottom:100px}footer{border-top:1px solid var(--line);padding-top:60px;padding-bottom:25px}.footer-top{display:grid;grid-template-columns:1.5fr 1.1fr 1fr;gap:50px;padding-bottom:60px}.footer-top p{font-size:17px;line-height:1.5;color:var(--muted);margin:25px 0}.footer-top>div>a:not(.wordmark){font-size:14px}.footer-links{display:grid;grid-template-columns:1fr;gap:13px}.footer-links a{font-size:13px;color:#b6c1b9}.footer-links a:hover{color:var(--mint)}.footer-bottom{border-top:1px solid var(--line);padding-top:24px;display:flex;gap:25px;font-size:12px;color:#98a59b;align-items:center;flex-wrap:wrap}.footer-bottom span{margin-right:auto}.footer-bottom button{border:0;padding:0;background:none;color:inherit;font-size:12px}.legal-address{font-size:11px;line-height:1.6;margin-top:15px;color:#86938a}dialog{background:#1a211c;color:var(--fg);border:1px solid #8d9c9044;border-radius:20px;padding:40px;max-width:min(520px,90%)}dialog::backdrop{background:#000b;backdrop-filter:blur(5px)}dialog h2{font-size:35px}dialog p{font-size:16px;line-height:1.7;color:var(--muted)}dialog a{text-decoration:underline;display:block;margin-bottom:24px}dialog .button{background:var(--fg);color:var(--bg)}
@media(min-width:1500px){.hero{max-height:900px}.hero-content{left:max(6%,calc((100% - 1320px)/2))}}
@media(max-width:1000px){.nav nav{gap:22px}.hero{min-height:640px}.hero h1{font-size:70px}.project-caption{display:block}.project-caption span{display:block;margin-top:5px}.project-image.eirconnect{height:600px}.project-image{height:260px}.project-image.aintree{height:180px}.feature-grid{gap:5%}.demo-console{padding:22px}.benefit-grid{grid-template-columns:repeat(2,1fr)}.pricing-shell{width:82%}.contact-grid,.demo-page{gap:5%}.contact-main{padding:30px}.contact-details strong{font-size:20px}.client-grid{grid-template-columns:repeat(2,1fr)}.founder-grid img{height:320px}}
@media(max-width:760px){.wrap{width:88%}.nav{height:82px;padding-inline:6%}.wordmark{font-size:25px}.menu-toggle{display:block;font-size:13px}.nav nav{display:none;position:absolute;top:81px;left:0;right:0;background:#101312;padding:25px 6% 35px;flex-direction:column;align-items:stretch;border-bottom:1px solid var(--line);gap:0}.nav nav.open{display:flex}.nav nav a{padding:17px 0;font-size:20px}.nav nav .nav-cta{text-align:center;margin-top:15px;padding:15px}.hero{min-height:680px;height:calc(94svh - 82px);max-height:820px}.hero h1{font-size:clamp(46px,8.5vw,66px)}.hero-content{top:auto;bottom:100px;transform:none}.hero-content .kicker{font-size:10px;letter-spacing:1.25px;max-width:270px;line-height:1.5}.hero-content>p:not(.kicker){font-size:16px;max-width:280px;line-height:1.55}.hero-shade{background:linear-gradient(0deg,#101312f0 0%,#101312bb 35%,#10131211 90%)}.hero-bottom{font-size:10px;bottom:24px}.hero-bottom button{font-size:12px;padding:9px 14px}.section{padding-block:70px}.section-head{align-items:start;flex-direction:column;gap:24px}.section-head h2{font-size:42px}.project-grid{grid-template-columns:1fr;gap:40px}.project.wide{grid-row:auto}.project-image.eirconnect{height:440px;padding:36px 10% 0}.project-image,.project-image.aintree{height:370px;padding:30px 12% 0}.project-caption{display:flex}.project-caption h3{font-size:18px}.project-caption span{font-size:11px}.mint-section{padding-block:65px}.feature-grid{grid-template-columns:1fr;gap:35px}.feature-grid h2{font-size:47px}.feature-grid>div>p:not(.kicker){font-size:17px}.demo-console{padding:24px}.service-pair{grid-template-columns:1fr;gap:35px}.service-pair>a{padding-top:30px}.service-pair h3{font-size:39px}.price-teaser{grid-template-columns:1fr;gap:20px;padding-block:55px}.price-teaser h2{font-size:44px}.price-teaser .teaser-price{font-size:59px!important}.proof blockquote{font-size:37px;letter-spacing:-1.3px}.founder-strip a{font-size:12px}.closing{padding-block:75px}.closing h2{font-size:57px}.page-head{padding-top:65px;padding-bottom:20px}.page-head h1{font-size:54px}.lede{font-size:18px}.pricing-shell{width:88%;padding:60px 0 45px}.pricing-shell h1{font-size:55px;letter-spacing:-2.5px}.pricing-shell .kicker{font-size:10px;letter-spacing:1.2px}.pricing-intro{font-size:16px;margin-bottom:30px}.plan-toggle button{font-size:15px;padding:13px 16px}.plan-price{font-size:58px;margin-top:30px}.plan-price>span+span{font-size:16px}#plan-description{font-size:14px;line-height:1.55;min-height:43px;margin-bottom:20px}.comparison{padding:8px 17px 15px;border-radius:22px}.comparison th:not(:first-child),.comparison td{width:69px}.comparison thead th{font-size:12px;padding-bottom:18px}.comparison tbody th{font-size:14px;padding-right:12px;line-height:1.45}.comparison td{font-size:12px}.comparison tbody th,.comparison td{padding-block:14px}.comparison .check{font-size:25px}.comparison .optional{font-size:10px}.plan-action{font-size:16px;margin-top:28px;padding:18px;min-height:58px}.plan-terms{font-size:12px;line-height:1.6;margin-top:18px}.plan-extra{font-size:12px}.store-pricing{font-size:12px}.pricing-faq{padding-top:20px}.pricing-faq h2{font-size:33px}.faq summary{font-size:16px}.faq p{font-size:15px}.client-grid{gap:16px}.client-grid>a{padding:25px 20px;min-height:210px}.client-grid img{width:100%;height:65px}.client-grid h3{font-size:15px}.client-grid .client-type{font-size:23px}.founder-grid{grid-template-columns:1fr;gap:55px;padding-top:35px}.founder-grid img{height:auto;max-height:420px;aspect-ratio:1.15;object-position:50% 30%}.founder-grid h2{font-size:37px}.benefit-grid{grid-template-columns:1fr;gap:35px}.benefit-grid h2,.benefit-grid h3{font-size:29px}.inline-action{flex-direction:column;align-items:start;font-size:20px}.store-callout h2{font-size:40px}.contact-grid,.demo-page{grid-template-columns:1fr;gap:45px}.contact-main{padding:30px 25px}.contact-main h2{font-size:36px}.contact-main>p:not(.kicker){font-size:16px}.contact-details strong{font-size:24px}.process-list article{grid-template-columns:35px 1fr;gap:20px;padding-block:35px}.process-list h2{font-size:32px}.process-list p{font-size:16px}.quote-app{padding:30px 23px}.quote-app h2{font-size:33px}.quote-app fieldset label{font-size:13px}.quote-app label span{font-size:12px}.demo-aside{padding-top:0}.article-list{grid-template-columns:1fr;padding-top:30px;padding-bottom:70px}.article-list h2{font-size:32px}.prose{font-size:17px;padding-top:0}.prose h2{font-size:30px;margin-top:45px}.article-page .page-head h1{font-size:46px}.footer-top{grid-template-columns:1fr 1fr;gap:45px 25px}.footer-top>div:first-child{grid-column:span 2}.footer-links{gap:14px}.footer-links a{font-size:12px}.footer-bottom{gap:18px;font-size:11px}.footer-bottom span{width:100%}.footer-bottom button{font-size:11px}.legal-address{font-size:10px}.kicker{font-size:11px}h2{font-size:42px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*:not(.stream-card),*:before,*:after{transition:none!important;animation:none!important}.project:hover img{transform:none}.button:hover{transform:none}}

/* Real-build gallery. Native horizontal scrolling is the baseline. */
.scroll-proof{padding-block:64px 35px;overflow:clip;background:#101312}.proof-heading{display:flex;align-items:end;justify-content:space-between;gap:30px;margin-bottom:25px}.proof-heading h2{font-size:clamp(35px,3.7vw,56px);margin:0}.proof-heading .kicker{margin-bottom:15px;color:#a5b4a9}.proof-total{display:flex;align-items:center;gap:15px;flex-shrink:0}.proof-total strong{font-size:59px;font-weight:500;line-height:1;letter-spacing:-4px;color:var(--mint)}.proof-total span{font-size:13px;line-height:1.5;color:var(--muted)}.proof-rail{display:flex;gap:24px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x mandatory;scrollbar-width:none;padding:10px max(6vw,calc((100vw - 820px)/2)) 18px;align-items:center}.proof-rail::-webkit-scrollbar{display:none}.proof-card{flex:0 0 min(70vw,820px);scroll-snap-align:center;min-width:0;transform:scale(.94);opacity:.5;transition:transform .35s,opacity .35s}.proof-card.is-active{transform:scale(1);opacity:1}.proof-visit{display:block;border-radius:12px;overflow:hidden;background:#1c241e;border:1px solid #ffffff20}.proof-browser{display:flex;justify-content:space-between;gap:20px;font-size:11px;color:#aebbb1;padding:12px 18px;border-bottom:1px solid #ffffff16}.proof-browser>span:last-child{color:var(--mint)}.proof-image{height:clamp(210px,38vh,410px);background:#27332b;overflow:hidden}.proof-image img{width:100%;height:100%;object-fit:cover;object-position:top;display:block}.proof-caption{display:flex;align-items:center;justify-content:space-between;gap:24px;padding:17px 22px}.proof-caption h3{margin:0;font-size:22px;letter-spacing:-.7px}.proof-caption p{font-size:12px;color:var(--muted);margin:4px 0 0}.proof-view{font-size:12px;border-bottom:1px solid #c3d1c7;padding-bottom:4px}.proof-controls{display:flex;align-items:center;justify-content:space-between;gap:22px;margin-top:12px}.proof-stepper{display:flex;align-items:center;gap:14px;font-size:12px;white-space:nowrap}.proof-stepper button{background:none;border:1px solid #ffffff28;color:var(--fg);border-radius:30px;padding:10px 14px;font-size:12px}.proof-stepper button:disabled{opacity:.35;cursor:default}.proof-stepper span{font-variant-numeric:tabular-nums;color:var(--muted)}.proof-thumbnails{display:flex;gap:9px;overflow-x:auto;padding:5px;scrollbar-width:none}.proof-thumbnails button{flex-shrink:0;width:59px;height:43px;padding:0;background:none;border:2px solid transparent;border-radius:6px;opacity:.45;overflow:hidden;transition:opacity .2s,border-color .2s}.proof-thumbnails button[aria-pressed=true]{border-color:var(--mint);opacity:1}.proof-thumbnails img{width:100%;height:100%;object-fit:cover;object-position:top;display:block}.proof-controls>.text-link{font-size:13px;white-space:nowrap}.proof-progress{height:2px;background:#ffffff12;margin-top:20px}.proof-progress span{height:100%;display:block;background:var(--mint);width:0;transform-origin:left;transition:width .12s linear}.proof-hint{text-align:center;font-size:11px;color:#8d9b91;margin:15px 0 0}.mobile-hint{display:none}.scroll-proof.is-pinned{height:330vh;padding:0;overflow:visible}.is-pinned .proof-sticky{position:sticky;top:0;height:100svh;padding:32px 0 20px;display:flex;flex-direction:column;justify-content:center;overflow:hidden}.is-pinned .proof-rail{overflow-x:hidden;scroll-snap-type:none;flex-shrink:0}.is-pinned .proof-controls{flex-shrink:0}.is-pinned .proof-progress{flex-shrink:0}
@media(max-width:1050px){.proof-controls{flex-wrap:wrap}.proof-thumbnails{order:3;justify-content:center;width:100%}.proof-image{height:33vh}.proof-heading h2{font-size:38px}.proof-total strong{font-size:49px}.is-pinned .proof-sticky{padding-block:20px}}
@media(max-width:760px){.scroll-proof{padding-block:55px 32px}.proof-heading{align-items:start;gap:18px}.proof-heading h2{font-size:36px;max-width:240px}.proof-total{flex-direction:column;align-items:start;gap:5px}.proof-total strong{font-size:44px}.proof-total span{font-size:10px}.proof-heading .kicker{font-size:10px;letter-spacing:1px}.proof-rail{padding-inline:6vw;gap:12px}.proof-card{flex-basis:88vw;transform:scale(.97)}.proof-image{height:280px}.proof-browser{font-size:10px;padding:11px 13px}.proof-caption{padding:16px}.proof-caption h3{font-size:20px}.proof-caption p{font-size:11px}.proof-view{font-size:11px}.proof-controls{margin-top:8px;gap:15px}.proof-stepper{gap:9px;font-size:11px}.proof-stepper button{padding:9px 12px;font-size:11px}.proof-controls>.text-link{font-size:12px}.proof-thumbnails{justify-content:start;gap:8px}.proof-thumbnails button{width:48px;height:37px}.desktop-hint{display:none}.mobile-hint{display:inline}}
@media(prefers-reduced-motion:reduce){.proof-card{transform:none;opacity:1}.proof-progress span{transition:none}}
/* Real client captures travel along two perspective rails. */
.stream-hero{position:relative;isolation:isolate;container-type:inline-size;height:calc(100svh - 102px);min-height:650px;max-height:1050px;overflow:hidden;background:#101312}.stream-perspective{position:absolute;inset:0;perspective:30cqw;perspective-origin:50% 55%;pointer-events:none}.stream-space{position:absolute;inset:0;transform-style:preserve-3d}.stream-card{position:absolute;left:50%;top:55%;width:18cqw;height:25cqw;margin-left:-9cqw;margin-top:-12.5cqw;border-radius:.4cqw;overflow:hidden;background:#27332b;backface-visibility:hidden;animation-duration:26s;animation-timing-function:linear;animation-iteration-count:infinite;box-shadow:0 0 0 1px #ffffff30}.stream-left{animation-name:stream-left}.stream-right{animation-name:stream-right}.stream-card img{width:100%;height:100%;object-fit:cover;object-position:top;display:block}.stream-vignette{position:absolute;inset:0;pointer-events:none;background:linear-gradient(#101312 0%,#101312e8 16%,transparent 42%,transparent 62%,#101312ed 89%,#101312),radial-gradient(ellipse at 50% 50%,transparent 25%,#10131244 80%)}.stream-heading{position:relative;z-index:2;text-align:center;padding:45px 20px 0;pointer-events:none}.stream-heading .kicker{font-size:10px;letter-spacing:1.7px;margin-bottom:18px;color:#bcc8bf}.stream-heading h1{font-size:clamp(52px,6.1vw,88px);font-weight:500;line-height:1.03;letter-spacing:-.06em;margin:0}.stream-heading h1 span{color:var(--mint)}.stream-action{position:absolute;z-index:2;bottom:77px;left:0;right:0;text-align:center}.stream-action p{font-size:15px;color:#c0cdc4;margin:0 0 21px}.stream-action>div{display:flex;align-items:center;justify-content:center;gap:25px}.stream-film{background:transparent;border:0;color:var(--fg);font-size:14px;padding:15px 0}.stream-film span{margin-left:10px}.stream-bottom{position:absolute;z-index:2;bottom:25px;left:6%;right:6%;display:flex;justify-content:space-between;align-items:center;font-size:11px;color:#acbbb0}.stream-bottom button{color:inherit;border:1px solid #ffffff25;background:#101312bb;border-radius:30px;padding:9px 15px;font-size:11px}.stream-hero.is-paused .stream-card{animation-play-state:paused}.film-dialog{padding:48px 12px 12px;max-width:min(1100px,94vw);width:1100px;max-height:94svh;background:#101312;overflow:hidden}.film-dialog video{display:block;width:100%;max-height:80svh}.film-close{position:absolute;right:18px;top:14px;border:0;background:none;color:white;font-size:14px}.film-dialog::backdrop{background:#000e}
@media(max-width:760px){.stream-hero{height:calc(100svh - 82px);min-height:640px;max-height:900px}.stream-heading{padding-top:37px}.stream-heading h1{font-size:clamp(42px,9vw,65px)}.stream-heading .kicker{font-size:8px;letter-spacing:1.1px}.stream-perspective{left:-65%;right:-65%}.stream-card{width:22cqw;height:32cqw;margin-left:-11cqw;margin-top:-16cqw}.stream-action{bottom:86px}.stream-action p{font-size:13px}.stream-action>div{gap:22px}.stream-action .button{padding:14px 24px;min-height:49px}.stream-bottom{bottom:26px}.stream-vignette{background:linear-gradient(#101312 0%,#101312ee 23%,transparent 43%,transparent 57%,#101312f0 80%,#101312)}}
@media(prefers-reduced-motion:reduce){.stream-card{animation-play-state:paused}}
.proof-image{background:#101713}.proof-image img{object-fit:contain;object-position:center}
@media(min-width:761px){.stream-hero{min-height:610px}}
@media(max-width:760px){.stream-card{width:30cqw;height:45cqw;margin-left:-15cqw;margin-top:-22.5cqw}.proof-image{height:220px}}

@media(prefers-reduced-motion:reduce){#stream-toggle{display:none}}
/* Matched landscape browser panels preserve complete website compositions. */
.stream-card{width:26.6667cqw;height:15cqw;margin-left:-13.3333cqw;margin-top:-7.5cqw;background:#171c19}.stream-card img{object-fit:contain;object-position:center}.stream-action>div{gap:22px}.stream-film{font-size:14px}.capability-intro{max-width:360px;font-size:18px;line-height:1.6;color:var(--muted);margin:0}.capability-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:30px}.capability-grid article{border-top:1px solid var(--line);padding-top:25px}.capability-grid article>span{font-size:12px;color:var(--mint)}.capability-grid h3{font-size:27px;line-height:1.15;letter-spacing:-1px;margin:30px 0 18px}.capability-grid p,.reputation-grid p{font-size:16px;line-height:1.65;color:var(--muted)}.capability-grid .text-link{margin-top:15px}.reputation-section{background:#191f1b;padding:85px 0}.reputation-grid{display:grid;grid-template-columns:1fr 1fr;gap:8%;margin-top:45px}.reputation-grid article{padding-top:25px;border-top:1px solid var(--line)}.reputation-label{font-size:13px;color:var(--mint)}.reputation-grid h3{font-size:37px;letter-spacing:-1.5px;line-height:1.12;margin:24px 0 20px}.reputation-grid p{max-width:460px}.reputation-grid .text-link{margin-top:12px}.film-dialog{padding:42px 22px 16px;overflow:auto;max-width:min(1100px,94vw)}.film-dialog h2{font-size:27px;margin:0 0 8px}.film-dialog .film-intro{font-size:14px;margin:0 0 18px;line-height:1.5}.film-dialog video{max-height:65svh;background:#101312}.film-dialog .film-note{font-size:12px;margin:12px 0 0;line-height:1.5}.film-dialog .film-note a{display:inline;margin:0;color:var(--mint)}
@media(max-width:1000px){.capability-grid{grid-template-columns:repeat(2,1fr);gap:35px}.capability-intro{max-width:300px}}
@media(max-width:760px){.stream-card{width:48cqw;height:27cqw;margin-left:-24cqw;margin-top:-13.5cqw}.stream-action>div{gap:16px}.stream-film{font-size:13px}.stream-action .button{padding-inline:20px}.capability-grid{grid-template-columns:1fr}.capability-grid h3{margin:18px 0 14px;font-size:29px}.capability-grid .text-link{margin-top:6px}.capability-intro{max-width:none;font-size:17px}.reputation-section{padding:60px 0}.reputation-grid{grid-template-columns:1fr;gap:40px}.reputation-grid h3{font-size:33px}.film-dialog{padding:44px 14px 18px}.film-dialog h2{font-size:24px}.film-dialog video{max-height:60svh}.film-dialog .film-intro{font-size:13px}}
/* Soft coloured ribbons weave behind the work, without covering its content. */
.hero-ribbons{position:absolute;inset:-6% -4%;pointer-events:none;overflow:hidden;opacity:.72}.hero-ribbons svg{display:block;width:100%;height:100%;overflow:visible}.ribbon-wave{transform-origin:center;animation:ribbon-drift 18s ease-in-out infinite alternate}.ribbon-wave-one{opacity:.7}.ribbon-wave-two{opacity:.6;animation-delay:-9s;animation-direction:alternate-reverse}.stream-hero.is-paused .ribbon-wave{animation-play-state:paused}@keyframes ribbon-drift{from{transform:translateY(-18px) rotate(-3deg)}to{transform:translateY(20px) rotate(3deg)}}
@media(max-width:760px){.hero-ribbons{inset:2% -55%;opacity:.6}.ribbon-wave-one{opacity:.75}.ribbon-wave-two{opacity:.7}}
@media(prefers-reduced-motion:reduce){.ribbon-wave{animation:none!important}}
/* Each portfolio entry shows the actual website, keeping the featured trio intact. */
.client-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:42px 30px}.client-grid>a{display:block;padding:0;border:0;min-height:0;background:transparent}.client-thumbnail{aspect-ratio:16/9;overflow:hidden;border-radius:8px;background:#1b221d;border:1px solid var(--line)}.client-grid .client-thumbnail img{display:block;width:100%;height:100%;object-fit:contain;object-position:top;margin:0;transition:transform .45s}.client-grid>a:hover .client-thumbnail img{transform:scale(1.025)}.client-caption{display:flex;justify-content:space-between;align-items:center;gap:16px;padding-top:17px}.client-grid h3{font-size:19px;letter-spacing:-.5px;margin:0}.client-caption>span{font-size:12px;white-space:nowrap}
@media(max-width:760px){.client-grid{grid-template-columns:1fr;gap:32px}.client-grid>a{padding:0;min-height:0}.client-grid .client-thumbnail img{height:100%}.client-grid h3{font-size:18px}.client-caption{padding-top:14px}.client-caption>span{font-size:12px}}
@media(prefers-reduced-motion:reduce){.client-grid>a:hover .client-thumbnail img{transform:none}}
/* Visual customer journey: one real interaction at a time. */
.visual-journey .section-head{align-items:center}.visual-journey h2{max-width:700px}.journey-play{border:1px solid var(--line);background:transparent;color:var(--fg);border-radius:30px;padding:13px 20px;font-size:14px;white-space:nowrap}.journey-stage{display:grid;grid-template-columns:1fr 1.12fr;gap:8%;padding:46px 7%;border:1px solid #ffffff1b;border-radius:20px;background:radial-gradient(ellipse at 90% 25%,#31443a55,transparent 60%),#171e19;align-items:center}.journey-source{font-size:13px;color:var(--muted);margin:0 0 34px}.journey-steps{list-style:none;margin:0 0 35px;padding:0}.journey-steps li{margin:0}.journey-steps button{position:relative;display:flex;align-items:center;gap:22px;text-align:left;width:100%;background:none;color:#849389;border:0;border-bottom:1px solid #ffffff16;padding:26px 0;font-size:clamp(21px,2.3vw,34px);letter-spacing:-.7px;transition:color .25s}.journey-steps button[aria-pressed=true]{color:var(--fg)}.journey-number{font-size:13px;letter-spacing:0;color:var(--muted);font-variant-numeric:tabular-nums}.journey-steps button[aria-pressed=true] .journey-number{color:var(--mint)}.journey-meter{position:absolute;bottom:-1px;left:0;right:0;height:2px;background:var(--mint);transform:scaleX(0);transform-origin:left}.journey-steps button[aria-pressed=true] .journey-meter{transform:scaleX(var(--tour-progress,0))}.journey-panel{margin:0;max-width:420px;margin-inline:auto}.journey-panel[hidden]{display:none}.journey-capture{position:relative;aspect-ratio:480/620;overflow:hidden;border:1px solid #ffffff30;border-radius:14px;background:#213445;box-shadow:0 24px 65px #0004}.journey-capture img{position:absolute;width:266.6667%;max-width:none;height:auto;left:-152.0833%;top:-11.2903%;display:block}.quote-capture img{width:241.5094%;left:-109.434%;top:-16.129%}.journey-panel figcaption{text-align:center;margin-top:23px;font-size:24px;line-height:1.2;font-weight:500;letter-spacing:-.7px}.journey-panel.is-active .journey-capture{animation:journey-reveal .45s ease both}.journey-note{font-size:12px;text-align:center;color:#89998e;margin-top:20px;line-height:1.6}@keyframes journey-reveal{from{opacity:.25;transform:translateY(9px)}to{opacity:1;transform:translateY(0)}}
@media(max-width:760px){.visual-journey .section-head{align-items:start;gap:20px}.visual-journey h2{font-size:39px}.journey-play{padding:11px 17px;font-size:13px}.journey-stage{display:flex;flex-direction:column;padding:22px 18px;gap:26px;border-radius:16px}.journey-sidebar{width:100%;display:contents}.journey-source{font-size:12px;margin:0;text-align:center;order:0}.journey-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;width:100%;margin:0;order:1}.journey-steps button{display:flex;flex-direction:column;align-items:start;justify-content:start;gap:9px;min-height:78px;padding:0 0 13px;font-size:13px;line-height:1.2;letter-spacing:0}.journey-number{font-size:11px}.journey-screen{width:100%;order:2}.journey-sidebar>.text-link{order:3;font-size:14px}.journey-panel{max-width:320px}.journey-panel figcaption{font-size:23px;margin-top:20px}.journey-note{font-size:11px}}
.mock-journey .journey-stage{display:block;padding:24px;background:#151d18}.mock-journey .journey-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:24px;margin:0 0 22px}.mock-journey .journey-steps button{font-size:19px;gap:12px;padding:13px 0 18px;min-height:0}.mock-journey video{display:block;width:100%;aspect-ratio:8/5;object-fit:contain;border-radius:12px;background:#101713}.mock-journey .journey-screen{width:100%}
@media(max-width:760px){.mock-journey .journey-stage{padding:14px}.mock-journey .journey-steps{gap:10px;margin-bottom:14px}.mock-journey .journey-steps button{font-size:12px;min-height:74px;gap:8px;padding:6px 0 12px}.mock-journey video{aspect-ratio:9/13}.mock-journey h2{font-size:37px}}

/* Apple-design pass, 4 Oct 2026. Kept as one block so it reviews and reverts cleanly. */
/* --spring is a critically damped spring (damping 1.0) sampled into linear(): no overshoot, settles at .6s. */
:root{--spring:linear(0,.097,.282,.466,.619,.736,.821,.881,.921,.949,.967,.979,.986,.991,.995,.997,.998,.999,1)}
a,button,summary,label{-webkit-tap-highlight-color:transparent;touch-action:manipulation}
/* Response: feedback on press, instantly, on everything tappable. */
.button,.nav-cta,.plan-action,.menu-toggle,.plan-toggle button,.demo-tabs button,.sample-options button,.proof-stepper button,.proof-thumbnails button,.journey-play,.stream-bottom button,.hero-bottom button,.stream-film,.film-close{transition:transform .6s var(--spring),background-color .2s,color .2s,border-color .2s,box-shadow .2s,opacity .2s}
.button:active,.nav-cta:active,.plan-action:active,.menu-toggle:active,.plan-toggle button:active,.demo-tabs button:active,.sample-options button:active,.proof-stepper button:active:not(:disabled),.proof-thumbnails button:active,.journey-play:active,.stream-bottom button:active,.hero-bottom button:active,.stream-film:active,.film-close:active{transform:scale(.97);transition-duration:.1s}
@media(hover:none){.button:hover{transform:none}.project:hover img,.client-grid>a:hover .client-thumbnail img{transform:none}}
/* Springs on the motion that already existed. */
.proof-card{transition:transform .6s var(--spring),opacity .35s ease}
.project-image img,.client-grid .client-thumbnail img{transition-timing-function:var(--spring)}
.proof-progress span{width:100%;transform:scaleX(0);transition:transform .12s linear}
.journey-meter{transition:transform .25s linear}
/* Segmented control: one indicator that slides between plans instead of two backgrounds swapping. */
@supports selector(:has(a)){
 .plan-toggle{position:relative;isolation:isolate;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
 .plan-toggle:before{content:'';position:absolute;z-index:-1;top:5px;bottom:5px;left:5px;width:calc(50% - 5px);border-radius:40px;background:#080909;box-shadow:0 1px 8px #0004;transition:transform .6s var(--spring)}
 .plan-toggle:has([data-plan=owned][aria-selected=true]):before{transform:translateX(100%)}
 .plan-toggle button[aria-selected=true]{background:transparent;box-shadow:none}
}
/* FAQ: the plus turns into a close mark and the answer opens rather than appearing. */
.faq summary:after{transition:transform .45s var(--spring)}
.faq details[open] summary:after{content:'+';transform:rotate(45deg)}
@supports (interpolate-size:allow-keywords){
 :root{interpolate-size:allow-keywords}
 .faq details::details-content{block-size:0;overflow:clip;transition:block-size .5s var(--spring),content-visibility .5s allow-discrete}
 .faq details[open]::details-content{block-size:auto}
}
/* Dialogs materialise and leave the way they came. */
dialog{opacity:0;transform:scale(.96);transition:opacity .25s ease,transform .5s var(--spring),overlay .5s allow-discrete,display .5s allow-discrete}
dialog[open]{opacity:1;transform:none}
@starting-style{dialog[open]{opacity:0;transform:scale(.96)}}
dialog::backdrop{opacity:0;transition:opacity .3s ease,overlay .3s allow-discrete,display .3s allow-discrete}
dialog[open]::backdrop{opacity:1}
@starting-style{dialog[open]::backdrop{opacity:0}}
/* Tracking in em, not px, so it scales with every clamp() size. Values match the desktop look exactly. */
.wordmark{letter-spacing:-.055em}
.pricing-shell h1{letter-spacing:-.049em}
.plan-price{letter-spacing:-.046em}
.sample-price{letter-spacing:-.048em}
.price-teaser .teaser-price{letter-spacing:-.059em}
.proof-total strong{letter-spacing:-.068em}
.service-pair h3{letter-spacing:-.041em}
.proof blockquote{letter-spacing:-.034em}
.reputation-grid h3{letter-spacing:-.04em}
.capability-grid h3,.benefit-grid h2,.benefit-grid h3{letter-spacing:-.037em}
.quote-total output{letter-spacing:-.042em}
.client-grid .client-type{letter-spacing:-.036em}
.article-list h2{letter-spacing:-.032em}
.prose h2{letter-spacing:-.03em}
.contact-details strong{letter-spacing:-.03em}
@media(max-width:1000px){
 /* Menu drops from the bar it belongs to, as translucent chrome, and returns the same way. */
 .nav nav{background:#101312e0;-webkit-backdrop-filter:blur(20px) saturate(160%);backdrop-filter:blur(20px) saturate(160%);opacity:0;transform:translateY(-8px);transition:opacity .2s ease,transform .45s var(--spring),display .45s allow-discrete}
 .nav nav.open{opacity:1;transform:none}
 @starting-style{.nav nav.open{opacity:0;transform:translateY(-8px)}}
 /* Legibility floor: nothing below 11px. */
 .stream-heading .kicker,.hero-content .kicker,.pricing-shell .kicker,.proof-heading .kicker{font-size:11px}
 .hero-bottom,.stream-bottom,.proof-total span,.proof-browser,.comparison .optional,.legal-address,.footer-bottom,.footer-bottom button,.journey-number,.proof-caption p,.proof-view,.proof-stepper,.proof-stepper button,.film-dialog .film-note,.journey-note{font-size:11px}
}
/* Reduced motion keeps gentle cross-fades instead of removing all feedback. */
@media(prefers-reduced-motion:reduce){
 *:not(.stream-card),*:before,*:after{transition-property:opacity,color,background-color,border-color!important;transition-duration:.2s!important;transition-timing-function:ease!important}
 .nav nav,dialog,.proof-card{transform:none!important}
}
@media(prefers-reduced-transparency:reduce){
 .nav nav,.hero-bottom button,.stream-bottom button{background:#101312!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
 dialog::backdrop{backdrop-filter:none;background:#000e}
}
@media(prefers-contrast:more){:root{--line:#ffffff66;--muted:#ccd4ce}}

/* Show, don't tell (4 Oct 2026): build types act themselves out; pricing is tapped, not read. */
.build-pair{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:32px}
.build-card{display:block}
.build-screen{position:relative;margin:0;aspect-ratio:16/9;border-radius:14px;overflow:hidden;background:#1a201c;box-shadow:0 0 0 1px #ffffff1a,0 24px 60px #0006}
.build-screen img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .6s var(--spring)}
@media(hover:hover){.build-card:hover .build-screen img{transform:scale(1.02)}}
.build-screen figcaption{position:absolute;left:12px;bottom:12px;font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#dfe5e0;background:#101312b3;-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);padding:6px 10px;border-radius:20px}
.build-chat,.build-shop{position:absolute;right:4%;bottom:8%;width:min(60%,320px);display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.bub{display:inline-flex;align-items:center;gap:.45em;font-size:clamp(11px,1.15vw,15px);line-height:1.3;padding:.6em .95em;border-radius:16px;background:#101312eb;color:#f6f7f3;box-shadow:0 8px 24px #0007;transform-origin:bottom right;transition:opacity .25s ease,transform .6s var(--spring)}
.bub svg{width:1.15em;height:1.15em;flex:none}
.bub-in,.bub-search{border-bottom-right-radius:5px}
.bub-out{align-self:flex-start;background:var(--mint);color:#102319;border-bottom-left-radius:5px;transform-origin:bottom left}
.bub-done svg,.bub-search svg{color:var(--mint)}
.basket-count{--bc:clamp(17px,1.5vw,20px);position:absolute;left:calc(74.6% - var(--bc)/2);top:calc(4% - var(--bc)/2);display:grid;place-items:center;width:var(--bc);aspect-ratio:1;border-radius:50%;background:var(--mint);color:#102319;font-size:11px;font-weight:700;transition:transform .5s cubic-bezier(.3,1.5,.5,1)}
.build-show.is-live .bub:not(.on){opacity:0;transform:translateY(10px) scale(.96)}
.build-show.is-live .basket-count:not(.on){transform:scale(0)}
.build-card h3{font-size:clamp(24px,2.4vw,34px);font-weight:500;line-height:1.15;letter-spacing:-.035em;margin:24px 0 12px}
.price-show{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:50px;align-items:center;padding-block:80px;border-block:1px solid var(--line)}
.price-panel{min-width:0}
.home-plan{max-width:420px;margin-bottom:30px}
.home-plan button{font-size:15px;padding:13px 16px}
@supports selector(:has(a)){.plan-toggle:has([data-home-plan=owned][aria-selected=true]):before{transform:translateX(100%)}}
.hp-price{font-size:clamp(52px,5vw,68px);font-weight:500;line-height:1;letter-spacing:-.055em;margin:0 0 24px}
.hp-period{font-size:19px;letter-spacing:0;color:var(--muted);margin-left:6px}
.hp-ticks{display:flex;height:26px;max-width:520px;margin-bottom:10px}
.hp-ticks i{flex:1 1 0;margin-right:4px;border-radius:5px;background:var(--mint);transition:flex-grow .6s var(--spring),margin .6s var(--spring),opacity .3s ease}
.hp-ticks i:last-child{margin-right:0}
.hp-panel[data-state=owned] .hp-ticks i{margin-right:0}
.hp-panel[data-state=owned] .hp-ticks i:not(:first-child){flex-grow:0;opacity:0}
.hp-note{font-size:13px;color:var(--muted);margin:0 0 28px}
.hp-panel[data-state=managed] .for-owned,.hp-panel[data-state=owned] .for-managed{display:none}
.hp-includes{list-style:none;padding:0;margin:0 0 30px;max-width:520px;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:14px 18px}
.hp-includes li{display:flex;align-items:center;gap:9px;font-size:14px;color:#dfe5e0;transition:opacity .3s ease}
.hp-includes svg{width:20px;height:20px;flex:none;color:var(--mint)}
.hp-panel[data-state=managed] .inc-owned,.hp-panel[data-state=owned] .inc-managed{opacity:.42}
.hp-panel[data-state=owned][data-care=on] .inc-managed{opacity:1}
.hp-addon{display:none;font-size:19px;letter-spacing:0;color:var(--mint);margin-left:12px;white-space:nowrap}
.hp-panel[data-state=owned][data-care=on] .hp-addon{display:inline}
.for-care,.hp-panel[data-care=on] .for-owned{display:none}
.hp-panel[data-state=owned][data-care=on] .for-care{display:inline}
.hp-care{display:none;align-items:center;gap:14px;max-width:520px;margin:-10px 0 28px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;transition:border-color .3s ease}
.hp-panel[data-state=owned] .hp-care{display:flex}
.hp-panel[data-care=on] .hp-care{border-color:color-mix(in srgb,var(--mint) 45%,transparent)}
.hp-switch{flex:none;position:relative;width:46px;height:26px;padding:0;border:0;border-radius:20px;background:#ffffff26;cursor:pointer;transition:background .3s ease}
.hp-switch:focus-visible{outline:2px solid var(--mint);outline-offset:3px}
.hp-knob{position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:50%;background:#f6f7f3;transition:transform .35s var(--spring),background .3s ease}
.hp-switch[aria-checked=true]{background:var(--mint)}
.hp-switch[aria-checked=true] .hp-knob{transform:translateX(20px);background:#0b1f14}
.hp-care label{display:flex;flex-direction:column;gap:3px;font-size:14px;cursor:pointer}
.hp-care label span{font-size:12.5px;color:var(--muted)}
@media(max-width:1000px){
 .build-pair,.price-show{grid-template-columns:minmax(0,1fr)}
 .build-pair{gap:48px}
 .price-show{gap:28px;padding-block:55px}
 .price-show h2{font-size:44px}
 .home-plan{max-width:none}
 .build-chat,.build-shop{width:80%;bottom:6%}
 .build-screen figcaption{top:10px;bottom:auto;left:10px;padding:5px 9px}
}
@media(prefers-reduced-motion:reduce){.basket-count{transform:none!important}}

/* Revisions, 4 Oct 2026 (George's four notes). */
/* 1. Brand tokens: mint-deep is the afullerlifeai brand mint; the ribbons now use only brand colours. */
:root{--mint-deep:#5bd0b0;--mint-hover:#d6f9e3;--on-mint:#0b1f14}
/* 2. One primary CTA: brand mint, same radius, padding, hover and focus everywhere. */
.button-primary.button-primary{display:inline-flex;align-items:center;justify-content:center;min-height:52px;padding:0 27px;border:0;border-radius:50px;background:var(--mint);color:var(--on-mint);font-weight:600;text-align:center}
.button-primary.button-primary:hover{background:var(--mint-hover);color:var(--on-mint)}
.button-primary.button-primary:focus-visible{outline:2px solid var(--fg);outline-offset:4px}
.nav nav .nav-cta.button-primary{padding:0 27px}
.plan-action.button-primary{display:flex;width:100%}
@media(max-width:760px){.button-primary.button-primary{min-height:50px;padding:0 24px}.nav nav .nav-cta.button-primary{padding:0 24px}}
/* 3. Hero stream: slower loop, wider front spacing (keyframes are generated in build.py). */
.stream-card{animation-duration:16.8s;animation-delay:calc(var(--i) * -2.4s - var(--lag,0s));will-change:transform,opacity}
.stream-right{--lag:.8s}
.stream-vignette{background:linear-gradient(#101312 0%,#101312e8 14%,transparent 34%,transparent 74%,#101312ed 90%,#101312),radial-gradient(ellipse at 50% 50%,transparent 55%,#10131233 100%)}
@media(max-width:760px){
 .stream-perspective{left:0;right:0;perspective-origin:12% 55%}
 .stream-card{left:12%;width:40cqw;height:22.5cqw;margin-left:-20cqw;margin-top:-11.25cqw}
 .stream-left{display:none}
 .stream-right{animation-name:stream-solo;--lag:0s}
 .stream-vignette{background:linear-gradient(#101312 0%,#101312ee 23%,transparent 40%,transparent 66%,#101312f0 82%,#101312)}
}
/* 4. Story-style progress: finished chapters stay full, the current one fills, the rest wait. */
.mock-journey .journey-steps button .journey-meter{transform:scaleX(var(--tour-progress,0))}

/* Review management, shown as it happens (5 Oct 2026). Without JS or with reduced motion, the full story shows. */
.review-flow{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:20px 56px;align-items:center;margin-top:44px}
.rf-steps{list-style:none;margin:0;padding:0}
.rf-steps button{position:relative;display:flex;gap:18px;width:100%;padding:20px 0;border:0;border-bottom:1px solid #ffffff16;background:none;color:#849389;font:inherit;text-align:left;cursor:pointer;transition:color .25s}
.rf-steps button[aria-pressed=true],.rf-steps button.is-done{color:var(--fg)}
.rf-num{padding-top:4px;font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.rf-text strong{display:block;font-size:clamp(20px,2vw,26px);font-weight:500;letter-spacing:-.02em}
.rf-text span{display:block;margin-top:4px;font-size:14px;line-height:1.5;color:var(--muted)}
.rf-meter{position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--mint);transform:scaleX(0);transform-origin:left}
.rf-steps .is-done .rf-meter{transform:scaleX(1)}
.rf-steps .is-active .rf-meter{transform:scaleX(1);transition:transform var(--rf-dur,2.4s) linear}
.rf-stage{display:flex;flex-direction:column;gap:12px;padding:22px;border-radius:18px;background:#1a201c;box-shadow:0 0 0 1px #ffffff14,0 24px 60px #0006}
.rf-card{padding:14px 16px;border-radius:14px;background:#101312;box-shadow:0 0 0 1px #ffffff10;transition:opacity .3s ease,transform .6s var(--spring)}
.review-flow.is-live .rf-card:not(.on){opacity:0;transform:translateY(12px) scale(.98)}
.rf-card svg{flex:none}
.rf-job{display:flex;align-items:center;gap:12px}
.rf-job>svg{width:22px;height:22px;color:var(--mint)}
.rf-job strong{display:block;font-size:15px;font-weight:500}
.rf-job div span{font-size:13px;color:var(--muted)}
.rf-chip{display:inline-flex;align-items:center;gap:5px;margin-left:auto;padding:5px 10px;border:1px solid var(--line);border-radius:20px;font-size:12px;font-style:normal;color:var(--muted);transition:background-color .3s ease .5s,color .3s ease .5s,border-color .3s ease .5s}
.rf-chip svg{width:14px;height:14px}
.rf-job.on .rf-chip,.review-flow:not(.is-live) .rf-chip{background:var(--mint);border-color:transparent;color:var(--on-mint)}
.rf-from{font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.rf-card p{margin:8px 0 0;font-size:15px;line-height:1.45;color:#dfe5e0}
.rf-link{display:inline-flex;align-items:center;gap:6px;margin-top:10px;padding:7px 12px;border-radius:20px;background:var(--mint);color:var(--on-mint);font-size:13px;font-weight:600}
.rf-link svg,.rf-stars svg{width:14px;height:14px}
.rf-review-head{display:flex;align-items:center;gap:10px}
.rf-avatar{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:#2c3530;font-weight:600}
.rf-review-head strong{display:block;font-size:14px;font-weight:500}
.rf-stars{display:inline-flex;gap:1px;margin-top:2px;color:#f2c94c}
.rf-review.on .rf-stars svg{animation:rf-star .45s cubic-bezier(.3,1.5,.5,1) both}
.rf-review.on .rf-stars svg:nth-child(2){animation-delay:.08s}.rf-review.on .rf-stars svg:nth-child(3){animation-delay:.16s}.rf-review.on .rf-stars svg:nth-child(4){animation-delay:.24s}.rf-review.on .rf-stars svg:nth-child(5){animation-delay:.32s}
@keyframes rf-star{from{opacity:0;transform:scale(.4)}to{opacity:1;transform:none}}
.rf-tag{margin-left:auto;font-size:12px;color:var(--muted)}
.rf-actions{display:flex;align-items:center;gap:14px;margin-top:12px}
.rf-approve{display:inline-flex;align-items:center;min-height:34px;padding:0 16px;border-radius:20px;background:var(--mint);color:var(--on-mint);font-size:13px;font-weight:600;transition:transform .2s var(--spring),opacity .3s ease}
.rf-approve.press{transform:scale(.92)}
.rf-actions:has(.rf-posted.on) .rf-approve{opacity:.35}
.rf-posted{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--mint);transition:opacity .3s ease,transform .5s var(--spring)}
.rf-posted svg{width:16px;height:16px}
.review-flow.is-live .rf-posted:not(.on){opacity:0;transform:translateX(-6px)}
.rf-note{grid-column:2;margin:0;font-size:12px;color:var(--muted)}
.rf-more{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:16px 32px;margin-top:44px;padding-top:28px;border-top:1px solid var(--line);font-size:14px;color:var(--muted)}
.rf-more span a{color:var(--fg);text-decoration:underline;text-underline-offset:4px}
@media(max-width:1000px){
 .review-flow{grid-template-columns:minmax(0,1fr);gap:24px}
 .rf-note{grid-column:1}
 .rf-steps button{padding:14px 0;gap:14px}
 .rf-text span{display:none}
 .rf-stage{padding:14px;gap:10px}
 .rf-card{padding:12px 14px}
 .rf-card p{font-size:14px}
}
@media(prefers-reduced-motion:reduce){.rf-review.on .rf-stars svg{animation:none}}

/* Sticky, translucent nav (5 Oct 2026). Content scrolls under a blurred layer; the hairline appears only once it does. */
:root{--nav-h:102px}
.nav{position:sticky;top:0;z-index:50;background:#101312b8;-webkit-backdrop-filter:blur(20px) saturate(160%);backdrop-filter:blur(20px) saturate(160%);border-bottom-color:transparent;transition:border-color .3s ease,background-color .3s ease}
.is-scrolled .nav{border-bottom-color:var(--line)}
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.nav{background:#101312f5}}
[id]{scroll-margin-top:calc(var(--nav-h) + 12px)}
.is-pinned .proof-sticky{top:var(--nav-h);height:calc(100svh - var(--nav-h))}
@media(max-width:1000px){:root{--nav-h:82px}}
@media(prefers-reduced-transparency:reduce){.nav{background:#101312;-webkit-backdrop-filter:none;backdrop-filter:none}}

/* Business websites page (5 Oct 2026): one real build doing four jobs, the build track, real builds. */
.jobs{display:grid;grid-template-columns:minmax(0,.75fr) minmax(0,1.6fr);gap:40px;align-items:center}
.jobs-tabs{display:flex;flex-direction:column}
.jobs-tabs button{position:relative;display:flex;align-items:flex-start;gap:14px;width:100%;padding:18px 0;border:0;border-bottom:1px solid #ffffff16;background:none;color:#849389;font:inherit;text-align:left;cursor:pointer;transition:color .25s}
.jobs-tabs button[aria-selected=true]{color:var(--fg)}
.job-icon{display:grid;place-items:center;flex:none;width:36px;height:36px;border-radius:50%;background:#1a201c;color:var(--muted);transition:background-color .3s,color .3s}
.job-icon svg{width:18px;height:18px}
.jobs-tabs [aria-selected=true] .job-icon{background:var(--mint);color:var(--on-mint)}
.job-text strong{display:block;font-size:20px;font-weight:500;letter-spacing:-.02em}
.job-text span{display:block;margin-top:3px;font-size:14px;line-height:1.5;color:var(--muted)}
.jobs-tabs .is-done .rf-meter{transform:scaleX(1)}
.jobs-tabs .is-active .rf-meter{transform:scaleX(1);transition:transform var(--rf-dur,5s) linear}
.jobs-overlay{position:absolute;right:4%;bottom:8%;width:min(56%,340px)}
.job-panel{display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.job-panel[hidden]{display:none}
.job-panel .bub-out{align-self:flex-start}
.job-card{align-self:stretch;padding:14px 16px;border-radius:16px;background:#101312eb;box-shadow:0 8px 24px #0007;transform-origin:bottom right;transition:opacity .25s ease,transform .6s var(--spring)}
.job-line{display:block;margin-top:6px;font-size:15px;font-weight:500}
.job-chip{display:inline-flex;align-items:center;gap:6px;margin-top:10px;padding:5px 10px;border:1px solid var(--line);border-radius:20px;font-size:12px;color:var(--muted);transition:background-color .3s,color .3s,border-color .3s}
.job-chip svg{width:14px;height:14px}
.job-chip.on,.job-slots .job-pick.on{background:var(--mint);border-color:transparent;color:var(--on-mint)}
.job-price{display:block;margin-top:10px;font-size:34px;font-weight:500;letter-spacing:-.04em}
.job-slots{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.job-slots span{padding:7px 11px;border:1px solid var(--line);border-radius:10px;font-size:13px;transition:background-color .3s,color .3s,border-color .3s}
.job-confirm{display:flex;align-items:center;gap:6px;margin-top:12px;font-size:13px;color:var(--mint);transition:opacity .25s ease,transform .6s var(--spring)}
.job-confirm svg{width:16px;height:16px}
.job-card p{margin:8px 0 0;font-size:14px;color:#dfe5e0}
.jobs.is-live .job-panel :is(.bub,.job-card,.job-confirm)[data-s]:not(.on){opacity:0;transform:translateY(10px) scale(.97)}
.jobs-note{margin:16px 0 0;font-size:12px;color:var(--muted)}
.build-track ol{position:relative;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:32px;margin:44px 0 0;padding:0;list-style:none}
.build-track ol:before,.build-track ol:after{content:'';position:absolute;left:0;right:0;top:21px;height:2px;background:#ffffff16}
.build-track ol:after{background:var(--mint);transform:scaleX(0);transform-origin:left;transition:transform 1.6s var(--spring)}
.build-track.in-view ol:after,.build-track:not(.is-live) ol:after{transform:scaleX(1)}
.build-track li{position:relative}
.track-dot{position:relative;z-index:1;display:grid;place-items:center;width:44px;height:44px;border:2px solid #ffffff22;border-radius:50%;background:#1a201c;font-size:13px;font-variant-numeric:tabular-nums;transition:background-color .3s,border-color .3s,color .3s}
.build-track.in-view .track-dot,.build-track:not(.is-live) .track-dot{background:var(--mint);border-color:transparent;color:var(--on-mint)}
.build-track li:nth-child(2) .track-dot{transition-delay:.5s}.build-track li:nth-child(3) .track-dot{transition-delay:1s}
.build-track strong{display:block;margin-top:20px;font-size:22px;font-weight:500;letter-spacing:-.02em}
.build-track li p{max-width:300px;margin:8px 0 0;font-size:15px;line-height:1.6;color:var(--muted)}
.site-builds-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:20px}
.site-builds-grid a{display:block}
.site-builds-grid img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover;object-position:top;border-radius:12px;box-shadow:0 0 0 1px #ffffff14;transition:transform .6s var(--spring)}
@media(hover:hover){.site-builds-grid a:hover img{transform:scale(1.02)}}
.site-builds-grid span{display:flex;flex-direction:column;gap:2px;margin-top:12px;font-size:13px;color:var(--muted)}
.site-builds-grid strong{font-size:16px;font-weight:500;color:var(--fg)}
@media(max-width:1000px){
 .jobs{grid-template-columns:minmax(0,1fr);gap:18px}
 .jobs-tabs{flex-direction:row}
 .jobs-tabs button{flex:1;flex-direction:column;align-items:center;gap:8px;padding:10px 0 12px;text-align:center}
 .job-text strong{font-size:13px;letter-spacing:0}
 .job-text span{display:none}
 .jobs-overlay{width:82%;bottom:6%}
 .jobs-screen{aspect-ratio:4/3}
 .jobs-screen img{object-position:18% top}
 .job-card{padding:10px 12px}
 .job-price{font-size:26px}
 .job-slots span{padding:5px 8px;font-size:12px}
 .build-track ol{grid-template-columns:minmax(0,1fr);gap:26px}
 .build-track ol:before,.build-track ol:after{left:21px;right:auto;top:0;bottom:0;width:2px;height:auto}
 .build-track ol:after{transform:scaleY(0);transform-origin:top}
 .build-track.in-view ol:after,.build-track:not(.is-live) ol:after{transform:scaleY(1)}
 .build-track li{padding-left:64px}
 .track-dot{position:absolute;left:0;top:0}
 .build-track strong{margin-top:8px;font-size:20px}
 .site-builds-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
}
.job-card .rf-stars svg{fill:currentColor;stroke:none}
/* Online stores page (5 Oct 2026): search results inside the job overlay; real-builds grid takes its column count from the page. */
.site-builds-grid{grid-template-columns:repeat(var(--cols,4),minmax(0,1fr))}
.job-results{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.job-results span{display:flex;align-items:center;gap:8px;padding:7px 10px;border:1px solid var(--line);border-radius:10px;font-size:13px;transition:background-color .3s,color .3s,border-color .3s}
.job-results svg{width:16px;height:16px;flex:none;color:var(--muted)}
.job-results em{margin-left:auto;font-size:11px;font-style:normal;font-weight:600;letter-spacing:.06em;text-transform:uppercase;opacity:0;transition:opacity .3s}
.job-results .job-pick.on{background:var(--mint);border-color:transparent;color:var(--on-mint)}
.job-results .job-pick.on svg{color:var(--on-mint)}
.job-results .job-pick.on em{opacity:1}
@media(max-width:1000px){.site-builds-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.job-results span{padding:5px 8px;font-size:12px}}
/* Instant quotes page (5 Oct 2026): overlay on the left so J&L's real instant quote stays visible on the right. */
.jobs-left .jobs-overlay{left:4%;right:auto}
.jobs-left .job-panel{align-items:flex-start}
.jobs-left figcaption{top:12px;bottom:auto}
.job-results b{font-weight:400}
.quote-try{margin-top:20px}
/* AI receptionist page (5 Oct 2026): the morning handover card. */
.handover-section{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:56px;align-items:center}
.handover-copy p:not(.kicker){max-width:380px;font-size:17px;line-height:1.6;color:var(--muted)}
.handover{padding:22px;border-radius:18px;background:#1a201c;box-shadow:0 0 0 1px #ffffff14,0 24px 60px #0006}
.handover-head{display:flex;justify-content:space-between;align-items:center;padding-bottom:14px;border-bottom:1px solid var(--line);font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.handover-head span:first-child{display:inline-flex;align-items:center;gap:8px;color:var(--fg)}
.handover-head svg{width:16px;height:16px;color:var(--mint)}
.handover ol{margin:0;padding:0;list-style:none}
.handover li{display:grid;grid-template-columns:44px 34px minmax(0,1fr) auto;align-items:center;gap:12px;padding:16px 0;border-bottom:1px solid #ffffff10;transition:opacity .4s ease,transform .6s var(--spring)}
.handover li:last-child{border-bottom:0}
.handover time{font-size:13px;color:var(--muted);font-variant-numeric:tabular-nums}
.handover-icon{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:#101312;color:var(--mint)}
.handover-icon svg{width:17px;height:17px}
.handover-text{display:flex;flex-direction:column;gap:2px;font-size:13px;color:var(--muted)}
.handover-text strong{font-size:15px;font-weight:500;color:var(--fg)}
.handover em{padding:5px 10px;border-radius:20px;background:var(--mint);color:var(--on-mint);font-size:11px;font-style:normal;font-weight:600;letter-spacing:.06em;text-transform:uppercase}
.handover-note{margin:12px 0 0;font-size:12px;color:var(--muted)}
.handover-section.is-live:not(.in-view) li{opacity:0;transform:translateY(10px)}
.handover-section li:nth-child(2){transition-delay:.15s}.handover-section li:nth-child(3){transition-delay:.3s}
@media(max-width:1000px){
 .handover-section{grid-template-columns:minmax(0,1fr);gap:28px}
 .handover{padding:16px}
 .handover li{grid-template-columns:40px 30px minmax(0,1fr);gap:10px}
 .handover em{grid-column:3;justify-self:start}
 .handover-icon{width:30px;height:30px}
}
/* Industry and location pages (5 Oct 2026): the six points as a compact icon list. */
.points-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px 32px;margin:0;padding:0;list-style:none}
.points-grid li{display:flex;gap:14px;align-items:flex-start}
.points-grid .job-icon{background:#1a201c;color:var(--mint)}
.points-grid h2{margin:6px 0 6px;font-size:18px;font-weight:500;line-height:1.3;letter-spacing:-.01em}
.points-grid p{margin:0;font-size:14px;line-height:1.6;color:var(--muted)}
@media(max-width:1000px){.points-grid{grid-template-columns:minmax(0,1fr);gap:22px}}

/* Logo pack on the site (5 Oct 2026): real lockup in the nav and footer, mark only once you scroll, footer watermark. */
.wordmark{position:relative;display:inline-flex;align-items:center}
.wordmark img{display:block;width:auto;transition:opacity .3s ease,transform .45s var(--spring)}
.wordmark-full{height:28px}
.wordmark-mark{position:absolute;left:0;top:50%;height:30px;opacity:0;transform:translateY(-50%) scale(.85);pointer-events:none}
.is-scrolled .nav .wordmark-full{opacity:0;transform:scale(.96);transform-origin:left center}
.is-scrolled .nav .wordmark-mark{opacity:1;transform:translateY(-50%) scale(1)}
footer{position:relative;overflow:hidden}
footer>.wrap{position:relative}
footer .wordmark-full{height:30px}
.footer-watermark{position:absolute;left:-170px;bottom:-230px;width:560px;height:auto;opacity:.07;pointer-events:none;user-select:none}
@media(max-width:1000px){
 .wordmark-full{height:24px}
 .wordmark-mark{height:26px}
 footer .wordmark-full{height:26px}
 .footer-watermark{width:340px;left:auto;right:-110px;bottom:-120px}
}
@media(prefers-reduced-motion:reduce){.wordmark img{transform:none!important}}
/* Five-column footer (10 Oct 2026): brand plus four headed link groups. */
.footer-top{grid-template-columns:1.35fr repeat(4,minmax(0,1fr));gap:40px}
.footer-links{align-content:start}
.footer-head{margin:0 0 6px!important;font-size:11px!important;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:#f6f7f3!important}
@media(max-width:1100px){.footer-top{grid-template-columns:repeat(4,minmax(0,1fr));gap:45px 30px}.footer-top>div:first-child{grid-column:1/-1}}
@media(max-width:760px){.footer-top{grid-template-columns:1fr 1fr;gap:40px 25px}}
/* Google reviews carousel (10 Oct 2026): white cards in Google's own format, so it is clear where the reviews come from. */
.g-reviews .section-head{align-items:end}
.g-summary{display:flex;align-items:center;gap:12px;padding:12px 18px;border:1px solid var(--line);border-radius:14px;flex:none}
.g-summary .g-logo{width:30px;height:30px}
.g-summary strong{display:block;font-size:15px;font-weight:600}
.g-summary span{font-size:12.5px;color:var(--muted)}
.g-rail{display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 48px)/3);gap:24px;overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;overscroll-behavior-x:contain;scrollbar-width:none;align-items:start}
.g-rail::-webkit-scrollbar{display:none}
.g-rail:focus-visible{outline:2px solid var(--mint);outline-offset:6px}
.g-card{scroll-snap-align:start;display:flex;flex-direction:column;gap:14px;padding:24px;border-radius:16px;background:#fff;color:#202124;font-family:Roboto,DM,Arial,sans-serif}
.g-card header{display:flex;align-items:center;gap:12px}
.g-card .g-avatar{flex:none;display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:var(--c);color:#fff;font-size:17px;font-weight:500}
.g-card header strong{display:block;font-size:15px;font-weight:500}
.g-card header div span{display:block;font-size:13px;color:#5f6368}
.g-card header .g-logo{width:22px;height:22px;margin-left:auto;flex:none}
.g-rating{display:flex;gap:2px;color:#fbbc04}
.g-rating svg{width:18px;height:18px}
.g-text{margin:0;font-size:15px;line-height:1.6;color:#3c4043;display:-webkit-box;-webkit-line-clamp:6;-webkit-box-orient:vertical;overflow:hidden}
.g-card.is-open .g-text{display:block}
.g-more{align-self:flex-start;margin-top:-6px;padding:0;border:0;background:none;color:#1a73e8;font-size:14px;font-weight:500}
.g-more:focus-visible{outline-offset:3px}
.g-foot{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:30px}
.g-foot .founder-strip{margin:0}
.g-controls{display:flex;gap:10px}
.g-controls button{width:46px;height:46px;border-radius:50%;border:1px solid var(--line);background:transparent;color:var(--fg);font-size:18px;transition:background .2s,border-color .2s,opacity .2s}
.g-controls button:hover{border-color:var(--mint)}
.g-controls button:disabled{opacity:.35;cursor:default}
@media(max-width:1000px){.g-rail{grid-auto-columns:calc((100% - 24px)/2)}}
@media(max-width:760px){.g-reviews .section-head{flex-direction:column;align-items:start;gap:22px}.g-rail{grid-auto-columns:86%;gap:16px}.g-foot{flex-direction:column-reverse;align-items:start}}
/* GuestAgentics page (11 Oct 2026): the working demo is the hero. The screen fills most of the viewport,
   and our messages play inside the site's own chat card, so it reads as the product working. */
.ga-hero{padding-top:28px;padding-bottom:30px}
.ga-hero-head{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:40px;align-items:end;margin-bottom:22px}
.ga-hero .kicker{margin-bottom:12px}
.ga-hero h1{margin:0;font-size:clamp(34px,3.5vw,56px);font-weight:500;line-height:1.02;letter-spacing:-.06em}
.ga-hero-head p:not(.kicker){margin:0 0 14px;font-size:15px;line-height:1.6;color:var(--muted);max-width:480px}
.ga-actions{display:flex;flex-wrap:wrap;align-items:center;gap:22px}
.ga-actions .button{min-height:46px;padding:12px 22px}
.jobs-hero{grid-template-columns:minmax(0,1fr);gap:0}
.jobs-hero .jobs-screen{order:1;width:min(100%,calc((100svh - 330px)*16/9));min-width:min(100%,760px);margin-inline:auto;border-radius:18px;box-shadow:0 0 0 1px #ffffff1a,0 40px 100px #000a}
.jobs-hero .jobs-tabs{order:2;flex-direction:row;width:min(100%,calc((100svh - 330px)*16/9));min-width:min(100%,760px);margin:18px auto 0;gap:24px}
.jobs-hero .jobs-tabs button{flex:1;padding:14px 0}
.jobs-hero .job-text strong{font-size:17px}
.jobs-hero .job-text span{font-size:13px}
.ga-hero .jobs-note{text-align:center}
@media(min-width:1001px){
 .jobs-hero .jobs-overlay{right:5.9%;top:29.3%;bottom:auto;width:38%;height:35.4%;padding:5% 2.5% 0;border-radius:2.4% / 4.3%;background:#18161f;display:flex;flex-direction:column}
 .jobs-hero .job-panel{gap:10px}
 .jobs-hero .job-card{padding:0;background:none;box-shadow:none;border-radius:0}
 .jobs-hero .job-card .rf-from{margin-bottom:4px}
 .jobs-hero .job-panel .bub{font-size:clamp(12px,1vw,15px)}
}
.ga-roles{padding-bottom:0}
.ga-roles h2{margin:0}
@media(max-width:1000px){.ga-hero-head{grid-template-columns:minmax(0,1fr);gap:16px}.jobs-hero .jobs-screen,.jobs-hero .jobs-tabs{width:100%;min-width:0}.jobs-hero .jobs-tabs{gap:0}.jobs-hero .jobs-tabs button{padding:10px 0 12px}}
/* Nav dropdowns (11 Oct 2026), on the Vox4 pattern: a button opens a panel of links with one-line descriptions. */
.dd{position:relative}
.dd__btn{display:inline-flex;align-items:center;gap:6px;padding:10px 0;border:0;background:none;color:#c6cec8;font:inherit;font-size:14px;cursor:pointer;transition:color .2s}
.dd__btn:hover,.dd__btn[aria-expanded=true],.dd__btn.is-current{color:var(--mint)}
.dd__btn svg{width:12px;height:12px;transition:transform .35s var(--spring)}
.dd__btn[aria-expanded=true] svg{transform:rotate(180deg)}
.dd__menu{position:absolute;top:calc(100% + 16px);left:50%;z-index:60;width:620px;display:grid;grid-template-columns:1fr 1fr;gap:2px;padding:10px;border-radius:18px;background:#161b18;box-shadow:0 0 0 1px #ffffff14,0 30px 70px #000b;visibility:hidden;opacity:0;transform:translate(-50%,-6px);transition:opacity .15s ease,transform .15s ease,visibility 0s .15s}
.dd__menu[data-open=true]{visibility:visible;opacity:1;transform:translate(-50%,0);transition:opacity .18s ease,transform .35s var(--spring),visibility 0s}
.dd__menu--narrow{width:400px;grid-template-columns:1fr}
.nav nav .dd__menu a{display:grid;gap:3px;padding:11px 12px;border-radius:12px;color:var(--fg);font-size:14px;font-weight:500;transition:background-color .15s,color .15s}
.nav nav .dd__menu a span{font-size:12.5px;font-weight:400;line-height:1.4;color:var(--muted)}
.nav nav .dd__menu a:hover{background:#ffffff0f}
.nav nav .dd__menu a[aria-current]{color:var(--mint)}
.nav nav .dd__menu .dd__feature{grid-column:1/-1;margin-top:6px;padding-top:14px;border-top:1px solid var(--line);border-radius:0 0 12px 12px}
.dd__areas{grid-column:1/-1;display:flex;flex-wrap:wrap;align-items:center;gap:6px 16px;margin:6px 0 0;padding:14px 12px 6px;border-top:1px solid var(--line)}
.dd__areas>span{font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--muted)}
.nav nav .dd__areas a{display:inline;padding:0;font-size:13.5px;font-weight:400;color:#c6cec8}
.nav nav .dd__areas a:hover{background:none;color:var(--mint)}
@media(max-width:760px){
 .nav nav{max-height:calc(100svh - 82px);overflow-y:auto;background:#101312}
 .nav nav .dd__menu a{color:#c6cec8}
 .dd{width:100%}
 .dd__btn{width:100%;justify-content:space-between;padding:17px 0;font-size:20px;color:var(--fg)}
 .dd__btn svg{width:16px;height:16px}
 .dd__menu,.dd__menu--narrow{position:static;width:auto;display:none;grid-template-columns:1fr;padding:0 0 12px;border-radius:0;background:none;box-shadow:none;visibility:visible;opacity:1;transform:none}
 .dd__menu[data-open=true]{display:grid;transform:none}
 .nav nav .dd__menu a{padding:10px 0;font-size:16px}
 .nav nav .dd__menu a span{display:none}
 .nav nav .dd__menu .dd__feature{padding-top:14px;border-radius:0}
 .dd__areas{padding:14px 0 4px}
}
/* Build tiles (11 Oct 2026): each build in a browser frame with its address, a full 16:9 screenshot and a visit link. */
.build-tiles{display:grid;grid-template-columns:repeat(var(--cols,3),minmax(0,1fr));gap:28px}
.build-tile{display:flex;flex-direction:column;border-radius:16px;overflow:hidden;background:#161b18;box-shadow:0 0 0 1px #ffffff14;transition:transform .6s var(--spring),box-shadow .3s ease}
.bt-bar{display:flex;align-items:center;gap:6px;padding:10px 14px;background:#1d2320;border-bottom:1px solid #ffffff0f}
.bt-bar i{width:8px;height:8px;border-radius:50%;background:#ffffff24}
.bt-bar em{margin-left:8px;overflow:hidden;font-size:11.5px;font-style:normal;color:#98a59b;white-space:nowrap;text-overflow:ellipsis}
.bt-shot{display:block;aspect-ratio:16/9;overflow:hidden;background:#101312}
.bt-shot img{display:block;width:100%;height:100%;object-fit:cover;object-position:top;transition:transform .8s var(--spring)}
.bt-cap{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 18px 18px}
.bt-cap strong{display:block;font-size:16px;font-weight:500;color:var(--fg)}
.bt-cap small{display:block;margin-top:3px;font-size:13px;color:var(--muted)}
.bt-go{flex:none;font-size:13px;color:var(--mint);white-space:nowrap}
div.build-tile .bt-go{color:var(--muted)}
@media(hover:hover){a.build-tile:hover{transform:translateY(-4px);box-shadow:0 0 0 1px #bdf4d140,0 24px 50px #0008}a.build-tile:hover .bt-shot img{transform:scale(1.03)}}
@media(max-width:1000px){.build-tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}}
@media(max-width:760px){.build-tiles{grid-template-columns:minmax(0,1fr)}}
/* Featured build: a full-width tile that leads the grid, screenshot left and caption right. */
.build-tile--feature{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);grid-template-rows:auto 1fr}
.build-tile--feature .bt-bar{grid-column:1;grid-row:1}
.build-tile--feature .bt-shot{grid-column:1;grid-row:2}
.build-tile--feature .bt-cap{grid-column:2;grid-row:1/3;flex-direction:column;align-items:flex-start;justify-content:flex-end;gap:18px;padding:32px}
.build-tile--feature .bt-cap strong{font-size:clamp(26px,2.4vw,36px);letter-spacing:-.03em}
.build-tile--feature .bt-cap small{font-size:15px}
.build-tile--feature .bt-go{font-size:15px}
@media(max-width:760px){.build-tile--feature{display:flex}.build-tile--feature .bt-cap{flex-direction:row;align-items:center;padding:16px 18px 18px}.build-tile--feature .bt-cap strong{font-size:16px}.build-tile--feature .bt-cap small,.build-tile--feature .bt-go{font-size:13px}}
/* Desktop dropdowns open on hover (George, 11 Oct): the button is a label, not a toggle. A bridge covers the gap so the pointer can cross to the menu. */
@media(hover:hover) and (min-width:761px){
 .dd__btn{cursor:default}
 .dd__menu:before{content:'';position:absolute;left:0;right:0;top:-18px;height:18px}
}
/* Curved hero row (11 Oct 2026): port of TiltedGridHero. The band is its own size container, so cqh and cqw follow the hero. */
.tilt-band{position:absolute;inset:0;container-type:size;pointer-events:none;opacity:0;transition:opacity .5s ease}
.tilt-band.is-ready{opacity:1}
.tilt-layer{position:absolute;inset:0}
.tilt-tile{position:absolute;transform-style:preserve-3d}
.tilt-strip{position:absolute;top:0;overflow:hidden;background:#171c19}
.tilt-strip:first-child{border-radius:8px 0 0 8px}
.tilt-strip:last-child{border-radius:0 8px 8px 0}
.tilt-strip img{position:absolute;top:0;max-width:none;object-fit:cover;object-position:top}
.stream-hero.is-paused .tilt-tile{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){.tilt-tile{animation-play-state:paused}}
.tilt-hero .stream-vignette{background:linear-gradient(#101312 0%,#101312d9 13%,transparent 30%,transparent 82%,#101312e0 97%)}
.tilt-hero .hero-ribbons{opacity:.4}
/* Our story timeline (11 Oct 2026): pinned section, sideways track, stems and copy revealed by scroll (site.js sets --p, --s, --t). */
.story{position:relative;height:calc(100vh + var(--shift));background:var(--bg)}
.story-pin{position:sticky;top:0;height:100vh;display:flex;align-items:center;overflow:hidden}
.story-slider{display:flex;align-items:center;gap:5vw;height:30vw;padding:0 5vw;will-change:transform}
.story-media{flex:none;display:grid;grid-template-columns:1fr 1fr;width:30vw;height:100%;border-radius:1vw;overflow:hidden}
.story-media img{width:100%;height:100%;object-fit:cover;filter:saturate(.7)}
.story-track{position:relative;flex:none;width:calc(20vw + var(--track));height:100%}
.story-title{position:absolute;left:0;top:2vw;margin:0;font-size:clamp(34px,3vw,56px);line-height:.98}
.story-period{position:absolute;left:0;bottom:2vw;margin:0;font-size:clamp(16px,1.5vw,26px);color:var(--muted)}
.story-axis{position:absolute;left:0;right:0;top:49%;display:flex;align-items:center}
.story-axis i{flex:none;width:.8vw;height:.8vw;border-radius:50%;background:var(--mint)}
.story-line{flex:1;height:1px;background:var(--mint);transform-origin:left;transform:scaleX(var(--p,0))}
.story-items{position:absolute;inset:0 0 0 20vw;margin:0;padding:0;list-style:none}
.story-item{position:absolute;left:var(--x);width:28vw;height:50%;--s:0;--t:0}
.story-item.top{top:0}
.story-item.bottom{top:50%}
.story-stem{position:absolute;left:0;width:1px;height:94%;background:var(--mint);transform:scaleY(var(--s))}
.top .story-stem{bottom:0;transform-origin:bottom}
.bottom .story-stem{top:0;transform-origin:top}
.story-knot{position:absolute;left:0;width:1vw;height:1vw;margin-left:-.5vw;border-radius:50%;background:var(--mint);transform:scale(var(--s))}
.top .story-knot{top:6%;margin-top:-.5vw}
.bottom .story-knot{bottom:6%;margin-bottom:-.5vw}
.story-copy{position:absolute;left:2.4vw;right:0;display:grid;gap:.8vw}
.top .story-copy{top:4%}
.bottom .story-copy{bottom:4%}
.story-copy h3,.story-copy p{margin:0;overflow:hidden}
.story-copy span{display:block;transform:translateY(calc((1 - var(--t)) * 105%))}
.story-copy h3{font-size:clamp(20px,2.1vw,38px);font-weight:500;letter-spacing:-.03em;line-height:1.05}
.story-copy p{font-size:clamp(14px,1.25vw,22px);line-height:1.25;color:var(--muted)}
.story-copy p span{transition-delay:.05s}
@media(prefers-reduced-motion:reduce){.story-item{--s:1!important;--t:1!important}}
@media(max-width:760px){
 .story{height:auto;padding:60px 0}
 .story-pin{position:static;height:auto;display:block;overflow:visible}
 .story-slider{flex-direction:column;align-items:stretch;height:auto;gap:28px;padding:0 6%;transform:none!important}
 .story-media{width:100%;height:auto;aspect-ratio:2/1;border-radius:16px}
 .story-track{width:auto;height:auto}
 .story-title{position:static;font-size:38px}
 .story-period{position:static;margin-top:8px;font-size:15px}
 .story-axis{display:none}
 .story-items{position:static;margin-top:28px;border-left:1px solid var(--mint);padding-left:22px;display:grid;gap:30px}
 .story-item,.story-item.top,.story-item.bottom{position:relative;top:auto;left:auto;width:auto;height:auto;--s:1;--t:1}
 .story-stem{display:none}
 .story-knot,.top .story-knot,.bottom .story-knot{left:-22px;top:6px;bottom:auto;width:11px;height:11px;margin:0 0 0 -6px}
 .story-copy,.top .story-copy,.bottom .story-copy{position:static;gap:6px}
 .story-copy h3{font-size:24px}.story-copy p{font-size:16px}
}


/* Fuller Bars logo (14 Oct 2026). Live text, one weight per letter; weight is the only thing that moves. */
.fl-logo{gap:.34em;line-height:1;font-size:27px;letter-spacing:-.02em}
.fl-logo .fl-bars{height:.72em;width:auto;flex:none;overflow:visible;fill:var(--fg);transition:transform .45s var(--spring);transform-origin:left center}
.fl-logo .fl-bars .fl-full{fill:var(--mint)}
.fl-logo .fl-wm{display:inline-flex;white-space:nowrap;transition:opacity .3s ease}
.fl-logo .fl-wm span{display:inline-block;color:var(--fg)}
.fl-logo .fl-wm .fl-ai{color:var(--mint)}
.is-scrolled .nav .fl-collapsible .fl-wm{opacity:0;pointer-events:none}
.is-scrolled .nav .fl-collapsible .fl-bars{transform:scale(1.3)}
footer .fl-logo{font-size:29px}
svg.footer-watermark{fill:var(--fg);overflow:visible;width:430px;left:-150px;bottom:-250px;opacity:.035}
@media(max-width:760px){svg.footer-watermark{width:260px;left:auto;right:-90px;bottom:-120px}}
@media(max-width:760px){.fl-logo{font-size:24px}footer .fl-logo{font-size:26px}}
@media(prefers-reduced-motion:reduce){.fl-logo .fl-bars,.fl-logo .fl-wm{transition:none}}

/* Enquiry form on /contact. Inherits the page's dark surface; inputs follow the
   same treatment as the quote calculator so the two feel like one system. */
.enquiry-form{display:grid;gap:14px;margin-top:28px;padding-top:24px;border-top:1px solid var(--line,#24272B)}
.enquiry-form label{display:grid;gap:6px;font-size:.82rem;letter-spacing:.02em;color:var(--muted,#9A958C)}
.enquiry-form .opt{opacity:.6;font-weight:400}
.enquiry-form input,.enquiry-form textarea{
  font:inherit;font-size:1rem;color:inherit;background:rgba(255,255,255,.04);
  border:1px solid var(--line,#24272B);border-radius:10px;padding:12px 14px;width:100%}
.enquiry-form input:focus-visible,.enquiry-form textarea:focus-visible{
  outline:2px solid var(--accent,#C9F299);outline-offset:2px;border-color:transparent}
.enquiry-form textarea{resize:vertical;min-height:96px}
.enquiry-form button{justify-self:start;margin-top:4px}
.form-status{margin:0;font-size:.85rem;min-height:1.2em;color:var(--muted,#9A958C)}
.form-status.err{color:#E8A0A0}

/* ── Page prose ──────────────────────────────────────────────────────────────
   Each service/sector page's own body copy, restored from the live site: it
   carries the search terms these pages actually rank for. It had no rule at
   all, so it rendered as unstyled <p>s in a 760px strip with 108px of padding
   above and below — a wall of text in an empty band (Kane, 15 Oct, on
   /ai-for-trades and most of the Who-we-help pages). Two columns across the
   full wrap, so two long paragraphs fill the measure instead of floating. */
.page-prose{border-top:1px solid var(--line);padding-block:74px}
.page-prose>.kicker{color:var(--muted);margin-bottom:34px}
.page-prose-body{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:28px 64px}
.page-prose-body p{margin:0;font-size:18px;line-height:1.75;color:#c4cdc6}
.page-prose-body p:first-child{font-size:22px;line-height:1.55;letter-spacing:-.3px;color:var(--fg)}
@media(max-width:760px){.page-prose{padding-block:52px}.page-prose-body{grid-template-columns:1fr;gap:20px}.page-prose-body p{font-size:17px}.page-prose-body p:first-child{font-size:19px}}

/* ── Live AI concierge ───────────────────────────────────────────────────────
   Our own site runs the thing we sell. Talks to /api/ask, a separate worker on
   a more-specific Cloudflare route, so it survives the switchover untouched.
   Thinking state = George's Fuller Bars loop (motion/renders/thinking-loop-*). */
.cx-launch{position:fixed;right:22px;bottom:22px;z-index:120;display:flex;align-items:center;gap:11px;
  padding:13px 19px 13px 15px;border:1px solid var(--line);border-radius:50px;background:#171d19;color:var(--fg);
  font-size:14px;font-weight:500;box-shadow:0 14px 40px #0006;transition:transform .2s,background .2s}
.cx-launch:hover{transform:translateY(-2px);background:#1d251f}
.cx-launch .cx-mark{height:19px;width:auto}
.cx-launch[aria-expanded=true]{opacity:0;pointer-events:none}
.cx-mark rect{fill:var(--fg)}
.cx-mark .fl-full{fill:var(--mint)}

.cx{position:fixed;right:22px;bottom:22px;z-index:121;width:min(410px,calc(100vw - 32px));
  max-height:min(660px,calc(100svh - 44px));display:flex;flex-direction:column;overflow:hidden;
  background:#131714;border:1px solid #ffffff22;border-radius:18px;box-shadow:0 30px 80px #0008}
.cx[hidden]{display:none}
.cx-head{display:flex;align-items:center;gap:12px;padding:16px 16px 14px;border-bottom:1px solid var(--line);flex:none}
.cx-head .cx-mark{height:22px;width:auto;flex:none}
.cx-head strong{display:block;font-size:15px;font-weight:600;letter-spacing:-.2px}
.cx-head span{display:block;font-size:12px;color:var(--muted);margin-top:2px}
.cx-head div{flex:1;min-width:0}
.cx-x{background:none;border:0;color:var(--muted);font-size:23px;line-height:1;padding:4px 6px;border-radius:7px}
.cx-x:hover{color:var(--fg);background:#ffffff12}

.cx-log{flex:1;overflow-y:auto;padding:18px 16px;display:flex;flex-direction:column;gap:13px;scroll-behavior:smooth}
.cx-msg{max-width:86%;font-size:15px;line-height:1.55;padding:12px 15px;border-radius:14px;white-space:pre-wrap;overflow-wrap:anywhere}
.cx-you{align-self:flex-end;background:var(--mint);color:#0b1f14;border-bottom-right-radius:5px}
.cx-ai{align-self:flex-start;background:#1c231e;border:1px solid #ffffff14;border-bottom-left-radius:5px}
.cx-ai a{color:var(--mint);text-decoration:underline;text-underline-offset:3px}
.cx-err{align-self:flex-start;background:#2a1d1d;border:1px solid #ff8a8a33;color:#ffd9d9}

.cx-think{align-self:flex-start;display:flex;align-items:center;gap:11px;padding:9px 14px;border-radius:14px;
  background:#1c231e;border:1px solid #ffffff14}
.cx-think video,.cx-think img{width:26px;height:26px;display:block;border-radius:5px}
.cx-think span{font-size:13px;color:var(--muted)}

.cx-chips{display:flex;flex-wrap:wrap;gap:8px;padding:0 16px 12px;flex:none}
.cx-chips:empty{display:none}
.cx-chip{font-size:13px;padding:9px 13px;border-radius:30px;border:1px solid var(--line);background:transparent;color:#cfd8d2;text-align:left}
.cx-chip:hover{border-color:var(--mint);color:var(--mint)}

.cx-slots{display:flex;flex-wrap:wrap;gap:8px;margin-top:4px}
.cx-slot{font-size:13px;padding:9px 12px;border-radius:9px;border:1px solid var(--line);background:#1c231e;color:var(--fg)}
.cx-slot:hover,.cx-slot[aria-pressed=true]{border-color:var(--mint);color:var(--mint)}

.cx-capture{align-self:stretch;display:grid;gap:9px;padding:14px;border:1px solid #ffffff1c;border-radius:14px;background:#1a211c}
.cx-capture p{margin:0;font-size:13px;color:var(--muted);line-height:1.5}
.cx-capture input{background:#101312;border:1px solid var(--line);border-radius:9px;padding:11px 12px;color:var(--fg);font-size:14px;width:100%}
.cx-capture input:focus{outline:2px solid var(--mint);outline-offset:1px}
.cx-capture button{background:var(--mint);color:#0b1f14;border:0;border-radius:9px;padding:11px;font-size:14px;font-weight:600}

.cx-form{display:flex;gap:9px;padding:13px 16px;border-top:1px solid var(--line);flex:none;align-items:center}
.cx-form input{flex:1;min-width:0;background:#101312;border:1px solid var(--line);border-radius:30px;
  padding:13px 16px;color:var(--fg);font-size:15px}
.cx-form input:focus{outline:2px solid var(--mint);outline-offset:1px}
.cx-send{flex:none;width:42px;height:42px;border-radius:50%;border:0;background:var(--mint);color:#0b1f14;font-size:18px;line-height:1}
.cx-send:disabled{opacity:.4}
.cx-foot{margin:0;padding:0 16px 14px;font-size:11px;line-height:1.5;color:#8c968f;flex:none}
.cx-foot a{color:#b9c3bc;text-decoration:underline;text-underline-offset:3px}

@media(max-width:560px){
  .cx{right:8px;left:8px;bottom:8px;width:auto;max-height:calc(100svh - 16px);border-radius:16px}
  .cx-launch{right:14px;bottom:14px;padding:12px 17px 12px 14px;font-size:13px}
  /* 🔴 iOS Safari zooms the whole page when a focused input is under 16px.
     Everything else can scale down; these two cannot. */
  .cx-form input,.cx-capture input{font-size:16px}
}
@media(prefers-reduced-motion:reduce){.cx-launch{transition:none}.cx-launch:hover{transform:none}.cx-log{scroll-behavior:auto}}
