:root {
  --redy-agent-size: 138px;
  --redy-agent-right: 18px;
  --redy-agent-bottom: 10px;
  --redy-agent-z: 125;
  --redy-agent-red: 104, 23, 43;
  --redy-agent-bright: 182, 82, 112;
  --redy-agent-burgundy: 104, 23, 43;
  --redy-agent-teal: 18, 58, 56;
  --redy-agent-copy-bg: rgba(248, 246, 242, .98);
  --redy-agent-copy-border: rgba(18, 58, 56, .18);
  --redy-facing-scale: 1;
  --redy-crown-x: 34%;
}

.redy-agent,
.redy-agent * {
  box-sizing: border-box;
}

.redy-agent {
  position: fixed;
  right: max(var(--redy-agent-right), env(safe-area-inset-right));
  bottom: max(var(--redy-agent-bottom), env(safe-area-inset-bottom));
  z-index: var(--redy-agent-z);
  width: var(--redy-agent-size);
  height: var(--redy-agent-size);
  pointer-events: none;
  isolation: isolate;
  contain: layout style;
  font-family: "Schibsted Grotesk", Inter, ui-sans-serif, system-ui, sans-serif;
  --redy-rx: 0deg;
  --redy-ry: 0deg;
  --redy-lift: 0px;
  --redy-scale: 1;
  --redy-glint-x: 32%;
  --redy-glint-y: 22%;
  opacity: 0;
  transition: opacity 180ms ease;
}

.redy-agent[data-facing="right"] {
  --redy-facing-scale: -1;
  --redy-crown-x: 66%;
}

.redy-agent.is-ready {
  opacity: 1;
}

.redy-agent.is-section-fading {
  opacity: 0 !important;
}

.redy-agent.is-section-docked {
  position: absolute;
  inset: 0;
  right: auto;
  bottom: auto;
  z-index: 3;
  width: 100%;
  height: 100%;
}

.redy-agent.is-section-docked .redy-agent__bubble {
  display: none;
}

.redy-agent.is-section-transitioning .redy-agent__stage {
  pointer-events: none;
}

.redy-agent:not(.is-ready) .redy-agent__stage {
  pointer-events: none;
}

.redy-agent__stage {
  appearance: none;
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  outline: 0;
  background: transparent;
  cursor: pointer;
  pointer-events: auto;
  touch-action: none;
  -webkit-tap-highlight-color: transparent;
  overflow: visible;
}

.redy-agent__stage:focus-visible::after {
  content: "";
  position: absolute;
  inset: 4%;
  border: 2px solid rgba(var(--redy-agent-bright), .96);
  border-radius: 42% 42% 32% 32%;
  box-shadow: 0 0 0 5px rgba(var(--redy-agent-red), .18);
}

.redy-agent__world,
.redy-agent__rig,
.redy-agent__facing,
.redy-agent__puppet,
.redy-agent__frame,
.redy-agent__body,
.redy-agent__head {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  transform-origin: 50% 88%;
  backface-visibility: hidden;
  -webkit-backface-visibility: hidden;
}

.redy-agent__world {
  transform: translate3d(0, 0, 0);
}

.redy-agent__rig {
  transform-style: preserve-3d;
  transform: translate3d(0, var(--redy-lift), 0)
    rotateX(var(--redy-rx))
    rotateY(var(--redy-ry))
    scale(var(--redy-scale));
}

.redy-agent__facing {
  overflow: visible;
  transform-origin: 50% 50%;
  transform: scaleX(var(--redy-facing-scale));
  transform-style: preserve-3d;
  will-change: transform;
  transition: transform 300ms cubic-bezier(.22, .82, .24, 1);
}

.redy-agent__puppet {
  transform-style: preserve-3d;
  will-change: transform;
}

.redy-agent__frame {
  z-index: 7;
  display: block;
  opacity: 0;
  pointer-events: none;
  object-fit: contain;
  image-rendering: auto;
  transform: translateZ(8px);
  transition: opacity 120ms ease;
}

.redy-agent__crown-glow {
  position: absolute;
  z-index: 12;
  left: var(--redy-crown-x);
  top: 16.5%;
  width: 28%;
  aspect-ratio: 1;
  border-radius: 50%;
  pointer-events: none;
  opacity: 0;
  transform: translate3d(-50%, -50%, 0) scale(.74);
  background:
    radial-gradient(circle, rgba(255, 244, 238, .9) 0 8%, rgba(var(--redy-agent-bright), .58) 18%, rgba(var(--redy-agent-red), .24) 42%, rgba(var(--redy-agent-teal), .1) 58%, transparent 74%);
  mix-blend-mode: screen;
  will-change: transform, opacity;
  transition:
    left 300ms cubic-bezier(.22, .82, .24, 1),
    opacity 240ms ease,
    transform 300ms cubic-bezier(.22, .82, .24, 1);
}

.redy-agent.has-frame-player .redy-agent__frame {
  opacity: 1;
}

.redy-agent.has-frame-player .redy-agent__puppet,
.redy-agent.has-frame-player .redy-agent__shadow,
.redy-agent.has-frame-player .redy-agent__aura,
.redy-agent.has-frame-player .redy-agent__orbit,
.redy-agent.has-frame-player .redy-agent__waves,
.redy-agent.has-frame-player .redy-agent__particles,
.redy-agent.has-frame-player .redy-agent__status {
  opacity: 0 !important;
  visibility: hidden;
  animation: none !important;
}

.redy-agent.has-frame-player .redy-agent__world {
  animation: none !important;
}

.redy-agent.has-frame-player.is-hovered {
  --redy-lift: 0px;
  --redy-scale: 1;
}

.redy-agent.is-dragging .redy-agent__stage {
  cursor: grabbing;
}

.redy-agent.is-dragging .redy-agent__bubble {
  opacity: 0;
}

.redy-agent__body,
.redy-agent__head {
  display: block;
  object-fit: contain;
  user-select: none;
  -webkit-user-drag: none;
  pointer-events: none;
}

.redy-agent__body {
  z-index: 4;
  transform: translateZ(0);
  filter: drop-shadow(0 12px 13px rgba(31, 8, 12, .24));
}

.redy-agent__head {
  z-index: 6;
  transform: translateZ(8px);
  transform-origin: 50% 51%;
  filter: drop-shadow(0 7px 8px rgba(31, 8, 12, .12));
}

.redy-agent__shadow {
  position: absolute;
  z-index: 0;
  left: 19%;
  right: 13%;
  bottom: 1.5%;
  height: 12%;
  border-radius: 50%;
  background: radial-gradient(ellipse, rgba(61, 8, 16, .31), rgba(61, 8, 16, 0) 72%);
  filter: blur(7px);
  opacity: .74;
  transform: translateZ(-40px) scaleX(.88);
  transition: opacity 240ms ease, transform 360ms cubic-bezier(.2, .82, .2, 1);
}

.redy-agent__aura {
  position: absolute;
  z-index: 1;
  inset: 9% 8% 7%;
  border-radius: 48%;
  background: radial-gradient(circle at 50% 45%, rgba(var(--redy-agent-bright), .2), rgba(var(--redy-agent-teal), .11) 46%, rgba(var(--redy-agent-teal), 0) 72%);
  opacity: .36;
  transform: scale(.94);
  transition: opacity 300ms ease, transform 420ms cubic-bezier(.2, .82, .2, 1);
}

.redy-agent__orbit {
  position: absolute;
  z-index: 2;
  left: 14%;
  top: 4%;
  width: 72%;
  aspect-ratio: 1;
  border: 1px solid rgba(var(--redy-agent-bright), .38);
  border-radius: 50%;
  opacity: 0;
  transform: rotate(0deg) scale(.82);
  transition: opacity 220ms ease;
  pointer-events: none;
}

.redy-agent__orbit::before,
.redy-agent__orbit::after {
  content: "";
  position: absolute;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: rgb(var(--redy-agent-bright));
  box-shadow: 0 0 0 4px rgba(var(--redy-agent-red), .12), 0 0 16px rgba(var(--redy-agent-bright), .82);
}

.redy-agent__orbit::before {
  left: 11%;
  top: 17%;
}

.redy-agent__orbit::after {
  right: 4%;
  bottom: 28%;
}

.redy-agent__orbit--inner {
  left: 22%;
  top: 12%;
  width: 56%;
  border-color: rgba(var(--redy-agent-teal), .42);
  transform: rotate(30deg) scale(.9);
}

.redy-agent__orbit--inner::before,
.redy-agent__orbit--inner::after {
  background: rgb(var(--redy-agent-teal));
  box-shadow: 0 0 0 4px rgba(var(--redy-agent-teal), .12), 0 0 16px rgba(var(--redy-agent-teal), .72);
}

.redy-agent__visor-sweep {
  position: absolute;
  z-index: 8;
  left: 27.5%;
  top: 28.3%;
  width: 45%;
  height: 12.5%;
  border-radius: 42% 42% 52% 52%;
  overflow: hidden;
  opacity: 0;
  pointer-events: none;
  transition: opacity 180ms ease;
  transform: translateZ(18px);
}

.redy-agent__visor-sweep::after {
  content: "";
  position: absolute;
  inset: -20% auto -20% -42%;
  width: 28%;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .88), rgba(255, 123, 136, .58), transparent);
  transform: skewX(-14deg) translateX(0);
}

.redy-agent__core {
  position: absolute;
  z-index: 9;
  left: 55.7%;
  top: 77.4%;
  width: 9.6%;
  aspect-ratio: 1;
  border-radius: 28%;
  border: 1px solid rgba(255, 222, 225, .58);
  background: rgba(var(--redy-agent-bright), .16);
  opacity: 0;
  transform: translateZ(20px) scale(.72);
  transition: opacity 220ms ease, transform 300ms cubic-bezier(.2, .82, .2, 1.08);
}

.redy-agent__status {
  position: absolute;
  z-index: 11;
  left: 50%;
  bottom: -1%;
  display: flex;
  align-items: center;
  gap: 4px;
  opacity: 0;
  transform: translate3d(-50%, 6px, 0);
  transition: opacity 180ms ease, transform 260ms cubic-bezier(.2, .82, .2, 1);
  pointer-events: none;
}

.redy-agent__status span {
  width: 5px;
  height: 5px;
  border-radius: 50%;
  background: rgb(var(--redy-agent-bright));
  box-shadow: 0 0 8px rgba(var(--redy-agent-bright), .72);
}

.redy-agent__waves,
.redy-agent__particles {
  position: absolute;
  z-index: 3;
  inset: 0;
  pointer-events: none;
}

.redy-agent__waves span {
  position: absolute;
  left: 23%;
  top: 12%;
  width: 54%;
  aspect-ratio: 1;
  border: 1px solid rgba(var(--redy-agent-bright), .58);
  border-radius: 50%;
  opacity: 0;
  transform: scale(.66);
}

.redy-agent__particles span {
  position: absolute;
  left: 50%;
  top: 46%;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: rgb(var(--redy-agent-bright));
  opacity: 0;
  transform: translate3d(0, 0, 0) scale(.4);
}

.redy-agent__bubble {
  position: absolute;
  z-index: 20;
  right: 72%;
  bottom: 76%;
  width: max-content;
  min-width: 116px;
  max-width: min(248px, calc(100vw - 34px));
  padding: 11px 14px 12px;
  border: 1px solid rgba(255, 255, 255, .34);
  border-radius: 16px 16px 5px 16px;
  color: rgb(7, 28, 27);
  /* translucent: the page shows through, glass rather than a solid card */
  background: rgba(255, 255, 255, .42);
  -webkit-backdrop-filter: blur(9px) saturate(1.25);
  backdrop-filter: blur(9px) saturate(1.25);
  box-shadow: 0 14px 34px rgba(31, 8, 12, .12), inset 0 1px 0 rgba(255, 255, 255, .5);
  font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11.5px;
  font-weight: 600;
  line-height: 1.42;
  letter-spacing: .005em;
  text-wrap: balance;
  opacity: 0;
  transform: translate3d(9px, 9px, 0) scale(.92) rotate(1deg);
  transform-origin: 100% 100%;
  transition: opacity 170ms ease, transform 320ms cubic-bezier(.2, .88, .2, 1.12);
  pointer-events: none;
}

.redy-agent__bubble::after {
  content: "";
  position: absolute;
  right: -1px;
  bottom: -8px;
  width: 16px;
  height: 16px;
  background: rgba(255, 255, 255, .42);
  -webkit-backdrop-filter: blur(9px) saturate(1.25);
  backdrop-filter: blur(9px) saturate(1.25);
  border-right: 1px solid rgba(255, 255, 255, .34);
  border-bottom: 1px solid rgba(255, 255, 255, .34);
  clip-path: polygon(20% 0, 100% 100%, 100% 0);
}

.redy-agent[data-facing="right"] .redy-agent__bubble {
  right: auto;
  left: 72%;
  border-radius: 16px 16px 16px 5px;
  transform: translate3d(-9px, 9px, 0) scale(.92) rotate(-1deg);
  transform-origin: 0 100%;
}

.redy-agent[data-facing="right"] .redy-agent__bubble::after {
  right: auto;
  left: -1px;
  border-right: 0;
  border-left: 1px solid var(--redy-agent-copy-border);
  clip-path: polygon(80% 0, 0 100%, 0 0);
}

.redy-agent__bubble-kicker {
  display: block;
  margin-bottom: 3px;
  color: rgb(var(--redy-agent-burgundy));
  font-size: 10px;
  font-weight: 780;
  letter-spacing: .11em;
  text-transform: uppercase;
}


.redy-agent__think {
  display: none;
  gap: 4px;
  align-items: center;
  height: 14px;
}

.redy-agent.is-thinking-bubble .redy-agent__think { display: inline-flex; }
.redy-agent.is-thinking-bubble [data-redy-message] { display: none; }

.redy-agent__think i {
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: currentColor;
  animation: redyThink 1.05s ease-in-out infinite;
}

.redy-agent__think i:nth-child(2) { animation-delay: .14s; }
.redy-agent__think i:nth-child(3) { animation-delay: .28s; }

@keyframes redyThink {
  0%, 100% { transform: translateY(1.5px); opacity: .35; }
  50% { transform: translateY(-3.5px); opacity: 1; }
}

.redy-agent.is-typing [data-redy-message]::after {
  content: "\2588";
  margin-left: 1px;
  opacity: .7;
  animation: redyCaret .7s steps(1) infinite;
}

@keyframes redyCaret { 0%, 49% { opacity: .7; } 50%, 100% { opacity: 0; } }

@media (prefers-reduced-motion: reduce) {
  .redy-agent__think i, .redy-agent.is-typing [data-redy-message]::after { animation: none; }
}

.redy-agent.is-speaking .redy-agent__bubble {
  opacity: 1;
  transform: translate3d(0, 0, 0) scale(1) rotate(0deg);
}

.redy-agent.is-hovered {
  --redy-lift: -5px;
  --redy-scale: 1.035;
}

.redy-agent.is-hovered .redy-agent__aura,
.redy-agent[data-state="listening"] .redy-agent__aura {
  opacity: .76;
  transform: scale(1.03);
}

.redy-agent.is-hovered .redy-agent__shadow {
  opacity: .5;
  transform: translateZ(-40px) scaleX(.79);
}

.redy-agent.is-crown-glowing .redy-agent__crown-glow {
  opacity: .72;
  transform: translate3d(-50%, -50%, 0) scale(1);
  animation: redy-agent-crown-breathe 3.6s cubic-bezier(.4, 0, .2, 1) infinite;
}

.redy-agent.is-entering .redy-agent__world {
  animation: redy-agent-enter 820ms cubic-bezier(.2, .82, .2, 1.08) both;
}

.redy-agent.is-pressed .redy-agent__crown-glow {
  opacity: .62;
  transform: translate3d(-50%, -50%, 0) scale(.9);
  transition: opacity 90ms ease, transform 120ms ease;
}

.redy-agent.is-summoning .redy-agent__bubble,
.redy-agent.is-chat-opening .redy-agent__bubble,
.redy-agent.is-chat-open .redy-agent__bubble {
  opacity: 0 !important;
}

.redy-agent.is-summoning .redy-agent__shadow,
.redy-agent.is-chat-opening .redy-agent__shadow,
.redy-agent.is-chat-open .redy-agent__shadow {
  opacity: 0;
  transform: translateZ(-40px) scaleX(.2);
}

.redy-agent.is-summoning .redy-agent__crown-glow {
  transition: none;
  animation: redy-agent-crown-portal 1000ms cubic-bezier(.16, 1, .3, 1) both;
}

.redy-agent.is-summoning .redy-agent__facing,
.redy-agent.is-chat-opening .redy-agent__facing,
.redy-agent.is-chat-open .redy-agent__facing,
.redy-agent.is-returning .redy-agent__facing {
  transition: none;
}

.redy-agent.is-summoning:not(.uses-frame-summon) .redy-agent__world,
.redy-agent.has-frame-player.is-summoning:not(.uses-frame-summon) .redy-agent__world {
  transform-origin: var(--redy-crown-x) 16.5%;
  animation: redy-agent-collapse-to-crown 1000ms cubic-bezier(.62, 0, .2, 1) both !important;
  will-change: transform, opacity;
}

.redy-agent.has-frame-player.is-summoning.uses-frame-summon .redy-agent__world {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  animation: none !important;
}

.redy-agent.is-chat-open .redy-agent__world,
.redy-agent.has-frame-player.is-chat-open .redy-agent__world {
  opacity: 0;
  transform: scale(.025);
  transform-origin: var(--redy-crown-x) 16.5%;
  animation: none !important;
}

.redy-agent.is-chat-open .redy-agent__stage {
  pointer-events: none;
}

.redy-agent.is-returning:not(.uses-frame-return) .redy-agent__world,
.redy-agent.has-frame-player.is-returning:not(.uses-frame-return) .redy-agent__world {
  transform-origin: var(--redy-crown-x) 16.5%;
  animation: redy-agent-return-from-crown 1000ms cubic-bezier(.16, 1, .3, 1) both !important;
  will-change: transform, opacity;
}

.redy-agent.has-frame-player.is-returning.uses-frame-return .redy-agent__world {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  animation: none !important;
}

.redy-agent[data-state="idle"] .redy-agent__puppet {
  animation: redy-agent-idle 4.8s ease-in-out infinite;
}

.redy-agent[data-state="idle"] .redy-agent__body {
  animation: redy-agent-breathe 4.8s ease-in-out infinite;
}

.redy-agent[data-state="idle"] .redy-agent__head {
  animation: redy-agent-head-idle 6.2s ease-in-out infinite;
}

.redy-agent[data-state="listening"] .redy-agent__puppet {
  animation: redy-agent-listen 2.9s ease-in-out infinite;
}

.redy-agent[data-state="listening"] .redy-agent__head {
  animation: redy-agent-head-listen 3.1s ease-in-out infinite;
}

.redy-agent[data-state="listening"] .redy-agent__core,
.redy-agent[data-state="thinking"] .redy-agent__core,
.redy-agent[data-state="responding"] .redy-agent__core {
  opacity: .88;
  transform: translateZ(20px) scale(1);
}

.redy-agent[data-state="thinking"] .redy-agent__puppet {
  animation: redy-agent-think 1.45s ease-in-out infinite;
}

.redy-agent[data-state="thinking"] .redy-agent__body {
  animation: redy-agent-think-body 1.45s ease-in-out infinite;
}

.redy-agent[data-state="thinking"] .redy-agent__head {
  animation: redy-agent-think-head 1.6s cubic-bezier(.45, .05, .55, .95) infinite;
}

.redy-agent[data-state="thinking"] .redy-agent__aura {
  opacity: .94;
  transform: scale(1.07);
  animation: redy-agent-aura 1.2s ease-in-out infinite;
}

.redy-agent[data-state="thinking"] .redy-agent__orbit {
  opacity: .82;
  animation: redy-agent-orbit 2.35s linear infinite;
}

.redy-agent[data-state="thinking"] .redy-agent__orbit--inner {
  opacity: .52;
  animation-direction: reverse;
  animation-duration: 1.8s;
}

.redy-agent[data-state="thinking"] .redy-agent__visor-sweep {
  opacity: .82;
}

.redy-agent[data-state="thinking"] .redy-agent__visor-sweep::after {
  animation: redy-agent-scan 1.1s cubic-bezier(.4, 0, .2, 1) infinite;
}

.redy-agent[data-state="thinking"] .redy-agent__status {
  opacity: 1;
  transform: translate3d(-50%, 0, 0);
}

.redy-agent[data-state="thinking"] .redy-agent__status span {
  animation: redy-agent-dot 900ms ease-in-out infinite;
}

.redy-agent[data-state="thinking"] .redy-agent__status span:nth-child(2) {
  animation-delay: 150ms;
}

.redy-agent[data-state="thinking"] .redy-agent__status span:nth-child(3) {
  animation-delay: 300ms;
}

.redy-agent[data-state="responding"] .redy-agent__puppet {
  animation: redy-agent-respond 860ms cubic-bezier(.2, .82, .2, 1.08) both;
}

.redy-agent[data-state="responding"] .redy-agent__head {
  animation: redy-agent-respond-head 860ms cubic-bezier(.2, .82, .2, 1.08) both;
}

.redy-agent[data-state="responding"] .redy-agent__waves span,
.redy-agent[data-pulse="success"] .redy-agent__waves span {
  animation: redy-agent-wave 980ms ease-out both;
}

.redy-agent[data-state="responding"] .redy-agent__waves span:nth-child(2),
.redy-agent[data-pulse="success"] .redy-agent__waves span:nth-child(2) {
  animation-delay: 120ms;
}

.redy-agent[data-state="responding"] .redy-agent__waves span:nth-child(3),
.redy-agent[data-pulse="success"] .redy-agent__waves span:nth-child(3) {
  animation-delay: 240ms;
}

.redy-agent[data-state="error"] .redy-agent__puppet {
  animation: redy-agent-error 560ms cubic-bezier(.36, .07, .19, .97) both;
}

.redy-agent[data-state="error"] .redy-agent__aura {
  opacity: .72;
  background: radial-gradient(circle at 50% 45%, rgba(255, 137, 105, .28), rgba(135, 30, 17, .08) 48%, rgba(135, 30, 17, 0) 72%);
}

.redy-agent[data-state="error"] .redy-agent__status {
  opacity: 1;
  transform: translate3d(-50%, 0, 0);
}

.redy-agent[data-state="error"] .redy-agent__status span {
  background: #ff8969;
  box-shadow: 0 0 8px rgba(255, 137, 105, .7);
}

.redy-agent[data-state="limited"] .redy-agent__puppet {
  opacity: .72;
  transform: translate3d(0, 4px, 0) scale(.985);
}

.redy-agent[data-state="limited"] .redy-agent__aura,
.redy-agent[data-state="limited"] .redy-agent__orbit,
.redy-agent[data-state="limited"] .redy-agent__core {
  opacity: 0;
}

.redy-agent[data-state="sleeping"] .redy-agent__puppet {
  opacity: .86;
  animation: redy-agent-sleep 7.6s ease-in-out infinite;
}

.redy-agent[data-state="sleeping"] .redy-agent__head {
  animation: redy-agent-sleep-head 7.6s ease-in-out infinite;
}

.redy-agent[data-pulse="success"] .redy-agent__world {
  animation: redy-agent-success 900ms cubic-bezier(.2, .82, .2, 1.08) both;
}

.redy-agent[data-pulse="success"] .redy-agent__particles span {
  animation: redy-agent-particle 760ms ease-out both;
}

.redy-agent[data-pulse="success"] .redy-agent__particles span:nth-child(1) { --redy-px: -62px; --redy-py: -48px; animation-delay: 20ms; }
.redy-agent[data-pulse="success"] .redy-agent__particles span:nth-child(2) { --redy-px: -34px; --redy-py: -70px; animation-delay: 80ms; }
.redy-agent[data-pulse="success"] .redy-agent__particles span:nth-child(3) { --redy-px: 3px; --redy-py: -76px; animation-delay: 0ms; }
.redy-agent[data-pulse="success"] .redy-agent__particles span:nth-child(4) { --redy-px: 42px; --redy-py: -66px; animation-delay: 60ms; }
.redy-agent[data-pulse="success"] .redy-agent__particles span:nth-child(5) { --redy-px: 64px; --redy-py: -38px; animation-delay: 110ms; }
.redy-agent[data-pulse="success"] .redy-agent__particles span:nth-child(6) { --redy-px: 72px; --redy-py: 4px; animation-delay: 40ms; }

.redy-agent.is-paused *,
.redy-agent.is-paused *::before,
.redy-agent.is-paused *::after {
  animation-play-state: paused !important;
}

@keyframes redy-agent-enter {
  0% { opacity: 0; transform: translate3d(0, 32px, 0) scale(.72) rotate(5deg); }
  56% { opacity: 1; transform: translate3d(0, -8px, 0) scale(1.055) rotate(-1.5deg); }
  78% { transform: translate3d(0, 2px, 0) scale(.985) rotate(.5deg); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1) rotate(0); }
}

@keyframes redy-agent-crown-breathe {
  0%, 100% { opacity: .3; transform: translate3d(-50%, -50%, 0) scale(.84); }
  50% { opacity: .82; transform: translate3d(-50%, -50%, 0) scale(1.18); }
}

@keyframes redy-agent-crown-portal {
  0% { opacity: .34; transform: translate3d(-50%, -50%, 0) scale(.84); }
  28% { opacity: .98; transform: translate3d(-50%, -50%, 0) scale(1.34); }
  68% { opacity: .88; transform: translate3d(-50%, -50%, 0) scale(.72); }
  100% { opacity: 0; transform: translate3d(-50%, -50%, 0) scale(.18); }
}

@keyframes redy-agent-collapse-to-crown {
  0% { opacity: 1; transform: translate3d(0, 0, 0) scale(1) rotate(0deg); }
  20% { opacity: 1; transform: translate3d(0, 0, 0) scale(1.035) rotate(-7deg); }
  52% { opacity: .98; transform: translate3d(0, 0, 0) scale(.56) rotate(182deg); }
  78% { opacity: .54; transform: translate3d(0, 0, 0) scale(.15) rotate(470deg); }
  100% { opacity: 0; transform: translate3d(0, 0, 0) scale(.025) rotate(680deg); }
}

@keyframes redy-agent-return-from-crown {
  0% { opacity: 0; transform: translate3d(0, 0, 0) scale(.025) rotate(-360deg); }
  48% { opacity: .92; transform: translate3d(0, 0, 0) scale(.68) rotate(-42deg); }
  78% { opacity: 1; transform: translate3d(0, -3px, 0) scale(1.035) rotate(3deg); }
  100% { opacity: 1; transform: translate3d(0, 0, 0) scale(1) rotate(0deg); }
}

@keyframes redy-agent-press {
  0% { transform: translate3d(0, 0, 0) scale(1); }
  22% { transform: translate3d(0, 8px, 0) scale(.9, .86); }
  58% { transform: translate3d(0, -4px, 0) scale(1.04, 1.06); }
  100% { transform: translate3d(0, 0, 0) scale(1); }
}

@keyframes redy-agent-idle {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(.2deg); }
  50% { transform: translate3d(0, -3px, 0) rotate(-.45deg); }
}

@keyframes redy-agent-breathe {
  0%, 100% { transform: translateZ(0) scale(1); }
  50% { transform: translateZ(0) scale(1.008, 1.012); }
}

@keyframes redy-agent-head-idle {
  0%, 100% { transform: translate3d(0, 0, 8px) rotate(-.6deg); }
  36% { transform: translate3d(1px, -1px, 8px) rotate(.8deg); }
  68% { transform: translate3d(-1px, 0, 8px) rotate(.15deg); }
}

@keyframes redy-agent-listen {
  0%, 100% { transform: translate3d(0, -2px, 0) scale(1.01); }
  50% { transform: translate3d(0, -4px, 0) scale(1.018); }
}

@keyframes redy-agent-head-listen {
  0%, 100% { transform: translate3d(0, -1px, 10px) rotate(-1deg); }
  50% { transform: translate3d(1px, -3px, 10px) rotate(1.1deg); }
}

@keyframes redy-agent-think {
  0%, 100% { transform: translate3d(0, -2px, 0) rotate(-.6deg); }
  50% { transform: translate3d(0, -6px, 0) rotate(.6deg); }
}

@keyframes redy-agent-think-body {
  0%, 100% { transform: translateZ(0) scale(1, 1.006); }
  50% { transform: translateZ(0) scale(1.012, 1); }
}

@keyframes redy-agent-think-head {
  0%, 100% { transform: translate3d(-2px, -2px, 12px) rotate(-2deg); }
  50% { transform: translate3d(2px, -4px, 12px) rotate(2deg); }
}

@keyframes redy-agent-aura {
  0%, 100% { transform: scale(1.01); opacity: .76; }
  50% { transform: scale(1.09); opacity: .98; }
}

@keyframes redy-agent-orbit {
  from { transform: rotate(0deg) scale(.9); }
  to { transform: rotate(360deg) scale(.9); }
}

@keyframes redy-agent-scan {
  0% { transform: skewX(-14deg) translateX(0); opacity: 0; }
  18% { opacity: 1; }
  82% { opacity: 1; }
  100% { transform: skewX(-14deg) translateX(520%); opacity: 0; }
}

@keyframes redy-agent-dot {
  0%, 100% { opacity: .35; transform: translateY(0) scale(.78); }
  50% { opacity: 1; transform: translateY(-4px) scale(1); }
}

@keyframes redy-agent-respond {
  0% { transform: translate3d(0, -2px, 0) scale(1); }
  32% { transform: translate3d(0, -9px, 0) scale(1.04); }
  64% { transform: translate3d(0, 1px, 0) scale(.99); }
  100% { transform: translate3d(0, -2px, 0) scale(1); }
}

@keyframes redy-agent-respond-head {
  0% { transform: translate3d(0, -1px, 10px) rotate(0); }
  34% { transform: translate3d(-2px, -5px, 12px) rotate(-3deg); }
  66% { transform: translate3d(2px, -2px, 10px) rotate(2deg); }
  100% { transform: translate3d(0, -1px, 10px) rotate(0); }
}

@keyframes redy-agent-wave {
  0% { opacity: .72; transform: scale(.58); }
  100% { opacity: 0; transform: scale(1.32); }
}

@keyframes redy-agent-error {
  0%, 100% { transform: translate3d(0, 0, 0) rotate(0); }
  18% { transform: translate3d(-5px, 0, 0) rotate(-1.5deg); }
  36% { transform: translate3d(4px, 0, 0) rotate(1.3deg); }
  54% { transform: translate3d(-3px, 0, 0) rotate(-.9deg); }
  72% { transform: translate3d(2px, 0, 0) rotate(.6deg); }
}

@keyframes redy-agent-sleep {
  0%, 100% { transform: translate3d(0, 3px, 0) scale(.99); }
  50% { transform: translate3d(0, 1px, 0) scale(1); }
}

@keyframes redy-agent-sleep-head {
  0%, 100% { transform: translate3d(0, 3px, 7px) rotate(1.7deg); }
  50% { transform: translate3d(0, 2px, 7px) rotate(1deg); }
}

@keyframes redy-agent-success {
  0% { transform: translate3d(0, 0, 0) scale(1); }
  32% { transform: translate3d(0, -12px, 0) scale(1.045) rotate(-2deg); }
  62% { transform: translate3d(0, 2px, 0) scale(.985) rotate(1deg); }
  100% { transform: translate3d(0, 0, 0) scale(1) rotate(0); }
}

@keyframes redy-agent-particle {
  0% { opacity: 0; transform: translate3d(0, 0, 0) scale(.4); }
  22% { opacity: .92; }
  100% { opacity: 0; transform: translate3d(var(--redy-px), var(--redy-py), 0) scale(1); }
}

@media (max-width: 680px) {
  :root {
    --redy-agent-right: 8px;
    --redy-agent-bottom: 8px;
  }

  .redy-agent {
    width: min(calc(var(--redy-agent-size) * .9), 154px);
    height: min(calc(var(--redy-agent-size) * .9), 154px);
  }

  /* Anchor to the head as on desktop (percentages of the sprite), not to the
     agent's right edge, so the tail points at Redy's mouth. On a narrow screen
     the agent hugs the right edge, so the bubble always opens leftward. */
  .redy-agent__bubble,
  .redy-agent[data-facing="right"] .redy-agent__bubble {
    right: 62%;
    left: auto;
    bottom: 80%;
    max-width: min(202px, calc(100vw - 96px));
    border-radius: 15px 15px 5px 15px;
    transform-origin: 100% 100%;
  }

  .redy-agent__bubble::after,
  .redy-agent[data-facing="right"] .redy-agent__bubble::after {
    right: -1px;
    left: auto;
    clip-path: polygon(20% 0, 100% 100%, 100% 0);
    border-right: 1px solid rgba(255, 255, 255, .34);
    border-bottom: 1px solid rgba(255, 255, 255, .34);
    border-left: 0;
  }
}

@media (hover: none), (pointer: coarse) {
  .redy-agent.is-hovered {
    --redy-lift: -2px;
    --redy-scale: 1.015;
  }
}

.redy-agent[data-motion="reduced"] *,
.redy-agent[data-motion="reduced"] *::before,
.redy-agent[data-motion="reduced"] *::after {
  animation: none !important;
  transition-duration: 1ms !important;
  scroll-behavior: auto !important;
}

.redy-agent[data-motion="reduced"],
.redy-agent[data-motion="reduced"].is-hovered {
  --redy-rx: 0deg;
  --redy-ry: 0deg;
  --redy-lift: 0px;
  --redy-scale: 1;
}

.redy-agent[data-motion="reduced"] .redy-agent__world,
.redy-agent[data-motion="reduced"] .redy-agent__puppet,
.redy-agent[data-motion="reduced"] .redy-agent__body,
.redy-agent[data-motion="reduced"] .redy-agent__head {
  transform: none !important;
}

.redy-agent[data-motion="reduced"] .redy-agent__facing {
  transform: scaleX(var(--redy-facing-scale)) !important;
  transition: none !important;
}

.redy-agent[data-motion="reduced"].is-crown-glowing .redy-agent__crown-glow,
.redy-agent[data-motion="reduced"].is-pressed .redy-agent__crown-glow {
  opacity: .52;
  transform: translate3d(-50%, -50%, 0) scale(1);
}

.redy-agent[data-motion="reduced"].is-chat-open .redy-agent__world {
  opacity: 0 !important;
  transform: scale(.025) !important;
}

.redy-agent[data-motion="reduced"][data-state="thinking"] .redy-agent__orbit,
.redy-agent[data-motion="reduced"][data-state="thinking"] .redy-agent__status,
.redy-agent[data-motion="reduced"][data-state="error"] .redy-agent__status {
  opacity: .82;
}

.redy-agent[data-motion="reduced"] .redy-agent__bubble {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  .redy-agent *,
  .redy-agent *::before,
  .redy-agent *::after {
    animation: none !important;
    transition-duration: 1ms !important;
    scroll-behavior: auto !important;
  }

  .redy-agent,
  .redy-agent.is-hovered {
    --redy-rx: 0deg;
    --redy-ry: 0deg;
    --redy-lift: 0px;
    --redy-scale: 1;
  }

  .redy-agent__world,
  .redy-agent__puppet,
  .redy-agent__body,
  .redy-agent__head {
    transform: none !important;
  }

  .redy-agent__facing {
    transform: scaleX(var(--redy-facing-scale)) !important;
    transition: none !important;
  }

  .redy-agent.is-crown-glowing .redy-agent__crown-glow,
  .redy-agent.is-pressed .redy-agent__crown-glow {
    opacity: .52;
    transform: translate3d(-50%, -50%, 0) scale(1);
  }

  .redy-agent.is-chat-open .redy-agent__world {
    opacity: 0 !important;
    transform: scale(.025) !important;
  }

  .redy-agent[data-state="thinking"] .redy-agent__orbit,
  .redy-agent[data-state="thinking"] .redy-agent__status,
  .redy-agent[data-state="error"] .redy-agent__status {
    opacity: .82;
  }

  .redy-agent__bubble {
    display: none;
  }
}


/* Signal glitch: Redy tears into RGB channels, drops scanline slices, and the
   figure itself phases through the spectrum (rainbow hue sweep + ghost dips). */
.redy-agent.is-supercharged .redy-agent__facing{animation:redyGlitchShift 3600ms steps(1,end) both}
.redy-agent.is-supercharged .redy-agent__frame,
.redy-agent.is-supercharged .redy-agent__puppet{animation:redyRainbow 900ms linear 4 both}
@keyframes redyRainbow{
  0%{filter:hue-rotate(0deg) saturate(1);opacity:1}
  12%{filter:hue-rotate(46deg) saturate(1.15) brightness(1.14)}
  25%{filter:hue-rotate(92deg) saturate(1.25) brightness(1.18);opacity:.88}
  38%{filter:hue-rotate(158deg) saturate(1.15) brightness(1.16) blur(1.2px);opacity:.5}
  50%{filter:hue-rotate(204deg) saturate(1.3) brightness(1.2);opacity:.92}
  63%{filter:hue-rotate(252deg) saturate(1.2) brightness(1.16);opacity:.7}
  76%{filter:hue-rotate(300deg) saturate(1.15) brightness(1.14);opacity:.95}
  88%{filter:hue-rotate(332deg) saturate(1.1) brightness(1.08)}
  100%{filter:hue-rotate(360deg) saturate(1);opacity:1}
}
.redy-agent.is-supercharged .redy-agent__rig{animation:redyGlitchSlice 3600ms steps(1,end) both}
.redy-agent.is-supercharged .redy-agent__crown-glow{animation:redyGlitchCrown 7800ms steps(1,end) both}
/* act two: the same tearing, re-sung in the house reds */
.redy-agent.is-invaded .redy-agent__facing{animation:redyGlitchShiftRed 4100ms steps(1,end) both}
.redy-agent.is-invaded .redy-agent__rig{animation:redyGlitchSlice 4100ms steps(1,end) both}
@keyframes redyGlitchShiftRed{
  0%,9%,18%,30%,44%,58%,72%,84%,93%,100%{transform:translate(0,0);filter:none;opacity:1}
  10%{transform:translate(-3px,1px);filter:drop-shadow(3px 0 0 rgba(104,47,64,.8)) drop-shadow(-3px 0 0 rgba(201,87,62,.6));opacity:.93}
  19%{transform:translate(2px,-2px);filter:drop-shadow(-3px 0 0 rgba(168,86,107,.75)) drop-shadow(3px 0 0 rgba(104,47,64,.55))}
  31%{transform:translate(-2px,0) scale(1.01,.99);filter:drop-shadow(2px 0 0 rgba(201,87,62,.65)) drop-shadow(-2px 0 0 rgba(64,29,40,.6))}
  45%{transform:translate(3px,1px);filter:drop-shadow(-4px 0 0 rgba(104,47,64,.7)) drop-shadow(4px 0 0 rgba(214,154,175,.5));opacity:.9}
  59%{transform:translate(-1px,-1px);filter:drop-shadow(2px 0 0 rgba(168,86,107,.6))}
  73%{transform:translate(1px,2px);filter:drop-shadow(-2px 0 0 rgba(201,87,62,.55)) drop-shadow(2px 0 0 rgba(104,47,64,.5));opacity:.95}
  85%{transform:translate(-2px,1px);filter:drop-shadow(3px 0 0 rgba(104,47,64,.6))}
}
@media (prefers-reduced-motion:reduce){.redy-agent.is-invaded .redy-agent__facing,.redy-agent.is-invaded .redy-agent__rig{animation:none}}
@keyframes redyGlitchShift{
  0%,7%,14%,26%,40%,54%,68%,80%,90%,100%{transform:translate(0,0);filter:none;opacity:1}
  8%{transform:translate(-3px,1px);filter:drop-shadow(3px 0 0 rgba(214,90,110,.75)) drop-shadow(-3px 0 0 rgba(0,229,229,.7));opacity:.92}
  10%{transform:translate(4px,-1px);filter:drop-shadow(-4px 0 0 rgba(217,160,91,.8)) drop-shadow(4px 0 0 rgba(123,127,196,.62));opacity:.86}
  12%{transform:translate(-2px,0);filter:drop-shadow(2px 0 0 rgba(157,186,108,.62));opacity:.96}
  28%{transform:translate(5px,2px);filter:drop-shadow(-5px 0 0 rgba(183,107,178,.85)) drop-shadow(5px 0 0 rgba(95,168,164,.66));opacity:.8}
  31%{transform:translate(-4px,-2px);filter:drop-shadow(4px 0 0 rgba(214,96,110,.7));opacity:.9}
  34%{transform:translate(0,0);filter:invert(1) hue-rotate(180deg);opacity:.85}
  35.4%{transform:translate(0,0);filter:none;opacity:.55}
  37%{transform:translate(0,0);filter:none;opacity:1}
  56%{transform:translate(-6px,0);filter:drop-shadow(6px 0 0 rgba(214,90,110,.9)) drop-shadow(-6px 0 0 rgba(0,229,229,.7));opacity:.78}
  58%{transform:translate(3px,1px);filter:drop-shadow(-3px 0 0 rgba(217,160,91,.7)) drop-shadow(3px 0 0 rgba(183,107,178,.6));opacity:.9}
  60%{transform:translate(0,0);filter:invert(1) hue-rotate(180deg);opacity:.8}
  61.2%{transform:translate(0,0);filter:none;opacity:1}
  70%{transform:translate(-2px,-1px);filter:drop-shadow(2px 0 0 rgba(123,127,196,.58));opacity:.94}
  82%{transform:translate(2px,0);filter:drop-shadow(-2px 0 0 rgba(95,168,164,.52));opacity:.95}
  92%{transform:translate(1px,0);filter:none;opacity:.98}
}
@keyframes redyGlitchSlice{
  0%,9%,13%,29%,37%,61%,67%,79%,100%{clip-path:none}
  10%{clip-path:polygon(0 0,100% 0,100% 18%,0 18%,0 21%,100% 21%,100% 44%,0 44%,0 48%,100% 48%,100% 100%,0 100%)}
  11%{clip-path:polygon(0 0,100% 0,100% 31%,0 31%,0 35%,100% 35%,100% 62%,0 62%,0 65%,100% 65%,100% 100%,0 100%)}
  12%{clip-path:polygon(0 0,100% 0,100% 54%,0 54%,0 59%,100% 59%,100% 100%,0 100%)}
  31%{clip-path:polygon(0 0,100% 0,100% 24%,0 24%,0 27%,100% 27%,100% 52%,0 52%,0 57%,100% 57%,100% 78%,0 78%,0 81%,100% 81%,100% 100%,0 100%)}
  34%{clip-path:polygon(0 0,100% 0,100% 12%,0 12%,0 17%,100% 17%,100% 68%,0 68%,0 72%,100% 72%,100% 100%,0 100%)}
  63%{clip-path:polygon(0 0,100% 0,100% 16%,0 16%,0 21%,100% 21%,100% 39%,0 39%,0 42%,100% 42%,100% 71%,0 71%,0 75%,100% 75%,100% 100%,0 100%)}
  65%{clip-path:polygon(0 0,100% 0,100% 47%,0 47%,0 52%,100% 52%,100% 86%,0 86%,0 89%,100% 89%,100% 100%,0 100%)}
  81%{clip-path:polygon(0 0,100% 0,100% 33%,0 33%,0 36%,100% 36%,100% 60%,0 60%,0 63%,100% 63%,100% 100%,0 100%)}
}
@keyframes redyGlitchCrown{
  0%,100%{opacity:0}
  9%,31%,63%{opacity:.8}
  12%,35%,66%{opacity:0}
}
@media (prefers-reduced-motion:reduce){.redy-agent.is-supercharged .redy-agent__facing,.redy-agent.is-supercharged .redy-agent__rig,.redy-agent.is-supercharged .redy-agent__crown-glow,.redy-agent.is-supercharged .redy-agent__frame,.redy-agent.is-supercharged .redy-agent__puppet,.redy-agent.is-dodging .redy-agent__rig{animation:none}}

/* Bullet-dodge: hard teleport cuts around the rest position, each hop lands
   with a quick materialize blink; ends exactly where he started. */
.redy-agent.is-dodging .redy-agent__rig{animation:redyDodge 1900ms steps(1,end) both}
@keyframes redyDodge{
  0%{transform:translate(0,0);opacity:1}
  7%{transform:translate(0,0);opacity:0}
  9%{transform:translate(-14px,-6px) scale(1.07);opacity:.45}
  11%{transform:translate(-14px,-6px) scale(1);opacity:1}
  22%{transform:translate(-14px,-6px);opacity:0}
  24%{transform:translate(11px,-10px) scale(1.07);opacity:.45}
  26%{transform:translate(11px,-10px) scale(1);opacity:1}
  38%{transform:translate(11px,-10px);opacity:0}
  40%{transform:translate(-8px,8px) scale(1.07);opacity:.45}
  42%{transform:translate(-8px,8px) scale(1);opacity:1}
  54%{transform:translate(-8px,8px);opacity:0}
  56%{transform:translate(15px,4px) scale(1.07);opacity:.45}
  58%{transform:translate(15px,4px) scale(1);opacity:1}
  70%{transform:translate(15px,4px);opacity:0}
  72%{transform:translate(-12px,-9px) scale(1.07);opacity:.45}
  74%{transform:translate(-12px,-9px) scale(1);opacity:1}
  85%{transform:translate(-12px,-9px);opacity:0}
  87%{transform:translate(0,0) scale(1.07);opacity:.45}
  89%,100%{transform:translate(0,0) scale(1);opacity:1}
}
}


/* the charged word rides a quiet rainbow, one letter after the next */
.redy-rainbow{display:inline-block;animation:redyRainbowWave 1.5s linear infinite}
@keyframes redyRainbowWave{
  0%,100%{color:hsl(356,72%,70%);transform:translateY(0)}
  17%{color:hsl(38,76%,64%)}
  34%{color:hsl(140,48%,64%);transform:translateY(-1.4px)}
  51%{color:hsl(196,62%,66%)}
  68%{color:hsl(248,58%,73%);transform:translateY(.4px)}
  85%{color:hsl(312,55%,70%)}
}
@media (prefers-reduced-motion:reduce){.redy-rainbow{animation:none}}


/* The dance, keyed live: no porthole, no backdrop. The dancer is cropped to
   his own frame and stands exactly where the sprite stands, so the handover
   reads as Redy coming alive rather than a video appearing. */
.redy-agent__dance{position:absolute;left:50%;bottom:0;height:96%;aspect-ratio:400/612;transform:translateX(-50%) scale(.93);transform-origin:50% 100%;opacity:0;pointer-events:none;z-index:13;
  filter:drop-shadow(0 12px 20px rgba(25,29,32,.26));
  transition:opacity .55s cubic-bezier(.3,0,.2,1), transform .6s cubic-bezier(.3,0,.2,1)}
.redy-agent__dance canvas{width:100%;height:100%;display:block}
.redy-agent.is-dancing .redy-agent__dance{opacity:1;transform:translateX(-50%) scale(1)}
.redy-agent__world{transition:opacity .4s ease,transform .45s ease}
.redy-agent.is-dancing .redy-agent__world{opacity:0;transform:scale(.92)}
@media (prefers-reduced-motion:reduce){.redy-agent__dance{display:none}}


/* The wink: a closed-eye stroke over the visor's right lens, popping at the
   top of the wave. The wave itself gets a breath of anticipation first. */
.redy-agent.is-wave-lead .redy-agent__world{animation:redyWaveLead .36s cubic-bezier(.36,0,.25,1)}
@keyframes redyWaveLead{0%{transform:none}42%{transform:translateY(2px) scale(1.014,.984)}100%{transform:none}}


/* Quantum Phasing: the ellipsis counts itself up, one dot at a time */
.redy-phase i{font-style:normal;opacity:0;animation:redyPhaseA 1.5s steps(1,end) infinite}
.redy-phase i:nth-child(2){animation-name:redyPhaseB}
.redy-phase i:nth-child(3){animation-name:redyPhaseC}
@keyframes redyPhaseA{0%{opacity:0}8%,100%{opacity:1}}
@keyframes redyPhaseB{0%,40%{opacity:0}41%,100%{opacity:1}}
@keyframes redyPhaseC{0%,73%{opacity:0}74%,100%{opacity:1}}
@media (prefers-reduced-motion:reduce){.redy-phase i{opacity:1;animation:none}}


/* Quantum sparkles: a few small pastel stars pop around him while he phases */
.redy-agent.is-supercharged .redy-agent__rig:before,
.redy-agent.is-supercharged .redy-agent__rig:after{
  content:"\2726";position:absolute;z-index:14;pointer-events:none;font-size:10px;line-height:1;opacity:0;
}
.redy-agent.is-supercharged .redy-agent__rig:before{
  left:10%;top:20%;color:#D6606E;text-shadow:34px 20px 0 #5FA8A4,58px -6px 0 #D9A05B;
  animation:redySpark1 7800ms ease-in-out both;
}
.redy-agent.is-supercharged .redy-agent__rig:after{
  right:8%;bottom:26%;color:#7B7FC4;text-shadow:-30px -22px 0 #B76BB2,-54px 8px 0 #9DBA6C;
  animation:redySpark2 7800ms ease-in-out both;
}
@keyframes redySpark1{0%,12%{opacity:0;transform:scale(.2) rotate(0deg)}18%{opacity:.85;transform:scale(1) rotate(18deg)}26%{opacity:0;transform:scale(.3) rotate(26deg)}44%{opacity:0}50%{opacity:.8;transform:scale(.92) rotate(44deg)}58%{opacity:0;transform:scale(.22)}78%{opacity:0}84%{opacity:.75;transform:scale(1.04)}92%,100%{opacity:0;transform:scale(.2)}}
@keyframes redySpark2{0%,20%{opacity:0;transform:scale(.2)}27%{opacity:.8;transform:scale(1) rotate(-16deg)}35%{opacity:0;transform:scale(.24)}55%{opacity:0}62%{opacity:.85;transform:scale(.95) rotate(-30deg)}70%{opacity:0;transform:scale(.2)}86%{opacity:0}91%{opacity:.7;transform:scale(1)}100%{opacity:0;transform:scale(.2)}}
@media (prefers-reduced-motion:reduce){.redy-agent.is-supercharged .redy-agent__rig:before,.redy-agent.is-supercharged .redy-agent__rig:after{content:none}}


/* The magic trick: the puff rides above him, he squashes away into it, and
   springs back through the second puff. Multiply lets the smoke sit on any
   light ground without a box. */
.redy-agent__poof{position:absolute;left:50%;top:50%;width:195%;transform:translate(-50%,-50%);pointer-events:none;z-index:15;opacity:0;mix-blend-mode:multiply;transition:opacity .14s ease}
.redy-agent.is-poofing .redy-agent__poof{opacity:.92}
.redy-agent.is-charging .redy-agent__facing{filter:saturate(0) brightness(2.4) contrast(1.08);transition:filter 1.4s ease}
@keyframes redy-charge-throb{0%,100%{transform:scale(1)}50%{transform:scale(1.035)}}
.redy-agent.is-charging .redy-agent__world{animation:redy-charge-throb .52s ease-in-out infinite}
.redy-agent .redy-agent__world{transition:transform .45s ease}
@keyframes redy-blast-pose{0%{transform:rotate(0deg) translateX(0)}16%{transform:rotate(-7.5deg) translateX(-3.5px) scale(1.025)}42%{transform:rotate(-5deg) translateX(-2.5px)}100%{transform:rotate(-4.5deg) translateX(-2px)}}
.redy-agent.is-blasting .redy-agent__world{animation:redy-blast-pose 2.05s cubic-bezier(.2,.6,.3,1) forwards}
.redy-agent.is-magic-out .redy-agent__world{opacity:0;transform:scale(.88);transition:transform .6s ease,opacity .55s ease .05s}
.redy-agent.is-magic-in .redy-agent__world{animation:redyMagicIn 1.24s cubic-bezier(.25,.8,.35,1) both}
@keyframes redyMagicIn{0%{opacity:0;filter:blur(10px) brightness(1.5);transform:scale(.94)}45%{opacity:.75;filter:blur(3.5px) brightness(1.18);transform:scale(1.015)}100%{opacity:1;filter:blur(0) brightness(1);transform:scale(1)}}
@media (prefers-reduced-motion:reduce){.redy-agent__poof{display:none}.redy-agent.is-magic-out .redy-agent__world,.redy-agent.is-magic-in .redy-agent__world{animation:none;opacity:1;transform:none;transition:none}}


/* the word "magic" ripples in the house reds */
.redy-redwave{display:inline-block;animation:redyRedWave 1.3s ease-in-out infinite}
@keyframes redyRedWave{0%,100%{color:#682F40;transform:translateY(0)}35%{color:#C9573E;transform:translateY(-1.3px);text-shadow:0 0 8px rgba(201,87,62,.35)}70%{color:#A8566B}}
@media (prefers-reduced-motion:reduce){.redy-redwave{animation:none}}


/* "Defeated" ripples in the pine greens */
.redy-greenwave{display:inline-block;animation:redyGreenWave 1.3s ease-in-out infinite}
@keyframes redyGreenWave{0%,100%{color:#2C4847;transform:translateY(0)}35%{color:#3E7D6A;transform:translateY(-1.3px);text-shadow:0 0 8px rgba(116,174,140,.4)}70%{color:#74AE8C}}
@media (prefers-reduced-motion:reduce){.redy-greenwave{animation:none}}

/* Breathing gradient words: victory (blue then deep red) and the Tadaaa */
.redy-blueheat,.redy-redheat,.redy-tadaheat,.redy-beamheat{
  background-size:220% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;
  font-weight:700;animation:redyBreathShift 1.9s ease-in-out infinite alternate;
}
.redy-blueheat{background-image:linear-gradient(90deg,#3E6FA8,#8FC1EE,#3E6FA8)}
.redy-redheat{background-image:linear-gradient(90deg,#401D28,#A04358,#401D28)}
.redy-tadaheat{background-image:linear-gradient(90deg,#7B4FA0,#E8C34A,#7B4FA0)}
.redy-beamheat{background-image:linear-gradient(90deg,#DD5B7C,#DE8A45,#C2A32E,#3FA065,#3F87C2,#8A66C6,#DD5B7C);animation:redyBeamBreath 1.5s ease-in-out infinite alternate}
@keyframes redyBeamBreath{
  0%{background-position:0% 50%;filter:brightness(.96) drop-shadow(0 0 2px rgba(255,255,255,.3))}
  100%{background-position:100% 50%;filter:brightness(1.16) drop-shadow(0 0 6px rgba(255,244,214,.7))}
}
@keyframes redyBreathShift{
  0%{background-position:0% 50%;filter:brightness(.88)}
  100%{background-position:100% 50%;filter:brightness(1.32)}
}
@media (prefers-reduced-motion:reduce){.redy-blueheat,.redy-redheat,.redy-tadaheat,.redy-beamheat{animation:none}}
