/* =========================================================
   DirectHote — identité visuelle « Village + Sans détour »
   Fichier unique, sans framework. Mobile d'abord.
   ========================================================= */

@import url("https://fonts.googleapis.com/css2?family=Barlow:ital,wght@0,400;0,500;0,600;0,700;1,400&family=Barlow+Condensed:wght@500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap");

:root {
  /* Couleurs (issues du logo) */
  --dh-vert: #2E6B5E;
  --dh-vert-fonce: #1F4A41;
  --dh-vert-clair: #3a8170;
  --dh-vert-teinte: #e4eeea;
  --dh-vert-sur-marine: #9fc4b9;
  --dh-marine: #1E2A38;
  --dh-mur: #EDE8DF;          /* fond de page */
  --dh-papier: #F4F1EA;       /* sections alternées, cartes, texte sur plaque */
  --dh-lin: #d3ccbd;          /* filets */
  --dh-texte: #1E2A38;
  --dh-texte-2: #3a4350;
  --dh-texte-3: #5b5f62;
  --dh-gris-detour: #b3ad9f;  /* la « plateforme » : toujours en gris pointillé */
  --dh-gris-detour-2: #9b9586;

  /* Typo */
  --dh-titre: "Barlow Condensed", "Arial Narrow", sans-serif;
  --dh-texte-font: "Barlow", system-ui, sans-serif;
  --dh-mono: "IBM Plex Mono", ui-monospace, monospace;

  --dh-h1: clamp(42px, 7vw, 92px);
  --dh-h2: clamp(30px, 4.4vw, 52px);
  --dh-h3: clamp(22px, 2.4vw, 28px);
  --dh-lead: clamp(17px, 1.6vw, 19px);

  /* Espaces & formes */
  --dh-gouttiere: clamp(16px, 4vw, 48px);
  --dh-section: clamp(36px, 5vw, 64px);
  --dh-r-plaque: 12px;       /* rayon extérieur d'une plaque */
  --dh-r-filet: 8px;         /* rayon du filet intérieur */
  --dh-ombre-plaque: 0 8px 20px rgba(30, 42, 56, .22);

  --dh-ease: cubic-bezier(.2, .7, .2, 1);
  --dh-ease-trace: cubic-bezier(.6, 0, .2, 1);
}

/* ---------- Base ---------- */
*, *::before, *::after { box-sizing: border-box; }
body { margin: 0; background: var(--dh-mur); color: var(--dh-texte); font: 400 17px/1.6 var(--dh-texte-font); -webkit-font-smoothing: antialiased; }
img { max-width: 100%; display: block; }
a { color: var(--dh-vert); text-underline-offset: 3px; }
a:hover { color: var(--dh-vert-fonce); }
:focus-visible { outline: 2px solid var(--dh-vert); outline-offset: 2px; }
::selection { background: var(--dh-vert-teinte); }
h1, h2, h3 { font-family: var(--dh-titre); font-weight: 700; line-height: .95; margin: 0; text-wrap: balance; }
h1 { font-size: var(--dh-h1); line-height: .92; }
h2 { font-size: var(--dh-h2); }
h3 { font-size: var(--dh-h3); font-weight: 600; line-height: 1.05; }
p { margin: 0; text-wrap: pretty; }
.dh-accent { color: var(--dh-vert); }
.dh-lead { font-size: var(--dh-lead); line-height: 1.55; color: var(--dh-texte-2); max-width: 560px; }
.dh-kicker { font: 500 13px var(--dh-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--dh-vert); }
.dh-mono { font-family: var(--dh-mono); }

/* ---------- Mise en page ---------- */
.dh-wrap { padding-inline: var(--dh-gouttiere); }
.dh-section { padding: var(--dh-section) var(--dh-gouttiere); display: flex; flex-direction: column; gap: 24px; }
.dh-section--papier { background: var(--dh-papier); }
.dh-section--marine { background: var(--dh-marine); color: var(--dh-papier); }
.dh-hero { display: flex; flex-wrap: wrap; gap: clamp(32px, 5vw, 64px); align-items: center; padding: clamp(24px, 5vw, 56px) var(--dh-gouttiere) clamp(40px, 6vw, 72px); }
.dh-hero > * { flex: 1 1 400px; min-width: 0; display: flex; flex-direction: column; gap: 22px; }
.dh-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: clamp(20px, 3vw, 32px); }
.dh-grid--fit { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.dh-row { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.dh-prose { max-width: 680px; margin-inline: auto; display: flex; flex-direction: column; gap: 22px; font-size: clamp(17px, 1.5vw, 19px); line-height: 1.7; color: #2a3340; }
.dh-prose h2 { margin-top: 16px; font-size: clamp(28px, 3.4vw, 38px); line-height: 1; color: var(--dh-texte); }

/* ---------- LA PLAQUE (signature) ----------
   <div class="dh-plaque"><div class="dh-plaque__filet">…</div></div>
   Variantes : --marine, --papier, --grande, --pendue (ajoute clou + cordon) */
.dh-plaque { background: var(--dh-vert); color: var(--dh-papier); border-radius: var(--dh-r-plaque); padding: 5px; box-shadow: var(--dh-ombre-plaque); }
.dh-plaque__filet { border: 2px solid var(--dh-papier); border-radius: var(--dh-r-filet); padding: 10px 16px; height: 100%; }
.dh-plaque--marine { background: var(--dh-marine); }
.dh-plaque--papier { background: var(--dh-papier); color: var(--dh-marine); }
.dh-plaque--papier .dh-plaque__filet { border-color: var(--dh-marine); }
.dh-plaque--grande { border-radius: 22px; padding: 11px; box-shadow: 0 18px 30px rgba(30, 42, 56, .28), inset 0 0 0 1px rgba(255,255,255,.15); }
.dh-plaque--grande > .dh-plaque__filet { border-width: 4px; border-radius: 14px; padding: clamp(22px, 4vw, 34px) 20px; text-align: center; display: flex; flex-direction: column; align-items: center; gap: 4px; }
.dh-plaque--plate { box-shadow: none; }
.dh-plaque__grand { font: 700 clamp(58px, 9vw, 96px)/.9 var(--dh-titre); text-transform: uppercase; }
.dh-plaque__petit { font: 600 clamp(13px, 1.6vw, 17px) var(--dh-texte-font); letter-spacing: .3em; text-transform: uppercase; }
.dh-plaque__trait { height: 2px; width: 70%; background: currentColor; margin: 12px 0; }

.dh-pendue { display: flex; flex-direction: column; align-items: center; width: min(100%, 440px); margin-inline: auto; transform-origin: 50% 7px; }
.dh-pendue::before { content: ""; width: 14px; height: 14px; border-radius: 50%; background: var(--dh-marine); box-shadow: 0 2px 3px rgba(0,0,0,.3); }
.dh-pendue__cordon { width: 62%; height: 56px; margin-top: -6px; background: linear-gradient(to bottom right, transparent calc(50% - 1px), var(--dh-marine) calc(50% - 1px), var(--dh-marine) calc(50% + 1px), transparent calc(50% + 1px)) left / 50% 100% no-repeat, linear-gradient(to bottom left, transparent calc(50% - 1px), var(--dh-marine) calc(50% - 1px), var(--dh-marine) calc(50% + 1px), transparent calc(50% + 1px)) right / 50% 100% no-repeat; }

/* Numéro de maison (sur les cartes) */
.dh-numero { position: absolute; left: 12px; bottom: -18px; background: var(--dh-vert); border-radius: 10px; padding: 3px; box-shadow: 0 6px 12px rgba(30,42,56,.28); transform-origin: 50% 0; }
.dh-numero > span { border: 2px solid var(--dh-papier); border-radius: 7px; min-width: 50px; height: 50px; padding: 0 6px; display: flex; align-items: center; justify-content: center; font: 700 28px var(--dh-titre); color: var(--dh-papier); }

/* Plaque de rue = filtre / catégorie (bouton) */
.dh-rue { border: 0; background: var(--dh-marine); border-radius: 9px; padding: 3px; cursor: pointer; transition: transform .25s, background .25s, box-shadow .25s; text-decoration: none; display: inline-flex; }
.dh-rue > span { display: flex; gap: 8px; align-items: center; border: 2px solid var(--dh-papier); border-radius: 6px; padding: 6px 12px; font: 600 15px var(--dh-titre); letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; color: var(--dh-papier); }
.dh-rue small { font: 500 11px var(--dh-mono); opacity: .8; }
.dh-rue:hover { transform: translateY(-2px); }
.dh-rue.is-active, .dh-rue[aria-pressed="true"], .dh-rue[aria-current] { background: var(--dh-vert); transform: translateY(-3px); box-shadow: 0 6px 14px rgba(46,107,94,.4); }

/* ---------- LA LIGNE DIRECTE (signature 2) ---------- */
.dh-ligne { display: flex; align-items: center; gap: 8px; font: 600 15px var(--dh-texte-font); color: var(--dh-vert); }
.dh-ligne::before, .dh-ligne::after { content: ""; width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; }
.dh-ligne::before { background: var(--dh-marine); order: 0; }
.dh-ligne__trait { flex: 1; height: 3px; border-radius: 2px; background: var(--dh-vert); order: 1; }
.dh-ligne::after { background: var(--dh-vert); order: 2; }
.dh-ligne__label { order: 3; }
.dh-ligne--plateforme .dh-ligne__trait { background: repeating-linear-gradient(90deg, var(--dh-gris-detour) 0 6px, transparent 6px 12px); }
.dh-progress { position: sticky; top: 0; z-index: 20; height: 5px; background: #e2dccf; }
.dh-progress > span { display: block; height: 100%; width: 0; background: var(--dh-vert); }
.dh-barre { height: 16px; background: #e2dccf; border-radius: 3px; overflow: hidden; }
.dh-barre > span { display: block; height: 100%; background: var(--dh-vert); transition: width .6s var(--dh-ease-trace); }
.dh-barre--plateforme > span { background: repeating-linear-gradient(135deg, var(--dh-gris-detour-2) 0 6px, var(--dh-gris-detour) 6px 12px); }

/* ---------- Boutons ---------- */
.dh-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; border: 0; border-radius: 8px; padding: 14px 22px; font: 700 16px var(--dh-titre); letter-spacing: .08em; text-transform: uppercase; text-decoration: none; cursor: pointer; white-space: nowrap; background: var(--dh-vert); color: #fff; transition: background .2s, transform .2s; }
.dh-btn:hover { background: var(--dh-vert-fonce); color: #fff; }
.dh-btn:active { transform: translateY(1px); }
.dh-btn--marine { background: var(--dh-marine); }
.dh-btn--marine:hover { background: #2b3b4e; }
.dh-btn--papier { background: var(--dh-papier); color: var(--dh-marine); }
.dh-btn--papier:hover { background: #fff; color: var(--dh-marine); }
.dh-btn--contour { background: transparent; color: var(--dh-marine); border: 2px solid var(--dh-marine); padding: 12px 20px; }
.dh-btn--contour:hover { background: var(--dh-marine); color: var(--dh-papier); }
.dh-btn--nav { font: 600 15px var(--dh-texte-font); letter-spacing: 0; text-transform: none; padding: 11px 18px; }
.dh-btn svg { width: 18px; height: 18px; stroke-width: 1.5; }

/* ---------- Header ---------- */
.dh-header { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px var(--dh-gouttiere); position: relative; }
.dh-header__logo { flex: none; display: block; }
.dh-header__logo img { height: clamp(50px, 5vw, 56px); width: auto; max-width: none; flex: none; mix-blend-mode: multiply; }
.dh-nav { display: none; align-items: center; gap: 26px; font: 500 16px var(--dh-texte-font); }
.dh-nav a { color: var(--dh-texte); text-decoration: none; }
.dh-nav a:hover, .dh-nav a[aria-current] { color: var(--dh-vert); }
.dh-nav a[aria-current] { font-weight: 700; border-bottom: 2px solid var(--dh-vert); }
.dh-header__actions { display: none; align-items: center; gap: 14px; }
.dh-burger { width: 46px; height: 46px; border: 1px solid var(--dh-marine); border-radius: 8px; background: transparent; display: flex; align-items: center; justify-content: center; color: var(--dh-marine); cursor: pointer; }
.dh-menu-mobile { display: none; background: var(--dh-marine); color: var(--dh-papier); padding: 20px; flex-direction: column; gap: 16px; }
.dh-menu-mobile.is-open { display: flex; }
.dh-menu-mobile a { color: var(--dh-papier); text-decoration: none; font: 600 22px var(--dh-titre); text-transform: uppercase; letter-spacing: .04em; }
.dh-bascule { display: flex; background: var(--dh-papier); border: 1px solid var(--dh-lin); border-radius: 999px; padding: 4px; }
.dh-bascule a { border-radius: 999px; padding: 8px 14px; font: 600 14px var(--dh-texte-font); color: var(--dh-marine); text-decoration: none; white-space: nowrap; transition: background .3s; }
.dh-bascule a[aria-current] { background: var(--dh-marine); color: var(--dh-papier); }
@media (min-width: 1180px) {
  .dh-nav, .dh-header__actions { display: flex; }
  .dh-burger, .dh-menu-mobile.is-open { display: none; }
}

/* ---------- Recherche ---------- */
.dh-recherche { background: var(--dh-marine); border-radius: 12px; padding: 5px; box-shadow: 0 8px 20px rgba(30,42,56,.2); max-width: 980px; }
.dh-recherche__filet { border: 2px solid var(--dh-papier); border-radius: 8px; display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 6px; padding: 6px; }
.dh-recherche__champ { background: var(--dh-papier); border-radius: 5px; padding: 8px 12px; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.dh-recherche__champ > span { font: 500 11px var(--dh-mono); color: var(--dh-texte-3); text-transform: uppercase; }
.dh-recherche__champ input, .dh-recherche__champ select { border: 0; background: transparent; font: 500 16px var(--dh-texte-font); color: var(--dh-texte); padding: 0; min-width: 0; }
.dh-recherche__champ--large { grid-column: span 2; }
.dh-recherche .dh-btn { border-radius: 5px; }

/* ---------- Carte hébergement ---------- */
.dh-carte { display: flex; flex-direction: column; gap: 8px; color: var(--dh-texte); text-decoration: none; transition: transform .3s; }
.dh-carte:hover { transform: translateY(-4px); color: var(--dh-texte); }
.dh-carte__photo { position: relative; aspect-ratio: 4 / 3; border-radius: 6px; background: #ddd6c8; }
/* Toutes les photos au même format, quelle que soit l'image d'origine */
.dh-carte__photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center; border-radius: 6px; }
.dh-carte__badge { position: absolute; right: 10px; top: 10px; background: var(--dh-papier); border-radius: 6px; padding: 4px 8px; font: 600 13px var(--dh-titre); letter-spacing: .06em; text-transform: uppercase; }
.dh-carte__titre { margin-top: 14px; font: 600 22px/1.08 var(--dh-titre); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; min-height: 2.16em; }
.dh-carte__lieu, .dh-carte__cap { font-size: 15px; color: var(--dh-texte-2); }
.dh-carte__prix { font-weight: 600; }

/* ---------- Divers ---------- */
.dh-stat { font: 700 clamp(48px, 6vw, 68px)/.9 var(--dh-titre); }
.dh-stat--barre { text-decoration: line-through; text-decoration-color: var(--dh-vert); text-decoration-thickness: 5px; }
.dh-encart { background: var(--dh-papier); border-radius: 10px; padding: 16px 18px; }
.dh-puce { display: flex; gap: 14px; align-items: baseline; }
.dh-puce::before { content: ""; flex: 0 0 auto; width: 10px; height: 10px; border-radius: 50%; background: var(--dh-vert); transform: translateY(-2px); }
.dh-faq { background: var(--dh-papier); border-radius: 10px; border: 1.5px solid transparent; }
.dh-faq[open] { border-color: var(--dh-vert); }
.dh-faq summary { list-style: none; cursor: pointer; display: flex; justify-content: space-between; gap: 16px; align-items: center; padding: 16px 18px; font: 600 17px var(--dh-texte-font); }
.dh-faq summary::-webkit-details-marker { display: none; }
.dh-faq summary::after { content: "+"; flex: 0 0 auto; width: 28px; height: 28px; border-radius: 6px; background: var(--dh-marine); color: var(--dh-papier); display: flex; align-items: center; justify-content: center; font: 600 20px/1 var(--dh-texte-font); transition: transform .3s, background .25s; }
.dh-faq[open] summary::after { transform: rotate(45deg); background: var(--dh-vert); }
.dh-faq > div { padding: 0 18px 18px; color: var(--dh-texte-2); }
.dh-bandeau { background: var(--dh-marine); padding: 14px 0; overflow: hidden; }
.dh-bandeau__piste { display: flex; gap: 14px; width: max-content; animation: dh-defile 45s linear infinite; }
.dh-bandeau:hover .dh-bandeau__piste { animation-play-state: paused; }
.dh-footer { background: var(--dh-marine); color: #c8ccd2; padding: 40px var(--dh-gouttiere) 24px; font: 500 14px var(--dh-texte-font); }
.dh-footer a { color: #c8ccd2; text-decoration: none; }
.dh-footer a:hover { color: var(--dh-papier); }
.dh-footer h4 { font: 600 16px var(--dh-titre); letter-spacing: .08em; text-transform: uppercase; color: var(--dh-papier); margin: 0 0 10px; }

/* ---------- Back-office ---------- */
.dh-admin { display: flex; flex-direction: column; min-height: 100vh; }
.dh-admin__side { background: var(--dh-marine); color: var(--dh-papier); display: flex; gap: 6px; padding: 10px 12px; overflow-x: auto; }
.dh-admin__side a { display: flex; align-items: center; gap: 12px; padding: 10px 12px; border-radius: 8px; white-space: nowrap; color: var(--dh-papier); text-decoration: none; font: 600 15px var(--dh-texte-font); }
.dh-admin__side a::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: rgba(244,241,234,.35); }
.dh-admin__side a:hover { background: rgba(244,241,234,.1); }
.dh-admin__side a[aria-current] { background: var(--dh-vert); }
.dh-admin__side a[aria-current]::before { background: var(--dh-papier); }
.dh-admin__main { flex: 1; min-width: 0; padding: clamp(16px, 3vw, 36px); display: flex; flex-direction: column; gap: clamp(18px, 2.4vw, 28px); }
.dh-kpi { border-radius: 14px; padding: 6px; background: var(--dh-papier); }
.dh-kpi > div { border: 2px solid currentColor; border-radius: 9px; padding: 14px 16px; display: flex; flex-direction: column; gap: 4px; }
.dh-kpi--vert { background: var(--dh-vert); color: var(--dh-papier); }
.dh-kpi--marine { background: var(--dh-marine); color: var(--dh-papier); }
.dh-kpi__val { font: 700 46px/1 var(--dh-titre); }
.dh-kpi__label { font: 500 12px var(--dh-mono); opacity: .8; text-transform: uppercase; }
.dh-jour { height: 46px; border-radius: 4px; background: #e6e0d4; }
.dh-jour--direct { background: var(--dh-vert); }
.dh-jour--plateforme { background: repeating-linear-gradient(135deg, var(--dh-gris-detour-2) 0 4px, var(--dh-gris-detour) 4px 8px); }
@media (min-width: 900px) {
  .dh-admin { flex-direction: row; }
  .dh-admin__side { flex-direction: column; width: 240px; padding: 20px 14px; position: sticky; top: 0; height: 100vh; }
}


/* =========================================================
   Composants ajoutés (v1.1) — tunnel, frise, calendrier, KPI,
   tableaux, filtres, formulaires, logo, footer complet
   ========================================================= */

/* ---------- Logo : image existante, inchangée ---------- */
.dh-logo-cartouche { flex: none; background: var(--dh-papier); border-radius: 10px; padding: 6px 10px; display: inline-flex; }
.dh-logo-cartouche img { height: 52px; width: auto; max-width: none; display: block; }

/* ---------- Toute étiquette / bouton reste sur une ligne ---------- */
.dh-btn, .dh-rue > span, .dh-tag, .dh-onglet, .dh-statut, .dh-numero > span { white-space: nowrap; }

/* ---------- Onglets / filtres simples ---------- */
.dh-onglets { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.dh-onglet { border: 0; background: transparent; color: var(--dh-marine); border-radius: 8px; padding: 8px 12px; font: 600 14px var(--dh-texte-font); cursor: pointer; flex: 0 0 auto; transition: background .2s; }
.dh-onglet:hover { background: rgba(30,42,56,.06); }
.dh-onglet[aria-selected="true"], .dh-onglet.is-active { background: var(--dh-marine); color: var(--dh-papier); }
.dh-bascule--carre a, .dh-bascule--carre button { border-radius: 6px; }

/* ---------- Formulaires ---------- */
.dh-champ { display: flex; flex-direction: column; gap: 5px; font: 600 14px var(--dh-texte-font); }
.dh-champ input, .dh-champ select, .dh-champ textarea { border: 1.5px solid var(--dh-lin); border-radius: 7px; background: #fff; padding: 11px 12px; font: 500 16px var(--dh-texte-font); color: var(--dh-texte); transition: border-color .2s; }
.dh-champ input:focus, .dh-champ select:focus, .dh-champ textarea:focus { border-color: var(--dh-vert); outline: none; }
.dh-champ.is-error input, .dh-champ.is-error textarea { border-color: #9a3a2a; }
.dh-champ__erreur { font: 500 12px var(--dh-texte-font); color: #9a3a2a; min-height: 14px; }
.dh-choix { display: flex; gap: 12px; align-items: center; border: 1.5px solid var(--dh-lin); background: #fff; border-radius: 9px; padding: 11px 14px; cursor: pointer; transition: all .2s; }
.dh-choix:has(input:checked), .dh-choix.is-on { border-color: var(--dh-vert); background: var(--dh-vert-teinte); }
.dh-choix input { accent-color: var(--dh-vert); width: 18px; height: 18px; }
input[type=range] { accent-color: var(--dh-vert); }
.dh-alerte { background: #9a3a2a; color: #fff; border-radius: 10px; padding: 10px 14px; font: 500 14px var(--dh-texte-font); }
.dh-alerte--ok { background: var(--dh-vert); }

/* ---------- Étapes (tunnel de réservation, 1-2-3) ---------- */
.dh-etapes { display: flex; align-items: center; gap: 8px; }
.dh-etape { display: flex; align-items: center; gap: 8px; flex: 1; font: 600 14px var(--dh-texte-font); white-space: nowrap; }
.dh-etape__n { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 8px; background: var(--dh-gris-detour); color: var(--dh-papier); display: flex; align-items: center; justify-content: center; font: 700 16px var(--dh-titre); transition: background .3s; }
.dh-etape::after { content: ""; flex: 1; height: 3px; border-radius: 2px; background: var(--dh-lin); transition: background .3s; }
.dh-etape:last-child::after { display: none; }
.dh-etape.is-done .dh-etape__n, .dh-etape.is-current .dh-etape__n { background: var(--dh-vert); }
.dh-etape.is-done::after { background: var(--dh-vert); }

/* ---------- Récapitulatif (plaque verte) ---------- */
.dh-recap .dh-plaque__filet { border-width: 3px; padding: 18px; display: flex; flex-direction: column; gap: 10px; }
.dh-recap__ligne { display: flex; justify-content: space-between; gap: 10px; font: 500 15px var(--dh-texte-font); border-bottom: 1px solid rgba(244,241,234,.3); padding-bottom: 6px; }
.dh-recap__ligne span:last-child { font-family: var(--dh-mono); }
.dh-recap__total { display: flex; justify-content: space-between; font: 700 20px var(--dh-texte-font); }
.dh-recap__surplace { background: rgba(244,241,234,.12); border-radius: 8px; padding: 10px 12px; font: 500 14px/1.5 var(--dh-texte-font); }

/* ---------- Calendrier de sélection (voyageur) ---------- */
.dh-cal { display: grid; grid-template-columns: repeat(7, minmax(0,1fr)); gap: 4px; }
.dh-cal button { border: 0; aspect-ratio: 1; border-radius: 7px; background: #fff; color: var(--dh-texte); font: 600 14px var(--dh-texte-font); cursor: pointer; }
.dh-cal button:disabled { background: #e2dccf; color: var(--dh-gris-detour-2); text-decoration: line-through; cursor: not-allowed; }
.dh-cal .is-range { background: var(--dh-vert-sur-marine); }
.dh-cal .is-edge { background: var(--dh-vert); color: #fff; }

/* ---------- Frise (nouveautés, historique) ---------- */
.dh-frise { position: relative; display: flex; flex-direction: column; gap: 18px; padding-left: 72px; }
.dh-frise::before { content: ""; position: absolute; left: 32px; top: 8px; bottom: 8px; width: 4px; border-radius: 2px; background: var(--dh-vert); }
.dh-frise__item { position: relative; background: var(--dh-papier); border-radius: 12px; padding: 16px 18px; }
.dh-frise__version { position: absolute; left: -62px; top: 12px; background: var(--dh-marine); border-radius: 8px; padding: 3px; }
.dh-frise__version > span { display: block; border: 1.5px solid var(--dh-papier); border-radius: 5px; padding: 3px 6px; font: 700 13px var(--dh-titre); color: var(--dh-papier); white-space: nowrap; }

/* ---------- Tableaux (back-office) ---------- */
.dh-table-wrap { background: var(--dh-papier); border-radius: 12px; overflow-x: auto; }
.dh-table { width: 100%; min-width: 720px; border-collapse: collapse; font: 500 14px var(--dh-texte-font); }
.dh-table th { text-align: left; font: 500 11px var(--dh-mono); text-transform: uppercase; padding: 10px 14px; border-bottom: 2px solid var(--dh-marine); white-space: nowrap; }
.dh-table th[aria-sort] { color: var(--dh-vert); cursor: pointer; }
.dh-table td { padding: 11px 14px; border-bottom: 1px solid #e2dccf; vertical-align: middle; }
.dh-table tr:hover td { background: #ebe6dc; }
.dh-statut { display: inline-block; border-radius: 6px; padding: 4px 8px; font: 600 12px var(--dh-texte-font); }
.dh-statut--paye { background: var(--dh-vert); color: #fff; }
.dh-statut--acompte { background: var(--dh-vert-teinte); color: var(--dh-vert-fonce); }
.dh-statut--attendu { background: #f3e6c9; color: #6b4e14; }
.dh-statut--plateforme { background: #e2dccf; color: var(--dh-texte-2); }
.dh-source--direct { font: 500 11px var(--dh-mono); color: var(--dh-vert); }
.dh-source--plateforme { font: 500 11px var(--dh-mono); color: #6f6a60; }

/* ---------- KPI & totaux ---------- */
.dh-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 10px; }
.dh-kpi__evol { font: 600 13px var(--dh-texte-font); color: var(--dh-vert); }
.dh-kpi__evol.is-neutre { color: var(--dh-texte-3); }

/* ---------- Calendrier hôte (une ligne par hébergement) ---------- */
.dh-frise-cal { display: grid; grid-template-columns: 150px minmax(0,1fr); gap: 2px; align-items: center; }
.dh-frise-cal__piste { position: relative; height: 40px; background: #e6e0d4; border-radius: 6px; }
.dh-frise-cal__resa { position: absolute; top: 7px; height: 28px; border-radius: 6px; color: var(--dh-papier); font: 600 11px var(--dh-texte-font); display: flex; align-items: center; padding: 0 6px; overflow: hidden; white-space: nowrap; }
.dh-frise-cal__resa--direct { background: var(--dh-vert); }
.dh-frise-cal__resa--plateforme { background: repeating-linear-gradient(135deg, var(--dh-gris-detour-2) 0 4px, var(--dh-gris-detour) 4px 8px); }
.dh-frise-cal__resa--blocage { background: var(--dh-marine); }
.dh-frise-cal__saison { position: absolute; top: 0; height: 3px; background: #C9A46A; }

/* ---------- Graphiques simples ---------- */
.dh-histo { display: grid; grid-template-columns: repeat(12, minmax(0,1fr)); gap: 6px; align-items: end; height: 180px; }
.dh-histo__barre { display: flex; flex-direction: column; justify-content: flex-end; border-radius: 4px 4px 0 0; overflow: hidden; }
.dh-histo__direct { background: var(--dh-vert); }
.dh-histo__plateforme { background: repeating-linear-gradient(135deg, var(--dh-gris-detour-2) 0 4px, var(--dh-gris-detour) 4px 8px); }

/* ---------- Footer complet ---------- */
.dh-footer__grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 28px; }
.dh-footer__col { display: flex; flex-direction: column; gap: 8px; }
.dh-footer__bas { margin-top: 28px; padding-top: 16px; border-top: 1px solid rgba(244,241,234,.2); display: flex; flex-wrap: wrap; gap: 8px 24px; justify-content: space-between; }
.dh-newsletter { display: flex; flex-wrap: wrap; gap: 6px; background: var(--dh-papier); border-radius: 10px; padding: 4px; }
.dh-newsletter input { flex: 1 1 160px; min-width: 0; border: 0; background: transparent; padding: 10px 12px; font: 500 15px var(--dh-texte-font); }
.dh-confiance { display: flex; flex-wrap: wrap; gap: 8px; }
.dh-confiance span { border: 1.5px solid var(--dh-papier); border-radius: 6px; padding: 4px 9px; font: 600 13px var(--dh-titre); letter-spacing: .06em; text-transform: uppercase; color: var(--dh-papier); white-space: nowrap; }

/* ---------- Bandeau cookies (barre fine) ---------- */
.dh-cookies { position: fixed; left: 12px; right: 12px; bottom: 12px; z-index: 50; background: var(--dh-marine); color: var(--dh-papier); border-radius: 12px; padding: 10px 14px; display: flex; flex-wrap: wrap; gap: 10px 16px; align-items: center; justify-content: space-between; font: 500 14px var(--dh-texte-font); box-shadow: 0 8px 24px rgba(0,0,0,.25); }
.dh-cookies__actions { display: flex; gap: 8px; }
.dh-cookies .dh-btn { padding: 9px 16px; font-size: 14px; }

/* ---------- Animations (pilotées par directhote.js) ---------- */
@keyframes dh-defile { to { transform: translateX(-50%); } }
[data-dh-reveal] { opacity: 0; transform: translateY(24px); transition: opacity .7s var(--dh-ease), transform .7s var(--dh-ease); }
[data-dh-reveal].is-in { opacity: 1; transform: none; }
[data-dh-pop] { opacity: 0; transform: scale(.3) rotate(-25deg); }
[data-dh-pop].is-in { animation: dh-pop .75s cubic-bezier(.3,1.4,.5,1) forwards; }
@keyframes dh-pop { 60% { opacity: 1; transform: scale(1.12) rotate(6deg); } to { opacity: 1; transform: none; } }
[data-dh-swing].is-swinging { animation: dh-swing 1.3s ease-out; }
[data-dh-swing].is-arrive { animation: dh-swing-in 2.4s ease-out; }
@keyframes dh-swing { 25% { transform: rotate(4deg); } 50% { transform: rotate(-2.4deg); } 75% { transform: rotate(1.2deg); } }
@keyframes dh-swing-in { 0% { transform: rotate(-10deg); } 20% { transform: rotate(7deg); } 40% { transform: rotate(-4deg); } 60% { transform: rotate(2deg); } 80% { transform: rotate(-.8deg); } 100% { transform: none; } }
[data-dh-draw] { transform: scaleX(0); transform-origin: 0 50%; transition: transform 1.4s var(--dh-ease-trace); }
[data-dh-draw].is-in { transform: none; }
.dh-detour { animation: dh-detour 9s linear infinite; }
@keyframes dh-detour { to { stroke-dashoffset: -320; } }
.dh-trace { stroke-dasharray: 1024; stroke-dashoffset: 1024; animation: dh-trace 1.3s .4s var(--dh-ease-trace) forwards; }
@keyframes dh-trace { to { stroke-dashoffset: 0; } }
.dh-pulse { animation: dh-pulse 2s infinite; }
@keyframes dh-pulse { 0% { box-shadow: 0 0 0 0 rgba(46, 107, 94, .5); } 100% { box-shadow: 0 0 0 16px rgba(46, 107, 94, 0); } }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
  [data-dh-reveal], [data-dh-pop], [data-dh-draw] { opacity: 1 !important; transform: none !important; }
  .dh-trace { stroke-dashoffset: 0; }
  .dh-pulse { animation: none !important; box-shadow: none !important; }
}
