/* ============================================================
   ICML — ARCHIVES CENTRALES
   Feuille de style partagée
   ============================================================ */

/* Police du mode « lecture adaptée à la dyslexie » — auto-hébergée,
   licence OFL (voir fonts/OpenDyslexic-OFL.txt). Aucune requête tierce. */
@font-face {
  font-family: "OpenDyslexic";
  src: url("fonts/opendyslexic-400.woff2") format("woff2");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "OpenDyslexic";
  src: url("fonts/opendyslexic-700.woff2") format("woff2");
  font-weight: 700; font-style: normal; font-display: swap;
}

/* Mode dyslexie : tout le site tire sa police de var(--mono) ; on redéfinit
   la variable pour basculer d'un coup, et on ajuste espacement/interligne.
   Deux blocs du « dernier miroir » figent leur police : on les rattache. */
html.dyslexia {
  --mono: "OpenDyslexic", "Comic Sans MS", "Atkinson Hyperlegible", Verdana, sans-serif;
}
html.dyslexia body {
  letter-spacing: 0.02em;
  word-spacing: 0.09em;
  line-height: 1.85;
}
html.dyslexia .miroir,
html.dyslexia .miroir-locked { font-family: var(--mono); }
/* pas de justification, italiques neutralisées partout (OpenDyslexic n'a pas
   de romaine oblique : la fausse italique nuit à la lisibilité) */
html.dyslexia p,
html.dyslexia li,
html.dyslexia .dossier-intro,
html.dyslexia .entry-body { text-align: left; }
html.dyslexia,
html.dyslexia * { font-style: normal !important; }

/* Mode contraste élevé : tout le texte lisible dérive des variables ; on les
   renforce (fond noir pur, texte plus clair, gris atténués remontés, filets
   plus nets, accent plus vif). On ne touche PAS aux contenus volontairement
   masqués (caviardage, occultations) : ils restent cachés jusqu'à révélation. */
html.contrast {
  --bg: #000000;
  --bg-panel: #060809;
  --line: #8a99a6;
  --text: #f4f8fb;
  --text-dim: #cfd8e0;
  --text-bright: #ffffff;
  --accent: #93e4ff;
  --accent-dim: #4f8aa4;
  --danger: #ff6f68;
  --stamp: #a9e8b0;
  --warn: #ffd15e;
}
html.contrast a,
html.contrast .action-link,
html.contrast .mentions-link { text-decoration: underline; }
/* gris codés en dur, lisibles mais faibles : remontés (hors contenus masqués) */
html.contrast .frag-note,
html.contrast .field-opt,
html.contrast .login-version,
html.contrast .version-tag,
html.contrast .reg-meta,
html.contrast .piece-tag,
html.contrast .entry-head { color: #cfd8e0 !important; }
/* repère clavier renforcé partout */
html.contrast :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

:root {
  --bg:         #05070a;
  --bg-panel:   #0c1015;
  --bg-panel-2: #10151b;
  --line:       #232b33;
  --text:       #c9d3dc;
  --text-dim:   #7c8896;
  --text-bright:#eef3f7;
  --accent:     #6fd3ff;
  --accent-dim: #2e5a6b;
  --danger:     #d4453f;
  --danger-dim: #4a2320;
  --stamp:      #8fb996;
  --warn:       #d9a441;
  --warn-dim:   #4a3a1a;
  --mono: "IBM Plex Mono", "Consolas", "SFMono-Regular", Menlo, monospace;
  --serif-admin: "Courier New", Courier, monospace;
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }

html, body {
  margin: 0;
  padding: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--mono);
  min-height: 100vh;
}

body {
  position: relative;
  line-height: 1.55;
  font-size: 15px;
}

/* ---------- scanline / vignette overlay ---------- */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 999;
  background:
    repeating-linear-gradient(
      to bottom,
      rgba(255,255,255,0.018) 0px,
      rgba(255,255,255,0.018) 1px,
      transparent 1px,
      transparent 3px
    );
  mix-blend-mode: overlay;
}

body::after {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 998;
  background: radial-gradient(ellipse at center, rgba(0,0,0,0) 55%, rgba(0,0,0,0.55) 100%);
}

@media (prefers-reduced-motion: reduce) {
  * { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; }
}

.motion-reduced * {
  animation: none !important;
}

a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }

button {
  font-family: var(--mono);
  cursor: pointer;
}

/* ---------- top bar ---------- */
.topbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 22px;
  border-bottom: 1px solid var(--line);
  background: linear-gradient(180deg, #0a0d11, #070a0d);
  font-size: 12px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-dim);
  position: sticky;
  top: 0;
  z-index: 50;
}

.topbar .brand {
  color: var(--accent);
  font-weight: 600;
  letter-spacing: 0.12em;
}

.topbar .brand small {
  display: block;
  color: var(--text-dim);
  font-size: 9px;
  letter-spacing: 0.08em;
  text-transform: none;
}

.topbar-right {
  display: flex;
  align-items: center;
  gap: 16px;
}

.clock { color: var(--text-dim); font-variant-numeric: tabular-nums; }

.presence-count {
  color: var(--text-dim);
  font-variant-numeric: tabular-nums;
  font-size: 10.5px;
  letter-spacing: 0.04em;
  text-transform: none;
  cursor: default;
}
.presence-count.is-many { color: #9aa6b2; }
.presence-count.is-full { color: var(--danger); }
.presence-count.changed { animation: presenceBlink 0.42s steps(1) 2; }
@keyframes presenceBlink {
  50% { color: var(--text-bright); }
}

.motion-toggle, .logout-link {
  background: none;
  border: 1px solid var(--line);
  color: var(--text-dim);
  padding: 4px 9px;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-radius: 2px;
}
.motion-toggle:hover, .logout-link:hover { border-color: var(--accent-dim); color: var(--accent); }

/* ---------- classification banner ---------- */
.classif-banner {
  text-align: center;
  font-size: 11px;
  letter-spacing: 0.25em;
  text-transform: uppercase;
  padding: 5px 8px;
  background: var(--danger-dim);
  color: #f0b4b0;
  border-bottom: 1px solid #5a2a26;
}

main {
  max-width: 880px;
  margin: 0 auto;
  padding: 34px 22px 90px;
}

.footer-note {
  max-width: 880px;
  margin: 40px auto 20px;
  padding: 0 22px;
  color: var(--text-dim);
  font-size: 10.5px;
  letter-spacing: 0.03em;
  border-top: 1px solid var(--line);
  padding-top: 14px;
}

/* ============================================================
   LOGIN
   ============================================================ */
.login-wrap {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
}

.login-box {
  width: 100%;
  max-width: 420px;
  background: var(--bg-panel);
  border: 1px solid var(--line);
  border-radius: 3px;
  padding: 30px 28px 26px;
  box-shadow: 0 0 60px rgba(111,211,255,0.03), 0 20px 50px rgba(0,0,0,0.6);
  position: relative;
}

.login-box .glyph {
  position: absolute;
  top: -22px;
  left: 50%;
  transform: translateX(-50%);
  width: 44px; height: 44px;
  background: var(--bg);
  border: 1px solid var(--accent-dim);
  border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  color: var(--accent);
  font-size: 18px;
}

.login-title {
  text-align: center;
  margin-top: 14px;
  color: var(--accent);
  letter-spacing: 0.18em;
  font-size: 13px;
  text-transform: uppercase;
}
@keyframes titleGlitch {
  0%, 100% { transform: translate(0, 0); text-shadow: none; opacity: 1; }
  20% { transform: translate(-1px, 1px); text-shadow: 1px 0 #ff5a5a, -1px 0 #6fd3ff; }
  35% { transform: translate(1px, -1px); text-shadow: -1px 0 #ff5a5a, 1px 0 #6fd3ff; opacity: 0.85; }
  50% { transform: translate(-1px, 0); text-shadow: none; opacity: 1; }
  65% { transform: translate(1px, 0); text-shadow: 1px 0 #6fd3ff, -1px 0 #ff5a5a; }
  80% { transform: translate(0, -1px); text-shadow: none; }
}
.login-title.glitching {
  animation: titleGlitch 0.35s steps(1) infinite;
}
.login-sub {
  text-align: center;
  color: var(--text-dim);
  font-size: 10.5px;
  margin-top: 4px;
  margin-bottom: 22px;
  letter-spacing: 0.04em;
}

.field {
  margin-bottom: 14px;
}
.field label {
  display: block;
  font-size: 10px;
  color: var(--text-dim);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-bottom: 5px;
}
.field input,
.field select {
  width: 100%;
  background: #05070a;
  border: 1px solid var(--line);
  color: var(--text-bright);
  font-family: var(--mono);
  font-size: 13px;
  padding: 9px 10px;
  border-radius: 2px;
}
.field select {
  appearance: none;
  -webkit-appearance: none;
  background-image: linear-gradient(45deg, transparent 50%, var(--text-dim) 50%), linear-gradient(135deg, var(--text-dim) 50%, transparent 50%);
  background-position: calc(100% - 16px) center, calc(100% - 11px) center;
  background-size: 5px 5px, 5px 5px;
  background-repeat: no-repeat;
  cursor: pointer;
}
.field input:focus,
.field select:focus {
  outline: none;
  border-color: var(--accent-dim);
}

.login-submit {
  width: 100%;
  margin-top: 8px;
  background: var(--accent-dim);
  border: 1px solid var(--accent);
  color: var(--text-bright);
  padding: 10px;
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border-radius: 2px;
  transition: background 0.15s;
}
.login-submit:hover { background: #24485a; }
.login-submit:disabled { opacity: 0.6; cursor: progress; }

.login-status {
  margin-top: 14px;
  font-size: 11px;
  color: var(--text-dim);
  min-height: 16px;
  white-space: pre-wrap;
}

.login-warning {
  margin-top: 18px;
  font-size: 10px;
  color: var(--text-dim);
  text-align: center;
  border-top: 1px solid var(--line);
  padding-top: 12px;
  line-height: 1.6;
}

.sound-consent {
  margin-top: 14px;
  font-size: 10px;
  color: var(--text-dim);
  line-height: 1.6;
}
.sound-consent label {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  cursor: pointer;
}
.sound-consent input {
  margin-top: 2px;
  flex-shrink: 0;
}

.version-tag { color: var(--text-dim); }
.login-version {
  margin-top: 14px;
  font-size: 9.5px;
  text-align: center;
  letter-spacing: 0.06em;
  color: #4a5560;
}
.login-a11y { margin-top: 16px; text-align: center; }

/* menu d'accessibilité (un bouton, un panneau de réglages) */
.a11y-menu { position: relative; display: inline-block; }
.a11y-trigger::after { content: " \25BE"; }
.a11y-panel {
  position: absolute;
  right: 0;
  top: calc(100% + 6px);
  z-index: 60;
  min-width: 236px;
  padding: 8px 10px;
  background: var(--bg-panel);
  border: 1px solid var(--line);
  border-radius: 3px;
  box-shadow: 0 10px 26px rgba(0, 0, 0, 0.55);
  text-align: left;
}
.login-a11y .a11y-panel { right: auto; left: 50%; transform: translateX(-50%); }
.a11y-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 8px 2px;
}
.a11y-row + .a11y-row { border-top: 1px solid var(--line); }
.a11y-label { font-size: 11px; color: var(--text); letter-spacing: 0.02em; white-space: nowrap; }
.a11y-seg { display: flex; gap: 3px; }
.a11y-seg-btn,
.a11y-switch {
  background: none;
  border: 1px solid var(--line);
  color: var(--text-dim);
  font-family: var(--mono);
  font-size: 10px;
  letter-spacing: 0.02em;
  padding: 4px 8px;
  border-radius: 2px;
  cursor: pointer;
  white-space: nowrap;
}
.a11y-switch { min-width: 74px; }
.a11y-seg-btn.is-on,
.a11y-switch.is-on {
  background: var(--accent-dim);
  border-color: var(--accent);
  color: var(--text-bright);
}
.a11y-seg-btn:hover,
.a11y-switch:hover { border-color: var(--accent-dim); }
.a11y-trigger:focus-visible,
.a11y-seg-btn:focus-visible,
.a11y-switch:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }

.cursor-blink::after {
  content: "\2588";
  animation: blink 1s steps(1) infinite;
  color: var(--accent);
  margin-left: 2px;
}
@keyframes blink { 50% { opacity: 0; } }

/* ============================================================
   DOSSIER INDEX (LIST)
   ============================================================ */
.page-title {
  color: var(--text-bright);
  font-size: 16px;
  letter-spacing: 0.06em;
  margin-bottom: 4px;
}
.page-sub {
  color: var(--text-dim);
  font-size: 11.5px;
  margin-bottom: 26px;
}

.table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  border: 1px solid var(--line);
}
.table-scroll-hint {
  display: none;
  font-size: 10.5px;
  color: var(--text-dim);
  text-align: center;
  margin-top: 8px;
}

.dossier-table {
  width: 100%;
  min-width: 620px;
  border-collapse: collapse;
  font-size: 12.5px;
}
.dossier-table th, .dossier-table td {
  border-bottom: 1px solid var(--line);
  padding: 10px 12px;
  text-align: left;
  vertical-align: top;
}
.dossier-table th {
  color: var(--text-dim);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  background: var(--bg-panel);
  font-weight: 500;
}
.dossier-table tr.locked td { color: var(--text-dim); }
.dossier-table tr.open:hover td { background: rgba(111,211,255,0.03); }

.status-tag {
  display: inline-block;
  padding: 2px 7px;
  border-radius: 2px;
  font-size: 10px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  border: 1px solid;
}
.status-tag.refused { color: #8a6a6a; border-color: #3a2626; }
.status-tag.sealed { color: var(--danger); border-color: #5a2a26; }
.status-tag.open { color: var(--stamp); border-color: #2f4a34; }
.status-tag.encrypted { color: var(--warn); border-color: #5a4520; }
.status-tag.critical {
  color: #fff;
  background: var(--danger);
  border-color: #ff6b63;
  font-weight: 700;
  box-shadow: 0 0 8px rgba(212, 69, 63, 0.55);
}
.status-tag.ghost {
  color: #3a4750;
  border-color: #1a2026;
  background: transparent;
}
.dossier-table tr.ghost-row td {
  color: #4a5560;
  animation: flickerText 4s infinite;
}
.dossier-table tr.ghost-row .action-link { color: #5a7a8a; }

.stamp-sealed.stamp-critical {
  background: var(--danger);
  color: #fff;
  border-color: #ff6b63;
  box-shadow: 0 0 10px rgba(212, 69, 63, 0.55);
}

.stamp-sealed.stamp-open {
  border-color: var(--stamp);
  color: var(--stamp);
}

.dossier-table .action-link {
  font-size: 11px;
  letter-spacing: 0.05em;
}
.dossier-table .action-disabled {
  color: #4a4f55;
  font-size: 11px;
  letter-spacing: 0.05em;
  cursor: not-allowed;
}
.denied-notice {
  background: var(--danger-dim);
  border: 1px solid #5a2a26;
  color: #f0b4b0;
  font-size: 11.5px;
  padding: 10px 14px;
  border-radius: 2px;
  margin-bottom: 18px;
}
.registry-empty {
  text-align: center;
  color: var(--text-dim);
  font-style: italic;
  padding: 24px 12px !important;
}

/* ============================================================
   DOSSIER DETAIL
   ============================================================ */
.dossier-header {
  border: 1px solid var(--line);
  background: var(--bg-panel);
  padding: 18px 20px;
  margin-bottom: 26px;
  position: relative;
}

.stamp-sealed {
  position: absolute;
  top: 14px;
  right: 16px;
  border: 2px solid var(--danger);
  color: var(--danger);
  padding: 4px 10px;
  font-size: 11px;
  letter-spacing: 0.2em;
  transform: rotate(-6deg);
  opacity: 0.8;
  text-transform: uppercase;
  border-radius: 2px;
}

.meta-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(180px, 1fr));
  gap: 6px 26px;
  font-size: 12px;
  margin-top: 4px;
}
.meta-grid div span.k {
  color: var(--text-dim);
  display: inline-block;
  min-width: 140px;
  padding-right: 12px;
}
.meta-grid div span.v { color: var(--text-bright); }

.dossier-intro {
  font-size: 12.5px;
  color: var(--text-dim);
  font-style: italic;
  border-left: 2px solid var(--accent-dim);
  padding-left: 12px;
  margin: 18px 0 0;
}

.piece {
  border: 1px solid var(--line);
  margin-bottom: 16px;
  background: var(--bg-panel);
}
.piece-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 13px 16px;
  cursor: pointer;
  user-select: none;
}
.piece-head:hover { background: rgba(111,211,255,0.03); }
.piece-head h3 {
  margin: 0;
  font-size: 12.5px;
  letter-spacing: 0.05em;
  color: var(--text-bright);
  text-transform: uppercase;
}
.piece-head .piece-tag {
  color: var(--text-dim);
  font-size: 10.5px;
  display: block;
  margin-top: 2px;
  text-transform: none;
  letter-spacing: 0.02em;
}
.piece-chevron { color: var(--accent); font-size: 13px; transition: transform 0.15s; }
.piece.open .piece-chevron { transform: rotate(90deg); }

.piece-body {
  display: none;
  padding: 0 18px 20px;
  border-top: 1px solid var(--line);
}
.piece.open .piece-body { display: block; padding-top: 16px; }

/* journal entries */
.entry {
  margin-bottom: 18px;
  padding-bottom: 16px;
  border-bottom: 1px dashed var(--line);
}
.entry:last-child { border-bottom: none; }
.entry-head {
  color: var(--accent);
  font-size: 11.5px;
  letter-spacing: 0.06em;
  margin-bottom: 8px;
  text-transform: uppercase;
}
.entry-body p { margin: 0 0 10px; font-size: 13px; color: var(--text); }
.entry-body p:last-child { margin-bottom: 0; }

.ai-line {
  display: block;
  margin: 10px 0;
  padding: 8px 12px;
  background: #05070a;
  border-left: 2px solid var(--accent);
  color: var(--accent);
  font-size: 12.5px;
  letter-spacing: 0.02em;
}

@keyframes lineGlitch {
  0%, 90%, 100% { transform: translate(0, 0); text-shadow: none; opacity: 1; }
  91% { transform: translate(1px, 0); text-shadow: 1px 0 #ff5a5a, -1px 0 #6fd3ff; }
  92.5% { transform: translate(-1px, 0); opacity: 0.7; text-shadow: -1px 0 #ff5a5a, 1px 0 #6fd3ff; }
  94% { transform: translate(0, 1px); text-shadow: none; opacity: 1; }
  95.5% { transform: translate(1px, -1px); text-shadow: 1px 0 #6fd3ff, -1px 0 #ff5a5a; opacity: 0.85; }
  97% { transform: translate(0, 0); text-shadow: none; opacity: 1; }
}
.ai-line.glitch-line {
  animation: lineGlitch 4.5s steps(1) infinite;
}

.mail-meta {
  font-size: 11px;
  color: var(--text-dim);
  line-height: 1.7;
  background: #05070a;
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: 8px 12px;
  margin-bottom: 10px;
  word-break: break-word;
}
.mail-meta strong { color: var(--text); font-weight: 600; }

.frag-note {
  color: var(--text-dim);
  font-size: 11px;
  font-style: italic;
}

/* redacted / classified block */
.classified {
  position: relative;
  border: 1px solid #33201f;
  background: #0a0a0a;
  padding: 12px 14px;
  margin: 12px 0;
  border-radius: 2px;
}
.classified .cl-cover {
  display: flex;
  align-items: center;
  gap: 10px;
  color: var(--danger);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  cursor: pointer;
}
.classified .cl-cover .bar {
  flex: 1;
  height: 10px;
  background: repeating-linear-gradient(45deg, #1a1010, #1a1010 4px, #100a0a 4px, #100a0a 8px);
  border-radius: 1px;
}
.classified .cl-content {
  display: none;
  margin-top: 10px;
  font-size: 13px;
  color: var(--text);
}
.classified.revealed .cl-cover { display: none; }
.classified.revealed .cl-content { display: block; }
.classified .cl-loading {
  display: none;
  color: var(--text-dim);
  font-size: 11px;
  letter-spacing: 0.05em;
}
.classified.loading .cl-cover { display: none; }
.classified.loading .cl-loading { display: block; }

/* inline redaction (single phrase) */
.redact {
  background: #111;
  color: #111;
  padding: 0 4px;
  border-radius: 2px;
  cursor: pointer;
  user-select: none;
}
.redact:hover { background: #1a1a1a; }
.redact.revealed {
  background: none;
  color: var(--text-bright);
  cursor: text;
}

/* autopsy report styling */
.report {
  font-size: 13px;
}
.report h4 {
  color: var(--accent);
  font-size: 12px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  margin: 20px 0 8px;
}
.report h4:first-child { margin-top: 0; }
.report p { margin: 0 0 10px; }
.report .sig {
  margin-top: 22px;
  padding-top: 14px;
  border-top: 1px solid var(--line);
  color: var(--text-dim);
  font-size: 12px;
}
.report .sig strong { color: var(--text-bright); display:block; font-weight: 600;}

/* radiograph reconstruction */
.radiograph-wrap {
  background: #000;
  border: 1px solid var(--line);
  padding: 16px;
}
.radiograph-frame {
  position: relative;
  background: #000;
  aspect-ratio: 4 / 5;
  overflow: hidden;
  border: 1px solid #14181c;
}
.radiograph-frame img { width: 100%; height: 100%; object-fit: contain; display: block; }
.radiograph-caption {
  margin-top: 10px;
  font-size: 11px;
  color: var(--text-dim);
}

/* pulse motif : 11 impulsions */
.pulse-row {
  display: flex;
  gap: 5px;
  align-items: center;
  margin: 4px 0 2px;
}
.pulse-dot {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: var(--accent-dim);
}
.pulse-row.active .pulse-dot {
  animation: pulseGlow 2.4s ease-in-out infinite;
  animation-delay: calc(var(--i) * 0.12s);
}
@keyframes pulseGlow {
  0%, 78%, 100% { background: var(--accent-dim); box-shadow: none; }
  8% { background: var(--accent); box-shadow: 0 0 6px var(--accent); }
}

/* subtle glitch flicker on select headers */
.flicker {
  animation: flickerText 6s infinite;
}
@keyframes flickerText {
  0%, 92%, 100% { opacity: 1; }
  93% { opacity: 0.4; }
  94% { opacity: 1; }
  95% { opacity: 0.5; }
  96% { opacity: 1; }
}

.lock-msg {
  text-align: center;
  padding: 60px 20px;
  color: var(--text-dim);
}
.lock-msg a { color: var(--accent); }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media (max-width: 640px) {
  .topbar {
    flex-wrap: wrap;
    row-gap: 8px;
  }
  .topbar-right {
    gap: 8px;
    flex-wrap: wrap;
  }
  .presence-count { font-size: 9.5px; }
  .dossier-header {
    padding-top: 44px;
  }
  .stamp-sealed {
    top: 10px;
    right: 10px;
    left: 10px;
    text-align: center;
    transform: none;
  }
  .meta-grid {
    grid-template-columns: 1fr;
  }
  .table-scroll-hint {
    display: block;
  }
}

/* ============================================================
   PIÈCE PROTÉGÉE — portillon, téléchargement factice, glitchs
   ============================================================ */
.keygate {
  max-width: 440px;
  margin: 8px auto 26px;
  background: var(--bg-panel);
  border: 1px solid var(--warn-dim);
  border-radius: 3px;
  padding: 26px 26px 22px;
}
.keygate-title {
  color: var(--warn);
  font-size: 12.5px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  text-align: center;
}
.keygate-sub {
  color: var(--text-dim);
  font-size: 11px;
  text-align: center;
  margin-top: 6px;
  margin-bottom: 20px;
  line-height: 1.6;
}
.keygate .field label {
  display: block;
  font-size: 10px;
  color: var(--text-dim);
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-bottom: 5px;
}
.keygate .field input {
  width: 100%;
  background: #05070a;
  border: 1px solid var(--line);
  color: var(--text-bright);
  font-family: var(--mono);
  font-size: 15px;
  letter-spacing: 0.3em;
  text-align: center;
  padding: 10px;
  border-radius: 2px;
}
.keygate .field input:focus { outline: none; border-color: var(--warn-dim); }
.keygate-submit {
  width: 100%;
  margin-top: 12px;
  background: var(--warn-dim);
  border: 1px solid var(--warn);
  color: var(--text-bright);
  padding: 10px;
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  border-radius: 2px;
}
.keygate-submit:hover { background: #5a4720; }
.keygate-status {
  margin-top: 12px;
  font-size: 11px;
  color: var(--danger);
  min-height: 14px;
  text-align: center;
}
.keygate-attempts {
  margin-top: 10px;
  font-size: 10px;
  color: var(--text-dim);
  border-top: 1px solid var(--line);
  padding-top: 10px;
}
.keygate-attempts div { margin-bottom: 3px; }

.dlpanel {
  max-width: 520px;
  margin: 8px auto 26px;
  background: var(--bg-panel);
  border: 1px solid var(--accent-dim);
  border-radius: 3px;
  padding: 22px 24px;
}
.dlpanel-title {
  color: var(--accent);
  font-size: 11.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin-bottom: 14px;
}
.dlpanel-file {
  display: flex;
  align-items: center;
  gap: 12px;
  background: #05070a;
  border: 1px solid var(--line);
  padding: 12px 14px;
  border-radius: 2px;
  margin-bottom: 16px;
}
.dlpanel-file .ficon {
  color: var(--accent);
  font-size: 20px;
  line-height: 1;
}
.dlpanel-file .fname {
  color: var(--text-bright);
  font-size: 12.5px;
  word-break: break-all;
}
.dlpanel-file .fmeta {
  color: var(--text-dim);
  font-size: 10.5px;
  margin-top: 3px;
}
.dlpanel-actions {
  display: flex;
  gap: 10px;
}
.dlpanel-actions button {
  flex: 1;
  padding: 10px;
  font-size: 11.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-radius: 2px;
  border: 1px solid;
}
.btn-download {
  background: var(--accent-dim);
  border-color: var(--accent);
  color: var(--text-bright);
}
.btn-download:hover { background: #24485a; }
.btn-cancel {
  background: transparent;
  border-color: var(--line);
  color: var(--text-dim);
}
.btn-cancel:hover { border-color: var(--danger-dim); color: var(--danger); }

.dlpanel-confirm {
  font-size: 11.5px;
  color: var(--text);
  background: #05070a;
  border: 1px solid var(--danger-dim);
  padding: 12px 14px;
  border-radius: 2px;
  margin-bottom: 14px;
}
.dlpanel-confirm p { margin: 0 0 10px; }

.dlprogress-bar-outer {
  background: #05070a;
  border: 1px solid var(--line);
  border-radius: 2px;
  height: 10px;
  overflow: hidden;
  margin-bottom: 8px;
}
.dlprogress-bar-inner {
  height: 100%;
  width: 0%;
  background: linear-gradient(90deg, var(--accent-dim), var(--accent));
}
.dlprogress-meta {
  display: flex;
  justify-content: space-between;
  font-size: 10.5px;
  color: var(--text-dim);
  margin-bottom: 4px;
}
.dlprogress-log {
  margin-top: 12px;
  font-size: 10.5px;
  color: var(--text-dim);
  border-top: 1px solid var(--line);
  padding-top: 10px;
  min-height: 16px;
}

/* ---------- escalating glitch levels (applied to <body>) ---------- */
@keyframes glitchJitter1 {
  0%, 96%, 100% { transform: translate(0, 0); }
  97% { transform: translate(1px, 0); }
  98% { transform: translate(-1px, 0); }
}
@keyframes glitchJitter2 {
  0%, 92%, 100% { transform: translate(0, 0); filter: none; }
  93% { transform: translate(2px, -1px); filter: hue-rotate(8deg); }
  94% { transform: translate(-2px, 1px); filter: none; }
  95% { transform: translate(1px, 1px); filter: hue-rotate(-8deg); }
}
@keyframes glitchJitter3 {
  0%, 85%, 100% { transform: translate(0, 0); filter: none; }
  86% { transform: translate(4px, -2px) skewX(1deg); filter: hue-rotate(20deg) contrast(1.3); }
  87% { transform: translate(-5px, 2px); filter: invert(0.08); }
  88% { transform: translate(3px, 0); filter: none; }
  89% { transform: translate(-3px, -1px) skewX(-1deg); filter: hue-rotate(-15deg); }
  90% { transform: translate(0, 2px); filter: contrast(1.5); }
}
body.dl-glitch-1 { animation: glitchJitter1 4s infinite; }
body.dl-glitch-2 { animation: glitchJitter2 2.4s infinite; }
body.dl-glitch-3 { animation: glitchJitter3 1.1s infinite; }

.static-overlay {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 900;
  opacity: 0;
  background:
    repeating-linear-gradient(115deg, rgba(255,255,255,0.05) 0px, rgba(255,255,255,0.05) 1px, transparent 1px, transparent 3px),
    repeating-linear-gradient(-65deg, rgba(255,255,255,0.03) 0px, rgba(255,255,255,0.03) 2px, transparent 2px, transparent 5px);
  transition: opacity 0.4s;
}
@keyframes staticShift {
  0% { background-position: 0 0, 0 0; }
  100% { background-position: 300px 140px, -220px 90px; }
}
.static-overlay.active { animation: staticShift 0.6s linear infinite; }

.flash-overlay {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 901;
  background: #fff;
  opacity: 0;
}
.flash-overlay.hit { animation: flashHit 0.18s ease-out; }
@keyframes flashHit { 0% { opacity: 0.35; } 100% { opacity: 0; } }

/* ---------- blackout / terminal final ---------- */
.blackout {
  position: fixed;
  inset: 0;
  background: #000;
  z-index: 2000;
  opacity: 0;
  pointer-events: none;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: opacity 1.1s ease-in;
}
.blackout.active {
  opacity: 1;
  pointer-events: all;
}
.blackout .terminal {
  font-family: var(--mono);
  color: #d7e4ea;
  font-size: 16px;
  line-height: 2;
  text-align: left;
  white-space: pre-wrap;
  max-width: 90vw;
}
.blackout .terminal { max-height: 92vh; overflow-y: auto; }
.blackout .terminal .line { display: block; }
.blackout .terminal .ghost-trace {
  color: #1e2a30;
  font-size: 13px;
}
.blackout .terminal .term-exit { margin-top: 26px; }
.term-link {
  display: block; color: var(--accent); text-decoration: none;
  font-size: 14px; line-height: 1.5; margin-top: 12px;
}
.term-link:hover { text-decoration: underline; }
.term-link-miroir { color: var(--warn); margin-bottom: 6px; }

/* clin d'œil de 11:11:11 */
.clock-eleven { color: var(--danger); animation: flickerText 1.2s steps(1) infinite; }
.eleven-note {
  position: fixed; left: 50%; top: 30%; transform: translate(-50%, -50%) scale(0.98);
  z-index: 1500; pointer-events: none; text-align: center;
  padding: 26px 48px;
  background: radial-gradient(closest-side, rgba(2, 3, 4, 0.94), rgba(2, 3, 4, 0.78) 65%, rgba(2, 3, 4, 0));
  opacity: 0; transition: opacity 1.1s ease, transform 1.1s ease;
}
.eleven-note.show { opacity: 1; transform: translate(-50%, -50%) scale(1); }
.eleven-big {
  display: block; font-family: var(--mono); color: var(--danger);
  font-size: 20px; letter-spacing: 0.35em; text-transform: lowercase;
}
.eleven-sub { display: block; margin-top: 12px; font-size: 12px; color: var(--text-dim); letter-spacing: 0.04em; }
@media (prefers-reduced-motion: reduce) {
  .clock-eleven { animation: none; }
  .eleven-note { transition: opacity 0.2s; }
}

@media (max-width: 640px) {
  .keygate, .dlpanel { margin-left: 4px; margin-right: 4px; padding: 20px 16px; }
  .blackout .terminal { font-size: 14px; }
}

/* ============================================================
   ASSISTANT D'INDEXATION
   ============================================================ */
.assist {
  position: fixed;
  right: 18px;
  bottom: 18px;
  z-index: 800;
  font-size: 12px;
}

/* Réserve de défilement : le lanceur étant en position fixe, on garantit
   que la fin de page (pied, liens) puisse défiler au-dessus de lui plutôt
   que d'être masquée. Appliquée seulement là où l'assistant existe. */
body.has-assist { padding-bottom: 80px; }

.assist-launch {
  display: flex;
  align-items: center;
  gap: 8px;
  background: var(--bg-panel);
  border: 1px solid var(--accent-dim);
  color: var(--text);
  padding: 9px 14px;
  border-radius: 2px;
  font-size: 11px;
  letter-spacing: 0.06em;
  box-shadow: 0 6px 24px rgba(0,0,0,0.55);
}
.assist-launch:hover { border-color: var(--accent); color: var(--text-bright); }
.assist-launch-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 6px var(--accent);
  animation: assistPulse 3.2s ease-in-out infinite;
}
@keyframes assistPulse {
  0%, 100% { opacity: 0.35; }
  50% { opacity: 1; }
}

.assist-window {
  width: 360px;
  max-width: calc(100vw - 24px);
  background: var(--bg-panel);
  border: 1px solid var(--line);
  border-radius: 3px;
  box-shadow: 0 12px 48px rgba(0,0,0,0.7);
  display: flex;
  flex-direction: column;
  overflow: hidden;
}

.assist-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 9px 12px;
  border-bottom: 1px solid var(--line);
  background: linear-gradient(180deg, #0a0d11, #070a0d);
}
.assist-title {
  color: var(--accent);
  font-size: 10px;
  letter-spacing: 0.14em;
}
.assist-close {
  background: none;
  border: none;
  color: var(--text-dim);
  font-size: 16px;
  line-height: 1;
  padding: 0 2px;
}
.assist-close:hover { color: var(--danger); }

.assist-tabs {
  display: flex;
  border-bottom: 1px solid var(--line);
}
.assist-tab {
  flex: 1;
  background: none;
  border: none;
  border-bottom: 2px solid transparent;
  color: var(--text-dim);
  padding: 8px 6px;
  font-size: 10px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
}
.assist-tab.is-active { color: var(--accent); border-bottom-color: var(--accent-dim); }
.assist-badge {
  display: inline-block;
  min-width: 16px;
  padding: 0 4px;
  border-radius: 8px;
  background: var(--accent-dim);
  color: var(--text-bright);
  font-size: 9px;
}

.assist-pane { display: flex; flex-direction: column; }

.assist-log {
  height: 268px;
  overflow-y: auto;
  padding: 12px;
  display: flex;
  flex-direction: column;
  gap: 9px;
}
.assist-msg {
  line-height: 1.55;
  font-size: 11.5px;
  padding: 7px 10px;
  border-radius: 2px;
  white-space: pre-wrap;
}
.assist-bot {
  background: #05070a;
  border-left: 2px solid var(--accent-dim);
  color: var(--text);
}
.assist-user {
  background: rgba(111,211,255,0.06);
  color: var(--text-bright);
  align-self: flex-end;
  max-width: 85%;
}
.assist-pending { color: var(--text-dim); font-style: italic; padding: 2px 10px; }
.assist-note-line { color: var(--text-dim); font-size: 10.5px; padding: 2px 10px; }
.assist-anomaly {
  color: #4a5560;
  font-size: 10px;
  padding: 0 10px;
  letter-spacing: 0.04em;
}
.assist-drifting { animation: lineGlitch 5.5s steps(1) infinite; }

.assist-form {
  display: flex;
  border-top: 1px solid var(--line);
}
.assist-input {
  flex: 1;
  background: #05070a;
  border: none;
  color: var(--text-bright);
  font-family: var(--mono);
  font-size: 12px;
  padding: 10px 12px;
}
.assist-input:focus { outline: none; }
.assist-send {
  background: none;
  border: none;
  border-left: 1px solid var(--line);
  color: var(--accent);
  font-size: 18px;
  padding: 0 14px;
}
.assist-send:hover { background: rgba(111,211,255,0.06); }

.assist-notes {
  height: 272px;
  overflow-y: auto;
  padding: 12px;
}
.assist-notes-actions {
  border-top: 1px solid var(--line);
  padding: 9px 12px;
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.assist-copy {
  background: var(--accent-dim);
  border: 1px solid var(--accent);
  color: var(--text-bright);
  padding: 8px;
  font-size: 10.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  border-radius: 2px;
}
.assist-copy:hover { background: #24485a; }
.assist-copy-status {
  color: var(--text-dim);
  font-size: 9.5px;
  line-height: 1.5;
  min-height: 12px;
}
.assist-copy-fallback {
  width: 100%;
  height: 120px;
  margin-bottom: 10px;
  background: #05070a;
  border: 1px solid var(--accent-dim);
  color: var(--text);
  font-family: var(--mono);
  font-size: 10px;
  padding: 8px;
  border-radius: 2px;
  white-space: pre;
}
.assist-notes-empty { color: var(--text-dim); font-size: 11px; margin: 0; line-height: 1.6; }
.assist-notes-ref {
  color: var(--accent);
  font-size: 9.5px;
  letter-spacing: 0.08em;
  margin: 14px 0 6px;
  padding-bottom: 4px;
  border-bottom: 1px solid var(--line);
}
.assist-notes-ref:first-child { margin-top: 0; }
.assist-note { margin-bottom: 9px; }
.assist-note-label {
  display: block;
  color: var(--text-bright);
  font-size: 11px;
}
.assist-note-detail {
  display: block;
  color: var(--text-dim);
  font-size: 10.5px;
  line-height: 1.5;
}

/* dérive : le cadre lui-même se dégrade */
.assist[data-drift="2"] .assist-window { border-color: #33201f; }
.assist[data-drift="2"] .assist-title { animation: flickerText 5s infinite; }
.assist[data-drift="3"] .assist-window {
  border-color: var(--danger-dim);
  box-shadow: 0 12px 48px rgba(0,0,0,0.8), 0 0 22px rgba(212,69,63,0.12);
}
.assist[data-drift="3"] .assist-title {
  color: #c9d3dc;
  animation: titleGlitch 0.6s steps(1) infinite;
}
.assist[data-drift="3"] .assist-launch-dot { background: var(--danger); box-shadow: 0 0 8px var(--danger); }

/* ============================================================
   RECHERCHE + JOURNAL DU REGISTRE
   ============================================================ */
.registry-tools {
  display: flex;
  align-items: center;
  gap: 12px;
  margin-bottom: 16px;
  flex-wrap: wrap;
}
.registry-search {
  flex: 1;
  min-width: 200px;
  background: #05070a;
  border: 1px solid var(--line);
  color: var(--text-bright);
  font-family: var(--mono);
  font-size: 12px;
  padding: 9px 11px;
  border-radius: 2px;
}
.registry-search:focus { outline: none; border-color: var(--accent-dim); }
.registry-count { color: var(--text-dim); font-size: 10.5px; }

.visit-mark {
  display: inline-block;
  margin-left: 8px;
  font-size: 9px;
  letter-spacing: 0.06em;
  color: var(--text-dim);
  background: none;
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: 1px 5px;
  vertical-align: middle;
  font-family: var(--mono);
  cursor: pointer;
}
.visit-mark:hover { color: var(--text-bright); border-color: var(--accent-dim); }
.visit-mark.is-new { color: var(--accent); border-color: var(--accent-dim); }
.visit-mark.is-new:hover { color: var(--text-bright); border-color: var(--accent); }

@media (max-width: 640px) {
  /* Lanceur compact ancré au coin bas-droit (et non une barre pleine
     largeur qui recouvrirait le pied de page). La fenêtre, une fois
     ouverte, occupe la largeur utile via son max-width. */
  .assist { right: 10px; bottom: 10px; }
  .assist-launch { max-width: calc(100vw - 20px); }
  .assist-window { width: 320px; }
  .assist-log { height: 220px; }
  .assist-notes { height: 210px; }
  body.has-assist { padding-bottom: 66px; }
}

/* ---------- escalade hiérarchique (écran de connexion) ---------- */
.escalation {
  margin-top: 14px;
  border: 1px solid var(--warn-dim);
  background: #05070a;
  border-radius: 2px;
  padding: 10px 12px;
  font-size: 10.5px;
  line-height: 1.6;
  color: var(--text);
}
.escalation-head {
  color: var(--warn);
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  margin-bottom: 6px;
}
.escalation p { margin: 0 0 6px; }
.escalation-foot { color: var(--text-dim); font-size: 9.5px; margin-bottom: 0 !important; }

/* ============================================================
   ANALYSEUR SPECTRAL — poste « signal capté »
   ============================================================ */
.spectral {
  margin: 14px 0 6px;
  border: 1px solid var(--accent-dim);
  background: #04080b;
  border-radius: 2px;
  padding: 12px;
}
.spectral-canvas {
  display: block;
  width: 100%;
  max-width: 560px;
  height: auto;
  margin: 0 auto 10px;
  background: #000;
  border: 1px solid #12242c;
  border-radius: 2px;
  image-rendering: auto;
}
.spectral-controls { text-align: center; }
.spectral-run {
  font: inherit;
  font-size: 11px;
  letter-spacing: 0.04em;
  color: var(--accent);
  background: #05121a;
  border: 1px solid var(--accent-dim);
  border-radius: 2px;
  padding: 7px 14px;
  cursor: pointer;
}
.spectral-run:hover:not(:disabled) { border-color: var(--accent); background: #071a26; }
.spectral-run:disabled { color: var(--text-dim); cursor: default; opacity: 0.7; }
.spectral.spectral-running .spectral-canvas { border-color: var(--accent); }

.spectral-form { margin-top: 12px; }
.spectral-label {
  display: block;
  font-size: 9.5px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--text-dim);
  margin-bottom: 5px;
}
.spectral-entry { display: flex; gap: 8px; flex-wrap: wrap; }
.spectral-entry input {
  flex: 1 1 160px;
  font: inherit;
  font-size: 13px;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  color: var(--text);
  background: #02060a;
  border: 1px solid var(--accent-dim);
  border-radius: 2px;
  padding: 8px 10px;
}
.spectral-entry input:focus { outline: none; border-color: var(--accent); }
.spectral-entry button {
  font: inherit;
  font-size: 11px;
  color: var(--accent);
  background: #05121a;
  border: 1px solid var(--accent-dim);
  border-radius: 2px;
  padding: 8px 14px;
  cursor: pointer;
}
.spectral-entry button:hover { border-color: var(--accent); }
.spectral-status { margin: 8px 0 0; font-size: 10.5px; min-height: 1em; }
.spectral-status.ok { color: var(--accent); }
.spectral-status.ko { color: var(--danger); }
.spectral.spectral-shake { animation: spectralShake 0.4s ease; }
@keyframes spectralShake {
  10%, 90% { transform: translateX(-1px); }
  30%, 70% { transform: translateX(2px); }
  50% { transform: translateX(-2px); }
}
.spectral-reveal {
  margin-top: 14px;
  border-top: 1px solid var(--accent-dim);
  padding-top: 12px;
  animation: spectralReveal 0.7s ease;
}
.spectral-reveal .entry-head { color: var(--accent); }
@keyframes spectralReveal { from { opacity: 0; } to { opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .spectral.spectral-shake { animation: none; }
  .spectral-reveal { animation: none; }
}

/* ============================================================
   RELEVÉ DE SCANSION — poste « compter les impulsions »
   (partage l'essentiel du style de l'analyseur spectral)
   ============================================================ */
.scansion {
  margin: 14px 0 6px;
  border: 1px solid var(--accent-dim);
  background: #04080b;
  border-radius: 2px;
  padding: 12px;
}
.scansion-canvas {
  display: block;
  width: 100%;
  max-width: 560px;
  height: auto;
  margin: 0 auto 10px;
  background: #000;
  border: 1px solid #12242c;
  border-radius: 2px;
}
.scansion-controls { text-align: center; }
.scansion-run {
  font: inherit; font-size: 11px; letter-spacing: 0.04em;
  color: var(--accent); background: #05121a;
  border: 1px solid var(--accent-dim); border-radius: 2px;
  padding: 7px 14px; cursor: pointer;
}
.scansion-run:hover:not(:disabled) { border-color: var(--accent); background: #071a26; }
.scansion-run:disabled { color: var(--text-dim); cursor: default; opacity: 0.7; }
.scansion-form { margin-top: 12px; }
.scansion-label {
  display: block; font-size: 9.5px; letter-spacing: 0.1em;
  text-transform: uppercase; color: var(--text-dim); margin-bottom: 5px;
}
.scansion-entry { display: flex; gap: 8px; flex-wrap: wrap; }
.scansion-entry input {
  flex: 0 0 90px; font: inherit; font-size: 15px;
  letter-spacing: 0.2em; text-align: center; color: var(--text);
  background: #02060a; border: 1px solid var(--accent-dim);
  border-radius: 2px; padding: 8px 10px;
}
.scansion-entry input:focus { outline: none; border-color: var(--accent); }
.scansion-entry button {
  font: inherit; font-size: 11px; color: var(--accent);
  background: #05121a; border: 1px solid var(--accent-dim);
  border-radius: 2px; padding: 8px 14px; cursor: pointer;
}
.scansion-entry button:hover { border-color: var(--accent); }
.scansion-status { margin: 8px 0 0; font-size: 10.5px; min-height: 1em; }
.scansion-status.ok { color: var(--accent); }
.scansion-status.ko { color: var(--danger); }
.scansion.scansion-shake { animation: spectralShake 0.4s ease; }
.scansion-reveal {
  margin-top: 14px; border-top: 1px solid var(--accent-dim);
  padding-top: 12px; animation: spectralReveal 0.7s ease;
}
.scansion-reveal .entry-head { color: var(--accent); }
@media (prefers-reduced-motion: reduce) {
  .scansion.scansion-shake { animation: none; }
  .scansion-reveal { animation: none; }
}

/* ============================================================
   PORTEUSE DE CONNEXION — tracé sous le statut de login
   ============================================================ */
.login-carrier {
  height: 2px;
  margin: 12px 0 2px;
  border-radius: 2px;
  background: #0a1a22;
  position: relative;
  overflow: hidden;
}
.login-carrier.connecting::after {
  content: "";
  position: absolute;
  top: 0; bottom: 0;
  left: -42%;
  width: 42%;
  background: linear-gradient(90deg, transparent, var(--accent), transparent);
  animation: carrierScan 1.05s linear infinite;
}
@keyframes carrierScan { from { left: -42%; } to { left: 100%; } }
.login-carrier.ok { background: var(--accent-dim); }
.login-carrier.ok::after {
  content: ""; position: absolute; inset: 0;
  background: var(--accent); opacity: 0.6;
}
.login-carrier.fail { background: var(--danger-dim); }
.login-carrier.fail::after {
  content: ""; position: absolute; inset: 0;
  background: var(--danger); opacity: 0.5;
}
.motion-reduced .login-carrier.connecting::after { animation: none; left: 0; width: 100%; opacity: 0.3; }
@media (prefers-reduced-motion: reduce) {
  .login-carrier.connecting::after { animation: none; left: 0; width: 100%; opacity: 0.3; }
}

/* easter egg LIMEN : corruption brève de l'écran de connexion */
.login-box.limen-breach { animation: limenBreach 0.42s steps(2) infinite; }
@keyframes limenBreach {
  0%   { transform: translate(0, 0); filter: none; }
  25%  { transform: translate(-1px, 0); filter: invert(0.05) hue-rotate(-18deg); }
  50%  { transform: translate(1px, -1px); filter: none; }
  75%  { transform: translate(-1px, 1px); filter: invert(0.05) hue-rotate(12deg); }
  100% { transform: translate(0, 0); filter: none; }
}
.login-status.limen-voice {
  color: var(--danger);
  letter-spacing: 0.05em;
  animation: flickerText 1.6s steps(1) infinite;
}
@media (prefers-reduced-motion: reduce) {
  .login-box.limen-breach { animation: none; }
  .login-status.limen-voice { animation: none; }
}
/* refus « comptes des morts » : calme et froid */
.login-status.omen { color: var(--danger); font-style: italic; }

/* recherche de l'interdit : le registre a compté la requête */
.registry-empty.registry-omen { color: var(--danger); font-style: italic; }
.registry-aion-link { color: var(--accent); font-style: normal; white-space: nowrap; }

/* K2–004 : la cellule condamnée réagit à qui insiste (reconstitution) */
.dossier-table .action-disabled.recons-gate {
  cursor: pointer;
  border-bottom: 1px dotted #4a4f55;
  transition: color .25s ease, border-color .25s ease;
}
.dossier-table .action-disabled.recons-gate:hover,
.dossier-table .action-disabled.recons-gate:focus {
  color: #7a5a48;
  border-bottom-color: #6a4030;
  outline: none;
}
.recons-form {
  display: flex; align-items: center; gap: 6px; flex-wrap: wrap;
  margin-top: 8px;
}
.recons-input {
  width: 130px; background: var(--bg); border: 1px solid #3a2018;
  color: var(--accent); font-family: var(--mono); font-size: 11px;
  letter-spacing: .1em; padding: 5px 8px; border-radius: 2px; text-transform: uppercase;
}
.recons-input:focus { outline: none; border-color: var(--warn); }
.recons-go {
  background: #1a0e0a; border: 1px solid #3a2018; color: #e0a06a;
  font-size: 12px; line-height: 1; padding: 5px 9px; border-radius: 2px; cursor: pointer;
}
.recons-go:hover { border-color: var(--warn); color: var(--warn); }
.recons-msg { font-size: 10.5px; font-style: italic; }
.recons-msg.ok { color: var(--stamp); }
.recons-msg.no { color: var(--danger); }
.recons-form.shake { animation: recons-shake .32s ease; }
@keyframes recons-shake {
  0%,100% { transform: translateX(0); }
  20% { transform: translateX(-4px); }
  40% { transform: translateX(4px); }
  60% { transform: translateX(-3px); }
  80% { transform: translateX(3px); }
}
.motion-reduced .recons-form.shake { animation: none; }

/* insistance : la présence de trop, notée en passant */
.presence-omen {
  position: fixed; top: 58px; left: 50%; transform: translateX(-50%) translateY(-6px);
  z-index: 1400; pointer-events: none; max-width: min(420px, 92vw); text-align: center;
  font-family: var(--mono); font-size: 12px; color: var(--danger); font-style: italic;
  padding: 10px 18px; background: radial-gradient(closest-side, rgba(2,3,4,0.92), rgba(2,3,4,0));
  opacity: 0; transition: opacity 0.9s ease, transform 0.9s ease;
}
.presence-omen.show { opacity: 1; transform: translateX(-50%) translateY(0); }

/* ============================================================
   LE DERNIER MIROIR — terminal de dialogue
   ============================================================ */
.miroir-body {
  margin: 0;
  background: radial-gradient(120% 90% at 50% 0%, #06090c 0%, #020304 70%);
  min-height: 100vh;
}
.miroir {
  max-width: 720px;
  margin: 0 auto;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  padding: 18px 16px 20px;
  box-sizing: border-box;
  font-family: "SFMono-Regular", Menlo, Consolas, monospace;
}
.miroir-head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding-bottom: 12px; border-bottom: 1px solid #14202a; flex-wrap: wrap;
}
.miroir-id { font-size: 10.5px; letter-spacing: 0.12em; color: #5f7683; }
.miroir-meter { display: flex; align-items: center; gap: 8px; }
.miroir-meter-label { font-size: 9px; letter-spacing: 0.15em; text-transform: uppercase; color: #465863; }
.miroir-meter-bar { width: 120px; height: 4px; background: #0c151b; border: 1px solid #14202a; border-radius: 2px; overflow: hidden; }
.miroir-meter-fill { height: 100%; width: 100%; background: var(--accent); transition: width 0.6s linear, background 1.2s linear; }
.miroir-meter-pct { font-size: 10px; color: #5f7683; font-variant-numeric: tabular-nums; min-width: 34px; text-align: right; }

.miroir-log {
  flex: 1; overflow-y: auto; padding: 18px 2px; display: flex; flex-direction: column; gap: 12px;
  font-size: 14px; line-height: 1.62;
}
.miroir-line { max-width: 90%; white-space: pre-wrap; word-break: break-word; }
.miroir-line.you { align-self: flex-end; color: #7f8b96; border-right: 2px solid #26424f; padding-right: 10px; text-align: right; }
.miroir-line.them { align-self: flex-start; color: #c7d3d9; border-left: 2px solid #26424f; padding-left: 10px; }
.miroir-line.them.tempt { color: #d9b06a; border-left-color: #6a4f1a; }
.miroir-line.them.fight { color: #9fb6c2; font-style: italic; opacity: 0.92; }
.miroir-line.them.bleed { color: #4c5f6b; font-size: 12px; font-style: italic; }
.miroir-line.sys { align-self: center; color: #46586a; font-size: 12px; text-align: center; }
.miroir-line.erase { align-self: flex-start; color: #d4453f; border-left-color: #4a2320; padding-left: 10px; }

.miroir-controls { border-top: 1px solid #14202a; padding-top: 12px; }
.miroir-form { display: flex; gap: 8px; }
.miroir-input {
  flex: 1; font: inherit; font-size: 14px; color: #dce6ea;
  background: #04090c; border: 1px solid #1c2b34; border-radius: 3px; padding: 10px 12px;
}
.miroir-input:focus { outline: none; border-color: #2e5a6b; }
.miroir-input:disabled { color: #3a4750; }
.miroir-send { font: inherit; font-size: 18px; color: var(--accent); background: #05121a; border: 1px solid #1c2b34; border-radius: 3px; padding: 0 16px; cursor: pointer; }
.miroir-send:hover:not(:disabled) { border-color: var(--accent); }
.miroir-send:disabled { color: #3a4750; cursor: default; }
.miroir-open {
  display: block; width: 100%; margin-top: 10px; font: inherit; font-size: 11px; letter-spacing: 0.03em;
  color: #7a5320; background: #0c0803; border: 1px solid #3a2a10; border-radius: 3px; padding: 9px; cursor: pointer;
}
.miroir-open:hover:not(:disabled) { color: var(--danger); border-color: #4a2320; background: #120705; }
.miroir-open:disabled { opacity: 0.4; cursor: default; }
.miroir-confirm-open { margin-top: 10px; padding: 10px; border: 1px solid #4a2320; border-radius: 3px; background: #0b0405; font-size: 12px; color: #caa; display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.miroir-confirm-open span { flex: 1 1 200px; }
.miroir-open-yes { font: inherit; font-size: 11px; color: #fff; background: #6a201c; border: 1px solid var(--danger); border-radius: 3px; padding: 6px 14px; cursor: pointer; }
.miroir-open-no { font: inherit; font-size: 11px; color: #8aa; background: #05121a; border: 1px solid #1c2b34; border-radius: 3px; padding: 6px 14px; cursor: pointer; }
.miroir-coda { margin: 16px 2px 4px; padding: 12px; border: 1px solid #4a2320; border-radius: 3px; background: #0b0405; color: #b98; font-size: 12.5px; line-height: 1.6; }

/* dérive : le cadre se corrompt à mesure que l'intégrité tombe */
.miroir[data-stage="1"] .miroir-meter-fill { background: #b8c34a; }
.miroir[data-stage="2"] .miroir-meter-fill { background: var(--warn); }
.miroir[data-stage="3"] .miroir-meter-fill { background: var(--danger); }
.miroir[data-stage="2"] .miroir-id { color: #6a4f4a; }
.miroir[data-stage="3"] { animation: miroirJitter 5s steps(1) infinite; }
.miroir[data-stage="3"] .miroir-id { color: var(--danger); letter-spacing: 0.3em; }
@keyframes miroirJitter { 0%, 96%, 100% { transform: translateX(0); } 97% { transform: translateX(-1px); } 98% { transform: translateX(1px); } }
.miroir.miroir-dark { transition: opacity 2.6s ease; opacity: 0.06; pointer-events: none; }
.miroir.miroir-open .miroir-meter-fill { background: var(--danger); }

.miroir-locked { max-width: 460px; margin: 18vh auto 0; text-align: center; color: #5f7683; font-family: monospace; font-size: 13px; line-height: 1.7; padding: 0 20px; }
.miroir-locked-title { font-size: 28px; letter-spacing: 0.4em; color: #26333c; margin-bottom: 18px; }
.miroir-locked-back { display: inline-block; margin-top: 20px; color: var(--accent); border: 1px solid #1c2b34; padding: 7px 16px; border-radius: 3px; }

@media (prefers-reduced-motion: reduce) {
  .miroir[data-stage="3"] { animation: none; }
  .miroir-meter-fill { transition: none; }
}

/* Dérive du filet d'assistance : le cadre se corrompt à mesure que le
   ton bascule du registre administratif vers l'entité. */
.escalation-drift-1 {
  border-color: var(--warn);
  box-shadow: inset 0 0 0 1px rgba(217, 164, 65, 0.14);
}
.escalation-drift-2 {
  border-color: var(--danger-dim);
  background: #070406;
}
.escalation-drift-2 .escalation-head {
  color: var(--danger);
  animation: flickerText 3.4s steps(1) infinite;
}
.escalation-drift-3 {
  border-color: var(--danger);
  background: #080304;
  box-shadow: inset 0 0 24px rgba(212, 69, 63, 0.10);
}
.escalation-drift-3 .escalation-head {
  color: var(--danger);
  letter-spacing: 0.5em;
  animation: flickerText 2.1s steps(1) infinite;
}
.escalation-drift-3 .escalation-foot { color: var(--danger); }
@media (prefers-reduced-motion: reduce) {
  .escalation-drift-2 .escalation-head,
  .escalation-drift-3 .escalation-head { animation: none; }
}

/* Accusé de montée d'habilitation, porté en tête du registre. */
.levelup-banner {
  position: relative;
  margin: 0 0 16px;
  border: 1px solid var(--accent-dim);
  border-left: 2px solid var(--accent);
  background: #04090c;
  border-radius: 2px;
  padding: 10px 34px 10px 12px;
  font-size: 11px;
  line-height: 1.6;
  color: var(--text);
}
.levelup-banner strong { color: var(--accent); font-weight: 600; margin-right: 4px; }
.levelup-close {
  position: absolute;
  top: 4px;
  right: 6px;
  background: none;
  border: none;
  color: var(--text-dim);
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  padding: 2px 4px;
}
.levelup-close:hover { color: var(--accent); }

/* ============================================================
   TRANSCRIPTION RADIO
   ============================================================ */
/* les sélecteurs sont préfixés par .entry-body : la règle générique
   « .entry-body p » est plus spécifique qu'une simple classe et
   écraserait sinon marges et couleurs. */
.entry-body p.radio-line {
  margin: 0 0 6px;
  font-size: 13px;
}
.radio-speaker {
  color: var(--text-dim);
  font-size: 10.5px;
  letter-spacing: 0.08em;
  margin-right: 6px;
}
.entry-body p.radio-sys {
  margin: 0 0 6px;
  font-size: 11.5px;
  color: var(--text-dim);
  letter-spacing: 0.04em;
  padding-left: 10px;
  border-left: 1px solid var(--line);
}
.entry-body p.radio-note {
  margin: 0 0 6px;
  font-size: 11.5px;
  color: var(--text-dim);
  font-style: italic;
}

/* second signal : « reproduit en retrait et en italique »
   + très léger dédoublement chromatique, comme une impression mal calée */
.entry-body p.radio-signal2 {
  margin: 0 0 6px 26px;
  padding-left: 11px;
  font-size: 13px;
  font-style: italic;
  color: #aab6c0;
  border-left: 1px solid #2a323a;
  text-shadow: 1px 0 rgba(111, 211, 255, 0.16), -1px 0 rgba(212, 69, 63, 0.11);
}

/* ---------- module d'écoute médico-légale ---------- */
.audio-piece {
  border: 1px solid var(--line);
  background: #05070a;
  border-radius: 2px;
  padding: 12px 14px;
  margin: 14px 0;
}
.audio-piece-head {
  color: var(--accent);
  font-size: 10.5px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin-bottom: 3px;
}
.audio-piece-meta {
  color: var(--text-dim);
  font-size: 10.5px;
  margin-bottom: 10px;
}
.audio-piece audio {
  width: 100%;
  height: 34px;
  display: block;
  filter: invert(0.88) hue-rotate(180deg) saturate(0.5);
}
.audio-piece-note {
  color: var(--text-dim);
  font-size: 10.5px;
  font-style: italic;
  line-height: 1.55;
  margin-top: 10px;
}

/* Le second signal cesse, mais sa signature passe sur l'autre canal. */
.entry-body p.radio-echo {
  color: #aab6c0;
  text-shadow: 1px 0 rgba(111,211,255,0.16), -1px 0 rgba(212,69,63,0.11);
}

@media (max-width: 640px) {
  .entry-body p.radio-signal2 { margin-left: 12px; padding-left: 8px; }
}

/* ============================================================
   HABILITATION DE LA SESSION — RESTRICTION VOLONTAIRE
   ============================================================ */
.clearance-ctl { position: relative; display: inline-block; }
.clearance-badge {
  background: transparent;
  border: 1px solid var(--line);
  color: var(--text-dim);
  font: inherit;
  font-size: 10.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  padding: 4px 8px;
  border-radius: 2px;
  cursor: pointer;
}
.clearance-badge:hover { color: var(--text); border-color: var(--accent); }
.clearance-menu {
  position: absolute;
  top: calc(100% + 6px);
  right: 0;
  z-index: 60;
  min-width: 210px;
  background: #05070a;
  border: 1px solid var(--line);
  border-radius: 2px;
  padding: 10px;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.6);
}
.clearance-menu-head {
  color: var(--accent);
  font-size: 10px;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  margin-bottom: 8px;
}
.clearance-opt {
  display: block;
  width: 100%;
  text-align: left;
  background: transparent;
  border: 1px solid transparent;
  color: var(--text);
  font: inherit;
  font-size: 12px;
  padding: 5px 7px;
  border-radius: 2px;
  cursor: pointer;
}
.clearance-opt:hover { border-color: var(--line); background: rgba(111, 211, 255, 0.05); }
.clearance-menu-foot {
  color: var(--text-dim);
  font-size: 10px;
  font-style: italic;
  margin-top: 8px;
  line-height: 1.5;
}

/* ============================================================
   REFUS RÉPÉTÉ — INSISTANCE DU DOSSIER
   ============================================================ */
.dlpanel-scope {
  color: var(--text-dim);
  font-size: 11px;
  line-height: 1.6;
  margin: 12px 0 0;
  padding-top: 10px;
  border-top: 1px solid var(--line);
}
.refusal-box {
  border: 1px solid var(--line);
  border-left-width: 2px;
  background: #05070a;
  border-radius: 2px;
  padding: 12px 14px;
  margin: 0 0 16px;
}
.refusal-box.stage-2 { border-left-color: #3a2f22; }
.refusal-box.stage-3 { border-left-color: var(--danger); }
.refusal-voice {
  color: var(--text-dim);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  margin-bottom: 6px;
}
.refusal-box.stage-3 .refusal-voice { color: var(--danger); }
.refusal-text {
  margin: 0 0 8px;
  font-size: 13px;
  color: var(--text);
  line-height: 1.7;
}
.refusal-box.stage-3 .refusal-text {
  color: #aab6c0;
  text-shadow: 1px 0 rgba(111, 211, 255, 0.16), -1px 0 rgba(212, 69, 63, 0.11);
}
.refusal-count {
  color: var(--text-dim);
  font-size: 10.5px;
  font-style: italic;
}

/* ============================================================
   MISE SOUS SCELLÉS — FIN DE PARTIE
   ============================================================ */
.seal-block {
  border: 1px solid var(--line);
  background: #05070a;
  border-radius: 2px;
  padding: 22px 20px;
  margin: 20px 0 0;
}
.seal-stamp {
  display: inline-block;
  border: 1px solid var(--text-dim);
  color: var(--text-dim);
  font-size: 11px;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  padding: 5px 14px;
  border-radius: 2px;
  margin-bottom: 18px;
  transform: rotate(-1.5deg);
}
.seal-log { margin-bottom: 14px; }
.seal-sys {
  margin: 0 0 7px;
  font-size: 12px;
  color: var(--text-dim);
  letter-spacing: 0.03em;
  line-height: 1.6;
}
.seal-voice {
  margin: 0 0 12px;
  font-size: 13.5px;
  color: var(--text);
  letter-spacing: 0.02em;
  line-height: 1.7;
}
.seal-note {
  margin: 20px 0 0;
  padding-top: 14px;
  border-top: 1px solid var(--line);
  font-size: 11.5px;
  font-style: italic;
  color: var(--text-dim);
  line-height: 1.7;
}
.seal-back { margin: 16px 0 0; font-size: 12.5px; }

/* l'assistant retiré : une ligne grise là où le panneau se tenait */
.assist-retired {
  position: fixed;
  right: 16px;
  bottom: 16px;
  z-index: 40;
  max-width: min(320px, calc(100vw - 32px));
  border: 1px solid var(--line);
  background: #05070a;
  border-radius: 2px;
  padding: 9px 12px;
  color: var(--text-dim);
  font-size: 10.5px;
  letter-spacing: 0.03em;
  line-height: 1.5;
}

.assist-miroir-offer {
  max-width: min(360px, calc(100vw - 32px));
  border-color: #3a2a10;
  background: #0a0806;
}
.assist-miroir-head { color: var(--warn); font-size: 9px; letter-spacing: 0.12em; text-transform: uppercase; margin-bottom: 6px; }
.assist-miroir-text { margin: 0 0 8px; color: var(--text); font-size: 11px; line-height: 1.6; }
.assist-miroir-link {
  display: inline-block; color: var(--warn); border: 1px solid #4a3a1a; border-radius: 2px;
  padding: 6px 12px; font-size: 11px; letter-spacing: 0.03em;
}
.assist-miroir-link:hover { border-color: var(--warn); background: #120d05; }

@media (max-width: 640px) {
  .clearance-menu { right: auto; left: 0; min-width: 190px; }
  .seal-block { padding: 18px 14px; }
  .assist-retired { right: 10px; bottom: 10px; left: 10px; max-width: none; }
}

/* ============================================================
   TENSION DU TERMINAL PENDANT LES REFUS
   Trois paliers. La page ne se dégrade pas parce que le joueur
   se trompe : elle se dégrade parce que quelque chose insiste.
   Les animations sont neutralisées par « Effets : réduits ».
   ============================================================ */
@keyframes strainFlicker {
  0%, 92%, 100% { opacity: 1; }
  93% { opacity: 0.45; }
  95% { opacity: 1; }
  96.5% { opacity: 0.7; }
}
@keyframes strainShift {
  0%, 88%, 100% { transform: translate(0, 0); text-shadow: none; }
  90% { transform: translate(-1px, 0); text-shadow: 1px 0 rgba(212, 69, 63, 0.5), -1px 0 rgba(111, 211, 255, 0.5); }
  92% { transform: translate(1px, 0); text-shadow: -1px 0 rgba(212, 69, 63, 0.4), 1px 0 rgba(111, 211, 255, 0.4); }
  94% { transform: translate(0, 0); text-shadow: none; }
}

body.refusing-1 .classif-banner { animation: strainFlicker 6s steps(1) infinite; }

body.refusing-2 { filter: saturate(0.82); }
body.refusing-2 .classif-banner { animation: strainFlicker 3.4s steps(1) infinite; }
body.refusing-2 .topbar .brand { animation: strainShift 5s steps(1) infinite; }
body.refusing-2 .dossier-header .page-title { animation: strainShift 7s steps(1) infinite; }

body.refusing-3 { filter: saturate(0.6) contrast(1.06); }
body.refusing-3 .classif-banner {
  background: #3a1512;
  color: #ffc9c4;
  animation: strainFlicker 1.9s steps(1) infinite;
}
body.refusing-3 .topbar .brand { animation: strainShift 2.6s steps(1) infinite; }
body.refusing-3 .dossier-header .page-title { animation: strainShift 3.4s steps(1) infinite; }
body.refusing-3 .keygate-title { animation: strainShift 4.2s steps(1) infinite; }
body.refusing-3 main { animation: strainFlicker 8s steps(1) infinite; }

/* Onze marques — le même motif que celui qui court dans les dossiers.
   Ni jauge ni pourcentage : un relevé, comme le reste de l'archive. */
.refusal-tally {
  display: flex;
  gap: 5px;
  margin-top: 10px;
  padding-top: 9px;
  border-top: 1px solid var(--line);
}
.refusal-tick {
  width: 9px;
  height: 14px;
  border: 1px solid var(--line);
  border-radius: 1px;
}
.refusal-tick.is-set { background: var(--text-dim); border-color: var(--text-dim); }
.refusal-box.stage-3 .refusal-tick.is-set { background: var(--danger); border-color: var(--danger); }

/* ============================================================
   MANUSCRIT / DOSSIER ÉDITORIAL
   ============================================================ */
.pub-title {
  margin: 0 0 8px;
  font-size: 14px;
  color: var(--text-bright);
  line-height: 1.6;
}
.pub-authors { margin: 0 0 10px; font-size: 12.5px; color: var(--text-dim); }
.pub-abstract {
  margin: 0;
  font-size: 13px;
  line-height: 1.8;
  text-align: justify;
  padding-left: 12px;
  border-left: 1px solid var(--line);
}
.pub-letter {
  margin: 0 0 12px;
  font-size: 13px;
  line-height: 1.75;
  padding-left: 12px;
  border-left: 1px solid var(--line);
}
.pub-verdict {
  margin: 14px 0 0;
  font-size: 12px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--warn);
}

.pub-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 12px;
  margin: 4px 0 10px;
}
.pub-table th {
  text-align: left;
  font-weight: 600;
  color: var(--text-dim);
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 0 10px 6px 0;
  border-bottom: 1px solid var(--line);
}
.pub-table td {
  padding: 8px 10px 8px 0;
  border-bottom: 1px dashed var(--line);
  vertical-align: top;
}
.pub-table tr:last-child td { border-bottom: none; }
.pub-table .ghost-row td { color: var(--text-dim); font-style: italic; }
.ext { font-size: 9px; margin-left: 3px; vertical-align: super; opacity: 0.75; }

/* ============================================================
   PIÈCE CLASSIFIÉE AU-DESSUS DU DOSSIER
   ============================================================ */
.piece-locked .piece-head h3 { color: var(--text-dim); }
.piece-locked .piece-chevron { color: var(--text-dim); }
.piece-locked .piece-head::before {
  content: "\1F512";
  margin-right: 8px;
  font-size: 11px;
  opacity: 0.75;
}
.piece-denied {
  border-left: 2px solid var(--warn-dim);
  padding-left: 12px;
}
.piece-denied p {
  margin: 0 0 9px;
  font-size: 12.5px;
  color: var(--text-dim);
  line-height: 1.7;
}
.piece-denied p:last-child { margin-bottom: 0; }
.piece-denied strong { color: var(--warn); }

@media (max-width: 640px) {
  .pub-table { font-size: 11.5px; }
  .pub-abstract, .pub-letter { padding-left: 9px; text-align: left; }
}

/* ============================================================
   REGISTRE DU SECTEUR NR
   ============================================================ */
.reg-stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 1px;
  background: var(--line);
  border: 1px solid var(--line);
  border-radius: 2px;
  margin: 0 0 10px;
}
.reg-stat {
  background: var(--bg-panel);
  padding: 14px 14px 12px;
  display: flex;
  flex-direction: column;
  gap: 3px;
}
.reg-stat-n {
  font-size: 22px;
  line-height: 1.1;
  color: var(--text-bright);
  font-variant-numeric: tabular-nums;
}
.reg-stat-k {
  font-size: 9.5px;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  color: var(--text-dim);
}
.reg-stats-note {
  font-size: 10.5px;
  font-style: italic;
  color: var(--text-dim);
  margin: 0 0 22px;
}

.reg-entry {
  border-bottom: 1px dashed var(--line);
  padding: 0 0 14px;
  margin-bottom: 14px;
}
.reg-entry:last-child { border-bottom: none; margin-bottom: 0; padding-bottom: 0; }
.reg-entry-head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 10px;
  margin-bottom: 6px;
}
.reg-nom {
  color: var(--text-bright);
  font-size: 13.5px;
  letter-spacing: 0.03em;
}
.reg-cote {
  font-size: 9px;
  letter-spacing: 0.09em;
  text-transform: uppercase;
  padding: 2px 7px;
  border-radius: 2px;
  border: 1px solid var(--line);
  color: var(--text-dim);
  white-space: nowrap;
}
.reg-cote.cote-evasion { color: #f0b4b0; border-color: #5a2a26; background: var(--danger-dim); }
.reg-cote.cote-refus { color: var(--stamp); border-color: #2c4433; }
.reg-cote.cote-perimetre { color: var(--accent); border-color: var(--accent-dim); }

/* distinction : l'aboutissement le plus rare */
.reg-dist {
  font-size: 9px; letter-spacing: 0.09em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 2px; border: 1px solid var(--line);
  white-space: nowrap;
}
.reg-dist.dist-tenu {
  color: #ffd98a; border-color: #6a4f1a; background: #1a1305;
  box-shadow: 0 0 0 1px rgba(217, 164, 65, 0.12);
}
.reg-dist.dist-rouverte { color: #f0b4b0; border-color: #5a2a26; background: var(--danger-dim); }
.reg-dist.dist-complet { color: var(--text-dim); border-color: var(--accent-dim); }
.reg-message {
  margin: 0 0 7px;
  font-size: 13px;
  line-height: 1.75;
  color: var(--text);
  padding-left: 12px;
  border-left: 1px solid var(--line);
}
.reg-meta {
  font-size: 10.5px;
  color: var(--text-dim);
  letter-spacing: 0.02em;
}
.reg-radier {
  margin-top: 8px;
  background: none;
  border: 1px solid var(--danger-dim);
  color: var(--danger);
  font-size: 9.5px;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  padding: 3px 8px;
  border-radius: 2px;
}
.reg-radier:hover:not(:disabled) { background: var(--danger-dim); }
.reg-radier:disabled { opacity: 0.5; cursor: progress; }

.reg-count { float: right; text-transform: none; letter-spacing: 0; opacity: 0.8; }
#reg-message {
  width: 100%;
  background: #05070a;
  border: 1px solid var(--line);
  color: var(--text-bright);
  font-family: var(--mono);
  font-size: 13px;
  line-height: 1.6;
  padding: 9px 10px;
  border-radius: 2px;
  resize: vertical;
}
#reg-message:focus { outline: none; border-color: var(--accent-dim); }

/* pot de miel : hors flux, hors tabulation, invisible à l'écran */
.reg-honey {
  position: absolute;
  left: -9999px;
  width: 1px;
  height: 1px;
  overflow: hidden;
}

/* accès au registre depuis l'écran noir de l'évasion */
.ghost-link { display: inline-block; text-decoration: none; }
.ghost-link:hover { text-decoration: underline; }

/* renvoi depuis le registre des dossiers */
.reg-link {
  display: block;
  border: 1px solid var(--line);
  border-left: 2px solid var(--accent-dim);
  background: #05070a;
  border-radius: 2px;
  padding: 11px 14px;
  margin: 0 0 20px;
  font-size: 12px;
  color: var(--text-dim);
}
.reg-link strong { color: var(--accent); font-weight: 600; }

@media (max-width: 640px) {
  .reg-stats { grid-template-columns: repeat(2, 1fr); }
  .reg-stat { padding: 11px 10px 10px; }
  .reg-stat-n { font-size: 18px; }
  .reg-message { padding-left: 9px; }
}

/* ============================================================
   CONSOLE D'ADMINISTRATION
   ============================================================ */
.admin-link { color: var(--stamp) !important; border-color: #2c4433 !important; }
.admin-link:hover { background: #0a1a10; }

.admin-main { max-width: 940px; }

.admin-denied {
  border: 1px solid var(--danger-dim);
  border-left: 2px solid var(--danger);
  background: #0a0a0a;
  padding: 14px 16px;
  border-radius: 2px;
}
.admin-denied p { margin: 0; font-size: 13px; color: var(--text); }

.admin-card {
  border: 1px solid var(--line);
  background: var(--bg-panel);
  border-radius: 2px;
  padding: 16px 18px 18px;
  margin: 0 0 16px;
}
.admin-card-secure { border-left: 2px solid var(--accent-dim); }

/* sections repliables de la console (gain de place) */
.admin-card[data-collapsible] > .admin-h2 {
  cursor: pointer;
  user-select: none;
  display: flex;
  align-items: center;
}
.admin-card[data-collapsible] > .admin-h2::after {
  content: "\25BE";
  margin-left: auto;
  padding-left: 12px;
  font-size: 12px;
  color: var(--text-dim);
  transition: transform 0.15s ease;
}
.admin-card.is-collapsed > .admin-h2 { margin-bottom: 0; }
.admin-card.is-collapsed > .admin-h2::after { transform: rotate(-90deg); }
.admin-card[data-collapsible] > .admin-h2:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 3px;
}
.admin-card.is-collapsed > *:not(.admin-h2) { display: none; }

.admin-h2 {
  margin: 0 0 10px;
  font-size: 12.5px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--text-bright);
}
.admin-lock {
  font-size: 9px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--accent);
  border: 1px solid var(--accent-dim);
  border-radius: 2px;
  padding: 1px 6px;
  margin-left: 6px;
  vertical-align: middle;
}
.admin-p { margin: 0 0 12px; font-size: 12.5px; line-height: 1.65; color: var(--text-dim); }
.admin-hint { font-size: 11px; color: var(--text-dim); font-style: italic; }
.admin-warn {
  margin: 0 0 12px; padding: 9px 12px; font-size: 12px; line-height: 1.6;
  color: var(--warn); border: 1px solid var(--warn-dim); background: #0a0a0a; border-radius: 2px;
}

.admin-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: 2px; }
.admin-state-cell { background: #05070a; padding: 9px 12px; display: flex; flex-direction: column; gap: 2px; }
.admin-state-k { font-size: 9.5px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-dim); }
.admin-state-v { font-size: 13.5px; color: var(--text-bright); font-variant-numeric: tabular-nums; }

.admin-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-top: 12px; }
.admin-btn {
  background: #05070a; border: 1px solid var(--line); color: var(--text);
  font-family: var(--mono); font-size: 12px; letter-spacing: 0.03em;
  padding: 7px 12px; border-radius: 2px; cursor: pointer; text-decoration: none; display: inline-block;
}
.admin-btn:hover { border-color: var(--accent-dim); color: var(--accent); text-decoration: none; }
.admin-btn-key { border-color: var(--accent-dim); color: var(--accent); }
.admin-btn-danger { border-color: #4a2320; color: #d98a86; }
.admin-btn-danger:hover { border-color: var(--danger); color: var(--danger); }

/* ============================================================
   NOTICE TECHNIQUE (mentions / signalement)
   ============================================================ */
.clause-fiction {
  margin: 14px 0 0; padding: 11px 13px; font-size: 11.5px; line-height: 1.65;
  color: var(--text-dim); border: 1px solid var(--line); border-left: 2px solid var(--warn-dim);
  background: #05070a; border-radius: 2px;
}
.clause-fiction strong { color: var(--warn); }
.mentions-form { margin-top: 14px; display: flex; flex-direction: column; gap: 14px; }
.mentions-form .field { margin: 0; }
.field-opt { color: var(--text-dim); font-weight: normal; font-size: 10px; }
.mentions-form select, .mentions-form input[type="text"], .mentions-form textarea {
  width: 100%; box-sizing: border-box; font-family: var(--mono); font-size: 13px;
  color: var(--text); background: #02060a; border: 1px solid var(--accent-dim);
  border-radius: 2px; padding: 9px 11px;
}
.mentions-form textarea { resize: vertical; line-height: 1.55; }
.mentions-form select:focus, .mentions-form input:focus, .mentions-form textarea:focus {
  outline: none; border-color: var(--accent);
}
.field-count { margin-top: 4px; font-size: 10px; color: var(--text-dim); text-align: right; }
.hp-field { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.mentions-actions { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.mentions-status { font-size: 11px; color: var(--text-dim); }
.mentions-status.ko { color: var(--danger); }
.hors-systeme { font-size: 15px; margin: 6px 0 10px; }
.hors-systeme a { color: var(--accent); }

/* contribution volontaire (Ko-fi, en lien diégétique — pas de script tiers) */
.contrib-line { margin: 16px 0 10px; }
.contrib-btn {
  display: inline-block; font-family: var(--mono); font-size: 13px; letter-spacing: 0.06em;
  color: var(--warn); background: #0c0803; border: 1px solid #4a3a1a;
  border-radius: 2px; padding: 11px 20px; text-decoration: none;
}
.contrib-btn:hover { border-color: var(--warn); background: #140d05; color: #f0c874; }
.contrib-note { font-size: 11px; color: var(--text-dim); margin: 0 0 10px; }

/* relevé des signalements dans la console admin */
.admin-sig { border: 1px solid var(--line); background: #05070a; border-radius: 2px; padding: 10px 12px; margin-top: 10px; }
.admin-sig-head { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 7px; font-size: 10px; }
.admin-sig-type { color: var(--warn); text-transform: uppercase; letter-spacing: 0.08em; border: 1px solid var(--warn-dim); border-radius: 2px; padding: 1px 6px; }
.admin-sig-loc { color: var(--accent); }
.admin-sig-ver { color: var(--text-dim); }
.admin-sig-date { color: var(--text-dim); margin-left: auto; }
.admin-sig-obs { margin: 0 0 6px; font-size: 12.5px; line-height: 1.55; color: var(--text); white-space: pre-wrap; word-break: break-word; }
.admin-sig-contact { margin: 0 0 8px; font-size: 11px; color: var(--text-dim); }
.admin-sig-contact-k { color: var(--accent-dim); }
.admin-sig-del { font-size: 10px; padding: 4px 10px; }

.admin-levels { display: flex; flex-wrap: wrap; gap: 6px; }
.admin-level {
  width: 40px; height: 40px; background: #05070a; border: 1px solid var(--line);
  color: var(--text); font-family: var(--mono); font-size: 15px; border-radius: 2px; cursor: pointer;
}
.admin-level:hover { border-color: var(--accent-dim); color: var(--accent); }
.admin-level.is-current { background: var(--accent-dim); border-color: var(--accent); color: var(--text-bright); }
.admin-level-now, #admin-level-now { margin-top: 10px; }

.admin-dossiers { display: flex; flex-direction: column; gap: 1px; background: var(--line); border: 1px solid var(--line); border-radius: 2px; }
.admin-dossier { background: #05070a; padding: 7px 12px; display: flex; align-items: center; gap: 12px; font-size: 12px; }
.admin-dossier-lvl { color: var(--text-dim); min-width: 62px; font-size: 10.5px; letter-spacing: 0.04em; }
.admin-dossier-ref { color: var(--text); flex: 1; }
.admin-dossier-open { color: var(--accent); }
.admin-dossier-none { color: var(--text-dim); font-style: italic; font-size: 11px; }

.admin-h3 { margin: 16px 0 8px; font-size: 11.5px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--accent); }
.admin-sol-table { width: 100%; border-collapse: collapse; font-size: 11.5px; }
.admin-sol-table th { text-align: left; font-size: 9.5px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-dim); padding: 0 8px 6px 0; border-bottom: 1px solid var(--line); }
.admin-sol-table td { padding: 7px 8px 7px 0; border-bottom: 1px dashed var(--line); vertical-align: top; color: var(--text); }
.admin-sol-lvl { color: var(--text-dim); }
.admin-sol-id { font-family: var(--mono); color: var(--text-bright); white-space: nowrap; }
.admin-sol-code { font-family: var(--mono); color: var(--stamp); white-space: nowrap; letter-spacing: 0.03em; }
.admin-sol-ou { color: var(--text-dim); font-size: 11px; line-height: 1.5; }

.admin-sol-fin { border-left: 1px solid var(--line); padding-left: 12px; margin: 0 0 12px; }
.admin-sol-fin-nom { color: var(--text-bright); font-size: 12.5px; }
.admin-sol-fin-chemin { color: var(--accent); font-size: 11.5px; display: block; margin-top: 2px; }
.admin-sol-fin-detail { color: var(--text-dim); font-size: 11.5px; line-height: 1.55; margin: 4px 0 0; }

@media (max-width: 640px) {
  .admin-grid { grid-template-columns: repeat(2, 1fr); }
  .admin-sol-table { font-size: 11px; }
  .admin-dossier { flex-wrap: wrap; gap: 6px; }
}

/* ============================================================
   CONSTATATIONS — relevé au registre de fin
   ============================================================ */
.reg-constat-list { margin-top: 12px; display: flex; flex-direction: column; gap: 1px; }
.reg-constat {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 7px 2px;
  border-bottom: 1px dashed var(--line);
  font-size: 13px;
}
.reg-constat:last-child { border-bottom: none; }
.reg-constat-mark {
  width: 16px;
  text-align: center;
  color: var(--text-dim);
  font-size: 12px;
  flex-shrink: 0;
}
.reg-constat.is-found .reg-constat-mark { color: var(--stamp); }
.reg-constat-nom { color: var(--text); }
.reg-constat.is-found .reg-constat-nom { color: var(--text-bright); }
.reg-constat-caviarde {
  color: #14181c;
  background: #14181c;
  border-radius: 2px;
  letter-spacing: -1px;
  user-select: none;
}
#reg-constat-count { font-variant-numeric: tabular-nums; }

/* easter eggs découverts (registre) — mêmes codes que les constatations */
.reg-egg-list { margin-top: 12px; display: flex; flex-direction: column; gap: 1px; }
.reg-egg {
  display: flex;
  align-items: baseline;
  gap: 10px;
  padding: 7px 2px;
  border-bottom: 1px dashed var(--line);
  font-size: 13px;
}
.reg-egg:last-child { border-bottom: none; }
.reg-egg-mark {
  width: 16px;
  text-align: center;
  color: var(--text-dim);
  font-size: 12px;
  flex-shrink: 0;
}
.reg-egg.is-found .reg-egg-mark { color: var(--stamp); }
.reg-egg-nom { color: var(--text); }
.reg-egg.is-found .reg-egg-nom { color: var(--text-bright); }
.reg-egg-caviarde {
  color: #14181c;
  background: #14181c;
  border-radius: 2px;
  letter-spacing: -1px;
  user-select: none;
}
#reg-egg-count { font-variant-numeric: tabular-nums; }
.reg-egg-reward {
  margin: 4px 0 12px;
  padding: 12px 14px;
  border: 1px solid #6a4f1a;
  border-radius: 3px;
  background: #1a1305;
  color: #ffd98a;
  font-size: 12.5px;
  line-height: 1.7;
  box-shadow: 0 0 0 1px rgba(217, 164, 65, 0.12);
}
.reg-egg-reward strong { color: #ffe6a8; letter-spacing: 0.02em; }

/* titre décerné : matricule distingué au registre public */
.reg-nom-distingue {
  color: #ffe6a8;
  text-shadow: 0 0 12px rgba(217, 164, 65, 0.35);
}
.reg-titre {
  font-size: 9px; letter-spacing: 0.09em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 2px;
  color: #ffd98a; border: 1px solid #6a4f1a; background: #1a1305;
  box-shadow: 0 0 0 1px rgba(217, 164, 65, 0.12);
  white-space: nowrap;
}

/* easter eggs (console d'administration) */
.admin-eggs-table { width: 100%; border-collapse: collapse; font-size: 11.5px; }
.admin-eggs-table th {
  text-align: left; font-size: 9.5px; letter-spacing: 0.06em; text-transform: uppercase;
  color: var(--text-dim); padding: 0 8px 6px 0; border-bottom: 1px solid var(--line);
}
.admin-eggs-table td { padding: 7px 8px 7px 0; border-bottom: 1px dashed var(--line); vertical-align: top; }
.admin-egg-nom { color: var(--text-bright); white-space: nowrap; }
.admin-egg-ou { color: var(--text); line-height: 1.6; }
.admin-egg-tag {
  font-size: 9px; letter-spacing: 0.08em; text-transform: uppercase;
  padding: 2px 7px; border-radius: 2px; border: 1px solid var(--line); white-space: nowrap;
}
.admin-egg-tag.is-found { color: var(--stamp); border-color: #2c4433; }
.admin-egg-tag.is-hidden { color: var(--text-dim); }
.admin-egg-link { color: var(--accent); white-space: nowrap; }
@media (max-width: 640px) {
  .admin-eggs-table { font-size: 11px; }
  .admin-egg-nom { white-space: normal; }
}

/* galerie des fiches du registre (console d'administration) */
.admin-galerie { margin-top: 6px; }
.admin-galerie-item {
  margin: 0 0 14px;
  padding: 12px 14px;
  background: #05070a;
  border: 1px solid var(--line);
  border-radius: 3px;
}
.admin-galerie-note {
  font-size: 10.5px;
  color: var(--text-dim);
  letter-spacing: 0.02em;
  margin-bottom: 10px;
  padding-bottom: 8px;
  border-bottom: 1px dashed var(--line);
}
.admin-galerie-item .reg-entry { padding: 0; }

/* portillon Varga : consentement (pont diégétique vers le refus) */
.dl-consent {
  margin: 10px 0 0;
  font-size: 11.5px;
  line-height: 1.6;
  color: var(--text-dim);
  font-style: italic;
  padding-top: 9px;
  border-top: 1px solid var(--line);
}
/* registre : rappel des cotes de clôture multiples */
.reg-cotes-note {
  font-size: 11.5px;
  line-height: 1.6;
  color: var(--text-dim);
  font-style: italic;
  margin: 0 0 22px;
  padding-left: 10px;
  border-left: 1px solid var(--accent-dim);
}

/* ============================================================
   SYS-001 — présentation d'accueil animée (remplace le texte de
   la pièce A par un « explicateur » maison, charte ICML).
   Le texte intégral reste disponible en transcription.
   ============================================================ */
.onbd-player{
  position:relative;width:100%;max-width:760px;margin:6px auto 4px;
  aspect-ratio:16/9;background:radial-gradient(120% 120% at 50% 0%,#0a1016 0%,#05070a 70%);
  border:1px solid var(--line);border-radius:6px;overflow:hidden;
  box-shadow:0 18px 50px rgba(0,0,0,.5);font-family:var(--mono);
}
.onbd-stage{position:absolute;inset:0;}
.onbd-slide{position:absolute;inset:0;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:14px;padding:26px 30px 54px;
  text-align:center;opacity:0;transform:translateY(8px);
  transition:opacity .6s ease,transform .6s ease;pointer-events:none;}
.onbd-slide.is-active{opacity:1;transform:none;pointer-events:auto;}
.onbd-visual{width:100%;max-width:300px;flex:0 0 auto;}
.onbd-visual svg{width:100%;height:auto;display:block;}
.onbd-chapter{font-size:10px;letter-spacing:.32em;text-transform:uppercase;color:var(--accent);opacity:.85;}
.onbd-title{font-size:20px;letter-spacing:.02em;color:var(--text-bright,#e8eef2);margin:2px 0 0;}
.onbd-lines{font-size:13px;line-height:1.6;color:var(--text,#aebac4);max-width:52ch;margin:0;}
.onbd-lines b{color:var(--stamp);font-weight:600;}
@media(max-width:560px){.onbd-title{font-size:16px;}.onbd-lines{font-size:12px;}.onbd-visual{max-width:200px;}}

/* draw-in des visuels quand la diapo devient active */
.onbd-slide .draw{stroke-dasharray:1;stroke-dashoffset:1;pathLength:1;}
.onbd-slide.is-active .draw{animation:onbdDraw 1.1s ease forwards;}
.onbd-slide .pop{opacity:0;transform:translateY(4px);}
.onbd-slide.is-active .pop{animation:onbdPop .5s ease forwards;}
.onbd-slide.is-active .pop.d1{animation-delay:.35s;}
.onbd-slide.is-active .pop.d2{animation-delay:.6s;}
.onbd-slide.is-active .pop.d3{animation-delay:.85s;}
.onbd-slide.is-active .pop.d4{animation-delay:1.1s;}
.onbd-slide .puls{animation:onbdPuls 2.2s ease-in-out infinite;transform-origin:center;}
@keyframes onbdDraw{to{stroke-dashoffset:0;}}
@keyframes onbdPop{to{opacity:1;transform:none;}}
@keyframes onbdPuls{0%,100%{opacity:1;}50%{opacity:.4;}}

/* barre de progression + chapitres + contrôles */
.onbd-progress{position:absolute;left:0;right:0;bottom:38px;height:2px;background:rgba(255,255,255,.08);}
.onbd-progress .fill{height:100%;width:0;background:var(--accent);}
.onbd-progress .fill.run{transition:width linear;}
.onbd-bottom{position:absolute;left:0;right:0;bottom:0;height:38px;display:flex;align-items:center;
  gap:10px;padding:0 12px;background:linear-gradient(0deg,rgba(3,5,8,.92),rgba(3,5,8,0));}
.onbd-btn{background:none;border:1px solid #24303a;color:#9fb0bc;border-radius:3px;
  width:26px;height:22px;font-size:11px;cursor:pointer;display:flex;align-items:center;justify-content:center;}
.onbd-btn:hover{border-color:var(--accent);color:var(--accent);}
.onbd-dots{display:flex;gap:6px;margin-left:4px;}
.onbd-dot{width:8px;height:8px;border-radius:50%;background:#24303a;cursor:pointer;border:none;padding:0;}
.onbd-dot.on{background:var(--accent);}
.onbd-dot.seen{background:#3d5563;}
.onbd-count{margin-left:auto;font-size:10px;color:#6c7a83;font-family:var(--mono);}
.onbd-tools{display:flex;gap:8px;justify-content:center;margin:6px 0 0;flex-wrap:wrap;}
.onbd-tool{background:none;border:1px solid var(--line);color:var(--text-dim,#7c8792);
  border-radius:3px;font-size:11px;padding:4px 10px;cursor:pointer;font-family:var(--mono);}
.onbd-tool:hover{border-color:var(--accent);color:var(--accent);}
.onbd-tool.on{border-color:var(--stamp);color:var(--stamp);}
.onbd-transcript-details{margin-top:10px;border-top:1px solid var(--line);padding-top:10px;}
.onbd-transcript-details summary{cursor:pointer;font-size:12px;color:var(--text-dim,#7c8792);letter-spacing:.04em;}
.onbd-transcript-details[open] summary{color:var(--accent);margin-bottom:8px;}

.motion-reduced .onbd-slide{transition:none;}
.motion-reduced .onbd-slide .draw{stroke-dashoffset:0;animation:none;}
.motion-reduced .onbd-slide .pop{opacity:1;transform:none;animation:none;}
.motion-reduced .onbd-slide .puls{animation:none;}

/* --- SYS-001 accueil : hauteur adaptative (mobile) + plein écran --- */
/* La hauteur suit le contenu (empilement en grille) : plus de texte coupé. */
.onbd-player{aspect-ratio:auto;min-height:clamp(320px,46vw,440px);}
.onbd-stage{position:static;display:grid;min-height:inherit;}
.onbd-slide{position:relative;inset:auto;grid-area:1/1;transform:none;padding:22px 22px 56px;}
.onbd-slide.is-active{transform:none;}
.onbd-player:fullscreen{max-width:none;width:100vw;height:100vh;min-height:0;border:0;border-radius:0;}
.onbd-player:fullscreen .onbd-stage{min-height:0;height:100%;}
.onbd-player:-webkit-full-screen{max-width:none;width:100vw;height:100vh;min-height:0;border:0;border-radius:0;}
.onbd-player:fullscreen .onbd-title{font-size:26px;}
.onbd-player:fullscreen .onbd-lines{font-size:16px;}
.onbd-player:fullscreen .onbd-visual{max-width:360px;}
@media(max-width:560px){
  .onbd-player{min-height:clamp(360px,92vw,470px);}
  .onbd-title{font-size:16px;}
  .onbd-lines{font-size:12.5px;}
  .onbd-visual{max-width:168px;}
  .onbd-bottom{gap:7px;padding:0 9px;}
  .onbd-slide{padding:18px 16px 52px;}
}

/* ============================================================
   RH-071 — trombinoscope administratif + organigramme caviardé
   ============================================================ */

/* fiche : portrait d'identité à gauche, texte à droite */
.rh-fiche { display: flex; gap: 14px; align-items: flex-start; }
.rh-fiche + .rh-fiche { margin-top: 14px; }
.rh-fiche-body { flex: 1; min-width: 0; }
.rh-fiche-body p:first-child { margin-top: 0; }

.rh-portrait {
  position: relative;
  flex: 0 0 auto;
  width: 76px; height: 94px;
  border: 1px solid var(--line);
  border-radius: 2px;
  background: #05070a;
  overflow: hidden;
}
.rh-portrait img {
  width: 100%; height: 100%;
  display: block;
  object-fit: cover; object-position: center 22%;
  filter: grayscale(0.6) contrast(1.06) brightness(0.96);
}
.rh-portrait .rh-ref {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 1px 3px;
  text-align: center;
  font-size: 8px; letter-spacing: 0.03em;
  color: var(--text-dim);
  background: rgba(0, 0, 0, 0.74);
}
.rh-portrait .rh-flag {
  position: absolute; top: 0; left: 0;
  padding: 1px 4px;
  font-size: 8px; letter-spacing: 0.08em; font-weight: 700;
  color: #0a0a0a; background: var(--danger);
}
.rh-portrait.dim img { filter: grayscale(1) brightness(0.6) contrast(1.16); }
.rh-portrait.empty {
  display: flex; align-items: center; justify-content: center;
  background: repeating-linear-gradient(45deg, #0a0c0e 0 5px, #070809 5px 10px);
}
.rh-portrait.empty span {
  font-size: 8px; text-align: center; color: var(--text-dim);
  letter-spacing: 0.03em; padding: 4px; line-height: 1.45;
}
.rh-portrait.redact {
  display: flex; align-items: center; justify-content: center;
  background: #0a0a0a; border-color: #33201f;
}
.rh-portrait.redact span { color: #171717; font-size: 12px; letter-spacing: 1px; }

/* organigramme hiérarchique caviardé (SVG) */
.rh-chart-scroll {
  overflow-x: auto;
  margin: 4px 0 8px;
  padding-bottom: 6px;
  -webkit-overflow-scrolling: touch;
}
.rh-chart {
  width: 100%;
  min-width: 720px;
  height: auto;
  display: block;
}
.rh-chart .box { fill: #05070a; stroke: var(--line); stroke-width: 1; }
.rh-chart .box.dir { stroke: var(--accent-dim); stroke-width: 1.3; }
.rh-chart .box.redact { fill: #0a0a0a; stroke: #33201f; }
.rh-chart .lbl { fill: var(--text); font-size: 12px; }
.rh-chart .lbl.sm { fill: var(--text-dim); font-size: 9.5px; }
.rh-chart .lbl.hd { fill: var(--accent); font-size: 8.5px; letter-spacing: 0.09em; }
.rh-chart .lbl.rd { fill: #3a3a3a; font-size: 12px; letter-spacing: 2px; }
.rh-chart .link { stroke: var(--line); stroke-width: 1.1; fill: none; }
.rh-chart .link.presume { stroke: var(--accent-dim); stroke-dasharray: 4 4; }
.rh-chart .q { fill: var(--warn); font-size: 13px; font-weight: 700; }
.rh-chart .leg { fill: var(--text-dim); font-size: 9.5px; }

@media (max-width: 560px) {
  .rh-portrait { width: 58px; height: 72px; }
  .rh-fiche { gap: 10px; }
}
