/* ============================================================
   Media Pillars — portfolio hero visuals
   One animation per client page in /portfolio-items/, each drawn to
   match the client's trade. Loaded only on those pages, after
   hero-vis.css (shares .hv / .card / .badge / .glow and its keyframes).
   Markup lives in /assets/js/portfolio-vis.js. CSS-only, reduced-motion safe.
   ============================================================ */
@property --pvdeg{syntax:'<angle>';inherits:false;initial-value:40deg}
@keyframes pvSpin{to{transform:rotate(360deg)}}
@keyframes pvBob{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes pvWisp{0%{opacity:0;transform:translateY(0) scaleX(1)}30%{opacity:.8}100%{opacity:0;transform:translateY(-46px) translateX(6px) scaleX(1.6)}}
@keyframes pvBub{0%{transform:translateY(0);opacity:0}20%{opacity:.9}100%{transform:translateY(-110px);opacity:0}}
@keyframes pvBeat{0%,100%{transform:scale(1)}30%{transform:scale(1.25)}}
.hv .fan{position:relative;border-radius:50%;background:repeating-conic-gradient(from 0deg,#cbd5e1 0 22deg,transparent 22deg 90deg);animation:pvSpin 1.1s linear infinite}
.hv .fan::after{content:"";position:absolute;left:50%;top:50%;width:26%;height:26%;border-radius:50%;background:var(--neon);transform:translate(-50%,-50%);box-shadow:0 0 8px var(--neon)}
.hv .tick{flex:none;width:.85rem;height:.85rem;border-radius:50%;background:var(--good);color:#fff;font-style:normal;font-size:.55rem;display:grid;place-items:center;font-weight:800}
.hv .kv{display:block;font-size:.58rem;color:#9fb3cc;letter-spacing:.08em;text-transform:uppercase}

/* ---------- THERMO: Adirondack Heat Pumps — thermostat climbs, outdoor unit spins ---------- */
.hv-p-thermo .card.th{left:12%;top:4%;width:76%;height:62%;padding:.8rem;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem}
.hv-p-thermo .ring{position:relative;width:58%;aspect-ratio:1;border-radius:50%;background:conic-gradient(from 225deg,#f97316 var(--pvdeg),rgba(255,255,255,.08) 0 270deg,transparent 270deg);animation:pvRing 8s ease-in-out infinite;display:grid;place-items:center}
@keyframes pvRing{0%,8%{--pvdeg:40deg}45%,85%{--pvdeg:214deg}100%{--pvdeg:40deg}}
.hv-p-thermo .ring::before{content:"";position:absolute;inset:11%;border-radius:50%;background:var(--card)}
.hv-p-thermo .temp{position:relative;font-size:1.9rem;font-weight:800;line-height:1;text-align:center}
.hv-p-thermo .temp::after{content:"70°";animation:pvTemp 8s steps(1) infinite}
@keyframes pvTemp{0%{content:"58°"}10%{content:"61°"}20%{content:"64°"}30%{content:"67°"}45%,85%{content:"70°"}90%{content:"66°"}95%{content:"62°"}}
.hv-p-thermo .temp small{display:block;font-size:.56rem;font-weight:700;color:#f97316;letter-spacing:.1em;text-transform:uppercase;margin-top:.2rem}
.hv-p-thermo .th .kv{margin-top:.2rem}
.hv-p-thermo .card.unit{left:12%;bottom:6%;width:76%;height:24%;padding:.55rem .7rem;display:flex;align-items:center;gap:.7rem}
.hv-p-thermo .unit .fan{width:3rem;height:3rem;flex:none;border:2px solid var(--line)}
.hv-p-thermo .unit b{display:block;font-size:.8rem}.hv-p-thermo .unit small{color:#9fb3cc;font-size:.66rem}
.hv-p-thermo .out{margin-left:auto;text-align:right;font-size:.62rem;color:#9fb3cc;text-transform:uppercase;letter-spacing:.06em}.hv-p-thermo .out b{color:#8fd8ff;font-size:1.1rem;text-transform:none;letter-spacing:0}
.hv-p-thermo .wave{position:absolute;left:var(--x);bottom:31%;width:14px;height:7px;border:2px solid #f97316;border-color:#f97316 transparent transparent;border-radius:50% 50% 0 0;opacity:0;animation:pvWave 2.4s ease-out infinite;animation-delay:var(--t)}
@keyframes pvWave{0%{opacity:0;transform:translateY(0)}30%{opacity:.9}100%{opacity:0;transform:translateY(-30px)}}
.hv-p-thermo .badge{right:6%;top:6%;animation:hvPop .6s 3.6s ease both;background:#f97316;box-shadow:0 8px 20px rgba(249,115,22,.4)}

/* ---------- HEAT: Superior CO-OP HVAC — snow outside, warm windows, unit running ---------- */
.hv-p-heat .sky{position:absolute;inset:4%;border-radius:16px;background:linear-gradient(180deg,#0a1a3a,#12284d 70%,#e2e8f0 70%,#cbd5e1);overflow:hidden;border:1px solid var(--line)}
.hv-p-heat .house{position:absolute;left:10%;bottom:30%;width:44%;height:34%;background:#1e2f4d;border:1px solid var(--line)}
.hv-p-heat .roof{position:absolute;left:5%;bottom:63.5%;width:54%;height:17%;background:#33456b;clip-path:polygon(50% 0,100% 100%,0 100%)}
.hv-p-heat .chim{position:absolute;left:44%;bottom:72%;width:6%;height:12%;background:#33456b}
.hv-p-heat .smoke{position:absolute;left:45%;bottom:84%;width:8px;height:20px;border-radius:50%;background:rgba(255,255,255,.35);filter:blur(3px);opacity:0;animation:pvWisp 3.4s ease-out infinite;animation-delay:var(--t)}
.hv-p-heat .win{position:absolute;width:22%;height:30%;border-radius:3px;background:#f59e0b;box-shadow:0 0 14px rgba(251,191,36,.6);animation:pvWarm 4s ease-in-out infinite}
.hv-p-heat .win.a{left:12%;top:20%}.hv-p-heat .win.b{right:12%;top:20%;animation-delay:.6s}
.hv-p-heat .door{position:absolute;left:40%;bottom:0;width:20%;height:48%;background:#0b1426;border-radius:3px 3px 0 0}
@keyframes pvWarm{0%,100%{background:#f59e0b;box-shadow:0 0 10px rgba(251,191,36,.4)}50%{background:#fde68a;box-shadow:0 0 22px rgba(251,191,36,.9)}}
.hv-p-heat .unit{position:absolute;left:60%;bottom:30%;width:22%;height:20%;background:#c7cdd5;border-radius:4px;border:1px solid #94a3b8;display:grid;place-items:center}
.hv-p-heat .unit .fan{width:70%;aspect-ratio:1;background:repeating-conic-gradient(from 0deg,#334155 0 22deg,transparent 22deg 90deg);border:2px solid #64748b}
.hv-p-heat .unit .fan::after{background:#334155;box-shadow:none}
.hv-p-heat .line{position:absolute;left:54%;bottom:44%;width:6%;height:3px;background:#94a3b8}
.hv-p-heat .sn{position:absolute;top:-8%;left:var(--x);color:#fff;font-size:.8rem;opacity:.85;animation:pvSnow 7s linear infinite;animation-delay:var(--t)}
@keyframes pvSnow{0%{transform:translate(0,0) rotate(0)}100%{transform:translate(-10px,330px) rotate(180deg);opacity:0}}
.hv-p-heat .rd{position:absolute;background:var(--card);border:1px solid var(--line);border-radius:10px;padding:.4rem .6rem;font-size:.58rem;color:#9fb3cc;text-transform:uppercase;letter-spacing:.06em;z-index:2}
.hv-p-heat .rd b{display:block;font-size:1.05rem;letter-spacing:0;text-transform:none;color:#fff}
.hv-p-heat .rd.o{left:8%;top:8%}.hv-p-heat .rd.o b{color:#8fd8ff}
.hv-p-heat .rd.i{right:8%;top:8%}.hv-p-heat .rd.i b{color:#fbbf24}
.hv-p-heat .badge{left:8%;bottom:9%;animation:hvPop .6s 2s ease both}

/* ---------- TRUCK: Apollo Moving — van on the road, comparison table fills ---------- */
.hv-p-truck .road{position:absolute;left:0;right:0;bottom:16%;height:14px;background:#1e293b;border-top:1px solid var(--line);border-radius:3px}
.hv-p-truck .road::after{content:"";position:absolute;left:0;right:0;top:50%;height:2px;background:repeating-linear-gradient(90deg,#fbbf24 0 22px,transparent 22px 44px);animation:pvRoad .5s linear infinite}
@keyframes pvRoad{to{background-position:-44px 0}}
.hv-p-truck .truck{position:absolute;left:10%;bottom:calc(16% + 10px);width:76%;height:30%;animation:pvBob .7s ease-in-out infinite}
.hv-p-truck .box{position:absolute;left:0;bottom:12px;width:70%;height:calc(100% - 12px);background:linear-gradient(180deg,#f8fafc,#cbd5e1);border-radius:6px;overflow:hidden}
.hv-p-truck .box::after{content:"APOLLO";position:absolute;left:0;right:0;top:34%;text-align:center;font-size:1.05rem;font-weight:900;letter-spacing:.22em;color:#0b1426}
.hv-p-truck .box::before{content:"";position:absolute;left:8%;right:8%;top:62%;height:3px;background:#0a7bd0}
.hv-p-truck .cab{position:absolute;right:0;bottom:12px;width:28%;height:64%;background:linear-gradient(180deg,var(--neon),#0a7bd0);border-radius:10px 16px 4px 4px}
.hv-p-truck .cab::before{content:"";position:absolute;left:14%;top:14%;width:56%;height:36%;background:#0b1426;border-radius:6px 9px 0 0}
.hv-p-truck .wh{position:absolute;bottom:0;width:28px;height:28px;border-radius:50%;background:#0b1426;border:4px solid #cbd5e1;animation:pvSpin .6s linear infinite}
.hv-p-truck .wh::after{content:"";position:absolute;inset:3px;border-radius:50%;background:repeating-conic-gradient(#64748b 0 20deg,transparent 20deg 60deg)}
.hv-p-truck .wh.a{left:8%}.hv-p-truck .wh.b{left:44%}.hv-p-truck .wh.c{right:6%}
.hv-p-truck .card.tb{left:6%;top:5%;width:88%;padding:.5rem .65rem;font-size:.64rem}
.hv-p-truck .tb .r{display:grid;grid-template-columns:1.5fr 1fr 1fr 1fr;gap:.3rem;padding:.26rem 0;border-bottom:1px solid var(--line);color:#c7d6ea;opacity:0;animation:hvFadeUp .5s ease both;animation-delay:var(--t)}
.hv-p-truck .tb .r:last-child{border:0}.hv-p-truck .tb .r.h{color:#9fb3cc;text-transform:uppercase;letter-spacing:.06em;font-size:.54rem}
.hv-p-truck .tb .r i{font-style:normal;color:var(--good);text-align:center;font-weight:800}.hv-p-truck .tb .r s{text-decoration:none;color:#475569;text-align:center}
.hv-p-truck .badge{right:6%;bottom:4%;animation:hvPop .6s 2.6s ease both}

/* ---------- SPA: Bodywork Professionals — breathing circle, stones steam, gift certificate ---------- */
.hv-p-spa .card.sp{left:8%;top:6%;width:84%;height:64%;padding:1rem;display:flex;align-items:center;justify-content:space-around;background:linear-gradient(160deg,#0f1b30,#132a3d)}
.hv-p-spa .breath{position:relative;width:38%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(167,139,250,.55),rgba(25,184,255,.15) 70%);display:grid;place-items:center;animation:pvBreath 7s ease-in-out infinite;box-shadow:0 0 30px rgba(167,139,250,.35)}
.hv-p-spa .breath::before{content:"";position:absolute;inset:-14%;border-radius:50%;border:1px solid rgba(167,139,250,.45);animation:pvBreath 7s ease-in-out infinite reverse}
@keyframes pvBreath{0%,100%{transform:scale(.82)}50%{transform:scale(1.08)}}
.hv-p-spa .breath span{font-size:.66rem;letter-spacing:.16em;text-transform:uppercase;color:#e9d5ff}
.hv-p-spa .breath span::after{content:"inhale";animation:pvBreathTxt 7s steps(1) infinite}
@keyframes pvBreathTxt{0%,49%{content:"inhale"}50%,100%{content:"exhale"}}
.hv-p-spa .stones{position:relative;width:30%;height:60%;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:2px}
.hv-p-spa .stones i{display:block;height:16%;border-radius:50%;background:linear-gradient(180deg,#64748b,#334155);box-shadow:0 4px 10px rgba(0,0,0,.5)}
.hv-p-spa .stones i:nth-child(1){width:46%}.hv-p-spa .stones i:nth-child(2){width:64%}.hv-p-spa .stones i:nth-child(3){width:82%}.hv-p-spa .stones i:nth-child(4){width:100%}
.hv-p-spa .wisp{position:absolute;bottom:60%;left:var(--x);width:8px;height:26px;border-radius:50%;background:rgba(255,255,255,.35);filter:blur(3px);opacity:0;animation:pvWisp 3.2s ease-out infinite;animation-delay:var(--t)}
.hv-p-spa .card.gc{right:6%;bottom:6%;width:62%;padding:.55rem .7rem;background:linear-gradient(135deg,#a78bfa,#6d28d9);border:0;color:#fff;animation:hvFadeUp .6s 1.6s ease both;opacity:0}
.hv-p-spa .gc small{display:block;font-size:.56rem;letter-spacing:.12em;text-transform:uppercase;opacity:.85}.hv-p-spa .gc b{font-size:1.1rem}
.hv-p-spa .gc em{font-style:normal;float:right;font-size:.64rem;background:rgba(255,255,255,.22);padding:.15rem .45rem;border-radius:999px;margin-top:.25rem}
.hv-p-spa .badge{right:4%;top:2%;animation:hvPop .6s 2.6s ease both;background:#a78bfa;box-shadow:0 8px 20px rgba(167,139,250,.4)}

/* ---------- MENU: Brandywine — plate steams, tonight's menu, open hours ---------- */
.hv-p-menu .plate{position:absolute;left:5%;top:12%;width:44%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle at 50% 50%,#9a3412 0 22%,#c2410c 22% 30%,#fff7ed 31% 34%,#f8fafc 35% 58%,#cbd5e1 59% 63%,#e2e8f0 64%);box-shadow:0 20px 40px rgba(0,0,0,.5);animation:hvFloat 6s ease-in-out infinite}
.hv-p-menu .plate::after{content:"";position:absolute;left:52%;top:36%;width:14%;height:9%;border-radius:50%;background:#16a34a;transform:rotate(-30deg)}
.hv-p-menu .st{position:absolute;left:var(--x);top:9%;width:10px;height:30px;border-radius:50%;background:rgba(255,255,255,.4);filter:blur(3px);opacity:0;animation:pvWisp 3s ease-out infinite;animation-delay:var(--t)}
.hv-p-menu .fk{position:absolute;top:18%;width:6px;height:34%;border-radius:3px;background:linear-gradient(180deg,#e2e8f0,#94a3b8)}
.hv-p-menu .fk.f{left:1%}.hv-p-menu .fk.f::before{content:"";position:absolute;top:0;left:-4px;width:14px;height:24%;background:repeating-linear-gradient(90deg,#e2e8f0 0 3px,transparent 3px 5.5px);border-radius:2px}
.hv-p-menu .fk.k{left:50%}.hv-p-menu .fk.k::before{content:"";position:absolute;top:0;left:-3px;width:12px;height:42%;background:#e2e8f0;border-radius:6px 6px 2px 2px}
.hv-p-menu .card.mn{right:4%;top:6%;width:44%;padding:.6rem .65rem;background:#fbf7ef;color:#1c1917;border:0}
.hv-p-menu .mn h6{margin:0 0 .35rem;font-size:.56rem;letter-spacing:.16em;text-transform:uppercase;color:#9a3412;text-align:center;border-bottom:1px solid #e7d9c4;padding-bottom:.3rem}
.hv-p-menu .mn div{display:flex;justify-content:space-between;gap:.4rem;font-size:.64rem;padding:.24rem 0;opacity:0;animation:hvFadeUp .5s ease both;animation-delay:var(--t);font-family:Georgia,"Times New Roman",serif;font-weight:600;line-height:1.2}
.hv-p-menu .mn div b{color:#9a3412;font-weight:700}
.hv-p-menu .card.rs{left:6%;bottom:6%;width:88%;padding:.5rem .7rem;display:flex;align-items:center;gap:.6rem;font-size:.7rem;color:#c7d6ea}
.hv-p-menu .rs .dot{flex:none;background:var(--good);box-shadow:0 0 10px var(--good);animation:pvBeat 1.6s ease-in-out infinite}
.hv-p-menu .rs em{margin-left:auto;font-style:normal;color:#9fb3cc;font-size:.62rem}
.hv-p-menu .badge{left:6%;bottom:22%;animation:hvPop .6s 2.4s ease both;background:#c2410c;box-shadow:0 8px 20px rgba(194,65,12,.4)}

/* ---------- HOME: Capital NY Home Advantage — house draws, pre-approval, 10 p.m. chat ---------- */
.hv-p-home .hs{position:absolute;left:4%;top:2%;width:58%;height:54%}
.hv-p-home .hs path{fill:none;stroke:#fff;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:420;stroke-dashoffset:420;animation:pvDraw 8s ease-in-out infinite;filter:drop-shadow(0 0 6px rgba(25,184,255,.6))}
.hv-p-home .hs path.w{stroke:var(--neon);stroke-width:1.6;animation-delay:.8s}
@keyframes pvDraw{0%{stroke-dashoffset:420}35%,85%{stroke-dashoffset:0}100%{stroke-dashoffset:420}}
.hv-p-home .sign{position:absolute;left:62%;top:8%;background:var(--good);color:#fff;font-weight:900;padding:.32rem .55rem;border-radius:6px;font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;animation:hvFadeUp .5s 3s ease both;opacity:0;z-index:2;box-shadow:0 8px 20px rgba(34,197,94,.35)}
.hv-p-home .card.rate{right:4%;top:22%;width:34%;padding:.5rem .6rem;text-align:center}
.hv-p-home .rate b{display:block;font-size:1.25rem;line-height:1.1;color:#8fd8ff}
.hv-p-home .rate .kv{margin-top:.15rem}
.hv-p-home .key{position:absolute;right:12%;top:44%;font-size:1.5rem;animation:hvFloat 4s ease-in-out infinite}
.hv-p-home .card.ch{left:4%;bottom:4%;width:92%;padding:.55rem .7rem;display:flex;flex-direction:column;gap:.38rem}
.hv-p-home .ch .hd{display:flex;justify-content:space-between;font-size:.58rem;color:#9fb3cc;text-transform:uppercase;letter-spacing:.06em;padding-bottom:.3rem;border-bottom:1px solid var(--line)}
.hv-p-home .ch .hd i{color:var(--good);font-style:normal}
.hv-p-home .ch .m{max-width:84%;padding:.38rem .6rem;border-radius:12px;font-size:.7rem;line-height:1.3;opacity:0;animation:hvFadeUp .5s ease both;animation-delay:var(--t)}
.hv-p-home .ch .m.u{align-self:flex-end;background:rgba(255,255,255,.1);border:1px solid var(--line);border-bottom-right-radius:3px}
.hv-p-home .ch .m.a{align-self:flex-start;background:linear-gradient(135deg,var(--neon),#0a7bd0);color:#fff;border-bottom-left-radius:3px}
.hv-p-home .badge{left:4%;top:2%;animation:hvPop .6s 4.4s ease both}

/* ---------- WOOD: Catskill Mountain Woodworking — blade cuts a board, stores stay in sync ---------- */
.hv-p-wood .bench{position:absolute;left:4%;top:6%;width:92%;height:56%;background:#0c1830;border:1px solid var(--line);border-radius:16px;overflow:hidden}
.hv-p-wood .plank{position:absolute;left:-10%;top:48%;width:120%;height:26%;background:repeating-linear-gradient(100deg,#b45309 0 6px,#d97706 6px 9px,#b45309 9px 18px,#92400e 18px 20px);border-radius:4px;animation:pvFeed 6s ease-in-out infinite alternate;box-shadow:0 8px 18px rgba(0,0,0,.5);z-index:2}
@keyframes pvFeed{0%{transform:translateX(-14%)}100%{transform:translateX(10%)}}
.hv-p-wood .blade{position:absolute;left:50%;top:30%;width:46%;aspect-ratio:1;margin:-23% 0 0 -23%;border-radius:50%;background:repeating-conic-gradient(#e2e8f0 0 12deg,#94a3b8 12deg 15deg,transparent 15deg 22.5deg);animation:pvSpin .5s linear infinite;-webkit-mask:radial-gradient(circle,transparent 0 30%,#000 31% 84%,transparent 85%);mask:radial-gradient(circle,transparent 0 30%,#000 31% 84%,transparent 85%);z-index:1}
.hv-p-wood .hub{position:absolute;left:50%;top:30%;width:12%;aspect-ratio:1;margin:-6% 0 0 -6%;border-radius:50%;background:radial-gradient(circle,#0f172a 0 40%,#64748b 42%);z-index:3}
.hv-p-wood .dust{position:absolute;left:50%;top:48%;width:4px;height:4px;border-radius:50%;background:#fbbf24;opacity:0;animation:pvDust 1.2s ease-out infinite;animation-delay:var(--t);z-index:3}
@keyframes pvDust{0%{opacity:1;transform:translate(0,0)}100%{opacity:0;transform:translate(var(--dx),-40px)}}
.hv-p-wood .bench .lb{position:absolute;left:.7rem;top:.6rem;font-size:.56rem;letter-spacing:.12em;text-transform:uppercase;color:#9fb3cc}
.hv-p-wood .card.sy{left:4%;bottom:6%;width:92%;padding:.6rem .7rem;display:flex;align-items:center;justify-content:space-between;gap:.5rem;font-size:.7rem}
.hv-p-wood .sy .s{text-align:center;flex:1}.hv-p-wood .sy .s b{display:block;font-size:.8rem}.hv-p-wood .sy .s small{color:#9fb3cc;font-size:.6rem}
.hv-p-wood .sy .s .n::after{content:"12";animation:pvStock 6s steps(1) infinite;color:#8fd8ff}
@keyframes pvStock{0%,30%{content:"12"}31%,60%{content:"11"}61%,100%{content:"10"}}
.hv-p-wood .sy .ar{flex:none;width:22%;height:2px;position:relative;background:linear-gradient(90deg,transparent,var(--neon),transparent);background-size:200% 100%;animation:hvSweep 1.6s linear infinite}
.hv-p-wood .sy .ar::before,.hv-p-wood .sy .ar::after{content:"";position:absolute;top:-4px;border:5px solid transparent}
.hv-p-wood .sy .ar::before{left:-4px;border-right-color:var(--neon);border-left:0}.hv-p-wood .sy .ar::after{right:-4px;border-left-color:var(--neon);border-right:0}
.hv-p-wood .badge{right:6%;top:10%;animation:hvPop .6s 2s ease both}

/* ---------- LAB: Chemcept — flask bubbles, compliance checklist, site uptime ---------- */
.hv-p-lab .card.lb{left:4%;top:6%;width:50%;height:64%;padding:.8rem;display:flex;align-items:flex-end;justify-content:center;background:linear-gradient(180deg,#0f1b30,#0c1830)}
.hv-p-lab .flask{position:relative;width:74%;height:88%;clip-path:polygon(36% 0,64% 0,64% 32%,100% 94%,96% 100%,4% 100%,0 94%,36% 32%);background:rgba(255,255,255,.07);overflow:hidden}
.hv-p-lab .flask::before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.12),transparent 30%,transparent 70%,rgba(255,255,255,.08))}
.hv-p-lab .liq{position:absolute;left:0;right:0;bottom:0;height:40%;background:linear-gradient(180deg,#22d3ee,#0e7490);animation:pvLiq 7s ease-in-out infinite}
@keyframes pvLiq{0%,100%{height:34%}50%{height:56%}}
.hv-p-lab .bb{position:absolute;bottom:6%;left:var(--x);width:7px;height:7px;border-radius:50%;background:rgba(255,255,255,.7);animation:pvBub 2.2s ease-in infinite;animation-delay:var(--t)}
.hv-p-lab .card.ck{right:4%;top:6%;width:42%;padding:.55rem .6rem;display:grid;gap:.4rem}
.hv-p-lab .ck h6{margin:0;font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;color:#9fb3cc}
.hv-p-lab .ck div{display:flex;align-items:center;gap:.35rem;font-size:.62rem;line-height:1.2;color:#c7d6ea;opacity:0;animation:hvFadeUp .5s ease both;animation-delay:var(--t)}
.hv-p-lab .ck div .tick{border-radius:4px}
.hv-p-lab .card.up{left:4%;bottom:6%;width:92%;padding:.5rem .7rem;display:flex;justify-content:space-between;align-items:center;gap:.5rem}
.hv-p-lab .up div{text-align:center;flex:1}.hv-p-lab .up b{display:block;font-size:.95rem;line-height:1.1}.hv-p-lab .up b.g{color:var(--good)}
.hv-p-lab .badge{right:8%;top:52%;animation:hvPop .6s 2.4s ease both}

/* ---------- GLASS: Crosstown Glass — storefront panes catch the light, two customer types ---------- */
.hv-p-glass .frame{position:absolute;left:8%;top:6%;width:84%;height:60%;background:linear-gradient(180deg,#b8c0cc,#8b96a6);border-radius:6px;padding:4%;display:grid;grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr;gap:4%;box-shadow:0 20px 50px rgba(0,0,0,.5)}
.hv-p-glass .pane{position:relative;overflow:hidden;background:linear-gradient(160deg,#0f2b4a,#19486e 60%,#0f2b4a);border:1px solid rgba(255,255,255,.2)}
.hv-p-glass .pane::after{content:"";position:absolute;top:-20%;left:-60%;width:40%;height:140%;background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-20deg);animation:pvShine 4.5s ease-in-out infinite;animation-delay:var(--t)}
@keyframes pvShine{0%,20%{left:-60%}60%,100%{left:130%}}
.hv-p-glass .pane i{position:absolute;left:0;right:0;bottom:0;height:34%;background:linear-gradient(180deg,transparent,rgba(255,255,255,.08))}
.hv-p-glass .pane i::before{content:"";position:absolute;left:10%;bottom:0;width:18%;height:100%;background:rgba(255,255,255,.08)}
.hv-p-glass .pane i::after{content:"";position:absolute;left:36%;bottom:0;width:30%;height:60%;background:rgba(255,255,255,.06)}
.hv-p-glass .card.tg{left:8%;bottom:20%;width:84%;padding:.4rem;display:grid;grid-template-columns:1fr 1fr;font-size:.66rem;text-align:center;text-transform:uppercase;letter-spacing:.08em;font-weight:800}
.hv-p-glass .tg span{padding:.45rem 0;position:relative;z-index:1;animation:pvTgTxt 6s steps(1) infinite}
.hv-p-glass .tg span:nth-child(2){animation-delay:3s}
@keyframes pvTgTxt{0%,49%{color:#001}50%,100%{color:#9fb3cc}}
.hv-p-glass .tg::before{content:"";position:absolute;top:.4rem;bottom:.4rem;left:.4rem;width:calc(50% - .4rem);border-radius:10px;background:var(--neon);animation:pvTg 6s ease-in-out infinite}
@keyframes pvTg{0%,42%{transform:translateX(0)}50%,92%{transform:translateX(100%)}100%{transform:translateX(0)}}
.hv-p-glass .card.ln{left:8%;bottom:5%;width:84%;padding:.45rem .7rem;font-size:.62rem;color:#9fb3cc;text-align:center;letter-spacing:.04em}
.hv-p-glass .ln b{color:#fff}
.hv-p-glass .badge{right:8%;top:6%;animation:hvPop .6s 2s ease both}

/* ---------- PIPE: Dempster Plumbing — water moves through the pipe, towns light up, reviews climb ---------- */
.hv-p-pipe .pp{position:absolute;background:linear-gradient(180deg,#cbd5e1,#64748b 55%,#94a3b8);border-radius:6px;overflow:hidden;box-shadow:0 6px 14px rgba(0,0,0,.4)}
.hv-p-pipe .pp::after{content:"";position:absolute;inset:28% 0;background:repeating-linear-gradient(90deg,rgba(25,184,255,.9) 0 18px,rgba(25,184,255,.4) 18px 36px);animation:pvFlowX .5s linear infinite}
@keyframes pvFlowX{to{background-position:36px 0}}
.hv-p-pipe .pp.h{left:4%;top:20%;width:60%;height:32px}
.hv-p-pipe .pp.v{left:calc(64% - 32px);top:20%;width:32px;height:40%;background:linear-gradient(90deg,#cbd5e1,#64748b 55%,#94a3b8)}
.hv-p-pipe .pp.v::after{inset:0 28%;background:repeating-linear-gradient(180deg,rgba(25,184,255,.9) 0 18px,rgba(25,184,255,.4) 18px 36px);animation:pvFlowY .5s linear infinite}
@keyframes pvFlowY{to{background-position:0 36px}}
.hv-p-pipe .jt{position:absolute;width:46px;height:46px;border-radius:8px;background:linear-gradient(135deg,#e2e8f0,#64748b);left:calc(64% - 39px);top:calc(20% - 7px);box-shadow:0 6px 14px rgba(0,0,0,.4);z-index:2}
.hv-p-pipe .jt.s{left:calc(4% - 4px);width:22px;top:calc(20% - 6px);height:44px}
.hv-p-pipe .jt.e{left:calc(64% - 39px);top:calc(60% - 6px);height:22px}
.hv-p-pipe .drop{position:absolute;left:calc(64% - 20px);top:calc(60% + 16px);width:8px;height:8px;border-radius:50% 50% 50% 50%/40% 40% 60% 60%;background:var(--neon);box-shadow:0 0 8px var(--neon);animation:pvDrip 1.4s ease-in infinite}
@keyframes pvDrip{0%{transform:translateY(0) scale(.6);opacity:0}20%{opacity:1;transform:translateY(4px) scale(1)}100%{transform:translateY(46px) scale(1);opacity:0}}
.hv-p-pipe .wr{position:absolute;left:calc(64% - 10px);top:calc(20% - 32px);font-size:1.5rem;transform-origin:20% 80%;animation:hvRing 3s ease-in-out infinite;z-index:3}
.hv-p-pipe .card.tw{left:4%;bottom:6%;width:56%;padding:.55rem .65rem;display:grid;gap:.28rem}
.hv-p-pipe .tw h6{margin:0 0 .15rem;font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;color:#9fb3cc}
.hv-p-pipe .tw div{display:flex;align-items:center;gap:.35rem;font-size:.64rem;color:#c7d6ea;opacity:0;animation:hvFadeUp .5s ease both;animation-delay:var(--t)}
.hv-p-pipe .tw div i{width:.5rem;height:.5rem;border-radius:50%;background:var(--good);box-shadow:0 0 8px var(--good);flex:none}
.hv-p-pipe .card.rv{right:4%;bottom:6%;width:34%;padding:.55rem .5rem;text-align:center}
.hv-p-pipe .rv b{display:block;font-size:1.35rem;color:#fbbf24;line-height:1}
.hv-p-pipe .rv b::after{content:"130";animation:pvRev 6s steps(1) infinite}
@keyframes pvRev{0%{content:"127"}33%{content:"128"}66%{content:"129"}}
.hv-p-pipe .rv .s{color:#fbbf24;font-size:.78rem;letter-spacing:.05em;display:block;margin:.15rem 0}
.hv-p-pipe .badge{right:4%;top:6%;animation:hvPop .6s 2s ease both}

/* ---------- WATER: H2O Solutions — a drop clears, filter stages, TDS falls ---------- */
.hv-p-water .drop{position:absolute;left:12%;top:12%;width:34%;aspect-ratio:1;border-radius:0 50% 50% 50%;transform:rotate(45deg);border:2px solid rgba(255,255,255,.35);overflow:hidden;box-shadow:0 16px 40px rgba(0,0,0,.5)}
.hv-p-water .drop i{position:absolute;inset:-30%;background-color:#7c5a2a;animation:pvClean 7s ease-in-out infinite}
@keyframes pvClean{0%,15%{background-color:#7c5a2a}55%,85%{background-color:#38bdf8}100%{background-color:#7c5a2a}}
.hv-p-water .drop::after{content:"";position:absolute;left:18%;top:18%;width:14%;height:30%;border-radius:50%;background:rgba(255,255,255,.35);transform:rotate(-45deg)}
.hv-p-water .stages{position:absolute;right:6%;top:10%;width:42%;height:44%;display:flex;gap:6%;align-items:flex-end}
.hv-p-water .cyl{flex:1;height:100%;border-radius:10px 10px 12px 12px;border:1px solid var(--line);background:rgba(255,255,255,.05);position:relative;overflow:hidden}
.hv-p-water .cyl::before{content:"";position:absolute;left:0;right:0;bottom:0;height:74%;background:var(--c);opacity:.9}
.hv-p-water .cyl::after{content:attr(data-l);position:absolute;left:0;right:0;top:.3rem;text-align:center;font-size:.5rem;letter-spacing:.06em;text-transform:uppercase;color:#c7d6ea}
.hv-p-water .cyl i{position:absolute;left:50%;bottom:8%;width:5px;height:5px;margin-left:-2px;border-radius:50%;background:rgba(255,255,255,.8);animation:pvBub 1.8s ease-in infinite;animation-delay:var(--t)}
.hv-p-water .flow{position:absolute;left:46%;top:30%;width:8%;height:2px;background:linear-gradient(90deg,transparent,var(--neon),transparent);background-size:200% 100%;animation:hvSweep 1.4s linear infinite}
.hv-p-water .card.rd{left:8%;bottom:6%;width:84%;padding:.6rem .8rem;display:flex;align-items:center;justify-content:space-between;gap:.6rem}
.hv-p-water .rd div b{font-size:1.3rem;line-height:1.1}
.hv-p-water .rd .tds::after{content:"12";animation:pvTds 7s steps(1) infinite}
@keyframes pvTds{0%,15%{content:"480";color:#f59e0b}25%{content:"310";color:#f59e0b}35%{content:"140";color:#fbbf24}45%{content:"48";color:#22c55e}55%,85%{content:"12";color:#22c55e}100%{content:"480";color:#f59e0b}}
.hv-p-water .rd .bar{width:40%;height:8px;border-radius:99px;background:rgba(255,255,255,.08);overflow:hidden}
.hv-p-water .rd .bar i{display:block;height:100%;border-radius:99px;background:var(--good);animation:pvTdsBar 7s ease-in-out infinite}
@keyframes pvTdsBar{0%,15%{width:92%;background:#f59e0b}55%,85%{width:8%;background:#22c55e}100%{width:92%;background:#f59e0b}}
.hv-p-water .badge{right:6%;top:60%;animation:hvPop .6s 4s ease both}

/* ---------- TREE: J-B Tree Specialist — canopy sways, a limb comes down, site moved clean ---------- */
.hv-p-tree .tr{position:absolute;left:2%;top:4%;width:60%;height:72%}
.hv-p-tree .tr .gnd{fill:#14532d}.hv-p-tree .tr .trk{fill:#78350f}
.hv-p-tree .tr .can circle{fill:#16a34a}.hv-p-tree .tr .can circle.d{fill:#15803d}
.hv-p-tree .tr .can{transform-origin:50px 60px;animation:pvSway 5s ease-in-out infinite}
@keyframes pvSway{0%,100%{transform:rotate(-1.5deg)}50%{transform:rotate(1.5deg)}}
.hv-p-tree .tr .lmb{stroke:#78350f;stroke-width:3.5;stroke-linecap:round;fill:none}
.hv-p-tree .tr .lf{fill:#16a34a}
.hv-p-tree .tr .br{transform-origin:50px 64px;animation:pvCut 7s ease-in infinite}
@keyframes pvCut{0%,44%{transform:rotate(0);opacity:1}56%{transform:rotate(38deg) translate(0,4px);opacity:1}68%{transform:rotate(70deg) translate(0,14px);opacity:1}72%,100%{transform:rotate(70deg) translate(0,14px);opacity:0}}
.hv-p-tree .saw{position:absolute;left:24%;top:44%;font-size:1.25rem;opacity:0;animation:pvSaw 7s ease-in-out infinite;z-index:2}
@keyframes pvSaw{0%,22%{opacity:0;transform:translate(0,0)}27%{opacity:1;transform:translate(-3px,2px)}31%{transform:translate(3px,-2px)}35%{transform:translate(-3px,2px)}39%{transform:translate(3px,-2px)}44%{opacity:1;transform:translate(-3px,2px)}50%,100%{opacity:0}}
.hv-p-tree .card.dm{right:4%;top:6%;width:38%;padding:.55rem .6rem;display:grid;gap:.4rem;font-size:.62rem}
.hv-p-tree .dm h6{margin:0;font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;color:#9fb3cc}
.hv-p-tree .dm div{display:flex;align-items:center;gap:.35rem;color:#c7d6ea;opacity:0;animation:hvFadeUp .5s ease both;animation-delay:var(--t);line-height:1.2}
.hv-p-tree .card.svc{left:4%;bottom:5%;width:92%;padding:.5rem .6rem;display:flex;gap:.4rem;justify-content:space-between;font-size:.62rem;color:#c7d6ea;text-align:center}
.hv-p-tree .svc span{flex:1}.hv-p-tree .svc span b{display:block;font-size:.52rem;color:#9fb3cc;letter-spacing:.06em;text-transform:uppercase}
.hv-p-tree .badge{right:6%;top:50%;animation:hvPop .6s 2.4s ease both}

/* ---------- PAWS: Jessie's Puppies — paw prints trot in, litter card, deposit lands ---------- */
.hv-p-paws .paw{position:absolute;width:26px;height:26px;opacity:0;animation:pvPaw 8s ease-out infinite;animation-delay:var(--t);background:radial-gradient(circle at 5px 7px,#e9d5ff 0 3px,transparent 3.5px),radial-gradient(circle at 13px 3px,#e9d5ff 0 3px,transparent 3.5px),radial-gradient(circle at 21px 7px,#e9d5ff 0 3px,transparent 3.5px),radial-gradient(8px 6.5px at 13px 17px,#e9d5ff 0 100%,transparent 101%);filter:drop-shadow(0 0 6px rgba(233,213,255,.5))}
@keyframes pvPaw{0%{opacity:0;transform:rotate(var(--r)) scale(.6)}6%{opacity:.95;transform:rotate(var(--r)) scale(1)}72%{opacity:.95;transform:rotate(var(--r)) scale(1)}90%,100%{opacity:0;transform:rotate(var(--r)) scale(1)}}
.hv-p-paws .card.lt{right:4%;top:6%;width:60%;padding:.6rem .7rem}
.hv-p-paws .lt .ph{height:68px;border-radius:10px;background:linear-gradient(135deg,#fbbf24,#b45309);display:grid;place-items:center;font-size:2.2rem;line-height:1}
.hv-p-paws .lt b{display:block;margin-top:.45rem;font-size:.82rem}.hv-p-paws .lt small{color:#9fb3cc;font-size:.64rem;display:block}
.hv-p-paws .lt .av{margin-top:.45rem;display:flex;gap:.3rem}
.hv-p-paws .lt .av i{flex:1;height:20px;border-radius:5px;background:rgba(34,197,94,.22);border:1px solid rgba(34,197,94,.6);font-size:.5rem;font-style:normal;display:grid;place-items:center;color:#86efac;text-transform:uppercase;letter-spacing:.06em}
.hv-p-paws .lt .av i::after{content:"available"}
.hv-p-paws .lt .av i.r{animation:pvRes 8s steps(1) infinite}
.hv-p-paws .lt .av i.r::after{animation:pvResTxt 8s steps(1) infinite}
@keyframes pvRes{0%,45%{background:rgba(34,197,94,.22);border-color:rgba(34,197,94,.6);color:#86efac}46%,100%{background:rgba(245,158,11,.2);border-color:rgba(245,158,11,.6);color:#fcd34d}}
@keyframes pvResTxt{0%,45%{content:"available"}46%,100%{content:"reserved"}}
.hv-p-paws .hrt{position:absolute;right:8%;top:10%;font-size:1.15rem;animation:pvBeat 1.6s ease-in-out infinite;z-index:2}
.hv-p-paws .card.up{left:4%;bottom:5%;width:92%;padding:.5rem .7rem;display:flex;align-items:center;gap:.6rem;font-size:.66rem;color:#c7d6ea}
.hv-p-paws .up .dot{flex:none;background:var(--good);box-shadow:0 0 10px var(--good)}
.hv-p-paws .up em{margin-left:auto;font-style:normal;color:#9fb3cc;font-size:.6rem}
.hv-p-paws .badge{right:6%;bottom:22%;animation:hvPop .6s 4s ease both;background:#f59e0b;box-shadow:0 8px 20px rgba(245,158,11,.4)}

/* ---------- SHIELD: Kinney Insurance — shield pulses, quotes route to the right desk ---------- */
.hv-p-shield .sh{position:absolute;left:6%;top:8%;width:36%;aspect-ratio:.86;background:linear-gradient(180deg,var(--neon),#0a5aa8);clip-path:polygon(50% 0,100% 14%,96% 58%,50% 100%,4% 58%,0 14%);display:grid;place-items:center;animation:hvFloat 5s ease-in-out infinite;z-index:1}
.hv-p-shield .sh::before{content:"";position:absolute;inset:7%;clip-path:polygon(50% 0,100% 14%,96% 58%,50% 100%,4% 58%,0 14%);background:var(--card)}
.hv-p-shield .sh span{position:relative;color:var(--good);font-size:2rem;font-weight:900;animation:hvPop .6s .8s ease both;text-shadow:0 0 14px rgba(34,197,94,.7);line-height:1}
.hv-p-shield .pl{position:absolute;left:24%;top:29%;width:30px;height:30px;margin:-15px;border-radius:50%;border:2px solid var(--neon);animation:hvPulse 2.2s ease-out infinite;z-index:0}
.hv-p-shield .card.q{right:3%;width:56%;padding:.42rem .55rem;display:flex;align-items:center;gap:.45rem;font-size:.64rem;opacity:0;animation:pvRoute 8s ease-in-out infinite;animation-delay:var(--t)}
.hv-p-shield .q.a{top:8%}.hv-p-shield .q.b{top:27%}.hv-p-shield .q.c{top:46%}
.hv-p-shield .q i{flex:none;width:1.5rem;height:1.5rem;border-radius:7px;background:rgba(25,184,255,.18);display:grid;place-items:center;font-style:normal;font-size:.8rem}
.hv-p-shield .q b{display:block;font-size:.68rem}.hv-p-shield .q small{color:#9fb3cc;font-size:.56rem}
.hv-p-shield .q em{margin-left:auto;font-style:normal;font-size:.5rem;white-space:nowrap;color:var(--good);opacity:0;animation:hvCheck 8s ease infinite;animation-delay:calc(var(--t) + 1s);text-align:right;line-height:1.2}
@keyframes pvRoute{0%{opacity:0;transform:translateX(-40px)}8%,85%{opacity:1;transform:none}95%,100%{opacity:0}}
.hv-p-shield .card.ln{left:6%;bottom:6%;width:88%;padding:.5rem .7rem;display:flex;justify-content:space-between;gap:.4rem;font-size:.62rem;color:#c7d6ea;text-align:center}
.hv-p-shield .ln span{flex:1}.hv-p-shield .ln span b{display:block;font-size:.52rem;color:#9fb3cc;letter-spacing:.06em;text-transform:uppercase}
.hv-p-shield .badge{left:6%;bottom:24%;animation:hvPop .6s 2.2s ease both}

/* ---------- CART: KRW Electric Vehicle & Cart Sales — cart rolls to the pin, inventory live ---------- */
.hv-p-cart .green{position:absolute;inset:4%;border-radius:16px;background:linear-gradient(180deg,#0a1a3a 0 52%,#15803d 52% 56%,#166534 56%);overflow:hidden;border:1px solid var(--line)}
.hv-p-cart .sun{position:absolute;right:14%;top:10%;width:13%;aspect-ratio:1;border-radius:50%;background:#fbbf24;box-shadow:0 0 30px rgba(251,191,36,.6)}
.hv-p-cart .pin{position:absolute;left:76%;bottom:44%;width:3px;height:24%;background:#e2e8f0}
.hv-p-cart .pin::after{content:"";position:absolute;left:3px;top:0;width:26px;height:16px;background:#ef4444;clip-path:polygon(0 0,100% 50%,0 100%);animation:pvFlag 1.2s ease-in-out infinite;transform-origin:left}
@keyframes pvFlag{0%,100%{transform:skewY(0)}50%{transform:skewY(-8deg) scaleX(.9)}}
.hv-p-cart .hole{position:absolute;left:calc(76% - 9px);bottom:43%;width:20px;height:6px;border-radius:50%;background:#052e16}
.hv-p-cart .cart{position:absolute;left:-36%;bottom:43%;width:34%;height:24%;animation:pvDrive 9s ease-in-out infinite}
@keyframes pvDrive{0%{left:-36%}42%,60%{left:34%}100%{left:110%}}
.hv-p-cart .cart .rf{position:absolute;left:-4%;top:0;width:108%;height:12%;background:#e2e8f0;border-radius:4px}
.hv-p-cart .cart .ps{position:absolute;top:12%;width:4%;height:44%;background:#cbd5e1}
.hv-p-cart .cart .ps.a{left:6%}.hv-p-cart .cart .ps.b{right:26%}
.hv-p-cart .cart .bd{position:absolute;left:0;bottom:11px;width:100%;height:36%;background:#f8fafc;border-radius:6px 16px 4px 4px}
.hv-p-cart .cart .bd::after{content:"EV";position:absolute;left:10%;top:22%;font-size:.5rem;font-weight:900;color:#0a7bd0;letter-spacing:.1em}
.hv-p-cart .cart .st{position:absolute;left:30%;bottom:calc(11px + 36%);width:36%;height:18%;background:#1e293b;border-radius:4px 4px 0 0}
.hv-p-cart .cart .wh{position:absolute;bottom:0;width:24px;height:24px;border-radius:50%;background:#0b1426;border:4px solid #cbd5e1;animation:pvSpin .55s linear infinite}
.hv-p-cart .cart .wh::after{content:"";position:absolute;inset:3px;border-radius:50%;background:repeating-conic-gradient(#64748b 0 20deg,transparent 20deg 60deg)}
.hv-p-cart .cart .wh.a{left:10%}.hv-p-cart .cart .wh.b{right:12%}
.hv-p-cart .card.inv{left:8%;top:8%;width:50%;padding:.5rem .65rem;font-size:.62rem;display:grid;gap:.22rem;color:#c7d6ea}
.hv-p-cart .inv div{display:flex;justify-content:space-between;gap:.5rem}.hv-p-cart .inv b{color:#fff}.hv-p-cart .inv b.g{color:var(--good)}
.hv-p-cart .inv .n::after{content:"14";animation:pvInv 9s steps(1) infinite}
@keyframes pvInv{0%,40%{content:"14"}41%,100%{content:"13"}}
.hv-p-cart .badge{right:8%;bottom:10%;animation:hvPop .6s 4.2s ease both}

/* ---------- SCALES: Kyran D. Nigro, Esq. — scales settle level, practice areas, decade of care ---------- */
.hv-p-scales .post{position:absolute;left:calc(50% - 5px);top:12%;width:10px;height:60%;background:linear-gradient(90deg,#e2e8f0,#94a3b8);border-radius:5px;z-index:1}
.hv-p-scales .top{position:absolute;left:calc(50% - 12px);top:calc(12% - 8px);width:24px;height:16px;border-radius:12px 12px 4px 4px;background:linear-gradient(180deg,#fbbf24,#b45309);z-index:3}
.hv-p-scales .base{position:absolute;left:30%;top:71%;width:40%;height:12px;border-radius:6px;background:linear-gradient(180deg,#e2e8f0,#94a3b8);box-shadow:0 10px 24px rgba(0,0,0,.5);z-index:1}
.hv-p-scales .beam{position:absolute;left:14%;top:calc(12% + 2px);width:72%;height:8px;border-radius:4px;background:linear-gradient(180deg,#fbbf24,#b45309);transform-origin:50% 50%;animation:pvTilt 8s ease-in-out infinite;z-index:2}
@keyframes pvTilt{0%,100%{transform:rotate(-6deg)}30%{transform:rotate(5deg)}60%{transform:rotate(-2deg)}80%{transform:rotate(0)}}
.hv-p-scales .beam .pan{position:absolute;top:4px;width:26%;height:128px;transform-origin:50% 0;animation:pvTiltR 8s ease-in-out infinite}
.hv-p-scales .beam .pan.l{left:-6%}.hv-p-scales .beam .pan.r{right:-6%}
@keyframes pvTiltR{0%,100%{transform:rotate(6deg)}30%{transform:rotate(-5deg)}60%{transform:rotate(2deg)}80%{transform:rotate(0)}}
.hv-p-scales .pan::before{content:"";position:absolute;left:14%;right:14%;top:0;height:104px;border-left:2px solid #cbd5e1;border-right:2px solid #cbd5e1}
.hv-p-scales .pan::after{content:"";position:absolute;left:0;right:0;top:104px;height:24px;border-radius:0 0 50% 50%/0 0 100% 100%;background:linear-gradient(180deg,#fbbf24,#b45309);box-shadow:0 8px 16px rgba(0,0,0,.5)}
.hv-p-scales .tg{position:absolute;background:var(--card);border:1px solid var(--line);border-radius:999px;padding:.28rem .55rem;font-size:.58rem;color:#c7d6ea;animation:hvFloat 5s ease-in-out infinite;animation-delay:var(--t);z-index:3;white-space:nowrap}
.hv-p-scales .card.cl{left:6%;bottom:5%;width:88%;padding:.55rem .7rem;display:flex;justify-content:space-between;align-items:center;gap:.5rem;font-size:.64rem;color:#c7d6ea}
.hv-p-scales .cl b{display:block;font-size:.76rem;color:#fff}.hv-p-scales .cl small{font-size:.58rem;color:#9fb3cc}
.hv-p-scales .cl .yr{text-align:right}.hv-p-scales .cl .yr b{color:#fbbf24;font-size:1rem}
.hv-p-scales .badge{right:6%;top:6%;animation:hvPop .6s 2s ease both;background:#b45309;box-shadow:0 8px 20px rgba(180,83,9,.4)}

/* ---------- TICKET: MJQ Irish Cultural Centre — stage lights, ticket scans and tears ---------- */
.hv-p-ticket .lt{position:absolute;top:-12%;width:34%;height:74%;background:linear-gradient(180deg,rgba(25,184,255,.4),transparent);clip-path:polygon(50% 0,100% 100%,0 100%);transform-origin:50% 0;animation:pvBeam 4s ease-in-out infinite;z-index:0}
.hv-p-ticket .lt.a{left:2%}.hv-p-ticket .lt.b{right:2%;animation-direction:reverse;background:linear-gradient(180deg,rgba(34,197,94,.35),transparent)}
@keyframes pvBeam{0%,100%{transform:rotate(-16deg)}50%{transform:rotate(16deg)}}
.hv-p-ticket .tk{position:absolute;left:6%;top:12%;width:88%;height:36%;display:flex;filter:drop-shadow(0 16px 30px rgba(0,0,0,.5));z-index:1}
.hv-p-ticket .tk .m{flex:1;background:linear-gradient(135deg,#16a34a,#065f46);border-radius:12px 0 0 12px;padding:.65rem .8rem;position:relative;color:#fff;border-right:2px dashed rgba(255,255,255,.55)}
.hv-p-ticket .tk .m h6{margin:0;font-size:.54rem;letter-spacing:.16em;text-transform:uppercase;opacity:.85}
.hv-p-ticket .tk .m b{display:block;font-size:.92rem;line-height:1.15;margin:.25rem 0}
.hv-p-ticket .tk .m small{font-size:.6rem;opacity:.9}
.hv-p-ticket .tk .m .seat{position:absolute;right:.7rem;bottom:.55rem;font-size:.56rem;letter-spacing:.1em;text-transform:uppercase;opacity:.85}
.hv-p-ticket .tk .s{width:32%;background:#f8fafc;border-radius:0 12px 12px 0;display:grid;place-items:center;position:relative;transform-origin:left center;animation:pvTear 7s ease-in-out infinite}
@keyframes pvTear{0%{opacity:0;transform:none}6%,55%{opacity:1;transform:none}66%{opacity:1;transform:rotate(5deg) translateX(5px)}80%,100%{opacity:0;transform:rotate(14deg) translate(40px,34px)}}
.hv-p-ticket .qr{width:62%;aspect-ratio:1;display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.hv-p-ticket .qr i{background:#0b1426;border-radius:1px}.hv-p-ticket .qr i.o{background:transparent}
.hv-p-ticket .tk .s::after{content:"";position:absolute;left:12%;right:12%;top:12%;height:3px;background:var(--neon);box-shadow:0 0 12px var(--neon);animation:pvScan 1.8s ease-in-out infinite}
@keyframes pvScan{0%,100%{top:12%}50%{top:86%}}
.hv-p-ticket .card.ci{left:6%;bottom:6%;width:46%;padding:.55rem .7rem;z-index:1}
.hv-p-ticket .ci b{display:block;font-size:1.3rem;line-height:1.1}
.hv-p-ticket .ci b::after{content:"1,284";animation:pvGate 7s steps(1) infinite}
@keyframes pvGate{0%,55%{content:"1,283"}56%,100%{content:"1,284"}}
.hv-p-ticket .card.ev{right:6%;bottom:6%;width:40%;padding:.5rem .6rem;font-size:.6rem;color:#c7d6ea;z-index:1}
.hv-p-ticket .ev b{display:block;font-size:.7rem;color:#fff}
.hv-p-ticket .ev .bar{height:6px;border-radius:99px;background:rgba(255,255,255,.08);margin-top:.35rem;overflow:hidden}
.hv-p-ticket .ev .bar i{display:block;height:100%;width:92%;border-radius:99px;background:linear-gradient(90deg,#16a34a,#4ade80);transform-origin:left;animation:hvGrow 6s ease-in-out infinite}
.hv-p-ticket .badge{left:30%;top:52%;animation:hvPop .6s 4.4s ease both;z-index:2}

/* ---------- PAINT: Paint Masters TNC — roller lays down a coat, swatches, one-tap call ---------- */
.hv-p-paint .wall{position:absolute;left:6%;top:6%;width:88%;height:58%;background:#e5e7eb;border-radius:12px;overflow:hidden;border:1px solid var(--line)}
.hv-p-paint .wall::before{content:"";position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 40px,rgba(0,0,0,.05) 40px 41px);z-index:2;pointer-events:none}
.hv-p-paint .coat{position:absolute;left:0;top:0;bottom:0;width:0;background:linear-gradient(90deg,#1d4ed8,#2563eb);animation:pvCoat 7s ease-in-out infinite}
@keyframes pvCoat{0%,8%{width:0}62%,88%{width:100%}100%{width:0}}
.hv-p-paint .roller{position:absolute;top:10%;left:6%;width:22px;height:50%;animation:pvRoller 7s ease-in-out infinite;z-index:3}
@keyframes pvRoller{0%,8%{left:6%}62%,88%{left:calc(94% - 22px)}100%{left:6%}}
.hv-p-paint .roller::before{content:"";position:absolute;inset:0;border-radius:11px;background:repeating-linear-gradient(180deg,#1e40af 0 6px,#3b82f6 6px 12px);animation:pvRollTex .3s linear infinite;box-shadow:0 6px 14px rgba(0,0,0,.35)}
@keyframes pvRollTex{to{background-position:0 12px}}
.hv-p-paint .roller::after{content:"";position:absolute;left:9px;top:100%;width:4px;height:70px;background:linear-gradient(180deg,#94a3b8,#475569);border-radius:2px}
.hv-p-paint .sw{position:absolute;left:6%;bottom:22%;display:flex;gap:.4rem}
.hv-p-paint .sw i{width:2rem;height:2rem;border-radius:8px;border:2px solid rgba(255,255,255,.5);animation:hvPop .5s ease both;animation-delay:var(--t);box-shadow:0 6px 14px rgba(0,0,0,.4)}
.hv-p-paint .card.call{right:6%;bottom:6%;width:46%;padding:.6rem .7rem;display:flex;align-items:center;gap:.5rem;background:var(--good);border:0;color:#fff;font-weight:800;font-size:.78rem;animation:pvCall 2s ease-in-out infinite;justify-content:center}
@keyframes pvCall{0%,100%{box-shadow:0 0 0 0 rgba(34,197,94,.6)}50%{box-shadow:0 0 0 12px rgba(34,197,94,0)}}
.hv-p-paint .badge{right:6%;top:2%;animation:hvPop .6s 2.4s ease both;background:#2563eb;box-shadow:0 8px 20px rgba(37,99,235,.4)}

/* ---------- LAWN: Tru-X Landscaping — grass grows, pavers lay in, page loads fast ---------- */
.hv-p-lawn .yard{position:absolute;inset:4%;border-radius:16px;background:linear-gradient(180deg,#0a1a3a 0 56%,#166534 56%);overflow:hidden;border:1px solid var(--line)}
.hv-p-lawn .sun{position:absolute;left:10%;top:10%;width:12%;aspect-ratio:1;border-radius:50%;background:#fbbf24;box-shadow:0 0 30px rgba(251,191,36,.6)}
.hv-p-lawn .hill{position:absolute;left:-10%;right:-10%;bottom:38%;height:20%;border-radius:50% 50% 0 0/100% 100% 0 0;background:#15803d}
.hv-p-lawn .grass{position:absolute;left:0;right:0;bottom:40%;height:16%;display:flex;align-items:flex-end;justify-content:space-around;padding:0 3%}
.hv-p-lawn .grass i{width:4px;height:100%;border-radius:2px 2px 0 0;background:linear-gradient(180deg,#4ade80,#16a34a);transform-origin:bottom;animation:pvGrass 6s ease-in-out infinite;animation-delay:var(--t)}
@keyframes pvGrass{0%,5%{transform:scaleY(.1)}30%,85%{transform:scaleY(var(--s,1))}100%{transform:scaleY(.1)}}
.hv-p-lawn .wall{position:absolute;left:8%;right:8%;bottom:12%;height:24%;display:grid;grid-template-columns:repeat(6,1fr);gap:4px}
.hv-p-lawn .wall i{background:linear-gradient(135deg,#a8a29e,#78716c);border-radius:3px;opacity:0;animation:pvLay 6s ease-in-out infinite;animation-delay:var(--t);box-shadow:inset 0 -2px 0 rgba(0,0,0,.25)}
@keyframes pvLay{0%,4%{opacity:0;transform:translateY(-14px)}12%,88%{opacity:1;transform:none}96%,100%{opacity:0}}
.hv-p-lawn .card.sp{right:8%;top:8%;width:44%;padding:.5rem .65rem;font-size:.6rem;color:#9fb3cc;z-index:2}
.hv-p-lawn .sp div{display:flex;justify-content:space-between;gap:.4rem;padding:.12rem 0}.hv-p-lawn .sp b{color:#fff}
.hv-p-lawn .sp .ld::after{content:"1.2s";animation:pvLoad 6s steps(1) infinite}
@keyframes pvLoad{0%,15%{content:"8.4s";color:#ef4444}30%{content:"4.1s";color:#f59e0b}45%,100%{content:"1.2s";color:#22c55e}}
.hv-p-lawn .badge{left:8%;top:32%;animation:hvPop .6s 3s ease both;z-index:2}

/* ---------- GAVEL: Walters Law Group — gavel lands, firm ranks first, AI cites it ---------- */
.hv-p-gavel .gv{position:absolute;left:4%;top:4%;width:46%;height:46%}
.hv-p-gavel .g{position:absolute;left:14%;top:6%;width:64%;height:70%;transform-origin:50% 100%;animation:pvGavel 4s ease-in-out infinite;z-index:2}
.hv-p-gavel .g .h{position:absolute;left:0;top:0;width:100%;height:26%;border-radius:8px;background:linear-gradient(180deg,#d97706,#78350f);box-shadow:inset 0 -3px 0 rgba(0,0,0,.3)}
.hv-p-gavel .g .h::before,.hv-p-gavel .g .h::after{content:"";position:absolute;top:-6%;width:12%;height:112%;border-radius:4px;background:#fbbf24}
.hv-p-gavel .g .h::before{left:12%}.hv-p-gavel .g .h::after{right:12%}
.hv-p-gavel .g .n{position:absolute;left:44%;top:24%;width:12%;height:76%;background:linear-gradient(90deg,#a16207,#713f12);border-radius:4px}
@keyframes pvGavel{0%,28%{transform:rotate(-58deg)}38%{transform:rotate(-24deg)}44%{transform:rotate(-32deg)}50%{transform:rotate(-26deg)}70%,100%{transform:rotate(-58deg)}}
.hv-p-gavel .bk{position:absolute;left:4%;top:62%;width:44%;height:10%;border-radius:4px;background:linear-gradient(180deg,#b45309,#78350f);box-shadow:0 8px 16px rgba(0,0,0,.5);z-index:1}
.hv-p-gavel .rp{position:absolute;left:26%;top:60%;width:20px;height:20px;margin:-10px;border-radius:50%;border:2px solid #fbbf24;opacity:0;animation:pvRip 4s ease-out infinite}
@keyframes pvRip{0%,36%{opacity:0;transform:scale(.4)}40%{opacity:1}70%,100%{opacity:0;transform:scale(3.2)}}
.hv-p-gavel .card.sr{right:4%;top:6%;width:48%;padding:.55rem .6rem;display:grid;gap:.32rem}
.hv-p-gavel .sr .q{display:flex;align-items:center;gap:.35rem;background:rgba(255,255,255,.08);border:1px solid var(--line);border-radius:999px;padding:.3rem .55rem;font-size:.58rem;color:#c7d6ea}
.hv-p-gavel .sr .r{padding:.3rem .4rem;border-radius:8px;font-size:.56rem;color:#9fb3cc;opacity:0;animation:hvFadeUp .5s ease both;animation-delay:var(--t)}
.hv-p-gavel .sr .r b{display:block;color:#8fd8ff;font-size:.64rem}
.hv-p-gavel .sr .r.you{background:rgba(25,184,255,.14);border:1px solid rgba(25,184,255,.45)}.hv-p-gavel .sr .r.you b{color:#fff}
.hv-p-gavel .sr .r i{display:block;height:5px;border-radius:3px;background:rgba(255,255,255,.12);margin-top:.22rem;width:80%}
.hv-p-gavel .card.ai{left:4%;bottom:5%;width:92%;padding:.55rem .7rem;font-size:.68rem;line-height:1.35;display:flex;gap:.5rem;align-items:flex-start;color:#c7d6ea;animation:hvFadeUp .6s 2.8s ease both;opacity:0}
.hv-p-gavel .ai i{flex:none;width:1.5rem;height:1.5rem;border-radius:50%;background:linear-gradient(135deg,var(--neon),#1e3a8a);display:grid;place-items:center;font-style:normal;font-size:.8rem;color:#fff}
.hv-p-gavel .ai b{color:#fff}
.hv-p-gavel .ai small{display:block;font-size:.54rem;color:#9fb3cc;letter-spacing:.08em;text-transform:uppercase;margin-bottom:.1rem}
.hv-p-gavel .badge{left:6%;top:54%;animation:hvPop .6s 3.4s ease both}

@media (prefers-reduced-motion:reduce){.hv-p-glass .tg span:first-child{color:#001!important}.hv-p-water .drop{transform:rotate(45deg)!important}.hv-p-water .drop i{background-color:#38bdf8!important}.hv-p-gavel .g{transform:rotate(-30deg)!important}.hv-p-scales .beam .pan{transform:none!important}.hv-p-home .hs path{stroke-dashoffset:0!important}.hv-p-tree .tr .br{opacity:1!important}.hv-p-ticket .tk .s{opacity:1!important}.hv-p-heat .sn,.hv-p-spa .wisp,.hv-p-menu .st,.hv-p-heat .smoke,.hv-p-wood .dust,.hv-p-lab .bb,.hv-p-water .cyl i,.hv-p-thermo .wave{opacity:0!important}.hv-p-lawn .grass i{transform:scaleY(var(--s,1))!important}.hv-p-cart .cart{left:34%!important}.hv-p-paint .coat{width:100%!important}.hv-p-paint .roller{left:calc(94% - 22px)!important}}
