/* =========================================================
   Cave Coste — Pages de contenu v4
   (faq / cgv / legal / presentation / paiement-securise /
    liens / form / inscription-newsletter).
   Coquille : bandeau crème (.cc-cat-title, déjà dans site.css)
   + corps 2 colonnes (texte borné .main-col + panneau .aside).
   Présentation PURE. Chargé conditionnellement via header.inc.php ($is_contenu).
   Jetons hérités de site.css ; on n'ajoute que --read-width et --line.
   ========================================================= */
:root{ --read-width:720px; --line:#ececec; }

.cc-content{font-size:15px;line-height:1.65;color:var(--clr-text)}
/* Le .cc-container global est scopé .cc-cat → on (re)définit pour .cc-content */
.cc-content .cc-container{max-width:var(--max-width);margin:0 auto;padding:0 24px}

/* ---- Corps 2 colonnes ---- */
.cc-content .content-wrap{padding:46px 0 64px;background:#fff}
/* flex-start (et non space-between) : la .main-col étant bornée à --read-width,
   space-between rejetait tout l'espace résiduel ENTRE le texte et l'aside, qui
   semblait alors détaché/décalé à droite (retour Thomas R11). En flex-start, l'aside
   suit le contenu avec le seul gap de 56px. */
.cc-content .content-layout{display:flex;gap:56px;align-items:flex-start;justify-content:flex-start}
.cc-content .main-col{flex:1 1 auto;max-width:var(--read-width);min-width:0}
/* top = hauteur réelle du header (var --header-h posée en JS, cf. index.php) + 20px
   d'air : le sommaire se gare SOUS le header quand il réapparaît au scroll vers le
   haut, au lieu de passer derrière. Quand le header se masque au scroll vers le
   bas (.header--hidden), le JS met --header-h à 0 → le sommaire remonte et suit
   réellement l'espace visible. Transition .25s pour fluidifier le mouvement. */
.cc-content .aside{flex:0 0 290px;position:sticky;top:calc(var(--header-h, 0px) + 20px);transition:top .25s ease}

/* ---- Colonne de lecture ---- */
.reading h2{font-family:var(--ff-title);font-size:21px;font-weight:600;color:var(--clr-text-dark);margin:42px 0 14px;padding-bottom:10px;border-bottom:1px solid var(--line);position:relative;scroll-margin-top:calc(var(--header-h, 158px) + 20px)}
.reading h2:first-child{margin-top:0}
/* #27 (Thomas 20260702) — le décalage d'ancre (header sticky 158px) ne s'appliquait
   qu'aux <h2>. La cible « Visite virtuelle » est un <p id="visite-virtuelle">,
   qui se calait donc SOUS le header. On l'étend à toute cible ancrée de la
   colonne de lecture (même valeur que les h2).
   Fallback 158px (≈ hauteur header desktop) au lieu de 70px : --header-h est posé
   en inline sur <html> PAR LE JS après chargement ; avant, le calc retombait sur
   le fallback → 1er saut trop haut puis recalage = le « saut en deux temps » signalé.
   Un fallback réaliste rend le décalage correct DÈS le premier rendu (vérifié dev :
   ancre à top 0 sans règle → top 178 avec). */
.reading [id]{scroll-margin-top:calc(var(--header-h, 158px) + 20px)}
.reading h2::before{content:"";position:absolute;left:0;bottom:-1px;width:46px;height:3px;background:var(--clr-or);border-radius:2px}
.reading h3{font-family:var(--ff-title);font-size:16px;font-weight:600;color:var(--clr-text-dark);margin:26px 0 8px}
.reading p{margin:0 0 16px}
.reading strong,.reading b{color:var(--clr-text-dark)}
/* Liens de contenu : affordance cliquable = or + soulignement permanent (retours Thomas 04/07 #15). */
.reading a{color:var(--clr-or-text);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}
.reading a:hover{color:var(--clr-text-dark)}
.reading ul,.reading ol{margin:0 0 18px;padding-left:4px;list-style:none}
.reading ol{counter-reset:li;padding-left:0}
.reading ul li{position:relative;padding-left:26px;margin-bottom:10px}
.reading ul li::before{content:"";position:absolute;left:4px;top:9px;width:7px;height:7px;border-radius:50%;background:var(--clr-or)}
.reading ol li{position:relative;padding-left:42px;margin-bottom:12px;counter-increment:li}
.reading ol li::before{content:counter(li);position:absolute;left:0;top:-2px;width:28px;height:28px;background:var(--clr-bg-light);color:var(--clr-or-text);border:1.5px solid var(--c-border-struct);border-radius:50%;font-family:var(--ff-title);font-weight:600;font-size:13px;display:flex;align-items:center;justify-content:center}
.reading blockquote{margin:0 0 18px;padding:14px 18px;background:var(--clr-bg-light);border-left:4px solid var(--clr-or);border-radius:var(--radius-m)}

/* ---- Encadré d'appel (callout) ---- */
.cc-content .callout{display:flex;gap:14px;background:var(--c-bg-soft);border:1px solid var(--c-border-struct);border-left:4px solid var(--fb-in-tx);border-radius:var(--radius-m);padding:18px 20px;margin:0 0 24px}
.cc-content .callout .ic{flex:0 0 auto;color:var(--fb-in-tx)}
.cc-content .callout .ic svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.cc-content .callout p{margin:0}
/* Variante SUCCÈS du callout (confirmation d'action réussie, ex. contact envoyé) :
   filet + icône OR au lieu du bleu info. Doctrine or/encre — succès = or (vague
   « .erreur global », 21/07). L'icône cc_icon('valide') porte déjà sa coche or. */
.cc-content .callout--ok{border-left-color:var(--clr-or)}
.cc-content .callout--ok .ic{color:var(--clr-or-text)}

/* ---- Bandeau de réassurance (.trust) — bloc « Commander en toute confiance » ----
   3 colonnes, filets fins ; pastille crème + picto cc_icon (encre + touche or).
   Doctrine tokens : aucune valeur en dur. */
.trust{display:grid;grid-template-columns:repeat(3,1fr);background:var(--clr-white);border:1px solid var(--c-border-struct);border-radius:var(--radius-m);overflow:hidden;margin:8px 0 26px}
.trust .item{display:flex;align-items:center;gap:14px;padding:18px 22px}
.trust .item + .item{border-left:1px solid var(--line)}
.trust .tic{flex:0 0 auto;width:40px;height:40px;border-radius:50%;background:var(--clr-bg-light);display:flex;align-items:center;justify-content:center;color:var(--clr-ink)}
.trust .txt b{display:block;font-family:var(--ff-title);font-size:13.5px;font-weight:700;color:var(--clr-text-dark);line-height:1.2}
.trust .txt span{display:block;font-size:12px;color:var(--clr-text);margin-top:3px;line-height:1.35}

/* ---- Légende codes couleur (remplace /img/carre_*.png) ---- */
.color-key{display:grid;grid-template-columns:repeat(2,1fr);gap:12px 28px;background:#fbfaf6;border:1px solid var(--line);border-radius:var(--radius-m);padding:20px 22px;margin:0 0 24px}
.color-key div{display:flex;align-items:center;gap:11px;font-size:14px}
.color-key .swatch{width:16px;height:16px;border-radius:4px;flex:0 0 auto;box-shadow:0 0 0 1px rgba(0,0,0,.08)}

/* ---- Carte / iframe ---- */
.cc-content .map-frame{border-radius:var(--radius-m);overflow:hidden;border:1px solid var(--line);margin:0 0 8px}
.cc-content .map-frame iframe{display:block;width:100%;height:320px;border:0}
.cc-content .caption{font-size:12.5px;color:#8a8270;text-align:center;margin:0 0 24px}

/* ---- Tableau ---- */
.reading table{width:100%;border-collapse:collapse;margin:0 0 24px;font-size:14px}
.reading th,.reading td{text-align:left;padding:11px 14px;border-bottom:1px solid var(--line)}
.reading thead th{background:var(--clr-bg-light);font-family:var(--ff-title);font-weight:600;color:var(--clr-text-dark);border-bottom:1px solid var(--c-border-struct)}
.reading tbody tr:last-child td{border-bottom:0}

/* ---- Liste de liens (page liens) ---- */
.reading .liens{margin:0 0 16px}
.reading .liens a{word-break:break-word}

/* ---- Panneau : sommaire ---- */
.toc{background:#fff;border:1px solid var(--line);border-radius:var(--radius-m);padding:18px 20px;box-shadow:0 6px 20px rgba(0,0,0,.04)}
.toc h4{font-family:var(--ff-title);font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:1.3px;color:var(--clr-text-dark);margin:0 0 12px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.toc ul{list-style:none;margin:0;padding:0}
.toc li{margin:0 0 2px}
.toc a{display:block;font-size:13.5px;font-weight:500;color:var(--clr-text);padding:7px 10px 7px 14px;border-left:2px solid transparent;border-radius:0 var(--radius-s) var(--radius-s) 0}
/* pt13d (29/07) — SCINDÉ : .active (section courante) doit se voir sur TOUS les
   pointeurs ; le sommaire reste à l'écran, deux entrées paraissaient actives au
   doigt. cf. pt11-survol-tactile (site.css). */
.toc a.active{background:var(--clr-bg-light);color:var(--clr-or-text);border-left-color:var(--clr-or);text-decoration:none}
@media (hover: hover){.toc a:hover{background:var(--clr-bg-light);color:var(--clr-or-text);border-left-color:var(--clr-or);text-decoration:none}}

/* ---- Panneau : carte info / coordonnées / aide ---- */
.info-card{background:var(--clr-bg-light);border:1px solid var(--c-frame);border-radius:var(--radius-m);padding:20px 22px;margin-bottom:20px}
.info-card h4{font-family:var(--ff-title);font-size:11.5px;font-weight:700;text-transform:uppercase;letter-spacing:1.3px;color:var(--clr-or-text);margin:0 0 14px}
.info-row{display:flex;gap:12px;align-items:flex-start;margin-bottom:14px;font-size:13.5px;line-height:1.5}
.info-row:last-child{margin-bottom:0}
.info-row .ic{flex:0 0 auto;color:var(--clr-or);margin-top:1px}
.info-row .ic svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.info-row b{display:block;color:var(--clr-text-dark);font-family:var(--ff-title);font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px}
/* Liens des callouts (« Découvrir la cave → », « Nous contacter → », e-mail) : affordance or + soulignement,
   et retour à la ligne propre pour le CTA (retours Thomas 04/07 #15). */
.info-card a{color:var(--clr-or-text);font-weight:600;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:2px}
.info-card a:hover{color:var(--clr-text-dark)}
.info-row a{display:block;width:fit-content;max-width:100%;margin-top:5px;white-space:nowrap}

/* ---- Formulaire (pages contact / newsletter) ---- */
.form-page .form-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px 22px}
.form-page .field{display:flex;flex-direction:column;gap:7px}
.form-page .field.full{grid-column:1 / -1}
.form-page .field label{font-family:var(--ff-title);font-size:13px;font-weight:600;color:var(--clr-text-dark)}
.form-page .field label .req{color:var(--clr-or-text)}
.form-page .field input,.form-page .field select,.form-page .field textarea{box-sizing:border-box;width:100%;border:1.5px solid var(--clr-border);border-radius:var(--radius-s);padding:12px 14px;font-family:var(--ff-body);font-size:14px;color:var(--clr-text-dark);background:#fff;outline:none}
.form-page .field input:focus,.form-page .field select:focus,.form-page .field textarea:focus{border-color:var(--clr-or)}
/* Liste déroulante v4 (retour Thomas 07/07 #11) : la base ci-dessus posait déjà
   bordure/rayon/police, mais le <select> gardait la flèche + le rendu natif de
   l'OS. On supprime l'apparence native et on pose le chevron maison (encre),
   comme les pilules de filtres. La liste d'options déroulée reste native (non
   stylable), c'est le contrôle fermé qui passe en v4. */
.form-page .field select{appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-right:42px;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23241a12' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 15px center;background-size:15px}
.form-page .field textarea{resize:vertical;min-height:130px}
.form-page .field .help{font-size:12px;color:#8a8270}
.form-page .form-actions{display:flex;align-items:center;gap:16px;margin-top:26px;flex-wrap:wrap}
.form-page .btn-primary{display:inline-flex;align-items:center;justify-content:center;min-height:var(--btn-min-h);box-sizing:border-box;line-height:1;text-decoration:none;background:var(--clr-ink);color:#fff;border:0;border-radius:var(--radius-s);font-weight:var(--btn-weight);font-size:var(--btn-font);letter-spacing:var(--btn-letter);padding:var(--btn-pad-y) var(--btn-pad-x);box-shadow:var(--btn-shadow);cursor:pointer;transition:background .15s}   /* #5/#17 : gabarit bouton commun. Aligné 07/15 sur le gabarit pilule 44px (min-height+border-box+line-height:1+inline-flex) comme auth/compte/order — cette famille était la seule sans plancher de hauteur (rendait ~43px). */
.form-page .btn-primary:hover{background:var(--clr-ink-dark)}
.form-page .form-actions .note{font-size:12.5px;color:#8a8270}

/* ---- Blocs feedback newsletter — Direction B (carte blanche + filet + icône maison) ----
   Doctrine messages système or/encre : succès & info = OR (distinction par l'icône :
   coche vs « i »), attention (action non aboutie, ex. « adresse introuvable ») = ENCRE
   + triangle. Icône rendue server-side via cc_icon() (source unique du jeu maison). */
.form-page .nl-fb{display:flex;gap:10px;align-items:flex-start;background:#fff;border:1px solid var(--c-border-input);border-left-width:3px;border-radius:var(--radius-m);padding:13px 16px;margin:16px 0 0}
.form-page .nl-fb-coin{flex:0 0 auto;width:20px;height:20px;margin-top:1px}
.form-page .nl-fb-coin .cc-i{width:20px;height:20px}
.form-page .nl-fb-main{flex:1;min-width:0}
.form-page .nl-fb-ttl{font-size:14px;margin:0 0 3px;font-weight:700}
.form-page .nl-fb-txt{font-size:12.5px;font-weight:400;margin:0;line-height:1.5;color:var(--c-text)}
.form-page .nl-fb-txt b{color:var(--c-text-strong)}
.form-page .nl-fb--ok{border-left-color:var(--clr-or)}
.form-page .nl-fb--ok .nl-fb-coin{color:var(--clr-or)}
.form-page .nl-fb--ok .nl-fb-ttl{color:var(--clr-ink)}
.form-page .nl-fb--info{border-left-color:var(--clr-or)}
.form-page .nl-fb--info .nl-fb-coin{color:var(--clr-or)}
.form-page .nl-fb--info .nl-fb-ttl{color:var(--clr-ink)}
.form-page .nl-fb--wa{border-left-color:var(--clr-ink)}
.form-page .nl-fb--wa .nl-fb-coin{color:var(--clr-ink)}
.form-page .nl-fb--wa .nl-fb-ttl{color:var(--clr-ink)}
/* Erreur de champ : rouge doctrine + icône cercle-exclamation (miroir .cc-field-err ;
   hex en dur dans le data-uri = limite technique connue, cf. précédent vague compte) */
.form-page .field-err{display:inline-flex;align-items:center;gap:5px;margin-left:8px;color:var(--fb-no-tx);font-size:12px;font-weight:600}
.form-page .field-err::before{content:"";flex:0 0 auto;width:13px;height:13px;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A33327' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7.6v5.2'/%3E%3Cpath d='M12 16.4v.05'/%3E%3C/svg%3E") center/contain no-repeat}

/* ---- Panneau « Mes préférences d'e-mails » (newsletter) ----
   Champs/radios alignés sur le formulaire Contact : fond blanc natif, mêmes
   bordures/rayons. La carte (blanche, bordure --c-frame) ne sert qu'au
   regroupement + titre or. Bouton = <button class="btn-primary"> comme Contact
   (un <input type=submit> serait repeint en crème par .form-page .field input). */
.form-page .nl-panel{background:var(--clr-white);border:1px solid var(--c-frame);border-radius:var(--radius-m);padding:22px 24px}
.form-page .nl-panel-head{font-family:var(--ff-title);font-weight:600;font-size:12.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--clr-or-text);margin:0 0 16px}
/* champs : aucun override — héritent du style natif blanc de .form-page .field input
   (strictement identiques au formulaire Contact, décision Thomas 23/06) */
/* cartes radio segmentées (radio natif masqué mais focalisable, puce maison .nl-dot) */
.form-page .nl-radios{display:flex;gap:12px;flex-wrap:wrap;padding-top:2px}
.form-page .nl-radio{display:flex;align-items:center;gap:9px;border:1.5px solid var(--clr-border);border-radius:var(--radius-s);padding:11px 13px;font-size:13px;font-weight:500;flex:1;min-width:170px;background:var(--clr-white);color:var(--clr-text-dark);cursor:pointer}
.form-page .nl-radio input{position:absolute;width:1px;height:1px;opacity:0;margin:0;pointer-events:none}
.form-page .nl-dot{width:14px;height:14px;border-radius:50%;border:1.5px solid var(--clr-text);position:relative;flex:0 0 auto}
.form-page .nl-radio:has(input:checked){border-color:var(--clr-ink);background:var(--clr-white);box-shadow:inset 3px 0 0 var(--clr-or)}
.form-page .nl-radio:has(input:checked) .nl-dot{border-color:var(--clr-or-text)}
.form-page .nl-radio:has(input:checked) .nl-dot::after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--clr-or-text)}
.form-page .nl-radio:has(input:focus-visible){outline:2px solid var(--clr-or);outline-offset:2px}

/* ---- Responsive ---- */
@media (max-width:860px){
  .cc-content .content-layout{flex-direction:column;gap:34px}
  .cc-content .main-col{max-width:none;width:100%}
  .cc-content .aside{position:static;flex-basis:auto;width:100%}
  .toc{display:none}
  /* Retour 14/06 #9 : 30px de padding-top + le bandeau crème créaient un trou
     blanc visible sur mobile (ex. « Bienvenue chez Cave Coste »). On resserre. */
  .cc-content .content-wrap{padding:14px 0 40px}
  .form-page .form-grid{grid-template-columns:1fr}
  .form-page .nl-radios{flex-direction:column}
  .form-page .nl-radio{min-width:0}
  .color-key{grid-template-columns:1fr}
  .reading h2{font-size:19px}
  .trust{grid-template-columns:1fr}
  .trust .item + .item{border-left:0;border-top:1px solid var(--line)}
}

/* ---- Galeries photo (« Vignes et caves en images ») ---- */
.cc-content .main-col.galerie{max-width:none}
.cc-galerie-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
.cc-galerie-card{display:flex;flex-direction:column;border:1px solid var(--c-frame);border-radius:var(--radius-m);overflow:hidden;background:#fff;text-decoration:none;color:inherit;transition:box-shadow .18s,transform .18s}
@media (hover: hover) { .cc-galerie-card:hover{box-shadow:0 8px 22px rgba(0,0,0,.10);transform:translateY(-3px)} }   /* pt13d — cf. pt11-survol-tactile */
.cc-galerie-thumb{display:block;aspect-ratio:4/3;overflow:hidden;background:var(--clr-bg-light)}
.cc-galerie-thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s}
@media (hover: hover) { .cc-galerie-card:hover .cc-galerie-thumb img{transform:scale(1.04)} }   /* pt13d — cf. pt11-survol-tactile */
.cc-galerie-card .cc-galerie-legende{display:flex;flex-direction:column;gap:3px;padding:13px 15px}
.cc-galerie-titre{font-family:var(--ff-title);font-size:14.5px;font-weight:600;color:var(--clr-text-dark);line-height:1.3}
.cc-galerie-meta{font-size:12px;color:#8a8270}

/* Vue d'un album : grille de photos cliquables (lightbox GLightbox) */
.cc-galerie-grid--photos{grid-template-columns:repeat(4,1fr);gap:14px}
.cc-galerie-photo{position:relative;display:block;aspect-ratio:1/1;overflow:hidden;border-radius:var(--radius-m);cursor:zoom-in}
.cc-galerie-photo img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .3s}
@media (hover: hover) { .cc-galerie-photo:hover img{transform:scale(1.05)} }   /* pt13d — cf. pt11-survol-tactile */
.cc-galerie-photo .cc-galerie-legende{position:absolute;left:0;right:0;bottom:0;padding:18px 10px 8px;font-size:12px;line-height:1.35;color:#fff;background:linear-gradient(transparent,rgba(0,0,0,.62));opacity:0;transition:opacity .2s}
@media (hover: hover) { .cc-galerie-photo:hover .cc-galerie-legende{opacity:1} }   /* pt13d — cf. pt11-survol-tactile */

.cc-galerie-vide{color:#8a8270;font-size:14.5px}
.cc-galerie-retour{margin-top:30px}
.cc-galerie-retour a{font-family:var(--ff-title);font-weight:600;color:var(--clr-or-text);text-decoration:none}
.cc-galerie-retour a:hover{text-decoration:underline}

@media (max-width:860px){
  .cc-galerie-grid{grid-template-columns:repeat(2,1fr);gap:14px}
  .cc-galerie-grid--photos{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:520px){
  .cc-galerie-grid{grid-template-columns:1fr}
  .cc-galerie-grid--photos{grid-template-columns:repeat(2,1fr)}
}
