/*
  Les valeurs viennent de la MAQUETTE VALIDÉE (source-tableau-de-bord.dc.html) :
  couleurs, tailles et espacements sont ceux du fichier, pas des approximations.

  ⚠ La maquette chargeait Manrope et Inter Tight depuis Google Fonts. Pas ici :
  aucune ressource externe, et deux fontes à télécharger en 3G au Togo coûtent
  plus cher que ce qu'elles apportent. La pile système garde les mêmes graisses.
*/
:root {
  --or: #C9A24B;          /* accentOr de la maquette */
  --or-texte: #A8842F;    /* goldText, lisible sur fond clair */
  --nuit: #17140F;        /* le bandeau */
  --nuit-sous: #9C927E;   /* le texte secondaire du bandeau */
  --fond: #F4F6F9;
  --carte: #FFFFFF;
  --bord: #E7EBF1;
  --filet: #EEF1F6;
  --encre: #17202B;
  --gris: #8A93A2;
  --puce: #F1F3F8;
  --bord-bouton: #DCE3EC;
  --survol: #F4F6F9;
  --entree: #0F6B4E;      /* inCol */
  --sortie: #B42318;      /* outCol */
  --vert-vif: #12B76A;    /* le point « En ligne » */
  --ambre: #B58A00;       /* le point « silencieux » */
}

/*
  Le mode sombre — les VALEURS de la maquette (`const t = dark ? {…}`), pas des
  approximations. Demandé par le porteur le 07/08 : « le switch mode sombre et
  clair manque ».

  ⚠ Il vit sur `<html data-sombre>`, pas sur `prefers-color-scheme` seul : la
  maquette en fait un **bouton**, donc un choix, et un choix se garde
  (localStorage). Le réglage du système sert de premier avis, pas de verdict —
  même esprit que l'app, où le thème se choisit dans Réglages.

  ⚠ Le vert et le terre CHANGENT en sombre (#4ADE80 / #F87171 contre #0F6B4E /
  #B42318). Ce n'est pas cosmétique : le vert foncé du mode clair est dessiné
  pour du blanc et devient illisible sur #0D0B07 — c'est exactement le défaut
  payé dans l'app le 04/08 avec `EntreeClair` sur le bandeau brun.
*/
:root[data-sombre="oui"] {
  --fond: #0D0B07;
  --carte: #201A11;
  --bord: #312917;
  --filet: #2B2414;
  --encre: #F2EDE2;
  --gris: #9C927E;
  --puce: #2B2414;
  --bord-bouton: #3E3520;
  --survol: #2B2414;
  --or-texte: #C9A24B;    /* goldText devient l'or plein : le brun s'éteint */
  --entree: #4ADE80;
  --sortie: #F87171;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

/* ⚠ Sans lui, un `display:flex` posé par une classe ÉCRASE l'attribut hidden —
   la carte d'entrée restait affichée par-dessus la vue (mesuré au 1er rendu). */
[hidden] { display: none !important; }

body {
  font-family: "Inter Tight", -apple-system, "Segoe UI", Roboto, "Noto Sans", sans-serif;
  background: var(--fond);
  color: var(--encre);
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}

.large { max-width: 1240px; margin: 0 auto; padding: 0 24px; width: 100%; }

/* ── le bandeau ───────────────────────────────────────────────────────── */

.bandeau { background: var(--nuit); color: #fff; }

.barre {
  display: flex; align-items: center; justify-content: space-between;
  height: 66px;
}

.marque { display: flex; align-items: center; gap: 13px; }

.logo {
  width: 34px; height: 34px; border-radius: 10px;
  background: var(--or); color: #241D12;
  display: flex; align-items: center; justify-content: center;
  font-weight: 800; font-size: 16px;
}

.nom { font-weight: 800; font-size: 16px; line-height: 1; }
.sous { font-size: 11.5px; color: var(--nuit-sous); margin-top: 3px; }

.rail {
  display: flex; align-items: center; gap: 5px;
  background: rgba(255,255,255,.07);
  border: 1px solid rgba(255,255,255,.09);
  border-radius: 14px; padding: 5px;
}
.onglet {
  display: flex; align-items: center; gap: 8px;
  color: var(--nuit-sous); border-radius: 10px; padding: 8px 13px;
  /* ⚠ Le reset : devenus de vrais <button> le 07/08, les onglets gardaient
     l'habillage système — cases blanches à bordure sur la pilule sombre, là
     où la maquette les montre nus. Vu à l'écran, pas en relisant. */
  background: none; border: 0; font: inherit; cursor: pointer;
}
.onglet:focus-visible { outline: 2px solid var(--or); outline-offset: 2px; }
.onglet.actif { background: var(--or); color: #241D12; }
.onglet.actif span { font-size: 13.5px; font-weight: 700; white-space: nowrap; }

.coin { display: flex; align-items: center; justify-content: flex-end; gap: 10px; }

/* La lune du bandeau — même géométrie que les onglets du rail, pour qu'elle
   appartienne à la même rangée. Sa couleur passe à l'or quand le sombre est
   allumé (`moonCol: dark ? gold : '#9C927E'` dans la maquette). */
.bouton-icone {
  display: flex; align-items: center; justify-content: center;
  padding: 8px; border-radius: 10px;
  background: transparent; border: 0; cursor: pointer;
  color: var(--nuit-sous);
  transition: background .2s, color .2s;
}
.bouton-icone:hover { color: #fff; background: rgba(255, 255, 255, .08); }
.bouton-icone:focus-visible { outline: 2px solid var(--or); outline-offset: 2px; }
:root[data-sombre="oui"] .bouton-icone { color: var(--or); }

/* Les sous-menus d'une boutique — la géométrie de la maquette : une pilule qui
   contient les onglets, l'actif en plein. Même règle que la barre du bas de
   l'app : plein si actif, rien sinon. */
.sous-menus {
  display: inline-flex; flex-wrap: wrap; gap: 3px;
  background: var(--carte); border: 1px solid var(--bord);
  border-radius: 12px; padding: 4px; margin-bottom: 18px;
}
.sous-menu {
  padding: 8px 15px; border-radius: 8px; border: 0;
  background: transparent; color: var(--gris);
  font: inherit; font-size: 13px; font-weight: 600;
  cursor: pointer; transition: background .2s, color .2s;
}
.sous-menu:hover { background: var(--survol); color: var(--encre); }
.sous-menu.actif { background: var(--or); color: #241D12; }
.sous-menu:focus-visible { outline: 2px solid var(--or); outline-offset: 2px; }
.avatar {
  width: 34px; height: 34px; border-radius: 50%;
  background: #FCE7D6; color: #B45309;
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 13px;
}

.titre-ligne {
  display: flex; align-items: flex-end; justify-content: space-between;
  padding: 16px 4px 24px; flex-wrap: wrap; gap: 14px;
}
.titre-ligne h1 { font-size: 24px; font-weight: 800; letter-spacing: -.01em; }
.titre-ligne .sous { font-size: 13.5px; margin-top: 4px; }

.filtres { display: flex; align-items: center; gap: 10px; }
.menu { position: relative; }
.pilule {
  display: flex; align-items: center; gap: 8px;
  background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.09);
  border-radius: 11px; padding: 9px 14px; cursor: pointer;
  font-family: inherit; font-size: 13px; font-weight: 600; color: #fff;
}
.pilule:hover { background: rgba(255,255,255,.13); }
.liste-menu {
  position: absolute; top: 44px; right: 0; z-index: 50;
  background: var(--carte); color: var(--encre);
  border: 1px solid var(--bord); border-radius: 12px;
  box-shadow: 0 18px 36px -12px rgba(0,0,0,.4);
  padding: 6px; min-width: 240px;
}
.liste-menu span {
  display: block; padding: 9px 12px; border-radius: 8px;
  font-size: 13.5px; cursor: pointer;
}
.liste-menu span:hover { background: var(--survol); }
.liste-menu span.actif { font-weight: 700; color: var(--or-texte); }

.segments {
  display: flex; gap: 2px;
  background: rgba(255,255,255,.07); border: 1px solid rgba(255,255,255,.09);
  border-radius: 11px; padding: 3px;
}
.segments span {
  padding: 7px 14px; border-radius: 8px; font-size: 13px; font-weight: 600;
  color: var(--nuit-sous); cursor: pointer;
}
.segments span.actif { background: #fff; color: #17140F; }

/* Les KPI, style « minimal » — celui de la capture du porteur. */
/*
  ⚠ TROIS styles de KPI, et ce n'est pas une coquetterie : la maquette les
  expose elle-même (`styleKpi` : reglette · cartes · minimal). Le porteur a
  demandé le 07/08 « on va utiliser ceci, ou soit permettre un switch entre les
  deux » — il tranche en REGARDANT, pas sur une description. Les trois lisent
  les mêmes chiffres ; seule la mise en page change.

  ⚠ `reglette` est le défaut, c'est celui que la maquette pose et celui qu'il a
  envoyé en capture.
*/
.kpis { padding: 4px 8px 30px; }

/* ── reglette : une seule barre, quatre colonnes séparées par un filet ── */
.kpis.reglette {
  margin: 0 4px 28px; padding: 0;
  display: grid; grid-template-columns: repeat(4, 1fr);
  background: rgba(255, 255, 255, .05);
  border: 1px solid rgba(255, 255, 255, .09);
  border-radius: 16px; overflow: hidden;
}
.kpis.reglette .kpi { padding: 18px 22px; border-left: 1px solid rgba(255, 255, 255, .09); }
.kpis.reglette .kpi:first-child { border-left-color: transparent; }
.kpis.reglette .etiquette { display: flex; align-items: center; gap: 8px; }
.kpis.reglette .pastille {
  width: 8px; height: 8px; border-radius: 2.5px; display: inline-block; flex: none;
}
.kpis.reglette .nom { font-size: 12px; color: var(--nuit-sous); font-weight: 500; }
.kpis.reglette .valeur {
  font-size: 27px; font-weight: 700; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; white-space: nowrap; margin-top: 10px;
}
.kpis.reglette .dessous { font-size: 12px; font-weight: 600; margin-top: 4px; }
.kpis.reglette .dessous .note { color: #6E6552; font-weight: 500; }

/* ── cartes : quatre blocs détachés ─────────────────────────────────────── */
.kpis.cartes {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; padding: 0 4px 28px;
}
.kpis.cartes .kpi {
  background: rgba(255, 255, 255, .06);
  border: 1px solid rgba(255, 255, 255, .09);
  border-radius: 14px; padding: 16px 18px;
}
.kpis.cartes .nom { font-size: 12px; color: var(--nuit-sous); font-weight: 500; }
.kpis.cartes .valeurs { display: flex; align-items: baseline; gap: 10px; margin-top: 8px; }
.kpis.cartes .valeur {
  font-size: 25px; font-weight: 700; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.kpis.cartes .delta { font-size: 12px; font-weight: 600; }

/* ── minimal : le trait de couleur sous l'étiquette ─────────────────────── */
.kpis.minimal { display: flex; gap: 56px; flex-wrap: wrap; }
.kpis.minimal .etiquette {
  font-size: 12px; color: var(--nuit-sous); font-weight: 500;
  padding-bottom: 8px; border-bottom: 2px solid; display: inline-block;
}
.kpis.minimal .valeurs { display: flex; align-items: baseline; gap: 10px; margin-top: 10px; }
.kpis.minimal .valeur {
  font-size: 30px; font-weight: 700; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.kpis.minimal .delta { font-size: 12px; font-weight: 600; }

/* ⚠ Sur un écran étroit, quatre colonnes de 27 sp ne tiennent pas : la
   réglette et les cartes passent à deux, puis à une. Sans ça les montants
   sortent de leur case — et un montant tronqué est pire qu'un montant petit. */
@media (max-width: 900px) {
  .kpis.reglette, .kpis.cartes { grid-template-columns: repeat(2, 1fr); }
  .kpis.reglette .kpi:nth-child(3) { border-left-color: transparent; }
}
@media (max-width: 560px) {
  .kpis.reglette, .kpis.cartes { grid-template-columns: 1fr; }
  .kpis.reglette .kpi { border-left-color: transparent; }
  .kpis.minimal { gap: 28px; }
}

.coup-doeil {
  display: flex; align-items: center; gap: 28px; flex-wrap: wrap;
  border-top: 1px solid rgba(255,255,255,.09);
  padding: 13px 8px 20px;
}
.coup-doeil span { display: inline-flex; align-items: baseline; gap: 6px; font-size: 12px; }
.coup-doeil b { font-weight: 800; font-variant-numeric: tabular-nums; color: #fff; font-size: 14px; }
.coup-doeil em { font-style: normal; color: var(--nuit-sous); }

/* ── le corps ─────────────────────────────────────────────────────────── */

main { flex: 1; padding-top: 24px; padding-bottom: 56px; }

.carte {
  background: var(--carte); border: 1px solid var(--bord);
  border-radius: 16px; padding: 22px;
}

.cartes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.trois-blocs { display: grid; grid-template-columns: 1.35fr 1fr 1fr; gap: 16px; margin-top: 16px; }
.trois-blocs .carte { padding: 18px 22px; }

.entete-carte { display: flex; align-items: center; justify-content: space-between; }
.entete-carte h2 { font-size: 16.5px; font-weight: 800; }
.statut { display: flex; align-items: center; gap: 6px; font-size: 11.5px; font-weight: 600; }
.statut i { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
.ville { font-size: 12.5px; color: var(--gris); margin-top: 2px; }

.au-comptoir {
  display: inline-flex; align-items: center; gap: 8px; margin-top: 10px;
  background: var(--puce); border-radius: 99px; padding: 4px 12px 4px 4px; font-size: 12px;
}
.au-comptoir i {
  width: 22px; height: 22px; border-radius: 50%;
  background: #FCE7D6; color: #B45309;
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 10px; font-style: normal;
}
.au-comptoir span { color: var(--gris); }
.au-comptoir b { font-weight: 600; color: var(--encre); }

.ligne-chiffres {
  display: flex; align-items: flex-end; justify-content: space-between;
  gap: 16px; margin-top: 18px;
}
.etiquette-min { font-size: 12px; color: var(--gris); }
.solde {
  font-size: 24px; font-weight: 700; letter-spacing: -.02em;
  font-variant-numeric: tabular-nums; white-space: nowrap; margin-top: 2px;
}
.ventes-ligne { display: flex; align-items: center; gap: 8px; margin-top: 3px; }
.ventes-ligne .v { font-size: 16px; font-weight: 600; font-variant-numeric: tabular-nums; }
.ventes-ligne .d { font-size: 11.5px; font-weight: 600; }

.barres { display: flex; align-items: flex-end; gap: 4px; height: 56px; }
.barres i { width: 9px; border-radius: 4px; display: inline-block; min-height: 4px; }
.legende { font-size: 10.5px; color: var(--gris); margin-top: 6px; text-align: right; }

.actions {
  display: flex; gap: 10px; border-top: 1px solid var(--filet);
  margin-top: 18px; padding-top: 14px;
}
.bouton {
  font-family: inherit; font-size: 12.5px; font-weight: 600;
  border: 1px solid var(--bord-bouton); border-radius: 10px;
  padding: 8px 14px; cursor: pointer; background: var(--carte); color: var(--gris);
}
.bouton.or { color: var(--or-texte); flex: 1; }
.bouton:hover { background: var(--survol); }
.bouton.plein { background: var(--or); color: #241D12; border-color: var(--or); font-size: 14px; }
.bouton.contour { background: transparent; }
.bouton.lien { border: none; background: none; color: var(--or-texte); padding: 8px 0; }

/* ── les trois blocs ──────────────────────────────────────────────────── */

.titre-bloc { font-size: 15px; font-weight: 800; }
.entete-bloc { display: flex; align-items: center; justify-content: space-between; }
.tout-voir { font-size: 12.5px; font-weight: 600; color: var(--or-texte); cursor: default; }

.rangee {
  display: flex; align-items: center; justify-content: space-between;
  padding: 11px 0; border-bottom: 1px solid var(--filet); font-size: 13.5px;
}
.rangee:last-child { border-bottom: none; }
.rangee .gauche { display: flex; align-items: center; gap: 12px; }
.rangee .tag {
  width: 30px; height: 30px; border-radius: 9px; background: var(--puce);
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; font-size: 12px; flex-shrink: 0;
}
.rangee .lbl { font-weight: 600; }
.rangee .sub { font-size: 11.5px; color: var(--gris); margin-top: 1px; }
.rangee .mnt { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.vert { color: var(--entree); }
.terre { color: var(--sortie); }

.jauge { display: flex; height: 10px; border-radius: 5px; overflow: hidden; gap: 2px; margin-top: 14px; }
.jauge i { display: inline-block; }

.part { display: flex; align-items: center; justify-content: space-between; padding: 9px 0; border-bottom: 1px solid var(--filet); font-size: 13px; }
.part .n { display: flex; align-items: center; gap: 8px; font-weight: 600; }
.part .n i { width: 9px; height: 9px; border-radius: 3px; display: inline-block; }
.part .m { color: var(--gris); }
.part .m b { font-weight: 700; color: var(--encre); font-variant-numeric: tabular-nums; }

.titre-top {
  font-size: 12px; font-weight: 700; color: var(--gris);
  text-transform: uppercase; letter-spacing: .05em; margin-top: 14px;
}
.article { display: flex; align-items: center; justify-content: space-between; padding: 8px 0; font-size: 13px; }
.article .rang { font-variant-numeric: tabular-nums; font-weight: 700; color: var(--or-texte); margin-right: 10px; }
.article b { font-weight: 600; }
.article .q { color: var(--gris); }
.article .mnt { font-weight: 700; font-variant-numeric: tabular-nums; }

/* « Résultat net » sous les deux cases Entré/Sorti — la géométrie de la
   maquette (filet au-dessus, libellé à gauche, montant à droite). */
.ligne-net {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: 12px; padding-top: 12px; border-top: 1px solid var(--filet);
  font-size: 12.5px; color: var(--gris);
}
.ligne-net b {
  font-weight: 700; color: var(--encre);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}

.gros-or {
  font-size: 26px; font-weight: 700; font-variant-numeric: tabular-nums;
  white-space: nowrap; margin-top: 12px; color: var(--or-texte);
}
.barre-progres { margin-top: 16px; height: 6px; border-radius: 3px; background: var(--puce); }
.barre-progres i { display: block; height: 6px; border-radius: 3px; background: var(--or); }
.echeance {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--filet); font-size: 12.5px;
}

/* ── l'entrée, le détail, le pied ─────────────────────────────────────── */

#entree { display: flex; justify-content: center; padding-top: 12px; }
.carte-entree { max-width: 430px; width: 100%; }
.carte-entree h2 { font-size: 18px; font-weight: 800; }
.carte-entree p { font-size: 13px; color: var(--gris); line-height: 1.5; margin-top: 8px; }
textarea {
  width: 100%; margin-top: 12px; font-family: inherit; font-size: 13px;
  border: 1px solid var(--bord); border-radius: 12px; padding: 12px;
  resize: vertical; background: var(--fond); color: var(--encre);
}
textarea:focus { outline: 2px solid var(--or); border-color: transparent; }
.carte-entree .bouton { width: 100%; margin-top: 10px; }
.message { font-size: 13px; margin-top: 10px; line-height: 1.4; color: var(--sortie); }

.grille-detail { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; margin-top: 12px; }
.deux-cases { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 12px; }
.case-flux { background: var(--fond); border-radius: 12px; padding: 12px 14px; }
.case-flux .m { font-size: 19px; font-weight: 700; font-variant-numeric: tabular-nums; margin-top: 2px; }

.pied { text-align: center; padding: 14px 20px 26px; }
.pied .sous { color: var(--gris); }
.pied .bouton { margin-bottom: 10px; }

/* ── la barre du bas — la navigation des écrans étroits ─────────────────── */
/*
  ⚠ Sous 980 px le rail disparaît, et rien ne le remplaçait : sur un téléphone
  la page n'avait AUCUNE navigation — mesuré le 07/08 dans une fenêtre de
  886 px, où « les modifs ne sont pas appliquées » (porteur) voulait dire
  « tout est caché ». La forme vient du mockup mobile « 2a » annoté : barre
  SOMBRE, icône + libellé, l'actif à l'accent. Le trait de l'actif passe
  AU-DESSUS (la maquette le soulignait, mais collé au bord bas de l'écran un
  soulignement serait mangé par le geste système). 10,5 px et non 11,5 :
  « Transactions » × 6 entrées ne tient pas à 390 px — le mockup lui-même
  coupait « Réglages » au bord.
*/
.barre-bas { display: none; }

@media (max-width: 980px) {
  .cartes { grid-template-columns: 1fr; }
  .trois-blocs { grid-template-columns: 1fr; }
  .rail { display: none; }
  .kpis { gap: 28px; }
  .kpi .valeur { font-size: 24px; }

  .barre-bas {
    display: flex;
    position: fixed; bottom: 0; left: 0; right: 0; z-index: 40;
    background: var(--nuit);
    border-top: 1px solid rgba(255, 255, 255, .09);
    /* env() : sous la barre de geste d'un iPhone, sinon elle la recouvre. */
    padding: 5px 4px calc(5px + env(safe-area-inset-bottom));
  }
  .onglet-bas {
    flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px;
    background: none; border: 0; cursor: pointer;
    padding: 7px 2px 5px;
    color: var(--nuit-sous);
    border-top: 2.5px solid transparent;
    font: inherit; font-size: 10.5px; font-weight: 500;
  }
  .onglet-bas.actif { color: var(--or); border-top-color: var(--or); font-weight: 700; }
  .onglet-bas:focus-visible { outline: 2px solid var(--or); outline-offset: -2px; }

  /* La place de la barre fixe, sinon elle recouvre la fin de la page. */
  main { padding-bottom: 92px; }
  .pied { padding-bottom: calc(78px + env(safe-area-inset-bottom)); }
}
@media (max-width: 560px) {
  .large { padding: 0 14px; }
  .titre-ligne { padding: 14px 2px 18px; }
  .titre-ligne h1 { font-size: 20px; }
  .filtres { width: 100%; }
  .segments { flex: 1; }
  .segments span { flex: 1; text-align: center; padding: 7px 8px; }
}
