/*
 * Pendu (jeux.php?jeu=pendu) : le bonhomme, le mot, le clavier, la fin de partie. Version du lien : PENDU_V
 * (static/php/pendu_fonctions.php), à changer à chaque modification. Le catalogue et les statistiques (classes mdj_) sont
 * dans static/css/mot_du_jour.css, chargée elle aussi par la page.
 *
 * Le script static/js/pendu.js construit le jeu et pose les états : data-etat (cachee, trouvee, manquee) sur une case du
 * mot, data-etat (present, absent) sur une touche, data-partie (en_cours, gagne, perdu) sur le jeu, est_trace sur un trait
 * du dessin. --pendu-mot : le plus long morceau du mot (entre deux espaces ou traits d'union), d'où le côté d'une case.
 */

.pendu {
  --pendu-bleu: #2c7be5;            /* une lettre trouvée : le bleu du thème, comme les cases du mot du jour */
  --pendu-vert: #17a35c;            /* touche d'une lettre du mot */
  --pendu-ecart: .25rem;
  --pendu-case-max: 2.75rem;
  --pendu-largeur: calc(100vw - 4.5rem);
  --pendu-case: min(var(--pendu-case-max), calc((var(--pendu-largeur) - (var(--pendu-mot, 8) - 1) * var(--pendu-ecart)) / var(--pendu-mot, 8)));
  container-type: inline-size;
  touch-action: manipulation;     /* pas de zoom au double appui sur une touche */
}

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


/* --- Le squelette (images d'Adrien) ou le bonhomme du script ------------------------------------------------------- */

.pendu_scene {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .25rem;
}

.pendu_dessin {
  display: flex;
  justify-content: center;
  width: 100%;
}

/* Les images : la potence et le squelette (600 x 720, fond transparent) debout sur le fond de l'amphithéâtre (16/9) */
.pendu_dessin.a_images {
  position: relative;
  align-items: flex-end;
  width: min(100%, 34rem);
  aspect-ratio: 16 / 9;
  overflow: hidden;
  border-radius: .75rem;
}

.pendu_dessin.a_fond {
  border: 1px solid var(--falcon-border-color);
  background-color: #f5ecdc;
  background-position: center bottom;
  background-repeat: no-repeat;
  background-size: cover;
}

.pendu_image {
  display: block;
  width: auto;
  max-width: 100%;
  height: 94%;
  -webkit-user-select: none;
  user-select: none;
}

.pendu_svg {
  width: 9.5rem;
  height: auto;
  overflow: visible;
}

.pendu_trait {
  fill: none;
  stroke: var(--falcon-gray-300);
  stroke-width: 5;
  stroke-linecap: round;
  stroke-linejoin: round;
  transition: stroke .3s;
}

.pendu_trait.est_trace {
  stroke: var(--falcon-gray-1000);
}

.pendu[data-partie="perdu"] .pendu_trait.est_trace {
  stroke: var(--falcon-danger);
}

.pendu_compte {
  color: var(--falcon-gray-600);
  font-size: .8rem;
  font-weight: 600;
}

.pendu_compte.est_proche {
  color: var(--falcon-warning);
}


/* --- Le mot : un groupe par mot, une case par lettre ---------------------------------------------------------------- */

.pendu_mot {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: .6rem 1.1rem;
  margin-top: 1rem;
}

.pendu_groupe {
  display: inline-flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: .6rem 0;
}

.pendu_segment {
  display: inline-flex;
  flex-wrap: nowrap;
  align-items: flex-end;
  gap: var(--pendu-ecart);
}

.pendu_case {
  display: flex;
  align-items: center;
  justify-content: center;
  width: var(--pendu-case);
  height: var(--pendu-case);
  border-bottom: .2rem solid var(--falcon-gray-400);
  border-radius: .25rem .25rem .125rem .125rem;
  background-color: var(--falcon-gray-200);
  color: var(--falcon-gray-1000);
  font-family: var(--falcon-font-sans-serif);
  font-size: calc(var(--pendu-case) * .56);
  font-weight: 700;
  line-height: 1;
  -webkit-user-select: none;
  user-select: none;
}

.pendu_case[data-etat="trouvee"] {
  border-bottom-color: #1a5db8;
  background-color: var(--pendu-bleu);
  color: #fff;
}

/* Partie perdue : les lettres qui manquaient */
.pendu_case[data-etat="manquee"] {
  border-bottom-color: var(--falcon-danger);
  background-color: transparent;
  box-shadow: inset 0 0 0 .1rem var(--falcon-danger);
  color: var(--falcon-danger);
}

/* Trait d'union et apostrophe, donnés : sans case */
.pendu_sep {
  display: flex;
  align-items: center;
  justify-content: center;
  width: calc(var(--pendu-case) * .4);
  height: var(--pendu-case);
  color: var(--falcon-gray-700);
  font-size: calc(var(--pendu-case) * .56);
  font-weight: 700;
  line-height: 1;
}

@keyframes pendu_pose {
  from {
    transform: scale(.75);
  }

  55% {
    transform: scale(1.08);
  }

  to {
    transform: none;
  }
}

@keyframes pendu_trouve {

  0%,
  100% {
    transform: none;
  }

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

.pendu_devoilee {
  animation: pendu_pose .26s ease-out;
}

.pendu_trouve .pendu_case {
  animation: pendu_trouve .5s ease-in-out both;
}

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

  .pendu_devoilee,
  .pendu_trouve .pendu_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 */
.pendu_bilan {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .5rem;
  min-height: 2rem;
  margin-top: .9rem;
  text-align: center;
}

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

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

.pendu_suite[hidden],
.pendu_terme[hidden] {
  display: none;
}

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

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

.pendu_copie,
.pendu_demain {
  color: var(--falcon-gray-600);
}

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


/* --- Clavier : dix touches par rangée au plus, centrées --------------------------------------------------------------- */

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

.pendu_rangee {
  display: flex;
  justify-content: center;
  gap: .3rem;
}

.pendu .pendu_touche {
  flex: 0 1 calc((100% - 9 * .3rem) / 10);
  min-width: 0;
  height: 3rem;
  padding: 0;
  font-size: 1.05rem;
  font-weight: 600;
  line-height: 1;
}

.pendu .pendu_touche:disabled {
  opacity: 1;
}

.pendu .pendu_touche[data-etat="present"],
.pendu .pendu_touche[data-etat="present"]:disabled {
  border-color: var(--pendu-vert) !important;
  background-color: var(--pendu-vert) !important;
  color: #fff !important;
}

.pendu .pendu_touche[data-etat="absent"],
.pendu .pendu_touche[data-etat="absent"]:disabled {
  opacity: .3;
  text-decoration: line-through;
}

/* Une lettre est envoyée : les touches attendent */
.pendu.est_occupe .pendu_clavier {
  cursor: progress;
}

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

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

  .pendu_rangee {
    gap: .25rem;
  }

  .pendu .pendu_touche {
    flex-basis: calc((100% - 9 * .25rem) / 10);
    height: 2.9rem;
    font-size: 1rem;
  }
}


/* --- Statistiques (balisage du mot du jour) : la colonne des erreurs a la place de « 5+ » ---------------------------- */

.pendu_stats .mdj_repartition_essais {
  width: 1.4rem;
}
