/* Sivotis — base.css
 * Extrait des fonctions *Css() du JS en phase 1 de la bascule
 * (docs/brief-bascule-refonte-2026-08.md). Aucune couleur littérale ici :
 * elles vivent toutes dans css/tokens/. Contenu non reformaté pour garder
 * un diff lisible avec la version qui partait dans le <style>.
 */

/* ═══ about.js ═══ */
.ab-page {
  background:var(--bg); color:var(--fg); min-height:100vh; line-height:1.5;
  font-family:var(--font-sans);
}
.ab-page *, .ab-page *::before, .ab-page *::after { box-sizing:border-box; }
.ab-page a { color:inherit; text-decoration:none; }
.ab-page .oi-mono { font-family:var(--font-mono); font-feature-settings:'ss01','cv11'; }
.ab-page .oi-small { font-size:11px; letter-spacing:.12em; text-transform:uppercase; }
.ab-page .ab-accent { color:var(--accent); }

.ab-nav { display:flex; align-items:center; gap:32px; padding:18px 40px;
  border-bottom:1px solid var(--hairline); position:sticky; top:0; z-index:10;
  background:rgba(var(--bg-rgb),.9); backdrop-filter:blur(12px); }
.ab-nav ul { list-style:none; padding:0; margin:0; display:flex; gap:28px; align-items:center; }
.ab-nav-sep { width:1px; height:14px; background:var(--hairline); }
.ab-nav ul a { font-family:var(--font-mono); font-size:12.5px;
  letter-spacing:.04em; color:rgba(var(--fg-rgb),.7); transition:color .2s; }
.ab-nav ul a:hover { color:var(--accent); }
.ab-nav ul a.current { color:var(--accent); }
.ab-nav-status { margin-left:auto; display:flex; align-items:center; gap:16px; }

.ab-btn { padding:12px 18px; border:1px solid var(--hairline); color:var(--fg);
  font-family:var(--font-mono); font-size:12.5px; letter-spacing:.04em;
  background:transparent; cursor:pointer; transition:all .2s; text-transform:uppercase;
  border-radius:4px; display:inline-flex; align-items:center; gap:8px; }
.ab-btn:hover { border-color:var(--accent); color:var(--accent); box-shadow:0 0 20px rgba(var(--accent-rgb),0.1333); }
.ab-btn.primary { background:var(--accent); color:var(--white); border-color:var(--accent); font-weight:700;
  box-shadow:0 0 20px rgba(var(--accent-rgb),0.2); }
.ab-btn.primary:hover { background:var(--white); border-color:var(--white); color:var(--accent); box-shadow:0 0 32px rgba(var(--accent-rgb),0.4); }

.ab-page .wordmark { display:inline-flex; align-items:center; font-size:18px; }

.ab-hero { padding:96px 56px 80px; border-bottom:1px solid var(--hairline);
  background:radial-gradient(ellipse 80% 60% at 0% 0%, rgba(var(--accent-rgb),0.0627), transparent 60%); }
.ab-hero-inner { max-width:1200px; margin:0 auto; }
.ab-hero-tag { margin-bottom:32px; }
.ab-hero h1 { font-size:72px; line-height:1.0; letter-spacing:-.035em; font-weight:700;
  margin:0; max-width:1000px; }

.ab-sec { border-bottom:1px solid var(--hairline); padding:72px 56px; }
.ab-sec-head { max-width:1200px; margin:0 auto 36px; }
.ab-sec-head .oi-small { display:inline-block; }
.ab-sec-head h2 { display:inline; font-size:36px; letter-spacing:-.025em;
  font-weight:700; margin:0 0 0 16px; }
.ab-sec-head p { color:rgba(var(--fg-rgb),.7); margin:16px 0 0; max-width:720px;
  font-size:16px; }
.ab-sec-body { max-width:1200px; margin:0 auto; }
.ab-sec-body > p { font-size:16px; line-height:1.7; color:rgba(var(--fg-rgb),.85);
  max-width:820px; margin:0 0 16px; }
.ab-sec-body > p:last-child { margin-bottom:0; }

.ab-where { list-style:none; padding:0; margin:0; }
.ab-where-row { display:grid; grid-template-columns:56px 1fr; gap:24px;
  padding:28px 0; border-bottom:1px dashed rgba(var(--white-rgb),.06); }
.ab-where-row:last-child { border-bottom:0; }
.ab-where-n { font-size:14px; letter-spacing:.14em; padding-top:4px; }
.ab-where-s { font-size:22px; font-weight:700; letter-spacing:-.015em; margin-bottom:8px; }
.ab-where-d { color:rgba(var(--fg-rgb),.7); font-size:15px; line-height:1.65; max-width:820px; }

.ab-stack { border-collapse:collapse; width:100%; max-width:1000px; }
.ab-stack td { padding:14px 16px; border-bottom:1px dashed rgba(var(--white-rgb),.06);
  vertical-align:top; font-size:13.5px; }
.ab-stack tr:last-child td { border-bottom:0; }
.ab-stack-k { width:140px; letter-spacing:.14em; text-transform:uppercase;
  font-size:12.5px; }
.ab-stack-v { color:rgba(var(--fg-rgb),.85); }

.ab-link { color:var(--accent); transition:opacity .2s; font-size:14px;
  display:inline-flex; align-items:center; gap:6px; }
.ab-link:hover { opacity:.7; }
.ab-contact { display:flex; flex-direction:column; gap:8px; margin-top:16px; }

.ab-footer { padding:32px 56px; }
.ab-foot-bot { display:flex; justify-content:space-between; padding-top:24px;
  border-top:1px solid var(--hairline); color:var(--muted); }

@media (max-width: 900px) {
  .ab-nav { padding:16px 20px; gap:16px; flex-wrap:wrap; }
  .ab-nav ul { gap:16px; font-size:12px; order:3; width:100%; }
  .ab-nav-status { gap:8px; }
  .ab-hero { padding:64px 24px 48px; }
  .ab-hero h1 { font-size:44px; }
  .ab-sec { padding:48px 24px; }
  .ab-sec-head h2 { font-size:28px; display:block; margin-left:0; margin-top:8px; }
  .ab-where-row { grid-template-columns:1fr; gap:6px; }
  .ab-stack-k { width:auto; padding-bottom:0 !important; border-bottom:0 !important; }
  .ab-stack-v { padding-top:4px !important; }
}

/* ═══ legal.js ═══ */
.lg-page {
  background:var(--bg); color:var(--fg); min-height:100vh; line-height:1.5;
  font-family:var(--font-sans);
  scroll-behavior:smooth;
}
.lg-page *, .lg-page *::before, .lg-page *::after { box-sizing:border-box; }
.lg-page a { color:inherit; text-decoration:none; }
.lg-page .oi-mono { font-family:var(--font-mono); font-feature-settings:'ss01','cv11'; }
.lg-page .oi-small { font-size:11px; letter-spacing:.12em; text-transform:uppercase; }
.lg-page .lg-accent { color:var(--accent); }

.lg-nav { display:flex; align-items:center; gap:32px; padding:18px 40px;
  border-bottom:1px solid var(--hairline); position:sticky; top:0; z-index:10;
  background:rgba(var(--bg-rgb),.9); backdrop-filter:blur(12px); }
.lg-nav ul { list-style:none; padding:0; margin:0; display:flex; gap:28px; align-items:center; }
.lg-nav-sep { width:1px; height:14px; background:var(--hairline); }
.lg-nav ul a { font-family:var(--font-mono); font-size:12.5px;
  letter-spacing:.04em; color:rgba(var(--fg-rgb),.7); transition:color .2s; }
.lg-nav ul a:hover { color:var(--accent); }
.lg-nav-status { margin-left:auto; display:flex; align-items:center; gap:16px; }

.lg-btn { padding:12px 18px; border:1px solid var(--hairline); color:var(--fg);
  font-family:var(--font-mono); font-size:12.5px; letter-spacing:.04em;
  background:transparent; cursor:pointer; transition:all .2s; text-transform:uppercase;
  border-radius:4px; display:inline-flex; align-items:center; gap:8px; }
.lg-btn:hover { border-color:var(--accent); color:var(--accent); box-shadow:0 0 20px rgba(var(--accent-rgb),0.1333); }
.lg-btn.primary { background:var(--accent); color:var(--white); border-color:var(--accent); font-weight:700;
  box-shadow:0 0 20px rgba(var(--accent-rgb),0.2); }
.lg-btn.primary:hover { background:var(--white); border-color:var(--white); color:var(--accent); box-shadow:0 0 32px rgba(var(--accent-rgb),0.4); }

.lg-page .wordmark { display:inline-flex; align-items:center; font-size:18px; }

.lg-hero { padding:80px 56px 56px; border-bottom:1px solid var(--hairline);
  background:radial-gradient(ellipse 80% 60% at 0% 0%, rgba(var(--accent-rgb),0.0627), transparent 60%); }
.lg-hero-inner { max-width:1100px; margin:0 auto; }
.lg-hero-tag { margin-bottom:24px; }
.lg-hero h1 { font-size:56px; line-height:1.05; letter-spacing:-.03em; font-weight:700;
  margin:0 0 16px; }
.lg-hero-sub { font-size:18px; color:rgba(var(--fg-rgb),.75); margin:0 0 20px;
  max-width:720px; line-height:1.55; }
.lg-hero-meta { color:var(--muted); margin:0 0 32px; }
.lg-toc { display:flex; flex-wrap:wrap; gap:0; border-top:1px solid var(--hairline);
  padding-top:20px; }
.lg-toc-item { display:inline-flex; align-items:baseline; gap:8px; padding:12px 24px 12px 0;
  font-size:13px; color:rgba(var(--fg-rgb),.85); transition:color .2s; }
.lg-toc-item:hover { color:var(--accent); }
.lg-toc-n { font-size:12px; letter-spacing:.14em; }

.lg-sections { }
.lg-sec { border-bottom:1px solid var(--hairline); padding:64px 56px; }
.lg-sec-head { max-width:1100px; margin:0 auto 32px; }
.lg-sec-head .oi-small { display:inline-block; }
.lg-sec-head h2 { display:inline; font-size:32px; letter-spacing:-.02em;
  font-weight:700; margin:0 0 0 16px; }
.lg-sec-body { max-width:1100px; margin:0 auto; }

.lg-block { margin-bottom:32px; }
.lg-block:last-child { margin-bottom:0; }
.lg-block-h { font-size:17px; font-weight:700; letter-spacing:-.01em;
  margin:0 0 12px; color:var(--accent); }
.lg-block-p { font-size:14.5px; line-height:1.7; color:rgba(var(--fg-rgb),.82);
  margin:0 0 10px; max-width:820px; }
.lg-block-p:last-child { margin-bottom:0; }

.lg-outro { padding:56px 56px 32px; }
.lg-outro-inner { max-width:1100px; margin:0 auto; }
.lg-outro-p { font-size:14.5px; color:var(--muted); margin:0; }

.lg-footer { padding:24px 56px 32px; }
.lg-foot-bot { display:flex; justify-content:space-between; padding-top:24px;
  border-top:1px solid var(--hairline); color:var(--muted); }

@media (max-width: 900px) {
  .lg-nav { padding:16px 20px; gap:16px; flex-wrap:wrap; }
  .lg-nav ul { gap:16px; font-size:12px; order:3; width:100%; }
  .lg-nav-status { gap:8px; }
  .lg-hero { padding:56px 24px 40px; }
  .lg-hero h1 { font-size:36px; }
  .lg-toc-item { padding:8px 16px 8px 0; }
  .lg-sec { padding:48px 24px; }
  .lg-sec-head h2 { font-size:24px; display:block; margin-left:0; margin-top:8px; }
  .lg-outro { padding:40px 24px 24px; }
  .lg-footer { padding:24px; }
}

/* ═══ reports.js ═══ */
.rp-page { background:var(--bg); color:var(--fg); min-height:100vh; line-height:1.5;
  font-family:var(--font-sans); }
.rp-page *, .rp-page *::before, .rp-page *::after { box-sizing:border-box; }
.rp-page a { color:inherit; text-decoration:none; }
.rp-page .oi-mono { font-family:var(--font-mono); font-feature-settings:'ss01','cv11'; }
.rp-page .oi-small { font-size:11px; letter-spacing:.12em; text-transform:uppercase; }
.rp-page .rp-accent { color:var(--accent); }

.rp-nav { display:flex; align-items:center; gap:32px; padding:18px 40px;
  border-bottom:1px solid var(--hairline); position:sticky; top:0; z-index:10;
  background:rgba(var(--bg-rgb),.9); backdrop-filter:blur(12px); }
.rp-nav ul { list-style:none; padding:0; margin:0; display:flex; gap:28px; align-items:center; }
.rp-nav ul a { font-family:var(--font-mono); font-size:12.5px;
  letter-spacing:.04em; color:rgba(var(--fg-rgb),.7); transition:color .2s; }
.rp-nav ul a:hover, .rp-nav ul a.current { color:var(--accent); }
.rp-nav-status { margin-left:auto; display:flex; align-items:center; gap:16px; }

.rp-btn { padding:11px 16px; border:1px solid var(--hairline); color:var(--fg);
  font-family:var(--font-mono); font-size:12px; letter-spacing:.04em;
  background:transparent; cursor:pointer; transition:all .2s; text-transform:uppercase;
  border-radius:4px; display:inline-flex; align-items:center; gap:8px; white-space:nowrap; }
.rp-btn:hover { border-color:var(--accent); color:var(--accent); box-shadow:0 0 20px rgba(var(--accent-rgb),0.1333); }
.rp-btn.primary { background:var(--accent); color:var(--white); border-color:var(--accent); font-weight:700;
  box-shadow:0 0 20px rgba(var(--accent-rgb),0.2); }
.rp-btn.primary:hover { background:var(--white); border-color:var(--white); color:var(--accent); box-shadow:0 0 32px rgba(var(--accent-rgb),0.4); }
.rp-page .wordmark { display:inline-flex; align-items:center; font-size:18px; }

.rp-hero { padding:80px 56px 48px; border-bottom:1px solid var(--hairline);
  background:radial-gradient(ellipse 80% 60% at 0% 0%, rgba(var(--accent-rgb),0.0627), transparent 60%); }
.rp-hero-inner { max-width:1200px; margin:0 auto; }
.rp-hero-tag { margin-bottom:28px; }
.rp-hero h1 { font-size:64px; line-height:1.0; letter-spacing:-.035em; font-weight:700; margin:0 0 18px; }
.rp-hero-sub { font-size:18px; color:rgba(var(--fg-rgb),.75); margin:0 0 24px; max-width:760px; line-height:1.55; }
.rp-hero-count { color:var(--muted); }

.rp-specimen { color:var(--accent); background:rgba(var(--accent-rgb),0.0588); border-top:1px solid rgba(var(--accent-rgb),0.2);
  border-bottom:1px solid rgba(var(--accent-rgb),0.2); padding:12px 56px; letter-spacing:.1em; }
.rp-specimen-inline { border:1px solid rgba(var(--accent-rgb),0.2); border-radius:4px; padding:10px 14px; margin:20px 0 8px; }

.rp-list { padding:56px; }
.rp-grid { max-width:1200px; margin:0 auto; display:grid; grid-template-columns:repeat(2, 1fr); gap:24px; }
.rp-card { display:flex; flex-direction:column; gap:14px; padding:32px; border:1px solid var(--hairline);
  border-radius:6px; background:rgba(var(--white-rgb),.012); transition:border-color .2s, transform .2s; }
.rp-card:hover { border-color:rgba(var(--accent-rgb),0.2667); transform:translateY(-2px); }
.rp-card-meta { color:var(--muted); }
.rp-card-title { font-size:21px; font-weight:700; letter-spacing:-.015em; line-height:1.25; color:var(--fg); }
.rp-card-title:hover { color:var(--accent); }
.rp-card-sum { color:rgba(var(--fg-rgb),.7); font-size:14.5px; line-height:1.6; margin:0; flex:1; }
.rp-tags { display:flex; flex-wrap:wrap; gap:8px; }
.rp-tag { font-size:10.5px; letter-spacing:.1em; text-transform:uppercase; color:var(--muted);
  border:1px solid var(--hairline); border-radius:3px; padding:3px 8px; }
.rp-card-actions { display:flex; align-items:center; gap:12px; flex-wrap:wrap; margin-top:4px; }
.rp-readmin { color:var(--muted); margin-left:auto; }

.rp-article { padding:64px 56px 72px; }
.rp-art-inner { max-width:820px; margin:0 auto; }
.rp-back { color:var(--accent); font-size:13px; display:inline-block; margin-bottom:28px; }
.rp-back:hover { opacity:.7; }
.rp-art-meta { color:var(--muted); margin-bottom:18px; }
.rp-art-title { font-size:42px; line-height:1.08; letter-spacing:-.03em; font-weight:700; margin:0 0 18px; }
.rp-art-lead { font-size:18px; line-height:1.6; color:rgba(var(--fg-rgb),.8); margin:0 0 16px; }
.rp-art-body { margin-top:32px; }
.rp-block { margin-bottom:32px; }
.rp-block-h { font-size:18px; font-weight:700; letter-spacing:-.01em; margin:0 0 12px; color:var(--accent); }
.rp-block-p { font-size:15.5px; line-height:1.75; color:rgba(var(--fg-rgb),.85); margin:0 0 12px; }
.rp-art-actions { display:flex; gap:12px; flex-wrap:wrap; margin-top:40px; padding-top:28px;
  border-top:1px solid var(--hairline); }

.rp-footer { padding:32px 56px; }
.rp-foot-bot { display:flex; justify-content:space-between; padding-top:24px;
  border-top:1px solid var(--hairline); color:var(--muted); }

@media (max-width: 900px) {
  .rp-nav { padding:16px 20px; gap:16px; flex-wrap:wrap; }
  .rp-nav ul { gap:16px; font-size:12px; order:3; width:100%; }
  .rp-nav-status { gap:8px; }
  .rp-hero { padding:56px 24px 36px; }
  .rp-hero h1 { font-size:40px; }
  .rp-specimen { padding:12px 24px; }
  .rp-list { padding:32px 24px; }
  .rp-grid { grid-template-columns:1fr; gap:18px; }
  .rp-card { padding:24px; }
  .rp-article { padding:40px 24px 56px; }
  .rp-art-title { font-size:30px; }
  .rp-readmin { margin-left:0; width:100%; }
}

/* ═══ services.js ═══ */
.sv-page {
  background:var(--bg); color:var(--fg); min-height:100vh; line-height:1.5;
  font-family:var(--font-sans);
}
.sv-page *, .sv-page *::before, .sv-page *::after { box-sizing:border-box; }
.sv-page a { color:inherit; text-decoration:none; }
.sv-page .oi-mono { font-family:var(--font-mono); font-feature-settings:'ss01','cv11'; }
.sv-page .oi-small { font-size:11px; letter-spacing:.12em; text-transform:uppercase; }
.sv-page .sv-accent { color:var(--accent); }

.sv-nav { display:flex; align-items:center; gap:32px; padding:18px 40px;
  border-bottom:1px solid var(--hairline); position:sticky; top:0; z-index:10;
  background:rgba(var(--bg-rgb),.9); backdrop-filter:blur(12px); }
.sv-nav ul { list-style:none; padding:0; margin:0; display:flex; gap:28px; align-items:center; }
.sv-nav-sep { width:1px; height:14px; background:var(--hairline); }
.sv-nav ul a { font-family:var(--font-mono); font-size:12.5px;
  letter-spacing:.04em; color:rgba(var(--fg-rgb),.7); transition:color .2s; }
.sv-nav ul a:hover { color:var(--accent); }
.sv-nav ul a.current { color:var(--accent); }
.sv-nav-status { margin-left:auto; display:flex; align-items:center; gap:16px; }

.sv-btn { padding:12px 18px; border:1px solid var(--hairline); color:var(--fg);
  font-family:var(--font-mono); font-size:12.5px; letter-spacing:.04em;
  background:transparent; cursor:pointer; transition:all .2s; text-transform:uppercase;
  border-radius:4px; display:inline-flex; align-items:center; gap:8px; }
.sv-btn:hover { border-color:var(--accent); color:var(--accent); box-shadow:0 0 20px rgba(var(--accent-rgb),0.1333); }
.sv-btn.primary { background:var(--accent); color:var(--white); border-color:var(--accent); font-weight:700;
  box-shadow:0 0 20px rgba(var(--accent-rgb),0.2); }
.sv-btn.primary:hover { background:var(--white); border-color:var(--white); color:var(--accent); box-shadow:0 0 32px rgba(var(--accent-rgb),0.4); }

.sv-page .wordmark { display:inline-flex; align-items:center; font-size:18px; }

.sv-hero { padding:96px 56px 80px; border-bottom:1px solid var(--hairline);
  background:radial-gradient(ellipse 80% 60% at 0% 0%, rgba(var(--accent-rgb),0.0627), transparent 60%); }
.sv-hero-inner { max-width:1200px; margin:0 auto; }
.sv-hero-tag { margin-bottom:32px; }
.sv-hero h1 { font-size:72px; line-height:1.0; letter-spacing:-.035em; font-weight:700;
  margin:0; max-width:1100px; }
.sv-hero-sub { color:var(--accent); margin:32px 0 0; font-size:13px; letter-spacing:.14em;
  text-transform:uppercase; }

.sv-offers { }
.sv-offer { border-bottom:1px solid var(--hairline); padding:80px 56px; }
.sv-offer-head { max-width:1200px; margin:0 auto 32px; display:flex; align-items:baseline;
  gap:24px; flex-wrap:wrap; }
.sv-offer-n { font-size:16px; letter-spacing:.18em; }
.sv-offer-head h2 { font-size:40px; letter-spacing:-.025em; font-weight:700;
  margin:0; line-height:1.05; }
.sv-offer-body { max-width:1200px; margin:0 auto; display:grid;
  grid-template-columns:1.4fr 1fr; gap:64px; }
.sv-offer-lede { font-size:18px; line-height:1.6; color:rgba(var(--fg-rgb),.9); margin:0 0 16px;
  font-weight:500; }
.sv-offer-sub { color:rgba(var(--fg-rgb),.62); font-size:15.5px; line-height:1.65;
  margin:0 0 28px; font-style:italic; max-width:640px; }

.sv-bullets { list-style:none; padding:0; margin:0; display:flex; flex-direction:column;
  gap:12px; }
.sv-bullets li { display:grid; grid-template-columns:24px 1fr; gap:12px;
  font-size:14.5px; line-height:1.55; color:rgba(var(--fg-rgb),.85); }
.sv-bul-arrow { font-size:14px; padding-top:2px; }

.sv-meta { display:flex; flex-direction:column; gap:0; padding:24px 28px;
  border:1px solid var(--hairline); border-radius:4px;
  background:rgba(var(--white-rgb),.015); align-self:start; }
.sv-meta-row { display:grid; grid-template-columns:100px 1fr; gap:16px;
  padding:14px 0; border-bottom:1px dashed rgba(var(--white-rgb),.06); align-items:baseline; }
.sv-meta-row:last-child { border-bottom:0; }
.sv-meta-k { color:rgba(var(--fg-rgb),.55); padding-top:1px; }
.sv-meta-v { font-size:14px; color:rgba(var(--fg-rgb),.92); line-height:1.5; }

.sv-outro { padding:80px 56px; }
.sv-outro-inner { max-width:1100px; margin:0 auto; text-align:left; }
.sv-outro-p { font-size:18px; color:rgba(var(--fg-rgb),.85); line-height:1.65;
  margin:0 0 32px; max-width:820px; }
.sv-outro-cta { padding:18px 26px; font-size:13.5px; letter-spacing:.14em; }

.sv-footer { padding:32px 56px; }
.sv-foot-bot { display:flex; justify-content:space-between; padding-top:24px;
  border-top:1px solid var(--hairline); color:var(--muted); }

@media (max-width: 1000px) {
  .sv-offer-body { grid-template-columns:1fr; gap:32px; }
  .sv-meta { padding:20px 22px; }
  .sv-meta-row { grid-template-columns:90px 1fr; gap:12px; }
}
@media (max-width: 900px) {
  .sv-nav { padding:16px 20px; gap:16px; flex-wrap:wrap; }
  .sv-nav ul { gap:16px; font-size:12px; order:3; width:100%; }
  .sv-nav-status { gap:8px; }
  .sv-hero { padding:64px 24px 48px; }
  .sv-hero h1 { font-size:42px; }
  .sv-offer { padding:56px 24px; }
  .sv-offer-head h2 { font-size:28px; }
  .sv-outro { padding:56px 24px; }
  .sv-outro-p { font-size:16px; }
}

/* ═══ dir-ops-intel.js ═══ */
.dir-opsintel { background: var(--bg); color: var(--fg); min-height:100%; line-height:1.5;
    font-family: var(--font-sans); }
  .dir-opsintel *, .dir-opsintel *::before, .dir-opsintel *::after { box-sizing: border-box; }
  .dir-opsintel a { color: inherit; text-decoration: none; }
  .dir-opsintel .oi-mono { font-family: var(--font-mono); font-feature-settings: 'ss01','cv11'; }
  .dir-opsintel .oi-small { font-size: 11px; letter-spacing: .12em; text-transform: uppercase; }
  .dir-opsintel .oi-muted { color: var(--muted); }
  .dir-opsintel .oi-accent { color: var(--accent); }
  .dir-opsintel .oi-strike { text-decoration: line-through; text-decoration-color: var(--accent); text-decoration-thickness: 4px; color: rgba(var(--fg-rgb),.45); }
  .dir-opsintel .oi-dot { width:7px; height:7px; border-radius:50%; background: var(--accent); display:inline-block;
    box-shadow: 0 0 8px var(--accent); animation: oi-blink 2s infinite; vertical-align: middle; margin-right: 6px; }
  @keyframes oi-blink { 0%,100%{opacity:1} 50%{opacity:.4} }

  /* NAV */
  .oi-nav { display:flex; align-items:center; gap: 32px; padding: 18px 40px;
    border-bottom: 1px solid var(--hairline); position: sticky; top:0; z-index: 10; background: rgba(var(--bg-rgb),.9); backdrop-filter: blur(12px); }
  .oi-nav ul { list-style:none; padding:0; margin:0; display:flex; gap: 28px; align-items: center; }
  .oi-nav-sep { width: 1px; height: 14px; background: var(--hairline); }
  .oi-nav ul a { font-family: var(--font-mono); font-size: 12.5px; letter-spacing: .04em; color: rgba(var(--fg-rgb),.7); }
  .oi-nav ul a:hover { color: var(--accent); }
  .oi-nav-status { margin-left:auto; display:flex; align-items:center; gap: 16px; }

  .oi-btn { padding: 12px 18px; border: 1px solid var(--hairline); color: var(--fg); font-family: var(--font-mono);
    font-size: 12.5px; letter-spacing: .04em; background: transparent; cursor: pointer; transition: all .2s;
    display: inline-flex; align-items: center; gap: 8px; text-transform: uppercase; border-radius: 4px; }
  .oi-btn:hover { border-color: var(--accent); color: var(--accent); box-shadow: 0 0 20px rgba(var(--accent-rgb),0.1333); }
  .oi-btn.primary { background: var(--accent); color: var(--white); border-color: var(--accent); font-weight: 700;
    box-shadow: 0 0 20px rgba(var(--accent-rgb),0.2); }
  .oi-btn.primary:hover { background: var(--white); border-color: var(--white); color: var(--accent); box-shadow: 0 0 32px rgba(var(--accent-rgb),0.4); }
  .oi-btn.block { display:flex; width:100%; justify-content:center; }
  .oi-btn.big { padding: 18px; font-size: 14px; letter-spacing: .14em; }

  .dir-opsintel .wordmark { display:inline-flex; align-items:center; font-size: 18px; font-family: var(--font-sans); }

  /* HERO */
  .oi-hero { position: relative; min-height: 700px; display: grid; grid-template-columns: 1fr 1fr; gap: 0;
    border-bottom: 1px solid var(--hairline); }
  .oi-hero::before { content:''; position:absolute; inset:0; pointer-events:none;
    background: radial-gradient(ellipse 60% 50% at 0% 0%, rgba(var(--accent-rgb),0.0784), transparent 60%); }
  .oi-hero-overlay { padding: 80px 56px 60px; display:flex; flex-direction: column; justify-content: center;
    border-right: 1px solid var(--hairline); position: relative; z-index: 1; }
  .oi-hero-tag { font-family: var(--font-mono); font-size: 11.5px; letter-spacing: .14em; color: var(--accent); margin-bottom: 32px; }
  .oi-hero h1 { font-size: 84px; line-height: .95; letter-spacing: -.035em; font-weight: 700;
    margin: 0 0 32px; }
  .oi-hero h1 .oi-accent { font-weight: 700; }
  .oi-hero p { font-size: 17px; color: rgba(var(--fg-rgb),.7); max-width: 540px; margin: 0 0 36px; line-height: 1.6; }
  .oi-hero p strong { color: var(--fg); font-weight: 600; }
  .oi-hero-row { display:flex; gap: 12px; }

  .oi-hero-map { position: relative; padding: 0; min-height: 620px; background: var(--bg-2);
    background-image: linear-gradient(rgba(var(--accent-rgb),0.0314) 1px, transparent 1px),
                      linear-gradient(90deg, rgba(var(--accent-rgb),0.0314) 1px, transparent 1px);
    background-size: 32px 32px; }

  /* DASH HEAD */
  .oi-dash-head { padding: 80px 56px 40px; border-bottom: 1px solid var(--hairline); }
  .oi-dash-head .oi-small { display: inline-block; margin-right: 16px; }
  .oi-dash-head h2 { display:inline; font-size: 42px; letter-spacing: -.025em; font-weight: 700; margin: 0; }
  .oi-dash-head p { color: rgba(var(--fg-rgb),.7); margin: 16px 0 0; max-width: 720px; font-size: 16px; }

  /* MODULES */
  .oi-modules { border-bottom: 1px solid var(--hairline); }
  .oi-mods-list { display: grid; grid-template-columns: repeat(2, 1fr); }
  .oi-mod-row { display: flex; flex-direction: column; padding: 36px 48px;
    border-bottom: 1px solid var(--hairline); border-right: 1px solid var(--hairline); }
  .oi-mod-row:nth-child(2n) { border-right: none; }
  .oi-mod-row:nth-last-child(-n+2) { border-bottom: none; }
  .oi-mod-n { font-family:var(--font-mono); font-size: 13px; color: var(--accent); letter-spacing: .14em; margin-bottom: 14px; }
  .oi-mod-c { margin-bottom: 18px; }
  .oi-mod-t { font-size: 22px; font-weight: 700; letter-spacing: -.015em; margin-bottom: 8px; }
  .oi-mod-d { color: var(--muted); font-size: 14.5px; }
  .oi-mod-m { font-size: 12px; letter-spacing: .12em; color: var(--accent); text-transform: uppercase; margin-top: auto; padding-top: 4px; }
  @media (max-width: 880px) {
    .oi-mods-list { grid-template-columns: 1fr; }
    .oi-mod-row { border-right: none; }
    .oi-mod-row:nth-last-child(-n+2) { border-bottom: 1px solid var(--hairline); }
    .oi-mod-row:last-child { border-bottom: none; }
  }

  /* APPROACH BAND */
  .oi-approach-band { display:grid; grid-template-columns: repeat(3, 1fr); border-bottom: 1px solid var(--hairline);
    background: linear-gradient(180deg, transparent, rgba(var(--white-rgb),.012)); }
  .oi-ab-cell { padding: 56px 48px; border-right: 1px solid var(--hairline); }
  .oi-ab-cell:last-child { border-right: 0; }
  .oi-ab-n { font-family:var(--font-mono); font-size: 14px; color: var(--accent); letter-spacing: .12em; margin-bottom: 24px; }
  .oi-ab-cell h3 { font-size: 26px; font-weight: 700; letter-spacing: -.015em; margin: 0 0 12px; }
  .oi-ab-cell p { color: var(--muted); font-size: 15px; margin: 0; line-height: 1.6; }

  /* SERVICES BAND */
  .oi-services-band { border-bottom: 1px solid var(--hairline);
    background: linear-gradient(180deg, transparent, rgba(var(--white-rgb),.012)); }
  .oi-srv-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0;
    border-bottom: 1px solid var(--hairline); }
  .oi-srv-cell { padding: 48px 56px; border-right: 1px solid var(--hairline); }
  .oi-srv-cell:last-child { border-right: 0; }
  .oi-srv-cell .oi-ab-n { margin-bottom: 18px; }
  .oi-srv-cell h3 { font-size: 20px; font-weight: 700; letter-spacing: -.01em; margin: 0 0 10px; }
  .oi-srv-cell p { color: var(--muted); font-size: 14.5px; margin: 0; line-height: 1.6; }
  .oi-srv-cta { padding: 48px 56px; text-align: center; }
  @media (max-width: 880px) {
    .oi-srv-grid { grid-template-columns: 1fr; }
    .oi-srv-cell { padding: 32px 24px; border-right: 0; border-bottom: 1px solid var(--hairline); }
    .oi-srv-cell:last-child { border-bottom: 0; }
    .oi-srv-cta { padding: 32px 24px; }
  }

  /* THREAT REPORTS */
  .oi-reports { border-bottom: 1px solid var(--hairline);
    background: linear-gradient(180deg, transparent, rgba(var(--white-rgb),.012)); }
  .oi-rep-grid { display: grid; grid-template-columns: repeat(3, 1fr);
    border-top: 1px solid var(--hairline); }
  .oi-rep-card { display: flex; flex-direction: column; gap: 12px; padding: 36px 40px;
    border-right: 1px solid var(--hairline); border-bottom: 1px solid var(--hairline); }
  .oi-rep-card:nth-child(3n) { border-right: 0; }
  .oi-rep-meta { color: var(--muted); }
  .oi-rep-title { font-size: 18px; font-weight: 700; letter-spacing: -.015em; line-height: 1.3; color: var(--fg); transition: color .2s; }
  .oi-rep-title:hover { color: var(--accent); }
  .oi-rep-sum { color: var(--muted); font-size: 14px; line-height: 1.6; margin: 0; flex: 1; }
  .oi-rep-tags { display: flex; flex-wrap: wrap; gap: 6px; }
  .oi-rep-tag { font-size: 10px; letter-spacing: .1em; text-transform: uppercase; color: var(--muted);
    border: 1px solid var(--hairline); border-radius: 3px; padding: 3px 7px; }
  .oi-rep-read { font-size: 12px; letter-spacing: .04em; color: var(--accent); text-transform: uppercase; margin-top: 2px; }
  .oi-rep-read:hover { opacity: .7; }
  .oi-rep-cta { padding: 48px 56px; text-align: center; }
  @media (max-width: 880px) {
    .oi-rep-grid { grid-template-columns: 1fr; }
    .oi-rep-card { padding: 28px 24px; border-right: 0; }
    .oi-rep-cta { padding: 32px 24px; }
  }

  /* TARIFS */
  .oi-tarifs { border-bottom: 1px solid var(--hairline); background: linear-gradient(180deg, transparent, rgba(var(--accent-rgb),0.0235)); }
  .oi-prc-grid { display:grid; grid-template-columns: repeat(3, 1fr); border-top: 1px solid var(--hairline); }
  .oi-prc-card { padding: 40px 36px; border-right: 1px solid var(--hairline); display:flex; flex-direction: column;
    background: rgba(var(--panel-rgb),.55); position:relative; min-height: 480px; }
  .oi-prc-card:last-child { border-right: 0; }
  .oi-prc-card.oi-featured { background: linear-gradient(180deg, rgba(var(--accent-rgb),0.0627), transparent 60%);
    box-shadow: inset 0 0 0 1px rgba(var(--accent-rgb),0.251), 0 20px 60px rgba(var(--accent-rgb),0.102); }
  .oi-prc-tag { position:absolute; top: 0; left: 0; right: 0; padding: 8px; background: var(--accent); color: var(--white);
    text-align:center; font-size: 11px; letter-spacing: .14em; font-weight: 700; }
  .oi-prc-card.oi-featured { padding-top: 60px; }
  .oi-prc-n { font-family:var(--font-mono); font-size: 14px; letter-spacing: .14em; color: var(--accent); margin-bottom: 16px; }
  .oi-prc-d { color: var(--muted); font-size: 14px; margin: 0 0 24px; }
  .oi-prc-line { height: 1px; background: var(--hairline); margin-bottom: 24px; }
  .oi-prc-card ul { list-style: none; padding: 0; margin: 0 0 28px; display:flex; flex-direction: column; gap: 12px; flex: 1; }
  .oi-prc-card li { font-size: 14px; color: rgba(var(--fg-rgb),.85); display:flex; gap: 10px; }

  /* DEMO */
  .oi-demo { display:grid; grid-template-columns: 1fr 1.2fr; border-bottom: 1px solid var(--hairline); }
  .oi-demo-side { padding: 80px 56px; border-right: 1px solid var(--hairline); }
  .oi-demo-side h2 { font-size: 80px; line-height: .95; letter-spacing: -.035em; font-weight: 700; margin: 24px 0 24px; }
  .oi-demo-side > p { color: rgba(var(--fg-rgb),.7); font-size: 16.5px; max-width: 460px; margin: 0 0 32px; line-height: 1.6; }
  .oi-demo-meta { display: flex; flex-direction: column; gap: 12px; }
  .oi-dm-row { font-size: 14.5px; padding: 12px 0; border-top: 1px solid var(--hairline); }
  .oi-dm-row:last-child { border-bottom: 1px solid var(--hairline); }

  .oi-demo-form-card { padding: 60px 56px; }
  .oi-dfc-h { display:flex; justify-content:space-between; align-items:center; margin-bottom: 32px;
    padding-bottom: 16px; border-bottom: 1px solid var(--hairline);
    font-family:var(--font-mono); font-size: 12.5px; letter-spacing: .1em; color: var(--muted); }
  .oi-dfc-grid { display:grid; grid-template-columns: 1fr 1fr; gap: 20px; margin-bottom: 28px; }
  .oi-dfc-row { display:flex; flex-direction: column; gap: 6px; }
  .oi-dfc-row.span { grid-column: span 2; }
  .oi-dfc-row label { color: var(--muted); font-weight: 600; }
  .oi-dfc-row input, .oi-dfc-row select { background: transparent; border: 0; border-bottom: 1px solid var(--hairline);
    padding: 12px 0 10px; color: var(--white); font-family: inherit; font-size: 15px; font-weight: 500;
    outline: none; transition: border-color .2s; caret-color: var(--accent); }
  .oi-dfc-row input::placeholder {
    color: rgba(var(--fg-rgb), 0.28); font-weight: 400; font-style: italic;
    font-family: var(--font-mono); font-size: 13px;
  }
  .oi-dfc-row input:focus, .oi-dfc-row select:focus { border-color: var(--accent); box-shadow: 0 1px 0 0 var(--accent); }
  .oi-dfc-row:focus-within label { color: var(--accent); }
  .oi-dfc-foot { color: var(--muted); text-align: center; margin-top: 14px; }

  /* FOOTER */
  .oi-footer { padding: 64px 56px 28px; }
  .oi-if-grid { display:grid; grid-template-columns: 2fr 1fr; gap: 56px; margin-bottom: 48px; }
  .oi-if-grid p { color: var(--muted); margin: 16px 0; line-height: 1.6; font-size: 14px; }
  .oi-if-badges { color: var(--muted); }
  .oi-if-h { color: var(--muted); margin-bottom: 16px; }
  .oi-if-grid a { display:block; padding: 5px 0; font-size: 14px; color: rgba(var(--fg-rgb),.85); }
  .oi-if-grid a:hover { color: var(--accent); }
  .oi-if-bot { display:flex; justify-content:space-between; padding-top: 24px; border-top: 1px solid var(--hairline); color: var(--muted); }

/* ═══ shared.js — animations de ThreatMap ═══ */
/* Étaient injectées par le composant lui-même ; elles ne dépendent d'aucune
 * couleur, donc elles vivent ici plutôt que dans les jetons. */
@keyframes tm-dot { 0%{transform:scale(.6); opacity:1} 100%{transform:scale(.9); opacity:0} }
@keyframes tm-ring { 0%{transform:scale(.4); opacity:.9} 100%{transform:scale(6); opacity:0} }
@keyframes tm-fade { 0%,20%{opacity:0; transform:translateX(-4px)} 35%{opacity:1; transform:translateX(0)} 100%{opacity:0} }
@keyframes tm-fog { 0%{transform:scale(0)} 100%{transform:scale(1)} }

/* ═══════════════════════════════════════════════════════════════════════
   COUCHE COMPOSITION — classes émises par js/layouts/*.js

   Les cinq pages publiques portaient ces règles en cinq copies préfixées
   (.ab-, .lg-, .rp-, .sv-, .oi-). Comparées déclaration par déclaration,
   elles sont IDENTIQUES à trois écarts près, repris en surcharge plus bas.

   Ce bloc est ADDITIF : les copies préfixées restent en place. Elles
   deviennent mortes au fur et à mesure que les pages passent aux
   primitives, et un grep sur les className le prouvera avant de les
   retirer. Les supprimer ici, par chirurgie sur le fichier, avait cassé un
   sélecteur groupé — la leçon est consignée au journal.
   ═══════════════════════════════════════════════════════════════════════ */
.site-nav { display:flex; align-items:center; gap:32px; padding:18px 40px;
  border-bottom:1px solid var(--hairline); position:sticky; top:0; z-index:10;
  background:rgba(var(--bg-rgb),.9); backdrop-filter:blur(12px); }
.site-nav ul { list-style:none; padding:0; margin:0; display:flex; gap:28px; align-items:center; }
.site-nav-sep { width:1px; height:14px; background:var(--hairline); }
.site-nav ul a { font-family:var(--font-mono); font-size:12.5px;
  letter-spacing:.04em; color:rgba(var(--fg-rgb),.7); transition:color .2s; }
.site-nav ul a:hover { color:var(--accent); }
.site-nav ul a.current { color:var(--accent); }
.site-nav-status { margin-left:auto; display:flex; align-items:center; gap:16px; }
.site-btn { padding:12px 18px; border:1px solid var(--hairline); color:var(--fg);
  font-family:var(--font-mono); font-size:12.5px; letter-spacing:.04em;
  background:transparent; cursor:pointer; transition:all .2s; text-transform:uppercase;
  border-radius:4px; display:inline-flex; align-items:center; gap:8px; }
.site-btn:hover { border-color:var(--accent); color:var(--accent); box-shadow:0 0 20px rgba(var(--accent-rgb),0.1333); }
.site-btn.primary { background:var(--accent); color:var(--white); border-color:var(--accent); font-weight:700;
  box-shadow:0 0 20px rgba(var(--accent-rgb),0.2); }
.site-btn.primary:hover { background:var(--white); border-color:var(--white); color:var(--accent); box-shadow:0 0 32px rgba(var(--accent-rgb),0.4); }
.site-footer { padding:32px 56px; }
.site-foot-bot { display:flex; justify-content:space-between; padding-top:24px;
  border-top:1px solid var(--hairline); color:var(--muted); }

/* Barre repliée sur petit écran — reprise de la media query existante. */
@media (max-width: 900px) {
  .site-nav { padding:16px 20px; gap:16px; flex-wrap:wrap; }
  .site-nav ul { gap:16px; font-size:12px; order:3; width:100%; }
  .site-nav-status { gap:8px; }
}

/* Les trois seuls écarts réels entre les cinq copies. */
.site-footer--legal { padding: 24px 56px 32px; }
.site-footer--home  { padding: 64px 56px 28px; }
/* Les boutons de barre sont d'un cran plus petits sur Threat reports. */
.site-nav--reports .site-btn { font-size: 12px; padding: 11px 16px; white-space: nowrap; }

/* ═══ Commutateur de langue (i18n.js) ═══ */
/* Ces déclarations étaient posées en style inline par le composant. Elles en
 * sortent pour la même raison que les <style> de la phase 1 : un style inline
 * ne peut pas être rehabillé par une charte. L'une d'elles portait encore la
 * couleur de --fg d'OPS×INTEL en clair, en notation rgb() — elle traversait
 * donc telle quelle en thème signal.
 * Valeurs reprises à l'identique : le rendu OPS×INTEL ne change pas. */
.lang-switch { display:inline-flex; border:1px solid rgba(var(--accent-rgb),.2);
  border-radius:4px; overflow:hidden; font-family:var(--font-mono);
  font-size:11px; letter-spacing:.12em; }
.lang-switch button { padding:7px 12px; cursor:pointer; border:0;
  background:transparent; color:rgba(var(--fg-rgb),.7); font-weight:500;
  text-transform:uppercase; font-family:inherit; font-size:inherit;
  letter-spacing:inherit; }
.lang-switch button.is-active { background:var(--accent); color:var(--white); font-weight:700; }
