Atmosphère✨ Premium

Success Celebration

Cercle SVG tracé depuis 12 h, coche dessinée, deux halos pulsants et burst Canvas 2D en anneau — toast compact ou modale complète, séquence rejoutable.

SVG AnimationCanvas 2DConfirmationCelebration

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Atmosphère comprend 57 effets, dont 10 gratuits. Découvrir la catégorie →

3 exemples d'usage

Hero / Landing — Modale de paiement confirmé — Success Celebration exemple 1

① Hero / Landing — Modale de paiement confirmé

QuandLa page de résultat Stripe redirige l'utilisateur après un checkout réussi — abonnement SaaS, achat unique, accès premium activé.
PourquoiL'orchestration visuelle (cercle → coche → halos → burst → montant) déroule une confirmation crédible qui rassure sur l'irréversibilité du paiement ; le stagger texte donne le temps de lire chaque information.
RéglagesMode complet (sans data-size), --scb-accent: #2dd4bf, texte montant visible (.scb-amount avec le prix payé), data-auto-replay absent — séquence jouée une seule fois à l'entrée de la page.
Composant produit — Toast de sauvegarde dashboard — Success Celebration exemple 2

② Composant produit — Toast de sauvegarde dashboard

QuandL'utilisateur enregistre ses paramètres, finalise un formulaire long ou soumet un rapport dans un outil SaaS — le toast apparaît en bas-droite sans bloquer l'interface.
PourquoiLe mode compact (<code>data-size="compact"</code>, 26 particules, carte 180 px min) occupe peu d'espace et disparaît de lui-même grâce à l'auto-replay réglé sur un délai suffisamment long ; l'accent teal cadre avec les design systems modernes.
Réglagesdata-size="compact", data-auto-replay="0" (désactivé — joué une fois), --scb-accent: #6366f1 pour une couleur brand indigo, titre .scb-title seul (pas de montant).
Micro-interaction de conversion — Fin d'onboarding SaaS — Success Celebration exemple 3

③ Micro-interaction de conversion — Fin d'onboarding SaaS

QuandL'utilisateur vient de compléter les 3 ou 5 étapes d'activation produit (import, connexion, premier projet) — l'écran de félicitations clôt le wizard avant la redirection vers le dashboard.
PourquoiLa coche dessinée progressivement renforce la complétion perçue et réduit l'abandon post-inscription ; déclencher <code>root.__scb.play()</code> à l'entrée en viewport (via IntersectionObserver) évite de lancer l'animation hors champ.
RéglagesMode complet, --scb-accent: #10b981 (emerald — couleur de succès universelle), titre « Onboarding terminé ! », sous-titre « Votre compte est actif », CTA « Aller sur le tableau de bord » — aucun montant affiché.

Comment ça marche

La séquence démarre quand la classe .scb-run est ajoutée au .scb-root : le cercle SVG se trace depuis 12 h grâce au couple stroke-dasharray / stroke-dashoffset (214 → 0 sur 0,52 s, cubic-bezier(0.4,0,0.2,1)) ; le groupe SVG est pivoté de −90° pour que le tracé parte du haut. La coche suit 0,46 s plus tard, stroke-dashoffset 50 → 0 en 0,3 s, ease-out — l'effet de « plume qui dessine » est obtenu avec une seule ligne CSS sans bibliothèque tiers.

Deux <div> empilés dans .scb-svg-wrap jouent les halos pulsants : border-radius: 50%; border: 2px solid var(--scb-accent), animation scb-halo-pulse (opacity 0,68 → 0, scale 1 → 2,7). Le premier part à 0,62 s, le second à 0,94 s — l'écart temporel donne la sensation de double onde sans JS.

Au bout de 100 ms, burst(root) tire le burst Canvas 2D : n particules (26 en mode compact, 36 en mode complet) placées en anneau (angle = (i/n)×2π + jitter ±0,1 rad). Chaque particule reçoit une vitesse radiale (80–130 px/s compact, 115–165 px/s complet), une couleur parmi six (teal, blanc, vert, jaune, violet, rose), et 32 % d'entre elles sont des étoiles à 4 branches tracées au canvas. La physique applique une gravité 80 px/s² et une rotation par particule. L'opacité reste à 1,0 les 25 premières % de la durée (1 200 ms), puis descend linéairement à 0 — ce plateau évite le fondu brutal au pic d'animation.

Les textes (.scb-title, .scb-amount, .scb-sub, boutons) apparaissent en stagger CSS : chaque élément part de opacity:0; translateY(6px) avec un délai progressif (0,76 s à 1,45 s) — aucun JS pour l'orchestration du texte. La rejoue est instantanée : play() retire .scb-run, force un reflow via void root.offsetWidth, puis re-pose la classe pour réinitialiser toutes les animations CSS.

Accessibilité

  • prefers-reduced-motion : géré sur deux niveaux — CSS (@media (prefers-reduced-motion: reduce)) coupe toutes les animations et affiche coche + texte instantanément ; JS vérifie window.matchMedia et sort de burst() sans lancer le canvas. Zéro particule en mode réduit.
  • Le .scb-root porte role="status" et aria-live="polite" : un lecteur d'écran annonce la confirmation au moment de la replay sans interrompre la navigation.
  • Le canvas reçoit aria-hidden="true" — le burst est purement décoratif et invisible aux AT.
  • Le bouton .scb-btn-continue (mode complet) reste focusable au clavier ; son style :focus-visible utilise un outline de la couleur d'accent (var(--scb-accent)) avec outline-offset: 2px.
  • Ratio de contraste : texte blanc sur fond de carte #18181b (mode compact) et #111116 (mode complet) ≥ 16:1 — largement WCAG AA. Le CTA texte sombre (--scb-on-accent: #0a0a0f) sur fond teal (#2dd4bf) ≥ 7:1.

Compatibilité navigateur

Nécessite CSS Animations (stroke-dashoffset), Canvas 2D et requestAnimationFrame. Le cercle SVG et la coche fonctionnent sans canvas — le burst est la seule partie qui requiert Canvas 2D.

Chrome 110+✓ Complet
Firefox 110+✓ Complet
Safari 16+✓ Complet
Edge 110+✓ Complet
Mobile iOS✓ Complet
Android Chrome✓ Complet

Sans Canvas 2D, le burst est silencieusement ignoré ; le cercle SVG, la coche, les halos et les textes s'animent normalement. Sans support CSS Animations (IE11), les éléments restent visibles à l'état final (les propriétés CSS cibles sont déclarées hors animation).

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="scb-root" data-size="compact" data-auto-replay="4000"
     role="status" aria-live="polite" aria-label="Toast de confirmation animé">

  <!-- Canvas burst particules (z=0) -->
  <canvas class="scb-canvas" aria-hidden="true"></canvas>

  <!-- Carte visible (z=2) -->
  <div class="scb-scene">

    <!-- Icône : enveloppe SVG + halos -->
    <div class="scb-svg-wrap" aria-hidden="true">
      <div class="scb-halo"></div>
      <div class="scb-halo"></div>
      <svg class="scb-svg" viewBox="0 0 80 80">
        <g class="scb-ring-group">
          <circle class="scb-ring-track" cx="40" cy="40" r="34"/>
          <circle class="scb-ring-draw"  cx="40" cy="40" r="34"/>
        </g>
        <path class="scb-check" d="M24,40 L34,52 L56,28"/>
      </svg>
    </div>

    <!-- Texte principal -->
    <p class="scb-title">Sauvegardé</p>

    <!-- Mode complet uniquement : montant + sous-titre + boutons -->
    <!-- <p class="scb-amount">29,90 €</p> -->
    <!-- <p class="scb-sub">Plan Pro activé · Merci !</p> -->
    <!-- <hr class="scb-divider"> -->
    <!-- <button class="scb-btn-continue">Continuer</button> -->
    <!-- <button class="scb-btn-replay">Rejouer</button> -->
  </div>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
--scb-accent #2dd4bf Couleur principale : ring SVG, halos, outline focus et première couleur du burst. Changez-la sur .scb-root pour adapter à votre brand sans toucher au JS.
data-size="compact" absent (mode complet) Active le mode toast (n=26 particules, vitesse burst 80–130 px/s, carte 180 px min, padding 22/28 px). Sans l'attribut : modale complète (36 particules, 115–165 px/s, carte 300 px, avec .scb-amount et .scb-btn-continue).
data-auto-replay absent (pas de replay) Intervalle en ms entre deux replays automatiques. data-auto-replay="4000" rejoue toutes les 4 s — utile en démo ou vitrine. Omettez l'attribut (ou mettez 0) pour une séquence unique.
root.__scb.play() API publique exposée sur chaque instance : déclenche un replay immédiat depuis votre code métier. Exemple après une confirmation Stripe côté front : document.querySelector('.scb-root').__scb.play().
COLORS (JS, ligne var COLORS) ['#2dd4bf','#ffffff','#86efac','#fde047','#a78bfa','#f472b6'] Palette des particules canvas. Éditez le tableau dans le JS copié pour remplacer la couleur teal et les tons pastel par votre palette brand.
DUR (JS, ligne var DUR) 1200 Durée du burst en millisecondes. Réduisez à 800 pour un burst vif, montez à 1800 pour un effet traînant.
.scb-title (innerHTML) "Sauvegardé" Texte du titre affiché dans la carte — modifiez directement le HTML : « Paiement confirmé », « Inscription réussie », etc.

FAQ

Oui. L'init parcourt document.querySelectorAll('.scb-root') et attache une API __scb indépendante à chaque instance. Chaque .scb-root a son propre canvas et son propre cycle d'animation — ils ne partagent aucun état global. Utilisez des ids différents si vous devez cibler un élément précis depuis votre JS.
L'effet s'initialise à DOMContentLoaded et expose el.__scb.play() sur le DOM node. Dans React, appelez play() depuis un useEffect sur la condition métier (ex. status === 'success') et non au montage — le composant peut se re-rendre sans déclencher de replay parasite. Le canvas reste dans le DOM et le RAF ne tourne pas hors de .scb-run.
Depuis 12 h pile. Le groupe .scb-ring-group applique transform: rotate(-90deg) sur son transform-origin: 40px 40px (centre du viewBox 80×80). Sans cette rotation, le tracé CSS SVG part du point 3 h (angle 0 rad) — le −90° le ramène au sommet. Le tracé progresse ensuite dans le sens horaire jusqu'à boucler.