/* Latch N Lock — motion + enhancement layer (shared by every page) */

/* ---------- Hero rating line ---------- */
.hero-proof{display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px;margin-top:22px;font-size:14.5px;color:var(--silver);}
.hero-proof a{display:inline-flex;align-items:center;gap:8px;color:var(--off-white);}
.hero-proof a:hover{color:var(--accent-bright);}
.hero-proof .stars{color:#f5c84b;letter-spacing:2px;font-size:15px;}
.hero-proof b{color:var(--off-white);}
.hero-proof .sep{color:var(--steel-mid);}

/* ---------- Hero call card ---------- */
.hc-list{list-style:none;margin:0 0 18px;padding:0;display:grid;gap:9px;}
.hc-list li{display:flex;gap:10px;align-items:flex-start;font-size:14.5px;color:var(--off-white);}
.hc-list li::before{content:"";flex:none;width:18px;height:18px;margin-top:2px;border-radius:50%;
  background:rgba(61,220,132,.16) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%233ddc84' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7.5'/%3E%3C/svg%3E") center/12px no-repeat;}
.hero-form-card .form-submit{font-size:17px;padding:16px 20px;}
.hc-alt{display:block;text-align:center;margin-top:14px;font-size:13.5px;color:var(--accent-bright);}
.hc-alt:hover{text-decoration:underline;}

/* ---------- Reviews (pages that lacked the styles) ---------- */
.t-grid{max-width:1140px;margin:0 auto;display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);border:1px solid var(--line);}
.t-card{background:var(--navy);padding:32px 24px;}
.t-card .stars{color:#f5c84b;font-size:13px;letter-spacing:2px;margin-bottom:16px;}
.t-card p{font-size:15px;color:var(--off-white);opacity:.9;margin-bottom:18px;line-height:1.6;}
.t-card .who{font-family:'Space Mono',monospace;font-size:12px;color:var(--silver);}
.t-card .who strong{color:var(--off-white);}
.reviews-cta{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-top:28px;}
.rating-badge{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:20px;flex-wrap:wrap;}
.rating-stars{color:#f5c84b;font-size:20px;letter-spacing:3px;}
.rating-score{font-family:'Oswald',sans-serif;font-size:26px;color:var(--off-white);}
.rating-count{font-family:'Space Mono',monospace;font-size:12px;color:var(--accent-bright);}
@media (max-width:940px){.t-grid{grid-template-columns:1fr;}}

/* ---------- Layout fixes ---------- */
.county-cols{max-width:1140px;margin-left:auto !important;margin-right:auto !important;padding:0 32px;}
#coverage > .lede{max-width:760px;}
.section-head > .eyebrow,.final-cta > .eyebrow{display:flex;width:fit-content;margin-left:auto;margin-right:auto;}
.sk-areas-wrap{max-width:1140px;margin:40px auto 0;padding:0 32px;}
@media (max-width:600px){
  .county-cols{padding:0 20px;}
  .hero-chips{display:none;}
  .hero-grid{padding-top:36px !important;}
  .hours-inner{justify-content:center;column-gap:18px;}
  .hours-inner > div:nth-child(2){display:none;}
}

/* =========================================================
   PHONE ANIMATION — search → find → call → dispatched → done
   ========================================================= */
.ph-wrap{display:flex;flex-direction:column;align-items:center;justify-self:center;}
.ph{position:relative;width:272px;height:556px;border-radius:44px;padding:12px;
  background:linear-gradient(145deg,#4a4a4f,#1b1b1e 40%,#2b2b2f);
  box-shadow:0 0 0 1px rgba(255,255,255,.08),0 30px 70px rgba(0,0,0,.55),0 0 60px rgba(201,162,75,.18);}
.ph::before{content:"";position:absolute;right:-3px;top:120px;width:3px;height:64px;border-radius:2px;background:#3a3a3e;}
.ph-screen{position:relative;width:100%;height:100%;border-radius:34px;overflow:hidden;background:#141416;font-family:'Inter',sans-serif;color:#eceef1;}
.ph-notch{position:absolute;left:50%;top:9px;transform:translateX(-50%);width:92px;height:26px;border-radius:14px;background:#000;z-index:5;}
.ph-status{position:absolute;inset:0 0 auto 0;height:44px;display:flex;justify-content:space-between;align-items:center;padding:0 24px 0 28px;font-size:12px;font-weight:600;z-index:4;}
.ph-status i{font-style:normal;letter-spacing:1px;font-size:10px;}
.ph-scn{position:absolute;inset:44px 0 0 0;padding:12px 14px;opacity:0;transform:translateY(10px) scale(.98);transition:opacity .45s ease,transform .45s ease;pointer-events:none;}
.ph-scn.on{opacity:1;transform:none;}
.ph-cap{margin-top:16px;font-family:'Space Mono',monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--silver);text-align:center;}
.ph-cap b{color:var(--accent-bright);font-weight:700;}

/* scene 1 — search */
.ph-bar{display:flex;align-items:center;gap:8px;background:#26262a;border:1px solid #34343a;border-radius:22px;padding:10px 14px;font-size:13px;}
.ph-bar svg{width:15px;height:15px;flex:none;stroke:#9aa0a6;}
.ph-q{white-space:nowrap;overflow:hidden;}
.ph-caret{width:2px;height:15px;background:var(--accent-bright);animation:phBlink 1s steps(1) infinite;}
.ph-tabs{display:flex;gap:16px;margin:14px 4px 10px;font-size:11.5px;color:#9aa0a6;}
.ph-tabs span:first-child{color:#eceef1;border-bottom:2px solid var(--accent);padding-bottom:4px;}
.ph-sk{height:10px;border-radius:5px;background:#232327;margin:12px 4px;}
.ph-sk.w60{width:60%;}.ph-sk.w80{width:80%;}.ph-sk.w40{width:40%;}
.ph-kb{position:absolute;left:0;right:0;bottom:0;height:150px;background:#1f1f23;border-top:1px solid #2c2c31;display:grid;grid-template-columns:repeat(10,1fr);gap:5px;padding:12px 8px;}
.ph-kb span{background:#3a3a40;border-radius:5px;height:30px;}
.ph-s1.on .ph-kb span.hit{animation:phKey .25s ease;}

/* scene 2 — results */
.ph-lbl{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:#9aa0a6;margin:14px 4px 8px;}
.ph-res{position:relative;display:flex;gap:10px;align-items:flex-start;background:#1e1e22;border:1px solid #2e2e33;border-radius:14px;padding:12px;margin-bottom:9px;}
.ph-hit{padding-bottom:46px;border-color:rgba(201,162,75,.65);box-shadow:0 0 0 1px rgba(201,162,75,.25),0 8px 22px rgba(0,0,0,.35);}
.ph-logo{flex:none;width:38px;height:38px;border-radius:10px;overflow:hidden;background:#000;}
.ph-logo img{width:100%;height:100%;object-fit:cover;}
.ph-res b{display:block;font-size:13.5px;}
.ph-rate{font-size:11.5px;color:#f5c84b;margin-top:2px;}
.ph-rate em{font-style:normal;color:#c9ccd1;}
.ph-meta{font-size:11px;color:#9aa0a6;margin-top:2px;}
.ph-meta .open{color:#3ddc84;}
.ph-callbtn{position:absolute;right:10px;bottom:10px;background:var(--accent);color:#1c1503;font-size:11.5px;font-weight:700;padding:6px 12px;border-radius:14px;}
.ph-tap{position:absolute;right:28px;bottom:16px;width:14px;height:14px;border-radius:50%;background:rgba(255,255,255,.85);opacity:0;}
.ph-s2.on .ph-hit{animation:phPop .6s .5s both;}
.ph-s2.on .ph-tap{animation:phTap .9s 2.5s both;}
.ph-s2.on .ph-callbtn{animation:phPress .3s 2.7s both;}
.ph-ghost .ph-logo{background:#2a2a2f;}
.ph-ghost .ph-sk{margin:6px 0;height:8px;}

/* scene 3 — calling */
.ph-s3{display:flex;flex-direction:column;align-items:center;text-align:center;padding-top:44px;background:radial-gradient(circle at 50% 30%,rgba(201,162,75,.18),transparent 60%);}
.ph-avatar{position:relative;width:96px;height:96px;border-radius:50%;}
.ph-avatar img{position:relative;z-index:2;width:96px;height:96px;border-radius:50%;object-fit:cover;box-shadow:0 0 0 3px rgba(201,162,75,.6);}
.ph-avatar::before,.ph-avatar::after{content:"";position:absolute;inset:0;border-radius:50%;border:2px solid rgba(201,162,75,.6);}
.ph-s3.on .ph-avatar::before{animation:phRing 1.6s ease-out infinite;}
.ph-s3.on .ph-avatar::after{animation:phRing 1.6s .8s ease-out infinite;}
.ph-name{font-size:19px;font-weight:600;margin-top:22px;}
.ph-sub{font-size:13px;color:#9aa0a6;margin-top:6px;}
.ph-sub b{color:#3ddc84;font-weight:600;}
.ph-btns{display:flex;gap:26px;margin-top:auto;margin-bottom:44px;}
.ph-btns span{width:54px;height:54px;border-radius:50%;background:#2a2a2f;display:grid;place-items:center;font-size:18px;}
.ph-btns span.end{background:#e5484d;}

/* scene 4 — dispatched */
.ph-head{font-size:15px;font-weight:600;margin:6px 2px 2px;}
.ph-head small{display:block;font-size:11.5px;font-weight:400;color:#9aa0a6;margin-top:2px;}
.ph-map{position:relative;height:250px;margin-top:12px;border-radius:16px;overflow:hidden;background:#1b1d21;border:1px solid #2c2e33;}
.ph-map svg{position:absolute;inset:0;width:100%;height:100%;}
.ph-map .road{stroke:#2c2f35;stroke-width:9;fill:none;stroke-linecap:round;}
.ph-map .water{fill:#16222c;}
.ph-map .route{stroke:var(--accent);stroke-width:4;fill:none;stroke-linecap:round;stroke-dasharray:420;stroke-dashoffset:420;}
.ph-s4.on .ph-map .route{animation:phDraw 3.4s ease-in-out forwards;}
.ph-van{position:absolute;left:0;top:0;width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;background:var(--accent);display:grid;place-items:center;font-size:12px;
  box-shadow:0 0 0 4px rgba(201,162,75,.25);offset-path:path("M30 210 C 70 210, 80 150, 120 150 S 170 90, 200 60");offset-distance:0%;offset-rotate:0deg;}
.ph-s4.on .ph-van{animation:phDrive 3.4s ease-in-out forwards;}
.ph-pin{position:absolute;left:200px;top:60px;width:14px;height:14px;margin:-7px 0 0 -7px;border-radius:50%;background:#3ddc84;box-shadow:0 0 0 6px rgba(61,220,132,.2);}
.ph-eta{display:flex;justify-content:space-between;align-items:center;margin-top:12px;background:#1e1e22;border:1px solid #2e2e33;border-radius:12px;padding:10px 12px;font-size:12px;}
.ph-eta b{color:var(--accent-bright);font-size:13px;}
.ph-bar2{height:5px;border-radius:3px;background:#2a2a2f;margin-top:10px;overflow:hidden;}
.ph-bar2 i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--accent),var(--accent-bright));}
.ph-s4.on .ph-bar2 i{animation:phFill 3.6s ease-in-out forwards;}

/* scene 5 — done */
.ph-s5{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding-bottom:60px;}
.ph-check{width:92px;height:92px;}
.ph-check circle{fill:none;stroke:#3ddc84;stroke-width:5;stroke-dasharray:290;stroke-dashoffset:290;}
.ph-check path{fill:none;stroke:#3ddc84;stroke-width:6;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:70;stroke-dashoffset:70;}
.ph-s5.on .ph-check circle{animation:phStroke .7s ease forwards;}
.ph-s5.on .ph-check path{animation:phStroke .45s .6s ease forwards;}
.ph-done{font-family:'Oswald',sans-serif;text-transform:uppercase;font-size:24px;margin-top:18px;letter-spacing:.02em;}
.ph-done-sub{font-size:12.5px;color:#9aa0a6;margin-top:8px;line-height:1.5;}
.ph-done-sub b{color:var(--accent-bright);font-weight:600;}

/* progress dots under the phone */
.ph-dots{display:flex;gap:6px;margin-top:12px;}
.ph-dots i{width:6px;height:6px;border-radius:50%;background:rgba(255,255,255,.18);transition:background .3s,width .3s;}
.ph-dots i.on{background:var(--accent);width:18px;border-radius:3px;}

@media (max-width:940px){.ph-wrap{margin-top:12px;}}
@media (max-width:600px){.ph{transform:scale(.86);transform-origin:top center;margin-bottom:-78px;}}

@keyframes phBlink{50%{opacity:0;}}
@keyframes phKey{50%{background:#5a5a62;}}
@keyframes phPop{0%{transform:scale(.96);opacity:.4;}60%{transform:scale(1.02);}100%{transform:none;opacity:1;}}
@keyframes phTap{0%{opacity:0;transform:scale(.4);}30%{opacity:.9;transform:scale(1);}100%{opacity:0;transform:scale(2.6);}}
@keyframes phPress{50%{transform:scale(.9);}}
@keyframes phRing{0%{transform:scale(1);opacity:.9;}100%{transform:scale(1.7);opacity:0;}}
@keyframes phDraw{to{stroke-dashoffset:0;}}
@keyframes phDrive{to{offset-distance:100%;}}
@keyframes phFill{to{width:100%;}}
@keyframes phStroke{to{stroke-dashoffset:0;}}

/* =========================================================
   LATCH N LOCK MOTION — "unlock" theme (deliberately different from Screw and Key)
   ========================================================= */
@keyframes lnUnlatch{from{clip-path:inset(0 100% 0 0);}to{clip-path:inset(0 0 0 0);}}
@keyframes lnBolt{0%{transform:scaleX(0);transform-origin:left;}45%{transform:scaleX(1);transform-origin:left;}55%{transform:scaleX(1);transform-origin:right;}100%{transform:scaleX(0);transform-origin:right;}}
@keyframes lnFocus{from{opacity:0;filter:blur(8px);letter-spacing:.12em;}to{opacity:1;filter:none;letter-spacing:normal;}}
@keyframes lnPan{from{transform:scale(1.08) translateX(-2.5%);}to{transform:scale(1.08) translateX(2.5%);}}
@keyframes lnLight{0%{background-position:-60% 0;}100%{background-position:160% 0;}}
@keyframes lnShimmer{0%,55%{left:-60%;}100%{left:130%;}}
@keyframes lnRule{from{transform:scaleX(0);}to{transform:scaleX(1);}}
@keyframes lnStar{0%{opacity:0;transform:scale(.2) rotate(-90deg);}70%{transform:scale(1.25) rotate(8deg);}100%{opacity:1;transform:none;}}
@keyframes lnRoll{from{transform:translateY(105%);}to{transform:none;}}
@keyframes lnGlowPill{0%{box-shadow:0 0 0 0 rgba(227,198,126,0);border-color:var(--line);}40%{box-shadow:0 0 14px 2px rgba(227,198,126,.45);border-color:var(--accent-bright);color:var(--off-white);}100%{box-shadow:0 0 0 0 rgba(227,198,126,0);}}

/* Hero: headline is "unlatched" left→right by a gold bolt, background pans with a passing light */
.sk-js .hero-bg{animation:lnPan 26s ease-in-out infinite alternate;will-change:transform;}
.hero-overlay::after{content:"";position:absolute;inset:0;background:linear-gradient(100deg,transparent 30%,rgba(227,198,126,.10) 50%,transparent 70%) no-repeat;background-size:60% 100%;animation:lnLight 9s ease-in-out infinite;pointer-events:none;}
.sk-js .hero h1{position:relative;animation:lnUnlatch 1.1s .25s cubic-bezier(.7,0,.2,1) both;}
.sk-js .hero h1::after{content:"";position:absolute;left:0;right:0;top:50%;height:6px;margin-top:-3px;border-radius:3px;background:linear-gradient(90deg,var(--accent),var(--accent-bright));animation:lnBolt 1.1s .2s cubic-bezier(.7,0,.2,1) both;}
.sk-js .hero .eyebrow,.sk-js .hero-chips{animation:lnFocus .8s .05s both;}
.sk-js .hero p.sub{animation:lnFocus .9s .9s both;}
.sk-js .hero-actions{animation:lnFocus .8s 1.1s both;}
.sk-js .hero-proof{animation:lnFocus .8s 1.3s both;}
.sk-js .hero-form-card,.sk-js .hero .ph-wrap{animation:lnUnlatch 1s .6s cubic-bezier(.7,0,.2,1) both;}

/* Call buttons: a gold-white shimmer passes over them (no pulse rings, no ringing icon) */
.hero-actions a[href^="tel:"],.hero-form-card a[href^="tel:"],.topbar-cta,.sticky-mobile-bar .sticky-call,.final-cta a[href^="tel:"],.call-unified,.reviews-cta a.btn-primary{position:relative;overflow:hidden;isolation:isolate;}
.hero-actions a[href^="tel:"]::after,.hero-form-card a[href^="tel:"]::after,.topbar-cta::after,.sticky-mobile-bar .sticky-call::after,.final-cta a[href^="tel:"]::after,.call-unified::after{
  content:"";position:absolute;top:-20%;bottom:-20%;left:-60%;width:40%;background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent);transform:skewX(-22deg);animation:lnShimmer 4.2s ease-in-out infinite;pointer-events:none;z-index:1;}

/* Section reveal: content is unlatched left→right; headings come into focus; gold rule draws in */
.sk-js .ln-in{clip-path:inset(0 100% 0 0);transition:clip-path .9s cubic-bezier(.7,0,.2,1);transition-delay:var(--d,0s);}
.sk-js .ln-in.in{clip-path:inset(-20px -20px -20px -20px);}
.sk-js .section-head.ln-head h2{opacity:0;filter:blur(8px);transition:opacity .8s ease,filter .8s ease;}
.sk-js .section-head.ln-head.in h2{opacity:1;filter:none;}
.sk-js .section-head.ln-head h2::after{transform:scaleX(0);transition:transform .7s .35s cubic-bezier(.7,0,.2,1);}
.sk-js .section-head.ln-head.in h2::after{transform:scaleX(1);}

/* Cards: gold spotlight follows the cursor + border lights up (no lifting) */
.service-card,.t-card,.county-col{position:relative;}
.service-card::after,.t-card::after{content:"";position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity .25s;
  background:radial-gradient(260px circle at var(--mx,50%) var(--my,50%),rgba(227,198,126,.16),transparent 65%);}
.service-card:hover::after,.t-card:hover::after{opacity:1;}
.service-card:hover,.t-card:hover{box-shadow:inset 0 0 0 1px rgba(227,198,126,.55);}

/* Review stars pop in one by one */
.ln-star{display:inline-block;}
.sk-js .ln-stars-go .ln-star{animation:lnStar .45s calc(var(--i)*.09s) both;}

/* Stats roll up like lock tumblers */
.stat-num{overflow:hidden;}
.stat-num .ln-roll{display:inline-block;}
.sk-js .ln-rolled .ln-roll{animation:lnRoll .7s calc(var(--i,0)*.12s) cubic-bezier(.2,.8,.2,1) both;}

/* Service-area: a gold glow travels across the town list */
.sk-js .ln-wave .pills > *{animation:lnGlowPill 1.2s calc(var(--i)*.035s) ease both;}

/* Scroll indicator: a padlock whose shackle opens as you read (desktop only) */
.ln-lock{position:fixed;right:22px;bottom:22px;z-index:90;width:46px;height:56px;pointer-events:none;opacity:.92;}
.ln-lock .shackle{transition:transform .15s linear;transform-origin:36px 22px;}
.ln-lock .body{fill:var(--accent);}
.ln-lock .ring{stroke:var(--accent-bright);}
@media (max-width:940px){.ln-lock{display:none;}}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation:none !important;transition:none !important;}
  .sk-js .ln-in{clip-path:none !important;}
  .sk-js .section-head.ln-head h2{opacity:1 !important;filter:none !important;}
  .sk-js .section-head.ln-head h2::after{transform:none !important;}
  .ph-map .route{stroke-dashoffset:0;}
  .ph-van{offset-distance:100%;}
  .ln-lock{display:none;}
}
@media print{.sk-js .ln-in{clip-path:none;}.ln-lock,.ph-wrap{display:none;}}

/* phones: header squeezed the number into 4 lines and the name into 3 */
@media (max-width:520px){
  .topbar-inner{padding:12px 16px !important;gap:10px;}
  .topbar-actions .topbar-text{display:none !important;}
  .topbar-cta{white-space:nowrap;padding:10px 14px !important;font-size:13px !important;}
  .brand{font-size:17px !important;white-space:nowrap;}
}
@media (max-width:360px){.brand{font-size:0 !important;gap:0 !important;}}
@media (max-width:380px){.sticky-mobile-bar{gap:8px !important;padding:10px 8px !important;}.sticky-mobile-bar a{font-size:14px !important;padding:14px 6px !important;gap:5px !important;}}
