/* =====================================================================
   LeadsNimble Pricing 2 — the REWRITTEN "Simple pricing for every market."

   Ported 1:1 from the CURRENT leadsnimble_html reference:
     src/html/partials/pricing.html
     src/css/components/pricing.css      (#pricing, .toggle, .plan*, .pricing__included)
     src/css/components/risk.css         (#pricing .risk — now standalone PILLS)
     src/css/components/buttons.css      (.btn, .btn--primary, .btn--ghost)
     src/css/base/1-reset.css            (type baseline, h2 metrics, button reset)
     src/css/base/2-layout.css           (.wrap, .section, .section__head, .eyebrow)
     src/css/base/3-utilities.css        (.reveal stagger, reduced motion)
     src/css/base/4-responsive.css       (gutter / section padding / head spacing)
     src/css/themes/aurora-nightfall/    (tokens + overrides, resolved to literals)

   SHIPS ALONGSIDE lnew-pricing.css, which is the EARLIER generation of the same
   section and is untouched. The two share no class prefix, no --token namespace,
   no CSS and no JS — see the widget class docblock for what changed between
   them (4 plans incl. a prose "Custom" tier, a lighter 19/42px price scale, a
   card hover lift, the "every plan includes" line, and a trust bar rebuilt from
   one divided panel into four standalone coloured pills).

   Same conventions as lnew-solution2.css / lnew-why.css: the theme's tokens are
   resolved to literal values and re-scoped under --lnpr2-*, LIGHT is the default
   mode, and [data-mode="dark"] flips the palette (the switch the nav writes).
   The dark palette control section is emitted at
   [data-mode="dark"] {{WRAPPER}} .lnew-pricing2 so it outranks the light
   controls on specificity, not source order.

   SIX things the reference cascade does that a naive copy would get wrong —
   all reproduced here as their COMPUTED result, all documented:

   1. `.plan { padding: 26px 22px }` (<=760px) and `.plan { padding: 26px 20px }`
      + `.plan__amt { font-size: 42px }` (<=460px) live in base/4-responsive.css,
      which build.sh concatenates BEFORE components/pricing.css. Both files
      target `.plan` / `.plan__amt` at (0,1,0), so pricing.css — being later —
      wins at every width and those three "responsive" rules never apply. The
      card therefore keeps its 30px/24px padding and its fluid clamp() amount on
      a 320px phone. That computed result is what is authored below; the dead
      steps are not resurrected. Same for `@media (hover:none) .plan:hover
      { transform: none }`, which components/pricing.css out-orders at equal
      specificity. (Style-tab controls can add real responsive steps if you
      want them.)

   2. THE PLAN HOVER IS HALF-DEAD IN LIGHT MODE. components/pricing.css says
      `.plan:hover { transform: translateY(-6px); box-shadow: var(--shadow-md);
      border-color: var(--accent-soft-border) }` at (0,2,0). The theme's
      overrides.css — concatenated LAST — says `[data-mode="light"] .plan
      { box-shadow: var(--shadow-sm); border-color: var(--line) }`, also (0,2,0).
      Tie on specificity, so source order decides and the override wins: in
      LIGHT the card only lifts, its shadow and border never change. In DARK the
      competing rule is the (0,1,0) glass rule, so the full hover applies.
      Reproduced via --lnpr2-plan-hover-shadow / --lnpr2-plan-hover-border,
      whose light defaults are the RESTING values. Set them to the md shadow /
      accent border in the Style tab if you want the hover the CSS implies.

   3. The featured card and the trust pills are scoped under `#pricing` in the
      reference purely so they outrank that same `[data-mode="light"]` override.
      There is no competing rule here, so the featured card's specificity is
      rebuilt with a plain descendant pair instead (see the block below) and the
      anchor stays a free control — no ID is load-bearing.

   4. The featured card's REST transform must lose to its own :hover and win
      over the generic `.plan:hover`. In the reference that falls out of
      #pricing (1,1,0) vs .plan:hover (0,2,0) vs #pricing .plan--featured:hover
      (1,2,0). Here the same three-way ordering is rebuilt as
      `.lnew-pricing2 .lnew-pricing2__plan--featured` (0,2,0, declared after the
      generic hover) and `… --featured:hover` (0,3,0). Consequence, faithful to
      the reference: the <=600px `transform: none` still loses to the featured
      :hover, so a mouse hovering a phone-width featured card lifts it.

   5. The trust pill's blur is NOT reset in dark. risk.css's `#pricing
      .risk__item` sets background / border / box-shadow but never touches
      backdrop-filter, so the theme's glass blur survives on the pill in dark
      and is switched off in light by `[data-mode="light"] .risk__item`.
      That is why --lnpr2-glass-blur is applied to the pill as well as the card.

   6. OVERFLOW GUARDS, the only intentional additions. The reference is authored
      against exactly the copy it ships; a widget's copy is whatever the editor
      types. So: `.plans` uses minmax(0, 1fr) rather than the reference's bare
      `1fr` (= minmax(auto, 1fr)) and the card carries `min-width: 0`, so a long
      feature line cannot blow its track wider than its share; the feature row
      carries `overflow-wrap: break-word`; and the price row is `flex-wrap:
      wrap` where the reference is nowrap, so an over-long amount + suffix wraps
      instead of spilling out of a 228px-wide 4-up card. All four are inert at
      the reference's own copy — a full computed-style diff against the template
      at 13 widths in both modes finds NOTHING else, and flex-wrap is the only
      one of them that shows up as a differing computed value.

   One more thing the diff reports and that is NOT a difference: this file
   writes the section gradient as `linear-gradient(180deg, <a> 0%, <b> <stop>)`
   because light mode needs the 60% midpoint as a control, so the computed value
   serialises with explicit stops where the reference's two-stop dark gradient
   does not. Same rendering, different string.
   ===================================================================== */

/* Local reset. Wrapped in :where() so it carries ZERO specificity — see
   [[nav-widget-feature]] for the four cascade traps this avoids. Do not
   unwrap: a bare `.lnew-pricing2 svg {}` is (0,1,1) and would outrank the
   component rules it is meant to sit under. */
.lnew-pricing2, .lnew-pricing2 *, .lnew-pricing2 *::before, .lnew-pricing2 *::after { box-sizing: border-box; }
:where(.lnew-pricing2) :where(a) { color: inherit; text-decoration: none; }
:where(.lnew-pricing2) :where(p) { margin: 0; }
:where(.lnew-pricing2) :where(ul, ol) { margin: 0; padding: 0; list-style: none; }
:where(.lnew-pricing2) :where(li) { margin: 0; }
:where(.lnew-pricing2) :where(svg) { display: block; }
:where(.lnew-pricing2) :where(h1, h2, h3, h4, h5) { margin: 0; }
:where(.lnew-pricing2) :where(b, strong) { font-weight: 700; }
:where(.lnew-pricing2) :where(i, em) { font-style: normal; }

.lnew-pricing2 {
  /* ---- motion ---- */
  --lnpr2-ease: cubic-bezier(.22,1,.36,1);
  --lnpr2-rv-dist: 70px;
  --lnpr2-rv-dur: 1.2s;
  --lnpr2-rv-step: 70ms;

  /* ---- geometry ---- */
  --lnpr2-maxw: 1360px;
  --lnpr2-gutter: 28px;
  --lnpr2-head-align: center;
  --lnpr2-title-size: clamp(31px, 3.6vw, 47px);
  --lnpr2-lead-size: 18px;

  --lnpr2-toggles-gap: 14px;
  --lnpr2-toggles-mb: 40px;
  --lnpr2-toggle-pad: 4px;
  --lnpr2-toggle-btn-pad-y: 9px;
  --lnpr2-toggle-btn-pad-x: 18px;
  --lnpr2-toggle-size: 14px;

  /* 18, not the reference's 28 — reclaims width for the 5-up grid. Still
     enough clearance for the featured card's -16px rest lift and its -13px
     badge tab. See the class docblock's point 6. */
  --lnpr2-stage-pad: 18px;

  /* 5, not the reference's 4 — LeadsNimble's default content adds a Free
     tier (see the class docblock's point 6). The column count and every
     responsive step below are therefore AUTHORED for five cards, not
     ported from the reference. So is every size on this page from here
     down to --lnpr2-feat-size: the reference tuned these for a 4-up card;
     tightened here so a 5-up one doesn't read as cramped. */
  --lnpr2-cols: 5;
  --lnpr2-gap: 14px;
  --lnpr2-radius-lg: 24px;
  --lnpr2-plan-pad-y: 22px;
  --lnpr2-plan-pad-x: 18px;
  --lnpr2-lift: -16px;          /* the featured card's raise, at rest */
  --lnpr2-hover-lift: -6px;     /* every other card, on hover */
  --lnpr2-featured-hover-lift: -20px;
  --lnpr2-featured-ring: 2px;

  --lnpr2-name-size: 17px;
  --lnpr2-best-size: 13px;
  --lnpr2-best-min-h: 40px;     /* keeps every card's price on one baseline */
  --lnpr2-price-min-h: 38px;    /* ditto for the CTA under a 1- vs 2-line price */
  --lnpr2-price-gap: 3px;
  --lnpr2-cur-size: 16px;
  --lnpr2-amt-size: clamp(22px, 2vw, 34px);
  --lnpr2-per-size: 12px;
  --lnpr2-contact-size: 22px;
  --lnpr2-was-size: 12px;
  --lnpr2-cta-gap: 20px;
  --lnpr2-feats-h-size: 11px;
  --lnpr2-feats-gap: 12px;
  --lnpr2-feat-size: 13px;
  --lnpr2-check: 18px;
  --lnpr2-check-glyph: 10px;
  --lnpr2-check-gap: 10px;
  --lnpr2-badge-size: 12px;

  --lnpr2-full-cta-top: 36px;
  --lnpr2-included-top: 26px;
  --lnpr2-included-maxw: 760px;
  --lnpr2-included-size: 14px;

  --lnpr2-btn-size: 15.5px;
  --lnpr2-btn-pad-y: 13px;
  --lnpr2-btn-pad-x: 22px;
  --lnpr2-btn-radius: 13px;

  --lnpr2-risk-top: 48px;
  --lnpr2-risk-gap: 12px;
  --lnpr2-risk-pad: 9px 18px 9px 9px;
  --lnpr2-risk-item-gap: 10px;
  --lnpr2-risk-ic: 30px;
  --lnpr2-risk-ic-glyph: 16px;
  --lnpr2-risk-b-size: 13.5px;
  --lnpr2-risk-s-size: 12px;
  --lnpr2-risk-sep: "· ";

  /* ---- type ---- */
  --lnpr2-font-sans: 'DM Sans', system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  --lnpr2-font-head: 'Parkinsans', 'DM Sans', sans-serif;

  /* ---- palette · LIGHT (the site's default mode) ---- */
  --lnpr2-bg-1: #d7e0ef;
  --lnpr2-bg-2: #f0f4fb;
  --lnpr2-bg-stop: 60%;
  --lnpr2-ink: #12122a;
  --lnpr2-body: #454a63;
  --lnpr2-muted: #6b7089;
  --lnpr2-muted-2: #9498b0;
  --lnpr2-line: #e7e9f4;
  --lnpr2-line-2: #f0f1f8;
  --lnpr2-surface: #ffffff;

  --lnpr2-eyebrow-bg: #eef0ff;
  --lnpr2-eyebrow-ink: #5b46e0;
  --lnpr2-eyebrow-border: #e0e3ff;

  --lnpr2-grad-1: #6366f1;
  --lnpr2-grad-2: #a855f7;
  --lnpr2-grad-3: #22d3ee;
  --lnpr2-accent-grad: linear-gradient(100deg, var(--lnpr2-grad-1) 0%, var(--lnpr2-grad-2) 52%, var(--lnpr2-grad-3) 100%);
  --lnpr2-accent: #6d5cf5;
  --lnpr2-accent-ink: #ffffff;
  --lnpr2-accent-halo: rgba(139,124,255,.28);
  --lnpr2-accent-soft-bg: #eef0ff;
  --lnpr2-accent-soft-border: #e0e3ff;

  --lnpr2-toggle-bg: #cfd7ee;
  --lnpr2-toggle-active-bg: #ffffff;
  --lnpr2-toggle-active-ink: #12122a;

  /* plan card — light is a flat white slab (the theme's glass is dark-only) */
  --lnpr2-glass-blur: none;
  --lnpr2-glass-hi: transparent;
  --lnpr2-plan-bg: #ffffff;
  /* The featured card's base fill is its OWN token, not --lnpr2-plan-bg: in the
     reference the plain cards sit on the theme's glass fill while the featured
     one sits on the plain surface, and in dark those are two different alphas
     (.045 vs .035). Identical in light, where both are white. */
  --lnpr2-featured-bg: #ffffff;
  --lnpr2-featured-wash-1: rgba(109,92,245,.22);
  --lnpr2-featured-wash-2: rgba(34,211,238,.16);

  /* the four trust pills carry one curated hue each (indigo / teal / rose /
     amber) — literals in the reference, so they are mode-INDEPENDENT and are
     declared once, here, with no dark counterpart. */
  --lnpr2-risk-1-bg: #e7e4fb; --lnpr2-risk-1-ink: #6a4ff0;
  --lnpr2-risk-2-bg: #d8f0f3; --lnpr2-risk-2-ink: #0e97a8;
  --lnpr2-risk-3-bg: #fde2e7; --lnpr2-risk-3-ink: #e5486d;
  --lnpr2-risk-4-bg: #fceed4; --lnpr2-risk-4-ink: #cf7d13;

  /* ---- shadows ----
     Composed from colour tokens so the Style tab can recolour each layer while
     the geometry (which the theme changes between modes) stays authored here. */
  --lnpr2-sh-sm-1: rgba(30,30,80,.05);
  --lnpr2-sh-sm-2: rgba(30,30,80,.05);
  --lnpr2-sh-md: rgba(30,30,80,.10);
  --lnpr2-sh-lg: rgba(30,30,80,.16);
  --lnpr2-sh-accent: rgba(99,102,241,.28);
  --lnpr2-sh-accent-hover: rgba(99,102,241,.36);
  --lnpr2-btn-glow: rgba(139,124,255,.45);
  --lnpr2-btn-shimmer: rgba(255,255,255,.55);

  --lnpr2-shadow-sm: 0 1px 2px var(--lnpr2-sh-sm-1), 0 2px 6px var(--lnpr2-sh-sm-2);
  --lnpr2-shadow-md: 0 12px 34px var(--lnpr2-sh-md);
  --lnpr2-shadow-lg: 0 30px 70px var(--lnpr2-sh-lg);
  --lnpr2-shadow-accent: 0 16px 40px var(--lnpr2-sh-accent);
  --lnpr2-shadow-accent-hover: 0 20px 50px var(--lnpr2-sh-accent-hover);
  --lnpr2-plan-shadow: var(--lnpr2-shadow-sm);
  --lnpr2-risk-shadow: var(--lnpr2-shadow-sm);
  /* departure #2 — in LIGHT the theme's override cancels the hover shadow and
     the hover border, so both resolve back to the resting values. */
  --lnpr2-plan-hover-shadow: var(--lnpr2-plan-shadow);
  --lnpr2-plan-hover-border: var(--lnpr2-line);

  position: relative;
  overflow-x: clip;
  padding-top: 112px;
  padding-bottom: 112px;
  background: linear-gradient(180deg, var(--lnpr2-bg-1) 0%, var(--lnpr2-bg-2) var(--lnpr2-bg-stop));
  font-family: var(--lnpr2-font-sans);
  color: var(--lnpr2-body);
  font-size: 17px;
  line-height: 1.6;
  letter-spacing: normal;
  -webkit-font-smoothing: antialiased;
}

/* ---- palette · DARK ([data-mode="dark"] on <html>, written by the nav) ----
   The theme's dark values: the `.section--soft` gradient for the band, glass for
   the cards and the trust pills (a translucent fill + blur + inset highlight),
   and a deeper, longer shadow ramp. */
[data-mode="dark"] .lnew-pricing2 {
  --lnpr2-bg-1: #0c0c18;
  --lnpr2-bg-2: #090910;
  --lnpr2-bg-stop: 100%;
  --lnpr2-ink: #f5f6ff;
  --lnpr2-body: #b8bed6;
  --lnpr2-muted: #949bbb;
  --lnpr2-muted-2: #6d7398;
  --lnpr2-line: rgba(255,255,255,.10);
  --lnpr2-line-2: rgba(255,255,255,.06);
  --lnpr2-surface: rgba(255,255,255,.035);

  --lnpr2-eyebrow-bg: rgba(255,255,255,.05);
  --lnpr2-eyebrow-ink: #cdc6ff;
  --lnpr2-eyebrow-border: rgba(255,255,255,.12);

  --lnpr2-accent: #8b7cff;
  --lnpr2-accent-soft-bg: rgba(139,124,255,.12);
  --lnpr2-accent-soft-border: rgba(139,124,255,.24);

  --lnpr2-toggle-bg: #10101d;
  --lnpr2-toggle-active-bg: rgba(255,255,255,.12);
  --lnpr2-toggle-active-ink: #ffffff;

  --lnpr2-glass-blur: blur(14px) saturate(150%);
  --lnpr2-glass-hi: rgba(255,255,255,.10);
  --lnpr2-plan-bg: rgba(255,255,255,.045);
  --lnpr2-featured-bg: rgba(255,255,255,.035);

  --lnpr2-sh-sm-1: rgba(0,0,0,.4);
  --lnpr2-sh-sm-2: transparent;
  --lnpr2-sh-md: rgba(0,0,0,.5);
  --lnpr2-sh-lg: rgba(0,0,0,.62);
  --lnpr2-sh-accent: rgba(99,102,241,.4);
  --lnpr2-sh-accent-hover: rgba(99,102,241,.5);
  --lnpr2-btn-shimmer: rgba(255,255,255,.42);

  /* geometry differs between the two ramps, so these are re-composed whole.
     --lnpr2-shadow-sm in particular is a SINGLE layer here (the reference's own
     dark --shadow-sm), not the light ramp's two-layer composition — a second
     0-alpha layer would paint nothing, but it is still a real difference from
     the reference's shadow list. --lnpr2-sh-sm-2 stays a live Style-tab control
     (it feeds the light ramp and is harmless orphaned here) for a consistent
     control surface across modes. */
  --lnpr2-shadow-sm: 0 1px 2px var(--lnpr2-sh-sm-1);
  --lnpr2-shadow-lg: 0 34px 74px var(--lnpr2-sh-lg);
  --lnpr2-shadow-accent: 0 16px 44px var(--lnpr2-sh-accent);
  --lnpr2-shadow-accent-hover: 0 22px 54px var(--lnpr2-sh-accent-hover);
  /* the glass inset highlight rides ON TOP of the small shadow for the CARD.
     The trust pill does NOT get it: risk.css's #pricing rule replaces the
     override's whole box-shadow list (departure #5). */
  --lnpr2-plan-shadow: inset 0 1px 0 var(--lnpr2-glass-hi), var(--lnpr2-shadow-sm);
  --lnpr2-risk-shadow: var(--lnpr2-shadow-sm);
  /* departure #2 — in DARK the full hover applies. */
  --lnpr2-plan-hover-shadow: var(--lnpr2-shadow-md);
  --lnpr2-plan-hover-border: var(--lnpr2-accent-soft-border);
}

/* =====================================================================
   Layout shell
   ===================================================================== */
.lnew-pricing2__wrap {
  width: 100%;
  max-width: var(--lnpr2-maxw);
  margin-inline: auto;
  padding-inline: var(--lnpr2-gutter);
}

.lnew-pricing2__head {
  max-width: none;
  margin-inline: auto;
  margin-bottom: 56px;
  text-align: var(--lnpr2-head-align);
}

/* =====================================================================
   Eyebrow — the dim indicator lamp. Kept dim on purpose: a continuous
   sine pulse reads as decoration, a lit/unlit cycle reads as a status light.
   ===================================================================== */
.lnew-pricing2__eyebrow {
  display: inline-flex; align-items: center; gap: 9px;
  font-family: var(--lnpr2-font-sans);
  font-size: 13px; font-weight: 600; letter-spacing: .02em;
  color: var(--lnpr2-eyebrow-ink);
  background: var(--lnpr2-eyebrow-bg);
  border: 1px solid var(--lnpr2-eyebrow-border);
  padding: 7px 14px; border-radius: 100px;
}
.lnew-pricing2__eyebrow-dot {
  width: 7px; height: 7px; border-radius: 50%;
  background: var(--lnpr2-accent);
  box-shadow: 0 0 0 4px var(--lnpr2-accent-halo);
  opacity: .45;
  animation: lnpr2-dot-lamp 5.2s ease-in-out infinite;
}
@keyframes lnpr2-dot-lamp {
  0%        { opacity: .35; box-shadow: 0 0 0 4px var(--lnpr2-accent-halo), 0 0 0 0 transparent; }
  8%        { opacity: 1;   box-shadow: 0 0 0 4px var(--lnpr2-accent-halo), 0 0 7px 1px var(--lnpr2-accent); }
  22%       { opacity: 1;   box-shadow: 0 0 0 4px var(--lnpr2-accent-halo), 0 0 7px 1px var(--lnpr2-accent); }
  40%, 100% { opacity: .35; box-shadow: 0 0 0 4px var(--lnpr2-accent-halo), 0 0 0 0 transparent; }
}

/* =====================================================================
   Title + lead
   ===================================================================== */
.lnew-pricing2__title {
  font-family: var(--lnpr2-font-head);
  font-weight: 500;
  font-size: var(--lnpr2-title-size);
  margin-top: 18px;
  line-height: 1.12;
  letter-spacing: -0.02em;
  color: var(--lnpr2-ink);
  text-wrap: balance;
}
.lnew-pricing2__lead {
  margin-top: 18px;
  font-size: var(--lnpr2-lead-size);
  color: var(--lnpr2-muted);
  line-height: 1.65;
  text-wrap: balance;
}
.lnew-pricing2__accent {
  background: var(--lnpr2-accent-grad);
  -webkit-background-clip: text; background-clip: text;
  color: transparent;
}

/* =====================================================================
   Billing / currency toggles — two segmented pills
   ===================================================================== */
.lnew-pricing2__toggles {
  display: flex; flex-wrap: wrap;
  gap: var(--lnpr2-toggles-gap);
  justify-content: center;
  margin-bottom: var(--lnpr2-toggles-mb);
}
/* A switched-off group is still in the DOM (the script reads the selected
   period + currency off these buttons) — `hidden` must therefore beat the
   display declarations below, which a UA `[hidden]{display:none}` cannot. */
.lnew-pricing2__toggles[hidden], .lnew-pricing2__toggle[hidden] { display: none; }
.lnew-pricing2__toggle {
  display: inline-flex;
  background: var(--lnpr2-toggle-bg);
  border: 1px solid var(--lnpr2-line);
  border-radius: 100px;
  padding: var(--lnpr2-toggle-pad);
}
/* (0,2,0) on purpose — a theme's own `button` styling must not reach in here */
.lnew-pricing2__toggle .lnew-pricing2__toggle-btn {
  font-family: inherit;
  padding: var(--lnpr2-toggle-btn-pad-y) var(--lnpr2-toggle-btn-pad-x);
  border: none; border-radius: 100px;
  background: none;
  font-size: var(--lnpr2-toggle-size); font-weight: 600;
  /* `normal`, NOT the section's 1.6 — a <button>'s UA `font` shorthand resets
     line-height, and the reference reset only re-inherits font-family. Forcing
     1.6 here would silently make every pill 4px taller than the template's. */
  line-height: normal;
  letter-spacing: normal;
  text-transform: none;
  color: var(--lnpr2-muted);
  cursor: pointer;
  box-shadow: none;
  transition: color .18s, background .18s, box-shadow .18s;
}
.lnew-pricing2__toggle .lnew-pricing2__toggle-btn.is-active {
  background: var(--lnpr2-toggle-active-bg);
  color: var(--lnpr2-toggle-active-ink);
  box-shadow: var(--lnpr2-shadow-sm);
}
/* the small "save" flag a period can carry, e.g. "1 month free" on Yearly —
   ported from the /pricing page's Plan Builder (.lnew-plan-builder__toggle-save,
   its `cycle_save` control), which is where this widget's own billing-cycle
   labels and sub-line copy already come from. */
.lnew-pricing2__toggle-save {
  margin-left: 7px;
  font-size: 11px; font-weight: 700;
  letter-spacing: .01em;
  color: var(--lnpr2-accent);
}

/* =====================================================================
   Stage — a plain padded box. The padding is load-bearing, not decoration:
   it is the room the featured card's -16px lift and its -13px badge tab
   need before either clips into the toggles above.
   ===================================================================== */
.lnew-pricing2__stage {
  position: relative;
  padding: var(--lnpr2-stage-pad);
}

/* =====================================================================
   "View Full Pricing" button — the seam to /pricing/. Deliberately reuses
   .lnew-pricing2__btn/--primary/--ghost rather than introducing a one-off
   style, so it carries the exact same font, colour, gradient and shadow
   tokens as every plan CTA above it.
   ===================================================================== */
.lnew-pricing2__full-cta {
  display: flex;
  justify-content: center;
  margin-top: var(--lnpr2-full-cta-top);
}

/* =====================================================================
   Plan cards
   ===================================================================== */
.lnew-pricing2__plans {
  display: grid;
  grid-template-columns: repeat(var(--lnpr2-cols), minmax(0, 1fr));
  gap: var(--lnpr2-gap);
  align-items: stretch;
}

.lnew-pricing2__plan {
  position: relative;
  display: flex; flex-direction: column;
  min-width: 0;
  background: var(--lnpr2-plan-bg);
  -webkit-backdrop-filter: var(--lnpr2-glass-blur);
  backdrop-filter: var(--lnpr2-glass-blur);
  border: 1px solid var(--lnpr2-line);
  border-radius: var(--lnpr2-radius-lg);
  padding: var(--lnpr2-plan-pad-y) var(--lnpr2-plan-pad-x);
  box-shadow: var(--lnpr2-plan-shadow);
  transition: transform .3s var(--lnpr2-ease), box-shadow .3s var(--lnpr2-ease), border-color .3s ease;
}
/* see departure #2 — the shadow and the border resolve back to the resting
   values in light mode, exactly as the reference's cascade leaves them. */
.lnew-pricing2__plan:hover {
  transform: translateY(var(--lnpr2-hover-lift));
  box-shadow: var(--lnpr2-plan-hover-shadow);
  border-color: var(--lnpr2-plan-hover-border);
}

/* The featured card is set apart chiefly by its BACKGROUND: an aurora wash
   (accent glow top-centre + cyan glow bottom-right) over the card fill, so it
   reads as a distinctly tinted card beside the plain siblings — not merely a
   heavier border. Raised, a clean accent edge, and a soft halo reinforce it.
   The washes tint whatever fill sits under them, so it holds in both modes.
   The lift resets to flat on the single-column layout (see the media query).

   The doubled `.lnew-pricing2` in the selector is deliberate — departure #4. */
.lnew-pricing2 .lnew-pricing2__plan--featured {
  border: var(--lnpr2-featured-ring) solid var(--lnpr2-accent);
  background:
    radial-gradient(125% 85% at 50% -10%, var(--lnpr2-featured-wash-1), transparent 58%),
    radial-gradient(90% 80% at 112% 115%, var(--lnpr2-featured-wash-2), transparent 55%),
    var(--lnpr2-featured-bg);
  box-shadow: var(--lnpr2-shadow-lg), 0 26px 60px -16px var(--lnpr2-accent-halo);
  transform: translateY(var(--lnpr2-lift));
  z-index: 2;
}
/* already raised at rest, so hover lifts it a touch further rather than
   resetting it to the generic -6px */
.lnew-pricing2 .lnew-pricing2__plan--featured:hover {
  transform: translateY(var(--lnpr2-featured-hover-lift));
}
/* the "Most popular" tab. Only painted when the plan actually carries a badge
   string, so clearing the control removes the pill instead of leaving an empty
   gradient nub. */
.lnew-pricing2__plan--featured[data-badge]::after {
  content: attr(data-badge);
  position: absolute; z-index: 5; top: -13px; left: 50%; transform: translateX(-50%);
  background: var(--lnpr2-accent-grad);
  color: var(--lnpr2-accent-ink);
  font-family: var(--lnpr2-font-sans);
  font-size: var(--lnpr2-badge-size); font-weight: 700;
  line-height: 1.6;
  padding: 5px 15px; border-radius: 100px;
  box-shadow: var(--lnpr2-shadow-accent);
  white-space: nowrap;
}

.lnew-pricing2__name {
  font-family: var(--lnpr2-font-head);
  font-size: var(--lnpr2-name-size); font-weight: 700;
  line-height: 1.6;
  color: var(--lnpr2-ink);
}
.lnew-pricing2__best {
  font-size: var(--lnpr2-best-size);
  color: var(--lnpr2-muted);
  margin: 6px 0 18px;
  line-height: 1.5;
  min-height: var(--lnpr2-best-min-h);
}
.lnew-pricing2__price {
  display: flex; align-items: baseline;
  gap: var(--lnpr2-price-gap);
  flex-wrap: wrap;
  min-height: var(--lnpr2-price-min-h);
}
/* a trailing currency symbol (৳ 3,499 -> 3,499 ৳) is a flex reorder, so the
   symbol keeps its own type size instead of being glued into the amount */
.lnew-pricing2__price.is-sym-after .lnew-pricing2__cur { order: 1; }
.lnew-pricing2__price.is-sym-after .lnew-pricing2__per { order: 2; }
.lnew-pricing2__cur {
  font-family: var(--lnpr2-font-head);
  font-size: var(--lnpr2-cur-size); font-weight: 700;
  color: var(--lnpr2-ink);
}
/* clamped so the longest figures (৳1,99,000 / $950.40) never overflow the
   narrower 4-up card */
.lnew-pricing2__amt {
  font-family: var(--lnpr2-font-head);
  font-size: var(--lnpr2-amt-size); font-weight: 800;
  letter-spacing: -0.03em;
  color: var(--lnpr2-ink);
  line-height: 1;
}
.lnew-pricing2__per { font-size: var(--lnpr2-per-size); color: var(--lnpr2-muted); }
/* the prose price of a "Contact Sales" tier — smaller and unclamped, because
   it is a phrase rather than a figure */
.lnew-pricing2__contact {
  font-family: var(--lnpr2-font-head);
  font-size: var(--lnpr2-contact-size); font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--lnpr2-ink);
  line-height: 1;
}
.lnew-pricing2__was {
  font-size: var(--lnpr2-was-size);
  color: var(--lnpr2-muted-2);
  margin-top: 5px;
}
/* :empty ONLY — with content the line is already taller than this, so the
   reference's metrics are untouched; the reserve just stops a plan with no
   sub-line from pulling its own card's feature list up out of line. */
.lnew-pricing2__was:empty { min-height: 1.6em; }
.lnew-pricing2__was s { color: var(--lnpr2-muted-2); }

/* =====================================================================
   Buttons — the design system's .btn, scoped to this widget
   ===================================================================== */
.lnew-pricing2__btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  font-family: var(--lnpr2-font-sans);
  font-size: var(--lnpr2-btn-size); font-weight: 600; letter-spacing: -0.01em;
  line-height: 1.6;
  padding: var(--lnpr2-btn-pad-y) var(--lnpr2-btn-pad-x);
  border-radius: var(--lnpr2-btn-radius);
  transition: transform .22s var(--lnpr2-ease), box-shadow .3s var(--lnpr2-ease),
              background .22s ease, border-color .22s ease, color .22s ease;
  white-space: nowrap;
  /* isolation + overflow contain the shimmer sweep — see the stacking note
     on the primary variant below. */
  position: relative; overflow: hidden; isolation: isolate;
}
.lnew-pricing2__btn svg { width: 15px; height: 15px; transition: transform .4s var(--lnpr2-ease); }
.lnew-pricing2__btn:hover svg { transform: translateX(4px); }
.lnew-pricing2__btn--block { width: 100%; }

.lnew-pricing2__btn--ghost {
  background: var(--lnpr2-surface);
  color: var(--lnpr2-ink);
  border: 1px solid var(--lnpr2-line);
  box-shadow: var(--lnpr2-shadow-sm);
}
.lnew-pricing2__btn--ghost:hover {
  transform: translateY(-2px);
  border-color: var(--lnpr2-accent);
  box-shadow: var(--lnpr2-shadow-md);
}

/* (a) slow gradient drift across the fill, plus the theme's pill glow.
   box-shadow, NOT a blurred ::after with z-index:-1 — the :hover transform
   creates a stacking context, and inside it a negative-z pseudo paints ABOVE
   the element's background. That yields a hover-only flicker. */
.lnew-pricing2__btn--primary {
  background: var(--lnpr2-accent-grad);
  color: var(--lnpr2-accent-ink);
  border: none;
  background-size: 130% 70%;
  background-position: 0% 50%;
  animation: lnpr2-gradient-loop 7s ease-in-out infinite;
  /* the resting halo is the SAME hue as --lnpr2-btn-glow at zero alpha (not the
     `transparent` keyword) so the box-shadow transition on hover animates a
     colour, not a colour-to-keyword snap — matches the reference literally. */
  box-shadow: var(--lnpr2-shadow-accent), 0 0 0 0 rgba(139,124,255,0);
  transition: box-shadow .4s var(--lnpr2-ease), transform .22s var(--lnpr2-ease);
}
.lnew-pricing2__btn--primary:hover {
  transform: translateY(-2px);
  box-shadow: var(--lnpr2-shadow-accent-hover), 0 0 34px 3px var(--lnpr2-btn-glow);
}
@keyframes lnpr2-gradient-loop {
  0%, 100% { background-position: 0% 50%; }
  50%      { background-position: 100% 50%; }
}

/* (b) "melt" shimmer sweep, fires once per hover.
   STACKING NOTE: the :hover transform creates a stacking context, so a
   z-index:-1 pseudo would paint above the element's background. Hence
   isolation:isolate on the button plus a POSITIVE z-index here. Do not
   "simplify" this back to a negative z-index. */
.lnew-pricing2__btn--primary::before {
  content: ""; position: absolute; z-index: 1; top: 0; bottom: 0; left: -45%; width: 45%;
  background: linear-gradient(100deg, transparent, var(--lnpr2-btn-shimmer), transparent);
  transform: skewX(-18deg); opacity: 0; pointer-events: none;
}
.lnew-pricing2__btn--primary:hover::before { opacity: 1; animation: lnpr2-btn-melt .85s var(--lnpr2-ease); }
@keyframes lnpr2-btn-melt { from { left: -45%; } to { left: 120%; } }

/* keep an icon above the sweep. The reference's plan CTAs are bare text, so
   this only engages once the optional arrow is switched on. */
.lnew-pricing2__btn > * { position: relative; z-index: 2; }

.lnew-pricing2__cta { margin: var(--lnpr2-cta-gap) 0; }

/* =====================================================================
   Feature list — circle-check rows
   ===================================================================== */
.lnew-pricing2__feats-h {
  font-size: var(--lnpr2-feats-h-size); font-weight: 700;
  letter-spacing: .08em; text-transform: uppercase;
  line-height: 1.6;
  color: var(--lnpr2-muted-2);
  padding-top: 20px;
  border-top: 1px solid var(--lnpr2-line-2);
}
.lnew-pricing2__feats {
  display: flex; flex-direction: column;
  gap: var(--lnpr2-feats-gap);
  margin-top: 16px;
}
.lnew-pricing2__feat {
  display: flex; align-items: center; gap: var(--lnpr2-check-gap);
  font-size: var(--lnpr2-feat-size);
  color: var(--lnpr2-body);
  /* safety net for user-authored lines longer than the reference's */
  min-width: 0; overflow-wrap: break-word;
}
.lnew-pricing2__check {
  flex: none;
  width: var(--lnpr2-check); height: var(--lnpr2-check);
  border-radius: 50%;
  background: var(--lnpr2-accent-soft-bg);
  color: var(--lnpr2-accent);
  display: grid; place-items: center;
  border: 1px solid var(--lnpr2-accent-soft-border);
}
.lnew-pricing2__check svg { width: var(--lnpr2-check-glyph); height: var(--lnpr2-check-glyph); }
.lnew-pricing2__feat-t { min-width: 0; }
.lnew-pricing2__feat-t b { color: var(--lnpr2-ink); font-weight: 700; }

/* =====================================================================
   "Every plan includes …" — one calm line: every tier ships the whole
   product, only the four specs on the cards differ.
   ===================================================================== */
.lnew-pricing2__included {
  max-width: var(--lnpr2-included-maxw);
  margin: var(--lnpr2-included-top) auto 0;
  text-align: center;
  font-size: var(--lnpr2-included-size);
  line-height: 1.6;
  color: var(--lnpr2-muted);
}
.lnew-pricing2__included b { color: var(--lnpr2-ink); font-weight: 600; }

/* =====================================================================
   Trust bar — four standalone badge PILLS (icon + label + sub-label, all
   inline in one chip), deliberately NOT a bordered panel with column
   dividers, so it doesn't repeat the stat-row pattern used elsewhere on
   the page. Each pill carries its own hue.
   ===================================================================== */
.lnew-pricing2__risk {
  display: flex; flex-wrap: wrap; justify-content: center;
  gap: var(--lnpr2-risk-gap);
  margin-top: var(--lnpr2-risk-top);
}
.lnew-pricing2__risk-item {
  display: inline-flex; align-items: center;
  gap: var(--lnpr2-risk-item-gap);
  padding: var(--lnpr2-risk-pad);
  border-radius: 100px;
  background: var(--lnpr2-surface);
  border: 1px solid var(--lnpr2-line);
  box-shadow: var(--lnpr2-risk-shadow);
  /* departure #5 — the glass blur survives on the pill in dark mode */
  -webkit-backdrop-filter: var(--lnpr2-glass-blur);
  backdrop-filter: var(--lnpr2-glass-blur);
  transition: transform .25s var(--lnpr2-ease), box-shadow .25s var(--lnpr2-ease), border-color .25s ease;
}
.lnew-pricing2__risk-item:hover {
  transform: translateY(-2px);
  box-shadow: var(--lnpr2-shadow-md);
  border-color: var(--lnpr2-accent-soft-border);
}
.lnew-pricing2__risk-ic {
  flex: none;
  width: var(--lnpr2-risk-ic); height: var(--lnpr2-risk-ic);
  border-radius: 50%;
  display: grid; place-items: center;
}
.lnew-pricing2__risk-ic svg { width: var(--lnpr2-risk-ic-glyph); height: var(--lnpr2-risk-ic-glyph); }
/* one curated hue per pill instead of four copies of one style. Keyed to the
   pill's position, exactly as the reference is — a fifth pill inherits the
   fourth's tokens rather than falling back to an untinted chip. */
.lnew-pricing2__risk-item .lnew-pricing2__risk-ic { background: var(--lnpr2-risk-4-bg); color: var(--lnpr2-risk-4-ink); }
.lnew-pricing2__risk-item:nth-child(4n+1) .lnew-pricing2__risk-ic { background: var(--lnpr2-risk-1-bg); color: var(--lnpr2-risk-1-ink); }
.lnew-pricing2__risk-item:nth-child(4n+2) .lnew-pricing2__risk-ic { background: var(--lnpr2-risk-2-bg); color: var(--lnpr2-risk-2-ink); }
.lnew-pricing2__risk-item:nth-child(4n+3) .lnew-pricing2__risk-ic { background: var(--lnpr2-risk-3-bg); color: var(--lnpr2-risk-3-ink); }

.lnew-pricing2__risk-b {
  font-family: var(--lnpr2-font-head);
  font-size: var(--lnpr2-risk-b-size); font-weight: 700;
  line-height: 1.6;
  color: var(--lnpr2-ink);
}
.lnew-pricing2__risk-s {
  font-style: normal;
  font-size: var(--lnpr2-risk-s-size);
  line-height: 1.6;
  color: var(--lnpr2-muted);
}
.lnew-pricing2__risk-s::before { content: var(--lnpr2-risk-sep); }

/* =====================================================================
   Scroll reveal — --i is assigned by lnew-pricing2.js (index within parent)
   ===================================================================== */
.lnew-pricing2 .lnew-reveal {
  opacity: 0;
  transform: translate3d(0, var(--lnpr2-rv-dist), 0);
  transition: opacity var(--lnpr2-rv-dur) var(--lnpr2-ease),
              transform var(--lnpr2-rv-dur) var(--lnpr2-ease);
  transition-delay: calc(var(--i, 0) * var(--lnpr2-rv-step));
}
.lnew-pricing2 .lnew-reveal.is-in { opacity: 1; transform: none; }
.elementor-editor-active .lnew-pricing2 .lnew-reveal { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .lnew-pricing2 .lnew-reveal { opacity: 1; transform: none; transition: none; }
  .lnew-pricing2__eyebrow-dot { animation: none !important; opacity: 1; }
  .lnew-pricing2__btn--primary { animation: none !important; }
  .lnew-pricing2__btn--primary::before { animation: none !important; display: none; }
  .lnew-pricing2__btn svg { transition: none; }
}

/* =====================================================================
   Responsive. The gutter / section-padding / head-gap / lead-size / trust-
   pill steps (1040 / 760 / 460) are the reference's own, ported unchanged.
   The COLUMN-COUNT steps (1200 / 760 / 520) are NOT — the reference only
   ever laid out four cards; LeadsNimble's default content ships five (see
   the class docblock's point 6), so this grid's column steps are AUTHORED
   for five, chosen so a card never drops below ~230px wide:
     1200  5 cards -> 3  (keeps the row from getting too cramped)
      760  3 cards -> 2  (shares the breakpoint that already existed here
                          for gutter/lead-size, and ALSO flattens the
                          featured card's lift/badge — see below)
      520  2 cards -> 1  (single column)
   Ordered widest-first so rules that both write --lnpr2-cols (1200, 760,
   520) resolve in the right direction.
   ===================================================================== */
@media (max-width: 1200px) {
  .lnew-pricing2 { --lnpr2-cols: 3; }
}

@media (max-width: 1040px) {
  .lnew-pricing2 { --lnpr2-gutter: 24px; padding-top: 84px; padding-bottom: 84px; }
  .lnew-pricing2__head { margin-bottom: 44px; }
}

@media (max-width: 760px) {
  .lnew-pricing2 { --lnpr2-gutter: 20px; padding-top: 64px; padding-bottom: 64px; --lnpr2-lead-size: 16.5px; --lnpr2-cols: 2; }
  .lnew-pricing2__head { margin-bottom: 34px; }
  /* At 2 columns the featured card (5th plan, 3rd position) falls into the
     SECOND row rather than the top one, so its resting -16px lift would
     float it up over the row above with nothing reserving that space (a
     transform doesn't affect layout). Flattened here — a card's row
     position shifts with every column count, but only 2-and-1-column
     layouts can put it anywhere but the top row. The reference writes
     `transform: none`, not translateY(0) — same resting position, but a
     measurably different computed-style string (translateY(0) resolves to
     an identity matrix()) — so it is matched exactly rather than routed
     through --lnpr2-lift. The doubled class keeps the specificity the
     reference's #pricing gave it — see departure #4. Its :hover is
     deliberately left alone, same call the reference makes at its own
     narrowest step (a touch device rarely fires :hover at all). */
  .lnew-pricing2 .lnew-pricing2__plan--featured { transform: none; }
}

@media (max-width: 520px) {
  .lnew-pricing2 { --lnpr2-cols: 1; --lnpr2-stage-pad: 14px; }
}

@media (max-width: 460px) {
  .lnew-pricing2 {
    --lnpr2-gutter: 16px; padding-top: 54px; padding-bottom: 54px;
    --lnpr2-risk-gap: 9px;
    --lnpr2-risk-pad: 8px 14px 8px 8px;
  }
  .lnew-pricing2__head { margin-bottom: 28px; }
}

/* NOTE: the design system's `@media (hover:none) { .plan:hover {transform:none} }`
   is deliberately NOT ported — components/pricing.css out-orders it at equal
   specificity in the reference build, so it never applies there either. See
   departure #1. */
