/* ============================================================================
   Sélecteurs de saisie partagés : liste à cocher, jours de la semaine, modes.

   Ces trois composants remplacent des contrôles natifs qui ne tenaient pas la
   route sur mobile : un <select multiple> exige Ctrl+clic (impossible au
   doigt), et un champ texte « 1,2,3,4,5,6 » demande à l'utilisateur de coder
   ce que la machine sait très bien afficher.
   ============================================================================ */

/* --- Liste de choix multiples ------------------------------------------- */

.picker {
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  overflow: hidden;
  background: var(--color-surface);
}

.picker__filtre {
  width: 100%;
  border: 0;
  border-bottom: 1px solid var(--color-border);
  padding: .6rem .75rem;
  font-size: 16px;   /* sous 16px, iOS zoome au focus */
  background: var(--color-surface-alt);
}

.picker__filtre:focus { outline: 2px solid var(--color-primary); outline-offset: -2px; }

.picker__liste {
  max-height: 260px;
  overflow-y: auto;
  overscroll-behavior: contain;   /* le scroll ne fuit pas vers la modale */
}

.picker__item {
  display: flex;
  align-items: center;
  gap: .65rem;
  padding: .55rem .75rem;
  min-height: var(--touch-min, 44px);
  cursor: pointer;
  border-bottom: 1px solid var(--color-border-faible, #f3f4f6);
}

.picker__item:last-child { border-bottom: 0; }
.picker__item:hover      { background: var(--color-surface-alt); }

.picker__item.est-choisi {
  background: color-mix(in srgb, var(--color-primary) 7%, transparent);
  box-shadow: inset 3px 0 0 var(--color-primary);
}

.picker__item > input[type="checkbox"] {
  flex: 0 0 auto;
  width: 20px;
  height: 20px;
}

.picker__nom { flex: 1 1 auto; min-width: 0; }

/* La désignation du Principal reste discrète tant que la ligne n'est pas
   choisie : c'est une précision, pas une seconde décision de même poids. */
.picker__principal {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  flex: 0 0 auto;
  font-size: var(--font-xs, .72rem);
  color: var(--color-text-muted);
  padding: .2rem .45rem;
  border-radius: 999px;
  border: 1px solid transparent;
  cursor: pointer;
}

.picker__item.est-choisi .picker__principal {
  border-color: var(--color-border);
}

.picker__principal:has(input:checked) {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: #fff;
}

.picker__principal input { width: 14px; height: 14px; }

/* --- Jours de la semaine ------------------------------------------------ */

.jours {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
}

.jours__jour {
  position: relative;
  cursor: pointer;
  user-select: none;
}

/* La case reste dans le flux pour rester accessible au clavier ; on la rend
   seulement invisible. `display:none` la retirerait de la navigation. */
.jours__jour input {
  position: absolute;
  opacity: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  cursor: pointer;
}

.jours__jour span {
  display: grid;
  place-items: center;
  min-width: 48px;
  min-height: var(--touch-min, 44px);
  padding: 0 .5rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  font-size: var(--font-sm, .85rem);
  font-weight: 500;
  background: var(--color-surface);
  transition: background .12s ease, border-color .12s ease;
}

.jours__jour input:checked + span {
  background: var(--color-primary);
  border-color: var(--color-primary);
  color: #fff;
}

.jours__jour input:focus-visible + span {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

/* Jour déjà pris par une autre affectation : barré, non cliquable. On le
   montre au lieu de le retirer — savoir qu'un jour est pris vaut mieux que
   le voir disparaître sans explication. */
.jours__jour.est-pris span {
  background: var(--color-surface-alt);
  color: var(--color-text-muted);
  border-style: dashed;
  text-decoration: line-through;
  cursor: not-allowed;
}

.jours__jour.est-pris input { cursor: not-allowed; }

/* --- Modes (choix exclusif décrit) -------------------------------------- */

.modes {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: .6rem;
}

.modes__choix {
  display: flex;
  flex-direction: column;
  gap: .2rem;
  padding: .75rem .85rem;
  border: 1px solid var(--color-border);
  border-radius: var(--radius);
  cursor: pointer;
  position: relative;
}

.modes__choix input {
  position: absolute;
  top: .75rem;
  right: .75rem;
}

.modes__choix:has(input:checked) {
  border-color: var(--color-primary);
  box-shadow: inset 0 0 0 1px var(--color-primary);
  background: color-mix(in srgb, var(--color-primary) 5%, transparent);
}

.modes__titre { font-weight: 600; padding-right: 1.5rem; }

.modes__aide {
  font-size: var(--font-xs, .76rem);
  color: var(--color-text-muted);
  line-height: 1.45;
}

@media (max-width: 640px) {
  .picker__liste { max-height: 210px; }

  /* Sept jours sur une ligne étroite deviennent illisibles : on laisse la
     grille les répartir plutôt que de les comprimer. */
  .jours { display: grid; grid-template-columns: repeat(4, 1fr); }
  .jours__jour span { min-width: 0; width: 100%; }
}
