/* ═══════════════════════════════════════════════════════════════════════
   MENU EDITORIAL — refonte UI/UX du menu public (2026-09-23)
   Couche UNIQUE, chargee EN DERNIER par menu.php ET order_form.php
   (<body class="ed-page ...">). Elle ne cree aucun nouveau composant : elle
   redonne une seule source visuelle aux composants existants.

   Pourquoi une couche plutot qu'une reecriture : menu-premium.css cumule
   ~17 600 lignes et ~4 500 !important (plusieurs generations de correctifs
   sur les memes selecteurs). Le reecrire sortirait du perimetre ; ici,
   chaque regle est prefixee par .ed-page (specificite >= a celle des couches
   existantes) et ne porte !important que la ou une couche plus ancienne en
   pose deja un.

   Regles de cette couche :
   - 3 rayons, 1 filet, 1 ombre (reservee aux elements flottants) : tokens
     --ed-* ci-dessous, aucune valeur libre ailleurs dans le fichier.
   - Couleurs : UNIQUEMENT les variables de theme deja calculees par
     restaurant (--primary-color*, --menu-inner-bg / --order-inner-bg,
     --theme-text-on-inner, --secondary-color, --hero-text, ...). Aucune
     couleur propre a un restaurant.
   - Hierarchie des surfaces : fond de page (reglage restaurant) > feuille
     de contenu (fond interieur) > carte (teinte legere du fond interieur,
     sans bordure) > element interactif (bouton, champ).
   - Proprietes logiques (inline-start/end) : RTL correct sans regle dediee.
   ═══════════════════════════════════════════════════════════════════════ */

/* ── 1. Tokens ───────────────────────────────────────────────────────── */
.ed-page {
  --ed-r-sm: 8px;    /* badges, boutons, champs */
  --ed-r-md: 14px;   /* cartes, images */
  --ed-r-lg: 18px;   /* feuilles de contenu, header, roulette */
  --ed-inner: var(--menu-inner-bg, var(--order-inner-bg, #F8FBFF));
  --ed-ink: var(--theme-text-on-inner, #1A1A1A);
  --ed-accent: var(--primary-color, #0EA5E9);
  /* accent pour texte/prix/etat actif : lisible sur le fond interieur reel (calcule serveur, clair OU sombre) */
  --ed-accent-ink: var(--theme-accent-on-inner, var(--primary-color-readable, var(--primary-color, #0EA5E9)));
  --ed-on-accent: var(--theme-text-on-primary, #FFFFFF);
  /* Replis si color-mix() est indisponible (navigateurs anciens) */
  --ed-card: var(--ed-inner);
  --ed-muted: var(--theme-text-muted-on-inner, #6B6B6B);
  --ed-hairline: var(--theme-border-on-inner, var(--order-border-on-inner, rgba(15, 23, 42, .08)));
  --ed-shadow-float: 0 8px 24px rgba(0, 0, 0, .12);
  --ed-font: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;
  /* Echelle typographique (une seule famille, hierarchie par taille/graisse) */
  --ed-fs-section: clamp(1.45rem, 1.1rem + 1.2vw, 2rem);
  --ed-fs-dish: 1.02rem;
  --ed-fs-desc: .875rem;
  --ed-fs-meta: .78rem;
  --ed-fs-price: 1.06rem;
  --ed-fs-badge: .69rem;
  /* Etoile des notes (cartes du menu ET fiche produit) : une seule source pour le dore */
  --ed-star: #f2b01e;
  /* Identite : logo du restaurant (telephone ~88-100px, tablette ~104-120px, desktop 112px) */
  --ed-logo: clamp(88px, 24vw, 100px);
  /* Roue de la roulette sur telephone (moderement plus presente, bloc non allonge) */
  --ed-wheel: clamp(92px, 25vw, 108px);
}
@media (min-width: 721px) { .ed-page { --ed-logo: clamp(104px, 13vw, 120px); } }
@media (min-width: 1024px) { .ed-page { --ed-logo: 112px; } }
@supports (color: color-mix(in srgb, red 50%, blue)) {
  .ed-page {
    /* carte = fond interieur legerement teinte vers la couleur du texte :
       plus sombre sur fond clair, plus claire sur fond sombre */
    --ed-card: color-mix(in srgb, var(--ed-ink) 4%, var(--ed-inner));
    --ed-muted: color-mix(in srgb, var(--ed-ink) 68%, var(--ed-inner));
    --ed-hairline: color-mix(in srgb, var(--ed-ink) 12%, transparent);
    --ed-accent-soft: color-mix(in srgb, var(--ed-accent) 12%, var(--ed-inner));
  }
}

.ed-sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  margin: -1px !important;
  padding: 0 !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* ── 2. Surfaces : moins de grands rectangles ─────────────────────────────
   Header et roulette restent deux blocs distincts. La recherche, Populaires et
   les categories sont poses DIRECTEMENT sur le fond de page du restaurant (plus
   de troisieme grand rectangle arrondi) : leurs couleurs de texte, de filet et
   d'accent sont recalculees pour ce fond (--theme-*-on-outer, menu.php). Seule
   la liste des plats forme une feuille au fond interieur, sans bordure ni ombre. */
.ed-page .menu-app .surface.surface-menu-list,
.ed-page .public-order-section--dishes > div {
  background: var(--ed-inner) !important;
  border: 0 !important;
  box-shadow: none !important;
  border-radius: var(--ed-r-lg) !important;
  margin: 18px 0 0 !important;
  padding: 4px 18px 20px !important;
}
.ed-page .menu-app .surface.surface-menu-list > [data-category-section]:first-of-type,
.ed-page .public-order-section--dishes > div > [data-category-section]:first-of-type { margin-top: 18px !important; }
.ed-page .menu-app .surface.mexplorer {
  --ed-inner: var(--restaurant-bg, #F4F6FB);
  --ed-ink: var(--theme-text-on-outer, #1A1A1A);
  --ed-muted: var(--theme-muted-on-outer, #5F5F5F);
  --ed-hairline: var(--theme-border-on-outer, rgba(15, 23, 42, .10));
  --ed-card: var(--restaurant-bg, #F4F6FB);
  --ed-accent-ink: var(--theme-accent-on-outer, var(--primary-color, #0EA5E9));
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  border-radius: 0 !important;
  margin: 6px 0 0 !important;
  padding: 4px 2px 0 !important;
}
@supports (color: color-mix(in srgb, red 50%, blue)) {
  .ed-page .menu-app .surface.mexplorer {
    --ed-card: color-mix(in srgb, var(--theme-text-on-outer, #1A1A1A) 6%, var(--restaurant-bg, #F4F6FB));
  }
}

/* ── 3. Sections de categorie (partagees /menu + /commande) ───────────── */
.ed-page [data-category-section] {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 16px !important;
  align-items: stretch !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  padding: 0 !important;
  margin: 36px 0 0 !important;
}
@media (min-width: 640px) {
  .ed-page [data-category-section] { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; gap: 18px !important; }
}
@media (min-width: 1024px) {
  .ed-page [data-category-section] { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 22px !important; }
}
.ed-page [data-category-section] > .category-head {
  grid-column: 1 / -1 !important;
  display: flex !important;
  align-items: baseline !important;
  justify-content: flex-start !important;
  gap: 12px !important;
  margin: 0 0 2px !important;
  padding: 0 0 12px !important;
  border-bottom: 1px solid var(--ed-hairline) !important;
}
.ed-page [data-category-section] .category-title {
  margin: 0 !important;
  font-family: var(--ed-font) !important;
  font-size: var(--ed-fs-section) !important;
  font-weight: 650 !important;
  line-height: 1.1 !important;
  letter-spacing: -.02em !important;
  color: var(--ed-ink) !important;
  text-transform: none !important;
}
.ed-page [data-category-section] .category-count {
  display: inline !important;
  min-height: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  background: none !important;
  border: 0 !important;
  font-family: var(--ed-font) !important;
  font-size: var(--ed-fs-meta) !important;
  font-weight: 500 !important;
  line-height: 1.2 !important;
  color: var(--ed-muted) !important;
  white-space: nowrap !important;
}

/* ── 4. Carte plat : SOURCE UNIQUE /menu + /commande ─────────────────────
   Meme partial (_dish_card_classic.php), meme regles ici : fond, rayon,
   largeur, hauteur, image, titre, description, avis, prix, badge et
   espacements sont identiques par construction sur les deux pages. Le
   survol ne modifie ni fond, ni bordure, ni ombre, ni position (tests 3I). */
.ed-page [data-category-section] .dish-card,
.ed-page [data-category-section] .dish-card:hover,
.ed-page [data-category-section] .dish-card:active,
.ed-page [data-category-section] .dish-card:focus,
.ed-page [data-category-section] .dish-card:focus-within {
  position: relative !important;
  display: flex !important;
  flex-direction: column !important;
  gap: 0 !important;
  width: auto !important;
  min-width: 0 !important;
  margin: 0 !important;
  padding: 0 !important;
  background: var(--ed-card) !important;
  border: 0 !important;
  border-radius: var(--ed-r-md) !important;
  box-shadow: none !important;
  transform: none !important;
  overflow: hidden !important;
  font-family: var(--ed-font) !important;
  line-height: 1.4 !important;
  color: var(--ed-ink) !important;
}
/* Decorations heritees (reflets, degrades, voiles) posees en pseudo-elements par
   des couches differentes sur chaque page : toutes neutralisees, des deux cotes. */
.ed-page [data-category-section] .dish-card::before,
.ed-page [data-category-section] .dish-card::after,
.ed-page [data-category-section] .dish-card .media::before,
.ed-page [data-category-section] .dish-card .media::after,
.ed-page [data-category-section] .dish-card .dish-emoji-badge::before,
.ed-page [data-category-section] .dish-card .dish-emoji-badge::after {
  content: none !important;
}
/* Carte entierement interactive (aucun bouton d'ajout, la carte ouvre la fiche) : survol a la souris et appui sur
   tablette/ordinateur signales par un contour exterieur discret. outline : aucun effet sur la mise en page, les dimensions,
   le fond, l'ombre ni la photo ; rien ne reste colle apres un appui tactile. Telephone : l'appui garde la legere reduction
   de la section 14. Le focus clavier (contour 2px accent, ci-dessous) l'emporte. */
@media (hover: hover) and (pointer: fine) {
  .ed-page [data-category-section] .dish-card:has(> .elyria-product-card__open:hover) {
    outline: 1px solid color-mix(in srgb, var(--ed-ink) 24%, transparent) !important;
    outline-offset: 2px !important;
  }
}
@media (min-width: 768px) {
  .ed-page [data-category-section] .dish-card:has(> .elyria-product-card__open:active) {
    outline: 1px solid color-mix(in srgb, var(--ed-ink) 40%, transparent) !important;
    outline-offset: 2px !important;
  }
}
/* Focus clavier : contour net sur toute la carte */
.ed-page [data-category-section] .dish-card:has(.elyria-product-card__open:focus-visible) {
  outline: 2px solid var(--ed-accent-ink) !important;
  outline-offset: 2px !important;
}
.ed-page [data-category-section] .dish-card .media {
  position: relative !important;
  width: 100% !important;
  height: auto !important;
  aspect-ratio: 3 / 2 !important;
  margin: 0 !important;
  border: 0 !important;
  border-radius: 0 !important;
  overflow: hidden !important;
  background: var(--ed-card) !important;
  background: color-mix(in srgb, var(--ed-ink) 7%, var(--ed-inner)) !important;
}
@media (min-width: 640px) {
  /* Desktop / tablette : image plus basse (16:10) pour des cartes plus denses */
  .ed-page [data-category-section] .dish-card .media { aspect-ratio: 16 / 10 !important; }
}
.ed-page [data-category-section] .dish-card .media img {
  /* l'image remplit son cadre sans imposer sa taille intrinseque (116x116) a la carte */
  position: absolute !important;
  inset: 0 !important;
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  object-fit: cover !important;
  border-radius: 0 !important;
}
/* Plat sans photo : surface neutre du theme + pictogramme discret (jamais une fausse photo, jamais une image distante) */
.ed-page [data-category-section] .dish-card .media-empty {
  /* flex (pas grid) : le libelle masque "Menu" (taille 0) ne cree ni rangee ni decalage */
  display: flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 100% !important;
  height: 100% !important;
  background: transparent !important;
  color: transparent !important;
  font-size: 0 !important;
  position: absolute !important;
  inset: 0 !important;
  min-height: 0 !important;
  padding: 0 !important;
  aspect-ratio: auto !important;
}
.ed-page [data-category-section] .dish-card .media-empty::before {
  content: "" !important;
  display: block !important;
  position: static !important;
  inset: auto !important;
  width: 44px !important;
  height: 44px !important;
  background: var(--ed-muted) !important;
  opacity: .75 !important;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 18h18'/%3E%3Cpath d='M5 18a7 7 0 0 1 14 0'/%3E%3Cpath d='M12 5v3'/%3E%3Ccircle cx='12' cy='4' r='1.5'/%3E%3C/svg%3E") center / contain no-repeat !important;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 18h18'/%3E%3Cpath d='M5 18a7 7 0 0 1 14 0'/%3E%3Cpath d='M12 5v3'/%3E%3Ccircle cx='12' cy='4' r='1.5'/%3E%3C/svg%3E") center / contain no-repeat !important;
}
.ed-page [data-category-section] .dish-card .dish-main {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
  gap: 3px !important;
  min-height: 0 !important;
  height: auto !important;
  padding: 12px 14px 2px !important;
  align-items: stretch !important;
}
.ed-page [data-category-section] .dish-card .topline {
  display: flex !important;
  flex-direction: column !important;
  align-items: flex-start !important;
  gap: 4px !important;
  margin: 0 !important;
  width: 100% !important;
}
.ed-page [data-category-section] .dish-card .dish-name {
  display: -webkit-box !important;
  -webkit-line-clamp: 2 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
  margin: 0 !important;
  font-size: var(--ed-fs-dish) !important;
  font-weight: 650 !important;
  line-height: 1.3 !important;
  letter-spacing: -.01em !important;
  color: var(--ed-ink) !important;
  opacity: 1 !important;
  overflow-wrap: anywhere !important;
}
.ed-page [data-category-section] .dish-card .dish-desc {
  display: -webkit-box !important;
  -webkit-line-clamp: 2 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
  margin: 0 !important;
  font-size: var(--ed-fs-desc) !important;
  font-weight: 400 !important;
  line-height: 1.45 !important;
  color: var(--ed-muted) !important;
  opacity: 1 !important;
  overflow-wrap: anywhere !important;
}
.ed-page [data-category-section] .dish-card .dish-signal-row {
  margin: 2px 0 0 !important;
}
.ed-page [data-category-section] .dish-card .dish-rating-pill,
.ed-page .order-modal-rating .dish-rating-pill {
  display: inline-flex !important;
  align-items: center !important;
  gap: 4px !important;
  min-height: 0 !important;
  height: auto !important;
  padding: 0 !important;
  background: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  font-size: var(--ed-fs-meta) !important;
  font-weight: 600 !important;
  line-height: 1.3 !important;
  color: var(--ed-muted) !important;
}
/* Note valide : etoile doree (meme famille que la note du header), jamais grise ; teinte legerement
   adaptee au fond du theme (plus soutenue sur fond clair, plus lumineuse sur fond sombre). La note suit
   la couleur du texte du theme ; le nombre d'avis reste secondaire (--ed-muted). */
.ed-page .dish-rating-pill .dish-rating-star {
  color: var(--ed-star) !important;
  color: color-mix(in srgb, var(--ed-star) 86%, var(--ed-ink)) !important;
  font-size: 1.05em !important;
  line-height: 1 !important;
}
.ed-page .dish-rating-pill .dish-rating-value {
  color: var(--ed-ink) !important;
  font-weight: 700 !important;
}
.ed-page .dish-rating-pill .dish-rating-sep,
.ed-page .dish-rating-pill .dish-rating-count {
  color: var(--ed-muted) !important;
  font-weight: 500 !important;
}
.ed-page [data-category-section] .dish-card .home-badge {
  display: none !important;
}
.ed-page [data-category-section] .dish-card .dish-side {
  display: flex !important;
  flex-direction: row !important;
  align-items: center !important;
  justify-content: space-between !important;
  gap: 12px !important;
  min-height: 0 !important;
  margin-top: auto !important;
  padding: 8px 14px 14px !important;
}
.ed-page [data-category-section] .dish-card .price-pill {
  display: inline-flex !important;
  margin: 0 !important;
  padding: 0 !important;
  min-height: 0 !important;
  background: none !important;
  border: 0 !important;
  font-size: var(--ed-fs-price) !important;
  font-weight: 750 !important;
  line-height: 1.2 !important;
  letter-spacing: -.01em !important;
  color: var(--ed-accent-ink) !important;
  font-variant-numeric: tabular-nums !important;
  white-space: nowrap !important;
}
.ed-page [data-category-section] .dish-card .dual-price-amount {
  color: var(--ed-accent-ink) !important;
}

/* ── 5. Badges : UNE famille, 2 variantes semantiques ───────────────────
   Structure commune (hauteur, typo, rayon, espacement, position) ; seule
   la couleur change :
   - "classement" (N°1 des ventes, TOP 2, TOP 3, Special chef) : aplat
     couleur principale du restaurant + texte lisible calcule serveur ;
   - "editorial" (Nouveau, Decouverte, Coup de coeur, Tendance...) : fond
     interieur du theme + texte du theme.
   Toujours superpose en haut (debut de ligne) de l'image ; sans photo, meme
   position, posee sur la zone calme de l'image absente. Emoji masques : le
   libelle suffit (moins de bruit visuel). */
.ed-page [data-category-section] .dish-card .dish-emoji-badge,
.ed-page [data-category-section] .dish-card:hover .dish-emoji-badge {
  position: absolute !important;
  transform: none !important;
  transition: none !important;
  top: 10px !important;
  inset-inline-start: 10px !important;
  inset-inline-end: auto !important;
  left: auto;
  z-index: 4 !important;
  display: inline-flex !important;
  align-items: center !important;
  gap: 0 !important;
  max-width: calc(100% - 20px) !important;
  height: 24px !important;
  min-height: 0 !important;
  padding: 0 9px !important;
  margin: 0 !important;
  border: 0 !important;
  border-radius: 6px !important;
  background: var(--ed-inner) !important;
  background-image: none !important;
  color: var(--ed-ink) !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .16) !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
  font-family: var(--ed-font) !important;
  font-size: var(--ed-fs-badge) !important;
  font-weight: 700 !important;
  opacity: 1 !important;
  filter: none !important;
  pointer-events: none !important;
  user-select: none !important;
}
html:not([dir="rtl"]) .ed-page [data-category-section] .dish-card .dish-emoji-badge { left: 10px !important; right: auto !important; }
html[dir="rtl"] .ed-page [data-category-section] .dish-card .dish-emoji-badge { right: 10px !important; left: auto !important; }
.ed-page [data-category-section] .dish-card .dish-emoji-badge--gold,
.ed-page [data-category-section] .dish-card .dish-emoji-badge--silver,
.ed-page [data-category-section] .dish-card .dish-emoji-badge--bronze {
  background: var(--ed-accent) !important;
  color: var(--ed-on-accent) !important;
}
.ed-page [data-category-section] .dish-card .dish-emoji-badge__icon {
  display: none !important;
}
.ed-page [data-category-section] .dish-card .dish-emoji-badge__text {
  display: block !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
  font-family: var(--ed-font) !important;
  font-size: var(--ed-fs-badge) !important;
  font-weight: 700 !important;
  line-height: 1 !important;
  letter-spacing: .01em !important;
  text-transform: none !important;
  color: inherit !important;
  background: none !important;
  -webkit-text-fill-color: currentColor !important;
}

/* ── 6. Recherche + Populaires ───────────────────────────────────────── */
.ed-page #menu-explorer .mexplorer-tools {
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) !important;
  gap: 10px !important;
  padding: 0 !important;
  margin: 0 !important;
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
}
@media (min-width: 640px) {
  .ed-page #menu-explorer .mexplorer-tools { grid-template-columns: minmax(0, 1fr) auto !important; }
}
.ed-page #menu-explorer .mexplorer-search-wrap {
  display: flex !important;
  align-items: center !important;
  min-height: 48px !important;
  margin: 0 !important;
  padding: 0 !important;
  background: var(--ed-card) !important;
  border: 1px solid var(--ed-hairline) !important;
  border-radius: var(--ed-r-sm) !important;
  box-shadow: none !important;
}
.ed-page #menu-explorer .mexplorer-search-wrap:focus-within {
  border-color: var(--ed-accent-ink) !important;
  outline: 2px solid color-mix(in srgb, var(--ed-accent-ink) 30%, transparent) !important;
  outline-offset: 0 !important;
}
.ed-page #menu-explorer .mexplorer-search-ico {
  position: static !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  flex: 0 0 auto !important;
  width: 44px !important;
  height: 44px !important;
  margin: 0 !important;
  background: none !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  color: var(--ed-muted) !important;
  transform: none !important;
}
.ed-page #menu-explorer .mexplorer-search-ico svg { width: 18px !important; height: 18px !important; }
.ed-page #menu-explorer .mexplorer-search-input {
  flex: 1 1 auto !important;
  min-width: 0 !important;
  height: 46px !important;
  margin: 0 !important;
  padding: 0 12px 0 0 !important;
  padding-inline: 0 12px !important;
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
  outline: none !important;
  font-family: var(--ed-font) !important;
  font-size: 1rem !important;
  font-style: normal !important;
  font-weight: 450 !important;
  color: var(--ed-ink) !important;
}
.ed-page #menu-explorer .mexplorer-search-input::placeholder {
  color: var(--ed-muted) !important;
  font-style: normal !important;
  opacity: 1 !important;
}
.ed-page #menu-explorer .mexplorer-popular {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: flex-start !important;
  gap: 10px !important;
  min-height: 48px !important;
  margin: 0 !important;
  padding: 6px 16px !important;
  padding-inline: 12px 16px !important;
  background: transparent !important;
  background-image: none !important;
  border: 1px solid var(--ed-hairline) !important;
  border-radius: var(--ed-r-sm) !important;
  box-shadow: none !important;
  color: var(--ed-ink) !important;
  text-align: start !important;
  transform: none !important;
  cursor: pointer;
}
.ed-page #menu-explorer .mexplorer-popular[aria-pressed="true"] {
  background: var(--ed-accent) !important;
  border-color: var(--ed-accent) !important;
  color: var(--ed-on-accent) !important;
}
.ed-page #menu-explorer .mexplorer-popular:focus-visible {
  outline: 2px solid var(--ed-accent-ink) !important;
  outline-offset: 2px !important;
}
.ed-page #menu-explorer .mexplorer-popular-fire {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  width: 22px !important;
  font-size: 1.1rem !important;
  line-height: 1 !important;
  filter: none !important;
  animation: none !important;
}
.ed-page #menu-explorer .mexplorer-popular-body {
  display: flex !important;
  flex-direction: column !important;
  gap: 1px !important;
  line-height: 1.2 !important;
}
.ed-page #menu-explorer .mexplorer-popular-body strong {
  font-family: var(--ed-font) !important;
  font-size: .95rem !important;
  font-weight: 700 !important;
  color: inherit !important;
  background: none !important;
  -webkit-text-fill-color: currentColor !important;
}
.ed-page #menu-explorer .mexplorer-popular-sub {
  font-family: var(--ed-font) !important;
  font-size: var(--ed-fs-meta) !important;
  font-weight: 500 !important;
  color: inherit !important;
  opacity: .78 !important;
}

/* ── 7. Cartes de categories : variante A (standard) / B (selection) ─────
   A : image + titre + nombre de choix, sans cadre (l'image porte la carte).
   B : reservee a la categorie qui contient le classement manuel le plus
       haut (voir _editorial_featured.php) - titre pose sur le bas de
       l'image. Meme cellule de grille que A : aucune rupture, aucun trou. */
.ed-page #menu-explorer .mexplorer-cats {
  display: grid !important;
  grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
  gap: 14px 12px !important;
  margin: 0 !important;
  padding: 18px 0 8px !important;
  background: transparent !important;
  border: 0 !important;
  box-shadow: none !important;
}
@media (min-width: 640px) {
  /* Tablette : 3 a 4 colonnes lisibles (cellule >= 150px) */
  .ed-page #menu-explorer .mexplorer-cats { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)) !important; gap: 18px 14px !important; }
}
@media (min-width: 1024px) {
  .ed-page #menu-explorer .mexplorer-cats { grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)) !important; }
}
/* Une seule presentation pour tous les restaurants, quel que soit le nombre de categories : grille
   verticale (2 colonnes au telephone), jamais de rangee horizontale a faire glisser. Les regles heritees
   de menu-premium.css pour "--many" (defilement horizontal, largeurs fixes de 172px) sont neutralisees. */
.ed-page #menu-explorer .mexplorer-cats,
.ed-page #menu-explorer .mexplorer-cats.mexplorer-cats--many {
  overflow: visible !important;
  scroll-snap-type: none !important;
  flex-wrap: nowrap !important;
}
.ed-page #menu-explorer .mexplorer-cats .mexplorer-cat,
.ed-page #menu-explorer .mexplorer-cats.mexplorer-cats--many .mexplorer-cat {
  flex: none !important;
  width: auto !important;
  max-width: none !important;
  scroll-snap-align: none !important;
}
@media (max-width: 639px) {
  /* Telephone : vignettes de categorie moins hautes (3:2) pour atteindre plus vite les plats */
  .ed-page #menu-explorer .mexplorer-cat:not(.mexplorer-cat--featured) .mexplorer-cat-img-wrap { aspect-ratio: 3 / 2 !important; }
}
.ed-page #menu-explorer .mexplorer-cat,
.ed-page #menu-explorer .mexplorer-cat:hover,
.ed-page #menu-explorer .mexplorer-cat.active,
.ed-page #menu-explorer .mexplorer-cat.is-active {
  position: relative !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: stretch !important;
  justify-content: flex-start !important;
  gap: 8px !important;
  min-width: 0 !important;
  height: auto !important;
  margin: 0 !important;
  padding: 0 !important;
  background: transparent !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  transform: none !important;
  text-decoration: none !important;
  color: var(--ed-ink) !important;
}
.ed-page #menu-explorer .mexplorer-cat-shine { display: none !important; }
/* Reflets, points et halos herites (dont l'etat actif) : neutralises */
.ed-page #menu-explorer .mexplorer-cat::before,
.ed-page #menu-explorer .mexplorer-cat::after,
.ed-page #menu-explorer .mexplorer-cat-img::before,
.ed-page #menu-explorer .mexplorer-cat-img-wrap::before { content: none !important; }
.ed-page #menu-explorer .mexplorer-cat-img-wrap {
  position: relative !important;
  width: 100% !important;
  height: auto !important;
  aspect-ratio: 4 / 3 !important;
  margin: 0 !important;
  padding: 0 !important;
  border: 0 !important;
  border-radius: var(--ed-r-md) !important;
  overflow: hidden !important;
  background: var(--ed-card) !important;
  box-shadow: none !important;
}
.ed-page #menu-explorer .mexplorer-cat-img {
  position: absolute !important;
  inset: 0 !important;
  width: 100% !important;
  height: 100% !important;
  border-radius: 0 !important;
  background-size: cover !important;
  background-position: center !important;
  transform: none !important;
  filter: none !important;
}
.ed-page #menu-explorer .mexplorer-cat-img::after,
.ed-page #menu-explorer .mexplorer-cat-img-wrap::after { content: none !important; }
.ed-page #menu-explorer .mexplorer-cat-label {
  position: static !important;
  display: flex !important;
  flex-direction: column !important;
  align-items: flex-start !important;
  gap: 2px !important;
  margin: 0 !important;
  padding: 0 2px !important;
  background: none !important;
  border: 0 !important;
  text-align: start !important;
}
.ed-page #menu-explorer .mexplorer-cat-name {
  display: -webkit-box !important;
  -webkit-line-clamp: 2 !important;
  -webkit-box-orient: vertical !important;
  overflow: hidden !important;
  font-family: var(--ed-font) !important;
  font-size: .95rem !important;
  font-weight: 650 !important;
  line-height: 1.25 !important;
  letter-spacing: -.005em !important;
  color: var(--ed-ink) !important;
  text-align: start !important;
  overflow-wrap: anywhere !important;
}
.ed-page #menu-explorer .mexplorer-cat-count {
  font-family: var(--ed-font) !important;
  font-size: var(--ed-fs-meta) !important;
  font-weight: 500 !important;
  line-height: 1.2 !important;
  color: var(--ed-muted) !important;
  text-align: start !important;
}
/* Categorie active (defilement) : filet d'accent sous l'image, sans cadre */
/* Categorie active (defilement) : UN seul indicateur, un contour d'accent colle a l'image (pas d'anneau clair
   intermediaire). Focus clavier uniquement (:focus-visible) : anneau supplementaire, au-dela du contour. */
.ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-img-wrap { outline: 0 !important; box-shadow: none !important; }
.ed-page #menu-explorer .mexplorer-cat.active .mexplorer-cat-img-wrap,
.ed-page #menu-explorer .mexplorer-cat.is-active .mexplorer-cat-img-wrap {
  outline: 2px solid var(--ed-accent-ink) !important;
  outline-offset: 0 !important;
}
.ed-page #menu-explorer .mexplorer-cat:focus { outline: none !important; }
.ed-page #menu-explorer .mexplorer-cat:focus-visible .mexplorer-cat-img-wrap {
  box-shadow: 0 0 0 4px var(--ed-inner), 0 0 0 6px var(--ed-ink) !important;
}
/* Variante B : l'image occupe toute la cellule (meme hauteur que ses voisines
   image + libelle) et le titre est pose sur son bas, sur un voile sombre neutre
   (lisible quelle que soit la photo, independant du theme). */
.ed-page #menu-explorer .mexplorer-cat--featured .mexplorer-cat-img-wrap {
  flex: 1 1 auto !important;
}
.ed-page #menu-explorer .mexplorer-cat--featured .mexplorer-cat-img-wrap::after {
  content: "" !important;
  position: absolute !important;
  inset: 40% 0 0 0 !important;
  width: auto !important;
  height: auto !important;
  background: linear-gradient(to top, rgba(0, 0, 0, .7), rgba(0, 0, 0, 0)) !important;
  pointer-events: none !important;
}
.ed-page #menu-explorer .mexplorer-cat--featured .mexplorer-cat-label {
  position: absolute !important;
  left: 12px !important;
  right: 12px !important;
  bottom: 10px !important;
  top: auto !important;
  z-index: 2 !important;
  padding: 0 !important;
}
.ed-page #menu-explorer .mexplorer-cat--featured .mexplorer-cat-name {
  font-size: 1.02rem !important;
  font-weight: 700 !important;
  color: #FFFFFF !important;
}
.ed-page #menu-explorer .mexplorer-cat--featured .mexplorer-cat-count {
  color: rgba(255, 255, 255, .88) !important;
}

/* Categories : nombre de colonnes EQUILIBRE, calcule serveur pour chaque palier (plafond 4 colonnes en
   tablette, 6 de 1024 a 1279px, 8 au-dela) : colonnes = ceil(n / ceil(n / plafond)). Exemples : 8
   categories -> 4 + 4 a 1024px (au lieu de 7 + 1), 10 -> 5 + 5, 7 -> 4 + 3, 5 -> une rangee de 5.
   Telephone : 2 colonnes (ou defilement horizontal au-dela de 8), inchange. */
@media (min-width: 640px) {
  .ed-page #menu-explorer .mexplorer-cat:not(.mexplorer-cat--featured) .mexplorer-cat-img-wrap { aspect-ratio: 16 / 10 !important; }
}
@media (min-width: 640px) and (max-width: 1023px) {
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-t1 { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-t2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-t3 { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-t4 { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
}
@media (min-width: 1024px) and (max-width: 1279px) {
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-d1 { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-d2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-d3 { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-d4 { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-d5 { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-d6 { grid-template-columns: repeat(6, minmax(0, 1fr)) !important; }
}
@media (min-width: 1280px) {
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-w1 { grid-template-columns: repeat(1, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-w2 { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-w3 { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-w4 { grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-w5 { grid-template-columns: repeat(5, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-w6 { grid-template-columns: repeat(6, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-w7 { grid-template-columns: repeat(7, minmax(0, 1fr)) !important; }
  .ed-page #menu-explorer .mexplorer-cats.ed-cats-w8 { grid-template-columns: repeat(8, minmax(0, 1fr)) !important; }
}

@media (prefers-reduced-motion: reduce) {
  .ed-page [data-category-section] .dish-card .media img,
  .ed-page #menu-explorer .mexplorer-cat-img { transition: none !important; transform: none !important; }
}

/* ═══════════════════════════════════════════════════════════════════════
   PHASE B — header, roulette, selection Best-Sellers, navigation mobile
   ═══════════════════════════════════════════════════════════════════════ */

/* ── 8. Header du restaurant ─────────────────────────────────────────────
   Identite dominante (logo + nom), informations regroupees par sens sur
   une seule ligne de metadonnees separees par de simples filets (statut et
   horaires | note | Halal), actions sur une rangee distincte : une action
   principale pleine, les autres en liens calmes. Plus de "soupe de pills".
   Couleurs : fond = couleur secondaire du restaurant, texte = --hero-text
   (contraste calcule serveur) - corrige au passage le nom blanc sur blanc
   des headers clairs. */
.ed-page--menu .menu-app .restaurant-sheet-hero {
  margin: 0 0 12px !important;
  padding: 10px 0 0 !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet {
  /* Telephone : 1) logo + nom + adresse + statut ; 2) rangee utilitaire compacte :
     "Connecte : ..." (s'il y a lieu) au debut, langue et "Plus" a la fin. Aucune
     rangee vide avant l'identite. */
  display: grid !important;
  grid-template-columns: minmax(0, 1fr) auto !important;
  grid-template-areas: "main main" "actions top" !important;
  gap: 12px 10px !important;
  padding: 14px 14px 12px !important;
  background: var(--secondary-color, #111827) !important;
  background-image: none !important;
  color: var(--hero-text, #FFFFFF) !important;
  border: 0 !important;
  border-radius: var(--ed-r-lg) !important;
  box-shadow: none !important;
  overflow: visible !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet::before,
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet::after { content: none !important; }
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-top {
  grid-area: top !important;
  position: static !important;
  inset: auto !important;
  width: auto !important;
  display: flex !important;
  justify-content: flex-end !important;
  align-items: center !important;
  align-self: center !important;
  justify-self: end !important;
  margin: 0 !important;
  padding: 0 !important;
}
/* Etiquette "Menu digital" : purement decorative, masquee (le nom suffit) */
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-label { display: none !important; }
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-top-right {
  position: static !important;
  inset: auto !important;
  display: flex !important;
  align-items: center !important;
  gap: 8px !important;
  margin: 0 !important;
}
/* Langue + "Plus" : boutons discrets, filet a la couleur du texte du header */
.ed-page--menu .menu-app .restaurant-sheet-hero .lang-trigger,
.ed-page--menu .menu-app .restaurant-sheet-hero .rh-more-open-btn {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  min-height: 44px !important;
  height: auto !important;
  padding: 0 12px !important;
  background: transparent !important;
  background-image: none !important;
  color: var(--hero-text, #FFFFFF) !important;
  border: 1px solid color-mix(in srgb, var(--hero-text, #FFFFFF) 24%, transparent) !important;
  border-radius: var(--ed-r-sm) !important;
  box-shadow: none !important;
  font-family: var(--ed-font) !important;
  font-size: .82rem !important;
  font-weight: 600 !important;
  transform: none !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .lang-trigger *,
.ed-page--menu .menu-app .restaurant-sheet-hero .rh-more-open-btn * { color: inherit !important; }
.ed-page--menu .menu-app .restaurant-sheet-hero .lang-trigger:focus-visible,
.ed-page--menu .menu-app .restaurant-sheet-hero .rh-more-open-btn:focus-visible {
  outline: 2px solid var(--hero-text, #FFFFFF) !important;
  outline-offset: 2px !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-main {
  grid-area: main !important;
  margin: 0 !important;
  padding: 0 !important;
  min-width: 0 !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-identity {
  display: flex !important;
  align-items: center !important;
  gap: 14px !important;
  min-width: 0 !important;
  margin: 0 !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-logo {
  flex: 0 0 auto !important;
  width: var(--ed-logo) !important;
  height: var(--ed-logo) !important;
  min-width: 0 !important;
  max-width: none !important;
  margin: 0 !important;
  border: 0 !important;
  border-radius: var(--ed-r-md) !important;
  box-shadow: 0 0 0 1px color-mix(in srgb, var(--hero-text, #FFFFFF) 16%, transparent) !important;
  object-fit: cover !important;
  transform: none !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-copy {
  display: flex !important;
  flex-direction: column !important;
  flex: 1 1 auto !important;
  align-items: flex-start !important;
  gap: 4px !important;
  min-width: 0 !important;
  max-width: none !important;
  width: auto !important;
  margin: 0 !important;
  padding: 0 !important;
  text-align: start !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-copy .restaurant-sheet-name,
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-name {
  margin: 0 !important;
  padding: 0 !important;
  font-family: var(--ed-font) !important;
  font-size: clamp(1.3rem, .95rem + 1.9vw, 2.3rem) !important;
  font-weight: 750 !important;
  line-height: 1.1 !important;
  letter-spacing: -.025em !important;
  color: var(--hero-text, #FFFFFF) !important;
  -webkit-text-fill-color: currentColor !important;
  background: none !important;
  text-shadow: none !important;
  filter: none !important;
  white-space: normal !important;
  overflow: visible !important;
  text-overflow: clip !important;
  max-width: none !important;
  overflow-wrap: anywhere !important;
  text-wrap: balance;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-address {
  display: flex !important;
  align-items: flex-start !important;
  gap: 6px !important;
  margin: 0 !important;
  font-family: var(--ed-font) !important;
  font-size: .88rem !important;
  font-weight: 450 !important;
  line-height: 1.35 !important;
  color: var(--hero-subtext, var(--hero-text, #FFFFFF)) !important;
  opacity: 1 !important;
  max-width: none !important;
  width: auto !important;
}
/* Ligne de metadonnees : statut + horaires | note | Halal, separes par des filets */
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-badges {
  display: flex !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 4px 0 !important;
  margin: 4px 0 0 !important;
  padding: 0 !important;
  max-width: none !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-badges .hero-badge {
  display: inline-flex !important;
  align-items: center !important;
  gap: 6px !important;
  min-height: 0 !important;
  height: auto !important;
  margin: 0 !important;
  padding: 0 12px !important;
  background: none !important;
  background-image: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  font-family: var(--ed-font) !important;
  font-size: .84rem !important;
  font-weight: 550 !important;
  line-height: 1.3 !important;
  letter-spacing: 0 !important;
  text-transform: none !important;
  color: var(--hero-text, #FFFFFF) !important;
  text-decoration: none !important;
  animation: none !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-badges .hero-badge:first-child { padding-inline-start: 0 !important; }
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-badges .hero-badge + .hero-badge {
  border-inline-start: 1px solid color-mix(in srgb, var(--hero-text, #FFFFFF) 28%, transparent) !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-badges .hero-badge::before,
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-badges .hero-badge::after { content: none !important; }
/* Pictogrammes des actions : SVG monochromes deja utilises par la navigation basse, meme taille partout */
.ed-page--menu .menu-app .restaurant-sheet-hero .ed-action-icon {
  display: inline-flex !important;
  width: 18px !important;
  height: 18px !important;
  flex: 0 0 18px !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .ed-action-icon svg { width: 18px !important; height: 18px !important; fill: currentColor !important; }
/* Statut : pastille semantique (vert ouvert / rouge ferme), independante du theme */
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-badge-dot {
  display: inline-block !important;
  width: 8px !important;
  height: 8px !important;
  border-radius: 50% !important;
  background: #22A35A !important;
  box-shadow: none !important;
  animation: none !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-badge-status--closed .restaurant-badge-dot { background: #D94A3D !important; }
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-badge-status { font-weight: 650 !important; }
/* Actions : rangee distincte sous un filet ; l'action principale est pleine, le reste calme */
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-actions {
  grid-area: actions !important;
  display: flex !important;
  /* une couche heritee (.hero-actions-menu) met ce conteneur en colonne centree : rangee explicite */
  flex-direction: row !important;
  flex-wrap: wrap !important;
  justify-content: flex-start !important;
  align-items: center !important;
  gap: 8px 12px !important;
  min-width: 0 !important;
  margin: 14px 0 0 !important;
  padding: 12px 0 0 !important;
  border-top: 1px solid color-mix(in srgb, var(--hero-text, #FFFFFF) 16%, transparent) !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-actions {
  display: flex !important;
  flex: 1 1 auto !important;
  flex-wrap: wrap !important;
  justify-content: flex-start !important;
  align-items: center !important;
  gap: 4px 6px !important;
  margin: 0 !important;
  padding: 0 !important;
  overflow: visible !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-action,
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-action:hover {
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  gap: 7px !important;
  width: auto !important;
  min-width: 0 !important;
  min-height: 44px !important;
  height: auto !important;
  margin: 0 !important;
  padding: 0 12px !important;
  background: transparent !important;
  background-image: none !important;
  color: var(--hero-text, #FFFFFF) !important;
  border: 0 !important;
  border-radius: var(--ed-r-sm) !important;
  box-shadow: none !important;
  filter: none !important;
  transform: none !important;
  font-family: var(--ed-font) !important;
  font-size: .9rem !important;
  font-weight: 600 !important;
  text-decoration: none !important;
  opacity: 1 !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-action:hover {
  background: color-mix(in srgb, var(--hero-text, #FFFFFF) 8%, transparent) !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-action::before,
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-action::after { content: none !important; }
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-action--order,
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-action--order:hover {
  padding: 0 18px !important;
  margin-inline-end: 6px !important;
  background: var(--ed-accent) !important;
  color: var(--ed-on-accent) !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-quick-action:focus-visible {
  outline: 2px solid var(--hero-text, #FFFFFF) !important;
  outline-offset: 2px !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-connected {
  display: flex !important;
  flex: 0 1 auto !important;
  justify-content: flex-start !important;
  align-items: center !important;
  min-width: 0 !important;
  margin: 0 !important;
  margin-inline-start: auto !important;
  padding: 0 !important;
}
.ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-connected .hero-badge {
  padding: 0 !important;
  background: none !important;
  border: 0 !important;
  box-shadow: none !important;
  display: block !important;
  min-height: 0 !important;
  text-align: start !important;
  overflow: hidden !important;
  text-overflow: ellipsis !important;
  white-space: nowrap !important;
  font-size: .82rem !important;
  font-weight: 500 !important;
  color: var(--hero-subtext, var(--hero-text, #FFFFFF)) !important;
}
@media (min-width: 721px) {
  /* Desktop : composition horizontale - identite a gauche, langue et "Plus" alignes en haut a droite */
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet {
    grid-template-areas: "main top" "actions actions" !important;
    padding: 24px 28px 20px !important;
    column-gap: 24px !important;
  }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-top { align-self: start !important; margin: 0 !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-identity { gap: 20px !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-actions { margin-top: 20px !important; padding-top: 14px !important; }
}
@media (max-width: 720px) {
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-badges .hero-badge { font-size: .8rem !important; padding: 0 10px !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-address { font-size: .84rem !important; }
  /* Mobile : tous les modules sont dans la navigation basse (meme seuil de 720px) - les boutons
     d'action du header restent masques, comme avant la refonte. Seule la mention "Connecte : ..."
     subsiste, dans la rangee utilitaire (a cote de la langue et de "Plus"), sans rangee dediee. */
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-actions { display: none !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-actions:has(.restaurant-sheet-connected) {
    display: flex !important;
    align-self: center !important;
    margin: 0 !important;
    padding: 0 !important;
    border-top: 0 !important;
  }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-actions:has(.restaurant-sheet-connected) .restaurant-quick-actions { display: none !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-connected { margin-inline-start: 0 !important; }
}
@media (max-width: 430px) {
  /* Telephone + client connecte : la langue se reduit au drapeau + chevron pour que la rangee
     utilitaire tienne sur une ligne (le bouton garde son nom accessible). */
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet:has(.restaurant-sheet-connected) .lang-trigger__label { display: none !important; }
}

/* Telephone (<= 767px) : UN seul bloc d'en-tete. Le logo, le nom, l'adresse et le statut deviennent des
   elements directs de la grille (display: contents sur leurs conteneurs, sans effet semantique : ce sont
   des <div>). Langue et "Plus" (deux boutons 44 x 44 espaces de 10px) forment une ligne separee SOUS les
   informations, alignee en fin de ligne : le nom et l'adresse disposent de toute la largeur. Le logo occupe
   la hauteur de ces lignes. RTL : la grille s'inverse d'elle-meme (boutons a gauche). Les libelles restent
   lus par les lecteurs d'ecran (masquage visuel). 721-767px : la rangee des actions rapides reste dessous. */
@media (max-width: 767px) {
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet {
    grid-template-columns: var(--ed-logo) minmax(0, 1fr) !important;
    grid-template-areas: "logo name" "logo addr" "logo meta" "logo tools" "actions actions" !important;
    align-items: start !important;
    gap: 4px 14px !important;
  }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-name,
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-address {
    min-width: 0 !important;
    max-width: 100% !important;
    overflow-wrap: anywhere !important;
  }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-main,
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-identity,
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-copy { display: contents !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-logo { grid-area: logo !important; align-self: start !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-copy .restaurant-sheet-name,
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-name { grid-area: name !important; align-self: start !important; margin-top: 2px !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-address { grid-area: addr !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-badges { grid-area: meta !important; margin: 4px 0 0 !important; min-width: 0 !important; }
  /* 8px + 4px d'ecart de grille = 12px au-dessus de la ligne d'actions */
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-top { grid-area: tools !important; align-self: end !important; justify-self: end !important; margin: 8px 0 0 !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-top-right { flex-direction: row !important; align-items: center !important; gap: 10px !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-actions { grid-area: actions !important; }
  .ed-page--menu .menu-app .restaurant-sheet-hero .lang-trigger,
  .ed-page--menu .menu-app .restaurant-sheet-hero .rh-more-open-btn {
    width: 44px !important;
    min-width: 44px !important;
    height: 44px !important;
    min-height: 44px !important;
    padding: 0 !important;
    justify-content: center !important;
    gap: 2px !important;
  }
  .ed-page--menu .menu-app .restaurant-sheet-hero .lang-trigger__label,
  .ed-page--menu .menu-app .restaurant-sheet-hero .rh-more-open-btn > span {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    margin: -1px !important;
    padding: 0 !important;
    overflow: hidden !important;
    clip: rect(0 0 0 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
  }
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-actions:has(.restaurant-sheet-connected) { margin-top: 8px !important; }
  /* Nom tres long : un cran plus compact */
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet-copy .restaurant-sheet-name.restaurant-sheet-name--long {
    font-size: clamp(1.08rem, .8rem + 1.5vw, 1.3rem) !important;
    line-height: 1.15 !important;
  }
}

/* ── 9. Bloc Roulette (lien existant .gift-ticket, logique inchangee) ─────
   Desktop : roue a gauche, message et recompenses au centre, CTA a droite.
   Mobile  : roue compacte a cote du titre, recompenses groupees, CTA pleine
   largeur. Fond : teinte douce de la couleur principale sur le fond
   interieur ; aucun halo, aucun neon, aucun mouvement. */
.ed-page--menu .menu-app .gift-ticket,
.ed-page--menu .menu-app .gift-ticket:hover,
.ed-page--menu .menu-app .gift-ticket:focus-visible {
  display: grid !important;
  /* Telephone : le corps du bloc est "deplie" (display: contents) pour que la roue
     accompagne le titre et l'explication, puis que recompenses et CTA prennent toute la largeur. */
  grid-template-columns: auto minmax(0, 1fr) !important;
  grid-template-areas: "wheel title" "wheel sub" "prizes prizes" "cta cta" !important;
  grid-template-rows: auto auto auto auto !important;
  align-items: start !important;
  gap: 4px 14px !important;
  margin: 0 0 12px !important;
  padding: 16px !important;
  background: var(--ed-accent-soft, var(--ed-inner)) !important;
  background-image: none !important;
  color: var(--ed-ink) !important;
  border: 0 !important;
  border-radius: var(--ed-r-lg) !important;
  box-shadow: none !important;
  transform: none !important;
  transition: none !important;
  text-decoration: none !important;
}
.ed-page--menu .menu-app .gift-ticket:focus-visible {
  outline: 2px solid var(--ed-accent-ink) !important;
  outline-offset: 3px !important;
}
.ed-page--menu .menu-app .gift-ticket::before,
.ed-page--menu .menu-app .gift-ticket::after { content: none !important; }
.ed-page--menu .menu-app .gift-ticket__wheel {
  grid-area: wheel !important;
  align-self: center !important;
  width: var(--ed-wheel) !important;
  height: var(--ed-wheel) !important;
  margin: 0 !important;
  box-shadow: 0 0 0 3px var(--ed-inner) !important;
}
.ed-page--menu .menu-app .gift-ticket__body {
  grid-area: body !important;
  display: contents !important;
}
.ed-page--menu .menu-app .gift-ticket__title { grid-area: title !important; align-self: end !important; text-align: start !important; }
.ed-page--menu .menu-app .gift-ticket__subtitle { grid-area: sub !important; align-self: start !important; text-align: start !important; }
.ed-page--menu .menu-app .gift-ticket__prizes { grid-area: prizes !important; }
.ed-page--menu .menu-app .gift-ticket__cta { margin-top: 10px !important; }
.ed-page--menu .menu-app .gift-ticket__title {
  font-family: var(--ed-font) !important;
  font-size: 1.12rem !important;
  font-weight: 750 !important;
  line-height: 1.2 !important;
  letter-spacing: -.015em !important;
  color: var(--ed-ink) !important;
  text-wrap: balance;
}
.ed-page--menu .menu-app .gift-ticket__subtitle {
  font-family: var(--ed-font) !important;
  font-size: .88rem !important;
  line-height: 1.4 !important;
  color: var(--ed-muted) !important;
}
/* Recompenses : une liste de texte (en ligne sur toute la largeur du telephone, separee par des filets sur desktop), pas des pastilles */
.ed-page--menu .menu-app .gift-ticket__prizes {
  display: flex !important;
  flex-direction: row !important;
  flex-wrap: wrap !important;
  align-items: center !important;
  gap: 6px 16px !important;
  margin: 10px 0 0 !important;
  padding: 0 !important;
}
.ed-page--menu .menu-app .gift-ticket__prize {
  display: inline-flex !important;
  align-items: center !important;
  gap: 5px !important;
  max-width: 100% !important;
  margin: 0 !important;
  padding: 0 10px !important;
  background: none !important;
  border: 0 !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  font-family: var(--ed-font) !important;
  font-size: .86rem !important;
  font-weight: 650 !important;
  line-height: 1.3 !important;
  color: var(--ed-ink) !important;
}
.ed-page--menu .menu-app .gift-ticket__prize { padding-inline-start: 0 !important; }
@media (min-width: 768px) {
  .ed-page--menu .menu-app .gift-ticket__prize + .gift-ticket__prize {
    padding-inline-start: 10px !important;
    border-inline-start: 1px solid var(--ed-hairline) !important;
  }
}
/* Recompenses : puce sobre a la couleur d'accent au lieu d'un emoji cadeau repete */
.ed-page--menu .menu-app .gift-ticket__prize-icon { display: none !important; }
.ed-page--menu .menu-app .gift-ticket__prize::before {
  content: "" !important;
  flex: 0 0 auto !important;
  width: 6px !important;
  height: 6px !important;
  border-radius: 50% !important;
  background: var(--ed-accent-ink) !important;
}
.ed-page--menu .menu-app .gift-ticket__prizes--generic {
  font-size: .86rem !important;
  font-style: normal !important;
  color: var(--ed-muted) !important;
}
.ed-page--menu .menu-app .gift-ticket__cta {
  grid-area: cta !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
  min-height: 48px !important;
  width: 100% !important;
  margin: 0 !important;
  padding: 0 22px !important;
  background: var(--ed-accent) !important;
  color: var(--ed-on-accent) !important;
  border: 0 !important;
  border-radius: var(--ed-r-sm) !important;
  box-shadow: none !important;
  font-family: var(--ed-font) !important;
  font-size: .95rem !important;
  font-weight: 700 !important;
  white-space: nowrap !important;
  transform: none !important;
}
@media (min-width: 768px) {
  .ed-page--menu .menu-app .gift-ticket,
  .ed-page--menu .menu-app .gift-ticket:hover,
  .ed-page--menu .menu-app .gift-ticket:focus-visible {
    grid-template-columns: auto minmax(0, 1fr) auto !important;
    grid-template-rows: auto !important;
    grid-template-areas: "wheel body cta" !important;
    align-items: center !important;
    gap: 0 28px !important;
    padding: 22px 28px !important;
  }
  .ed-page--menu .menu-app .gift-ticket__wheel { width: 112px !important; height: 112px !important; }
  .ed-page--menu .menu-app .gift-ticket__body {
    display: flex !important;
    flex-direction: column !important;
    gap: 4px !important;
    min-width: 0 !important;
  }
  .ed-page--menu .menu-app .gift-ticket__prizes { gap: 4px 0 !important; margin-top: 6px !important; }
  .ed-page--menu .menu-app .gift-ticket__title,
  .ed-page--menu .menu-app .gift-ticket__subtitle { align-self: stretch !important; text-align: start !important; }
  .ed-page--menu .menu-app .gift-ticket__cta { margin-top: 0 !important; }
  .ed-page--menu .menu-app .gift-ticket__title { font-size: clamp(1.25rem, .9rem + 1vw, 1.6rem) !important; }
  .ed-page--menu .menu-app .gift-ticket__cta { width: auto !important; }
}

/* Recompenses : mini-cartes discretes d'une meme famille (surface issue du fond interieur, rayon du
   design system, pictogramme cadeau monochrome a la couleur d'accent, meme hauteur de ligne). Pas de
   bordure (la surface suffit), pas de brillance. Retour a la ligne propre sur telephone. */
.ed-page--menu .menu-app .gift-ticket__prizes { gap: 6px !important; margin-top: 10px !important; }
.ed-page--menu .menu-app .gift-ticket__prize,
.ed-page--menu .menu-app .gift-ticket__prize + .gift-ticket__prize {
  gap: 6px !important;
  max-width: 100% !important;
  padding: 5px 10px 5px 8px !important;
  padding-inline: 8px 10px !important;
  border: 0 !important;
  border-radius: var(--ed-r-sm) !important;
  background: var(--ed-inner) !important;
  background: color-mix(in srgb, var(--ed-inner) 72%, transparent) !important;
  font-size: .84rem !important;
  font-weight: 600 !important;
  line-height: 1.25 !important;
  white-space: normal !important;
  overflow-wrap: anywhere !important;
}
.ed-page--menu .menu-app .gift-ticket__prize::before {
  width: 14px !important;
  height: 14px !important;
  border-radius: 0 !important;
  background: var(--ed-accent-ink) !important;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='8' width='18' height='4' rx='1'/%3E%3Cpath d='M12 8v13'/%3E%3Cpath d='M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7'/%3E%3Cpath d='M7.5 8a2.5 2.5 0 0 1 0-5C11 3 12 8 12 8s1-5 4.5-5a2.5 2.5 0 0 1 0 5'/%3E%3C/svg%3E") center / contain no-repeat !important;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='8' width='18' height='4' rx='1'/%3E%3Cpath d='M12 8v13'/%3E%3Cpath d='M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7'/%3E%3Cpath d='M7.5 8a2.5 2.5 0 0 1 0-5C11 3 12 8 12 8s1-5 4.5-5a2.5 2.5 0 0 1 0 5'/%3E%3C/svg%3E") center / contain no-repeat !important;
}
@media (min-width: 768px) {
  .ed-page--menu .menu-app .gift-ticket__prizes { margin-top: 8px !important; }
}

/* ── 9 bis. Banniere roulette promotionnelle (composition de la maquette) ─────
   Structure : roue mise en valeur (gauche) | titre, explication, recompenses
   (centre) | illustration de paquets cadeaux + bouton (droite). Telephone :
   roue compacte | texte | bouton rond a fleche ; recompenses dessous ; petit
   cadeau dans l'angle. Ambiance : halos radiaux et confettis tres legers.
   TOUTES les couleurs derivent du theme (--ed-accent = couleur principale,
   --ed-on-accent = texte lisible sur l'accent, fonds interieurs) : aucune
   couleur d'un restaurant, aucune image, aucune animation. */
.ed-page--menu .menu-app .gift-ticket,
.ed-page--menu .menu-app .gift-ticket:hover,
.ed-page--menu .menu-app .gift-ticket:focus-visible {
  --gt-a: var(--ed-accent);
  --gt-b: var(--ed-accent);
  --gt-c: var(--ed-accent);
  --gt-rib-a: var(--ed-on-accent);
  --gt-rib-b: var(--ed-accent);
  --gt-glow: transparent;
  position: relative !important;
  overflow: hidden !important;
  isolation: isolate !important;
  border: 1px solid var(--ed-hairline) !important;
}
@supports (color: color-mix(in srgb, red 50%, blue)) {
  .ed-page--menu .menu-app .gift-ticket,
  .ed-page--menu .menu-app .gift-ticket:hover,
  .ed-page--menu .menu-app .gift-ticket:focus-visible {
    --gt-b: color-mix(in srgb, var(--ed-accent) 48%, var(--ed-inner));
    --gt-c: color-mix(in srgb, var(--ed-accent) 72%, var(--ed-ink));
    --gt-rib-a: color-mix(in srgb, var(--ed-on-accent) 88%, var(--ed-accent));
    --gt-glow: color-mix(in srgb, var(--ed-accent) 20%, transparent);
    background:
      radial-gradient(circle at 10% 50%, var(--gt-glow), transparent 32%),
      radial-gradient(ellipse at 86% 45%, var(--gt-glow), transparent 42%),
      var(--ed-accent-soft, var(--ed-inner)) !important;
    border-color: color-mix(in srgb, var(--ed-accent) 26%, transparent) !important;
  }
}
/* Roue : anneau et profondeur a la couleur d'accent */
.ed-page--menu .menu-app .gift-ticket__wheel {
  position: relative !important;
  z-index: 1 !important;
  box-shadow: 0 0 0 3px var(--ed-inner), 0 0 0 5px var(--gt-b), 0 10px 26px -8px var(--gt-c) !important;
}
.ed-page--menu .menu-app .gift-ticket__body,
.ed-page--menu .menu-app .gift-ticket__title,
.ed-page--menu .menu-app .gift-ticket__subtitle,
.ed-page--menu .menu-app .gift-ticket__prizes { position: relative !important; z-index: 1 !important; }
/* Mini-encadres des recompenses : surface + filet d'accent tres leger */
.ed-page--menu .menu-app .gift-ticket__prize,
.ed-page--menu .menu-app .gift-ticket__prize + .gift-ticket__prize {
  border: 1px solid var(--ed-hairline) !important;
  border-color: color-mix(in srgb, var(--ed-accent) 24%, transparent) !important;
  box-shadow: 0 1px 2px rgba(0, 0, 0, .06) !important;
}
/* Illustration : SVG interne pilote par les tokens */
.ed-page--menu .menu-app .gift-ticket__decor {
  position: absolute !important;
  z-index: 0 !important;
  pointer-events: none !important;
  display: block !important;
  line-height: 0 !important;
}
.ed-page--menu .menu-app .gift-ticket__gifts {
  display: block !important;
  width: 100% !important;
  height: 100% !important;
  max-width: none !important;
  object-fit: contain !important;
  object-position: right bottom !important;
  user-select: none !important;
}
/* RTL : seule la zone change de cote, l'illustration n'est jamais retournee */
html[dir="rtl"] .ed-page--menu .menu-app .gift-ticket__gifts { object-position: left bottom !important; }
/* Bouton : fleche integree, retournee en RTL */
.ed-page--menu .menu-app .gift-ticket__cta { position: relative !important; z-index: 2 !important; gap: 8px !important; }
.ed-page--menu .menu-app .gift-ticket__cta-arrow { flex: 0 0 auto !important; width: 18px !important; height: 18px !important; }
html[dir="rtl"] .ed-page--menu .menu-app .gift-ticket__cta-arrow { transform: scaleX(-1) !important; }

/* Telephone (< 768px) : roue | titre + explication | bouton rond ; recompenses sur toute la largeur */
@media (max-width: 767px) {
  .ed-page--menu .menu-app .gift-ticket,
  .ed-page--menu .menu-app .gift-ticket:hover,
  .ed-page--menu .menu-app .gift-ticket:focus-visible {
    grid-template-columns: auto minmax(0, 1fr) 48px !important;
    grid-template-areas: "wheel title cta" "wheel sub cta" "prizes prizes prizes" !important;
    grid-template-rows: auto auto auto !important;
    align-items: center !important;
    gap: 4px 12px !important;
    padding: 14px !important;
  }
  .ed-page--menu .menu-app .gift-ticket__wheel { width: clamp(88px, 23vw, 100px) !important; height: clamp(88px, 23vw, 100px) !important; }
  .ed-page--menu .menu-app .gift-ticket__title { font-size: 1.04rem !important; line-height: 1.2 !important; align-self: end !important; }
  .ed-page--menu .menu-app .gift-ticket__subtitle { font-size: .82rem !important; line-height: 1.35 !important; align-self: start !important; }
  .ed-page--menu .menu-app .gift-ticket__cta {
    grid-area: cta !important;
    align-self: end !important;
    justify-self: end !important;
    width: 48px !important;
    height: 48px !important;
    min-height: 48px !important;
    padding: 0 !important;
    margin: 0 0 4px !important;
    border-radius: 50% !important;
  }
  /* Libelle masque visuellement : le lien garde le nom "... — Tenter ma chance" (aria-label) */
  .ed-page--menu .menu-app .gift-ticket__cta-label {
    position: absolute !important; width: 1px !important; height: 1px !important; margin: -1px !important;
    overflow: hidden !important; clip: rect(0 0 0 0) !important; white-space: nowrap !important;
  }
  .ed-page--menu .menu-app .gift-ticket__cta-arrow { width: 22px !important; height: 22px !important; }
  .ed-page--menu .menu-app .gift-ticket__prizes { margin-top: 10px !important; }
}
/* Tablette et desktop (>= 768px) : le bouton et l'illustration ont chacun LEUR cellule de grille - ils ne se
   superposent jamais, quelle que soit la longueur du libelle (aucune regle par langue). L'illustration se
   reduit dans sa cellule (SVG proportionnel) ; roue, titre, explication, recompenses et bouton restent
   prioritaires. 768-1099px : bouton en haut de la colonne droite, cadeaux dessous. */
@media (min-width: 768px) {
  .ed-page--menu .menu-app .gift-ticket,
  .ed-page--menu .menu-app .gift-ticket:hover,
  .ed-page--menu .menu-app .gift-ticket:focus-visible {
    grid-template-columns: auto minmax(0, 1fr) auto !important;
    grid-template-areas: "wheel body cta" "wheel body decor" !important;
    grid-template-rows: auto 1fr !important;
    align-items: center !important;
    gap: 0 24px !important;
    min-height: 168px !important;
    padding: 20px 24px !important;
  }
  .ed-page--menu .menu-app .gift-ticket__cta {
    grid-area: cta !important;
    justify-self: end !important;
    align-self: start !important;
    margin: 2px 0 0 !important;
    min-height: 48px !important;
    padding: 0 16px 0 22px !important;
    padding-inline: 22px 16px !important;
    border-radius: 999px !important;
    box-shadow: 0 8px 20px -10px var(--gt-c) !important;
    white-space: nowrap !important;
  }
  .ed-page--menu .menu-app .gift-ticket__decor {
    grid-area: decor !important;
    position: relative !important;
    inset: auto !important;
    justify-self: end !important;
    align-self: end !important;
    width: min(100%, 190px) !important;
    height: 84px !important;
    margin: 10px 0 0 !important;
  }
  .ed-page--menu .menu-app .gift-ticket__decor::before {
    content: "" !important;
    position: absolute !important;
    inset: 10% 0 0 10% !important;
    background: radial-gradient(ellipse at 55% 70%, var(--gt-glow), transparent 65%) !important;
  }
}
/* >= 1100px, comme la maquette : contenu | cadeaux | bouton, chacun dans sa colonne. La colonne des cadeaux
   (0 a 210px) est la seule a retrecir quand la place manque. */
@media (min-width: 1100px) {
  .ed-page--menu .menu-app .gift-ticket,
  .ed-page--menu .menu-app .gift-ticket:hover,
  .ed-page--menu .menu-app .gift-ticket:focus-visible {
    grid-template-columns: auto minmax(0, 1fr) minmax(0, 240px) auto !important;
    grid-template-areas: "wheel body decor cta" !important;
    grid-template-rows: auto !important;
    gap: 0 20px !important;
  }
  .ed-page--menu .menu-app .gift-ticket__cta { align-self: center !important; margin: 0 !important; }
  .ed-page--menu .menu-app .gift-ticket__decor {
    align-self: stretch !important;
    justify-self: stretch !important;
    width: 100% !important;
    height: auto !important;
    min-height: 112px !important;
    margin: 0 !important;
  }
}
/* Confettis tres discrets repartis sur la banniere (tablette / desktop), couleurs du theme, sans animation */
@media (min-width: 768px) {
  .ed-page--menu .menu-app .gift-ticket::after {
    content: "" !important;
    position: absolute !important;
    inset: 0 !important;
    z-index: 0 !important;
    pointer-events: none !important;
    opacity: .5 !important;
    background:
      radial-gradient(circle at 17% 14%, var(--gt-b) 0 2px, transparent 2.6px),
      radial-gradient(circle at 24% 86%, var(--gt-a) 0 1.6px, transparent 2.2px),
      radial-gradient(circle at 46% 10%, var(--gt-a) 0 1.4px, transparent 2px),
      radial-gradient(circle at 58% 88%, var(--gt-b) 0 1.8px, transparent 2.4px),
      radial-gradient(circle at 63% 18%, var(--gt-b) 0 1.5px, transparent 2.1px),
      radial-gradient(circle at 92% 14%, var(--gt-a) 0 1.8px, transparent 2.4px),
      radial-gradient(circle at 97% 82%, var(--gt-b) 0 1.6px, transparent 2.2px) !important;
  }
}
/* ── 9 ter. Variante premium « ecrin noir et or » (EXPERIMENTATION) ─────
   Identite propre a la roulette, identique quel que soit le theme du restaurant :
   fond charbon profond (halos chauds, trame tres fine), filet dore lumineux,
   roue reelle (canvas existant, non modifie) posee dans un ecrin a double
   anneau dore, capsules sombres bordees d'or, bouton dore a texte sombre.
   Aucun fond matriciel, aucune requete, aucune animation. */
.ed-page--menu .menu-app .gift-ticket,
.ed-page--menu .menu-app .gift-ticket:hover,
.ed-page--menu .menu-app .gift-ticket:focus-visible {
  --gtp-bg: #14110d;
  --gtp-gold: #e2ae4d;
  --gtp-gold-hi: #ffe19a;
  --gtp-line: rgba(226, 174, 77, .62);
  --gtp-ink: #fbf3e4;
  --gtp-muted: rgba(251, 243, 228, .78);
  /* surface reelle du bloc (sert aussi de reference aux controles de contraste) */
  --ed-accent-soft: var(--gtp-bg);
  background:
    radial-gradient(ellipse 34% 120% at 80% 60%, rgba(255, 176, 64, .2), transparent 70%),
    radial-gradient(ellipse 22% 110% at 8% 50%, rgba(255, 190, 90, .13), transparent 70%),
    radial-gradient(ellipse 60% 140% at 50% -30%, rgba(255, 255, 255, .05), transparent 60%),
    repeating-linear-gradient(135deg, rgba(255, 255, 255, .014) 0 1px, transparent 1px 4px),
    linear-gradient(100deg, #0f0d0a 0%, #1b1611 48%, #110e0b 100%),
    var(--gtp-bg) !important;
  color: var(--gtp-ink) !important;
  border: 1px solid var(--gtp-line) !important;
  box-shadow:
    0 0 0 1px rgba(0, 0, 0, .35),
    0 0 22px -8px rgba(240, 180, 80, .55),
    inset 0 0 0 1px rgba(255, 225, 160, .07),
    inset 0 1px 0 rgba(255, 230, 170, .1),
    0 16px 34px -20px rgba(0, 0, 0, .7) !important;
}
/* RTL : la roue passe a droite et les cadeaux a gauche, les halos suivent */
html[dir="rtl"] .ed-page--menu .menu-app .gift-ticket,
html[dir="rtl"] .ed-page--menu .menu-app .gift-ticket:hover,
html[dir="rtl"] .ed-page--menu .menu-app .gift-ticket:focus-visible {
  background:
    radial-gradient(ellipse 34% 120% at 20% 60%, rgba(255, 176, 64, .2), transparent 70%),
    radial-gradient(ellipse 22% 110% at 92% 50%, rgba(255, 190, 90, .13), transparent 70%),
    radial-gradient(ellipse 60% 140% at 50% -30%, rgba(255, 255, 255, .05), transparent 60%),
    repeating-linear-gradient(45deg, rgba(255, 255, 255, .014) 0 1px, transparent 1px 4px),
    linear-gradient(260deg, #0f0d0a 0%, #1b1611 48%, #110e0b 100%),
    var(--gtp-bg) !important;
}
/* Ecrin de la roue : anneau dore fin (plateau sombre etroit + filet dore principal + halo et ombre moderes) et
   filet interieur tres discret, tous deux DERRIERE le canvas (z-index -1 dans le contexte de la roue) : secteurs,
   pointeur, moyeu et libelles ne sont jamais recouverts. --gtp-ring = epaisseur visible de l'ecrin ;
   --gtp-space = place reservee autour de la roue (inchangee : ni la roue ni la banniere ne changent de taille). */
.ed-page--menu .menu-app .gift-ticket__wheel {
  --gtp-ring: 7px;
  --gtp-space: 13px;
  margin: var(--gtp-space) !important;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, .55) !important;
}
.ed-page--menu .menu-app .gift-ticket__wheel::before,
.ed-page--menu .menu-app .gift-ticket__wheel::after {
  content: "" !important;
  position: absolute !important;
  z-index: -1 !important;
  border-radius: 50% !important;
  pointer-events: none !important;
}
.ed-page--menu .menu-app .gift-ticket__wheel::before {
  inset: calc(var(--gtp-ring) * -1) !important;
  background: radial-gradient(circle at 50% 30%, #2a2218 0%, #0c0a07 70%) !important;
  border: 1.5px solid #e2ae4d !important;
  box-shadow:
    0 0 0 1px rgba(0, 0, 0, .5),
    0 0 10px -2px rgba(240, 180, 80, .35),
    0 8px 16px -6px rgba(0, 0, 0, .7),
    inset 0 1px 2px rgba(255, 230, 170, .16) !important;
}
.ed-page--menu .menu-app .gift-ticket__wheel::after {
  inset: -1px !important;
  border: 1px solid rgba(255, 222, 150, .4) !important;
}
/* Moyeu champagne metallique (16 % du diametre) et pointeur champagne a contour sombre : meme identite
   que la vraie roue et que l'apercu du pop-up */
.ed-page--menu .menu-app .gift-ticket__wheel-hub {
  inset: 42% !important;
  background: radial-gradient(circle at 35% 30%, #fff3cf 0%, #e3bd6a 42%, #8f6723 100%) !important;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, .7), 0 1px 3px rgba(0, 0, 0, .6) !important;
}
.ed-page--menu .menu-app .gift-ticket__wheel-pointer {
  right: -3px !important;
  border-top-width: 5px !important;
  border-bottom-width: 5px !important;
  border-right: 9px solid #f1d38a !important;
  filter: drop-shadow(0 0 .6px rgba(0, 0, 0, .95)) drop-shadow(0 1px 1.5px rgba(0, 0, 0, .6)) !important;
}
.ed-page--menu .menu-app .gift-ticket__title { color: var(--gtp-ink) !important; }
.ed-page--menu .menu-app .gift-ticket__subtitle,
.ed-page--menu .menu-app .gift-ticket__prizes--generic { color: var(--gtp-muted) !important; }
/* Capsules de recompenses : surface sombre, filet dore, pictogramme dore */
.ed-page--menu .menu-app .gift-ticket__prize,
.ed-page--menu .menu-app .gift-ticket__prize + .gift-ticket__prize {
  background: rgba(10, 8, 6, .55) !important;
  border: 1px solid var(--gtp-line) !important;
  border-radius: 8px !important;
  box-shadow: inset 0 1px 0 rgba(255, 230, 170, .08) !important;
  color: var(--gtp-ink) !important;
}
.ed-page--menu .menu-app .gift-ticket__prize::before { background: var(--gtp-gold) !important; }
/* Bouton dore, texte sombre (couleur de fond reelle declaree pour le contraste, degrade par-dessus) */
.ed-page--menu .menu-app .gift-ticket__cta {
  background-color: #e4ae4a !important;
  background-image: linear-gradient(180deg, #ffe29a 0%, #e9b553 48%, #c9892a 100%) !important;
  color: #1c1307 !important;
  font-weight: 750 !important;
  box-shadow: inset 0 1px 0 rgba(255, 245, 210, .7), 0 10px 22px -10px rgba(240, 170, 60, .75) !important;
}
.ed-page--menu .menu-app .gift-ticket__decor::before { content: none !important; }
/* Confettis et eclats dores statiques repartis sur le bloc (sans animation) */
.ed-page--menu .menu-app .gift-ticket::after {
  content: "" !important;
  position: absolute !important;
  inset: 0 !important;
  z-index: 0 !important;
  pointer-events: none !important;
  opacity: .85 !important;
  background:
    radial-gradient(circle at 14% 12%, #f2c46a 0 1.4px, transparent 2px),
    radial-gradient(circle at 21% 88%, #f2c46a 0 1.2px, transparent 1.8px),
    radial-gradient(circle at 38% 8%, rgba(255, 243, 207, .8) 0 1px, transparent 1.6px),
    radial-gradient(circle at 47% 92%, #f2c46a 0 1.3px, transparent 1.9px),
    radial-gradient(circle at 56% 14%, #f2c46a 0 1.6px, transparent 2.2px),
    radial-gradient(circle at 62% 80%, rgba(255, 243, 207, .7) 0 1px, transparent 1.6px),
    radial-gradient(circle at 70% 10%, #e0444a 0 1.3px, transparent 1.9px),
    radial-gradient(circle at 90% 12%, #f2c46a 0 1.6px, transparent 2.2px),
    radial-gradient(circle at 96% 86%, #f2c46a 0 1.3px, transparent 1.9px) !important;
}
@media (max-width: 767px) {
  .ed-page--menu .menu-app .gift-ticket__wheel {
    --gtp-ring: 5px;
    --gtp-space: 9px;
    width: clamp(88px, 23vw, 96px) !important;
    height: clamp(88px, 23vw, 96px) !important;
  }
  .ed-page--menu .menu-app .gift-ticket,
  .ed-page--menu .menu-app .gift-ticket:hover,
  .ed-page--menu .menu-app .gift-ticket:focus-visible { gap: 4px 10px !important; padding: 12px 14px 14px !important; }
  .ed-page--menu .menu-app .gift-ticket::after { opacity: .55 !important; }
  /* Cadeaux : image decorative de fond, derriere le bouton et un peu sous lui, ancree vers le bord exterieur
     (a gauche en RTL, jamais retournee). L'element absolu prend la zone de grille du bouton comme reference :
     grille, largeur du texte, lignes et hauteur de la banniere inchangees. L'image est agrandie et recadree :
     le groupe dense du WebP (x 145-466 / y 47-275 sur 480x300) remplit la boite, seuls les confettis sont coupes.
     Elle peut passer derriere une partie du contenu : roue, textes et capsules (z-index 2) et bouton (z-index 3)
     restent devant ; fondu progressif du cote du texte (cadeaux lumineux autour du bouton, assombris vers le
     contenu). --gt-gift-img = largeur de l'image ; groupe visible = .669 x .475 de cette largeur ;
     --gt-gift-drop = decalage du centre du groupe sous le centre du bouton. */
  .ed-page--menu .menu-app .gift-ticket { --gt-gift-img: 164px; --gt-gift-drop: 10px; --gt-gift-end: -12px; }
  .ed-page--menu .menu-app .gift-ticket__decor {
    grid-area: cta !important;
    position: absolute !important;
    top: auto !important;
    inset-inline-end: var(--gt-gift-end) !important;
    width: calc(var(--gt-gift-img) * .669) !important;
    height: calc(var(--gt-gift-img) * .475) !important;
    /* centre du bouton = 28px au-dessus du bas de sa zone (48px + marge basse 4px) */
    bottom: calc(28px - var(--gt-gift-drop) - var(--gt-gift-img) * .2375) !important;
    z-index: 0 !important;
    overflow: hidden !important;
    opacity: 1 !important;
    -webkit-mask-image: linear-gradient(to right, rgba(0, 0, 0, .18) 0, rgba(0, 0, 0, .55) 22%, #000 50%) !important;
    mask-image: linear-gradient(to right, rgba(0, 0, 0, .18) 0, rgba(0, 0, 0, .55) 22%, #000 50%) !important;
  }
  html[dir="rtl"] .ed-page--menu .menu-app .gift-ticket__decor {
    -webkit-mask-image: linear-gradient(to left, rgba(0, 0, 0, .18) 0, rgba(0, 0, 0, .55) 22%, #000 50%) !important;
    mask-image: linear-gradient(to left, rgba(0, 0, 0, .18) 0, rgba(0, 0, 0, .55) 22%, #000 50%) !important;
  }
  .ed-page--menu .menu-app .gift-ticket__gifts,
  html[dir="rtl"] .ed-page--menu .menu-app .gift-ticket__gifts {
    position: absolute !important;
    inset: auto !important;
    width: var(--gt-gift-img) !important;
    height: calc(var(--gt-gift-img) * .625) !important;
    max-width: none !important;
    aspect-ratio: auto !important;
    object-fit: contain !important;
    object-position: center !important;
    bottom: calc(var(--gt-gift-img) * .625 * -.083) !important;
  }
  /* LTR : bord droit du groupe (x 466/480) au bord de la boite ; RTL : bord gauche du groupe (x 145/480) au bord */
  .ed-page--menu .menu-app .gift-ticket__gifts { right: calc(var(--gt-gift-img) * -.029) !important; left: auto !important; }
  html[dir="rtl"] .ed-page--menu .menu-app .gift-ticket__gifts { left: calc(var(--gt-gift-img) * -.302) !important; right: auto !important; }
  .ed-page--menu .menu-app .gift-ticket__wheel,
  .ed-page--menu .menu-app .gift-ticket__body,
  .ed-page--menu .menu-app .gift-ticket__prizes { position: relative !important; z-index: 2 !important; }
  .ed-page--menu .menu-app .gift-ticket__cta { z-index: 3 !important; }
}
/* 320-379px : le decor passe derriere des capsules ; leur fond (meme teinte) devient presque opaque pour que les
   cadeaux ne se voient pas a travers - bordure, texte et dimensions inchanges. */
@media (max-width: 379px) {
  .ed-page--menu .menu-app .gift-ticket__prize,
  .ed-page--menu .menu-app .gift-ticket__prize + .gift-ticket__prize { background: rgba(10, 8, 6, .94) !important; }
}
@media (max-width: 339px) { .ed-page--menu .menu-app .gift-ticket { --gt-gift-img: 117px; --gt-gift-drop: 24px; --gt-gift-end: -10px; } }
@media (min-width: 340px) and (max-width: 379px) { .ed-page--menu .menu-app .gift-ticket { --gt-gift-img: 142px; --gt-gift-drop: 16px; } }
@media (min-width: 410px) and (max-width: 599px) { .ed-page--menu .menu-app .gift-ticket { --gt-gift-img: 185px; } }
@media (min-width: 600px) and (max-width: 767px) { .ed-page--menu .menu-app .gift-ticket { --gt-gift-img: 263px; --gt-gift-drop: 4px; --gt-gift-end: -14px; } }
@media (min-width: 768px) {
  .ed-page--menu .menu-app .gift-ticket,
  .ed-page--menu .menu-app .gift-ticket:hover,
  .ed-page--menu .menu-app .gift-ticket:focus-visible { min-height: 0 !important; padding: 14px 24px 14px 18px !important; padding-inline: 18px 24px !important; }
  .ed-page--menu .menu-app .gift-ticket__wheel { --gtp-ring: 7px; --gtp-space: 15px; }
  /* 1.5px serait arrondi a 1px sur les ecrans 1x (courants sur ordinateur) : filet principal net a 2px */
  .ed-page--menu .menu-app .gift-ticket__wheel::before { border-width: 2px !important; }
}
/* >= 1100px : l'illustration ne participe pas a la hauteur du bloc (position absolue dans sa cellule) et deborde
   legerement en hauteur dans le padding ; la banniere (overflow hidden) la contient, rien n'est recadre. */
@media (min-width: 1100px) {
  .ed-page--menu .menu-app .gift-ticket__gifts {
    position: absolute !important;
    inset: -10px 0 -12px !important;
    width: 100% !important;
    height: calc(100% + 22px) !important;
  }
}
@media (min-width: 768px) and (max-width: 1099px) {
  .ed-page--menu .menu-app .gift-ticket__wheel { --gtp-ring: 6px; --gtp-space: 11px; width: 104px !important; height: 104px !important; }
  .ed-page--menu .menu-app .gift-ticket,
  .ed-page--menu .menu-app .gift-ticket:hover,
  .ed-page--menu .menu-app .gift-ticket:focus-visible { gap: 0 20px !important; }
  .ed-page--menu .menu-app .gift-ticket__decor { width: min(100%, 220px) !important; height: 96px !important; margin-top: 6px !important; }
}
@media (forced-colors: active) {
  .ed-page--menu .menu-app .gift-ticket__wheel::before,
  .ed-page--menu .menu-app .gift-ticket__wheel::after,
  .ed-page--menu .menu-app .gift-ticket::after { display: none !important; }
}
@media print {
  .ed-page--menu .menu-app .gift-ticket::after, .ed-page--menu .menu-app .gift-ticket__decor { display: none !important; }
  .ed-page--menu .menu-app .gift-ticket__wheel::before, .ed-page--menu .menu-app .gift-ticket__wheel::after { display: none !important; }
}

/* ── 10. Selection Best-Sellers (categorie .ed-selection) ────────────────
   Le premier plat (ordre choisi par le restaurant) est la piece principale ;
   les suivants sont des cartes secondaires. Les classes --1/--2/--3/--many,
   --rest0/1/2 et --even/--odd sont calculees serveur a partir du NOMBRE de
   plats (_editorial_featured.php) : rangees toujours pleines, aucun trou.
   - Telephone (< 768px) : section 15 (composition editoriale, commune a toutes les categories).
   - Tablette (768-1023px) : 2 colonnes ; la piece principale et, si le compte
     le laisse seul, le dernier plat occupent toute la ligne en format
     horizontal (jamais une image demesuree).
   - Desktop (>= 1024px) : 6 pistes ; principale sur 4/6, secondaires sur 2/6,
     les secondaires sur une demi-ligne passent en format horizontal compact.
   Format horizontal = image au debut de ligne (a droite en RTL) sur toute la hauteur ; titre,
   description, avis, prix et action regroupes et centres verticalement (rangees 1fr auto auto 1fr) :
   aucune grande zone vide entre les avis et l'action.
   Filtre actif (recherche / Populaires) : des cartes sont masquees (hidden) ; la
   composition, calculee sur le nombre TOTAL de plats, est alors suspendue
   (:not(:has(> .dish-card[hidden]))) et la categorie reprend la grille
   reguliere, sans trou. Sans :has() (navigateurs anciens), meme repli.
*/
@media (min-width: 768px) {
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-name {
    font-size: clamp(1.2rem, 1rem + .8vw, 1.55rem) !important;
    font-weight: 700 !important;
    line-height: 1.2 !important;
    letter-spacing: -.02em !important;
  }
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-desc {
    -webkit-line-clamp: 3 !important;
    font-size: .94rem !important;
  }
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .price-pill { font-size: 1.2rem !important; }
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-main { padding: 22px 24px 4px !important; }
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-side { padding: 12px 24px 22px !important; }
}
@media (min-width: 768px) and (max-width: 1023px) {
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type,
  .ed-page [data-category-section].ed-selection--even:not(:has(> .dish-card[hidden])) > .dish-card:last-of-type:not(:first-of-type) {
    grid-column: 1 / -1 !important;
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) !important;
    grid-template-rows: 1fr auto auto 1fr !important;
    min-height: 180px !important;
  }
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .media,
  .ed-page [data-category-section].ed-selection--even:not(:has(> .dish-card[hidden])) > .dish-card:last-of-type:not(:first-of-type) .media {
    grid-column: 1 !important; grid-row: 1 / -1 !important; height: 100% !important; min-height: 0 !important; aspect-ratio: auto !important;
  }
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-main,
  .ed-page [data-category-section].ed-selection--even:not(:has(> .dish-card[hidden])) > .dish-card:last-of-type:not(:first-of-type) .dish-main {
    grid-column: 2 !important; grid-row: 2 !important; justify-content: flex-start !important;
  }
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-side,
  .ed-page [data-category-section].ed-selection--even:not(:has(> .dish-card[hidden])) > .dish-card:last-of-type:not(:first-of-type) .dish-side {
    grid-column: 2 !important; grid-row: 3 !important; margin-top: 0 !important;
  }
}
@media (min-width: 1024px) {
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) { grid-template-columns: repeat(6, minmax(0, 1fr)) !important; }
  .ed-page [data-category-section].ed-selection:not(:has(> .dish-card[hidden])) > .dish-card { grid-column: span 2 !important; }
  /* 1 plat : pleine largeur ; 2 plats et 4+ : principale 4/6 + secondaire 2/6 sur la 1re rangee */
  .ed-page [data-category-section].ed-selection--1:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type { grid-column: 1 / -1 !important; }
  .ed-page [data-category-section].ed-selection--2:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type,
  .ed-page [data-category-section].ed-selection--many:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type { grid-column: span 4 !important; }
  /* 3 plats : principale verticale 4/6 sur deux rangees (grande photo), deux secondaires empilees */
  .ed-page [data-category-section].ed-selection--3:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type { grid-column: span 4 !important; grid-row: span 2 !important; }
  .ed-page [data-category-section].ed-selection--3:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .media { flex: 1 1 auto !important; aspect-ratio: auto !important; min-height: 320px !important; }
  /* texte, avis, prix et action groupes sous l'image : c'est l'image (et non un vide) qui occupe la hauteur */
  .ed-page [data-category-section].ed-selection--3:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-main { flex: 0 0 auto !important; }
  .ed-page [data-category-section].ed-selection--3:not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-side { margin-top: 0 !important; }
  /* 4+ plats : apres la 1re rangee, rangees de 3 ; reste 2 = deux demi-lignes, reste 1 = deux rangees de deux */
  .ed-page [data-category-section].ed-selection--rest2:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+2):not(:first-of-type),
  .ed-page [data-category-section].ed-selection--rest1:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+4):not(:first-of-type) { grid-column: span 3 !important; }

  /* Format horizontal : principale (1, 2, 4+ plats) et secondaires sur une demi-ligne */
  .ed-page [data-category-section].ed-selection:not(.ed-selection--3):not(:has(> .dish-card[hidden])) > .dish-card:first-of-type,
  .ed-page [data-category-section].ed-selection--rest2:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+2):not(:first-of-type),
  .ed-page [data-category-section].ed-selection--rest1:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+4):not(:first-of-type) {
    display: grid !important;
    grid-template-columns: minmax(0, 1.1fr) minmax(0, 1fr) !important;
    grid-template-rows: 1fr auto auto 1fr !important;
    min-height: 180px !important;
  }
  .ed-page [data-category-section].ed-selection:not(.ed-selection--3):not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .media,
  .ed-page [data-category-section].ed-selection--rest2:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+2):not(:first-of-type) .media,
  .ed-page [data-category-section].ed-selection--rest1:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+4):not(:first-of-type) .media {
    grid-column: 1 !important; grid-row: 1 / -1 !important; height: 100% !important; min-height: 0 !important; aspect-ratio: auto !important;
  }
  .ed-page [data-category-section].ed-selection:not(.ed-selection--3):not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-main,
  .ed-page [data-category-section].ed-selection--rest2:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+2):not(:first-of-type) .dish-main,
  .ed-page [data-category-section].ed-selection--rest1:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+4):not(:first-of-type) .dish-main {
    grid-column: 2 !important; grid-row: 2 !important; justify-content: flex-start !important;
  }
  .ed-page [data-category-section].ed-selection:not(.ed-selection--3):not(:has(> .dish-card[hidden])) > .dish-card:first-of-type .dish-side,
  .ed-page [data-category-section].ed-selection--rest2:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+2):not(:first-of-type) .dish-side,
  .ed-page [data-category-section].ed-selection--rest1:not(:has(> .dish-card[hidden])) > .dish-card:nth-last-of-type(-n+4):not(:first-of-type) .dish-side {
    grid-column: 2 !important; grid-row: 3 !important; margin-top: 0 !important;
  }
}

/* ── 11. Navigation mobile (fonctionnement inchange) ─────────────────────
   Surface du theme, filet superieur au lieu d'une ombre portee, etat actif
   lisible sans la couleur seule (graisse), zones tactiles >= 48px. */
.ed-page--menu .mobile-bottom-nav {
  background: var(--ed-inner) !important;
  background-image: none !important;
  border-top: 1px solid var(--ed-hairline) !important;
  box-shadow: none !important;
  backdrop-filter: none !important;
  -webkit-backdrop-filter: none !important;
}
.ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__item {
  min-height: 48px !important;
  color: var(--ed-muted) !important;
  background: transparent !important;
  box-shadow: none !important;
  transform: none !important;
  font-family: var(--ed-font) !important;
}
.ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__label {
  font-size: .7rem !important;
  font-weight: 600 !important;
  letter-spacing: 0 !important;
  color: inherit !important;
}
.ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__icon,
.ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__icon svg { color: inherit !important; fill: currentColor !important; }
.ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__item.is-active { color: var(--ed-accent-ink) !important; }
.ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__item.is-active .mobile-bottom-nav__label { font-weight: 750 !important; }
.ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__item--accent { color: var(--ed-ink) !important; }
.ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__item:focus-visible {
  outline: 2px solid var(--ed-accent-ink) !important;
  outline-offset: -2px !important;
}

/* ── 13. .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden]))rille generale des plats (toutes categories hors selection) ───────
   Classes calculees serveur a partir du NOMBRE de plats (_editorial_featured.php) :
   ed-grid--n1/n2/n3/n4, ed-grid--m4-*, --m3-*, --m2-* (reste de la division).
   - Telephone (< 768px) : composition editoriale de la section 15 (meme algorithme
     que la selection Best-Sellers).
   - Tablette (768-1023px) : 2 colonnes ; nombre impair -> le dernier plat occupe
     la ligne, en format horizontal.
   - 1024-1199px : 3 par rangee (12 pistes) ; reste 1 -> les 4 derniers en 2 x 2,
     reste 2 -> les 2 derniers en demi-ligne ; 1 plat -> pleine largeur.
   - >= 1200px : 4 par rangee ; 1 -> pleine largeur, 2 -> 2 demi-lignes,
     3 -> 3 tiers, reste 1 -> les 5 derniers en 3 + 2, reste 2 -> 2 demi-lignes,
     reste 3 -> 3 tiers. Jamais une carte seule dans une rangee vide.
   Cartes en demi-ligne ou pleine largeur : format horizontal (image au debut de
   ligne, texte groupe) pour ne pas creer d'images demesurees.
   Filtre actif (cartes masquees) : grille reguliere (regles suspendues). */
@media (min-width: 768px) and (max-width: 1023px) {
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m2-1 > .dish-card:last-of-type { grid-column: 1 / -1 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m2-1 > .dish-card:last-of-type {
      display: grid !important;
      grid-template-columns: minmax(0, 2fr) minmax(0, 3fr) !important;
      grid-template-rows: 1fr auto auto 1fr !important;
    min-height: 180px !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m2-1 > .dish-card:last-of-type .media {
      grid-column: 1 !important; grid-row: 1 / -1 !important; height: 100% !important; min-height: 0 !important; aspect-ratio: auto !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m2-1 > .dish-card:last-of-type .dish-main {
      grid-column: 2 !important; grid-row: 2 !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m2-1 > .dish-card:last-of-type .dish-side {
      grid-column: 2 !important; grid-row: 3 !important; margin-top: 0 !important;
    }
}
@media (min-width: 1024px) and (max-width: 1199px) {
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])) { grid-template-columns: repeat(12, minmax(0, 1fr)) !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])) > .dish-card { grid-column: span 4 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card { grid-column: 1 / -1 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-2 > .dish-card:nth-last-of-type(-n+2),
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+4) { grid-column: span 6 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-2 > .dish-card:nth-last-of-type(-n+2),
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+4) {
      display: grid !important;
      grid-template-columns: minmax(0, 2fr) minmax(0, 3fr) !important;
      grid-template-rows: 1fr auto auto 1fr !important;
    min-height: 180px !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card .media,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-2 > .dish-card:nth-last-of-type(-n+2) .media,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+4) .media {
      grid-column: 1 !important; grid-row: 1 / -1 !important; height: 100% !important; min-height: 0 !important; aspect-ratio: auto !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card .dish-main,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-2 > .dish-card:nth-last-of-type(-n+2) .dish-main,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+4) .dish-main {
      grid-column: 2 !important; grid-row: 2 !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card .dish-side,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-2 > .dish-card:nth-last-of-type(-n+2) .dish-side,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m3-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+4) .dish-side {
      grid-column: 2 !important; grid-row: 3 !important; margin-top: 0 !important;
    }
}
@media (min-width: 1200px) {
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])) { grid-template-columns: repeat(12, minmax(0, 1fr)) !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])) > .dish-card { grid-column: span 3 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card { grid-column: 1 / -1 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n2 > .dish-card { grid-column: span 6 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n3 > .dish-card { grid-column: span 4 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+5) { grid-column: span 4 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+2),
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-2:not(.ed-grid--n2) > .dish-card:nth-last-of-type(-n+2) { grid-column: span 6 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-3:not(.ed-grid--n3) > .dish-card:nth-last-of-type(-n+3) { grid-column: span 4 !important; }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n2 > .dish-card,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+2),
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-2:not(.ed-grid--n2) > .dish-card:nth-last-of-type(-n+2) {
      display: grid !important;
      grid-template-columns: minmax(0, 2fr) minmax(0, 3fr) !important;
      grid-template-rows: 1fr auto auto 1fr !important;
    min-height: 180px !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card .media,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n2 > .dish-card .media,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+2) .media,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-2:not(.ed-grid--n2) > .dish-card:nth-last-of-type(-n+2) .media {
      grid-column: 1 !important; grid-row: 1 / -1 !important; height: 100% !important; min-height: 0 !important; aspect-ratio: auto !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card .dish-main,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n2 > .dish-card .dish-main,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+2) .dish-main,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-2:not(.ed-grid--n2) > .dish-card:nth-last-of-type(-n+2) .dish-main {
      grid-column: 2 !important; grid-row: 2 !important;
    }
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card .dish-side,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n2 > .dish-card .dish-side,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-1:not(.ed-grid--n1) > .dish-card:nth-last-of-type(-n+2) .dish-side,
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--m4-2:not(.ed-grid--n2) > .dish-card:nth-last-of-type(-n+2) .dish-side {
      grid-column: 2 !important; grid-row: 3 !important; margin-top: 0 !important;
    }
}

/* Un seul plat dans la categorie : carte pleine largeur, image sur un tiers (pas de photo demesuree) */
@media (min-width: 1024px) {
  .ed-page [data-category-section].ed-grid:not(.ed-selection):not(:has(> .dish-card[hidden])).ed-grid--n1 > .dish-card { grid-template-columns: minmax(0, 1fr) minmax(0, 2fr) !important; }
}

/* ── 14. Menu mobile Premium « A+r » (telephone uniquement, < 768px) ──────
   Finition visuelle du menu public sur telephone. Fond, recherche, categories et
   navigation : /menu uniquement (.ed-page--menu). Titres de section et cartes plat :
   /menu ET /commande (.ed-page), comme les sections 3 et 4 (contrat de parite des
   cartes entre les deux pages). Aucune geometrie modifiee : header, grille verticale des
   categories, notes, RTL, banniere roulette et tablette / ordinateur inchanges.
   Tout derive du theme (--ed-ink, --ed-accent, --ed-accent-ink, --ed-inner) :
   aucune couleur de marque en dur, aucune ressource externe.
   Halo d'accent en amelioration progressive :
   - par defaut (navigateur ancien) : aucun halo, seul le quadrillage reste ;
   - navigateur compatible (syntaxe relative de couleur) : intensite proportionnelle
     a la saturation de l'accent, plafonnee a 12,5 % ; un accent blanc ou gris
     (ex. theme noir a accent blanc) ne produit donc aucun voile gris.
   Le halo n'est jamais sous une zone de lecture : dans la zone recherche il passe
   derriere les blocs opaques et s'efface avant les noms de categories ; dans la
   liste des plats il reste dans les gouttieres laterales (s'annule avant 22px),
   la ou ne commence aucun titre ni aucune carte. */
@media (max-width: 767px) {
  .ed-page {
    --mp-grid: color-mix(in srgb, var(--ed-ink) 5%, transparent);
    --mp-halo: transparent;
    --mp-line: color-mix(in srgb, var(--ed-ink) 12%, transparent);
    --mp-surface: color-mix(in srgb, var(--ed-ink) 5.5%, var(--ed-inner));
    --mp-shadow: 0 1px 2px rgba(0, 0, 0, .14), 0 12px 26px -16px rgba(0, 0, 0, .6);
    --mp-price: color-mix(in srgb, var(--ed-accent-ink) 70%, var(--ed-ink));
  }
  /* Fond : quadrillage discret (+ halo) derriere la recherche et la liste des plats
     uniquement, jamais derriere la banniere roulette. */
  .ed-page--menu #menu-explorer,
  .ed-page--menu .surface-menu-list { position: relative !important; isolation: isolate !important; }
  .ed-page--menu #menu-explorer::before,
  .ed-page--menu .surface-menu-list::before {
    content: "" !important;
    position: absolute !important;
    inset: -4px -10px -10px !important;
    z-index: -1 !important;
    pointer-events: none !important;
    background-repeat: no-repeat, no-repeat, repeat, repeat !important;
    background-position: 0 0, 0 0, -1px -1px, -1px -1px !important;
    background-size: 100% 100%, 100% 100%, 28px 28px, 28px 28px !important;
  }
  .ed-page--menu #menu-explorer::before {
    background-image:
      radial-gradient(ellipse 70% 360px at 0% 40px, var(--mp-halo), transparent 72%),
      linear-gradient(transparent, transparent),
      linear-gradient(var(--mp-grid) 1px, transparent 1px),
      linear-gradient(90deg, var(--mp-grid) 1px, transparent 1px) !important;
    -webkit-mask-image: linear-gradient(to bottom, transparent 0, #000 36px, #000 110px, transparent 170px) !important;
    mask-image: linear-gradient(to bottom, transparent 0, #000 36px, #000 110px, transparent 170px) !important;
  }
  html[dir="rtl"] .ed-page--menu #menu-explorer::before {
    background-image:
      radial-gradient(ellipse 70% 360px at 100% 40px, var(--mp-halo), transparent 72%),
      linear-gradient(transparent, transparent),
      linear-gradient(var(--mp-grid) 1px, transparent 1px),
      linear-gradient(90deg, var(--mp-grid) 1px, transparent 1px) !important;
  }
  .ed-page--menu .surface-menu-list::before {
    background-image:
      radial-gradient(ellipse 30px 420px at 0 520px, var(--mp-halo), transparent 72%),
      radial-gradient(ellipse 30px 460px at 100% 1180px, var(--mp-halo), transparent 72%),
      linear-gradient(var(--mp-grid) 1px, transparent 1px),
      linear-gradient(90deg, var(--mp-grid) 1px, transparent 1px) !important;
  }
  /* Header : meme geometrie ; filet et ombre tres courte (ne deborde pas sur la banniere) */
  .ed-page--menu .menu-app .restaurant-sheet-hero .restaurant-sheet {
    box-shadow: 0 0 0 1px var(--mp-line), 0 3px 8px -7px rgba(0, 0, 0, .45) !important;
  }
  .ed-page--menu #menu-explorer .mexplorer-search-wrap,
  .ed-page--menu #menu-explorer .mexplorer-popular {
    background: var(--mp-surface) !important;
    border-color: var(--mp-line) !important;
    border-radius: 12px !important;
    box-shadow: var(--mp-shadow) !important;
  }
  /* Categories (dont Best-Sellers) : meme rayon et meme etat tactile. Categorie active : contour
     d'accent colle a l'image et focus clavier inchanges (section 7). */
  .ed-page--menu #menu-explorer .mexplorer-cat-img-wrap {
    border-radius: 16px !important;
    transition: transform .12s ease-out !important;
  }
  .ed-page--menu #menu-explorer .mexplorer-cat:active .mexplorer-cat-img-wrap { transform: scale(.985) !important; }
  .ed-page--menu #menu-explorer .mexplorer-cat-name { font-weight: 700 !important; }
  /* Titres de section : barre d'accent + point (proprietes logiques : suit le sens du titre),
     filet degrade ; graisse inchangee (650, sous le nom du restaurant) ; 13px compensent le filet d'origine (1px) : hauteur de page identique */
  .ed-page [data-category-section] > .category-head {
    position: relative !important;
    border-bottom: 0 !important;
    padding-bottom: 13px !important;
  }
  .ed-page [data-category-section] > .category-head::before {
    content: "" !important;
    position: absolute !important;
    inset-inline-start: 0 !important;
    bottom: -1px !important;
    box-sizing: content-box !important;
    width: 34px !important;
    height: 3px !important;
    padding-inline-end: 4px !important;
    border-inline-end: 4px solid var(--ed-accent-ink) !important;
    border-radius: 3px !important;
    background: var(--ed-accent-ink) content-box !important;
  }
  .ed-page [data-category-section] > .category-head::after {
    content: "" !important;
    position: absolute !important;
    inset-inline: 0 !important;
    bottom: 0 !important;
    height: 1px !important;
    background: linear-gradient(90deg, var(--mp-line), transparent) !important;
  }
  /* Cartes produits : separation nette avec le fond, prix plus contraste, etat tactile discret.
     Memes etats que la section 4 : l'ombre ne change ni au survol, ni au focus, ni apres un appui. */
  .ed-page [data-category-section] .dish-card,
  .ed-page [data-category-section] .dish-card:hover,
  .ed-page [data-category-section] .dish-card:active,
  .ed-page [data-category-section] .dish-card:focus,
  .ed-page [data-category-section] .dish-card:focus-within {
    border-radius: 16px !important;
    box-shadow: 0 0 0 1px var(--mp-line), var(--mp-shadow) !important;
    transition: transform .12s ease-out !important;
  }
  .ed-page [data-category-section] .dish-card .media { border-bottom: 1px solid var(--mp-line) !important; }
  .ed-page [data-category-section] .dish-card .dish-name { font-weight: 700 !important; }
  .ed-page [data-category-section] .dish-card .price-pill,
  .ed-page [data-category-section] .dish-card .dual-price-amount {
    color: var(--mp-price) !important;
    font-weight: 800 !important;
    letter-spacing: -.01em !important;
  }
  .ed-page [data-category-section] .dish-card:active { transform: scale(.985) !important; }
  /* Navigation basse : fond a peine translucide, ombre douce, indicateur d'onglet actif. Pas de
     backdrop-filter : il recompose la page en calques et modifie le rendu du texte de la banniere roulette. */
  .ed-page--menu .mobile-bottom-nav {
    background: color-mix(in srgb, var(--ed-inner) 95%, transparent) !important;
    box-shadow: 0 -12px 26px -20px rgba(0, 0, 0, .55) !important;
  }
  .ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__item { position: relative !important; }
  .ed-page--menu .mobile-bottom-nav .mobile-bottom-nav__item.is-active::before {
    content: "" !important;
    position: absolute !important;
    top: 0 !important;
    left: 50% !important;
    width: 22px !important;
    height: 3px !important;
    margin-left: -11px !important;
    border-radius: 0 0 3px 3px !important;
    background: var(--ed-accent-ink) !important;
  }
}
/* Halo d'accent : seulement si la syntaxe relative de couleur est comprise (sinon : aucun halo) */
@supports (color: oklch(from red l c h / .5)) {
  @media (max-width: 767px) {
    .ed-page--menu { --mp-halo: oklch(from var(--ed-accent) l c h / min(calc(c * .8), .125)); }
  }
}
@media (max-width: 767px) and (prefers-reduced-motion: reduce) {
  .ed-page [data-category-section] .dish-card,
  .ed-page--menu #menu-explorer .mexplorer-cat-img-wrap { transition: none !important; }
  .ed-page [data-category-section] .dish-card:active,
  .ed-page--menu #menu-explorer .mexplorer-cat:active .mexplorer-cat-img-wrap { transform: none !important; }
}

/* Telephone (<= 430px) : fond uni, sans le quadrillage decoratif de la section 14 (lignes transparentes) ; la couleur de fond
   du theme et le halo d'accent sont conserves, cartes et ombres inchangees. */
@media (max-width: 430px) {
  .ed-page { --mp-grid: transparent; }
}

/* ── 15. Telephone (< 768px) : categories en image plein cadre, composition editoriale de toutes les categories ──
   Rien ne change a partir de 768px (tablette et ordinateur gardent les sections 7 et 10).
   Categories : toutes les cartes ont la meme geometrie (carre), image plein cadre, titre (2 lignes max)
   et nombre de choix poses en bas sur un voile sombre progressif : texte blanc lisible sur photo claire
   comme sombre, quel que soit le theme. Best-Sellers se distingue par un contour (plus par sa structure),
   la categorie active par un contour du theme plus epais ; le focus clavier (section 7) reste visible.
   Sur ordinateur, 6 a 8 colonnes etroites couperaient les noms longs : presentation reservee au telephone.
   Plats (320-767px), selection Best-Sellers ET toutes les autres categories : 2 colonnes, motif
   « grande carte / deux demi-cartes » calcule avec les classes
   serveur (_editorial_featured.php) : grande carte aux positions 1, 4, 7... ; 2 plats = deux grandes ; nombre
   de plats = 5, 8, 11... (--rest0) : l'avant-derniere passe en demi-carte pour ne jamais laisser une demi-carte
   seule. Meme algorithme pour TOUTES les categories (classes serveur communes ed-grid--n* / --m3-*,
   _editorial_featured.php) : le motif recommence au debut de chaque categorie ; --rest0 == ed-grid--n4.ed-grid--m3-2,
   --2 == ed-grid--n2. Filtre actif (recherche, Populaires) ou navigateur sans :has() : liste reguliere. */
@media (max-width: 767px) {
  .ed-page #menu-explorer .mexplorer-cat {
    position: relative !important;
    display: block !important;
    width: auto !important;
    height: auto !important;      /* une hauteur fixe + aspect-ratio forcerait une largeur hors colonne */
    min-height: 0 !important;
    aspect-ratio: 1 / 1 !important;
    overflow: visible !important; /* l'image est decoupee par son cadre : l'anneau de focus reste visible */
    border-radius: 16px !important;
  }
  .ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-img-wrap {
    position: absolute !important;
    inset: 0 !important;
    width: 100% !important;
    height: 100% !important;
    aspect-ratio: auto !important;
    flex: none !important;
  }
  /* rayon explicite : une regle existante le remet a 0 sur la categorie active */
  .ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-img-wrap,
  .ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-img-wrap::after,
  .ed-page #menu-explorer .mexplorer-cat.active .mexplorer-cat-img-wrap,
  .ed-page #menu-explorer .mexplorer-cat.active .mexplorer-cat-img-wrap::after,
  .ed-page #menu-explorer .mexplorer-cat.is-active .mexplorer-cat-img-wrap,
  .ed-page #menu-explorer .mexplorer-cat.is-active .mexplorer-cat-img-wrap::after { border-radius: 16px !important; }
  .ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-img-wrap::after {
    content: "" !important;
    position: absolute !important;
    inset: 0 !important;
    width: auto !important;
    height: auto !important;
    z-index: 1 !important;
    /* voile renforce sur toute la hauteur du texte (jusqu'a ~42 %) : contraste garanti meme sur photo tres claire */
    background: linear-gradient(to top, rgba(0, 0, 0, .9) 0%, rgba(0, 0, 0, .8) 26%, rgba(0, 0, 0, .66) 42%, rgba(0, 0, 0, .3) 62%, rgba(0, 0, 0, 0) 80%) !important;
    pointer-events: none !important;
  }
  .ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-label {
    position: absolute !important;
    inset-inline: 12px !important;
    bottom: 10px !important;
    top: auto !important;
    z-index: 2 !important;
    padding: 0 !important;
    margin: 0 !important;
    text-align: start !important;
  }
  .ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-name {
    display: -webkit-box !important;
    -webkit-box-orient: vertical !important;
    -webkit-line-clamp: 2 !important;
    overflow: hidden !important;
    font-size: 1.02rem !important;
    line-height: 1.18 !important;
    font-weight: 700 !important;
    color: #FFFFFF !important;
    text-shadow: 0 1px 2px rgba(0, 0, 0, .35) !important;
  }
  .ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-count {
    display: block !important;
    margin-top: 2px !important;
    font-size: .875rem !important;
    color: rgba(255, 255, 255, .9) !important;
    text-shadow: 0 1px 2px rgba(0, 0, 0, .35) !important;
  }
  /* Sans image : surface sombre derivee de l'accent (texte blanc toujours lisible), assiette en degrades */
  .ed-page #menu-explorer .mexplorer-cat.no-img .mexplorer-cat-img-wrap {
    background:
      radial-gradient(circle at 70% 26%, color-mix(in srgb, var(--ed-accent) 38%, transparent), transparent 58%),
      linear-gradient(155deg, color-mix(in srgb, var(--ed-accent) 34%, #17171a), #101012) !important;
  }
  .ed-page #menu-explorer .mexplorer-cat.no-img .mexplorer-cat-img-wrap::before {
    content: "" !important;
    position: absolute !important;
    z-index: 0 !important;
    inset: 0 !important;
    top: -26% !important;
    margin: auto !important;
    width: 44px !important;
    height: 44px !important;
    border-radius: 50% !important;
    background: radial-gradient(circle, transparent 0 34%, rgba(255, 255, 255, .42) 35% 41%, transparent 42% 60%, rgba(255, 255, 255, .42) 61% 68%, transparent 69%) !important;
  }
  /* Contours dessines sur le voile (au-dessus de la photo) : Best-Sellers 2px, categorie active 3px */
  .ed-page #menu-explorer .mexplorer-cat--featured .mexplorer-cat-img-wrap::after { box-shadow: inset 0 0 0 2px color-mix(in srgb, var(--ed-accent-ink) 80%, transparent) !important; }
  .ed-page #menu-explorer .mexplorer-cat.active .mexplorer-cat-img-wrap::after,
  .ed-page #menu-explorer .mexplorer-cat.is-active .mexplorer-cat-img-wrap::after { box-shadow: inset 0 0 0 3px var(--ed-accent-ink) !important; }
  .ed-page #menu-explorer .mexplorer-cat.active .mexplorer-cat-img-wrap,
  .ed-page #menu-explorer .mexplorer-cat.is-active .mexplorer-cat-img-wrap { outline: 0 !important; }
  .ed-page #menu-explorer .mexplorer-cat .mexplorer-cat-shine { display: none !important; }

  /* Toutes les categories : aucun texte sous 14px (nombre de choix, avis, badge) ; le bouton de commande n'a plus de texte visible */
  .ed-page [data-category-section].ed-grid > .category-head .category-count,
  .ed-page [data-category-section].ed-grid .dish-card [class*="dish-rating-"],
  .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge__text { font-size: .875rem !important; }
  /* Badge : une ligne s'il tient, sinon 2 lignes ; points de suspension seulement au-dela de 2 lignes ; texte
     enregistre jamais modifie. Discret sur les photos : largeur ajustee au texte (retour a la ligne classique, sans
     equilibrage qui laissait la boite a sa largeur maximale autour de deux lignes courtes), padding et interligne
     reduits, largeur maximale proportionnelle a la carte (83 %, 86 % a partir de 410px pour qu'un libelle comme
     « Decouverte du jour » y tienne sur une ligne, 88 % sous 360px pour qu'un libelle court comme « N°1 des ventes »
     reste sur une ligne), jamais plus de 11rem. */
  .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge {
    height: auto !important;
    min-height: 24px !important;
    padding: 2px 7px !important;
    width: fit-content !important;
    max-width: min(83%, 11rem) !important;
  }
  .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge__text {
    display: -webkit-box !important;
    -webkit-box-orient: vertical !important;
    -webkit-line-clamp: 2 !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: normal !important;
    overflow-wrap: break-word !important;
    text-wrap: wrap !important;
    text-align: start !important;
    line-height: 1.2 !important;
    letter-spacing: 0 !important;
  }
  /* Note : memes regles sur /menu et /commande (menu-premium.css ne les posait que sur /menu) ; morceaux insecables */
  .ed-page [data-category-section].ed-grid .dish-card .dish-rating-pill {
    flex-wrap: wrap !important;
    row-gap: 0 !important;
    white-space: nowrap !important;
    letter-spacing: -.01em !important;
  }
}
@media (min-width: 410px) and (max-width: 767px) {
  .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge { max-width: min(86%, 11rem) !important; }
}
/* Badge, pages de gauche a droite : fond pose ligne par ligne. Le conteneur, transparent, ne fait que placer le badge et
   fixer la largeur des lignes ; le texte (un <span>) passe en ligne et porte le fond, repete sur chaque fragment de ligne
   (box-decoration-break: clone) : plus de grand rectangle vide autour d'une deuxieme ligne courte. Lignes equilibrees
   (« Decouverte » / « du jour ») la ou le moteur le permet ; WebKit garde un retour a la ligne classique (« Decouverte du »
   / « jour »), toujours sans fond vide. Texte 14px ; une ligne si le libelle tient (au plus 80 % de la carte, 88 % sous
   360px, jamais plus de 9.5rem), sinon 2 lignes (verifie sur toutes les traductions ; les libelles viennent d'une liste
   fermee) ; jamais de mot coupe ni de points de suspension. Badge court : meme boite qu'avant (24px de haut, marge
   laterale 7px, 6px sous 360px ; le fond d'une ligne de 21px deborde de 1.5px au-dessus, compense par le padding-top).
   Pages de droite a gauche (arabe, ourdou) : rendu ci-dessus conserve, car WebKit ignore le « clone » sur un texte de
   droite a gauche (marges interieures perdues d'un cote de chaque ligne, badge de 2 lignes decale de 7px). */
@media (max-width: 767px) {
  html:not([dir="rtl"]) .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge {
    display: block !important;
    height: auto !important;
    min-height: 0 !important;
    padding: 1.5px 0 0 !important;
    background: transparent !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    width: fit-content !important;
    max-width: min(80%, 9.5rem) !important;
    min-width: min-content !important;
    font-size: .875rem !important;
    line-height: 1.5 !important;
    text-wrap: balance !important;
    text-align: start !important;
  }
  html:not([dir="rtl"]) .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge__text {
    display: inline !important;
    -webkit-line-clamp: none !important;
    overflow: visible !important;
    white-space: normal !important;
    overflow-wrap: normal !important;
    line-height: inherit !important;
    padding: 2.5px 7px !important;
    border-radius: 6px !important;
    background: var(--ed-inner) !important;
    color: var(--ed-ink) !important;
    box-shadow: 0 1px 2px rgba(0, 0, 0, .16) !important;
    -webkit-box-decoration-break: clone !important;
    box-decoration-break: clone !important;
  }
  html:not([dir="rtl"]) .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge:is(.dish-emoji-badge--gold, .dish-emoji-badge--silver, .dish-emoji-badge--bronze) .dish-emoji-badge__text {
    background: var(--ed-accent) !important;
    color: var(--ed-on-accent) !important;
  }
}
/* Badges des demi-cartes, compacts : une seule regle pour tous les libelles, toutes langues (le navigateur ne permet pas de
   cibler seulement ceux qui passent sur deux lignes). Texte 13px, interligne 18px, fond de chaque ligne 2px / 6px :
   badge d'une ligne 21px de haut, badge de deux lignes 39px ; fond par ligne, texte complet, 2 lignes max. La
   compensation de 1.5px du conteneur (fond d'une ligne plus haut que l'interligne) reste valable. Grandes cartes
   inchangees. Droite a gauche : boite de la PR #20 conservee, seul le texte passe a 13px. */
@media (max-width: 767px) {
  html:not([dir="rtl"]) .ed-page [data-category-section].ed-grid .dish-card:not(:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type)) .dish-emoji-badge { font-size: .8125rem !important; line-height: 18px !important; }
  html:not([dir="rtl"]) .ed-page [data-category-section].ed-grid .dish-card:not(:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type)) .dish-emoji-badge__text { font-size: .8125rem !important; padding: 2px 6px !important; }
  html[dir="rtl"] .ed-page [data-category-section].ed-grid .dish-card:not(:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type)) .dish-emoji-badge__text { font-size: .8125rem !important; }
}
@media (max-width: 767px) {
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 12px !important;
    align-items: stretch !important;
  }
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) > .category-head { grid-column: 1 / -1 !important; }
  /* Demi-carte : image en haut, contenu dessous, prix et action en bas */
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) > .dish-card {
    grid-column: span 1 !important;
    display: flex !important;
    flex-direction: column !important;
    min-width: 0 !important;
  }
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) > .dish-card .media { aspect-ratio: 4 / 3 !important; height: auto !important; min-height: 0 !important; }
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) > .dish-card .dish-main { padding: 12px 12px 4px !important; }
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) > .dish-card .dish-name { font-size: 1rem !important; line-height: 1.22 !important; }
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) > .dish-card .dish-desc { font-size: .875rem !important; -webkit-line-clamp: 2 !important; }
  /* Paire de demi-cartes (meme hauteur) : la note est poussee en bas du bloc texte, juste au-dessus du prix ; notes et
     prix sont ainsi alignes d'une carte a l'autre, quelle que soit la longueur du nom ou de la description */
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) > .dish-card .dish-signal-row { margin-top: auto !important; padding-top: 2px !important; }
  .ed-page [data-category-section].ed-grid:not(:has(> .dish-card[hidden])) > .dish-card .dish-side {
    margin-top: auto !important;
    padding: 8px 12px 12px !important;
    display: flex !important;
    flex-wrap: wrap !important;
    align-items: center !important;
    justify-content: space-between !important;
    gap: 8px !important;
  }
  /* Grande carte (format horizontal : image 44 %, contenu a cote) */
  .ed-page .dish-card:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type) {
    grid-column: 1 / -1 !important;
    display: grid !important;
    grid-template-columns: minmax(0, 44fr) minmax(0, 56fr) !important;
    grid-template-rows: 1fr auto auto 1fr !important;
    min-height: 196px !important;
  }
  .ed-page .dish-card:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type) .media {
    grid-column: 1 !important; grid-row: 1 / -1 !important; height: 100% !important; min-height: 0 !important; aspect-ratio: auto !important; border-bottom: 0 !important;
  }
  .ed-page .dish-card:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type) .dish-main {
    grid-column: 2 !important; grid-row: 2 !important; padding: 14px 14px 4px !important;
  }
  .ed-page .dish-card:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type) .dish-name { font-size: 1.12rem !important; }
  .ed-page .dish-card:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type) .dish-desc { -webkit-line-clamp: 3 !important; }
  .ed-page .dish-card:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type) .dish-side {
    grid-column: 2 !important; grid-row: 3 !important; margin-top: 0 !important; padding: 6px 14px 14px !important;
  }
  .ed-page .dish-card:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type) .dish-emoji-badge { max-width: calc(44% - 20px) !important; }
}

/* ── 16. Navigation fixe (telephone), retour en haut, double tarif, contraste du prix ───────
   - Espace reserve sous le contenu (<= 720px, la ou la navigation est fixe) : hauteur REELLE de la navigation
     (mesuree en JS dans --mobile-nav-height ; sa zone de securite env(safe-area-inset-bottom) est deja comprise dans
     son propre padding) + 16px. L'ancienne reserve (menu-premium.css) valait exactement cette hauteur, plus une 2e fois
     la zone de securite : le dernier contenu touchait la navigation. Repli avant la mesure : 64px + zone de securite.
     Barre panier affichee : la plus grande des deux reserves (celle de order-experience-3i.css, 92px + zone de
     securite, ou celle de la navigation), jamais leur somme. scroll-padding-bottom : un element atteint au clavier ou
     par une ancre ne s'arrete jamais sous la navigation. Design de la navigation inchange.
   - Bouton flottant « Haut » : masque sous 1320px, la ou il recouvrait des cartes (marge laterale plus etroite que
     lui jusqu'a 1199px) ou le lien de droite du pied de page (1200-1319px). Sur le menu (<= 720px), un nouvel appui
     sur l'onglet « Menu » deja actif de la navigation remonte en haut de page (menu.php). Inchange a partir de 1320px.
   - Double tarif (< 768px) : libelles (Midi / Soir, Sur place / A emporter) >= 14px. A partir de 768px, taille de la
     PR18 conservee : l'agrandir changerait la hauteur des cartes, donc la composition ordinateur.
   - Prix (>= 768px) : teinte d'accent melangee au texte du theme (celle du telephone, section 14), contraste >= 4.5:1
     meme avec un accent vif sur fond clair (theme rouge). Avec le bouton « Haut », seules differences de rendu a partir de 768px. */
@media (max-width: 720px) {
  :root { --mobile-nav-height: calc(64px + var(--safe-bottom, 0px)); }
  body.ed-page--menu:has(> .mobile-bottom-nav) {
    --ed-nav-reserve: calc(var(--mobile-nav-height) + 16px);
    padding-bottom: var(--ed-nav-reserve) !important;
  }
  body.ed-page--menu:has(> .mobile-bottom-nav):has(> .guest-cart-bar.show) {
    --ed-nav-reserve: max(calc(var(--mobile-nav-height) + 16px), calc(92px + var(--safe-bottom, 0px)));
  }
  html:has(> body.ed-page--menu > .mobile-bottom-nav) { scroll-padding-bottom: calc(var(--mobile-nav-height) + 16px); }
}
@media (max-width: 1319px) {
  .ed-page .to-top,
  .ed-page .to-top.show { display: none !important; }
}
@media (max-width: 767px) {
  .ed-page [data-category-section] .dish-card .dual-price-badge { font-size: .875rem !important; letter-spacing: .02em !important; min-height: 24px !important; }
}
/* Badges (< 360px, demi-cartes de 126 a 146px) : un peu plus pres du bord, pour qu'un libelle court (« N°1 des ventes »)
   tienne sur une ligne ; dans les grandes cartes, le badge reste limite a la photo. */
@media (max-width: 359px) {
  .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge { top: 6px !important; max-width: min(88%, 11rem) !important; padding: 2px 6px !important; }
  html:not([dir="rtl"]) .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge { max-width: min(88%, 9.5rem) !important; }
  html:not([dir="rtl"]) .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge__text { padding-inline: 6px !important; }
  html:not([dir="rtl"]) .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge { left: 6px !important; right: auto !important; }
  html[dir="rtl"] .ed-page [data-category-section].ed-grid .dish-card .dish-emoji-badge { right: 6px !important; left: auto !important; }
  .ed-page .dish-card:is(.ed-grid:not(.ed-grid--n4.ed-grid--m3-2):not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1), .ed-grid--n4.ed-grid--m3-2:not(:has(> .dish-card[hidden])) > :nth-of-type(3n+1):not(:nth-last-of-type(2)), .ed-grid--n2:not(:has(> .dish-card[hidden])) > :last-of-type) .dish-emoji-badge { max-width: calc(44% - 12px) !important; }
}
@media (min-width: 768px) {
  .ed-page [data-category-section] .dish-card .price-pill,
  .ed-page [data-category-section] .dish-card .dual-price-amount { color: color-mix(in srgb, var(--ed-accent-ink) 70%, var(--ed-ink)) !important; }
}
/* Lot M2. Lignes de tarif des cartes : la ligne ne depasse plus jamais la carte (avant : ligne insecable plus large
   que la demi-carte, coupee net par le bord, « sandwich + fri »). Montant insecable, jamais reduit ; l'intitule prend
   la place restante et revient a la ligne entre deux mots, 2 lignes au plus, « … » natif seulement au-dela. Un
   intitule qui tient sur sa ligne garde exactement son rendu (meme boite, meme hauteur). Le nom (2 lignes) et la
   description (2 lignes, 3 dans les grandes cartes) gardent leur « … » natif. Tout reste dans le bouton invisible
   de la carte : un appui sur les points ouvre la meme fiche, sans logique propre. */
.ed-page [data-category-section] .dish-card .dual-price-card { max-width: 100% !important; }
.ed-page [data-category-section] .dish-card .dual-price-row {
  display: flex !important;
  flex: 0 1 auto !important;
  max-width: 100% !important;
  white-space: normal !important;
}
.ed-page [data-category-section] .dish-card .dual-price-amount { flex: none !important; white-space: nowrap !important; }
.ed-page [data-category-section] .dish-card .dual-price-badge {
  display: -webkit-box !important;
  -webkit-box-orient: vertical !important;
  -webkit-line-clamp: 2 !important;
  overflow: hidden !important;
  flex: 0 1 auto !important;
  min-width: 0 !important;
  white-space: normal !important;
  overflow-wrap: break-word !important;
  text-align: start !important;
}
/* Telephone : l'intitule etait centre dans une boite de 24px de haut ; meme position du texte et meme hauteur pour une
   ligne (marges egales, hauteur minimale de 24px conservee contre les arrondis), la boite ne grandit que si l'intitule passe sur deux lignes. */
@media (max-width: 767px) {
  .ed-page [data-category-section] .dish-card .dual-price-badge { padding-block: calc((24px - 1lh) / 2) !important; }
}

/* ── 12. Filtres existants (recherche, Populaires) : le masquage gagne toujours ─
   menu-premium.js masque les cartes et sections filtrees (attribut hidden +
   display:none en ligne). Les regles d'affichage ci-dessus (display:flex/grid
   !important) ne doivent jamais l'annuler : specificite superieure, en dernier. */
.ed-page .section[data-category-section][hidden],
.ed-page [data-category-section] .dish-card[data-dish-card][hidden] {
  display: none !important;
}
