/* ════════════════════════════════════════════════════════════════════════
   ANIMATIONS · @keyframes catalogue — Take One Santuario
   Estratto da style_4.css in Fase 2.7 Modularizzazione Mirata
   ────────────────────────────────────────────────────────────────────────
   Tutti gli @keyframes del cockpit raggruppati in un solo file. Le classi
   che li consumano (animation: foo …) restano in style_4.css. Le
   regole @media (prefers-reduced-motion: reduce) che disattivano singole
   animazioni restano nei loro contesti originali per non perdere lo scope.
   ──────────────────────────────────────────────────────────────────────── */

/* 1) Sidebar drawer · pulse della lama cyan sul bordo destro */
@keyframes t1-sidebar-blade-pulse {
  0%,
  100% {
    opacity: 0.72;
    filter: brightness(0.94);
  }
  50% {
    opacity: 1;
    filter: brightness(1.06);
  }
}

/* 2) Cockpit context · fade-in dolce della rail/overlay */
@keyframes t1-cockpit-context-fade {
  from {
    opacity: 0.35;
    filter: blur(3px);
  }
  to {
    opacity: 1;
    filter: none;
  }
}

/* 3) Notes purge confirm · velo sul dialogo di cancellazione bulk */
@keyframes notes-purge-veil-in {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* 4) Notes purge confirm · pannello che emerge */
@keyframes notes-purge-panel-in {
  from {
    opacity: 0;
    transform: translateY(8px) scale(0.97);
    filter: blur(2px);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
    filter: blur(0);
  }
}

/* 5) Notes feed · incinerate effect (bulk delete) */
@keyframes notes-feed-incinerate {
  0% {
    opacity: 1;
    transform: scale(1) translateY(0);
    filter: brightness(1);
  }
  35% {
    filter: brightness(1.35) saturate(1.2);
  }
  100% {
    opacity: 0;
    transform: scale(0.94) translateY(6px);
    filter: brightness(0.4) blur(2px);
  }
}

/* 6) Notes recording · pulse alone REC sul bordo top */
@keyframes notes-recording-pulse {
  from {
    opacity: 0.55;
    filter: brightness(0.95);
  }
  to {
    opacity: 1;
    filter: brightness(1.15);
  }
}

/* 7) Sidebar input · pulse cyan a riposo (focus state) */
@keyframes t1-sidebar-input-pulse {
  0%, 100% { box-shadow: 0 0 0 1px rgba(0, 229, 255, 0.20); }
  50%       { box-shadow: 0 0 0 2px rgba(0, 229, 255, 0.36), 0 0 10px rgba(0, 229, 255, 0.12); }
}

/* 8) Notes feed · LED rail in sync con card attiva / link marker */
@keyframes notes-feed-rail-led-sync {
  from {
    filter: brightness(1);
  }
  to {
    filter: brightness(1.2);
  }
}

/* 9) Note rail · sync pulse breve quando il link risuona col marker */
@keyframes note-rail-sync-pulse {
  0% {
    background: rgba(0, 229, 255, 0.55);
    box-shadow: -6px 0 18px rgba(0, 229, 255, 0.35);
  }
  35% {
    background: rgba(130, 255, 200, 0.85);
    box-shadow:
      -8px 0 28px rgba(130, 255, 200, 0.45),
      -4px 0 14px rgba(130, 255, 200, 0.35);
  }
  100% {
    background: #9ca3af;
    box-shadow: none;
  }
}

/* 10) Profile card · loading pulse */
@keyframes loading-pulse {
  from { opacity: 0.25; transform: scale(0.8); }
  to   { opacity: 0.85; transform: scale(1.2); }
}

/* 11) Player loading · overlay fade-in */
@keyframes player-loading-overlay-in {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

/* 12) Player loading · spinner */
@keyframes player-loading-spin {
  to {
    transform: rotate(360deg);
  }
}

/* 13) Monorail · pulse edge timeline (top edge cyan) */
@keyframes t1-monorail-pulse {
  0%, 100% { opacity: 0.32; transform: scaleX(0.92); }
  50%      { opacity: 1.00; transform: scaleX(1.00); }
}

/* 14) Ametista Needle · respiro della lente magnifier */
@keyframes t1-lens-breathe {
  0%, 100% { transform: scale(1.0); }
  50%      { transform: scale(1.18); }
}

/* 15) Ghost / ephemeral pen · fade out tratto */
@keyframes fadeOut {
  0%   { opacity: 1; }
  100% { opacity: 0; }
}

/* 16) Shape preview · pulse "in attesa di conferma" */
@keyframes shape-pending-pulse {
  from { opacity: 0.88; }
  to   { opacity: 0.65; }
}
