/*
 * L'habillage de Tibius Scheduler — ce qui reste propre au métier.
 *
 * La structure de la page est celle de la Galaxie : en-tête, navigation, zone
 * compte, pied, en-tête de page, badges, notices, états, boutons, champs,
 * dialogue de confirmation viennent de `tibius-structure.css`, vendorisée à
 * côté de la feuille de jetons. Cette feuille-ci n'en redéfinit AUCUN — elle
 * ne règle que l'espace entre eux. Depuis la structure 2.8.0 du Design System, les tableaux, les
 * fiches, le résumé chiffré, les filtres et la case à cocher sont communs eux
 * aussi : il ne reste ici que le rythme de la page, les groupes de champs d'un
 * formulaire et le résultat d'une exécution.
 *
 * Elle n'invente aucune couleur : tout vient des jetons du Design System, et
 * l'identité vient du thème `scheduler`.
 */

* { box-sizing: border-box; }

/* Le pied reste en bas de la fenêtre quand la page est courte. */
body {
  margin: 0;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  background: var(--tds-surface-canvas);
  color: var(--tds-text-primary);
  font-family: var(--tds-font-family-sans);
  font-size: var(--tds-font-size-body-small);
  line-height: 1.5;
}

a { color: var(--tds-brand-link); }
a:hover { color: var(--tds-brand-action-hover); }

/* Le focus clavier des liens et des cadres défilables du contenu ; les blocs
   communs portent le leur. */
main :where(a, summary, [tabindex]):focus-visible {
  outline: var(--tds-focus-width) solid var(--tds-border-focus);
  outline-offset: var(--tds-focus-offset);
  border-radius: var(--tds-radius-sm);
}
main:focus { outline: none; }

.section { margin-bottom: var(--tds-space-6); }
.section > .tds-disclosure:last-child { border-bottom: var(--tds-border-width-default) solid var(--tds-border-default); }
.tds-card h2 {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--tds-space-2);
  margin: 0 0 var(--tds-space-4);
  font-size: var(--tds-font-size-body); font-weight: var(--tds-font-weight-semibold);
}
.tds-notice { margin-bottom: var(--tds-space-4); }
.tds-notice p { margin: 0 0 var(--tds-space-2); }
.tds-notice p:last-child { margin-bottom: 0; }
.tds-page-header__title .tds-badge { vertical-align: middle; }

/* ── Le rythme de la page ────────────────────────────────────────────────── */

/* L'espace entre les blocs communs est au produit : ils n'en posent pas. */
.tds-stats { margin-bottom: var(--tds-space-4); }
.tds-card > .tds-kv, .tds-card > .tds-table-frame { margin-bottom: var(--tds-space-4); }
.tds-card > :last-child { margin-bottom: 0; }
.tds-card > .tds-form-actions { margin-top: var(--tds-space-4); }
.moteur { margin: 0 0 var(--tds-space-4); }
.prochaine { margin: 0 0 var(--tds-space-6); }
.resume { display: flex; flex-wrap: wrap; gap: var(--tds-space-2); margin: 0 0 var(--tds-space-4); }
.indice { color: var(--tds-text-secondary); font-size: var(--tds-font-size-caption); }

/* ── Dans les tableaux ───────────────────────────────────────────────────── */

/* Le mode courant d'une tâche porte une arête, et le mot « mode actuel ». */
tr[aria-current="true"] > th { box-shadow: inset var(--tds-border-width-accent) 0 0 var(--tds-brand-primary); }
.mono { font-family: var(--tds-font-family-mono); font-size: var(--tds-font-size-caption); overflow-wrap: anywhere; }

/* Une tâche archivée est une histoire, pas une tâche : la ligne s'efface sans
   disparaître. */
.ligne--archivee { opacity: 0.55; }

.cycle__detail > td { border-bottom: none; padding-top: 0; }
.cycle__intervention { margin: 0; color: var(--tds-text-primary); font-weight: var(--tds-font-weight-medium); }

/* ── Listes et actions ───────────────────────────────────────────────────── */

.liste { margin: 0 0 var(--tds-space-4); padding-left: var(--tds-space-5); }
.liste li { padding: var(--tds-space-1) 0; }
.liste-ecarts { margin: 0; padding: 0; list-style: none; }
.ecart { padding: var(--tds-space-3) 0; border-bottom: 1px solid var(--tds-border-default); }
.ecart:last-child { border-bottom: none; }
.ecart p { margin: 0 0 var(--tds-space-2); }

/* Les boutons d'un même objet, alignés et espacés. */
.actions { display: flex; flex-wrap: wrap; align-items: center; gap: var(--tds-space-2); margin: 0; }
section > .actions, .tds-card > .actions { margin-bottom: var(--tds-space-4); }
#action-resultat:empty { display: none; }

/* ── Formulaires ─────────────────────────────────────────────────────────── */

/* Les groupes portent la structure ; chaque champ est un bloc commun. */
.formulaire { display: grid; gap: var(--tds-space-4); max-width: 46rem; }
.formulaire fieldset, .formulaire__groupe { display: grid; gap: var(--tds-space-4); }
.formulaire fieldset {
  margin: 0; min-width: 0;
  border: 1px solid var(--tds-border-default);
  border-radius: var(--tds-radius-sm);
  padding: var(--tds-space-4) var(--tds-space-5) var(--tds-space-5);
}
.formulaire legend { font-weight: var(--tds-font-weight-bold); color: var(--tds-text-muted); font-size: var(--tds-font-size-label); text-transform: uppercase; letter-spacing: 0.06em; padding: 0 var(--tds-space-2); }
.formulaire [hidden] { display: none; }
.formulaire #action-resultat { margin: 0; }
.tds-field__control.mono { font-family: var(--tds-font-family-mono); font-size: var(--tds-font-size-body-small); }

/* Le journal : ce qui a changé, et rien d'autre. */
.diff { margin: 0; padding-left: var(--tds-space-5); }
.diff del { color: var(--tds-status-danger); text-decoration: line-through; }
.diff ins { color: var(--tds-status-success); text-decoration: none; }

/* ── Le RÉSULTAT STRUCTURÉ d'une exécution — 0.14.0 ─────────────────────────
   Des listes imbriquées, et rien d'autre. Aucune clé n'a de style à elle :
   Scheduler ne connaît pas le métier de ses produits, et une règle CSS visant
   `status` ou `warnings` serait la première marche vers l'inverse. */
.json-vue { font-size: var(--tds-font-size-body-small); }
.json-liste { list-style: none; margin: 0; padding-left: var(--tds-space-4); border-left: 1px solid var(--tds-border-default); }
.json-vue > .json-liste { padding-left: 0; border-left: none; }
.json-liste li { padding: var(--tds-space-1) 0; }
/* Deux objets voisins d'un même tableau : sans cette règle, six lignes de suite
   dont on ne voit plus où l'une finit. */
.json-bloc + .json-bloc { margin-top: var(--tds-space-3); padding-top: var(--tds-space-3); border-top: 1px solid var(--tds-border-default); }
.json-liste strong { color: var(--tds-text-secondary); font-weight: var(--tds-font-weight-medium); }
.json-texte { color: var(--tds-text-primary); }
.json-nombre { font-family: var(--tds-font-family-mono); color: var(--tds-text-primary); }
.json-bool { font-family: var(--tds-font-family-mono); color: var(--tds-status-info); }
.json-nul,
.json-vide { color: var(--tds-text-muted); font-style: italic; }
.json-tronque { color: var(--tds-text-muted); }
.json-avertissement { color: var(--tds-text-muted); font-size: var(--tds-font-size-caption); margin-top: var(--tds-space-3); }
.json-brut {
  margin: var(--tds-space-3) 0 0;
  padding: var(--tds-space-3);
  background: var(--tds-surface-sunken);
  border: 1px solid var(--tds-border-default);
  border-radius: var(--tds-radius-role-control);
  font-family: var(--tds-font-family-mono);
  font-size: var(--tds-font-size-caption);
  overflow-x: auto;
  white-space: pre;
}

/* ── Le RÉSULTAT TEXTE d'une exécution — 0.14.0 ─────────────────────────────
   `pre-wrap` et non `pre` : un rapport en texte brut porte des lignes longues
   qu'aucun produit n'a calibrées pour cette colonne. Les retours à la ligne du
   produit sont gardés ; `overflow-wrap` traite un mot plus large que la carte. */
.resultat-texte {
  margin: 0;
  padding: var(--tds-space-3);
  background: var(--tds-surface-sunken);
  border: 1px solid var(--tds-border-default);
  border-radius: var(--tds-radius-role-control);
  font-family: var(--tds-font-family-mono);
  font-size: var(--tds-font-size-body-small);
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}

/* Le contexte accompagne le sujet, puis le suit sur petit écran. */
.precision-entete { margin-block-end: var(--tds-space-6); }

