/* ═══════════════════════════════════════════════════════════════════
   Iconography — animated · keyframes
   Each name reads as the metaphor it implements; recipes in
   _icon-recipes.js reference these.  Single source of truth.
   ═══════════════════════════════════════════════════════════════════ */

/* ── Cosmic & status pulses ──────────────────────────────────────── */
@keyframes orbit-breathe   { 0%,100% { transform: scale(1);    filter: drop-shadow(0 0 0 #fff); }
                              50%     { transform: scale(1.08); filter: drop-shadow(0 0 6px #fff); } }
@keyframes orbit-expand    { 0%   { transform: scale(1); filter: drop-shadow(0 0 0 #fff); }
                              40%  { transform: scale(1.35); filter: drop-shadow(0 0 14px #fff) drop-shadow(0 0 4px #fff); }
                              70%  { transform: scale(0.96); filter: drop-shadow(0 0 4px #fff); }
                              100% { transform: scale(1); filter: drop-shadow(0 0 0 #fff); } }

@keyframes ai-twinkle      { 0%,100% { transform: scale(1) rotate(0); filter: drop-shadow(0 0 0 #fff); }
                              50%     { transform: scale(1.06) rotate(6deg); filter: drop-shadow(0 0 4px #fff); } }
@keyframes ai-burst        { 0%   { transform: scale(1) rotate(0); filter: drop-shadow(0 0 0 #fff); }
                              50%  { transform: scale(1.25) rotate(-12deg); filter: drop-shadow(0 0 12px #fff); }
                              100% { transform: scale(1) rotate(0); filter: drop-shadow(0 0 0 #fff); } }

@keyframes ring-breathe    { 0%,100% { transform: scale(1); } 50% { transform: scale(0.92); } }
@keyframes ring-expand     { 0% { transform: scale(1); opacity: 1; }
                              60% { transform: scale(1.5); opacity: 0; }
                              61% { transform: scale(0.7); opacity: 1; }
                              100% { transform: scale(1); opacity: 1; } }

/* ── Dots ─────────────────────────────────────────────────────────── */
@keyframes dot-pulse       { 0%,100% { transform: scale(1); } 50% { transform: scale(1.35); } }
@keyframes dot-burst       { 0% { transform: scale(1); } 35% { transform: scale(1.9); opacity: 0.6; } 100% { transform: scale(1); opacity: 1; } }
@keyframes dot-burst-big   { 0% { transform: scale(1); } 30% { transform: scale(1.6); filter: drop-shadow(0 0 8px #fff); } 100% { transform: scale(1); filter: drop-shadow(0 0 0 #fff); } }

/* ── Live / on / off ──────────────────────────────────────────────── */
@keyframes live-pulse      { 0%,100% { transform: scale(1); filter: drop-shadow(0 0 0 var(--100)); }
                              50%     { transform: scale(1.12); filter: drop-shadow(0 0 6px var(--100)); } }
@keyframes live-burst      { 0% { transform: scale(1); filter: drop-shadow(0 0 0 var(--100)); }
                              50% { transform: scale(1.3); filter: drop-shadow(0 0 14px var(--100)); }
                              100% { transform: scale(1); filter: drop-shadow(0 0 0 var(--100)); } }
@keyframes on-pulse        { 0%,100% { transform: scale(1); filter: drop-shadow(0 0 0 var(--80)); }
                              50%     { transform: scale(1.08); filter: drop-shadow(0 0 6px var(--80)); } }
@keyframes on-burst        { 0% { transform: scale(1); filter: drop-shadow(0 0 0 var(--80)); }
                              50% { transform: scale(1.25); filter: drop-shadow(0 0 12px var(--80)); }
                              100% { transform: scale(1); filter: drop-shadow(0 0 0 var(--80)); } }

/* ── Rotation family ──────────────────────────────────────────────── */
@keyframes rotate-cw        { from { transform: rotate(0); } to { transform: rotate(360deg); } }
@keyframes rotate-cw-2x     { from { transform: rotate(0); } to { transform: rotate(720deg); } }
@keyframes rotate-ccw       { from { transform: rotate(0); } to { transform: rotate(-360deg); } }

/* ── Bell / service / unsilence ───────────────────────────────────── */
@keyframes bell-ring        { 0%,100% { transform: rotate(-10deg); } 50% { transform: rotate(10deg); } }
@keyframes bell-ring-strong { 0%,100% { transform: rotate(0); } 15% { transform: rotate(-22deg); } 35% { transform: rotate(18deg); } 55% { transform: rotate(-12deg); } 75% { transform: rotate(8deg); } }

/* ── Search ───────────────────────────────────────────────────────── */
@keyframes search-scan      { 0%,100% { transform: translateX(-2px) rotate(-6deg); } 50% { transform: translateX(2px) rotate(6deg); } }
@keyframes search-zoom      { 0%,100% { transform: scale(1); } 50% { transform: scale(1.35); } }

/* ── Bubble / chat ────────────────────────────────────────────────── */
@keyframes bubble-bob       { 0%,100% { transform: scale(1) translateY(0); } 50% { transform: scale(1.06) translateY(-2px); } }
@keyframes bubble-pop       { 0% { transform: scale(0.7); } 50% { transform: scale(1.2); } 100% { transform: scale(1); } }
@keyframes message-bob      { 0%,100% { transform: translateY(0) rotate(-2deg); } 50% { transform: translateY(-2px) rotate(2deg); } }
@keyframes typing-dots      { 0%,60%,100% { opacity: 0.4; } 30% { opacity: 1; } }

/* ── Emote / meme ─────────────────────────────────────────────────── */
@keyframes emote-bob        { 0%,100% { transform: rotate(-4deg) scale(1); } 50% { transform: rotate(4deg) scale(1.08); } }
@keyframes emote-strong     { 0% { transform: scale(1); } 50% { transform: scale(1.25) rotate(-12deg); } 100% { transform: scale(1); } }
@keyframes meme-laugh       { 0%,100% { transform: scale(1) rotate(-3deg); } 25% { transform: scale(0.95) rotate(3deg); } 50% { transform: scale(1.08) rotate(-2deg); } 75% { transform: scale(0.97) rotate(2deg); } }
@keyframes meme-cackle      { 0% { transform: scale(1) rotate(0); } 25% { transform: scale(1.15) rotate(-10deg); } 50% { transform: scale(0.92) rotate(8deg); } 75% { transform: scale(1.12) rotate(-6deg); } 100% { transform: scale(1) rotate(0); } }

/* ── Audio family ─────────────────────────────────────────────────── */
@keyframes signal-wave      { 0%,100% { transform: scaleY(1); } 50% { transform: scaleY(1.25); } }
@keyframes signal-burst     { 0% { transform: scale(1); } 35% { transform: scale(1.35); filter: drop-shadow(0 0 6px #fff); } 100% { transform: scale(1); } }
@keyframes audio-bar        { 0%,100% { transform: scaleY(0.7); } 50% { transform: scaleY(1.3); } }
@keyframes phones-bob       { 0%,100% { transform: rotate(-3deg); } 50% { transform: rotate(3deg); } }
@keyframes phones-thump     { 0% { transform: scale(1); filter: drop-shadow(0 0 0 #fff); } 50% { transform: scale(1.15); filter: drop-shadow(0 0 6px #fff); } 100% { transform: scale(1); } }

/* ── Media ────────────────────────────────────────────────────────── */
@keyframes play-pump        { 0%,100% { transform: scale(1) translateX(0); } 50% { transform: scale(1.1) translateX(1px); } }
@keyframes play-launch      { 0% { transform: scale(1) translateX(0); } 30% { transform: scale(1.25) translateX(4px); } 60% { transform: scale(0.92) translateX(-2px); } 100% { transform: scale(1) translateX(0); } }
@keyframes pause-throb      { 0%,100% { transform: scaleX(1); } 50% { transform: scaleX(0.7); } }
@keyframes pause-snap       { 0% { transform: scaleX(1); } 50% { transform: scaleX(0.5) scaleY(1.15); } 100% { transform: scaleX(1); } }
@keyframes gif-frame        { 0%,49% { transform: translate(0,0); } 50%,100% { transform: translate(-1px, 1px); } }
@keyframes shutter-snap     { 0%,100% { transform: scale(1); } 50% { transform: scale(0.84); filter: brightness(2.5) drop-shadow(0 0 8px #fff); } }
@keyframes aperture-pulse   { 0%,100% { transform: scale(1); filter: drop-shadow(0 0 0 #fff); } 50% { transform: scale(1.06); filter: drop-shadow(0 0 4px #fff); } }

/* ── Dashboard / qr / list ────────────────────────────────────────── */
@keyframes dash-pulse       { 0%,100% { transform: scale(1); } 50% { transform: scale(1.06); filter: drop-shadow(0 0 4px #fff); } }
@keyframes dash-snap        { 0% { transform: scale(1); } 30% { transform: scale(1.3); filter: drop-shadow(0 0 8px #fff); } 100% { transform: scale(1); } }
@keyframes qr-blink         { 0%,100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.35; transform: scale(0.85); } }

/* ── Headings / text ──────────────────────────────────────────────── */
@keyframes head-bob-1       { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-3px); } }
@keyframes head-bob-2       { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-2px); } }
@keyframes head-bob-3       { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-1px); } }
@keyframes head-strike      { 0% { transform: scale(0.85); } 60% { transform: scale(1.25); } 100% { transform: scale(1); } }
@keyframes cursor-blink     { 0%,49% { opacity: 1; } 50%,100% { opacity: 0; } }
@keyframes type-blink       { 0%,100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.4; transform: scale(0.85); } }

/* ── Camera / image ───────────────────────────────────────────────── */
@keyframes camera-shutter   { 0%,100% { transform: scale(1); } 50% { transform: scale(0.82); filter: brightness(2.4) drop-shadow(0 0 6px #fff); } }

/* ── Press / touch / mouse ────────────────────────────────────────── */
@keyframes press-tap        { 0%,100% { transform: scale(1); } 50% { transform: scale(0.92); } }
@keyframes press-strong     { 0% { transform: scale(1); } 50% { transform: scale(0.75); filter: drop-shadow(0 0 6px #fff); } 100% { transform: scale(1); } }
@keyframes mouse-tilt       { 0%,100% { transform: rotate(-6deg); } 50% { transform: rotate(6deg); } }
@keyframes mouse-click      { 0% { transform: scale(1); } 50% { transform: scale(0.85); } 100% { transform: scale(1); } }

/* ── Time / clock ─────────────────────────────────────────────────── */
@keyframes clock-tick-fast  { from { transform: rotate(0); } to { transform: rotate(360deg); } }
@keyframes clock-tick-slow  { from { transform: rotate(0); } to { transform: rotate(360deg); } }
@keyframes clock-wind       { 0% { transform: rotate(0); } 60% { transform: rotate(120deg); } 100% { transform: rotate(0); } }
@keyframes temp-fade        { 0%,100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.45; transform: scale(0.94); } }

/* ── Sun / moon ───────────────────────────────────────────────────── */
@keyframes sun-rays         { from { transform: rotate(0); } to { transform: rotate(360deg); } }
@keyframes sun-flare        { 0% { transform: scale(1) rotate(0); filter: drop-shadow(0 0 0 var(--100)); }
                              50% { transform: scale(1.2) rotate(120deg); filter: drop-shadow(0 0 12px var(--100)); }
                              100% { transform: scale(1) rotate(0); } }
@keyframes moon-rock        { 0%,100% { transform: rotate(-6deg); } 50% { transform: rotate(6deg); } }
@keyframes moon-glow        { 0% { transform: scale(1); filter: drop-shadow(0 0 0 #fff); }
                              50% { transform: scale(1.12); filter: drop-shadow(0 0 8px #fff); }
                              100% { transform: scale(1); } }

/* ── Brand logo glows ─────────────────────────────────────────────── */
@keyframes glow-pulse       { 0%,100% { transform: scale(1); filter: drop-shadow(0 0 0 #fff); }
                              50%     { transform: scale(1.06) rotate(-2deg); filter: drop-shadow(0 0 6px #fff); } }
@keyframes glow-burst       { 0% { transform: scale(1); filter: brightness(1); }
                              50% { transform: scale(1.25); filter: brightness(2.4) drop-shadow(0 0 12px #fff); }
                              100% { transform: scale(1); filter: brightness(1); } }
@keyframes flicker          { 0%,100% { opacity: 1; transform: scale(1); } 30%,70% { opacity: 0.55; transform: scale(0.96); } }
@keyframes flicker-burst    { 0% { opacity: 1; } 30% { opacity: 0.15; transform: scale(0.85); }
                              60% { opacity: 1; transform: scale(1.22); } 100% { opacity: 1; transform: scale(1); } }
@keyframes claw-pinch       { 0%,100% { transform: scaleX(1); } 50% { transform: scaleX(0.85); } }
@keyframes claw-snap        { 0% { transform: scaleX(1); } 50% { transform: scaleX(0.6) scaleY(1.1); } 100% { transform: scaleX(1); } }
@keyframes phone-shake      { 0%,100% { transform: translate(0,0) rotate(0); } 25% { transform: translate(-1px,0) rotate(-3deg); } 75% { transform: translate(1px,0) rotate(3deg); } }
@keyframes phone-ring       { 0%,100% { transform: rotate(0); filter: drop-shadow(0 0 0 var(--100)); }
                              25% { transform: rotate(-10deg); filter: drop-shadow(0 0 6px var(--100)); }
                              75% { transform: rotate(10deg); filter: drop-shadow(0 0 6px var(--100)); } }
@keyframes apple-jiggle     { 0%,100% { transform: rotate(0); } 25% { transform: rotate(-4deg); } 75% { transform: rotate(4deg); } }
@keyframes apple-bite       { 0% { transform: rotate(0) scale(1); } 50% { transform: rotate(-8deg) scale(1.06); } 100% { transform: rotate(0) scale(1); } }
@keyframes svelte-flame     { 0%,100% { transform: scaleY(1); filter: drop-shadow(0 0 0 #636363); } 50% { transform: scaleY(1.06); filter: drop-shadow(0 0 5px #636363); } }
@keyframes figma-stack      { 0%,100% { transform: translate(0,0); } 50% { transform: translate(0.5px,-0.5px); } }
@keyframes git-branch       { 0%,100% { transform: scaleY(1); } 50% { transform: scaleY(1.06) scaleX(0.96); } }

/* ── Nod / sway / heartbeat ───────────────────────────────────────── */
@keyframes nod              { 0%,100% { transform: rotate(-4deg); } 50% { transform: rotate(4deg); } }
@keyframes nod-soft         { 0%,100% { transform: rotate(-2deg); } 50% { transform: rotate(2deg); } }
@keyframes nod-strong       { 0%,100% { transform: rotate(0); } 30% { transform: rotate(-14deg); } 70% { transform: rotate(10deg); } }
@keyframes building-sway    { 0%,100% { transform: rotate(-1deg); } 50% { transform: rotate(1deg); } }
@keyframes heart-beat       { 0%,40%,100% { transform: scale(1); } 14% { transform: scale(1.18); } 28% { transform: scale(1.06); } }
@keyframes swiss-beat       { 0%,40%,100% { transform: scale(1); } 14% { transform: scale(1.18); } 28% { transform: scale(1.04); } }
@keyframes swiss-pulse      { 0%,100% { transform: scale(1); filter: drop-shadow(0 0 0 var(--100)); } 50% { transform: scale(1.08); filter: drop-shadow(0 0 5px var(--100)); } }

/* ── Cloud ────────────────────────────────────────────────────────── */
@keyframes cloud-drift      { 0%,100% { transform: translateX(0); } 50% { transform: translateX(2px); } }

/* ── Filter / drain ───────────────────────────────────────────────── */
@keyframes filter-drain     { 0%,100% { transform: translateY(0); opacity: 1; } 50% { transform: translateY(2px); opacity: 0.7; } }

/* ── Code brackets ────────────────────────────────────────────────── */
@keyframes code-pinch       { 0%,100% { transform: scaleX(1); } 50% { transform: scaleX(0.78); } }
@keyframes code-snap        { 0% { transform: scaleX(1); } 50% { transform: scaleX(0.5); } 100% { transform: scaleX(1); } }

/* ── Center / target ──────────────────────────────────────────────── */
@keyframes center-lock      { 0%,100% { transform: scale(1); filter: drop-shadow(0 0 0 var(--100)); } 50% { transform: scale(0.92); filter: drop-shadow(0 0 5px var(--100)); } }
@keyframes center-acquire   { 0% { transform: scale(1.3); filter: drop-shadow(0 0 0 var(--100)); }
                              50% { transform: scale(0.85); filter: drop-shadow(0 0 8px var(--100)); }
                              100% { transform: scale(1); filter: drop-shadow(0 0 4px var(--100)); } }

/* ── Edit / write ─────────────────────────────────────────────────── */
@keyframes edit-write       { 0%,100% { transform: rotate(-3deg) translate(0,0); } 50% { transform: rotate(3deg) translate(1px,-1px); } }
@keyframes edit-write-fast  { 0% { transform: rotate(-6deg) translate(-2px,2px); } 50% { transform: rotate(6deg) translate(2px,-2px); } 100% { transform: rotate(0) translate(0,0); } }

/* ── Check / done ─────────────────────────────────────────────────── */
@keyframes check-bob        { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-2px); } }
@keyframes check-strike     { 0% { transform: scale(0.6); } 60% { transform: scale(1.3); } 100% { transform: scale(1); } }

/* ── Dev terminal ─────────────────────────────────────────────────── */
@keyframes dev-blink        { 0%,100% { opacity: 1; } 50% { opacity: 0.45; } }
@keyframes dev-tap          { 0%,100% { transform: translateY(0); } 50% { transform: translateY(2px); filter: drop-shadow(0 0 4px #fff); } }

/* ── House / local ────────────────────────────────────────────────── */
@keyframes house-pulse      { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-1px); filter: drop-shadow(0 0 3px #fff); } }
@keyframes house-bounce     { 0% { transform: translateY(0); } 35% { transform: translateY(-3px) scale(1.06); } 100% { transform: translateY(0); } }

/* ── Info / warning / error ──────────────────────────────────────── */
@keyframes error-shake      { 0%,100% { transform: translateX(0); } 25% { transform: translateX(-1.2px); } 75% { transform: translateX(1.2px); } }
@keyframes error-strike     { 0%,100% { transform: scale(1) rotate(0); } 30% { transform: scale(1.2) rotate(-8deg); } 60% { transform: scale(1.15) rotate(8deg); } }

/* ── Voucher / ticket ─────────────────────────────────────────────── */
@keyframes voucher-tear     { 0%,100% { transform: translateY(0) rotate(0); } 50% { transform: translateY(-1px) rotate(-1.5deg); } }
@keyframes voucher-rip      { 0% { transform: translateY(0) rotate(0); } 40% { transform: translateY(-2px) rotate(-4deg); } 70% { transform: translateY(1px) rotate(2deg); } 100% { transform: translateY(0) rotate(0); } }

/* ── Vector / flowchart ───────────────────────────────────────────── */
@keyframes vector-pulse     { 0%,100% { transform: scale(0.9); opacity: 0.7; } 50% { transform: scale(1.15); opacity: 1; filter: drop-shadow(0 0 4px #fff); } }
@keyframes node-fire        { 0%,100% { transform: scale(0.8); opacity: 0.6; } 50% { transform: scale(1.2); opacity: 1; filter: drop-shadow(0 0 5px var(--80)); } }

/* ── Tree branches ────────────────────────────────────────────────── */
@keyframes branch-sway      { 0%,100% { transform: rotate(-2deg); } 50% { transform: rotate(2deg); } }

/* ── Numbers / double / quadruple ─────────────────────────────────── */
@keyframes count-rise       { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-2px); } }
@keyframes count-bounce     { 0% { transform: translateY(0) scale(1); } 50% { transform: translateY(-4px) scale(1.15); } 100% { transform: translateY(0) scale(1); } }

/* ── Bold / italic ────────────────────────────────────────────────── */
@keyframes bold-thicken     { 0%,100% { transform: scale(1); } 50% { transform: scale(1.12); filter: drop-shadow(0 0 3px #fff); } }
@keyframes italic-tilt      { 0%,100% { transform: skewX(0); } 50% { transform: skewX(-10deg); } }

/* ── Link / chain ─────────────────────────────────────────────────── */
@keyframes chain-rock       { 0%,100% { transform: rotate(-4deg); } 50% { transform: rotate(4deg); } }

/* ── Translate / language ─────────────────────────────────────────── */
@keyframes globe-spin       { from { transform: rotateY(0); } to { transform: rotateY(360deg); } }
@keyframes letter-swap      { 0% { transform: rotateY(0); } 50% { transform: rotateY(180deg); } 100% { transform: rotateY(360deg); } }

/* ── Sparkle / new ───────────────────────────────────────────────── */
@keyframes sparkle-twinkle  { 0%,100% { transform: scale(0.85) rotate(0); opacity: 0.6; filter: drop-shadow(0 0 0 #fff); }
                              50% { transform: scale(1.15) rotate(45deg); opacity: 1; filter: drop-shadow(0 0 4px #fff); } }
@keyframes sparkle-burst    { 0% { transform: scale(1) rotate(0); }
                              40% { transform: scale(1.4) rotate(180deg); filter: drop-shadow(0 0 10px #fff); }
                              100% { transform: scale(1) rotate(0); } }

/* ── Cube / 3d ────────────────────────────────────────────────────── */
@keyframes cube-tumble      { 0%,100% { transform: rotateY(0) rotateX(0); }
                              50% { transform: rotateY(20deg) rotateX(-12deg); } }

/* ── Flag flutter / bookmark ─────────────────────────────────────── */
@keyframes flag-flutter     { 0%,100% { transform: skewX(0) translateX(0); } 50% { transform: skewX(8deg) translateX(0.5px); } }
@keyframes flag-raise       { 0% { transform: translateY(2px) scale(0.96); } 50% { transform: translateY(-3px) scale(1.06); } 100% { transform: translateY(0) scale(1); } }
