@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Manrope:wght@500;600;700;800&display=swap');
:root{--ink:#10251e;--green:#0f3b2d;--green2:#174f3b;--cream:#f5f2ea;--sand:#ddd3c5;--mint:#ccefdc;--line:rgba(16,37,30,.14);--white:#fff;--max:1180px}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--cream);color:var(--ink);font-family:'DM Sans',sans-serif;line-height:1.55}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}.container{width:min(calc(100% - 48px),var(--max));margin:auto}.eyebrow{font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;font-weight:700;opacity:.65}.display{font-family:Manrope,sans-serif;font-size:clamp(3rem,7vw,6.8rem);line-height:.94;letter-spacing:-.065em;margin:0}.h1{font-family:Manrope,sans-serif;font-size:clamp(2.6rem,5vw,5rem);line-height:.98;letter-spacing:-.05em;margin:0}.h2{font-family:Manrope,sans-serif;font-size:clamp(2rem,3.5vw,3.6rem);line-height:1.02;letter-spacing:-.045em;margin:0}.h3{font-family:Manrope,sans-serif;font-size:1.35rem;line-height:1.1;margin:0 0 10px}.muted{opacity:.7}.btn{display:inline-flex;align-items:center;gap:10px;border:1px solid var(--ink);padding:13px 18px;border-radius:999px;font-weight:700;font-size:.86rem;transition:.25s ease}.btn:hover{background:var(--green);color:white;border-color:var(--green);transform:translateY(-2px)}.btn.dark{background:var(--green);border-color:var(--green);color:white}.btn.light{background:white;border-color:white;color:var(--green)}.arrow{font-size:1rem}.site-header{position:sticky;top:0;z-index:50;background:rgba(245,242,234,.9);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}.nav{height:74px;display:flex;align-items:center;justify-content:space-between;gap:24px}.logo{display:flex;align-items:center;width:165px;height:44px;flex:0 0 auto}.logo img{display:block;width:100%;height:100%;object-fit:contain;object-position:left center}.footer .logo img{filter:invert(1);opacity:.95}.logo span{font-weight:500;opacity:.45}.nav-links{display:flex;align-items:center;gap:28px;font-size:.83rem;font-weight:600}.nav-links a{opacity:.72}.nav-links a:hover,.nav-links a.active{opacity:1}.menu-btn{display:none;background:none;border:0;font-size:1.5rem}.hero{padding:84px 0 54px}.hero-grid{display:grid;grid-template-columns:1.05fr .95fr;gap:64px;align-items:end}.hero-copy p{max-width:590px;font-size:1.02rem;margin:28px 0}.hero-art{position:relative;min-height:570px}.hero-art img{height:570px;width:100%;object-fit:cover;border-radius:28px}.hero-note{position:absolute;left:-22px;bottom:22px;background:var(--green);color:white;padding:20px 22px;border-radius:18px;max-width:250px}.hero-note strong{font:800 2.1rem Manrope;letter-spacing:-.05em}.ticker{background:var(--green);color:white;overflow:hidden;border-block:1px solid rgba(255,255,255,.1)}.ticker-inner{display:flex;gap:42px;white-space:nowrap;padding:11px 0;font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;opacity:.9}.section{padding:110px 0}.section.soft{background:#ebe8df}.section.dark{background:var(--green);color:white}.section-head{display:grid;grid-template-columns:.7fr 1.3fr;gap:50px;align-items:start;margin-bottom:50px}.section-head p{max-width:650px;margin:0;font-size:1rem}.split{display:grid;grid-template-columns:1fr 1fr;gap:70px;align-items:center}.image-card{border-radius:28px;overflow:hidden;background:#ddd}.image-card img{width:100%;height:100%;object-fit:cover;min-height:420px}.copy p{font-size:1rem}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.card{background:white;border:1px solid var(--line);border-radius:22px;padding:24px;min-height:190px}.card.dark{background:#174f3b;color:white;border-color:rgba(255,255,255,.14)}.card .num{font:800 2.5rem Manrope;letter-spacing:-.06em;margin-bottom:20px}.card p{margin:0;font-size:.92rem;opacity:.78}.icon{width:42px;height:42px;border:1px solid var(--line);border-radius:50%;display:grid;place-items:center;margin-bottom:28px;font-size:1rem}.feature-list{display:grid;grid-template-columns:1fr 1fr;gap:16px}.feature{padding:22px 0;border-top:1px solid var(--line);font-size:1rem}.feature strong{display:block;margin-bottom:5px}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.stat{padding:32px;border-radius:24px;background:white}.stat b{display:block;font:800 clamp(2.5rem,5vw,4.7rem) Manrope;letter-spacing:-.07em}.stat span{opacity:.68}.gallery{display:grid;grid-template-columns:1.25fr .75fr;gap:14px}.gallery .big{grid-row:span 2}.gallery figure{margin:0;position:relative;overflow:hidden;border-radius:24px;min-height:250px}.gallery img{width:100%;height:100%;object-fit:cover}.gallery figcaption{position:absolute;left:14px;bottom:14px;background:rgba(16,37,30,.88);color:white;padding:9px 12px;border-radius:999px;font-size:.72rem}.quote{font-family:Manrope;font-size:clamp(1.8rem,3.5vw,3.5rem);line-height:1.08;letter-spacing:-.04em;max-width:950px}.process{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.process .card{min-height:210px}.cta{padding:90px 0}.cta-box{border-radius:30px;background:var(--green);color:white;padding:60px;display:grid;grid-template-columns:1fr auto;gap:40px;align-items:end}.cta-box p{max-width:620px;opacity:.75}.faq{max-width:900px;margin:auto}.faq-item{border-top:1px solid var(--line)}.faq-q{width:100%;background:none;border:0;padding:22px 0;text-align:left;font:600 1rem 'DM Sans';color:inherit;display:flex;justify-content:space-between;cursor:pointer}.faq-a{display:none;padding:0 40px 22px 0;opacity:.72}.faq-item.open .faq-a{display:block}.contact-grid{display:grid;grid-template-columns:1fr .9fr;gap:30px;align-items:stretch}.contact-card{background:white;border:1px solid var(--line);border-radius:24px;padding:34px}.contact-line{display:flex;gap:14px;align-items:flex-start;padding:16px 0;border-bottom:1px solid var(--line)}.contact-line:last-child{border:0}.footer{background:#0b2d23;color:white;padding:70px 0 26px}.footer-grid{display:grid;grid-template-columns:1.2fr 1fr 1fr 1fr;gap:30px}.footer a{opacity:.7}.footer a:hover{opacity:1}.footer small{display:block;margin-top:70px;opacity:.45;border-top:1px solid rgba(255,255,255,.12);padding-top:18px}.page-hero{padding:95px 0 60px}.page-hero-grid{display:grid;grid-template-columns:1fr .85fr;gap:60px;align-items:end}.page-hero p{max-width:620px;font-size:1.03rem}.service-band{padding:80px 0}.service-title{display:flex;justify-content:space-between;align-items:end;gap:30px;margin-bottom:38px}.service-title p{max-width:540px;margin:0}.notice{padding:18px 20px;background:var(--mint);border-radius:14px;font-size:.86rem}.mobile-only{display:none}
@media(max-width:900px){.nav-links{display:none}.menu-btn{display:block}.mobile-only{display:block}.hero-grid,.split,.section-head,.page-hero-grid,.contact-grid,.cta-box{grid-template-columns:1fr}.hero-art{min-height:420px}.hero-art img{height:420px}.hero{padding-top:55px}.section{padding:78px 0}.grid-4{grid-template-columns:1fr 1fr}.grid-3{grid-template-columns:1fr}.stats{grid-template-columns:1fr}.process{grid-template-columns:1fr 1fr}.gallery{grid-template-columns:1fr}.gallery .big{grid-row:auto}.feature-list{grid-template-columns:1fr}.footer-grid{grid-template-columns:1fr 1fr}.cta-box{align-items:start}.nav{height:66px}}
@media(max-width:560px){.container{width:min(calc(100% - 30px),var(--max))}.display{font-size:3.15rem}.h1{font-size:2.65rem}.h2{font-size:2.1rem}.hero{padding:42px 0 32px}.hero-art{min-height:330px}.hero-art img{height:330px;border-radius:20px}.hero-note{left:12px;bottom:12px}.grid-4,.process{grid-template-columns:1fr}.card{min-height:auto}.section{padding:65px 0}.footer-grid{grid-template-columns:1fr}.cta-box{padding:34px 26px}.page-hero{padding:62px 0 35px}.image-card img{min-height:300px}}
.mobile-panel{display:none;border-top:1px solid var(--line);padding:10px 0 18px}.mobile-panel a{display:block;padding:11px 0;font-weight:600}.mobile-panel.show{display:block}

/* Service enquiry forms */
.service-form-section{background:var(--cream)}
.service-form{background:white;border:1px solid var(--line);border-radius:30px;padding:42px;box-shadow:0 18px 55px rgba(16,37,30,.07)}
.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.form-field{display:flex;flex-direction:column;gap:8px}
.form-field.full{grid-column:1/-1}
.form-field label{font-size:.78rem;font-weight:700;letter-spacing:.02em}
.form-field input,.form-field select,.form-field textarea{width:100%;border:1px solid rgba(16,37,30,.18);background:#fbfaf6;border-radius:12px;padding:13px 14px;font:inherit;color:var(--ink);outline:none;transition:.2s ease}
.form-field input:focus,.form-field select:focus,.form-field textarea:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(15,59,45,.08);background:#fff}
.form-field textarea{min-height:135px;resize:vertical}
.form-help{font-size:.78rem;opacity:.6;margin:0}
.form-actions{display:flex;align-items:center;justify-content:space-between;gap:20px;margin-top:24px}
.form-note{font-size:.76rem;opacity:.62;max-width:560px}
.service-form .check-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:9px 16px}
.check{display:flex;align-items:flex-start;gap:9px;font-size:.86rem;padding:8px 0}
.check input{margin-top:4px;accent-color:var(--green)}
.form-success{display:none;padding:16px;border-radius:14px;background:var(--mint);font-size:.9rem;margin-top:18px}
.form-success.show{display:block}
/* Service animations */
.wifi-visual{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:20px}
.wifi-state{position:relative;min-height:260px;border-radius:24px;overflow:hidden;border:1px solid var(--line);padding:22px;background:#fff}
.wifi-state h3{position:relative;z-index:2}
.wifi-state .signal{position:absolute;left:50%;top:56%;width:150px;height:150px;transform:translate(-50%,-50%)}
.signal i{position:absolute;inset:0;border:3px solid var(--green);border-radius:50%;opacity:0;animation:ping 2.5s infinite}
.signal i:nth-child(2){animation-delay:.45s}.signal i:nth-child(3){animation-delay:.9s}
.bad-wifi .signal{filter:grayscale(1);transform:translate(-50%,-50%) rotate(-10deg)}
.bad-wifi .signal i{border-color:#7a6858;animation:badping 3s infinite}
.bad-wifi .signal:after{content:'×';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font:800 3.5rem Manrope;opacity:.7}
.good-wifi .signal:after{content:'⌁';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);font:800 4rem Manrope;color:var(--green)}
.wifi-device{position:absolute;left:50%;bottom:24px;transform:translateX(-50%);width:72px;height:38px;border:2px solid var(--ink);border-radius:20px 20px 8px 8px;background:var(--cream)}
.wifi-device:before{content:'';position:absolute;width:7px;height:7px;border-radius:50%;background:var(--green);left:50%;top:10px;transform:translateX(-50%);box-shadow:18px 0 0 rgba(15,59,45,.28),-18px 0 0 rgba(15,59,45,.28)}
.bad-wifi .wifi-device:before{background:#8b5d47;box-shadow:18px 0 0 rgba(139,93,71,.2),-18px 0 0 rgba(139,93,71,.2)}
@keyframes ping{0%{transform:scale(.25);opacity:0}25%{opacity:.8}100%{transform:scale(1);opacity:0}}
@keyframes badping{0%,100%{transform:scale(.75);opacity:.15}45%{transform:scale(1);opacity:.45}55%{transform:scale(.72);opacity:.1}}
.cctv-stage{position:relative;height:330px;border-radius:26px;background:#0b2d23;overflow:hidden;margin-top:26px;border:1px solid rgba(255,255,255,.12)}
.camera-feed{position:absolute;inset:20px;display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.feed{position:relative;border:1px solid rgba(255,255,255,.16);border-radius:12px;overflow:hidden;background:linear-gradient(135deg,#29463b,#142820);animation:feedPulse 3.5s ease-in-out infinite}
.feed:nth-child(2){animation-delay:.5s}.feed:nth-child(3){animation-delay:1s}.feed:nth-child(4){animation-delay:1.5s}
.feed:before{content:'';position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0 6px,rgba(255,255,255,.045) 7px 8px);opacity:.45}
.feed span{position:absolute;left:10px;top:8px;color:white;font-size:.62rem;letter-spacing:.1em;text-transform:uppercase;opacity:.8}
.feed b{position:absolute;right:10px;top:8px;width:7px;height:7px;border-radius:50%;background:#d9f4e2;animation:record 1.2s infinite}
.cctv-lock{position:absolute;right:26px;bottom:20px;background:white;color:var(--green);border-radius:999px;padding:8px 13px;font-size:.72rem;font-weight:800;box-shadow:0 8px 25px rgba(0,0,0,.2)}
@keyframes feedPulse{0%,100%{transform:scale(1);filter:brightness(.82)}50%{transform:scale(1.015);filter:brightness(1)}}
@keyframes record{50%{opacity:.25}}
.access-demo{position:relative;margin-top:30px;min-height:290px;border-radius:26px;overflow:hidden;background:#e7e2d8;border:1px solid var(--line);display:flex;align-items:center;justify-content:center}
.door-frame{position:relative;width:180px;height:235px;border:12px solid #17382d;border-bottom-width:16px;background:#274d3e;box-shadow:0 18px 40px rgba(16,37,30,.18);animation:doorGlow 3s ease-in-out infinite}
.door-panel{position:absolute;inset:14px;background:#173a2f;border:1px solid rgba(255,255,255,.16);transform-origin:left center;animation:doorOpen 5s ease-in-out infinite}
.door-handle{position:absolute;right:10px;top:50%;width:7px;height:30px;border-radius:5px;background:#ddd3c5}
.access-reader{position:absolute;right:calc(50% - 125px);top:50%;width:48px;height:72px;border-radius:10px;background:white;border:1px solid var(--line);transform:translateY(-50%);box-shadow:0 8px 25px rgba(16,37,30,.12);display:grid;place-items:center;font-size:1.2rem}
.access-reader:after{content:'✓';display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--mint);color:var(--green);font-weight:800;animation:reader 5s infinite}
@keyframes doorOpen{0%,25%{transform:perspective(700px) rotateY(0)}45%,70%{transform:perspective(700px) rotateY(-58deg)}90%,100%{transform:perspective(700px) rotateY(0)}}
@keyframes doorGlow{45%,70%{box-shadow:0 18px 50px rgba(15,59,45,.3)}}
@keyframes reader{0%,25%{transform:scale(.8);opacity:.45}35%,75%{transform:scale(1.08);opacity:1}100%{transform:scale(.8);opacity:.45}}
@media(max-width:700px){.form-grid,.wifi-visual{grid-template-columns:1fr}.service-form{padding:26px}.form-actions{align-items:flex-start;flex-direction:column}.service-form .check-grid{grid-template-columns:1fr}.cctv-stage{height:270px}.access-reader{right:20px}}

/* legal pages + spam trap */
.legal{max-width:760px}.legal h2{font-size:1.25rem;margin:34px 0 10px}.legal p,.legal li{line-height:1.7;opacity:.85}.legal ul{padding-left:1.2rem}.hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.footer small a{color:inherit;text-decoration:underline;opacity:.85}

/* fix: stat cards were white text on a white card */
.stat{color:var(--ink)}
.stat span{opacity:.75}
