/* 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)}}

/* v833 — Alien Chicken Familiar hatched from the Midnight UFO egg. */
.alien-chicken-pet-v833{position:relative!important;isolation:isolate}.alien-chicken-pet-v833>.pet-hover{position:relative!important;overflow:visible!important}.alien-chicken-sprite-v833{position:absolute;z-index:3;left:50%;top:50%;display:block;width:84px;height:84px;translate:-50% -50%;background:url("island-alien-chicken-atlas-v1005.webp") 0 0/336px 252px no-repeat;filter:drop-shadow(0 4px 3px rgba(15,43,32,.3)) drop-shadow(0 0 4px #6aff9350);animation:ggAlienChickenIdleV833 2.2s steps(1,end) infinite}.alien-chicken-glow-v833{position:absolute;z-index:1;left:50%;top:54%;width:78px;height:66px;translate:-50% -50%;border-radius:50%;background:radial-gradient(circle,#b9ff7470,#61ff8d25 58%,transparent 75%);filter:blur(4px);animation:ggAlienChickenGlowV833 1.3s ease-in-out infinite alternate}.alien-chicken-eyes-v833{display:none!important}.alien-chicken-pet-v833.skin-chrome .alien-chicken-sprite-v833{filter:grayscale(.55) hue-rotate(140deg) brightness(1.25) drop-shadow(0 0 9px #c4fbff)}.alien-chicken-pet-v833.skin-black .alien-chicken-sprite-v833{filter:hue-rotate(56deg) saturate(.8) brightness(.57) contrast(1.25) drop-shadow(0 0 9px #63ff8e)}.alien-chicken-pet-v833.skin-skeleton .alien-chicken-sprite-v833{filter:grayscale(.92) contrast(1.3) brightness(1.12) drop-shadow(0 0 9px #eaffdf)}.alien-chicken-pet-v833.skin-purple .alien-chicken-sprite-v833{filter:hue-rotate(264deg) saturate(1.55) drop-shadow(0 0 10px #d0a1ff)}
@keyframes ggAlienChickenIdleV833{0%,54%,100%{background-position:0 0}55%,78%{background-position:-84px 0}79%,92%{background-position:-168px 0}}@keyframes ggAlienChickenGlowV833{to{opacity:.55;scale:1.16}}
@media(prefers-reduced-motion:reduce){.alien-chicken-sprite-v833,.alien-chicken-glow-v833{animation:none!important}}

/* v829 Storm Jelly Familiar — one body float plus lightweight electric accents. */
.storm-jelly-pet-v829{position:relative!important;isolation:isolate}.storm-jelly-pet-v829>.pet-hover{position:relative!important;overflow:visible!important}.storm-jelly-img-v829{position:relative;z-index:3;display:block;width:104%!important;height:104%!important;object-fit:contain;filter:drop-shadow(0 7px 5px rgba(24,42,83,.28)) drop-shadow(0 0 8px rgba(125,225,255,.35));animation:ggStormJellyBreathV829 2.4s ease-in-out infinite;transform-origin:50% 67%}.storm-jelly-glow-v829{position:absolute;z-index:1;left:50%;top:48%;width:72%;height:68%;translate:-50% -50%;border-radius:50%;background:radial-gradient(circle,rgba(164,245,255,.38),rgba(158,102,255,.13) 58%,transparent 73%);filter:blur(5px);animation:ggStormJellyGlowV829 1.6s ease-in-out infinite alternate}.storm-jelly-zap-v829{position:absolute;z-index:5;inset:4%;pointer-events:none}.storm-jelly-zap-v829>i{position:absolute;left:4%;top:43%;width:22%;height:14%;border:3px solid #b8fcff;border-left:0;border-bottom:0;border-radius:50%;rotate:-28deg;filter:drop-shadow(0 0 4px #5feaff);animation:ggStormJellyZapV829 1.3s steps(2,end) infinite}.storm-jelly-zap-v829>i:nth-child(2){left:auto;right:2%;top:31%;rotate:29deg;animation-delay:-.43s}.storm-jelly-zap-v829>i:nth-child(3){left:43%;top:1%;scale:.72;rotate:-44deg;animation-delay:-.86s}.storm-jelly-pet-v829.skin-chrome .storm-jelly-img-v829{filter:grayscale(.52) hue-rotate(145deg) brightness(1.18) drop-shadow(0 0 9px #bff8ff)}.storm-jelly-pet-v829.skin-black .storm-jelly-img-v829{filter:saturate(.62) brightness(.58) contrast(1.22) drop-shadow(0 0 8px #8c7dff)}.storm-jelly-pet-v829.skin-skeleton .storm-jelly-img-v829{filter:grayscale(.85) contrast(1.28) brightness(1.08) drop-shadow(0 0 8px #e6ffff)}.storm-jelly-pet-v829.skin-purple .storm-jelly-img-v829{filter:hue-rotate(43deg) saturate(1.32) drop-shadow(0 0 10px #d7a0ff)}
@keyframes ggStormJellyBreathV829{0%,100%{transform:translateY(1px) scale(1,.97)}50%{transform:translateY(-4px) scale(.97,1.035)}}@keyframes ggStormJellyGlowV829{to{opacity:.48;scale:1.13}}@keyframes ggStormJellyZapV829{0%,42%,100%{opacity:0}43%,68%{opacity:1}69%,82%{opacity:.2}}
@media(prefers-reduced-motion:reduce){.storm-jelly-img-v829,.storm-jelly-glow-v829,.storm-jelly-zap-v829>i{animation:none!important}.storm-jelly-zap-v829>i{opacity:.65}}
/* v852 Island-caught Familiar art shared by every page. */
.ggi-island-pet-v852>.pet-hover{display:grid!important;place-items:center!important}
.ggi-island-pet-img-v852,.ggi-island-pet-art-v852{display:block;width:96px;height:96px;object-fit:contain;pointer-events:none}
.ggi-island-pet-img-v852.caterpillar{height:70px}
.ggi-island-pet-img-v852.blackMoth{filter:drop-shadow(0 0 7px #65e4ff) drop-shadow(0 0 13px #795cff);animation:ggiPetStormsparkV852 1.1s ease-in-out infinite alternate}
.ggi-island-pet-img-v852.stormspark{filter:drop-shadow(0 0 7px #59ddff) drop-shadow(0 0 12px #825dff);animation:ggiPetStormsparkV852 1.1s ease-in-out infinite alternate}
.ggi-island-pet-art-v852.butterfly,.ggi-island-pet-art-v852.blackMoth{background:url("island-butterfly-v879.webp") 0 0/400% 100% no-repeat;animation:ggiPetButterflyV852 .58s steps(1,end) infinite}
.ggi-island-pet-art-v852.blackMoth{filter:grayscale(1) brightness(.24) contrast(1.55) drop-shadow(0 0 5px #6e4a83)}
.ggi-island-pet-art-v852.crab{background:url("island-skull-crab-sprites-v713.v747.webp") 0 0/500% 400% no-repeat;animation:ggiPetCrabV852 .8s steps(1,end) infinite}
.ggi-island-pet-v852>.pet-hover>.pet-accessory{z-index:5}
@keyframes ggiPetStormsparkV852{to{translate:0 -5px;rotate:3deg}}
@keyframes ggiPetButterflyV852{33%{background-position:33.333% 0}66%{background-position:66.666% 0}100%{background-position:100% 0}}
@keyframes ggiPetCrabV852{50%{background-position:25% 0}}
@media(prefers-reduced-motion:reduce){.ggi-island-pet-v852 *{animation:none!important}}

/* v903: the trapped Island Furball is available as a full Familiar. */
.ggi-island-pet-art-v852.furball{width:88px;height:88px;background:transparent url("island-furball-idle-v137.webp") center/contain no-repeat;filter:drop-shadow(0 3px 2px rgba(32,13,38,.34));animation:ggiFurballFamiliarV903 3.2s steps(1,end) infinite}
.ggi-island-pet-v852.furball>.pet-hover{overflow:visible!important}
@keyframes ggiFurballFamiliarV903{0%,68%,100%{background-image:url("island-furball-idle-v137.webp")}70%,76%{background-image:url("island-furball-blink-v137.webp")}80%,92%{background-image:url("island-furball-happy-v137.webp")}}
@media(prefers-reduced-motion:reduce){.ggi-island-pet-art-v852.furball{animation:none!important;background-position:0 0}}

.ggi-island-pet-art-v852.furball{background-size:contain!important;background-position:center!important;background-repeat:no-repeat!important;overflow:hidden!important;transition:none!important}

/* v1004: folded-wing sheet, shared with wild butterfly frames. */
body .ggi-wing-pet-v1004:is(.butterfly,.bloodMoonButterfly){
 display:block!important;width:96px!important;height:100px!important;max-width:100%;
 background-image:url("island-scissorwing-flap-v1005.webp")!important;background-size:800% 100%!important;background-repeat:no-repeat!important;
 animation:ggWingFlapV1004 .704s steps(1,end) infinite!important;transform:none!important;
}
body .ggi-wing-pet-v1004.bloodMoonButterfly{height:64px!important;background-image:url("island-bloodmoon-flap-v1005.webp")!important;animation-duration:.576s!important}
@keyframes ggWingFlapV1004{
 0%,100%{background-position:0% 0}12.5%{background-position:14.285714% 0}25%{background-position:28.571429% 0}
 37.5%{background-position:42.857143% 0}50%{background-position:57.142857% 0}62.5%{background-position:71.428571% 0}
 75%{background-position:85.714286% 0}87.5%{background-position:100% 0}
}
body.j-low-motion-v1000 .ggi-wing-pet-v1004,body.j-low-motion-v1000 .alien-chicken-sprite-v833,body.j-low-motion-v1000 .alien-chicken-glow-v833{animation:none!important;background-position:0 0!important}
@media(prefers-reduced-motion:reduce){body .ggi-wing-pet-v1004{animation:none!important;background-position:0 0!important}}

/* Stop the actual sprite owner, including Room's late-mounted Familiar. */
@media(prefers-reduced-motion:reduce){html body .ggi-wing-pet-v1004:is(.butterfly,.bloodMoonButterfly),html body .alien-chicken-sprite-v833,html body .alien-chicken-glow-v833{animation:none!important;background-position:0 0!important}}
