/* FRISTNOR refinements from the October audit (Impeccable + Emil Kowalski).
   An override layer, loaded last on every page: the stylesheets it corrects
   (site.v3, pages.v3, motion.v4, loader.v1) are cached by name for a year,
   so the fixes live here instead of in them.
   1. Tap targets: 44px hit areas, same visible size
   2. Contrast
   3. Type: an 11px floor for functional text, a -0.04em tracking floor
   4. Motion: nothing appears from nothing
   5. Quieter: solid text instead of gradient fills, depth instead of glow */

/* ---------- 1. tap targets ---------- */
/* invisible hit areas grow the target without changing the drawing */
.chat-composer button{ position: relative; }
.chat-composer button::after{ content: ""; position: absolute; inset: -6px; border-radius: 50%; }
.video-control::after{ content: ""; position: absolute; inset: -5px -2px; }
.walkthrough-toggle::after{ content: ""; position: absolute; inset: -7px -4px; }
.crumbs a{ display: inline-block; padding: 14px 0; margin: -14px 0; }

/* ---------- 2. contrast ---------- */
/* "Message your coach" measured 4.0:1; this lands at 5.6:1 on the composer */
.chat-composer input::placeholder{ color: rgba(233,237,244,0.62); }

/* ---------- 3. type ---------- */
.scroll-cue, .app-screen, .ramp-axis, .header--capsule .nav-drop-label, .clock-label,
.cart-sequence-top, .cart-sequence-bottom, .share-meta, .share-allocation-labels,
.hero .badge, #problem .voice .voice-label, #problem .voice > div::after{ font-size: 11px; }

.hero h1, .section h2, .split-head h2, .calc-big, .figure-n, .phase-n, .cta h2,
.page-intro .page-title, .subpage .page-intro .page-title, .next-title,
.day-scene h2, .day-clock-time, .ladder .rung-price, #story .help b,
#product .product-title, .ribbon-lane, .clock-window, .cart-type,
.share-number, .share-currency, .share-percent, .share-message{ letter-spacing: -0.04em; }

/* ---------- 4. motion ---------- */
/* the loader's pupil used to grow from nothing; it now starts as a small star */
@keyframes loader-pupil-in{
  from{ opacity: 0; transform: scale(.4) rotate(-120deg); }
  to{ opacity: 1; transform: scale(1) rotate(0); }
}

/* ---------- 5. quieter ---------- */
/* gradient-filled text becomes solid; emphasis comes from the serif italic */
.hero h1 em{
  background: none; -webkit-text-fill-color: currentColor; color: #d6e0ef;
  text-shadow: 0 2px 18px rgba(0,0,0,.45);
}
.calc-big, .figure-n{ background: none; -webkit-text-fill-color: currentColor; color: #fff; }
.day-scene h2 em{ background: none; -webkit-text-fill-color: currentColor; color: #d6e0ef; }

/* zero-offset coloured halos removed; offset shadows keep the depth */
.nav a.is-active{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.1); }
@media (hover: hover){
  .btn-solid:hover, .hero-actions .btn-solid:hover{ box-shadow: inset 0 1px 0 #fff, 0 8px 18px rgba(0,0,0,0.35); }
  .btn-ghost:hover, .hero-actions .btn-ghost:hover{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.22), 0 8px 18px rgba(0,0,0,0.3); }
  .feature:hover .feature-icon{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.13), 0 6px 14px rgba(0,0,0,0.35); }
  .range:hover::-webkit-slider-thumb{ box-shadow: 0 0 0 6px rgba(186,208,255,0.14); }
}
.feature-icon{ box-shadow: inset 0 1px 0 rgba(255,255,255,0.13); }
.range:focus-visible::-webkit-slider-thumb{ box-shadow: 0 0 0 6px rgba(186,208,255,0.22); }
.scroll-progress i, .steps-fill, .beats-fill, .split-you,
.tour-item.is-on::before, .coach-points li::before, .app-mark, .chat-avatar{ box-shadow: none; }
.panel--pulse li svg{ filter: none; }
.cart-toasts li > b, .cart-feed-head b{ text-shadow: none; }

/* the platform cards' live dots play a few times, then rest */
.feature-live--dots i, .feature-live--pulse i{ animation-iteration-count: 3; }
