/* =======================================================================
   Calculatrice Marges - feuille de style unique.
   Theme applique via <html data-theme="sombre|clair"> (pilote par app.js).
   ======================================================================= */

:root,
:root[data-theme='sombre'] {
  --fond: #16181d;
  --surface: #1e2128;
  --surface-2: #252932;
  --surface-3: #2d323d;
  --bord: #343a47;
  --bord-clair: #414958;
  --texte: #e7e9ee;
  --texte-doux: #9aa4b4;
  --texte-faible: #6b7482;
  --accent: #5c96ff;
  --accent-fort: #3f7bec;
  --accent-doux: rgba(92, 150, 255, 0.14);
  --ok: #46c79b;
  --ok-doux: rgba(70, 199, 155, 0.12);
  --attention: #e2a53f;
  --attention-doux: rgba(226, 165, 63, 0.14);
  --danger: #e8636e;
  --danger-doux: rgba(232, 99, 110, 0.14);
  --ombre: 0 6px 24px rgba(0, 0, 0, 0.35);
  color-scheme: dark;
}

:root[data-theme='clair'] {
  --fond: #f4f5f8;
  --surface: #ffffff;
  --surface-2: #f0f2f6;
  --surface-3: #e7eaf0;
  --bord: #dce0e8;
  --bord-clair: #c9cfda;
  --texte: #1d2330;
  --texte-doux: #5a6472;
  --texte-faible: #8a93a2;
  --accent: #2f6fe0;
  --accent-fort: #1f5bc4;
  --accent-doux: rgba(47, 111, 224, 0.1);
  --ok: #17916b;
  --ok-doux: rgba(23, 145, 107, 0.1);
  --attention: #b9791b;
  --attention-doux: rgba(185, 121, 27, 0.12);
  --danger: #cf3742;
  --danger-doux: rgba(207, 55, 66, 0.09);
  --ombre: 0 6px 20px rgba(20, 30, 60, 0.12);
  color-scheme: light;
}

* {
  box-sizing: border-box;
}

/* `display` pose par nos classes l'emporte sur la regle [hidden] du navigateur :
   on la retablit explicitement. */
[hidden] {
  display: none !important;
}

html,
body {
  height: 100%;
  margin: 0;
}

body {
  font-family: 'Segoe UI', system-ui, -apple-system, Roboto, sans-serif;
  font-size: 14px;
  line-height: 1.5;
  color: var(--texte);
  background: var(--fond);
  -webkit-font-smoothing: antialiased;
  -webkit-text-size-adjust: 100%;
}

#app {
  display: flex;
  flex-direction: column;
  height: 100vh;
  /* Sur mobile, la barre du navigateur mange une partie de 100vh. */
  height: 100dvh;
}

/* -- Barre superieure --------------------------------------------------- */
.barre {
  display: flex;
  align-items: center;
  gap: 20px;
  padding: 0 18px;
  height: 52px;
  background: var(--surface);
  border-bottom: 1px solid var(--bord);
  flex-shrink: 0;
}

.barre-titre {
  display: flex;
  align-items: center;
  gap: 9px;
  font-weight: 650;
  font-size: 15px;
  letter-spacing: 0.2px;
}

.logo {
  font-size: 20px;
}

.barre-actions {
  display: flex;
  gap: 8px;
  margin-left: auto;
}

/* -- Vue ---------------------------------------------------------------- */
.vue {
  flex: 1;
  min-height: 0;
  overflow-y: auto;
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 16px;
  max-width: 940px;
  width: 100%;
  margin: 0 auto;
}

.carte {
  background: var(--surface);
  border: 1px solid var(--bord);
  border-radius: 12px;
  padding: 18px 20px;
}

/* -- Saisie ------------------------------------------------------------- */
.ligne-article {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-bottom: 18px;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--bord);
}

.champ-article {
  flex: 1;
  min-width: 0;
  padding: 8px 0;
  font: inherit;
  font-size: 19px;
  font-weight: 650;
  color: var(--texte);
  background: transparent;
  border: 0;
  border-bottom: 1px dashed transparent;
  outline: none;
}

.champ-article::placeholder {
  color: var(--texte-faible);
  font-weight: 500;
}

.champ-article:hover {
  border-bottom-color: var(--bord-clair);
}

.champ-article:focus {
  border-bottom-color: var(--accent);
}

.bloc-tva {
  display: flex;
  align-items: center;
  gap: 9px;
  flex-shrink: 0;
}

.bloc-tva > label {
  font-size: 12px;
  font-weight: 600;
  color: var(--texte-doux);
  text-transform: uppercase;
  letter-spacing: 0.4px;
}

.bloc-tva .champ-prix-perso {
  width: 96px;
}

.grille-saisie {
  display: grid;
  grid-template-columns: 1fr 132px 1fr 132px;
  gap: 16px;
  align-items: end;
}

/* Le coefficient est un champ a part : c'est le lien entre les deux prix. */
.champ-coef .champ-prix input {
  color: var(--accent);
  background: var(--accent-doux);
  border-color: var(--bord-clair);
}

.champ-coef > label {
  color: var(--accent);
}

.champ {
  display: flex;
  flex-direction: column;
  gap: 7px;
  min-width: 0;
}

.champ > label {
  font-size: 12px;
  font-weight: 600;
  color: var(--texte-doux);
  text-transform: uppercase;
  letter-spacing: 0.4px;
}

.champ-prix {
  position: relative;
  display: flex;
  align-items: center;
}

.champ-prix input {
  width: 100%;
  padding: 10px 30px 10px 12px;
  font-size: 16px;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
  color: var(--texte);
  background: var(--surface-2);
  border: 1px solid var(--bord);
  border-radius: 9px;
  outline: none;
}

.champ-prix-grand input {
  padding: 11px 34px 11px 13px;
  font-size: 24px;
  font-weight: 700;
  letter-spacing: -0.2px;
}

.champ-prix-grand .unite {
  right: 13px;
  font-size: 17px;
}

.champ-prix input:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-doux);
}

.champ-prix input.invalide {
  border-color: var(--danger);
}

.unite {
  position: absolute;
  right: 11px;
  color: var(--texte-faible);
  font-size: 14px;
  pointer-events: none;
}

select {
  padding: 9px 11px;
  font: inherit;
  font-size: 14px;
  color: var(--texte);
  background: var(--surface-2);
  border: 1px solid var(--bord);
  border-radius: 9px;
  outline: none;
}

select:focus {
  border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-doux);
}

/* -- Les deux colonnes de resultat -------------------------------------- */
.colonnes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 14px;
}

.colonne {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.colonne-titre {
  margin: 0;
  font-size: 12px;
  font-weight: 650;
  text-transform: uppercase;
  letter-spacing: 0.7px;
  color: var(--texte-doux);
}

.colonne-remise .colonne-titre {
  color: var(--accent);
}

.lignes {
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 1px;
}

.lignes > div {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  padding: 7px 0;
  border-bottom: 1px solid var(--bord);
}

.lignes > div:last-child {
  border-bottom: 0;
}

.lignes dt {
  font-size: 13px;
  font-weight: 600;
  color: var(--texte-doux);
  text-transform: uppercase;
  letter-spacing: 0.4px;
}

.lignes dd {
  margin: 0;
  font-size: 19px;
  font-weight: 650;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.ecart {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-top: auto;
  padding: 12px 14px;
  background: var(--surface-2);
  border: 1px solid var(--bord);
  border-radius: 10px;
}

.ecart-libelle {
  font-size: 12px;
  font-weight: 650;
  text-transform: uppercase;
  letter-spacing: 0.7px;
  color: var(--texte-doux);
}

/* L'ecart se lit ET se saisit : c'est un champ deguise en gros resultat. */
.ecart-champ {
  position: relative;
  display: flex;
  align-items: center;
  flex: 1;
  min-width: 0;
}

.ecart-champ input {
  width: 100%;
  padding: 2px 26px 2px 0;
  font: inherit;
  font-size: 30px;
  font-weight: 700;
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
  text-align: right;
  color: var(--texte);
  background: transparent;
  border: 0;
  border-bottom: 1px dashed transparent;
  outline: none;
}

.ecart-champ input:hover {
  border-bottom-color: var(--bord-clair);
}

.ecart-champ input:focus {
  border-bottom-color: currentColor;
}

.ecart-champ .unite {
  right: 0;
  font-size: 20px;
}

.ecart.positif {
  background: var(--ok-doux);
  border-color: var(--ok);
}

.ecart.positif .ecart-champ input {
  color: var(--ok);
}

.ecart.negatif {
  background: var(--danger-doux);
  border-color: var(--danger);
}

.ecart.negatif .ecart-champ input {
  color: var(--danger);
}

/* Ecart saisi mais pas encore confronte a deux prix : ce n'est pas un resultat. */
.ecart.en-attente {
  opacity: 0.55;
}

/* -- Ecart des ecarts : ce que la remise retire -------------------------- */
.difference {
  display: flex;
  align-items: baseline;
  gap: 14px;
  margin: 0;
  padding: 11px 16px;
  background: var(--surface);
  border: 1px solid var(--bord);
  border-radius: 10px;
}

.difference-libelle {
  font-size: 12px;
  font-weight: 650;
  text-transform: uppercase;
  letter-spacing: 0.7px;
  color: var(--texte-doux);
}

.difference-valeur {
  font-size: 22px;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  color: var(--attention);
  white-space: nowrap;
}

.difference-note {
  margin-left: auto;
  font-size: 12.5px;
  font-variant-numeric: tabular-nums;
  color: var(--texte-faible);
  text-align: right;
}

/* -- Alertes ------------------------------------------------------------ */
.alertes {
  margin: 0;
  padding: 10px 14px;
  font-size: 13px;
  color: var(--attention);
  background: var(--attention-doux);
  border: 1px solid var(--attention);
  border-radius: 10px;
  white-space: pre-line;
}

.alertes.danger {
  color: var(--danger);
  background: var(--danger-doux);
  border-color: var(--danger);
}

/* -- Boutons ------------------------------------------------------------ */
.bouton {
  padding: 8px 15px;
  font: inherit;
  font-weight: 600;
  color: var(--texte);
  background: var(--surface-2);
  border: 1px solid var(--bord-clair);
  border-radius: 8px;
  cursor: pointer;
}

.bouton:hover:not(:disabled) {
  background: var(--surface-3);
}

.bouton-discret {
  background: transparent;
}

.bouton-icone {
  padding: 8px 11px;
  background: transparent;
  font-size: 15px;
  line-height: 1;
}

/* -- Pied de page ------------------------------------------------------- */
.pied {
  margin: 0 0 4px;
  text-align: center;
  font-size: 12px;
  color: var(--texte-faible);
}

/* -- Toasts ------------------------------------------------------------- */
.toasts {
  position: fixed;
  right: 18px;
  bottom: 18px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  z-index: 50;
}

.toast {
  padding: 10px 15px;
  font-size: 13px;
  color: var(--texte);
  background: var(--surface-3);
  border: 1px solid var(--bord-clair);
  border-radius: 9px;
  box-shadow: var(--ombre);
  opacity: 1;
  transition: opacity 0.22s ease, transform 0.22s ease;
}

.toast.sortie {
  opacity: 0;
  transform: translateY(6px);
}

.toast-erreur {
  border-color: var(--danger);
}

/* =======================================================================
   Adaptation aux ecrans etroits et au telephone pliant.
   - jusqu'a 620 px : ecran de couverture du pliant / telephone classique,
     une seule colonne de resultats, saisies deux par deux.
   - 621 a 860 px : ecran interieur du pliant deplie (presque carre), on
     garde les deux colonnes de resultats cote a cote.
   - au-dela : disposition bureau, les quatre saisies en ligne.
   Tout est en media queries : le passage plie / deplie se fait tout seul,
   sans rechargement.
   ======================================================================= */

@media (max-width: 860px) {
  .vue {
    padding: 14px;
    gap: 12px;
  }

  .carte {
    padding: 15px 16px;
  }

  .grille-saisie {
    grid-template-columns: 1fr 1fr;
    gap: 13px;
  }

  .ligne-article {
    margin-bottom: 15px;
    padding-bottom: 13px;
  }
}

@media (max-width: 620px) {
  .colonnes {
    grid-template-columns: 1fr;
  }

  /* La barre doit tenir sur une seule ligne, titre et boutons compris. */
  .barre {
    gap: 10px;
    padding: 0 12px;
  }

  .barre-titre {
    font-size: 13px;
    gap: 7px;
    white-space: nowrap;
  }

  .logo {
    font-size: 17px;
  }

  .barre-actions {
    gap: 6px;
  }

  .barre .bouton {
    padding: 8px 11px;
  }

  .champ > label {
    font-size: 11px;
    letter-spacing: 0.2px;
  }

  .ligne-article {
    flex-wrap: wrap;
    gap: 10px;
  }

  .champ-article {
    flex: 1 1 100%;
    font-size: 17px;
  }

  .bloc-tva {
    flex: 1 1 auto;
  }

  .bloc-tva select {
    flex: 1;
    min-width: 0;
  }

  .champ-prix-grand input {
    font-size: 20px;
    padding: 10px 28px 10px 11px;
  }

  .champ-prix-grand .unite {
    right: 10px;
    font-size: 15px;
  }

  .ecart-champ input {
    font-size: 26px;
  }

  .difference {
    flex-wrap: wrap;
    gap: 6px 12px;
  }

  .difference-note {
    flex: 1 1 100%;
    margin-left: 0;
    text-align: left;
  }
}

/* Doigt plutot que souris : cibles plus hautes, pas d'effet de survol. */
@media (pointer: coarse) {
  .champ-prix input,
  select,
  .bouton {
    min-height: 44px;
  }

  .ecart-champ input {
    min-height: 44px;
  }

  .champ-article:hover,
  .ecart-champ input:hover {
    border-bottom-color: transparent;
  }
}
