/* ============================================================================
   ATELIER VITRINE PLEIN ÉCRAN (« ve- » = vitrine editor, 2026-08-13).
   L'éditeur SORT de la colonne du compte (560 px) : atelier type Wix —
   panneau de réglages à gauche, aperçu dominant à droite, mis à l'échelle
   d'un VRAI viewport (390/1280 px logiques, cf. applyPvMode). Sur petit
   écran : une vue à la fois (data-view sur .ve-shell), aperçu d'abord.
   z-index 1500 : au-dessus de la topbar (1200), SOUS les modales (2000) et
   toasts (2200). Le modal photo interne vit à 1600.
   ========================================================================== */
.ve-workspace { position: fixed; inset: 0 0 calc(62px + env(safe-area-inset-bottom)); z-index: 1500; background: var(--sable); overflow: hidden; }
/* La carte hôte anime un transform (gfade) : TANT qu'il est appliqué, elle
   serait le bloc conteneur du fixed ci-dessus et l'atelier resterait
   prisonnier de la colonne du compte. Atelier ouvert = animation coupée. */
.card-soft:has(> .ve-workspace) { animation: none; }
.ve-shell { display: flex; flex-direction: column; height: 100%; }
.ve-top {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 8px 12px; background: var(--ecume);
  border-bottom: 1px solid var(--stroke); box-shadow: var(--shadow-s);
}
.ve-name {
  font-family: var(--font-head); font-size: 15px; color: var(--profond);
  max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.ve-msg { flex: 1 1 40px; min-width: 30px; font-size: 12px; text-align: right; }
.ve-tabs { display: none; }
.ve-body { flex: 1; display: flex; min-height: 0; }
.ve-side {
  width: 400px; max-width: 46vw; overflow-y: auto; padding: 12px 14px 48px;
  border-right: 1px solid var(--stroke); background: var(--sable);
}
.ve-stage {
  flex: 1; display: flex; flex-direction: column; align-items: center;
  min-width: 0; padding: 10px 14px 14px; overflow: hidden;
}
.ve-hint { margin: 0 0 6px; font-size: 12px; text-align: center; }
.ve-frame-wrap {
  overflow: hidden; background: #fff; border: 1px solid var(--stroke);
  border-radius: 12px; box-shadow: var(--shadow);
}
.ve-frame-wrap.ve-phone { border-radius: 26px; border: 6px solid #12212b; }
.ve-frame-wrap iframe { border: 0; display: block; background: #fff; transform-origin: 0 0; }
/* Tiroirs du panneau : une idée = un tiroir, gros libellé, chevron. */
.ve-group {
  background: var(--ecume); border: 1px solid var(--stroke);
  border-radius: 16px; margin: 0 0 10px; box-shadow: var(--shadow-s);
}
.ve-group > summary {
  cursor: pointer; list-style: none; display: flex; align-items: center; gap: 10px;
  padding: 13px 14px; font-family: var(--font-head); font-weight: 700;
  font-size: 14.5px; color: var(--profond); border-radius: 16px;
}
.ve-group > summary::-webkit-details-marker { display: none; }
.ve-group > summary::after { content: '▾'; margin-left: auto; opacity: .45; transition: transform .2s; }
.ve-group[open] > summary::after { transform: rotate(180deg); }
.ve-group > summary:hover { color: var(--lagon); }
.ve-gi { font-size: 17px; }
.ve-gbody { padding: 0 14px 14px; }
.ve-gbody .fld { display: block; margin: 8px 0 0; font-size: 13px; color: var(--marine); font-weight: 600; }
/* Modal « Cette photo » (interne à l'atelier). */
.ve-modal {
  position: fixed; inset: 0; z-index: 1600; background: var(--verre-nuit);
  display: flex; align-items: center; justify-content: center; padding: 16px;
}
.ve-modal[hidden] { display: none; }
.ve-modal-card {
  background: var(--sable); border-radius: 18px; box-shadow: var(--shadow);
  padding: 16px; width: min(460px, 94vw); max-height: 86vh; overflow: auto;
}
@media (max-width: 899px) {
  .ve-name { display: none; }
  .ve-side { width: 100%; max-width: none; border-right: 0; }
  /* Une vue à la fois : les onglets 👁/⚙️ du haut font la bascule. */
  .ve-tabs {
    display: flex; border: 1px solid var(--stroke); border-radius: 999px;
    overflow: hidden; background: var(--sable);
  }
  .ve-tabs button {
    border: 0; background: none; padding: 8px 13px; cursor: pointer;
    font-family: var(--font-head); font-weight: 700; font-size: 12.5px;
    color: var(--marine);
  }
  .ve-tabs button.on { background: var(--lagon); color: #fff; }
  .ve-shell[data-view="preview"] .ve-side { display: none; }
  .ve-shell[data-view="settings"] .ve-stage { display: none; }
  .ve-msg { flex-basis: 100%; order: 9; text-align: left; min-height: 0; }
}


/* ============================================================================
   MA CARTE DE PRIX (« tp- » = tarifs page, 2026-08-17). Outil PRO, même famille
   que l'agenda des réservations et le Carnet du Lagon : tokens « Lagon »
   uniquement, ADDITIF (contrat guide.css:25-27), breakpoints 600 / 900.

   CAS D'USAGE N°1 : un restaurateur EN PLEIN SERVICE, sur son téléphone, qui
   marque un plat épuisé. D'où la hiérarchie : les CARTES de prix d'abord (rien
   au-dessus d'elles), la devise repliée en réglage, « Enregistrer » COLLANT en
   bas de page, et une disponibilité qui n'est plus une case de 13 px mais un
   interrupteur au pouce (44 px de haut, l'état écrit à côté).
   Le tableau HTML a disparu : une ligne est une GRILLE — quatre colonnes sur
   ordinateur, deux rangées empilées sous 600 px (nom + corbeille, puis prix +
   interrupteur), jamais de défilement horizontal.
   ========================================================================== */
/* Le corail de la DA (#FF6B57) tombe à 3:1 sur le sable : parfait pour une
   icône, insuffisant pour du TEXTE d'alerte (WCAG AA = 4.5:1). Ce brique-orangé
   est le corail assombri, réservé aux messages d'erreur et à « Épuisé ». */
:root { --tp-alerte: #C2410C; }
.tp-wrap { width: min(880px, 92vw); padding: 88px 0 40px; }
.tp-head h1 { font-family: var(--font-display); font-weight: 600; font-size: clamp(26px, 4vw, 38px); }
.tp-sub { color: var(--marine); font-size: 14.5px; margin: 7px 0 18px; line-height: 1.5; }
.tp-body .muted { color: var(--marine); }
.tp-body .fld { display: block; font-size: 12.5px; font-weight: 600; color: var(--marine); }
.tp-hint { color: var(--marine); font-size: 12.5px; line-height: 1.5; margin: 8px 0 0; }
.tp-chips { display: flex; gap: 8px; flex-wrap: wrap; margin: 0 0 14px; }
.tp-langs { display: flex; gap: 6px; flex-wrap: wrap; margin: 0 0 12px; }

/* — Bandeau de tête (2026-08-17) : quelle vitrine, quelle langue, et le coup
   d'œil au site publié. Les trois se rangent sur une ligne au large et
   s'empilent au téléphone ; le lien reste à droite (`margin-left:auto`) —
   c'est le geste de VÉRIFICATION, jamais celui qu'on cherche en premier. — */
.tp-top { display: flex; align-items: center; gap: 8px 14px; flex-wrap: wrap; margin: 0 0 14px; }
.tp-top .tp-chips, .tp-top .tp-langs { margin: 0; }
.tp-seelink {
  margin-left: auto; display: inline-flex; align-items: center; min-height: 44px;
  padding: 0 2px; color: var(--lagon); font-size: 13.5px; font-weight: 700;
  text-decoration: none; border-bottom: 1px solid transparent;
  transition: border-color .2s ease;
}
.tp-seelink:hover, .tp-seelink:focus-visible { border-bottom-color: var(--lagon); }
.tp-fbnote { margin: 0 0 12px; }

/* — Une carte de prix — */
.tp-card {
  background: var(--ecume); border: 1px solid var(--stroke); border-radius: 20px;
  box-shadow: var(--shadow-s); margin: 0 0 14px; overflow: hidden;
}
.tp-card.is-new { border-color: rgba(13, 148, 136, .45); }
.tp-card-head { display: flex; align-items: center; gap: 10px; padding: 14px 16px 12px; }
.tp-card-head h2 {
  flex: 1 1 auto; min-width: 0; font-family: var(--font-head);
  font-size: 17px; overflow-wrap: anywhere;
}
.tp-card-bd { padding: 0 16px 16px; }
.tp-badge {
  flex: none; border-radius: 999px; padding: 3px 10px; font-size: 11px;
  font-weight: 800; letter-spacing: .3px; background: var(--lagon); color: #fff;
}
.tp-badge.warn { background: var(--soleil); color: var(--profond); }
.tp-line-nm .tp-badge { display: inline-block; margin-top: 5px; }

/* — Une ligne : GRILLE, jamais un tableau — */
/* Empilée par défaut (nom + corbeille, puis prix + interrupteur) : c'est la
   forme du téléphone ET de la tablette portrait, où le nom d'un plat a besoin
   de toute la largeur. Les quatre colonnes n'arrivent qu'à 900 px, et alors
   avec des largeurs FIXES : chaque ligne étant sa propre grille, des colonnes
   `auto` se recalent ligne par ligne et les prix cessent de s'aligner. */
.tp-lines { border-top: 1px solid var(--stroke); }
.tp-line {
  display: grid; align-items: center; gap: 8px 12px; padding: 10px 12px 12px;
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-areas: "nm act" "pr sw";
  transition: background .2s ease, opacity .2s ease;
}
.tp-line + .tp-line { border-top: 1px dashed var(--stroke); }
.tp-line.is-out { background: rgba(255, 107, 87, .07); }
.tp-line.is-pending { background: rgba(13, 148, 136, .07); }
/* Ligne retirée : plus de prix ni d'interrupteur (ils ne veulent plus rien
   dire) — le nom barré et le chemin du retour, rien d'autre. */
.tp-line.is-gone { opacity: .55; grid-template-areas: "nm act"; }
.tp-line.is-gone .tp-line-pr, .tp-line.is-gone .tp-line-sw { display: none; }
.tp-line.is-gone .tp-line-nm strong { text-decoration: line-through; }
.tp-line-nm { grid-area: nm; min-width: 0; }
.tp-line-nm strong { font-size: 15px; font-weight: 700; overflow-wrap: anywhere; }
.tp-line-sub { display: block; color: var(--marine); font-size: 12px; margin-top: 2px; }
.tp-line-pr { grid-area: pr; display: flex; align-items: center; gap: 5px; }
.tp-line-sw { grid-area: sw; justify-self: end; }
.tp-line-act { grid-area: act; display: flex; justify-content: flex-end; }
/* Le prix d'une ligne en attente se cale EXACTEMENT sur la colonne des champs
   (même largeur, même retrait) : sinon la carte a l'air décousue. */
.tp-price, .tp-price-ro { width: 100%; max-width: 118px; text-align: right; }
.tp-price {
  min-height: 44px; padding: 10px 12px;
  border: 1px solid var(--stroke); border-radius: 12px; background: var(--ecume);
  font: inherit; font-size: 15px; font-weight: 700; color: var(--profond);
  transition: border-color .2s ease, box-shadow .2s ease;
}
/* Dans un formulaire, le champ de prix garde la géométrie de ses voisins
   (.fld input) et n'en change que la lecture : chiffres à droite, en gras. */
.tp-f-price input { text-align: right; font-weight: 700; }
.tp-price:focus { outline: none; border-color: var(--lagon); box-shadow: var(--ring); }
.tp-price[disabled] { opacity: .5; }
/* Les flèches natives d'un champ nombre volent 20 px de large sans rien
   apporter au pouce (le clavier numérique fait le travail). */
.tp-price::-webkit-outer-spin-button, .tp-price::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
.tp-price { -moz-appearance: textfield; appearance: textfield; }
.tp-price-ro { padding-right: 12px; font-size: 15px; font-weight: 700; color: var(--marine); }
.tp-cur { font-size: 14px; font-weight: 700; color: var(--marine); }
.tp-unit { font-size: 12px; color: var(--marine); }

/* — Interrupteur « Disponible / Épuisé » : LE geste du service — */
.tp-sw {
  display: inline-flex; align-items: center; gap: 9px; min-height: 44px;
  padding: 0 2px; cursor: pointer; user-select: none;
}
.tp-sw input { position: absolute; width: 1px; height: 1px; opacity: 0; margin: 0; }
.tp-sw-tr {
  position: relative; flex: none; width: 46px; height: 27px; border-radius: 999px;
  background: rgba(11, 59, 84, .16); border: 1px solid var(--stroke);
  transition: background .2s ease, border-color .2s ease;
}
.tp-sw-kn {
  position: absolute; top: 2px; left: 2px; width: 21px; height: 21px; border-radius: 50%;
  background: var(--ecume); box-shadow: 0 3px 8px -3px rgba(11, 59, 84, .7);
  transition: transform .2s cubic-bezier(.2, .8, .2, 1);
}
.tp-sw input:checked + .tp-sw-tr { background: var(--lagon); border-color: transparent; }
.tp-sw input:checked + .tp-sw-tr .tp-sw-kn { transform: translateX(19px); }
.tp-sw input:focus-visible + .tp-sw-tr { box-shadow: var(--ring); }
.tp-sw input:disabled + .tp-sw-tr { opacity: .5; }
.tp-sw-tx { min-width: 6.6em; font-size: 13.5px; font-weight: 700; color: var(--profond); }
.tp-sw-tx .off { color: var(--tp-alerte); }
.tp-sw input:checked ~ .tp-sw-tx .off { display: none; }
.tp-sw input:not(:checked) ~ .tp-sw-tx .on { display: none; }

/* — Boutons discrets d'une ligne (corbeille, annuler) — */
.tp-mini {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  min-width: 44px; min-height: 44px; padding: 6px 11px; border-radius: 12px; cursor: pointer;
  border: 1px solid var(--stroke); background: var(--ecume); color: var(--profond);
  font: inherit; font-size: 14px; font-weight: 600; white-space: nowrap;
  transition: border-color .2s ease, color .2s ease, background .2s ease;
}
.tp-mini:hover { border-color: rgba(13, 148, 136, .4); color: var(--lagon); }
.tp-mini.danger { color: var(--corail); }
.tp-mini.danger:hover { border-color: rgba(255, 107, 87, .5); color: var(--tp-alerte); }

/* — Texte ÉDITABLE EN PLACE (2026-08-17) : corriger une faute de frappe sans
   supprimer puis recréer la ligne (et donc reperdre son prix).
   Le pointillé sous le mot DIT qu'il s'édite, sans attendre un survol : au
   doigt il n'y a pas de survol, et un geste qu'on ne trouve pas n'existe pas
   (règle 16). Le crayon reste visible pour la même raison — discret (opacité),
   jamais absent — et sa boîte fait 44 px, ramenée par une marge négative pour
   ne pas gonfler la hauteur de la ligne.
   Une CELLULE, UN crayon : les textes d'une ligne (libellé, description)
   s'empilent dans `.tp-ed-vals`, le crayon reste seul en bout. La cellule est
   de niveau BLOC (`display: flex`), pour que la pastille « à enregistrer »
   passe dessous et non à côté du crayon. — */
.tp-ed { display: flex; align-items: center; gap: 1px; max-width: 100%; }
.tp-ed-vals {
  display: flex; flex-direction: column; align-items: flex-start; min-width: 0;
}
.tp-ed-tx {
  min-width: 0; overflow-wrap: anywhere; cursor: text;
  padding: 2px 5px; margin-left: -5px; border-radius: 8px;
  border-bottom: 1px dashed rgba(11, 59, 84, .22);
  transition: background .2s ease, border-color .2s ease;
}
.tp-ed-tx:hover { background: rgba(13, 148, 136, .09); border-bottom-color: var(--lagon); }
.tp-ed-tx:focus-visible { outline: none; box-shadow: var(--ring); border-bottom-color: var(--lagon); }
/* Chaque texte garde la typo qu'il avait AVANT de devenir éditable : le nom
   d'une ligne, sa description dessous, le titre de la carte (qui hérite du
   <h2> qui le porte). ⚠️ Ces trois règles passent AVANT le repli : à
   spécificité égale, c'est l'ordre qui décide, et le repli doit garder son
   italique jusque dans un titre de carte. */
.tp-ed-main { font-size: 15px; font-weight: 700; }
.tp-ed-sub { margin-top: 3px; color: var(--marine); font-size: 12px; font-weight: 500; }
.tp-ed-hd .tp-ed-main { font: inherit; }
/* Repli : ce que le visiteur LIRA tant que la traduction manque. En italique
   grisé, il se distingue d'un texte réellement saisi dans cette langue. */
.tp-ed-tx.is-fb, .tp-line-nm strong.is-fb {
  color: var(--marine); font-style: italic; font-weight: 500;
}
.tp-ed-btn {
  flex: none; display: inline-flex; align-items: center; justify-content: center;
  min-width: 44px; min-height: 44px; margin: -11px 0; padding: 0;
  border: 0; background: none; cursor: pointer; font-size: 13px; line-height: 1;
  opacity: .45; transition: opacity .2s ease;
}
.tp-ed-btn:hover, .tp-ed-btn:focus-visible { opacity: 1; }
/* Le formulaire prend la largeur de la CELLULE, jamais celle de l'écran, et
   empile ses champs — la même forme au téléphone et au bureau : à l'ouverture,
   la ligne grandit en hauteur, rien ne se réorganise. */
.tp-ed.is-editing { align-items: stretch; }
.tp-edf { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 6px; }
.tp-ed-in {
  width: 100%; min-width: 0; min-height: 44px; padding: 9px 12px;
  border: 1px solid var(--lagon); border-radius: 11px; background: var(--ecume);
  font: inherit; font-size: 15px; font-weight: 600; color: var(--profond);
}
.tp-ed-in:focus { outline: none; box-shadow: var(--ring); }
/* La description reste SECONDAIRE jusque dans le formulaire : plus légère que
   le libellé, on voit d'un coup d'œil lequel des deux champs est le titre. */
.tp-ed-in.is-sub { min-height: 40px; font-size: 13px; font-weight: 500; }

/* — Ajouter une ligne / une carte — */
.tp-addrow { padding: 10px 14px 12px; }
.tp-addbtn {
  display: block; width: 100%; min-height: 46px; padding: 12px; cursor: pointer;
  border: 1.5px dashed rgba(13, 148, 136, .45); border-radius: 14px;
  background: rgba(13, 148, 136, .05); color: var(--lagon);
  font: inherit; font-weight: 700; font-size: 14px;
  transition: background .2s ease;
}
.tp-addbtn:hover { background: rgba(13, 148, 136, .1); }
.tp-newcard { margin-top: 4px; }
.tp-form {
  margin: 0 14px 14px; padding: 12px 13px 13px;
  background: var(--sable); border: 1px solid var(--stroke); border-radius: 16px;
}
.tp-form-row { display: flex; gap: 10px 12px; flex-wrap: wrap; align-items: flex-end; margin-top: 10px; }
.tp-form-row:first-child { margin-top: 0; }
.tp-f-grow { flex: 1 1 190px; min-width: 0; }
.tp-f-price { flex: 0 0 130px; }
.tp-f-price input { width: 100%; }
.tp-acts { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-top: 12px; }

/* — Créer sa première carte : UN écran guidé — */
.tp-create {
  background: var(--ecume); border: 1.5px dashed rgba(13, 148, 136, .45);
  border-radius: var(--radius); padding: 20px 20px 22px; margin: 4px 0 0;
}
.tp-create-hd { text-align: center; margin-bottom: 14px; }
.tp-create-ic { font-size: 40px; line-height: 1; }
.tp-create h2 { font-family: var(--font-display); font-weight: 600; font-size: 22px; margin: 8px 0 0; }
.tp-create-hd .tp-hint { max-width: 44ch; margin: 8px auto 0; }
.tp-empty { text-align: center; padding: 32px 16px 40px; color: var(--marine); }
.tp-empty p { max-width: 46ch; margin: 10px auto 0; line-height: 1.55; }

/* — Photo de la carte (palier d'entrée) — */
.tp-photo { display: flex; gap: 14px; flex-wrap: wrap; align-items: flex-start; }
.tp-photo-side { flex: 0 0 auto; }
.tp-photo-side img { width: 150px; border-radius: 14px; border: 1px solid var(--stroke); }
.tp-photo-bd { flex: 1 1 240px; min-width: 0; }
.tp-free-text {
  display: block; width: 100%; margin-top: 6px; padding: 12px 14px; min-height: 210px;
  border: 1px solid var(--stroke); border-radius: 14px; background: var(--ecume);
  font: inherit; font-size: 15px; line-height: 1.6; color: var(--profond); resize: vertical;
}
.tp-free-text:focus { outline: none; border-color: var(--lagon); box-shadow: var(--ring); }
.tp-mt { display: block; margin-top: 12px; }

/* — Réglages secondaires : la devise se REPLIE (on la choisit une fois) — */
.tp-tools { display: flex; gap: 10px; flex-wrap: wrap; align-items: flex-start; margin-top: 16px; }
.tp-tool {
  flex: 1 1 280px; background: var(--ecume); border: 1px solid var(--stroke);
  border-radius: 16px; box-shadow: var(--shadow-s);
}
.tp-tool > summary {
  display: flex; align-items: center; gap: 8px; min-height: 48px; padding: 12px 14px;
  cursor: pointer; list-style: none; border-radius: 16px;
  font-family: var(--font-head); font-weight: 700; font-size: 14px; color: var(--profond);
}
.tp-tool > summary::-webkit-details-marker { display: none; }
.tp-tool > summary::after { content: '▾'; opacity: .45; transition: transform .2s ease; }
.tp-tool[open] > summary::after { transform: rotate(180deg); }
.tp-tool > summary:hover { color: var(--lagon); }
.tp-tool-val { margin-left: auto; font-weight: 800; color: var(--lagon); }
.tp-tool-bd { padding: 0 14px 14px; }
.tp-tools .btn { min-height: 48px; }

/* — Barre « Enregistrer » COLLANTE : jamais à chercher, jamais à faire défiler — */
.tp-bar {
  position: sticky; bottom: 0; z-index: 600;
  display: flex; align-items: center; gap: 8px 12px; flex-wrap: wrap;
  margin-top: 16px; padding: 10px 14px calc(10px + env(safe-area-inset-bottom));
  background: var(--verre-jour);
  -webkit-backdrop-filter: blur(14px) saturate(160%); backdrop-filter: blur(14px) saturate(160%);
  border: 1px solid var(--stroke); border-radius: 18px; box-shadow: var(--shadow);
  transition: border-color .2s ease;
}
.tp-bar.has-pending { border-color: rgba(13, 148, 136, .55); }
.tp-state { flex: 1 1 auto; min-width: 0; display: flex; gap: 4px 10px; flex-wrap: wrap; align-items: center; }
.tp-pending { font-size: 12.5px; font-weight: 700; color: var(--lagon); }
.tp-msg { font-size: 12.5px; font-weight: 600; }
.tp-msg.ok { color: var(--lagon); }
.tp-msg.ko { color: var(--tp-alerte); }

/* — Téléphone : la barre passe en pleine largeur, les libellés s'effacent — */
/* ⚠️ Bornes en .98 : un `max-width: 599px` laisse un trou à 599 < w < 600 (zoom
   Windows, échelles fractionnaires) où AUCUNE des deux règles ne s'applique. */
@media (max-width: 599.98px) {
  .tp-wrap { padding-top: 78px; }
  .tp-btxt { display: none; }          /* « Annuler la suppression » → ↩ seul */
  .tp-f-price { flex: 1 1 100%; }
  .tp-form, .tp-addrow { margin-left: 10px; margin-right: 10px; }
  .tp-form { padding: 11px; }
  .tp-addrow { padding-left: 12px; padding-right: 12px; }
  .tp-card-head { padding: 12px 13px 10px; }
  .tp-card-bd { padding: 0 13px 14px; }
  .tp-create { padding: 18px 14px 20px; }
  .tp-bar .btn { flex: 1 1 auto; }
  .tp-state { flex-basis: 100%; order: -1; }
  .tp-photo-side img { width: 118px; }
  /* Le lien de vérification passe sous les chips, à gauche comme le reste :
     collé à droite d'une ligne à lui, il aurait l'air d'un bouton perdu. */
  .tp-seelink { margin-left: 0; }
}
/* — Ordinateur (≥900) : les quatre colonnes, à largeur FIXE pour que les prix
   d'une carte s'alignent d'une ligne à l'autre. Même seuil que le Carnet et la
   grille du compte : une seule bascule à retenir dans tout le site. — */
@media (min-width: 900px) {
  .tp-line {
    grid-template-columns: minmax(0, 1fr) 170px 158px 44px;
    grid-template-areas: "nm pr sw act";
    row-gap: 4px; padding: 8px 14px;
  }
  .tp-line.is-gone { grid-template-columns: minmax(0, 1fr) auto; grid-template-areas: "nm act"; }
  .tp-line-sw { justify-self: start; }
  .tp-price, .tp-price-ro { width: 104px; }
}
@media (prefers-reduced-motion: reduce) {
  .tp-sw-kn, .tp-line, .tp-tool > summary::after,
  .tp-ed-tx, .tp-ed-btn, .tp-seelink { transition: none; }
}

