/* Plus Jakarta Sans — self-hosted variable font (weights 200–800) */
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('../fonts/plus-jakarta-sans-latin-ext.woff2') format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Plus Jakarta Sans';
  font-style: normal;
  font-weight: 200 800;
  font-display: swap;
  src: url('../fonts/plus-jakarta-sans-latin.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

  html { scroll-behavior: smooth; }
  body { -webkit-font-smoothing: antialiased; letter-spacing: -0.02em; }
  h1, h2, h3, .dsp { letter-spacing: -0.035em; }

  /* perspective grid used behind the hero — mirrors the Entro hero backdrop */
  .grid-bg::before {
    content: "";
    position: absolute; inset: 0;
    background-image:
      linear-gradient(rgba(18,18,18,.055) 1px, transparent 1px),
      linear-gradient(90deg, rgba(18,18,18,.055) 1px, transparent 1px);
    background-size: 62px 62px;
    mask-image: radial-gradient(ellipse 80% 65% at 60% 25%, #000 10%, transparent 75%);
    -webkit-mask-image: radial-gradient(ellipse 80% 65% at 60% 25%, #000 10%, transparent 75%);
    pointer-events: none;
  }

  /* category tab strip: one row, scrolls instead of wrapping */
  .no-bar { scrollbar-width: none; -ms-overflow-style: none; }
  .no-bar::-webkit-scrollbar { display: none; }

  /* locked contact on the sample lead — real text, blurred out */
  .redact {
    display: inline-block; overflow: hidden; max-width: 9.5em;
    background: rgba(18,18,18,.07); border-radius: 7px;
    padding: 1px 12px; vertical-align: -2px; white-space: nowrap;
  }
  .redact > span {
    display: inline-block; filter: blur(4.5px);
    color: rgba(18,18,18,.9); user-select: none; pointer-events: none;
  }

  /* ---------- Framer Motion: pre-animation states ----------
     Only applied while .js-anim is on <html>. That class is set synchronously
     in the head and removed again if Motion fails to load or the user prefers
     reduced motion, so content is never permanently invisible. */
  .js-anim [data-anim],
  .js-anim [data-hero-item],
  .js-anim [data-cards] > *,
  .js-anim [data-list] > *,
  .js-anim [data-hero-cta] > *,
  .js-anim [data-words] .word,
  /* NB: panels get opacity only — a resting `clip-path` on the element
     suppresses its IntersectionObserver hit, so it could never scroll into
     view to be revealed. The clip lives in the animation's from-keyframe. */
  .js-anim [data-panel] { opacity: 0; }

  .word { display: inline-block; }

  /* soft hero blobs — transform-only, composited */
  .blob { position: absolute; border-radius: 9999px; filter: blur(80px); opacity: .5; pointer-events: none; }

  /* button hover shadow rides on a pseudo-element so only opacity animates */
  [data-btn] { position: relative; }
  [data-btn]::after {
    content: ""; position: absolute; inset: 0; border-radius: inherit;
    box-shadow: 0 14px 30px rgba(18,18,18,.18);
    opacity: 0; transition: opacity .3s ease; pointer-events: none;
  }
  [data-btn]:hover::after { opacity: 1; }

  /* header gains depth once the page has scrolled */
  #siteHeader { transition: background-color .3s ease, backdrop-filter .3s ease, box-shadow .3s ease; }
  #siteHeader.is-scrolled { background-color: rgba(247,241,236,.72); backdrop-filter: blur(18px) saturate(140%);
    -webkit-backdrop-filter: blur(18px) saturate(140%); box-shadow: 0 1px 24px rgba(18,18,18,.07); }

  details > summary { list-style: none; }
  details > summary::-webkit-details-marker { display: none; }
  details[open] .faq-icon { transform: rotate(45deg); background: #4B4BE5; color: #fff; }

  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { animation: none !important; transition: none !important; }
    html { scroll-behavior: auto; }
  }
/* ------------------------------------------------------------------
   Category rows: number, name, description.
   Previously a fourth "~N leads / month" column. Those figures were
   removed, and the grid has to lose the column with them or every row
   keeps a dead gap on the right. Defined here rather than as a Tailwind
   arbitrary value because tailwind.css is a pre-purged build — a class
   that is not already in it would simply do nothing.
------------------------------------------------------------------- */
@media (min-width: 768px) {
  .category-row {
    grid-template-columns: 64px minmax(0, 1.3fr) minmax(0, 2fr);
  }
}
