/* ---------- Rust concepts : index des concepts clés ---------- */
.concepts { max-width: 780px; margin: 0 auto; padding: 4px 20px 90px; }
.concepts-hero { margin: 6px 0 20px; }
.concepts-hero h1 { font-size: 1.9rem; margin: 6px 0 8px; }
.concepts-hero > p { color: var(--ink-soft); margin: 0 0 16px; max-width: 62ch; }
.concepts-prog { display: flex; align-items: center; gap: 12px; }
.cprog-bar { flex: 1; height: 8px; border-radius: 999px; background: var(--surface-2); border: 1px solid var(--border); overflow: hidden; }
.cprog-fill { display: block; height: 100%; border-radius: 999px; background: linear-gradient(90deg, var(--accent), var(--gold)); transition: width .5s cubic-bezier(.2,.8,.2,1); }
.cprog-txt { font-family: "IBM Plex Mono", monospace; font-size: .74rem; color: var(--ink-soft); white-space: nowrap; }

.concept-grid { display: grid; gap: 10px; margin-top: 8px; }
.concept-card {
  display: flex; align-items: center; gap: 14px; text-align: left; width: 100%;
  background: var(--surface); border: 1px solid var(--border-strong);
  border-left: 3px solid var(--border-strong); border-radius: 12px;
  padding: 14px 16px; color: var(--ink);
  transition: border-color .15s, transform .15s;
}
.concept-card:hover { border-color: var(--accent); border-left-color: var(--accent); transform: translateY(-1px); }
.concept-card.done { border-left-color: var(--good); }
.cc-ico { font-size: 1.45rem; line-height: 1; flex: none; }
.cc-body { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.cc-body b { font-family: "Bricolage Grotesque", sans-serif; font-size: 1rem; font-weight: 700; }
.cc-resume { color: var(--ink-soft); font-size: .84rem; line-height: 1.45; }
.cc-chip {
  flex: none; font-family: "IBM Plex Mono", monospace; font-size: .72rem;
  color: var(--ink-soft); background: var(--surface-2);
  border: 1px solid var(--border); padding: 3px 10px; border-radius: 999px; white-space: nowrap;
}
.concept-card.done .cc-chip { background: var(--good-soft); border-color: var(--good); color: var(--good); }

/* ---------- Rust concepts : la page d'un concept ---------- */
.cpage-head { margin: 6px 0 18px; }
.cpage-head .eyebrow { display: block; margin-bottom: 5px; }
.cpage-head h1 { font-size: 1.85rem; margin-bottom: 10px; }
.cpage-intro { color: var(--ink-soft); margin: 0 0 16px; }
.cpage-intro p, .concept-cours p { margin: 8px 0; }
.cpage-intro code, .concept-cours code, .cexo-consigne code {
  background: var(--surface-2); color: var(--ink); padding: 1px 6px; border-radius: 5px;
  font-family: "IBM Plex Mono", monospace; font-size: .86em;
}
.concepts-body { position: relative; }
.concept-section { border-top: 1px solid var(--border); padding-top: 22px; margin-top: 24px; }
.concept-section h3 { font-size: 1.12rem; margin-bottom: 8px; }
.concept-cours { color: var(--ink-soft); margin-bottom: 18px; }
.concept-cours strong { color: var(--ink); }
.cpage-nav { display: flex; flex-wrap: wrap; gap: 10px; justify-content: space-between; margin-top: 38px; }
.cpage-btn {
  background: var(--surface); border: 1px solid var(--border-strong); border-radius: 9px;
  padding: 10px 16px; color: var(--ink-soft); font-size: .86rem;
}
.cpage-btn:hover { color: var(--accent); border-color: var(--accent); }

/* ---------- un exercice (shell) ---------- */
.concept-exo {
  border: 1px solid var(--border-strong); border-left: 3px solid var(--border-strong);
  border-radius: 12px; overflow: hidden; background: var(--surface);
  margin: 16px 0; box-shadow: var(--shadow); transition: border-color .2s;
}
.concept-exo.cexo-active { border-left-color: var(--accent); }
.concept-exo.done { border-left-color: var(--good); }
.cexo-head { display: flex; align-items: flex-start; gap: 11px; padding: 15px 17px 12px; }
.cexo-n {
  flex: none; display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%;
  background: var(--surface-2); border: 1px solid var(--border-strong); color: var(--ink-soft);
  font-family: "IBM Plex Mono", monospace; font-size: .72rem; margin-top: 1px;
}
.concept-exo.cexo-active .cexo-n { background: var(--accent-soft); border-color: var(--accent); color: var(--accent); }
.concept-exo.done .cexo-n { background: var(--good); border-color: var(--good); color: #fff; }
.cexo-consigne { flex: 1; font-size: .92rem; }
.cexo-consigne code { font-size: .84em; }
.cexo-badge {
  flex: none; display: none; font-family: "IBM Plex Mono", monospace; font-size: .68rem;
  letter-spacing: .04em; color: #fff; background: var(--good);
  padding: 3px 9px; border-radius: 999px; white-space: nowrap;
}
.concept-exo.done .cexo-badge { display: inline-block; }

.cexo-editor { background: var(--term-bg); border-top: 1px solid var(--border); }
.cexo-filebar { display: flex; align-items: center; gap: 10px; padding: 8px 14px; background: #2b241e; border-bottom: 1px solid #3a312a; }
.cexo-filebar .file { font-family: "IBM Plex Mono", monospace; font-size: .72rem; color: #b7a996; letter-spacing: .04em; }
.cexo-editor .ed-wrap { --ed-fs: 13px; --ed-lh: 21px; --ed-py: 13px; --ed-px: 14px; --ed-gut: 38px; }
.cexo-code { min-height: 90px; }
.cexo-bar { display: flex; align-items: center; gap: 12px; background: #2b241e; padding: 10px 14px; flex-wrap: wrap; }
.cexo-bar .kbd-hint { font-family: "IBM Plex Mono", monospace; font-size: .68rem; color: #8c7f6f; }
.cexo-bar .spacer { flex: 1; }
.cexo-bar .btn-run { padding: 8px 18px; font-size: .78rem; }
.cexo-reset {
  background: none; border: 0; color: #b7a996; font-family: "IBM Plex Mono", monospace;
  font-size: .7rem; letter-spacing: .05em; padding: 4px 6px;
}
.cexo-reset:hover { color: #fff; }
.cexo-console { border-radius: 0; }
