/* Animations des icônes (reprises de la maquette) */
@keyframes gFloat { 0%, 100% { transform: translateY(0) } 50% { transform: translateY(-3px) } }
@keyframes gDrive { 0%, 100% { transform: translate(0, 0) } 12% { transform: translate(-1.5px, 0) } 40% { transform: translate(3px, -.6px) } 55% { transform: translate(3px, 0) } 70% { transform: translate(0, 0) } }
@keyframes gRing { 0%, 58%, 100% { transform: rotate(0) } 62% { transform: rotate(16deg) } 66% { transform: rotate(-14deg) } 70% { transform: rotate(10deg) } 74% { transform: rotate(-7deg) } 78% { transform: rotate(3deg) } 82% { transform: rotate(0) } }
@keyframes gSpin { to { transform: rotate(360deg) } }
@keyframes gSpinBack { 0%, 70% { transform: rotate(0) } 100% { transform: rotate(-360deg) } }
@keyframes gWig { 0%, 68%, 100% { transform: rotate(0) } 72% { transform: rotate(-13deg) } 78% { transform: rotate(11deg) } 84% { transform: rotate(-7deg) } 90% { transform: rotate(4deg) } 95% { transform: rotate(0) } }
@keyframes gPulse { 0%, 100% { transform: scale(1) } 50% { transform: scale(1.13) } }
@keyframes gFlip { 0%, 40% { transform: rotate(0) } 50%, 90% { transform: rotate(180deg) } 100% { transform: rotate(360deg) } }
@keyframes gBlink { 0%, 88%, 100% { transform: scaleY(1) } 93% { transform: scaleY(.1) } }
@keyframes gFlicker { 0%, 78%, 100% { opacity: 1; transform: scale(1) } 81% { opacity: .3 } 84% { opacity: 1; transform: scale(1.15) } 87% { opacity: .45 } 90% { opacity: 1; transform: scale(1) } }
@keyframes gPop { 0%, 76%, 100% { transform: scale(1) } 84% { transform: scale(1.22) } 91% { transform: scale(.94) } }
@keyframes gAlert { 0%, 100% { transform: scale(1); opacity: 1 } 50% { transform: scale(1.12); opacity: .55 } }
@keyframes gNudge { 0%, 100% { transform: translateX(0) } 50% { transform: translateX(2px) } }
@keyframes gJelly { 0% { transform: scale(1) } 30% { transform: scale(1.28, .8) } 50% { transform: scale(.86, 1.14) } 70% { transform: scale(1.08, .95) } 100% { transform: scale(1) } }
@keyframes gWigOnce { 0%, 100% { transform: rotate(0) scale(1) } 25% { transform: rotate(-14deg) scale(1.18) } 55% { transform: rotate(10deg) scale(1.18) } 80% { transform: rotate(-4deg) scale(1.08) } }
@keyframes gPing { 0% { box-shadow: 0 0 0 0 currentColor } 75%, 100% { box-shadow: 0 0 0 7px rgba(255, 255, 255, 0) } }
@keyframes gBar { from { width: 0 } }
@keyframes gDraw { 0% { stroke-dashoffset: 1200 } 38%, 100% { stroke-dashoffset: 0 } }
@keyframes gAreaIn { 0%, 12% { opacity: 0 } 40%, 100% { opacity: 1 } }
@keyframes gDonutIn { from { transform: rotate(-140deg) scale(.6); opacity: 0 } to { transform: rotate(0) scale(1); opacity: 1 } }
@keyframes gSheen { 0% { transform: translateX(-160%) skewX(-20deg) } 22%, 100% { transform: translateX(420%) skewX(-20deg) } }
@keyframes gLogoSheen { 0%, 70% { transform: translateX(-40px) skewX(-20deg) } 100% { transform: translateX(150px) skewX(-20deg) } }
@keyframes gArrow { 0%, 100% { transform: rotate(45deg) scale(1); filter: brightness(1) } 50% { transform: rotate(45deg) scale(1.35); filter: brightness(1.5) } }
@keyframes gRise { from { opacity: 0; transform: translateY(10px) } to { opacity: 1; transform: translateY(0) } }

.gi { transform-origin: 50% 50%; flex-shrink: 0; }
.g-float { animation: gFloat 2.8s ease-in-out infinite }
.g-drive { animation: gDrive 3s ease-in-out infinite }
.g-ring { animation: gRing 4s ease-in-out infinite; transform-origin: 50% 10% }
.g-spin { animation: gSpin 3.2s linear infinite }
.g-spin-slow { animation: gSpin 6s linear infinite }
.g-spin-fast { animation: gSpin 1.3s linear infinite }
.g-spin-back { animation: gSpinBack 5s ease-in-out infinite }
.g-wig { animation: gWig 3.6s ease-in-out infinite }
.g-pulse { animation: gPulse 2.4s ease-in-out infinite }
.g-flip { animation: gFlip 3.2s ease-in-out infinite }
.g-blink { animation: gBlink 4s ease-in-out infinite }
.g-flicker { animation: gFlicker 3s linear infinite }
.g-pop { animation: gPop 3s ease-out infinite }
.g-alert { animation: gAlert 1.6s ease-in-out infinite }
.g-nudge { animation: gNudge 1.8s ease-in-out infinite }
.g-ping { animation: gPing 1.9s ease-out infinite }
.g-bar { animation: gBar 1.8s cubic-bezier(.2, .8, .2, 1) both }
.g-draw { stroke-dasharray: 1200; animation: gDraw 7s ease-in-out infinite }
.g-area { animation: gAreaIn 7s ease-in-out infinite }
.g-donut { animation: gDonutIn 1.3s cubic-bezier(.2, .8, .2, 1) both }
.g-sheen { animation: gSheen 5.5s ease-in-out infinite }
.g-logo-sheen { position: absolute; top: 0; bottom: 0; left: 0; width: 30px; pointer-events: none; background: linear-gradient(90deg, rgba(255, 255, 255, 0), rgba(255, 255, 255, .55), rgba(255, 255, 255, 0)); animation: gLogoSheen 6s ease-in-out infinite }
.g-arrow { animation: gArrow 2.2s ease-in-out infinite }
.g-rise { animation: gRise .5s cubic-bezier(.2, .8, .2, 1) both }
.g-svgpulse { transform-box: fill-box; transform-origin: center; animation: gPulse 1.6s ease-in-out infinite }

.nav-link:hover .gi { animation: gWigOnce .6s ease both; animation-delay: 0s !important }
button:hover > .gi, a:hover > .gi { animation: gJelly .55s ease both; animation-delay: 0s !important }
.g-card { transition: transform .25s ease }
.g-card:hover { transform: translateY(-3px) }
.g-card:hover .gi { animation: gJelly .55s ease both; animation-delay: 0s !important }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important }
}
