/* Native GanApp duotone motion. Override --icon-ink / --icon-accent / --icon-surface.
 * Pause with --gan-icon-play-state: paused, .motion-paused, or data-motion="paused".
 * Every static base frame is complete and meaningful when motion is reduced. */
.gan-icon{display:block;flex:none;overflow:visible;color:var(--icon-ink,currentColor)}
.gan-icon .gan-ink{stroke:var(--icon-ink,currentColor)}
.gan-icon .gan-accent{stroke:var(--icon-accent,#f5811e)}
.gan-icon .gan-icon-surface{fill:var(--icon-surface,#1c2541)}
.gan-icon *{animation-play-state:var(--gan-icon-play-state,running)!important}
.gan-icon .gan-tatak-head{animation:gan-tatak-press 2.4s cubic-bezier(.5,0,.5,1) infinite}
.gan-icon .gan-tatak-imprint{stroke-dashoffset:0;animation:gan-tatak-imprint 2.4s linear infinite}
.gan-icon .gan-tatak-spark{opacity:0;animation:gan-tatak-spark 2.4s linear infinite}
.gan-icon .gan-hanapan-corners{animation:gan-hanapan-detect 2.8s linear infinite}
.gan-icon .gan-hanapan-cube{animation:gan-hanapan-float 2.8s cubic-bezier(.5,0,.5,1) infinite}
.gan-icon .gan-mapa-pin{animation:gan-mapa-locate 2.2s infinite}
.gan-icon .gan-alaala-back{transform-origin:9px 10px;transform:rotate(-6deg);animation:gan-alaala-shuffle 3s cubic-bezier(.5,0,.5,1) infinite}
.gan-icon .gan-alaala-landscape{stroke-dashoffset:0;animation:gan-alaala-develop 3s infinite}
.gan-icon .gan-alaala-sun{animation:gan-alaala-sunrise 3s infinite}
.gan-icon .gan-pasok-scan{opacity:0;animation:gan-pasok-scan 3.2s cubic-bezier(.4,0,.2,1) infinite}
.gan-icon .gan-pasok-check{stroke-dashoffset:0;animation:gan-pasok-admit 3.2s ease infinite}
.gan-icon .gan-barkada-link{animation:gan-barkada-connect 4s linear infinite}
.gan-icon .gan-barkada-first{animation:gan-barkada-arrive 3.2s ease-in-out infinite}
.gan-icon .gan-barkada-second{animation:gan-barkada-arrive 3.2s .3s ease-in-out infinite}
.gan-icon .gan-program-beat{transform-origin:12px 18px;animation:gan-program-live 1.8s ease-in-out infinite}
.gan-icon .gan-program-beat-two{animation-delay:-.6s}
.gan-icon .gan-program-beat-three{animation-delay:-1.2s}
.gan-icon .gan-signal-horn{transform-origin:8px 14px;animation:gan-signal-announce 3s ease-in-out infinite}
.gan-icon .gan-signal-wave-one{animation:gan-signal-broadcast 3s linear infinite}
.gan-icon .gan-signal-wave-two{animation:gan-signal-broadcast 3s .2s linear infinite}
.gan-icon .gan-raffle-lid{transform-origin:12px 12px;animation:gan-raffle-reveal 3.6s ease-in-out infinite}
.gan-icon .gan-raffle-confetti{opacity:0;animation:gan-raffle-celebrate 3.6s ease-out infinite}
.gan-icon .gan-raffle-confetti-two{animation-delay:.12s}
.gan-icon .gan-dashboard-live{animation:gan-dashboard-status 2.4s ease-in-out infinite}
.gan-icon .gan-dashboard-bar{transform-origin:12px 17.5px;animation:gan-dashboard-update 3.4s ease-in-out infinite}
.gan-icon .gan-dashboard-bar-two{animation-delay:-.5s}
.gan-icon .gan-dashboard-bar-three{animation-delay:-1s}

@keyframes gan-tatak-press{0%,100%{transform:translateY(-1.2px)}50%{transform:translateY(.6px)}}
@keyframes gan-tatak-imprint{0%,45%,100%{stroke-dashoffset:11}60%,90%{stroke-dashoffset:0}}
@keyframes gan-tatak-spark{0%,45%,75%,100%{opacity:0}55%{opacity:1}}
@keyframes gan-hanapan-detect{0%,100%{opacity:1}50%{opacity:.45}}
@keyframes gan-hanapan-float{0%,100%{transform:translateY(.8px)}50%{transform:translateY(-.8px)}}
@keyframes gan-mapa-locate{0%{transform:translateY(0);animation-timing-function:cubic-bezier(.3,0,.5,1)}25%{transform:translateY(-1.6px);animation-timing-function:cubic-bezier(.5,0,.7,1)}50%,100%{transform:translateY(0)}}
@keyframes gan-alaala-shuffle{0%,100%{transform:rotate(-6deg)}50%{transform:rotate(-12deg)}}
@keyframes gan-alaala-develop{0%{stroke-dashoffset:13;animation-timing-function:cubic-bezier(.4,0,.2,1)}35%{stroke-dashoffset:0}85%{stroke-dashoffset:0;animation-timing-function:cubic-bezier(.4,0,1,1)}100%{stroke-dashoffset:13}}
@keyframes gan-alaala-sunrise{0%{transform:translateY(1.9px);opacity:0;animation-timing-function:cubic-bezier(.3,0,.2,1)}35%,40%,85%{transform:translateY(0);opacity:1}100%{transform:translateY(1.9px);opacity:0}}
@keyframes gan-pasok-scan{0%,8%{transform:translateY(0);opacity:0}15%{opacity:1}52%{transform:translateY(9px);opacity:1}60%,100%{transform:translateY(9px);opacity:0}}
@keyframes gan-pasok-admit{0%,52%{stroke-dashoffset:8;opacity:0}65%,90%{stroke-dashoffset:0;opacity:1}100%{stroke-dashoffset:0;opacity:0}}
@keyframes gan-barkada-connect{to{stroke-dashoffset:-10}}
@keyframes gan-barkada-arrive{0%,50%,100%{transform:translateY(0)}25%{transform:translateY(-1.2px)}}
@keyframes gan-program-live{0%,100%{transform:scaleY(.65)}50%{transform:scaleY(1)}}
@keyframes gan-signal-announce{0%,15%,45%,100%{transform:rotate(0)}25%{transform:rotate(-4deg)}35%{transform:rotate(3deg)}}
@keyframes gan-signal-broadcast{0%,15%,70%,100%{opacity:.3}30%,45%{opacity:1}}
@keyframes gan-raffle-reveal{0%,15%,65%,100%{transform:translateY(0) rotate(0)}30%{transform:translateY(-1.8px) rotate(-4deg)}45%{transform:translateY(-1.8px) rotate(3deg)}}
@keyframes gan-raffle-celebrate{0%,24%,70%,100%{opacity:0;transform:translateY(1px)}32%,45%{opacity:1;transform:translateY(-.8px)}60%{opacity:0;transform:translateY(-1.5px)}}
@keyframes gan-dashboard-status{0%,100%{opacity:1}50%{opacity:.35}}
@keyframes gan-dashboard-update{0%,100%{transform:scaleY(1)}30%{transform:scaleY(.45)}60%{transform:scaleY(.8)}}

[data-motion="paused"] .gan-icon *, .motion-paused .gan-icon *, .gan-icon[data-motion="paused"] *{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.gan-icon *{animation:none!important}}
