/* ═══ Prometheus Terminal — thèmes sombre (défaut) & clair ═══ */
:root {
  --bg: #0b0e14;
  --bg2: #10141d;
  --panel: #141926;
  --panel2: #1a2133;
  --border: #232b3f;
  --text: #dde3f0;
  --dim: #8b94ab;
  --accent: #f4a428;
  --accent2: #ff7847;
  --green: #2ecc8f;
  --red: #ff5a6e;
  --blue: #4da3ff;
  --purple: #a78bfa;
  --shadow: rgba(0, 0, 0, .45);
  font-size: 15px;
}
:root[data-theme="light"] {
  --bg: #eef1f6;
  --bg2: #ffffff;
  --panel: #ffffff;
  --panel2: #f3f6fb;
  --border: #d5dce8;
  --text: #141b28;
  --dim: #5b6880;
  --accent: #c97a06;
  --accent2: #e2601f;
  --green: #0d9668;
  --red: #d92d3f;
  --blue: #1f6fe0;
  --purple: #7c5cf0;
  --shadow: rgba(20, 30, 50, .16);
}
:root[data-theme="light"] #topbar { background: var(--bg2); }
:root[data-theme="light"] .flame { text-shadow: none; }
:root[data-theme="light"] #search-results,
:root[data-theme="light"] .sr-item:hover,
:root[data-theme="light"] .sr-item.sel { background: var(--panel2); }
:root[data-theme="light"] .sr-item { border-bottom-color: var(--border); }
/* surfaces sombres codées en dur -> variables en thème clair */
:root[data-theme="light"] .dw-track,
:root[data-theme="light"] .ddw-calc,
:root[data-theme="light"] .fxr-str-track { background: var(--panel2); }
:root[data-theme="light"] .desk-row:hover,
:root[data-theme="light"] .pc-head:hover,
:root[data-theme="light"] .mc-news-item:hover { background: var(--panel2); }

/* ── barre d'outils du header (thème, langue, notifications) ── */
.hdr-tools { display: flex; align-items: center; gap: 7px; margin-left: auto; }
.hdr-btn {
  position: relative; background: var(--panel2); border: 1px solid var(--border);
  color: var(--text); border-radius: 8px; padding: 7px 11px; cursor: pointer;
  font-size: 13px; font-family: inherit; font-weight: 600; line-height: 1;
  transition: border-color .15s ease, transform .12s ease;
}
.hdr-btn:hover { border-color: var(--accent); transform: translateY(-1px); }
#notif-badge {
  position: absolute; top: -5px; right: -5px; background: var(--red); color: #fff;
  border-radius: 9px; font-size: 9.5px; font-weight: 800; padding: 1px 5px; min-width: 15px;
}
/* ── centre de notifications ── */
#notif-panel {
  position: fixed; top: 60px; right: 16px; z-index: 940; width: 380px;
  max-width: calc(100vw - 24px); max-height: 70vh; display: flex; flex-direction: column;
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px;
  box-shadow: 0 14px 44px var(--shadow); overflow: hidden;
  animation: popIn .18s ease both;
}
#notif-head {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  padding: 10px 13px; background: var(--bg2); border-bottom: 1px solid var(--border);
  font-weight: 700; font-size: 13px;
}
#notif-list { overflow-y: auto; padding: 8px; display: flex; flex-direction: column; gap: 6px; }
.nt-item {
  padding: 8px 11px; border-radius: 8px; background: var(--bg2);
  border-left: 3px solid var(--dim); font-size: 12.5px; line-height: 1.45;
}
.nt-item.unread { border-left-color: var(--accent); background: var(--panel2); }
.nt-item .nt-t { font-weight: 700; }
.nt-item .nt-m { font-size: 10.5px; color: var(--dim); margin-top: 2px; }
#notif-rules { padding: 10px 12px; border-top: 1px solid var(--border); }
.nr-form { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 9px; }
.nr-form select, .nr-form input {
  background: var(--bg2); border: 1px solid var(--border); color: var(--text);
  border-radius: 7px; padding: 6px 8px; font-size: 12px; font-family: inherit; outline: none;
}
.nr-row {
  display: flex; align-items: center; justify-content: space-between; gap: 8px;
  font-size: 12px; padding: 5px 8px; background: var(--bg2); border-radius: 6px; margin-bottom: 4px;
}
.nr-row button { background: none; border: none; color: var(--red); cursor: pointer; font-size: 13px; }

/* ═══════════════ ANIMATIONS ═══════════════ */
@keyframes fadeUp { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes popIn { from { opacity: 0; transform: scale(.96) translateY(-6px); } to { opacity: 1; transform: none; } }
@keyframes slideIn { from { opacity: 0; transform: translateX(14px); } to { opacity: 1; transform: none; } }
@keyframes pulseGlow { 0%,100% { box-shadow: 0 0 0 0 #f4a42855; } 50% { box-shadow: 0 0 0 7px #f4a42800; } }
main > section:not(.hidden) { animation: fadeUp .26s ease both; }
.panel { transition: border-color .16s ease, transform .16s ease, box-shadow .16s ease; }
.vcard { transition: transform .14s ease, border-color .14s ease; }
.vcard:hover { transform: translateY(-2px); border-color: var(--dim); }
.nav-link { transition: color .14s ease, background .14s ease; }
.data-table tbody tr { transition: background .12s ease; }
.pa-msg { animation: fadeUp .2s ease both; }
.nt-item { animation: slideIn .22s ease both; }
#pa-fab { animation: pulseGlow 3.2s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
  background: var(--bg); color: var(--text);
  font-family: 'Inter', sans-serif;
  min-height: 100vh;
}
.mono { font-family: 'JetBrains Mono', monospace; }
.hidden { display: none !important; }
.dim { color: var(--dim); }

/* ── top bar ── */
#topbar {
  display: flex; align-items: center; gap: 24px;
  padding: 10px 22px;
  background: linear-gradient(180deg, #12172380, #0d111a) , var(--bg2);
  border-bottom: 1px solid var(--border);
  position: sticky; top: 0; z-index: 50;
}
.brand { display: flex; align-items: center; gap: 10px; user-select: none; }
.flame {
  color: var(--accent); font-size: 26px;
  text-shadow: 0 0 14px #f4a42890;
}
.flame.big { font-size: 64px; }
.brand-name { font-weight: 800; letter-spacing: 3px; font-size: 15px; }
.brand-sub { font-size: 9px; letter-spacing: 6px; color: var(--accent); }

/* La nav cède la place en premier : sans `min-width:0` un conteneur flex refuse de
   passer sous la largeur de son contenu, et c'est la recherche qui absorbait tout le
   manque.
   MAIS ELLE REVIENT À LA LIGNE. Un `nowrap` avec défilement horizontal poussait
   13 onglets sur 17 hors de l'écran — Olympe, Portefeuille, Indicateurs, Algos
   devenaient invisibles, et rien ne signalait qu'il fallait faire défiler. Un
   menu de navigation dont on ne voit pas les entrées n'est pas un menu. La
   recherche disposant déjà de sa propre rangée sous 1500 px, la nav peut
   s'étendre sur deux lignes sans lui prendre un pixel.
   Le défilement horizontal reste la bonne convention SOUS 860 px, où empiler
   17 onglets mangerait tout l'écran ; il est rétabli là-bas seulement. */
#main-nav {
  display: flex; flex-wrap: wrap; align-items: center; gap: 2px;
  min-width: 0; row-gap: 3px;
}

.search-wrap { position: relative; flex: 1 1 460px; min-width: 300px; max-width: 980px; }
#search {
  width: 100%; padding: 13px 74px 13px 44px;
  background: var(--panel); color: var(--text);
  border: 1px solid var(--border); border-radius: 11px;
  font-size: 15px; outline: none;
  transition: border-color .15s, box-shadow .15s, background .15s;
}
#search::placeholder { color: var(--dim); opacity: .85; }
#search:focus {
  border-color: var(--accent); box-shadow: 0 0 0 3px #f4a42822;
  background: var(--panel2);
}
.search-ico {
  position: absolute; left: 15px; top: 50%; transform: translateY(-50%);
  width: 17px; height: 17px; color: var(--dim); pointer-events: none;
  transition: color .15s;
}
.search-wrap:focus-within .search-ico { color: var(--accent); }
.search-kbd {
  position: absolute; right: 11px; top: 50%; transform: translateY(-50%);
  font-family: 'JetBrains Mono', monospace; font-size: 10px; letter-spacing: .5px;
  color: var(--dim); background: var(--panel2);
  border: 1px solid var(--border); border-radius: 5px;
  padding: 3px 7px; pointer-events: none;
  transition: opacity .15s;
}
.search-wrap:focus-within .search-kbd { opacity: 0; }
#search-results {
  position: absolute; top: 54px; left: 0; right: 0;
  background: var(--panel2); border: 1px solid var(--border);
  border-radius: 10px; overflow: hidden; max-height: 480px; overflow-y: auto;
  box-shadow: 0 18px 40px #00000090;
}
.sr-item {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 14px; cursor: pointer;
  border-bottom: 1px solid #1d2436;
}
.sr-item:hover, .sr-item.sel { background: #202940; }
.sr-tick {
  font-family: 'JetBrains Mono'; font-weight: 700; color: var(--accent);
  min-width: 84px; font-size: 13px;
}
.sr-name { flex: 1; font-size: 13.5px; }
.sr-meta { font-size: 11px; color: var(--dim); text-align: right; }
.sr-flags { font-size: 10px; letter-spacing: 1px; }
.db-stats { font-size: 11px; color: var(--dim); white-space: nowrap; }
.nav-btn {
  background: var(--panel2); color: var(--accent);
  border: 1px solid var(--border); border-radius: 8px;
  padding: 9px 16px; font-size: 13px; font-weight: 600; cursor: pointer;
  font-family: 'Inter'; white-space: nowrap;
}
.nav-btn:hover { border-color: var(--accent); }
.nav-btn.active { background: var(--accent); color: #14100a; }

/* ── screener ── */
.preset-btns { display: flex; gap: 8px; flex-wrap: wrap; }
.preset {
  background: var(--panel2); color: var(--text); border: 1px solid var(--border);
  border-radius: 18px; padding: 5px 14px; font-size: 12.5px; cursor: pointer;
  font-family: 'Inter';
}
.preset:hover { border-color: var(--accent); color: var(--accent); }
.crit-row {
  display: flex; gap: 10px; align-items: center; margin: 8px 0;
}
.crit-row select, .crit-row input {
  background: var(--panel2); color: var(--text); border: 1px solid var(--border);
  border-radius: 6px; padding: 7px 10px; font-size: 13px;
  font-family: 'JetBrains Mono';
}
.crit-row select.crit-field { min-width: 280px; }
.crit-row select.crit-op { width: 70px; }
.crit-row input.crit-val { width: 120px; }
.crit-del {
  background: none; border: none; color: var(--red); cursor: pointer;
  font-size: 16px; padding: 2px 8px;
}
.crit-actions { display: flex; gap: 14px; align-items: center; margin-top: 12px; }
.ghost-btn {
  background: none; color: var(--dim); border: 1px dashed var(--border);
  border-radius: 8px; padding: 8px 16px; cursor: pointer; font-size: 13px;
  font-family: 'Inter';
}
.ghost-btn:hover { color: var(--accent); border-color: var(--accent); }
.primary-btn {
  background: var(--accent); color: #14100a; border: none;
  border-radius: 8px; padding: 9px 22px; cursor: pointer;
  font-size: 13.5px; font-weight: 700; font-family: 'Inter';
}
.primary-btn:hover { filter: brightness(1.1); }
#screener-table tbody tr { cursor: pointer; }
#screener-table tbody tr:hover td { background: #1c2437; }
.score-pill {
  display: inline-block; min-width: 38px; text-align: center;
  border-radius: 12px; padding: 2px 8px; font-weight: 700;
}
.sp-g { background: #133c2d; color: #2ecc8f; }
.sp-y { background: #3c2f11; color: #f4a428; }
.sp-r { background: #3c1519; color: #ff5a6e; }

/* ── welcome : accueil "état des lieux" — flux vertical normal, la carte
   d'intro est centrée, chaque panneau prend toute la largeur ── */
#welcome { display: block; padding: 0; }
.welcome-card { text-align: center; max-width: 680px; margin: 6px auto 20px; }
.welcome-card h1 { margin: 14px 0 6px; letter-spacing: 2px; }
.welcome-card p { margin: 4px 0; }
#welcome-stats { margin-top: 18px; display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.wstat {
  background: var(--panel); border: 1px solid var(--border);
  padding: 14px 22px; border-radius: 12px;
}
.wstat .n { font-size: 24px; font-weight: 800; color: var(--accent); font-family: 'JetBrains Mono'; }
.wstat .l { font-size: 11px; color: var(--dim); margin-top: 2px; }

/* ── cartes de rang (style GuruFocus, données Prometheus) ── */
.gf-ranks { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin-bottom: 16px; }
@media (max-width: 1100px) { .gf-ranks { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 720px) { .gf-ranks { grid-template-columns: 1fr; } }
.gfr-card { padding: 12px 14px; margin: 0; }
.gfr-head { display: flex; justify-content: space-between; align-items: baseline;
  font-size: 13px; font-weight: 600; color: #b9c2d8; margin-bottom: 6px; }
.gfr-score { font-family: 'JetBrains Mono'; font-size: 20px; font-weight: 800; }
.gfr-max { font-size: 11px; color: var(--dim); font-weight: 500; }
.gfr-bar { height: 4px; background: #1a2133; border-radius: 2px; overflow: hidden; margin-bottom: 8px; }
.gfr-bar > div { height: 100%; border-radius: 2px; }
.gfr-row { display: flex; align-items: center; gap: 8px; font-size: 12px; padding: 2.5px 0; }
.gfr-dot { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.gfr-lbl { flex: 1; color: #aeb7cc; font-family: 'Inter'; }
.gfr-val { font-family: 'JetBrains Mono'; font-size: 11.5px; font-weight: 600; }

/* ── layout ── */
#main { padding: 18px 22px 80px; max-width: 1560px; margin: 0 auto; }
#company-header {
  display: flex; justify-content: space-between; align-items: flex-start;
  gap: 20px; flex-wrap: wrap;
  padding: 18px 22px;
  background: linear-gradient(135deg, #161c2c, #12161f);
  border: 1px solid var(--border); border-radius: 14px;
}
.ch-left h1 { font-size: 26px; margin-bottom: 10px; }
.chips { display: flex; gap: 8px; flex-wrap: wrap; }
.chip {
  background: var(--panel2); border: 1px solid var(--border);
  border-radius: 20px; padding: 3px 12px; font-size: 12px;
}
.chip.mono { color: var(--accent); font-weight: 700; }
.ch-right { display: flex; gap: 28px; align-items: center; }
.q-price { font-size: 32px; font-weight: 700; }
.q-change { font-size: 15px; }
.q-change.up { color: var(--green); }
.q-change.down { color: var(--red); }
.q-date { font-size: 11px; }

.score-block { text-align: center; }
.sb-ring {
  width: 84px; height: 84px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  background:
    radial-gradient(closest-side, var(--panel) 79%, transparent 80% 100%),
    conic-gradient(var(--sc, var(--accent)) calc(var(--pct, 0) * 1%), #232b3f 0);
  font-size: 24px; font-weight: 800; font-family: 'JetBrains Mono';
}
.sb-label { font-size: 10px; letter-spacing: 2px; color: var(--dim); margin-top: 6px; }

.value-block { text-align: right; min-width: 150px; }
.vb-label { font-size: 10px; letter-spacing: 2px; color: var(--dim); }
.vb-val { font-size: 24px; font-weight: 700; color: var(--blue); }
.vb-upside { font-size: 14px; }
.vb-upside.up { color: var(--green); }
.vb-upside.down { color: var(--red); }
.vb-rating { font-size: 11px; margin-top: 4px; padding: 2px 10px;
  border-radius: 12px; display: inline-block; background: var(--panel2); }
.vb-rating.sig-under { color: var(--green); border: 1px solid var(--green); }
.vb-rating.mod-under { color: #8be0b8; }
.vb-rating.fair { color: var(--dim); }
.vb-rating.mod-over { color: #ffb36e; }
.vb-rating.sig-over { color: var(--red); border: 1px solid var(--red); }
.vb-rating.trap { color: var(--red); border: 1px dashed var(--red); }

/* ── tabs ── */
#tabs { display: flex; gap: 6px; margin: 18px 0 14px; border-bottom: 1px solid var(--border); }
.tab {
  background: none; border: none; color: var(--dim);
  padding: 10px 20px; font-size: 14px; font-weight: 600; cursor: pointer;
  border-bottom: 2px solid transparent; font-family: 'Inter';
}
.tab:hover { color: var(--text); }
.tab.active { color: var(--accent); border-bottom-color: var(--accent); }

/* ── panels ── */
.panel {
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 14px; padding: 16px 18px; margin-bottom: 16px;
}
.panel.slim { padding: 10px 18px; }
.panel-head {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 10px; flex-wrap: wrap; gap: 10px;
}
.panel-head h3 { font-size: 14px; letter-spacing: .5px; color: #b9c2d8; }
.chart { height: 300px; }
.chart.tall { height: 560px; }   /* prix + sous-graphe volume + bandeau de zoom */
.grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 1100px) { .grid-2 { grid-template-columns: 1fr; } }

.range-btns button {
  background: var(--panel2); color: var(--dim); border: 1px solid var(--border);
  padding: 4px 12px; cursor: pointer; font-size: 12px; font-family: 'JetBrains Mono';
}
.range-btns button:first-child { border-radius: 6px 0 0 6px; }
.range-btns button:last-child { border-radius: 0 6px 6px 0; }
.range-btns button.active { background: var(--accent); color: #14100a; font-weight: 700; }

/* ── cards ── */
.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 12px; }
.vcard {
  background: var(--panel2); border: 1px solid var(--border);
  border-radius: 10px; padding: 12px 14px;
}
.vcard .t { font-size: 11px; color: var(--dim); }
.vcard .v { font-size: 20px; font-weight: 700; font-family: 'JetBrains Mono'; margin-top: 4px; }
.vcard .s { font-size: 11px; margin-top: 2px; }

/* ── interprétation sous les graphiques ── */
.chart-note {
  margin: 8px 14px 14px; padding: 10px 12px; font-size: 12px; line-height: 1.55;
  color: var(--text); background: var(--panel2);
  border: 1px solid var(--border); border-left: 3px solid var(--accent);
  border-radius: 8px;
}
.chart-note:empty { display: none; }
.chart-note b { color: var(--text); }

/* ── infobulle pédagogique (survol d'un libellé de métrique) ── */
.help { border-bottom: 1px dotted var(--dim); cursor: help; }
/* L'infobulle n'est PLUS un ::after : elle était rognée par les conteneurs
   .table-scroll (overflow:auto). Elle est maintenant rendue dans #help-tip,
   attaché au <body> en position:fixed — aucun ancêtre ne peut la découper. */
#help-tip {
  position: fixed; z-index: 2000; max-width: 330px; padding: 9px 12px;
  background: var(--panel2); color: var(--text);
  border: 1px solid var(--border); border-radius: 8px;
  box-shadow: 0 10px 26px var(--shadow);
  font-size: 11.5px; line-height: 1.55; font-weight: 400; white-space: normal;
  text-align: left; font-family: 'Inter', system-ui, sans-serif;
  pointer-events: none; animation: fadeUp .12s ease both;
}

/* ── analyse DuPont ── */
.dupont-row { display: flex; flex-wrap: wrap; align-items: stretch; gap: 6px; padding: 8px 4px; }
.dupont-step {
  flex: 1 1 0; min-width: 90px; background: var(--panel2); border: 1px solid var(--border);
  border-radius: 8px; padding: 10px 8px; text-align: center;
}
.dupont-step.dupont-result { border-color: var(--accent); background: rgba(244, 164, 40, .07); }
.dupont-step .ds-label { font-size: 10.5px; color: var(--dim); line-height: 1.25; min-height: 26px; }
.dupont-step .ds-val { font-size: 19px; font-weight: 700; font-family: 'JetBrains Mono'; margin-top: 4px; }
.dupont-step .ds-u { font-size: 11px; color: var(--dim); margin-left: 2px; }
.dupont-op { display: flex; align-items: center; color: var(--dim); font-size: 16px; font-weight: 700; }

/* ── carte mondiale ── */
.wm-layers { display: flex; flex-wrap: wrap; gap: 8px; padding: 4px 2px; }
.wm-chip {
  cursor: pointer; background: var(--panel2); color: var(--dim);
  border: 1px solid var(--border); border-radius: 20px; padding: 6px 13px;
  font-size: 12.5px; font-weight: 600; transition: all .12s ease;
}
.wm-chip:hover { color: var(--text); }
.wm-chip.active { color: var(--text); background: var(--panel); }
#wm-sources code { background: var(--panel2); padding: 1px 5px; border-radius: 4px; font-size: 11px; }
#wm-sources p { margin: 0 0 9px; }

/* ── chaînes TV en direct ── */
.livetv-chips { display: flex; flex-wrap: wrap; gap: 8px; padding: 0 4px 12px; }
.livetv-chip {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  background: var(--panel2); color: var(--text); border: 1px solid var(--border);
  border-left-width: 3px; border-radius: 8px; padding: 7px 12px; font-size: 12.5px; font-weight: 600;
}
.livetv-chip:hover { background: var(--panel); }
.livetv-chip.active { background: var(--panel); box-shadow: 0 0 0 1px var(--accent) inset; }
.livetv-chip .dot { width: 8px; height: 8px; border-radius: 50%; animation: pulse 1.6s infinite; }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: .35; } }
.livetv-player { border-radius: 10px; overflow: hidden; background: #000; }
.livetv-player iframe { width: 100%; aspect-ratio: 16 / 9; border: 0; display: block; }
.livetv-cap { padding: 8px 12px; font-size: 11.5px; background: var(--panel2); }
.livetv-cap a { color: var(--accent); text-decoration: none; }
.livetv-x { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 12px 4px 2px; }
.livetv-x-title { font-size: 11.5px; width: 100%; }
.x-chip {
  font-size: 12px; padding: 5px 11px; border-radius: 20px; text-decoration: none;
  background: var(--panel2); color: var(--text); border: 1px solid var(--border);
}
.x-chip:hover { border-color: var(--dim); }

/* ── actualités par actif : synthèse + cartes ── */
.news-summary {
  background: var(--panel); border: 1px solid var(--border); border-radius: 12px;
  padding: 16px 18px; margin-bottom: 18px;
}
.news-summary .ns-head { display: flex; justify-content: space-between; align-items: baseline; }
.news-summary .ns-title { font-size: 15px; font-weight: 700; }
.news-summary .ns-tone { font-size: 13px; font-weight: 600; }
.news-summary .ns-bar { display: flex; height: 8px; border-radius: 5px; overflow: hidden; margin: 12px 0 6px; }
.news-summary .ns-bar span { display: block; height: 100%; }
.news-summary .ns-legend { font-size: 11.5px; }
.news-summary .ns-lead { margin-top: 12px; font-size: 13.5px; display: flex; gap: 8px; align-items: baseline; }
.news-summary .ns-lead a { color: var(--text); text-decoration: none; font-weight: 600; }
.news-summary .ns-lead a:hover { color: var(--accent); }
.news-summary .ns-themes { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 6px; }
.news-summary .ns-chip {
  font-size: 11px; padding: 3px 9px; border-radius: 20px;
  background: var(--panel2); color: var(--dim); border: 1px solid var(--border); text-transform: capitalize;
}
.news-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 14px; }
.news-card {
  background: var(--panel); border: 1px solid var(--border); border-radius: 10px;
  overflow: hidden; cursor: pointer; transition: transform .12s ease, border-color .12s ease;
  display: flex; flex-direction: column;
}
.news-card:hover { transform: translateY(-2px); border-color: var(--dim); }
.news-card .news-img {
  height: 150px; background-size: cover; background-position: center; background-color: var(--panel2);
}
.news-card .news-card-body { padding: 12px 14px; }
.news-card .news-tags { display: flex; gap: 6px; margin-bottom: 8px; }
.news-card .news-crit, .news-card .news-sent {
  font-size: 9.5px; font-weight: 700; padding: 2px 7px; border-radius: 4px; letter-spacing: .3px;
}
.news-card .news-head { font-size: 13.5px; font-weight: 600; line-height: 1.35; margin-bottom: 6px; }
.news-card .news-sum { font-size: 11.5px; line-height: 1.45; }
.news-card .news-meta { font-size: 10.5px; margin-top: 8px; }

/* ── alertes indicateurs ── */
.alert-banner {
  margin: 0 0 16px; padding: 12px 16px; border-radius: 10px; font-size: 13px;
  border: 1px solid var(--border);
}
.alert-banner.ok { background: rgba(46, 204, 143, .08); border-color: rgba(46, 204, 143, .35); color: #a9e9cd; }
.alert-banner.warn { background: rgba(255, 90, 110, .08); border-color: rgba(255, 90, 110, .40); }
.alert-banner .alert-head { font-weight: 700; color: #ff8a98; margin-bottom: 8px; font-size: 13.5px; }
.alert-banner ul { margin: 0; padding-left: 18px; }
.alert-banner li { margin: 4px 0; line-height: 1.5; color: var(--text); }
.ind-row.ind-alert { background: rgba(255, 90, 110, .06); border-radius: 6px; }
.ind-warn { color: #ff5a6e; }

/* ── tables ── */
.year-controls { display: flex; gap: 14px; align-items: center; font-size: 13px; }
.year-controls select {
  background: var(--panel2); color: var(--text); border: 1px solid var(--border);
  border-radius: 6px; padding: 4px 8px; font-family: 'JetBrains Mono';
}
.toggle { color: var(--dim); cursor: pointer; }
.table-scroll { overflow-x: auto; }
.data-table { border-collapse: collapse; width: 100%; font-size: 12.5px; }
.data-table th, .data-table td {
  padding: 6px 12px; text-align: right; white-space: nowrap;
  border-bottom: 1px solid #1d2436;
}
.data-table th { color: var(--accent); font-weight: 600; position: sticky; top: 0; background: var(--panel); }
.data-table td:first-child, .data-table th:first-child {
  text-align: left; font-family: 'Inter'; color: #b9c2d8; position: sticky; left: 0;
  background: var(--panel); min-width: 210px;
}
.data-table tr.section td {
  color: var(--accent); font-weight: 700; font-size: 11px;
  letter-spacing: 1.5px; padding-top: 14px; background: var(--panel);
}
.data-table td.pos { color: var(--green); }
.data-table td.neg { color: var(--red); }

/* ── indicateurs ── */
.ind-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(430px, 1fr)); gap: 16px; }
.ind-group {
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 14px; padding: 14px 16px;
}
.ind-group h4 {
  font-size: 12px; letter-spacing: 1.5px; color: var(--accent);
  margin-bottom: 10px; display: flex; justify-content: space-between;
}
.ind-row {
  display: flex; justify-content: space-between; align-items: center;
  padding: 5px 4px; border-bottom: 1px solid #1a2133; font-size: 13px;
}
.ind-row:last-child { border-bottom: none; }
.ind-name { color: #aeb7cc; }
.ind-val { font-family: 'JetBrains Mono'; font-weight: 600; }
.ind-val.good { color: var(--green); }
.ind-val.bad { color: var(--red); }
.ind-val.mid { color: #ffc36e; }

/* ── navigation sections ── */
/* (la règle #main-nav vit plus haut, avec la barre de recherche : elle passe en
   `nowrap` + défilement horizontal pour ne plus empiler trois rangées d'onglets) */
.nav-link {
  background: none; border: none; color: var(--dim);
  padding: 8px 13px; font-size: 13px; font-weight: 600; cursor: pointer;
  font-family: 'Inter'; border-radius: 8px; white-space: nowrap;
}
.nav-link:hover { color: var(--text); background: var(--panel); }
.nav-link.active { color: var(--accent); background: var(--panel2); }

/* ── grilles forex / crypto ── */
.fx-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(215px, 1fr));
  gap: 14px;
}
.fx-card {
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 12px; padding: 14px 16px; cursor: pointer;
  transition: border .12s, transform .12s;
}
.fx-card:hover { border-color: var(--accent); transform: translateY(-2px); }
.fxc-top { display: flex; justify-content: space-between; align-items: center; }
.fxc-pair { font-weight: 800; font-size: 15px; letter-spacing: .5px; }
.fxc-price { font-size: 21px; font-weight: 700; margin: 8px 0 4px; }
.fxc-meta { display: flex; justify-content: space-between; font-size: 12px; }
.fxc-rating { font-size: 11px; margin-top: 6px; }
.fx-header {
  display: flex; justify-content: space-between; align-items: flex-start;
  gap: 20px; flex-wrap: wrap; padding: 18px 22px; margin: 12px 0 16px;
  background: linear-gradient(135deg, #161c2c, #12161f);
  border: 1px solid var(--border); border-radius: 14px;
}

/* ── data ── */
.grid-data { display: grid; grid-template-columns: 380px 1fr; gap: 16px; }
@media (max-width: 1100px) { .grid-data { grid-template-columns: 1fr; } }
.data-catalog { max-height: 640px; overflow-y: auto; }
.dc-item {
  padding: 9px 10px; border-bottom: 1px solid #1a2133; cursor: pointer;
  border-radius: 6px;
}
.dc-item:hover { background: #1c2437; }
.dc-name { font-size: 13.5px; font-weight: 600; }
.dc-meta { font-size: 11px; margin-top: 2px; }
.data-explain { font-size: 13px; line-height: 1.6; margin-bottom: 12px;
  padding: 10px 14px; background: var(--panel2); border-radius: 10px;
  border-left: 3px solid var(--accent); }

/* ── news ── */
.news-item {
  display: flex; gap: 14px; align-items: flex-start;
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 12px; padding: 13px 16px; margin-bottom: 10px; cursor: pointer;
}
.news-item:hover { border-color: var(--accent); }
.news-crit {
  font-size: 10px; font-weight: 800; letter-spacing: 1px;
  padding: 4px 10px; border-radius: 12px; white-space: nowrap; margin-top: 2px;
}
.news-head { font-weight: 600; font-size: 14.5px; }
.news-sum { font-size: 12.5px; margin: 4px 0; line-height: 1.5; }
.news-meta { font-size: 11px; }

/* ── olympe ── */
.olympe-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 16px; margin-bottom: 18px;
}
.ol-card {
  background: var(--panel); border: 1px solid var(--border);
  border-radius: 14px; padding: 18px; cursor: pointer;
  transition: border .12s, transform .12s;
}
.ol-card:hover { border-color: var(--accent); transform: translateY(-3px); }
.ol-icon { font-size: 30px; }
.ol-name { font-size: 19px; font-weight: 800; margin: 6px 0 2px; }
.ol-profile { font-size: 11px; letter-spacing: 1px; text-transform: uppercase; }
.ol-obj { font-size: 12.5px; color: #aeb7cc; margin: 10px 0; line-height: 1.5; min-height: 56px; }
.ol-stats { display: flex; gap: 14px; font-size: 12px; margin-bottom: 8px; }
.ol-members { font-size: 11px; }
td.pos, .pos { color: var(--green); }
td.neg, .neg { color: var(--red); }

/* ── tooltips indicateurs ── */
.ind-row.has-tip { position: relative; cursor: help; }
.tip-i { color: var(--dim); font-size: 10px; }
.ind-row .tooltip {
  display: none; position: absolute; z-index: 60;
  left: 0; right: 0; top: calc(100% + 4px);
  background: #1e2740; border: 1px solid var(--accent);
  border-radius: 10px; padding: 10px 13px;
  font-size: 12px; line-height: 1.55; color: #cdd5e8;
  box-shadow: 0 12px 30px #00000090;
}
.ind-row.has-tip:hover .tooltip { display: block; }
.ind-row.has-tip:hover { background: #1c2437; }
/* tooltips génériques (cartes de métriques, etc.) */
.has-tip { cursor: help; }
.has-tip .tooltip {
  display: none; position: absolute; z-index: 60;
  left: 0; right: 0; top: calc(100% + 4px);
  background: #1e2740; border: 1px solid var(--accent);
  border-radius: 10px; padding: 10px 13px;
  font-size: 12px; line-height: 1.5; color: #cdd5e8;
  box-shadow: 0 12px 30px #00000090; text-align: left;
}
.has-tip:hover .tooltip { display: block; }

/* ── guides score/valorisation ── */
.guide-row {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 8px 4px; border-bottom: 1px solid #1a2133;
}
.guide-row:last-child { border-bottom: none; }

#loader {
  position: fixed; inset: 0; background: #0b0e1488;
  display: flex; align-items: center; justify-content: center; z-index: 100;
}
.spinner {
  width: 46px; height: 46px; border-radius: 50%;
  border: 3px solid var(--border); border-top-color: var(--accent);
  animation: spin .8s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

::-webkit-scrollbar { height: 10px; width: 10px; }
::-webkit-scrollbar-thumb { background: #2a3350; border-radius: 6px; }
::-webkit-scrollbar-track { background: var(--bg2); }

/* ── marqueur de métrique corrigée (Olympe) ── */
.ol-fix { color: var(--accent); font-weight: 700; margin-left: 2px; cursor: help; }
.ol-card .ol-stats { flex-wrap: wrap; gap: 6px 12px; }

/* ── cartes d'indicateurs COURTES + page dédiée ── */
.ind-cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 12px; }
.ind-card {
  background: var(--panel); border: 1px solid var(--border); border-radius: 10px;
  padding: 13px 15px; cursor: pointer; transition: transform .12s ease, border-color .12s ease;
}
.ind-card:hover { transform: translateY(-2px); border-color: var(--dim); }
.ind-card-todo { cursor: default; opacity: .62; }
.ind-card-todo:hover { transform: none; border-color: var(--border); }
.ic-head { display: flex; align-items: center; gap: 8px; margin-bottom: 7px; }
.ic-icon { font-size: 16px; }
.ic-name { font-weight: 700; font-size: 13px; letter-spacing: .3px; flex: 1; }
.ic-status { font-size: 9.5px; font-weight: 700; padding: 2px 7px; border-radius: 4px; }
.ic-short { font-size: 12.5px; line-height: 1.45; color: #aeb7cc; }
.ic-more { font-size: 11px; margin-top: 8px; }

.ind-page-body { padding: 6px 16px 16px; }
.ip-block { margin-bottom: 16px; }
.ip-block h4 { font-size: 12.5px; color: var(--accent); margin-bottom: 5px; letter-spacing: .4px; }
.ip-block p { font-size: 13px; line-height: 1.65; color: var(--text); }
.ip-honest {
  background: rgba(255, 90, 110, .07); border: 1px solid rgba(255, 90, 110, .3);
  border-radius: 8px; padding: 12px 14px;
}
.ip-honest h4 { color: #ff8a98; }

/* ═══════════════ COCKPIT PILIER (action / forex / crypto) ═══════════════ */
.pilier-cockpit { padding: 4px 2px; }
.pilier-cockpit .panel { margin-bottom: 14px; }
.pc-hero { display: grid; grid-template-columns: 210px 1fr; gap: 20px; align-items: center; }
@media (max-width: 900px) { .pc-hero { grid-template-columns: 1fr; } }
.pc-gauge {
  text-align: center; padding: 14px 10px; border-radius: 12px;
  background: radial-gradient(circle at 50% 30%, rgba(77,163,255,.09), transparent 70%);
  border: 1px solid var(--border);
}
.pc-score { font-size: 52px; font-weight: 800; font-family: 'JetBrains Mono'; line-height: 1; }
.pc-dir { font-size: 16px; font-weight: 700; letter-spacing: 1.5px; margin-top: 6px; }
.pc-sub { font-size: 11px; margin-top: 6px; }
.pc-wbar {
  display: inline-block; width: 54px; height: 6px; border-radius: 3px; margin-right: 6px;
  background: var(--bg2); vertical-align: middle; overflow: hidden;
}
.pc-wbar > div { height: 100%; background: var(--accent); border-radius: 3px; }
.pilier-cockpit table.data-table td { text-align: center; padding: 7px 8px; }
.pilier-cockpit table.data-table th { text-align: center; }
.pc-terms { display: flex; flex-wrap: wrap; gap: 7px; margin: 6px 0 12px; }
.pc-term {
  font-size: 12px; font-weight: 600; padding: 4px 10px; border-radius: 14px;
  border: 1px solid var(--border); background: var(--bg2);
}
.pc-heads { display: flex; flex-direction: column; gap: 6px; }
.pc-head {
  font-size: 12.5px; line-height: 1.4; padding: 6px 10px; border-left: 3px solid var(--dim);
  background: var(--bg2); border-radius: 0 6px 6px 0; color: var(--text); text-decoration: none;
  transition: background .12s ease;
}
.pc-head:hover { background: #1c2439; }

/* ═══════════════ DESK — détail des calculs en direct ═══════════════ */
.desk-method { padding: 12px 15px; font-size: 12.5px; line-height: 1.6; }
.desk-formula {
  font-family: 'JetBrains Mono'; font-size: 14px; background: var(--bg2);
  border: 1px solid var(--border); border-radius: 8px; padding: 10px 14px; margin: 8px 0;
  display: inline-block; color: var(--text);
}
.desk-formula .df-num { color: #2ecc8f; } .desk-formula .df-den { color: #f4a428; }
.desk-formula .df-div { color: var(--dim); margin: 0 4px; }
.desk-wchips { display: flex; flex-wrap: wrap; gap: 8px; margin: 6px 0; }
.desk-wchip {
  background: var(--bg2); border: 1px solid var(--border); border-radius: 8px;
  padding: 5px 11px; font-size: 12px;
}
.desk-wchip b { color: var(--accent); margin-left: 6px; }
.desk-thresh { margin-top: 6px; }
.dt-bar { display: flex; border-radius: 6px; overflow: hidden; border: 1px solid var(--border); }
.dt-seg {
  flex: 1; text-align: center; font-size: 10px; font-weight: 700; padding: 5px 3px;
  color: #0d1220; white-space: nowrap;
}
/* table Desk cliquable */
.desk-table td { padding: 6px 8px; }
.desk-row { cursor: pointer; transition: background .12s ease; }
.desk-row:hover { background: #1c2439; }
.dr-caret { color: var(--dim); font-size: 10px; }
.desk-detail > td { padding: 0 !important; background: var(--bg2); }
.desk-detail-wrap { display: grid; grid-template-columns: 1.15fr 1fr; gap: 16px; padding: 14px 16px; }
@media (max-width: 1000px) { .desk-detail-wrap { grid-template-columns: 1fr; } }
.ddw-col h4 { font-size: 12px; color: var(--accent); margin-bottom: 7px; letter-spacing: .3px; }
.desk-wf { width: 100%; border-collapse: collapse; font-size: 12px; }
.desk-wf th { color: var(--dim); font-weight: 600; text-align: center; padding: 3px 6px; font-size: 11px; }
.desk-wf td { text-align: center; padding: 4px 6px; border-top: 1px solid var(--border); }
.dw-track { position: relative; height: 9px; background: #10151f; border-radius: 5px; }
.dw-track::before {
  content: ''; position: absolute; left: 50%; top: -1px; bottom: -1px; width: 1px; background: var(--dim);
}
.dw-fill { position: absolute; top: 0; height: 9px; border-radius: 5px; }
.ddw-calc {
  font-family: 'JetBrains Mono'; font-size: 12.5px; margin-top: 10px; padding: 9px 12px;
  background: #10151f; border-radius: 8px; border: 1px solid var(--border); line-height: 1.7;
}
.ddw-reasons { font-size: 11px; margin-top: 10px; line-height: 1.5; }

/* ═══════════════ MACRO — page pays : news ═══════════════ */
.mc-news { display: flex; flex-direction: column; gap: 8px; max-height: 360px; overflow-y: auto; padding: 4px; }
.mc-news-item {
  display: flex; gap: 10px; padding: 7px; border-radius: 8px; text-decoration: none;
  background: var(--bg2); border: 1px solid var(--border); transition: background .12s ease;
}
.mc-news-item:hover { background: #1c2439; }
.mc-news-item img { width: 64px; height: 48px; object-fit: cover; border-radius: 5px; flex-shrink: 0; }
.mcn-title { font-size: 12.5px; line-height: 1.35; color: var(--text); }
.mcn-meta { font-size: 10.5px; margin-top: 3px; }

/* ═══════════════ CARTE — dossier pays ═══════════════ */
.wmc-geos { display: flex; flex-direction: column; gap: 6px; }
.wmc-geo {
  display: flex; gap: 10px; align-items: baseline; padding: 6px 10px; border-radius: 7px;
  background: var(--bg2); border: 1px solid var(--border); font-size: 12px;
}
.wmc-geo-h { font-weight: 700; white-space: nowrap; color: var(--text); }

/* ═══════════════ DEVISES & TAUX ═══════════════ */
.seg { display: inline-flex; gap: 3px; background: var(--bg2); border-radius: 8px; padding: 3px; }
.seg-btn {
  background: transparent; border: none; color: var(--dim); font-size: 11.5px; font-weight: 600;
  padding: 5px 11px; border-radius: 6px; cursor: pointer; font-family: inherit;
}
.seg-btn.active { background: var(--accent); color: #0d1220; }
.seg-btn:hover:not(.active) { color: var(--text); }
.fxr-str-row { display: flex; align-items: center; gap: 10px; margin: 5px 0; }
.fxr-str-c { width: 68px; font-weight: 700; font-size: 13px; }
.fxr-str-track { position: relative; flex: 1; height: 14px; background: #10151f; border-radius: 4px; }
.fxr-str-track::before { content: ''; position: absolute; left: 50%; top: -2px; bottom: -2px; width: 1px; background: var(--dim); }
.fxr-str-fill { position: absolute; top: 0; height: 14px; border-radius: 4px; }
.fxr-cb-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 9px; }
.fxr-cb-card { background: var(--bg2); border: 1px solid var(--border); border-radius: 9px; padding: 9px 11px; }
.fxr-cb-h { display: flex; align-items: baseline; gap: 6px; font-size: 12.5px; }
.fxr-cb-rate { font-size: 22px; font-weight: 800; font-family: 'JetBrains Mono'; margin: 3px 0; color: var(--accent); }
#fxr-perf td, #fxr-perf th { text-align: center; padding: 5px 8px; }
#fxr-perf th:first-child, #fxr-perf td:first-child { text-align: left; }

/* ═══════════════ ASSISTANT PROMETHEUS ═══════════════ */
#pa-fab {
  position: fixed; bottom: 22px; right: 22px; z-index: 900; width: 54px; height: 54px;
  border-radius: 50%; border: none; cursor: pointer; font-size: 24px;
  background: linear-gradient(135deg, var(--accent), #ff9a4d); color: #0d1220;
  box-shadow: 0 6px 20px rgba(0, 0, 0, .45); transition: transform .15s ease;
}
#pa-fab:hover { transform: scale(1.08); }
#pa-panel {
  position: fixed; bottom: 88px; right: 22px; z-index: 900; width: 380px; max-width: calc(100vw - 32px);
  height: 540px; max-height: calc(100vh - 130px); display: flex; flex-direction: column;
  background: var(--panel); border: 1px solid var(--border); border-radius: 14px; overflow: hidden;
  box-shadow: 0 12px 40px rgba(0, 0, 0, .55);
}
#pa-head {
  display: flex; align-items: center; justify-content: space-between; padding: 12px 14px;
  background: var(--bg2); border-bottom: 1px solid var(--border); font-weight: 700; font-size: 13.5px;
}
#pa-head button { background: none; border: none; color: var(--dim); cursor: pointer; font-size: 15px; }
#pa-msgs { flex: 1; overflow-y: auto; padding: 12px; display: flex; flex-direction: column; gap: 9px; }
.pa-msg { font-size: 13px; line-height: 1.5; padding: 9px 12px; border-radius: 10px; max-width: 88%; }
.pa-user { align-self: flex-end; background: var(--accent); color: #0d1220; font-weight: 600; }
.pa-bot { align-self: flex-start; background: var(--bg2); border: 1px solid var(--border); color: var(--text); }
.pa-typing { letter-spacing: 2px; opacity: .6; }
.pa-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.pa-chip {
  background: var(--panel); border: 1px solid var(--border); color: var(--accent); cursor: pointer;
  font-size: 11px; padding: 4px 9px; border-radius: 12px; font-family: inherit;
}
.pa-chip:hover { border-color: var(--accent); }
#pa-input-row { display: flex; gap: 7px; padding: 10px; border-top: 1px solid var(--border); }
#pa-input {
  flex: 1; background: var(--bg2); border: 1px solid var(--border); border-radius: 8px;
  padding: 9px 11px; color: var(--text); font-size: 13px; font-family: inherit; outline: none;
}
#pa-input:focus { border-color: var(--accent); }
#pa-send {
  background: var(--accent); border: none; color: #0d1220; border-radius: 8px; width: 40px;
  cursor: pointer; font-size: 15px;
}

/* ── barre d'outils du graphique de prix ── */
.px-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; padding: 4px 2px 10px; }
.px-custom { display: flex; align-items: center; gap: 6px; font-size: 12px; color: var(--dim); }
.px-custom label { display: flex; align-items: center; gap: 4px; }
.px-custom input[type="date"] {
  background: var(--bg2); border: 1px solid var(--border); color: var(--text);
  border-radius: 6px; padding: 4px 7px; font-size: 12px; font-family: inherit; outline: none;
  color-scheme: dark;
}
:root[data-theme="light"] .px-custom input[type="date"] { color-scheme: light; }
.px-custom input[type="date"]:focus { border-color: var(--accent); }

/* ── gardien 24/7 ── */
.daemon-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 9px; }
.daemon-cell {
  background: var(--bg2); border: 1px solid var(--border); border-left: 3px solid var(--dim);
  border-radius: 8px; padding: 9px 11px;
}
.dc-top { display: flex; align-items: center; gap: 7px; font-size: 12.5px; }
.dc-dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; }
.dc-meta { font-size: 11px; margin-top: 4px; }
.dc-err { font-size: 10.5px; color: #ff8a98; margin-top: 4px; word-break: break-word; }

/* ── macro : liste compacte d'indicateurs par catégorie ── */
.mc-catblock { margin: 4px 4px 12px; }
.mc-cathead { font-size: 12.5px; font-weight: 700; margin: 8px 0 6px; letter-spacing: .2px; }
.mc-cathead .dim { font-weight: 400; }
.mc-indlist { display: flex; flex-wrap: wrap; gap: 7px; }
.mc-indchip {
  display: inline-flex; align-items: center; gap: 7px; background: var(--bg2);
  border: 1px solid var(--border); border-radius: 9px; padding: 6px 11px; cursor: pointer;
  color: var(--text); font-size: 12px; font-family: inherit; transition: border-color .12s ease, transform .12s ease;
}
.mc-indchip:hover { border-color: var(--accent); transform: translateY(-1px); }
.mc-indchip .mc-dot { width: 7px; height: 7px; border-radius: 50%; flex: 0 0 auto; }
.mc-indchip .mono { font-size: 11px; }

/* ═══════════════ PROFIL SOCIÉTÉ + INTERPRÉTATION IA ═══════════════ */
.co-meta { font-size: 12px; color: var(--dim); margin-bottom: 8px; line-height: 1.7; }
.co-meta b { color: var(--text); font-weight: 600; }
.co-desc {
  font-size: 12.8px; line-height: 1.62; color: var(--text);
  display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden;
}
.co-desc.open { -webkit-line-clamp: unset; overflow: visible; }
.ai-box {
  background: linear-gradient(135deg, rgba(244, 164, 40, .07), transparent 60%), var(--bg2);
  border: 1px solid var(--border); border-left: 3px solid var(--accent);
  border-radius: 10px; padding: 12px 14px; animation: fadeUp .25s ease both;
}
.ai-box.ai-off { border-left-color: var(--dim); }
.ai-head { font-weight: 700; font-size: 12.5px; margin-bottom: 7px; }
.ai-anom {
  background: rgba(255, 90, 110, .1); border: 1px solid rgba(255, 90, 110, .32);
  border-radius: 7px; padding: 6px 10px; font-size: 12px; margin-bottom: 8px; color: #ff8a98;
}
.ai-body { font-size: 13px; line-height: 1.62; }
.ai-foot { font-size: 10.5px; margin-top: 9px; font-style: italic; }

/* ═══ ACCUEIL — état du monde ═══════════════════════════════════════════════ */
/* Badges d'impact. Trois niveaux seulement : au-delà, la couleur cesse d'être
   un signal et redevient de la décoration. */
.hw-impact {
  font-size: 9.5px; font-weight: 800; letter-spacing: .6px; text-transform: uppercase;
  padding: 2px 7px; border-radius: 5px; white-space: nowrap;
}
.hw-impact.fort   { background: #ff5a6e22; color: #ff8593; border: 1px solid #ff5a6e55; }
.hw-impact.moyen  { background: #f4a42822; color: #f4a428; border: 1px solid #f4a42855; }
.hw-impact.faible { background: #8b94ab18; color: #8b94ab; border: 1px solid #8b94ab44; }

.hw-news-item {
  display: flex; gap: 12px; padding: 11px 4px;
  border-bottom: 1px solid var(--border);
}
.hw-news-item:last-child { border-bottom: none; }
.hw-news-item img {
  width: 92px; height: 62px; object-fit: cover; border-radius: 7px;
  flex: 0 0 92px; background: var(--panel2);
}
.hw-news-title { font-size: 13px; font-weight: 600; line-height: 1.4; color: var(--text); }
.hw-news-title a { color: inherit; text-decoration: none; }
.hw-news-title a:hover { color: var(--accent); }
.hw-news-sum { font-size: 11.5px; color: var(--dim); line-height: 1.5; margin-top: 3px; }
.hw-asset {
  font-family: 'JetBrains Mono', monospace; font-size: 10px; font-weight: 700;
  background: var(--panel2); border: 1px solid var(--border); border-radius: 4px;
  padding: 1px 6px; color: var(--accent); cursor: pointer;
}
.hw-asset:hover { border-color: var(--accent); }

/* état des places : la pastille pulse UNIQUEMENT quand le marché est ouvert.
   Une pastille qui bouge en permanence n'informe plus de rien. */
.hw-mkt { min-width: 168px; }
.hw-dot { width: 7px; height: 7px; border-radius: 50%; display: inline-block; }
.hw-dot.on  { background: #4ade80; box-shadow: 0 0 0 0 #4ade8099; animation: hwPulse 2.4s infinite; }
.hw-dot.off { background: #4a5470; }
@keyframes hwPulse {
  0%   { box-shadow: 0 0 0 0 #4ade8077; }
  70%  { box-shadow: 0 0 0 7px #4ade8000; }
  100% { box-shadow: 0 0 0 0 #4ade8000; }
}
/* variation de prix : flash bref à chaque rafraîchissement, sans déplacer la ligne */
@keyframes hwFlashUp   { from { background: #4ade8033; } to { background: transparent; } }
@keyframes hwFlashDown { from { background: #ff5a6e33; } to { background: transparent; } }
.hw-up   { animation: hwFlashUp .9s ease-out; }
.hw-down { animation: hwFlashDown .9s ease-out; }

/* popup d'alerte */
#hw-alert {
  position: fixed; inset: 0; z-index: 9000;
  background: #060a12cc; backdrop-filter: blur(3px);
  display: flex; align-items: center; justify-content: center; padding: 20px;
}
#hw-alert-box {
  background: var(--panel); border: 1px solid #ff5a6e88; border-radius: 14px;
  max-width: 640px; width: 100%; box-shadow: 0 30px 80px #000000cc;
  animation: hwAlertIn .28s cubic-bezier(.2, .9, .3, 1) both;
}
@keyframes hwAlertIn { from { opacity: 0; translate: 0 14px; scale: .97; } }
#hw-alert-head {
  display: flex; justify-content: space-between; align-items: center;
  padding: 13px 16px; border-bottom: 1px solid var(--border);
  font-weight: 700; font-size: 14px; color: #ff8593;
}
#hw-alert-body { padding: 14px 16px; font-size: 13px; line-height: 1.6; color: var(--text); }
#hw-alert-foot {
  display: flex; gap: 9px; justify-content: flex-end; flex-wrap: wrap;
  padding: 0 16px 15px;
}

/* ═══ QUESTIONNAIRE SUR MESURE ═══════════════════════════════════════════════
   Boutons-réponses larges : ce sont des choix de vie financière, pas des cases
   à cocher. La cible tactile fait au minimum 44 px de haut. */
.sm-opt {
  display: flex; flex-direction: column; align-items: flex-start; gap: 2px;
  min-width: 180px; max-width: 300px; flex: 1 1 200px;
  padding: 11px 14px; text-align: left; cursor: pointer;
  background: var(--panel2); color: var(--text);
  border: 1px solid var(--border); border-radius: 10px;
  font-family: inherit;
  transition: border-color .14s ease, background .14s ease, transform .12s ease;
}
.sm-opt:hover { border-color: var(--dim); transform: translateY(-1px); }
.sm-opt.on {
  border-color: var(--accent); background: #f4a4281a;
  box-shadow: 0 0 0 2px #f4a42822;
}
.sm-opt-l { font-size: 13px; font-weight: 600; line-height: 1.3; }
.sm-opt-d { font-size: 11px; color: var(--dim); line-height: 1.35; }
.sm-opt.on .sm-opt-l { color: var(--accent); }

/* ═══ CONNEXION (audit PRM-04) ═══════════════════════════════════════════════ */
#login-screen {
  position: fixed; inset: 0; z-index: 9500;
  background: var(--bg); display: flex; align-items: center; justify-content: center;
  padding: 22px;
}
#login-box {
  width: 100%; max-width: 380px; background: var(--panel);
  border: 1px solid var(--border); border-radius: 14px; padding: 30px 28px;
  box-shadow: 0 26px 70px var(--shadow);
}
#login-box .flame { font-size: 34px; text-align: center; }
#login-box h2 { text-align: center; font-size: 17px; font-weight: 800;
  letter-spacing: 2px; margin: 8px 0 3px; }
#login-box .sub { text-align: center; font-size: 11px; color: var(--dim);
  letter-spacing: 3px; margin-bottom: 24px; }
#login-box label { display: block; font-size: 12px; color: var(--dim); margin-bottom: 14px; }
#login-box input {
  width: 100%; margin-top: 5px; padding: 11px 13px; font-size: 14px;
  background: var(--panel2); color: var(--text);
  border: 1px solid var(--border); border-radius: 9px; outline: none;
  font-family: inherit;
}
#login-box input:focus { border-color: var(--accent); box-shadow: 0 0 0 3px #f4a42822; }
#login-box button { width: 100%; padding: 12px; font-size: 14px; font-weight: 700; }
#login-err {
  font-size: 12.5px; color: var(--red); min-height: 18px; margin: 4px 0 12px;
  line-height: 1.4;
}
#login-note { font-size: 11px; color: var(--dim); margin-top: 18px; line-height: 1.5;
  border-top: 1px solid var(--border); padding-top: 13px; }
/* bandeau du mode poste local */
#local-banner {
  background: #f4a42816; border-bottom: 1px solid #f4a42855; color: var(--accent);
  font-size: 11.5px; padding: 6px 18px; text-align: center; line-height: 1.4;
}
#local-banner b { font-weight: 700; }

/* ═══ VALIDATION INSTITUTIONNELLE ═══════════════════════════════════════════ */
.vd-badge {
  font-family: 'JetBrains Mono', monospace; font-size: 11px; font-weight: 800;
  letter-spacing: 1px; text-transform: uppercase;
  padding: 5px 12px; border-radius: 6px; white-space: nowrap;
}
.vd-badge.validee      { background: #2ecc8f1c; color: #2ecc8f; border: 1px solid #2ecc8f66; }
.vd-badge.sous_reserve { background: #f4a4281c; color: #f4a428; border: 1px solid #f4a42866; }
.vd-badge.non_gradee   { background: #8b94ab1c; color: #a8b2c6; border: 1px solid #8b94ab66; }
.vd-badge.rejetee      { background: #ff5a6e1c; color: #ff5a6e; border: 1px solid #ff5a6e66; }

.vd-statut {
  font-family: 'JetBrains Mono', monospace; font-size: 10px; font-weight: 700;
  letter-spacing: .5px; padding: 2px 7px; border-radius: 4px; white-space: nowrap;
}
.vd-statut.pass  { background: #2ecc8f1c; color: #2ecc8f; }
.vd-statut.fail  { background: #ff5a6e1c; color: #ff5a6e; }
.vd-statut.indet { background: #8b94ab1c; color: #a8b2c6; }
/* un contrôle BLOQUANT en échec doit se voir sans lire la ligne */
#ol-valid-tbl tr.bloquant td { background: #ff5a6e0e; }
#ol-valid-tbl tr.bloquant td:first-child { border-left: 3px solid var(--red); }

/* ═══ BANDEAU DE COTATIONS EN DIRECT ════════════════════════════════════════
   Une valeur qui ne bouge pas doit se distinguer d'une valeur PÉRIMÉE : la
   pastille et l'âge grisent au-delà d'une minute. Un chiffre figé qui a l'air
   vivant est pire qu'un chiffre absent. */
#tr-bar {
  display: flex; align-items: center; gap: 14px;
  background: var(--bg2); border-bottom: 1px solid var(--border);
  padding: 5px 14px; font-family: 'JetBrains Mono', monospace; font-size: 11.5px;
  position: sticky; top: 0; z-index: 45; overflow: hidden;
}
#tr-meta { display: flex; align-items: center; gap: 7px; color: var(--dim);
  font-size: 10.5px; white-space: nowrap; flex: 0 0 auto; }
.tr-dot { width: 6px; height: 6px; border-radius: 50%; background: var(--green);
  animation: trPulse 2s ease-in-out infinite; }
.tr-dot.vieux { background: var(--dim); animation: none; }
.tr-age { color: var(--green); font-weight: 700; }
.tr-age.vieux { color: var(--dim); }
.tr-off { color: var(--red); font-weight: 700; }
@keyframes trPulse { 0%,100% { opacity: 1; } 50% { opacity: .35; } }

#tr-items { display: flex; gap: 4px; overflow-x: auto; scrollbar-width: none;
  flex: 1 1 auto; min-width: 0; }
#tr-items::-webkit-scrollbar { height: 0; }
.tr-item {
  display: inline-flex; align-items: center; gap: 6px; white-space: nowrap;
  padding: 3px 9px; border-radius: 6px; flex: 0 0 auto;
  border: 1px solid transparent;
}
.tr-item b { color: var(--dim); font-weight: 700; }
.tr-px { color: var(--text); font-weight: 600; }
.tr-src { width: 5px; height: 5px; border-radius: 50%; display: inline-block;
  opacity: .8; }
/* le flash marque le CHANGEMENT, pas le niveau : il dure moins d'une seconde */
@keyframes trUp   { from { background: #2ecc8f30; border-color: #2ecc8f55; } to { background: transparent; border-color: transparent; } }
@keyframes trDown { from { background: #ff5a6e30; border-color: #ff5a6e55; } to { background: transparent; border-color: transparent; } }
.tr-item.tr-up   { animation: trUp .85s ease-out; }
.tr-item.tr-down { animation: trDown .85s ease-out; }
@media (prefers-reduced-motion: reduce) {
  .tr-dot, .tr-item.tr-up, .tr-item.tr-down { animation: none !important; }
}

/* ── bandeau de panne globale ──────────────────────────────────────────────
   Visible sans être criard : la panne est réelle, mais l'interface reste
   consultable (les pages statiques, la recherche récente, le thème). Un
   bandeau rouge plein écran laisserait croire que rien ne fonctionne. */
#panne-globale {
  display: none;
  margin: 0; padding: 11px 18px;
  background: rgba(244, 164, 40, .10);
  border-bottom: 1px solid rgba(244, 164, 40, .45);
  border-left: 3px solid #f4a428;
  color: var(--text);
  font-size: 13px; line-height: 1.5;
}
#panne-globale.on { display: block; }
#panne-globale::before {
  content: "Service dégradé — ";
  font-weight: 700; color: #f4a428;
}
