/*
 * Jeux (jeux.php) : catalogue des jeux, et le mot du jour (grille des essais, clavier, légende, fin de partie,
 * statistiques). Version du lien : MDJ_V (static/php/mot_du_jour_fonctions.php), à changer à chaque modification.
 *
 * Reprend static/css/sutom.css. Le script static/js/mot_du_jour.js construit la grille et le clavier, et pose les états :
 * data-etat (bien, mal, absent) sur une case ou une touche, data-ligne (jouee, en_cours, a_venir) sur une ligne,
 * data-partie (en_cours, gagne, perdu) sur le jeu. Les couleurs du jeu sont réunies ici ; boutons, gris et police viennent
 * du thème, qui les change la nuit.
 */

.mdj,
.mdj_legende,
.mdj_stats {
  --mdj-bleu: #2c7be5;            /* une case : le bleu du thème */
  --mdj-vert: #17a35c;            /* lettre bien placée */
  --mdj-jaune: #f8c630;           /* lettre mal placée : un rond dans la case */
  --mdj-encre-jaune: #0b1727;
}


/* --- Catalogue des jeux ------------------------------------------------------------------------------------------- */

/* Deux colonnes (demande d'Adrien du 2026-10-23), une seule sur un téléphone */
.jeux_catalogue {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 1rem;
  padding: .5rem 0 1rem;
}

@media (min-width: 768px) {
  .jeux_catalogue {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

/* Une carte : l'image du jeu en haut quand elle existe (a_image), puis une ligne : l'icône (sans image), le texte, la flèche */
.jeux_carte {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border: 1px solid var(--falcon-border-color);
  border-radius: .75rem;
  color: var(--falcon-gray-900);
  text-decoration: none;
  transition: border-color .15s, box-shadow .15s;
}

.jeux_carte_ligne {
  display: flex;
  align-items: center;
  gap: 1rem;
  padding: 1rem 1.25rem;
}

.jeux_carte_visuel {
  position: relative;
  display: block;
  aspect-ratio: 1200 / 630;
  border-bottom: 1px solid var(--falcon-border-color);
  background-color: #eef4fd;
}

.jeux_carte_visuel img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.jeux_tag {
  font-size: .7rem;
  font-weight: 600;
  vertical-align: middle;
}

/* Étiquettes (difficulté) dans le coin en haut à droite de l'image */
.jeux_carte_tags {
  position: absolute;
  top: .75rem;
  right: .75rem;
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: .35rem;
}

.jeux_carte_tags .jeux_tag {
  padding: .4em .8em;
  font-size: .75rem;
  box-shadow: 0 .125rem .5rem rgba(11, 23, 39, .18);
}

.jeux_carte:hover,
.jeux_carte:focus-visible {
  border-color: var(--falcon-primary);
  box-shadow: 0 .25rem 1rem rgba(44, 123, 229, .12);
  color: var(--falcon-gray-900);
  text-decoration: none;
}

.jeux_carte.est_ferme {
  opacity: .6;
}

.jeux_carte_icone {
  display: flex;
  flex: none;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  border-radius: .75rem;
  background-color: var(--falcon-primary-bg-subtle, #e5efff);
  color: var(--falcon-primary);
  font-size: 1.35rem;
}

.jeux_carte_corps {
  display: flex;
  flex: 1;
  flex-direction: column;
  min-width: 0;
}

/* Ligne du titre : le nom du jeu à gauche, le numéro de la partie au bout, à droite */
.jeux_carte_titre {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: .75rem;
  font-weight: 600;
  font-size: 1.05rem;
}

.jeux_carte_nom {
  min-width: 0;
}

.jeux_carte_numero {
  flex: none;
  color: var(--falcon-gray-500);
  font-weight: 400;
  font-size: .85rem;
}

.jeux_carte_texte {
  color: var(--falcon-gray-700);
  font-size: .875rem;
}

.jeux_carte_etat {
  margin-top: .25rem;
  color: var(--falcon-primary);
  font-size: .8rem;
  font-weight: 600;
}

.jeux_carte_fleche {
  flex: none;
  color: var(--falcon-gray-500);
}


/* --- Titre : « Petits + / Jeux → Mot du jour » ------------------------------------------------------------------ */

/* Deux morceaux qui ne se coupent pas : sur un téléphone, le nom du jeu (et son étiquette) passe entier à la ligne */
.jeux_titre {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  column-gap: .35em;
  row-gap: .1em;
}

.jeux_titre_chemin,
.jeux_titre_nom {
  white-space: nowrap;
}

.jeux_titre_fleche {
  margin-left: .1em;
  font-size: .65em;
  vertical-align: .1em;
}

/* --- En-tête : numéro et jour de la partie ----------------------------------------------------------------------- */

.mdj_entete_numero {
  color: var(--falcon-gray-600);
  font-size: .875rem;
  white-space: nowrap;
}

.mdj_hier {
  color: var(--falcon-warning);
  font-weight: 600;
}

/* Lien vers l'autre partie jouable (jouer le mot d'hier, retour au mot du jour) */
.mdj_autre {
  font-size: .875rem;
  font-weight: 600;
}


/* Côté d'une case : la largeur du jeu partagée entre les lettres du mot (--mdj-lettres, posé par la page), sans dépasser
   --mdj-case-max. Un navigateur sans unités de conteneur part de la largeur de la fenêtre. */
.mdj {
  --mdj-ecart: .3rem;
  --mdj-case-max: 3.5rem;
  --mdj-largeur: calc(100vw - 4.5rem);
  --mdj-case: min(var(--mdj-case-max), calc((var(--mdj-largeur) - (var(--mdj-lettres, 8) - 1) * var(--mdj-ecart)) / var(--mdj-lettres, 8)));
  container-type: inline-size;
  touch-action: manipulation;     /* pas de zoom au double appui sur une touche */
}

@supports (width: 1cqw) {
  .mdj {
    --mdj-largeur: 100cqw;
  }
}


/* --- Grille ------------------------------------------------------------------------------------------------------- */

.mdj_grille {
  display: grid;
  gap: var(--mdj-ecart);
  justify-content: center;
}

.mdj_ligne {
  display: grid;
  grid-template-columns: repeat(var(--mdj-lettres, 8), var(--mdj-case));
  gap: var(--mdj-ecart);
}

.mdj_case {
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--mdj-case);
  height: var(--mdj-case);
  border-radius: .25rem;
  background-color: var(--mdj-bleu);
  color: #fff;
  font-family: var(--falcon-font-sans-serif);
  font-size: calc(var(--mdj-case) * .56);
  font-weight: 700;
  line-height: 1;
  -webkit-user-select: none;
  user-select: none;
}

.mdj_case[data-etat="bien"] {
  background-color: var(--mdj-vert);
}

.mdj_case[data-etat="mal"] {
  background-image: radial-gradient(circle closest-side, var(--mdj-jaune) calc(100% - 1px), transparent);
  background-position: center;
  background-repeat: no-repeat;
  background-size: 88% 88%;
  color: var(--mdj-encre-jaune);
}

/* Lignes pas encore jouées : en retrait */
.mdj_ligne[data-ligne="a_venir"] .mdj_case {
  opacity: .4;
}

/* Ligne en cours : lettre déjà trouvée à sa place (rappel), case qui attend sa lettre, case de la prochaine frappe */
.mdj_indice {
  color: rgba(255, 255, 255, .6);
}

.mdj_attente::after {
  content: "";
  width: 14%;
  height: 14%;
  border-radius: 50%;
  background-color: rgba(255, 255, 255, .7);
}

.mdj_curseur {
  box-shadow: inset 0 0 0 .125rem rgba(255, 255, 255, .9);
}

/* Lettre dévoilée, ligne refusée, mot trouvé */
@keyframes mdj_pose {
  from {
    transform: scale(.8);
  }

  55% {
    transform: scale(1.07);
  }

  to {
    transform: none;
  }
}

@keyframes mdj_refus {

  20%,
  60% {
    transform: translateX(-.3rem);
  }

  40%,
  80% {
    transform: translateX(.3rem);
  }
}

@keyframes mdj_trouve {

  0%,
  100% {
    transform: none;
  }

  45% {
    transform: translateY(-22%);
  }
}

.mdj_devoilee {
  animation: mdj_pose .24s ease-out;
}

.mdj_refus {
  animation: mdj_refus .36s;
}

.mdj_trouve .mdj_case {
  animation: mdj_trouve .5s ease-in-out both;
  animation-delay: calc(var(--mdj-rang, 0) * 55ms);
}

@media (prefers-reduced-motion: reduce) {

  .mdj_devoilee,
  .mdj_refus,
  .mdj_trouve .mdj_case {
    animation: none;
  }
}


/* --- Message et fin de partie ------------------------------------------------------------------------------------- */

/* Une ligne dont la place est réservée : le clavier ne bouge pas quand le message apparaît */
.mdj_bilan {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .5rem;
  min-height: 2rem;
  margin-top: .75rem;
  text-align: center;
}

.mdj_message {
  color: var(--falcon-gray-1100);
  font-weight: 600;
}

.mdj_suite {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .5rem;
}

.mdj_suite[hidden] {
  display: none;
}

.mdj_termes {
  color: var(--falcon-gray-800);
}

.mdj_partage {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: .5rem .75rem;
}

.mdj_copie,
.mdj_demain {
  color: var(--falcon-gray-600);
}

.mdj_autre_partie {
  margin-top: .25rem;
}


/* --- Clavier : dix touches par rangée ; « Entrée » et « Effacer » en occupent deux ------------------------------------ */

.mdj_clavier {
  display: grid;
  gap: .4rem;
  max-width: 31rem;
  margin: .75rem auto 0;
  -webkit-user-select: none;
  user-select: none;
}

.mdj_rangee {
  display: grid;
  grid-template-columns: repeat(20, minmax(0, 1fr));
  gap: .3rem;
}

.mdj .mdj_touche {
  grid-column: span 2;
  min-width: 0;
  height: 3rem;
  padding: 0;
  font-size: 1.05rem;
  font-weight: 600;
  line-height: 1;
}

.mdj .mdj_touche_large {
  grid-column: span 4;
  font-size: .85rem;
}

.mdj .mdj_touche[data-etat="bien"],
.mdj .mdj_touche[data-etat="bien"]:hover,
.mdj .mdj_touche[data-etat="bien"]:focus,
.mdj .mdj_touche[data-etat="bien"]:active {
  border-color: var(--mdj-vert) !important;
  background-color: var(--mdj-vert) !important;
  color: #fff !important;
}

.mdj .mdj_touche[data-etat="mal"],
.mdj .mdj_touche[data-etat="mal"]:hover,
.mdj .mdj_touche[data-etat="mal"]:focus,
.mdj .mdj_touche[data-etat="mal"]:active {
  border-color: var(--mdj-jaune) !important;
  background-color: var(--mdj-jaune) !important;
  color: var(--mdj-encre-jaune) !important;
}

.mdj .mdj_touche[data-etat="absent"] {
  opacity: .35;
}

/* Partie finie : le clavier ne sert plus */
.mdj[data-partie="gagne"] .mdj_clavier,
.mdj[data-partie="perdu"] .mdj_clavier {
  opacity: .45;
  pointer-events: none;
}

@media (max-width: 575.98px) {
  .mdj {
    --mdj-ecart: .1875rem;
  }

  .mdj_rangee {
    gap: .25rem;
  }

  .mdj .mdj_touche {
    height: 2.9rem;
    font-size: 1rem;
  }

  .mdj .mdj_touche_large {
    font-size: .8rem;
  }
}


/* --- Légende sous le jeu ------------------------------------------------------------------------------------------ */

.mdj_legende {
  --mdj-case: 1.5rem;
}

.mdj_legende .mdj_case {
  flex: none;
}


/* --- Statistiques du membre --------------------------------------------------------------------------------------- */

.mdj_stats {
  max-width: 26rem;
  margin: 1.5rem auto .5rem;
  padding-top: 1.25rem;
  border-top: 1px solid var(--falcon-border-color);
}

.mdj_stats_titre {
  margin-bottom: .75rem;
  font-size: .95rem;
  font-weight: 600;
  text-align: center;
}

.mdj_stats_vide {
  color: var(--falcon-gray-600);
  font-size: .875rem;
  text-align: center;
}

.mdj_chiffres {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: .5rem;
  margin-bottom: 1rem;
  text-align: center;
}

.mdj_chiffre {
  display: flex;
  flex-direction: column;
}

.mdj_chiffre_valeur {
  color: var(--falcon-gray-1000);
  font-size: 1.4rem;
  font-weight: 600;
  line-height: 1.2;
}

.mdj_chiffre_nom {
  color: var(--falcon-gray-600);
  font-size: .75rem;
  line-height: 1.2;
}

.mdj_repartition {
  display: grid;
  gap: .25rem;
}

.mdj_repartition_ligne {
  display: flex;
  align-items: center;
  gap: .5rem;
  font-size: .8rem;
}

.mdj_repartition_essais {
  flex: none;
  width: .75rem;
  color: var(--falcon-gray-700);
  font-weight: 600;
  text-align: center;
}

.mdj_repartition_barre {
  flex: 1;
}

.mdj_repartition_valeur {
  display: block;
  min-width: 1.5rem;
  padding: .1rem .4rem;
  border-radius: .25rem;
  background-color: var(--falcon-gray-300);
  color: var(--falcon-gray-900);
  font-weight: 600;
  text-align: right;
}

.mdj_repartition_valeur.est_aujourdhui {
  background-color: var(--mdj-vert);
  color: #fff;
}


/* --- Ce mot chez les autres membres (partie finie) ------------------------------------------------------------------ */

.mdj_mot_stats {
  margin-bottom: 1.5rem;
}

.mdj_mot_resume {
  margin-bottom: .75rem;
  color: var(--falcon-gray-700);
  font-size: .875rem;
  text-align: center;
}

.mdj_mot_resume strong {
  color: var(--falcon-gray-1000);
}

.mdj_repartition_valeur.est_perdu {
  background-color: var(--falcon-gray-200);
}

/* La ligne du membre : sa barre en vert, « vous » à côté */
.mdj_repartition_ligne.est_moi .mdj_repartition_valeur {
  background-color: var(--mdj-vert);
  color: #fff;
}

.mdj_repartition_ligne.est_moi .mdj_repartition_valeur.est_perdu {
  background-color: var(--falcon-gray-600);
}

.mdj_repartition_moi {
  flex: none;
  color: var(--falcon-gray-600);
  font-size: .75rem;
  font-weight: 600;
}
