/* Edition 30: urgency feedback; timers/deadlines remain authoritative in engines. */
.timer-row strong.critical-shake,
#timesup .tu-remote-timer.critical-shake,
#covered26 .amc26-clock.is-shaking b {
  animation: urgency30-shake .38s linear infinite;
}
#timesup .tu-remote-timer.urgent { color: #b42318; }
#covered26 .amc26-clock.is-urgent b { color: #b42318; }
@keyframes urgency30-shake {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-2px); }
  75% { transform: translateX(2px); }
}
@media (prefers-reduced-motion: reduce) {
  .timer-row strong.urgent, .timer-row strong.critical-shake,
  #timesup .tu-remote-timer.critical-shake,
  #covered26 .amc26-clock.is-shaking b { animation: none !important; }
}

/* Le rouge critique reste lisible dans les quatre palettes. Pas de modification
   de taille au franchissement du seuil ; aucun son n'est ajouté par les vues. */
html .app :is(#timer.urgent, #tu-timer.urgent,
  #timesup .tu-remote-timer.urgent, #covered26 .amc26-clock.is-urgent b) {
  color: #b42318;
  background-color: #fee4e2;
}
html[data-motion="reduce"] :is(.timer-row strong.urgent,
  .timer-row strong.critical-shake, #timesup .tu-remote-timer.critical-shake,
  #covered26 .amc26-clock.is-shaking b) {
  animation: none !important;
}
