/* Accent motion. Everything plays once (or on a user action), never loops forever. No JS libraries. */
@keyframes gg-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-6px)}}
@keyframes gg-blink{0%,92%,100%{transform:scaleY(1)}96%{transform:scaleY(.1)}}
@keyframes gg-sway{0%,100%{transform:rotate(0)}30%{transform:rotate(5deg)}65%{transform:rotate(-3deg)}}
@keyframes gg-wipe{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0 0 0 0)}}
@keyframes gg-ribbon{0%,100%{transform:skewY(0)}40%{transform:skewY(-.5deg)}75%{transform:skewY(.25deg)}}
@keyframes gg-wave{0%,100%{transform:rotate(0)}25%{transform:rotate(-8deg)}50%{transform:rotate(6deg)}75%{transform:rotate(-4deg)}}
@keyframes gg-rise{from{transform:translateY(12px);opacity:0}to{transform:none;opacity:1}}
.gg-biscuit-bob{animation:gg-bob 2.4s ease-in-out .4s 2 both}  /* two gentle bobs on load, then still */
.gg-wheat-sway{transform-origin:50% 100%;animation:gg-sway 2.6s ease-in-out 1s 1 both}
.gg-gingham-wipe{animation:gg-wipe 1.1s var(--gg-ease) .2s 1 both}
/* ribbon dividers sway once as they scroll into view (scroll-driven; no-op where unsupported) */
@supports (animation-timeline:view()){.gg-ribbon{animation:gg-ribbon linear both;animation-timeline:view();animation-range:entry 0% cover 45%}}
/* Biscuit peeks up behind the sign-up button on hover/focus */
.gg-peek{position:relative}.gg-peek img.gg-peeker{position:absolute;left:50%;bottom:62%;width:92px;transform:translate(-50%,70%);opacity:0;transition:transform .45s var(--gg-ease),opacity .3s;pointer-events:none;z-index:-1}
.gg-peek:hover img.gg-peeker,.gg-peek:focus-within img.gg-peeker{transform:translate(-50%,0);opacity:1}
/* waves after someone joins (form gets .is-joined or :target #joined) */
.gg-joined-wave{display:none}.is-joined .gg-joined-wave,#joined:target .gg-joined-wave{display:block;animation:gg-rise .5s var(--gg-ease) 1 both}
.is-joined .gg-joined-wave img,#joined:target .gg-joined-wave img{transform-origin:70% 90%;animation:gg-wave 1.4s ease-in-out .4s 1 both}
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  .gg-peek:hover img.gg-peeker,.gg-peek:focus-within img.gg-peeker{opacity:1;transform:translate(-50%,0)}
  .gg-gingham-wipe{clip-path:none}
}
