:root{
  --bg:#f4f6fb; --surface:#ffffff; --surface-2:#f7f9fc; --surface-3:#eef2f8;
  --sidebar:#1d2534; --sidebar-2:#232c3e; --sidebar-txt:#c4ccdb; --sidebar-muted:#8b97ac;
  --txt:#1f2733; --txt-2:#5b6676; --txt-faint:#8a94a4;
  --line:#e2e7f0; --line-2:#cfd7e4;
  --primary:#2f6df6; --primary-d:#255ad6; --primary-soft:#e8f0ff;
  --ok:#1f9d57; --ok-soft:#e5f6ec; --warn:#c07d12; --warn-soft:#fdf1dd;
  --err:#d93b3b; --err-soft:#fdeaea; --info:#1b7fa8; --info-soft:#e2f3f9;
  --radius:12px; --radius-s:8px; --radius-l:16px;
  --shadow:0 1px 2px rgba(20,30,50,.06),0 4px 14px rgba(20,30,50,.06);
  --shadow-s:0 1px 2px rgba(20,30,50,.08);
  --sp:16px; --content-max:1180px;
  --font:'Inter',system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--txt);font:14.5px/1.6 var(--font);
  -webkit-font-smoothing:antialiased}
a{color:var(--primary);text-decoration:none} a:hover{text-decoration:underline}
code,kbd,samp{font-family:var(--mono)}
:focus-visible{outline:2px solid var(--primary);outline-offset:2px;border-radius:4px}
.ic{font-size:18px}
/* ---- topbar ---- */
.topbar{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:12px;
  height:56px;padding:0 18px;background:var(--surface);border-bottom:1px solid var(--line)}
.brand{display:flex;align-items:center;gap:9px;font-size:15px}
.brand-mark{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;
  border-radius:8px;background:var(--primary);color:#fff;font-weight:800;font-size:12px;letter-spacing:.02em}
.brand-t strong{color:var(--primary)}
.env-chip{margin-left:6px;padding:2px 9px;border-radius:999px;background:var(--primary-soft);
  color:var(--primary-d);font-size:11px;font-weight:700;letter-spacing:.04em}
.topbar-r{margin-left:auto;display:flex;align-items:center;gap:12px}
.srv-chip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;
  font-size:12px;font-weight:700;border:1px solid transparent}
.srv-chip .ic{font-size:15px}
.srv-ok{background:var(--ok-soft);color:var(--ok);border-color:#bfe6cd}
.srv-err{background:var(--err-soft);color:var(--err);border-color:#f4c4c4}
.srv-warn{background:var(--warn-soft);color:var(--warn);border-color:#eed9b0}
.srv-neutral{background:var(--surface-3);color:var(--txt-2);border-color:var(--line)}
.userbox{display:flex;align-items:center;gap:8px}
.userbox-n{font-size:13px;color:var(--txt-2);font-weight:600}
.userbox form{display:inline;margin:0}
.iconbtn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;
  border:1px solid var(--line);background:var(--surface);border-radius:8px;color:var(--txt-2);cursor:pointer}
.iconbtn:hover{color:var(--txt);border-color:var(--line-2);background:var(--surface-2)}
.burger{display:none;align-items:center;justify-content:center;width:34px;height:34px;
  border:1px solid var(--line);border-radius:8px;color:var(--txt-2);cursor:pointer}
.nav-toggle{position:absolute}
/* ---- shell ---- */
.shell{display:flex;min-height:calc(100vh - 56px)}
.side{width:236px;flex-shrink:0;background:var(--sidebar);padding:14px 12px;
  display:flex;flex-direction:column;gap:14px;overflow-y:auto}
.nav-group-t{margin:0 0 4px;padding:0 10px;font-size:10.5px;font-weight:800;letter-spacing:.09em;
  text-transform:uppercase;color:var(--sidebar-muted)}
.navlink{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;
  color:var(--sidebar-txt);font-size:13.5px;font-weight:500;line-height:1.2}
.navlink:hover{background:var(--sidebar-2);color:#fff;text-decoration:none}
.navlink.active{background:var(--primary);color:#fff;font-weight:650;box-shadow:0 2px 8px rgba(47,109,246,.35)}
.navlink .nav-ic{font-size:17px;opacity:.9}
.navlink.active .nav-ic{opacity:1}
.navlink.disabled{color:var(--sidebar-muted);cursor:default}
.navlink.disabled:hover{background:none;color:var(--sidebar-muted)}
.nav-soon{margin-left:auto;font-size:9.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;
  color:var(--sidebar-muted);border:1px solid #3a4459;border-radius:999px;padding:0 6px}
.scrim{display:none}
.main{flex:1;min-width:0;padding:26px 30px;max-width:calc(var(--content-max) + 60px);width:100%}
/* ---- page header standard ---- */
.pagehead{display:flex;flex-wrap:wrap;align-items:flex-start;gap:12px 18px;margin:0 0 20px}
.pagehead .ph-l{min-width:0;flex:1 1 auto}
.pagehead .ph-title{display:flex;align-items:center;gap:10px}
.pagehead .ph-title .ic{font-size:22px;color:var(--primary)}
.pagehead h1{font-size:22px;font-weight:750;margin:0;letter-spacing:-.01em}
.pagehead .sub{margin:5px 0 0;color:var(--txt-2);max-width:78ch;font-size:13.5px}
.pagehead .ph-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
h1{font-size:21px;margin:0 0 4px;letter-spacing:-.01em}
h2{font-size:12px;font-weight:750;text-transform:uppercase;letter-spacing:.07em;
  color:var(--txt-faint);margin:28px 0 12px}
h3{font-size:14.5px;margin:16px 0 8px;font-weight:650}
.sub{color:var(--txt-2);margin:0 0 16px;max-width:74ch}
.muted{color:var(--txt-2)} .faint{color:var(--txt-faint)}
.section-title{display:flex;align-items:center;gap:8px;margin:26px 0 12px;font-size:12px;
  font-weight:750;text-transform:uppercase;letter-spacing:.07em;color:var(--txt-faint)}
.section-title .ic{font-size:15px}
/* ---- toolbar : recherche + filtres ---- */
.toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 16px}
.search{position:relative;flex:1 1 280px;max-width:460px}
.search .ic{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--txt-faint);
  font-size:17px;pointer-events:none}
.search input{width:100%;padding:9px 12px 9px 36px;background:var(--surface);border:1px solid var(--line-2);
  border-radius:10px;color:var(--txt);font:inherit}
.search input:focus{outline:2px solid rgba(47,109,246,.35);border-color:var(--primary)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;gap:5px;padding:6px 12px;border-radius:999px;
  background:var(--surface);border:1px solid var(--line-2);color:var(--txt-2);font-size:12.5px;
  font-weight:600;cursor:pointer;user-select:none}
.chip:hover{border-color:var(--primary);color:var(--primary)}
.chip.on{background:var(--primary);border-color:var(--primary);color:#fff}
.chip .ic{font-size:13px}
.count-note{font-size:12.5px;color:var(--txt-faint);margin:0 0 12px}
/* ---- cartes / surfaces ---- */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;margin:8px 0 4px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:15px 16px;box-shadow:var(--shadow-s)}
.card .k{color:var(--txt-faint);font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.card .v{font-size:20px;margin-top:4px;font-weight:700}
/* stat card */
.stat{display:flex;gap:12px;align-items:flex-start;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius);padding:14px 16px;box-shadow:var(--shadow-s)}
.stat-ic{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;flex:none;
  border-radius:10px;background:var(--primary-soft);color:var(--primary-d)}
.stat-ic .ic{font-size:19px}
.stat.ok .stat-ic{background:var(--ok-soft);color:var(--ok)}
.stat.warn .stat-ic{background:var(--warn-soft);color:var(--warn)}
.stat.err .stat-ic{background:var(--err-soft);color:var(--err)}
.stat-b{min-width:0}
.stat-v{font-size:19px;font-weight:750;line-height:1.15}
.stat-k{font-size:12px;color:var(--txt-2);margin-top:1px}
.stat-l{font-size:11.5px;margin-top:3px}
.panelbox{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:16px 18px;box-shadow:var(--shadow-s);margin:0 0 16px}
/* hero serveur (dashboard) */
.hero{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--radius-l);padding:18px 22px;box-shadow:var(--shadow);margin:0 0 18px}
.hero-main{display:flex;align-items:center;gap:14px}
.hero-ic{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;flex:none;
  border-radius:12px;background:var(--surface-3);color:var(--txt-2)}
.hero-ic .ic{font-size:24px}
.hero.ok .hero-ic{background:var(--ok-soft);color:var(--ok)}
.hero.err .hero-ic{background:var(--err-soft);color:var(--err)}
.hero-name{font-size:17px;font-weight:750}
.hero-state{font-size:12.5px;color:var(--txt-2);margin-top:2px}
.hero-facts{display:flex;flex-wrap:wrap;gap:6px 22px;margin-left:auto}
.hero-fact .hf-k{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--txt-faint)}
.hero-fact .hf-v{font-size:14px;font-weight:650}
/* ---- carte entité (quête / story / PNJ / dialogue) ---- */
.entity-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:15px 17px;margin:12px 0;box-shadow:var(--shadow-s)}
.entity-card:hover{border-color:var(--line-2)}
.entity-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 12px;justify-content:space-between}
.entity-name{font-size:15.5px;font-weight:700;margin:0;color:var(--txt);line-height:1.3}
.entity-meta{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.meta-line{margin:8px 0 0;font-size:13px;color:var(--txt-2)}
.meta-k{display:inline-block;min-width:92px;color:var(--txt-faint);font-size:10.5px;font-weight:700;
  text-transform:uppercase;letter-spacing:.05em}
.obj-list,.step-list,.reward-list{margin:8px 0 0;padding:0;list-style:none;display:flex;
  flex-direction:column;gap:6px}
.obj-list li,.step-list li,.reward-list li{display:flex;flex-wrap:wrap;align-items:center;
  gap:8px;font-size:13.5px}
.obj-list li,.reward-list li{padding-left:16px;position:relative}
.obj-list li::before{content:"";position:absolute;left:2px;top:8px;width:6px;height:6px;border-radius:50%;
  background:var(--primary)}
.reward-list li::before{content:"";position:absolute;left:2px;top:7px;width:7px;height:7px;
  background:var(--warn);transform:rotate(45deg)}
.step-n{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;
  flex-shrink:0;border-radius:50%;background:var(--primary-soft);border:1px solid #cfe0ff;
  font-size:11px;font-weight:700;color:var(--primary-d)}
.obj-text{color:var(--txt);overflow-wrap:anywhere}
.act-type{color:var(--txt)}
.reward-list .obj-text{font-weight:600}
/* ---- #428 : tuiles d'icônes pixel art (sprite partagé avec le portail public) ---- */
.lq-tile{display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;
  border-radius:3px;background:#8b6a43;border:1px solid #4a3220;
  box-shadow:inset 2px 2px 0 #6b4c2c,inset -2px -2px 0 #4a3220}
.lq-ico{display:inline-block;flex:none;width:16px;height:16px;image-rendering:pixelated}
.obj-list li.has-tile,.reward-list li.has-tile{padding-left:0}
.obj-list li.has-tile::before,.reward-list li.has-tile::before{content:none}
.npc-head-main>.lq-tile{align-self:center}
.accordion-button>.lq-tile{margin-right:8px}
/* ---- identifiant technique en second plan ---- */
.tid{font-size:11.5px;color:var(--txt-faint);background:var(--surface-3);border:1px solid var(--line);
  border-radius:6px;padding:1px 6px;white-space:nowrap;font-family:var(--mono)}
.tid--wrap{white-space:normal;word-break:break-word}
.tid[data-copy]{cursor:pointer;transition:color .1s,border-color .1s}
.tid[data-copy]:hover,.tid[data-copy]:focus-visible{color:var(--txt-2);border-color:var(--line-2);outline:none}
.tid.copied{color:var(--ok);border-color:var(--ok);background:var(--ok-soft)}
.badge{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--txt-2);
  background:var(--surface-3);border:1px solid var(--line);border-radius:999px;padding:1px 9px;white-space:nowrap}
.badge .ic{font-size:12px}
/* ---- pastilles de statut (glyphe + texte, jamais couleur seule) ---- */
.pill{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:999px;
  font-size:11.5px;font-weight:700;border:1px solid transparent;white-space:nowrap;vertical-align:middle}
.pill-g{font-weight:800;font-size:11px;line-height:1}
.pill--success,.pill.ok{background:var(--ok-soft);color:var(--ok);border-color:#bfe6cd}
.pill--delivered{background:var(--info-soft);color:var(--info);border-color:#bfe1ec}
.pill--pending,.pill.warn{background:var(--warn-soft);color:var(--warn);border-color:#eed9b0}
.pill--failed,.pill.err{background:var(--err-soft);color:var(--err);border-color:#f4c4c4}
.pill--rejected{background:var(--err-soft);color:var(--err);border-color:#f4c4c4;border-style:dashed}
.pill--expired{background:var(--surface-3);color:var(--txt-faint);border-color:var(--line)}
.pill--neutral{background:var(--surface-3);color:var(--txt-2);border-color:var(--line)}
/* ---- bannières / callouts ---- */
.banner{border-radius:var(--radius-s);padding:11px 14px;margin:0 0 16px;border:1px solid;font-size:13.5px;
  display:flex;gap:9px;align-items:flex-start}
.banner .ic{font-size:17px;flex:none;margin-top:1px}
.banner.err{background:var(--err-soft);border-color:#f0bcbc;color:#a52020}
.banner.ok{background:var(--ok-soft);border-color:#bfe6cd;color:#166b3d}
.banner.info{background:var(--info-soft);border-color:#bfe1ec;color:#12566f}
.banner.warn{background:var(--warn-soft);border-color:#eed9b0;color:#8a5a0c}
/* ---- tableaux ---- */
.table-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);
  margin-top:8px;background:var(--surface);box-shadow:var(--shadow-s)}
table{width:100%;border-collapse:collapse}
.table-wrap table{margin:0}
td,th{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top;font-size:13px}
tbody tr:last-child td{border-bottom:0}
tbody tr:hover{background:var(--surface-2)}
th{color:var(--txt-faint);font-weight:750;font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;
  background:var(--surface-2)}
/* ---- état vide ---- */
.empty{color:var(--txt-2);font-size:13.5px;background:var(--surface);border:1px dashed var(--line-2);
  border-radius:var(--radius);padding:22px 18px;margin:10px 0;text-align:center}
.empty .ic{font-size:22px;color:var(--txt-faint);display:block;margin:0 auto 6px}
/* ---- formulaires ---- */
label{display:block;color:var(--txt-2);font-size:12.5px;font-weight:600;margin:14px 0 5px}
.field-help{font-size:11.5px;color:var(--txt-faint);margin:3px 0 0;font-weight:400}
/* Compteur de caractères (#94). Discret tant qu'on est dans la borne, franchement visible au
   dépassement : c'est le seul signal qui remplace la troncature muette du navigateur. */
.charcount{font-variant-numeric:tabular-nums}
.charcount-over{color:var(--err);font-weight:600}
/* Le brief est long : largeur de lecture confortable, retours à la ligne de l'auteur conservés. */
.brief-text{white-space:pre-wrap;max-width:70ch;margin:6px 0 0;font-size:12.5px;color:var(--txt-2)}
input[type=text],input[type=password],input[type=number],input[type=search],input[list],select,textarea{
  width:100%;max-width:460px;padding:9px 11px;background:var(--surface);border:1px solid var(--line-2);
  border-radius:9px;color:var(--txt);font:inherit}
/* #425 : la borne de 460px ne vaut que pour les saisies d'une ligne (identifiants, nombres,
   listes). Une zone multiligne (texte, prompt, pack JSON/YAML) suit toute la largeur de son champ :
   c'était la cause commune des zones étriquées à la moitié de la carte sur ordinateur. */
textarea{min-height:80px;resize:vertical;max-width:100%}
/* Zone de saisie de code (pack JSON/YAML) : monospace, indentation et lignes conservées ; une
   ligne trop longue défile dans la zone, jamais dans la page. */
textarea.code-input{font-family:var(--mono);font-size:12.5px;line-height:1.5;white-space:pre;
  overflow-wrap:normal;overflow-x:auto}
input:focus,select:focus,textarea:focus{outline:2px solid rgba(47,109,246,.35);border-color:var(--primary)}
input:disabled,select:disabled,textarea:disabled{background:var(--surface-3);color:var(--txt-faint);cursor:not-allowed}
/* minmax(0,1fr) et non 1fr (= minmax(auto,1fr)) : un contenu long (code, URL) ne peut pas
   élargir une colonne au-delà de la carte (#425). */
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 22px}
.form-grid .full{grid-column:1/-1}
.field{min-width:0}
.field label{margin-top:12px}
.diag-list{margin:8px 0 0;padding-left:2px;list-style:none;display:flex;flex-direction:column;gap:6px}
.diag-list li{font-size:12.5px;line-height:1.5}
.diag-list .pill{margin-right:4px}
.editor .form-section>.fs-h .ic{flex:none}
.form-section{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 18px 18px;margin:12px 0;box-shadow:var(--shadow-s)}
.form-section>.fs-h{display:flex;align-items:center;gap:8px;margin:0 0 4px;font-weight:700;font-size:14px}
.form-section>.fs-h .ic{font-size:16px;color:var(--primary)}
.form-section>.fs-d{font-size:12.5px;color:var(--txt-2);margin:0 0 6px}
.btn{margin-top:14px;padding:9px 16px;background:var(--primary);border:1px solid var(--primary);
  border-radius:9px;color:#fff;font-weight:650;font:inherit;font-weight:650;cursor:pointer;
  display:inline-flex;align-items:center;gap:7px}
.btn .ic{font-size:15px}
.btn:hover{background:var(--primary-d);text-decoration:none}
.btn.secondary{background:var(--surface);color:var(--txt);border-color:var(--line-2)}
.btn.secondary:hover{background:var(--surface-2)}
.btn.danger{background:var(--err);border-color:var(--err)}
.btn.danger:hover{filter:brightness(.94)}
.btn.sm{padding:6px 11px;font-size:12.5px;margin-top:0}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btnrow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:14px}
.formerr{color:var(--err);margin-top:12px;font-size:13px;font-weight:600}
.actform{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:13px 16px;margin:10px 0;box-shadow:var(--shadow-s)}
.actform.read{border-left:3px solid var(--line-2)}
.actform .btn{width:auto}
.actform.read .btn{margin-top:0;background:var(--surface);color:var(--txt);border-color:var(--line-2)}
.actform.read .btn:hover{background:var(--surface-2)}
label.inline{display:inline-flex;align-items:center;gap:7px;margin:10px 0 0;color:var(--txt);
  font-size:13px;font-weight:500}
label.inline input{width:auto;max-width:none}
label.inline.confirm{color:var(--warn);font-weight:600}
.resline{margin:8px 0;font-size:13px}
.preview{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--radius-s);
  padding:10px 14px;margin:8px 0}
.preview .meta-line{margin:4px 0}
.coord-row{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.coord-row label.coord{display:flex;flex-direction:column;gap:3px;margin:0;font-size:12px;
  color:var(--txt-2);flex:1 1 80px}
.coord-row label.coord input{width:100%}
/* ---- diff / aperçu code ---- */
/* min-width:0 : dans une grille ou un flex, l'aperçu reste à la largeur du parent et c'est le
   <pre> qui défile, pas la page (#425). */
.codeblock{position:relative;margin:12px 0;min-width:0;max-width:100%}
.codeblock pre{margin:0;background:#0f1729;border:1px solid #1e2b45;border-radius:10px;
  padding:14px 16px;overflow-x:auto;color:#dbe4f3;font-size:12.5px;line-height:1.55;white-space:pre}
.diff pre{background:#0f1729}
/* #583 : bouton de copie d'un bloc brut + retour lisible (passe à la ligne sur téléphone). */
.copy-bar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;margin-top:8px}
.copy-status{font-size:13px;color:var(--txt-2)}
.copy-status.ok{color:var(--ok)}
.copy-status.err{color:var(--err)}
.diff .di-add{color:#7ee0a1} .diff .di-del{color:#ff9d9d} .diff .di-ctx{color:#9fb0cc}
/* ---- issue #47 : diff source ↔ DEV ---- */
/* Hauteur bornée : un diff long ne doit pas repousser le reste de la fiche hors de l'écran.
   La largeur reste gérée par overflow-x de .codeblock pre, donc lisible sur téléphone. */
.diff.diff-publish pre,.codeblock.bounded pre{max-height:50vh;overflow-y:auto}
.diff .di-gap{color:#64748b}
/* Gouttière de numéros de ligne : sélectionnable mais discrète, et elle ne bouge pas quand on
   fait défiler horizontalement puisqu'elle fait partie de la ligne. */
.diff .di-num{color:#5b6b86;user-select:none}
.publish-diff-sum{cursor:pointer;font-weight:600}
.publish-diff-meta{color:#9fb0cc;font-size:12.5px;margin:4px 0 0}
/* ---- issue #47 : changements en attente ---- */
/* La table reste scrollable horizontalement plutôt que de déborder : c'est la seule façon
   d'avoir huit colonnes lisibles sur un téléphone sans masquer d'information. */
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.pending-table{min-width:720px}
.pending-table td,.pending-table th{vertical-align:middle;white-space:nowrap}
.pending-table td:nth-child(3){white-space:normal}
/* Issue #427 : sur téléphone, chaque ressource devient une fiche empilée — aucune barre horizontale,
   case et bouton « Ouvrir » assez grands pour le doigt. */
@media(max-width:575.98px){
  .tablewrap:has(.pending-table){overflow-x:visible}
  .pending-table{min-width:0}
  .pending-table thead{display:none}
  .pending-table,.pending-table tbody,.pending-table tr,.pending-table td{display:block;width:100%}
  .pending-table tr{position:relative;border-bottom:1px solid var(--line);padding:10px 4px}
  .pending-table tr:has(td.pending-pick){padding-left:48px}
  .pending-table td{padding:2px 4px;border:0;white-space:normal}
  .pending-table td[data-label]:not([data-label="Ressource"])::before{content:attr(data-label) " : ";color:var(--txt-2);font-size:12.5px}
  .pending-table td.pending-pick{position:absolute;left:4px;top:8px;width:auto;padding:0}
  .pending-table td.pending-pick input[type=checkbox]{width:28px;height:28px}
  .pending-table td.pending-open .btn{min-height:40px;margin-top:4px}
}
.outcome-list{list-style:none;padding-left:0;margin:6px 0 0}
.outcome-list li{padding:3px 0;border-bottom:1px solid #1a2438}
.outcome-list li:last-child{border-bottom:0}
.filterbar{display:flex;flex-direction:column;gap:8px;margin:12px 0}
.filterrow{display:flex;flex-wrap:wrap;gap:6px}
.filtersearch{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.filtersearch input[type=search]{min-width:min(260px,100%)}
/* ---- éditeur : liste d'items (objectifs / quêtes de story) ---- */
.rowlist{display:flex;flex-direction:column;gap:10px;margin:8px 0}
.rowitem{background:var(--surface-2);border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.rowitem-h{display:flex;align-items:center;gap:8px;font-weight:650;font-size:13.5px}
.rowitem-h .grip{color:var(--txt-faint)}
.rowitem-h .row-n{color:var(--txt-faint);font-variant-numeric:tabular-nums;flex:none}
.rowitem-h .row-title{font-weight:650;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rowitem-actions{margin-left:auto;display:flex;gap:4px}
.rowitem-actions .iconbtn{width:28px;height:28px}
.rowitem-actions .iconbtn .ic{font-size:15px}
.rowitem-h select[data-type-select]{max-width:220px;padding:6px 9px;font-size:12.5px}
.type-fields[hidden]{display:none}
.default-submit{position:absolute;width:1px;height:1px;padding:0;margin:-1px;border:0;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap}
/* ---- éditeur : liste recherchable (#46) ---- */
.combo{position:relative;max-width:460px}
.combo .combo-input{width:100%}
.combo-menu{position:absolute;left:0;right:0;top:calc(100% + 3px);z-index:40;margin:0;padding:4px;
  list-style:none;background:var(--surface);border:1px solid var(--line-2);border-radius:9px;
  box-shadow:var(--shadow-m,0 8px 24px rgba(15,23,41,.14));max-height:240px;overflow-y:auto}
.combo-menu.up{top:auto;bottom:calc(100% + 3px)}
.combo-menu li{display:flex;align-items:baseline;gap:8px;padding:7px 9px;border-radius:6px;
  font-size:12.5px;cursor:pointer}
.combo-menu li.on,.combo-menu li:hover{background:var(--surface-2)}
.combo-menu li.combo-empty{color:var(--txt-faint);cursor:default}
.combo-menu .combo-v{font-family:var(--mono,ui-monospace,SFMono-Regular,Menlo,monospace);color:var(--txt)}
.combo-menu .combo-l{color:var(--txt-2)}
.combo-menu .combo-o{margin-left:auto;font-size:11px;color:var(--txt-faint);white-space:nowrap}
@media (max-width:560px){.combo,.rowitem-h select[data-type-select]{max-width:none}}
/* ---- éditeur : sélection multiple recherchable (#163) ---- */
/* La textarea reste soumise (format canonique inchangé) mais sort du flux dès que le widget
   JS est en place ; sans JavaScript, aucune de ces règles ne s'applique et elle reste visible. */
.multisel .multisel-store{display:none}
.multisel-chips{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 8px}
.multisel-none{font-size:12.5px;color:var(--txt-faint)}
.multisel-chips .chip{display:inline-flex;align-items:center;gap:7px;padding:4px 6px 4px 9px;
  border:1px solid var(--line-2);border-radius:999px;background:var(--surface-2);font-size:12.5px}
.multisel-chips .chip-t{color:var(--txt)}
.multisel-chips .chip-id{font-family:var(--mono,ui-monospace,SFMono-Regular,Menlo,monospace);
  font-size:11px;color:var(--txt-2);background:none;padding:0}
.multisel-chips .chip-o{font-size:11px;color:var(--txt-faint)}
.multisel-chips .chip-unknown{border-color:var(--warn-line,#d9a406);background:var(--warn-bg,#fff8e1)}
.multisel-chips .chip-x{border:0;background:none;cursor:pointer;font-size:16px;line-height:1;
  padding:0 4px;color:var(--txt-2);border-radius:999px}
.multisel-chips .chip-x:hover{color:var(--txt);background:var(--surface)}
.multisel .multisel-combo{max-width:460px}
@media (max-width:560px){.multisel .multisel-combo{max-width:none}}
/* ---- graphe de dialogue (#82) ---- */
.dlg-summary{margin:4px 0 2px}
.dlg-diag{margin:10px 0 2px;border-left:3px solid var(--line-2);padding:2px 0 2px 10px}
.dlg-diag-h{margin:0 0 4px;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--txt-faint)}
.dlg-graph-wrap>summary{font-weight:650;color:var(--txt)}
.dlg-graph{display:flex;flex-direction:column;gap:10px;margin-top:8px}
.dlg-node{border:1px solid var(--line);border-left:3px solid var(--line-2);border-radius:8px;
  padding:9px 12px;background:var(--surface-2)}
.dlg-node.start{border-left-color:var(--primary)}
.dlg-node.unreachable{border-left-color:var(--err);opacity:.9}
.dlg-node-head{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.dlg-speaker{margin:7px 0 2px;font-weight:650;font-size:13px}
.dlg-text{margin:0 0 6px;font-size:13px;color:var(--txt-2);overflow-wrap:anywhere}
.dlg-choices{margin:4px 0 0;padding-left:20px}
.dlg-choices li{margin:5px 0;font-size:12.5px;overflow-wrap:anywhere}
.dlg-arrow{color:var(--primary);font-weight:650;white-space:nowrap}
.dlg-choice-text{color:var(--txt)}
.dlg-fx{display:inline-block;font-size:11px;color:var(--info);background:var(--info-soft);
  border:1px solid #bfe1ec;border-radius:6px;padding:0 6px}
.dlg-cond{display:inline-block;font-size:11px;color:var(--warn);background:var(--warn-soft);
  border:1px solid #eed9b0;border-radius:6px;padding:0 6px}
.dlg-adv{font-size:11px}
.dlg-node-edit{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
.dlg-edit{margin:0;flex:1 1 240px;background:var(--surface-3);border-color:var(--line)}
.dlg-edit>summary{font-size:12px;color:var(--primary)}
.dlg-edit .actform{background:transparent;border:0;padding:6px 0 0;margin:4px 0 0;box-shadow:none}
.dlg-edit-choice{display:block;margin-top:4px}
.dlg-add-node{margin-top:10px}
.agentpicker{display:flex;gap:8px;align-items:center;margin:8px 0}
.agentpicker label{margin:0}
.actions-panel{margin-top:6px}
.poll-status{font-size:12px;margin-top:6px;color:var(--txt-2)}
[hidden]{display:none}
.danger-zone{border:1px solid #f0c5c5;border-left:3px solid var(--err);border-radius:var(--radius);
  padding:6px 16px 16px;margin:16px 0;background:var(--err-soft)}
.danger-zone>.dz-title{display:flex;align-items:center;gap:8px;margin:10px 0 2px;font-size:11.5px;
  text-transform:uppercase;letter-spacing:.05em;color:#a52020;font-weight:800}
.danger-zone details{border-color:#f0c5c5}
details{margin:10px 0;border:1px solid var(--line);border-radius:10px;padding:10px 14px;background:var(--surface)}
summary{cursor:pointer;color:var(--txt-2);font-weight:600}
details[open] summary{margin-bottom:8px}
/* #425 : un titre de section placé dans un <summary> reste sur la ligne du triangle (il
   formait une ligne vide « ▶ » au-dessus du titre). */
summary>.section-title{display:inline;margin:0}
summary>.section-title .ic{margin-right:6px;vertical-align:-2px}
ol,ul{margin:6px 0;padding-left:20px}
/* ---- centre de documentation (#49) ---- */
.doc-search{display:flex;gap:8px;margin:14px 0 22px}
.doc-search input[type=search]{flex:1;max-width:660px;padding:12px 16px;font-size:15px;
  background:var(--surface);border:1px solid var(--line-2);border-radius:12px;color:var(--txt);
  box-shadow:var(--shadow-s)}
.doc-search input[type=search]:focus{outline:2px solid rgba(47,109,246,.35);border-color:var(--primary)}
.doc-search .btn{margin:0;white-space:nowrap}
.doc-shortcuts{display:flex;flex-wrap:wrap;gap:9px;margin:6px 0 4px}
.doc-chip{display:inline-flex;align-items:center;gap:7px;padding:9px 14px;border-radius:12px;
  background:var(--surface);border:1px solid var(--line);color:var(--txt);font-size:13px;box-shadow:var(--shadow-s)}
.doc-chip .ic{font-size:15px;color:var(--primary)}
.doc-chip:hover{border-color:var(--primary);text-decoration:none;box-shadow:var(--shadow)}
.doc-cats{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px;margin-top:8px}
.doc-cat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);
  padding:14px 16px;box-shadow:var(--shadow-s)}
.doc-cat h3{margin:0 0 8px;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--txt-faint);
  display:flex;align-items:center;gap:7px}
.doc-cat h3 .ic{font-size:15px;color:var(--primary)}
.doc-cat ul{margin:0;padding-left:2px;list-style:none} .doc-cat li{margin:5px 0;font-size:13.5px}
.doc-cat li a{display:flex;align-items:center;gap:6px}
.doc-cat li a::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--line-2);flex:none}
.doc-hits{display:flex;flex-direction:column;gap:10px;margin-top:6px}
.doc-hit{display:block;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--primary);
  border-radius:10px;padding:12px 16px;box-shadow:var(--shadow-s)}
.doc-hit:hover{box-shadow:var(--shadow);text-decoration:none}
.doc-hit-cat{display:block;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--txt-faint)}
.doc-hit-title{display:block;font-weight:700;color:var(--txt);margin:2px 0 3px}
.doc-hit-snip{display:block;font-size:12.5px;color:var(--txt-2)}
.doc-crumbs{font-size:12.5px;color:var(--txt-2);margin:2px 0 14px}
.doc-crumbs span{color:var(--txt-faint);margin:0 5px}
.doc-layout{display:grid;grid-template-columns:220px 1fr;gap:26px;align-items:start}
.doc-toc{position:sticky;top:74px;font-size:13px;border-left:2px solid var(--line);padding-left:14px;
  max-height:calc(100vh - 96px);overflow-y:auto;overscroll-behavior:contain}
.doc-toc-h{margin:0 0 5px;font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--txt-faint);font-weight:750}
.doc-toc ul{list-style:none;margin:0 0 14px;padding:0} .doc-toc li{margin:5px 0}
.doc-toc li.lvl3{padding-left:12px;font-size:12.5px}
.doc-tags .badge{margin:2px 4px 2px 0}
.doc-body{min-width:0;max-width:800px;background:var(--surface);border:1px solid var(--line);
  border-radius:var(--radius-l);padding:26px 34px;box-shadow:var(--shadow-s)}
.doc-body h1{font-size:24px;margin:0 0 14px;font-weight:750}
.doc-body h2{font-size:16px;margin:28px 0 10px;color:var(--txt);text-transform:none;letter-spacing:0;
  border-bottom:1px solid var(--line);padding-bottom:6px;font-weight:700}
.doc-body h3{font-size:15px;margin:22px 0 8px;color:var(--txt);font-weight:700;
  padding-left:11px;border-left:3px solid var(--primary)}
.doc-body h4{font-size:14px;margin:18px 0 6px;color:var(--txt-2);font-weight:700}
.doc-body h3 code{background:var(--surface-2);border-color:var(--line-2);color:var(--txt-2);font-weight:600}
.doc-body p{margin:10px 0} .doc-body li{margin:5px 0}
/* #780 : listes imbriquées lisibles (puces distinctes par niveau, paragraphes de suite), ancres visibles sous la barre. */
.doc-body ul,.doc-body ol{padding-left:24px;margin:10px 0} .doc-body li > ul,.doc-body li > ol{margin:6px 0 8px}
.doc-body ul ul{list-style:circle} .doc-body ul ul ul{list-style:square}
.doc-body li > p{margin:6px 0}
.doc-body li::marker{color:var(--txt-faint)} .doc-body ol > li::marker{font-weight:700;color:var(--primary)}
.doc-body h2[id],.doc-body h3[id],.doc-body h4[id]{scroll-margin-top:76px}
.doc-body :target{background:var(--warn-soft);border-radius:6px}
.doc-toc-m{display:none;margin:0 0 16px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2);padding:10px 14px}
.doc-toc-m summary{cursor:pointer;font-weight:700;font-size:13.5px}
.doc-toc-m ol{margin:8px 0 2px;padding-left:22px} .doc-toc-m li{margin:6px 0}
.doc-related{margin-top:28px;border-top:1px solid var(--line);padding-top:12px}
.doc-related ul{margin:4px 0;padding-left:18px} .doc-related .muted{font-size:12px}
.doc-pager{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:22px}
.doc-pager a{display:block;border:1px solid var(--line);border-radius:10px;padding:10px 14px;font-weight:650;
  overflow-wrap:anywhere} .doc-pager a:hover{border-color:var(--primary);text-decoration:none;box-shadow:var(--shadow)}
.doc-pager a span{display:block;font-size:11px;font-weight:600;color:var(--txt-faint);text-transform:uppercase;letter-spacing:.04em}
.doc-pager-next{text-align:right;grid-column:2}
.doc-hit-sec{display:block;font-size:12px;font-weight:650;color:var(--primary);margin:0 0 3px}
/* Mini-libellés « Syntaxe » / « Paramètres » / « Exemple » / « Résultat attendu » / « Attention »
   (paragraphe réduit à un **libellé**, classe doc-label posée par Markdown — #780 : l'ancien sélecteur
   :only-child transformait aussi un mot en gras au milieu d'une phrase). */
.doc-body p.doc-label > strong{display:inline-block;font-size:11px;letter-spacing:.04em;
  text-transform:uppercase;color:var(--txt-faint);font-weight:750;margin-top:4px}
.doc-body code{background:var(--surface-3);border:1px solid var(--line);border-radius:5px;padding:1px 5px;
  font-size:12.5px;color:#243b53;overflow-wrap:anywhere}
.doc-body a{overflow-wrap:anywhere}
.doc-cmd{position:relative;margin:14px 0}
.doc-cmd pre{margin:0;background:#0f1729;border:1px solid #1e2b45;border-radius:10px;
  padding:14px 72px 14px 16px;overflow-x:auto}
.doc-cmd pre code{background:none;border:0;padding:0;font-size:12.5px;line-height:1.55;color:#dbe4f3;white-space:pre}
.doc-copy{position:absolute;top:7px;right:7px;z-index:2;font:inherit;font-size:11px;font-weight:600;
  line-height:1;cursor:pointer;background:#1e2b45;color:#aab8d4;border:1px solid #2c3d5e;border-radius:6px;
  padding:4px 9px;white-space:nowrap}
.doc-copy:hover{color:#fff;border-color:#3a4e74}
.doc-copy.copied{color:#7ee0a1;border-color:#7ee0a1}
.doc-tablewrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px;margin:14px 0}
.doc-tablewrap table{width:100%;border-collapse:collapse;margin:0}
.doc-tablewrap th,.doc-tablewrap td{border-bottom:1px solid var(--line);padding:8px 12px;
  text-align:left;font-size:13px;vertical-align:top}
.doc-tablewrap th{background:var(--surface-2);color:var(--txt-faint);font-size:10.5px;text-transform:uppercase;letter-spacing:.04em}
.doc-callout{border:1px solid var(--line);border-left:3px solid var(--info);border-radius:10px;
  padding:10px 16px;margin:14px 0;background:var(--info-soft)}
.doc-callout.doc-warn{border-left-color:var(--warn);background:var(--warn-soft)}
.doc-callout .doc-callout-h{display:block;font-size:10.5px;font-weight:800;text-transform:uppercase;
  letter-spacing:.05em;color:var(--info);margin-bottom:3px}
.doc-callout.doc-warn .doc-callout-h{color:var(--warn)}
.doc-callout p{margin:2px 0}
.doc-source{font-size:11.5px;margin-top:26px;border-top:1px solid var(--line);padding-top:10px;color:var(--txt-faint)}
.doc-cm-link{display:inline-flex;align-items:center;gap:6px;margin:0 0 14px;font-size:12.5px;
  background:var(--surface);border:1px solid var(--line);border-radius:999px;padding:5px 12px;box-shadow:var(--shadow-s)}
.doc-cm-link .ic{font-size:14px}
/* ---- connexion ---- */
.centered{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:16px;
  background:linear-gradient(160deg,#eef3ff,#f4f6fb 55%)}
.login{width:360px;max-width:100%;box-shadow:var(--shadow);border-radius:var(--radius-l);padding:26px}
.login h1{font-size:19px;margin-bottom:4px}
.login .btn{width:100%;justify-content:center}
.card.login{background:var(--surface);border:1px solid var(--line)}
/* ---- responsive ---- */
@media(max-width:1000px){.main{padding:20px}.doc-layout{grid-template-columns:180px 1fr;gap:18px}}
@media(max-width:820px){
  .burger{display:inline-flex}
  .side{position:fixed;left:0;top:56px;bottom:0;z-index:40;transform:translateX(-100%);
    transition:transform .18s ease;box-shadow:0 0 40px rgba(0,0,0,.35)}
  .nav-toggle:checked ~ .shell .side{transform:translateX(0)}
  .nav-toggle:checked ~ .shell .scrim{display:block;position:fixed;inset:56px 0 0;z-index:35;
    background:rgba(12,18,30,.45)}
  .main{padding:16px}
  .hero-facts{margin-left:0}
  .doc-layout{grid-template-columns:1fr}
  .doc-toc{display:none}
  .doc-toc-m{display:block}
  .doc-body{max-width:100%;padding:18px 16px}
  .doc-body ul,.doc-body ol{padding-left:20px}
  .doc-pager{grid-template-columns:1fr} .doc-pager-next{grid-column:1}
  .form-grid{grid-template-columns:1fr}
  input[type=text],input[type=password],input[type=number],input[type=search],input[list],select,textarea{max-width:100%}
  .meta-k{min-width:0;display:block;margin-bottom:2px}
  .doc-search{flex-direction:column} .doc-search .btn{width:100%}
  .pagehead .ph-actions{width:100%}
}

/* ================================================================================
   Pont Bootstrap 5 ↔ identité PlugAdmin (issue #92, lot Bootstrap)
   Bootstrap fournit la fondation (grid, spacing, utilities, composants) ; cette
   couche impose les tokens PlugAdmin par-dessus le thème bleu/blanc par défaut.
   ================================================================================ */
:root{
  --bs-primary:#2f6df6; --bs-primary-rgb:47,109,246;
  --bs-body-bg:var(--bg); --bs-body-color:var(--txt);
  --bs-secondary-color:var(--txt-2); --bs-tertiary-color:var(--txt-faint);
  --bs-border-color:var(--line); --bs-border-color-translucent:var(--line);
  --bs-border-radius:var(--radius-s); --bs-border-radius-lg:var(--radius); --bs-border-radius-xl:var(--radius-l);
  --bs-body-font-family:var(--font); --bs-body-font-size:14.5px; --bs-body-line-height:1.6;
  --bs-link-color:var(--primary); --bs-link-hover-color:var(--primary-d);
  --bs-link-color-rgb:47,109,246;
  --bs-success:#1f9d57; --bs-success-rgb:31,157,87;
  --bs-warning:#c07d12; --bs-warning-rgb:192,125,18;
  --bs-danger:#d93b3b; --bs-danger-rgb:217,59,59;
  --bs-info:#1b7fa8; --bs-info-rgb:27,127,168;
  --bs-emphasis-color:var(--txt);
  --bs-focus-ring-color:rgba(47,109,246,.35);
}
.btn-primary{--bs-btn-bg:var(--primary);--bs-btn-border-color:var(--primary);
  --bs-btn-hover-bg:var(--primary-d);--bs-btn-hover-border-color:var(--primary-d);
  --bs-btn-active-bg:var(--primary-d);--bs-btn-active-border-color:var(--primary-d)}
.card{--bs-card-bg:var(--surface);--bs-card-border-color:var(--line);
  --bs-card-border-radius:var(--radius);--bs-card-box-shadow:var(--shadow-s)}
.badge.text-bg-secondary{background:var(--surface-3)!important;color:var(--txt-2)!important}
.form-control,.form-select{border-color:var(--line-2)}
.form-control:focus,.form-select:focus{border-color:var(--primary);box-shadow:0 0 0 .2rem rgba(47,109,246,.2)}
.offcanvas{--bs-offcanvas-bg:var(--sidebar);--bs-offcanvas-color:var(--sidebar-txt);--bs-offcanvas-border-color:transparent}
.modal{--bs-modal-bg:var(--surface);--bs-modal-border-color:var(--line);--bs-modal-border-radius:var(--radius)}
.dropdown-menu{--bs-dropdown-bg:var(--surface);--bs-dropdown-border-color:var(--line);
  --bs-dropdown-border-radius:var(--radius-s);--bs-dropdown-link-color:var(--txt);
  --bs-dropdown-link-hover-bg:var(--surface-2);--bs-dropdown-box-shadow:var(--shadow)}
.nav-pills{--bs-nav-pills-link-active-bg:var(--primary);--bs-nav-pills-border-radius:999px}
.alert{--bs-alert-border-radius:var(--radius-s)}
.tooltip{--bs-tooltip-bg:var(--txt);--bs-tooltip-border-radius:6px}

/* Icônes : Bootstrap Icons (police) — remplace le sprite SVG local de #92.
   Les classes .ic / .nav-ic / … posées par Icons.java stylent maintenant un <i class="bi …">. */
.bi{display:inline-block;line-height:1;vertical-align:-.125em;flex:none}
i.ic,i.nav-ic{font-style:normal}

/* ================================================================================
   HOME — launcher à tuiles (lot Bootstrap)
   ================================================================================ */
.home-head{margin:2px 0 22px}
.home-head h1{font-size:26px;font-weight:780;letter-spacing:-.015em;margin:0}
.home-head .home-sub{font-size:15px;color:var(--txt-2);margin:6px 0 0}
.home-head .home-hint{font-size:13px;color:var(--txt-faint);margin:3px 0 0}
.home-search{margin:16px 0 0;max-width:520px;position:relative}
.home-search .ic{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--txt-faint);font-size:16px}
.home-search input{width:100%;padding:11px 14px 11px 40px;background:var(--surface);border:1px solid var(--line-2);
  border-radius:12px;color:var(--txt);font:inherit;box-shadow:var(--shadow-s)}
.home-search input:focus{outline:2px solid rgba(47,109,246,.35);border-color:var(--primary)}
.home-search input:disabled{background:var(--surface-2);cursor:not-allowed}

.home-group{margin:26px 0 0}
.home-group-t{margin:0 0 12px;font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--txt-faint)}

.home-tile{position:relative;display:flex;flex-direction:column;height:100%;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-l);
  padding:20px 20px 18px;box-shadow:var(--shadow-s);color:var(--txt);
  transition:box-shadow .14s ease,border-color .14s ease,transform .14s ease}
a.home-tile:hover{text-decoration:none;box-shadow:var(--shadow);border-color:var(--line-2);transform:translateY(-2px)}
a.home-tile:focus-visible{outline:2px solid var(--primary);outline-offset:3px}
.home-tile-ic{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;
  border-radius:13px;background:var(--primary-soft);color:var(--primary-d);margin:0 0 14px}
.home-tile-ic .bi{font-size:24px}
.home-tile-t{font-size:16px;font-weight:730;margin:0}
.home-tile-d{font-size:13px;color:var(--txt-2);margin:6px 0 0;flex:1 1 auto}
.home-tile-meta{margin:14px 0 0;display:flex;align-items:center;gap:8px;min-height:22px}
.home-tile.is-disabled{opacity:.62;background:var(--surface-2)}
.home-tile.is-disabled .home-tile-ic{background:var(--surface-3);color:var(--txt-faint)}
.home-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:999px;
  font-size:11.5px;font-weight:700;border:1px solid transparent}
.home-pill.ok{background:var(--ok-soft);color:var(--ok);border-color:#bfe6cd}
.home-pill.err{background:var(--err-soft);color:var(--err);border-color:#f4c4c4}
.home-pill.warn{background:var(--warn-soft);color:var(--warn);border-color:#eed9b0}
.home-pill.neutral{background:var(--surface-3);color:var(--txt-2);border-color:var(--line)}
.home-pill.soon{background:var(--surface-3);color:var(--txt-faint);border-color:var(--line)}
.home-tile-cta{position:absolute;right:16px;top:18px;color:var(--txt-faint);font-size:15px;opacity:0;transition:opacity .14s}
a.home-tile:hover .home-tile-cta{opacity:1}

/* ================================================================================
   #93 — Toasts, centre de notifications, page /actions
   ================================================================================ */

/* -- Toasts (Bootstrap) -- */
/* sous la topbar (56px) pour ne pas la recouvrir ; z-index > topbar */
#toast-root{top:64px!important;z-index:1200;max-width:min(400px,92vw)}
.pa-toast{width:100%}
.pa-toast .toast-header{gap:6px}
.pa-toast .toast-ic{display:inline-flex;align-items:center}
.pa-toast .toast-ic .bi{font-size:17px}
.pa-toast .toast-body{font-size:13px;word-wrap:break-word}
.pa-toast .toast-details{margin-left:6px;white-space:nowrap;font-weight:600}
.pa-toast[data-toast-group="failed"]{border-left:3px solid var(--err)}
.pa-toast[data-toast-group="success"]{border-left:3px solid var(--ok)}
.pa-toast[data-toast-group="pending"]{border-left:3px solid var(--primary)}
.pa-toast[data-toast-group="warning"]{border-left:3px solid var(--warn)}
.pa-toast .pa-sync{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;color:var(--bs-secondary-color,#555)}
.pa-toast .pa-sync-text{flex:1 1 0;min-width:0}
.pa-toast .pa-sync-actions{flex-basis:100%;margin-top:6px}

/* -- Cloche + panneau off-canvas de notifications (fix #93 bug 1) -- */
.notif-center{position:relative;display:inline-flex}
.notif-bell{position:relative}
.notif-bell .bi{font-size:17px}
.notif-badge{position:absolute;top:-5px;right:-5px;font-size:10px;line-height:1;padding:3px 5px;min-width:16px}

.notif-panel{--bs-offcanvas-width:420px;--bs-offcanvas-padding-x:0;--bs-offcanvas-padding-y:0;
  background:var(--surface);color:var(--txt);display:flex;flex-direction:column}
@media(max-width:575.98px){.notif-panel{--bs-offcanvas-width:92vw}}
.notif-panel .offcanvas-header{padding:14px 16px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.notif-panel-t{display:flex;align-items:center;gap:8px;margin:0;font-size:14px;font-weight:750}
.notif-panel-t .bi{font-size:16px;color:var(--primary)}
.notif-body-wrap{flex:1 1 auto;overflow-y:auto;padding:0}
.notif-list{display:flex;flex-direction:column}
.notif-empty{margin:0;padding:28px 16px;text-align:center;color:var(--txt-2);font-size:13.5px}
.notif-item{display:flex;gap:12px;padding:13px 16px;border-bottom:1px solid var(--line);color:var(--txt);align-items:flex-start}
.notif-item:last-child{border-bottom:0}
.notif-item:hover{background:var(--surface-2);text-decoration:none}
.notif-ic{flex:none;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;
  border-radius:9px;background:var(--surface-3);color:var(--txt-2);margin-top:1px}
.notif-ic .bi{font-size:15px}
.notif-body{min-width:0;display:flex;flex-direction:column;gap:3px;flex:1 1 auto}
.notif-t{font-size:13.5px;font-weight:600;line-height:1.4;overflow-wrap:break-word}
.notif-tgt{color:var(--txt-2);font-weight:600}
.notif-meta{font-size:12px;color:var(--txt-faint);display:flex;flex-wrap:wrap;gap:5px;align-items:center;line-height:1.5}
.notif-status{display:inline-flex;align-items:center;gap:4px;font-weight:700}
.notif-status .bi{font-size:12px}
.notif-res{overflow-wrap:break-word}
.notif-foot-wrap{flex:none;border-top:1px solid var(--line);background:var(--surface-2)}
.notif-foot{display:flex;align-items:center;justify-content:center;gap:8px;padding:13px 16px;
  font-size:13px;font-weight:700;color:var(--primary)}
.notif-foot:hover{text-decoration:none;background:var(--surface-3)}
.notif-foot .bi{font-size:14px}
/* #881 (TC-442) : opérations du panel seul (Atelier), hors du flux des actions agent */
.notif-panel-ops{border-top:1px solid var(--line)}
.notif-sub{margin:0;padding:10px 16px 6px;font-size:12px;font-weight:750;text-transform:uppercase;letter-spacing:.04em;color:var(--txt-2);background:var(--surface-2)}

/* -- Badges statut / domaine (icône + texte) -- */
.badge.pa-status,.badge.pa-domain{display:inline-flex;align-items:center;gap:4px;font-weight:650}
.badge.pa-status .bi,.badge.pa-domain .bi{font-size:.9em;vertical-align:-.1em}
.badge.text-bg-secondary.pa-domain{background:var(--surface-3)!important;color:var(--txt-2)!important;border:1px solid var(--line)}

/* -- /actions : recherche + filtres -- */
.actions-search{max-width:560px;margin:0 0 14px}
.actions-search .input-group-text{background:var(--surface);border-color:var(--line-2)}
.actions-search .input-group-text .bi{font-size:15px;color:var(--txt-faint)}
.actions-status{gap:6px;margin:0 0 12px}
.actions-status .nav-link{padding:5px 14px;border-radius:999px;font-size:13px;color:var(--txt-2);background:var(--surface);border:1px solid var(--line-2)}
.actions-status .nav-link.active{background:var(--primary);border-color:var(--primary);color:#fff}
.actions-domains{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.pa-chip{display:inline-flex;align-items:center;gap:5px;padding:5px 11px;border-radius:999px;background:var(--surface);
  border:1px solid var(--line-2);color:var(--txt-2);font-size:12.5px;font-weight:600}
.pa-chip .bi{font-size:13px}
.pa-chip:hover{border-color:var(--primary);color:var(--primary);text-decoration:none}
.pa-chip.on{background:var(--primary);border-color:var(--primary);color:#fff}

/* -- /actions : table desktop -- */
.actions-table td,.actions-table th{font-size:13px}
.actions-table .act-label{font-weight:600}
.actions-table .act-res{max-width:280px;overflow-wrap:anywhere}
.actions-table .nowrap{white-space:nowrap}
/* #881 : une seule présentation pour tout l'Historique (actions agent, opérations du panel, refus). */
.actions-history td{padding-top:10px;padding-bottom:10px}
.actions-history tr[data-href]:hover>td{background:var(--surface-3)}
.act-sub{display:block;font-size:11.5px;color:var(--txt-faint);margin-top:2px}
.ac-top .act-sub{display:inline;margin:0;align-self:center}

/* -- /actions : cards mobile -- */
.actions-cards{display:flex;flex-direction:column;gap:10px}
.actions-card{color:var(--txt)}
.actions-card:hover{text-decoration:none;border-color:var(--line-2);box-shadow:var(--shadow-s)}
.actions-card .card-body{padding:12px 14px}
.ac-top{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:6px}
.ac-title{font-weight:650;font-size:14px}
.ac-tgt{font-size:12.5px;color:var(--txt-2);margin-top:2px}
/* #93 (22/10) : pseudo du joueur ciblé en premier, UUID en secondaire, jamais en débordement. */
.pa-player{font-weight:600}
.pa-uuid{display:block;font-size:11px;font-family:var(--bs-font-monospace);overflow-wrap:anywhere}
.ac-res{font-size:12px;margin-top:4px;overflow-wrap:anywhere}
.ac-meta{font-size:11.5px;margin-top:6px}

.actions-pager{margin-top:16px}
.actions-pager .page-link .bi{font-size:13px;vertical-align:-.1em}

/* -- Détail d'une action -- */
.detail-dl{margin:6px 0 0}
.detail-dl .dl-row{display:grid;grid-template-columns:170px 1fr;gap:4px 14px;padding:6px 0;border-bottom:1px solid var(--line)}
.detail-dl .dl-row:last-child{border-bottom:0}
.detail-dl dt{margin:0;font-size:12px;color:var(--txt-faint);font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.detail-dl dd{margin:0;font-size:13.5px;overflow-wrap:anywhere}
@media(max-width:620px){.detail-dl .dl-row{grid-template-columns:1fr}}

/* -- /agents : synthèse d'activité compacte -- */
.mini-activity{list-style:none;margin:6px 0;padding:0;display:flex;flex-direction:column;gap:6px}
.mini-activity li{font-size:13px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.mini-activity .ma-t{font-weight:600}

/* ================================================================================
   #89 — Refonte ciblée de la page /npcs (liste = synthèse, clic = détail, clic action = form)
   ================================================================================ */

/* -- Toolbar catalogue compacte -- */
.npc-catbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:4px 0 14px}
.npc-catbar-t{font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--txt-faint);margin-right:4px}
.npc-catbar .btn .bi{font-size:13px;vertical-align:-.1em}
/* Barre de recherche (issue #236) : la classe était utilisée sans règle, donc chaque champ
   s'étalait sur toute la largeur, y compris sur grand écran. En flex qui passe à la ligne, elle
   tient sur une ligne au bureau et s'empile proprement sur téléphone. */
.npc-searchbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:4px 0 14px}
.npc-searchbar input[type=search]{flex:1 1 220px;min-width:0}
.npc-searchbar select{flex:0 1 200px}
.npc-formcard{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);margin:0 0 14px}

.npc-alert{display:flex;gap:9px;align-items:flex-start;margin:0 0 12px}
.npc-alert .bi{font-size:16px;flex:none;margin-top:1px}

.npc-summary{font-size:12.5px;color:var(--txt-2);margin:0 0 14px}
.npc-summary .faint{color:var(--txt-faint)}

/* -- Recherche input-group + filtres alignés -- */
.npc-controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 8px}
.npc-search{flex:1 1 300px;max-width:460px}
.npc-search .input-group-text{background:var(--surface);border-color:var(--line-2)}
.npc-search .input-group-text .bi{font-size:15px;color:var(--txt-faint)}
.npc-search .form-control{border-color:var(--line-2)}
.npc-filters{display:flex;flex-wrap:wrap;gap:6px}
@media(max-width:575.98px){
  .npc-search{flex:1 1 100%;max-width:100%}
  .npc-filters{width:100%;overflow-x:auto;flex-wrap:nowrap;padding-bottom:2px}
}

/* -- Accordion : synthèse -- */
.npc-accordion{--bs-accordion-bg:var(--surface);--bs-accordion-border-color:var(--line);
  --bs-accordion-border-radius:var(--radius);--bs-accordion-active-bg:var(--primary-soft);
  --bs-accordion-active-color:var(--txt);--bs-accordion-btn-focus-box-shadow:0 0 0 .2rem rgba(47,109,246,.25);
  display:flex;flex-direction:column;gap:8px}
.npc-item{border:1px solid var(--line)!important;border-radius:var(--radius)!important;overflow:hidden;box-shadow:var(--shadow-s)}
.npc-item .accordion-button{padding:12px 16px;font-size:14px;box-shadow:none}
.npc-item .accordion-button:not(.collapsed){box-shadow:none;font-weight:600}
.npc-head{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px}
.npc-head-main{display:flex;align-items:baseline;gap:8px;min-width:0}
.npc-name{font-weight:700;font-size:14.5px;overflow-wrap:anywhere}
.npc-id.tid{font-size:11px}
.npc-head-badges{display:flex;flex-wrap:wrap;gap:4px;margin-right:26px}
.npc-head-badges .badge{font-weight:600}

/* -- Détail structuré -- */
.npc-detail{padding:14px 16px 16px;background:var(--surface-2)}
.npc-section{display:flex;align-items:center;gap:7px;margin:16px 0 8px;font-size:11px;font-weight:800;
  letter-spacing:.07em;text-transform:uppercase;color:var(--txt-faint)}
.npc-section:first-child{margin-top:0}
.npc-section .bi{font-size:13px;color:var(--primary)}
.npc-dl{margin:0;display:flex;flex-direction:column;gap:2px}
.npc-dl-row{display:grid;grid-template-columns:130px 1fr;gap:2px 14px;padding:5px 0;border-bottom:1px solid var(--line)}
.npc-dl-row:last-child{border-bottom:0}
.npc-dl-row dt{margin:0;font-size:11.5px;color:var(--txt-faint);font-weight:700}
.npc-dl-row dd{margin:0;font-size:13.5px;overflow-wrap:anywhere}
@media(max-width:575.98px){.npc-dl-row{grid-template-columns:1fr}}

.npc-content{display:flex;flex-direction:column;gap:8px}
.npc-content-row{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:flex-start;justify-content:space-between}
.npc-content-row>div:first-child{min-width:0;flex:1 1 240px}
.npc-ck{display:block;font-size:11.5px;color:var(--txt-faint);font-weight:700}
.npc-cv{font-size:13.5px;overflow-wrap:anywhere}
.npc-content-empty{font-size:13px;margin:0}
.npc-content .btn .bi{font-size:12px;vertical-align:-.1em}

.npc-diag{display:flex;gap:9px;align-items:flex-start;margin:0 0 8px;padding:10px 12px}
.npc-diag .bi{font-size:15px;flex:none;margin-top:1px}
.npc-diag-msg{font-size:13px;line-height:1.5}
.npc-diag-code{font-size:11px;margin-top:3px;opacity:.8}
.npc-diag-ok{display:flex;align-items:center;gap:6px;font-size:13px;margin:0}
.npc-diag-ok .bi{color:var(--ok)}

.npc-actions{margin-top:2px}
.npc-actions .btn .bi{font-size:12px;vertical-align:-.1em}
.npc-form-collapse{margin-top:10px}

/* -- Formulaire de définition repensé -- */
.npc-formcard>.fs-h,.npc-formcard .npc-def-form+*{}
.npc-formcard{padding:14px 16px}
.npc-formcard .fs-h{display:flex;align-items:center;gap:7px;margin:0 0 10px;font-weight:700;font-size:14px}
.npc-formcard .fs-h .bi{font-size:15px;color:var(--primary)}
.npc-fs{border-top:1px solid var(--line);padding:10px 0 4px;margin-top:4px}
.npc-fs:first-of-type{border-top:0;padding-top:0;margin-top:0}
.npc-fs-h{margin:0 0 8px;font-size:11px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:var(--txt-faint)}
.npc-def-form .form-label{font-size:12.5px;font-weight:600;margin-bottom:3px}
.npc-def-form .form-text{font-size:11.5px}

/* Méta-données d'un champ de profil de mob (#169) : exemple, défaut, comportement à vide.
   Visibles sous le champ — jamais un placeholder ni une infobulle. En ligne quand la largeur
   le permet, empilées sur téléphone pour rester lisibles sans zoom. */
.fmeta{display:flex;flex-wrap:wrap;gap:1px 14px;margin-top:3px}
.fmeta>span{overflow-wrap:anywhere}
.fmeta b{font-weight:600;color:var(--txt-2);margin-right:4px}
.fmeta b::after{content:" :"}
@media(max-width:575.98px){
  .fmeta{display:block}
  .fmeta>span{display:block;margin-top:1px}
  .npc-def-form .form-text{font-size:12.5px;line-height:1.45}
}
.npc-def-form .form-control,.npc-def-form .form-select{max-width:420px}
.npc-confirm{margin-top:12px;font-size:12.5px}
.npc-confirm .form-check-label{color:var(--warn)}

.npc-registry{margin-top:16px}
/* aplatir les anciens .actform (liaison / spawn / giver) réutilisés dans les collapses d'action */
.npc-form-collapse .actform,.npc-formcard .actform{margin:0;padding:0;border:0;background:transparent;box-shadow:none}
.npc-form-collapse .actform label,.npc-formcard .actform label{margin-top:10px}
.npc-form-collapse .actform .btn{margin-top:12px}

/* ================================================================================
   #89 / #49 — Composant diagnostic (aide humaine : problème -> conséquence -> action -> doc)
   Réutilisé sur PNJ, Dialogues, Quêtes, Stories.
   ================================================================================ */
.pa-diag{margin:0 0 10px;padding:12px 14px}
.pa-diag .pa-diag-h{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13.5px;margin-bottom:5px}
.pa-diag .pa-diag-h .bi{font-size:15px;flex:none}
.pa-diag p{margin:3px 0;font-size:12.75px;line-height:1.5}
.pa-diag .pa-diag-what{color:var(--txt)}
.pa-diag .pa-diag-why,.pa-diag .pa-diag-do{color:var(--txt-2)}
.pa-diag .pa-diag-btns{display:flex;flex-wrap:wrap;gap:6px;margin:9px 0 4px}
.pa-diag .pa-diag-btns .btn .bi{font-size:12px;vertical-align:-.1em;margin-right:3px}
.pa-diag .pa-diag-code{font-size:11px;color:var(--txt-faint);margin-top:6px}
.pa-diag-info{--bs-alert-border-color:#bfe1ec}
.pa-diag-warning{--bs-alert-border-color:#eed9b0}
.pa-diag-error{--bs-alert-border-color:#f0bcbc}

/* Le pattern accordion/détail (#89) est partagé : les classes npc-* servent aussi
   à Dialogues / Quêtes / Stories (voir renderXxxAccordionItem). */
.npc-content .btn,.npc-actions .btn{white-space:nowrap}
.npc-detail .obj-list,.npc-detail .reward-list,.npc-detail .step-list{margin:2px 0 4px;padding-left:20px;font-size:13px;line-height:1.6}
.npc-detail .obj-list li,.npc-detail .reward-list li,.npc-detail .step-list li{margin:2px 0}
.npc-detail .step-list .step-n{display:inline-block;min-width:1.4em;font-weight:700;color:var(--txt-faint)}
.npc-detail .dlg-graph-wrap{margin:2px 0 0}
.npc-detail .dlg-graph-wrap>summary{font-size:12.5px;color:var(--primary);cursor:pointer}
.npc-detail .dlg-graph{display:flex;flex-direction:column;gap:10px;margin-top:10px}
/* Diagnostics globaux d'une page (fichiers rejetés, dialogues déclarés absents). */
.dlg-global-diag{margin:0 0 14px}
/* Lignes de tableau masquées par le filtre progressif (recherche /players). */
tr[hidden]{display:none}

/* ================================================================================
   #38 — Page /diagnostics : « Que dois-je corriger maintenant ? »
   ================================================================================ */
.diag-fresh{display:flex;align-items:center;gap:6px;font-size:12px;margin:-4px 0 12px}
.diag-fresh .bi{font-size:13px}
.diag-summary{margin:0 0 16px}
.diag-clean{display:flex;align-items:flex-start;gap:12px;padding:16px 18px;margin:0 0 16px;
  border:1px solid var(--line);border-left:3px solid var(--ok,#2e9e5b);border-radius:var(--radius);
  background:var(--surface)}
.diag-clean .bi{font-size:22px;color:var(--ok,#2e9e5b);flex:none;margin-top:1px}
.diag-clean-t{margin:0 0 3px;font-weight:700;font-size:15px}
.diag-controls{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 8px}
.diag-search{flex:1 1 320px;max-width:520px}
.diag-search .input-group-text{background:var(--surface);border-color:var(--line-2)}
.diag-search .input-group-text .bi{font-size:15px;color:var(--txt-faint)}
.diag-search .form-control{border-color:var(--line-2)}
.diag-chips{display:flex;flex-wrap:wrap;gap:6px}
.diag-list{display:flex;flex-direction:column;gap:10px}
.diag-card{margin:0}
.diag-card .diag-loc{margin:2px 0 6px;font-size:11.5px}
.diag-dom{display:inline-block;font-weight:700;text-transform:uppercase;letter-spacing:.04em;
  font-size:10.5px;color:var(--txt-faint)}
.diag-res{color:var(--txt-2);font-weight:600}
.diag-nested{margin-top:8px}
.diag-group{border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:12px 14px}
.diag-group-h{display:flex;align-items:center;gap:8px;font-weight:700;font-size:13.5px}
.diag-group-h .bi{font-size:15px;flex:none}
.diag-group-t{flex:1 1 auto}
.diag-group .diag-what{margin:5px 0 2px;font-size:12.75px;color:var(--txt-2)}
.diag-group-more>summary{font-size:12px;color:var(--primary);cursor:pointer;margin-top:6px}
.diag-group-more[open]>summary{margin-bottom:8px}
@media(max-width:575.98px){
  .diag-search{flex:1 1 100%;max-width:100%}
  .diag-controls .diag-chips{width:100%;overflow-x:auto;flex-wrap:nowrap;padding-bottom:2px}
  .diag-card .pa-diag-btns{flex-direction:column;align-items:stretch}
  .diag-card .pa-diag-btns .btn{width:100%;justify-content:center}
}
/* Élément ouvert via un lien « Ouvrir » de /diagnostics (?focus=…). */
.res-focused{outline:2px solid var(--primary);outline-offset:2px;border-radius:var(--radius)}

/* Formulaire de dialogue : consentement discret + palette de couleurs + aperçu (issues #117 / #118). */
.confirm-note{margin:8px 0 4px;color:var(--txt-2)}
.dlg-newbar{margin:4px 0 10px}
.dlg-editnote{margin:0 0 6px}
.dlg-editnote a{white-space:nowrap}
.dlg-color .dlg-palette{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 4px}
.dlg-swatch{--sw:#888;width:30px;height:30px;border-radius:8px;border:2px solid var(--line-2);
  background:var(--surface);color:var(--sw);font-weight:800;font-size:13px;line-height:1;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;transition:border-color .12s,transform .12s}
.dlg-swatch:hover{transform:translateY(-1px)}
.dlg-swatch.on{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-soft,rgba(91,141,255,.25))}
.dlg-preview{display:inline-block;padding:2px 8px;border-radius:6px;background:#1b1e24;color:#e6e8ec;
  font-weight:600;overflow-wrap:anywhere}
@media(max-width:575.98px){
  .dlg-swatch{width:34px;height:34px}
}

/* Champ MiniMessage de l'éditeur guidé (#82) : source brute + aperçu rendu + palette pleine. */
.dlg-mm{margin:6px 0 10px}
.dlg-mm input[data-mm-text]{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px}
.dlg-mm .dlg-swatch{background:var(--sw);width:24px;height:24px;border-radius:6px}
.dlg-mm .dlg-swatch-none{background:var(--surface);color:var(--txt-2);font-size:12px}
.dlg-mm .dlg-swatch:disabled{opacity:.35;cursor:not-allowed;transform:none}
.dlg-mm .dlg-preview{margin-top:2px}
.dlg-kept{margin:6px 0 2px}

/* Export de contenu (issue #108) — /content/export */
.export-row{margin:6px 0 14px}
.export-sub{margin:14px 0 6px}
.export-fam{display:flex;flex-wrap:wrap;gap:10px}
.export-btn-form{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:10px 12px;border:1px solid var(--line-2);border-radius:var(--radius);background:var(--surface)}
.export-btn-form .export-btn-label{flex:1 1 220px;min-width:0}
.export-fam .export-btn-form{flex:0 1 auto}
.export-select{display:flex;flex-direction:column;gap:8px;max-width:520px}
.export-select label{display:flex;flex-direction:column;gap:4px;font-weight:600}
.export-select input[type=text],.export-select select{width:100%}
@media(max-width:575.98px){
  .export-btn-form{flex-direction:column;align-items:stretch}
  .export-btn-form .btn{width:100%}
}

/* Gestion des utilisateurs (issue #50) — /users */
.usr-list{list-style:none;margin:8px 0 20px;padding:0;display:flex;flex-direction:column;gap:6px}
.usr-row{display:grid;grid-template-columns:1fr auto auto;align-items:center;gap:6px 14px;
  padding:10px 12px;border:1px solid var(--line-2);border-radius:var(--radius);background:var(--surface);
  text-decoration:none;color:inherit;transition:border-color .12s,background .12s}
.usr-row:hover{border-color:var(--primary);background:var(--surface-2,var(--surface))}
.usr-name{font-weight:600;min-width:0;overflow-wrap:anywhere}
.usr-tags{display:flex;gap:6px;flex-wrap:wrap;justify-self:end}
.usr-meta{grid-column:1/-2;font-size:.86em}
.usr-chev{grid-row:1/2;grid-column:3/4;justify-self:end;opacity:.5}
@media(max-width:575.98px){
  .usr-row{grid-template-columns:1fr auto}
  .usr-chev{grid-column:2/3}
  .usr-tags{grid-column:1/-1;justify-self:start}
  .usr-meta{grid-column:1/-1}
}

/* ---- champ de texte stylé partagé (#195) ---- */
/* Le champ MiniMessage réellement soumis reste dans le DOM ; il n'est masqué que lorsque
   l'éditeur guidé a pris la main (sans JavaScript, il reste visible et utilisable). */
.sf .sf-store-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}
.sf-guided{display:flex;flex-direction:column;gap:6px}
.sf-palette{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0}
.sf-swatch{--sw:#888;width:28px;height:28px;border-radius:7px;border:2px solid var(--line-2);
  background:var(--sw);cursor:pointer;padding:0;line-height:1;transition:transform .08s}
.sf-swatch:hover{transform:translateY(-1px)}
.sf-swatch.on{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-soft,rgba(91,141,255,.25))}
.sf-swatch.sf-none{background:var(--surface-2);color:var(--txt-2);font-size:14px}
.sf-decos{display:flex;flex-wrap:wrap;gap:12px;font-size:12.5px}
.sf-deco{display:inline-flex;align-items:center;gap:5px;cursor:pointer}
.sf-preview{margin:6px 0 2px;padding:7px 10px;border:1px dashed var(--line-2);border-radius:8px;
  background:var(--surface-2);min-height:34px;font-size:14px;white-space:pre-wrap}
.sf-warn{margin:6px 0 2px;font-size:12.5px;color:var(--warn-txt,#8a6100);
  background:var(--warn-bg,#fff8e1);border:1px solid var(--warn-line,#d9a406);
  border-radius:8px;padding:6px 9px}
.sf-toggle{align-self:flex-start;margin-top:4px}
@media (max-width:560px){.sf-swatch{width:32px;height:32px}}

/* ---- liste recherchable : résultats bornés mais jamais perdus (#196) ---- */
.combo-menu .combo-note{margin-left:auto;font-size:11px;color:var(--txt-2);font-style:italic}
.combo-menu .combo-noitem{opacity:.65}
.combo-menu .combo-more{padding:6px 10px;font-size:12px;cursor:pointer;color:var(--primary);
  border-top:1px solid var(--line-2);background:var(--surface-2)}
.combo-menu .combo-more:hover{background:var(--surface-3,var(--surface-2));text-decoration:underline}
.combo-menu .combo-count{padding:6px 10px;font-size:11px;color:var(--txt-2);
  border-top:1px solid var(--line-2)}
/* ---- Exploitation serveur (#95) ------------------------------------------------------ */

/* Aperçu d'annonce : volontairement sobre. Il montre le TEXTE qui partira, pas une mise en
   forme — promettre des couleurs que le serveur n'enverra pas serait un mensonge d'interface.
   Fond sombre assumé : c'est un aperçu « en jeu », pas un élément de formulaire. */
.ops-preview{background:#11151c;color:#e6e6e6;border:1px solid var(--line-2);
  border-radius:var(--radius-s);padding:10px 12px;font-family:var(--mono);
  font-size:13px;word-break:break-word}
.ops-preview-pfx{color:#ffb648}
.ops-preview-body{color:#fff}
.ops-preview[data-channel="title"] .ops-preview-body{font-size:18px;letter-spacing:.02em}
.ops-preview[data-channel="actionbar"]{opacity:.92;font-size:12.5px}

/* Console : fond sombre, monospace, scrollable — proche de la console de l'hébergeur,
   et lecture seule (aucune saisie, aucun terminal). */
.ops-console{background:#0c0f14;color:#cfd6e4;border:1px solid var(--line-2);
  border-radius:var(--radius-s);padding:10px 12px;margin:0;height:22rem;max-height:60vh;
  overflow:auto;font-family:var(--mono);font-size:12.5px;line-height:1.5;
  white-space:pre-wrap;word-break:break-word}
.ops-console:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.ops-l{display:block}
.ops-t{color:#6c7a90}
.ops-src{color:#8ba3c7}
.ops-lv{font-weight:600}
/* Jamais la couleur seule : le niveau reste écrit en clair sur chaque ligne. */
.ops-l--ERROR .ops-lv{color:#ff6b6b}
.ops-l--ERROR{background:rgba(255,107,107,.08)}
.ops-l--WARN .ops-lv{color:#ffb648}
.ops-l--INFO .ops-lv{color:#7fd1a0}
.ops-l--DEBUG .ops-lv{color:#8a8f98}

@media (max-width:575.98px){
  .ops-console{height:16rem;font-size:11.5px}
}

/* Nom réellement affiché en jeu par le PNJ Citizens, à côté du nom de définition RPGQuest (#165).
   Les deux ont des fonctions différentes : la liste doit pouvoir montrer les deux sans les
   confondre, et rester lisible sur téléphone. */
.npc-ingame{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:1px 7px;
  border-radius:999px;background:var(--surface-2,rgba(127,127,127,.14));color:var(--txt-2);
  font-size:12px;font-weight:600;overflow-wrap:anywhere}
.npc-ingame .bi{font-size:11px;opacity:.8}
@media(max-width:575.98px){
  .npc-ingame{margin-left:0;margin-top:2px}
}

/* Localisation Citizens d'un PNJ dans la liste (#165) : monde + X/Y/Z, discrète mais lisible,
   et passée à la ligne sur téléphone plutôt que tronquée. */
.npc-loc{display:inline-flex;align-items:center;gap:4px;margin-left:8px;color:var(--txt-2);
  font-size:11.5px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.npc-loc .bi{font-size:11px;opacity:.75}
.npc-xyz{font-variant-numeric:tabular-nums}
/* Rôle métier affiché d'un PNJ (#127) : un libellé, pas un badge d'état. */
.npc-role{margin-left:8px;color:var(--txt-2);font-size:11.5px;font-style:italic}
@media(max-width:575.98px){
  .npc-loc{margin-left:0;margin-top:2px;display:flex}
}

/* Trois champs côte à côte (X/Y/Z, yaw/pitch) — empilés sur téléphone (#165). */
.form-grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
@media(max-width:575.98px){ .form-grid3{grid-template-columns:1fr} }

/* Issue #266 — une ligne de l'historique ouvre sa fiche. */
tr.act-row[data-href] { cursor: pointer; }
tr.act-row a.act-label { font-weight: 600; text-decoration: none; }
tr.act-row a.act-label:hover, tr.act-row a.act-label:focus { text-decoration: underline; }

/* Issue #265 — Atelier de création : étapes, action principale, cartes de projets. */
.ws-steps { display: flex; flex-wrap: wrap; gap: .5rem; list-style: none; padding: 0; margin: 0 0 1rem; }
.ws-steps li { display: flex; align-items: center; gap: .4rem; padding: .35rem .75rem; border-radius: 999px;
  background: var(--bs-secondary-bg, #f1f3f5); color: var(--bs-secondary-color, #6c757d); font-size: .95rem; }
.ws-steps li.current { background: var(--bs-primary, #0d6efd); color: #fff; font-weight: 600; }
.ws-steps li.done { color: var(--bs-success, #198754); }
.ws-step-n { display: inline-flex; width: 1.5rem; height: 1.5rem; align-items: center; justify-content: center;
  border-radius: 50%; background: rgba(0,0,0,.08); font-size: .85rem; }
.ws-main { margin-bottom: 1rem; border-width: 2px; }
.ws-main .btn-primary { font-size: 1.05rem; }
.ws-problems { padding-left: 1.2rem; }
.ws-problems li { margin-bottom: .4rem; }
/* #828 : historique des versions — identifiant, statut réel, version affichée, recherche par ID. */
.ws-versions { list-style: none; padding: 0; margin: .5rem 0 0; display: grid; gap: .5rem; }
.ws-version { border: 1px solid var(--line); border-radius: 8px; padding: .5rem .75rem; min-width: 0; }
.ws-version--open { border-color: var(--primary); background: var(--primary-soft); box-shadow: inset 4px 0 0 var(--primary); }
.ws-version-head { display: flex; flex-wrap: wrap; align-items: center; gap: .35rem .6rem; }
.ws-version-why { margin: .3rem 0; overflow-wrap: anywhere; }
.ws-version-shown { color: var(--primary-d); }
.ws-version-search { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem .6rem; }
.ws-version-search input[type=search] { flex: 1 1 12rem; min-width: 0; max-width: 20rem; }
.ws-version-search .field-help { flex-basis: 100%; margin: 0; }
@media (max-width: 576px) { .ws-version-search input[type=search] { max-width: none; } .ws-version .btnrow .btn { flex: 1 1 auto; } }
.ws-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: .75rem; margin-bottom: 1rem; }
.ws-card { text-decoration: none; color: inherit; }
.ws-card:hover, .ws-card:focus { border-color: var(--bs-primary, #0d6efd); }
.ws-card-title { font-weight: 600; font-size: 1.05rem; color: inherit; overflow-wrap: anywhere; }
.ws-card-state { margin: .25rem 0; }
/* Issue #881 — usage en jeu sur chaque tuile, recherche / filtres / tri de la liste. */
.ws-card-usage { display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .4rem; margin: .25rem 0; }
.ws-find { margin-bottom: .5rem; }
.ws-find .search input[type=search] { padding-left: 36px; }
.ws-sort { display: inline-flex; align-items: center; gap: .4rem; margin: 0; }
.ws-sort select { width: auto; }
.ws-filters { margin-bottom: .75rem; }
@media (max-width: 576px) { .ws-find .search { flex-basis: 100%; max-width: none; } .ws-filters .chip { padding: 5px 10px; } }
.ws-tech summary { font-size: .9rem; }
@media (max-width: 576px) { .ws-steps li { font-size: .85rem; padding: .3rem .55rem; } }


/* Issue #273 — aperçu du bâtiment en 3D (SVG rendu par le serveur). */
.ws-preview { margin-bottom: 1rem; }
.ws-iso { margin: 0 0 .75rem; }
.ws-iso .iso-view { display: block; width: 100%; max-width: 760px; height: auto; max-height: 70vh; margin: 0 auto;
  background: var(--bs-tertiary-bg, #f8f9fa); border-radius: .5rem; }
.ws-iso figcaption { margin-top: .4rem; font-size: .9rem; text-align: center; }
.ws-iso-controls { display: flex; flex-wrap: wrap; gap: .5rem .75rem; align-items: center; margin-bottom: .75rem; }
.ws-iso-controls label { display: flex; gap: .4rem; align-items: center; font-size: .9rem; }
.ws-iso-controls select { max-width: 100%; }
.ws-legend { display: flex; flex-wrap: wrap; gap: .35rem 1rem; list-style: none; padding: 0; margin: 0 0 .5rem;
  font-size: .85rem; }
.ws-legend li { display: flex; align-items: center; gap: .35rem; }
.ws-swatch { width: .9rem; height: .9rem; border-radius: 2px; flex: none; }
.ws-passage { display: flex; align-items: flex-start; gap: .45rem; margin: 0 0 .5rem; overflow-wrap: anywhere; }
.ws-passage .ws-swatch { margin-top: .2rem; }
@media (max-width: 576px) { .ws-iso-controls label { width: 100%; } .ws-iso-controls select { flex: 1; } }

/* ---- PNJ : parcours simple (issue #325) ------------------------------------------------- */
.form-grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
@media(max-width:575.98px){.form-grid2{grid-template-columns:1fr}}
.input-counter{position:relative;max-width:460px}
.input-counter input{padding-right:58px}
.input-counter .char-count{position:absolute;right:10px;top:50%;transform:translateY(-50%);font-size:12px;
  color:var(--txt-faint);font-variant-numeric:tabular-nums;pointer-events:none}
.input-counter .char-count.charcount-over{color:var(--err)}
.input-counter .char-count .cc-tail{display:none}
/* Cases à cocher : la case et son texte sur une ligne, alignés, cliquables ensemble. */
.npc-formcard label.inline,.npc-delete label.inline{display:flex;align-items:center;gap:8px;margin:12px 0 4px;
  font-weight:600;color:var(--txt);cursor:pointer}
.npc-formcard label.inline input[type=checkbox]{width:18px;height:18px;margin:0;flex:0 0 auto}
.npc-formcard label.inline.confirm{color:var(--txt)}
.npc-formcard .btn-primary{margin-top:12px}
.npc-formcard .form-text{margin:4px 0 0}
.npc-summary-dl{margin-bottom:10px}
.npc-detail .npc-actions{margin:10px 0}
.npc-detail .npc-alert{margin:8px 0}
.npc-more{margin:12px 0 0}
.npc-more>summary{cursor:pointer;color:var(--txt-2);font-weight:600;font-size:13px;padding:4px 0}
.npc-more[open]>summary{margin-bottom:8px}
.npc-advanced{border-top:1px solid var(--line);padding-top:8px}
.npc-steps{list-style:none;padding:0;margin:6px 0}
.npc-steps li{display:flex;align-items:center;gap:6px}
.npc-steps li.done{color:var(--ok)}
.npc-delete-h{font-size:15px;font-weight:700;margin:16px 0 6px}
.npc-delete-h:first-of-type{margin-top:4px}
.npc-delete-list{list-style:none;padding:0;margin:0 0 6px}
.npc-delete-list li{display:flex;align-items:center;gap:8px;padding:4px 0}
.npc-delete-list.keep li .bi{color:var(--ok)}
.npc-delete-form{margin-top:16px;max-width:420px}
.npc-delete-form label{display:block;margin:0 0 6px}
.npc-op{border-top:1px solid var(--line);padding:10px 0}
details.card.npc-more{padding:12px 16px}
@media(max-width:575.98px){
  .npc-catbar .ms-auto{margin-left:0!important}
  .npc-detail .npc-actions .btn{flex:1 1 calc(50% - 8px)}
  .npc-delete-form{max-width:none}
  .npc-delete-form .btnrow .btn{flex:1 1 100%}
}
.npc-catbar .btn{margin-top:0}
.btn.secondary.npc-danger{color:var(--err)}
.btn.secondary.npc-danger:hover{border-color:var(--err)}
.npc-actions .btn.secondary[aria-expanded="true"]{background:var(--primary-soft,#e8efff);border-color:var(--primary);color:var(--primary)}

/* ---- Dialogues : parcours simple (issue #332) ------------------------------------------- */
.field-error{display:flex;gap:6px;align-items:flex-start;color:var(--err);font-size:13px;font-weight:600;margin:6px 0}
.dlg-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
.dlg-row{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:space-between;
  border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:12px 14px;box-shadow:var(--shadow-s)}
.dlg-row-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 260px}
.dlg-row-title{font-weight:700;font-size:14.5px;color:var(--txt);text-decoration:none;overflow-wrap:anywhere}
.dlg-row-title:hover{color:var(--primary)}
.dlg-row-who,.dlg-row-sum{font-size:13px;color:var(--txt-2);display:flex;gap:5px;align-items:center;overflow-wrap:anywhere}
.dlg-row-side{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.dlg-chip{display:inline-block;font-size:12px;font-weight:700;border-radius:999px;padding:2px 9px;white-space:nowrap}
.dlg-chip.tone-ok{background:var(--ok-soft);color:var(--ok)}
.dlg-chip.tone-warn{background:var(--warn-soft);color:var(--warn)}
.dlg-chip.tone-err{background:var(--err-soft);color:var(--err)}
.dlg-chip.tone-info{background:var(--info-soft);color:var(--info)}
.dlg-chip.tone-neutral{background:var(--surface-3);color:var(--txt-2)}
.dlg-card{padding:14px 16px;margin:0 0 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.dlg-create{max-width:620px}
.dlg-create label{display:block;margin:12px 0 4px;font-weight:600}
.dlg-who{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;margin:0 0 10px;font-size:14px}
.dlg-who .bi{margin-right:4px}
/* #430 : PNJ récurrents du dialogue, copie depuis le serveur, cohérence avec une liste de quêtes */
.dlg-model{overflow-wrap:anywhere}
.dlg-warn{color:#8a5a0c;overflow-wrap:anywhere}
.dlg-warn .ic,.dlg-warn .bi{margin-right:4px}
.dlg-import pre{max-height:320px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font-size:12.5px}
.dlg-coherence{border-color:#e0b252}
.dlg-coherence-list{margin:6px 0 8px;padding-left:20px}
.dlg-coherence-list li{margin:3px 0;overflow-wrap:anywhere}
.dlg-link>summary{cursor:pointer;color:var(--primary);font-weight:600;font-size:13px}
.dlg-inline{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:8px 0 4px}
.dlg-inline .form-select{width:auto;min-width:200px;max-width:100%}
.dlg-live{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;justify-content:space-between;
  border-radius:var(--radius-s);padding:10px 14px;margin:0 0 14px;font-size:14px;font-weight:600}
.dlg-live form{margin:0}
.dlg-live.tone-ok{background:var(--ok-soft);color:var(--ok)}
.dlg-live.tone-warn{background:var(--warn-soft);color:var(--warn)}
.dlg-live.tone-err{background:var(--err-soft);color:var(--err)}
.dlg-live.tone-info{background:var(--info-soft);color:var(--info)}
.dlg-live .muted{font-weight:500}
.dlg-conflict{display:block}
.dlg-conflict p{margin:0 0 6px}
.dlg-conflict-steps{margin:0 0 8px;padding-left:1.4em;font-weight:500}
.dlg-conflict .btnrow{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
/* Issue #732 — « Recharger depuis DEV » : étape à part, jamais de débordement sur téléphone. */
.dlg-reload{overflow-wrap:anywhere}
.dlg-reload.tone-warn{border-left:4px solid var(--warn)}
.dlg-reload p{margin:0 0 8px}
.dlg-reload .btnrow{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:6px 0}
.dlg-reload .btnrow form{margin:0}
.dlg-reload pre{max-height:320px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;font-size:12.5px}
.dlg-ingame{font-weight:600;border-radius:var(--radius-s);padding:6px 10px}
.dlg-ingame.tone-ok{background:var(--ok-soft);color:var(--ok)}
.dlg-ingame.tone-warn{background:var(--warn-soft);color:var(--warn)}
.dlg-ingame.tone-info{background:var(--info-soft);color:var(--info)}
.dlg-check{display:flex;gap:8px;align-items:flex-start;font-weight:600;margin:4px 0}
.dlg-reload-btn{white-space:normal}
.dlg-node-h{font-size:16px;font-weight:800;margin:0 0 10px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.dlg-says{font-size:14.5px;background:var(--surface-2);border-radius:var(--radius-s);padding:10px 12px}
.dlg-replies-h{font-size:13px;font-weight:800;margin:14px 0 6px;color:var(--txt-2)}
.dlg-replies{list-style:none;padding:0;margin:0 0 10px;display:flex;flex-direction:column;gap:10px}
.dlg-reply{border:1px solid var(--line);border-left:4px solid var(--primary);border-radius:var(--radius-s);
  background:var(--surface-2);padding:10px 12px}
.dlg-reply-text{font-weight:600}
.dlg-then{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:8px}
.dlg-then label,.dlg-quest label,.dlg-entry label{display:block;font-size:12.5px;font-weight:700;color:var(--txt-2);margin:0 0 3px}
.dlg-quest{margin-top:8px}
.dlg-qsearch{margin-bottom:6px}
.dlg-more{margin:10px 0 0}
.dlg-more>summary{cursor:pointer;color:var(--txt-2);font-weight:600;font-size:13px;padding:2px 0}
.dlg-more[open]>summary{margin-bottom:6px}
.dlg-adv-h{font-size:12.5px;font-weight:800;margin:10px 0 4px}
.dlg-adv-none{font-size:13px;margin:0 0 4px}
.dlg-entry{border:1px dashed var(--line-2);border-radius:var(--radius-s);padding:8px 10px;margin:0 0 8px;background:var(--surface)}
.dlg-entry-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 8px;margin-top:6px}
.dlg-entry label.inline{display:flex;gap:6px;align-items:center;grid-column:1/-1;font-weight:600;font-size:13px}
.dlg-rm{margin-top:8px}
.dlg-rm-node{margin-top:10px;display:flex;justify-content:flex-end}
.dlg-rm-node .btn{white-space:normal}
.dlg-rm-blocked{margin:8px 0 2px}
.dlg-rm-refs{margin:0 0 4px;padding-left:1.2em;overflow-wrap:anywhere}
.dlg-noreply{font-size:13px}
.dlg-noreply.tone-warn{background:var(--warn-soft);color:var(--warn);padding:6px 10px;border-radius:6px}
.dlg-addnode{margin:0 0 14px}
.dlg-settings>summary{color:var(--txt);font-weight:700}
.dlg-savebar{position:sticky;bottom:0;z-index:5;display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;justify-content:flex-end;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:10px 14px;margin:0 0 16px;box-shadow:var(--shadow)}
.dlg-savebar .btn{margin:0}
.dlg-dirty{color:var(--warn);font-weight:700;font-size:13px;margin-right:auto;display:flex;gap:6px;align-items:center}
.dlg-preview .dlg-pv-node{border-top:1px solid var(--line);padding:10px 0}
.dlg-preview.is-stepped .dlg-pv-node{border-top:0}
.dlg-pv-speaker{font-size:12px;font-weight:800;color:var(--txt-2);margin:0 0 2px;text-transform:uppercase;letter-spacing:.04em}
.dlg-pv-text{font-size:15px;background:var(--surface-2);border-radius:var(--radius-s);padding:10px 12px;margin:0 0 8px}
.dlg-pv-replies{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:6px}
.dlg-pv-reply{display:inline-block;border:1px solid var(--primary);color:var(--primary);border-radius:999px;padding:4px 12px;
  font-weight:600;text-decoration:none}
.dlg-pv-reply:hover{background:var(--primary-soft)}
.dlg-pv-fx{display:block;font-size:12.5px;color:var(--txt-2);margin:3px 0 0 12px}
.dlg-pv-nav{margin:0 0 6px}
.dlg-delete-link{margin:4px 0 6px}
.dlg-tech{font-size:13px}
@media(max-width:575.98px){
  .dlg-then,.dlg-entry-fields{grid-template-columns:1fr}
  .dlg-row-side{width:100%;justify-content:space-between}
  .dlg-savebar{padding:8px 10px;gap:6px}
  .dlg-savebar .dlg-dirty{flex:1 1 100%;margin:0}
  .dlg-savebar .btn{flex:1 1 0;font-size:13px;padding:8px 6px;min-width:0}
  .dlg-inline .form-select{min-width:0;flex:1 1 100%}
}

/* ---- Joueurs : annuaire et fiche (issue #328) ------------------------------------------- */
.pl-table{width:100%;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}
.pl-table th{font-size:12px;font-weight:800;color:var(--txt-2);text-transform:uppercase;letter-spacing:.04em;background:var(--surface-2)}
.pl-table td,.pl-table th{padding:10px 12px;vertical-align:middle}
.pl-table tbody tr[data-href]{cursor:pointer}
.pl-table tbody tr[data-href]:hover{background:var(--primary-soft)}
.pl-name{font-weight:700;color:var(--txt);text-decoration:none}
.pl-back{margin:0 0 8px;font-size:14px}
.pl-back a{text-decoration:none;font-weight:600}
.pl-head{padding:14px 16px;margin:0 0 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.pl-head-main{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center}
.pl-title{font-size:22px;font-weight:800;margin:0;overflow-wrap:anywhere}
.pl-chips{display:flex;flex-wrap:wrap;gap:6px}
.pl-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:6px 18px;margin:12px 0 0}
.pl-facts dt{font-size:11.5px;font-weight:700;color:var(--txt-faint);margin:0}
.pl-facts dd{margin:0;font-size:14px;overflow-wrap:anywhere}
.pl-uuid code{font-size:12px}
.pl-uuid .btn{margin:0 0 0 4px;padding:1px 8px}
.pl-tabs{display:flex;gap:4px;overflow-x:auto;border-bottom:1px solid var(--line);margin:0 0 14px;-webkit-overflow-scrolling:touch}
.pl-tabs a{flex:0 0 auto;padding:9px 12px;font-weight:600;font-size:14px;color:var(--txt-2);text-decoration:none;
  border-bottom:3px solid transparent;min-height:44px;display:flex;align-items:center}
.pl-tabs a[aria-current="page"]{color:var(--primary);border-bottom-color:var(--primary)}
.pl-tabs a:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
.pl-tabs-wrap{flex-wrap:wrap;overflow-x:visible}
.pl-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.pl-card{padding:14px 16px;margin:0 0 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.pl-card h2{font-size:15px;font-weight:800;margin:0 0 8px}
.pl-card .npc-form-collapse{margin-top:12px}
.pl-card .npc-formcard{max-width:620px}
.pl-facts-list{list-style:none;padding:0;margin:0 0 8px}
.pl-facts-list li{padding:2px 0}
.pl-feedback{margin-bottom:12px}
@media(max-width:575.98px){
  .pl-table thead{display:none}
  .pl-table,.pl-table tbody,.pl-table tr,.pl-table td{display:block;width:100%}
  .pl-table tr{border-bottom:1px solid var(--line);padding:8px 4px}
  .pl-table td{padding:2px 8px;border:0}
  .pl-table td[data-label="Joueur"]{font-size:15px}
  .pl-table td[data-label="Monde"]:has(.muted){display:none}
  .pl-title{font-size:19px}
  .pl-card .npc-actions .btn{flex:1 1 100%}
}
/* Issue #332 : le bouton du mode avancé du texte stylé reste discret (il écrasait l'écran). */
.sf .sf-toggle,.sf .sf-toggle.btn{background:none;border:0;box-shadow:none;color:var(--txt-2);font-size:12.5px;
  font-weight:600;padding:2px 0;min-height:0;text-decoration:underline}
.sf .sf-toggle:hover{color:var(--primary);background:none}
.dlg-node-h{text-transform:none;letter-spacing:0;color:var(--txt)}
.dlg-pv-text{background:#1f2733;color:#f4f6fb}
/* Issue #328 : sur téléphone, la barre du haut ne déborde plus (le rôle prend trop de place). */
@media(max-width:420px){
  .topbar-r{gap:8px;min-width:0}
  .userbox-r{display:none}
  .userbox-n{max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  /* #425 : avec la pastille d'environnement (« RPGQuest DEV ») et l'état du serveur, la barre
     dépassait encore de 20 à 130px. Le logo « PA » suffit ; la pastille se raccourcit au besoin
     (libellé complet en infobulle) au lieu de pousser la page en défilement horizontal. */
  .topbar{gap:8px;padding:0 12px}
  .brand-t{display:none}
  .brand{min-width:0;flex:0 1 auto}
  .env-chip{min-width:0;margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .topbar-r,.burger{flex:none}
}
@media(max-width:575.98px){
  .npc-filters .pa-chip{white-space:nowrap}
  .npc-filters .npc-catbar-t{margin-left:0!important;flex-basis:100%}
}
/* Issue #319 / #317 : valeur réelle relue et historique daté, distincts de la saisie. */
.pl-varstate{margin:10px 0 0;padding:8px 10px;border-radius:var(--radius-s);background:var(--surface-2);
  border:1px solid var(--line);font-size:13.5px;overflow-wrap:anywhere}
.pl-varstate-k{display:block;font-size:11.5px;font-weight:800;color:var(--txt-faint);text-transform:uppercase;letter-spacing:.04em}
.pl-history{border-left:3px solid var(--line-2);padding-left:8px}

/* Issue #360 : PNJ récurrents — listes en grille (une ligne compacte par élément, panneau « Gérer »
   déplié sur toute la largeur) qui deviennent des cartes quand la zone de contenu est étroite. */
.enc-list{container-type:inline-size;margin-top:8px;border:1px solid var(--line);border-radius:var(--radius);
  background:var(--surface);box-shadow:var(--shadow-s)}
.enc-tpl{--enc-cols:minmax(130px,1.6fr) minmax(100px,1.3fr) minmax(70px,1fr) minmax(110px,1.4fr)
  minmax(45px,.6fr) 44px 64px 76px 104px}
.enc-sites{--enc-cols:minmax(160px,1.7fr) minmax(90px,1fr) minmax(120px,1.3fr) minmax(110px,1.2fr)
  minmax(80px,.8fr) 104px}
/* Issue #381 — emplacements de PNJ : même grille que les occurrences récurrentes. */
.spot-list{--enc-cols:minmax(160px,1.5fr) minmax(150px,1.5fr) minmax(120px,1.2fr) minmax(150px,1.6fr) 104px}
.spot-filters{align-items:end;margin:8px 0 4px}
.enc-head,.enc-row{display:grid;grid-template-columns:var(--enc-cols);column-gap:12px;padding:9px 12px}
.enc-head{background:var(--surface-2);border-bottom:1px solid var(--line);border-radius:var(--radius) var(--radius) 0 0;
  color:var(--txt-faint);font-weight:750;font-size:10.5px;text-transform:uppercase;letter-spacing:.04em}
.enc-row{border-bottom:1px solid var(--line);font-size:13px;align-items:start}
.enc-row:last-child{border-bottom:0}
.enc-row:hover{background:var(--surface-2)}
.enc-row[hidden]{display:none}
.enc-c{min-width:0;overflow-wrap:anywhere}
.enc-k{display:none}
.enc-c .tid{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  vertical-align:bottom}
.enc-main .tid{margin-top:2px}
.enc-act{text-align:right;overflow-wrap:normal}
.enc-act .btn{white-space:nowrap;margin:0}
.enc-panel{grid-column:1/-1;margin-top:10px;padding:12px;border:1px solid var(--line);border-radius:var(--radius-s);
  background:var(--surface)}
.enc-site-acts{display:flex;flex-wrap:wrap;gap:12px}
.enc-site-acts form{flex:1 1 220px}
details.enc-biomes{margin:0;padding:0;border:0;border-radius:0;background:none}
details.enc-biomes[open] summary{margin-bottom:0}
.enc-biomes summary{cursor:pointer;color:var(--primary);font-weight:600}
.enc-biomes small{display:block;margin-top:4px;color:var(--txt-2)}
.enc-filter{max-width:360px;margin-top:8px}
@container (max-width:820px){
  .enc-head{display:none}
  .enc-row{grid-template-columns:1fr 1fr;row-gap:6px;padding:10px 12px}
  .enc-k{display:block;font-size:10.5px;font-weight:750;color:var(--txt-faint);text-transform:uppercase;letter-spacing:.04em}
  .enc-main,.enc-wide,.enc-act{grid-column:1/-1}
  .enc-main .enc-k{display:none}
  .enc-main{font-weight:600}
  .enc-act{text-align:left}
}
@media print{
  .topbar,.side,.burger,.npc-catbar,.enc-act,.enc-filter,.enc-panel{display:none!important}
  .shell{display:block}
  .main{padding:0;max-width:none}
  .enc-row,.enc-head{break-inside:avoid}
  .doc-layout{display:block} .doc-toc,.doc-search,.doc-pager{display:none!important}
  .doc-toc-m{display:block} .doc-body{border:0;box-shadow:none;max-width:none;padding:0}
  .doc-body h2,.doc-body h3{break-after:avoid} .doc-body li,.doc-tablewrap tr,.doc-callout{break-inside:avoid}
}
/* ---- Catalogues de quêtes : parcours simple (issue #414, remplace la carte unique de #369) ---- */
.qc-list{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:8px}
.qc-row{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:space-between;
  border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);padding:12px 14px;box-shadow:var(--shadow-s)}
.qc-row-main{display:flex;flex-direction:column;gap:2px;min-width:0;flex:1 1 260px}
.qc-row-title{font-weight:700;font-size:15px;color:var(--txt);text-decoration:none;overflow-wrap:anywhere}
.qc-row-title:hover{color:var(--primary)}
.qc-row-sub{font-size:13px;color:var(--txt-2);display:flex;gap:6px;align-items:center;overflow-wrap:anywhere}
.qc-row-sub .ic{font-size:14px;flex:none}
.qc-row-side{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.qc-empty p{margin:4px 0}
.qc-empty .btn{margin-top:10px}
.qc-problems{margin:4px 0 0;padding-left:18px}
.qc-tech{margin:0 0 14px;font-size:13px;color:var(--txt-2)}
.qc-tech>summary{cursor:pointer;font-weight:600}
.qc-fresh{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;justify-content:space-between;font-size:13px;
  color:var(--txt-2);margin:0 0 14px}
.qc-fresh>span{display:flex;gap:6px;align-items:center}
.qc-fresh .ic{font-size:14px}
.qc-fresh.is-stale{background:var(--warn-soft);color:#8a5a0c;border:1px solid #eed9b0;border-radius:var(--radius-s);padding:8px 12px}
.qc-head{padding:16px 18px;margin:0 0 12px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-s)}
.qc-head-main{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center}
.qc-title{font-size:22px;font-weight:800;margin:0 0 6px;overflow-wrap:anywhere}
.qc-head .qc-title{margin:0}
.qc-lead{font-size:14.5px;color:var(--txt-2);margin:6px 0 0;max-width:68ch}
.qc-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.qc-actions .btn{margin-top:0}
.qc-desc{margin:0 0 12px}
.qc-card{padding:14px 16px;margin:0 0 14px;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}
.qc-card>h2,.qc-zone h2{font-size:16px;font-weight:800;margin:0 0 10px;display:flex;gap:8px;align-items:center;
  text-transform:none;letter-spacing:0;color:var(--txt)}
.qc-card>h2 .ic{font-size:17px;color:var(--txt-2)}
.qc-count{font-size:12px;font-weight:700;background:var(--surface-3);border-radius:999px;padding:1px 8px;color:var(--txt-2)}
.qc-step{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;
  background:var(--primary-soft);color:var(--primary-d);font-size:12.5px;font-weight:800;flex:none}
.qc-quests,.qc-items{margin:0 0 6px;padding:0;list-style:none;display:flex;flex-direction:column;gap:6px}
.qc-quest,.qc-item{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;
  border:1px solid var(--line);border-radius:var(--radius-s);background:var(--surface-2);padding:9px 12px}
.qc-random{display:flex;gap:6px;align-items:flex-start;margin:0 0 10px}
.qc-random .ic{flex:none;margin-top:2px}
.qc-form .qc-freq,.qc-when-none,.qc-when-one,.qc-when-many{display:none}
.qc-form[data-qc-count=none] .qc-when-none,.qc-form[data-qc-count=one] .qc-when-one,
.qc-form[data-qc-count=many] .qc-when-many{display:block}
.qc-form[data-qc-count=many]:has(input[name=pick_mode][value=weighted]:checked) .qc-item .qc-freq,
.qc-form[data-qc-count=many]:has(input[name=pick_mode][value=weighted]:checked) .qc-cand:has([data-qc-cand]:checked) .qc-freq{
  display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:13px;font-weight:600;margin:0}
.qc-freq select{width:auto;min-height:34px}
.qc-cand .qc-freq{margin-left:30px;flex:1 1 calc(100% - 30px);min-width:0}
.qc-pct{font-weight:700;color:var(--txt-2)}
.qc-form:not(:has(input[name=pick_mode][value=weighted]:checked)) .qc-exact{display:none!important}
.qc-exact{display:inline-flex;gap:6px;align-items:center;margin:0}
.qc-exact input{width:5.5rem}
.qc-move{display:inline-flex;gap:6px;align-items:center}
.qc-move .btn{margin:0;min-height:34px;min-width:38px;justify-content:center}
.qc-options{border:0;padding:0;margin:0 0 12px;display:flex;flex-direction:column;gap:8px}
.qc-options legend.qc-lbl{font-size:14.5px;margin:6px 0 6px}
.qc-opt{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border:1px solid var(--line);
  border-radius:var(--radius-s);background:var(--surface-2)}
.qc-opt:has(input:checked){background:var(--primary-soft);border-color:#cfe0ff}
.qc-opt input[type=radio]{width:20px;height:20px;flex:none;margin:2px 0 0}
.qc-opt label{display:flex;flex-direction:column;gap:2px;cursor:pointer;margin:0;font-weight:400;min-width:0}
.qc-opt label .form-text{margin:0}
.qc-more{margin-top:2px;font-size:13.5px}
.qc-more>summary{cursor:pointer;color:var(--txt-2);margin-bottom:8px}
.qc-inline-select{display:inline-block;width:auto;margin:0 4px}
.qc-more .qc-opt label{display:block;line-height:2.2}
.qc-allow{font-weight:700;margin:0 0 2px}
.qc-allowed{margin:8px 0 0;font-size:14px}
.qc-quest.is-off{opacity:.65}
.qc-q-title{font-weight:700;color:var(--txt);overflow-wrap:anywhere}
.qc-q-meta{font-size:12.5px;color:var(--txt-2)}
.qc-quest .qc-q-meta{flex:1 1 180px}
.qc-item-main{display:flex;flex-wrap:wrap;gap:2px 10px;align-items:center;flex:1 1 220px;min-width:0}
.qc-item-btns{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.qc-item-btns .btn{margin:0;min-height:36px;min-width:40px;justify-content:center}
.qc-rm{cursor:pointer;display:inline-flex;align-items:center}
.qc-rm input{position:absolute;opacity:0;width:1px;height:1px}
.qc-rm:focus-within{outline:2px solid var(--primary);outline-offset:2px}
.qc-rm .qc-rm-on{display:none}
.qc-item:has(.qc-rm input:checked){background:var(--err-soft);border-style:dashed}
.qc-item:has(.qc-rm input:checked) .qc-q-title{text-decoration:line-through;color:var(--txt-2)}
.qc-item:has(.qc-rm input:checked) .qc-rm-on{display:inline}
.qc-item:has(.qc-rm input:checked) .qc-rm-off{display:none}
.qc-item:has(.qc-rm input:checked) [data-qc-move],.qc-item:has(.qc-rm input:checked) .qc-freq{visibility:hidden}
.qc-add{margin-top:10px}
.qc-add>summary{list-style:none;display:inline-flex;align-items:center;gap:6px;margin:0}
.qc-add>summary::-webkit-details-marker{display:none}
.qc-add[open]>summary{margin-bottom:10px}
.qc-add-search{margin:0 0 6px}
.qc-cands{max-height:320px;overflow-y:auto;border:1px solid var(--line);border-radius:var(--radius-s);background:var(--surface)}
.qc-cand,.qc-pick{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;padding:8px 12px;border-bottom:1px solid var(--line)}
.qc-cand:last-child{border-bottom:0}
.qc-cand input,.qc-pick input{width:20px;height:20px;flex:none;margin:0}
.qc-cand label,.qc-pick label{font-weight:400;flex:1 1 200px;display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;cursor:pointer;margin:0;min-width:0}
.qc-cand:has(input:checked),.qc-pick:has(input:checked){background:var(--primary-soft)}
.qc-picks{border:1px solid var(--line);border-radius:var(--radius-s);overflow:hidden}
.qc-pick:last-child{border-bottom:0}
.qc-npcs{list-style:none;padding:0;margin:0 0 10px;display:flex;flex-direction:column;gap:6px}
.qc-npc{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:center;padding:8px 12px;border:1px solid var(--line);
  border-radius:var(--radius-s);background:var(--surface-2)}
.qc-npc-name{font-weight:700}
.qc-npc-warn{flex:1 1 100%;display:flex;gap:6px;align-items:flex-start;font-size:13px;color:#8a5a0c;
  background:var(--warn-soft);border-radius:var(--radius-s);padding:6px 10px}
.qc-npc-warn .ic{flex:none;margin-top:2px}
.qc-npc-warn.is-short{font-size:12.5px;padding:4px 8px;margin-left:30px}
.qc-advanced>summary{cursor:pointer;font-weight:700;color:var(--txt-2)}
.qc-advanced[open]>summary{margin-bottom:10px}
.qc-facts{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:0 0 8px;font-size:13.5px}
.qc-facts dt{font-weight:700;color:var(--txt-2)}
.qc-facts dd{margin:0;overflow-wrap:anywhere}
.qc-adv-h{font-size:13px;font-weight:800;margin:12px 0 4px}
.qc-weights,.qc-tech-list{margin:4px 0 0;padding-left:18px;font-size:13px}
.qc-weights li{display:flex;flex-wrap:wrap;gap:4px 10px;justify-content:space-between}
.qc-w{font-weight:700;white-space:nowrap}
.qc-adv{display:none}
.qc-form:has(.qc-adv-toggle:checked) .qc-adv{display:inline-flex;flex-wrap:wrap;gap:6px 12px;align-items:center}
.qc-item-adv{flex:1 1 100%;font-size:12.5px}
.qc-item-adv label{display:inline-flex;gap:6px;align-items:center;margin:0}
.qc-item-adv input[type=number]{width:5.5rem}
.qc-adv-switch{margin:0 0 10px;font-weight:600}
.qc-adv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px 18px}
.qc-adv-grid label:not(.inline),.qc-lbl{display:block;font-weight:700;font-size:13px;margin:0 0 4px}
.qc-summary:not(:empty){border:1px solid #cfe0ff;background:var(--primary-soft);color:var(--txt);border-radius:var(--radius);
  padding:12px 14px;margin:0 0 14px;font-size:14px}
.qc-savebar .btn{justify-content:center}
.qc-savebar .qc-live-note{display:flex;gap:6px;align-items:center;font-size:13px;color:var(--txt-2);margin-right:auto}
.qc-savebar .dlg-dirty:not([hidden])+.qc-live-note{margin-right:0}
.qc-short{max-width:640px}
.qc-short label:not(.inline){display:block;font-weight:700;margin:12px 0 4px}
.qc-advanced-inline{margin-top:10px;font-size:13px}
.qc-advanced-inline>summary{cursor:pointer;color:var(--txt-2)}
.qc-danger{border-color:#f0bcbc}
.qc-conseq{padding-left:18px}
.qc-zone{margin:18px 0 8px;padding-top:12px;border-top:1px solid var(--line)}
.qc-zone h2{font-size:13px;color:var(--txt-2);margin:0 0 8px}
.qc-zone-row{display:flex;flex-wrap:wrap;gap:8px}
@media(max-width:575.98px){
  .qc-row-side{width:100%;justify-content:space-between}
  .qc-title{font-size:19px}
  .qc-actions .btn{flex:1 1 100%;justify-content:center}
  .qc-item-btns{width:100%}
  .qc-item-btns .qc-rm{margin-left:auto}
  .qc-facts{grid-template-columns:1fr}
  .qc-savebar .qc-live-note{flex:1 1 100%;margin:0}
  .qc-zone-row .btn{flex:1 1 0;justify-content:center}
}

/* ---- Voyages : Lieux / Bornes / À vérifier / Avancé (issue #412, refonte de /travel) ---- */
.tv-summary{font-size:15px;font-weight:700;color:var(--txt);margin:0 0 10px}
.tv-tabs{margin-bottom:16px}
.tv-tabs .tv-count-warn{background:var(--warn-soft);color:var(--warn)}
.tv-intro,.tv-text{font-size:14.5px;color:var(--txt-2);margin:0 0 12px;max-width:72ch}
.tv-search{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 12px}
.tv-search input[type=search]{flex:1 1 260px;min-width:0}
.tv-search select{flex:0 1 auto;width:auto}
.tv-search .btn{margin-top:0}
.tv-row .qc-row-side .btn{min-height:36px}
.tv-back{margin:0 0 10px;font-size:14px}
.tv-back a{display:inline-flex;gap:6px;align-items:center;text-decoration:none}
.tv-rename{max-width:640px}
.tv-rename label{display:block;font-weight:700;margin:6px 0 4px}
.tv-rename input[type=text]{max-width:100%}
.tv-keep{display:flex;gap:6px;align-items:flex-start;font-size:13.5px;color:var(--ok);margin:10px 0 0}
.tv-keep .ic{flex:none;margin-top:2px}
.tv-beacon{display:block;padding:0}
.tv-beacon>summary{list-style:none;display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:space-between;
  padding:12px 14px;cursor:pointer}
.tv-beacon>summary::-webkit-details-marker{display:none}
.tv-beacon[open]>summary .tv-see{background:var(--surface-3)}
.tv-beacon-body{padding:0 14px 12px}
.tv-beacon>summary .qc-row-sub{font-weight:400}
.tv-pair{flex:1 1 100%;margin:0;padding:0;border:0;background:none}
.tv-rename .actform,.tv-pair .actform{border:0;padding:0;background:none;box-shadow:none;margin:0}
details.tv-beacon{margin:0}
.tv-pair>summary{list-style:none;display:inline-flex;gap:6px;align-items:center}
.tv-pair>summary::-webkit-details-marker{display:none}
.tv-pair[open]>summary{margin-bottom:8px}
.tv-plain{margin:0 0 8px;padding-left:18px;font-size:14px}
.tv-plain li{margin:2px 0}
.tv-pager{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:center;margin:14px 0}
.tv-tab .table-wrap{max-width:100%}
@media(max-width:575.98px){
  .tv-search select{flex:1 1 45%}
  .tv-search .btn{flex:1 1 auto;justify-content:center}
  .tv-pair>summary{width:100%;justify-content:center}
}
/* Issue #465 — « Changements dans le dialogue » (diff de sens d'un réimport) : lisible sur téléphone. */
.sem-diff-list{list-style:none;padding:0;margin:.5rem 0}
.sem-diff-list li{padding:.4rem 0;border-bottom:1px solid var(--line);overflow-wrap:anywhere}
.sem-diff .sem-before,.sem-diff .sem-after{font-size:.9em;margin:.15rem 0 0 .75rem;white-space:pre-wrap}
.sem-diff .sem-before{color:#b42318}
.sem-diff .sem-after{color:#067647}
.ai-steps li{margin-bottom:.35rem}
/* Issue #214 — modèles, IA et import de profils de mob */
.mob-kinds{display:grid;grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));gap:.75rem}
.mob-kind{border:1px solid var(--line);border-radius:.5rem;padding:.6rem .75rem}
.mob-shortcuts{border:1px dashed var(--line);border-radius:.5rem;padding:.6rem .75rem;margin-bottom:1rem}
.mob-issues li{overflow-wrap:anywhere;margin-bottom:.25rem;color:#b42318}
.mob-issues.warn li{color:inherit}
pre.mob-cell{margin:0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:.85em}
#mob-accordion .accordion-button{flex-wrap:wrap;row-gap:.25rem}
#mob-accordion .accordion-button code{overflow-wrap:anywhere;white-space:normal}

/* ---- #169 : /mobs en trois vues, hiérarchie des boutons ; /actions alignée ---------------- */
.mob-summary{grid-template-columns:repeat(auto-fill,minmax(200px,1fr));margin:4px 0 14px}
.mob-tabs{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 16px;padding-bottom:12px;border-bottom:1px solid var(--line)}
.mob-tabs .nav-link{padding:6px 14px;border-radius:999px;font-size:13.5px;font-weight:600;color:var(--txt-2);
  background:var(--surface);border:1px solid var(--line-2)}
.mob-tabs .nav-link.active{background:var(--primary);border-color:var(--primary);color:#fff}
.mob-toolbar{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;margin:0 0 14px}
.mob-toolbar-main,.mob-toolbar-side{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.mob-toolbar .btn,.mob-actions .btn,.mob-test .btn,.mob-danger-form .btn{margin-top:0}
.mob-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:10px 0 6px}
.mob-actions form{display:inline-flex;margin:0}
.mob-actions-sep{flex:1 1 auto}
.mob-test{margin:14px 0 4px;padding:12px 14px;border:1px solid var(--line);border-radius:10px;background:var(--surface-2)}
.mob-test .npc-fs-h{margin:0 0 8px}
.mob-test-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.mob-test-row .form-select,.mob-test-row .form-control{width:auto;min-width:10rem;max-width:16rem}
.mob-danger-zone{margin:18px 0 8px;padding:12px 14px;border:1px solid var(--err);border-radius:10px;background:var(--err-soft)}
.mob-danger-zone .npc-fs-h{margin:0 0 6px;color:var(--err)}
.mob-danger-form{display:flex;flex-wrap:wrap;align-items:center;gap:10px}
.mob-danger-form label.inline{margin:0}
.mob-fold{margin:14px 0;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.mob-fold>summary{cursor:pointer;padding:10px 14px;font-weight:650;color:var(--txt-2);display:flex;align-items:center;gap:8px}
.mob-fold[open]>summary{border-bottom:1px solid var(--line)}
.mob-fold-b{padding:12px 14px}
.mob-fold-b p:last-child{margin-bottom:0}
.mob-cols{display:grid;grid-template-columns:1fr;gap:18px}
@media(min-width:1100px){.mob-cols{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}}
.actions-search{display:flex;flex-wrap:nowrap;align-items:stretch}
.actions-search .btn{margin-top:0;display:inline-flex;align-items:center}
.actions-status{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 14px}
.actions-domains{gap:8px;margin:0 0 16px}
@media(max-width:575.98px){
  .mob-toolbar{flex-direction:column;align-items:stretch}
  .mob-actions-sep{display:none}
  .mob-test-row .form-select,.mob-test-row .form-control{max-width:none;flex:1 1 100%}
  .actions-search{max-width:none}
}

/* ---- Mondes (issue #560, #331-W1) — d'après les maquettes docs/design/331-mondes-portails ---- */
.w-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.w-card{display:flex;flex-direction:column;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:12px;
  padding:12px 14px;box-shadow:var(--shadow-s);min-width:0}
.w-card.muted-card{background:var(--surface-2);border-style:dashed}
.w-head{display:flex;align-items:flex-start;gap:10px}
.w-ic{flex:0 0 36px;height:36px;border-radius:10px;display:grid;place-items:center;font-size:18px}
.w-ic.ov{background:var(--ok-soft);color:var(--ok)}
.w-ic.ne{background:var(--err-soft);color:var(--err)}
.w-ic.en{background:var(--info-soft);color:var(--info)}
.w-name{font-weight:700;font-size:15px;word-break:break-all}
.w-sub{font-size:12px;color:var(--txt-faint)}
.w-pills{margin-left:auto;display:flex;flex-direction:column;gap:4px;align-items:flex-end}
.w-roles{display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px}
.role{padding:2px 9px;border-radius:999px;font-weight:700;font-size:11.5px;border:1px solid var(--line)}
.role.hub{background:#efe9ff;color:#5b3fc4}.role.wild{background:var(--ok-soft);color:var(--ok)}
.role.claims{background:var(--info-soft);color:var(--info)}.role.none{background:var(--surface-3);color:var(--txt-faint)}
.mgr{color:var(--txt-faint)}
.w-facts{margin:0;padding:0;list-style:none;font-size:12.5px;color:var(--txt-2)}
.w-facts li{display:flex;gap:6px}.w-facts .k{color:var(--txt-faint);min-width:58px}
.w-note{margin:0;font-size:12px;color:var(--txt-2);background:var(--surface-2);border-radius:8px;padding:6px 8px}
.w-note-err{background:var(--err-soft);color:var(--err)}
.w-foot{margin-top:auto}.w-foot .btn{margin-top:0}
.w-small-note{margin-top:14px}
.w-title{font-size:20px;font-weight:800;display:flex;flex-wrap:wrap;align-items:center;gap:8px;word-break:break-all}
.w-cols{display:grid;grid-template-columns:minmax(0,1fr);gap:14px}
.w-cols>div{min-width:0;display:flex;flex-direction:column;gap:14px}
@media(min-width:1100px){.w-cols{grid-template-columns:minmax(0,3fr) minmax(0,2fr)}}
.w-sec{padding:14px 16px;margin:0}
.w-h{font-size:15px;font-weight:800;margin:0 0 10px;display:flex;align-items:center;gap:8px}
.w-dl{margin:0;display:grid;grid-template-columns:1fr;gap:6px}
.w-dl div{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:13px}.w-dl dt{min-width:110px;color:var(--txt-faint);font-weight:600}
.w-dl dd{margin:0;min-width:0;word-break:break-all}
.w-links{margin:0;padding:0;list-style:none;font-size:13px}.w-links li{display:flex;gap:8px;margin:5px 0}
.w-links .bi{color:var(--txt-faint)}.w-links span{min-width:0}
@media(max-width:700px){.w-pills{flex-direction:row;flex-wrap:wrap}}

/* ---- Portails (issue #564) : mêmes cartes que Mondes, césure aux espaces pour les textes ---- */
.p-scope .w-name,.p-scope .w-title,.p-scope .w-dl dd{word-break:normal;overflow-wrap:anywhere}
.p-scope .w-h .role{white-space:nowrap}
/* Fiche d'un portail (retour propriétaire du 22/10 sur #566) : une colonne pleine largeur, résumé et
   tests en tête, formulaires repliés ; textes et champs plus grands que le reste du panel. */
.p-fiche{display:flex;flex-direction:column;gap:14px}
.p-fiche .w-sec{padding:16px 20px}
.p-fiche .w-h{font-size:17px}
.p-fiche h4.w-h{font-size:15.5px;margin:12px 0 8px}
.p-fiche .w-dl{grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:8px 24px}
.p-fiche .w-dl div,.p-fiche .w-links{font-size:15px}
.p-fiche .w-dl dt{min-width:130px}
.p-fiche p,.p-fiche .muted{font-size:15px}
.p-fiche .field-help{font-size:13.5px}
.p-fiche label{font-size:14.5px}
.p-fiche input[type=text],.p-fiche input[type=number],.p-fiche input[list],.p-fiche select{font-size:15px;
  padding:10px 12px;max-width:100%}
.p-fiche .btn-sm,.p-fiche .btn.sm{font-size:14px;padding:8px 14px}
.p-fiche .form-grid{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr))}
.p-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,150px),1fr));gap:10px;margin:0 0 12px}
@media(max-width:575.98px){.p-fiche .w-sec{padding:14px}.p-fact .v{font-size:14.5px}}
.p-fact{background:var(--surface-2);border-radius:10px;padding:10px 12px;min-width:0;overflow-wrap:anywhere}
.p-fact .k{display:block;font-size:12.5px;font-weight:700;color:var(--txt-faint);text-transform:uppercase;
  letter-spacing:.03em;margin-bottom:3px}
.p-fact .v{font-size:15.5px}
.p-verdict{margin:0 0 10px}
.p-tools{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:12px}
.p-tool{border:1px solid var(--line);border-radius:10px;padding:12px 14px;min-width:0}
.p-tool h4.w-h{margin-top:0}
.p-tool .actform{border:0;box-shadow:none;padding:0;margin:8px 0 0;background:none}
.p-activation{border-top:1px solid var(--line);margin-top:12px;padding-top:4px}
.p-activation .actform{border:0;box-shadow:none;padding:0;margin:0;background:none}
details.p-edit,details.p-more{margin:12px 0 0;padding:10px 14px}
details.p-edit>summary{font-size:15px;color:var(--primary);display:flex;align-items:center;gap:8px}
details.p-more>summary{font-size:14.5px}
details.p-edit .actform{border:0;box-shadow:none;padding:0;margin:6px 0 0;background:none}
.p-locked{display:flex;align-items:center;gap:8px;margin:12px 0 0}
.p-return{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin-top:12px}
.p-return .btn{margin-top:0}
/* Issue #565 (retour du 24/10) — création progressive : étapes, cartes de choix, groupes conditionnels. */
.p-create .w-h{font-size:18px}
.p-lifecycle{margin:0 0 14px;padding-left:22px;font-size:14.5px;color:var(--txt-2)}
.p-lifecycle li{margin:2px 0}
.p-wizard{display:flex;flex-direction:column;gap:14px;background:none;border:0;box-shadow:none;padding:0}
.p-step{border:1px solid var(--line);border-radius:12px;padding:14px 16px 12px;margin:0;min-width:0;background:var(--surface)}
.p-step>legend{float:left;width:100%;display:flex;align-items:center;gap:10px;font-size:16px;font-weight:700;margin:0 0 4px;padding:0}
.p-step>legend+*{clear:both}
.p-step-n{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;
  background:var(--primary-soft);color:var(--primary);font-size:14px;flex:none}
.p-step-help{margin:0 0 10px}
.p-choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:8px;margin:0 0 12px}
.p-choice,.p-arch{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--line);border-radius:10px;
  padding:10px 12px;cursor:pointer;min-width:0;background:var(--surface-2);font-size:14.5px;font-weight:400}
.p-choice input,.p-arch input{margin-top:4px;flex:none}
.p-choice span,.p-arch span{display:flex;flex-direction:column;gap:2px;min-width:0;overflow-wrap:anywhere}
.p-choice small,.p-arch small{color:var(--txt-faint);font-size:13px}
.p-choice:has(input:checked),.p-arch:has(input:checked){border-color:var(--primary);background:var(--primary-soft)}
.p-choice:has(input:disabled),.p-arch.is-off{opacity:.6;cursor:not-allowed}
.p-arches{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:8px;margin:0 0 8px}
.p-arch-dl{margin:4px 0 0;display:grid;gap:2px}
.p-arch-dl div{display:flex;flex-wrap:wrap;gap:0 6px;font-size:13.5px}
.p-arch-dl dt{font-weight:600;color:var(--txt-2)}.p-arch-dl dd{margin:0}
.p-arch .p-arch-why{color:#8a5a0c}
.p-zone .p-mode{display:none}
.p-zone:has(input[name=zone_mode][value=building]:checked) .p-mode-building,
.p-zone:has(input[name=zone_mode][value=site]:checked) .p-mode-site,
.p-zone:has(input[name=zone_mode][value=coords]:checked) .p-mode-coords{display:block}
.p-dest .p-fixed{display:none}
.p-dest:has(input[name=strategy][value=FIXED_POINT]:checked) .p-fixed{display:block}
.p-dest:has(input[name=strategy][value=FIXED_POINT]:checked) .p-nofixed{display:none}
@supports not selector(:has(*)){.p-zone .p-mode,.p-dest .p-fixed{display:block}}
.p-summary{background:var(--surface-2);border-radius:10px;padding:12px 14px}
.p-summary .w-dl{grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:6px 20px;margin:0 0 8px}
.p-collision{color:var(--err);font-weight:600;margin:0 0 8px}
.p-wizard .btnrow .btn{font-size:15px;padding:9px 18px}
@media(max-width:575.98px){.p-step{padding:12px}.p-step>legend{font-size:15px}.p-choices{grid-template-columns:1fr}}
.p-preview{margin:0 0 4px}
details.p-history{margin:0}
details.p-history>summary{font-size:16px;color:var(--txt);display:flex;align-items:center;gap:8px}

/* Issue #543 — bibliothèque « Capacités » et cartes de capacités du profil de mob (maquettes #541). */
.cap-filters{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:0 0 14px}
.cap-filters select,.cap-filters input[type=text]{padding:7px 10px;border:1px solid var(--line-2);border-radius:8px;
  background:var(--surface);font-size:13px;min-width:0}
.cap-filters input[type=text]{flex:1 1 200px;max-width:280px}
.cap-filters .btn{margin-top:0}
.cap-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.cap-card{display:flex;flex-direction:column;gap:6px;background:var(--surface);border:1px solid var(--line);
  border-radius:12px;padding:12px 14px;box-shadow:var(--shadow-s);min-width:0}
.cap-card.planned{background:var(--surface-2);border-style:dashed}
.cap-head{display:flex;align-items:center;gap:10px}
.cap-ic{flex:0 0 36px;height:36px;border-radius:10px;display:grid;place-items:center;background:var(--primary-soft);
  color:var(--primary);font-size:18px}
.cap-ic.sm{flex-basis:28px;width:28px;height:28px;font-size:14px}
.cap-ic .ic{margin:0}
.cap-name{font-weight:700;font-size:14.5px;line-height:1.25;overflow-wrap:anywhere}
.cap-cat{font-size:11.5px;color:var(--txt-faint)}
.cap-desc{margin:0;font-size:13px;color:var(--txt-2)}
.cap-facts{margin:0;padding:0;list-style:none;font-size:12.5px;color:var(--txt-2)}
.cap-facts li{display:flex;gap:6px;align-items:baseline;margin:2px 0;overflow-wrap:anywhere}
.cap-facts .k{color:var(--txt-faint);min-width:84px;flex:0 0 auto}
.cap-foot{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:auto;padding-top:6px}
.cap-foot .btn{margin-top:0}
.cap-hero{display:flex;flex-wrap:wrap;gap:14px;align-items:center;background:var(--surface);border:1px solid var(--line);
  border-radius:12px;padding:14px 16px;margin:0 0 14px}
.cap-hero .cap-ic{flex-basis:48px;height:48px;font-size:24px}
.cap-hero>div{flex:1 1 240px;min-width:0}
.cap-cols{display:grid;grid-template-columns:minmax(0,1fr);gap:14px}
.cap-cols>div{min-width:0}
@media(min-width:1100px){.cap-cols{grid-template-columns:minmax(0,3fr) minmax(0,2fr)}}
.crumbs{font-size:12.5px;margin:0 0 8px;color:var(--txt-faint)}
.ptable{width:100%;border-collapse:collapse;font-size:13px}
.ptable th,.ptable td{padding:7px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}
.ptable th{font-size:11px;font-weight:800;letter-spacing:.05em;text-transform:uppercase;color:var(--txt-faint)}
.ptable td.n{white-space:nowrap}
@media(max-width:700px){.ptable td.n{white-space:normal}}
.safe-list{margin:0;padding:0;list-style:none;font-size:13px}
.safe-list li{display:flex;gap:8px;margin:4px 0}
.safe-list .bi{color:var(--ok)}
.presets{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ab-presets{margin:8px 0 2px}
.ab-list{display:flex;flex-direction:column;gap:10px;margin:8px 0}
.ab-card{background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px 14px;min-width:0}
.ab-card.off{background:var(--surface-2)}
.ab-card.off .ab-name,.ab-card.off .ab-sum{opacity:.7}
.ab-card:has(.ab-remove input:checked){opacity:.5;border-style:dashed}
.ab-top{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}
.ab-ord{display:inline-grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--surface-3);
  font-size:12px;font-weight:800;color:var(--txt-2)}
.ab-name{font-weight:700}
.ab-sum{flex:1 1 100%;margin:4px 0 0;font-size:13px;color:var(--txt-2);overflow-wrap:anywhere}
.ab-warn{color:var(--warn)}
.ab-acts{display:flex;flex-wrap:wrap;align-items:center;gap:6px 10px;margin-left:auto}
.ab-acts .btn{margin-top:0}
.ab-pos{display:inline-flex;align-items:center;gap:4px;font-size:12.5px;color:var(--txt-2);margin:0}
.ab-pos input{width:56px;padding:3px 6px;border:1px solid var(--line-2);border-radius:6px}
.ab-edit{margin-top:8px;padding-top:6px;border-top:1px solid var(--line)}
.ab-edit>summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--primary)}
.switch{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600;color:var(--txt-2);margin:0}
.switch input{width:auto;margin:0}
.ab-add{margin-top:10px}
.ab-add>summary{list-style:none;display:inline-flex;cursor:pointer}
.ab-add>summary::-webkit-details-marker{display:none}
.pick{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.pick-row{padding:10px 14px;background:var(--surface);border:1px solid var(--line);border-radius:10px;min-width:0}
.pick-l{display:flex;gap:12px;align-items:flex-start;margin:0;cursor:pointer;font-weight:400}
.pick-l input{margin-top:4px;width:auto;flex:0 0 auto}
.pick-row.disabled{opacity:.6;background:var(--surface-2)}
.pick-row.disabled .pick-l{cursor:default}
.pick-row:has(.pick-l input:checked){border-color:var(--primary);background:var(--primary-soft)}
.pick-row .why{font-size:12px;color:var(--txt-faint)}
.ab-new-params{display:none;margin-top:8px;padding-top:6px;border-top:1px solid var(--line)}
.pick-row:has(.pick-l input:checked) .ab-new-params{display:block}
@media(max-width:700px){
  .ab-acts{margin-left:0;width:100%}
  .cap-filters input[type=text]{max-width:none}
}
/* Issue #562 — Créer un monde : choix en cartes, terrain et monde plat masqués sans JavaScript. */
.wc-choices{display:flex;flex-wrap:wrap;gap:8px;border:0;padding:0;margin:10px 0 0}
.wc-choices legend{font-size:13px;font-weight:700;margin-bottom:4px;width:100%}
.wc-choice{display:flex;gap:8px;align-items:flex-start;flex:1 1 160px;min-width:0;border:1px solid var(--line);border-radius:10px;padding:8px 10px;cursor:pointer}
.wc-choice:has(input:checked){border-color:var(--primary);background:var(--primary-soft)}
.wc-choice .field-help{display:block}
.wc-terrain-off{display:none}
.wc-form:has(input[name=environment]:not([value=NORMAL]):checked) .wc-terrain{display:none}
.wc-form:has(input[name=environment]:not([value=NORMAL]):checked) .wc-terrain-off{display:block}
.wc-form:has(input[name=environment]:not([value=NORMAL]):checked) .wc-flat,
.wc-form:has(input[name=terrain]:not([value=FLAT]):checked) .wc-flat{display:none}
.wc-flat{border:1px solid var(--line);border-radius:10px;padding:8px 12px}
.wc-flat legend{font-size:13px;font-weight:700;float:none;width:auto;padding:0 4px;margin:0}
.wc-layers{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,1fr);gap:0 12px;max-width:640px}
.wc-layers label{display:flex;flex-direction:column;margin:0 0 6px}
.wc-layers input{width:100%}
.wc-code{white-space:normal;word-break:break-all}
@media (max-width:640px){.wc-choice{flex-basis:100%}}

/* Issue #788 : suggestions d'un champ « État d'un joueur » — cibles tactiles, retour à la ligne sur mobile */
.player-suggest{list-style:none;margin:4px 0 12px;padding:0;display:flex;flex-direction:column;gap:6px}
.player-suggest li{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.player-suggest .faint{font-size:12px;overflow-wrap:anywhere}

/* Issue #907 — File de développement (lqorch) : cartes de tickets repliables, lisibles à 390 px. */
.orch-filters{margin:12px 0 4px}
.orch-filters input[type=search]{flex:1 1 240px}
.orch-filters select{flex:0 1 230px;width:auto;max-width:100%}
@media(max-width:575.98px){.orch-cards{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}}
.orch-group{margin:20px 0 0}
.orch-group>.section-title .badge{margin-left:4px}
.orch-help{font-size:13px;margin:0 0 6px}
details.orch-t{margin:8px 0;padding:10px 14px}
details.orch-t>summary{display:flex;flex-wrap:wrap;gap:4px 10px;align-items:baseline;color:var(--txt);font-weight:600}
.orch-t-h{flex:1 1 320px;min-width:0;overflow-wrap:anywhere}
.orch-t-b{display:flex;flex-wrap:wrap;gap:4px 6px;align-items:center;font-weight:400}
.orch-t-why{flex-basis:100%;font-size:13px;font-weight:400;color:var(--txt-2);overflow-wrap:anywhere}
.orch-t-body .meta-line{overflow-wrap:anywhere}
.orch-auto li{margin:3px 0;overflow-wrap:anywhere}
.orch-list{list-style:none;padding:0;margin:6px 0 0}
.orch-list li{display:flex;flex-direction:column;gap:2px;padding:8px 0;border-bottom:1px solid var(--line)}
.orch-list li:last-child{border-bottom:0}
.orch-li-h{overflow-wrap:anywhere}
.orch-li-d{font-size:13px;color:var(--txt-2);overflow-wrap:anywhere}
