/* ============================================================================
   Sovereign Row Studios — Local SEO page (local-seo.html)
   Page-scoped styles. Every class is prefixed `.ls-` so nothing here can
   collide with styles.css. Reuses shared tokens (--grad / --muted / --navh),
   the shared section scaffold (.mp-sec / .mp-kicker / .mp-title / .mp-grad /
   .wd-head), the shared buttons (.nh-btn), and the sitewide final CTA (.wd-cta).
   Dark / premium / neon house style; mobile-first; compositor-only motion.
   ========================================================================== */

/* ---------- shared section rhythm tweak for this page ---------- */
.ls-sec{padding:clamp(3.4rem,9vh,6rem) clamp(1.2rem,5vw,2.5rem)}
.ls-sec .mp-sec__inner{max-width:1180px}

/* ===== 1 · HERO ========================================================= */
.ls-hero{position:relative;z-index:1;min-height:100svh;display:flex;align-items:center;
  padding:calc(var(--navh) + clamp(2rem,7vh,4.5rem)) clamp(1.2rem,5vw,2.5rem) clamp(2.5rem,7vh,4rem)}
.ls-hero__inner{width:100%;max-width:1180px;margin:0 auto;
  display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:clamp(1.8rem,4vw,3.4rem);align-items:center}
.ls-hero__copy{max-width:42rem}
.ls-badge{display:inline-flex;align-items:center;gap:.55rem;font-size:clamp(.6rem,2.4vw,.72rem);
  font-weight:600;letter-spacing:.28em;text-transform:uppercase;color:#cdbcff;
  padding:.5rem .85rem;border-radius:999px;border:1px solid rgba(168,85,247,.32);
  background:rgba(16,12,32,.5);margin-bottom:1.3rem}
.ls-badge i{width:7px;height:7px;border-radius:50%;background:var(--grad);
  box-shadow:0 0 12px 1px rgba(255,46,154,.8)}
.ls-hero__title{font-size:clamp(2.3rem,7.2vw,4.4rem);line-height:1.02;font-weight:200;
  text-transform:uppercase;letter-spacing:.02em;color:#fff;margin:0 0 1.2rem}
.ls-hero__title b{font-weight:600;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.ls-hero__sub{display:block;font-family:'Pacifico',cursive;font-weight:400;text-transform:none;letter-spacing:0;
  font-size:clamp(1.1rem,3vw,1.7rem);line-height:1.2;margin-top:.5rem;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.ls-hero__lead{font-size:clamp(1rem,2.1vw,1.16rem);line-height:1.7;color:var(--muted);font-weight:300;max-width:38rem;margin:0 0 1.8rem}
.ls-hero__cta{display:flex;flex-wrap:wrap;gap:.9rem;margin-bottom:1.9rem}
.ls-hero__mini{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:1.3rem}
.ls-hero__mini li{display:flex;align-items:center;gap:.5rem;font-size:.82rem;font-weight:500;color:#c9c4dd}
.ls-hero__mini-ico{width:26px;height:26px;border-radius:8px;display:grid;place-items:center;flex:0 0 auto;
  border:1px solid rgba(168,85,247,.3);background:rgba(16,12,32,.5)}
.ls-hero__mini-ico svg{width:15px;height:15px;fill:none;stroke:#cdbcff;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}

/* Hero visual — stylised OKC map-pack mock (pure CSS/SVG, ambient, no real data) */
.ls-mock{position:relative;border:1px solid rgba(168,85,247,.28);border-radius:20px;overflow:hidden;
  background:linear-gradient(180deg,rgba(22,16,44,.72),rgba(9,8,20,.78));
  box-shadow:0 30px 70px -30px rgba(0,0,0,.8),inset 0 0 0 1px rgba(255,255,255,.02)}
.ls-mock__bar{display:flex;align-items:center;gap:.5rem;padding:.7rem .9rem;border-bottom:1px solid rgba(168,85,247,.18);
  background:rgba(10,8,20,.6)}
.ls-mock__field{flex:1;display:flex;align-items:center;gap:.5rem;font-size:.72rem;color:#9a93b3;
  padding:.4rem .7rem;border-radius:999px;border:1px solid rgba(168,85,247,.22);background:rgba(20,16,40,.6)}
.ls-mock__field svg{width:13px;height:13px;fill:none;stroke:#cdbcff;stroke-width:1.8;flex:0 0 auto}
.ls-mock__pin{margin-left:auto;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;
  background:var(--grad);box-shadow:0 0 16px -3px rgba(255,46,154,.8);flex:0 0 auto}
.ls-mock__pin svg{width:13px;height:13px;fill:#fff;stroke:none}
.ls-mock__map{position:relative;height:clamp(150px,22vw,200px);overflow:hidden;
  background:radial-gradient(120% 120% at 30% 20%,rgba(91,139,255,.18),transparent 55%),
             linear-gradient(160deg,rgba(20,16,40,.9),rgba(9,8,20,.95))}
.ls-mock__map svg{position:absolute;inset:0;width:100%;height:100%}
.ls-mock__road{fill:none;stroke:rgba(168,140,255,.22);stroke-width:2}
.ls-mock__drop{transform-origin:center;animation:lsDrop 4.4s ease-in-out infinite}
.ls-mock__drop--2{animation-delay:.9s}
.ls-mock__drop--3{animation-delay:1.8s}
@keyframes lsDrop{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}
.ls-mock__list{padding:.8rem .9rem .95rem;display:grid;gap:.55rem}
.ls-mock__row{display:flex;align-items:center;gap:.7rem;padding:.6rem .7rem;border-radius:12px;
  border:1px solid rgba(168,85,247,.16);background:rgba(16,12,32,.5)}
.ls-mock__row--top{border-color:rgba(255,46,154,.45);background:rgba(28,14,40,.6);
  box-shadow:0 0 26px -10px rgba(255,46,154,.6)}
.ls-mock__rank{width:24px;height:24px;border-radius:7px;display:grid;place-items:center;flex:0 0 auto;
  font-size:.74rem;font-weight:700;color:#fff;background:rgba(168,85,247,.25)}
.ls-mock__row--top .ls-mock__rank{background:var(--grad)}
.ls-mock__lines{flex:1;display:grid;gap:.32rem}
.ls-mock__lines b{height:8px;border-radius:4px;width:62%;
  background:linear-gradient(90deg,rgba(214,186,255,.7),rgba(214,186,255,.25))}
.ls-mock__row--top .ls-mock__lines b{background:var(--grad);width:74%}
.ls-mock__lines i{height:6px;border-radius:3px;width:42%;background:rgba(154,147,179,.3)}
.ls-mock__tag{font-size:.6rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#ffd1ec;
  padding:.22rem .5rem;border-radius:6px;background:rgba(255,46,154,.18);flex:0 0 auto}

/* ===== 2 · SUB-SERVICES ================================================= */
.ls-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1.1rem}
.ls-feat{position:relative;display:flex;flex-direction:column;padding:1.5rem 1.45rem;border-radius:16px;
  border:1px solid rgba(168,85,247,.2);background:linear-gradient(180deg,rgba(20,16,40,.5),rgba(10,9,22,.42));
  transition:transform .4s cubic-bezier(.22,1,.36,1),border-color .4s,box-shadow .4s}
.ls-feat:hover{transform:translateY(-4px);border-color:rgba(255,46,154,.4);
  box-shadow:0 22px 50px -28px rgba(255,46,154,.55)}
.ls-feat__ico{width:46px;height:46px;border-radius:13px;display:grid;place-items:center;margin-bottom:1rem;
  border:1px solid rgba(168,85,247,.3);background:rgba(16,12,32,.6)}
.ls-feat__ico svg{width:23px;height:23px;fill:none;stroke:#cdbcff;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ls-feat h3{font-size:1.06rem;font-weight:600;color:#fff;margin:0 0 .45rem}
.ls-feat p{font-size:.9rem;line-height:1.6;color:var(--muted);font-weight:300;margin:0}

/* ===== 3 · PROCESS ====================================================== */
.ls-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.1rem;counter-reset:lsstep}
.ls-step{position:relative;padding:1.6rem 1.4rem 1.4rem;border-radius:16px;
  border:1px solid rgba(168,85,247,.2);background:linear-gradient(180deg,rgba(20,16,40,.5),rgba(10,9,22,.42))}
.ls-step__no{display:inline-grid;place-items:center;width:42px;height:42px;border-radius:12px;margin-bottom:.9rem;
  font-size:1.05rem;font-weight:700;color:#fff;background:var(--grad);
  box-shadow:0 0 22px -7px rgba(255,46,154,.8)}
.ls-step__no::before{counter-increment:lsstep;content:counter(lsstep)}
.ls-step h3{font-size:1.02rem;font-weight:600;color:#fff;margin:0 0 .4rem}
.ls-step p{font-size:.88rem;line-height:1.58;color:var(--muted);font-weight:300;margin:0}

/* ===== 4 · WHY / DELIVERABLES =========================================== */
.ls-why{display:grid;grid-template-columns:minmax(0,.92fr) minmax(0,1.08fr);gap:clamp(1.6rem,4vw,3rem);align-items:start}
.ls-why__copy h2{font-size:clamp(1.6rem,3.6vw,2.6rem);line-height:1.05;font-weight:200;text-transform:uppercase;
  letter-spacing:.03em;color:#fff;margin:0 0 1rem}
.ls-why__copy h2 b{font-weight:600;background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.ls-why__copy p{font-size:clamp(.94rem,1.6vw,1.05rem);line-height:1.7;color:var(--muted);font-weight:300;margin:0 0 1.1rem;max-width:34rem}
.ls-why__stats{display:flex;flex-wrap:wrap;gap:1.6rem;margin-top:1.4rem}
.ls-why__stat b{display:block;font-size:clamp(1.3rem,3vw,1.8rem);font-weight:700;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent;line-height:1}
.ls-why__stat span{display:block;font-size:.74rem;letter-spacing:.05em;text-transform:uppercase;color:#9a93b3;margin-top:.35rem}
.ls-deliver{list-style:none;margin:0;padding:0;display:grid;gap:.7rem}
.ls-deliver li{display:flex;align-items:flex-start;gap:.7rem;padding:.85rem 1rem;border-radius:13px;
  border:1px solid rgba(168,85,247,.18);background:rgba(16,12,32,.45)}
.ls-deliver__ico{width:24px;height:24px;border-radius:7px;flex:0 0 auto;display:grid;place-items:center;
  background:var(--grad);box-shadow:0 0 16px -6px rgba(255,46,154,.8)}
.ls-deliver__ico svg{width:14px;height:14px;fill:none;stroke:#fff;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.ls-deliver__txt b{display:block;font-size:.94rem;font-weight:600;color:#fff;margin-bottom:.15rem}
.ls-deliver__txt span{font-size:.85rem;line-height:1.5;color:var(--muted);font-weight:300}

/* ===== 5 · PACKAGES ===================================================== */
.ls-pkg-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(258px,1fr));gap:1.1rem}
.ls-card{display:flex;flex-direction:column;border:1px solid rgba(168,85,247,.22);border-radius:16px;padding:1.6rem 1.45rem;
  background:linear-gradient(180deg,rgba(20,16,40,.5),rgba(10,9,22,.4));
  transition:transform .4s cubic-bezier(.22,1,.36,1),border-color .4s,box-shadow .4s}
.ls-card:hover{transform:translateY(-4px);border-color:rgba(255,46,154,.4);
  box-shadow:0 24px 54px -30px rgba(255,46,154,.55)}
.ls-card__type{font-size:.64rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#9a8cc7;margin:0 0 .55rem}
.ls-card h3{font-size:1.04rem;font-weight:600;color:#fff;margin:0 0 .5rem;line-height:1.25}
.ls-card__price{font-size:1.7rem;font-weight:700;line-height:1;margin:0 0 1rem;
  background:var(--grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.ls-card__price em{font-size:.85rem;font-weight:500;font-style:normal;color:#8a87a0;
  -webkit-text-fill-color:#8a87a0}
.ls-card ul{list-style:none;margin:0 0 1.4rem;padding:0;display:grid;gap:.5rem}
.ls-card li{position:relative;padding-left:1.4rem;font-size:.86rem;line-height:1.5;color:var(--muted);font-weight:300}
.ls-card li::before{content:'';position:absolute;left:0;top:.36em;width:13px;height:13px;border-radius:4px;
  background:var(--grad);
  -webkit-mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='none' stroke='black' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round' d='M5 12l4 4 10-11'/></svg>") center/100% no-repeat;
  mask:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='none' stroke='black' stroke-width='3.2' stroke-linecap='round' stroke-linejoin='round' d='M5 12l4 4 10-11'/></svg>") center/100% no-repeat}
.ls-card .nh-btn{margin-top:auto;width:100%;justify-content:center}
.ls-cat{font-size:.66rem;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:#cdbcff;margin:1.8rem 0 .9rem}
.ls-cat:first-child{margin-top:0}
.ls-note{color:#8a87a0;font-size:.9rem;line-height:1.6;margin-top:1.6rem;text-align:center}
.ls-note a{color:#cdbcff}

/* ===== 6 · FAQ ========================================================== */
.ls-faq{display:grid;gap:.8rem;max-width:54rem;margin:0 auto}
.ls-faq details{border:1px solid rgba(168,85,247,.2);border-radius:14px;
  background:linear-gradient(180deg,rgba(20,16,40,.45),rgba(10,9,22,.38));overflow:hidden;
  transition:border-color .3s}
.ls-faq details[open]{border-color:rgba(255,46,154,.38)}
.ls-faq summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:1rem;
  padding:1.05rem 1.3rem;font-size:1rem;font-weight:600;color:#fff}
.ls-faq summary::-webkit-details-marker{display:none}
.ls-faq summary::after{content:'';margin-left:auto;flex:0 0 auto;width:13px;height:13px;
  border-right:2px solid #cdbcff;border-bottom:2px solid #cdbcff;transform:rotate(45deg);
  transition:transform .3s cubic-bezier(.22,1,.36,1)}
.ls-faq details[open] summary::after{transform:rotate(-135deg)}
.ls-faq__a{padding:0 1.3rem 1.2rem;font-size:.92rem;line-height:1.68;color:var(--muted);font-weight:300;margin:0}

/* ===== 7 · RELATED ===================================================== */
.ls-rel{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1.1rem}
.ls-rel__card{display:flex;flex-direction:column;text-decoration:none;padding:1.5rem 1.4rem;border-radius:16px;
  border:1px solid rgba(168,85,247,.2);background:linear-gradient(180deg,rgba(20,16,40,.5),rgba(10,9,22,.42));
  transition:transform .4s cubic-bezier(.22,1,.36,1),border-color .4s,box-shadow .4s}
.ls-rel__card:hover{transform:translateY(-4px);border-color:rgba(255,46,154,.4);
  box-shadow:0 22px 50px -28px rgba(255,46,154,.55)}
.ls-rel__ico{width:44px;height:44px;border-radius:12px;display:grid;place-items:center;margin-bottom:.9rem;
  border:1px solid rgba(168,85,247,.3);background:rgba(16,12,32,.6)}
.ls-rel__ico svg{width:22px;height:22px;fill:none;stroke:#cdbcff;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.ls-rel__card h3{font-size:1.02rem;font-weight:600;color:#fff;margin:0 0 .4rem}
.ls-rel__card p{font-size:.87rem;line-height:1.55;color:var(--muted);font-weight:300;margin:0 0 1rem}
.ls-rel__more{margin-top:auto;font-size:.82rem;font-weight:600;letter-spacing:.04em;color:#cdbcff;
  display:inline-flex;align-items:center;gap:.4rem}
.ls-rel__card:hover .ls-rel__more span{transform:translateX(4px)}
.ls-rel__more span{transition:transform .3s}

/* ===== SIGNATURE MOMENT — RANK CLIMB ===================================
   A business climbing from page two to the #1 local spot. The FINAL ranked
   state is the default render: bars sit at their --h heights, the "You" bar
   tops out at #1 with its map-pin, and the story list reads top-to-bottom.
   With JS + motion, anim.js adds .is-in and the bars/pins animate up into
   place. With no JS, or with prefers-reduced-motion, nothing animates and the
   finished chart + the readable ranking story are shown immediately.
   All motion is transform/opacity only (compositor-friendly, no layout thrash).
   ====================================================================== */
.ls-climb-sec .mp-sec__inner{max-width:1100px}
.ls-climb{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,.85fr);
  gap:clamp(1.4rem,4vw,3rem);align-items:stretch;margin-top:clamp(1.6rem,4vh,2.6rem)}

/* ---- the chart ---- */
.ls-climb__chart{position:relative;height:clamp(240px,38vw,360px);padding:1.1rem 1.1rem 0;
  border:1px solid rgba(168,85,247,.22);border-radius:20px;overflow:hidden;
  background:
    radial-gradient(120% 90% at 85% 0%,rgba(255,46,154,.12),transparent 55%),
    linear-gradient(180deg,rgba(22,16,44,.7),rgba(9,8,20,.78));
  box-shadow:0 30px 70px -34px rgba(0,0,0,.8),inset 0 0 0 1px rgba(255,255,255,.02)}

/* horizontal ranking zones (top = map pack) */
.ls-climb__zones{position:absolute;inset:1.1rem 1.1rem 2.4rem;display:grid;
  grid-template-rows:1fr 1fr 1fr;pointer-events:none}
.ls-climb__zone{position:relative;border-top:1px dashed rgba(168,140,255,.16)}
.ls-climb__zone i{position:absolute;left:0;top:.35rem;font-style:normal;
  font-size:.58rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#7d76a0}
.ls-climb__zone--pack{border-top-color:rgba(255,46,154,.45)}
.ls-climb__zone--pack i{color:#ffb3da}

/* the bars rail */
.ls-climb__bars{position:absolute;inset:1.1rem 1.1rem 2.4rem;display:flex;align-items:flex-end;
  justify-content:space-between;gap:clamp(.4rem,1.4vw,.9rem)}
.ls-climb__bar{position:relative;flex:1;height:var(--h,30%);border-radius:8px 8px 3px 3px}
/* an inner fill carries the climb so the bar box (and its pin) never distort */
.ls-climb__bar::before{content:'';position:absolute;inset:0;border-radius:inherit;
  background:linear-gradient(180deg,rgba(168,140,255,.5),rgba(120,90,210,.22));
  transform-origin:bottom}
.ls-climb__bar--you::before{background:var(--grad);
  box-shadow:0 0 26px -6px rgba(255,46,154,.75),0 -6px 22px -8px rgba(255,46,154,.6)}
.ls-climb__pin{position:absolute;left:50%;top:-30px;transform:translateX(-50%);
  width:30px;height:30px;border-radius:50%;display:grid;place-items:center;
  background:var(--grad);box-shadow:0 0 18px -3px rgba(255,46,154,.85)}
.ls-climb__pin svg{width:17px;height:17px;fill:#fff;stroke:none}
.ls-climb__flag{position:absolute;left:50%;top:6px;transform:translateX(-50%);
  font-size:.7rem;font-weight:800;letter-spacing:.04em;color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.5)}

/* baseline label rail */
.ls-climb__chart::after{content:'Local search position over time';position:absolute;
  left:1.1rem;right:1.1rem;bottom:.85rem;text-align:center;
  font-size:.6rem;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:#6f6892}

/* ---- the readable ranking story (the real content, always visible) ---- */
.ls-climb__story{list-style:none;margin:0;padding:0;display:grid;gap:.7rem;align-content:center}
.ls-climb__step{display:flex;align-items:flex-start;gap:.85rem;padding:.9rem 1rem;border-radius:14px;
  border:1px solid rgba(168,85,247,.2);background:rgba(16,12,32,.5)}
.ls-climb__step--top{border-color:rgba(255,46,154,.45);background:rgba(28,14,40,.6);
  box-shadow:0 0 26px -12px rgba(255,46,154,.6)}
.ls-climb__rank{flex:0 0 auto;font-size:.62rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:#cdbcff;padding:.4rem .55rem;border-radius:8px;background:rgba(168,85,247,.18);white-space:nowrap}
.ls-climb__step--top .ls-climb__rank{color:#fff;background:var(--grad)}
.ls-climb__txt{font-size:.86rem;line-height:1.5;color:var(--muted);font-weight:300}
.ls-climb__txt b{display:block;font-size:.95rem;font-weight:600;color:#fff;margin-bottom:.15rem}

/* ---- MOTION (enhancement only) -----------------------------------------
   The collapsed "before the climb" state is gated on .ls-climb--ready, a class
   added by js/local-seo.js ONLY when JS runs AND motion is allowed. So with no
   JS, or with prefers-reduced-motion (the script bails), the class is never
   added and the chart renders in its finished, filled #1 state. The climb then
   plays when anim.js adds .is-in to the same element. */
@media (prefers-reduced-motion:no-preference){
  /* bar fills grow up from the baseline when the chart reveals */
  .ls-climb--ready .ls-climb__bar::before{transform:scaleY(0);
    transition:transform .9s cubic-bezier(.22,1,.36,1)}
  .ls-climb--ready.is-in .ls-climb__bar::before{transform:scaleY(1)}
  /* climb the rank order left-to-right so it reads as a journey up */
  .ls-climb--ready .ls-climb__bar:nth-child(1)::before{transition-delay:.04s}
  .ls-climb--ready .ls-climb__bar:nth-child(2)::before{transition-delay:.12s}
  .ls-climb--ready .ls-climb__bar:nth-child(3)::before{transition-delay:.2s}
  .ls-climb--ready .ls-climb__bar:nth-child(4)::before{transition-delay:.28s}
  .ls-climb--ready .ls-climb__bar:nth-child(5)::before{transition-delay:.36s}
  .ls-climb--ready .ls-climb__bar:nth-child(6)::before{transition-delay:.44s}
  .ls-climb--ready .ls-climb__bar--you::before{transition-delay:.56s}

  /* the pin + flag drop in after the "You" bar arrives at #1 */
  .ls-climb--ready .ls-climb__pin{opacity:0;transform:translateX(-50%) translateY(-10px);
    transition:opacity .5s ease,transform .55s cubic-bezier(.34,1.56,.64,1)}
  .ls-climb--ready .ls-climb__flag{opacity:0;transform:translateX(-50%) translateY(-6px);
    transition:opacity .5s ease,transform .55s cubic-bezier(.34,1.56,.64,1)}
  .ls-climb--ready.is-in .ls-climb__pin{opacity:1;transform:translateX(-50%) translateY(0);transition-delay:1.05s}
  .ls-climb--ready.is-in .ls-climb__flag{opacity:1;transform:translateX(-50%) translateY(0);transition-delay:1.15s}

  /* the "You" bar fill gives a gentle settle pulse once it lands */
  .ls-climb--ready.is-in .ls-climb__bar--you::before{animation:lsClimbGlow 2.4s ease-in-out 1.3s 1}
}
@keyframes lsClimbGlow{
  0%{box-shadow:0 0 26px -6px rgba(255,46,154,.75),0 -6px 22px -8px rgba(255,46,154,.6)}
  35%{box-shadow:0 0 40px -2px rgba(255,46,154,.95),0 -10px 30px -6px rgba(255,46,154,.8)}
  100%{box-shadow:0 0 26px -6px rgba(255,46,154,.75),0 -6px 22px -8px rgba(255,46,154,.6)}
}

/* ===== tasteful scroll parallax (anim.js data-scrub sets --p 0..1) =====
   Applied ONLY to decorative, aria-hidden elements that are NOT also reveal
   targets, so the reveal entrance transform is never fought over. Compositor-
   only translate; reduced-motion gets --p:0 from anim.js, and the media query
   below additionally hard-disables the movement. */
@media (prefers-reduced-motion:no-preference){
  /* hero map-pack art drifts gently behind the steady card frame */
  .ls-mock__map{transform:translateY(calc((var(--p,.5) - .5) * 14px))}
  /* the rank-climb chart lifts a touch as it scrolls through the viewport */
  .ls-climb__chart{transform:translateY(calc((var(--p,.5) - .5) * -20px))}
}

/* ===== responsive ====================================================== */
@media (max-width:920px){
  .ls-hero__inner{grid-template-columns:1fr}
  .ls-mock{max-width:30rem;margin:0 auto}
  .ls-why{grid-template-columns:1fr}
  .ls-climb{grid-template-columns:1fr}
  .ls-climb__chart{height:clamp(220px,52vw,300px)}
}
@media (max-width:560px){
  .ls-hero__mini{gap:.9rem}
  .ls-why__stats{gap:1.2rem}
  .ls-card .nh-btn{width:100%}
  .ls-climb__zone i{font-size:.52rem}
}
