/* ════════════════════════════════════════════════════════════════════
   VYAN · motion-core (the still-marketing concern)
   Apple-feel dynamics: things press like hardware, settle like springs.
   The marketing surface stays quiet: one scripted moment per page, spent
   on a mechanism the operator actuates, never on a viewport reveal.
   The fade-up engine is RETIRED (Brief B.3): content rests visible.
   App-only celebration primitives live in motion-app.css.
   ════════════════════════════════════════════════════════════════════ */

/* ── Pressables: everything tappable gives under the thumb ───────── */
.btn, .btn-gold, .tlink, .fchip, .b-opt, .nav-it, .catalog-row, .route, .route-card,
.tier .btn, .mod-row, .preset-row, .actuator, .vrow.clickable, .act, .dispo, .thr, .fm-press {
  transition: transform var(--m-fast) var(--ease-spring),
              border-color var(--m-fast) var(--ease),
              background var(--m-fast) var(--ease),
              box-shadow var(--m-fast) var(--ease),
              color var(--m-fast) var(--ease);
}
.btn:active, .btn-gold:active, .fchip:active, .b-opt:active, .act:active,
.dispo:active, .mod-row:active, .nav-it:active, .thr:active, .fm-press:active {
  transform: scale(.965);
}
.btn-gold:hover { transform: translateY(-1px); }
.btn-gold:active { transform: scale(.97); }

/* ── System-wide press detent (Brief B.3) ─────────────────────────
   Every actionable element gets a real :active translateY plus a 1px
   ember underglow visible ONLY while pressed. The cheapest "this is
   built" signal. The box-shadow is a hairline, never a resting halo. */
.tlink:active, .catalog-row:active, .route-card:active,
.preset-row:active, .actuator:active, .vrow.clickable:active {
  transform: translateY(1px);
  box-shadow: 0 1px 0 0 var(--ember);
}

/* ── Entrances: app views arrive, they don't just appear ─────────── */
@keyframes riseIn {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: none; }
}
.view > * { animation: riseIn var(--m-enter) var(--ease-exit) backwards; }
.view > *:nth-child(1) { animation-delay: 0ms; }
.view > *:nth-child(2) { animation-delay: 40ms; }
.view > *:nth-child(3) { animation-delay: 80ms; }
.view > *:nth-child(4) { animation-delay: 120ms; }
.view > *:nth-child(5) { animation-delay: 160ms; }
.view > *:nth-child(n+6) { animation-delay: 200ms; }

/* NOTE — the marketing fade-up engine (.rise translateY) is retired.
   Marketing content rests visible (opacity 1). One scripted moment per
   page animates a mechanism via a transient class removed by setTimeout
   (the Glass Roof law), never a scroll reveal. The legacy .reveal alias
   in base.css stays inert for any old markup. */

/* ── Toasts: spring in from the right, settle precisely ──────────── */
@keyframes toastIn {
  0%   { opacity: 0; transform: translateX(18px) scale(.97); }
  60%  { opacity: 1; transform: translateX(-3px) scale(1.005); }
  100% { opacity: 1; transform: none; }
}
.toast { animation: toastIn 320ms var(--ease-exit); }

/* ── The drawer and sheet: slide with weight ─────────────────────── */
@keyframes sheetUp {
  from { transform: translateY(18px); opacity: 0; }
  to   { transform: none; opacity: 1; }
}
.sheet { animation: sheetUp 280ms var(--ease-exit); }
@keyframes drawerIn {
  from { transform: translateX(24px); opacity: 0; }
  to   { transform: none; opacity: 1; }
}
.drawer { animation: drawerIn 280ms var(--ease-exit); }

/* ── Count-up numbers get a soft settle ──────────────────────────── */
.counting { transition: opacity 120ms var(--ease); }

/* ── Respect the human ───────────────────────────────────────────── */
@media (prefers-reduced-motion: reduce) {
  .view > *, .toast, .sheet, .drawer { animation: none !important; }
  .btn:active, .btn-gold:active, .fchip:active, .b-opt:active, .act:active,
  .dispo:active, .mod-row:active, .nav-it:active, .thr:active, .fm-press:active { transform: none; }
  .tlink:active, .catalog-row:active, .route-card:active,
  .preset-row:active, .actuator:active, .vrow.clickable:active { transform: none; box-shadow: none; }
}
