/* RS2EYEWEAR — final shared component overrides loaded after the parent theme. */

@font-face {
  font-display: swap;
  font-family: "Material Icons";
  font-style: normal;
  font-weight: 400;
  src:
    url("../../../hummingbird/assets/fonts/MaterialIcons-Regular-2d8017489da689caedc1.woff2") format("woff2"),
    url("../../../hummingbird/assets/fonts/MaterialIcons-Regular-08cefa1bc6566a650da7.woff") format("woff");
}

body:not(#index) .header-top .header-block__icon {
  display: none !important;
}

body:not(#index) .header-top .header-block__action-btn.dropdown-toggle::after {
  display: none !important;
}

body:not(#index) .header-top .header-block__action-btn,
body:not(#index) .header-top .header-block__title,
body:not(#index) .header-top .header-block__subtitle {
  color: #fff !important;
  opacity: 1 !important;
}

body:not(#index) .header-top .cart-preview .header-block__badge {
  align-items: center;
  background: var(--rs2-red-fill) !important;
  border-radius: 999px;
  color: #fff !important;
  display: inline-flex;
  font-size: .68rem;
  font-weight: 850;
  height: 1.35rem;
  justify-content: center;
  min-width: 1.35rem;
  padding-inline: .3rem;
}

body:not(#index) .header-top .cart-preview.inactive .header-block__badge {
  background: #2b2e36 !important;
  color: #c8cbd1 !important;
}

body:not(#index) .footer__before .ps-emailsubscription p.fs-6.text-body-secondary {
  -webkit-text-fill-color: #aeb1b8;
  color: #aeb1b8 !important;
  opacity: 1 !important;
}

html[data-rs2-theme="light"] body:not(#index) .header-top .header-block__action-btn,
html[data-rs2-theme="light"] body:not(#index) .header-top .header-block__title,
html[data-rs2-theme="light"] body:not(#index) .header-top .header-block__subtitle {
  color: #14151a !important;
}

/* Garde-fou contre les debordements horizontaux.
   Ne JAMAIS ajouter html a ce selecteur : si <html> n'est plus en overflow
   `visible`, l'overflow:hidden que Bootstrap pose sur <body> a l'ouverture
   d'un modal ne remonte plus au viewport. La page continue alors de defiler
   derriere le modal et deux barres de defilement coexistent. */
body {
  max-width: 100%;
  overflow-x: hidden;
}

.header-block .dropdown-menu .material-icons {
  display: none;
}

@media (max-width: 767.98px) {
  .header-block__action-btn {
    align-items: center;
    display: inline-flex;
    height: 2.5rem;
    justify-content: center;
    min-width: 2.5rem;
    position: relative;
  }

  .header-block__action-btn .header-block__icon {
    display: none !important;
  }

  #userMenuButton::before,
  .cart-preview .header-block__action-btn::before {
    background-position: center;
    background-repeat: no-repeat;
    background-size: contain;
    content: "";
    display: block;
    height: 1.25rem;
    width: 1.25rem;
  }

  #userMenuButton::before {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f7f7f8' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='7.5' r='3.5'/%3E%3Cpath d='M5 21a7 7 0 0 1 14 0'/%3E%3C/svg%3E");
  }

  .cart-preview .header-block__action-btn::before {
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23f7f7f8' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 4h2l2.1 10.2a2 2 0 0 0 2 1.6h7.8a2 2 0 0 0 2-1.6L20 8H6'/%3E%3Ccircle cx='9' cy='20' r='1'/%3E%3Ccircle cx='18' cy='20' r='1'/%3E%3C/svg%3E");
  }

  .cart-preview .header-block__badge {
    align-items: center;
    background: var(--rs2-red-fill) !important;
    border: 2px solid var(--rs2-bg);
    border-radius: 999px;
    color: #fff !important;
    display: inline-flex;
    font-size: .62rem;
    font-weight: 850;
    height: 1.2rem;
    justify-content: center;
    min-width: 1.2rem;
    padding: 0 .2rem;
    position: absolute;
    right: -.1rem;
    top: -.1rem;
  }

  .rs2-nav {
    max-width: 100%;
  }
}

/* Global RS2 header — same visual language as the cinematic homepage. */

body:not(#index) .header {
  background: rgb(7 8 12 / 94%);
  border-bottom: 1px solid rgb(255 255 255 / 8%);
  box-shadow: 0 12px 40px rgb(0 0 0 / 22%);
  position: sticky;
  top: 0;
  z-index: 100;
}

.rs2-site-announcement {
  background: var(--rs2-red-fill);
  color: #fff;
  font-size: .65rem;
  font-weight: 750;
  letter-spacing: .045em;
}

.rs2-site-announcement__inner {
  align-items: center;
  display: flex;
  justify-content: space-between;
  min-height: 30px;
}

.rs2-site-announcement__inner > span,
.rs2-site-announcement__inner > a {
  align-items: center;
  color: #fff;
  display: inline-flex;
  gap: .5rem;
  text-decoration: none;
}

.rs2-site-announcement__inner > span i,
.rs2-global-header__pro i {
  background: currentcolor;
  border-radius: 50%;
  display: inline-block;
  height: .35rem;
  width: .35rem;
}

.rs2-site-announcement__inner > a {
  font-weight: 850;
}

.rs2-global-header {
  backdrop-filter: blur(22px);
  background: rgb(8 9 13 / 82%);
}

.rs2-global-header__row {
  align-items: center;
  display: flex;
  gap: clamp(.7rem, 1.4vw, 1.35rem);
  min-height: 74px;
}

.rs2-global-header__brand {
  flex: 0 0 auto;
}

.rs2-global-header__brand .rs2-logo img {
  height: 34px;
}

body:not(#index) .rs2-global-header .rs2-nav {
  display: flex;
  flex: 1 1 auto;
  justify-content: center;
  min-width: 0;
  order: initial;
  width: auto;
}

body:not(#index) .rs2-global-header .rs2-nav__list {
  gap: clamp(.45rem, 1.2vw, 1.2rem);
  padding: 0;
}

body:not(#index) .rs2-global-header .rs2-nav a {
  border: 0;
  color: #aeb0b8;
  font-size: clamp(.68rem, .75vw, .76rem);
  font-weight: 680;
  letter-spacing: .015em;
  padding: .75rem .15rem;
  position: relative;
}

body:not(#index) .rs2-global-header .rs2-nav a::after {
  background: var(--rs2-red);
  bottom: .35rem;
  content: "";
  height: 1px;
  left: .15rem;
  position: absolute;
  transform: scaleX(0);
  transform-origin: left;
  transition: transform .25s ease;
  width: calc(100% - .3rem);
}

body:not(#index) .rs2-global-header .rs2-nav a:hover,
body:not(#index) .rs2-global-header .rs2-nav a:focus-visible {
  color: var(--rs2-on-tint);
}

body:not(#index) .rs2-global-header .rs2-nav a:hover::after,
body:not(#index) .rs2-global-header .rs2-nav a:focus-visible::after {
  transform: scaleX(1);
}

body:not(#index) .rs2-global-header .search-widgets {
  flex: 0 0 42px;
  margin: 0;
  min-width: 42px;
  transition: flex-basis .3s ease;
  width: 42px;
}

body:not(#index) .rs2-global-header .search-widgets:focus-within {
  flex-basis: 190px;
}

body:not(#index) .rs2-global-header .search-widgets form {
  height: 42px;
  margin: 0;
  position: relative;
}

body:not(#index) .rs2-global-header .search-widgets input[type="text"] {
  background-color: var(--rs2-field-bg);
  background-image: var(--rs2-search-icon);
  background-position: 11px center;
  background-repeat: no-repeat;
  background-size: 18px;
  border: 1px solid var(--rs2-field-border);
  border-radius: 999px;
  color: var(--rs2-text);
  font-size: .75rem;
  height: 42px;
  padding: 0 1rem 0 2.55rem;
  width: 100%;
}

body:not(#index) .rs2-global-header .search-widgets input[type="text"]::placeholder {
  color: transparent;
}

body:not(#index) .rs2-global-header .search-widgets:focus-within input[type="text"]::placeholder {
  color: #8e919a;
}

body:not(#index) .rs2-global-header .search-widgets .search,
body:not(#index) .rs2-global-header .search-widgets .clear {
  display: none;
}

.rs2-global-header__actions,
.rs2-global-header__mobile-actions {
  align-items: center;
  flex: 0 0 auto;
  gap: .45rem;
}

.rs2-global-header__actions .header-block__action-btn,
.rs2-global-header__mobile-actions .header-block__action-btn,
.rs2-global-header__icon {
  align-items: center;
  background: rgb(255 255 255 / 4%) !important;
  border: 1px solid rgb(255 255 255 / 12%) !important;
  border-radius: 50%;
  color: #f7f7f8 !important;
  display: inline-flex;
  height: 42px;
  justify-content: center;
  min-width: 42px;
  padding: 0 !important;
  position: relative;
  transition: border-color .2s ease, background-color .2s ease, color .2s ease;
  width: 42px;
}

.rs2-global-header__actions .header-block__action-btn:hover,
.rs2-global-header__mobile-actions .header-block__action-btn:hover,
.rs2-global-header__icon:hover {
  background: rgb(255 29 29 / 10%) !important;
  border-color: rgb(255 29 29 / 42%) !important;
  color: var(--rs2-on-tint) !important;
}

.rs2-global-header__actions .header-block__icon,
.rs2-global-header__mobile-actions .header-block__icon {
  display: block !important;
  font-size: 1.22rem;
}

.rs2-global-header__actions .header-block__title,
.rs2-global-header__actions .header-block__subtitle {
  display: none !important;
}

#header .rs2-global-header__actions .header-block__title.d-none,
#header .rs2-global-header__actions .header-block__subtitle.d-none {
  clip: rect(0 0 0 0) !important;
  clip-path: inset(50%) !important;
  height: 1px !important;
  overflow: hidden !important;
  position: absolute !important;
  white-space: nowrap !important;
  width: 1px !important;
}

.rs2-global-header__actions .header-block__badge,
.rs2-global-header__mobile-actions .header-block__badge {
  align-items: center;
  background: var(--rs2-red-fill) !important;
  border: 2px solid #090a0e;
  border-radius: 99px;
  color: #fff !important;
  display: flex;
  font-size: .56rem;
  font-weight: 850;
  height: 1.1rem;
  justify-content: center;
  min-width: 1.1rem;
  padding: 0 .18rem;
  position: absolute;
  right: -.2rem;
  top: -.2rem;
}

.rs2-global-header__pro {
  align-items: center;
  background: var(--rs2-red-fill);
  border: 1px solid var(--rs2-red);
  border-radius: 999px;
  color: #fff;
  display: inline-flex;
  font-size: .7rem;
  font-weight: 800;
  gap: .48rem;
  min-height: 42px;
  padding: 0 1rem;
  text-decoration: none;
}

.rs2-global-header__pro:hover {
  background: var(--rs2-red-fill-hover);
  color: #fff;
}

.rs2-global-header__icon svg {
  height: 1.15rem;
  width: 1.15rem;
}

.rs2-theme-toggle__sun,
html[data-rs2-theme="light"] .rs2-theme-toggle__moon {
  display: none;
}

html[data-rs2-theme="light"] .rs2-theme-toggle__sun {
  display: block;
}

.rs2-global-menu-toggle {
  align-items: center;
  background: transparent;
  border: 1px solid rgb(255 255 255 / 14%);
  border-radius: 50%;
  display: none;
  flex-direction: column;
  gap: 4px;
  height: 42px;
  justify-content: center;
  padding: 0;
  position: relative;
  width: 42px;
  z-index: 104;
}

.rs2-global-menu-toggle span {
  background: #fff;
  display: block;
  height: 1px;
  transition: transform .25s ease, opacity .2s ease;
  width: 16px;
}

.rs2-menu-open .rs2-global-menu-toggle span:first-child {
  transform: translateY(5px) rotate(45deg);
}

.rs2-menu-open .rs2-global-menu-toggle span:nth-child(2) {
  opacity: 0;
}

.rs2-menu-open .rs2-global-menu-toggle span:last-child {
  transform: translateY(-5px) rotate(-45deg);
}

.rs2-global-header .dropdown-menu {
  background: #15171d;
  border: 1px solid rgb(255 255 255 / 10%);
  border-radius: .9rem;
  box-shadow: 0 22px 60px rgb(0 0 0 / 42%);
  color: #fff;
  margin-top: .65rem !important;
  overflow: hidden;
  padding: .45rem;
}

.rs2-global-header .dropdown-item {
  border-radius: .55rem;
  color: #c9cbd2;
  font-size: .78rem;
}

.rs2-global-header .dropdown-item:hover {
  background: rgb(255 29 29 / 12%);
  color: var(--rs2-on-tint);
}

html[data-rs2-theme="light"] body:not(#index) .header,
html[data-rs2-theme="light"] .rs2-global-header {
  background: rgb(250 250 252 / 92%);
  border-color: rgb(16 18 27 / 10%);
}

html[data-rs2-theme="light"] body:not(#index) .rs2-global-header .rs2-nav a {
  color: #555963;
}

html[data-rs2-theme="light"] body:not(#index) .rs2-global-header .rs2-nav a:hover {
  color: #121318;
}

html[data-rs2-theme="light"] .rs2-global-header__actions .header-block__action-btn,
html[data-rs2-theme="light"] .rs2-global-header__mobile-actions .header-block__action-btn,
html[data-rs2-theme="light"] .rs2-global-header__icon,
html[data-rs2-theme="light"] .rs2-global-menu-toggle {
  background: rgb(16 18 27 / 3%) !important;
  border-color: rgb(16 18 27 / 12%) !important;
  color: #14151a !important;
}

html[data-rs2-theme="light"] .rs2-global-menu-toggle span {
  background: #14151a;
}

@media (max-width: 1199.98px) {
  body:not(#index) .rs2-global-header .rs2-nav__list {
    gap: .55rem;
  }

  body:not(#index) .rs2-global-header .rs2-nav__list li:nth-child(4),
  body:not(#index) .rs2-global-header .rs2-nav__list li:nth-child(6) {
    display: none;
  }

  .rs2-global-header__pro {
    padding-inline: .8rem;
  }
}

@media (max-width: 991.98px) {
  body.rs2-menu-open {
    overflow: hidden;
  }

  .rs2-global-header__row {
    min-height: 66px;
  }

  .rs2-global-menu-toggle {
    display: flex;
  }

  body:not(#index) .rs2-global-header .rs2-nav {
    align-items: stretch;
    background:
      radial-gradient(circle at 100% 0, rgb(255 29 29 / 14%), transparent 20rem),
      #0b0c11;
    border-top: 1px solid rgb(255 255 255 / 10%);
    bottom: 0;
    display: flex;
    justify-content: flex-start;
    left: 0;
    opacity: 0;
    padding: 2.2rem max(1.25rem, calc((100vw - 720px) / 2));
    pointer-events: none;
    position: fixed;
    right: 0;
    top: 96px;
    transform: translateX(100%);
    transition: transform .35s cubic-bezier(.22, 1, .36, 1), opacity .25s ease;
    width: auto;
    z-index: 102;
  }

  body.rs2-menu-open:not(#index) .rs2-global-header .rs2-nav {
    opacity: 1;
    pointer-events: auto;
    transform: translateX(0);
  }

  body:not(#index) .rs2-global-header .rs2-nav__list {
    align-items: stretch;
    flex-direction: column;
    gap: 0;
    width: 100%;
  }

  body:not(#index) .rs2-global-header .rs2-nav__list li {
    border-bottom: 1px solid rgb(255 255 255 / 8%);
    display: block !important;
  }

  body:not(#index) .rs2-global-header .rs2-nav a {
    color: #fff;
    display: flex;
    font-size: clamp(1.35rem, 6vw, 2rem);
    font-weight: 760;
    justify-content: space-between;
    letter-spacing: -.035em;
    padding: 1rem 0;
  }

  body:not(#index) .rs2-global-header .rs2-nav a::before {
    color: var(--rs2-red);
    content: "↗";
    font-size: 1rem;
    order: 2;
  }

  body:not(#index) .rs2-global-header .rs2-nav a::after {
    display: none;
  }
}

@media (max-width: 767.98px) {
  .rs2-site-announcement__inner {
    justify-content: center;
    min-height: 28px;
    padding-inline: 1rem;
    text-align: center;
  }

  .rs2-site-announcement__inner > span {
    font-size: .57rem;
  }

  .rs2-site-announcement__inner > span i,
  .rs2-site-announcement__inner > a {
    display: none;
  }

  .rs2-global-header__row {
    gap: .4rem;
    padding-inline: 1rem;
  }

  .rs2-global-header__brand {
    margin-right: auto;
  }

  .rs2-global-header__brand .rs2-logo img {
    height: 29px;
  }

  body:not(#index) .rs2-global-header .search-widgets {
    display: block;
    flex-basis: 40px;
    min-width: 40px;
    width: 40px;
  }

  body:not(#index) .rs2-global-header .search-widgets:focus-within {
    background: #0b0c11;
    inset: 28px 0 auto;
    padding: .75rem 1rem;
    position: fixed;
    width: 100%;
    z-index: 106;
  }

  body:not(#index) .rs2-global-header .search-widgets:focus-within form {
    margin: 0 auto;
    max-width: 40rem;
  }

  .rs2-global-header__mobile-actions {
    gap: .3rem;
  }

  .rs2-global-header__actions .header-block__action-btn,
  .rs2-global-header__mobile-actions .header-block__action-btn,
  .rs2-global-header__icon,
  .rs2-global-menu-toggle {
    height: 40px;
    min-width: 40px;
    width: 40px;
  }

  body:not(#index) .rs2-global-header .rs2-nav {
    top: 94px;
  }
}

@media (max-width: 479.98px) {
  .rs2-global-header__mobile-actions .rs2-theme-toggle {
    display: none;
  }
}

/* Account navigation glyphs: reserve a real column so labels never collide. */
.rs2-account-layout__sidebar .account-menu__icon {
  align-items: center;
  display: inline-flex !important;
  flex: 0 0 1.1rem;
  height: 1.1rem;
  justify-content: center;
  line-height: 1;
  width: 1.1rem;
}

/* ---------- Partage Instagram ---------- */

/* Instagram n'ayant pas d'URL de partage, l'element est un <button> et non un
   <a> : on neutralise les styles par defaut pour qu'il soit indiscernable des
   autres icones de la liste. */
button.ps-sharebuttons__link {
  background: none;
  border: 0;
  /* La feuille de style du navigateur impose `color: buttontext` aux boutons :
     sans cette reprise, l'icone reste gris fonce au lieu de suivre la couleur
     du bloc comme les liens voisins. */
  color: inherit;
  cursor: pointer;
  font: inherit;
  padding: 0;
}

.ps-sharebuttons__list li {
  position: relative;
}

.ps-sharebuttons__link[data-rs2-confirmation]::after {
  background: var(--rs2-card);
  border: 1px solid var(--rs2-line-strong);
  border-radius: .5rem;
  bottom: calc(100% + .4rem);
  color: var(--rs2-text);
  content: attr(data-rs2-confirmation);
  font-size: .68rem;
  left: 50%;
  padding: .3rem .5rem;
  pointer-events: none;
  position: absolute;
  transform: translateX(-50%);
  white-space: nowrap;
  z-index: 5;
}

/* ==========================================================================
   Widget natif ps_emailsubscription sur fond sombre
   ==========================================================================
   Le widget arrive avec les classes Bootstrap `bg-body-tertiary` et
   `text-body-secondary`, prevues pour un theme clair. Pose tel quel dans ce
   theme, il produit :
     - un bloc blanc #f8f9fa de pleine largeur au milieu d'une page noire ;
     - un titre gris clair #bfc2c7 sur ce blanc, soit 1,69:1 ;
     - la mention RGPD rgba(33,37,41,.75) sur le fond sombre du pied de page,
       soit 1,27:1 — pratiquement invisible.

   On redefinit les variables de Bootstrap plutot que d'ecraser ses regles en
   !important : `bg-body-tertiary` applique deja son fond en !important, mais
   respecte --bs-bg-opacity. Les couleurs de texte reprennent les jetons du
   theme, qui basculent seuls entre clair et sombre. */

.ps-emailsubscription {
  --bs-bg-opacity: 0;
  --bs-secondary-color: var(--rs2-muted, #bfc2c7);
}

.ps-emailsubscription .h3,
.ps-emailsubscription h3 {
  color: var(--rs2-text, #fff);
}

/* Dans la bande d'appel de l'accueil, le widget remplace un bloc qui portait
   deja son propre cadre : on annule ses marges laterales pour qu'il s'aligne
   sur le texte au-dessus. */
.cta-band .ps-emailsubscription {
  padding-left: 0;
  padding-right: 0;
}

/* Bouton du widget newsletter.
 * Les regles de rs2.css qui l'habillent sont toutes portees par
 * `body:not(#index)` : l'accueil, qui avait son propre formulaire, en etait
 * exclu. Depuis qu'il utilise le widget natif, son bouton restait au rouge
 * clair a 3,86:1. On le rattache ici, sans exclusion de page. */
.ps-emailsubscription button,
.ps-emailsubscription .btn-primary,
.ps-emailsubscription input[type="submit"] {
  background: var(--rs2-red-fill);
  border-color: var(--rs2-red-fill);
  color: #fff;
}

.ps-emailsubscription button:hover,
.ps-emailsubscription .btn-primary:hover,
.ps-emailsubscription input[type="submit"]:hover {
  background: var(--rs2-red-fill-hover);
  border-color: var(--rs2-red-fill-hover);
}

/* ==========================================================================
   Contours de champs et defauts Bootstrap laisses a nu
   ==========================================================================

   Trois defauts releves au balayage du tunnel de commande, tous hors du
   perimetre des audits precedents parce qu'ils demandent un panier rempli :

   1. Le contour des champs de saisie etait du blanc a 12-22 % sur #14161c,
      soit 1,56:1. Le WCAG 1.4.11 exige 3:1 pour la limite visible d'un
      controle de formulaire : les champs et les cases a cocher etaient
      pratiquement invisibles.
   2. L'onglet actif « Commander en tant qu'invite » s'affichait en NOIR sur
      fond noir (1,21:1). Le theme n'avait style que .nav-tabs, or PrestaShop 9
      rend ces onglets en .nav-underline : ils retombaient sur le defaut
      Bootstrap --bs-emphasis-color: #000.
   3. Le lien « Connexion » sortait en bleu Bootstrap #0b69f6, hors charte.

   Specificite : cette feuille est enregistree en 'remote' par rs2home, donc
   servie AVANT le bundle CCC. A egalite de specificite le bundle gagnerait.
   D'ou le prefixe `html` / `html:root`, qui ajoute un poids d'element sans
   recourir a !important. */

html:root {
  /* Blanc a 36 % sur #14161c donne 3,34:1 ; a 52 %, l'etat survol se distingue
     nettement du repos. Les deux restent discrets sur les surfaces sombres. */
  --rs2-field-border: rgb(255 255 255 / 36%);
  --rs2-field-border-hover: rgb(255 255 255 / 52%);

  /* Bootstrap 5.3 laisse ces jetons sur leurs valeurs de theme CLAIR. Le theme
     ne les avait jamais redefinis : tout composant Bootstrap non surcharge
     ressortait en noir ou en bleu. */
  --bs-emphasis-color: var(--rs2-text);
  --bs-emphasis-color-rgb: 255, 255, 255;
  --bs-secondary-color: var(--rs2-muted);
  --bs-link-color: var(--rs2-red);
  --bs-link-hover-color: var(--rs2-red-hover);

  /* Deux couleurs du tunnel etaient ecrites en dur, donc figees en theme
     clair : la bande des etapes restait noire sous un texte devenu sombre
     (1,02:1) et le vert « Commande securisee » tombait a 1,44:1 sur fond
     clair. */
  --rs2-checkout-band: #111319;
  --rs2-success-text: #7ee2aa;
}

html:root[data-rs2-theme="light"] {
  /* Sur blanc, il faut aller plus loin : 50 % donne 3,52:1. */
  --rs2-field-border: rgb(16 18 27 / 50%);
  --rs2-field-border-hover: rgb(16 18 27 / 68%);

  --bs-emphasis-color-rgb: 20, 21, 26;
  --bs-secondary-color: var(--rs2-muted);
  /* #ff1d1d ne fait que 3,86:1 sur blanc : en theme clair le lien prend le
     rouge fonce, a 6,23:1. */
  --bs-link-color: var(--rs2-red-fill-hover);
  --bs-link-hover-color: var(--rs2-red-fill);

  --rs2-checkout-band: #edeff2;
  /* #7ee2aa ne fait que 1,44:1 sur #f4f5f7. #1a7f4b y passait (4,60:1) mais
     retombait a 4,25:1 sur les pastilles vert pale du panier ; #187045 tient
     5,19:1 sur la pastille et 6,10:1 sur blanc. */
  --rs2-success-text: #187045;

  /* --rs2-subtle valait #767985 en theme clair, soit 4,33:1 sur blanc et
     4,41:1 sur #edeff2 : sous le seuil AA des deux cotes. Le jeton ne sert
     qu'a des couleurs de texte (36 usages, aucun fond ni bordure), l'assombrir
     est donc sans effet de bord. #656873 donne 5,55:1 sur blanc, 5,09:1 sur
     #f4f5f7 et 4,82:1 sur #edeff2. */
  --rs2-subtle: #656873;
}

html .form-control,
html .form-select,
html .form-check-input,
html input,
html select,
html textarea {
  border-color: var(--rs2-field-border);
}

html .form-control:hover,
html .form-select:hover,
html .form-check-input:hover,
html select:hover,
html textarea:hover {
  border-color: var(--rs2-field-border-hover);
}

/* Onglets : .nav-underline est la variante rendue par le tunnel, .nav-pills et
   .nav-tabs sont ajoutees pour que le prochain composant natif ne repasse pas
   par la case noir sur noir. */
html .nav-underline .nav-link,
html .nav-pills .nav-link,
html .nav-tabs .nav-link {
  color: var(--rs2-muted);
}

html .nav-underline .nav-link:hover,
html .nav-underline .nav-link:focus,
html .nav-pills .nav-link:hover,
html .nav-pills .nav-link:focus,
html .nav-tabs .nav-link:hover,
html .nav-tabs .nav-link:focus {
  color: var(--rs2-text);
}

html .nav-underline .nav-link.active,
html .nav-underline .nav-link[aria-selected="true"],
html .nav-pills .nav-link.active,
html .nav-tabs .nav-link.active,
html .nav-tabs .nav-link[aria-selected="true"] {
  color: var(--rs2-text);
}

html .nav-underline .nav-link.active,
html .nav-underline .nav-link[aria-selected="true"] {
  border-bottom-color: var(--rs2-red-fill);
}

/* .nav-pills marque l'onglet actif par un fond plein : le rouge de marque n'y
   passe pas le seuil avec du texte blanc, on prend la variante foncee. */
html .nav-pills .nav-link.active {
  background-color: var(--rs2-red-fill);
}

/* L'icone du panier dans l'en-tete ressortait en bleu Bootstrap #0b69f6 sur
   toutes les pages : le module blockcart la colore avec --bs-primary, jeton
   que le theme n'avait jamais redefini. On ne touche pas a --bs-primary
   lui-meme, qui pilote aussi .btn-primary et les etats de focus : on colore
   l'icone comme ses voisines (compte, recherche). */
html .rs2-global-header__actions .header-block__icon,
html .rs2-global-header__mobile-actions .header-block__icon {
  color: var(--rs2-text);
}

/* ==========================================================================
   Blocs volontairement sombres, en theme clair
   ==========================================================================

   Trois zones gardent un fond noir quel que soit le theme : le pied de page
   (#090a0d), le bloc infolettre (#0b0c10) et le panneau de gauche des pages
   de compte (#0a0b0f). Leurs fonds sont ecrits en dur — souvent en
   !important — mais leur TEXTE utilise --rs2-text, --rs2-muted et
   --rs2-subtle, qui basculent avec le theme. En theme clair on obtenait donc
   du texte sombre sur fond noir : 1,07:1 pour le titre de l'infolettre,
   2,80:1 pour les paragraphes du pied de page.

   Plutot que de reecrire chaque regle, on repique la palette sombre sur ces
   sous-arbres. La liste ci-dessous se recense en theme clair : tout element
   dont le fond effectif reste sombre alors que la page est claire doit y
   figurer, sinon son texte devient illisible. Une redefinition portee par un descendant l'emporte
   toujours sur celle de la racine, quelle que soit sa specificite : chaque
   regle interne recoit donc les bonnes valeurs sans etre touchee. */

html[data-rs2-theme="light"] .footer,
html[data-rs2-theme="light"] .footer__before,
html[data-rs2-theme="light"] .ps-emailsubscription,
html[data-rs2-theme="light"] .rs2-auth-story,
html[data-rs2-theme="light"] .rs2-site-announcement,
html[data-rs2-theme="light"] .rs2-global-header__pro,
html[data-rs2-theme="light"] .rs2-product-flag,
html[data-rs2-theme="light"] .rs2-pdp__media,
html[data-rs2-theme="light"] .rs2-pdp__story-visual,
html[data-rs2-theme="light"] .rs2pro-portal,
html[data-rs2-theme="light"] .rs2pro-denied,
html[data-rs2-theme="light"] .rs2-category-hero,
html[data-rs2-theme="light"] .rs2-stores-page {
  --rs2-text: #ffffff;
  --rs2-muted: #bfc2c7;
  --rs2-subtle: #8b8f96;
  --rs2-bg: #0d0e12;
  --rs2-surface: #14161c;
  --rs2-card: #171a20;
  --rs2-raised: #1b1e25;
  --rs2-red-hover: #ff4545;
  --rs2-on-tint: #ffffff;
  --rs2-line: rgb(255 255 255 / 9%);
  --rs2-line-strong: rgb(255 255 255 / 16%);
  --rs2-field-bg: rgb(255 255 255 / 4%);
  --rs2-field-bg-focus: rgb(255 255 255 / 6%);
  --rs2-field-border: rgb(255 255 255 / 36%);
  --rs2-field-border-hover: rgb(255 255 255 / 52%);
  --rs2-success-text: #7ee2aa;
  --bs-emphasis-color: #ffffff;
  --bs-emphasis-color-rgb: 255, 255, 255;
  --bs-secondary-color: #bfc2c7;
  --bs-link-color: #ff1d1d;
  --bs-link-hover-color: #ff4545;
}

/* Le champ de l'infolettre gardait --rs2-line-strong (blanc a 16 %, 1,55:1).
   Les regles d'origine sont dans rs2.css, qui part dans le bundle CCC et ne
   peut donc pas etre republie a la demande : on les recouvre ici. */
html body:not(#index) .ps-emailsubscription input[type="email"],
html body:not(#index) .footer__before .ps-emailsubscription input[type="email"] {
  border-color: var(--rs2-field-border);
}

/* L'accueil est concu en sombre de bout en bout : son fond reste #0d0e12 meme
   quand le theme clair est actif (toutes les regles claires du theme sont
   portees par `body:not(#index)`). Seul son TEXTE basculait, ce qui donnait du
   texte sombre sur fond noir sur toute la page — 1,06:1 sur les titres.
   Comme pour le pied de page, on y repique la palette sombre. */
html[data-rs2-theme="light"] body#index {
  --rs2-text: #ffffff;
  --rs2-muted: #bfc2c7;
  --rs2-subtle: #8b8f96;
  --rs2-red-hover: #ff4545;
  --rs2-on-tint: #ffffff;
  --rs2-bg: #0d0e12;
  --rs2-surface: #14161c;
  --rs2-card: #171a20;
  --rs2-raised: #1b1e25;
  --rs2-line: rgb(255 255 255 / 9%);
  --rs2-line-strong: rgb(255 255 255 / 16%);
  --rs2-field-bg: rgb(255 255 255 / 4%);
  --rs2-field-bg-focus: rgb(255 255 255 / 6%);
  --rs2-field-border: rgb(255 255 255 / 36%);
  --rs2-field-border-hover: rgb(255 255 255 / 52%);
  --rs2-success-text: #7ee2aa;
  --bs-emphasis-color: #ffffff;
  --bs-emphasis-color-rgb: 255, 255, 255;
  --bs-secondary-color: #bfc2c7;
  --bs-link-color: #ff1d1d;
  --bs-link-hover-color: #ff4545;
}

/* .rs2-pdp__media a un fond SEMI-transparent (82 %). En theme sombre il se
   compose sur du noir et reste noir ; en theme clair il se compose sur
   #f4f5f7 et remonte a rgb(59,60,66), ou la palette sombre qu'on vient d'y
   repiquer ne passe plus que 3,37:1. On le rend opaque : le panneau se
   comporte alors exactement comme en theme sombre. */
html[data-rs2-theme="light"] .rs2-pdp__media {
  background-color: #12141a;
}

/* Cartes produit en theme clair.
   - La pastille « RS2 · LUNETTES CONNECTEES » a un fond noir a 64 % : pose sur
     une carte blanche il remonte a rgb(97,98,100) et son texte blanc a 76 %
     n'y fait plus que 4,36:1. On l'opacifie, comme le panneau de la fiche
     produit.
   - Le bouton « Ajouter au panier » de la carte est un contour transparent :
     sa couleur vient de --rs2-text, mais une regle !important de .btn-primary
     la repasse en blanc, invisible sur une carte blanche. */
html[data-rs2-theme="light"] body#category .rs2-product-card__technology {
  background: #0b0c10;
}

html[data-rs2-theme="light"] .rs2-product-card .product-miniature__add,
html[data-rs2-theme="light"] .rs2-product-card .product-miniature__details,
html[data-rs2-theme="light"] .rs2-product-card .product-miniature__add-text,
html[data-rs2-theme="light"] .rs2-product-card .product-miniature__details-text {
  color: var(--rs2-text) !important;
}

html[data-rs2-theme="light"] .rs2-product-card .product-miniature__add:hover,
html[data-rs2-theme="light"] .rs2-product-card .product-miniature__details:hover {
  color: #fff !important;
}

/* ==========================================================================
   Defilement lateral parasite sur telephone
   ==========================================================================
   Sous 992 px, la navigation de l'en-tete devient un tiroir hors-ecran :
   position fixed, translateX(100%), opacity 0. Ce decalage de 100 % de la
   largeur agrandit la zone defilable du document — mesure sur un ecran de
   390 px : scrollWidth de 748 px au lieu de 390. Toutes les pages hors accueil
   defilaient donc lateralement, contenu coupe a droite et sensation de page
   cassee au doigt. Retirer le tiroir ramenait le document a 382 px, ce qui
   isole la cause sans ambiguite.

   On clippe l'axe horizontal a la racine. `clip` et non `hidden` : `hidden`
   transforme l'element en conteneur de defilement et casserait le
   `position: sticky` de l'en-tete, alors que `clip` se contente de couper.
   L'animation de glissement du tiroir est preservee.

   La coupe s'applique a toutes les largeurs depuis que l'en-tete de collection
   deborde en pleine largeur : ses marges negatives se calculent en vw, barre de
   defilement comprise, et laisseraient sinon une quinzaine de pixels de
   defilement lateral sur ordinateur. */

html {
  overflow-x: clip;
}


/* L'indicateur d'etape du tunnel n'existe qu'en dessous de 992 px, il avait
   donc echappe a tous les balayages faits sur grand ecran. Deux couleurs
   Bootstrap de theme clair y etaient posees sur la bande sombre du tunnel :
     - .text-success (#188251) sur l'anneau de progression « 1 / 4 » : 3,85:1 ;
     - .text-body-secondary sur « Etape suivante : ... » : 1,14:1, illisible.
   Le second est regle par --bs-secondary-color ci-dessus. Le premier demande
   !important : les utilitaires de couleur de Bootstrap en portent un. */
html .rs2-checkout-page .checkout-steps__mobile .progress-ring,
html .rs2-checkout-page .checkout-steps__mobile .progress-ring__text {
  color: var(--rs2-success-text) !important;
}

/* ==========================================================================
   Police d icones manquante
   ==========================================================================
   Le theme declare @font-face pour « Material Icons » vers
   ../fonts/MaterialIcons-Regular-*.woff2, c est-a-dire
   themes/rs2eyewear/assets/fonts/. Ce dossier est VIDE : les fichiers sont
   restes dans le theme parent. Resultat, document.fonts.check('Material Icons')
   repond false et les cinquante et quelques <i class="material-icons"> du site
   affichent le point de code brut dans Raleway — d ou les coches de travers de
   la page de connexion, le « losange » devant la mention de confidentialite,
   et les icones fantomes du tunnel.

   Une @font-face correcte existait deja en haut de ce fichier, vers le theme
   parent. Le maillon reellement absent etait ailleurs : AUCUNE regle du site
   n applique font-family a .material-icons. Les <i> heritaient donc de Raleway
   et dessinaient le point de code brut.

   On redeclare la police sous un nom PROPRE plutot que de rajouter une
   troisieme « Material Icons » : la declaration cassee du theme parent reste en
   erreur dans la meme famille, ce qui suffit a faire echouer
   document.fonts.check() et perturbe la selection. Un nom distinct isole le
   probleme. `font-display: block` evite d afficher le caractere parasite
   pendant le chargement. */

@font-face {
  font-display: block;
  font-family: "RS2 Icons";
  font-style: normal;
  font-weight: 400;
  src:
    url("/themes/hummingbird/assets/fonts/MaterialIcons-Regular-2d8017489da689caedc1.woff2") format("woff2"),
    url("/themes/hummingbird/assets/fonts/MaterialIcons-Regular-08cefa1bc6566a650da7.woff") format("woff");
}

/* ==========================================================================
   Chiffres alignes sur la ligne de base
   ==========================================================================
   Raleway sort ses chiffres en style ancien : le 2 descend sous la ligne et
   se dessine plus petit. « RS2EYEWEAR » s ecrivait donc partout avec un 2
   tombant, y compris dans le bandeau, le pied de page et l espace client. On
   demande les chiffres alignes, avec la propriete standard et la version
   OpenType pour les navigateurs qui ne suivent que celle-ci. */

html:root {
  font-feature-settings: "lnum" 1;
  font-variant-numeric: lining-nums;
}

/* Le theme declare bien la police mais n applique JAMAIS font-family a
   .material-icons : la regle n existe nulle part, ni dans le theme parent ni
   dans l enfant. Les <i> heritaient donc de Raleway et dessinaient le point de
   code brut. On pose la regle manquante.

   font-size: inherit et non 24px : plusieurs endroits du theme fixent deja
   leur propre taille, on ne veut rien faire grossir au passage.
   font-feature-settings est remis a "liga" ici, sinon le "lnum" hérité
   ci-dessus desactiverait les ligatures des icones ecrites en toutes lettres. */
.material-icons {
  direction: ltr;
  display: inline-block;
  font-family: "RS2 Icons", "Material Icons";
  font-feature-settings: "liga" 1;
  font-size: inherit;
  font-style: normal;
  font-variant-numeric: normal;
  font-weight: 400;
  letter-spacing: normal;
  line-height: 1;
  text-transform: none;
  white-space: nowrap;
  word-wrap: normal;
  -webkit-font-smoothing: antialiased;
}

/* ==========================================================================
   Composants Bootstrap encore sur leurs valeurs de theme clair
   ==========================================================================
   Trois blocs restaient illisibles parce que le theme ne les avait jamais
   surcharges. Ils n apparaissent qu une fois connecte avec une adresse et une
   commande passee, ce qui explique qu ils aient echappe aux balayages
   precedents.

   1. L adresse du tunnel : --bs-body-color (rgb 33,37,41) sur #14161c, soit
      1,17:1 — l adresse de livraison etait invisible au moment de la choisir.
   2. .btn-basic : bouton blanc du theme parent, texte gris clair dessus,
      1,79:1. C est le lien « L adresse de facturation est differente ».
   3. Les tableaux et les alertes de la page de confirmation : le module de
      virement bancaire y affiche ses coordonnees dans une .table, et le theme
      ne definit --bs-table-* que sur les pages compte et produit. Sur la
      confirmation, on obtenait un pave blanc a texte blanc : le client ne
      pouvait pas lire le RIB sur lequel payer. */

html .rs2-checkout-page .address-card__content,
html .rs2-checkout-page address {
  color: var(--rs2-muted);
}

html .btn-basic {
  background: transparent;
  border: 1px solid var(--rs2-field-border);
  color: var(--rs2-text);
}

html .btn-basic:hover,
html .btn-basic:focus-visible {
  background: rgb(255 255 255 / 6%);
  border-color: var(--rs2-field-border-hover);
  color: var(--rs2-text);
}

html:root {
  --bs-table-bg: transparent;
  --bs-table-color: var(--rs2-text);
  --bs-table-striped-bg: rgb(255 255 255 / 3%);
  --bs-table-striped-color: var(--rs2-text);
  --bs-table-border-color: rgb(255 255 255 / 10%);
  --bs-table-hover-bg: rgb(255 255 255 / 5%);
  --bs-table-hover-color: var(--rs2-text);
}

html .table {
  color: var(--rs2-text);
}

html .table > :not(caption) > * > * {
  background-color: transparent;
  box-shadow: none;
  color: var(--rs2-text);
}

/* Les alertes n avaient aucune regle : elles sortaient sur le fond clair de
   Bootstrap. On les repose sur une teinte du theme, la couleur de bordure
   portant a elle seule la nature du message. */
html .alert {
  background: rgb(255 255 255 / 4%);
  border: 1px solid var(--rs2-field-border);
  color: var(--rs2-text);
}

html .alert-success { border-color: rgb(24 112 69 / 55%); }
html .alert-info    { border-color: rgb(255 255 255 / 22%); }
html .alert-warning { border-color: rgb(232 179 57 / 55%); }
html .alert-danger  { border-color: rgb(216 22 22 / 60%); }

html .alert a,
html .alert .alert-link {
  color: var(--rs2-red-hover);
}

/* La classe utilitaire .outline du theme parent marque l element actif avec un
   contour bleu (--bs-primary, #0b69f6) : c est ce qui cerclait de bleu la
   vignette selectionnee dans l apercu rapide et sur la fiche produit. On la
   repasse au rouge de marque. */
html .outline,
html .outline--rounded {
  outline-color: var(--rs2-red-fill);
}


/* Largeur de contenu commune a tout le site.
   --rs2-max-width valait 1200 px fixes : sur une fenetre de 1707 le contenu
   n'occupait que 70 % de la largeur, avec de larges bandes vides de chaque
   cote. L'espace client est passe a min(1560px, 94vw) et le rendu a convaincu ;
   on aligne le reste du site sur la meme valeur.

   min() et non une largeur fixe : sous 1660 px c'est 94vw qui s'applique, donc
   une marge proportionnelle a l'ecran plutot qu'un vide fige. Sur mobile ces
   plafonds ne mordent pas, la mise en page telephone est inchangee. */
html:root {
  --rs2-max-width: min(1560px, 94vw);
}

html .container-md {
  max-width: var(--rs2-max-width);
}


/* ==========================================================================
   Bloc infolettre (hors accueil)
   ==========================================================================
   La maquette le pose en carte arrondie, halo rouge a gauche, accroche au
   dessus du titre et enveloppe dans le champ. La bande d'origine occupait
   toute la largeur, sans cadre ni respiration. */

html .rs2-newsletter {
  background: transparent;
  padding-block: clamp(1.5rem, 3vw, 2.5rem);
}

html .rs2-newsletter > .container {
  max-width: var(--rs2-max-width);
}

html .rs2-newsletter > .container > .row {
  align-items: center;
  background:
    radial-gradient(circle at 12% 50%, rgb(255 29 29 / 26%), transparent 42%),
    linear-gradient(105deg, rgb(255 29 29 / 10%), transparent 38%),
    var(--rs2-surface);
  border: 1px solid var(--rs2-line);
  border-radius: 1.4rem;
  margin-inline: 0;
  padding: clamp(1.5rem, 3vw, 2.4rem) clamp(1rem, 2.4vw, 2.2rem);
  row-gap: 1.25rem;
}

html .rs2-newsletter__kicker {
  color: var(--rs2-red-hover);
  display: block;
  font-size: .66rem;
  font-weight: 850;
  letter-spacing: .24em;
  margin-bottom: .55rem;
  text-transform: uppercase;
}

html .rs2-newsletter .h3 {
  font-size: clamp(1.35rem, 2.4vw, 1.85rem);
  font-weight: 800;
  letter-spacing: -.02em;
  margin-bottom: .45rem;
}

html .rs2-newsletter__sub {
  color: var(--rs2-muted);
  font-size: .88rem;
  margin-bottom: 0;
}

/* Enveloppe dans le champ : masque SVG plutot qu'une ligature, pour la meme
   raison que le chevron des cartes produit. */
html .rs2-newsletter input[type="email"] {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%238b8f96' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2.5' y='5' width='19' height='14' rx='2.5'/%3E%3Cpath d='m3.4 6.6 8.6 6 8.6-6'/%3E%3C/svg%3E");
  background-position: left .95rem center;
  background-repeat: no-repeat;
  background-size: 1.15rem;
  padding-inline-start: 2.85rem;
}

html[dir="rtl"] .rs2-newsletter input[type="email"] {
  background-position: right .95rem center;
}


/* ==========================================================================
   Bouton de fermeture des modales
   ==========================================================================
   Bootstrap dessine sa croix avec une image de fond noire posee a 50 %
   d'opacite. Sur le fond sombre des modales - l'apercu rapide en particulier -
   elle etait invisible : 1,05:1 contre le panneau.

   On remplace l'image par un masque : la croix prend alors la couleur du
   jeton, qui suit deja le theme et les ilots sombres. En rouge de marque elle
   atteint 5,15:1, bien au-dela des 3:1 demandes pour un element graphique. */
html .btn-close {
  background-color: var(--rs2-red-hover);
  background-image: none;
  border-radius: 50%;
  box-shadow: none;
  height: 40px;
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M2.4 2.4l11.2 11.2M13.6 2.4L2.4 13.6' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round'/%3E%3C/svg%3E");
  mask-position: center;
  mask-repeat: no-repeat;
  mask-size: 1rem;
  opacity: 1;
  width: 40px;
}

/* Le survol ne peut pas peindre un fond derriere un element deja masque : on
   agrandit la croix, ce qui reste percu comme une reponse au pointeur. */
html .btn-close:hover,
html .btn-close:focus-visible {
  background-color: var(--rs2-red-fill, #d81616);
  mask-size: 1.15rem;
}

html .btn-close:focus-visible {
  outline: 2px solid var(--rs2-red-fill);
  outline-offset: 2px;
}
