@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); }
.apim-card{ border:1px solid var(--line); 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 var(--line); 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; }

}
