/* =========================================================
   STORM — PTLP HOMEPAGE THEME  (October / Breast Cancer
   Awareness Month takeover)
   -----------------------------------------------------------
   Loaded ONLY by Home/spi-homepage-ptlp.html, third and last:

       1. base-web-style.css     structure, grid, components
       2. spi-homepage.css       homepage-only components
       3. spi-homepage-ptlp.css  <- this file: color only

   THIS SHEET IS A THEME LAYER, NOT A STYLESHEET.
   It re-colors. It does not lay anything out. Nothing here
   re-declares a grid, a breakpoint, a padding scale, an
   aspect-ratio, or a transition that the two sheets above
   already own — so the PTLP homepage inherits every future
   fix to those sheets for free, and its responsive behavior
   is by definition identical to the standard homepage.

   The only layout rules in this file belong to the two
   components that do not exist on the standard homepage:
   .ptlp-home-band (donation total + ball card) and
   .ptlp-home-ribbon-bar (awareness strip). Both are additive
   October sections, so their layout has nowhere else to live.

   HOW THE RE-COLOR WORKS
   Most of it is free. base-web-style.css draws every component
   from --spi-* tokens, so remapping those tokens in :root
   repaints the page, the cards, the type, and the borders in
   one move. What needs explicit rules is only the handful of
   places the base or the homepage sheet hard-codes a color:
     - .btn.default and the on-imagery button variant
       (hard-coded, and shipped with !important)
     - the archetype cards' local --arc-* palette and the teal
       literals in their SVG fill classes
     - the archetype tabs' teal literals
     - .spi-brand-stripe's dark band
   Each of those is handled in its own numbered section below.

   THE VISUAL LANGUAGE IS NOT INVENTED HERE.
   Every value comes from the live Paint the Lanes Pink page
   (Paint the Lanes Pink/ptlp-style.css): the pink, the deep
   pink, the white-on-pink meter, the pill shape and its pink
   glow shadow. This file re-expresses that language through
   the homepage's components rather than restating it.

   CONTENTS
     1. TOKENS — the whole re-color, in one block
     2. PAGE GROUND + HERO DOTS
     3. BUTTONS
     4. ARCHETYPE CARDS  (the teal component)
      5. BRAND-TABBED BALL RACK (additive component)
     6. IMAGE + PRODUCT CARDS
     7. VIDEO ROW
     8. LEARNING SECTION
     9. PTLP BAND        (additive component)
    10. AWARENESS RIBBON (additive component)
   ========================================================= */


/* ---------------------------------------------------------
   1. TOKENS
   `:root:root`, not `:root` — copied deliberately from
   ptlp-style.css, where the doubled pseudo-class is load-
   bearing and documented at length. base-web-style.css sets
   these same tokens in a plain `:root` (0,1,0). The host CMS
   page builder can inject the base AFTER a page's own sheet,
   and at equal specificity the base would then win on source
   order and silently revert every token here to the commerce
   defaults. Doubling makes this (0,2,0) so load order stops
   mattering. Keep every token override in this file at
   :root:root.
--------------------------------------------------------- */
:root:root {
  /* ---- PTLP brand, carried over from ptlp-style.css ---- */
  --ptlp-pink: #EC1A76;
  --ptlp-pink-deep: #C4055C;
  --ptlp-pink-lift: #FF4F9A;          /* hover/active lift        */
  --ptlp-glow: rgba(236, 26, 118, 0.28);
  --ptlp-soft: rgba(236, 26, 118, 0.10);
  --ptlp-line: rgba(236, 26, 118, 0.35);

  /* ---- ground, dark per the mockup ---- */
  --ptlp-bg: #000000;
  --ptlp-bg-soft: #0a0a0a;
  --ptlp-bg-card: #121212;
  --ptlp-bg-card-lift: #161616;

  /* ---- re-map the base's neutral tokens ----
     This is the move that repaints the page. Every global
     component references these, so cards, type, borders and
     surfaces all follow without being named here. --spi-white
     is a SURFACE token in the base (card grounds), which is
     why it goes dark rather than staying white; text color is
     --spi-black, which goes white. Inverting the pair is how
     the tech skin does it too. */
  --spi-white: var(--ptlp-bg-card);            /* card surfaces  */
  --spi-black: #ffffff;                        /* primary text   */
  --spi-text-muted: rgba(255, 255, 255, 0.72); /* body copy      */
  --spi-border: #262626;                       /* hairlines      */
  --spi-gray-100: var(--ptlp-bg-card);
  --spi-gray-200: #0d0d0d;                     /* learning band  */
  --spi-gray-300: #1a1a1a;                     /* image plates   */

  /* The accent every .btn and accent rule in the base resolves
     through. One line is most of the pink on the page. */
  --spi-accent: var(--ptlp-pink);

  /* Image-card scrim. The base's stock overlay tops out at 0.65,
     which on a black page leaves card titles sitting on mid-grey.
     The mockup runs the gradient to near-solid at the foot of the
     card so the white title and pink pill read cleanly. */
  --spi-overlay: linear-gradient(to top,
      rgba(0, 0, 0, 0.97) 0%,
      rgba(0, 0, 0, 0.55) 45%,
      rgba(0, 0, 0, 0) 75%);
}


/* ---------------------------------------------------------
   2. PAGE GROUND
   Black, with the same two-point pink atmosphere the PTLP
   page carries (ptlp-style.css) so the takeover reads as the
   campaign rather than as "the homepage, but dark".
--------------------------------------------------------- */
body {
  background: var(--ptlp-bg);
  color: var(--spi-black);
}

/* The pink atmosphere. It lives on a fixed pseudo-element rather than on
   body with `background-attachment: fixed`, which is what this used to be.
   A fixed background attachment cannot take the browser's fast scroll
   path: it repaints a viewport-sized gradient on every scroll frame, and
   on a page this long (~14,000px on a phone) that is the single most
   expensive thing on the page while scrolling. A fixed-position layer
   paints once and is then just composited, and looks identical. */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(circle at 12% 0%, rgba(236, 26, 118, 0.10), transparent 58%),
    radial-gradient(circle at 88% 38%, rgba(196, 5, 92, 0.08), transparent 60%);
}

/* The store template wraps CMS content in .main-container and paints
   it solid white — it sits between body and the sections and would
   hide the dark ground entirely. Same clear-out the tech skin needs,
   and the reason a CMS preview can look right while the published
   page does not. Scoped to pages that load this sheet. */
.main-container,
.main-container.col1-layout {
  background: transparent !important;
}

/* Eyebrows carry the accent on this theme (they are muted grey in
   the base). Covers "Media", "Learn", and the band's own lockup. */
.spi-eyebrow {
  color: var(--ptlp-pink);
}

/* Hero carousel dots. The homepage sheet draws the resting dot as a
   half-opaque white and the current one as solid white — correct on
   the standard hero, but on this one the white dot is the same white
   as the banner artwork behind it and stops reading as a control.
   The current slide goes pink; the resting dots stay white so the
   pair still reads as "this one / the others".

   Both target ::before, not the <button>: the button itself is a
   transparent 24px hit area and the dot you see is its pseudo-element
   (the homepage sheet does this so the tap target isn't an 8px dot). */
.spi-hero-dots button::before {
  background: rgba(255, 255, 255, 0.55);
}

.spi-hero-dots button.is-active::before {
  background: var(--ptlp-pink);
  /* A pink dot on a dark banner needs a touch more presence than the
     white one it replaces to stay as legible at 8px. */
  box-shadow: 0 0 0 3px rgba(236, 26, 118, 0.28);
}


/* ---------------------------------------------------------
   3. BUTTONS
   The base hard-codes .btn.default and ships it with
   !important because COMMERCE-WEB-STYLE.css claims the same
   selectors with !important. Matching the flag is the only
   way any of this applies — the flags here are load-bearing,
   not habit.

   Resting state is the PTLP pink pill with the campaign's
   glow shadow; hover lifts to the brighter pink rather than
   inverting to white, because the base's white-invert hover
   is built for a light page and flashes a white slab on this
   one.
--------------------------------------------------------- */
.btn.default {
  border: 1px solid var(--ptlp-pink) !important;
  background-color: var(--ptlp-pink) !important;
  color: #ffffff !important;
  border-radius: 999px !important;
  box-shadow: 0 8px 22px var(--ptlp-glow) !important;
}

.btn.default:hover {
  transform: translateY(-2px);
  border: 1px solid var(--ptlp-pink-lift) !important;
  background-color: var(--ptlp-pink-lift) !important;
  color: #ffffff !important;
  box-shadow: 0 10px 26px var(--ptlp-glow) !important;
}

/* Buttons ON IMAGERY — hero CTA, nav cards, feature cards.
   The base turns these into white glass with dark ink (a white pill
   is the only thing legible over unknown photography on a light
   page). The mockup keeps them pink everywhere, and on this dark
   ground a pink pill has plenty of contrast, so the glass treatment
   is reverted to the same pink pill as above.

   Three selectors, matched exactly to the base's own grouped rule —
   a single .btn.default override loses to it on specificity. */
.spi-hero-controls .btn.default,
.spi-card-nav-content .btn.default,
.spi-card-feature-content .btn.default,
.btn.default.is-invert {
  border: 1px solid var(--ptlp-pink) !important;
  background-color: var(--ptlp-pink) !important;
  /* The base blurs the photo behind the glass; a solid pill has
     nothing to blur, and leaving the filter on costs a compositor
     layer per button for no visible effect. */
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
  color: #ffffff !important;
  box-shadow: 0 8px 22px var(--ptlp-glow) !important;
}

.spi-hero-controls .btn.default:hover,
.spi-card-nav-content .btn.default:hover,
.spi-card-feature-content .btn.default:hover,
.btn.default.is-invert:hover {
  border: 1px solid var(--ptlp-pink-lift) !important;
  background-color: var(--ptlp-pink-lift) !important;
  color: #ffffff !important;
  box-shadow: 0 10px 26px var(--ptlp-glow) !important;
}

/* Secondary pill used once, on the band ("Shop the PTLP Collection").
   Outline rather than fill so the pair reads as two choices instead
   of one button and its echo — the same relationship .arc-btn.is-learn
   has to .arc-btn.is-shop. */
.btn.default.ptlp-home-btn-quiet {
  border: 1px solid rgba(255, 255, 255, 0.30) !important;
  background-color: transparent !important;
  color: #ffffff !important;
  box-shadow: none !important;
}

.btn.default.ptlp-home-btn-quiet:hover {
  border: 1px solid #ffffff !important;
  background-color: rgba(255, 255, 255, 0.10) !important;
  color: #ffffff !important;
  box-shadow: none !important;
}


/* ---------------------------------------------------------
   4. ARCHETYPE CARDS
   "Browse New Bowling Balls". The most involved section, for
   one reason: spi-homepage.css deliberately declares this
   component's dark-teal palette LOCALLY — scoped to
   .spi-card-archetype so it cannot leak onto the light page —
   rather than by loading the tech skin. Local values are
   invisible to the token remap in section 1, so this is the
   one component that has to be re-pointed by hand.

   It is still only color. The card's own --arc-* custom
   properties do most of it; what is left is the four SVG fill
   classes and the two button variants, which spi-homepage.css
   writes as teal literals (rgb(0,147,144)) with no token in
   front of them.
--------------------------------------------------------- */

/* Re-point the card's local palette. Same variable names the
   homepage sheet defines, so every rule that reads them follows. */
.spi-card-archetype {
  --arc-surface-a: var(--ptlp-bg-card-lift);
  --arc-surface-b: #0e0e0e;
  --arc-border: rgba(236, 26, 118, 0.18);
  --arc-border-hover: var(--ptlp-line);
  --arc-glow: var(--ptlp-glow);
  --arc-ink: #ffffff;
  --arc-ink-muted: rgba(255, 255, 255, 0.72);
  --arc-rule: #262626;
}

/* The wordmark art. These four carry teal literals in
   spi-homepage.css, so each needs naming. .arc-ink is already
   var(--arc-ink) there and re-points itself above. */
.spi-archetype-art .arc-accent { fill: var(--ptlp-pink); }
.spi-archetype-art .arc-cell { fill: rgba(236, 26, 118, 0.10); }
.spi-archetype-art .arc-cell-on { fill: rgba(236, 26, 118, 0.20); }
.spi-archetype-art .arc-path { stroke: rgba(236, 26, 118, 0.55); }

/* The "Early / Smooth / Controlled" and "Symmetrical" tags. */
.spi-archetype-core,
.spi-archetype-tagline {
  color: var(--ptlp-pink);
}

/* Card buttons. Teal literals again, and deliberately NOT .btn in the
   homepage sheet (to dodge the !important war .btn is locked into with
   COMMERCE-WEB-STYLE.css) — so these need no !important either. */
.arc-btn.is-shop {
  border-color: var(--ptlp-pink);
  background: var(--ptlp-pink);
  color: #ffffff;
}

.arc-btn.is-shop:hover {
  border-color: var(--ptlp-pink-lift);
  background: var(--ptlp-pink-lift);
  color: #ffffff;
}

.arc-btn.is-learn {
  border-color: var(--ptlp-line);
  color: var(--arc-ink);
}

.arc-btn.is-learn:hover {
  border-color: var(--ptlp-pink);
  background: var(--ptlp-soft);
  color: var(--arc-ink);
}

.arc-btn:focus-visible {
  outline-color: var(--ptlp-pink-lift);
}

/* Tabs. --spi-text-muted and --spi-black already re-point via the
   token block, so only the teal literals are named here. */
.spi-archetype-tab {
  border-color: var(--ptlp-line);
}

.spi-archetype-tab:hover {
  border-color: var(--ptlp-pink);
}

.spi-archetype-tab.is-active {
  background: var(--ptlp-pink);
  border-color: var(--ptlp-pink);
  color: #ffffff;
}

.spi-archetype-tab:focus-visible {
  outline-color: var(--ptlp-pink);
}


/* ---------------------------------------------------------
   5. BRAND-TABBED BALL RACK  (.ptlp-rack)
   PTLP only — the standard homepage stacks three always-open
   brand racks instead. Layout lives here because this
   component does not exist on the standard homepage.

   The ROW itself is not built here: each panel still holds the
   base's .spi-row.spi-scroll, so the full-bleed breakout, snap,
   hidden scrollbar, drag-to-scroll and the 200px/150px ball
   track all still come from the sheets above, unchanged.
--------------------------------------------------------- */

/* ---- the module shell ----
   The surface is the PTLP product-card ground (--spi-white resolves to
   --ptlp-bg-card on this theme — the same token .spi-card-product and
   every other card surface reads), so the module is native to the theme
   rather than a one-off panel colour. It has to be a lifted surface and
   not the page's black: on the black ground the tabs and balls read as
   loose elements floating on the page instead of one module. */
.ptlp-rack-module {
  background: var(--spi-white);
  border: 1px solid var(--spi-border);
  border-radius: var(--spi-radius-lg);
  padding: clamp(24px, 3vw, 40px) clamp(20px, 2.5vw, 36px) clamp(20px, 2.5vw, 32px);
  /* The rack row scrolls sideways inside the module; without this the
     overflowing balls would spill past the module's rounded corners. */
  overflow: hidden;
}

/* Heading group: eyebrow, then title, then tabs — all left-aligned and
   stacked, matching how "Browse New Bowling Balls" sits on the standard
   homepage. .spi-section-header is already a flex column aligned to
   flex-start, so this only adds the gap above the tab group. */
.ptlp-rack-header {
  gap: 14px;
  margin-bottom: 4px;
}

/* ---- the tab group ---- */
.ptlp-rack-tabs {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
  padding: 5px;
  background: var(--ptlp-bg-card);
  border: 1px solid var(--spi-border);
  border-radius: var(--spi-radius-pill);
}

.ptlp-rack-tab {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  padding: 10px 22px;
  /* Never shrink below the label. A flex item defaults to flex-shrink:1,
     so inside the nowrap scrolling group at phone widths the pills
     compressed under their own text and the label spilled out of the
     pink fill onto the next tab's logo. The pills keep their natural
     width and the group scrolls instead. */
  flex: 0 0 auto;
  appearance: none;
  border: 1px solid transparent;
  border-radius: var(--spi-radius-pill);
  background: transparent;
  color: rgba(255, 255, 255, 0.72);
  font-family: var(--spi-font-body);
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  white-space: nowrap;
  cursor: pointer;
  transition: background-color 0.25s ease, color 0.25s ease;
}

.ptlp-rack-tab:hover {
  background: var(--ptlp-soft);
  color: #ffffff;
}

.ptlp-rack-tab.is-active {
  background: var(--ptlp-pink);
  border-color: var(--ptlp-pink);
  color: #ffffff;
  box-shadow: 0 6px 18px var(--ptlp-glow);
}

.ptlp-rack-tab:focus-visible {
  outline: 2px solid var(--ptlp-pink-lift);
  outline-offset: 2px;
}

/* Same whitening as the brand stripe, and the same caveat: it is a
   silhouette, not a real white export. See section 5. */
.ptlp-rack-tab-logo {
  height: 16px;
  width: auto;
  filter: brightness(0) invert(1);
  /* The resting tabs are dimmed; their logo should dim with the label
     rather than staying at full white and out-shouting it. */
  opacity: 0.72;
  transition: opacity 0.25s ease;
}

.ptlp-rack-tab.is-active .ptlp-rack-tab-logo,
.ptlp-rack-tab:hover .ptlp-rack-tab-logo {
  opacity: 1;
}

/* ---- panels ---- */
/* MUST stay. The panel is a plain div today, so [hidden] would work on
   its own — but this is the same trap .spi-archetype-grid[hidden] exists
   for in spi-homepage.css: any author rule that gives the panel a
   display value beats the browser's built-in [hidden]{display:none},
   and the inactive rack would render under the active one. Cheap
   insurance against a future layout rule on this class. */
.ptlp-rack-panel[hidden] {
  display: none;
}

/* ---- the rack row, contained ----
   .spi-scroll is built to break OUT of its container to the full screen
   width (margin-left/right: calc(50% - 50vw)) so a carousel bleeds off
   both edges of the page. Inside a bounded module that is exactly wrong
   — the balls would escape the card. The breakout and its edge gutter
   are cancelled here so the row scrolls WITHIN the module instead.

   Everything else .spi-scroll provides — overflow, snap, hidden
   scrollbar, drag-to-scroll, the 200px/150px ball track — is untouched
   and still comes from the sheets above. */
.ptlp-rack .spi-row.spi-scroll {
  margin-left: 0;
  margin-right: 0;
  /* Vertical padding stays: it is the room the card hover-lift needs,
     since overflow-x:auto clips the vertical axis. */
  padding-left: 0;
  padding-right: 0;
  scroll-padding-left: 0;
}

/* No disc behind the individual balls — the tone that used to sit in
   those circles is now carried by the module surface itself, so the
   balls sit directly on it and the set reads as one product module
   rather than eight separately outlined objects. A drop shadow is kept
   so each ball still lifts off the surface. */
/* The square box and object-fit now come from .spi-card-ball img in
   spi-homepage.css, which both homepages share — only the shadow that
   replaces the removed disc is PTLP's. */
.ptlp-rack .spi-card-ball img {
  filter: drop-shadow(0 14px 18px rgba(0, 0, 0, 0.55));
}

.ptlp-rack .spi-card-ball-name {
  font-size: 12px;
  letter-spacing: 0.08em;
}

/* ---- per-brand CTA under the rack ---- */
.ptlp-rack-cta {
  display: flex;
  justify-content: center;
  /* .spi-scroll already carries 48px of bottom padding for the hover
     lift, so this only needs to close the gap, not re-space it. */
  margin-top: 4px;
}

@media (max-width: 600px) {
  .ptlp-rack-tabs {
    /* Three pills never fit one phone line; let the group scroll
       sideways instead of stacking into a three-row block. */
    flex-wrap: nowrap;
    overflow-x: auto;
    scrollbar-width: none;
    max-width: 100%;
  }

  .ptlp-rack-tabs::-webkit-scrollbar { display: none; }

  .ptlp-rack-tab {
    padding: 9px 16px;
    font-size: 12px;
  }
}


/* ---------------------------------------------------------
   6. IMAGE + PRODUCT CARDS
   Nav cards (category / bags / apparel), feature cards, and
   the Master essentials grid. Surfaces, borders and the image
   scrim all follow the token block already — these are the
   leftovers the base hard-codes to #fff or leaves untinted.
--------------------------------------------------------- */

/* Product cards pick up the pink lift the campaign page gives its
   product grid, in place of the base's static card. */
.spi-card-product {
  transition: transform 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
}

.spi-card-product:hover {
  transform: translateY(-4px);
  border-color: var(--ptlp-line);
  box-shadow: 0 12px 30px var(--ptlp-glow);
}

/* The product name. The card is an <a>, and on the live site the store
   theme sets a link-hover colour — which the heading INHERITED, because
   nothing here gave it one, so it flipped to near-black on hover.

   Giving it its own colour is the whole fix: an inherited value always
   loses to a directly-applied one. That is why "Shop Now" below was
   never affected — it has always had its own colour. Same pattern, so
   no !important and no :hover rule is needed. */
.spi-card-product-body h4 {
  color: #ffffff;
}

/* "Shop Now" under each essential — muted grey in the base. */
.spi-card-product-body span {
  color: var(--ptlp-pink);
}

/* The essentials plate. The base fills it with --spi-gray-300, which
   the token block already darkened; the mockup lifts it to a soft
   radial so the cut-out products do not sit on flat black. */
.spi-card-product-img {
  background: radial-gradient(circle at 50% 45%, #2a2a2a 0%, #1c1c1c 55%, #141414 100%);
}

/* ---------------------------------------------------------
   7. VIDEO ROW
   "See What's New". The play button is a neutral dark disc in
   the base; pink in the mockup.
--------------------------------------------------------- */
.spi-play {
  background: var(--ptlp-pink);
  border-color: rgba(255, 255, 255, 0.28);
  box-shadow: 0 6px 18px rgba(0, 0, 0, 0.45);
}

.spi-card-video:hover .spi-play {
  background: var(--ptlp-pink-lift);
}


/* ---------------------------------------------------------
   8. LEARNING SECTION
   "Bowling Knowledge from SPI". The band follows
   --spi-gray-200 from the token block; it gains the hairline
   the mockup shows separating it from the section above.

   NOTE: the five cards are flat images with the artwork baked
   in, so this theme cannot re-color them — pink exports are
   an asset to supply. See the comment in the HTML.
--------------------------------------------------------- */
.spi-section-learning {
  border-top: 1px solid #1f1f1f;
}

.spi-section-learning .spi-card-feature.is-flat {
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.spi-section-learning .spi-card-feature.is-flat:hover {
  transform: translateY(-4px);
  box-shadow: 0 14px 32px var(--ptlp-glow);
}


/* ---------------------------------------------------------
   9. PTLP BAND  (.ptlp-home-*)
   Additive — no equivalent exists on the standard homepage,
   so unlike everything above, this component's layout has to
   live here.

   It is the live Paint the Lanes Pink page's donation panel
   (.ptlp-total / .ptlp-count / .ptlp-meter-*) re-cut for a
   homepage band: the same count/meter/label anatomy and the
   same clamp-based fluid type, on the dark ground the mockup
   uses instead of that page's full pink panel. Namespaced
   ptlp-home-* because this page does not load ptlp-style.css
   and the two must not be confused for the same component.

   Type and copy come from the base's .spi-h2 / .spi-h3 /
   .spi-body / .spi-eyebrow; only the count is sized here,
   since nothing in the base goes that large.
--------------------------------------------------------- */
.ptlp-home-band {
  background: var(--ptlp-bg-soft);
}

/* auto-fit + minmax, matching the base's own row idiom: two columns
   on a desktop, one on a phone, with no breakpoint of its own. */
.ptlp-home-band-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 420px), 1fr));
  gap: clamp(32px, 4vw, 64px);
  align-items: center;
}

.ptlp-home-band-copy {
  display: flex;
  flex-direction: column;
  gap: 18px;
  /* A grid item's default min-width:auto refuses to shrink below its
     content; the long count would push the column past its track and
     overflow the page on a phone. */
  min-width: 0;
}

.ptlp-home-lockup {
  display: flex;
  align-items: center;
  gap: 14px;
}

/* The ribbon mark, in both the lockup and the strip below. Drawn in
   currentColor so each context's own color carries it. */
.ptlp-home-ribbon {
  flex: 0 0 auto;
  fill: currentColor;
}

.ptlp-home-lockup .ptlp-home-ribbon {
  color: var(--ptlp-pink);
}

/* The campaign ribbon mark. The SVG carries its own intrinsic size
   (105x184), so without an explicit height it renders full-size and
   dwarfs the eyebrow beside it — height drives, width follows. */
.ptlp-home-lockup-logo {
  flex: 0 0 auto;
  height: 46px;
  width: auto;
  display: block;
}

/* The donation total. Clamped like .ptlp-count on the campaign page,
   so it scales with the viewport instead of stepping at a breakpoint. */
.ptlp-home-count {
  font-family: var(--spi-font-display);
  font-weight: 700;
  font-size: clamp(44px, 7vw, 112px);
  line-height: 0.92;
  letter-spacing: -0.01em;
  color: var(--ptlp-pink);
  font-variant-numeric: tabular-nums;
}

.ptlp-home-band-copy .spi-body {
  max-width: 52ch;
  margin: 0;
}

.ptlp-home-meter-wrap {
  display: flex;
  flex-direction: column;
  gap: 10px;
  max-width: 620px;
}

/* White fill on a dark track here; the campaign page runs white on
   pink because its panel is pink. Same anatomy, inverted ground. */
.ptlp-home-meter-track {
  height: 10px;
  border-radius: var(--spi-radius-pill);
  background: #262626;
  overflow: hidden;
}

.ptlp-home-meter-fill {
  height: 100%;
  width: 85%;
  border-radius: var(--spi-radius-pill);
  background: var(--ptlp-pink);
}

.ptlp-home-meter-labels {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 8px;
  font-family: var(--spi-font-display);
  font-weight: 600;
  font-size: clamp(11px, 1.15vw, 12px);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: #ffffff;
}

.ptlp-home-meter-goal {
  color: rgba(255, 255, 255, 0.60);
}

.ptlp-home-band-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}

/* ---- the ION Pro Pearl card ---- */
.ptlp-home-ball-card {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.1fr);
  align-items: center;
  gap: clamp(20px, 2.5vw, 32px);
  padding: clamp(24px, 3vw, 36px);
  background: #141414;
  border: 1px solid var(--spi-border);
  border-radius: var(--spi-radius-md);
  text-decoration: none;
  transition: transform 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease;
}

.ptlp-home-ball-card:hover {
  transform: translateY(-4px);
  border-color: var(--ptlp-line);
  box-shadow: 0 16px 36px var(--ptlp-glow);
}

.ptlp-home-ball-img img {
  display: block;
  width: 100%;
  height: auto;
}

.ptlp-home-ball-body {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 8px;
}

.ptlp-home-ball-body .spi-h3 {
  font-size: clamp(22px, 2.2vw, 32px);
  line-height: 1.1;
  color: #ffffff;
}

.ptlp-home-ball-body .spi-body {
  margin: 0;
  font-size: 14px;
}

.ptlp-home-ball-body .btn.default {
  margin-top: 8px;
}

/* One breakpoint, and only because the card is a two-column grid
   inside a column that is itself already halved on a desktop — below
   this the ball and its copy are each too narrow to read. Matches the
   base's own 600px phone breakpoint rather than introducing a new one. */
@media (max-width: 600px) {
  .ptlp-home-ball-card {
    grid-template-columns: minmax(0, 1fr);
    text-align: left;
  }

  .ptlp-home-ball-img img {
    max-width: 240px;
    margin: 0 auto;
  }
}


/* ---------------------------------------------------------
  10. AWARENESS RIBBON  (.ptlp-home-ribbon-bar)
   Additive, October only. Full-bleed pink strip under the
   band. Edge padding comes from the same --spi-pad-* tokens
   every section on the page uses, so it stays in step with
   them at every width.
--------------------------------------------------------- */
.ptlp-home-ribbon-bar {
  background: var(--ptlp-pink);
  color: #ffffff;
  padding: 16px var(--spi-pad-desktop);
}

.ptlp-home-ribbon-bar-inner {
  max-width: var(--spi-container-max);
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 10px 16px;
  text-align: center;
}

.ptlp-home-ribbon-bar-lead {
  font-family: var(--spi-font-display);
  font-weight: 600;
  font-size: 13px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.ptlp-home-ribbon-bar-rule {
  width: 1px;
  height: 14px;
  background: rgba(255, 255, 255, 0.50);
}

.ptlp-home-ribbon-bar-copy {
  font-family: var(--spi-font-body);
  font-size: 13px;
  color: rgba(255, 255, 255, 0.92);
}

.ptlp-home-ribbon-bar-link {
  font-family: var(--spi-font-body);
  font-weight: 700;
  font-size: 13px;
  color: #ffffff;
  text-decoration: underline;
  text-underline-offset: 3px;
  /* Was a bare 15px-tall tap target; inline-flex lets it take a height. */
  display: inline-flex;
  align-items: center;
  padding: 0 4px;
}

.ptlp-home-ribbon-bar-link:hover {
  color: #ffffff;
  text-decoration-thickness: 2px;
}

/* The vertical rule has nothing to separate once the strip wraps to
   its own lines. Tracks the base's tablet/mobile padding tokens. */
@media (max-width: 1024px) {
  .ptlp-home-ribbon-bar { padding-left: var(--spi-pad-tablet); padding-right: var(--spi-pad-tablet); }
}

@media (max-width: 768px) {
  .ptlp-home-ribbon-bar-rule { display: none; }
}

@media (max-width: 600px) {
  .ptlp-home-ribbon-bar { padding-left: var(--spi-pad-mobile); padding-right: var(--spi-pad-mobile); }
}


/* ---------------------------------------------------------
  11. TOUCH TARGETS
   Keyed on the input device, not the viewport width. Sizing
   these in a max-width query got it wrong at both ends: a
   tablet in landscape is 1024px wide and still a finger, while
   a narrow desktop window is still a mouse. `pointer: coarse`
   asks the right question.

   Only the two controls this theme introduces are listed. The
   rest of the page's targets come from the shared sheets and
   are left to them.
--------------------------------------------------------- */
@media (pointer: coarse) {
  /* 36px on a phone, 38px on a tablet — both under the ~44px
     comfortable target for a control people tap repeatedly. */
  .ptlp-rack-tab {
    min-height: 44px;
  }

  /* The awareness strip's "Learn more" was a 15px-tall line of text. */
  .ptlp-home-ribbon-bar-link {
    min-height: 44px;
  }
}
