/* ==========================================================================
   GIM — Design system
   Surcharge Bootstrap 5 (chargé en CDN dans base.html.twig) plutôt que de le
   remplacer : on garde la fiabilité des composants Bootstrap (modals, nav,
   grille) mais avec une identité visuelle propre et de vraies corrections
   iOS Safari (safe-area, tap targets ≥44px, pas de zoom auto sur les inputs,
   fix du scroll des modals).
   ========================================================================== */

:root {
  /* Palette */
  --gim-primary: #0d9488;
  --gim-primary-dark: #0f766e;
  --gim-primary-light: #ccfbf1;
  --gim-ink: #0f172a;
  --gim-muted: #64748b;
  --gim-surface: #ffffff;
  --gim-bg: #f4f7f6;
  --gim-border: #e2e8f0;
  --gim-danger: #dc2626;
  --gim-warning: #d97706;
  --gim-success: #16a34a;

  /* Échelle */
  --gim-radius-sm: 10px;
  --gim-radius: 14px;
  --gim-radius-lg: 20px;
  --gim-shadow: 0 1px 2px rgba(15, 23, 42, 0.06), 0 4px 16px rgba(15, 23, 42, 0.06);
  --gim-font: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", Roboto, Helvetica, Arial, sans-serif;

  /* Zone de tap minimale recommandée par Apple HIG (44x44pt) */
  --gim-tap-min: 44px;

  /* Surcharge des variables Bootstrap 5.3 */
  --bs-primary: var(--gim-primary);
  --bs-primary-rgb: 13, 148, 136;
  --bs-body-font-family: var(--gim-font);
  --bs-body-color: var(--gim-ink);
  --bs-body-bg: var(--gim-bg);
  --bs-border-radius: var(--gim-radius-sm);
  --bs-border-radius-lg: var(--gim-radius);
  --bs-link-color: var(--gim-primary-dark);
  --bs-link-hover-color: var(--gim-primary);
}

/* --------------------------------------------------------------------------
   iOS Safari : zone d'affichage & encoche (Dynamic Island / notch)
   viewport-fit=cover est posé dans base.html.twig ; ici on redistribue les
   safe-area-inset sur les éléments collés aux bords de l'écran.
   -------------------------------------------------------------------------- */
html {
  height: -webkit-fill-available;
}

body {
  min-height: 100vh;
  min-height: -webkit-fill-available;
  background-color: var(--gim-bg);
  padding-left: env(safe-area-inset-left);
  padding-right: env(safe-area-inset-right);
  /* Empêche le "rubber-band" de révéler un fond blanc entre le body et les
     zones home-indicator sur iPhone. */
  -webkit-overflow-scrolling: touch;
}

.navbar {
  padding-top: calc(0.5rem + env(safe-area-inset-top));
}

footer {
  padding-bottom: calc(1rem + env(safe-area-inset-bottom));
}

/* --------------------------------------------------------------------------
   Bandeau hors-ligne (voir public/sw.js) — averti que les données affichées
   viennent du cache et peuvent être obsolètes.
   -------------------------------------------------------------------------- */
#offline-banner {
  position: sticky;
  top: 0;
  z-index: 1080; /* au-dessus de la navbar et des modals */
  padding: 0.5rem 1rem;
  padding-top: calc(0.5rem + env(safe-area-inset-top));
  background: var(--gim-warning);
  color: #fff;
  font-size: 0.85rem;
  font-weight: 600;
  text-align: center;
}

/* --------------------------------------------------------------------------
   Fix historique du scroll des modals sur iOS Safari (conservé et généralisé
   depuis l'ancien <style> inline de base.html.twig).
   -------------------------------------------------------------------------- */
body.modal-open {
  position: fixed;
  width: 100%;
}

.modal-backdrop {
  position: fixed !important;
}

.modal-backdrop.show {
  z-index: 1040;
}

.modal.show {
  z-index: 1050;
}

/* --------------------------------------------------------------------------
   Typo & structure générale
   -------------------------------------------------------------------------- */
main.container {
  padding-bottom: 3rem;
}

h1, h2, h3, .navbar-brand {
  font-weight: 700;
  letter-spacing: -0.01em;
}

.navbar {
  background-color: var(--gim-ink) !important;
}

/* --------------------------------------------------------------------------
   Cards
   -------------------------------------------------------------------------- */
.card {
  border: 1px solid var(--gim-border);
  border-radius: var(--gim-radius);
  box-shadow: var(--gim-shadow);
}

/* --------------------------------------------------------------------------
   Boutons — taille de tap minimale sur tous les écrans, y compris les
   variantes "sm"/icônes qui étaient sous les 44px recommandés par Apple.
   -------------------------------------------------------------------------- */
.btn {
  border-radius: var(--gim-radius-sm);
  min-height: var(--gim-tap-min);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.4rem;
}

.btn-sm {
  min-height: 38px;
  padding-left: 0.9rem;
  padding-right: 0.9rem;
}

/* Boutons ronds "+ / -" (inventaire) : on les agrandit au lieu de les
   rétrécir sur mobile (l'ancienne media query faisait l'inverse). */
.btn-boite {
  min-width: var(--gim-tap-min);
  min-height: var(--gim-tap-min);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  font-size: 1rem;
  padding: 0;
}

/* --------------------------------------------------------------------------
   Formulaires — 16px minimum pour empêcher le zoom automatique de Safari iOS
   au focus d'un champ, et hauteur de tap correcte.
   -------------------------------------------------------------------------- */
.form-control,
.form-select {
  font-size: 16px;
  min-height: var(--gim-tap-min);
  border-radius: var(--gim-radius-sm);
}

/* Filet de sécurité pour les radios/checkbox rendus sans thème Bootstrap
   (widgets Symfony non enveloppés en .form-check, ex: traitement/new). */
input[type="radio"],
input[type="checkbox"] {
  width: 1.25em;
  height: 1.25em;
}

.form-check-input {
  width: 1.25em;
  height: 1.25em;
}

.form-check {
  min-height: var(--gim-tap-min);
  display: flex;
  align-items: center;
  gap: 0.5rem;
}

/* --------------------------------------------------------------------------
   Tables — le scroll horizontal (.table-responsive) reste en place pour les
   grands écrans, mais sous 576px on bascule en liste de cartes empilées
   (voir data-label posés dans les templates) : plus lisible qu'un tableau
   compressé sur un iPhone.
   -------------------------------------------------------------------------- */
@media (max-width: 575.98px) {
  .table-responsive-stack table,
  .table-responsive-stack thead,
  .table-responsive-stack tbody,
  .table-responsive-stack th,
  .table-responsive-stack td,
  .table-responsive-stack tr {
    display: block;
  }

  .table-responsive-stack thead tr {
    position: absolute;
    top: -9999px;
    left: -9999px;
  }

  .table-responsive-stack tr {
    margin-bottom: 1rem;
    border: 1px solid var(--gim-border);
    border-radius: var(--gim-radius);
    box-shadow: var(--gim-shadow);
    padding: 0.5rem 0.75rem;
    background: var(--gim-surface);
  }

  .table-responsive-stack td {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    text-align: right;
    border: none;
    padding: 0.5rem 0.25rem;
  }

  .table-responsive-stack td::before {
    content: attr(data-label);
    font-weight: 600;
    color: var(--gim-muted);
    text-align: left;
  }

  /* Inventaire : la quantité totale est l'info utile au premier coup d'oeil,
     le nombre de boîtes est secondaire (juste un détail de conditionnement)
     — on inverse le poids visuel par rapport au reste du tableau. */
  .table-responsive-stack td[data-label="Quantité totale"] {
    font-size: 1.15rem;
    font-weight: 700;
    color: var(--gim-ink);
  }

  .table-responsive-stack td[data-label="Nombre de boîtes"] {
    padding-top: 0.25rem;
    padding-bottom: 0.25rem;
  }

  .table-responsive-stack td[data-label="Nombre de boîtes"]::before {
    font-size: 0.8rem;
    font-weight: 400;
  }

  .table-responsive-stack td[data-label="Nombre de boîtes"] .nbBoite-text {
    font-size: 0.8rem;
    font-weight: 400;
    color: var(--gim-muted);
  }

  .table-responsive-stack td[data-label="Nombre de boîtes"] .btn-boite {
    min-width: 36px;
    min-height: 36px;
    font-size: 0.7rem;
  }

  .table-responsive-stack td[data-label="Nombre de boîtes"] .btn-boite-container {
    gap: 0.5rem;
  }
}

/* --------------------------------------------------------------------------
   Switch custom → composant natif Bootstrap réutilisé partout
   -------------------------------------------------------------------------- */
.form-switch .form-check-input {
  width: 2.5em;
  height: 1.4em;
}

/* --------------------------------------------------------------------------
   Zone de recherche / input-group : garde une hauteur de tap correcte
   -------------------------------------------------------------------------- */
.input-group > .form-control,
.input-group > .btn {
  min-height: var(--gim-tap-min);
}
