/* ============================================================
   Adaptations du passage au serveur
   ------------------------------------------------------------
   La feuille app.css est celle du prototype, reprise sans y toucher.
   Les commandes qui étaient pilotées en JavaScript par un <button>
   sont devenues des liens : cette feuille leur redonne exactement
   l'apparence du bouton, sans rien changer au reste.

   Les règles passent par :where() pour rester à spécificité nulle.
   Les classes de nuance déjà définies dans app.css — .btn-g, .nav,
   .kpi, .chip, .iconbtn, .btnc, .btnu — continuent donc de primer,
   comme elles le font sur un vrai <button>.
   ============================================================ */

:where(.btn) {
  font-family: inherit;
  font-size: 13px;
  font-weight: 700;
  border-radius: var(--r-sm);
  padding: 9px 15px;
  border: 1px solid var(--pri);
  background: var(--pri);
  cursor: pointer;
  display: inline-block;
  text-align: center;
  /* Un <button> n'hérite pas de l'interlignage du corps de page : sans cette
     ligne, un lien-bouton serait plus haut de quelques pixels. */
  line-height: normal;
  transition: background .13s, box-shadow .13s, transform .12s;
}
:where(.btn):hover { background: var(--pri-d); border-color: var(--pri-d); box-shadow: 0 4px 12px rgba(56,116,255,.3) }
:where(.btn):active { transform: translateY(1px) }
:where(.btn):focus-visible { outline: 2px solid var(--pri); outline-offset: 2px }

/* Un lien porte sa propre couleur et son soulignement : on les neutralise
   au même niveau de spécificité que la règle « a » d'app.css, pour que les
   classes de nuance reprennent la main juste après. */
a:where(.btn) { color: #fff; text-decoration: none }

/* La bascule « prêt à compenser », la suppression et la déconnexion passent
   par un formulaire. display:contents l'efface de la mise en page : le bouton
   qu'il contient reste exactement là où il était dans le prototype. */
.form-inline { display: contents }

/* Le sélecteur de période est devenu un <form> portant la classe .periode :
   la mise en page en ligne d'origine s'applique telle quelle. */


/* ============================================================
   Installation sur l'appareil
   ------------------------------------------------------------
   Deux éléments que le prototype n'avait pas : la marche à suivre
   quand le navigateur ne propose pas l'installation lui-même, et
   le rappel discret placé sous le formulaire de connexion.
   ============================================================ */

.etapes {
  margin: 0;
  padding-left: 22px;
  display: grid;
  gap: 11px;
  font-size: 13px;
  color: var(--g700);
  line-height: 1.55;
}
.etapes li::marker { font-weight: 800; color: var(--pri) }
.etapes b { color: var(--g900) }

/* Sous le bouton « Se connecter » : présent sans détourner l'attention. */
.ginstall {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  width: 100%;
  margin-top: 14px;
  padding: 10px;
  background: none;
  border: 1px dashed var(--g300);
  color: var(--g600);
  font-size: 12.5px;
  font-weight: 700;
}
.ginstall:hover { background: var(--g50); border-color: var(--pri); color: var(--pri-t); box-shadow: none }
.ginstall svg { width: 15px; height: 15px; flex: 0 0 auto }

/* L'écran de connexion occupe le premier plan (z-index 200) : la marche à
   suivre doit passer devant lui, sinon elle s'affiche sans être cliquable. */
body.locked .ov { z-index: 210 }
