
/* === templates/template-base.css === */
/* ========================================
   Template Base - Styles communs
   ======================================== */

.menu-template {
    font-family: var(--t-body-font, 'Lato', sans-serif);
    color: var(--t-text, #333333);
    background: var(--t-bg, #ffffff);
    line-height: 1.6;
    position: relative;
    overflow: hidden;
}

/* Texture overlay — chaque template peut ajouter sa propre texture */
.menu-texture-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    z-index: 0;
    mix-blend-mode: multiply;
    opacity: 0.5;
}

/* Tout le contenu doit être au-dessus de la texture */
.menu-template .menu-header,
.menu-template .menu-body,
.menu-template .menu-footer,
.menu-template .menu-corner,
.menu-template .menu-deco-border,
.menu-template .menu-inner-border {
    position: relative;
    z-index: 1;
}

/* Mode PDF : dimensions A4 */
.menu-pdf-render .menu-template {
    width: 210mm;
    /* `100%` et non `297mm`. Le conteneur est cale sur un nombre ENTIER de
       pages A4 par fitStageToWholePages() avant le rendu ; la carte doit le
       remplir entierement, sinon son fond s'arrete la ou son contenu s'arrete.
       Concretement : une carte qui deborde d'un pouce sur une 2e page donnait
       une page a moitie peinte — quelques lignes sur le fond du modele, puis du
       blanc jusqu'en bas. Sur le PDF PAYE. */
    min-height: 100%;
    padding: 15mm 20mm;
    box-sizing: border-box;
    margin: 0 auto;
}

/* Rien ne doit se couper en deux entre la fin d'une page et le début de la
   suivante. Constaté sur « Haute Cuisine » : le nom du plat restait page 1 et
   son prix passait page 2. Une carte imprimée comme ça est inutilisable.

   Un plat, un titre de catégorie et le pied de carte sont donc insécables. Un
   menu trop long occupera plus de pages — c'est honnête ; couper un plat en
   deux ne l'est pas. */
.menu-pdf-render .menu-item,
.menu-pdf-render .menu-category-name,
.menu-pdf-render .menu-category-header,
.menu-pdf-render .menu-footer {
    break-inside: avoid;
    page-break-inside: avoid;
}

/* Un titre de catégorie seul en bas de page, ses plats sur la suivante :
   on garde le titre avec ce qu'il annonce. */
.menu-pdf-render .menu-category-name,
.menu-pdf-render .menu-category-header {
    break-after: avoid;
    page-break-after: avoid;
}

/* Mode preview dans l'éditeur — même largeur que le PDF (A4 = 793px) */
.editor-preview-content .menu-template {
    width: 100%;
    min-height: 297mm;
}

/* ========================================
   SVG Ornaments — styles communs
   ======================================== */

.menu-svg-ornament {
    display: block;
    width: 160px;
    height: 20px;
    margin: 0 auto;
    color: var(--t-secondary, #c9a96e);
}

.menu-svg-ornament.menu-svg-ornament--lg {
    width: 40px;
    height: 50px;
}

.menu-header-deco .menu-svg-ornament {
    margin-top: 4px;
}

.menu-category-separator .menu-svg-ornament {
    width: 140px;
    height: 18px;
}

.menu-footer-separator .menu-svg-ornament {
    width: 120px;
    height: 12px;
    opacity: 0.5;
}

/* ========================================
   Éléments communs
   ======================================== */

.menu-restaurant-name {
    font-family: var(--t-heading-font, 'Playfair Display', serif);
    color: var(--t-primary, #2c3e50);
}

.menu-restaurant-subtitle {
    color: var(--t-secondary, #c9a96e);
}

.menu-category-name {
    font-family: var(--t-heading-font, 'Playfair Display', serif);
    color: var(--t-primary, #2c3e50);
}

.menu-item-name {
    font-weight: 600;
}

.menu-item-price {
    color: var(--t-primary, #2c3e50);
    font-weight: 600;
    white-space: nowrap;
}

.menu-item-description {
    font-size: 0.85em;
    opacity: 0.7;
    font-style: italic;
}

/* La description d'un plat doit commencer sous son nom.
   La plupart des modeles posent `text-align: center` a la racine de la carte.
   Dans les mises en page « dots » (nom ....... prix) et « left », le nom est
   cale a gauche par le flex — mais la description, elle, restait centree et
   flottait au milieu de la ligne, sans rapport visuel avec le plat qu'elle
   decrit. Seule la mise en page « stacked », ou le nom est vraiment centre,
   garde une description centree. */
.menu-item-header + .menu-item-description,
.menu-item-content .menu-item-description {
    text-align: left;
}

/* Flags / icônes diététiques */
.menu-item-flags {
    display: inline-flex;
    gap: 4px;
    margin-left: 6px;
    vertical-align: middle;
}

.menu-flag {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 18px;
    height: 18px;
    padding: 0 4px;
    border-radius: 999px;
    box-sizing: border-box;
    font-size: 9px;
    font-weight: 700;
    line-height: 1;
    letter-spacing: -0.02em;
}

/* Les pastilles etaient des pastilles d'application : fond vert menthe, fond
   orange. Sur une carte au fond noir elles hurlaient, et il avait fallu
   redefinir les cinq couleurs dans cinq feuilles de modele — six jeux de
   couleurs en dur a maintenir pour cinq marques.

   Un contour en `currentColor` se pose juste sur n'importe quel fond, clair ou
   sombre, sans rien savoir du modele. C'est aussi la convention typographique
   des vraies cartes : une petite marque discrete, pas un badge. Le sens reste
   porte par l'attribut `title`, jamais par la couleur seule. */
.menu-flag {
    background: transparent;
    border: 1px solid currentColor;
    color: inherit;
    opacity: 0.5;
}

/* La signature du chef est la seule qui doit accrocher l'oeil : elle prend
   l'accent du modele. */
.menu-flag--signature {
    color: var(--t-secondary, #c9a96e);
    opacity: 0.95;
}

/* Info restaurant */
.menu-restaurant-info {
    font-size: 0.85em;
    opacity: 0.7;
}

.menu-restaurant-logo {
    max-height: 80px;
    width: auto;
    display: block;
}

/* Layout 2 colonnes */
.menu-body.menu-columns-2 {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px 30px;
    align-items: start;
}

.menu-body.menu-columns-2 .menu-category {
    break-inside: avoid;
}

/* ========================================
   Édition inline
   ======================================== */

.menu-inline-editable {
    cursor: text;
    outline: 2px solid transparent;
    outline-offset: 2px;
    border-radius: 2px;
    transition: outline-color 0.15s ease;
}

.menu-inline-editable:hover {
    outline-color: rgba(201, 169, 110, 0.3);
}

.menu-inline-editable.is-editing {
    outline-color: rgba(201, 169, 110, 0.6);
    background: rgba(201, 169, 110, 0.05);
}

/* Masquer l'affordance d'édition en mode PDF.

   ATTENTION à la portée. Cette règle portait `background: none !important` sur
   TOUT `.menu-inline-editable` — or le renderer pose cette classe sur le nom du
   restaurant, les noms de catégorie et les noms de plat. Elle effaçait donc,
   dans le PDF, le fond de n'importe quel élément de DESIGN qui en avait un :
   le bandeau de catégorie de « Food Truck », « Pizzeria » et « Affiche »
   disparaissait, et comme leur texte est clair sur ce bandeau, il devenait
   invisible sur le fond de la carte. Les cartouches beiges de catégorie de
   « Classique Élégant » sautaient aussi, en silence, dans le PDF PAYÉ.

   Le seul fond que l'édition ajoute est celui de `.is-editing`. C'est lui, et
   lui seul, qu'il faut neutraliser. */
.menu-pdf-render .menu-inline-editable {
    cursor: default;
    outline: none !important;
}

.menu-pdf-render .menu-inline-editable.is-editing {
    background: none !important;
}

/* Conteneur PDF hors-écran */
.menu-pdf-render {
    overflow: visible;
}

/* Saut de page PDF */
.page-break-before {
    page-break-before: always;
}

.html2pdf__page-break {
    page-break-before: always;
    display: block;
    height: 0;
    margin: 0;
    padding: 0;
}

/* === classique-elegant/style.css === */
/* ========================================
   Template : Classique Élégant
   Style gastronomique français, serif, or/crème
   Linen texture, refined typography, depth
   ======================================== */

.menu-template.classique-elegant {
    --t-primary: var(--custom-primary, #2c3e50);
    --t-secondary: var(--custom-secondary, #c9a96e);
    --t-bg: var(--custom-bg, #faf8f5);
    --t-text: var(--custom-text, #4a4a4a);
    --t-heading-font: var(--custom-heading-font, 'Playfair Display', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 60px 50px;
    position: relative;
}

/* Linen / paper grain texture overlay */
.classique-elegant .menu-texture-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background-image:
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 2px,
            rgba(0,0,0,0.008) 2px,
            rgba(0,0,0,0.008) 4px
        ),
        repeating-linear-gradient(
            90deg,
            transparent,
            transparent 3px,
            rgba(0,0,0,0.006) 3px,
            rgba(0,0,0,0.006) 6px
        ),
        radial-gradient(ellipse at 30% 20%, rgba(201,169,110,0.04) 0%, transparent 60%),
        radial-gradient(ellipse at 70% 80%, rgba(201,169,110,0.03) 0%, transparent 50%);
}

.classique-elegant .menu-header {
    margin-bottom: 45px;
    padding-bottom: 35px;
    position: relative;
}

/* Double-line separator with diamond center */
.classique-elegant .menu-header::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 70%;
    height: 0;
    border-top: 1px solid var(--t-secondary);
    border-bottom: 1px solid var(--t-secondary);
    padding-top: 4px;
    box-shadow: 0 2px 8px rgba(201,169,110,0.1);
}

.classique-elegant .menu-header::before {
    content: '◆';
    position: absolute;
    bottom: -8px;
    left: 50%;
    transform: translateX(-50%);
    z-index: 1;
    font-size: 10px;
    color: var(--t-secondary);
    background: var(--t-bg);
    padding: 0 12px;
    letter-spacing: 0;
}

.classique-elegant .menu-restaurant-logo {
    margin: 0 auto 18px;
}

.classique-elegant .menu-restaurant-name {
    font-size: 2.8em;
    font-weight: 700;
    letter-spacing: 0.08em;
    margin-bottom: 10px;
    text-shadow: 0 1px 2px rgba(0,0,0,0.06), 0 0 30px rgba(201,169,110,0.12);
    background: linear-gradient(135deg, var(--t-primary) 0%, var(--t-secondary) 50%, var(--t-primary) 100%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
}

.classique-elegant .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 1.05em;
    font-style: italic;
    letter-spacing: 0.12em;
    opacity: 0.75;
}

.classique-elegant .menu-header-deco {
    margin-top: 12px;
    color: var(--t-secondary);
}

.classique-elegant .menu-category {
    margin-bottom: 38px;
}

.classique-elegant .menu-category-name {
    font-size: 1.35em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    margin-bottom: 8px;
    color: var(--t-secondary);
    padding: 8px 24px;
    display: inline-block;
    background: linear-gradient(135deg, rgba(201,169,110,0.08) 0%, rgba(201,169,110,0.02) 100%);
    border-radius: 2px;
    position: relative;
    border-top: 1px solid rgba(201,169,110,0.2);
    border-bottom: 1px solid rgba(201,169,110,0.2);
}

.classique-elegant .menu-category-desc {
    font-style: italic;
    font-size: 0.88em;
    color: var(--t-text);
    opacity: 0.6;
    margin-bottom: 18px;
}

.classique-elegant .menu-category-separator {
    width: 50px;
    height: 1px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
    margin: 0 auto 22px;
}

.classique-elegant .menu-item {
    margin-bottom: 18px;
    padding: 4px 24px;
}

.classique-elegant .menu-item-header {
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 14px;
}

.classique-elegant .menu-item-name {
    font-size: 1.02em;
    font-weight: 600;
    letter-spacing: 0.01em;
}

.classique-elegant .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted var(--t-secondary);
    opacity: 0.35;
    min-width: 20px;
    margin-bottom: 4px;
}

.classique-elegant .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 1em;
    font-weight: 500;
    color: var(--t-secondary);
}

.classique-elegant .menu-item-description {
    font-size: 0.84em;
    margin-top: 3px;
    opacity: 0.6;
    font-style: italic;
}

.classique-elegant .menu-footer {
    margin-top: 45px;
    padding-top: 25px;
    position: relative;
}

.classique-elegant .menu-footer::before {
    content: '';
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 70%;
    height: 1px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
}

.classique-elegant .menu-footer {
    font-size: 0.82em;
    opacity: 0.55;
}

.classique-elegant .menu-restaurant-info p {
    margin: 3px 0;
    letter-spacing: 0.02em;
}

/* html2canvas ne sait pas découper un fond sur le texte : `background-clip:
   text` est ignoré et le dégradé se peint en APLAT, derrière le nom, qui reste
   transparent. Dans le PDF, le titre disparaissait donc sous un rectangle
   dégradé. À l'impression, couleur pleine.

   (Ce défaut était masqué jusqu'ici par une règle trop large du mode PDF, qui
   effaçait TOUS les fonds — et au passage les bandeaux de catégorie des autres
   modèles.) */
.menu-pdf-render .classique-elegant .menu-restaurant-name {
    background: none;
    -webkit-background-clip: border-box;
    background-clip: border-box;
    -webkit-text-fill-color: var(--t-primary);
    color: var(--t-primary);
    text-shadow: none;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .classique-elegant .menu-header { margin-bottom: 36px; padding-bottom: 28px; }
.menu-pdf-render .classique-elegant .menu-restaurant-name { margin-bottom: 8px; }
.menu-pdf-render .classique-elegant .menu-restaurant-subtitle { margin-bottom: 12.8px; }
.menu-pdf-render .classique-elegant .menu-header-deco { margin-top: 9.6px; }
.menu-pdf-render .classique-elegant .menu-category { margin-bottom: 30.4px; }
.menu-pdf-render .classique-elegant .menu-category-name { margin-bottom: 6.4px; padding-top: 6.4px; padding-bottom: 6.4px; }
.menu-pdf-render .classique-elegant .menu-category-separator { margin-bottom: 17.6px; }
.menu-pdf-render .classique-elegant .menu-item { margin-bottom: 14.4px; padding-top: 3.2px; padding-bottom: 3.2px; }
.menu-pdf-render .classique-elegant .menu-item-description { margin-top: 2.4px; }
.menu-pdf-render .classique-elegant .menu-footer { margin-top: 36px; padding-top: 20px; }
.menu-pdf-render .classique-elegant { padding-top: 48px; padding-bottom: 48px; }

/* === moderne-minimaliste/style.css === */
/* ========================================
   Template : Moderne Minimaliste
   Blanc pur, noir, Inter, beaucoup d'espace
   Ultra-subtle paper texture, refined whitespace
   ======================================== */

.menu-template.moderne-minimaliste {
    --t-primary: var(--custom-primary, #111111);
    --t-secondary: var(--custom-secondary, #888888);
    --t-bg: var(--custom-bg, #ffffff);
    --t-text: var(--custom-text, #333333);
    --t-heading-font: var(--custom-heading-font, 'Inter', sans-serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    padding: 70px 55px;
    position: relative;
}

/* Ultra-subtle paper grain texture */
.moderne-minimaliste .menu-texture-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background-image:
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 2px,
            rgba(0,0,0,0.004) 2px,
            rgba(0,0,0,0.004) 3px
        ),
        repeating-linear-gradient(
            90deg,
            transparent,
            transparent 3px,
            rgba(0,0,0,0.003) 3px,
            rgba(0,0,0,0.003) 4px
        ),
        radial-gradient(ellipse at 50% 0%, rgba(0,0,0,0.008) 0%, transparent 70%);
}

.moderne-minimaliste .menu-header {
    text-align: center;
    margin-bottom: 55px;
    padding-bottom: 35px;
    position: relative;
}

.moderne-minimaliste .menu-header::after {
    content: '';
    position: absolute;
    bottom: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 50px;
    height: 1px;
    background: var(--t-secondary);
    opacity: 0.3;
}

.moderne-minimaliste .menu-restaurant-logo {
    margin: 0 auto 22px;
}

.moderne-minimaliste .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.6em;
    font-weight: 200;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin-bottom: 10px;
    position: relative;
    display: inline-block;
}

.moderne-minimaliste .menu-restaurant-name::after {
    content: '';
    position: absolute;
    bottom: -8px;
    left: 0;
    width: 40px;
    height: 3px;
    background: var(--t-primary);
}

.moderne-minimaliste .menu-restaurant-subtitle {
    font-size: 0.92em;
    font-weight: 400;
    color: var(--t-secondary);
    letter-spacing: 0.06em;
}

.moderne-minimaliste .menu-header-deco {
    margin-top: 12px;
    color: var(--t-secondary);
    opacity: 0.3;
}

.moderne-minimaliste .menu-category {
    margin-bottom: 45px;
}

.moderne-minimaliste .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.78em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    color: var(--t-secondary);
    margin-bottom: 22px;
    padding-left: 14px;
    border-left: 2px solid var(--t-primary);
    text-align: left;
    display: block;
    line-height: 1;
}

.moderne-minimaliste .menu-category-desc {
    font-size: 0.84em;
    color: var(--t-secondary);
    margin-bottom: 18px;
    margin-top: -14px;
    padding-left: 14px;
    text-align: left;
}

.moderne-minimaliste .menu-category-separator {
    display: none;
}

.moderne-minimaliste .menu-item {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    padding: 16px 0 16px 12px;
    border-bottom: 1px solid rgba(0,0,0,0.04);
    border-left: 2px solid transparent;
    transition: border-left-color 0.2s ease, background 0.2s ease;
}

.moderne-minimaliste .menu-item:hover {
    border-left-color: var(--t-primary);
    background: rgba(0,0,0,0.01);
}

.moderne-minimaliste .menu-item:last-child {
    border-bottom: none;
}

.moderne-minimaliste .menu-item-content {
    flex: 1;
    padding-right: 24px;
}

.moderne-minimaliste .menu-item-name {
    font-size: 0.96em;
    font-weight: 500;
    color: var(--t-primary);
    letter-spacing: 0.01em;
}

.moderne-minimaliste .menu-item-description {
    font-size: 0.82em;
    color: var(--t-secondary);
    font-style: normal;
    margin-top: 5px;
    opacity: 1;
    line-height: 1.5;
}

.moderne-minimaliste .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 0.96em;
    font-weight: 500;
    color: var(--t-primary);
    white-space: nowrap;
}

.moderne-minimaliste .menu-footer {
    margin-top: 55px;
    padding-top: 25px;
    text-align: center;
    position: relative;
}

.moderne-minimaliste .menu-footer::before {
    content: '';
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 40px;
    height: 1px;
    background: var(--t-secondary);
    opacity: 0.25;
}

.moderne-minimaliste .menu-footer-deco {
    color: var(--t-secondary);
    opacity: 0.25;
    margin-bottom: 12px;
}

.moderne-minimaliste .menu-restaurant-info {
    font-size: 0.8em;
    color: var(--t-secondary);
    letter-spacing: 0.02em;
}

.moderne-minimaliste .menu-restaurant-info p {
    margin: 4px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .moderne-minimaliste .menu-header { margin-bottom: 46.8px; padding-bottom: 29.8px; }
.menu-pdf-render .moderne-minimaliste .menu-restaurant-name { margin-bottom: 8.5px; }
.menu-pdf-render .moderne-minimaliste .menu-category { margin-bottom: 38.3px; }
.menu-pdf-render .moderne-minimaliste .menu-category-name { margin-bottom: 18.7px; }
.menu-pdf-render .moderne-minimaliste .menu-item { padding-top: 13.6px; padding-bottom: 13.6px; }
.menu-pdf-render .moderne-minimaliste .menu-item-description { margin-top: 4.3px; }
.menu-pdf-render .moderne-minimaliste .menu-footer { margin-top: 46.8px; padding-top: 21.3px; }
.menu-pdf-render .moderne-minimaliste { padding-top: 60px; padding-bottom: 60px; }

/* === bistro-parisien/style.css === */
/* ========================================
   Template : Bistro Parisien
   Chaleureux, vintage, bordeaux, Dancing Script
   Warm parchment texture, elegant double border
   ======================================== */

.menu-template.bistro-parisien {
    --t-primary: var(--custom-primary, #722f37);
    --t-secondary: var(--custom-secondary, #d4a574);
    --t-bg: var(--custom-bg, #fdf6ee);
    --t-text: var(--custom-text, #3d2b1f);
    --t-heading-font: var(--custom-heading-font, 'Dancing Script', cursive);
    --t-body-font: var(--custom-body-font, 'Crimson Text', serif);

    background: var(--t-bg);
    padding: 50px 42px;
    text-align: center;
    border: 3px double var(--t-primary);
    margin: 10px;
    position: relative;
    box-shadow:
        inset 0 0 60px rgba(61,43,31,0.04),
        inset 0 0 120px rgba(212,165,116,0.03),
        0 2px 20px rgba(0,0,0,0.06);
}

/* Warm parchment noise texture */
.bistro-parisien .menu-texture-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background-image:
        radial-gradient(ellipse at 25% 15%, rgba(212,165,116,0.06) 0%, transparent 50%),
        radial-gradient(ellipse at 75% 85%, rgba(114,47,55,0.04) 0%, transparent 50%),
        repeating-linear-gradient(
            45deg,
            transparent,
            transparent 4px,
            rgba(61,43,31,0.008) 4px,
            rgba(61,43,31,0.008) 5px
        ),
        repeating-linear-gradient(
            -45deg,
            transparent,
            transparent 6px,
            rgba(61,43,31,0.005) 6px,
            rgba(61,43,31,0.005) 7px
        );
}

/* Inner decorative border with gap */
.bistro-parisien::before {
    content: '';
    position: absolute;
    inset: 8px;
    border: 1px solid var(--t-primary);
    opacity: 0.2;
    pointer-events: none;
    border-radius: 1px;
}

.bistro-parisien .menu-header {
    margin-bottom: 40px;
    padding-bottom: 28px;
    position: relative;
}

.bistro-parisien .menu-header-deco {
    margin-top: 14px;
    color: var(--t-secondary);
}

.bistro-parisien .menu-restaurant-logo {
    margin: 0 auto 14px;
}

.bistro-parisien .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3.4em;
    font-weight: 700;
    color: var(--t-primary);
    margin-bottom: 8px;
    text-shadow: 0 2px 4px rgba(0,0,0,0.08), 0 0 40px rgba(114,47,55,0.06);
    line-height: 1.1;
    position: relative;
}

.bistro-parisien .menu-restaurant-name::after {
    content: '';
    position: absolute;
    bottom: -4px;
    left: 50%;
    transform: translateX(-50%);
    width: 60%;
    height: 2px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
    opacity: 0.5;
}

.bistro-parisien .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 1.05em;
    font-style: italic;
    color: var(--t-secondary);
    letter-spacing: 0.04em;
}

.bistro-parisien .menu-category {
    margin-bottom: 36px;
}

.bistro-parisien .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.9em;
    font-weight: 700;
    color: var(--t-primary);
    margin-bottom: 4px;
    display: inline-block;
    padding-bottom: 4px;
    border-bottom: 2px solid var(--t-secondary);
}

.bistro-parisien .menu-category-desc {
    font-style: italic;
    font-size: 0.88em;
    color: var(--t-text);
    opacity: 0.55;
    margin-bottom: 18px;
    margin-top: 6px;
}

.bistro-parisien .menu-category-separator {
    width: 120px;
    height: 1px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
    margin: 0 auto 22px;
}

.bistro-parisien .menu-item {
    margin-bottom: 16px;
    padding: 4px 14px;
}

.bistro-parisien .menu-item-header {
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 12px;
}

.bistro-parisien .menu-item-name {
    font-family: var(--t-body-font);
    font-size: 1.08em;
    font-weight: 600;
    color: var(--t-text);
}

.bistro-parisien .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted var(--t-secondary);
    opacity: 0.4;
    min-width: 20px;
    margin-bottom: 4px;
}

.bistro-parisien .menu-item-price {
    font-family: var(--t-body-font);
    font-weight: 700;
    color: var(--t-primary);
    font-size: 1.02em;
}

.bistro-parisien .menu-item-description {
    font-size: 0.84em;
    margin-top: 3px;
    font-style: italic;
    opacity: 0.6;
}

.bistro-parisien .menu-footer {
    margin-top: 40px;
    padding-top: 24px;
    position: relative;
}

.bistro-parisien .menu-footer::before {
    content: '';
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 140px;
    height: 1px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
}

.bistro-parisien .menu-footer-deco {
    color: var(--t-secondary);
    margin-bottom: 10px;
}

.bistro-parisien .menu-restaurant-info {
    font-size: 0.84em;
    font-family: var(--t-body-font);
    opacity: 0.6;
}

.bistro-parisien .menu-restaurant-info p {
    margin: 3px 0;
    letter-spacing: 0.02em;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .bistro-parisien .menu-header { margin-bottom: 36px; padding-bottom: 25.2px; }
.menu-pdf-render .bistro-parisien .menu-restaurant-name { margin-bottom: 7.2px; }
.menu-pdf-render .bistro-parisien .menu-category { margin-bottom: 32.4px; }
.menu-pdf-render .bistro-parisien .menu-category-name { margin-bottom: 3.6px; padding-bottom: 3.6px; }
.menu-pdf-render .bistro-parisien .menu-category-separator { margin-bottom: 19.8px; }
.menu-pdf-render .bistro-parisien .menu-item { margin-bottom: 14.4px; padding-top: 3.6px; padding-bottom: 3.6px; }
.menu-pdf-render .bistro-parisien .menu-item-description { margin-top: 2.7px; }
.menu-pdf-render .bistro-parisien .menu-footer { margin-top: 36px; padding-top: 21.6px; }
.menu-pdf-render .bistro-parisien { padding-top: 45px; padding-bottom: 45px; }

/* === trattoria-italiana/style.css === */
/* ========================================
   Template : Trattoria Italiana
   Terracotta/olive, Roboto Slab, pointillés
   ======================================== */

.menu-template.trattoria-italiana {
    --t-primary: var(--custom-primary, #8b4513);
    --t-secondary: var(--custom-secondary, #6b8e23);
    --t-bg: var(--custom-bg, #fefcf3);
    --t-text: var(--custom-text, #3e3028);
    --t-heading-font: var(--custom-heading-font, 'Roboto Slab', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    padding: 50px 45px;
    position: relative;
    box-shadow:
        inset 0 0 80px rgba(139, 69, 19, 0.04),
        0 2px 20px rgba(139, 69, 19, 0.08);
}

/* Warm Tuscan terracotta texture */
.trattoria-italiana .menu-texture-overlay {
    background:
        radial-gradient(ellipse at 30% 20%, rgba(139, 69, 19, 0.06) 0%, transparent 50%),
        radial-gradient(ellipse at 70% 70%, rgba(107, 142, 35, 0.04) 0%, transparent 45%),
        radial-gradient(ellipse at 50% 50%, rgba(139, 69, 19, 0.03) 0%, transparent 70%),
        repeating-linear-gradient(
            45deg,
            transparent,
            transparent 3px,
            rgba(139, 69, 19, 0.008) 3px,
            rgba(139, 69, 19, 0.008) 6px
        ),
        repeating-linear-gradient(
            -45deg,
            transparent,
            transparent 5px,
            rgba(107, 142, 35, 0.006) 5px,
            rgba(107, 142, 35, 0.006) 10px
        );
}

/* Olive green accent border */
.trattoria-italiana::before {
    content: '';
    position: absolute;
    inset: 10px;
    border: 1px solid rgba(107, 142, 35, 0.15);
    pointer-events: none;
    z-index: 0;
}

/* Header */
.trattoria-italiana .menu-header {
    text-align: center;
    margin-bottom: 16px;
    padding-bottom: 24px;
}

/* Italian flag line - taller and more prominent */
.trattoria-italiana .menu-flag-line {
    height: 6px;
    background: linear-gradient(to right, #009246 33%, #ffffff 33%, #ffffff 66%, #ce2b37 66%);
    margin-bottom: 28px;
    border-radius: 3px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}

.trattoria-italiana .menu-restaurant-logo {
    margin: 0 auto 14px;
}

.trattoria-italiana .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.4em;
    font-weight: 700;
    color: var(--t-primary);
    margin-bottom: 8px;
    text-shadow: 0 1px 2px rgba(139, 69, 19, 0.08);
}

.trattoria-italiana .menu-restaurant-subtitle {
    font-size: 0.98em;
    color: var(--t-secondary);
    font-style: italic;
    letter-spacing: 0.03em;
}

/* Categories */
.trattoria-italiana .menu-category {
    margin-bottom: 36px;
}

.trattoria-italiana .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.25em;
    font-weight: 700;
    color: var(--t-primary);
    text-transform: uppercase;
    letter-spacing: 0.1em;
    margin-bottom: 6px;
    text-align: center;
}

.trattoria-italiana .menu-category-desc {
    text-align: center;
    font-size: 0.84em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.6;
    margin-bottom: 16px;
}

.trattoria-italiana .menu-category-separator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    margin: 0 auto 20px;
}

.trattoria-italiana .menu-category-separator::before,
.trattoria-italiana .menu-category-separator::after {
    content: '';
    width: 45px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 30%,
        var(--t-secondary) 70%,
        transparent 100%
    );
    opacity: 0.4;
}

/* Items with more padding */
.trattoria-italiana .menu-item {
    margin-bottom: 14px;
    padding: 8px 6px;
    border-radius: 2px;
    transition: background 0.2s ease;
}

.trattoria-italiana .menu-item-header {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
}

.trattoria-italiana .menu-item-name {
    font-size: 0.97em;
    font-weight: 600;
    color: var(--t-text);
}

.trattoria-italiana .menu-item-dots {
    flex: 1;
    margin: 0 10px;
    border-bottom: 2px dotted var(--t-secondary);
    opacity: 0.3;
    margin-bottom: 4px;
}

.trattoria-italiana .menu-item-price {
    font-family: var(--t-heading-font);
    font-weight: 700;
    color: var(--t-primary);
    font-size: 0.95em;
}

.trattoria-italiana .menu-item-description {
    margin-top: 4px;
    font-size: 0.82em;
    padding-left: 0;
    opacity: 0.6;
}

/* Footer */
.trattoria-italiana .menu-footer {
    margin-top: 40px;
    text-align: center;
    padding-top: 6px;
}

.trattoria-italiana .menu-footer .menu-flag-line {
    margin-top: 18px;
    margin-bottom: 0;
}

.trattoria-italiana .menu-restaurant-info {
    font-size: 0.82em;
    opacity: 0.55;
}

.trattoria-italiana .menu-restaurant-info p {
    margin: 3px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .trattoria-italiana .menu-header { margin-bottom: 13.6px; padding-bottom: 20.4px; }
.menu-pdf-render .trattoria-italiana .menu-restaurant-name { margin-bottom: 6.8px; }
.menu-pdf-render .trattoria-italiana .menu-category { margin-bottom: 30.6px; }
.menu-pdf-render .trattoria-italiana .menu-category-name { margin-bottom: 5.1px; }
.menu-pdf-render .trattoria-italiana .menu-category-separator { margin-bottom: 17px; }
.menu-pdf-render .trattoria-italiana .menu-item { margin-bottom: 11.9px; padding-top: 6.8px; padding-bottom: 6.8px; }
.menu-pdf-render .trattoria-italiana .menu-item-description { margin-top: 3.4px; }
.menu-pdf-render .trattoria-italiana .menu-footer { margin-top: 34px; padding-top: 5.1px; }
.menu-pdf-render .trattoria-italiana { padding-top: 43px; padding-bottom: 43px; }

/* === brasserie-francaise/style.css === */
/* ========================================
   Template : Brasserie Française
   Navy/or, 2 colonnes, Art déco
   ======================================== */

.menu-template.brasserie-francaise {
    --t-primary: var(--custom-primary, #1b2a4a);
    --t-secondary: var(--custom-secondary, #d4af37);
    --t-bg: var(--custom-bg, #ffffff);
    --t-text: var(--custom-text, #333333);
    --t-heading-font: var(--custom-heading-font, 'Josefin Sans', sans-serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    padding: 50px 45px;
    position: relative;
}

/* Navy/cream subtle striped texture */
.brasserie-francaise .menu-texture-overlay {
    background:
        repeating-linear-gradient(
            90deg,
            transparent,
            transparent 4px,
            rgba(27, 42, 74, 0.012) 4px,
            rgba(27, 42, 74, 0.012) 8px
        ),
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 30px,
            rgba(212, 175, 55, 0.015) 30px,
            rgba(212, 175, 55, 0.015) 31px
        ),
        radial-gradient(ellipse at 50% 0%, rgba(212, 175, 55, 0.06) 0%, transparent 60%),
        radial-gradient(ellipse at 50% 100%, rgba(27, 42, 74, 0.04) 0%, transparent 50%);
}

/* Inner frame effect */
.brasserie-francaise::before {
    content: '';
    position: absolute;
    inset: 12px;
    border: 1px solid rgba(212, 175, 55, 0.2);
    pointer-events: none;
    z-index: 0;
}

.brasserie-francaise::after {
    content: '';
    position: absolute;
    inset: 15px;
    border: 1px solid rgba(27, 42, 74, 0.08);
    pointer-events: none;
    z-index: 0;
}

/* Header with Art Deco borders */
.brasserie-francaise .menu-header {
    text-align: center;
    margin-bottom: 40px;
    padding-bottom: 28px;
    border-top: 4px solid var(--t-secondary);
    border-bottom: 4px solid var(--t-primary);
    padding-top: 24px;
    position: relative;
}

.brasserie-francaise .menu-header::before {
    content: '';
    position: absolute;
    top: 6px;
    left: 0;
    right: 0;
    height: 1px;
    background: var(--t-secondary);
    opacity: 0.4;
}

.brasserie-francaise .menu-header::after {
    content: '';
    position: absolute;
    bottom: 6px;
    left: 0;
    right: 0;
    height: 1px;
    background: var(--t-primary);
    opacity: 0.25;
}

.brasserie-francaise .menu-header-line {
    height: 2px;
    background: var(--t-secondary);
    margin-bottom: 20px;
}

.brasserie-francaise .menu-restaurant-logo {
    margin: 0 auto 14px;
}

.brasserie-francaise .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.5em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    color: var(--t-primary);
    margin-bottom: 10px;
    text-shadow: 0 1px 2px rgba(27, 42, 74, 0.06);
}

.brasserie-francaise .menu-restaurant-subtitle {
    font-family: var(--t-heading-font);
    font-size: 0.88em;
    font-weight: 300;
    letter-spacing: 0.25em;
    text-transform: uppercase;
    color: var(--t-secondary);
}

/* Categories */
.brasserie-francaise .menu-category {
    margin-bottom: 32px;
}

.brasserie-francaise .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.05em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    color: var(--t-primary);
    text-align: center;
    margin-bottom: 6px;
}

.brasserie-francaise .menu-category-desc {
    text-align: center;
    font-size: 0.82em;
    font-style: italic;
    margin-bottom: 16px;
    color: var(--t-text);
    opacity: 0.6;
}

.brasserie-francaise .menu-category-separator {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-bottom: 20px;
}

.brasserie-francaise .menu-category-separator::before,
.brasserie-francaise .menu-category-separator::after {
    content: '';
    flex: 1;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 20%,
        var(--t-secondary) 80%,
        transparent 100%
    );
    opacity: 0.5;
}

.brasserie-francaise .menu-category-separator-diamond {
    width: 8px;
    height: 8px;
    background: var(--t-secondary);
    transform: rotate(45deg);
}

/* Items with refined gold borders */
.brasserie-francaise .menu-item {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    padding: 10px 0;
    border-bottom: 1px solid rgba(212, 175, 55, 0.15);
}

.brasserie-francaise .menu-item:last-child {
    border-bottom: none;
}

.brasserie-francaise .menu-item-content {
    flex: 1;
    padding-right: 18px;
}

.brasserie-francaise .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 0.92em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.06em;
}

.brasserie-francaise .menu-item-description {
    font-size: 0.8em;
    font-style: italic;
    margin-top: 3px;
    opacity: 0.65;
}

.brasserie-francaise .menu-item-price {
    font-family: var(--t-heading-font);
    font-weight: 700;
    color: var(--t-secondary);
    font-size: 0.97em;
}

/* Footer */
.brasserie-francaise .menu-footer {
    margin-top: 40px;
    padding-top: 22px;
    border-top: 4px solid var(--t-primary);
    text-align: center;
    position: relative;
}

.brasserie-francaise .menu-footer::before {
    content: '';
    position: absolute;
    top: 6px;
    left: 0;
    right: 0;
    height: 1px;
    background: var(--t-primary);
    opacity: 0.25;
}

.brasserie-francaise .menu-restaurant-info {
    font-family: var(--t-heading-font);
    font-size: 0.78em;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    opacity: 0.6;
}

.brasserie-francaise .menu-restaurant-info p {
    margin: 4px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .brasserie-francaise .menu-header { margin-bottom: 32px; padding-bottom: 22.4px; }
.menu-pdf-render .brasserie-francaise .menu-restaurant-name { margin-bottom: 8px; }
.menu-pdf-render .brasserie-francaise .menu-restaurant-subtitle { margin-bottom: 12.8px; }
.menu-pdf-render .brasserie-francaise .menu-category { margin-bottom: 25.6px; }
.menu-pdf-render .brasserie-francaise .menu-category-name { margin-bottom: 4.8px; }
.menu-pdf-render .brasserie-francaise .menu-category-separator { margin-bottom: 16px; }
.menu-pdf-render .brasserie-francaise .menu-item { padding-top: 8px; padding-bottom: 8px; }
.menu-pdf-render .brasserie-francaise .menu-item-description { margin-top: 2.4px; }
.menu-pdf-render .brasserie-francaise .menu-footer { margin-top: 32px; padding-top: 17.6px; }
.menu-pdf-render .brasserie-francaise { padding-top: 40px; padding-bottom: 40px; }

/* === gastronomique/style.css === */
/* ========================================
   Template : Gastronomique
   Fond noir, argent/blanc, ultra minimal, luxe
   Dark marble texture, dramatic spacing, glow
   ======================================== */

.menu-template.gastronomique {
    --t-primary: var(--custom-primary, #e8e0d0);
    --t-secondary: var(--custom-secondary, #a89060);
    --t-bg: var(--custom-bg, #0a0a0a);
    --t-text: var(--custom-text, #c8c0b0);
    --t-heading-font: var(--custom-heading-font, 'Cormorant Garamond', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    color: var(--t-text);
    padding: 70px 60px;
    text-align: center;
    position: relative;
}

/* Dark marble / stone texture */
.gastronomique .menu-texture-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background-image:
        radial-gradient(ellipse at 20% 30%, rgba(168,144,96,0.04) 0%, transparent 40%),
        radial-gradient(ellipse at 80% 70%, rgba(168,144,96,0.03) 0%, transparent 35%),
        radial-gradient(circle at 50% 0%, rgba(232,224,208,0.02) 0%, transparent 30%),
        radial-gradient(ellipse at 60% 40%, rgba(255,255,255,0.012) 0%, transparent 50%),
        radial-gradient(ellipse at 30% 80%, rgba(255,255,255,0.008) 0%, transparent 45%),
        linear-gradient(180deg, rgba(255,255,255,0.015) 0%, transparent 20%, transparent 80%, rgba(0,0,0,0.2) 100%);
}

/* Subtle gradient overlay for depth */
.gastronomique::before {
    content: '';
    position: absolute;
    inset: 0;
    background: radial-gradient(ellipse at 50% 30%, rgba(168,144,96,0.03) 0%, transparent 60%);
    pointer-events: none;
}

.gastronomique .menu-header {
    margin-bottom: 65px;
    position: relative;
}

/* Subtle glow behind header */
.gastronomique .menu-header::after {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 80%;
    height: 120%;
    background: radial-gradient(ellipse, rgba(168,144,96,0.04) 0%, transparent 70%);
    pointer-events: none;
    z-index: 0;
}

.gastronomique .menu-header > * {
    position: relative;
    z-index: 1;
}

.gastronomique .menu-restaurant-logo {
    margin: 0 auto 22px;
    filter: brightness(1.2);
}

.gastronomique .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3em;
    font-weight: 400;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin-bottom: 12px;
    text-shadow: 0 0 30px rgba(168,144,96,0.15), 0 0 60px rgba(168,144,96,0.05);
}

.gastronomique .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.82em;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--t-secondary);
    font-weight: 300;
}

.gastronomique .menu-header-deco {
    margin-top: 20px;
    color: var(--t-secondary);
    opacity: 0.5;
}

.gastronomique .menu-category {
    margin-bottom: 50px;
}

.gastronomique .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.15em;
    font-weight: 500;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--t-secondary);
    margin-bottom: 28px;
}

.gastronomique .menu-category-desc {
    font-size: 0.8em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.45;
    margin-bottom: 22px;
    margin-top: -20px;
}

.gastronomique .menu-category-separator {
    width: 50px;
    height: 1px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
    margin: 0 auto 24px;
    opacity: 0.5;
}

.gastronomique .menu-item {
    margin-bottom: 28px;
    padding: 0 35px;
}

.gastronomique .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 1.2em;
    font-weight: 500;
    color: var(--t-primary);
    display: block;
    margin-bottom: 5px;
    letter-spacing: 0.04em;
}

.gastronomique .menu-item-description {
    font-size: 0.8em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.55;
    margin-bottom: 7px;
    line-height: 1.5;
}

.gastronomique .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 0.84em;
    font-weight: 300;
    color: var(--t-secondary);
    letter-spacing: 0.12em;
}

.gastronomique .menu-footer {
    margin-top: 65px;
}

.gastronomique .menu-footer-separator {
    width: 30px;
    height: 1px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
    margin: 0 auto 22px;
    opacity: 0.35;
}

.gastronomique .menu-restaurant-info {
    font-size: 0.74em;
    color: var(--t-text);
    opacity: 0.35;
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.gastronomique .menu-restaurant-info p {
    margin: 4px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .gastronomique .menu-header { margin-bottom: 42.3px; }
.menu-pdf-render .gastronomique .menu-restaurant-name { margin-bottom: 7.8px; }
.menu-pdf-render .gastronomique .menu-restaurant-subtitle { margin-bottom: 10.4px; }
.menu-pdf-render .gastronomique .menu-header-deco { margin-top: 13px; }
.menu-pdf-render .gastronomique .menu-category { margin-bottom: 32.5px; }
.menu-pdf-render .gastronomique .menu-category-name { margin-bottom: 18.2px; }
.menu-pdf-render .gastronomique .menu-item { margin-bottom: 18.2px; }
.menu-pdf-render .gastronomique .menu-footer { margin-top: 42.3px; }
.menu-pdf-render .gastronomique .menu-footer-separator { margin-bottom: 14.3px; }
.menu-pdf-render .gastronomique { padding-top: 46px; padding-bottom: 46px; }

/* === ardoise/style.css === */
/* ========================================
   Template : L'Ardoise
   Fond tableau noir, craie blanche/pastel
   Realistic chalkboard texture, chalk effects
   ======================================== */

.menu-template.ardoise {
    --t-primary: var(--custom-primary, #f5f0e0);
    --t-secondary: var(--custom-secondary, #e8c170);
    --t-bg: var(--custom-bg, #2d4a3e);
    --t-text: var(--custom-text, #d4cfc0);
    --t-heading-font: var(--custom-heading-font, 'Dancing Script', cursive);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    color: var(--t-text);
    padding: 55px 45px;
    text-align: center;
    position: relative;
    box-shadow:
        inset 0 0 80px rgba(0,0,0,0.25),
        inset 0 0 150px rgba(0,0,0,0.1),
        0 4px 20px rgba(0,0,0,0.3);
}

/* Realistic chalkboard texture: scratches, wear, dust */
.ardoise .menu-texture-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background-image:
        /* Subtle scratch marks */
        repeating-linear-gradient(
            87deg,
            transparent,
            transparent 8px,
            rgba(255,255,255,0.006) 8px,
            rgba(255,255,255,0.006) 9px
        ),
        repeating-linear-gradient(
            93deg,
            transparent,
            transparent 12px,
            rgba(255,255,255,0.004) 12px,
            rgba(255,255,255,0.004) 13px
        ),
        /* Wear patterns */
        repeating-linear-gradient(
            175deg,
            transparent,
            transparent 15px,
            rgba(255,255,255,0.005) 15px,
            rgba(255,255,255,0.005) 16px
        ),
        /* Light spots from chalk dust */
        radial-gradient(ellipse at 15% 25%, rgba(255,255,255,0.025) 0%, transparent 40%),
        radial-gradient(ellipse at 85% 40%, rgba(255,255,255,0.02) 0%, transparent 35%),
        radial-gradient(ellipse at 50% 75%, rgba(255,255,255,0.015) 0%, transparent 45%),
        /* Edge darkening */
        radial-gradient(ellipse at 50% 50%, transparent 40%, rgba(0,0,0,0.15) 100%),
        linear-gradient(180deg, rgba(0,0,0,0.08) 0%, transparent 15%, transparent 85%, rgba(0,0,0,0.12) 100%);
}

/* Wooden frame effect */
.ardoise::before {
    content: '';
    position: absolute;
    inset: 8px;
    border: 2px solid rgba(255,255,255,0.06);
    pointer-events: none;
    border-radius: 1px;
}

.ardoise .menu-header {
    margin-bottom: 40px;
}

.ardoise .menu-restaurant-logo {
    margin: 0 auto 14px;
    filter: brightness(1.3);
}

.ardoise .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3em;
    font-weight: 700;
    color: var(--t-primary);
    margin-bottom: 8px;
    text-shadow:
        0 0 8px rgba(245,240,224,0.15),
        1px 1px 2px rgba(0,0,0,0.4),
        -1px -1px 0 rgba(0,0,0,0.1);
    letter-spacing: 0.02em;
}

.ardoise .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.92em;
    color: var(--t-secondary);
    letter-spacing: 0.12em;
    text-shadow: 0 0 6px rgba(232,193,112,0.1);
}

.ardoise .menu-header-deco {
    margin-top: 18px;
    color: var(--t-secondary);
    opacity: 0.5;
}

.ardoise .menu-category {
    margin-bottom: 36px;
}

.ardoise .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.9em;
    font-weight: 700;
    color: var(--t-secondary);
    margin-bottom: 6px;
    text-shadow:
        0 0 10px rgba(232,193,112,0.12),
        1px 1px 2px rgba(0,0,0,0.3);
    display: inline-block;
    padding-bottom: 6px;
    border-bottom: 2px solid rgba(232,193,112,0.25);
    border-image: linear-gradient(
        to right,
        transparent 0%,
        rgba(232,193,112,0.35) 20%,
        rgba(232,193,112,0.4) 50%,
        rgba(232,193,112,0.35) 80%,
        transparent 100%
    ) 1;
}

.ardoise .menu-category-desc {
    font-size: 0.84em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.45;
    margin-bottom: 16px;
    margin-top: 6px;
}

.ardoise .menu-category-separator {
    width: 70px;
    height: 1px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
    margin: 0 auto 20px;
    opacity: 0.3;
}

.ardoise .menu-item {
    margin-bottom: 16px;
    padding: 2px 8px;
}

.ardoise .menu-item-header {
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 12px;
}

.ardoise .menu-item-name {
    font-size: 1.02em;
    font-weight: 600;
    color: var(--t-primary);
    text-shadow: 0 0 4px rgba(245,240,224,0.08);
}

.ardoise .menu-item-dots {
    flex: 1;
    border-bottom: 1px dashed var(--t-text);
    opacity: 0.15;
    min-width: 20px;
    margin-bottom: 4px;
}

.ardoise .menu-item-price {
    font-weight: 700;
    color: var(--t-secondary);
    font-size: 0.98em;
    padding: 3px 12px;
    border: 1.5px solid var(--t-secondary);
    border-radius: 14px;
    opacity: 0.75;
    text-shadow: 0 0 4px rgba(232,193,112,0.1);
    background: rgba(232,193,112,0.04);
}

.ardoise .menu-item-description {
    font-size: 0.82em;
    margin-top: 3px;
    opacity: 0.45;
    font-style: italic;
}

.ardoise .menu-footer {
    margin-top: 40px;
    padding-top: 18px;
    border-top: 1px dashed rgba(255,255,255,0.1);
}

.ardoise .menu-footer-deco {
    color: var(--t-secondary);
    opacity: 0.4;
    margin-bottom: 10px;
}

.ardoise .menu-restaurant-info {
    font-size: 0.8em;
    opacity: 0.35;
    letter-spacing: 0.03em;
}

.ardoise .menu-restaurant-info p {
    margin: 3px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .ardoise .menu-header { margin-bottom: 36px; }
.menu-pdf-render .ardoise .menu-restaurant-name { margin-bottom: 7.2px; }
.menu-pdf-render .ardoise .menu-restaurant-subtitle { margin-bottom: 14.4px; }
.menu-pdf-render .ardoise .menu-header-deco { margin-top: 16.2px; }
.menu-pdf-render .ardoise .menu-category { margin-bottom: 32.4px; }
.menu-pdf-render .ardoise .menu-category-name { margin-bottom: 5.4px; padding-bottom: 5.4px; }
.menu-pdf-render .ardoise .menu-category-separator { margin-bottom: 18px; }
.menu-pdf-render .ardoise .menu-item { margin-bottom: 14.4px; padding-top: 1.8px; padding-bottom: 1.8px; }
.menu-pdf-render .ardoise .menu-item-description { margin-top: 2.7px; }
.menu-pdf-render .ardoise .menu-item-price { padding-top: 2.7px; }
.menu-pdf-render .ardoise .menu-footer { margin-top: 36px; padding-top: 16.2px; }
.menu-pdf-render .ardoise { padding-top: 50px; padding-bottom: 50px; }

/* === zen-asiatique/style.css === */
/* ========================================
   Template : Zen Asiatique
   Neutres, bambou vert, minimalisme japonais
   ======================================== */

.menu-template.zen-asiatique {
    --t-primary: var(--custom-primary, #2d2d2d);
    --t-secondary: var(--custom-secondary, #8b9a6b);
    --t-bg: var(--custom-bg, #f9f7f2);
    --t-text: var(--custom-text, #4a4a4a);
    --t-heading-font: var(--custom-heading-font, 'Noto Serif JP', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    padding: 60px 50px;
    position: relative;
    overflow: hidden;
}

/* Washi paper texture — very faint fiber pattern + ink wash gradient */
.zen-asiatique .menu-texture-overlay {
    background-image:
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 3px,
            rgba(139, 154, 107, 0.01) 3px,
            transparent 4px
        ),
        repeating-linear-gradient(
            90deg,
            transparent,
            transparent 5px,
            rgba(139, 154, 107, 0.008) 5px,
            transparent 6px
        ),
        repeating-linear-gradient(
            30deg,
            transparent,
            transparent 8px,
            rgba(45, 45, 45, 0.006) 8px,
            transparent 9px
        ),
        radial-gradient(ellipse at 70% 20%, rgba(139, 154, 107, 0.04) 0%, transparent 50%),
        radial-gradient(ellipse at 30% 80%, rgba(45, 45, 45, 0.02) 0%, transparent 40%);
    opacity: 1;
    mix-blend-mode: multiply;
}

/* Subtle ink wash gradient in background */
.zen-asiatique::before {
    content: '';
    position: absolute;
    inset: 0;
    background:
        radial-gradient(ellipse at 80% 10%, rgba(139, 154, 107, 0.04) 0%, transparent 40%),
        radial-gradient(ellipse at 20% 90%, rgba(45, 45, 45, 0.025) 0%, transparent 35%);
    pointer-events: none;
    z-index: 0;
}

/* Header */
.zen-asiatique .menu-header {
    text-align: center;
    margin-bottom: 55px;
}

/* Vertical header line — taller and thinner */
.zen-asiatique .menu-header-line {
    width: 0.5px;
    height: 50px;
    background: var(--t-secondary);
    margin: 0 auto 24px;
    opacity: 0.5;
}

/* Bamboo SVG decoration */
.zen-asiatique .menu-header-deco {
    margin-bottom: 20px;
    opacity: 0.4;
}

.zen-asiatique .menu-header-deco .menu-svg-ornament {
    color: var(--t-secondary);
    opacity: 0.6;
}

.zen-asiatique .menu-restaurant-logo {
    margin: 0 auto 18px;
}

.zen-asiatique .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2em;
    font-weight: 500;
    letter-spacing: 0.25em;
    color: var(--t-primary);
    margin-bottom: 12px;
}

.zen-asiatique .menu-restaurant-subtitle {
    font-size: 0.8em;
    letter-spacing: 0.18em;
    color: var(--t-secondary);
    font-weight: 300;
}

/* SVG ornaments */
.zen-asiatique .menu-svg-ornament {
    color: var(--t-secondary);
    opacity: 0.4;
}

/* Categories — more breathing room */
.zen-asiatique .menu-category {
    margin-bottom: 44px;
}

/* Category header lines — more refined */
.zen-asiatique .menu-category-header {
    display: flex;
    align-items: center;
    gap: 20px;
    margin-bottom: 20px;
}

/* height: 0.5px + un degrade = PDF impossible a generer.
   html2canvas peint chaque degrade dans un canvas aux dimensions ARRONDIES de
   l'element : 0,5px arrondit a 0, et `createPattern` leve
   « The image argument is a canvas element with a width or height of 0 ».
   La generation echouait donc entierement sur ce modele. 1px se voit pareil. */
.zen-asiatique .menu-category-line {
    flex: 1;
    height: 1px;
    background: linear-gradient(
        to right,
        transparent,
        rgba(139, 154, 107, 0.3),
        rgba(139, 154, 107, 0.15)
    );
    opacity: 1;
}

.zen-asiatique .menu-category-line:last-child {
    background: linear-gradient(
        to left,
        transparent,
        rgba(139, 154, 107, 0.3),
        rgba(139, 154, 107, 0.15)
    );
}

.zen-asiatique .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.92em;
    font-weight: 500;
    letter-spacing: 0.25em;
    text-transform: uppercase;
    color: var(--t-primary);
    white-space: nowrap;
}

.zen-asiatique .menu-category-desc {
    font-size: 0.78em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.45;
    margin-bottom: 16px;
    margin-top: -12px;
    text-align: center;
}

/* Items — clean minimal borders, more breathing room */
.zen-asiatique .menu-item {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    padding: 12px 0;
    border-bottom: 0.5px solid rgba(139, 154, 107, 0.1);
}

.zen-asiatique .menu-item:last-child {
    border-bottom: none;
}

.zen-asiatique .menu-item-content {
    flex: 1;
    padding-right: 24px;
}

.zen-asiatique .menu-item-name {
    font-size: 0.94em;
    font-weight: 500;
    color: var(--t-primary);
    letter-spacing: 0.02em;
}

.zen-asiatique .menu-item-description {
    font-size: 0.78em;
    color: var(--t-text);
    opacity: 0.5;
    font-style: normal;
    margin-top: 4px;
    line-height: 1.6;
}

.zen-asiatique .menu-item-price {
    font-size: 0.88em;
    font-weight: 500;
    color: var(--t-secondary);
    letter-spacing: 0.03em;
}

/* Footer */
.zen-asiatique .menu-footer {
    margin-top: 55px;
    text-align: center;
}

.zen-asiatique .menu-footer-line {
    width: 0.5px;
    height: 35px;
    background: var(--t-secondary);
    margin: 0 auto 18px;
    opacity: 0.4;
}

.zen-asiatique .menu-restaurant-info {
    font-size: 0.74em;
    color: var(--t-text);
    opacity: 0.4;
    letter-spacing: 0.06em;
}

.zen-asiatique .menu-restaurant-info p {
    margin: 4px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .zen-asiatique .menu-header { margin-bottom: 46.8px; }
.menu-pdf-render .zen-asiatique .menu-restaurant-name { margin-bottom: 10.2px; }
.menu-pdf-render .zen-asiatique .menu-restaurant-subtitle { margin-bottom: 13.6px; }
.menu-pdf-render .zen-asiatique .menu-header-deco { margin-bottom: 17px; }
.menu-pdf-render .zen-asiatique .menu-category { margin-bottom: 37.4px; }
.menu-pdf-render .zen-asiatique .menu-item { padding-top: 10.2px; padding-bottom: 10.2px; }
.menu-pdf-render .zen-asiatique .menu-item-description { margin-top: 3.4px; }
.menu-pdf-render .zen-asiatique .menu-footer { margin-top: 46.8px; }
.menu-pdf-render .zen-asiatique { padding-top: 51px; padding-bottom: 51px; }

/* === provencal/style.css === */
/* ========================================
   Template : Provençal
   Lavande/tournesol, méditerranéen, chaleureux
   ======================================== */

.menu-template.provencal {
    --t-primary: var(--custom-primary, #5b4a8a);
    --t-secondary: var(--custom-secondary, #d4a843);
    --t-bg: var(--custom-bg, #fdf8f0);
    --t-text: var(--custom-text, #4a3f35);
    --t-heading-font: var(--custom-heading-font, 'Libre Baskerville', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    padding: 50px 45px;
    text-align: center;
    position: relative;
    box-shadow:
        0 0 30px rgba(212, 168, 67, 0.12),
        0 0 60px rgba(212, 168, 67, 0.06);
}

/* Sun-bleached parchment texture */
.provencal .menu-texture-overlay {
    background:
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 2px,
            rgba(212, 168, 67, 0.015) 2px,
            rgba(212, 168, 67, 0.015) 4px
        ),
        repeating-linear-gradient(
            90deg,
            transparent,
            transparent 3px,
            rgba(91, 74, 138, 0.01) 3px,
            rgba(91, 74, 138, 0.01) 6px
        ),
        radial-gradient(ellipse at 20% 50%, rgba(212, 168, 67, 0.08) 0%, transparent 70%),
        radial-gradient(ellipse at 80% 30%, rgba(91, 74, 138, 0.05) 0%, transparent 60%),
        radial-gradient(ellipse at 50% 80%, rgba(212, 168, 67, 0.06) 0%, transparent 50%);
}

/* Ornate corner decorations with inner border lines */
.provencal .menu-corner {
    position: absolute;
    width: 70px;
    height: 70px;
    border-color: var(--t-secondary);
    opacity: 0.35;
}

.provencal .menu-corner--tl {
    top: 14px;
    left: 14px;
    border-top: 3px solid;
    border-left: 3px solid;
    box-shadow: inset -8px -8px 0 -6px var(--t-secondary);
}

.provencal .menu-corner--tr {
    top: 14px;
    right: 14px;
    border-top: 3px solid;
    border-right: 3px solid;
    box-shadow: inset 8px -8px 0 -6px var(--t-secondary);
}

.provencal .menu-corner--bl {
    bottom: 14px;
    left: 14px;
    border-bottom: 3px solid;
    border-left: 3px solid;
    box-shadow: inset -8px 8px 0 -6px var(--t-secondary);
}

.provencal .menu-corner--br {
    bottom: 14px;
    right: 14px;
    border-bottom: 3px solid;
    border-right: 3px solid;
    box-shadow: inset 8px 8px 0 -6px var(--t-secondary);
}

/* Header */
.provencal .menu-header {
    margin-bottom: 40px;
    padding-bottom: 28px;
}

.provencal .menu-restaurant-logo {
    margin: 0 auto 14px;
}

.provencal .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.4em;
    font-weight: 700;
    color: var(--t-primary);
    margin-bottom: 10px;
    text-shadow: 0 1px 2px rgba(91, 74, 138, 0.08);
}

.provencal .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.95em;
    color: var(--t-secondary);
    font-style: italic;
    letter-spacing: 0.03em;
}

.provencal .menu-header-deco {
    margin-top: 20px;
    color: var(--t-secondary);
    font-size: 0.9em;
    letter-spacing: 0.3em;
}

/* Categories */
.provencal .menu-category {
    margin-bottom: 34px;
}

.provencal .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.3em;
    font-weight: 700;
    color: var(--t-primary);
    margin-bottom: 6px;
    padding: 4px 20px;
    display: inline-block;
    background: linear-gradient(
        135deg,
        rgba(91, 74, 138, 0.07) 0%,
        rgba(91, 74, 138, 0.12) 50%,
        rgba(91, 74, 138, 0.07) 100%
    );
    border-radius: 3px;
}

.provencal .menu-category-desc {
    font-size: 0.84em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.6;
    margin-bottom: 16px;
}

.provencal .menu-category-separator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 14px;
    margin-bottom: 18px;
}

.provencal .menu-category-separator-leaf {
    color: var(--t-secondary);
    font-size: 0.8em;
}

.provencal .menu-category-separator-line {
    width: 55px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 30%,
        var(--t-secondary) 70%,
        transparent 100%
    );
    opacity: 0.45;
}

/* Items */
.provencal .menu-item {
    margin-bottom: 16px;
    padding: 2px 0;
}

.provencal .menu-item-header {
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 10px;
}

.provencal .menu-item-name {
    font-size: 0.97em;
    font-weight: 600;
    color: var(--t-text);
}

.provencal .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted var(--t-secondary);
    opacity: 0.35;
    min-width: 15px;
    margin-bottom: 4px;
}

.provencal .menu-item-price {
    font-weight: 700;
    color: var(--t-primary);
    font-size: 0.95em;
}

.provencal .menu-item-description {
    font-size: 0.82em;
    margin-top: 3px;
    opacity: 0.65;
}

/* Footer */
.provencal .menu-footer {
    margin-top: 40px;
    padding-top: 22px;
    border-top: 1px solid rgba(91, 74, 138, 0.1);
}

.provencal .menu-restaurant-info {
    font-size: 0.82em;
    opacity: 0.5;
    color: var(--t-primary);
}

.provencal .menu-restaurant-info p {
    margin: 3px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .provencal .menu-header { margin-bottom: 38px; padding-bottom: 26.6px; }
.menu-pdf-render .provencal .menu-restaurant-name { margin-bottom: 9.5px; }
.menu-pdf-render .provencal .menu-restaurant-subtitle { margin-bottom: 15.2px; }
.menu-pdf-render .provencal .menu-header-deco { margin-top: 19px; }
.menu-pdf-render .provencal .menu-category { margin-bottom: 32.3px; }
.menu-pdf-render .provencal .menu-category-name { margin-bottom: 5.7px; padding-top: 3.8px; padding-bottom: 3.8px; }
.menu-pdf-render .provencal .menu-category-separator { margin-bottom: 17.1px; }
.menu-pdf-render .provencal .menu-item { margin-bottom: 15.2px; padding-top: 1.9px; padding-bottom: 1.9px; }
.menu-pdf-render .provencal .menu-item-description { margin-top: 2.8px; }
.menu-pdf-render .provencal .menu-footer { margin-top: 38px; padding-top: 20.9px; }
.menu-pdf-render .provencal { padding-top: 48px; padding-bottom: 48px; }

/* === wine-bar/style.css === */
/* ========================================
   Template : Wine Bar
   Bordeaux/violet profond, élégant, sombre
   ======================================== */

.menu-template.wine-bar {
    --t-primary: var(--custom-primary, #e8d5b5);
    --t-secondary: var(--custom-secondary, #9b4d6a);
    --t-bg: var(--custom-bg, #1a0f1e);
    --t-text: var(--custom-text, #c0a88a);
    --t-heading-font: var(--custom-heading-font, 'Cormorant Garamond', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    color: var(--t-text);
    padding: 60px 50px;
    text-align: center;
    position: relative;
    overflow: hidden;
}

/* Rich burgundy/velvet texture + dramatic top gradient */
.wine-bar::before {
    content: '';
    position: absolute;
    inset: 0;
    background:
        linear-gradient(180deg, rgba(155, 77, 106, 0.12) 0%, rgba(155, 77, 106, 0.03) 25%, transparent 50%),
        radial-gradient(ellipse at 50% 0%, rgba(155, 77, 106, 0.08) 0%, transparent 60%),
        radial-gradient(ellipse at 30% 80%, rgba(100, 40, 70, 0.05) 0%, transparent 40%);
    pointer-events: none;
    z-index: 0;
}

/* Velvet fabric texture */
.wine-bar .menu-texture-overlay {
    background-image:
        repeating-linear-gradient(
            45deg,
            transparent,
            transparent 1px,
            rgba(155, 77, 106, 0.012) 1px,
            rgba(155, 77, 106, 0.012) 2px
        ),
        repeating-linear-gradient(
            -45deg,
            transparent,
            transparent 1px,
            rgba(232, 213, 181, 0.008) 1px,
            rgba(232, 213, 181, 0.008) 2px
        );
    opacity: 1;
    mix-blend-mode: normal;
}

/* Header */
.wine-bar .menu-header {
    margin-bottom: 50px;
}

/* Wine glass SVG icon styling */
.wine-bar .menu-header-icon {
    font-size: 2.2em;
    margin-bottom: 18px;
    opacity: 0.5;
    color: var(--t-secondary);
    filter: drop-shadow(0 0 10px rgba(155, 77, 106, 0.3));
}

.wine-bar .menu-header-icon .menu-svg-ornament {
    color: var(--t-secondary);
}

.wine-bar .menu-restaurant-logo {
    margin: 0 auto 14px;
    filter: brightness(1.2) drop-shadow(0 2px 8px rgba(232, 213, 181, 0.1));
}

/* Restaurant name — warm amber glow */
.wine-bar .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.8em;
    font-weight: 600;
    letter-spacing: 0.12em;
    color: var(--t-primary);
    margin-bottom: 10px;
    text-shadow:
        0 0 15px rgba(232, 213, 181, 0.15),
        0 0 40px rgba(200, 160, 100, 0.08);
}

.wine-bar .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.82em;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--t-secondary);
    font-weight: 300;
    text-shadow: 0 0 12px rgba(155, 77, 106, 0.1);
}

/* Header separator — gold/bronze accent */
.wine-bar .menu-header-separator {
    width: 90px;
    height: 1px;
    background: linear-gradient(to right, transparent, rgba(232, 213, 181, 0.4), var(--t-secondary), rgba(232, 213, 181, 0.4), transparent);
    margin: 24px auto 0;
}

/* SVG ornaments */
.wine-bar .menu-svg-ornament {
    color: var(--t-secondary);
    opacity: 0.5;
}

/* Categories */
.wine-bar .menu-category {
    margin-bottom: 42px;
}

/* Category name — wine-stain inspired underline */
.wine-bar .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.25em;
    font-weight: 600;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--t-secondary);
    margin-bottom: 22px;
    padding-bottom: 12px;
    display: inline-block;
    border-bottom: 2px solid transparent;
    background-image:
        linear-gradient(var(--t-bg), var(--t-bg)),
        radial-gradient(ellipse at 20% 50%, var(--t-secondary) 0%, transparent 70%),
        radial-gradient(ellipse at 80% 50%, var(--t-secondary) 0%, transparent 70%),
        radial-gradient(ellipse at 50% 50%, rgba(155, 77, 106, 0.8) 0%, transparent 60%);
    background-origin: padding-box, border-box, border-box, border-box;
    background-clip: padding-box, border-box, border-box, border-box;
}

.wine-bar .menu-category-desc {
    font-size: 0.78em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.45;
    margin-bottom: 18px;
    margin-top: -14px;
}

/* Items — richer spacing */
.wine-bar .menu-item {
    margin-bottom: 20px;
    padding: 0 24px;
}

.wine-bar .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 1.12em;
    font-weight: 600;
    color: var(--t-primary);
    display: block;
    margin-bottom: 4px;
    letter-spacing: 0.02em;
}

.wine-bar .menu-item-description {
    font-size: 0.78em;
    color: var(--t-text);
    opacity: 0.45;
    font-style: italic;
    margin-bottom: 5px;
    line-height: 1.6;
}

.wine-bar .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 0.88em;
    font-weight: 400;
    color: var(--t-secondary);
    letter-spacing: 0.05em;
}

/* Footer */
.wine-bar .menu-footer {
    margin-top: 50px;
}

.wine-bar .menu-footer-separator {
    width: 90px;
    height: 1px;
    background: linear-gradient(to right, transparent, rgba(232, 213, 181, 0.3), var(--t-secondary), rgba(232, 213, 181, 0.3), transparent);
    margin: 0 auto 22px;
}

.wine-bar .menu-restaurant-info {
    font-size: 0.72em;
    color: var(--t-text);
    opacity: 0.28;
    letter-spacing: 0.12em;
}

.wine-bar .menu-restaurant-info p {
    margin: 4px 0;
}

/* Flags override for dark bg */

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .wine-bar .menu-header { margin-bottom: 32.5px; }
.menu-pdf-render .wine-bar .menu-restaurant-name { margin-bottom: 6.5px; }
.menu-pdf-render .wine-bar .menu-restaurant-subtitle { margin-bottom: 10.4px; }
.menu-pdf-render .wine-bar .menu-category { margin-bottom: 27.3px; }
.menu-pdf-render .wine-bar .menu-category-name { margin-bottom: 14.3px; padding-bottom: 7.8px; }
.menu-pdf-render .wine-bar .menu-item { margin-bottom: 13px; }
.menu-pdf-render .wine-bar .menu-footer { margin-top: 32.5px; }
.menu-pdf-render .wine-bar .menu-footer-separator { margin-bottom: 14.3px; }
.menu-pdf-render .wine-bar { padding-top: 39px; padding-bottom: 39px; }

/* === art-deco/style.css === */
/* ========================================
   Template : Art Déco
   Géométrique, or sur noir, lignes épurées, 1920s
   Deep navy with gold-thread pattern, elaborate borders
   ======================================== */

.menu-template.art-deco {
    --t-primary: var(--custom-primary, #d4af37);
    --t-secondary: var(--custom-secondary, #8b7355);
    --t-bg: var(--custom-bg, #1a1a2e);
    --t-text: var(--custom-text, #e8e0d0);
    --t-heading-font: var(--custom-heading-font, 'Josefin Sans', sans-serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 55px 50px;
    position: relative;
}

/* Deep navy texture with gold-thread pattern */
.art-deco .menu-texture-overlay {
    position: absolute;
    inset: 0;
    pointer-events: none;
    background-image:
        /* Gold thread diagonal lines */
        repeating-linear-gradient(
            45deg,
            transparent,
            transparent 20px,
            rgba(212,175,55,0.015) 20px,
            rgba(212,175,55,0.015) 21px
        ),
        repeating-linear-gradient(
            -45deg,
            transparent,
            transparent 20px,
            rgba(212,175,55,0.01) 20px,
            rgba(212,175,55,0.01) 21px
        ),
        /* Subtle fabric texture */
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 3px,
            rgba(255,255,255,0.005) 3px,
            rgba(255,255,255,0.005) 4px
        ),
        /* Radial highlight behind header area */
        radial-gradient(ellipse at 50% 20%, rgba(212,175,55,0.04) 0%, transparent 50%),
        /* Corner vignette */
        radial-gradient(ellipse at 50% 50%, transparent 50%, rgba(0,0,0,0.15) 100%);
}

/* Triple-line geometric border */
.art-deco .menu-deco-border {
    position: absolute;
    inset: 10px;
    border: 1px solid var(--t-primary);
    pointer-events: none;
    opacity: 0.25;
}

.art-deco .menu-deco-border::before {
    content: '';
    position: absolute;
    inset: 5px;
    border: 1px solid var(--t-primary);
    opacity: 0.6;
}

.art-deco .menu-deco-border::after {
    content: '';
    position: absolute;
    inset: 10px;
    border: 1px solid var(--t-primary);
    opacity: 0.35;
}

/* Corner ornaments on border */
.art-deco .menu-deco-border .corner-tl,
.art-deco .menu-deco-border .corner-tr,
.art-deco .menu-deco-border .corner-bl,
.art-deco .menu-deco-border .corner-br {
    position: absolute;
    width: 20px;
    height: 20px;
    border-color: var(--t-primary);
    border-style: solid;
    opacity: 0.5;
}

/* Header */
.art-deco .menu-header {
    margin-bottom: 45px;
    padding-bottom: 32px;
    position: relative;
}

/* Radial glow behind header */
.art-deco .menu-header::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    width: 90%;
    height: 140%;
    background: radial-gradient(ellipse, rgba(212,175,55,0.035) 0%, transparent 65%);
    pointer-events: none;
    z-index: 0;
}

.art-deco .menu-header > * {
    position: relative;
    z-index: 1;
}

.art-deco .menu-header-deco {
    font-size: 24px;
    color: var(--t-primary);
    letter-spacing: 12px;
    margin-bottom: 22px;
    opacity: 0.5;
}

.art-deco .menu-restaurant-logo {
    margin: 0 auto 18px;
    filter: brightness(1.2);
}

.art-deco .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.8em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.28em;
    color: var(--t-primary);
    margin-bottom: 12px;
    text-shadow:
        0 0 20px rgba(212,175,55,0.2),
        0 0 40px rgba(212,175,55,0.08),
        0 2px 4px rgba(0,0,0,0.3);
}

.art-deco .menu-restaurant-subtitle {
    font-family: var(--t-heading-font);
    font-size: 0.88em;
    font-weight: 300;
    letter-spacing: 0.35em;
    text-transform: uppercase;
    color: var(--t-text);
    opacity: 0.65;
}

/* Geometric separator after header */
.art-deco .menu-header::after {
    content: '';
    display: block;
    margin-top: 28px;
    width: 100%;
    height: 1px;
    background: linear-gradient(
        to right,
        transparent,
        rgba(212,175,55,0.1) 15%,
        var(--t-primary) 40%,
        var(--t-primary) 48%,
        transparent 49%,
        transparent 51%,
        var(--t-primary) 52%,
        var(--t-primary) 60%,
        rgba(212,175,55,0.1) 85%,
        transparent
    );
    opacity: 0.5;
    position: relative;
    z-index: 1;
}

/* Categories */
.art-deco .menu-category {
    margin-bottom: 40px;
}

.art-deco .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.15em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    color: var(--t-primary);
    margin-bottom: 8px;
}

.art-deco .menu-category-desc {
    font-size: 0.84em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.45;
    margin-bottom: 18px;
}

/* Art deco geometric category separator */
.art-deco .menu-category-separator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    margin-bottom: 22px;
}

.art-deco .menu-category-separator::before,
.art-deco .menu-category-separator::after {
    content: '';
    width: 70px;
    height: 0;
    border-top: 1px solid var(--t-primary);
    border-bottom: 1px solid var(--t-primary);
    padding-top: 2px;
    opacity: 0.3;
}

/* Items */
.art-deco .menu-item {
    margin-bottom: 16px;
    padding: 6px 24px 10px;
    border-bottom: 1px solid rgba(212,175,55,0.06);
}

.art-deco .menu-item:last-child {
    border-bottom: none;
}

.art-deco .menu-item-header {
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 14px;
}

.art-deco .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 0.98em;
    font-weight: 400;
    letter-spacing: 0.06em;
    color: var(--t-text);
}

.art-deco .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted var(--t-primary);
    opacity: 0.2;
    min-width: 20px;
    margin-bottom: 4px;
}

.art-deco .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 0.98em;
    font-weight: 600;
    color: var(--t-primary);
    text-shadow: 0 0 8px rgba(212,175,55,0.1);
}

.art-deco .menu-item-description {
    font-size: 0.8em;
    margin-top: 4px;
    color: var(--t-text);
    opacity: 0.45;
    font-style: italic;
}

/* Footer */
.art-deco .menu-footer {
    margin-top: 45px;
    padding-top: 28px;
    position: relative;
}

.art-deco .menu-footer::before {
    content: '';
    position: absolute;
    top: 0;
    left: 50%;
    transform: translateX(-50%);
    width: 80%;
    height: 1px;
    background: linear-gradient(
        to right,
        transparent,
        rgba(212,175,55,0.1) 15%,
        var(--t-primary) 40%,
        var(--t-primary) 48%,
        transparent 49%,
        transparent 51%,
        var(--t-primary) 52%,
        var(--t-primary) 60%,
        rgba(212,175,55,0.1) 85%,
        transparent
    );
    opacity: 0.4;
}

.art-deco .menu-footer-deco {
    color: var(--t-primary);
    opacity: 0.4;
    margin-bottom: 14px;
}

.art-deco .menu-restaurant-info {
    font-family: var(--t-heading-font);
    font-size: 0.78em;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--t-text);
    opacity: 0.45;
}

.art-deco .menu-restaurant-info p {
    margin: 4px 0;
}

/* Flags override for dark bg */

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .art-deco .menu-header { margin-bottom: 33.8px; padding-bottom: 24px; }
.menu-pdf-render .art-deco .menu-restaurant-name { margin-bottom: 9px; }
.menu-pdf-render .art-deco .menu-restaurant-subtitle { margin-bottom: 12px; }
.menu-pdf-render .art-deco .menu-header-deco { margin-bottom: 16.5px; }
.menu-pdf-render .art-deco .menu-category { margin-bottom: 30px; }
.menu-pdf-render .art-deco .menu-category-name { margin-bottom: 6px; }
.menu-pdf-render .art-deco .menu-category-separator { margin-bottom: 16.5px; }
.menu-pdf-render .art-deco .menu-item { margin-bottom: 12px; padding-top: 4.5px; padding-bottom: 7.5px; }
.menu-pdf-render .art-deco .menu-item-description { margin-top: 3px; }
.menu-pdf-render .art-deco .menu-footer { margin-top: 33.8px; padding-top: 21px; }
.menu-pdf-render .art-deco { padding-top: 41px; padding-bottom: 41px; }

/* === jardin-botanique/style.css === */
/* ========================================
   Template : Jardin Botanique
   Nature, feuillage, vert sauge/crème, élégant organique
   ======================================== */

.menu-template.jardin-botanique {
    --t-primary: var(--custom-primary, #4a6741);
    --t-secondary: var(--custom-secondary, #c4956a);
    --t-bg: var(--custom-bg, #f7f4ef);
    --t-text: var(--custom-text, #3d3d3d);
    --t-heading-font: var(--custom-heading-font, 'Cormorant Garamond', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 55px 45px;
    position: relative;
    box-shadow:
        0 4px 30px rgba(74, 103, 65, 0.08),
        0 1px 8px rgba(74, 103, 65, 0.05);
}

/* Soft botanical/nature texture */
.jardin-botanique .menu-texture-overlay {
    background:
        radial-gradient(ellipse at 15% 15%, rgba(74, 103, 65, 0.06) 0%, transparent 40%),
        radial-gradient(ellipse at 85% 85%, rgba(74, 103, 65, 0.05) 0%, transparent 35%),
        radial-gradient(ellipse at 50% 50%, rgba(196, 149, 106, 0.04) 0%, transparent 60%),
        repeating-linear-gradient(
            120deg,
            transparent,
            transparent 4px,
            rgba(74, 103, 65, 0.008) 4px,
            rgba(74, 103, 65, 0.008) 8px
        ),
        repeating-linear-gradient(
            60deg,
            transparent,
            transparent 6px,
            rgba(196, 149, 106, 0.006) 6px,
            rgba(196, 149, 106, 0.006) 12px
        );
}

/* Leafy corner decorations using CSS borders with rounded corners */
.jardin-botanique .menu-corner {
    position: absolute;
    width: 55px;
    height: 55px;
    opacity: 0.2;
    border-color: var(--t-primary);
}

.jardin-botanique .menu-corner--tl {
    top: 16px;
    left: 20px;
    border-top: 2px solid;
    border-left: 2px solid;
    border-top-left-radius: 12px;
}

.jardin-botanique .menu-corner--tr {
    top: 16px;
    right: 20px;
    border-top: 2px solid;
    border-right: 2px solid;
    border-top-right-radius: 12px;
}

.jardin-botanique .menu-corner--bl {
    bottom: 16px;
    left: 20px;
    border-bottom: 2px solid;
    border-left: 2px solid;
    border-bottom-left-radius: 12px;
}

.jardin-botanique .menu-corner--br {
    bottom: 16px;
    right: 20px;
    border-bottom: 2px solid;
    border-right: 2px solid;
    border-bottom-right-radius: 12px;
}

/* Header */
.jardin-botanique .menu-header {
    margin-bottom: 40px;
    padding-bottom: 28px;
}

.jardin-botanique .menu-header-deco {
    font-size: 18px;
    color: var(--t-primary);
    margin-bottom: 16px;
    opacity: 0.4;
    letter-spacing: 6px;
}

.jardin-botanique .menu-restaurant-logo {
    margin: 0 auto 18px;
}

.jardin-botanique .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.8em;
    font-weight: 600;
    font-style: italic;
    color: var(--t-primary);
    margin-bottom: 10px;
    text-shadow: 0 1px 3px rgba(74, 103, 65, 0.08);
    line-height: 1.15;
}

.jardin-botanique .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.92em;
    color: var(--t-secondary);
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-weight: 300;
}

/* SVG ornament handles the separator now — no unicode */
.jardin-botanique .menu-header::after {
    content: '';
    display: block;
    margin: 22px auto 0;
    width: 60px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-primary) 30%,
        var(--t-primary) 70%,
        transparent 100%
    );
    opacity: 0.2;
}

/* Categories */
.jardin-botanique .menu-category {
    margin-bottom: 36px;
}

.jardin-botanique .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.7em;
    font-weight: 600;
    font-style: italic;
    color: var(--t-primary);
    margin-bottom: 6px;
}

.jardin-botanique .menu-category-desc {
    font-size: 0.88em;
    font-style: italic;
    color: var(--t-secondary);
    margin-bottom: 20px;
}

.jardin-botanique .menu-category-separator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 14px;
    margin-bottom: 22px;
}

.jardin-botanique .menu-category-separator::before,
.jardin-botanique .menu-category-separator::after {
    content: '';
    width: 45px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-primary) 40%,
        var(--t-primary) 60%,
        transparent 100%
    );
    opacity: 0.2;
}

/* Items with more breathing room */
.jardin-botanique .menu-item {
    margin-bottom: 22px;
    padding: 0 20px;
}

.jardin-botanique .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 1.15em;
    font-weight: 600;
    color: var(--t-text);
    display: block;
}

.jardin-botanique .menu-item-description {
    font-size: 0.84em;
    color: var(--t-text);
    opacity: 0.55;
    font-style: italic;
    margin-top: 4px;
}

.jardin-botanique .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 1.05em;
    font-weight: 600;
    color: var(--t-secondary);
    margin-top: 5px;
    display: block;
}

/* Footer */
.jardin-botanique .menu-footer {
    margin-top: 40px;
    padding-top: 24px;
}

/* SVG ornament handles the separator now — no unicode */
.jardin-botanique .menu-footer::before {
    content: '';
    display: block;
    margin: 0 auto 18px;
    width: 60px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-primary) 30%,
        var(--t-primary) 70%,
        transparent 100%
    );
    opacity: 0.2;
}

.jardin-botanique .menu-restaurant-info {
    font-size: 0.82em;
    opacity: 0.55;
    font-style: italic;
}

.jardin-botanique .menu-restaurant-info p {
    margin: 3px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .jardin-botanique .menu-header { margin-bottom: 26px; padding-bottom: 18.2px; }
.menu-pdf-render .jardin-botanique .menu-restaurant-name { margin-bottom: 6.5px; }
.menu-pdf-render .jardin-botanique .menu-restaurant-subtitle { margin-bottom: 10.4px; }
.menu-pdf-render .jardin-botanique .menu-header-deco { margin-bottom: 10.4px; }
.menu-pdf-render .jardin-botanique .menu-category { margin-bottom: 23.4px; }
.menu-pdf-render .jardin-botanique .menu-category-name { margin-bottom: 3.9px; }
.menu-pdf-render .jardin-botanique .menu-item { margin-bottom: 14.3px; }
.menu-pdf-render .jardin-botanique .menu-item-description { margin-top: 2.6px; }
.menu-pdf-render .jardin-botanique .menu-item-price { margin-top: 3.3px; }
.menu-pdf-render .jardin-botanique .menu-footer { margin-top: 26px; padding-top: 15.6px; }
.menu-pdf-render .jardin-botanique { padding-top: 36px; padding-bottom: 36px; }

/* === bistrot-vintage/style.css === */
/* ========================================
   Template : Bistrot Vintage
   Parchemin, encre sépia, typographie rétro
   ======================================== */

.menu-template.bistrot-vintage {
    --t-primary: var(--custom-primary, #5c3d2e);
    --t-secondary: var(--custom-secondary, #a0522d);
    --t-bg: var(--custom-bg, #f5eed6);
    --t-text: var(--custom-text, #4a3728);
    --t-heading-font: var(--custom-heading-font, 'Libre Baskerville', serif);
    --t-body-font: var(--custom-body-font, 'Crimson Text', serif);

    background: var(--t-bg);
    text-align: center;
    padding: 50px 45px;
    position: relative;
    box-shadow:
        0 0 40px rgba(160, 82, 45, 0.08),
        inset 0 0 100px rgba(160, 82, 45, 0.03);
}

/* Aged parchment texture with warm yellowed paper */
.bistrot-vintage .menu-texture-overlay {
    background:
        radial-gradient(ellipse at 20% 10%, rgba(160, 82, 45, 0.06) 0%, transparent 45%),
        radial-gradient(ellipse at 80% 90%, rgba(92, 61, 46, 0.05) 0%, transparent 40%),
        radial-gradient(ellipse at 60% 40%, rgba(160, 82, 45, 0.03) 0%, transparent 50%),
        radial-gradient(ellipse at 10% 70%, rgba(92, 61, 46, 0.04) 0%, transparent 35%),
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 2px,
            rgba(160, 82, 45, 0.01) 2px,
            rgba(160, 82, 45, 0.01) 4px
        ),
        repeating-linear-gradient(
            90deg,
            transparent,
            transparent 3px,
            rgba(92, 61, 46, 0.008) 3px,
            rgba(92, 61, 46, 0.008) 6px
        );
}

/* Distressed vintage double border */
.bistrot-vintage::before {
    content: '';
    position: absolute;
    inset: 10px;
    border: 2px solid var(--t-secondary);
    opacity: 0.18;
    pointer-events: none;
    border-radius: 1px;
}

.bistrot-vintage::after {
    content: '';
    position: absolute;
    inset: 17px;
    border: 1px dashed var(--t-secondary);
    opacity: 0.12;
    pointer-events: none;
}

/* Header */
.bistrot-vintage .menu-header {
    margin-bottom: 35px;
    padding-bottom: 28px;
    position: relative;
}

/* SVG ornament handles decoration now — no unicode */
.bistrot-vintage .menu-header::after {
    content: '';
    display: block;
    margin: 22px auto 0;
    width: 80px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 20%,
        var(--t-secondary) 80%,
        transparent 100%
    );
    opacity: 0.3;
}

.bistrot-vintage .menu-header-deco {
    font-size: 16px;
    color: var(--t-secondary);
    margin-bottom: 16px;
    opacity: 0.4;
    letter-spacing: 8px;
}

.bistrot-vintage .menu-restaurant-logo {
    margin: 0 auto 18px;
}

.bistrot-vintage .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.5em;
    font-weight: 700;
    color: var(--t-primary);
    margin-bottom: 10px;
    line-height: 1.2;
    text-shadow: 0 1px 2px rgba(92, 61, 46, 0.06);
}

.bistrot-vintage .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 1.02em;
    font-style: italic;
    color: var(--t-secondary);
    letter-spacing: 0.06em;
}

/* Categories */
.bistrot-vintage .menu-category {
    margin-bottom: 34px;
}

.bistrot-vintage .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.35em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.14em;
    color: var(--t-primary);
    margin-bottom: 4px;
    padding-bottom: 6px;
    display: inline-block;
    border-bottom: 2px solid rgba(160, 82, 45, 0.2);
}

.bistrot-vintage .menu-category-desc {
    font-family: var(--t-body-font);
    font-size: 0.92em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.6;
    margin-bottom: 16px;
    margin-top: 6px;
}

.bistrot-vintage .menu-category-separator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    margin-bottom: 20px;
}

.bistrot-vintage .menu-category-separator::before,
.bistrot-vintage .menu-category-separator::after {
    content: '';
    width: 55px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 25%,
        var(--t-secondary) 75%,
        transparent 100%
    );
    opacity: 0.3;
}

/* Items with generous spacing */
.bistrot-vintage .menu-item {
    margin-bottom: 16px;
    padding: 2px 20px;
}

.bistrot-vintage .menu-item-header {
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 10px;
}

.bistrot-vintage .menu-item-name {
    font-family: var(--t-body-font);
    font-size: 1.02em;
    font-weight: 600;
    color: var(--t-text);
}

.bistrot-vintage .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted var(--t-secondary);
    opacity: 0.3;
    min-width: 20px;
    margin-bottom: 4px;
}

.bistrot-vintage .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 1.02em;
    font-weight: 600;
    color: var(--t-secondary);
}

.bistrot-vintage .menu-item-description {
    font-family: var(--t-body-font);
    font-size: 0.84em;
    font-style: italic;
    margin-top: 3px;
    color: var(--t-text);
    opacity: 0.5;
}

/* Footer */
.bistrot-vintage .menu-footer {
    margin-top: 40px;
    padding-top: 24px;
}

/* SVG ornament handles decoration now — no unicode */
.bistrot-vintage .menu-footer::before {
    content: '';
    display: block;
    margin: 0 auto 18px;
    width: 80px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 20%,
        var(--t-secondary) 80%,
        transparent 100%
    );
    opacity: 0.3;
}

.bistrot-vintage .menu-restaurant-info {
    font-family: var(--t-body-font);
    font-size: 0.84em;
    font-style: italic;
    opacity: 0.55;
}

.bistrot-vintage .menu-restaurant-info p {
    margin: 3px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .bistrot-vintage .menu-header { margin-bottom: 29.8px; padding-bottom: 23.8px; }
.menu-pdf-render .bistrot-vintage .menu-restaurant-name { margin-bottom: 8.5px; }
.menu-pdf-render .bistrot-vintage .menu-restaurant-subtitle { margin-bottom: 13.6px; }
.menu-pdf-render .bistrot-vintage .menu-header-deco { margin-bottom: 13.6px; }
.menu-pdf-render .bistrot-vintage .menu-category { margin-bottom: 28.9px; }
.menu-pdf-render .bistrot-vintage .menu-category-name { margin-bottom: 3.4px; padding-bottom: 5.1px; }
.menu-pdf-render .bistrot-vintage .menu-category-separator { margin-bottom: 17px; }
.menu-pdf-render .bistrot-vintage .menu-item { margin-bottom: 13.6px; padding-top: 1.7px; padding-bottom: 1.7px; }
.menu-pdf-render .bistrot-vintage .menu-item-description { margin-top: 2.6px; }
.menu-pdf-render .bistrot-vintage .menu-footer { margin-top: 34px; padding-top: 20.4px; }
.menu-pdf-render .bistrot-vintage { padding-top: 43px; padding-bottom: 43px; }

/* === ocean-seafood/style.css === */
/* ========================================
   Template : Océan
   Bleu profond, doré sable, fruits de mer
   PREMIUM
   ======================================== */

.menu-template.ocean-seafood {
    --t-primary: var(--custom-primary, #e8d5a3);
    --t-secondary: var(--custom-secondary, #5b9bd5);
    --t-bg: var(--custom-bg, #0c2340);
    --t-text: var(--custom-text, #c8dbe8);
    --t-heading-font: var(--custom-heading-font, 'Playfair Display', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    color: var(--t-text);
    padding: 65px 55px;
    text-align: center;
    position: relative;
    overflow: hidden;
}

/* Deep ocean gradient — dark navy to lighter center */
.ocean-seafood::before {
    content: '';
    position: absolute;
    inset: 0;
    background:
        radial-gradient(ellipse at 50% 30%, rgba(91, 155, 213, 0.12) 0%, transparent 55%),
        radial-gradient(ellipse at 50% 100%, rgba(12, 35, 64, 0.5) 0%, transparent 60%),
        linear-gradient(180deg, rgba(20, 50, 90, 0.3) 0%, transparent 40%, rgba(8, 20, 40, 0.4) 100%);
    pointer-events: none;
    z-index: 0;
}

/* CSS wave pattern texture overlay */
.ocean-seafood .menu-texture-overlay {
    background-image:
        repeating-linear-gradient(
            100deg,
            transparent,
            transparent 40px,
            rgba(91, 155, 213, 0.015) 40px,
            rgba(91, 155, 213, 0.015) 42px
        ),
        repeating-linear-gradient(
            80deg,
            transparent,
            transparent 55px,
            rgba(91, 155, 213, 0.012) 55px,
            rgba(91, 155, 213, 0.012) 57px
        ),
        radial-gradient(ellipse at 50% 0%, rgba(232, 213, 163, 0.04) 0%, transparent 50%);
    opacity: 1;
    mix-blend-mode: normal;
}

/* Header */
.ocean-seafood .menu-header {
    margin-bottom: 60px;
    padding-bottom: 35px;
    border-bottom: 1px solid rgba(232, 213, 163, 0.12);
}

.ocean-seafood .menu-header-deco {
    font-size: 20px;
    color: var(--t-secondary);
    letter-spacing: 16px;
    margin-bottom: 22px;
    opacity: 0.45;
}

.ocean-seafood .menu-header-deco .menu-svg-ornament {
    color: var(--t-secondary);
    filter: drop-shadow(0 0 8px rgba(91, 155, 213, 0.2));
}

.ocean-seafood .menu-restaurant-logo {
    margin: 0 auto 18px;
    filter: brightness(1.2) drop-shadow(0 2px 10px rgba(232, 213, 163, 0.15));
}

/* Restaurant name — gold shine effect */
.ocean-seafood .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3em;
    font-weight: 700;
    color: var(--t-primary);
    letter-spacing: 0.1em;
    margin-bottom: 12px;
    text-shadow:
        0 0 20px rgba(232, 213, 163, 0.15),
        0 2px 4px rgba(0, 0, 0, 0.3);
    background: linear-gradient(
        135deg,
        var(--t-primary) 0%,
        #f5e6c8 45%,
        var(--t-primary) 55%,
        #d4c4a0 100%
    );
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
}

.ocean-seafood .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.85em;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--t-secondary);
    font-weight: 300;
    text-shadow: 0 0 15px rgba(91, 155, 213, 0.1);
}

/* SVG ornaments */
.ocean-seafood .menu-svg-ornament {
    color: var(--t-secondary);
    opacity: 0.5;
}

/* Categories */
.ocean-seafood .menu-category {
    margin-bottom: 50px;
}

/* Category name — sand-colored underline accent */
.ocean-seafood .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.2em;
    font-weight: 600;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin-bottom: 10px;
    padding-bottom: 10px;
    display: inline-block;
    border-bottom: 2px solid rgba(232, 213, 163, 0.25);
}

.ocean-seafood .menu-category-desc {
    font-size: 0.78em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.45;
    margin-bottom: 22px;
    margin-top: 4px;
}

/* Sea-glass subtle separator */
.ocean-seafood .menu-category-separator {
    width: 60px;
    height: 1px;
    background: linear-gradient(to right, transparent, var(--t-secondary), transparent);
    margin: 0 auto 24px;
    opacity: 0.4;
}

/* Items — more spacing, cleaner */
.ocean-seafood .menu-item {
    margin-bottom: 26px;
    padding: 0 30px;
}

/* Sea-glass separator between items */
.ocean-seafood .menu-item + .menu-item {
    padding-top: 10px;
    border-top: 1px solid rgba(91, 155, 213, 0.06);
}

.ocean-seafood .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 1.12em;
    font-weight: 500;
    color: var(--t-primary);
    display: block;
    margin-bottom: 5px;
    letter-spacing: 0.04em;
}

.ocean-seafood .menu-item-description {
    font-size: 0.78em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.5;
    margin-bottom: 7px;
    line-height: 1.6;
}

.ocean-seafood .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 0.85em;
    font-weight: 300;
    color: var(--t-secondary);
    letter-spacing: 0.1em;
}

/* Footer — wave-like separator */
.ocean-seafood .menu-footer {
    margin-top: 60px;
    padding-top: 30px;
    border-top: 1px solid rgba(91, 155, 213, 0.08);
}

.ocean-seafood .menu-footer-separator {
    width: 80px;
    height: 2px;
    margin: 0 auto 22px;
    opacity: 0.35;
    background:
        radial-gradient(circle at 10% 50%, var(--t-secondary) 0%, transparent 30%),
        radial-gradient(circle at 30% 50%, var(--t-secondary) 0%, transparent 30%),
        radial-gradient(circle at 50% 50%, var(--t-secondary) 0%, transparent 30%),
        radial-gradient(circle at 70% 50%, var(--t-secondary) 0%, transparent 30%),
        radial-gradient(circle at 90% 50%, var(--t-secondary) 0%, transparent 30%);
}

.ocean-seafood .menu-restaurant-info {
    font-size: 0.72em;
    color: var(--t-text);
    opacity: 0.35;
    letter-spacing: 0.1em;
}

.ocean-seafood .menu-restaurant-info p {
    margin: 4px 0;
}

/* Flags override for dark bg */

/* html2canvas ne sait pas découper un fond sur le texte : `background-clip:
   text` est ignoré et le dégradé se peint en APLAT, derrière le nom, qui reste
   transparent. Dans le PDF, le titre disparaissait donc sous un rectangle
   dégradé. À l'impression, couleur pleine.

   (Ce défaut était masqué jusqu'ici par une règle trop large du mode PDF, qui
   effaçait TOUS les fonds — et au passage les bandeaux de catégorie des autres
   modèles.) */
.menu-pdf-render .ocean-seafood .menu-restaurant-name {
    background: none;
    -webkit-background-clip: border-box;
    background-clip: border-box;
    -webkit-text-fill-color: var(--t-primary);
    color: var(--t-primary);
    text-shadow: none;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .ocean-seafood .menu-header { margin-bottom: 39px; padding-bottom: 22.8px; }
.menu-pdf-render .ocean-seafood .menu-restaurant-name { margin-bottom: 7.8px; }
.menu-pdf-render .ocean-seafood .menu-restaurant-subtitle { margin-bottom: 10.4px; }
.menu-pdf-render .ocean-seafood .menu-header-deco { margin-bottom: 14.3px; }
.menu-pdf-render .ocean-seafood .menu-category { margin-bottom: 32.5px; }
.menu-pdf-render .ocean-seafood .menu-category-name { margin-bottom: 6.5px; padding-bottom: 6.5px; }
.menu-pdf-render .ocean-seafood .menu-item { margin-bottom: 16.9px; }
.menu-pdf-render .ocean-seafood .menu-footer { margin-top: 39px; padding-top: 19.5px; }
.menu-pdf-render .ocean-seafood .menu-footer-separator { margin-bottom: 14.3px; }
.menu-pdf-render .ocean-seafood { padding-top: 42px; padding-bottom: 42px; }

/* === terroir-rustique/style.css === */
/* ========================================
   Template : Terroir
   Terre, bois, farm-to-table, rustique chic
   PREMIUM
   ======================================== */

.menu-template.terroir-rustique {
    --t-primary: var(--custom-primary, #5a3e28);
    --t-secondary: var(--custom-secondary, #7a8b3c);
    --t-bg: var(--custom-bg, #f5f0e6);
    --t-text: var(--custom-text, #4a3f35);
    --t-heading-font: var(--custom-heading-font, 'Libre Baskerville', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    color: var(--t-text);
    padding: 60px 55px;
    text-align: center;
    border: 3px solid var(--t-primary);
    border-image: none;
    position: relative;
    box-shadow:
        0 4px 30px rgba(90, 62, 40, 0.1),
        inset 0 0 60px rgba(90, 62, 40, 0.03);
}

/* Wood-grain rustic texture using CSS gradients */
.terroir-rustique .menu-texture-overlay {
    background:
        repeating-linear-gradient(
            2deg,
            transparent,
            transparent 3px,
            rgba(90, 62, 40, 0.012) 3px,
            rgba(90, 62, 40, 0.012) 5px
        ),
        repeating-linear-gradient(
            178deg,
            transparent,
            transparent 7px,
            rgba(90, 62, 40, 0.008) 7px,
            rgba(90, 62, 40, 0.008) 9px
        ),
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 15px,
            rgba(90, 62, 40, 0.015) 15px,
            rgba(90, 62, 40, 0.015) 16px
        ),
        radial-gradient(ellipse at 25% 30%, rgba(122, 139, 60, 0.05) 0%, transparent 45%),
        radial-gradient(ellipse at 75% 65%, rgba(90, 62, 40, 0.06) 0%, transparent 40%);
}

/* Organic rustic double border with slightly rougher feel */
.terroir-rustique::before {
    content: '';
    position: absolute;
    inset: 7px;
    border: 1px solid var(--t-primary);
    opacity: 0.2;
    pointer-events: none;
    border-radius: 1px;
}

.terroir-rustique::after {
    content: '';
    position: absolute;
    inset: 12px;
    border: 1px dashed var(--t-secondary);
    opacity: 0.1;
    pointer-events: none;
}

/* Header */
.terroir-rustique .menu-header {
    margin-bottom: 48px;
    padding-bottom: 28px;
}

.terroir-rustique .menu-header-deco {
    font-size: 18px;
    color: var(--t-secondary);
    letter-spacing: 10px;
    margin-bottom: 18px;
    opacity: 0.6;
}

.terroir-rustique .menu-restaurant-logo {
    margin: 0 auto 18px;
}

.terroir-rustique .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.5em;
    font-weight: 700;
    color: var(--t-primary);
    letter-spacing: 0.05em;
    margin-bottom: 10px;
    text-shadow: 0 1px 2px rgba(90, 62, 40, 0.06);
}

.terroir-rustique .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.85em;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--t-secondary);
    font-weight: 400;
}

/* SVG ornament handles decoration now — no emoji */
.terroir-rustique .menu-header::after {
    content: '';
    display: block;
    margin: 22px auto 0;
    width: 70px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 25%,
        var(--t-secondary) 75%,
        transparent 100%
    );
    opacity: 0.3;
}

/* Categories */
.terroir-rustique .menu-category {
    margin-bottom: 38px;
}

.terroir-rustique .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.2em;
    font-weight: 700;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--t-secondary);
    margin-bottom: 8px;
}

.terroir-rustique .menu-category-desc {
    font-size: 0.82em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.6;
    margin-bottom: 16px;
}

.terroir-rustique .menu-category-separator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 10px;
    margin-bottom: 22px;
}

.terroir-rustique .menu-category-separator::before,
.terroir-rustique .menu-category-separator::after {
    content: '';
    width: 55px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 25%,
        var(--t-secondary) 75%,
        transparent 100%
    );
    opacity: 0.35;
}

/* Items with generous spacing */
.terroir-rustique .menu-item {
    margin-bottom: 16px;
    padding: 2px 18px;
}

.terroir-rustique .menu-item-header {
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 10px;
}

.terroir-rustique .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 0.97em;
    font-weight: 400;
    color: var(--t-primary);
}

.terroir-rustique .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted var(--t-secondary);
    opacity: 0.3;
    min-width: 20px;
    margin-bottom: 4px;
}

.terroir-rustique .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 0.94em;
    font-weight: 700;
    color: var(--t-secondary);
}

.terroir-rustique .menu-item-description {
    font-size: 0.8em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.5;
    margin-top: 4px;
}

/* Footer */
.terroir-rustique .menu-footer {
    margin-top: 48px;
    padding-top: 24px;
}

/* SVG ornament handles decoration now — no emoji */
.terroir-rustique .menu-footer::before {
    content: '';
    display: block;
    margin: 0 auto 18px;
    width: 70px;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent 0%,
        var(--t-secondary) 25%,
        var(--t-secondary) 75%,
        transparent 100%
    );
    opacity: 0.3;
}

.terroir-rustique .menu-restaurant-info {
    font-size: 0.78em;
    color: var(--t-text);
    opacity: 0.45;
    letter-spacing: 0.06em;
}

.terroir-rustique .menu-restaurant-info p {
    margin: 4px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .terroir-rustique .menu-header { margin-bottom: 38.4px; padding-bottom: 22.4px; }
.menu-pdf-render .terroir-rustique .menu-restaurant-name { margin-bottom: 8px; }
.menu-pdf-render .terroir-rustique .menu-restaurant-subtitle { margin-bottom: 12.8px; }
.menu-pdf-render .terroir-rustique .menu-header-deco { margin-bottom: 14.4px; }
.menu-pdf-render .terroir-rustique .menu-category { margin-bottom: 30.4px; }
.menu-pdf-render .terroir-rustique .menu-category-name { margin-bottom: 6.4px; }
.menu-pdf-render .terroir-rustique .menu-category-separator { margin-bottom: 17.6px; }
.menu-pdf-render .terroir-rustique .menu-item { margin-bottom: 12.8px; padding-top: 1.6px; padding-bottom: 1.6px; }
.menu-pdf-render .terroir-rustique .menu-item-description { margin-top: 3.2px; }
.menu-pdf-render .terroir-rustique .menu-footer { margin-top: 38.4px; padding-top: 19.2px; }
.menu-pdf-render .terroir-rustique { padding-top: 48px; padding-bottom: 48px; }

/* === cocktail-lounge/style.css === */
/* ========================================
   Template : Cocktail Lounge
   Néon sur noir, bar moderne, vibrant
   PREMIUM
   ======================================== */

.menu-template.cocktail-lounge {
    --t-primary: var(--custom-primary, #ff6b9d);
    --t-secondary: var(--custom-secondary, #c084fc);
    --t-bg: var(--custom-bg, #0d0d0d);
    --t-text: var(--custom-text, #e0e0e0);
    --t-heading-font: var(--custom-heading-font, 'Josefin Sans', sans-serif);
    --t-body-font: var(--custom-body-font, 'Poppins', sans-serif);

    background: var(--t-bg);
    color: var(--t-text);
    padding: 60px 50px;
    text-align: left;
    position: relative;
    overflow: hidden;
}

/* Dark textured background — subtle dot grid pattern */
.cocktail-lounge .menu-texture-overlay {
    background-image:
        radial-gradient(circle, rgba(255, 255, 255, 0.03) 1px, transparent 1px);
    background-size: 20px 20px;
    opacity: 1;
    mix-blend-mode: normal;
}

/* Dramatic neon gradient glow */
.cocktail-lounge::before {
    content: '';
    position: absolute;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    background:
        radial-gradient(circle at 20% 10%, rgba(255, 107, 157, 0.12) 0%, transparent 45%),
        radial-gradient(circle at 80% 85%, rgba(192, 132, 252, 0.10) 0%, transparent 45%),
        radial-gradient(circle at 50% 50%, rgba(255, 107, 157, 0.03) 0%, transparent 70%);
    pointer-events: none;
    z-index: 0;
}

/* Subtle animated-looking gradient line at top */
.cocktail-lounge::after {
    content: '';
    position: absolute;
    top: 0;
    left: 10%;
    right: 10%;
    height: 2px;
    background: linear-gradient(90deg, transparent, var(--t-primary), var(--t-secondary), transparent);
    opacity: 0.4;
    pointer-events: none;
    z-index: 1;
}

/* Header */
.cocktail-lounge .menu-header {
    margin-bottom: 50px;
    padding-bottom: 35px;
    border-bottom: 1px solid rgba(255, 107, 157, 0.12);
    position: relative;
}

.cocktail-lounge .menu-restaurant-logo {
    margin-bottom: 18px;
    filter: brightness(1.2) drop-shadow(0 0 12px rgba(255, 107, 157, 0.2));
}

.cocktail-lounge .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3.2em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    color: var(--t-primary);
    margin-bottom: 10px;
    text-shadow:
        0 0 10px rgba(255, 107, 157, 0.4),
        0 0 30px rgba(255, 107, 157, 0.2),
        0 0 60px rgba(255, 107, 157, 0.1);
}

.cocktail-lounge .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.85em;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--t-secondary);
    font-weight: 300;
    text-shadow: 0 0 20px rgba(192, 132, 252, 0.15);
}

/* SVG ornament styling */
.cocktail-lounge .menu-svg-ornament {
    color: var(--t-secondary);
    filter: drop-shadow(0 0 6px rgba(192, 132, 252, 0.3));
}

/* Categories */
.cocktail-lounge .menu-category {
    margin-bottom: 42px;
}

.cocktail-lounge .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.1em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    color: var(--t-secondary);
    margin-bottom: 8px;
    padding-bottom: 10px;
    border-bottom: 2px solid transparent;
    background-image: linear-gradient(var(--t-bg), var(--t-bg)),
                      linear-gradient(90deg, var(--t-secondary), rgba(192, 132, 252, 0.3));
    background-origin: padding-box, border-box;
    background-clip: padding-box, border-box;
    display: inline-block;
    text-shadow:
        0 0 15px rgba(192, 132, 252, 0.3),
        0 0 40px rgba(192, 132, 252, 0.1);
}

.cocktail-lounge .menu-category-desc {
    font-size: 0.8em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.4;
    margin-bottom: 18px;
    margin-top: 10px;
}

/* Items — glassmorphism card effect */
.cocktail-lounge .menu-item {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    padding: 16px 18px;
    margin-bottom: 6px;
    border-radius: 8px;
    background: rgba(255, 255, 255, 0.02);
    border: 1px solid rgba(255, 255, 255, 0.04);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    transition: background 0.2s ease, border-color 0.2s ease;
}

.cocktail-lounge .menu-item:hover {
    background: rgba(255, 255, 255, 0.04);
    border-color: rgba(255, 107, 157, 0.08);
}

.cocktail-lounge .menu-item-content {
    flex: 1;
    padding-right: 20px;
}

.cocktail-lounge .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 1.05em;
    font-weight: 400;
    letter-spacing: 0.04em;
    color: var(--t-text);
}

.cocktail-lounge .menu-item-description {
    font-size: 0.78em;
    color: var(--t-text);
    opacity: 0.38;
    margin-top: 5px;
    font-weight: 300;
    line-height: 1.5;
}

.cocktail-lounge .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 1.05em;
    font-weight: 600;
    color: var(--t-primary);
    white-space: nowrap;
    text-shadow: 0 0 12px rgba(255, 107, 157, 0.2);
}

/* Footer */
.cocktail-lounge .menu-footer {
    margin-top: 50px;
    padding-top: 30px;
    border-top: 1px solid rgba(255, 107, 157, 0.12);
}

.cocktail-lounge .menu-restaurant-info {
    font-family: var(--t-body-font);
    font-size: 0.72em;
    color: var(--t-text);
    opacity: 0.3;
    letter-spacing: 0.12em;
    text-transform: uppercase;
}

.cocktail-lounge .menu-restaurant-info p {
    margin: 4px 0;
}

/* Flags */

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .cocktail-lounge .menu-header { margin-bottom: 35px; padding-bottom: 24.5px; }
.menu-pdf-render .cocktail-lounge .menu-restaurant-name { margin-bottom: 7px; }
.menu-pdf-render .cocktail-lounge .menu-restaurant-subtitle { margin-bottom: 11.2px; }
.menu-pdf-render .cocktail-lounge .menu-category { margin-bottom: 29.4px; }
.menu-pdf-render .cocktail-lounge .menu-category-name { margin-bottom: 5.6px; padding-bottom: 7px; }
.menu-pdf-render .cocktail-lounge .menu-item { margin-bottom: 4.2px; padding-top: 11.2px; padding-bottom: 11.2px; }
.menu-pdf-render .cocktail-lounge .menu-item-description { margin-top: 3.5px; }
.menu-pdf-render .cocktail-lounge .menu-footer { margin-top: 35px; padding-top: 21px; }
.menu-pdf-render .cocktail-lounge { padding-top: 42px; padding-bottom: 42px; }

/* === haute-cuisine/style.css === */
/* ========================================
   Template : Haute Cuisine
   Ultra-luxe, blanc immaculé, minimal absolu
   PREMIUM
   ======================================== */

.menu-template.haute-cuisine {
    --t-primary: var(--custom-primary, #1a1a1a);
    --t-secondary: var(--custom-secondary, #b8a88a);
    --t-bg: var(--custom-bg, #fafafa);
    --t-text: var(--custom-text, #555555);
    --t-heading-font: var(--custom-heading-font, 'Cormorant Garamond', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    color: var(--t-text);
    padding: 100px 75px;
    text-align: center;
}

/* Ultra-subtle cream linen texture */
.haute-cuisine .menu-texture-overlay {
    background-image:
        repeating-linear-gradient(
            0deg,
            transparent,
            transparent 2px,
            rgba(184, 168, 138, 0.015) 2px,
            rgba(184, 168, 138, 0.015) 3px
        ),
        repeating-linear-gradient(
            90deg,
            transparent,
            transparent 3px,
            rgba(184, 168, 138, 0.012) 3px,
            rgba(184, 168, 138, 0.012) 4px
        );
    opacity: 1;
    mix-blend-mode: multiply;
}

/* Header — extreme breathing room */
.haute-cuisine .menu-header {
    margin-bottom: 80px;
}

.haute-cuisine .menu-restaurant-logo {
    margin: 0 auto 28px;
}

.haute-cuisine .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3.5em;
    font-weight: 300;
    letter-spacing: 0.25em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin-bottom: 16px;
    line-height: 1.1;
}

.haute-cuisine .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.72em;
    letter-spacing: 0.4em;
    text-transform: uppercase;
    color: var(--t-secondary);
    font-weight: 300;
}

/* Refined thin separator after header */
.haute-cuisine .menu-header::after {
    content: '';
    display: block;
    width: 50px;
    height: 0.5px;
    background: var(--t-secondary);
    margin: 40px auto 0;
    opacity: 0.6;
}

/* SVG ornament styling */
.haute-cuisine .menu-svg-ornament {
    color: var(--t-secondary);
    opacity: 0.4;
}

/* Categories — MASSIVE whitespace */
.haute-cuisine .menu-category {
    margin-bottom: 65px;
}

.haute-cuisine .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.25em;
    font-weight: 400;
    letter-spacing: 0.35em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin-bottom: 35px;
}

.haute-cuisine .menu-category-desc {
    font-size: 0.78em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.4;
    margin-bottom: 30px;
    margin-top: -26px;
    letter-spacing: 0.03em;
}

/* Category separator — refined thin line */
.haute-cuisine .menu-category-separator .menu-svg-ornament {
    opacity: 0.3;
    width: 100px;
}

/* Items — generous spacing */
.haute-cuisine .menu-item {
    margin-bottom: 32px;
    padding: 0 50px;
}

.haute-cuisine .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 1.2em;
    font-weight: 500;
    color: var(--t-primary);
    display: block;
    margin-bottom: 5px;
    letter-spacing: 0.06em;
}

.haute-cuisine .menu-item-description {
    font-size: 0.76em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.45;
    margin-bottom: 8px;
    line-height: 1.7;
    letter-spacing: 0.02em;
}

.haute-cuisine .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 0.78em;
    font-weight: 300;
    color: var(--t-secondary);
    letter-spacing: 0.18em;
}

/* Footer — muted, whisper-quiet */
.haute-cuisine .menu-footer {
    margin-top: 80px;
}

.haute-cuisine .menu-footer::before {
    content: '';
    display: block;
    width: 40px;
    height: 0.5px;
    background: var(--t-secondary);
    margin: 0 auto 30px;
    opacity: 0.4;
}

.haute-cuisine .menu-footer-separator {
    display: none;
}

.haute-cuisine .menu-restaurant-info {
    font-size: 0.68em;
    color: var(--t-text);
    opacity: 0.28;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-weight: 300;
}

.haute-cuisine .menu-restaurant-info p {
    margin: 5px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .haute-cuisine .menu-header { margin-bottom: 52px; }
.menu-pdf-render .haute-cuisine .menu-restaurant-name { margin-bottom: 10.4px; }
.menu-pdf-render .haute-cuisine .menu-restaurant-subtitle { margin-bottom: 10.4px; }
.menu-pdf-render .haute-cuisine .menu-category { margin-bottom: 42.3px; }
.menu-pdf-render .haute-cuisine .menu-category-name { margin-bottom: 22.8px; }
.menu-pdf-render .haute-cuisine .menu-item { margin-bottom: 20.8px; }
.menu-pdf-render .haute-cuisine .menu-footer { margin-top: 52px; }
.menu-pdf-render .haute-cuisine { padding-top: 65px; padding-bottom: 65px; }

/* === affiche/style.css === */
/* ========================================
   Affiche — la carte comme une affiche typographique
   ========================================
   Parti pris : le nom de la maison occupe le haut comme un titre de une, en
   très grand et serré. Les catégories sont des intertitres pleine largeur sur
   fond d'encre. Rien à lire de loin sauf le nom — c'est une carte qu'on
   punaise en vitrine autant qu'on la pose sur la table.
   ======================================== */

.affiche {
    --t-primary: var(--custom-primary, #1c1917);
    --t-secondary: var(--custom-secondary, #b45309);
    --t-bg: var(--custom-bg, #f5f1e8);
    --t-text: var(--custom-text, #44403c);
    --t-heading-font: var(--custom-heading-font, 'Roboto Slab', serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: left;
    padding: 48px 44px 40px;
    position: relative;
}

/* Grain de papier d'affiche, plus marqué que sur les autres modèles :
   c'est un support imprimé, pas un écran. */
.affiche .menu-texture-overlay {
    background-image:
        repeating-linear-gradient(0deg, rgba(28, 25, 23, 0.028) 0 1px, transparent 1px 3px),
        repeating-linear-gradient(90deg, rgba(28, 25, 23, 0.02) 0 1px, transparent 1px 4px);
    opacity: 0.9;
}

/* --- Le titre remplit la largeur --- */
.affiche .menu-header {
    margin-bottom: 34px;
}

.affiche .menu-restaurant-logo {
    max-height: 46px;
    margin-bottom: 16px;
}

.affiche .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 4.4em;
    font-weight: 700;
    line-height: 0.86;
    letter-spacing: -0.045em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin: 0;
    /* Le titre est le sujet : on le laisse toucher les deux bords. */
    word-break: break-word;
    hyphens: auto;
}

.affiche .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.76em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.34em;
    color: var(--t-secondary);
    margin: 18px 0 0;
    padding-top: 14px;
    border-top: 4px solid var(--t-primary);
}

/* --- Catégorie : un bandeau d'encre pleine largeur --- */
.affiche .menu-category {
    margin-bottom: 30px;
}

.affiche .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.92em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    color: var(--t-bg);
    background: var(--t-primary);
    margin: 0 0 14px;
    padding: 7px 14px;
}

.affiche .menu-category-desc {
    font-size: 0.82em;
    font-style: italic;
    opacity: 0.65;
    margin: -6px 0 12px;
}

.affiche .menu-category-separator {
    display: none;
}

/* --- Le plat : nom en capitales, prix accolé, description en dessous --- */
.affiche .menu-item {
    display: flex;
    align-items: baseline;
    gap: 12px;
    padding: 9px 0;
}

.affiche .menu-item + .menu-item {
    border-top: 1px dashed rgba(28, 25, 23, 0.16);
}

.affiche .menu-item-content {
    flex: 1;
    min-width: 0;
}

.affiche .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 0.98em;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--t-primary);
}

.affiche .menu-item-description {
    font-size: 0.8em;
    line-height: 1.4;
    margin-top: 2px;
    opacity: 0.6;
    font-style: normal;
}

/* Le prix est traité comme un chiffre d'affiche : gros, plein, en accent. */
.affiche .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 1.15em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
    flex: 0 0 auto;
}

.affiche .menu-flag {
    transform: translateY(-2px);
}

/* --- Pied --- */
.affiche .menu-footer {
    margin-top: 32px;
    padding-top: 16px;
    border-top: 4px solid var(--t-primary);
}

.affiche .menu-restaurant-info {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 24px;
    font-size: 0.76em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    opacity: 0.7;
}

.affiche .menu-restaurant-info p { margin: 0; }

/* === grille/style.css === */
/* ========================================
   Grille — les plats en cartes, deux par ligne
   ========================================
   Tous les autres modèles composent la carte en LISTE, une ligne par plat.
   Celui-ci la compose en GRILLE : chaque plat est une petite fiche encadrée.
   C'est la mise en page des cartes courtes et des menus du midi, où l'on veut
   que l'œil compare plutôt qu'il descende.

   La grille est portée par `.menu-category` : le titre et la description
   traversent toute la largeur, les plats se rangent en dessous.
   ======================================== */

.grille {
    --t-primary: var(--custom-primary, #1e293b);
    --t-secondary: var(--custom-secondary, #0d9488);
    --t-bg: var(--custom-bg, #ffffff);
    --t-text: var(--custom-text, #475569);
    --t-heading-font: var(--custom-heading-font, 'Inter', sans-serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: left;
    padding: 52px 46px 44px;
    position: relative;
}

.grille .menu-texture-overlay { display: none; }

/* --- En-tête sobre, centré : c'est la grille qui parle --- */
.grille .menu-header {
    text-align: center;
    margin-bottom: 40px;
}

.grille .menu-restaurant-logo { max-height: 48px; margin-bottom: 14px; }

.grille .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.3em;
    font-weight: 700;
    letter-spacing: -0.03em;
    color: var(--t-primary);
    margin: 0;
}

.grille .menu-restaurant-subtitle {
    font-size: 0.78em;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    color: var(--t-secondary);
    margin: 10px 0 0;
}

/* --- La grille --- */
.grille .menu-category {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 12px;
    margin-bottom: 34px;
}

/* Le titre et la description traversent la grille. */
.grille .menu-category-name,
.grille .menu-category-desc,
.grille .menu-category-separator {
    grid-column: 1 / -1;
}

.grille .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.8em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    color: var(--t-secondary);
    margin: 0;
    display: flex;
    align-items: center;
    gap: 14px;
}

.grille .menu-category-name::after {
    content: '';
    flex: 1;
    height: 2px;
    background: var(--t-secondary);
    opacity: 0.18;
}

.grille .menu-category-desc {
    font-size: 0.82em;
    opacity: 0.6;
    margin: -4px 0 0;
}

.grille .menu-category-separator { display: none; }

/* --- Chaque plat est une fiche --- */
.grille .menu-item {
    display: flex;
    flex-direction: column;
    gap: 4px;
    padding: 14px 16px;
    border: 1px solid rgba(30, 41, 59, 0.12);
    border-radius: 10px;
    background: var(--t-bg);
    /* La fiche doit tenir sa hauteur quel que soit son voisin : sans ça, une
       description longue à gauche laisse un vide sous la fiche de droite. */
    height: 100%;
    box-sizing: border-box;
}

.grille .menu-item-content {
    display: flex;
    flex-direction: column;
    gap: 3px;
}

.grille .menu-item-name {
    font-size: 0.96em;
    font-weight: 600;
    color: var(--t-primary);
    line-height: 1.25;
}

.grille .menu-item-description {
    font-size: 0.78em;
    line-height: 1.4;
    opacity: 0.62;
    font-style: normal;
}

/* Le prix se pose en bas de fiche, aligné d'une fiche à l'autre. */
.grille .menu-item-price {
    margin-top: auto;
    padding-top: 8px;
    font-size: 0.98em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
}

/* --- Pied --- */
.grille .menu-footer {
    margin-top: 30px;
    padding-top: 18px;
    border-top: 1px solid rgba(30, 41, 59, 0.12);
    text-align: center;
}

.grille .menu-restaurant-info {
    font-size: 0.78em;
    opacity: 0.65;
}

.grille .menu-restaurant-info p { margin: 2px 0; }

/* En 2 colonnes de page, la grille de plats repasse sur une seule colonne :
   deux fiches dans une demi-largeur seraient illisibles. */
.grille .menu-body.menu-columns-2 .menu-category {
    grid-template-columns: 1fr;
}

/* === kraft/style.css === */
/* ========================================
   Kraft — papier brun, encre, tampon
   ========================================
   Le seul modèle sur fond brun de la bibliothèque. L'idée est celle d'une
   carte tirée sur papier kraft : l'encre noire y perd du contraste, les
   couleurs y virent. On compose donc en un seul ton d'encre, et l'accent est
   un rouge de tampon, pas une dorure.
   ======================================== */

.kraft {
    --t-primary: var(--custom-primary, #2b2118);
    --t-secondary: var(--custom-secondary, #9a3412);
    --t-bg: var(--custom-bg, #cbb69a);
    --t-text: var(--custom-text, #3d3125);
    --t-heading-font: var(--custom-heading-font, 'Crimson Text', serif);
    --t-body-font: var(--custom-body-font, 'Crimson Text', serif);

    background: var(--t-bg);
    text-align: center;
    padding: 54px 50px 46px;
    position: relative;
}

/* La fibre du kraft : des traînées irrégulières, pas une trame régulière. */
.kraft .menu-texture-overlay {
    background-image:
        repeating-linear-gradient(93deg, rgba(90, 66, 40, 0.07) 0 2px, transparent 2px 9px),
        repeating-linear-gradient(3deg, rgba(120, 92, 58, 0.05) 0 1px, transparent 1px 6px);
    opacity: 1;
}

/* --- En-tête : le nom encadré comme un tampon --- */
.kraft .menu-header {
    margin-bottom: 34px;
}

.kraft .menu-restaurant-logo { max-height: 54px; margin-bottom: 16px; }

.kraft .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.5em;
    font-weight: 700;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin: 0 auto;
    display: inline-block;
    padding: 12px 26px;
    border: 3px double var(--t-primary);
}

.kraft .menu-restaurant-subtitle {
    font-size: 0.86em;
    font-style: italic;
    letter-spacing: 0.06em;
    color: var(--t-secondary);
    margin: 14px 0 0;
}

.kraft .menu-header-deco { margin-top: 10px; opacity: 0.5; }

/* --- Catégorie --- */
.kraft .menu-category { margin-bottom: 32px; }

.kraft .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.25em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.16em;
    color: var(--t-primary);
    margin: 0 0 4px;
}

.kraft .menu-category-desc {
    font-size: 0.86em;
    font-style: italic;
    opacity: 0.7;
    margin: 0 0 8px;
}

.kraft .menu-category-separator {
    width: 90px;
    margin: 0 auto 14px;
    border-bottom: 1px solid var(--t-primary);
    opacity: 0.35;
}

.kraft .menu-category-separator .menu-svg-ornament { display: none; }

/* --- Le plat : conduite de points, comme une vraie carte imprimée --- */
.kraft .menu-item { margin-bottom: 12px; }

.kraft .menu-item-header {
    display: flex;
    align-items: baseline;
    gap: 8px;
    text-align: left;
}

.kraft .menu-item-name {
    font-size: 1.02em;
    font-weight: 600;
    color: var(--t-primary);
}

.kraft .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted var(--t-primary);
    opacity: 0.4;
    margin-bottom: 4px;
    min-width: 16px;
}

.kraft .menu-item-price {
    font-size: 1em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
}

.kraft .menu-item-description {
    font-size: 0.85em;
    font-style: italic;
    opacity: 0.68;
    margin-top: 1px;
}

/* --- Pied --- */
.kraft .menu-footer {
    margin-top: 34px;
    padding-top: 18px;
    border-top: 1px solid rgba(43, 33, 24, 0.3);
}

.kraft .menu-restaurant-info {
    font-size: 0.84em;
    font-style: italic;
    opacity: 0.75;
}

.kraft .menu-restaurant-info p { margin: 2px 0; }

/* === pizzeria/style.css === */
/* ========================================
   Pizzeria — sans la nappe à carreaux
   ========================================
   Le cliché du modèle « pizzeria », c'est le vert-blanc-rouge en aplats et la
   nappe vichy. Ça date la carte instantanément. On garde les couleurs — elles
   disent le lieu — mais en les traitant : le rouge en bandeau de catégorie,
   le vert en filet fin, et un blanc cassé de farine en fond.

   Deuxième parti pris : les pizzas ont des noms courts et des garnitures
   longues. La ligne de plat est donc faite pour une description qui respire.
   ======================================== */

.pizzeria {
    --t-primary: var(--custom-primary, #1f2937);
    --t-secondary: var(--custom-secondary, #c2410c);
    --t-bg: var(--custom-bg, #fdfaf3);
    --t-text: var(--custom-text, #4b5563);
    --t-vert: #4d7c0f;
    --t-heading-font: var(--custom-heading-font, 'Poppins', sans-serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 46px 44px 40px;
    position: relative;
}

/* Un voile de farine, très léger. */
.pizzeria .menu-texture-overlay {
    background-image: radial-gradient(rgba(120, 100, 70, 0.05) 1px, transparent 1px);
    background-size: 7px 7px;
    opacity: 0.8;
}

/* --- En-tête : un liseré tricolore, mais en filet, pas en drapeau --- */
.pizzeria .menu-header {
    margin-bottom: 32px;
    padding-bottom: 20px;
    position: relative;
}

.pizzeria .menu-header::after {
    content: '';
    position: absolute;
    left: 50%;
    bottom: 0;
    transform: translateX(-50%);
    width: 180px;
    height: 3px;
    background: linear-gradient(to right,
        var(--t-vert) 0 33.33%,
        rgba(0, 0, 0, 0.08) 33.33% 66.66%,
        var(--t-secondary) 66.66% 100%);
}

.pizzeria .menu-restaurant-logo { max-height: 54px; margin-bottom: 14px; }

.pizzeria .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.6em;
    font-weight: 700;
    letter-spacing: -0.02em;
    color: var(--t-primary);
    margin: 0;
}

.pizzeria .menu-restaurant-subtitle {
    font-size: 0.8em;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    color: var(--t-vert);
    margin: 8px 0 0;
}

/* --- Catégorie : bandeau rouge, coins arrondis --- */
.pizzeria .menu-category { margin-bottom: 28px; }

.pizzeria .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.84em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.16em;
    color: #fff;
    background: var(--t-secondary);
    display: inline-block;
    margin: 0 0 14px;
    padding: 6px 20px;
    border-radius: 999px;
}

.pizzeria .menu-category-desc {
    font-size: 0.84em;
    font-style: italic;
    opacity: 0.65;
    margin: -8px 0 12px;
}

.pizzeria .menu-category-separator { display: none; }

/* --- Le plat : nom court, garniture longue --- */
.pizzeria .menu-item {
    text-align: left;
    padding: 11px 0;
}

.pizzeria .menu-item + .menu-item {
    border-top: 1px solid rgba(31, 41, 55, 0.09);
}

.pizzeria .menu-item-header {
    display: flex;
    align-items: baseline;
    gap: 10px;
}

.pizzeria .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 0.98em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--t-primary);
}

.pizzeria .menu-item-dots {
    flex: 1;
    border-bottom: 2px dotted rgba(31, 41, 55, 0.16);
    margin-bottom: 4px;
    min-width: 14px;
}

.pizzeria .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 1.02em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
}

/* La garniture : c'est elle qu'on lit vraiment pour choisir une pizza. */
.pizzeria .menu-item-description {
    font-size: 0.83em;
    line-height: 1.45;
    margin-top: 3px;
    opacity: 0.7;
    font-style: normal;
}

/* --- Pied --- */
.pizzeria .menu-footer {
    margin-top: 30px;
    padding-top: 18px;
    border-top: 1px solid rgba(31, 41, 55, 0.1);
}

.pizzeria .menu-restaurant-info {
    font-size: 0.8em;
    opacity: 0.7;
}

.pizzeria .menu-restaurant-info p { margin: 2px 0; }

/* === izakaya/style.css === */
/* ========================================
   Izakaya — japonais du soir, sur fond d'encre
   ========================================
   « Zen Asiatique » existe déjà, mais il est clair, calme et diurne. Celui-ci
   est son contraire : le bar à tapas japonais, le soir, lumière basse. Fond
   d'encre, typographie claire, et un seul accent — le rouge du sceau (hanko),
   posé en petit carré plein à côté de chaque catégorie.
   ======================================== */

.izakaya {
    --t-primary: var(--custom-primary, #f2ece1);
    --t-secondary: var(--custom-secondary, #c0392b);
    --t-bg: var(--custom-bg, #16161a);
    --t-text: var(--custom-text, #a8a29a);
    --t-heading-font: var(--custom-heading-font, 'Noto Serif JP', serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: left;
    padding: 54px 48px 44px;
    position: relative;
}

/* Un fond d'encre n'est jamais parfaitement uni : un halo très doux évite
   l'aplat mort, surtout à l'impression. */
.izakaya .menu-texture-overlay {
    mix-blend-mode: normal;
    background: radial-gradient(120% 80% at 50% 0%, rgba(255, 255, 255, 0.05), transparent 60%);
    opacity: 1;
}

.izakaya .menu-header { margin-bottom: 40px; }
.izakaya .menu-restaurant-logo { max-height: 50px; margin-bottom: 18px; }

.izakaya .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.4em;
    font-weight: 500;
    letter-spacing: 0.14em;
    color: var(--t-primary);
    margin: 0;
}

.izakaya .menu-restaurant-subtitle {
    font-size: 0.74em;
    font-weight: 400;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    color: var(--t-text);
    opacity: 0.7;
    margin: 12px 0 0;
}

/* --- Catégorie : le sceau rouge --- */
.izakaya .menu-category { margin-bottom: 34px; }

.izakaya .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.94em;
    font-weight: 500;
    letter-spacing: 0.2em;
    color: var(--t-primary);
    margin: 0 0 14px;
    display: flex;
    align-items: center;
    gap: 12px;
}

/* Le sceau : un carré plein, pas une icône. Il ponctue sans décorer. */
.izakaya .menu-category-name::before {
    content: '';
    width: 9px;
    height: 9px;
    background: var(--t-secondary);
    flex: 0 0 auto;
}

.izakaya .menu-category-desc {
    font-size: 0.82em;
    opacity: 0.55;
    margin: -8px 0 12px 21px;
}

.izakaya .menu-category-separator { display: none; }

.izakaya .menu-item {
    display: flex;
    align-items: baseline;
    gap: 14px;
    padding: 10px 0 10px 21px;
}

.izakaya .menu-item + .menu-item {
    border-top: 1px solid rgba(242, 236, 225, 0.08);
}

.izakaya .menu-item-content { flex: 1; min-width: 0; }

.izakaya .menu-item-name {
    font-size: 0.98em;
    font-weight: 500;
    color: var(--t-primary);
    letter-spacing: 0.02em;
}

.izakaya .menu-item-description {
    font-size: 0.8em;
    line-height: 1.45;
    margin-top: 3px;
    opacity: 0.55;
    font-style: normal;
}

.izakaya .menu-item-price {
    font-size: 0.96em;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
}

.izakaya .menu-footer {
    margin-top: 34px;
    padding-top: 20px;
    border-top: 1px solid rgba(242, 236, 225, 0.14);
}

.izakaya .menu-restaurant-info {
    font-size: 0.78em;
    letter-spacing: 0.06em;
    opacity: 0.6;
}

.izakaya .menu-restaurant-info p { margin: 2px 0; }

/* === food-truck/style.css === */
/* ========================================
   Food truck — pochoir sur tôle
   ========================================
   Une carte de food truck se lit debout, à un mètre, parfois sous la pluie et
   souvent avec une file derrière. Donc : peu de plats, très gros, très
   contrasté, et le prix aussi gros que le nom. C'est le seul modèle de la
   bibliothèque dessiné pour être lu à distance plutôt qu'assis.
   ======================================== */

.food-truck {
    --t-primary: var(--custom-primary, #fbbf24);
    --t-secondary: var(--custom-secondary, #f97316);
    --t-bg: var(--custom-bg, #27272a);
    --t-text: var(--custom-text, #d4d4d8);
    --t-heading-font: var(--custom-heading-font, 'Josefin Sans', sans-serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: left;
    padding: 44px 40px 36px;
    position: relative;
}

/* Le grain de la tôle peinte. */
.food-truck .menu-texture-overlay {
    mix-blend-mode: normal;
    background-image: repeating-linear-gradient(45deg, rgba(255,255,255,0.02) 0 2px, transparent 2px 6px);
    opacity: 1;
}

.food-truck .menu-header {
    margin-bottom: 30px;
    padding-bottom: 18px;
    border-bottom: 5px solid var(--t-primary);
}

.food-truck .menu-restaurant-logo { max-height: 48px; margin-bottom: 14px; }

.food-truck .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3.4em;
    font-weight: 700;
    line-height: 0.9;
    letter-spacing: 0.01em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin: 0;
}

.food-truck .menu-restaurant-subtitle {
    font-size: 0.8em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.24em;
    color: var(--t-secondary);
    margin: 12px 0 0;
}

.food-truck .menu-category { margin-bottom: 26px; }

.food-truck .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.05em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.14em;
    color: var(--t-bg);
    background: var(--t-secondary);
    display: inline-block;
    margin: 0 0 12px;
    padding: 4px 14px;
    /* Pas de `transform: rotate()` ici, meme si le biais irait bien au pochoir :
       html2canvas ne rend pas les transformations, le bandeau sortirait droit
       dans le PDF alors qu'il serait penche a l'ecran. Un modele doit s'imprimer
       comme il s'affiche. */
}

.food-truck .menu-category-desc {
    font-size: 0.84em;
    opacity: 0.7;
    margin: 0 0 10px;
}

.food-truck .menu-category-separator { display: none; }

/* Nom et prix au même poids : de loin, on lit les deux d'un coup. */
.food-truck .menu-item {
    display: flex;
    align-items: baseline;
    gap: 14px;
    padding: 9px 0;
}

.food-truck .menu-item + .menu-item {
    border-top: 2px dotted rgba(251, 191, 36, 0.22);
}

.food-truck .menu-item-content { flex: 1; min-width: 0; }

.food-truck .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 1.28em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: #fff;
    line-height: 1.15;
}

.food-truck .menu-item-description {
    font-size: 0.82em;
    line-height: 1.35;
    margin-top: 2px;
    opacity: 0.65;
    font-style: normal;
}

.food-truck .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 1.42em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-primary);
}

.food-truck .menu-footer {
    margin-top: 28px;
    padding-top: 16px;
    border-top: 5px solid var(--t-primary);
}

.food-truck .menu-restaurant-info {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 22px;
    font-family: var(--t-heading-font);
    font-size: 0.84em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    opacity: 0.8;
}

.food-truck .menu-restaurant-info p { margin: 0; }

/* === brunch/style.css === */
/* ========================================
   Brunch — chaleureux, arrondi, lisible à deux
   ========================================
   Une carte de brunch se lit à plusieurs, penchés au-dessus de la table, et se
   photographie. D'où : des formes rondes, un fond crème chaud, et des plats
   groupés en blocs pour qu'on puisse pointer du doigt sans se perdre.
   ======================================== */

.brunch {
    --t-primary: var(--custom-primary, #7c2d12);
    --t-secondary: var(--custom-secondary, #ea9a4e);
    --t-bg: var(--custom-bg, #fff8f0);
    --t-text: var(--custom-text, #78624f);
    --t-heading-font: var(--custom-heading-font, 'Poppins', sans-serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 50px 46px 42px;
    position: relative;
}

.brunch .menu-texture-overlay { display: none; }

.brunch .menu-header { margin-bottom: 34px; }
.brunch .menu-restaurant-logo { max-height: 56px; margin-bottom: 14px; }

.brunch .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.5em;
    font-weight: 600;
    letter-spacing: -0.02em;
    color: var(--t-primary);
    margin: 0;
}

.brunch .menu-restaurant-subtitle {
    font-size: 0.84em;
    font-weight: 500;
    color: var(--t-secondary);
    margin: 8px 0 0;
}

/* --- Chaque catégorie est un bloc posé, coins ronds --- */
.brunch .menu-category {
    background: rgba(234, 154, 78, 0.07);
    border-radius: 18px;
    padding: 22px 24px 18px;
    margin-bottom: 18px;
    text-align: left;
}

.brunch .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.88em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.16em;
    color: var(--t-secondary);
    margin: 0 0 12px;
    text-align: center;
}

.brunch .menu-category-desc {
    font-size: 0.84em;
    text-align: center;
    opacity: 0.7;
    margin: -6px 0 12px;
}

.brunch .menu-category-separator { display: none; }

.brunch .menu-item {
    display: flex;
    align-items: baseline;
    gap: 12px;
    padding: 9px 0;
}

.brunch .menu-item + .menu-item {
    border-top: 1px solid rgba(124, 45, 18, 0.09);
}

.brunch .menu-item-content { flex: 1; min-width: 0; }

.brunch .menu-item-name {
    font-size: 0.98em;
    font-weight: 600;
    color: var(--t-primary);
}

.brunch .menu-item-description {
    font-size: 0.82em;
    line-height: 1.4;
    margin-top: 2px;
    opacity: 0.68;
    font-style: normal;
}

/* Le prix dans une pastille : à plusieurs autour d'une carte, c'est ce qu'on
   cherche en premier. */
.brunch .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 0.86em;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--t-primary);
    background: rgba(234, 154, 78, 0.2);
    border-radius: 999px;
    padding: 3px 11px;
}

.brunch .menu-footer {
    margin-top: 26px;
    padding-top: 18px;
    border-top: 1px solid rgba(124, 45, 18, 0.12);
}

.brunch .menu-restaurant-info { font-size: 0.82em; opacity: 0.72; }
.brunch .menu-restaurant-info p { margin: 2px 0; }

/* === grill/style.css === */
/* ========================================
   Grill — bois sombre, laiton, viande
   ========================================
   La carte d'un grill ou d'une rôtisserie a une contrainte propre : les pièces
   de viande se déclinent (poids, cuisson, origine), donc la description compte
   autant que le nom. On lui donne une ligne entière, et le prix est décroché
   à droite en gros pour rester lisible dans une salle mal éclairée.
   ======================================== */

.grill {
    --t-primary: var(--custom-primary, #e8dcc8);
    --t-secondary: var(--custom-secondary, #b8863b);
    --t-bg: var(--custom-bg, #221a15);
    --t-text: var(--custom-text, #a8998a);
    --t-heading-font: var(--custom-heading-font, 'Libre Baskerville', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 52px 46px 42px;
    position: relative;
}

/* Le veinage du bois, en très basse intensité. */
.grill .menu-texture-overlay {
    mix-blend-mode: normal;
    background-image: repeating-linear-gradient(88deg,
        rgba(255, 255, 255, 0.016) 0 1px, transparent 1px 5px,
        rgba(0, 0, 0, 0.05) 5px 6px, transparent 6px 13px);
    opacity: 1;
}

.grill .menu-header {
    margin-bottom: 36px;
    padding-bottom: 22px;
    border-bottom: 1px solid var(--t-secondary);
}

.grill .menu-restaurant-logo { max-height: 54px; margin-bottom: 16px; }

.grill .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.2em;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin: 0;
}

.grill .menu-restaurant-subtitle {
    font-size: 0.78em;
    font-style: italic;
    letter-spacing: 0.12em;
    color: var(--t-secondary);
    margin: 12px 0 0;
}

.grill .menu-category { margin-bottom: 32px; }

.grill .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.22em;
    color: var(--t-secondary);
    margin: 0 0 6px;
}

.grill .menu-category-desc {
    font-size: 0.84em;
    font-style: italic;
    opacity: 0.65;
    margin: 0 0 12px;
}

.grill .menu-category-separator {
    width: 60px;
    margin: 0 auto 16px;
    border-bottom: 1px solid var(--t-secondary);
    opacity: 0.4;
}

.grill .menu-category-separator .menu-svg-ornament { display: none; }

.grill .menu-item {
    display: flex;
    align-items: flex-start;
    gap: 18px;
    text-align: left;
    padding: 12px 0;
}

.grill .menu-item + .menu-item {
    border-top: 1px solid rgba(232, 220, 200, 0.09);
}

.grill .menu-item-content { flex: 1; min-width: 0; }

.grill .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 1em;
    font-weight: 700;
    color: var(--t-primary);
    letter-spacing: 0.02em;
}

/* La ligne de description porte le poids, la cuisson, l'origine : elle a droit
   à sa propre respiration. */
.grill .menu-item-description {
    font-size: 0.83em;
    line-height: 1.5;
    margin-top: 4px;
    opacity: 0.7;
    font-style: normal;
}

.grill .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 1.12em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
    padding-top: 1px;
}

.grill .menu-footer {
    margin-top: 32px;
    padding-top: 20px;
    border-top: 1px solid var(--t-secondary);
}

.grill .menu-restaurant-info {
    font-size: 0.8em;
    letter-spacing: 0.05em;
    opacity: 0.7;
}

.grill .menu-restaurant-info p { margin: 2px 0; }

/* === cave/style.css === */
/* ========================================
   Cave — la carte des vins, dense
   ========================================
   Une carte des vins n'obéit pas aux mêmes règles qu'une carte de plats : il y
   a beaucoup plus de lignes, les intitulés sont longs (domaine, appellation,
   millésime) et on cherche par région plutôt qu'on ne parcourt.

   D'où : deux colonnes par défaut, un interlignage serré, et l'appellation en
   petites capitales sous le nom du domaine. « Wine Bar » existe déjà mais il
   est fait pour une carte courte et centrée ; celui-ci est fait pour cinquante
   références.
   ======================================== */

.cave {
    --t-primary: var(--custom-primary, #4a1c2e);
    --t-secondary: var(--custom-secondary, #92400e);
    --t-bg: var(--custom-bg, #fbf7f2);
    --t-text: var(--custom-text, #57534e);
    --t-heading-font: var(--custom-heading-font, 'Cormorant Garamond', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 48px 42px 38px;
    position: relative;
}

.cave .menu-texture-overlay { display: none; }

.cave .menu-header {
    margin-bottom: 30px;
    padding-bottom: 18px;
    border-bottom: 2px solid var(--t-primary);
}

.cave .menu-restaurant-logo { max-height: 48px; margin-bottom: 12px; }

.cave .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.6em;
    font-weight: 600;
    letter-spacing: 0.03em;
    color: var(--t-primary);
    margin: 0;
}

.cave .menu-restaurant-subtitle {
    font-size: 0.76em;
    text-transform: uppercase;
    letter-spacing: 0.26em;
    color: var(--t-secondary);
    margin: 10px 0 0;
}

/* Deux colonnes par défaut : c'est la mise en page normale d'une carte des
   vins, pas une option. La coupure ne doit jamais tomber dans une région. */
.cave .menu-body {
    column-count: 2;
    column-gap: 34px;
}

.cave .menu-category {
    break-inside: avoid;
    margin-bottom: 22px;
}

.cave .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.12em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.16em;
    color: var(--t-primary);
    margin: 0 0 3px;
    padding-bottom: 5px;
    border-bottom: 1px solid var(--t-secondary);
}

.cave .menu-category-desc {
    font-size: 0.78em;
    font-style: italic;
    opacity: 0.65;
    margin: 4px 0 8px;
}

.cave .menu-category-separator { display: none; }

.cave .menu-item {
    text-align: left;
    padding: 6px 0;
}

.cave .menu-item-header {
    display: flex;
    align-items: baseline;
    gap: 7px;
}

.cave .menu-item-name {
    font-size: 0.9em;
    font-weight: 700;
    color: var(--t-primary);
    line-height: 1.3;
}

.cave .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted rgba(74, 28, 46, 0.28);
    margin-bottom: 3px;
    min-width: 10px;
}

.cave .menu-item-price {
    font-size: 0.88em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
}

/* L'appellation, le millésime, le cépage : en petites capitales, sous le nom. */
.cave .menu-item-description {
    font-size: 0.72em;
    line-height: 1.35;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    margin-top: 1px;
    opacity: 0.6;
    font-style: normal;
}

.cave .menu-footer {
    margin-top: 24px;
    padding-top: 16px;
    border-top: 2px solid var(--t-primary);
}

.cave .menu-restaurant-info { font-size: 0.78em; opacity: 0.7; }
.cave .menu-restaurant-info p { margin: 2px 0; }

/* L'option « 2 colonnes » de l'éditeur ne doit pas en créer quatre. */
.cave .menu-body.menu-columns-2 { column-count: 2; }

/* === vegetal/style.css === */
/* ========================================
   Végétal — beaucoup d'air, un vert franc
   ========================================
   « Jardin Botanique » est ornemental et feuillu. Celui-ci est l'inverse :
   contemporain, sans ornement, et c'est le BLANC qui fait le travail. Les
   cartes végétales ont souvent peu de plats mais des descriptions précises
   (provenance, saison) : on leur donne de la place plutôt que des dorures.
   ======================================== */

.vegetal {
    --t-primary: var(--custom-primary, #14532d);
    --t-secondary: var(--custom-secondary, #65a30d);
    --t-bg: var(--custom-bg, #fbfdf8);
    --t-text: var(--custom-text, #4b5563);
    --t-heading-font: var(--custom-heading-font, 'Josefin Sans', sans-serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 66px 58px 54px;
    position: relative;
}

.vegetal .menu-texture-overlay { display: none; }

.vegetal .menu-header { margin-bottom: 52px; }
.vegetal .menu-restaurant-logo { max-height: 52px; margin-bottom: 18px; }

.vegetal .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.5em;
    font-weight: 300;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin: 0;
}

.vegetal .menu-restaurant-subtitle {
    font-size: 0.78em;
    font-weight: 400;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--t-secondary);
    margin: 16px 0 0;
}

/* Un trait vert, court : le seul ornement du modèle. */
.vegetal .menu-header-deco::after {
    content: '';
    display: block;
    width: 42px;
    height: 2px;
    background: var(--t-secondary);
    margin: 22px auto 0;
}

.vegetal .menu-header-deco .menu-svg-ornament { display: none; }

.vegetal .menu-category { margin-bottom: 46px; }

.vegetal .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.82em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    color: var(--t-secondary);
    margin: 0 0 6px;
}

.vegetal .menu-category-desc {
    font-size: 0.84em;
    opacity: 0.6;
    margin: 0 0 18px;
}

.vegetal .menu-category-separator { display: none; }

/* Nom centré, prix dessous : la composition la plus calme qui soit. */
.vegetal .menu-item { margin-bottom: 26px; }

.vegetal .menu-item-name {
    display: block;
    font-size: 1.06em;
    font-weight: 400;
    letter-spacing: 0.02em;
    color: var(--t-primary);
}

.vegetal .menu-item-description {
    display: block;
    font-size: 0.84em;
    line-height: 1.6;
    max-width: 42ch;
    margin: 6px auto 0;
    opacity: 0.65;
    font-style: normal;
}

.vegetal .menu-item-price {
    display: block;
    font-size: 0.86em;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
    margin-top: 8px;
}

.vegetal .menu-footer {
    margin-top: 20px;
    padding-top: 26px;
    border-top: 1px solid rgba(20, 83, 45, 0.13);
}

.vegetal .menu-restaurant-info {
    font-size: 0.78em;
    letter-spacing: 0.08em;
    opacity: 0.6;
}

.vegetal .menu-restaurant-info p { margin: 3px 0; }

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .vegetal .menu-header { margin-bottom: 39px; }
.menu-pdf-render .vegetal .menu-restaurant-subtitle { margin-top: 12px; }
.menu-pdf-render .vegetal .menu-category { margin-bottom: 34.5px; }
.menu-pdf-render .vegetal .menu-category-name { margin-bottom: 4.5px; }
.menu-pdf-render .vegetal .menu-item { margin-bottom: 19.5px; }
.menu-pdf-render .vegetal .menu-item-description { margin-top: 4.5px; }
.menu-pdf-render .vegetal .menu-item-price { margin-top: 6px; }
.menu-pdf-render .vegetal .menu-footer { margin-top: 15px; padding-top: 19.5px; }
.menu-pdf-render .vegetal { padding-top: 43px; padding-bottom: 43px; }

/* === du-jour/style.css === */
/* ========================================
   Du jour — l'ardoise du midi, huit plats maximum
   ========================================
   Ce modèle n'est pas fait pour une carte, mais pour LA formule du jour : deux
   ou trois entrées, autant de plats, un dessert. Il assume donc ce que les
   autres évitent — très peu de lignes, très grandes, et une hiérarchie qui
   tient à trois mètres, parce qu'une ardoise du jour se lit aussi depuis le
   trottoir.

   Corollaire : si on y met trente plats, il devient illisible. C'est voulu.
   ======================================== */

.du-jour {
    --t-primary: var(--custom-primary, #fdf6e3);
    --t-secondary: var(--custom-secondary, #e0b252);
    --t-bg: var(--custom-bg, #1f2421);
    --t-text: var(--custom-text, #cfc9ba);
    --t-heading-font: var(--custom-heading-font, 'Dancing Script', cursive);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    text-align: center;
    padding: 56px 50px 46px;
    position: relative;
}

/* La poussière de craie. */
.du-jour .menu-texture-overlay {
    mix-blend-mode: normal;
    background:
        radial-gradient(60% 40% at 30% 15%, rgba(255,255,255,0.05), transparent 70%),
        radial-gradient(50% 40% at 75% 70%, rgba(255,255,255,0.035), transparent 70%);
    opacity: 1;
}

.du-jour .menu-header {
    margin-bottom: 40px;
    padding-bottom: 24px;
    border-bottom: 2px solid rgba(253, 246, 227, 0.25);
}

.du-jour .menu-restaurant-logo { max-height: 52px; margin-bottom: 14px; }

.du-jour .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3.4em;
    font-weight: 700;
    line-height: 1.05;
    color: var(--t-primary);
    margin: 0;
}

.du-jour .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.8em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    color: var(--t-secondary);
    margin: 14px 0 0;
}

.du-jour .menu-category { margin-bottom: 38px; }

.du-jour .menu-category-name {
    font-family: var(--t-body-font);
    font-size: 0.8em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.34em;
    color: var(--t-secondary);
    margin: 0 0 18px;
}

.du-jour .menu-category-desc {
    font-size: 0.86em;
    font-style: italic;
    opacity: 0.7;
    margin: -10px 0 16px;
}

.du-jour .menu-category-separator { display: none; }

/* Un plat = une ligne, en grand, à la craie. */
.du-jour .menu-item { margin-bottom: 20px; }

.du-jour .menu-item-name {
    display: block;
    font-family: var(--t-heading-font);
    font-size: 1.6em;
    font-weight: 600;
    color: var(--t-primary);
    line-height: 1.2;
}

.du-jour .menu-item-description {
    display: block;
    font-size: 0.84em;
    line-height: 1.45;
    max-width: 40ch;
    margin: 4px auto 0;
    opacity: 0.62;
    font-style: normal;
}

.du-jour .menu-item-price {
    display: block;
    font-family: var(--t-body-font);
    font-size: 0.94em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
    margin-top: 6px;
}

.du-jour .menu-footer {
    margin-top: 24px;
    padding-top: 22px;
    border-top: 2px solid rgba(253, 246, 227, 0.25);
}

.du-jour .menu-restaurant-info {
    font-size: 0.82em;
    letter-spacing: 0.06em;
    opacity: 0.7;
}

.du-jour .menu-restaurant-info p { margin: 3px 0; }

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .du-jour .menu-header { margin-bottom: 30px; padding-bottom: 18px; }
.menu-pdf-render .du-jour .menu-restaurant-subtitle { margin-top: 10.5px; }
.menu-pdf-render .du-jour .menu-category { margin-bottom: 28.5px; }
.menu-pdf-render .du-jour .menu-category-name { margin-bottom: 13.5px; }
.menu-pdf-render .du-jour .menu-item { margin-bottom: 15px; }
.menu-pdf-render .du-jour .menu-item-description { margin-top: 3px; }
.menu-pdf-render .du-jour .menu-item-price { margin-top: 4.5px; }
.menu-pdf-render .du-jour .menu-footer { margin-top: 18px; padding-top: 16.5px; }
.menu-pdf-render .du-jour { padding-top: 43px; padding-bottom: 43px; }

/* === traiteur/style.css === */
/* ========================================
   Traiteur — une liste de produits, pas une carte
   ========================================
   Un traiteur, une boulangerie ou une épicerie ne vend pas des plats servis :
   il vend des produits, avec un conditionnement (à la part, au kilo, par six).
   Le prix ne se lit donc pas seul — c'est le couple produit/unité qui compte.

   La ligne est alignée sur une colonne de prix fixe à droite, comme un tarif :
   c'est ce qui permet de comparer verticalement d'un coup d'œil.
   ======================================== */

.traiteur {
    --t-primary: var(--custom-primary, #1c1917);
    --t-secondary: var(--custom-secondary, #7c6a52);
    --t-bg: var(--custom-bg, #faf9f6);
    --t-text: var(--custom-text, #57534e);
    --t-heading-font: var(--custom-heading-font, 'Libre Baskerville', serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: left;
    padding: 50px 46px 40px;
    position: relative;
}

.traiteur .menu-texture-overlay { display: none; }

.traiteur .menu-header {
    text-align: center;
    margin-bottom: 36px;
    padding-bottom: 20px;
    border-bottom: 1px solid rgba(28, 25, 23, 0.18);
}

.traiteur .menu-restaurant-logo { max-height: 50px; margin-bottom: 14px; }

.traiteur .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 2.1em;
    font-weight: 700;
    letter-spacing: 0.02em;
    color: var(--t-primary);
    margin: 0;
}

.traiteur .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.76em;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.24em;
    color: var(--t-secondary);
    margin: 10px 0 0;
}

.traiteur .menu-category { margin-bottom: 30px; }

.traiteur .menu-category-name {
    font-family: var(--t-body-font);
    font-size: 0.76em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    color: var(--t-secondary);
    margin: 0 0 4px;
    padding-bottom: 8px;
    border-bottom: 2px solid var(--t-primary);
}

.traiteur .menu-category-desc {
    font-size: 0.82em;
    font-style: italic;
    opacity: 0.62;
    margin: 8px 0 0;
}

.traiteur .menu-category-separator { display: none; }

/* La grille du tarif : produit à gauche, prix dans une colonne fixe à droite. */
.traiteur .menu-item {
    display: grid;
    grid-template-columns: 1fr 5.5em;
    align-items: baseline;
    gap: 12px;
    padding: 9px 0;
}

.traiteur .menu-item + .menu-item {
    border-top: 1px solid rgba(28, 25, 23, 0.07);
}

.traiteur .menu-item-content { min-width: 0; }

.traiteur .menu-item-name {
    font-size: 0.96em;
    font-weight: 600;
    color: var(--t-primary);
}

/* Le conditionnement — à la part, au kilo, par six. */
.traiteur .menu-item-description {
    font-size: 0.78em;
    line-height: 1.4;
    margin-top: 2px;
    opacity: 0.62;
    font-style: normal;
}

.traiteur .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 0.94em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-primary);
    text-align: right;
}

.traiteur .menu-footer {
    margin-top: 28px;
    padding-top: 18px;
    border-top: 1px solid rgba(28, 25, 23, 0.18);
    text-align: center;
}

.traiteur .menu-restaurant-info { font-size: 0.8em; opacity: 0.7; }
.traiteur .menu-restaurant-info p { margin: 2px 0; }

/* === comptoir/style.css === */
/* ========================================
   Comptoir — neo-bistrot, editorial
   ========================================
   Les 18 modeles existants partagent une meme idee : tout est centre, orne, et
   la hierarchie repose sur des filets. Celui-ci prend le parti inverse — tout
   au fer a gauche, aucun ornement, et le plat numerote comme device graphique.
   Le contraste vient de la typographie et d'un accent vermillon, pas de dorures.
   ======================================== */

.comptoir {
    --t-primary: var(--custom-primary, #141414);
    --t-secondary: var(--custom-secondary, #c1440e);
    --t-bg: var(--custom-bg, #f4f1ea);
    --t-text: var(--custom-text, #4a463f);
    --t-heading-font: var(--custom-heading-font, 'Inter', sans-serif);
    --t-body-font: var(--custom-body-font, 'Inter', sans-serif);

    background: var(--t-bg);
    text-align: left;
    padding: 64px 56px 56px;
    position: relative;
}

/* Le grain du papier, tres retenu : on doit le sentir sans le voir. */
.comptoir .menu-texture-overlay {
    background-image: radial-gradient(rgba(20, 20, 20, 0.045) 1px, transparent 1px);
    background-size: 4px 4px;
    opacity: 0.6;
}

/* --- En-tete : le nom occupe la largeur, comme un titre de une --- */
.comptoir .menu-header {
    margin-bottom: 54px;
    padding-bottom: 22px;
    border-bottom: 3px solid var(--t-primary);
}

.comptoir .menu-restaurant-logo {
    max-height: 52px;
    margin-bottom: 20px;
}

.comptoir .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3.1em;
    font-weight: 700;
    line-height: 0.94;
    letter-spacing: -0.04em;
    text-transform: uppercase;
    color: var(--t-primary);
    margin: 0;
}

.comptoir .menu-restaurant-subtitle {
    font-size: 0.72em;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.28em;
    color: var(--t-secondary);
    margin: 14px 0 0;
}

/* --- Categorie : un intertitre, et le filet file jusqu'au bord --- */
.comptoir .menu-category {
    margin-bottom: 42px;
    counter-reset: plat;
}

.comptoir .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 0.78em;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.24em;
    color: var(--t-primary);
    margin: 0 0 4px;
    display: flex;
    align-items: center;
    gap: 16px;
}

/* Le filet prend toute la place qui reste a droite du titre : c'est lui qui
   donne l'allure editoriale, sans ajouter le moindre ornement. */
.comptoir .menu-category-name::after {
    content: '';
    flex: 1;
    height: 1px;
    background: var(--t-primary);
    opacity: 0.25;
}

.comptoir .menu-category-desc {
    font-size: 0.8em;
    font-style: italic;
    opacity: 0.6;
    margin: 0 0 6px;
}

.comptoir .menu-category-separator {
    display: none;
}

/* --- Le plat : numerote, aligne, sans conduite de points --- */
.comptoir .menu-item {
    display: flex;
    align-items: baseline;
    gap: 18px;
    padding: 13px 0;
    border-bottom: 1px solid rgba(20, 20, 20, 0.07);
}

.comptoir .menu-item:last-child {
    border-bottom: none;
}

/* Le numero est le seul « ornement » de ce modele. Il se lit comme une
   reference de carte, pas comme une decoration. */
.comptoir .menu-item::before {
    counter-increment: plat;
    content: counter(plat, decimal-leading-zero);
    font-family: var(--t-heading-font);
    font-size: 0.72em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-secondary);
    flex: 0 0 auto;
    min-width: 1.6em;
    padding-top: 0.15em;
}

.comptoir .menu-item-content {
    flex: 1;
    min-width: 0;
}

.comptoir .menu-item-name {
    font-size: 1.02em;
    font-weight: 600;
    letter-spacing: -0.01em;
    color: var(--t-primary);
}

.comptoir .menu-item-description {
    font-size: 0.82em;
    line-height: 1.45;
    margin-top: 3px;
    opacity: 0.62;
    font-style: normal;
}

.comptoir .menu-item-price {
    font-family: var(--t-heading-font);
    font-size: 0.95em;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--t-primary);
    flex: 0 0 auto;
}

.comptoir .menu-flag {
    transform: translateY(-1px);
}

/* --- Pied --- */
.comptoir .menu-footer {
    margin-top: 46px;
    padding-top: 20px;
    border-top: 3px solid var(--t-primary);
}

.comptoir .menu-restaurant-info {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 28px;
    font-size: 0.76em;
    font-weight: 500;
    letter-spacing: 0.04em;
    opacity: 0.75;
}

.comptoir .menu-restaurant-info p {
    margin: 0;
}

/* Deux colonnes : les numeros repartent a 01 dans chaque categorie, donc les
   colonnes restent lisibles meme coupees en deux. */
.comptoir .menu-body.menu-columns-2 .menu-category {
    break-inside: avoid;
}

/* === cafe-parisien/style.css === */
/* ========================================
   Template : Café Parisien
   Rose pastel, brunch, instagram-worthy
   PREMIUM
   ======================================== */

.menu-template.cafe-parisien {
    --t-primary: var(--custom-primary, #c4727f);
    --t-secondary: var(--custom-secondary, #d4a574);
    --t-bg: var(--custom-bg, #fff5f5);
    --t-text: var(--custom-text, #5c4033);
    --t-heading-font: var(--custom-heading-font, 'Playfair Display', serif);
    --t-body-font: var(--custom-body-font, 'Lato', sans-serif);

    background: var(--t-bg);
    color: var(--t-text);
    padding: 60px 55px;
    text-align: center;
    position: relative;
}

/* Soft pink/blush watercolor texture effect */
.cafe-parisien .menu-texture-overlay {
    background:
        radial-gradient(ellipse at 15% 20%, rgba(196, 114, 127, 0.06) 0%, transparent 50%),
        radial-gradient(ellipse at 85% 75%, rgba(212, 165, 116, 0.05) 0%, transparent 45%),
        radial-gradient(ellipse at 50% 50%, rgba(196, 114, 127, 0.03) 0%, transparent 60%),
        radial-gradient(ellipse at 30% 80%, rgba(255, 200, 200, 0.04) 0%, transparent 40%);
    opacity: 1;
    mix-blend-mode: normal;
}

/* Soft pink shadow around the card + delicate inner border */
.cafe-parisien::before {
    content: '';
    position: absolute;
    inset: 12px;
    border: 1px solid var(--t-primary);
    opacity: 0.12;
    border-radius: 8px;
    pointer-events: none;
    box-shadow:
        inset 0 0 40px rgba(196, 114, 127, 0.03),
        0 0 50px rgba(196, 114, 127, 0.06);
}

/* Header */
.cafe-parisien .menu-header {
    margin-bottom: 50px;
    padding-bottom: 28px;
}

/* Heart / decorative SVG container */
.cafe-parisien .menu-header-deco {
    font-size: 20px;
    color: var(--t-secondary);
    letter-spacing: 12px;
    margin-bottom: 18px;
    opacity: 0.45;
}

.cafe-parisien .menu-header-deco .menu-svg-ornament {
    color: var(--t-primary);
    opacity: 0.5;
}

.cafe-parisien .menu-restaurant-logo {
    margin: 0 auto 18px;
}

.cafe-parisien .menu-restaurant-name {
    font-family: var(--t-heading-font);
    font-size: 3em;
    font-weight: 700;
    font-style: italic;
    color: var(--t-primary);
    margin-bottom: 10px;
    line-height: 1.15;
    text-shadow: 0 2px 15px rgba(196, 114, 127, 0.08);
}

.cafe-parisien .menu-restaurant-subtitle {
    font-family: var(--t-body-font);
    font-size: 0.82em;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--t-secondary);
    font-weight: 400;
}

/* Soft heart separator after header */
.cafe-parisien .menu-header::after {
    content: '\2661';
    display: block;
    margin-top: 22px;
    font-size: 14px;
    color: var(--t-primary);
    opacity: 0.28;
}

/* SVG ornament styling */
.cafe-parisien .menu-svg-ornament {
    color: var(--t-primary);
    opacity: 0.35;
}

/* Categories */
.cafe-parisien .menu-category {
    margin-bottom: 40px;
}

.cafe-parisien .menu-category-name {
    font-family: var(--t-heading-font);
    font-size: 1.2em;
    font-weight: 700;
    font-style: italic;
    color: var(--t-primary);
    margin-bottom: 8px;
}

.cafe-parisien .menu-category-desc {
    font-size: 0.78em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.5;
    margin-bottom: 16px;
}

/* Category separators — soft gradient lines */
.cafe-parisien .menu-category-separator {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 12px;
    margin-bottom: 20px;
}

.cafe-parisien .menu-category-separator::before,
.cafe-parisien .menu-category-separator::after {
    content: '';
    width: 50px;
    height: 1px;
    background: linear-gradient(to right, transparent, rgba(196, 114, 127, 0.3), transparent);
}

/* Items — light and airy */
.cafe-parisien .menu-item {
    margin-bottom: 15px;
    padding: 8px 24px;
    border-radius: 6px;
    transition: background 0.2s ease;
}

.cafe-parisien .menu-item:hover {
    background: rgba(196, 114, 127, 0.03);
}

.cafe-parisien .menu-item-header {
    display: flex;
    justify-content: center;
    align-items: baseline;
    gap: 10px;
}

.cafe-parisien .menu-item-name {
    font-family: var(--t-heading-font);
    font-size: 0.98em;
    font-weight: 400;
    color: var(--t-text);
}

.cafe-parisien .menu-item-dots {
    flex: 1;
    border-bottom: 1px dotted var(--t-primary);
    opacity: 0.18;
    min-width: 20px;
    margin-bottom: 4px;
}

.cafe-parisien .menu-item-price {
    font-family: var(--t-body-font);
    font-size: 0.92em;
    font-weight: 700;
    color: var(--t-primary);
}

.cafe-parisien .menu-item-description {
    font-size: 0.78em;
    font-style: italic;
    color: var(--t-text);
    opacity: 0.45;
    margin-top: 4px;
    line-height: 1.6;
}

/* Footer */
.cafe-parisien .menu-footer {
    margin-top: 50px;
    padding-top: 22px;
}

.cafe-parisien .menu-footer::before {
    content: '\2661';
    display: block;
    margin-bottom: 18px;
    font-size: 12px;
    color: var(--t-primary);
    opacity: 0.25;
}

.cafe-parisien .menu-restaurant-info {
    font-size: 0.74em;
    color: var(--t-text);
    opacity: 0.4;
    letter-spacing: 0.06em;
}

.cafe-parisien .menu-restaurant-info p {
    margin: 4px 0;
}

/* ========================================
   Densité d'impression (A4)
   ========================================
   Ce modèle a été dessiné contre l'aperçu de l'éditeur, qui n'a pas de bord de
   page : une carte ordinaire (3 catégories, 7 plats, descriptions courtes)
   dépassait la hauteur d'une A4 de quelques pourcents à plus de moitié. À l'impression, le restaurateur se
   retrouvait avec deux pages là où il en attendait une.

   Ces règles resserrent l'ESPACE — marges, interlignes, retraits — et rien
   d'autre : ni le corps du texte, ni les couleurs, ni la composition. Elles ne
   s'appliquent qu'en mode PDF ; à l'écran le modèle respire comme avant.

   Valeurs mesurées, pas devinées : recherche du facteur minimal qui fait tenir
   la carte de référence, plancher à 0,65 — en dessous, une carte aérée cesse
   d'être aérée, et on ne répare pas un débordement en détruisant le parti pris
   du modèle.
   ======================================== */

.menu-pdf-render .cafe-parisien .menu-header { margin-bottom: 32.5px; padding-bottom: 18.2px; }
.menu-pdf-render .cafe-parisien .menu-restaurant-name { margin-bottom: 6.5px; }
.menu-pdf-render .cafe-parisien .menu-restaurant-subtitle { margin-bottom: 10.4px; }
.menu-pdf-render .cafe-parisien .menu-header-deco { margin-bottom: 11.7px; }
.menu-pdf-render .cafe-parisien .menu-category { margin-bottom: 26px; }
.menu-pdf-render .cafe-parisien .menu-category-name { margin-bottom: 5.2px; }
.menu-pdf-render .cafe-parisien .menu-category-separator { margin-bottom: 13px; }
.menu-pdf-render .cafe-parisien .menu-item { margin-bottom: 9.8px; padding-top: 5.2px; padding-bottom: 5.2px; }
.menu-pdf-render .cafe-parisien .menu-item-description { margin-top: 2.6px; }
.menu-pdf-render .cafe-parisien .menu-footer { margin-top: 32.5px; padding-top: 14.3px; }
.menu-pdf-render .cafe-parisien { padding-top: 39px; padding-bottom: 39px; }
