/* Verrous telephone de la demo. Charge en dernier. Trafic = 390 x 844.
   Pas de polices. Pas de couleurs hors tokens. Desktop = repli. */

.demo-page {
  --header-h: 56px;
  --tap-min: 48px;
  --gutter: 20px;
  --safe-top: env(safe-area-inset-top, 0px);
  --safe-right: env(safe-area-inset-right, 0px);
  --safe-bottom: env(safe-area-inset-bottom, 0px);
  --safe-left: env(safe-area-inset-left, 0px);
  --dock-pad: max(var(--gutter), var(--safe-bottom), env(keyboard-inset-bottom, 0px));
  --fs-lire: max(16px, var(--fs-md, 1rem));
  min-height: 100vh;
  min-height: 100svh;
  min-height: 100dvh;
  overflow-x: clip;
  overflow-y: auto;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}

@media (min-width: 720px) {
  .demo-page {
    --gutter: 24px;
  }
}

@media (min-width: 1100px) {
  .demo-page {
    --gutter: 40px;
  }
}

/* Document. Scroll natif. Clavier iOS refuse overflow hidden. */

html:has(.demo-page),
body.demo-page {
  overflow: auto;
  overflow-x: clip;
  height: auto;
  min-height: 100vh;
  min-height: 100svh;
  min-height: 100dvh;
  position: static;
  touch-action: pan-x pan-y;
}

/* Encoche au-dessus du bandeau. La barre 56 reste 56. */

.demo-page .demo-fixe {
  top: 0;
  padding-top: var(--safe-top);
}

.demo-page .tete,
.demo-page header,
.demo-page .header {
  box-sizing: border-box;
  height: var(--header-h);
  max-height: var(--header-h);
  min-height: 0;
}

.demo-page .tete a,
.demo-page .tete button,
.demo-page .tete__marque,
.demo-page .saut {
  min-height: var(--tap-min);
  min-width: var(--tap-min);
}

.demo-page .demo-honnete {
  padding-inline: max(var(--gutter), var(--safe-left))
    max(var(--gutter), var(--safe-right));
}

.demo-page main.demo {
  padding-right: max(var(--gutter), var(--safe-right));
  padding-left: max(var(--gutter), var(--safe-left));
  padding-bottom: max(4rem, var(--dock-pad));
}

/* Cartes metier / situation : colonne 1 sous 720. Jamais 4. */

.demo-page .demo-grille {
  display: flex;
  flex-direction: column;
  gap: 12px;
  grid-template-columns: none;
}

.demo-page .demo-carte {
  position: relative;
  width: 100%;
  max-width: 100%;
  min-height: var(--tap-min);
  overflow: visible;
}

.demo-page .demo-carte .btn {
  position: static;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  justify-self: stretch;
  box-sizing: border-box;
  min-height: var(--tap-min);
  min-width: var(--tap-min);
  padding-block: 12px;
  white-space: normal;
  overflow: visible;
  touch-action: manipulation;
}

.demo-page .demo-carte .btn::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}

.demo-page .demo-carte__verbe,
.demo-page .carte__verbe,
.demo-page .carte__nom,
.demo-page .carte__overlay {
  opacity: 1;
  visibility: visible;
}

@media (min-width: 720px) {
  .demo-page .demo-grille {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--gutter);
  }
}

/* Fil : un seul scroll, la page. 52vh + overflow coupe le clavier. */

.demo-page .demo-fil {
  max-height: none;
  overflow: visible;
  padding-bottom: 0.5rem;
}

.demo-page .demo-msg {
  max-width: 45ch;
  font-size: var(--fs-lire);
}

.demo-page .demo-msg p {
  font-size: var(--fs-lire);
  line-height: var(--lh-body, 1.5);
}

.demo-page .demo-msg:last-child {
  scroll-margin-bottom: 12rem;
}

/* Choix + saisie colles au bas, dans le flux. Pas de position fixed. */

.demo-page .demo-choix {
  position: sticky;
  bottom: calc(var(--tap-min) + var(--dock-pad) + 2.5rem);
  z-index: 7;
  display: flex;
  flex-direction: column;
  flex-wrap: nowrap;
  gap: 8px;
  margin: 0;
  padding: 8px 0 0;
  background: var(--bg, inherit);
}

.demo-page .demo-choix__btn {
  display: flex;
  align-items: center;
  width: 100%;
  min-height: var(--tap-min);
  min-width: var(--tap-min);
  padding: 12px 14px;
  font-size: var(--fs-lire);
  line-height: 1.35;
  text-align: left;
  white-space: normal;
  touch-action: manipulation;
}

.demo-page .demo-saisie {
  position: sticky;
  bottom: 0;
  z-index: 8;
  padding-bottom: var(--dock-pad);
  background: var(--bg, inherit);
}

.demo-page .demo-saisie input,
.demo-page .demo-saisie textarea,
.demo-page #demo-texte {
  min-height: var(--tap-min);
  font-size: var(--fs-lire);
  scroll-margin-bottom: var(--dock-pad);
}

.demo-page .demo-saisie button,
.demo-page .demo-saisie .btn {
  min-height: var(--tap-min);
  min-width: var(--tap-min);
  font-size: var(--fs-lire);
}

.demo-page .demo-saisie:focus-within,
.demo-page #demo-texte:focus {
  scroll-margin-bottom: var(--dock-pad);
}

.demo-page .demo-chat {
  min-height: 0;
  height: auto;
}

/* Livrable : lisible sans pinch. Agenda en liste, pas 7 colonnes. */

.demo-page .livrable,
.demo-page #demo-livrable {
  display: flex;
  flex-direction: column;
  max-width: 45ch;
  font-size: var(--fs-lire);
  line-height: var(--lh-body, 1.5);
}

.demo-page .livrable__titre,
.demo-page .livrable__quand,
.demo-page .livrable__ligne dd,
.demo-page .livrable__ligne dt,
.demo-page .livrable p,
.demo-page .livrable li,
.demo-page .livrable td,
.demo-page .livrable th {
  font-size: var(--fs-lire);
  line-height: var(--lh-body, 1.5);
}

.demo-page .livrable__champs,
.demo-page .livrable__ligne,
.demo-page .livrable--agenda,
.demo-page .livrable--fiche,
.demo-page .livrable--devis {
  display: flex;
  flex-direction: column;
  grid-template-columns: none;
}

.demo-page .livrable img,
.demo-page img,
.demo-page video {
  display: block;
  max-width: 100%;
  height: auto;
}

/* Porte : CTA pleine largeur au pouce, au-dessus du safe-area. */

.demo-page .demo-porte,
.demo-page .demo-porte__phrase,
.demo-page .demo-porte__actions {
  overflow: visible;
}

.demo-page .demo-porte {
  padding-bottom: max(var(--gutter), var(--safe-bottom));
}

.demo-page .demo-porte__actions {
  display: flex;
  flex-direction: column;
  flex-wrap: nowrap;
  gap: 8px;
}

.demo-page .demo-porte__neo,
.demo-page .demo-porte__actions a,
.demo-page .demo-porte__actions .btn {
  display: flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  width: 100%;
  min-height: var(--tap-min);
  min-width: var(--tap-min);
  padding-block: 12px;
  line-height: 1.35;
  white-space: normal;
  overflow: visible;
  touch-action: manipulation;
}

.demo-page .demo-outils a,
.demo-page .demo-outils button {
  min-height: var(--tap-min);
  min-width: var(--tap-min);
  padding-inline: 4px;
}

/* Tap 48 partout sauf liens inline du copy. Porte Neo tenue a 48. */

.demo-page a,
.demo-page button,
.demo-page .btn,
.demo-page input,
.demo-page select,
.demo-page textarea,
.demo-page [role="button"] {
  box-sizing: border-box;
  min-height: var(--tap-min);
  min-width: var(--tap-min);
  touch-action: manipulation;
}

.demo-page p a,
.demo-page li a,
.demo-page .demo-honnete a,
.demo-page .demo-msg a,
.demo-page .livrable a,
.demo-page .t-body a {
  min-width: 0;
  min-height: 0;
}

.demo-page .demo-porte p a.demo-porte__neo,
.demo-page .demo-porte__neo,
.demo-page .demo-porte__actions a {
  min-height: var(--tap-min);
  min-width: var(--tap-min);
}

.demo-page :focus-visible {
  outline: 2px solid var(--accent, currentColor);
  outline-offset: 2px;
}

/* Pas de hover-only. */

@media (hover: none), (pointer: coarse) {
  .demo-page .carte__verbe,
  .demo-page .carte__nom,
  .demo-page .carte__overlay,
  .demo-page .overlay-hover,
  .demo-page [data-hover],
  .demo-page [data-scramble],
  .demo-page .demo-carte__verbe {
    opacity: 1;
    visibility: visible;
    transform: none;
  }
}

/* Reduced-motion : page deja complete. */

@media (prefers-reduced-motion: reduce) {
  .demo-page,
  .demo-page *,
  .demo-page *::before,
  .demo-page *::after {
    animation: none;
    animation-iteration-count: 1;
    transition: none;
    scroll-behavior: auto;
  }

  .demo-page [data-appear],
  .demo-page [data-beat],
  .demo-page .appear,
  .demo-page .demo-msg,
  .demo-page .livrable {
    opacity: 1;
    transform: none;
  }
}
