/*
  Styles volontairement simples.
  Le but de l'exemple n'est pas de créer une interface bancaire réaliste,
  mais de rendre le composant assez lisible pour analyser son fonctionnement.
*/

body {
  font-family: system-ui, sans-serif;
  margin: 2rem;
  line-height: 1.5;
}

/*
  Largeur limitée pour garder le pavé compact.
  Cela rapproche l'exemple d'un petit module de saisie plutôt que d'une page complète.
*/
.pin-component {
  max-width: 22rem;
}

.pin-help {
  margin-bottom: 1rem;
}

/*
  Les pastilles indiquent uniquement la progression.
  Elles ne révèlent pas les chiffres saisis.
*/
.pin-display {
  display: flex;
  gap: 0.5rem;
  margin-bottom: 1rem;
}

/*
  Pastille vide : aucun chiffre n'est encore saisi à cette position.
*/
.dot {
  width: 0.85rem;
  height: 0.85rem;
  border: 2px solid currentColor;
  border-radius: 50%;
}

/*
  Pastille remplie : un chiffre a été sélectionné.
  Attention : ce masquage est visuel. Il ne protège pas la valeur en mémoire côté client.
*/
.dot.is-filled {
  background: currentColor;
}

/*
  Affichage du clavier sous forme de grille.
  Les chiffres seront injectés par JavaScript dans ce conteneur.
*/
.pin-pad {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 0.75rem;
  margin-bottom: 1rem;
}

/*
  Boutons assez grands pour être cliquables facilement.
  Une bonne ergonomie réduit les erreurs de saisie, mais ne remplace pas les contrôles serveur.
*/
.pin-pad button,
.pin-actions button {
  min-height: 3rem;
  font-size: 1.2rem;
  cursor: pointer;
}

/*
  Les boutons d'action sont placés sur une même ligne.
*/
.pin-actions {
  display: flex;
  gap: 0.75rem;
  margin-bottom: 1rem;
}

/*
  Le message final est mis en évidence.
  Dans une vraie application, on éviterait de donner trop de détails en cas d'échec.
*/
.pin-result {
  font-weight: 700;
}