/* « Mon compte » — feuille de style unique.
 *
 * Téléphone d'abord, à une main : tout ce qui se touche fait au moins 56 px de
 * haut, le solde est la seule chose lisible à bout de bras, et le contraste
 * reste bon en plein soleil comme sous les néons du self. */

:root {
  --vert: #0f5132;
  --vert-clair: #e6f0ea;
  --rouge: #a4231d;
  --rouge-clair: #fbeceb;
  --encre: #17241e;
  --gris: #5d6b64;
  --fond: #f4f5f2;
  --carte: #ffffff;
  --bord: #d8ded9;
  --rayon: 14px;
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  background: var(--fond);
  color: var(--encre);
  font: 17px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  -webkit-text-size-adjust: 100%;
}

body {
  padding: 0 0 env(safe-area-inset-bottom);
  min-height: 100dvh;
}

.topbar {
  background: var(--vert);
  color: #fff;
  padding: calc(14px + env(safe-area-inset-top)) 20px 14px;
}
.topbar h1 { margin: 0; font-size: 20px; letter-spacing: .2px; }
.topbar-sub { margin: 2px 0 0; font-size: 14px; opacity: .85; }

main { padding: 20px 16px 32px; max-width: 520px; margin: 0 auto; }

h2 { font-size: 22px; margin: 0 0 8px; }
h3 { font-size: 16px; margin: 26px 0 8px; color: var(--gris); text-transform: uppercase;
     letter-spacing: .6px; }

.intro { color: var(--gris); margin: 0 0 18px; }

label { display: block; font-size: 15px; color: var(--gris); margin: 14px 0 6px; }

input[type="text"], input[type="date"], input[type="password"] {
  width: 100%;
  min-height: 56px;
  padding: 0 14px;
  font-size: 20px;
  color: var(--encre);
  background: var(--carte);
  border: 2px solid var(--bord);
  border-radius: var(--rayon);
}
input:focus { outline: 3px solid var(--vert); outline-offset: 1px; border-color: var(--vert); }

.btn {
  display: block;
  width: 100%;
  min-height: 56px;
  margin-top: 14px;
  padding: 0 18px;
  font-size: 18px;
  font-weight: 600;
  border-radius: var(--rayon);
  border: 2px solid transparent;
  cursor: pointer;
}
.btn-lg { min-height: 64px; font-size: 19px; }
.btn-primary { background: var(--vert); color: #fff; }
.btn-primary:active { background: #0b3d26; }
.btn-ghost { background: var(--carte); color: var(--vert); border-color: var(--bord); }
.btn[disabled] { opacity: .5; }

.linkish {
  display: block;
  width: 100%;
  margin: 18px 0 0;
  padding: 12px;
  background: none;
  border: 0;
  color: var(--gris);
  font-size: 15px;
  text-decoration: underline;
  cursor: pointer;
}

.error, .warning {
  margin: 14px 0 0;
  padding: 12px 14px;
  border-radius: var(--rayon);
  font-weight: 600;
}
.error { background: var(--rouge-clair); color: var(--rouge); }
.warning { background: #fdf3e2; color: #7a4c05; }

.busy { text-align: center; color: var(--gris); }

/* --- caméra ------------------------------------------------------------- */

.cam { position: relative; border-radius: var(--rayon); overflow: hidden; background: #000;
       aspect-ratio: 1 / 1; }
.cam video { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Caméra frontale : miroir pour viser (posé par scan.js, sans effet sur la lecture). */
.cam video.miroir { transform: scaleX(-1); }
.cam-frame {
  position: absolute; inset: 5%;
  border: 3px solid rgba(255, 255, 255, .9);
  border-radius: 12px;
}

/* Bouton de bascule arrière ↔ selfie : l'action en gros, l'état en dessous. */
#btn-switch-cam { line-height: 1.25; padding-top: 8px; padding-bottom: 8px; }
#btn-switch-cam .btn-titre { display: block; }
#btn-switch-cam .btn-etat {
  display: block;
  font-size: 14px;
  font-weight: 400;
  color: var(--gris);
}

/* --- éclairage par l'écran ----------------------------------------------
 * La caméra frontale n'a pas de lampe : c'est la dalle qui éclaire la carte.
 * Un voile blanc opaque couvre la page ; seuls la vidéo (pour viser) et le
 * bouton de sortie repassent au-dessus. */

.lampe-aide { display: none; }

body.lampe-ecran { background: #fff; }
body.lampe-ecran::before {
  content: "";
  position: fixed;
  inset: 0;
  background: #fff;
  z-index: 40;
}
body.lampe-ecran #cam-wrap,
body.lampe-ecran #btn-torch,
body.lampe-ecran .lampe-aide { position: relative; z-index: 41; }

body.lampe-ecran #cam-wrap { max-width: 62%; margin: 0 auto; }
body.lampe-ecran #btn-torch {
  background: var(--vert);
  color: #fff;
  border-color: var(--vert);
}
body.lampe-ecran .lampe-aide {
  display: block;
  margin: 12px 0 0;
  text-align: center;
  font-size: 15px;
  color: var(--gris);
}

.manual { margin-top: 22px; }
.manual summary { padding: 14px 0; font-size: 16px; color: var(--vert); cursor: pointer; }

/* --- pavé numérique ------------------------------------------------------ */

.dots { display: flex; gap: 16px; justify-content: center; margin: 22px 0; }
.dots span {
  width: 18px; height: 18px; border-radius: 50%;
  border: 2px solid var(--vert); background: transparent;
}
.dots span.on { background: var(--vert); }

.keypad {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
  margin-top: 8px;
}
.keypad button {
  min-height: 68px;
  font-size: 26px;
  font-weight: 600;
  color: var(--encre);
  background: var(--carte);
  border: 2px solid var(--bord);
  border-radius: var(--rayon);
  cursor: pointer;
}
.keypad button:active { background: var(--vert-clair); }
.keypad button.wide { font-size: 18px; }

/* --- le compte ----------------------------------------------------------- */

.hello { margin: 0 0 12px; font-size: 18px; font-weight: 600; }

.balance-card {
  background: var(--carte);
  border: 2px solid var(--bord);
  border-left: 8px solid var(--vert);
  border-radius: var(--rayon);
  padding: 22px 18px;
}
.balance-card.negatif { border-left-color: var(--rouge); }
.balance-line { margin: 0; font-size: 30px; font-weight: 700; line-height: 1.2; }
.balance-card.negatif .balance-line { color: var(--rouge); }
.balance-sub { margin: 10px 0 0; color: var(--gris); font-size: 16px; }

.list { list-style: none; margin: 0; padding: 0; }
.list li {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  padding: 14px 4px;
  border-bottom: 1px solid var(--bord);
}
.list .quoi { display: flex; flex-direction: column; }
.list .quand { font-size: 14px; color: var(--gris); }
.list .montant { font-weight: 700; white-space: nowrap; }
.list .montant.debit { color: var(--rouge); }
.list .montant.credit { color: var(--vert); }
.list .attente { font-size: 13px; color: #7a4c05; }

.empty { color: var(--gris); font-style: italic; }

.actions { margin-top: 28px; }
.change-pin { margin-top: 22px; padding-top: 8px; border-top: 1px solid var(--bord); }

.badge-tail { font-variant-numeric: tabular-nums; font-weight: 600; }

.foot { padding: 18px 16px 28px; text-align: center; color: var(--gris); font-size: 14px; }

/* --- réserver un repas --------------------------------------------------- */
.btn-resa-open { display: flex; flex-direction: column; align-items: center;
  justify-content: center; margin-top: 18px; }
.btn-resa-open .btn-etat { font-size: 14px; font-weight: 500; opacity: .9; }
.resa-solde { font-size: 20px; font-weight: 700; margin: 0 0 6px; }
.list li.resa { flex-wrap: wrap; }
.resa-actions { display: flex; gap: 10px; width: 100%; }
.resa-actions .btn-resa { margin-top: 10px; min-height: 48px; font-size: 16px; }
