/* Compléments v2 par-dessus legacy.css (la CSS d'origine de l'AdminUI). */

/* ===== Skin « web app TaupOGuide » =====
   Structure de l'ancien admin conservée ; couleurs alignées sur l'app :
   dominante ARDOISE (slate) + blanc, le rouge n'est qu'un accent ponctuel. */
:root {
  --primary: #334155;          /* slate-700 : la teinte dominante de l'app */
  --primary-dark: #1E293B;     /* slate-800 */
  --bg: #F1F5F9;               /* slate-100 : fond de l'app */
  --border: #CBD5E1;           /* slate-300 : bordures d'inputs */
  --ok: #2E7D32;               /* vert validation de l'app */
  --accent: #FF5A5F;           /* corail : accent ponctuel seulement */
  --txt: #1E293B;
}
body { font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; color: var(--txt); }
button:hover { background: var(--primary-dark); transform: none; }
th { background: var(--primary); }
h1 { display: flex; align-items: center; justify-content: center; gap: 12px; color: var(--primary-dark); }
h1 img { height: 44px; border-radius: 10px; }
label { color: #475569; }
#btnSave { background: var(--ok); }
#btnSave:hover { background: #1B5E20; }
#btnNew { background: var(--ok) !important; }
.dash-controls, .dash-table-wrapper, .header-wrapper { border: 1px solid #E2E8F0; box-shadow: 0 1px 3px rgba(15,23,42,.07); }

/* En-tête et navigation : aucun élément ne peut pousser la page hors écran. */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
.app-header { width: calc(100% - 24px); max-width: 1600px; margin: 0 auto 20px; display: grid;
  grid-template-columns: minmax(180px,240px) minmax(500px,1fr) minmax(300px,380px); gap: 12px;
  align-items: center; padding: 12px 16px; box-sizing: border-box; }
.admin-brand { display: flex; align-items: center; min-width: 0; gap: 10px; color: var(--primary-dark);
  font-size: 18px; font-weight: 750; text-decoration: none; }
.admin-brand img { width: 38px; height: 38px; flex: 0 0 auto; object-fit: cover; border-radius: 9px; }
.admin-brand span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.admin-nav { display: flex; align-items: center; justify-content: flex-start; gap: 3px; min-width: 0; padding: 4px; border-radius: 12px; background: #F1F5F9; overflow-x:auto; scrollbar-width:thin; }
.nav-btn { display: inline-flex; align-items: center; justify-content: center; gap: 5px; width: auto;
  flex: 1 1 auto; padding: 8px 8px; border: 0; border-radius: 9px; background: transparent; color: #64748B;
  white-space: nowrap; font-size: 12.5px; font-weight: 650; }
.nav-btn:hover { color: #1E293B; background: #E2E8F0; }
.nav-btn.active { color: #fff; background: var(--primary); box-shadow: 0 1px 2px rgba(15,23,42,.16); }
.nav-btn.active .mi { color: inherit; }
.admin-context { display: flex; align-items: center; justify-content: flex-end; gap: 10px; min-width: 0; }
.admin-context select { min-width: 155px; max-width: 230px; font-weight: 700; }
.admin-context input { width: 130px; min-width: 90px; }

.editor-toolbar { display: grid; grid-template-columns: auto minmax(220px,1fr) auto auto; gap: 10px;
  align-items: center; margin-bottom: 20px; }
.editor-title { min-width: 0; margin: 0; border: 0; overflow-wrap: normal; word-break: normal; }
.authenticated-author { display: grid; grid-template-columns: 30px minmax(0,1fr); align-items: center;
  min-height: 42px; padding: 7px 10px; box-sizing: border-box; border: 1px solid #b7d2b4;
  border-radius: 8px; background: #f4faf2; color: #234b28; }
.authenticated-author > .mi { grid-row: 1/3; color: #2e7d32; }
.authenticated-author strong,.authenticated-author small { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.authenticated-author small { color: #64748b; font-size: 10.5px; }

/* Sélecteur de massif maison : le menu natif variait selon Windows et cassait le style. */
.massif-picker { position: relative; min-width: 245px; max-width: 310px; }
.massif-picker-button { display: grid; grid-template-columns: 30px minmax(0,1fr) 22px;
  align-items: center; gap: 8px; width: 100%; min-height: 48px; padding: 7px 9px;
  border: 1px solid #CBD5E1; border-radius: 12px; background: #fff; color: #1E293B;
  text-align: left; box-shadow: 0 1px 2px rgba(15,23,42,.05); }
.massif-picker-button:hover, .massif-picker.open .massif-picker-button {
  border-color: #64748B; background: #F8FAFC; color: #0F172A; }
.massif-picker.open .massif-picker-button { box-shadow: 0 0 0 3px rgba(51,65,85,.12); }
.massif-picker-symbol { display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; margin: 0; border-radius: 9px; background: #E2E8F0;
  color: #334155; font-size: 18px; }
.massif-picker-copy, .massif-option-copy { min-width: 0; }
.massif-picker-copy b, .massif-picker-copy small,
.massif-option-copy b, .massif-option-copy small { display: block; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap; }
.massif-picker-copy b { color: #0F172A; font-size: 13.5px; line-height: 1.2; }
.massif-picker-copy small { margin-top: 2px; color: #64748B; font-size: 10.5px; font-weight: 550; }
.massif-picker-chevron { margin: 0; color: #64748B; transition: transform .18s ease; }
.massif-picker.open .massif-picker-chevron { transform: rotate(180deg); }
.massif-picker-menu { position: absolute; z-index: 1200; top: calc(100% + 8px); right: 0;
  width: min(330px, calc(100vw - 24px)); max-height: min(430px, 70vh); overflow-y: auto;
  padding: 7px; border: 1px solid #CBD5E1; border-radius: 14px; background: #fff;
  box-shadow: 0 18px 45px rgba(15,23,42,.2); }
.massif-picker-menu[hidden] { display: none !important; }
.massif-picker-option { display: grid; grid-template-columns: 30px minmax(0,1fr) 24px;
  align-items: center; gap: 9px; width: 100%; padding: 9px 10px; border: 0;
  border-radius: 9px; background: transparent; color: #334155; text-align: left; }
.massif-picker-option:hover { background: #F1F5F9; color: #0F172A; }
.massif-picker-option.selected { background: #E8F3EC; color: #14532D; }
.massif-option-icon { display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px; margin: 0; border-radius: 8px; background: #E2E8F0;
  color: #334155; font-size: 17px; }
.massif-picker-option.selected .massif-option-icon { background: #BBF7D0; color: #166534; }
.massif-status { justify-self: center; width: 10px; height: 10px; border: 2px solid #94A3B8;
  border-radius: 50%; background: #fff; box-shadow: 0 0 0 4px #F1F5F9; }
.massif-status.published { border-color: #15803D; background: #22C55E; box-shadow: 0 0 0 4px #DCFCE7; }
.massif-option-copy b { color: inherit; font-size: 13px; }
.massif-option-copy small { margin-top: 2px; color: #64748B; font-size: 10.5px; font-weight: 500; }
.massif-option-check { margin: 0; color: #15803D; opacity: 0; }
.massif-picker-option.selected .massif-option-check { opacity: 1; }

/* icônes Material (les mêmes glyphes que l'app Compose) */
.mi { font-family: 'Material Icons'; font-weight: normal; font-style: normal; font-size: 17px;
  line-height: 1; vertical-align: -3px; margin-right: 5px; color: #64748B;
  display: inline-block; -webkit-font-smoothing: antialiased; }
.massif-picker-symbol.mi, .massif-option-icon.mi, .massif-option-check.mi,
.massif-picker-chevron.mi { display: inline-flex; align-items: center; justify-content: center;
  margin: 0; line-height: 1; vertical-align: middle; }
.anchor-ico { height: 20px; vertical-align: -5px; margin-left: 6px; border-radius: 4px; }
.anchor-ico-dash { height: 22px; vertical-align: middle; margin-left: 6px; border-radius: 4px; }

/* boutons « pilule » façon app (toolbar dashboard) */
.tbtn { display: inline-flex; align-items: center; gap: 6px; background: #fff; color: #334155;
  border: 1px solid #CBD5E1; border-radius: 999px; padding: 10px 18px; font-weight: 600;
  font-size: 14px; white-space: nowrap; width: auto; }
.tbtn:hover { background: #F1F5F9; color: #0F172A; transform: none; }
.tbtn .mi { font-size: 18px; margin-right: 2px; color: inherit; }
.tbtn-primary { background: var(--ok); color: #fff; border-color: transparent; }
.tbtn-primary:hover { background: #1B5E20; color: #fff; }

/* liens de cavité (partageables) — sobres, pas de bleu criard */
.cave-link { color: #1E293B; text-decoration: none; }
.cave-link:hover { color: var(--primary); text-decoration: underline; }

/* barre de recherche bien visible */
#dashSearch { flex: 2 1 300px; min-width: 220px; font-size: 16px; }
.dash-controls { flex-wrap: wrap; gap: 10px; align-items: center; }
.all-massifs-notice { flex: 1 1 100%; align-items: center; gap: 8px; padding: 9px 12px;
  border: 1px solid #BAE6FD; border-radius: 10px; background: #F0F9FF;
  color: #0C4A6E; font-size: 12.5px; }
.all-massifs-notice .mi { color: #0369A1; margin: 0; }
.dash-controls > select { width: auto; flex: 0 1 190px; min-width: 150px; }
.dash-actions { display: flex; flex: 1 1 100%; gap: 8px; flex-wrap: wrap; justify-content: flex-end;
  padding-top: 10px; border-top: 1px solid #E2E8F0; }
.dash-actions .tbtn { flex: 0 0 auto; padding: 9px 14px; }
.tbtn:disabled { opacity: .48; cursor: not-allowed; background: #F8FAFC; color: #64748B; }
.tbtn:disabled:hover { background: #F8FAFC; color: #64748B; }
.massif-column { display: none; }
.show-massif-column .massif-column { display: table-cell; }
.massif-tag { display: inline-flex; align-items: center; padding: 4px 8px; border-radius: 999px;
  background: #E2E8F0; color: #334155; font-size: 11px; font-weight: 750; white-space: nowrap; }

/* Vue générale des massifs. */
.general-view { max-width: 1300px; margin: 0 auto 20px; box-sizing: border-box; }
.general-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 20px;
  padding: 26px 28px; margin-bottom: 14px; color: #fff; border-radius: 16px;
  background: linear-gradient(135deg,#1E293B,#334155 58%,#276749); box-shadow: 0 8px 24px rgba(15,23,42,.16); }
.general-heading h2 { margin: 4px 0 6px; padding: 0; border: 0; color: #fff; font-size: 28px; }
.general-heading p { margin: 0; color: #CBD5E1; max-width: 650px; }
.general-heading .tbtn { flex: 0 0 auto; }
.eyebrow { color: #86EFAC; font-size: 11px; font-weight: 800; letter-spacing: .13em; text-transform: uppercase; }
.general-stats { display: grid; grid-template-columns: repeat(4,minmax(0,1fr)); gap: 10px; margin-bottom: 14px; }
.general-stat { padding: 15px 18px; border: 1px solid #E2E8F0; border-radius: 12px; background: #fff;
  box-shadow: 0 1px 3px rgba(15,23,42,.06); }
.general-stat b { display: block; color: #0F172A; font-size: 24px; line-height: 1.1; }
.general-stat span { color: #64748B; font-size: 12px; }
.massif-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 14px; }
.massif-card { min-width: 0; overflow: hidden; border: 1px solid #CBD5E1; border-radius: 14px;
  background: #fff; box-shadow: 0 2px 8px rgba(15,23,42,.06); }
.massif-card-head { display: flex; justify-content: space-between; gap: 12px; align-items: flex-start;
  padding: 18px 20px; border-bottom: 1px solid #E2E8F0; background: #F8FAFC; }
.massif-card-head h3 { margin: 0 0 4px; color: #0F172A; font-size: 20px; }
.massif-card-head p { margin: 0; color: #64748B; font-size: 12px; }
.massif-card-actions { display: flex; gap: 5px; flex: 0 0 auto; }
.icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px;
  padding: 0; border: 1px solid #CBD5E1; border-radius: 8px; background: #fff; color: #475569; }
.icon-btn:hover { background: #E2E8F0; color: #0F172A; }
.icon-btn.danger { color: #B91C1C; }
.massif-card-body { padding: 16px 20px 18px; }
.manage-section + .manage-section { margin-top: 18px; padding-top: 16px; border-top: 1px solid #E2E8F0; }
.manage-section-title { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 9px; }
.manage-section-title h4 { margin: 0; color: #334155; font-size: 13px; text-transform: uppercase; letter-spacing: .04em; }
.mini-add { width: auto; padding: 6px 9px; border-radius: 7px; background: #E2E8F0; color: #334155; font-size: 12px; }
.mini-add:hover { background: #CBD5E1; }
.manage-list { display: grid; gap: 6px; }
.manage-row { display: flex; align-items: center; gap: 8px; min-width: 0; padding: 8px 9px;
  border-radius: 8px; background: #F8FAFC; }
.manage-row-main { flex: 1; min-width: 0; }
.manage-row-main b, .manage-row-main a { display: block; overflow: hidden; text-overflow: ellipsis;
  white-space: nowrap; color: #1E293B; font-size: 13px; }
.manage-row-main a:hover { color: #276749; }
.manage-row-main small { display: block; color: #64748B; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.row-action { width: 28px; height: 28px; padding: 0; border-radius: 6px; background: transparent; color: #64748B; }
.row-action:hover { background: #E2E8F0; color: #0F172A; }
.row-action.danger { color: #B91C1C; }
.empty-manage { padding: 9px; border: 1px dashed #CBD5E1; border-radius: 8px; color: #94A3B8;
  text-align: center; font-size: 12px; }
.form-help { margin: -4px 0 12px; color: #64748B; font-size: 12px; }
.modal-form-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; }
.modal-form-grid .full { grid-column: 1/-1; }
.modal-form-grid label { display: block; margin-bottom: 5px; font-size: 12px; font-weight: 700; }
.modal-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }
.modal-actions button { width: auto; }

/* Formulaire de promotion d'un livre topo. */
.topo-book-form .modal-form-grid { gap: 18px 16px; }
.book-form-intro { display: flex; align-items: center; gap: 12px; margin-bottom: 20px;
  padding: 13px 15px; border: 1px solid #D7E1DA; border-radius: 12px; background: #F6FAF7; }
.book-form-intro > .mi { display: inline-flex; align-items: center; justify-content: center;
  flex: 0 0 38px; width: 38px; height: 38px; margin: 0; border-radius: 10px;
  background: #DCEFE3; color: var(--primary); font-size: 21px; }
.book-form-intro b, .book-form-intro span { display: block; }
.book-form-intro b { color: #1E293B; font-size: 13.5px; }
.book-form-intro span { margin-top: 2px; color: #64748B; font-size: 12px; }
.topo-book-form .book-field { min-width: 0; }
.topo-book-form .book-field label { display: flex; align-items: center; gap: 6px;
  margin-bottom: 7px; color: #334155; font-size: 12.5px; font-weight: 750; }
.topo-book-form .book-field label .mi { margin: 0; color: #64748B; font-size: 16px;
  vertical-align: middle; }
.topo-book-form .required-mark { color: #B91C1C; font-style: normal; }
.topo-book-form .book-field input, .topo-book-form .book-field textarea {
  display: block; box-sizing: border-box; width: 100%; margin: 0; padding: 12px 14px;
  border: 1px solid #CBD5E1; border-radius: 10px; outline: 0; background: #F8FAFC;
  color: #1E293B; font: inherit; box-shadow: 0 1px 2px rgba(15,23,42,.03);
  transition: border-color .16s ease, box-shadow .16s ease, background .16s ease; }
.topo-book-form .book-field input:hover, .topo-book-form .book-field textarea:hover {
  border-color: #94A3B8; background: #fff; }
.topo-book-form .book-field input:focus, .topo-book-form .book-field textarea:focus {
  border-color: var(--primary); background: #fff; box-shadow: 0 0 0 3px rgba(39,103,73,.13); }
.topo-book-form .book-field input::placeholder,
.topo-book-form .book-field textarea::placeholder { color: #94A3B8; font-style: normal; }
.topo-book-form .book-field textarea { min-height: 112px; resize: vertical; line-height: 1.5; }
.topo-book-form .field-help { display: block; margin-top: 6px; color: #64748B; font-size: 11.5px; }
.topo-book-form .modal-actions { margin-top: 24px; padding-top: 18px; border-top: 1px solid #E2E8F0; }

/* barre de complétude */
.pct { display: flex; align-items: center; gap: 6px; font-size: 12px; }
.bar { background: #e9ecef; border-radius: 999px; height: 9px; overflow: hidden; flex: 1; min-width: 70px; }
.bar i { display: block; height: 100%; border-radius: 999px; }

/* flèche de synthèse + chips rempli / manquant */
.expander { cursor: pointer; border: 0; background: none; color: #888; font-size: 13px;
  padding: 2px 6px; transition: transform .15s; font-weight: bold; }
.expander.open { transform: rotate(90deg); color: var(--primary); }
tr.detrow td { background: #f6faf8; padding: 12px 14px 14px 44px; }
.chip { display: inline-block; border-radius: 999px; padding: 3px 10px; font-size: 11.5px;
  font-weight: bold; margin: 2px 4px 2px 0; }
.chip-ok { background: #d5f5e3; color: #1e7e45; }
.chip-miss { background: #fdebd0; color: #b9770e; }

/* éditeurs riches (contenteditable, look proche Quill) */
.richtool { display: flex; gap: 4px; border: 1px solid #ccc; border-bottom: 0;
  border-radius: 5px 5px 0 0; background: #fafafa; padding: 5px 8px; }
.richtool button { background: #fff; color: #333; border: 1px solid #ddd; padding: 3px 10px;
  font-size: 12.5px; font-weight: normal; width: auto; border-radius: 4px; }
.richtool button:hover { background: var(--primary); color: #fff; }
.richbox { min-height: 90px; max-height: 320px; overflow-y: auto; border: 1px solid #ccc;
  border-radius: 0 0 5px 5px; background: #fff; padding: 10px 12px; font-size: 14px; }
.richbox:focus { outline: 2px solid var(--primary); }

/* équipement : tableau pleine largeur, calculette en PANNEAU FLOTTANT (retour PA :
   « on ne voit pas toute la calculette » — pop-up sur le côté qui ne cache rien) */
.equip-layout { display: block; }
.equip-table-container { overflow-x: auto; }
.equip-calc-container { display: none; position: fixed; top: 12px; right: 12px; width: 400px;
  max-height: calc(100vh - 24px); overflow-y: auto; z-index: 900; border-radius: 12px;
  box-shadow: 0 8px 30px rgba(15,23,42,.45); background: #121212; }
.equip-calc-container.open { display: block; }
.calc-head { position: sticky; top: 0; z-index: 5; display: flex; justify-content: space-between;
  align-items: center; background: #1e1e1e; color: #fff; padding: 10px 14px;
  border-bottom: 1px solid #333; }
@media (max-width: 1000px) { .equip-calc-container { width: 94vw; right: 3vw; } }

/* sélecteur d'ancrage avec les logos de l'app */
.seg { display: flex; gap: 6px; flex-wrap: wrap; }
.seg .seg-opt { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--border);
  border-radius: 8px; padding: 7px 12px; cursor: pointer; background: #fff; font-size: 13.5px; }
.seg .seg-opt img { height: 20px; border-radius: 3px; }
.seg .seg-opt.sel { border-color: var(--primary); background: #EEF2F7; font-weight: bold;
  outline: 2px solid var(--primary); }

/* statut sur UNE ligne (retour PA) */
.status-wrapper { flex-wrap: nowrap; white-space: nowrap; }
.status-wrapper .badge { white-space: nowrap; padding: 4px 8px; font-size: 12.5px; }

/* listes déroulantes modernisées (chevron custom, angles arrondis) */
select { appearance: none; -webkit-appearance: none; border-radius: 8px; padding-right: 32px;
  background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%23475569'%3E%3Cpath d='M7 10l5 5 5-5z'/%3E%3C/svg%3E") no-repeat right 10px center / 14px; }
select:hover { border-color: var(--primary); }
input[type=text], input[type=date], input[type=number], input[type=password] { border-radius: 8px; }

/* bannière de proposition de conversion */
.conv-banner { display: flex; gap: 14px; align-items: center; justify-content: space-between;
  flex-wrap: wrap; background: #FFF8E1; border: 1px solid #FFE082; border-radius: 10px;
  padding: 12px 16px; margin-bottom: 14px; }
.muted-sm { font-size: 12px; color: #8D6E63; font-weight: normal; margin-top: 3px; max-width: 640px; }

/* revue de conversion : overlay assombri (on voit derrière), carte décalée à gauche
   pour laisser l'Assistant visible à droite */
/* revue : overlay assombri CENTRÉ, carte + Assistant côte à côte */
#convOverlay { display: none; position: fixed; inset: 0; background: rgba(15,23,42,.6);
  z-index: 850; align-items: center; justify-content: center; padding: 16px; overflow: auto; }
.conv-row { display: flex; gap: 16px; align-items: stretch; max-width: 100%; }
.conv-card { background: #263238; color: #ECEFF1; border-radius: 14px; padding: 18px 22px;
  width: min(600px, 58vw); box-shadow: 0 10px 40px rgba(0,0,0,.5); align-self: center; }
/* en revue, l'Assistant est DANS la rangée (collé à droite des deux champs) */
.conv-row #calcPanel { position: static !important; width: 400px; right: auto; top: auto;
  max-height: 90vh; box-shadow: 0 10px 40px rgba(0,0,0,.55); }
@media (max-width: 1100px) { .conv-row { flex-direction: column; align-items: center; }
  .conv-card { width: 92vw; } .conv-row #calcPanel { width: 92vw; } }

/* mode revue : masque « Voir les règles » + Ajouter/Mettre à jour + le strip du panneau
   (les blocs sont montrés dans la carte de revue) */
#calcPanel.review-mode #btn-submit-new,
#calcPanel.review-mode #btn-submit-edit,
#calcPanel.review-mode .calc-hide-review,
#calcPanel.review-mode #assistTokens { display: none !important; }

/* Import rapide + écran vert : inutiles ici (on montre les blocs ailleurs) — masqués partout */
#calcPanel .calc-import { display: none !important; }
/* boutons Ajouter/Mettre à jour de la calculette : inutiles (édition temps réel) */
#calcPanel #btn-submit-new, #calcPanel #btn-submit-edit { display: none !important; }

/* types de blocs : modificateur (en y, frac) séparé + connecteur/descente éditable */
.tok-mod { border-left: 3px solid #9575cd !important; font-style: italic; }
.tok-link { border-left: 3px solid #29b6f6 !important; font-weight: bold; }
.conn-opt:hover { background: #455A64 !important; }

/* diff façon Word (revue des modifications) */
.worddiff del { color: #c62828; background: #ffe6e6; text-decoration: line-through; }
.worddiff ins { color: #1b5e20; background: #e6ffe6; text-decoration: none; }
.worddiff span { color: #333; }

/* horloge de suivi de modif par champ (comme le GAS) */
.field-hist { cursor: pointer; margin-left: 6px; font-size: 13px; opacity: .75; vertical-align: middle; }
.field-hist:hover { opacity: 1; }

/* blocs DIRECTEMENT dans la cellule Amarrage (édition d'une ligne) */
.fieldtokens { display: flex; flex-wrap: wrap; gap: 3px; min-height: 40px; padding: 5px 6px;
  border: 2px solid #f0ad4e; border-radius: 6px; background: #fffdf5; align-items: center; }
.fieldtokens:empty::before { content: 'Construisez avec l’Assistant →'; color: #b9770e; font-size: 12px; }
.fieldtokens .tok { background: #eef1ef; border: 1px solid #cfd8dc; color: #263238; border-radius: 6px;
  padding: 3px 8px; margin: 0; font-size: 13.5px; cursor: pointer; }
.fieldtokens .tok b { color: #d9534f; }
.fieldtokens .tok.sel { background: #F9A825; border-color: #F57F17; color: #1b1b1b; }
.fieldtokens .tok.sel b { color: #7f1d1d; }
.fieldtokens .tok-caret { background: #f0ad4e; min-height: 20px; }

/* Assistant flottant qui « sort du champ » : petite pointe + ombre marquée */
#calcPanel.open:not(.review-mode) { box-shadow: -2px 6px 30px rgba(15,23,42,.4); }

/* curseur d'insertion entre blocs */
.tok-caret { display: inline-block; width: 3px; align-self: stretch; min-height: 22px;
  background: #FFD54F; border-radius: 2px; animation: caretBlink 1s step-end infinite; }
@keyframes caretBlink { 50% { opacity: 0; } }
.tok.sel { background: #F9A825; border-color: #FFD54F; color: #1b1b1b; }
.tok.sel b { color: #7f1d1d; }
.conv-prog { font-size: 14px; font-weight: bold; color: #FFD54F; margin-bottom: 8px; }
.conv-ctx { font-size: 11.5px; color: #78909C; margin: 4px 0; font-family: monospace;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.conv-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; font-size: 13px; margin: 6px 0; }
.conv-cols b { color: #90A4AE; font-size: 11px; text-transform: uppercase; }
.conv-txt { background: #1b1b1b; border-radius: 8px; padding: 10px 12px; margin-top: 4px;
  font-family: monospace; font-size: 15px; min-height: 52px; word-break: break-word; }
.conv-live { color: #00e676; }
.tok { display: inline-block; background: #37474F; border: 1px solid #546E7A; border-radius: 7px;
  padding: 3px 8px; margin: 2px 3px; cursor: pointer; font-size: 13.5px; }
.tok b { color: #EF9A9A; font-weight: bold; }
.tok:hover { background: #455A64; border-color: #EF9A9A; }
.conv-actions { display: flex; gap: 8px; margin-top: 12px; }
.conv-actions button { flex: 1; padding: 11px 4px; font-size: 14px; }
#convOk { background: #2E7D32; } #convSkip { background: #546E7A; } #convStop { background: #c62828; }
.amarrage-locked { background: #F1F8E9 !important; cursor: pointer; }

/* badge JSON calculette sur les lignes d'équipement */
.json-badge { display: inline-block; font-size: 10.5px; background: #E8F5E9; color: #2E7D32;
  border-radius: 6px; padding: 1px 6px; margin-top: 3px; font-weight: bold; }
.field-group { margin-bottom: 12px; }
.field-group > label { font-weight: bold; display: block; margin-bottom: 4px; }

/* critères : radios emoji (complète le style d'origine) */
.radio-label span { min-width: 26px; display: inline-block; text-align: center; }
.criteria-box { margin-top: 6px; }

/* équipement */
#equipTable textarea { width: 100%; border: 1px solid #ccc; border-radius: 4px; font-family: inherit;
  font-size: 13px; padding: 5px 7px; box-sizing: border-box; }
.btn-action-mini { padding: 4px 7px; font-size: 12px; border-radius: 4px; border: 0; cursor: pointer;
  background: #eef1ef; color: #333; width: auto; font-weight: normal; }
.btn-action-danger-mini { background: #fdecec; color: #d9534f; }
.cell-origine { font-size: 12px; vertical-align: middle; background: #fbfbfb; }

/* médias */
.media-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:14px}.media-item{display:grid;grid-template-rows:210px auto auto;border:1px solid #d8e2d6;border-radius:14px;overflow:hidden;background:#fff;box-shadow:0 5px 18px rgba(24,48,29,.08);transition:transform .15s,box-shadow .15s}.media-item:hover{transform:translateY(-2px);box-shadow:0 9px 24px rgba(24,48,29,.13)}.media-preview{position:relative;width:100%;height:210px;padding:0;border:0;border-radius:0;background:#eef3ed;overflow:hidden;color:#56715a}.media-preview>img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .2s}.media-item.topography .media-preview>img{object-fit:contain;padding:8px;box-sizing:border-box;background:#fff}.media-preview:hover>img{transform:scale(1.025)}.media-preview>.mi{font-size:52px}.media-origin{position:absolute;left:9px;bottom:9px;display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:999px;background:rgba(15,23,42,.82);color:#fff;font-size:10.5px;font-weight:800}.media-origin.local{background:rgba(30,100,47,.9)}.media-origin .mi{font-size:14px}.media-item .mi-body{display:grid;grid-template-columns:1fr 78px;gap:9px;padding:11px 11px 8px}.media-item .mi-body label{display:grid;gap:4px;font-size:10.5px;font-weight:800;color:#64748b}.media-item .mi-body select,.media-item .mi-body input{width:100%;box-sizing:border-box;padding:7px 8px;border:1px solid #cbd5e1;border-radius:7px;background:#fff;font-size:12px}.media-item .mi-actions{display:flex;justify-content:flex-end;gap:6px;padding:0 11px 11px}.media-item .mi-actions button{display:grid;place-items:center;width:34px;height:32px;padding:0;background:#f1f5f1;color:#36533a;border:1px solid #d9e2d8;border-radius:8px}.media-item .mi-actions button:hover:not(:disabled){background:#e1ebdf}.media-item .mi-actions button:disabled{opacity:.35;cursor:not-allowed}.media-item .mi-actions .media-delete{color:#b42318;background:#fff1f0;border-color:#ffd5d2}.media-empty{grid-column:1/-1;display:grid;justify-items:center;gap:5px;padding:30px;border:1px dashed #b9c9b6;border-radius:14px;color:#64748b;background:#f8faf7}.media-empty>.mi{font-size:36px;color:#78917a}.media-empty small{font-size:12px}.modal-content.modal-wide{max-width:min(96vw,1600px)}.media-viewer-actions{display:flex;justify-content:flex-end;margin-bottom:10px}.media-viewer-actions .tbtn{width:auto;text-decoration:none}.media-modal-image{display:block;width:auto;max-width:100%;max-height:calc(100vh - 175px);margin:auto;object-fit:contain}.media-pdf-preview{width:100%;height:76vh;border:0;border-radius:10px;background:#eef2f7}

/* Traces GPX par cavité. */
.section-help { margin: 9px 0 16px; color: #64748B; font-size: 13px; line-height: 1.5; }
.gpx-upload-panel { display: grid; grid-template-columns: minmax(210px,1fr) minmax(190px,1fr);
  gap: 12px; align-items: end; padding: 16px; border: 1px solid #CBD5E1; border-radius: 12px;
  background: #F8FAFC; }
.gpx-upload-panel label { display: block; margin-bottom: 5px; font-size: 12px; font-weight: 700; }
.gpx-upload-panel input { width: 100%; background: #fff; }
.gpx-description-field { grid-column: 1/-1; }
.gpx-upload-panel .tbtn { justify-self: end; }
.gpx-list { display: grid; gap: 9px; margin-top: 12px; }
.gpx-card { display: flex; align-items: center; gap: 12px; min-width: 0; padding: 12px 14px;
  border: 1px solid #D7E1DA; border-radius: 11px; background: #fff; box-shadow: 0 1px 3px rgba(15,23,42,.05); }
.gpx-card-icon { display: flex; align-items: center; justify-content: center; flex: 0 0 42px;
  width: 42px; height: 42px; border-radius: 10px; background: #DCFCE7; color: #276749; }
.gpx-card-icon .mi { margin: 0; color: inherit; font-size: 23px; }
.gpx-card-main { flex: 1; min-width: 0; }
.gpx-card-main b { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: #1E293B; }
.gpx-card-main p { margin: 3px 0; color: #475569; font-size: 12.5px; overflow-wrap: anywhere; }
.gpx-card-main small { color: #64748B; }
.gpx-card-actions { display: flex; gap: 6px; flex: 0 0 auto; }
.gpx-card-actions .tbtn { padding: 7px 10px; border-radius: 8px; font-size: 12px; text-decoration: none; }
.gpx-empty { padding: 18px; border: 1px dashed #CBD5E1; border-radius: 10px; text-align: center;
  color: #64748B; background: #F8FAFC; }

@media (max-width: 700px) {
  .section-help { margin-top: 8px; }
  .gpx-upload-panel { grid-template-columns: 1fr; }
  .gpx-description-field { grid-column: auto; }
  .gpx-upload-panel .tbtn { width: 100%; justify-content: center; }
  .gpx-card { align-items: flex-start; flex-wrap: wrap; }
  .gpx-card-main { min-width: calc(100% - 58px); }
  .gpx-card-actions { width: 100%; justify-content: flex-end; }
}

/* revue des modifications enregistrées (cartes) */
.chg-list { display: flex; flex-direction: column; gap: 6px; }
.chg-card { border: 1px solid var(--border); border-left: 4px solid var(--primary);
  border-radius: 6px; padding: 8px 12px; background: #fafbfc; }
.chg-field { font-weight: bold; color: var(--primary); font-size: 13px; margin-bottom: 2px; }
.chg-vals { font-size: 13px; }
.chg-old { color: #d9534f; text-decoration: line-through; }
.chg-arrow { color: #999; margin: 0 6px; }
.chg-new { color: #2e7d32; font-weight: 600; }

/* historique */
.hist-item { display: flex; gap: 10px; padding: 8px 0; border-bottom: 1px solid #eee; font-size: 13px; }
.hist-date { white-space: nowrap; color: #888; font-size: 12px; }
.diff-old { color: #d9534f; text-decoration: line-through; }
.diff-new { color: var(--primary); font-weight: bold; }

/* toast */
#toast { display: none; position: fixed; bottom: 22px; left: 50%; transform: translateX(-50%);
  background: #222; color: #fff; border-radius: 8px; padding: 11px 20px; z-index: 300;
  font-size: 14px; max-width: 90vw; box-shadow: 0 4px 14px rgba(0,0,0,.3); }

/* divers */
#dashTable td { vertical-align: middle; }
.dash-controls select { padding: 12px; }
#radarBox svg { max-width: 100%; }

/* Vue tableur de la base — lecture seule, proche de Google Sheets / Excel. */
.database-view { background: #fff; border: 1px solid #CBD5E1; border-radius: 12px;
  box-shadow: 0 4px 18px rgba(15,23,42,.10); overflow: hidden; }
.database-toolbar { display: flex; align-items: center; gap: 12px; padding: 14px 16px;
  background: #F8FAFC; border-bottom: 1px solid #E2E8F0; flex-wrap: wrap; }
.database-title { min-width: 210px; flex: 1; }
.database-title h2 { margin: 0; border: 0; padding: 0; color: #1E293B; font-size: 19px; }
.database-title h2 .mi { color: var(--primary); font-size: 21px; }
.database-title p { margin: 3px 0 0; color: #64748B; font-size: 12.5px; }
.database-search { display: flex; align-items: center; gap: 5px; min-width: 260px; margin: 0;
  border: 1px solid #CBD5E1; border-radius: 9px; padding: 0 10px; background: #fff; }
.database-search:focus-within { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(39,103,73,.13); }
.database-search .mi { margin: 0; color: #64748B; }
.database-search input { border: 0; outline: 0; padding: 10px 2px; width: 100%; min-width: 0;
  background: transparent; box-shadow: none; }

.database-tabs { display: flex; align-items: flex-end; gap: 2px; overflow-x: auto; overflow-y: hidden; padding: 10px 12px 0;
  background: #F1F5F9; border-bottom: 1px solid #CBD5E1; scrollbar-width: thin; }
.database-tab { display: inline-flex; align-items: center; gap: 8px; width: auto; flex: 0 0 auto;
  padding: 9px 14px 10px; border: 1px solid transparent; border-bottom: 0; border-radius: 8px 8px 0 0;
  background: transparent; color: #475569; font-size: 13px; font-weight: 600; }
.database-tab:hover { background: #E2E8F0; color: #1E293B; }
.database-tab.active { background: #fff; color: var(--primary-dark); border-color: #CBD5E1;
  position: relative; top: 1px; }
.database-tab b { border-radius: 999px; padding: 2px 7px; background: #E2E8F0; color: #64748B;
  font-size: 10.5px; }
.database-tab.active b { background: #DCEFE3; color: var(--primary-dark); }

.database-meta { display: flex; justify-content: space-between; gap: 12px; padding: 8px 14px;
  color: #475569; font-size: 12px; border-bottom: 1px solid #E2E8F0; }
.database-hint { color: #94A3B8; }
.database-table-viewport { height: min(64vh, 680px); min-height: 390px; overflow: auto;
  position: relative; background: #fff; }
.database-table { border-collapse: separate; border-spacing: 0; width: max-content; min-width: 100%;
  table-layout: fixed; margin: 0; font-size: 12.5px; }
.database-table th, .database-table td { height: 34px; max-width: 360px; padding: 6px 10px;
  border-right: 1px solid #E2E8F0; border-bottom: 1px solid #E2E8F0; text-align: left;
  vertical-align: top; box-sizing: border-box; }
.database-table thead th { position: sticky; top: 0; z-index: 4; min-width: 130px;
  background: #276749; color: #fff; white-space: nowrap; font-weight: 650; }
.database-table tbody tr:nth-child(even) td,
.database-table tbody tr:nth-child(even) th { background: #F8FAFC; }
.database-table tbody tr:hover td,
.database-table tbody tr:hover th { background: #ECFDF3; }
.database-row-number { position: sticky; left: 0; z-index: 3; min-width: 52px !important; width: 52px;
  max-width: 52px !important; text-align: right !important; color: #64748B; background: #F1F5F9;
  font-variant-numeric: tabular-nums; }
.database-table thead .database-row-number { z-index: 5; color: #D1FAE5; background: #1F563D; }
.database-cell { min-width: 130px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  cursor: zoom-in; color: #1E293B; }
.database-cell.expanded { min-width: 320px; max-width: 620px; white-space: pre-wrap; overflow: visible;
  overflow-wrap: anywhere; cursor: zoom-out; background: #FFFCE8 !important; }
.database-cell-number { text-align: right !important; font-variant-numeric: tabular-nums; }
.database-cell-boolean { text-align: center !important; }
.database-cell-date { font-variant-numeric: tabular-nums; }
.database-cell-editable { position: relative; padding-right: 28px !important; cursor: cell; }
.database-cell-editable::after { content: '✎'; position: absolute; top: 7px; right: 8px;
  color: #2E7D32; opacity: .45; font-size: 13px; }
.database-cell-editable:hover { outline: 2px solid #66BB6A; outline-offset: -2px; background: #F0FDF4 !important; }
.database-cell-editable:hover::after { opacity: 1; }
.database-cell-locked { cursor: not-allowed; background-image: repeating-linear-gradient(-45deg,
  transparent, transparent 6px, rgba(148,163,184,.08) 6px, rgba(148,163,184,.08) 12px); }
.database-cell-locked::after { content: '🔒'; opacity: .7; font-size: 11px; }
.database-cell.editing { min-width: 330px; max-width: 520px; padding: 5px !important;
  overflow: visible; background: #FFFCE8 !important; outline: 2px solid #F9A825; outline-offset: -2px; }
.database-cell.editing::after { display: none; }
.database-cell-editor { display: flex; align-items: flex-start; gap: 5px; min-width: 310px; }
.database-editor-control { flex: 1; width: auto; min-width: 230px; margin: 0; padding: 7px 9px;
  border: 1px solid #94A3B8; border-radius: 6px; font: inherit; background-color: #fff; }
textarea.database-editor-control { min-height: 105px; resize: both; white-space: pre-wrap; }
.database-editor-actions { display: flex; gap: 4px; }
.database-editor-actions button { width: 31px; height: 31px; padding: 0; border-radius: 6px;
  font-size: 15px; line-height: 1; }
.database-editor-save { background: #2E7D32; color: #fff; }
.database-editor-cancel { background: #E2E8F0; color: #475569; }
.database-empty { position: absolute; inset: 70px 0 auto; padding: 45px; text-align: center;
  color: #64748B; font-size: 14px; }
.database-pager { display: flex; align-items: center; justify-content: center; gap: 14px;
  padding: 10px 14px; background: #F8FAFC; border-top: 1px solid #E2E8F0; font-size: 13px; }
.database-pager .tbtn { padding: 7px 13px; }
.database-pager button:disabled { opacity: .45; cursor: default; background: #fff; }

@media (max-width: 800px) {
  .database-toolbar { align-items: stretch; }
  .database-title { order: -1; flex-basis: 100%; }
  .database-search { min-width: 0; flex: 1 1 100%; }
  .database-toolbar .tbtn { justify-content: center; }
  .database-hint { display: none; }
  .database-table-viewport { height: 60vh; min-height: 340px; }
}

@media (max-width: 1250px) {
  .app-header { grid-template-columns: minmax(190px,1fr) auto; }
  .admin-context { grid-column: 1/-1; justify-content: stretch; }
  .admin-context select { flex: 1; max-width: none; }
  .massif-picker { flex: 1; max-width: none; }
  .admin-context input { width: 160px; }
  .massif-grid { grid-template-columns: 1fr; }
}

@media (max-width: 800px) {
  .app-header { display: flex; flex-direction: column; align-items: stretch; gap: 10px; padding: 12px; }
  .admin-brand { justify-content: center; }
  .admin-nav { display: grid; grid-template-columns: 1fr 1fr; }
  .nav-btn { white-space: normal; }
  .admin-context { display: grid; grid-template-columns: 1fr; }
  .admin-context select, .admin-context input { width: 100%; max-width: none; }
  .massif-picker { width: 100%; max-width: none; }
  .massif-picker-menu { left: 0; right: auto; width: 100%; }
  .dash-controls { flex-direction: row; }
  .dash-controls > input, .dash-controls > select { flex: 1 1 100%; width: 100%; min-width: 0; }
  .dash-actions { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); }
  .dash-actions .tbtn { width: 100%; justify-content: center; white-space: normal; }
  .general-heading { flex-direction: column; align-items: stretch; padding: 20px; }
  .general-heading .tbtn { justify-content: center; }
  .general-stats { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .massif-card-head { padding: 15px; }
  .massif-card-body { padding: 14px 15px; }
  .modal-form-grid { grid-template-columns: 1fr; }
  .modal-form-grid .full { grid-column: auto; }
}

@media (max-width: 430px) {
  .general-stats { grid-template-columns: 1fr; }
  .massif-card-head { flex-direction: column; }
  .massif-card-actions { align-self: stretch; }
  .massif-card-actions .icon-btn { flex: 1; }
}

/* ---- Import de fiche d'équipement (Grottomap / scan Mistral) ---- */
.btn-import { display: inline-flex; align-items: center; gap: 6px; background: #fff; color: #334155;
  border: 1px solid #CBD5E1; padding: 8px 14px; font-size: 13px; font-weight: 600; border-radius: 8px; }
.btn-import:hover { background: #F1F5F9; color: #0F172A; transform: none; }
.import-preview-table { width: 100%; border-collapse: collapse; font-size: 12.5px; margin-top: 4px; }
.import-preview-table th { background: var(--primary); color: #fff; padding: 5px 8px; text-align: left;
  position: sticky; top: 0; }
.import-preview-table td { border: 1px solid #e2e8f0; padding: 5px 8px; vertical-align: top; }
.import-preview-table tbody tr:nth-child(even) { background: #f8fafc; }

/* ---- Barre d'actions équipement (bascule vue + imports), sous le tronçon ---- */
.equip-actions-bar { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; margin-bottom: 12px; }

/* ---- Aperçu d'import : sélecteur de mode + cases à cocher / destinations ---- */
.imp-modes { display: flex; gap: 8px; margin-bottom: 12px; flex-wrap: wrap; }
.imp-mode { flex: 1 1 200px; border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px;
  cursor: pointer; background: #fff; font-size: 13px; }
.imp-mode.sel { border-color: var(--primary); background: #EEF2F7; outline: 2px solid var(--primary); font-weight: 600; }
.imp-mode small { display: block; font-weight: normal; color: #64748B; margin-top: 3px; }
.imp-row-dest { font-size: 12px; padding: 3px 5px; border-radius: 6px; max-width: 220px; }
.imp-preview-wrap { max-height: 48vh; overflow: auto; }
/* cases éditables du mode « cas par cas » */
.import-preview-table.imp-case td { padding: 2px; vertical-align: top; }
.import-preview-table.imp-case textarea { width: 100%; border: 1px solid #e2e8f0; border-radius: 4px;
  font: inherit; font-size: 12px; padding: 4px 5px; resize: vertical; box-sizing: border-box; min-height: 38px; }
.import-preview-table.imp-case textarea:focus { outline: 2px solid var(--primary); }

/* barre au-dessus de la grille tableur (copier TSV + astuce collage) */
.equip-sheet-bar { display: flex; gap: 10px; align-items: center; margin-bottom: 6px; flex-wrap: wrap; }
.equip-sheet-hint { font-size: 11.5px; color: #94A3B8; }
.equip-sheet-total { margin-top: 8px; font-size: 13px; color: #334155; }
.equip-sheet-total b { color: var(--primary); }
.measure-input, .duration-input { display: flex; align-items: stretch; min-width: 0; }
.measure-input input { min-width: 0; flex: 1; border-radius: 8px 0 0 8px; }
.measure-input select { width: 68px; border-left: 0; border-radius: 0 8px 8px 0; background: #F8FAFC; font-weight: 700; }
.duration-input { border: 1px solid #CBD5E1; border-radius: 8px; overflow: hidden; background: #F8FAFC; }
.duration-input:focus-within { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(46,125,50,.12); }
.duration-input input { width: 55px; min-width: 0; border: 0; border-radius: 0; padding: 9px 7px; text-align: right; background: #fff; }
.duration-input input:focus { outline: 0; box-shadow: none; }
.duration-input span { display: flex; align-items: center; padding: 0 7px 0 2px; color: #64748B; font-size: 12px; font-weight: 700; }
.duration-range { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.duration-range > span { color: #64748B; font-size: 12px; font-weight: 700; }
.trip-duration-field { grid-column: span 2; }
.normalization-warning { display: none; margin-top: 5px; padding: 5px 7px; border-radius: 6px; background: #FFF7E6; color: #92400E; font-size: 11px; line-height: 1.35; }
.normalization-warning.visible { display: block; }
.rope-number { display: flex; align-items: stretch; min-height: 44px; background: #fff; }
.rope-number > span { display: flex; align-items: center; padding: 0 5px 0 7px; color: var(--primary); font-weight: 800; }
.rope-number input { width: 100%; min-width: 0; border: 0; padding: 6px 4px; background: transparent; }
.rope-number input:focus { outline: 2px solid var(--primary); }
.rope-legacy { display: block; padding: 3px 6px; background: #FFF7E6; color: #92400E; border-top: 1px solid #FDE68A; font-size: 10.5px; overflow-wrap: anywhere; }
/* zone collée surlignée (façon Excel) */
.equip-sheet td.eq-pasted { background: #FFF3CD; box-shadow: inset 0 0 0 2px #f0ad4e; }

/* mode cas par cas : barre (rapprocher auto) + champ destination cherchable */
.imp-case-bar { display: flex; gap: 10px; align-items: center; margin-bottom: 8px; flex-wrap: wrap; }
/* bouton destination (ouvre le tiroir des obstacles) */
.dest-btn { width: 100%; text-align: left; background: #fff; color: #334155; border: 1px solid var(--border);
  border-radius: 6px; padding: 6px 8px; font-size: 12px; cursor: pointer; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; }
.dest-btn:hover { border-color: var(--primary); background: #F8FAFC; color: #0F172A; }
.dest-btn.touched { border-left: 3px solid var(--primary); font-weight: 600; background: #F5F8FC; }

/* tiroir plein-hauteur à droite : choix de l'obstacle cible */
.dest-drawer { position: fixed; top: 0; right: 0; height: 100vh; width: 350px; max-width: 90vw;
  background: #fff; box-shadow: -8px 0 30px rgba(15,23,42,.28); z-index: 3000;
  transform: translateX(100%); transition: transform .18s ease; display: flex; flex-direction: column; }
.dest-drawer.open { transform: translateX(0); }
.dest-drawer-head { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px;
  padding: 14px 16px; border-bottom: 2px solid var(--primary); }
.dest-drawer-for { font-size: 12px; color: #64748B; margin-top: 3px; max-width: 240px; }
.dest-drawer .dest-new { margin: 12px 16px 6px; background: #5bc0de; color: #fff; width: calc(100% - 32px); }
.dest-drawer input[type=search] { margin: 6px 16px 4px; width: calc(100% - 32px); box-sizing: border-box;
  padding: 9px 10px; border: 1px solid var(--border); border-radius: 8px; }
.dest-drawer-hint { font-size: 11.5px; color: #94A3B8; padding: 0 16px 8px; }
.dest-drawer-list { flex: 1; overflow-y: auto; padding: 0 8px 16px; }
.dest-item { display: flex; align-items: center; gap: 6px; padding: 6px 8px; border-bottom: 1px solid #eef2f7; }
.dest-item-name { flex: 1; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dest-act { width: auto; padding: 5px 11px; font-size: 15px; background: #fff; color: #334155;
  border: 1px solid var(--border); border-radius: 6px; }
.dest-act:hover { background: #F1F5F9; color: #0F172A; }
.dest-act.sel { background: var(--primary); color: #fff; border-color: transparent; }
/* indicateur de position dans la fiche + surlignage de l'obstacle ciblé */
.dest-pos { margin: 0 16px 8px; padding: 7px 10px; font-size: 12px; color: #334155;
  background: #EEF2F7; border: 1px solid #D9E2EC; border-radius: 8px; }
.dest-pos b { color: var(--primary); }
.dest-item.cur-dest { background: #FFF8E1; border-left: 3px solid #f0ad4e; }
.cur-tag { display: inline-block; margin-left: 6px; font-size: 10.5px; font-weight: bold; color: #8a5a00;
  background: #FFE082; border-radius: 999px; padding: 1px 7px; }

/* ---- Vue « tableur » éditable de la fiche d'équipement (colonne JSON) ---- */
.equip-sheet { width: 100%; border-collapse: collapse; font-size: 12.5px; table-layout: fixed; }
.equip-sheet th { background: var(--primary); color: #fff; padding: 6px 8px; text-align: left;
  position: sticky; top: 0; z-index: 2; font-size: 12px; }
.equip-sheet td { border: 1px solid #d5dbe2; padding: 0; vertical-align: top; }
.equip-sheet td.eq-actions { padding: 3px; text-align: center; white-space: normal; }
.equip-sheet td.eq-actions .btn-action-mini { margin: 1px; }
.equip-sheet td textarea { width: 100%; border: 0; background: transparent; padding: 5px 6px;
  font: inherit; resize: vertical; box-sizing: border-box; min-height: 40px; }
.equip-sheet td textarea:focus { outline: 2px solid var(--primary); background: #fff; }
.equip-sheet .eq-json { font-family: ui-monospace, Menlo, Consolas, monospace; font-size: 11px;
  color: #94A3B8; padding: 5px 6px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.equip-sheet .eq-json.eq-json-set { color: #2E7D32; }
.equip-sheet .eq-origin { font-size: 11px; color: #475569; padding: 5px 6px; }
/* Connexion et compte */
.login-screen{position:fixed;inset:0;z-index:10000;display:grid;place-items:center;background:radial-gradient(circle at 15% 12%,#ffffff 0,transparent 27%),radial-gradient(circle at 88% 85%,#c9ddc8 0,transparent 30%),linear-gradient(145deg,#edf5ec,#dbe8da);padding:20px;overflow:auto}.login-card{width:min(420px,100%);background:#fffffffa;border-radius:22px;padding:30px;box-shadow:0 24px 70px #18301d2b;display:grid;gap:14px;border:1px solid #d5e4d3;backdrop-filter:blur(10px)}.login-card img{width:88px;height:88px;object-fit:contain;margin:auto}.login-card h1,.login-card p{margin:0;text-align:center}.login-card h1{color:#132019;letter-spacing:-.025em}.login-card>p{color:#64748b;line-height:1.5}.login-card label{display:grid;gap:6px;font-weight:700;color:#334155}.login-card label small,.login-help{color:#64748b;font-size:11.5px;font-weight:500;line-height:1.4}.login-kicker{text-align:center;text-transform:uppercase;letter-spacing:.12em;color:#2e7d32;font-size:11px;font-weight:900}.login-separator{display:flex;align-items:center;gap:10px;color:#94a3b8;font-size:12px}.login-separator::before,.login-separator::after{content:'';height:1px;background:#e2e8f0;flex:1}.login-secondary-action{height:46px;background:#f8fafc;color:#334155;border:1px solid #cbd5e1;justify-content:center;border-radius:12px}.login-secondary-action:hover{background:#eef2f7;color:#0f172a}.login-error{min-height:20px;color:#b91c1c;font-weight:700}.login-error.success{color:#166534;background:#dcfce7;padding:9px 11px;border-radius:8px}.account-menu{display:flex;align-items:center;gap:8px;min-width:170px}.account-menu>span:nth-child(2){display:grid;min-width:0}.account-menu small{color:#64748b}.account-menu .mi:first-child{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:#e8efe7;color:var(--primary)}

/* Demande de compte : mêmes dimensions, états et rythme visuel pour tous les champs. */
.account-request-card{width:min(520px,100%);gap:16px;padding:32px 36px}.account-request-card>img{width:72px;height:72px}.admin-login-card{width:min(440px,100%);padding:34px 38px;gap:16px}.admin-login-card>img{width:76px;height:76px}.account-fields{display:grid;gap:15px}.login-fields{margin-top:4px}.login-card .modern-field{display:grid;gap:7px;margin:0}.modern-field>span:first-child{display:flex;align-items:center;gap:7px;font-size:14px;color:#1e293b}.modern-field>span:first-child b{color:#c2410c}.modern-field>span:first-child em{margin-left:auto;padding:3px 8px;border-radius:999px;background:#eef6ed;color:#39743d;font-size:10px;font-style:normal;font-weight:800;text-transform:uppercase;letter-spacing:.04em}.modern-input{height:48px;display:flex;align-items:center;gap:10px;padding:0 13px;border:1px solid #cbd5e1;border-radius:12px;background:#fff;transition:border-color .18s,box-shadow .18s,background .18s}.auth-symbol{width:24px;min-width:24px;display:grid;place-items:center;color:#547959;font-size:17px;font-weight:900;line-height:1}.auth-lock{position:relative;width:15px;min-width:15px;height:13px;margin:7px 5px 0;border:2px solid #547959;border-radius:3px}.auth-lock::before{content:'';position:absolute;left:2px;top:-9px;width:7px;height:8px;border:2px solid #547959;border-bottom:0;border-radius:7px 7px 0 0}.login-card .modern-input input{min-width:0;width:100%;height:100%;padding:0;border:0!important;outline:0;background:transparent;box-shadow:none!important;font:inherit;color:#0f172a}.modern-input:focus-within{border-color:#2e7d32;box-shadow:0 0 0 4px #2e7d321c;background:#fbfefb}.modern-input:has(input:disabled){background:#f1f5f9;opacity:.72}.human-check{min-width:0;margin:2px 0 0;padding:14px 15px 15px;border:1px solid #cfe0ce;border-radius:14px;background:#f6faf5}.human-check legend{display:flex;align-items:center;gap:7px;padding:0 7px;color:#326b37;font-size:12px;font-weight:900;text-transform:uppercase;letter-spacing:.04em}.auth-shield{width:19px;height:19px;display:grid;place-items:center;border-radius:6px 6px 9px 9px;background:#39743d;color:#fff;font-size:12px}.button-symbol{font-size:19px;font-weight:800;line-height:1}.bot-trap{position:fixed!important;left:-10000px!important;top:-10000px!important;width:1px!important;height:1px!important;opacity:0!important}.account-submit{height:48px;justify-content:center;gap:9px;border-radius:12px}.account-submit.is-loading{cursor:wait;opacity:.7}.account-submit.is-loading .button-symbol{animation:account-send-pulse .8s infinite alternate}@keyframes account-send-pulse{to{transform:translateX(4px)}}
.optional-badge{display:inline-flex;margin-left:6px;padding:2px 7px;border-radius:999px;background:#eef6ed;color:#39743d;font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.04em}
@media(max-width:560px){.login-screen{place-items:start center;padding:12px}.account-request-card,.admin-login-card{padding:24px 20px;border-radius:18px}.account-request-card>img,.admin-login-card>img{width:60px;height:60px}.modern-input{height:46px}}

/* Écrans de gestion */
.management-view{padding:24px;max-width:1500px;margin:auto}.management-loading,.empty-manage{padding:30px;text-align:center;color:#64748b}.management-table-wrap{overflow:auto;background:white;border:1px solid #dbe4da;border-radius:14px;box-shadow:0 5px 20px #18301d0d}.management-table{width:100%;border-collapse:collapse}.management-table th,.management-table td{padding:13px;border-bottom:1px solid #edf1ec;text-align:left;vertical-align:top}.management-table th{background:#f5f8f4;color:#334155;white-space:nowrap}.management-table td small{display:block;color:#64748b;margin-top:3px}.role-badge,.status-pill,.type-pill,.archive-pill{display:inline-flex;padding:3px 9px;border-radius:999px;background:#e6edf5;color:#334155;font-size:12px;font-weight:800}.status-pill.active,.status-pill.approved{background:#dcfce7;color:#166534}.status-pill.pending{background:#fef3c7;color:#92400e}.status-pill.disabled,.status-pill.rejected{background:#fee2e2;color:#991b1b}.role-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:8px;margin-top:7px}.role-grid label{display:flex;align-items:center;justify-content:space-between;gap:8px;background:#f7faf7;padding:8px 10px;border-radius:9px}.role-grid select{width:120px}.moderation-grid{display:grid;gap:14px}.moderation-card{background:#fff;border:1px solid #dbe4da;border-radius:14px;padding:18px;box-shadow:0 4px 18px #18301d0b}.moderation-card header{display:flex;justify-content:space-between;gap:15px}.moderation-card h3{margin:6px 0 2px}.type-pill{background:#dbeafe;color:#1e40af}.type-pill.proposal{background:#ede9fe;color:#5b21b6}.score-strip{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0}.score-strip span{background:#f1f5f9;border-radius:8px;padding:7px 9px}.proposal-payload{background:#17231b;color:#d8f3dc;padding:14px;border-radius:9px;max-height:250px;overflow:auto;white-space:pre-wrap}.review-box{display:flex;gap:10px;align-items:end;margin-top:13px}.review-box textarea{flex:1}.review-box>div{display:flex;gap:8px}

/* Formulaires d'administration modernes et explication des droits. */
.permission-guide{margin-bottom:18px;padding:20px;border:1px solid #d9e5d6;border-radius:16px;background:linear-gradient(135deg,#f8fbf7,#eef5ec)}
.permission-guide>header,.form-section>header{display:flex;align-items:flex-start;gap:11px}.permission-guide h3,.form-section h4{margin:0;color:#26394f}.permission-guide p,.form-section p,.form-callout p,.selected-role-help p{margin:4px 0 0;color:#64748b;line-height:1.45}
.permission-guide>header>.mi,.form-section>header>.mi{display:grid;place-items:center;width:39px;height:39px;flex:0 0 39px;border-radius:11px;background:#dfeade;color:var(--primary)}
.stage-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:16px}.stage-card{background:#fff;border:1px solid #dbe4da;border-radius:16px;padding:19px;box-shadow:0 5px 20px #18301d0d}.stage-card header{display:flex;justify-content:space-between;gap:12px}.stage-card h3{margin:8px 0 3px}.stage-icon{font-size:38px;color:var(--primary);background:#edf5eb;border-radius:12px;padding:8px}.stage-members{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:16px 0}.stage-members>div{background:#f6f9f5;border-radius:11px;padding:11px}.stage-members small{display:block;color:#64748b;margin-top:4px}.stage-card footer{display:flex;align-items:center;justify-content:flex-end;gap:7px}.stage-card footer .stage-activity{margin-right:auto}.stage-user-list{display:grid;gap:7px;max-height:390px;overflow:auto}.stage-user{display:grid;grid-template-columns:minmax(150px,1fr) 150px 180px;gap:10px;align-items:center;padding:9px 11px;background:#f7faf7;border-radius:10px}.stage-user small{display:block;color:#64748b}.stage-moderate{font-size:13px}.stage-timeline{display:grid;gap:9px}.stage-timeline article{display:flex;gap:11px;background:#f7faf7;border-radius:11px;padding:12px}.stage-timeline article>.mi{color:var(--primary)}.stage-timeline small{display:block;color:#64748b;margin-top:2px}.stage-timeline p{margin:5px 0 0}@media(max-width:700px){.stage-user{grid-template-columns:1fr}.stage-members{grid-template-columns:1fr}}
.permission-cards{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:15px}.permission-cards article{display:flex;gap:9px;padding:12px;border:1px solid #dfe7dd;border-radius:12px;background:#fff}.permission-cards article>.mi{color:var(--primary)}.permission-cards article p{font-size:12px}.permission-note{display:flex;gap:7px;align-items:flex-start;margin-top:13px!important;font-size:12px}
.modern-admin-form{display:grid;gap:16px}.form-section{padding:17px;border:1px solid #dfe6ec;border-radius:14px;background:#fbfcfd}.form-section>header{margin-bottom:15px}.modern-admin-form .book-field{display:grid;align-content:start;gap:6px}.modern-admin-form .book-field label{font-weight:800}.modern-admin-form input,.modern-admin-form select,.modern-admin-form textarea{width:100%;box-sizing:border-box;border:1px solid #cbd5e1;border-radius:9px;padding:10px 11px;background:#fff;transition:border-color .15s,box-shadow .15s}.modern-admin-form input:focus,.modern-admin-form select:focus,.modern-admin-form textarea:focus{outline:0;border-color:var(--primary);box-shadow:0 0 0 3px rgba(46,125,50,.12)}.field-help{color:#64748b;font-size:11.5px;line-height:1.4}.form-callout{display:flex;align-items:flex-start;gap:11px;margin-bottom:16px;padding:14px 16px;border-radius:12px;background:#eff6ff;border:1px solid #bfdbfe;color:#1e3a5f}.form-callout>.mi{margin-top:1px}.form-callout.success{background:#ecfdf3;border-color:#bbf7d0;color:#166534}.form-callout.information{background:#f0f7ee;border-color:#cfe1ca;color:#315b32}.selected-role-help{display:flex;gap:9px;align-items:flex-start;padding:11px;border-radius:10px;background:#eef5ec;color:#315b32}.modern-role-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.modern-role-grid label{padding:12px;border:1px solid #e0e7df;background:#fff}.modern-role-grid label>span{display:grid;gap:2px}.modern-role-grid small{color:#64748b;font-size:11px}.modern-role-grid select{width:145px}.management-filter{display:flex;align-items:center;gap:8px;font-weight:800}.management-filter select{width:auto;min-width:145px}

/* Moyennes publiques calculées à partir de toutes les évaluations reçues. */
.community-evaluation-summary{display:grid;grid-template-columns:minmax(220px,1fr) minmax(380px,2fr);gap:16px;align-items:center;margin:0 0 16px;padding:16px 18px;border:1px solid #b9d5b4;border-radius:14px;background:linear-gradient(135deg,#f0f7ee,#e5f0e2)}.community-summary-head,.community-evaluation-summary.empty{display:flex;align-items:center;gap:11px}.community-summary-head>.mi,.community-evaluation-summary.empty>.mi{display:grid;place-items:center;width:42px;height:42px;flex:0 0 42px;border-radius:12px;background:#d3e6cf;color:var(--primary)}.community-evaluation-summary p{margin:3px 0 0;color:#58705b;font-size:12px}.community-score-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:7px}.community-score-grid>span{display:grid;gap:3px;text-align:center;padding:8px 5px;border-radius:9px;background:#fff;border:1px solid #dbe8d8}.community-score-grid small{color:#64748b;font-size:10.5px}.community-score-grid b{color:#24542a}.community-evaluation-summary.empty{grid-template-columns:1fr}

/* Archivage, GPX et aperçu de promotion */
.archived-row{opacity:.72;background:#f8fafc}.archive-pill{margin-left:8px;background:#e2e8f0;color:#475569}.archive-cave-btn{background:#fff3cd!important;color:#7c4a03!important}.archive-cave-btn.restore{background:#dcfce7!important;color:#166534!important}.gpx-preview-map{height:min(62vh,520px);min-height:360px;border-radius:12px;overflow:hidden}.book-promo-preview{display:grid;grid-template-columns:110px minmax(0,1fr) auto;gap:18px;align-items:center;padding:18px;border-radius:16px;background:linear-gradient(135deg,#f2f7ef,#e2eddf);border:1px solid #cbdac6;min-height:145px}.book-promo-preview img,.book-cover-placeholder{width:110px;height:145px;object-fit:cover;border-radius:8px;box-shadow:0 8px 18px #18301d26}.book-cover-placeholder{display:grid;place-items:center;background:#cdddc8;color:#42633e}.book-cover-placeholder .mi{font-size:42px}.book-promo-preview h3{margin:4px 0}.book-promo-preview p{margin:3px 0 7px;color:#475569}.promo-cta{display:grid;gap:7px;text-align:center;font-weight:800}.promo-cta b{background:var(--primary);color:#fff;padding:10px 14px;border-radius:999px;white-space:nowrap}.toggle-label{display:flex!important;align-items:center;gap:8px}

@media(max-width:980px){.account-menu{min-width:auto}.account-menu>span:nth-child(2){display:none}.review-box{align-items:stretch;flex-direction:column}.book-promo-preview{grid-template-columns:80px 1fr}.book-promo-preview img,.book-cover-placeholder{width:80px;height:110px}.promo-cta{grid-column:1/-1}.management-view{padding:14px}.permission-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.community-evaluation-summary{grid-template-columns:1fr}.community-score-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:620px){.permission-cards,.modern-role-grid{grid-template-columns:1fr}.modern-role-grid label{align-items:flex-start;flex-direction:column}.modern-role-grid select{width:100%}.community-score-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Passe responsive renforcée : aucun bouton ou badge ne doit déborder sur son voisin. */
@media (min-width: 1501px) {
  .app-header { grid-template-columns: minmax(260px,290px) minmax(540px,1fr) minmax(425px,445px); column-gap: 16px; }
  .admin-nav { border-radius: 12px; }
  .admin-context { margin: 0; padding: 0; background: transparent; }
}
@media (min-width: 1251px) and (max-width: 1500px) {
  .app-header { grid-template-columns: minmax(250px,1fr) minmax(425px,445px); }
  .admin-nav { grid-column: 1/-1; grid-row: 2; }
  .admin-context { grid-column: 2; grid-row: 1; }
}
@media (min-width: 801px) and (max-width: 1250px) {
  .app-header { grid-template-columns: minmax(0,1fr); }
  .admin-brand { grid-column: 1; grid-row: 1; }
  .admin-nav { grid-column: 1; grid-row: 2; }
  .admin-context { grid-column: 1; grid-row: 3; }
}
.dash-table-wrapper { max-width: 100%; box-sizing: border-box; }
#dashTable { min-width: 1080px; table-layout: auto; }
#dashTable th:nth-child(6), #dashTable td:nth-child(6) { min-width: 215px; }
#dashTable th:nth-child(7), #dashTable td:nth-child(7) { min-width: 90px; }
#dashTable th:last-child, #dashTable td:last-child { min-width: 110px; }
#dashTable td:last-child button { width: 100%; max-width: 100%; box-sizing: border-box; padding: 8px 10px !important; }
.status-wrapper { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; white-space: normal; }
.status-wrapper .badge { max-width: 180px; white-space: normal; overflow-wrap: anywhere; line-height: 1.25; }

/* Évaluations : la moyenne et son radar sont prioritaires, le formulaire vient ensuite. */
.community-evaluation-panel { display: grid; gap: 16px; padding: 18px; border: 1px solid #dce7da;
  border-radius: 16px; background: #fbfdfb; }
.community-evaluation-panel .community-evaluation-summary { margin: 0; }
.community-radar-large { display: grid; place-items: center; min-height: 360px; padding: 12px;
  border: 1px solid #e1e8df; border-radius: 14px; background: #fff; overflow: hidden; }
.community-radar-large svg { width: min(100%,620px); height: auto; max-height: 520px; }
.community-evaluation-action { display: flex; align-items: center; justify-content: center; gap: 14px; flex-wrap: wrap; }
.community-evaluation-action p { margin: 0; color: #64748b; font-size: 12.5px; }
.evaluation-form-intro { display: flex; gap: 11px; align-items: flex-start; padding: 12px 14px;
  border-radius: 12px; background: #eef6ec; color: #315b32; }
.evaluation-form-intro > .mi { font-size: 25px; color: #2e7d32; }
.evaluation-form-intro p { margin: 3px 0 0; font-size: 12px; }
.evaluation-modal-comparison { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; margin: 12px 0; }
.evaluation-modal-comparison > section { min-width: 0; padding: 12px; border: 1px solid #dce7da; border-radius: 13px; background: #fbfdfb; }
.evaluation-modal-comparison > section > header { display: flex; justify-content: space-between; gap: 10px; align-items: baseline; }
.evaluation-modal-comparison > section > header small { color: #64748b; }
.evaluation-modal-radar { display: grid; place-items: center; height: 250px; margin: 10px 0;
  border: 1px solid #e2e8f0; border-radius: 12px; overflow: hidden; }
.evaluation-modal-radar svg { max-width: 100%; max-height: 100%; }
.evaluation-current-scores { display: grid; grid-template-columns: repeat(5,minmax(0,1fr)); gap: 5px; }
.evaluation-current-scores span { display: grid; gap: 2px; min-width: 0; padding: 5px 3px; text-align: center;
  border-radius: 7px; background: #eef6ec; }
.evaluation-current-scores small { overflow: hidden; text-overflow: ellipsis; color: #64748b; font-size: 9.5px; }
.evaluation-current-scores b { color: #24542a; font-size: 11px; }
.evaluation-score-list { display: grid; gap: 9px; }
.evaluation-score-row { display: grid; grid-template-columns: minmax(180px,1fr) auto; gap: 12px;
  align-items: center; padding: 10px 12px; border: 1px solid #e2e8f0; border-radius: 11px; }
.evaluation-score-row header { display: grid; gap: 3px; }
.evaluation-score-row small { color: #64748b; line-height: 1.3; }
.evaluation-score-buttons { display: grid; grid-template-columns: repeat(5,42px); gap: 5px; }
.evaluation-score-buttons button { width: 42px; height: 38px; padding: 0; border: 1px solid #cbd5e1;
  border-radius: 9px; background: #fff; color: #334155; }
.evaluation-score-buttons button.selected { color: #fff; border-color: #2e7d32; background: #2e7d32; }

/* CP est une valeur métier distincte d'une corde de zéro mètre. */
.rope-choice { display: flex; align-items: stretch; flex-wrap: nowrap; gap: 4px; width: 100%; min-width: 0; box-sizing: border-box; }
.rope-previous { display: flex; align-items: center; gap: 5px; padding: 4px 6px; border-radius: 7px;
  flex: 0 0 auto; background: #f1f5f9; color: #334155; font-size: 12px; cursor: pointer; white-space: nowrap; }
.rope-previous input { width: 16px; height: 16px; margin: 0; }
.rope-previous.disabled { opacity: .48; cursor: not-allowed; }
.rope-choice .rope-number { display: flex; align-items: center; flex: 1 1 0; min-width: 48px; min-height: 36px;
  padding: 0 5px; box-sizing: border-box; overflow: hidden; border: 1px solid #cbd5e1; border-radius: 7px; background: #fff; cursor: text; }
.rope-choice .rope-number:focus-within { border-color: var(--primary); box-shadow: 0 0 0 2px rgba(46,125,50,.12); }
.rope-choice .rope-number > span { flex: 0 0 auto; padding: 0; color: #334155; font-size: 13px; font-weight: 700; }
.rope-choice .rope-number input { flex: 1 1 0; width: 100%; min-width: 24px; padding: 5px 0; color: #334155;
  font: inherit; font-size: 13px; font-weight: 700; border: 0; outline: 0; background: transparent; }
.rope-choice .rope-number.disabled { background: #e2e8f0; cursor: not-allowed; }
.rope-choice .rope-number input:disabled { background: transparent; color: #94a3b8; cursor: not-allowed; }

/* Le compte est un bandeau autonome : le bouton de sortie reste entièrement à l'intérieur. */
.account-menu { display:flex; align-items:center; gap:8px; min-width:175px; min-height:48px; padding:4px 5px 4px 8px;
  box-sizing:border-box; overflow:hidden; border-radius:12px; background:#f1f5f9; }
.account-menu > span:nth-child(2) { display:grid; min-width:0; flex:1; }
.account-menu > .mi:first-child { flex:0 0 36px; }
.account-menu .row-action { display:grid; place-items:center; flex:0 0 32px; width:32px; min-width:32px; height:32px;
  margin-left:auto; padding:0; border-radius:8px; background:#e2e8f0; }
.account-menu .row-action .mi,.account-menu .row-action .mi:first-child { display:inline-block; width:auto; height:auto; margin:0;
  flex:none; border-radius:0; background:transparent; color:inherit; }
.account-menu .row-action:hover { background:#d3ded2; }

/* Recadrage sans dépendance externe : l'original reste sur le serveur jusqu'à validation. */
.crop-help { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; padding: 10px 12px;
  border-radius: 10px; background: #eef6ec; color: #315b32; }
.crop-help > .mi { font-size: 26px; }.crop-help div { display: grid; gap: 2px; }.crop-help small { color: #58705b; }
.crop-stage { position: relative; width: fit-content; max-width: 100%; margin: auto; overflow: hidden;
  line-height: 0; border-radius: 10px; background: #182019; touch-action: none; cursor: crosshair; user-select: none; }
.crop-stage img { display: block; width: auto; max-width: 100%; max-height: 58vh; object-fit: contain; }
.crop-selection { position: absolute; box-sizing: border-box; border: 2px solid #fff;
  box-shadow: 0 0 0 9999px rgba(0,0,0,.55), inset 0 0 0 1px rgba(46,125,50,.9); pointer-events: none; }
.crop-dimensions { margin-top: 8px; text-align: center; color: #64748b; font-size: 12px; }

@media (max-width: 800px) {
  .app-header button { min-width: 0; }
  .account-menu { display: grid; grid-template-columns: 36px minmax(0,1fr) 38px; width: 100%; }
  .account-menu > span:nth-child(2) { display: grid; text-align: left; }
  .account-menu .row-action { width: 38px; }
  #dashTable { min-width: 0; }
  #dashBody tr.main-row { display: block; margin-bottom: 14px; padding: 11px; border: 1px solid #cbd5e1;
    border-radius: 12px; background: #fff; box-shadow: 0 2px 7px rgba(15,23,42,.07); }
  #dashBody td { gap: 12px; min-width: 0 !important; }
  #dashBody td::before { flex: 0 0 96px; }
  #dashBody td:nth-child(1)::before { content: none; }
  #dashBody td:nth-child(2)::before { content: 'Cavité :'; }
  #dashBody td:nth-child(3)::before { content: 'Massif :'; }
  #dashBody td:nth-child(4)::before { content: 'Secteur :'; }
  #dashBody td:nth-child(5)::before { content: 'Complétude :'; }
  #dashBody td:nth-child(6)::before { content: 'Statut :'; }
  #dashBody td:nth-child(7)::before { content: 'Auteur :'; }
  #dashBody td:nth-child(8)::before { content: 'Date :'; }
  #dashBody td:nth-child(9)::before { content: 'Publiée :'; }
  #dashBody td:nth-child(10)::before { content: none; }
  #dashBody .massif-column { display: none !important; }
  #dashTable.show-massif-column #dashBody .massif-column { display: flex !important; }
  #dashBody td:last-child { justify-content: stretch; }
  #dashBody td:last-child button { width: 100%; }
  .status-wrapper { justify-content: flex-end; min-width: 0; }
  .status-wrapper .badge { max-width: min(190px,55vw); }
  .community-radar-large { min-height: 280px; padding: 6px; }
  .community-evaluation-action { align-items: stretch; flex-direction: column; }
  .community-evaluation-action .tbtn { width: 100%; justify-content: center; }
  .evaluation-score-row { grid-template-columns: 1fr; }
  .evaluation-score-buttons { grid-template-columns: repeat(5,minmax(38px,1fr)); }
  .evaluation-score-buttons button { width: 100%; }
  .equip-actions-bar > button { flex: 1 1 100%; justify-content: center; }
  .rope-choice { width: 100%; }
  .rope-previous { width: auto; box-sizing: border-box; }
  .editor-toolbar { grid-template-columns: repeat(2,minmax(0,1fr)); align-items: stretch; }
  .editor-title { grid-column: 1/-1; grid-row: 1; padding: 4px 2px; font-size: 22px; overflow-wrap: break-word; word-break: normal; }
  .editor-toolbar #btnBack { grid-column: 1/-1; white-space: normal; }
  .editor-toolbar #btnSaveTop,.editor-toolbar #btnArchiveCave { width: 100%; min-width: 0; justify-content: center; white-space: normal; }
  .evaluation-modal-comparison { grid-template-columns: 1fr; }
  .evaluation-current-scores { grid-template-columns: repeat(3,minmax(0,1fr)); }
  .crop-stage img { max-height: 50vh; }
}

@media (max-width: 430px) {
  .admin-nav { grid-template-columns: 1fr; }
  .community-evaluation-panel { padding: 10px; }
  .community-score-grid { grid-template-columns: 1fr 1fr; }
  .evaluation-modal-radar { height: 220px; }
}

/* ===== Modale « Générer le PDF » =====
   Sélection des cavités à imprimer. La liste doit rester utilisable avec plus de 200 entrées :
   d'où les secteurs repliés par défaut et la zone de défilement bornée. */
.pdf-pick-bar { display: flex; align-items: center; gap: 8px; margin-bottom: 10px; flex-wrap: wrap; }
.pdf-count { margin-left: auto; font-weight: 700; color: var(--primary); font-size: 13px; }

.pdf-pick-list { max-height: 46vh; overflow-y: auto; border: 1px solid var(--border);
                 border-radius: 8px; background: #fff; }

.pdf-sector { border-bottom: 1px solid #E2E8F0; }
.pdf-sector:last-child { border-bottom: none; }
/* Grille à trois colonnes — chevron / libellé / compteur — plutôt qu'un flex : avec flex, un nom
   de secteur long (« Bassin de la Luire – Bournillon – Arbois ») se repliait sur plusieurs lignes
   et décalait la case à cocher, chaque ligne s'alignant différemment. */
.pdf-sector > summary { display: grid; grid-template-columns: 14px 1fr auto; align-items: center;
                        gap: 10px; padding: 10px 12px; cursor: pointer; list-style: none;
                        background: #F8FAFC; }
.pdf-sector > summary::-webkit-details-marker { display: none; }
/* Chevron dessiné en CSS : pas de dépendance à une police d'icônes ici. */
.pdf-sector > summary::before { content: ''; width: 0; height: 0; justify-self: center;
  border-left: 5px solid var(--primary); border-top: 4px solid transparent;
  border-bottom: 4px solid transparent; transition: transform .15s; }
.pdf-sector[open] > summary::before { transform: rotate(90deg); }
.pdf-sector > summary label { display: grid; grid-template-columns: auto 1fr; align-items: center;
                              gap: 9px; margin: 0; cursor: pointer; min-width: 0; }
.pdf-sector > summary label b { font-weight: 700; line-height: 1.3; }
.pdf-sector > summary input { margin: 0; }
.pdf-sector-n { font-size: 12px; color: #64748B; background: #E2E8F0; white-space: nowrap;
                border-radius: 10px; padding: 1px 9px; }
/* Fiches encore au statut « à saisir » : signalées et décochées, mais visibles — les cacher
   faisait disparaître des cavités bien réelles sans explication. */
.pdf-draft { color: #92400E; }
.pdf-draft-badge { font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .5px;
                   background: #FEF3C7; color: #92400E; border-radius: 6px; padding: 1px 6px;
                   margin-left: 6px; white-space: nowrap; }

.pdf-cave-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
                 gap: 2px 14px; padding: 8px 12px 12px 30px; }
.pdf-cave-list label { display: flex; align-items: center; gap: 7px; margin: 0;
                       font-size: 13px; cursor: pointer; padding: 2px 0; }

@media (max-width: 640px) {
  .pdf-pick-list { max-height: 40vh; }
  .pdf-cave-list { grid-template-columns: 1fr; padding-left: 22px; }
  .pdf-count { margin-left: 0; width: 100%; }
}

/* ===== Progression de la génération PDF =====
   L'export d'un massif dure plusieurs minutes (une carte IGN par fiche, puis deux rendus).
   Sans retour visible, l'attente est indistinguable d'un blocage. */
.pdf-progress-head { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; }
.pdf-progress-head b { display: block; color: var(--primary-dark); font-size: 15px; }
.pdf-progress-head p { margin: 2px 0 0; color: #64748B; font-size: 13px; }
.pdf-progress-head .mi { color: var(--ok); font-size: 26px; }

/* Rotation continue : indique que le travail se poursuit même quand le pourcentage stagne,
   ce qui arrive pendant les deux rendus du document. */
.spin { animation: pdf-spin 1.1s linear infinite; }
@keyframes pdf-spin { to { transform: rotate(360deg); } }

.pdf-bar { height: 9px; background: #E2E8F0; border-radius: 5px; overflow: hidden; }
.pdf-bar-fill { height: 100%; width: 0; border-radius: 5px; background: var(--ok);
                transition: width .5s ease; }

.pdf-progress-foot { display: flex; justify-content: space-between; margin-top: 7px;
                     font-size: 12px; color: #94A3B8; }

/* Média : « à imprimer » est une décision distincte de « publié ». On publie volontiers huit
   photos d'ambiance, on n'en imprime aucune — d'où cette case à part, sous les réglages. */
.media-print { display: flex; align-items: center; gap: 7px; margin: 0 10px 8px; padding: 6px 8px;
               font-size: 12px; font-weight: 600; color: var(--primary-dark);
               background: #F1F5F9; border-radius: 6px; cursor: pointer; }
.media-print input { margin: 0; }
.media-print .mi { font-size: 16px; color: var(--primary); }

/* Retour au site public depuis l'administration. Volontairement discret : c'est une SORTIE,
   pas un onglet de navigation — d'où la place à droite, près du compte, et non dans .admin-nav. */
.leave-admin { display: inline-flex; align-items: center; gap: 6px; padding: 7px 11px;
  border: 1px solid #CBD5E1; border-radius: 9px; background: #fff; color: #475569;
  font-size: 12.5px; font-weight: 650; text-decoration: none; white-space: nowrap; }
.leave-admin:hover { border-color: var(--primary); color: var(--primary-dark); background: #F8FAFC; }
.leave-admin .mi { font-size: 18px; }
/* `display` de la classe l'emporterait sur celui de [hidden] : sans cette regle, un hote
   inattendu afficherait quand meme un lien mort. */
.leave-admin[hidden] { display: none; }
@media (max-width: 900px) { .leave-admin span:last-child { display: none; } }

/* « Ouvrir » est devenu un vrai lien (Ctrl+clic, molette, clic droit) mais garde l'allure du
   bouton vert d'origine : le geste s'enrichit, le repère visuel ne bouge pas. */
.open-link { display: inline-block; padding: 8px 16px; border-radius: 6px; background: #5cb85c;
  color: #fff; font-size: 13px; font-weight: 650; text-decoration: none; white-space: nowrap; }
.open-link:hover { background: #4cae4c; color: #fff; }

/* ---- Correction rapide depuis la synthèse ------------------------------------------------ */
/* Les puces deviennent cliquables : même dessin qu'avant (c'est le repère), mais le curseur et
   le survol annoncent qu'il s'y passe quelque chose. */
/* `button { color: white }` de legacy.css s'appliquait à ces puces devenues des boutons : sur le
   fond blanc de .detail-item, le libellé n'apparaissait qu'au survol, quand le fond passait au
   vert. On redonne donc explicitement couleur et fond, et le survol garde son effet — il est
   utile, il montre ce qui est cliquable. */
button.detail-item { font: inherit; font-weight: 600; text-align: left; color: #1E293B;
  background: #fff; border: 1px solid #eee; }
button.detail-item.detail-ko { color: #6B7280; }
button.detail-item:hover { background: var(--primary); color: #fff; transform: none; }
.detail-editable { cursor: pointer; }
.detail-editable:hover { border-color: var(--primary); box-shadow: 0 1px 4px rgba(15,23,42,.14); }

.qe-row { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap; }
.qe-lab { display: flex; flex-direction: column; gap: 4px; font-size: 12px; font-weight: 650;
  color: #475569; flex: 1 1 140px; }
.qe-sub { margin: 12px 0 4px; font-size: 12px; font-weight: 700; color: #64748B; }
.qe-hint { margin: 10px 0 0; font-size: 12px; color: #64748B; }
.qe-legacy { margin: 8px 0 0; font-size: 12px; color: #B45309; }
.qe-error { margin-top: 10px; color: #B91C1C; font-size: 13px; }
/* La modale reprend le richwrap de la fiche : c'est sa BOÎTE DE TEXTE qui doit grandir,
   pas l'enveloppe — sinon la barre d'outils défilerait avec le texte. */
.qe-rich { overflow: visible; }
.qe-rich .richbox { min-height: 180px; max-height: 42vh; }
.qe-foot { display: flex; gap: 10px; justify-content: flex-end; margin-top: 18px; flex-wrap: wrap; }
.qe-save { background: #5cb85c; }

.qe-seg { display: flex; gap: 8px; flex-wrap: wrap; }
.qe-segbtn { padding: 9px 16px; border: 1px solid #CBD5E1; border-radius: 9px; background: #fff;
  color: #475569; font-size: 13px; font-weight: 650; }
.qe-segbtn.on { border-color: var(--primary); background: var(--primary); color: #fff; }

.qe-gps { display: inline-flex; align-items: center; gap: 6px; margin-top: 12px; padding: 9px 14px;
  border: 1px solid #CBD5E1; border-radius: 9px; background: #fff; color: #334155;
  font-size: 13px; font-weight: 650; }
.qe-gps:hover { border-color: var(--primary); color: var(--primary-dark); }
.qe-gpsbox { margin-top: 10px; padding: 10px 12px; border-radius: 9px; background: #F1F5F9;
  font-size: 13px; color: #334155; }
.qe-gpsbox p { margin: 0 0 8px; }

/* ---- Tableur : colonne d'identité épinglée + filtres par colonne ------------------------- */
/* La colonne du nom se cale juste après le numéro de ligne (52 px) et reste visible quand on
   défile vers la droite : sur quarante colonnes, on perdait sans arrêt de quelle cavité il
   s'agissait. Le fond doit être OPAQUE, sinon les cellules qui passent dessous transparaissent. */
.database-table .database-pinned { position: sticky; left: 52px; z-index: 2; background: #fff; }
.database-table thead .database-pinned { z-index: 4; background: #1F563D; }
.database-table tbody tr:nth-child(even) .database-pinned { background: #F8FAFC; }
.database-table .database-pinned::after { content: ''; position: absolute; top: 0; right: -1px;
  bottom: 0; width: 1px; background: #CBD5E1; }

/* Sélecteurs alignés sur `.database-table thead th` : moins spécifiques, ces règles perdraient
   contre le vert de l'en-tête et la ligne de filtres serait illisible. */
.database-table thead .database-filter-row th { position: sticky; top: 34px; z-index: 3;
  padding: 4px 6px; background: #E8F2EC; }
.database-table thead .database-filter-row .database-row-number { z-index: 5; background: #1F563D;
  color: #D1FAE5; }
.database-table thead .database-filter-row .database-pinned { z-index: 4; background: #E8F2EC; }
.database-filter-row input { width: 100%; min-width: 90px; box-sizing: border-box; padding: 4px 6px;
  border: 1px solid #CBD5E1; border-radius: 6px; font-size: 12px; background: #fff; }
.database-filter-row input:focus { border-color: var(--primary); outline: none; }
