/* Shared by the deck and the self-contained dragon preview. */
.reveal svg .dg-smoke { pointer-events: none; }
.reveal svg .dg-smoke-ribbon,
.reveal svg .dg-smoke-wisp { transform-origin: 0 0; opacity: 0; }
.reveal .slides section.present .dg-smoke-ribbon { animation: dg-exhale 4.8s ease-out infinite; }
.reveal .slides section.present .dg-smoke-ribbon-back { animation-delay: -.65s; }
.reveal .slides section.present .dg-smoke-wisp { animation: dg-exhale 4.8s -.3s ease-out infinite; }
/* Less frantic wingbeats, with a short rest at the end of each stroke. */
.reveal .slides section.present .dg-wing-l { animation: dg-wing-left 2.4s ease-in-out infinite; }
.reveal .slides section.present .dg-wing-r { animation: dg-wing-right 2.4s ease-in-out infinite; }
@keyframes dg-wing-left { 0%, 100% { transform: rotate(5deg); } 45%, 60% { transform: rotate(-9deg); } }
@keyframes dg-wing-right { 0%, 100% { transform: rotate(-5deg); } 45%, 60% { transform: rotate(9deg); } }
@keyframes dg-exhale {
  0%, 12% { opacity: 0; transform: scale(.15, .35); }
  24% { opacity: .85; transform: scale(.65, .8); }
  45% { opacity: .7; transform: scale(1, 1); }
  75%, 100% { opacity: 0; transform: translate(32px, -20px) scale(1.2, 1.15); }
}
@media (prefers-reduced-motion: reduce) {
  .reveal .slides section.present .dg-smoke-ribbon { opacity: .4; transform: none; }
  .reveal .slides section.present .dg-smoke-ribbon-back { opacity: .2; }
}
