:root{--ink:#050D1A;--navy:#0A1F3C;--navy2:#0E2A52;--navy3:#123863;--steel:#1E4E8C;--sky:#3C82C9;--gold:#E0A93B;--gold2:#F3C969;--gold-deep:#C6902A;--call:#1EA65A;--call-deep:#178a4a;--cream:#FBF9F4;--paper:#F3F6FB;--white:#fff;--text:#16233A;--muted:rgba(22,35,58,.64);--line:rgba(10,31,60,.13);--glass:rgba(255,255,255,.72);--serif:'Fraunces',Georgia,serif;--sans:'Inter',system-ui,-apple-system,sans-serif;--r:18px;--shadow:0 24px 60px -28px rgba(5,13,26,.5);--shadow-gold:0 18px 44px -18px rgba(224,169,59,.55);--maxw:1180px}
*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:96px}
body{font-family:var(--sans);color:var(--text);background:var(--cream);line-height:1.6;overflow-x:hidden;-webkit-font-smoothing:antialiased}
img,svg{display:block;max-width:100%}a{color:inherit;text-decoration:none}
h1,h2,h3,h4{font-family:var(--serif);font-weight:600;line-height:1.07;letter-spacing:-.01em}
::selection{background:var(--gold);color:var(--navy)}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 26px}
.eyebrow{font:600 12px/1 var(--sans);letter-spacing:.22em;text-transform:uppercase;color:var(--steel);display:inline-flex;gap:9px;align-items:center}
.eyebrow::before{content:"";width:24px;height:1.5px;background:var(--gold)}
.center{text-align:center;margin-inline:auto}.center .eyebrow{justify-content:center}
/* nav */
header.nav{position:fixed;inset:0 0 auto;z-index:900;transition:.4s}
.navbar{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:14px auto;max-width:var(--maxw);padding:8px 12px 8px 16px;border-radius:60px;background:rgba(10,31,60,.32);border:1px solid rgba(255,255,255,.16);backdrop-filter:blur(12px);transition:.4s}
header.nav.scrolled .navbar{background:var(--glass);border-color:var(--line);box-shadow:var(--shadow);margin-top:8px}
.brand{display:flex;align-items:center;gap:11px}
.brand .logo{width:46px;height:46px;flex:0 0 46px;border-radius:50%;filter:drop-shadow(0 2px 6px rgba(0,0,0,.3))}
.brand .brandtext{font-family:var(--serif);font-weight:600;font-size:19px;color:#fff;transition:.4s}
header.nav.scrolled .brand .brandtext{color:var(--navy)}
.navlinks{display:flex;gap:2px;align-items:center}
.navlinks a{font:600 14px var(--sans);color:rgba(255,255,255,.9);padding:9px 13px;border-radius:30px;transition:.25s}
header.nav.scrolled .navlinks a{color:var(--text)}
.navlinks a:hover{background:rgba(224,169,59,.22);color:#fff}
header.nav.scrolled .navlinks a:hover{color:var(--navy)}
.navlinks a.active{color:var(--gold2)}header.nav.scrolled .navlinks a.active{color:var(--steel)}
.navlinks a.cta{background:var(--gold);color:var(--navy)!important;font-weight:700;margin-left:6px;box-shadow:var(--shadow-gold)}
.navlinks a.cta:hover{background:#fff;transform:translateY(-1px)}
.nav-call-sm{display:none;font-size:20px;width:44px;height:44px;border-radius:50%;background:var(--gold);color:var(--navy);align-items:center;justify-content:center}
.burger{display:none;flex-direction:column;gap:5px;background:none;border:0;padding:8px}
.burger span{width:26px;height:2px;background:#fff;transition:.3s}header.nav.scrolled .burger span{background:var(--navy)}
/* buttons */
.btn{display:inline-flex;align-items:center;gap:10px;font:600 15px var(--sans);padding:15px 28px;border-radius:50px;border:1.5px solid transparent;transition:.3s;cursor:pointer;will-change:transform}
.btn svg{width:18px;height:18px}
.btn-call{background:var(--gold);color:var(--navy);font-weight:700;box-shadow:var(--shadow-gold)}
.btn-call:hover{background:#fff;transform:translateY(-2px)}
.btn-primary{background:var(--gold);color:var(--navy);font-weight:700}
.btn-primary:hover{background:#fff;transform:translateY(-2px);box-shadow:var(--shadow-gold)}
.btn-ghost{border-color:rgba(255,255,255,.42);color:#fff}.btn-ghost:hover{background:rgba(255,255,255,.12);border-color:#fff}
.btn-dark{background:var(--navy);color:var(--cream)}.btn-dark:hover{background:var(--steel);transform:translateY(-2px)}
.btn-gold-outline{border-color:var(--gold);color:var(--navy)}.btn-gold-outline:hover{background:var(--gold);color:var(--navy)}
.btn-lg{padding:18px 34px;font-size:17px}
/* hero */
.hero{position:relative;min-height:92svh;display:flex;align-items:center;overflow:hidden;background:linear-gradient(168deg,#050D1A,#0A1F3C 55%,#123863)}
.hero-photo{position:absolute;inset:0;background:radial-gradient(66% 58% at 76% 20%,rgba(30,78,140,.55),transparent 60%),linear-gradient(168deg,#050D1A,#0A1F3C 52%,#123863);z-index:0}
.hero-photo::after{content:"";position:absolute;inset:0;background:radial-gradient(52% 48% at 80% 22%,rgba(243,201,105,.28),transparent 64%)}
.hero-inner{position:relative;z-index:3;padding:132px 0 118px}
.hero .eyebrow{color:var(--gold2)}
.hero h1{color:#fff;font-size:clamp(42px,7.4vw,84px);font-weight:600;max-width:16ch;margin-top:16px}
.hero h1 em{font-style:italic;color:var(--gold2)}
.hero .sub{color:rgba(251,249,244,.9);font-size:clamp(17px,2.3vw,21px);max-width:56ch;margin:22px 0 34px}
.hero-cta{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.hero-phone{color:#fff;font-family:var(--serif);font-size:clamp(24px,3.4vw,34px);font-style:italic}
.hero-phone small{display:block;font-family:var(--sans);font-style:normal;font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold2);margin-bottom:2px}
.trust-strip{display:flex;gap:24px;flex-wrap:wrap;align-items:center;margin-top:42px;padding-top:24px;border-top:1px solid rgba(251,249,244,.16)}
.trust-strip .ti{display:flex;align-items:center;gap:9px;color:rgba(251,249,244,.94);font:500 14px var(--sans)}
.trust-strip .stars{color:var(--gold2);letter-spacing:2px}
.reveal-line{display:block;overflow:hidden}.reveal-line>span{display:block;transform:translateY(110%);transition:transform .9s cubic-bezier(.16,1,.3,1)}
.hero.in .reveal-line>span{transform:none}
.hero.in .sub,.hero.in .hero-cta,.hero.in .trust-strip{animation:rise .9s both}
.hero.in .sub{animation-delay:.3s}.hero.in .hero-cta{animation-delay:.45s}.hero.in .trust-strip{animation-delay:.6s}
/* interior page hero */
.page-hero{position:relative;background:linear-gradient(160deg,#050D1A,#0A1F3C 60%,#123863);color:#fff;padding:132px 0 60px;overflow:hidden}
.page-hero::after{content:"";position:absolute;top:-30%;right:-6%;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(243,201,105,.34),transparent 66%)}
.page-hero .wrap{position:relative;z-index:2}
.page-hero h1{font-size:clamp(34px,5.4vw,58px);margin-top:12px;max-width:20ch}
.page-hero h1 em{font-style:italic;color:var(--gold2)}
.page-hero p{color:rgba(251,249,244,.86);font-size:18px;margin-top:16px;max-width:60ch}
.page-hero .eyebrow{color:var(--gold2)}
.crumbs{font:500 13px var(--sans);color:rgba(251,249,244,.66);margin-bottom:6px}
.crumbs a:hover{color:var(--gold2)}.crumbs span{opacity:.5;margin:0 7px}
.page-hero .hero-cta{margin-top:28px}
/* marquee */
.marquee{background:var(--navy);color:rgba(251,249,244,.92);overflow:hidden;padding:15px 0;border-block:1px solid rgba(255,255,255,.08)}
.marquee .track{display:flex;gap:44px;white-space:nowrap;animation:scrollx 30s linear infinite;font-family:var(--serif);font-size:19px;font-style:italic}
.marquee .track span{display:inline-flex;align-items:center;gap:44px}.marquee .dot{color:var(--gold)}
/* sections */
section{position:relative}.pad{padding:clamp(52px,6.5vw,86px) 0}
.sec-head{max-width:660px;margin-bottom:40px}.sec-head h2{font-size:clamp(31px,4.8vw,50px);margin:16px 0 0;color:var(--navy)}
.sec-head p{color:var(--muted);font-size:18px;margin-top:16px}
.r{opacity:0;transform:translateY(32px);transition:opacity .8s cubic-bezier(.16,1,.3,1),transform .8s cubic-bezier(.16,1,.3,1)}
.r.show{opacity:1;transform:none}.r.d1{transition-delay:.08s}.r.d2{transition-delay:.16s}.r.d3{transition-delay:.24s}
.grid{display:grid;gap:22px}.svc-grid{grid-template-columns:repeat(3,1fr)}
.card{background:#fff;border:1px solid var(--line);border-radius:var(--r);transition:.4s;position:relative;overflow:hidden}
.card:hover{transform:translateY(-8px);box-shadow:var(--shadow);border-color:transparent}
.card-b{padding:26px 30px 30px}
.ico{width:56px;height:56px;border-radius:15px;display:grid;place-items:center;background:linear-gradient(135deg,var(--navy),var(--steel));margin-bottom:16px;border:3px solid #fff;box-shadow:0 12px 26px -10px rgba(5,13,26,.5)}
.ico svg{width:28px;height:28px;stroke:var(--gold);fill:none;stroke-width:1.7}
.card h3{font-size:22px;margin-bottom:9px;color:var(--navy)}.card p{color:var(--muted);font-size:15.5px}
.card .more{margin-top:16px;font:600 14px var(--sans);color:var(--gold-deep);display:inline-flex;gap:7px;align-items:center;transition:gap .3s}.card:hover .more{gap:12px}
/* stats */
.stats{background:linear-gradient(150deg,var(--navy),var(--ink));color:var(--cream);border-radius:28px;padding:clamp(38px,6vw,64px);display:grid;grid-template-columns:repeat(4,1fr);gap:24px;overflow:hidden}
.stat{text-align:center}.stat .n{font-family:var(--serif);font-size:clamp(36px,6vw,60px);color:var(--gold2);font-weight:600;line-height:1}
.stat .l{margin-top:10px;font:500 14px var(--sans);color:rgba(251,249,244,.78)}
/* split/about */
.split{display:grid;grid-template-columns:1.05fr .95fr;gap:56px;align-items:center}
.split h2{font-size:clamp(30px,4.4vw,46px);color:var(--navy)}.split p{color:var(--muted);font-size:17px;margin-top:18px}
.values{display:flex;flex-wrap:wrap;gap:12px;margin-top:26px}
.values span{background:rgba(10,31,60,.05);border:1px solid var(--line);border-radius:40px;padding:9px 17px;font:600 13.5px var(--sans);color:var(--navy)}
.media-frame{border-radius:24px;overflow:hidden;box-shadow:var(--shadow);border:1px solid var(--line)}
.media-frame img{width:100%;height:100%;object-fit:cover}
/* steps */
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;counter-reset:s}
.step{padding:32px 26px;border-radius:var(--r);background:#fff;border:1px solid var(--line)}
.step::before{counter-increment:s;content:"0" counter(s);font-family:var(--serif);font-size:44px;color:var(--gold);opacity:.7;font-weight:600}
.step h3{font-size:20px;margin:6px 0 8px;color:var(--navy)}.step p{color:var(--muted);font-size:15px}
/* areas + county cards */
.area-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.area-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;transition:.4s;display:flex;flex-direction:column}
.area-card:hover{transform:translateY(-8px);box-shadow:var(--shadow);border-color:transparent}
.area-card .ac-top{aspect-ratio:16/10;background:linear-gradient(150deg,var(--navy),var(--steel));display:grid;place-items:center;overflow:hidden}
.area-card .ac-top img{width:100%;height:100%;object-fit:cover}
.area-card .ac-b{padding:22px 24px 26px}
.area-card h3{font-size:22px;color:var(--navy);margin-bottom:6px}
.area-card p{color:var(--muted);font-size:14.5px;margin-bottom:14px}
.chips{display:flex;flex-wrap:wrap;gap:9px}
.chips span,.chips a{padding:8px 14px;border-radius:30px;background:#fff;border:1px solid var(--line);font:600 13px var(--sans);color:var(--navy);transition:.3s}
.chips a:hover{background:var(--navy);color:#fff;transform:translateY(-2px)}
.mapframe{position:relative;border-radius:22px;overflow:hidden;border:1px solid var(--line);box-shadow:var(--shadow);aspect-ratio:16/11;background:#0A1F3C}
.mapframe iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
/* gallery */
.gallery{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}
.gitem{position:relative;overflow:hidden;border-radius:16px;border:1px solid var(--line);background:var(--navy)}
.gitem img{width:100%;height:100%;object-fit:cover;aspect-ratio:16/9;transition:transform .8s cubic-bezier(.2,.7,.2,1)}
.gitem:hover img{transform:scale(1.05)}
.gitem .cap{position:absolute;left:0;right:0;bottom:0;padding:26px 18px 14px;color:#fff;font:600 15px var(--sans);background:linear-gradient(transparent,rgba(5,13,26,.82));z-index:2}
.gitem .cap small{display:block;color:var(--gold2);font-weight:600;font-size:11px;letter-spacing:.12em;text-transform:uppercase;margin-bottom:3px}
/* reviews */
.tcards{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.tcard{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:30px;display:flex;flex-direction:column;gap:14px}
.tcard .tstars{color:var(--gold);letter-spacing:1px;font-size:15px}.tcard p{color:var(--text);font-size:15.5px;font-style:italic}
.tcard .who{display:flex;align-items:center;gap:12px;margin-top:auto;padding-top:14px;border-top:1px solid var(--line)}
.tcard .av{width:42px;height:42px;border-radius:50%;background:linear-gradient(135deg,var(--steel),var(--navy));display:grid;place-items:center;color:var(--gold2);font-weight:700;font-family:var(--serif)}
.tcard .who b{font-size:14.5px}.tcard .who small{color:var(--muted)}
/* faq */
.faq{max-width:820px;margin-inline:auto}.qa{border-bottom:1px solid var(--line)}
.qa button{width:100%;text-align:left;background:none;border:0;padding:22px 0;font:600 19px var(--serif);color:var(--navy);display:flex;justify-content:space-between;gap:20px;align-items:center;cursor:pointer}
.qa .ic{flex:0 0 26px;width:26px;height:26px;border-radius:50%;border:1.5px solid var(--steel);display:grid;place-items:center;transition:.3s;color:var(--steel)}
.qa.open .ic{background:var(--navy);color:#fff;border-color:var(--navy);transform:rotate(45deg)}
.qa .ans{max-height:0;overflow:hidden;transition:max-height .4s ease}.qa .ans p{padding:0 0 22px;color:var(--muted);font-size:16px}
/* pricing tiers */
.tiers{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;align-items:stretch}
.tier{background:#fff;border:1px solid var(--line);border-radius:22px;padding:34px 30px;display:flex;flex-direction:column;position:relative;transition:.4s}
.tier:hover{transform:translateY(-8px);box-shadow:var(--shadow)}
.tier.feat{border:2px solid var(--gold);box-shadow:var(--shadow-gold)}
.tier .badge{position:absolute;top:-13px;left:30px;background:var(--gold);color:var(--navy);font:700 11px var(--sans);letter-spacing:.1em;text-transform:uppercase;padding:6px 14px;border-radius:30px}
.tier .yd{font:600 14px var(--sans);letter-spacing:.14em;text-transform:uppercase;color:var(--steel)}
.tier h3{font-size:30px;color:var(--navy);margin:6px 0 2px}
.tier .price{font-family:var(--serif);font-size:52px;color:var(--navy);font-weight:600;line-height:1}
.tier .price small{font-family:var(--sans);font-size:15px;color:var(--muted);font-weight:500}
.tier ul{list-style:none;margin:20px 0 26px;display:flex;flex-direction:column;gap:11px}
.tier li{display:flex;gap:10px;align-items:flex-start;font-size:15px;color:var(--text)}
.tier li svg{width:18px;height:18px;stroke:var(--call);fill:none;stroke-width:2.6;flex:0 0 18px;margin-top:2px}
.tier .btn{margin-top:auto;justify-content:center}
.price-note{text-align:center;color:var(--muted);font-size:14.5px;margin-top:22px}
/* commercial promo strip */
.promo{background:linear-gradient(135deg,var(--navy),var(--steel));color:#fff;border-radius:24px;padding:clamp(34px,5vw,52px);display:flex;gap:30px;align-items:center;justify-content:space-between;flex-wrap:wrap;overflow:hidden;position:relative}
.promo::after{content:"";position:absolute;top:-40%;right:-4%;width:360px;height:360px;border-radius:50%;background:radial-gradient(circle,rgba(243,201,105,.3),transparent 66%)}
.promo .pt{position:relative;z-index:2;max-width:60ch}
.promo h2{font-size:clamp(26px,3.6vw,38px);color:#fff}.promo h2 em{font-style:italic;color:var(--gold2)}
.promo p{color:rgba(251,249,244,.88);margin-top:12px;font-size:16.5px}
.promo .pa{position:relative;z-index:2;display:flex;gap:12px;flex-wrap:wrap}
/* call band */
.callband{position:relative;overflow:hidden;background:linear-gradient(120deg,var(--ink),var(--navy) 55%,var(--steel));color:#fff;text-align:center;padding:clamp(60px,9vw,104px) 0}
.callband::after{content:"";position:absolute;top:-30%;left:50%;transform:translateX(-50%);width:520px;height:520px;border-radius:50%;background:radial-gradient(circle,rgba(243,201,105,.28),transparent 62%)}
.callband .wrap{position:relative;z-index:2}
.callband h2{font-size:clamp(30px,5vw,52px)}.callband h2 em{font-style:italic;color:var(--gold2)}
.callband p{color:rgba(251,249,244,.9);font-size:18px;margin:16px auto 30px;max-width:52ch}
.callband .big-num{font-family:var(--serif);font-style:italic;font-size:clamp(34px,6vw,60px);color:var(--gold2);display:inline-block;margin-bottom:26px}
.callband .cbtns{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}
/* contact */
.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:44px;align-items:center}
.cinfo h2{font-size:clamp(30px,4.4vw,44px);color:var(--navy)}.cinfo .lead{color:var(--muted);font-size:17px;margin:16px 0 26px}
.cline{display:flex;gap:15px;align-items:center;padding:15px 0;border-top:1px solid var(--line)}
.cline .ci{width:46px;height:46px;border-radius:13px;background:linear-gradient(135deg,var(--navy),var(--steel));display:grid;place-items:center;flex:0 0 46px}
.cline .ci svg{width:22px;height:22px;stroke:var(--gold);fill:none;stroke-width:1.7}
.cline b{font-family:var(--serif);font-size:18px;color:var(--navy)}.cline span{color:var(--muted);font-size:14.5px;display:block}
.call-card{background:#fff;border:1px solid var(--line);border-radius:24px;padding:38px 34px;box-shadow:var(--shadow);text-align:center}
.call-card .eyebrow{justify-content:center;display:flex}
.call-card .num{font-family:var(--serif);font-style:italic;font-size:clamp(30px,4.6vw,44px);color:var(--navy);margin:12px 0 4px;display:block}
.call-card p{color:var(--muted);font-size:15px;margin-bottom:22px}
.call-card .btn{width:100%;justify-content:center;margin-bottom:12px}
/* footer */
footer{background:var(--ink);color:rgba(251,249,244,.72);padding:74px 0 30px}
.fgrid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1.2fr;gap:38px;margin-bottom:46px}
footer h4{color:#fff;font-family:var(--sans);font-weight:700;font-size:13px;letter-spacing:.12em;text-transform:uppercase;margin-bottom:16px}
footer ul{list-style:none}footer ul li{margin-bottom:10px}footer ul li a{font-size:14.5px;transition:.25s}footer ul li a:hover{color:var(--gold2)}
footer a.phone{color:var(--gold2);font-family:var(--serif);font-size:22px;font-style:italic;display:inline-block;margin-top:8px}
.fbar{border-top:1px solid rgba(255,255,255,.1);padding-top:24px;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px;color:rgba(251,249,244,.5)}.fbar a:hover{color:var(--gold2)}
footer .fbrand{display:flex;align-items:center;gap:11px;font-family:var(--serif);font-size:22px;color:#fff;margin-bottom:14px}
footer .fbrand .logo{flex:0 0 42px;width:42px;height:42px;border-radius:50%}
.ac-badge{display:flex;flex-direction:column;align-items:center;gap:8px;color:#fff;text-align:center;padding:16px}
.ac-badge b{font-family:var(--serif);font-weight:600;font-size:20px}
.ac-badge .sun-emblem{width:52px;height:52px}
/* FAB + mobile bar */
.fab{position:fixed;right:20px;bottom:20px;z-index:850;display:flex;flex-direction:column;gap:11px;align-items:flex-end}
.fab a,.fab button{display:inline-flex;align-items:center;gap:9px;border:0;font:700 14.5px var(--sans);padding:14px 20px;border-radius:50px;box-shadow:var(--shadow);transition:.3s;cursor:pointer}
.fab .call{background:var(--call);color:#fff}.fab .call:hover{transform:translateY(-2px) scale(1.03)}
.fab .ai{background:var(--navy);color:#fff;font-weight:600}.fab .ai:hover{background:var(--steel)}
.fab svg{width:19px;height:19px}
.mbar{display:none;position:fixed;left:0;right:0;bottom:0;z-index:860;background:var(--navy);border-top:1px solid rgba(255,255,255,.12);padding:8px;gap:8px}
.mbar a{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;padding:14px;border-radius:14px;background:var(--gold);color:var(--navy);font:700 15px var(--sans)}
.mbar a svg{stroke:var(--navy)}
.mbar a.txt{flex:0 0 34%;background:rgba(255,255,255,.16);color:#fff}
.mbar a.txt svg{stroke:#fff}
.mbar svg{width:19px;height:19px;fill:none;stroke-width:2}
/* chatbot */
.ai-panel{position:fixed;right:20px;bottom:20px;width:min(400px,calc(100vw - 32px));height:min(620px,calc(100vh - 40px));z-index:950;background:var(--cream);border-radius:24px;box-shadow:0 40px 90px -30px rgba(5,13,26,.62);display:flex;flex-direction:column;overflow:hidden;transform:translateY(30px) scale(.96);opacity:0;pointer-events:none;transition:.35s cubic-bezier(.16,1,.3,1);border:1px solid var(--line)}
.ai-panel.open{transform:none;opacity:1;pointer-events:auto}
.ai-head{background:linear-gradient(135deg,var(--navy),var(--steel));color:#fff;padding:16px 18px;display:flex;align-items:center;gap:12px}
.ai-head .av{width:40px;height:40px;border-radius:50%;background:rgba(255,255,255,.15);display:grid;place-items:center;font-size:20px}
.ai-head b{font-family:var(--serif);font-size:17px;display:block}.ai-head small{color:rgba(255,255,255,.82);font-size:12px;display:flex;align-items:center;gap:6px}
.ai-head .live{width:7px;height:7px;border-radius:50%;background:var(--gold2);animation:live 2s infinite}
.ai-head .x{margin-left:auto;background:rgba(255,255,255,.15);border:0;color:#fff;width:32px;height:32px;border-radius:50%;cursor:pointer;font-size:18px}
.ai-body{flex:1;overflow-y:auto;padding:18px;display:flex;flex-direction:column;gap:11px}
.msg{max-width:86%;padding:12px 15px;border-radius:16px;font-size:14.5px;line-height:1.5;animation:rise .4s both}
.msg.bot{background:#fff;border:1px solid var(--line);border-bottom-left-radius:5px;align-self:flex-start}
.msg.me{background:var(--navy);color:var(--cream);border-bottom-right-radius:5px;align-self:flex-end}
.msg.bot b{color:var(--navy)}.msg.bot a{color:var(--call);text-decoration:underline;font-weight:700}
.chips-row{display:flex;flex-wrap:wrap;gap:8px;padding:0 18px 10px}
.chips-row button{background:rgba(30,78,140,.1);border:1px solid var(--line);color:var(--navy);font:600 12.5px var(--sans);padding:8px 12px;border-radius:30px;cursor:pointer;transition:.25s}
.chips-row button:hover{background:var(--navy);color:#fff}
.ai-cta{padding:0 18px 10px}.ai-cta a{display:block;text-align:center;background:var(--call);color:#fff;font:700 14px var(--sans);padding:12px;border-radius:12px}
.ai-input{display:flex;gap:8px;padding:12px 14px 14px;border-top:1px solid var(--line);background:#fff}
.ai-input input{flex:1;border:1px solid var(--line);border-radius:30px;padding:12px 16px;font:400 14.5px var(--sans);background:var(--paper)}
.ai-input input:focus{outline:none;border-color:var(--steel)}
.ai-input .send{border:0;border-radius:50%;width:44px;height:44px;flex:0 0 44px;cursor:pointer;display:grid;place-items:center;background:var(--gold);color:var(--navy)}
.ai-input .send svg{width:20px;height:20px}
.typing{display:flex;gap:4px;padding:6px 2px}.typing i{width:7px;height:7px;border-radius:50%;background:var(--steel);animation:typ 1.2s infinite}
.typing i:nth-child(2){animation-delay:.2s}.typing i:nth-child(3){animation-delay:.4s}
/* review modal */
.rev-ov{position:fixed;inset:0;z-index:980;background:linear-gradient(165deg,#050D1A,#0A1F3C 60%,#123863);display:none;align-items:center;justify-content:center;padding:26px;overflow:auto}
.rev-ov.open{display:flex;animation:rise .3s both}
.rev-ov .lbx{position:absolute;top:18px;right:26px;color:#fff;font-size:38px;line-height:1;cursor:pointer;opacity:.85;z-index:2}
.gate{max-width:600px;margin-inline:auto;text-align:center;background:#fff;border:1px solid var(--line);border-radius:28px;padding:clamp(34px,5vw,54px);box-shadow:var(--shadow)}
.gate h2{font-size:clamp(28px,4vw,40px);color:var(--navy)}.gate .lead{color:var(--muted);margin:12px 0 28px;font-size:17px}
.stars-pick{display:flex;justify-content:center;gap:10px;font-size:clamp(40px,7vw,58px);line-height:1}
.stars-pick span{cursor:pointer;color:#dfe3ea;transition:transform .15s,color .15s;user-select:none}
.stars-pick span:hover{transform:scale(1.16)}.stars-pick span.on{color:var(--gold)}
.gate .hint{margin-top:16px;color:var(--muted);font-size:14px;min-height:20px}
.fb{margin-top:24px;text-align:left;display:none}.fb.show{display:block;animation:rise .5s both}
.fb h3{font-size:22px;color:var(--navy);text-align:center;margin-bottom:6px}.fb p.note{text-align:center;color:var(--muted);font-size:14px;margin-bottom:18px}
.field{margin-bottom:14px}.field label{font:600 13px var(--sans);color:var(--navy);display:block;margin-bottom:6px}
.field input,.field textarea{width:100%;padding:13px 15px;border:1px solid var(--line);border-radius:12px;font:400 15px var(--sans);background:var(--paper);color:var(--text)}
.field input:focus,.field textarea:focus{outline:none;border-color:var(--steel);background:#fff;box-shadow:0 0 0 4px rgba(30,78,140,.12)}
.field textarea{min-height:110px;resize:vertical}
.thanks{display:none;text-align:center;padding:18px 0}.thanks.show{display:block;animation:rise .5s both}
.thanks .big{font-size:52px}.thanks h3{color:var(--navy);font-size:26px;margin:10px 0}.thanks p{color:var(--muted)}
/* animations */
@keyframes rise{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:none}}
@keyframes scrollx{to{transform:translateX(-50%)}}
@keyframes live{0%{box-shadow:0 0 0 0 rgba(243,201,105,.7)}70%{box-shadow:0 0 0 8px transparent}100%{box-shadow:0 0 0 0 transparent}}
@keyframes typ{0%,60%,100%{transform:translateY(0);opacity:.4}30%{transform:translateY(-5px);opacity:1}}
/* responsive */
@media(max-width:980px){.svc-grid,.tcards,.steps,.tiers,.area-grid{grid-template-columns:1fr 1fr}.stats{grid-template-columns:1fr 1fr;gap:32px}.split,.contact-grid{grid-template-columns:1fr;gap:36px}.fgrid{grid-template-columns:1fr 1fr}}
@media(max-width:680px){
 .navlinks{position:fixed;inset:0 0 0 auto;width:80%;max-width:320px;background:var(--navy);flex-direction:column;justify-content:center;padding:40px;transform:translateX(100%);transition:.4s;align-items:stretch}
 .navlinks.open{transform:none}.navlinks a{color:#fff;font-size:18px;padding:14px}.navlinks a.cta{margin-left:0;text-align:center;justify-content:center}
 .nav-call-sm{display:flex}.burger{display:flex;z-index:5}header.nav.scrolled .burger span{background:#fff}
 .svc-grid,.tcards,.steps,.tiers,.area-grid,.gallery,.fgrid{grid-template-columns:1fr}
 .stats{grid-template-columns:1fr 1fr;gap:24px}.trust-strip{gap:14px}
 .fab{right:14px;bottom:74px}.fab a span,.fab button span{display:none}.fab a,.fab button{padding:15px;border-radius:50%}
 .mbar{display:flex}.ai-panel{bottom:74px;height:min(560px,calc(100vh - 96px))}
 body{padding-bottom:0}}
/* Text the Team (GHL placeholder) */
.fab .tt{background:var(--navy);color:#fff;font-weight:600}
.fab .tt:hover{background:var(--steel)}
.tt-body{flex:1;overflow-y:auto;padding:20px;display:flex;flex-direction:column;gap:12px}
.tt-body .tt-intro{color:var(--muted);font-size:14.5px}
.tt-body .field{margin-bottom:8px}
.tt-note{font-size:12px;color:var(--muted);text-align:center;margin-top:4px}
.tt-ok{display:none;text-align:center;padding:18px}
.tt-ok.show{display:block;animation:rise .4s both}
.tt-ok .big{font-size:46px}.tt-ok h3{color:var(--navy);margin:8px 0 6px}.tt-ok p{color:var(--muted)}
/* legal pages (privacy, terms) */
.legal{max-width:760px;margin-inline:auto}
.legal h2{font-size:26px;color:var(--navy);margin:36px 0 12px}
.legal h3{font-size:19px;color:var(--navy);margin:24px 0 8px}
.legal p,.legal li{color:#3A4657;font-size:16px;margin-bottom:12px}
.legal ul{padding-left:22px;margin-bottom:16px}
.legal .updated{color:#4A5568;font-size:14px;font-style:italic}
.consent-note{font-size:13.5px;color:#4A5568;line-height:1.55;background:rgba(10,31,60,.04);
  border:1px solid var(--line);border-radius:14px;padding:16px 18px;margin:18px 0}
.consent-note a{text-decoration:underline}
/* FAQ hub */
.faq-cat{margin-bottom:48px}
.faq-cat>h2{font-size:clamp(24px,3.4vw,32px);color:var(--navy);margin-bottom:6px}
.faq-cat>p{color:var(--muted);font-size:16px;margin-bottom:18px}
.faq-jump{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:44px}
.faq-jump a{padding:10px 16px;border-radius:30px;background:#fff;border:1px solid var(--line);
  font:600 13.5px var(--sans);color:var(--navy);transition:.25s}
.faq-jump a:hover{background:var(--navy);color:#fff;transform:translateY(-2px)}
.faq-more{text-align:center;margin-top:30px}
.faq-more a{font:600 15px var(--sans);color:#8A6212;border-bottom:2px solid var(--gold)}
.faq-more a:hover{color:var(--navy)}

/* ── Mobile density ────────────────────────────────────────────────
   The homepage measured 15.3 screens tall on a 390px viewport, most of it
   whitespace and single-column grids. This compacts spacing and puts the
   image-led grids into two columns on phones. No content is removed. */
@media(max-width:680px){
  .pad{padding:52px 0}
  .sec-head{margin-bottom:30px}
  .sec-head p{font-size:16px;margin-top:12px}
  .sec-head h2{font-size:clamp(26px,7vw,34px)}

  /* image-led grids read fine two-up on a phone */
  .gallery{grid-template-columns:1fr 1fr;gap:11px}
  .area-grid{grid-template-columns:1fr 1fr;gap:12px}
  .area-card .ac-b{padding:14px 14px 18px}
  .area-card h3{font-size:17px}
  .area-card p{font-size:13px;margin-bottom:10px}
  .area-card .btn{padding:9px 13px!important;font-size:12.5px!important}

  /* service cards stay one-up but much tighter */
  .card-b{padding:20px 20px 22px}
  .ico{width:46px;height:46px;border-radius:13px;margin-bottom:12px}
  .ico svg{width:24px;height:24px}
  .card h3{font-size:19px;margin-bottom:6px}
  .card p{font-size:14.5px}

  .steps{gap:14px}
  .step{padding:24px 22px}
  .step::before{font-size:34px}
  .tcard{padding:24px;gap:11px}
  .tcard p{font-size:14.5px}
  .stats{padding:32px 24px;gap:22px}
  .split{gap:28px}
  .values{gap:9px;margin-top:20px}
  .values span{padding:8px 14px;font-size:12.5px}
  .contact-grid{gap:28px}
  .call-card{padding:28px 24px}
  .cline{padding:12px 0}
  .callband{padding:56px 0}
  .marquee{padding:12px 0}
  .marquee .track{font-size:17px}
}
/* contact: four detail lines two-up (the duplicate call card was removed —
   the .callband section directly above already carries that CTA) */
#contact .cinfo{max-width:none}
.clines{display:grid;grid-template-columns:1fr 1fr;gap:0 40px}
@media(max-width:680px){.clines{grid-template-columns:1fr;gap:0}}
/* Two-up card grids on phones. These cards are icon + heading + one line, so
   they read fine at ~180px wide and it halves the tallest sections. */
@media(max-width:680px){
  .svc-grid{grid-template-columns:1fr 1fr;gap:12px}
  .svc-grid .card-b{padding:16px 15px 18px}
  .svc-grid .ico{width:40px;height:40px;border-radius:11px;margin-bottom:10px;border-width:2px}
  .svc-grid .ico svg{width:21px;height:21px}
  .svc-grid .card h3{font-size:15.5px;line-height:1.2;margin-bottom:5px}
  .svc-grid .card p{font-size:13px;line-height:1.45}
  .svc-grid .card .more{font-size:12.5px;margin-top:11px;min-height:0}

  .steps{grid-template-columns:1fr 1fr;gap:12px}
  .steps .step{padding:18px 16px}
  .steps .step::before{font-size:28px}
  .steps .step h3{font-size:16px;margin:4px 0 6px}
  .steps .step p{font-size:13px}
  .steps .step:last-child{grid-column:1 / -1}

  .tcards{grid-template-columns:1fr;gap:12px}
  .tcard{padding:20px}
  .tcard p{font-size:14px}
  .tcard .av{width:36px;height:36px}
}
/* brand lockup must stay on one line — it was wrapping to two on 390px phones
   and making the nav pill twice as tall */
.brand .brandtext{white-space:nowrap}
@media(max-width:520px){
  .brand .brandtext{font-size:16px}
  .brand .logo{width:38px;height:38px;flex:0 0 38px}
  .navbar{padding:6px 10px 6px 12px;gap:10px}
}
@media(max-width:380px){.brand .brandtext{font-size:15px}}
/* inline review gate on /reviews (the .gate card is reused from the overlay) */
#reviewInline .gate{max-width:620px;margin-inline:auto}
#reviewInline .gate h2{font-size:clamp(26px,4vw,38px)}
/* 5-star step in the review gate (mirrors .thanks) */
.five{display:none;text-align:center;padding:18px 0}
.five.show{display:block;animation:rise .5s both}
.five .big{font-size:52px}
.five h3{color:var(--navy);font-size:26px;margin:10px 0}
.five p{color:#4A5568}
/* stars are keyboard-operable now, so they need a visible focus ring */
.stars-pick span:focus-visible{outline:3px solid var(--steel);outline-offset:4px;border-radius:6px}
/* GoHighLevel / Manta form + survey embeds */
.ghl-embed{max-width:640px;margin:0 auto;background:#fff;border:1px solid var(--line);
  border-radius:18px;box-shadow:var(--shadow);padding:10px;overflow:hidden}
.ghl-embed iframe{display:block;width:100%;border:0;border-radius:14px;min-height:560px}
@media(max-width:680px){.ghl-embed{padding:6px;border-radius:14px}}

/* ====================================================================
   MOBILE OPTIMISATION PASS
   Research-backed: one persistent action set on mobile, never two.
   The floating FAB was duplicating the sticky bar's Call/Text and
   overlapping content on every screen. Keep the full-width sticky bar
   (thumb-reachable, never covers content once we reserve space) and
   drop the FAB below 680px.
   ==================================================================== */
@media(max-width:680px){
  /* --- one set of floating actions: the sticky bar only --- */
  .fab{display:none!important}
  /* reserve room so the sticky bar can never hide the last row of content */
  body{padding-bottom:72px!important}
  .mbar{padding:8px 8px calc(8px + env(safe-area-inset-bottom));gap:8px}
  .ai-panel{bottom:80px;height:min(560px,calc(100dvh - 150px))}

  /* --- hero: kill the dead space, sit content just under the nav --- */
  .hero{min-height:auto;align-items:flex-start}
  .hero-inner{padding:104px 26px 44px}
  .hero .eyebrow{font-size:11px;letter-spacing:.13em}
  .hero h1{font-size:clamp(38px,11.5vw,54px);margin-top:12px}
  .hero .sub{font-size:16.5px;line-height:1.5;margin:16px 0 24px}
  .hero-cta{gap:11px}
  .hero-cta .btn{width:100%;justify-content:center}
  .trust-strip{margin-top:26px;padding-top:18px;gap:11px 18px}
  .trust-strip .ti{font-size:12.5px;gap:7px}

  /* --- interior page heroes get the same treatment --- */
  .page-hero{padding:104px 0 44px}
  .page-hero .hero-cta .btn{width:100%;justify-content:center}

  /* --- marquee: it was oversized and clipping --- */
  .marquee{padding:11px 0}
  .marquee .track{font-size:16px;gap:28px}
  .marquee .track span{gap:28px}

  /* --- callband / big number scale down --- */
  .callband .big-num{font-size:clamp(30px,9vw,44px)}
  .callband .cbtns{flex-direction:column;gap:10px}
  .callband .cbtns .btn{width:100%;justify-content:center}
}

/* very small phones */
@media(max-width:380px){
  .hero h1{font-size:34px}
  .trust-strip .ti{font-size:12px}
}

/* review survey extras */
.hp{position:absolute!important;left:-9999px!important;width:1px;height:1px;opacity:0;pointer-events:none}
.fb-rating-show{color:var(--gold-deep);font-weight:700;font-size:15px;margin-bottom:10px;letter-spacing:2px}
.fb select{width:100%;padding:13px 15px;border:1px solid var(--line);border-radius:12px;
  font:400 15px var(--sans);background:var(--paper);color:var(--text)}
.fb select:focus{outline:none;border-color:var(--steel);background:#fff;box-shadow:0 0 0 4px rgba(30,78,140,.12)}

/* ====================================================================
   MOBILE NAV MENU FIX
   The .navbar's backdrop-filter created a containing block, so the
   fixed slide-out menu was confined to the 80px pill and its links
   spilled across the hero. Dropping the blur on mobile makes the menu
   position against the viewport (full height), as intended.
   ==================================================================== */
@media(max-width:680px){
  header.nav .navbar,
  header.nav.scrolled .navbar{backdrop-filter:none;-webkit-backdrop-filter:none}
  /* Without the blur to frost it, the translucent scrolled bar let light page
     content show through and read as see-through. Make it solid on mobile only
     (desktop keeps the frosted glass). The top/hero state stays translucent —
     it always sits over the dark hero. */
  header.nav.scrolled .navbar{background:#fff}

  /* full-height slide-out panel, clean spacing, above everything */
  .navlinks{
    inset:0 0 0 auto;width:min(84vw,330px);z-index:1000;
    padding:calc(env(safe-area-inset-top) + 84px) 26px 32px;
    justify-content:flex-start;gap:4px;
    box-shadow:-18px 0 50px -20px rgba(0,0,0,.6);overflow-y:auto;
  }
  .navlinks a{font-size:17px;padding:15px 16px;border-radius:12px}
  .navlinks a:not(.cta){border-bottom:1px solid rgba(255,255,255,.08)}
  .navlinks a.cta{margin-top:16px;padding:15px 16px;justify-content:center;font-size:16px}
  .navlinks a.cta svg{width:18px;height:18px}

  /* dim the page behind the open menu, and lift the burger above the panel */
  .burger{z-index:1001;position:relative}
  header.nav::after{content:"";position:fixed;inset:0;background:rgba(5,13,26,.5);
    opacity:0;visibility:hidden;transition:.3s;z-index:999}
  header.nav.menu-open::after{opacity:1;visibility:visible}

  /* burger animates to an X when open */
  header.nav.menu-open .burger span:nth-child(1){transform:translateY(7px) rotate(45deg)}
  header.nav.menu-open .burger span:nth-child(2){opacity:0}
  header.nav.menu-open .burger span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
  header.nav.menu-open .burger span{background:#fff!important}
}

/* announcement bar (managed from /admin) */
.announce-bar{position:relative;z-index:940;background:linear-gradient(90deg,var(--navy),var(--steel));
  color:#fff;text-align:center;font:600 13.5px var(--sans);padding:10px 44px 10px 20px;display:flex;
  align-items:center;justify-content:center;gap:10px}
.announce-bar a{color:var(--gold2);text-decoration:underline}
.announce-x{position:absolute;right:12px;top:50%;transform:translateY(-50%);background:none;border:0;
  color:#fff;font-size:22px;line-height:1;cursor:pointer;opacity:.8;padding:4px 8px}
.announce-x:hover{opacity:1}
/* when the bar shows, push the fixed nav down so it doesn't overlap */
body.has-announce header.nav{top:40px}

/* ---------- before/after transformations (Transformations page + homepage) ---------- */
.cmp-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:22px}
.cmp{position:relative;overflow:hidden;border-radius:16px;border:1px solid var(--line);background:var(--navy);aspect-ratio:4/3;touch-action:pan-y}
.cmp-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;pointer-events:none;user-select:none;-webkit-user-drag:none}
.cmp-before{clip-path:inset(0 calc(100% - var(--pos,50%)) 0 0)}
.cmp-divider{position:absolute;top:0;bottom:0;left:var(--pos,50%);width:2px;background:var(--gold2);transform:translateX(-1px);z-index:3;pointer-events:none}
.cmp-handle{position:absolute;top:50%;left:50%;width:46px;height:46px;transform:translate(-50%,-50%);border-radius:50%;background:var(--gold);border:3px solid #fff;box-shadow:0 6px 20px rgba(5,13,26,.4);display:grid;place-items:center}
.cmp-handle::before{content:"‹ ›";font:700 15px var(--sans);color:var(--navy);letter-spacing:1px}
.cmp-tag{position:absolute;top:12px;z-index:2;font:700 11px/1 var(--sans);letter-spacing:.12em;text-transform:uppercase;color:#fff;background:rgba(5,13,26,.55);padding:6px 10px;border-radius:30px;pointer-events:none}
.cmp-tag--b{left:12px}
.cmp-tag--a{right:12px;background:rgba(224,169,59,.92);color:var(--navy)}
.cmp-range{position:absolute;inset:0;width:100%;height:100%;margin:0;padding:0;opacity:0;cursor:ew-resize;z-index:4;-webkit-appearance:none;appearance:none;background:transparent}
.cmp-range::-webkit-slider-thumb{-webkit-appearance:none;width:46px;height:100%}
.cmp-range::-moz-range-thumb{width:46px;height:100%;border:0;background:transparent}
.cmp-range:focus{outline:none}
/* Order-independent focus ring: the divider precedes the range in the DOM, so a
   sibling combinator can't reach it — scope from the card with :has() instead. */
.cmp:has(.cmp-range:focus-visible) .cmp-handle{outline:3px solid var(--gold2);outline-offset:3px}
.cmp-cap{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:30px 18px 14px;color:#fff;font:600 15px var(--sans);background:linear-gradient(transparent,rgba(5,13,26,.85));pointer-events:none}
.cmp-cap small{display:block;color:var(--gold2);font-weight:600;font-size:11px;letter-spacing:.12em;text-transform:uppercase;margin-bottom:3px}
.cmp-empty{text-align:center;color:var(--muted);max-width:560px;margin:10px auto;font-size:17px}
/* single-photo cards sit in the same grid as the before/after sliders — keep
   them the same 4:3 shape so rows line up */
.cmp-grid .gitem{aspect-ratio:4/3}
.cmp-grid .gitem img{aspect-ratio:4/3}
@media(max-width:720px){.cmp-grid{grid-template-columns:1fr;gap:16px}}
