/* =====================================================
   La Bonne Baguette - Site public
   ===================================================== */

/* Styles communs a tous les carrousels publics */
@import url('carrousel.css?v=8');

/* =====================================================
   Police de marque : URBANIST (Google Fonts, licence libre SIL OFL 1.1,
   cf. assets/fonts/urbanist/OFL.txt). Remplace Nexa (police PAYANTE, version
   d'essai) depuis le 2026-10-06, choix du client apres apercu sur le site.
   Fichiers servis par le site lui-meme : aucune requete vers Google (sinon
   l'adresse IP de chaque visiteur partirait chez Google sans consentement).
   Un seul fichier variable pour toutes les graisses droites. Les 6 graisses
   declarees sont celles de l'ancienne Nexa (300/400/400i/700/800/900), SANS
   500 ni 600 : un texte en 600 retombe sur le 700 comme avant -> rendu
   identique a l'apercu valide. (Le fichier sait faire un vrai 600 : il
   suffirait de declarer "font-weight: 300 900" pour en profiter.)
   ===================================================== */
@font-face {
    font-family: 'Urbanist';
    src: url('../fonts/urbanist/Urbanist-latin.woff2') format('woff2');
    font-weight: 300; font-style: normal; font-display: swap;
}
@font-face {
    font-family: 'Urbanist';
    src: url('../fonts/urbanist/Urbanist-latin.woff2') format('woff2');
    font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
    font-family: 'Urbanist';
    src: url('../fonts/urbanist/Urbanist-Italic-latin.woff2') format('woff2');
    font-weight: 400; font-style: italic; font-display: swap;
}
@font-face {
    font-family: 'Urbanist';
    src: url('../fonts/urbanist/Urbanist-latin.woff2') format('woff2');
    font-weight: 700; font-style: normal; font-display: swap;
}
@font-face {
    font-family: 'Urbanist';
    src: url('../fonts/urbanist/Urbanist-latin.woff2') format('woff2');
    font-weight: 800; font-style: normal; font-display: swap;
}
@font-face {
    font-family: 'Urbanist';
    src: url('../fonts/urbanist/Urbanist-latin.woff2') format('woff2');
    font-weight: 900; font-style: normal; font-display: swap;
}

* { box-sizing: border-box; }

/* =====================================================
   Typographie de marque : Urbanist partout.
   - Corps de texte  : Urbanist 400
   - Titres          : Urbanist 700
   ===================================================== */
:root {
    --font-marque: 'Urbanist', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
    --font-body:  var(--font-marque);
    --font-title: var(--font-marque);
    --fw-body:  400;
    --fw-title: 700;
}

html, body {
    margin: 0;
    padding: 0;
    font-family: var(--font-body);
    font-weight: var(--fw-body);
    background: #ffffff;
    color: #1a1a1a;
    line-height: 1.55;
}

/* Les controles de formulaire n'heritent pas de la police par defaut (Arial
   sinon, ex. boutons "Ajouter au panier", puces allergenes). */
button, input, select, textarea {
    font-family: inherit;
}

/* Titres : Urbanist 700. Couvre les balises + les "titres" en div/span. */
h1, h2, h3, h4, h5, h6,
.brand,
.carrousel-title,
.cat-name,
.lbb-categories-list__title,
.lbb-home-banner__overlay {
    font-family: var(--font-title);
    font-weight: var(--fw-title);
}

a { color: #DE0145; }
a:hover { color: #DE0145; }

.public-header {
    background: #DE0145;
    color: #FFFFFF;
    padding: 1rem 0;
    box-shadow: 0 2px 6px rgba(0,0,0,0.1);
}
.header-inner {
    max-width: 1100px;
    margin: 0 auto;
    padding: 0 1.5rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 0.5rem;
}
.brand {
    font-size: 1.4rem;
    font-weight: 700;
    color: #FFFFFF;
    text-decoration: none;
    letter-spacing: 0.5px;
}
.public-header nav a {
    color: #FFFFFF;
    text-decoration: none;
    margin-left: 1.2rem;
}
.public-header nav a:hover { color: #fff; }

.public-footer {
    margin-top: 3rem;
    padding: 1.5rem;
    text-align: center;
    background: #A60037;
    color: #FFFFFF;
    font-size: 0.9rem;
}

.public-container {
    max-width: 1100px;
    margin: 2rem auto;
    padding: 0 1.5rem;
}
.public-container h1 { color: #DE0145; margin: 0 0 0.5rem; }
.lead { color: #DE0145; margin-top: 0; font-size: 1.05rem; }

.boutique-grid.public {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 1.5rem;
    margin-top: 1.5rem;
}
.boutique-card.public {
    background: #fff;
    border: 1px solid #F8C7D2;
    border-radius: 8px;
    padding: 1.5rem;
    display: flex;
    flex-direction: column;
    box-shadow: 0 2px 4px rgba(0,0,0,0.04);
    transition: transform .15s, box-shadow .15s;
}
.boutique-card.public:hover {
    transform: translateY(-3px);
    box-shadow: 0 6px 16px rgba(0,0,0,0.08);
}
.boutique-card.public .boutique-logo {
    width: 100%;
    height: 140px;
    object-fit: contain;
    margin-bottom: 0.8rem;
    background: #ffffff;
    border-radius: 4px;
}
.boutique-card.public h2 { margin: 0 0 0.4rem; color: #DE0145; font-size: 1.2rem; }
.boutique-card.public p  { margin: 0.3rem 0; font-size: 0.95rem; }
.boutique-card.public .adresse { color: #1a1a1a; }

.horaires summary {
    cursor: pointer;
    color: #DE0145;
    font-weight: 600;
    padding: 0.4rem 0;
}
.horaires ul { list-style: none; padding: 0; margin: 0.4rem 0; font-size: 0.9rem; }
.horaires li {
    display: flex;
    justify-content: space-between;
    padding: 0.15rem 0;
    border-bottom: 1px dotted #F8C7D2;
}
.horaires .jour { font-weight: 600; }
.horaires .creneaux { color: #1a1a1a; }

.btn-cta {
    display: inline-block;
    background: #DE0145;
    color: #fff;
    padding: 0.7rem 1.4rem;
    border-radius: 4px;
    text-decoration: none;
    font-weight: 600;
    border: none;
    cursor: pointer;
    font-size: 1rem;
    margin-top: 1rem;
    transition: background .15s;
}
.btn-cta:hover { background: #B30037; color: #fff; }
/* Bouton de paiement : framboise de la marque. Il etait violet Stripe
   (#6772e5) - la couleur d'un prestataire, pas celle de la boulangerie. */
.btn-pay { background: #DE0145; }
.btn-pay:hover { background: #DE0145; }

/* =========================================================
   Commentaire de commande (reservation.php)
   Fond BLANC (jamais de creme), le framboise ne sert qu'aux accents.
   ========================================================= */
.lbb-commentaire {
    margin: 0 0 1rem;
    padding: 1rem 1.1rem 1.05rem;
    background: #FFFFFF;
    border: 1px solid #F1E6EA;
    border-radius: 16px;
    transition: border-color .2s ease, box-shadow .2s ease;
}
.lbb-commentaire:focus-within {
    border-color: #DE0145;
    box-shadow: 0 0 0 4px rgba(222, 1, 69, .10);
}
.lbb-commentaire__tete {
    display: flex;
    align-items: center;
    gap: .7rem;
    margin-bottom: .75rem;
}
.lbb-commentaire__icone {
    flex-shrink: 0;
    width: 38px; height: 38px;
    display: grid; place-items: center;
    border-radius: 50%;
    background: #FAE5EB;
    color: #DE0145;
    font-size: 1.05rem;
}
.lbb-commentaire label.lbb-commentaire__titre {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: .5rem;
    margin: 0;
    font-size: 1.02rem;
    font-weight: 700;
    color: #1a1a1a;
}
.lbb-commentaire__facultatif {
    padding: .16rem .55rem;
    border-radius: 999px;
    background: #F5F5F5;
    color: #6b6b6b;
    font-size: .7rem;
    font-weight: 700;
    letter-spacing: .05em;
    text-transform: uppercase;
}

.lbb-commentaire__suggestions {
    display: flex;
    flex-wrap: wrap;
    gap: .4rem;
    margin-bottom: .65rem;
}
.lbb-commentaire__chip {
    display: inline-flex;
    align-items: center;
    padding: .38rem .85rem;
    border-radius: 999px;
    border: 1px solid #F1C9D5;
    background: #FFFFFF;
    color: #B30037;
    font-family: inherit;
    font-size: .84rem;
    font-weight: 700;
    cursor: pointer;
    transition: transform .15s ease, border-color .15s ease;
}
.lbb-commentaire__chip::before { content: '+'; margin-right: .3rem; font-weight: 800; }
.lbb-commentaire__chip:hover { transform: translateY(-1px) scale(1.04); border-color: #DE0145; }
.lbb-commentaire__chip:focus-visible { outline: none; box-shadow: 0 0 0 3px rgba(222, 1, 69, .25); }
/* Deja ajoutee : la pastille se coche, sans disparaitre (on voit ce qu'on a mis). */
.lbb-commentaire__chip.is-ajoute { border-color: #1e6b3b; color: #1e6b3b; }
.lbb-commentaire__chip.is-ajoute::before { content: '\2713'; }

.lbb-commentaire textarea.lbb-commentaire__champ {
    display: block;
    width: 100%;
    min-height: 104px;
    padding: .8rem 1rem;
    border: 1px solid #E6E6E6;
    border-radius: 12px;
    background: #FFFFFF;
    color: #1a1a1a;
    font-family: inherit;
    font-size: 1rem;      /* 16 px : en dessous, Safari iOS zoome la page au toucher */
    line-height: 1.5;
    resize: vertical;
    transition: border-color .15s ease;
}
.lbb-commentaire textarea.lbb-commentaire__champ::placeholder { color: #9a9a9a; font-style: italic; }
.lbb-commentaire textarea.lbb-commentaire__champ:focus { outline: none; border-color: #DE0145; }

.lbb-commentaire__pied {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    margin-top: .5rem;
    font-size: .8rem;
    color: #6b6b6b;
}
.lbb-commentaire__compteur {
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
    transition: color .15s ease;
}
.lbb-commentaire.is-presque-plein .lbb-commentaire__compteur { color: #DE0145; font-weight: 700; }

@media (prefers-reduced-motion: reduce) {
    .lbb-commentaire, .lbb-commentaire__chip, .lbb-commentaire__champ { transition: none; }
    .lbb-commentaire__chip:hover { transform: none; }
}

/* Texte reserve aux lecteurs d ecran : invisible a l ecran, mais lu.
   (Les logos de paiement sont des images : sans ce texte, un client
   aveugle entendrait une liste vide.) */
.visually-hidden {
    position: absolute !important;
    width: 1px; height: 1px;
    margin: -1px; padding: 0;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}

/* =========================================================
   Zone de paiement (reservation.php)
   Un gros bouton qui dit COMBIEN on paie, puis la rangee des
   moyens acceptes : le client sait avant de cliquer qu'il pourra
   regler comme il en a l'habitude.
   ========================================================= */
.lbb-pay {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
    margin: 1.8rem auto 2.2rem;
    max-width: 560px;
    padding-inline: 1rem;
    text-align: center;
}

.lbb-pay__btn.btn-cta {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    min-height: 62px;
    margin: 0;
    padding: 0 2rem;
    border-radius: 999px;
    font-family: inherit;
    font-size: 1.12rem;
    font-weight: 700;
    letter-spacing: .01em;
    color: #FFFFFF;
    background: #DE0145;
    box-shadow: 0 14px 30px -12px rgba(222, 1, 69, .55),
                inset 0 -2px 0 rgba(0, 0, 0, .12);
    transition: transform .2s cubic-bezier(.2, .8, .3, 1), box-shadow .2s ease;
}
/* Grossit au survol, sans changer de couleur ni de texte (preference client). */
.lbb-pay__btn.btn-cta:hover:not(:disabled) {
    background: #DE0145;
    color: #FFFFFF;
    transform: translateY(-2px) scale(1.02);
    box-shadow: 0 20px 38px -14px rgba(222, 1, 69, .65),
                inset 0 -2px 0 rgba(0, 0, 0, .12);
}
.lbb-pay__btn.btn-cta:active:not(:disabled) { transform: translateY(0) scale(.99); }
.lbb-pay__btn.btn-cta:focus-visible {
    outline: none;
    box-shadow: 0 0 0 4px rgba(222, 1, 69, .28), 0 14px 30px -12px rgba(222, 1, 69, .55);
}
/* Reflet qui balaie le bouton au survol : discret, une seule fois. */
.lbb-pay__btn.btn-cta::after {
    content: '';
    position: absolute;
    top: 0; bottom: 0; left: -60%;
    width: 40%;
    background: linear-gradient(100deg, transparent, rgba(255, 255, 255, .28), transparent);
    transform: skewX(-18deg);
    pointer-events: none;
}
.lbb-pay__btn.btn-cta:hover:not(:disabled)::after { left: 130%; transition: left .7s ease; }

.lbb-pay__repos,
.lbb-pay__attente {
    display: inline-flex;
    align-items: center;
    gap: .65rem;
}
.lbb-pay__repos strong { font-weight: 800; font-variant-numeric: tabular-nums; }
.lbb-pay__repos svg { flex-shrink: 0; }
.lbb-pay__fleche { transition: transform .2s ease; }
.lbb-pay__btn.btn-cta:hover:not(:disabled) .lbb-pay__fleche { transform: translateX(4px); }

/* Etat d'attente : entre le clic et l'arrivee chez Stripe (1 a 3 s). */
.lbb-pay__attente { display: none; }
.lbb-pay__btn.is-loading .lbb-pay__repos { display: none; }
.lbb-pay__btn.is-loading .lbb-pay__attente { display: inline-flex; }
.lbb-pay__btn.is-loading { cursor: progress; transform: none; }
.lbb-pay__spinner {
    width: 18px; height: 18px;
    border-radius: 50%;
    border: 2.5px solid rgba(255, 255, 255, .35);
    border-top-color: #FFFFFF;
    animation: lbbPaySpin .7s linear infinite;
}
@keyframes lbbPaySpin { to { transform: rotate(360deg); } }

/* ---- Rangee des moyens de paiement ---- */
/* La disposition des logos depend de la place DU CONTENEUR, pas de l'ecran :
   le panier les met dans un cadre plus etroit que la reservation, et une regle
   basee sur la largeur d'ecran laissait Klarna seul sur sa ligne. */
.lbb-pay,
.lbb-moyens-bloc { container-type: inline-size; }
/* Conteneur dans le PANIER (dans la reservation, c'est .lbb-pay qui l'enveloppe). */
.lbb-moyens-bloc {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .75rem;
    max-width: 560px;
    margin: 1.8rem auto .5rem;
    padding: 1.4rem 1rem 0;
    border-top: 1px solid #F1E6EA;
    text-align: center;
}
.lbb-pay__label {
    margin: .2rem 0 0;
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .08em;
    text-transform: uppercase;
    color: #8a8a8a;
}
.lbb-pay__moyens {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: .45rem;
    margin: 0;
    padding: 0;
    list-style: none;
    width: 100%;
}
.lbb-pay__moyen {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .3rem;
    height: 38px;
    min-width: 52px;
    padding: 0 .6rem;
    border-radius: 10px;
    background: #FFFFFF;
    border: 1px solid #E6E6E6;
    box-shadow: 0 1px 2px rgba(0, 0, 0, .04);
    color: #1a1a1a;
    font-size: .82rem;
    font-weight: 800;
    line-height: 1;
}
.lbb-pay__moyen i { font-size: 1.9rem; line-height: 1; }
.lbb-pay__moyen--cb {
    color: #FFFFFF;
    background: #005BAC;
    border-color: #005BAC;
    font-size: .95rem;
    letter-spacing: .04em;
}
.lbb-pay__moyen--visa i  { color: #1A1F71; }
.lbb-pay__moyen--apple i { color: #000000; font-size: 2.3rem; }
.lbb-pay__moyen--google i { color: #3C4043; font-size: 2.3rem; }
.lbb-pay__moyen--revolut { gap: .35rem; font-size: .86rem; }
.lbb-pay__r {
    display: inline-grid;
    place-items: center;
    width: 20px; height: 20px;
    border-radius: 5px;
    background: #000000;
    color: #FFFFFF;
    font-size: .8rem;
    font-weight: 900;
}
/* Le badge Klarna EST rose : c'est la marque, pas un fond decoratif. */
.lbb-pay__moyen--klarna {
    background: #FFB3C7;
    border-color: #FFB3C7;
    color: #0B051D;
    font-size: .92rem;
    letter-spacing: -.01em;
}

.lbb-pay__secu {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .15rem;
    margin: .1rem 0 0;
    font-size: .82rem;
    line-height: 1.45;
    color: #6b6b6b;
}
.lbb-pay__secu strong {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    color: #1e6b3b;
    font-weight: 700;
}
.lbb-pay__secu svg { flex-shrink: 0; }

@media (max-width: 520px) {
    .lbb-pay__btn.btn-cta { min-height: 58px; font-size: 1.04rem; padding: 0 1.2rem; }
    /* Resserre juste assez pour que les 7 tiennent sur UNE ligne (il manquait
       8 px a 520 px de large) : sinon Klarna se retrouvait seul en dessous. */
    .lbb-pay__moyens { gap: .35rem; }
    .lbb-pay__moyen { height: 34px; min-width: 0; padding: 0 .5rem; }
    .lbb-pay__moyen i { font-size: 1.7rem; }
    .lbb-pay__moyen--apple i, .lbb-pay__moyen--google i { font-size: 2rem; }
}
/* Place disponible trop juste pour 7 logos en ligne : plutot qu'un 6 + 1 avec
   un orphelin, une grille nette de 4 + 3, la derniere ligne centree. */
@container (max-width: 500px) {
    .lbb-pay__moyens { gap: .35rem; }
    .lbb-pay__moyen { flex: 0 0 calc((100% - 3 * .35rem) / 4); height: 36px; padding: 0 .4rem; }
}
@media (prefers-reduced-motion: reduce) {
    .lbb-pay__btn.btn-cta,
    .lbb-pay__fleche { transition: none; }
    .lbb-pay__btn.btn-cta:hover:not(:disabled),
    .lbb-pay__btn.btn-cta:hover:not(:disabled) .lbb-pay__fleche { transform: none; }
    .lbb-pay__btn.btn-cta::after { display: none; }
    .lbb-pay__spinner { animation-duration: 1.6s; }
}

.reservation-form { margin-top: 1.5rem; }

.reservation-step {
    background: #fff;
    border: 1px solid #F8C7D2;
    border-radius: 8px;
    padding: 1.5rem;
    margin-bottom: 1.5rem;
}
.reservation-step h2 {
    margin-top: 0;
    color: #DE0145;
    font-size: 1.15rem;
    border-bottom: 2px solid #FFFFFF;
    padding-bottom: 0.4rem;
}
.meta { color: #1a1a1a; font-size: 0.9rem; }

.form-group { margin-bottom: 1rem; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
.form-group label {
    display: block;
    font-weight: 600;
    margin-bottom: 0.3rem;
    color: #1a1a1a;
}
/* :not(...) indispensable : sans ca une case a cocher ou un bouton radio
   place dans un .form-group serait etire sur toute la largeur et passerait
   AU-DESSUS de son libelle au lieu d'etre a cote. */
.form-group input:not([type="checkbox"]):not([type="radio"]),
.reservation-form textarea {
    width: 100%;
    padding: 0.6rem 0.8rem;
    border: 1px solid #ccc;
    border-radius: 4px;
    font-size: 1rem;
    font-family: inherit;
}
.form-group input:focus {
    outline: none;
    border-color: #DE0145;
    box-shadow: 0 0 0 2px rgba(222,1,69,0.15);
}

.categorie-block { margin-bottom: 1.5rem; }
.categorie-block h3 {
    color: #DE0145;
    margin: 0.8rem 0 0.5rem;
    font-size: 1rem;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}

.produits-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: 0.8rem;
}
.produit-card {
    background: #ffffff;
    border: 1px solid #F8C7D2;
    border-radius: 6px;
    padding: 0.8rem;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}
.produit-image {
    width: 100%;
    height: 110px;
    object-fit: cover;
    border-radius: 4px;
    background: #fff;
}
.produit-info h4 { margin: 0; color: #DE0145; font-size: 0.98rem; }
.produit-desc { font-size: 0.85rem; color: #1a1a1a; margin: 0.2rem 0; }
.produit-prix { font-weight: 700; color: #DE0145; margin: 0.2rem 0; }
.produit-qty { display: flex; align-items: center; gap: 0.4rem; }
.produit-qty label { margin: 0; font-size: 0.85rem; font-weight: 600; }
.produit-qty input { width: 70px; padding: 0.3rem; text-align: center; }

.panier-total {
    margin-top: 1rem;
    padding: 0.8rem 1rem;
    background: #ffffff;
    border-left: 4px solid #DE0145;
    font-size: 1.1rem;
    font-weight: 700;
    color: #DE0145;
    text-align: right;
}

.form-actions { text-align: center; margin: 2rem 0 1rem; }

.error-message,
.success-message {
    padding: 0.9rem 1.1rem;
    border-radius: 4px;
    margin: 1rem 0;
    border-left: 4px solid;
}
.error-message   { background: #fdecea; border-color: #c0392b; color: #922b21; }
.success-message { background: #e8f5e9; border-color: #27ae60; color: #1e6b3b; }

.empty {
    background: #ffffff;
    padding: 2rem;
    text-align: center;
    border-radius: 6px;
    color: #1a1a1a;
}

.confirmation-banner {
    border-radius: 8px;
    padding: 2rem 1.5rem;
    text-align: center;
    margin-bottom: 2rem;
}
.confirmation-banner h1 { margin: 0 0 0.5rem; }
.confirmation-banner.success { background: #e8f5e9; border-left: 6px solid #27ae60; }
.confirmation-banner.success h1 { color: #1e6b3b; }
.confirmation-banner.pending { background: #FFFFFF; border: 1px solid #F3E2C0; border-left: 6px solid #f39c12; }
.confirmation-banner.pending h1 { color: #7d5a0b; }

.reservation-details {
    background: #fff;
    border: 1px solid #F8C7D2;
    border-radius: 8px;
    padding: 1.5rem;
}
.detail-block { margin-bottom: 1.2rem; }
.detail-block h3 {
    color: #DE0145;
    margin: 0 0 0.5rem;
    font-size: 1rem;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}

.produits-table { width: 100%; border-collapse: collapse; }
.produits-table th,
.produits-table td {
    padding: 0.6rem 0.5rem;
    border-bottom: 1px solid #F8C7D2;
    text-align: left;
}
.produits-table thead th { background: #ffffff; color: #DE0145; }
.produits-table tfoot th { text-align: right; padding-top: 1rem; font-size: 1.05rem; }

.statut-badge {
    display: inline-block;
    padding: 0.2rem 0.6rem;
    border-radius: 12px;
    font-size: 0.82rem;
    font-weight: 600;
}
.statut-en_attente { background: #FFFFFF; color: #7d5a0b; box-shadow: inset 0 0 0 1px #E3B23C; }
.statut-confirme   { background: #cfe5ff; color: #084b8f; }
.statut-pret       { background: #d4edda; color: #1e6b3b; }
.statut-retire     { background: #e2e3e5; color: #1a1a1a; }
.statut-annule     { background: #f8d7da; color: #922b21; }

@media (max-width: 720px) {
    .form-row { grid-template-columns: 1fr; }
    .header-inner { flex-direction: column; align-items: flex-start; }
    .public-header nav a { margin-left: 0; margin-right: 1rem; }
    .produits-table { display: block; overflow-x: auto; }
}

/* ------------------------------------------------------------------ *
 * E-mails NON cliquables (anti-robots spammeurs).
 * L'adresse est affichee en clair mais sans lien mailto ; un clic la
 * selectionne entierement pour un copier-coller facile.
 * ------------------------------------------------------------------ */
.email-plain {
    color: #DE0145;
    cursor: pointer;
    -webkit-user-select: all;
    user-select: all;
    text-decoration: underline dotted;
    text-underline-offset: .18em;
    word-break: break-word;
}

/* =========================================================
   Cartes produit : selecteur de quantite + indicateur panier
   Partage par categorie.php / recherche.php (et toute grille
   .produit-grid a venir). categorie.php peut surcharger en
   inline pour ses specificites de mise en page.
   ========================================================= */

/* Stepper de quantite : saisie manuelle possible (grosses commandes) */
.produit-tile .tile-qty {
    align-self: center;
    display: inline-flex;
    align-items: center;
    margin: 0.3rem auto 0;
    background: #ffffff;
    border: 1.5px solid #E6E6E6;
    border-radius: 999px;
    overflow: hidden;
}
.produit-tile .tile-qty__btn {
    width: 32px;
    height: 30px;
    border: none;
    background: #ffffff;
    color: #DE0145;
    font-size: 1.15rem;
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
    transition: background .12s;
    display: flex;
    align-items: center;
    justify-content: center;
}
.produit-tile .tile-qty__btn:hover  { background: #F5F5F5; }
.produit-tile .tile-qty__btn:active { background: #EDEDED; }
.produit-tile .tile-qty__val {
    width: 46px;
    text-align: center;
    border: none;
    background: transparent;
    padding: 0;
    color: #1a1a1a;
    font-weight: 700;
    font-size: 0.92rem;
    font-family: inherit;
    font-variant-numeric: tabular-nums;
    -moz-appearance: textfield;
}
.produit-tile .tile-qty__val::-webkit-outer-spin-button,
.produit-tile .tile-qty__val::-webkit-inner-spin-button {
    -webkit-appearance: none;
    margin: 0;
}
.produit-tile .tile-qty__val:focus {
    outline: 2px solid #DE0145;
    outline-offset: 1px;
    border-radius: 4px;
}

/* Indicateur "deja au panier" : lisible en faisant defiler, sans ouvrir le panier */
.produit-tile .produit-tile__media { position: relative; }
.produit-tile__cart-badge {
    position: absolute;
    top: 0.5rem;
    left: 0.5rem;
    z-index: 2;
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    padding: 0.26rem 0.6rem;
    border-radius: 999px;
    background: #1e6b3b;
    color: #FFFFFF;
    font-size: 0.74rem;
    font-weight: 700;
    line-height: 1;
    box-shadow: 0 2px 6px rgba(0,0,0,0.18);
}
/* display:inline-flex ecrase le [hidden] par defaut du navigateur */
.produit-tile__cart-badge[hidden] { display: none; }
.produit-tile__cart-badge i { font-size: 0.72rem; }
.produit-tile__cart-badge-txt { font-weight: 600; opacity: 0.95; }
.produit-tile__cart-badge.is-bump { animation: lbbBadgeBump .35s ease; }
@keyframes lbbBadgeBump {
    0%   { transform: scale(1); }
    45%  { transform: scale(1.18); }
    100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
    .produit-tile__cart-badge.is-bump { animation: none; }
}
.produit-tile.is-in-cart {
    border-color: #1e6b3b;
    box-shadow: 0 0 0 1px #1e6b3b inset;
}

/* =========================================================
   Jours de disponibilite (produit fabrique certains jours seulement,
   ex. "Uniquement le samedi") : pastille discrete sur les tuiles,
   l'apercu rapide et le panier. Fond BLANC + liseré framboise
   (jamais d'aplat creme). Encart du panier / de la reservation :
   fond blanc, la bordure porte le sens.
   ========================================================= */
.lbb-jours-dispo {
    align-self: center;
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    margin: 0.1rem auto 0;
    padding: 0.2rem 0.6rem;
    border-radius: 999px;
    background: #FFFFFF;
    border: 1px solid #F8C7D2;
    color: #DE0145;
    font-size: 0.74rem;
    font-weight: 700;
    line-height: 1.25;
    text-align: center;
}
.lbb-jours-dispo i { font-size: 0.72rem; }
.lbb-jours-dispo[hidden] { display: none; }
.lbb-jours-dispo--gauche { align-self: flex-start; margin: 0.25rem 0 0; }

.lbb-jours-encart {
    display: flex;
    align-items: flex-start;
    gap: 0.7rem;
    margin: 0 0 1.1rem;
    padding: 0.85rem 1.1rem;
    background: #FFFFFF;
    border: 1px solid #F8C7D2;
    border-left: 4px solid #DE0145;
    border-radius: 6px;
    color: #1a1a1a;
    font-size: 0.93rem;
    line-height: 1.45;
}
.lbb-jours-encart > i {
    flex-shrink: 0;
    margin-top: 0.15rem;
    color: #DE0145;
    font-size: 1.05rem;
}
.lbb-jours-encart p { margin: 0; }
.lbb-jours-encart p + p { margin-top: 0.35rem; }
.lbb-jours-encart strong { color: #DE0145; }
/* Panier impossible a retirer (produits sans jour commun) : bloquant */
.lbb-jours-encart--bloquant {
    border-color: #c0392b;
    border-left-color: #c0392b;
}
.lbb-jours-encart--bloquant > i,
.lbb-jours-encart--bloquant strong { color: #c0392b; }

/* Rappel du lieu de retrait deja choisi (catalogue, panier) */
.lbb-retrait-note {
    max-width: 900px;
    margin: 0 auto 1.2rem;
    padding: 0.6rem 1rem;
    border-radius: 10px;
    background: #FAE5EB;
    border: 1px solid #F8C7D2;
    color: #5b4633;
    font-size: 0.9rem;
    text-align: center;
}
.lbb-retrait-note strong { color: #DE0145; }
.lbb-retrait-note a {
    color: #DE0145;
    font-weight: 700;
    margin-left: 0.4rem;
}
.lbb-retrait-note--alerte {
    background: #FFFFFF;
    border-color: #FFE082;
}

/* =========================================================
   Vente additionnelle ("Avec ceci ?") - bas du panier
   ========================================================= */
.upsell {
    margin: 2rem 0 1.5rem;
    padding: 1.3rem 1.2rem 1.5rem;
    border-radius: 16px;
    background: #FFFFFF;   /* blanc, jamais rose (client, 28/10/2026) */
    border: 1px solid #F8C7D2;
}
.upsell__head { text-align: center; margin-bottom: 1.1rem; }
.upsell__head h2 {
    margin: 0 0 0.25rem;
    color: #DE0145;
    font-size: 1.3rem;
}
.upsell__head p {
    margin: 0;
    color: #5b4633;
    font-size: 0.9rem;
}
.upsell__list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 0.9rem;
}
.upsell__item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.35rem;
    padding: 0.8rem 0.6rem;
    background: #FFFFFF;
    border: 1px solid #F0E8EA;
    border-radius: 12px;
    text-align: center;
    transition: border-color .15s, transform .15s;
}
.upsell__item:hover {
    border-color: #F8C7D2;
    transform: translateY(-2px);
}
.upsell__item.is-added {
    border-color: #1e6b3b;
    box-shadow: 0 0 0 1px #1e6b3b inset;
}
.upsell__media {
    width: 74px;
    height: 74px;
    border-radius: 50%;
    overflow: hidden;
    background: #FAE5EB;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.upsell__media img { width: 100%; height: 100%; object-fit: cover; }
.upsell__media-vide { color: #DE0145; font-size: 1.5rem; }
.upsell__nom {
    margin: 0;
    font-size: 0.86rem;
    font-weight: 600;
    color: #1a1a1a;
    line-height: 1.25;
}
.upsell__prix {
    margin: 0;
    font-size: 0.86rem;
    font-weight: 700;
    color: #DE0145;
    font-variant-numeric: tabular-nums;
}
.upsell__add {
    margin-top: 0.25rem;
    padding: 0.4rem 0.95rem;
    border: none;
    border-radius: 999px;
    background: #DE0145;
    color: #FFFFFF;
    font-weight: 700;
    font-size: 0.82rem;
    font-family: inherit;
    cursor: pointer;
    transition: background .15s;
}
.upsell__add:hover    { background: #B30037; }
.upsell__add:disabled { opacity: 0.6; cursor: wait; }
.upsell__add.is-done  { background: #1e6b3b; }

/* =========================================================
   Espace client (compte*.php)
   ========================================================= */
.compte-page {
    max-width: 780px;
    margin: 2rem auto 3rem;
    padding: 0 1.2rem;
}
.compte-page--large { max-width: 980px; }
/* Pages connexion / inscription / mot de passe : colonne etroite.
   A 780px, les boutons s'etirent sur toute la largeur et font tache. */
.compte-page--auth { max-width: 560px; }
.compte-page h1 {
    color: #DE0145;
    text-align: center;
    font-size: 2rem;
    margin: 0 0 0.4rem;
}
.compte-page .lead {
    text-align: center;
    color: #1a1a1a;
    margin: 0 0 1.8rem;
    line-height: 1.5;
}
/* "Se deconnecter" de l'en-tete du compte : un formulaire POST (jeton CSRF,
   un lien externe ne peut plus deconnecter le client), dont le bouton garde
   l'apparence du simple lien qu'il remplace. */
.compte-deconnexion { display: inline; margin: 0; }
.compte-deconnexion button {
    background: none;
    border: 0;
    padding: 0;
    color: #DE0145;
    font: inherit;
    text-decoration: underline;
    cursor: pointer;
}
.compte-card {
    background: #fff;
    border: 1px solid #F8C7D2;
    border-radius: 12px;
    padding: 1.6rem;
    box-shadow: 0 2px 8px rgba(0,0,0,0.04);
    margin-bottom: 1.5rem;
}
.compte-card h2 {
    margin: 0 0 1rem;
    color: #DE0145;
    font-size: 1.15rem;
}
.compte-card .form-group { margin-bottom: 1rem; }
.compte-card label {
    display: block;
    font-weight: 600;
    color: #1a1a1a;
    margin-bottom: 0.3rem;
    font-size: 0.92rem;
}
.compte-card input[type="text"],
.compte-card input[type="email"],
.compte-card input[type="tel"],
.compte-card input[type="password"],
.compte-card select {
    width: 100%;
    padding: 0.6rem 0.7rem;
    border: 1.5px solid #E6E6E6;
    border-radius: 8px;
    font-family: inherit;
    font-size: 0.95rem;
    background: #fff;
    color: #1a1a1a;
}
.compte-card input:focus,
.compte-card select:focus {
    outline: none;
    border-color: #DE0145;
}
.compte-card .meta {
    font-size: 0.82rem;
    color: #777;
    margin: 0.3rem 0 0;
}
.compte-btn {
    display: inline-block;
    width: 100%;
    padding: 0.7rem 1.2rem;
    border: none;
    border-radius: 999px;
    background: #DE0145;
    color: #fff;
    font-weight: 700;
    font-size: 0.95rem;
    font-family: inherit;
    text-align: center;
    text-decoration: none;
    cursor: pointer;
    transition: background .15s;
}
.compte-btn:hover { background: #B30037; }
.compte-btn--secondaire {
    background: #fff;
    color: #DE0145;
    border: 1.5px solid #DE0145;
}
.compte-btn--secondaire:hover { background: #FAE5EB; color: #B30037; }

/* Liens de bas de formulaire */
.compte-liens {
    text-align: center;
    margin-top: 1.2rem;
    font-size: 0.9rem;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}
.compte-liens a { color: #DE0145; font-weight: 600; }

/* Separateur "ou" entre email et fournisseurs externes */
.compte-ou {
    display: flex;
    align-items: center;
    gap: 0.8rem;
    margin: 1.4rem 0;
    color: #999;
    font-size: 0.85rem;
}
.compte-ou::before,
.compte-ou::after {
    content: "";
    flex: 1;
    height: 1px;
    background: #E6E6E6;
}


/* =========================================================
   Boutons fournisseur d'identite (Google / Apple)
   Cote a cote, meme gabarit, contenu parfaitement centre.
   ========================================================= */
.compte-oauth__intro {
    margin: 0 0 0.7rem;
    text-align: center;
    font-size: 0.9rem;
    font-weight: 600;
    color: #1a1a1a;
}
.compte-oauth {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(0, 1fr));   /* un bouton = toute la largeur, deux = cote a cote */
    gap: 0.7rem;
    align-items: stretch;             /* meme hauteur quoi qu'il arrive */
}
.compte-oauth__btn {
    position: relative;               /* ancre la pastille "Bientot" */
    display: flex;
    align-items: center;
    justify-content: center;          /* logo + nom centres */
    gap: 0.55rem;
    min-height: 48px;
    padding: 0.7rem 0.9rem;
    border: 1.5px solid #DADCE0;
    border-radius: 999px;
    background: #FFFFFF;
    color: #1F1F1F;                   /* police noire, Google comme Apple */
    font-family: inherit;
    font-size: 0.95rem;
    font-weight: 600;
    line-height: 1;
    text-decoration: none;
    cursor: pointer;
    transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
/* Survol : le bouton grandit legerement au lieu de se surligner.
   Pas de changement de fond : le bouton reste blanc, c'est plus net. */
.compte-oauth__btn:hover {
    transform: scale(1.035);
    border-color: #C6C9CC;
    box-shadow: 0 4px 14px rgba(0, 0, 0, 0.10);
    z-index: 1;                 /* passe au-dessus du bouton voisin */
    /* Le bouton Google est un <a> : sans ca, la regle globale
       `a:hover { color: #DE0145 }` teinterait le libelle en framboise
       au survol. On refige la couleur du texte. */
    color: #1F1F1F;
}
.compte-oauth__btn:active {
    transform: scale(0.995);    /* petit rebond a l'appui */
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.10);
}
.compte-oauth__btn:focus-visible {
    outline: 2px solid #DE0145;
    outline-offset: 2px;
}
/* Le logo garde son rapport dans une boite carree : le G Google la
   remplit, la pomme (plus haute que large) s'y centre d'elle-meme. */
.compte-oauth__logo {
    width: 18px;
    height: 18px;
    flex-shrink: 0;
    display: block;
}
.compte-oauth__logo--apple { color: #000000; }   /* pomme noire */
.compte-oauth__nom { white-space: nowrap; }

/* Fournisseur pas encore branche : meme habillage (pas de gris sale),
   seule la pastille signale l'indisponibilite. Le bouton reste inerte. */
.compte-oauth__btn--bientot {
    cursor: not-allowed;
    border-style: dashed;   /* seul indice visuel, avec la pastille */
}
/* Le bouton inactif ne doit RIEN faire au survol : le grossir laisserait
   croire qu'il repond, alors qu'il est inerte. */
.compte-oauth__btn--bientot:hover,
.compte-oauth__btn--bientot:active {
    transform: none;
    border-color: #DADCE0;
    box-shadow: none;
}
/* Position absolue : la pastille ne doit PAS pousser le contenu,
   sinon logo + nom ne seraient plus alignes avec l'autre bouton. */
.compte-oauth__bientot {
    position: absolute;
    top: -8px;
    right: 10px;
    padding: 0.1rem 0.45rem;
    border-radius: 999px;
    background: #E6E6E6;
    color: #6b6b6b;
    font-size: 0.62rem;
    font-weight: 800;
    letter-spacing: 0.4px;
    text-transform: uppercase;
    line-height: 1.5;
}

/* Ecrans etroits : on repasse en colonne, sinon les libelles se cassent. */
@media (max-width: 460px) {
    .compte-oauth { grid-template-columns: 1fr; }
    .compte-oauth__bientot { top: 50%; right: 12px; transform: translateY(-50%); }
}

/* Accessibilite : pas d'animation pour qui a demande a en etre dispense. */
@media (prefers-reduced-motion: reduce) {
    .compte-oauth__btn { transition: border-color .18s ease; }
    .compte-oauth__btn:hover,
    .compte-oauth__btn:active { transform: none; }
}

/* Ligne de consentement (RGPD) : case a GAUCHE du texte, alignee sur la
   premiere ligne, et le texte qui revient a la ligne reste en retrait
   sans repasser sous la case. */
label.compte-consentement {
    display: flex;
    align-items: flex-start;
    gap: 0.6rem;
    font-weight: 400;
    font-size: 0.86rem;
    line-height: 1.45;
    color: #1a1a1a;
    cursor: pointer;
}
label.compte-consentement input[type="checkbox"] {
    flex-shrink: 0;       /* la case ne se comprime jamais */
    width: 17px;
    height: 17px;
    margin: 0;
    margin-top: 0.12rem;  /* cale la case sur la premiere ligne de texte */
    accent-color: #DE0145;
    cursor: pointer;
}
label.compte-consentement a { color: #DE0145; font-weight: 700; }

/* Phrase d'acceptation des CGU (decision du client du 27/10/2026) : sous
   chaque bouton qui cree un compte (formulaire, Google / Apple), SANS case a
   cocher. Petit texte gris mais lisible : #595959 sur blanc = contraste 7:1. */
.compte-cgu {
    margin: 0.7rem 0 0;
    text-align: center;
    font-size: 0.82rem;
    line-height: 1.45;
    color: #595959;
}
.compte-cgu a {
    color: #DE0145;
    font-weight: 600;
    text-decoration: underline;
    text-underline-offset: 0.15em;
}

/* =========================================================
   Telephone : confort au doigt (2026-10-06)
   - Champs a 16 px minimum : en dessous, Safari iOS zoome toute la page
     des qu'on touche le champ, et il faut ensuite dezoomer a la main.
   - Cibles tactiles portees a 36-40 px : des + / - de 30 px et des
     boutons de 26 px de haut se ratent au pouce.
   Specificite renforcee (.tile-qty au milieu) : categorie.php redeclare
   le stepper dans son propre <style>, charge APRES cette feuille.
   ========================================================= */
@media (max-width: 720px) {
    .produit-tile .tile-qty .tile-qty__btn { width: 40px; height: 38px; font-size: 1.3rem; }
    .produit-tile .tile-qty .tile-qty__val { width: 44px; font-size: 16px; }

    .upsell__add { padding: 0.55rem 1.1rem; font-size: 0.86rem; }

    .lbb-commentaire .lbb-commentaire__chip { padding: 0.5rem 0.95rem; }

    .compte-card input[type="text"],
    .compte-card input[type="email"],
    .compte-card input[type="tel"],
    .compte-card input[type="password"],
    .compte-card select { font-size: 16px; }

    .compte-oauth__bientot { font-size: 0.68rem; }
}
