/* ===========================================================================
   GI STRONGER — Thème Bootstrap (navy + vert)
   Unique feuille custom : surcharge des variables Bootstrap 5.3 pour la marque.
   Aucun composant n'est réécrit — tout le reste passe par des classes Bootstrap.
   primaire = vert nuit #14352a   |   succès/secondaire = vert #3d6450
   =========================================================================== */

:root,
[data-bs-theme="light"] {
  /* Couleurs de marque (utilisées par bg-*, text-*, text-bg-*, border-*, link-*)
     primaire = vert nuit #14352a   |   succès/secondaire = vert #3d6450 */
  --bs-primary: #14352a;
  --bs-primary-rgb: 20, 53, 42;
  --bs-success: #3d6450;
  --bs-success-rgb: 61, 100, 80;

  /* Liens */
  --bs-link-color: #14352a;
  --bs-link-color-rgb: 20, 53, 42;
  --bs-link-hover-color: #3d6450;
  --bs-link-hover-color-rgb: 61, 100, 80;
}

/* --- Boutons (les couleurs des boutons Bootstrap sont compilées en dur :
       on les remappe via leurs variables locales) --- */
.btn-primary {
  --bs-btn-bg: #14352a;
  --bs-btn-border-color: #14352a;
  --bs-btn-hover-bg: #1d4b3a;
  --bs-btn-hover-border-color: #1d4b3a;
  --bs-btn-active-bg: #0e261d;
  --bs-btn-active-border-color: #0e261d;
  --bs-btn-disabled-bg: #14352a;
  --bs-btn-disabled-border-color: #14352a;
}

.btn-outline-primary {
  --bs-btn-color: #14352a;
  --bs-btn-border-color: #14352a;
  --bs-btn-hover-bg: #14352a;
  --bs-btn-hover-border-color: #14352a;
  --bs-btn-active-bg: #14352a;
  --bs-btn-active-border-color: #14352a;
}

.btn-success {
  --bs-btn-bg: #3d6450;
  --bs-btn-border-color: #3d6450;
  --bs-btn-hover-bg: #345643;
  --bs-btn-hover-border-color: #345643;
  --bs-btn-active-bg: #2c4a39;
  --bs-btn-active-border-color: #2c4a39;
  --bs-btn-disabled-bg: #3d6450;
  --bs-btn-disabled-border-color: #3d6450;
}

.btn-outline-success {
  --bs-btn-color: #3d6450;
  --bs-btn-border-color: #3d6450;
  --bs-btn-hover-bg: #3d6450;
  --bs-btn-hover-border-color: #3d6450;
  --bs-btn-active-bg: #3d6450;
  --bs-btn-active-border-color: #3d6450;
}

/* Navbar de marque : lien actif en couleur primaire */
.navbar-light .navbar-nav .nav-link.active,
.navbar .navbar-nav .nav-link.active {
  color: #14352a;
  font-weight: 600;
}

/* Bootstrap 5.3 compile .text-bg-* avec le RGB en dur (bleu) : on force la marque */
.text-bg-primary { background-color: #14352a !important; }
.text-bg-success { background-color: #3d6450 !important; }

/* ===========================================================================
   Loader de page (cercle de points) — overlay affiché pendant le chargement.
   Le fond suit la couleur primaire dynamique (réglable dans Admin > Couleurs).
   =========================================================================== */
#gi-page-loader {
  position: fixed;
  inset: 0;
  z-index: 2000;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(255, 255, 255, 0.55);
  backdrop-filter: blur(2px);
  -webkit-backdrop-filter: blur(2px);
  opacity: 1;
  transition: opacity .45s ease, visibility .45s ease;
}
#gi-page-loader.gi-loaded {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.gi-dot-spinner {
  position: relative;
  width: 64px;
  height: 64px;
}
.gi-dot-spinner .gi-dot {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
.gi-dot-spinner .gi-dot::before {
  content: "";
  display: block;
  width: 11px;
  height: 11px;
  margin: 0 auto;
  background: var(--bs-primary, #14352a);
  border-radius: 50%;
  animation: gi-dot-fade 0.9s linear infinite;
}
.gi-dot-spinner .gi-dot:nth-child(1)  { transform: rotate(0deg); }
.gi-dot-spinner .gi-dot:nth-child(2)  { transform: rotate(45deg); }
.gi-dot-spinner .gi-dot:nth-child(3)  { transform: rotate(90deg); }
.gi-dot-spinner .gi-dot:nth-child(4)  { transform: rotate(135deg); }
.gi-dot-spinner .gi-dot:nth-child(5)  { transform: rotate(180deg); }
.gi-dot-spinner .gi-dot:nth-child(6)  { transform: rotate(225deg); }
.gi-dot-spinner .gi-dot:nth-child(7)  { transform: rotate(270deg); }
.gi-dot-spinner .gi-dot:nth-child(8)  { transform: rotate(315deg); }
.gi-dot-spinner .gi-dot:nth-child(1)::before { animation-delay: -0.787s; }
.gi-dot-spinner .gi-dot:nth-child(2)::before { animation-delay: -0.675s; }
.gi-dot-spinner .gi-dot:nth-child(3)::before { animation-delay: -0.562s; }
.gi-dot-spinner .gi-dot:nth-child(4)::before { animation-delay: -0.45s; }
.gi-dot-spinner .gi-dot:nth-child(5)::before { animation-delay: -0.337s; }
.gi-dot-spinner .gi-dot:nth-child(6)::before { animation-delay: -0.225s; }
.gi-dot-spinner .gi-dot:nth-child(7)::before { animation-delay: -0.112s; }
.gi-dot-spinner .gi-dot:nth-child(8)::before { animation-delay: 0s; }
@keyframes gi-dot-fade {
  0%   { opacity: 1; transform: scale(1); }
  100% { opacity: 0.15; transform: scale(0.6); }
}

/* ===========================================================================
   Bande d'annonce défilante (promotions) — sous la navbar.
   =========================================================================== */
.gi-marquee { overflow: hidden; white-space: nowrap; }
.gi-marquee__track {
  display: inline-block;
  white-space: nowrap;
  padding-left: 100%;            /* le contenu démarre au bord droit */
  will-change: transform;
  animation: gi-marquee var(--gi-marquee-duration, 30s) linear infinite;
}
.gi-marquee:hover .gi-marquee__track { animation-play-state: paused; }
.gi-marquee__group { display: inline-block; }
@keyframes gi-marquee {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-100%); }
}

/* Lisibilité des liens sur fonds sombres (footer en text-bg-primary/dark) */
.text-bg-primary a:not(.btn),
.text-bg-dark a:not(.btn) {
  --bs-link-color-rgb: 255, 255, 255;
  --bs-link-hover-color-rgb: 129, 204, 75;
  color: rgba(255, 255, 255, 0.85);
}
.text-bg-primary a:not(.btn):hover,
.text-bg-dark a:not(.btn):hover {
  color: #81cc4b;
}
/* Liens du pied de page : jamais soulignés (la couleur de survol est réglable en admin) */
#siteFooter a:not(.btn),
#siteFooter a:not(.btn):hover { text-decoration: none; }

/* ===========================================================================
   DESIGN SYSTEM 2026 — surcouche premium (non destructive) au-dessus de Bootstrap.
   Inspiration : Stripe / Linear / Vercel / Apple. Héritée par toutes les pages.
   =========================================================================== */
:root {
  /* Rayons & ombres douces */
  --gi-radius: .8rem;
  --gi-radius-lg: 1.25rem;
  --gi-shadow-sm: 0 2px 10px rgba(16, 24, 40, .06);
  --gi-shadow-md: 0 10px 28px rgba(16, 24, 40, .08);
  --gi-shadow-lg: 0 22px 55px rgba(16, 24, 40, .13);
  --gi-ease: cubic-bezier(.22, .61, .36, 1);
  /* Typographie */
  --bs-body-font-family: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --bs-body-color: #1f2733;
  --bs-secondary-color: #5b6472;
  --bs-border-color: rgba(16, 24, 40, .10);
}

/* Typographie ------------------------------------------------------------- */
body { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; letter-spacing: -.01em; }
h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 { font-weight: 700; letter-spacing: -.02em; line-height: 1.18; }
.display-1, .display-2, .display-3, .display-4, .display-5, .display-6 { font-weight: 800; letter-spacing: -.03em; }
p { line-height: 1.7; }
.lead { font-weight: 400; }

/* Cartes premium ---------------------------------------------------------- */
.card { border: 1px solid rgba(16, 24, 40, .06); border-radius: var(--gi-radius-lg); }
.card.shadow-sm { box-shadow: var(--gi-shadow-sm) !important; }
.card.shadow { box-shadow: var(--gi-shadow-md) !important; }
.rounded-3 { border-radius: var(--gi-radius) !important; }
.rounded-4 { border-radius: var(--gi-radius-lg) !important; }

/* Boutons ----------------------------------------------------------------- */
.btn { border-radius: var(--gi-radius); font-weight: 600;
  transition: transform .2s var(--gi-ease), box-shadow .25s var(--gi-ease), background-color .2s, border-color .2s, color .2s; }
.btn-primary, .btn-success, .btn-dark { box-shadow: 0 1px 2px rgba(16, 24, 40, .12); }
.btn-primary:hover, .btn-success:hover, .btn-dark:hover, .btn-light:hover { transform: translateY(-1px); box-shadow: var(--gi-shadow-md); }
.btn-primary:active, .btn-success:active, .btn-dark:active { transform: translateY(0); }
.btn.rounded-pill { border-radius: 50rem; }

/* Formulaires ------------------------------------------------------------- */
.form-control, .form-select { border-radius: .7rem; border-color: rgba(16, 24, 40, .14); transition: border-color .2s, box-shadow .2s; }
.form-control:focus, .form-select:focus { border-color: rgba(var(--bs-primary-rgb), .55); box-shadow: 0 0 0 .2rem rgba(var(--bs-primary-rgb), .12); }
.input-group-text { border-radius: .7rem; }
.badge { font-weight: 600; }

/* Navbar : fond clair net (PAS de backdrop-filter : il casserait l'offcanvas fixe du menu mobile) */
.navbar.bg-light { background-color: #ffffff !important; }

/* Icônes des entrées : visibles uniquement dans le tiroir mobile */
@media (min-width: 992px) { .gi-nav-ico { display: none !important; } }
@media (max-width: 991.98px) {
  #mobileNav { width: 100% !important; max-width: 100% !important; }
  #mobileNav .offcanvas-body { background: #f6f7f9; display: block; }
  #mobileNav .navbar-nav { gap: .15rem; background: #fff; border-radius: 1.1rem; padding: .5rem; box-shadow: var(--gi-shadow-sm); }
  #mobileNav .nav-item { border-bottom: 1px solid rgba(16, 24, 40, .05); }
  #mobileNav .nav-item:last-child { border-bottom: 0; }
  #mobileNav .nav-link { display: flex; align-items: center; gap: .8rem; padding: .7rem .55rem; font-weight: 600; color: #1f2733; border-radius: .7rem; }
  #mobileNav .nav-link.active { color: var(--bs-primary); }
  #mobileNav .nav-link.dropdown-toggle::after { margin-left: auto; }
  #mobileNav .gi-nav-ico { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; border-radius: .8rem; background: rgba(var(--bs-primary-rgb), .1); color: var(--bs-primary); font-size: 1.1rem; flex: 0 0 auto; }
  #mobileNav .dropdown-menu { position: static !important; float: none; transform: none !important; inset: auto !important; box-shadow: none; border: 0; padding-left: 3.2rem; background: transparent; width: 100%; }
  #mobileNav .dropdown-item { padding: .45rem .5rem; border-radius: .5rem; white-space: normal; }
}

/* Utilitaires du design system ------------------------------------------- */
.gi-glass { background: rgba(255, 255, 255, .7); backdrop-filter: blur(12px) saturate(160%); -webkit-backdrop-filter: blur(12px) saturate(160%); border: 1px solid rgba(255, 255, 255, .55); }
.gi-gradient-text { background: linear-gradient(120deg, var(--bs-primary), var(--bs-success)); -webkit-background-clip: text; background-clip: text; color: transparent; }
.gi-hover-lift { transition: transform .35s var(--gi-ease), box-shadow .35s var(--gi-ease), border-color .35s var(--gi-ease); }
.gi-hover-lift:hover { transform: translateY(-6px); box-shadow: var(--gi-shadow-lg); border-color: rgba(var(--bs-primary-rgb), .18); }
.gi-dot-grid { background-image: radial-gradient(rgba(16, 24, 40, .07) 1px, transparent 1px); background-size: 22px 22px; }
/* Zoom doux de l'image au survol de la carte (portfolio, boutique) */
.gi-zoom { overflow: hidden; }
.gi-zoom > img { transition: transform .6s var(--gi-ease); }
.card:hover .gi-zoom > img, .gi-zoom:hover > img { transform: scale(1.07); }

/* Sticky responsive (utilisé par les récap/sidebars) --------------------- */
@media (min-width: 992px) { .position-lg-sticky { position: sticky !important; } }

/* Espacements généreux (sections premium) -------------------------------- */
.py-6 { padding-top: 4.5rem; padding-bottom: 4.5rem; }
.py-7 { padding-top: 6.5rem; padding-bottom: 6.5rem; }
@media (min-width: 992px) {
  .py-lg-6 { padding-top: 4.5rem; padding-bottom: 4.5rem; }
  .py-lg-7 { padding-top: 6.5rem; padding-bottom: 6.5rem; }
}

/* Animations (scroll reveal) --------------------------------------------- */
.gi-reveal { opacity: 0; transform: translateY(22px); transition: opacity .7s var(--gi-ease), transform .7s var(--gi-ease); will-change: opacity, transform; }
.gi-reveal.gi-in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .gi-reveal { opacity: 1 !important; transform: none !important; transition: none !important; }
  .btn, .gi-hover-lift, .card { transition: none !important; }
}

/* ===========================================================================
   BACK-OFFICE — finitions (topbar, sidebar, tableaux, en-têtes de section)
   =========================================================================== */
/* Barre du haut (glass clair) */
.gi-admin-topbar {
  min-height: 62px;
  background: rgba(255, 255, 255, .9);
  backdrop-filter: saturate(180%) blur(10px);
  -webkit-backdrop-filter: saturate(180%) blur(10px);
  border-bottom: 1px solid rgba(16, 24, 40, .08);
  box-shadow: var(--gi-shadow-sm);
  z-index: 1030;
}
.gi-admin-topbar .navbar-brand { min-height: 62px; }
.gi-admin-topbar .dropdown-toggle::after { color: #98a2b3; }
.gi-admin-topbar .nav-link:hover { color: var(--bs-primary); }
.sidebar .nav-link {
  border-radius: .6rem;
  padding: .5rem .75rem;
  margin: .12rem .5rem;
  color: #475467;
  font-weight: 500;
  transition: background-color .15s ease, color .15s ease;
}
.sidebar .nav-link:hover { background-color: rgba(var(--bs-primary-rgb), .07); color: var(--bs-primary); }
.sidebar .nav-link.active { background-color: rgba(var(--bs-primary-rgb), .12); color: var(--bs-primary) !important; }
.sidebar .nav-link i { font-size: 1.05rem; opacity: .9; }
.sidebar .collapse .nav-link { padding-top: .35rem; padding-bottom: .35rem; font-size: .92rem; }
.sidebar hr { opacity: .08; }

/* Tableaux admin : en-têtes discrets, lignes aérées */
.table > thead th { font-size: .78rem; text-transform: uppercase; letter-spacing: .03em; color: #667085; font-weight: 600; }

/* En-tête de page admin (bloc dégradé) : ombre douce */
.text-bg-primary.bg-gradient.rounded-3 { box-shadow: var(--gi-shadow-md); }

/* Boutons d'action en tableau : léger lift au survol */
td .btn-sm { transition: transform .12s ease, filter .12s ease; }
td .btn-sm:hover { transform: translateY(-1px); filter: brightness(1.04); }
