Aller au contenu

Styliser le widget

Chaque élément public du widget a une classe .opini-* stable. Collez votre CSS dans le champ CSS personnalisé du tableau de bord : il est placé dans le shadow root du widget et ne touche que le widget, jamais votre page.

Sélecteurs

Ciblez ces classes dans votre CSS. Le contrat est stable entre versions mineures : nous ajoutons des classes, mais n'en renommons ni n'en supprimons jamais sans version majeure.

ÉlémentClasseNotes
Bouton d'ouverture.opini-triggerLa pastille qui flotte dans le coin.
Logo du bouton.opini-trigger-markLe logo Opini à gauche du libellé. Désactivable dans les réglages du widget.
Lien « Powered by ».opini-poweredLe petit lien « Powered by Opini ». Désactivable dans les réglages du widget.
Bouton bulle.opini-bubbleAjouté au bouton quand sa forme est Bulle.
Forme de la bulle.opini-bubble-shapeLa bulle elle-même. Sa couleur est le fond.
Pupille de la bulle.opini-bubble-pupilLe point dans la bulle.
Libellé de la bulle.opini-trigger-labelLe libellé qui apparaît à côté de la bulle au survol.
Conteneur du popover.opini-popoverTout le panneau de feedback. Une feuille en bas de l'écran sur mobile.
En-tête.opini-headL'icône, le titre, le sous-titre et le bouton fermer.
Icône de l'en-tête.opini-tileLe carré teinté avec le logo Opini.
Bouton fermer.opini-closeLe × dans le coin du popover.
Titre du formulaire.opini-titleLe grand texte en haut.
Sous-titre du formulaire.opini-subLa ligne plus petite sous le titre.
Formulaire.opini-formL'élément <form> qui entoure tous les champs.
Zone de message.opini-messageLà où le visiteur écrit son retour.
Champ nom.opini-nameChamp nom. Obligatoire, masqué quand vous identifiez l'utilisateur.
Champ e-mail.opini-emailChamp e-mail. Obligatoire, masqué quand vous identifiez l'utilisateur.
Ligne de champ.opini-fieldUne ligne : le libellé à gauche, le champ à droite.
Lignes nom et e-mail.opini-rowEntoure les lignes nom et e-mail. Masquez-le et les deux deviennent facultatifs.
Libellé de ligne.opini-field-labelLe libellé dans une ligne.
Ligne en erreur.opini-field.opini-invalidUne ligne dont le champ est à corriger.
Erreur de champ.opini-errLe message sous un champ à corriger.
Zone de pièce jointe.opini-attach-regionLa partie gauche du pied. Les visiteurs peuvent aussi coller ou déposer une image n'importe où sur le panneau.
Lien de pièce jointe.opini-attach-btnLe lien « + Joindre une image » affiché avant le choix d'une image.
Aperçu de la pièce jointe.opini-attach-previewLa ligne miniature + nom de fichier affichée après le choix d'une image.
Miniature de la pièce jointe.opini-attach-thumbLe petit aperçu dans la ligne de l'image choisie.
Bouton retirer l'image.opini-attach-removeLe × qui retire l'image choisie pour en choisir une autre.
Erreur d'envoi.opini-msgAffiché au-dessus du pied quand l'envoi échoue.
Variante d'erreur.opini-msg.opini-msg-errComme ci-dessus, mais seulement quand une erreur s'affiche.
Pied.opini-footLa ligne du bas avec le lien de pièce jointe et le bouton envoyer.
Bouton envoyer.opini-submitLe bouton envoyer.
État de réussite.opini-successRemplace le formulaire après un envoi réussi.
Coche de réussite.opini-checkLa grande coche de l'état de réussite.
Titre de réussite.opini-thanksLe titre de remerciement.

Les anciens noms courts (.trigger, .popover, …) restent disponibles à côté des classes préfixées pendant une version mineure. Passez au contrat .opini-* dès maintenant : les alias disparaîtront à la version suivante.

Où le coller

Ouvrez Paramètres → Widget de votre projet, dépliez CSS personnalisé (avancé) et collez votre feuille de style dans le champ. Enregistrez : le prochain chargement de page sur votre site la prend en compte. Le CSS est injecté dans le shadow root du widget après la feuille de style intégrée, l'ordre suffit donc à surcharger n'importe quelle règle. Pas de surenchère de !important.

Le Shadow DOM limite la portée : votre CSS cible le widget et rien d'autre sur la page.

Exemples

Trois points de départ à copier-coller. Chacun se colle tel quel dans le champ CSS personnalisé.

Fenêtre centrée

Placez le popover au milieu de l'écran au lieu de l'ancrer au coin du bouton.

css
/* Centered modal — drop the corner anchor and put the popover
   in the middle of the screen. */
.opini-popover {
  top: 50%;
  left: 50%;
  bottom: auto;
  right: auto;
  transform: translate(-50%, -50%);
  width: min(440px, calc(100vw - 24px));
  border-radius: 20px;
}
.opini-trigger {
  background: #111827;
  color: #f9fafb;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

Éditorial sombre

Titre à empattements, bordure fine, accent bordeaux. À associer à widget_theme = "dark".

css
/* Dark editorial — serif headline, hairline border, oxblood
   accent. Pair with widget_theme = "dark" in Settings. */
.opini-popover {
  background: #0b0b0d;
  border: 1px solid #1f1f24;
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.55);
}
.opini-title {
  font-family: "Playfair Display", "Georgia", serif;
  font-weight: 600;
  font-size: 22px;
  letter-spacing: -0.02em;
}
.opini-sub { color: #8b8b95; font-style: italic; }
.opini-submit {
  background-image: none !important;
  background: #7c1d2a;
  border-radius: 4px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.opini-submit:hover { background: #92242f; }

Notification compacte

Réduisez le bouton à un cercle et le popover à un champ compact, pour les sites où le feedback est une remarque rapide.

css
/* Slim corner toast — hide the header, shrink the popover,
   and turn the launcher into a single ▸ character. */
.opini-popover {
  width: 320px;
  border-radius: 14px;
}
.opini-head { display: none; }
.opini-message { min-height: 64px; }
.opini-trigger {
  width: 36px;
  height: 36px;
  padding: 0;
  border-radius: 999px;
  font-size: 0;
}
.opini-trigger::before {
  content: "▸";
  font-size: 18px;
  line-height: 1;
}

Limites

  • Jusqu'à 32 Ko de CSS par projet.
  • </style et <script sont refusés (ils sortiraient de la balise <style> injectée).
  • Les octets NUL sont refusés.
  • Polices personnalisées : faites un @import d'une URL Google Fonts dans votre CSS ; le widget les charge depuis le navigateur du visiteur. Opini n'héberge pas de fichiers de police.
  • Nous n'analysons pas le CSS : un CSS invalide ne s'applique simplement pas, comme partout.