/* v637 — softened continuous free-position Familiar motion.
   Placement roots are fixed. Normal whole-pet motion is NOT a CSS keyframe animation.
   JavaScript continuously writes a cosine Y offset plus tiny independent X drift to .gg-familiar-free-motion. */

.gg-familiar-avatar-v339,
.gg-familiar-room-avatar-v339{
  animation:none!important;
}

/* Legacy pet-hover/root bobbing remains neutralized. The renderer/drag system owns placement. */
.gg-familiar-avatar-v339 > .pet-hover,
.gg-familiar-room-avatar-v339 > .pet-hover{
  animation:none!important;
  transform:none!important;
  transition-property:filter,opacity!important;
  width:100%!important;
  height:100%!important;
  display:grid!important;
  place-items:center!important;
}

/* One local whole-body motion owner. No animation declaration, no transition, no reset. */
.gg-familiar-free-motion{
  position:relative;
  width:100%;
  height:100%;
  display:grid;
  place-items:center;
  transform:translate3d(0,0,0);
  transform-origin:50% 100%;
  will-change:transform;
  backface-visibility:hidden;
  transition:none!important;
  pointer-events:none;
}
.gg-familiar-free-motion > .gg-familiar-life-motion{
  width:100%;
  height:100%;
  display:grid;
  place-items:center;
  transform-origin:50% 100%;
  animation:ggFamiliarBreathV637 6.4s ease-in-out infinite;
  will-change:transform;
  pointer-events:none;
}
.gg-familiar-life-motion > .gg-familiar-special-motion{pointer-events:auto}
@keyframes ggFamiliarBreathV637{
  0%,100%{transform:scale(1)}
  50%{transform:scale(1.0075)}
}

/* Old v635 wrapper name must not retain any animation if a stale DOM survives briefly. */
.gg-familiar-idle-motion{
  animation:none!important;
  transition:none!important;
}

/* Robot Owl head has one normal-motion owner only. */
.gg-familiar-avatar-v339[data-pet-type="robotOwl"] .owl-head-v345.gg-robot-owl-head-clean,
.gg-familiar-room-avatar-v339[data-pet-type="robotOwl"] .owl-head-v345.gg-robot-owl-head-clean,
.gg-familiar-avatar-v339[data-pet-type="moonOwl"] .owl-head-v345.gg-robot-owl-head-clean,
.gg-familiar-room-avatar-v339[data-pet-type="moonOwl"] .owl-head-v345.gg-robot-owl-head-clean{
  animation:ggRobotOwlHeadCleanV637 7.4s cubic-bezier(.45,0,.25,1) infinite!important;
  animation-fill-mode:none!important;
  transform-box:fill-box!important;
  transform-origin:50% 65%!important;
  will-change:transform;
}
@keyframes ggRobotOwlHeadCleanV637{
  0%,100%{transform:rotate(0deg)}
  24%{transform:rotate(-.45deg)}
  44%{transform:rotate(-.7deg)}
  64%{transform:rotate(.35deg)}
  82%{transform:rotate(.7deg)}
}

/* Existing always-on scan sweep is disabled; explicit special scan owns scan FX. */
.gg-familiar-avatar-v339[data-pet-type="robotOwl"] .scan,
.gg-familiar-room-avatar-v339[data-pet-type="robotOwl"] .scan,
.gg-familiar-avatar-v339[data-pet-type="moonOwl"] .scan,
.gg-familiar-room-avatar-v339[data-pet-type="moonOwl"] .scan{animation:none!important;transform:none!important}

.gg-familiar-special-motion{
  position:relative;
  width:100%;
  height:100%;
  display:grid;
  place-items:center;
  transform-origin:50% 55%;
  will-change:transform,opacity,filter;
}
.gg-familiar-special-motion > svg{width:100%;height:100%;display:block}
.gg-familiar-fx{position:absolute;inset:-32%;z-index:30;overflow:visible;pointer-events:none!important;isolation:isolate}
.gg-familiar-fx *{pointer-events:none!important}

/* Dragon bone / puff */
.gg-v631-bone{position:absolute;left:58%;top:47%;width:24px;height:11px;transform-origin:center;filter:drop-shadow(0 2px 2px rgba(0,0,0,.28));animation:ggV631Bone 1.48s cubic-bezier(.2,.68,.3,1) forwards}
.gg-v631-bone:before,.gg-v631-bone:after{content:"";position:absolute;background:#fff4dc;border:1.6px solid #8c7358}
.gg-v631-bone:before{left:4px;top:3px;width:16px;height:5px;border-radius:6px}
.gg-v631-bone:after{left:0;top:0;width:8px;height:11px;border-radius:50%;box-shadow:18px 0 0 -1px #fff4dc,18px 0 0 0 #8c7358}
@keyframes ggV631Bone{
  0%{opacity:0;transform:translate3d(0,0,0) rotate(0) scale(.65)}
  10%{opacity:1}
  38%{transform:translate3d(27px,-25px,0) rotate(155deg) scale(1.05)}
  66%{transform:translate3d(49px,-5px,0) rotate(315deg) scale(1)}
  82%{transform:translate3d(58px,19px,0) rotate(430deg) scale(.98)}
  90%{transform:translate3d(62px,12px,0) rotate(475deg) scale(.95)}
  100%{opacity:0;transform:translate3d(66px,21px,0) rotate(535deg) scale(.88)}
}
.gg-v631-puff{position:absolute;left:58%;top:49%;width:12px;height:12px;border-radius:50%;background:rgba(238,242,247,.92);box-shadow:9px -4px 0 rgba(238,242,247,.72),18px 1px 0 rgba(238,242,247,.48);animation:ggV631Puff .72s ease-out forwards}
@keyframes ggV631Puff{0%{opacity:.95;transform:translate3d(0,0,0) scale(.65)}100%{opacity:0;transform:translate3d(28px,-15px,0) scale(2)}}

/* Dragon fire */
.gg-v631-fire-glow{position:absolute;left:58%;top:49%;width:12px;height:12px;border-radius:50%;background:#fff7a6;box-shadow:0 0 12px #ffd43b,0 0 22px rgba(255,114,24,.85);animation:ggV631FireGlow 1.25s ease-out forwards}
.gg-v631-fire-cone{position:absolute;left:61%;top:43%;width:82px;height:38px;transform-origin:0 50%;clip-path:polygon(0 40%,100% 0,83% 50%,100% 100%,0 61%);background:linear-gradient(90deg,#fffbd4 0 10%,#ffe74f 22%,#ff9d22 51%,#ff4b18 74%,rgba(210,24,9,.08) 100%);filter:drop-shadow(0 0 7px rgba(255,131,31,.95));opacity:0;animation:ggV631FireCone 1.25s .12s cubic-bezier(.2,.8,.2,1) forwards}
.gg-v631-fire-cone:after{content:"";position:absolute;inset:8px 7px 8px 4px;clip-path:inherit;background:linear-gradient(90deg,#fff,#ffe05a 40%,#ff5b1b);animation:ggV631FlameFlicker .13s steps(2,end) infinite alternate}
.gg-v631-fire-spark{position:absolute;left:64%;top:50%;width:5px;height:5px;border-radius:50%;background:#ffe35c;box-shadow:0 0 6px #ff7b1a;animation:ggV631Spark .72s ease-out forwards}
.gg-v631-fire-spark.s2{top:44%;animation-delay:.14s}.gg-v631-fire-spark.s3{top:57%;animation-delay:.27s}
@keyframes ggV631FireGlow{0%{opacity:0;transform:scale(.3)}20%,72%{opacity:1;transform:scale(1.45)}100%{opacity:0;transform:scale(.5)}}
@keyframes ggV631FireCone{0%{opacity:0;transform:scaleX(.05) scaleY(.55)}16%,72%{opacity:1;transform:scaleX(1) scaleY(1)}100%{opacity:0;transform:scaleX(.68) scaleY(.55)}}
@keyframes ggV631FlameFlicker{to{transform:translateY(2px) scaleY(.82)}}
@keyframes ggV631Spark{0%{opacity:0;transform:translate3d(0,0,0) scale(.4)}18%{opacity:1}100%{opacity:0;transform:translate3d(76px,-16px,0) scale(.15)}}

/* Owl time-warp teleport */
.gg-v631-time-ring,.gg-v631-time-ripple{position:absolute;left:50%;top:50%;width:72%;aspect-ratio:1;border-radius:50%;transform:translate(-50%,-50%);border:2px solid rgba(92,232,255,.96);box-shadow:0 0 12px rgba(78,225,255,.9),inset 0 0 12px rgba(78,225,255,.4)}
.gg-v631-time-ring{background:repeating-conic-gradient(from 0deg,rgba(140,247,255,.95) 0deg 2deg,transparent 2deg 15deg);mask:radial-gradient(circle,transparent 0 42%,#000 43% 48%,transparent 49%);animation:ggV631Ring 1.55s linear forwards}
.gg-v631-time-ripple{opacity:0;animation:ggV631Ripple 1.55s ease-out forwards}
.gg-v631-clock-hands{position:absolute;left:50%;top:50%;width:4px;height:29%;border-radius:3px;background:#b7fbff;transform-origin:50% 100%;transform:translate(-50%,-100%);box-shadow:0 0 8px #68ecff;animation:ggV631Hands .55s linear 3}
.gg-v631-clock-hands:after{content:"";position:absolute;left:50%;bottom:0;width:3px;height:70%;border-radius:3px;background:#fff;transform-origin:50% 100%;transform:rotate(115deg);box-shadow:0 0 6px #65edff}
.gg-v631-pixel{position:absolute;width:5px;height:5px;background:#8df6ff;box-shadow:0 0 7px #58eaff;animation:ggV631Pixel 1.2s ease-out forwards}
.gg-v631-flash{position:absolute;left:50%;top:50%;width:24%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,#fff 0 12%,#9cf8ff 13% 38%,rgba(71,216,255,.18) 39% 100%);transform:translate(-50%,-50%);opacity:0;animation:ggV631Flash 1.55s ease-in-out forwards}
@keyframes ggV631Ring{0%{opacity:0;transform:translate(-50%,-50%) scale(.45) rotate(0)}16%{opacity:1}55%{transform:translate(-50%,-50%) scale(1.06) rotate(260deg)}100%{opacity:0;transform:translate(-50%,-50%) scale(1.45) rotate(520deg)}}
@keyframes ggV631Ripple{0%,33%{opacity:0;transform:translate(-50%,-50%) scale(.35)}48%{opacity:1}70%,100%{opacity:0;transform:translate(-50%,-50%) scale(1.7)}}
@keyframes ggV631Hands{to{transform:translate(-50%,-100%) rotate(360deg)}}
@keyframes ggV631Pixel{0%{opacity:0;transform:translate3d(0,0,0) scale(.5)}20%{opacity:1}100%{opacity:0;transform:translate3d(var(--dx),var(--dy),0) scale(.1)}}
@keyframes ggV631Flash{0%,34%,63%,100%{opacity:0;transform:translate(-50%,-50%) scale(.25)}43%{opacity:1;transform:translate(-50%,-50%) scale(1.7)}72%{opacity:.75;transform:translate(-50%,-50%) scale(1.25)}}

/* Owl scan */
.gg-v631-scan-glow{position:absolute;left:50%;top:41%;width:48%;height:15%;transform:translate(-50%,-50%);background:radial-gradient(ellipse,rgba(138,250,255,.9),rgba(77,221,255,.18) 60%,transparent 75%);filter:blur(1px);animation:ggV631ScanGlow 2s ease-in-out forwards}
.gg-v631-scan-beam{position:absolute;left:50%;top:46%;width:72%;height:72%;transform:translateX(-50%);clip-path:polygon(38% 0,62% 0,90% 100%,10% 100%);background:linear-gradient(180deg,rgba(98,236,255,.32),rgba(79,203,255,.08));border-bottom:1px solid rgba(124,244,255,.72);animation:ggV631Beam 2s ease-in-out forwards}
.gg-v631-scan-grid{position:absolute;left:50%;top:72%;width:72%;height:36%;transform:translate(-50%,-50%) perspective(90px) rotateX(58deg);background-image:linear-gradient(rgba(105,234,255,.5) 1px,transparent 1px),linear-gradient(90deg,rgba(105,234,255,.5) 1px,transparent 1px);background-size:10px 10px;border:1px solid rgba(105,234,255,.62);box-shadow:0 0 10px rgba(86,226,255,.35);opacity:0;animation:ggV631Grid 2s ease-in-out forwards}
.gg-v631-scan-line{position:absolute;left:22%;right:22%;top:61%;height:2px;background:#c8fdff;box-shadow:0 0 8px #53eaff;opacity:0;animation:ggV631ScanLine 1.4s .28s ease-in-out forwards}
@keyframes ggV631ScanGlow{0%,100%{opacity:0}18%,78%{opacity:1}}
@keyframes ggV631Beam{0%,100%{opacity:0}18%,78%{opacity:1}}
@keyframes ggV631Grid{0%,100%{opacity:0}22%,76%{opacity:.85}}
@keyframes ggV631ScanLine{0%{opacity:0;transform:translateY(-10px)}18%{opacity:1}82%{opacity:1;transform:translateY(44px)}100%{opacity:0;transform:translateY(48px)}}


@media(prefers-reduced-motion:reduce){
  .gg-familiar-free-motion{transform:translate3d(0,0,0)!important}
  .gg-familiar-idle-motion,
  .gg-familiar-life-motion,
  .owl-head-v345.gg-robot-owl-head-clean{animation:none!important;transform:none!important}
  .gg-familiar-fx{display:none!important}
}

/* v654 Robot Owl extra one-shot idle FX */
.gg-familiar-fx .gg-v654-owl-glitch{position:absolute;left:18%;top:22%;width:64%;height:58%;pointer-events:none;opacity:0;z-index:8;background:repeating-linear-gradient(180deg,rgba(91,235,255,.0) 0 5px,rgba(91,235,255,.72) 6px 7px,rgba(91,235,255,.0) 8px 12px);filter:drop-shadow(5px 0 0 rgba(64,209,255,.26)) drop-shadow(-4px 0 0 rgba(255,91,213,.2));animation:ggV654OwlGlitch .72s steps(2,end) 1}
@keyframes ggV654OwlGlitch{0%,100%{opacity:0;transform:translateX(0)}18%{opacity:.72;transform:translateX(-3px)}36%{opacity:.28;transform:translateX(4px)}54%{opacity:.8;transform:translateX(-2px)}72%{opacity:.35;transform:translateX(2px)}}
