/* Sentry Aegis mascot — animation + palette. Ported from sentry-core.jsx (state-driven off data-state). */
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-7px)}}
@keyframes floaty-sm{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes hover-bob{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-9px) rotate(-1.2deg)}}
@keyframes breathe{0%,100%{transform:scale(1)}50%{transform:scale(1.035)}}
@keyframes glowpulse{0%,100%{opacity:.55}50%{opacity:1}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes spin-rev{to{transform:rotate(-360deg)}}
@keyframes blink{0%,92%,100%{transform:scaleY(1)}96%{transform:scaleY(.08)}}
@keyframes scan{0%{transform:translateX(-42%)}100%{transform:translateX(42%)}}
@keyframes scan-x{0%{transform:translateX(-11px)}100%{transform:translateX(11px)}}
@keyframes shake{0%,100%{transform:translateX(0) rotate(0)}20%{transform:translateX(-3px) rotate(-2deg)}40%{transform:translateX(3px) rotate(2deg)}60%{transform:translateX(-2px) rotate(-1deg)}80%{transform:translateX(2px) rotate(1deg)}}
@keyframes zzz{0%{opacity:0;transform:translate(0,0) scale(.6)}30%{opacity:1}100%{opacity:0;transform:translate(14px,-26px) scale(1.1)}}
@keyframes wave{0%,100%{opacity:.25;transform:scaleY(.5)}50%{opacity:1;transform:scaleY(1)}}
@keyframes ping{0%{transform:scale(.5);opacity:.7}100%{transform:scale(1.9);opacity:0}}
@keyframes popcheck{0%{stroke-dashoffset:32;opacity:0}40%{opacity:1}100%{stroke-dashoffset:0;opacity:1}}

.mascot{--accent:oklch(0.66 0.18 274);--accent-bright:oklch(0.74 0.17 272);--danger:oklch(0.68 0.20 22);--faint:#8a8aa0;
  --eye:oklch(0.93 0.10 200);position:relative;line-height:0;display:grid;place-items:center;
  filter:drop-shadow(0 18px 26px rgba(0,0,0,.45))}
.mascot svg{display:block;overflow:visible}
.mascot[data-state=thinking]{--eye:oklch(0.84 0.14 272)}
.mascot[data-state=alert]{--eye:oklch(0.82 0.20 25)}
.mascot[data-state=success]{--eye:oklch(0.86 0.16 158)}
.mascot[data-state=sleeping]{--eye:oklch(0.62 0.03 264)}
.mascot[data-state=sleeping]{opacity:.82}

.m-shadow{position:absolute;bottom:-2px;left:50%;transform:translateX(-50%);width:60%;height:15px;border-radius:50%;
  background:radial-gradient(ellipse,color-mix(in oklch,var(--accent) 45%,transparent),transparent 70%);
  filter:blur(3px);opacity:.7;z-index:-1;transition:.3s}
.mascot[data-state=sleeping] .m-shadow{opacity:.3;width:50%}

.m-aegis .float{animation:breathe 4.4s ease-in-out infinite, floaty 5.6s ease-in-out infinite}
.m-scout .float{animation:hover-bob 3.6s ease-in-out infinite}
.mascot[data-state=alert] .float{animation:shake .55s ease-in-out infinite}
.mascot[data-state=sleeping] .float{animation-duration:11s}

.eye-open,.eye-happy,.eye-angry,.eye-closed{opacity:0;transition:opacity .2s}
.mascot[data-state=idle] .eye-open,.mascot[data-state=thinking] .eye-open,.mascot[data-state=speaking] .eye-open{opacity:1}
.mascot[data-state=success] .eye-happy{opacity:1}
.mascot[data-state=alert] .eye-angry{opacity:1}
.mascot[data-state=sleeping] .eye-closed{opacity:1}
.blink{transform-box:fill-box;transform-origin:center}
.mascot[data-state=idle] .blink,.mascot[data-state=speaking] .blink{animation:blink 4.6s infinite}

.fx{opacity:0;transition:opacity .25s}
.mascot[data-state=thinking] .fx-think{opacity:1}
.mascot[data-state=speaking] .fx-speak{opacity:1}
.mascot[data-state=alert] .fx-alert{opacity:1}
.mascot[data-state=success] .fx-ok{opacity:1}
.mascot[data-state=sleeping] .fx-sleep{opacity:1}

.tint{opacity:0;transition:opacity .3s}
.mascot[data-state=alert] .tint-danger{opacity:.92}
.mascot[data-state=success] .tint-ok{opacity:.9}

.glow{filter:drop-shadow(0 0 5px var(--eye))}
.softglow{filter:drop-shadow(0 0 8px color-mix(in oklch,var(--accent) 60%,transparent))}

.spin{transform-box:fill-box;transform-origin:center}
.mascot[data-state=thinking] .spin{animation:spin 2.4s linear infinite}
.wavebar{transform-box:fill-box;transform-origin:center bottom}
.mascot[data-state=speaking] .wavebar{animation:wave .9s ease-in-out infinite}
.mascot[data-state=speaking] .wavebar.b2{animation-delay:.15s}
.mascot[data-state=speaking] .wavebar.b3{animation-delay:.3s}
.mascot[data-state=speaking] .wavebar.b4{animation-delay:.45s}

.pingring{transform-box:fill-box;transform-origin:center}
.mascot[data-state=alert] .pingring{animation:ping 1.3s ease-out infinite}
.mascot[data-state=alert] .pingring.p2{animation-delay:.5s}

.checkdraw{stroke-dasharray:32;stroke-dashoffset:32}
.mascot[data-state=success] .checkdraw{animation:popcheck .7s ease forwards}

.zzz{transform-box:fill-box;transform-origin:center;opacity:0}
.mascot[data-state=sleeping] .zzz{animation:zzz 3.2s ease-in-out infinite}
.mascot[data-state=sleeping] .zzz.z2{animation-delay:1s}
.mascot[data-state=sleeping] .zzz.z3{animation-delay:2s}

.mascot[data-state=idle] .corepulse,.mascot[data-state=speaking] .corepulse{animation:glowpulse 3s ease-in-out infinite}
.mascot[data-state=thinking] .corepulse{animation:glowpulse 1.1s ease-in-out infinite}
.led{transition:fill .2s, filter .2s}
.mascot[data-state=idle] .led{animation:glowpulse 2.6s ease-in-out infinite}
.mascot[data-state=alert] .led{animation:glowpulse .5s steps(2,end) infinite}
.mascot[data-state=sleeping] .led{filter:none;opacity:.4}
.scout-tilt{transition:transform .3s ease}
.mascot[data-state=alert] .scout-tilt{transform:rotate(4deg) translateY(2px)}
.mascot[data-state=sleeping] .scout-tilt{transform:translateY(6px)}

/* GPS signal ping (borrowed from Vigil) — decorative, mascot stays visible without it */
.vigil-ring{transform-box:fill-box;transform-origin:center}
.mascot[data-state=idle] .vigil-ring,.mascot[data-state=speaking] .vigil-ring{animation:ping 2.6s ease-out infinite}
.mascot[data-state=thinking] .vigil-ring{animation:ping 1.4s ease-out infinite}
.mascot[data-state=success] .vigil-ring{animation:ping 2s ease-out infinite}
.mascot .vigil-ring.r2{animation-delay:1.3s}

/* Monitoring — Aegis stays awake and reads down its task list (never sleeps) */
.m-aegis[data-state=sleeping]{opacity:1;--eye:oklch(0.93 0.10 200)}
.m-aegis[data-state=sleeping] .eye-closed{opacity:0}
.m-aegis[data-state=sleeping] .eye-open{opacity:1;animation:read-scan 2.8s ease-in-out infinite}
.m-aegis[data-state=sleeping] .fx-sleep{opacity:0}
.m-aegis[data-state=sleeping] .float{animation:breathe 4.6s ease-in-out infinite, floaty 6s ease-in-out infinite}
.m-aegis[data-state=sleeping] .vigil-ring{animation:ping 2.6s ease-out infinite}
.m-aegis[data-state=sleeping] .m-shadow{opacity:.65;width:60%}
@keyframes read-scan{0%,100%{transform:translateX(-2.6px)}50%{transform:translateX(2.6px)}}

@media(prefers-reduced-motion:reduce){.mascot *{animation:none !important}}
