@layer modules{
/* ════════ Complément « Gestionnaire d'API » - registre + testeur ════════
   Réutilise les tokens de 01-tokens.css. Accent du complément : var(--info). */

.apim{ --apim:var(--info); display:grid; grid-template-columns:212px 1fr; gap:var(--sp-18); align-items:start; }
@media (max-width:760px){ .apim{ grid-template-columns:1fr; } }

/* ── Rail ── */
.apim-rail{ display:flex; flex-direction:column; gap:var(--sp-4); position:sticky; top:8px; }
.apim-nav-btn{ display:flex; align-items:center; gap:var(--sp-8); width:100%; text-align:left;
  padding:var(--sp-8) var(--sp-10); border:1px solid transparent; border-radius:var(--radius-sm,8px);
  background:none; color:var(--mut); font:inherit; font-size:var(--fs-md); cursor:pointer; transition:.12s; }
.apim-nav-btn:hover{ background:var(--card2); color:var(--txt); }
.apim-nav-btn.on{ background:var(--card2); color:var(--txt); border-color:var(--line); font-weight:var(--fw-strong); }
.apim-nav-ic{ width:18px; text-align:center; color:var(--apim); opacity:.95; }

/* ── Zone principale ── */
.apim-main{ min-width:0; display:flex; flex-direction:column; gap:var(--sp-16); }
.apim-loading{ display:flex; align-items:center; gap:var(--sp-8); color:var(--mut); padding:var(--sp-24) var(--sp-4); }
.apim-spin{ width:14px; height:14px; border:2px solid var(--line); border-top-color:var(--apim);
  border-radius:50%; display:inline-block; animation:apimspin .7s linear infinite; }
@keyframes apimspin{ to{ transform:rotate(360deg); } }

.apim-head{ display:flex; align-items:flex-start; gap:var(--sp-14); }
.apim-head-t h2{ margin:0 0 var(--sp-2); font-size:var(--fs-lg); }
.apim-head-t p{ margin:0; color:var(--mut); font-size:var(--fs-md); }
.apim-head-a{ margin-left:auto; display:flex; gap:var(--sp-8); flex-wrap:wrap; }
.apim-upd{ color:var(--mut); font-size:var(--fs-sm); }

/* ── Cartes (dashboard) ── */
.apim-cards{ display:grid; grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); gap:var(--sp-12); }
/* Les cartes posées sur le fond de la page n'ont plus de bordure (le proprio, 2026-10-20, après Figma : « idem pour les autres compléments avec ce type de cards ») ; celles posées DANS une carte gardent la leur. */
.apim-card{ border:0; border-radius:var(--radius); background:var(--card); padding:var(--sp-12) var(--sp-14); }
.apim-card-h{ font-size:var(--fs-xs); text-transform:uppercase; letter-spacing:.04em; color:var(--mut); margin-bottom:var(--sp-6); }
.apim-card-b{ display:flex; flex-direction:column; gap:var(--sp-4); }
.apim-card-b b{ font-size:var(--fs-lg); }
.apim-card-b .muted{ color:var(--mut); font-size:var(--fs-sm); }
.apim-card-acts{ margin-top:var(--sp-6); }

.apim-block-t{ font-size:var(--fs-md); margin:0 0 var(--sp-8); }
.apim-quick{ display:flex; flex-direction:column; gap:var(--sp-4); }
.apim-quick-row{ display:flex; align-items:center; gap:var(--sp-8); width:100%; text-align:left; padding:var(--sp-8) var(--sp-10);
  border:1px solid var(--line); border-radius:var(--radius-sm,8px); background:var(--card); color:var(--txt);
  font:inherit; cursor:pointer; transition:.12s; }
.apim-quick-row:hover{ border-color:var(--apim); background:var(--card2); }
.apim-quick-n{ font-weight:var(--fw-strong); font-size:var(--fs-md); flex:none; }
.apim-quick-u{ color:var(--mut); font-size:var(--fs-sm); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }

/* ── Étiquette méthode ── */
.apim-mtag{ flex:none; font-size:var(--fs-2xs); font-weight:var(--fw-bold); letter-spacing:.03em; padding:var(--sp-2) var(--sp-6); border-radius:var(--radius-sm);
  background:var(--card2); color:var(--mut); border:1px solid var(--line); }
.apim-mtag.m-GET{ color:var(--ok); border-color:color-mix(in srgb,var(--ok) 33%,transparent); }
.apim-mtag.m-POST{ color:var(--info); border-color:color-mix(in srgb,var(--info) 33%,transparent); }
.apim-mtag.m-PUT{ color:var(--warn); border-color:color-mix(in srgb,var(--warn) 33%,transparent); }
.apim-mtag.m-PATCH{ color:var(--accent); border-color:color-mix(in srgb,var(--accent) 33%,transparent); }
.apim-mtag.m-DELETE{ color:var(--err); border-color:color-mix(in srgb,var(--err) 33%,transparent); }
.apim-mtag.m-HEAD,.apim-mtag.m-OPTIONS{ color:var(--mut); }

/* ── Pastille statut ── */
.apim-status{ flex:none; font-size:var(--fs-sm); font-weight:var(--fw-bold); padding:var(--sp-1) var(--sp-8); border-radius:var(--radius-pill);
  background:var(--card2); border:1px solid var(--line); }
.apim-status.ok{ color:var(--ok); border-color:color-mix(in srgb,var(--ok) 40%,transparent); }
.apim-status.redir{ color:var(--warn); border-color:color-mix(in srgb,var(--warn) 40%,transparent); }
.apim-status.cli{ color:var(--err); border-color:color-mix(in srgb,var(--err) 40%,transparent); }
.apim-status.srv{ color:var(--on-solid); background:var(--err); border-color:var(--err); }
.apim-status.na{ color:var(--mut); }

/* ── Points de terminaison (maître-détail) ── */
.apim-ep{ display:grid; grid-template-columns:240px 1fr; gap:var(--sp-14); align-items:start; }
@media (max-width:860px){ .apim-ep{ grid-template-columns:1fr; } }
.apim-ep-list{ display:flex; flex-direction:column; gap:var(--sp-2); max-height:60vh; overflow:auto; }
.apim-ep-item{ display:flex; align-items:center; gap:var(--sp-8); width:100%; text-align:left; padding:var(--sp-8) var(--sp-8);
  border:1px solid transparent; border-radius:var(--radius-sm,8px); background:none; color:var(--txt);
  font:inherit; cursor:pointer; transition:.12s; }
.apim-ep-item:hover{ background:var(--card2); }
.apim-ep-item.on{ background:var(--card2); border-color:var(--line); }
.apim-ep-item-n{ font-size:var(--fs-md); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.apim-ep-empty,.apim-ep-none{ color:var(--mut); font-size:var(--fs-md); padding:var(--sp-14) var(--sp-4); }

/* ── Éditeur d'endpoint ── */
.apim-ed{ display:flex; flex-direction:column; gap:var(--sp-12); min-width:0; }
.apim-ed-line{ display:flex; gap:var(--sp-8); align-items:center; }
.apim-ed-name{ flex:1; padding:var(--sp-8) var(--sp-10); border:1px solid var(--line); border-radius:var(--radius-sm,8px);
  background:var(--card); color:var(--txt); font:inherit; font-weight:var(--fw-strong); }
.apim-x{ border:1px solid var(--line); background:var(--card); color:var(--mut); border-radius:var(--radius-sm);
  width:30px; height:30px; cursor:pointer; transition:.12s; flex:none; }
.apim-x:hover{ color:var(--err); border-color:color-mix(in srgb,var(--err) 40%,transparent); }
.apim-ed-del{ width:34px; }

.apim-req{ display:flex; gap:var(--sp-8); align-items:stretch; }
.apim-method{ flex:0 0 auto; width:auto; min-width:104px; font-weight:var(--fw-bold); font-size:var(--fs-md); padding:0 var(--sp-8);
  border:1px solid var(--line); border-radius:var(--radius-sm,8px); background:var(--card); color:var(--txt); cursor:pointer; }
.apim-method.m-GET{ color:var(--ok); } .apim-method.m-POST{ color:var(--info); } .apim-method.m-PUT{ color:var(--warn); }
.apim-method.m-PATCH{ color:var(--accent); } .apim-method.m-DELETE{ color:var(--err); }
.apim-url{ flex:1; min-width:0; padding:var(--sp-8) var(--sp-10); border:1px solid var(--line); border-radius:var(--radius-sm,8px);
  background:var(--card); color:var(--txt); font-size:var(--fs-md); }
.apim-url:focus{ outline:none; border-color:var(--apim); }
.apim-send{ flex:none; }

.apim-ed-grid{ display:grid; grid-template-columns:1fr 1fr; gap:var(--sp-12); }
@media (max-width:760px){ .apim-ed-grid{ grid-template-columns:1fr; } }
.apim-ed-desc{ grid-column:1/-1; }
.apim-ed-sec h4{ margin:0 0 var(--sp-6); font-size:var(--fs-sm); text-transform:uppercase; letter-spacing:.03em; color:var(--mut); }
.apim-ed-sec textarea{ width:100%; padding:var(--sp-8) var(--sp-10); border:1px solid var(--line); border-radius:var(--radius-sm,8px);
  background:var(--card); color:var(--txt); font:inherit; resize:vertical; }
.apim-body{ font-size:var(--fs-sm); }

.apim-kvs,.apim-vars{ display:flex; flex-direction:column; gap:var(--sp-6); margin-bottom:var(--sp-6); }
.apim-kv{ display:grid; grid-template-columns:1fr 1.4fr auto; gap:var(--sp-6); }
.apim-var{ display:grid; grid-template-columns:1fr 1.4fr auto auto; gap:var(--sp-6); }
.apim-kv input,.apim-var input{ padding:var(--sp-6) var(--sp-8); border:1px solid var(--line); border-radius:var(--radius-sm);
  background:var(--card); color:var(--txt); font:inherit; font-size:var(--fs-sm); min-width:0; }
.apim-kv-empty{ color:var(--mut); font-size:var(--fs-sm); padding:var(--sp-4) 0; }
.apim-eye{ border:1px solid var(--line); background:var(--card); border-radius:var(--radius-sm); width:32px; cursor:pointer; }
.apim-eye.on{ border-color:var(--apim); }
.apim-secret{ letter-spacing:.1em; }

/* ── Réponse ── */
.apim-resp{ border:1px solid var(--line); border-radius:var(--radius); background:var(--card2); overflow:hidden; }
.apim-resp-hint,.apim-resp-wait,.apim-resp-err{ padding:var(--sp-14); color:var(--mut); font-size:var(--fs-md); display:flex; align-items:center; gap:var(--sp-8); }
.apim-resp-err{ color:var(--err); }
.apim-resp-bar{ display:flex; align-items:center; gap:var(--sp-10); padding:var(--sp-8) var(--sp-12); border-bottom:1px solid var(--line); }
.apim-resp-meta{ color:var(--mut); font-size:var(--fs-sm); }
.apim-resp-tabs{ margin-left:auto; display:flex; gap:var(--sp-4); }
.apim-rt{ border:1px solid transparent; background:none; color:var(--mut); font:inherit; font-size:var(--fs-sm);
  padding:var(--sp-2) var(--sp-8); border-radius:var(--radius-sm); cursor:pointer; }
.apim-rt.on{ background:var(--card); color:var(--txt); border-color:var(--line); }
.apim-resp-body{ margin:0; padding:var(--sp-12); max-height:360px; overflow:auto; font-size:var(--fs-sm); line-height:var(--lh-normal);
  white-space:pre-wrap; word-break:break-word; color:var(--txt); }

/* ── Environnements ── */
.apim-envs{ display:flex; flex-direction:column; gap:var(--sp-12); }
.apim-env{ border:1px solid transparent; border-radius:var(--radius); background:var(--card); padding:var(--sp-12) var(--sp-14); }
.apim-env.active{ border-color:var(--apim); box-shadow:0 0 0 1px var(--apim) inset; }
.apim-env-h{ display:flex; align-items:center; gap:var(--sp-10); margin-bottom:var(--sp-10); }
.apim-env-radio{ display:flex; align-items:center; gap:var(--sp-4); font-size:var(--fs-sm); color:var(--mut); cursor:pointer; }
.apim-env-name{ flex:1; padding:var(--sp-6) var(--sp-8); border:1px solid var(--line); border-radius:var(--radius-sm);
  background:var(--card2); color:var(--txt); font:inherit; font-weight:var(--fw-strong); }

/* ── Journal ── */
.apim-log{ width:100%; border-collapse:collapse; font-size:var(--fs-sm); }
.apim-log th{ text-align:left; font-size:var(--fs-xs); text-transform:uppercase; letter-spacing:.03em; color:var(--mut);
  padding:var(--sp-6) var(--sp-8); border-bottom:2px solid var(--line); }
.apim-log td{ padding:var(--sp-6) var(--sp-8); border-bottom:1px solid var(--line); vertical-align:middle; }
.apim-log-u{ max-width:340px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; color:var(--mut); }
.apim-log-m,.apim-log-t{ color:var(--mut); white-space:nowrap; }


/* ── CDC_APIM (2026-10-21) : paramètres, authentification, variables manquantes, recherche, dernier appel, journal, statistiques ── */
.apim-row{ display:inline-flex; align-items:center; gap:var(--sp-6); }
.apim-stat b.ok{ color:var(--ok); } .apim-stat b.warn{ color:var(--warn); } .apim-stat b.err{ color:var(--err); }
.apim-quick-t{ flex:none; font-size:var(--fs-xs); }
.apim-search{ width:100%; padding:var(--sp-6) var(--sp-8); margin-bottom:var(--sp-6); border:1px solid var(--line); border-radius:var(--radius-sm);
  background:var(--card); color:var(--txt); font:inherit; font-size:var(--fs-sm); }
.apim-ep-items{ display:flex; flex-direction:column; gap:var(--sp-2); }
.apim-ep-item-s{ margin-left:auto; flex:none; display:inline-flex; align-items:center; gap:var(--sp-4); font-size:var(--fs-2xs); color:var(--mut); font-variant-numeric:tabular-nums; }
.apim-dot{ width:7px; height:7px; border-radius:var(--radius-pill); background:var(--mut2); }
.apim-dot.ok{ background:var(--ok); } .apim-dot.err{ background:var(--err); }
.apim-manque{ display:flex; align-items:center; gap:var(--sp-8); flex-wrap:wrap; padding:var(--sp-6) var(--sp-10); border-radius:var(--radius-sm);
  background:color-mix(in srgb,var(--warn) 14%,var(--card)); color:var(--txt); font-size:var(--fs-sm); }
.apim-kv-q{ grid-template-columns:auto 1fr 1.4fr auto; align-items:center; }
.apim-kv-q input[type=checkbox]{ width:16px; height:16px; margin:0; }
.apim-auth{ display:flex; flex-direction:column; gap:var(--sp-6); }
.apim-auth-type,.apim-auth-in{ padding:var(--sp-6) var(--sp-8); border:1px solid var(--line); border-radius:var(--radius-sm); background:var(--card); color:var(--txt); font:inherit; font-size:var(--fs-sm); min-width:0; }
.apim-var-k{ display:flex; align-items:center; gap:var(--sp-4); min-width:0; }
.apim-var-k input{ flex:1; min-width:0; }
.apim-var-u{ flex:none; font-size:var(--fs-2xs); color:var(--mut2); white-space:nowrap; }
.apim-log-row{ cursor:pointer; } .apim-log-row:hover td{ background:var(--card2); }
.apim-log-n{ font-weight:var(--fw-label); white-space:nowrap; max-width:180px; overflow:hidden; text-overflow:ellipsis; }
.apim-replay{ display:inline-flex; align-items:center; gap:var(--sp-4); }
.apim-replay svg.ic{ width:12px; height:12px; }
.apim-seg{ display:inline-flex; background:var(--card2); border-radius:var(--radius); padding:var(--sp-2); gap:var(--sp-2); }
.apim-seg button{ border:0; background:transparent; color:var(--mut); font:inherit; font-size:var(--fs-xs); font-weight:var(--fw-label); padding:var(--sp-4) var(--sp-8); border-radius:var(--radius-sm); cursor:pointer; }
.apim-seg button.on{ background:var(--card); color:var(--txt); box-shadow:var(--shadow-sm); }
}

/* CDC_APM A5 (2026-10-28) : la section « APM des moteurs ». Tout en jetons : le clair et le sombre suivent la feuille. */
.apim-apm-moteur .apim-card-h{ text-transform:none; }
.apim-apm-flux,.apim-apm-objet{ display:flex; align-items:center; gap:var(--sp-8); flex-wrap:wrap; }
.apim-card-b .apim-apm-flux-n{ font-size:var(--fs-sm); }
.apim-apm-gestes{ margin-left:auto; display:inline-flex; gap:var(--sp-4); }
.apim-apm-verbe{ font-size:var(--fs-2xs); font-weight:var(--fw-label); padding:var(--sp-1) var(--sp-6); border-radius:var(--radius-pill); background:var(--card2); color:var(--mut); }
.apim-apm-qui{ margin:0 0 var(--sp-8); }
.apim-apm-integ{ cursor:default; }
.apim-apm-par{ margin-left:auto; font-size:var(--fs-xs); font-weight:var(--fw-label); color:var(--mut); }
.apim-apm-par.ok{ color:var(--ok); }
.apim-apm-table td{ white-space:nowrap; }
.apim-apm-num{ text-align:right; font-variant-numeric:tabular-nums; }
.apim-apm-statut{ font-size:var(--fs-xs); font-weight:var(--fw-label); padding:var(--sp-1) var(--sp-8); border-radius:var(--radius-pill); border:1px solid var(--line); color:var(--mut); }
.apim-apm-statut.s-payee{ color:var(--ok); border-color:color-mix(in srgb,var(--ok) 40%,transparent); }
.apim-apm-statut.s-en_attente,.apim-apm-statut.s-partielle{ color:var(--warn); border-color:color-mix(in srgb,var(--warn) 40%,transparent); }
.apim-apm-statut.s-echouee,.apim-apm-statut.s-litige,.apim-apm-statut.s-annulee{ color:var(--err); border-color:color-mix(in srgb,var(--err) 40%,transparent); }
.apim-apm-errs{ margin:var(--sp-6) 0 0; padding-left:var(--sp-16); color:var(--err); font-size:var(--fs-sm); }
.apim-apm-err{ color:var(--err); }
