/* ══════════════════════════════════════════════════════════════════════
   PREMIUM PASS — response, material, accessibility (shared)
   Worked against Apple's fluid-interface principles. The dashboard had far
   less of this than the booth did: two :active rules in 1700 lines, no
   touch-action, and nothing honouring the transparency or contrast
   settings — so this is mostly additive rather than corrective.
   ══════════════════════════════════════════════════════════════════════ */

:root {
  --ease-out-quart: cubic-bezier(0.16, 1, 0.3, 1);   /* settles, no overshoot */
  --ease-standard:  cubic-bezier(0.4, 0, 0.2, 1);    /* symmetric, reversible moves */
  --dur-press: 90ms;
  --dur-quick: 180ms;
}

/* ── 1. Response ───────────────────────────────────────────────────────
   Feedback belongs on pointer-DOWN. The dashboard had almost none, so a
   tap on a card or a button gave nothing back until the page changed —
   which is where an interface stops feeling direct. Kept small: a
   dashboard is a working tool, not a toy, and 0.98 is felt more than
   seen. */
.btn:not([disabled]):active,
.event-card:active,
.copy-pill:active,
.code-pill:active,
.strip:active,
.tile:active,
.s-actions button:active,
.lb-actions button:active,
.m-actions button:active {
  transform: scale(0.985);
  transition-duration: var(--dur-press);
}

/* Kills the legacy ~300ms double-tap wait and the grey flash on touch. The
   dashboard is used on tablets at events, not only on a desk. */
.btn, .event-card, .copy-pill, .code-pill, .strip, .tile,
button, [role="button"], .setup-tab, a.btn, .lb-nav, .lb-x {
  touch-action: manipulation;
  -webkit-tap-highlight-color: transparent;
}

/* ── 12. Material ──────────────────────────────────────────────────────
   A bright top edge reads as light catching a real surface, which is what
   separates a translucent panel from a flat grey box. */
.card, .event-card {
  transition: transform var(--dur-quick) var(--ease-out-quart),
              box-shadow var(--dur-quick) var(--ease-out-quart);
}

/* ── 14. Reduced transparency ──────────────────────────────────────────
   Seven backdrop-filters and nothing honouring the setting. Blur behind an
   opaque surface is GPU cost for no visible result, so drop it entirely
   rather than just raising opacity. */
@media (prefers-reduced-transparency: reduce) {
  .card, .event-card, .lightbox, .modal, .m-panel, .dash-toolbar {
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    background-color: var(--cc-graphite, #1B1D22) !important;
  }
}

/* ── 14. Increased contrast ────────────────────────────────────────────
   Near-solid surfaces with a real border, instead of relying on a
   translucent edge to imply one. */
@media (prefers-contrast: more) {
  .card, .event-card, .m-panel {
    background-color: #14161B !important;
    border: 1px solid var(--cc-cream, #F2F4EE) !important;
  }
  .btn-secondary, .btn-ghost { border: 1px solid var(--cc-cream, #F2F4EE); }
}

/* ── 14. Reduced motion ────────────────────────────────────────────────
   Non-vestibular, not inert: colour and opacity feedback stays, only the
   movement goes. */
@media (prefers-reduced-motion: reduce) {
  .btn:not([disabled]):active,
  .event-card:active, .copy-pill:active, .code-pill:active,
  .strip:active, .tile:active,
  .s-actions button:active, .lb-actions button:active,
  .m-actions button:active { transform: none; }
  .card, .event-card { transition: none; }
}
