/* ==========================================================================
   Nice B2B — movimento
   Solo transform e opacity, 150–400 ms, easing morbido. Tutto spento con
   prefers-reduced-motion. Gli stati aperti/chiusi li gestisce core.js con
   [hidden] + .is-open (vedi Nice.open / Nice.close).
   ========================================================================== */

/* Comparsa allo scroll: solo se il JS è attivo (html.js) */
.js [data-reveal] { opacity: 0; transform: translateY(12px); transition: opacity 500ms var(--ease), transform 600ms var(--ease); transition-delay: var(--reveal-delay, 0ms); }
.js [data-reveal].is-revealed, .js [data-reveal].is-visible { opacity: 1; transform: none; }
/* Le barre dentro una sezione si riempiono quando la sezione compare */
.js [data-reveal]:not(.is-revealed):not(.is-visible) .n-progress__bar, .js [data-reveal]:not(.is-revealed):not(.is-visible) .n-minbar__fill { transform: scaleX(0); }
.n-minbar.is-changing { animation: n-flash 500ms var(--ease); }

/* Pannelli a comparsa: dropdown, suggerimenti di ricerca */
[data-panel] { opacity: 0; transform: translateY(-6px) scale(.98); transform-origin: top center; transition: opacity var(--dur-2) var(--ease), transform var(--dur-2) var(--ease); }
[data-panel].is-open { opacity: 1; transform: none; }
.n-dropdown__panel--right[data-panel] { transform-origin: top right; }

/* Overlay: velo + finestra / sheet / drawer */
.n-overlay { opacity: 0; transition: opacity var(--dur-2) var(--ease); }
.n-overlay.is-open { opacity: 1; }
.n-overlay .n-modal { transform: translateY(10px) scale(.97); transition: transform 320ms var(--ease); }
.n-overlay.is-open .n-modal { transform: none; }
.n-overlay .n-sheet { transform: translateY(100%); transition: transform 360ms var(--ease); }
.n-overlay.is-open .n-sheet { transform: none; }
.n-overlay .n-drawer { transform: translateX(-100%); transition: transform 340ms var(--ease); }
.n-overlay.is-open .n-drawer { transform: none; }

/* Toast */
.n-toast { opacity: 0; transform: translateY(12px) scale(.98); transition: opacity var(--dur-2) var(--ease), transform 300ms var(--ease); }
.n-toast.is-in { opacity: 1; transform: none; }

/* Banner cookie */
.n-cookie { animation: n-rise 420ms var(--ease) both; }
.n-cookie.is-leaving { opacity: 0; transform: translateY(16px); transition: opacity var(--dur-2) var(--ease), transform var(--dur-2) var(--ease); }

/* Badge del carrello che rimbalza */
.n-count.is-bump { animation: n-bump 420ms var(--ease); }
/* Numero che cambia (totali) */
.is-flash { animation: n-flash 500ms var(--ease); }

@keyframes n-bump { 0% { transform: scale(1); } 35% { transform: scale(1.4); } 70% { transform: scale(.92); } 100% { transform: scale(1); } }
@keyframes n-flash { 0% { opacity: .35; transform: translateY(3px); } 100% { opacity: 1; transform: none; } }
@keyframes n-spin { to { transform: rotate(360deg); } }
@keyframes n-shimmer { to { transform: translateX(100%); } }
@keyframes n-shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-4px); } 75% { transform: translateX(4px); } }
@keyframes n-rise { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: none; } }
@keyframes n-pop { 0% { transform: scale(.6); opacity: 0; } 60% { transform: scale(1.08); opacity: 1; } 100% { transform: scale(1); } }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; transition-delay: 0ms !important; scroll-behavior: auto !important; }
  .js [data-reveal] { opacity: 1; transform: none; }
  .n-card:hover, .n-line-tile:hover { transform: none; }
  .n-card:hover .n-card__media img { transform: none; }
}
