/* Point 464 — poste CAO de l'Atelier Ossature : SEULE autorité de la coquille.
   Source visuelle : maquette validée SLS2 (29/09/2026). Chargée après
   application-unifiee.css et avant menus-sls.css (couleurs d'état, dernière feuille).

   Cette feuille pilote la disposition ET le cadre de : .ossature, .oss-appbar
   (rangée d'onglets), .oss-menu-principal, .oss-outils-shell (ruban),
   .oss-corps, .oss-grille, .oss-pilote, .oss-zone-graphique, .oss-plan-volet,
   .oss-inspecteur, .oss-console, .barre-etat et .be-diagnostics ; et, pour Analyse et
   Exploitation (point 465), .oss-phase-lecture, .oss-phase-repere, .oss-lecture,
   .atelier, .at-corps, .at-gauche, .at-centre et .at-droite. Les déclarations
   concurrentes ont été RETIRÉES d'atelier-sls.css et d'application-unifiee.css au
   lieu d'être surchargées : ne pas en rajouter ailleurs.

   Aucun état fonctionnel n'est recomposé : [hidden], oss-sans-pilote,
   oss-sans-inspecteur, oss-zone-graphique-3d, at-sans-gauche, at-sans-droite,
   at-plan-maximise, :empty et la phase Exploitation
   gardent leurs effets, déclarés ici explicitement quand une règle de cadre
   pourrait les masquer. */

body.mode-atelier {
  --poste-rouge: var(--oss-sls-red, #c00000);
  --poste-rouge-fonce: var(--oss-sls-red-dark, #8f0000);
  --poste-rouge-pale: #fbecec;
  --poste-encre: #1c2430;
  --poste-texte: #3a4250;
  --poste-sourdine: #6b7280;
  --poste-trait: #e3e5e9;
  --poste-trait-fort: #d3d7dd;
  --poste-fond: #f7f8fa;
  --poste-onglets: 42px;
  --poste-ruban: 48px;
  --poste-bouton: 32px;
  --poste-etat: 32px;
}

/* ---------- Cadre : l'Atelier remplit la zone principale, bord à bord ---------- */

body.mode-atelier main#app {
  padding: 0;
  overflow: hidden;
  background: #fff;
}

/* Les onglets généraux répètent la navigation gauche : dans l'Atelier, la rangée
   d'onglets est celle des phases (maquette : une seule rangée d'onglets). */
body.application-unifiee.mode-atelier #uw-onglets { display: none; }

body.mode-atelier .ossature {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
  margin: 0;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  overflow: hidden;
  background: #fff;
}

/* ---------- Rangée d'onglets : phases puis menus ---------- */

body.mode-atelier .oss-appbar {
  position: relative;
  z-index: 120;
  flex: 0 0 var(--poste-onglets);
  display: flex;
  align-items: stretch;
  gap: 0;
  height: var(--poste-onglets);
  min-height: var(--poste-onglets);
  padding: 0 16px 0 22px;
  border-bottom: 1px solid var(--poste-trait);
  background: #fff;
}

/* La marque et l'identité sont déjà portées par la navigation et le fil d'Ariane. */
body.mode-atelier .oss-appbar-marque,
body.mode-atelier .oss-appbar .oss-identite { display: none; }

body.mode-atelier .oss-appbar-fin {
  order: -1;
  display: flex;
  align-items: stretch;
  flex: 0 0 auto;
  margin-right: 14px;
  padding-right: 14px;
  border-right: 1px solid var(--poste-trait);
}

body.mode-atelier .ossature .oss-appbar-phases {
  display: flex;
  align-items: stretch;
  gap: 24px;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
}

body.mode-atelier .ossature .oss-appbar-phases button {
  display: inline-flex;
  align-items: center;
  min-width: 0;
  height: 100%;
  min-height: 0;
  margin: 0;
  padding: 0 2px;
  border: 0;
  border-bottom: 2px solid transparent;
  border-radius: 0;
  background: none;
  box-shadow: none;
  color: var(--poste-texte);
  font-size: 14px;
  font-weight: 500;
}

body.mode-atelier .ossature .oss-appbar-phases button > span { display: none; }

body.mode-atelier .ossature .oss-appbar-phases button.actif {
  border-bottom-color: var(--poste-rouge);
  background: none;
  color: var(--poste-rouge);
  font-weight: 600;
}

body.mode-atelier .oss-appbar-menu {
  flex: 1 1 auto;
  display: flex;
  align-items: stretch;
  min-width: 0;
}

body.mode-atelier .ossature .oss-menu-principal {
  display: flex;
  align-items: stretch;
  gap: 0;
  height: 100%;
  min-height: 0;
  padding: 0;
  border: 0;
  background: none;
  font-size: 12px;
}

body.mode-atelier .ossature .oss-menu-principal > details {
  position: relative;
  display: flex;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
}

body.mode-atelier .ossature .oss-menu-principal > details > summary,
body.mode-atelier .ossature .oss-menu-principal > .oss-menu-direct {
  display: inline-flex;
  align-items: center;
  height: 100%;
  min-height: 0;
  padding: 0 9px;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  color: var(--poste-texte);
  font-size: 12px;
  font-weight: 500;
  cursor: pointer;
}

body.mode-atelier .ossature .oss-menu-principal > details[open] > summary {
  box-shadow: inset 0 -2px 0 var(--poste-rouge);
}

body.mode-atelier .ossature .oss-menu-principal > details > div[role="menu"] { z-index: 210; }

/* ---------- Ruban : outils compacts, icône et libellé côte à côte ---------- */

body.mode-atelier .oss-outils-shell {
  position: relative;
  z-index: 90;
  flex: 0 0 auto;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 10px;
  min-height: var(--poste-ruban);
  padding: 7px 12px 7px 16px;
  border-bottom: 1px solid var(--poste-trait);
  background: #fff;
}

/* Le ruban garde sa largeur : si une police plus large manque de place, les actions
   globales passent à la ligne au lieu de chevaucher les outils. */
body.mode-atelier .oss-outils-shell .oss-commandes {
  flex: 0 0 auto;
  min-width: 0;
  border: 0;
  background: none;
  box-shadow: none;
}

body.mode-atelier .ossature .oss-commandes #zone-modes { margin: 0; }

body.mode-atelier .ossature .oss-commandes .barre-cmd {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 4px;
  min-height: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
  overflow: visible;
}

body.mode-atelier .ossature .oss-commandes :is(.cmd-bloc, .cmd-groupe, .cmd-historique,
  .cmd-famille, .cmd-famille-directe, .cmd-menu, .selection-filtre) {
  position: relative;
  flex: 0 0 auto;
  min-width: 0;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  margin: 0;
  padding: 0;
}

/* Le cadre est porté par le bouton, jamais par son conteneur <details>. */
body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu, .selection-filtre, .cmd-famille-directe) {
  min-height: 0;
  border: 0;
  border-radius: 0;
  background: none;
  box-shadow: none;
}

body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button.cmd-actif::before,
body.mode-atelier .ossature .oss-commandes .cmd-groupe + .cmd-groupe::before { content: none; }

body.mode-atelier .ossature .oss-commandes .cmd-sep {
  flex: 0 0 1px;
  width: 1px;
  min-width: 1px;
  height: 22px;
  margin: 0 4px;
  background: var(--poste-trait-fort);
}

/* Un seul gabarit de bouton pour tout le ruban. */
body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu, .selection-filtre) > summary,
body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button,
body.mode-atelier .ossature .oss-commandes .cmd-historique > button {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  width: auto;
  min-width: 0;
  height: var(--poste-bouton);
  min-height: 0;
  margin: 0;
  padding: 0 8px;
  border: 1px solid var(--poste-trait-fort);
  border-radius: 4px;
  background: #fff;
  box-shadow: none;
  color: var(--poste-encre);
  font-size: 12px;
  font-weight: 500;
  line-height: 1;
  white-space: nowrap;
  list-style: none;
  cursor: pointer;
}

body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu, .selection-filtre) > summary::-webkit-details-marker { display: none; }

body.mode-atelier .ossature .oss-commandes .cmd-picto {
  display: inline-grid;
  place-items: center;
  width: 16px;
  min-width: 16px;
  min-height: 0;
  font-size: 14px;
  line-height: 1;
}

body.mode-atelier .ossature .oss-commandes :is(summary, button) > span:not(.cmd-picto):not(.cmd-chevron):not(.cmd-raccourci) {
  font-size: 12px;
  line-height: 1;
}

body.mode-atelier .ossature .oss-commandes .cmd-chevron {
  position: static;
  margin-left: -1px;
  padding: 0;
  border: 0;
  color: var(--poste-sourdine);
  font-size: 9px;
  line-height: 1;
}

/* Le raccourci reste lu par l'aide (texte du DOM) et porté par le title. */
body.mode-atelier .ossature .oss-commandes .cmd-raccourci { display: none; }

body.mode-atelier .ossature .oss-commandes .cmd-historique > button {
  width: var(--poste-bouton);
  padding: 0;
  justify-content: center;
}

body.mode-atelier .ossature .oss-commandes .cmd-historique > button > span:not(.cmd-picto):not(.cmd-raccourci) { display: none; }

body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu, .selection-filtre) > summary:hover,
body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button:hover:not(:disabled),
body.mode-atelier .ossature .oss-commandes .cmd-historique > button:hover:not(:disabled) {
  border-color: var(--poste-rouge);
  background: #fff;
}

body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu, .selection-filtre)[open] > summary {
  border-color: var(--poste-rouge);
  background: var(--poste-rouge-pale);
  color: var(--poste-rouge-fonce);
}

/* L'outil actif est le seul aplat rouge du ruban (maquette : « Sélection »). */
body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button[aria-pressed="true"],
body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button.cmd-actif,
body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu)[data-active="true"] > summary {
  border-color: var(--poste-rouge);
  background: var(--poste-rouge);
  color: #fff;
}

body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button[aria-pressed="true"] .cmd-picto,
body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button.cmd-actif .cmd-picto,
body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu)[data-active="true"] > summary :is(.cmd-picto, .cmd-chevron) {
  color: #fff;
}

/* Pictogrammes du ruban : tracés vectoriels au trait (maquette SLS2) posés en masque
   sur le glyphe texte de niveau.js, qui reste dans le DOM (aria-hidden). La couleur
   suit celle du bouton : blanche sur l'outil actif. Chaque cible déclare son tracé ;
   un bouton sans tracé garde son glyphe. */
body.mode-atelier .ossature .oss-commandes .cmd-famille-selection > button[data-cmd="selection"] { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='M6 3.5 18.5 11l-5.8 1.6 3.4 6.4-2.3 1.2-3.4-6.4L6 18z'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-famille-poteau { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><rect x='8.5' y='3' width='7' height='18' rx='.5'/><path d='M8.5 7.5h7M8.5 16.5h7'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-famille-voile { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='8.5' width='18' height='7' rx='.5'/><path d='m7 15.5 4-7m2 7 4-7'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-famille-poutre { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='M3 8.5h18v4.5H3zM6.5 13v7M17.5 13v7'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-famille-dalle { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='M7 7.5h14l-4 9H3z'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-famille-charge { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='M8 3v9m-3-3 3 3 3-3M16 3v9m-3-3 3 3 3-3M3 19h18'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-famille-acrotere { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='M3 18h18M5 18v-6h3v6M16 18v-6h3v6'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-menu-modifier { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='M12 3v18M3 12h18M9.5 5.5 12 3l2.5 2.5M9.5 18.5 12 21l2.5-2.5M5.5 9.5 3 12l2.5 2.5M18.5 9.5 21 12l-2.5 2.5'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-menu-vue { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><circle cx='10.5' cy='10.5' r='6'/><path d='m20 20-5.2-5.2'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-menu-reperes-fond { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='m12 3.5 8.5 4.5-8.5 4.5L3.5 8z'/><path d='m3.5 12 8.5 4.5 8.5-4.5M3.5 16l8.5 4.5 8.5-4.5'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-historique > button[data-cmd="annuler"] { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='M9 13 4.5 8.5 9 4M4.5 8.5H15a5 5 0 0 1 0 10h-3'/></svg>"); }
body.mode-atelier .ossature .oss-commandes .cmd-historique > button[data-cmd="retablir"] { --poste-icone: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'><path d='m15 13 4.5-4.5L15 4m4.5 4.5H9a5 5 0 0 0 0 10h3'/></svg>"); }

body.mode-atelier .ossature .oss-commandes :is(
  .cmd-famille-selection > button[data-cmd="selection"],
  :is(.cmd-famille-poteau, .cmd-famille-voile, .cmd-famille-poutre, .cmd-famille-dalle,
    .cmd-famille-charge, .cmd-famille-acrotere, .cmd-menu-modifier, .cmd-menu-vue,
    .cmd-menu-reperes-fond) > summary,
  .cmd-historique > button:is([data-cmd="annuler"], [data-cmd="retablir"])
) > .cmd-picto {
  width: 16px;
  min-width: 16px;
  height: 16px;
  background-color: currentColor;
  font-size: 0;
  -webkit-mask: var(--poste-icone) center / 16px 16px no-repeat;
  mask: var(--poste-icone) center / 16px 16px no-repeat;
}

/* Consigne du geste : lisible quand la place existe, sinon portée par la barre d'état. */
body.mode-atelier .ossature .oss-commandes .cmd-instruction {
  display: flex;
  align-items: center;
  gap: 6px;
  min-width: 0;
  max-width: 320px;
  margin: 0 0 0 8px;
  padding: 2px 0 2px 8px;
  border: 0;
  border-left: 2px solid var(--oss-sls-red);
  border-radius: 0;
  background: none;
  overflow: hidden;
  font-size: 11px;
  white-space: nowrap;
}

body.mode-atelier .ossature .oss-commandes .cmd-instruction b { flex: 0 0 auto; font-size: 11px; }

body.mode-atelier .ossature .oss-commandes .cmd-instruction em {
  min-width: 0;
  overflow: hidden;
  color: var(--poste-sourdine);
  font-size: 11px;
  font-style: normal;
  text-overflow: ellipsis;
}

/* Actions globales du ruban, alignées à droite. */
body.mode-atelier .oss-outils-shell .oss-globales {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 6px;
  min-width: 0;
  margin-left: auto;
  padding: 0;
  border: 0;
  background: none;
}

body.application-unifiee.mode-atelier .oss-globales > a[href$="/parametres"] { display: none; }

/* :where() garde la spécificité basse : les masquages existants des globales priment. */
body.mode-atelier .oss-globales > :where(button, .bouton-lien):not(.oss-calculer) {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  height: var(--poste-bouton);
  min-height: 0;
  margin: 0;
  padding: 0 10px;
  border: 1px solid var(--poste-trait-fort);
  border-radius: 4px;
  background: #fff;
  box-shadow: none;
  color: var(--poste-encre);
  font-size: 12px;
  font-weight: 500;
  white-space: nowrap;
}


body.mode-atelier .oss-globales .oss-document-role small {
  min-width: 18px;
  padding: 1px 5px;
  border-radius: 8px;
  background: #eef0f3;
  color: var(--poste-sourdine);
  font-size: 11px;
  text-align: center;
}

/* Vues du modèle : onglets en bout de rangée supérieure (déplacés par atelier-sls.js). */
body.mode-atelier .oss-appbar > .oss-vue-bascule {
  display: flex;
  align-items: stretch;
  gap: 22px;
  flex: 0 0 auto;
  margin: 0 0 0 auto;
  padding: 0 0 0 16px;
  border: 0;
  border-left: 1px solid var(--poste-trait);
  border-radius: 0;
  background: none;
  overflow: visible;
}

body.mode-atelier .oss-appbar > .oss-vue-bascule > button,
body.mode-atelier .oss-appbar > .oss-vue-bascule > #oss-3d {
  display: inline-flex;
  align-items: center;
  height: 100%;
  min-width: 0;
  min-height: 0;
  margin: 0;
  padding: 0 2px;
  border: 0;
  border-bottom: 2px solid transparent;
  border-radius: 0;
  background: none;
  box-shadow: none;
  color: var(--poste-texte);
  font-size: 14px;
  font-weight: 500;
}

body.mode-atelier .oss-appbar > .oss-vue-bascule > button.actif,
body.mode-atelier .oss-appbar > .oss-vue-bascule > button[aria-pressed="true"],
body.mode-atelier .oss-appbar > .oss-vue-bascule > #oss-3d.actif {
  border-bottom-color: var(--poste-rouge);
  background: none;
  color: var(--poste-rouge);
  font-weight: 600;
}

body.mode-atelier .ossature .oss-outils-shell .oss-calculer {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  height: var(--poste-bouton);
  min-height: 0;
  margin: 0;
  padding: 0 14px;
  border-radius: 4px;
  box-shadow: none;
  font-size: 12px;
  font-weight: 600;
  white-space: nowrap;
}

/* ---------- Corps : dessin dominant, inspecteur à droite ---------- */

body.mode-atelier .oss-corps {
  flex: 1 1 auto;
  min-height: 0;
  overflow: hidden;
  background: #fff;
}

body.mode-atelier .oss-grille {
  --oss-pilote-largeur: 248px;
  --oss-inspecteur-largeur: 320px;
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr) var(--oss-inspecteur-largeur);
  gap: 0;
  height: 100%;
  min-height: 0;
  overflow: hidden;
  background: #fff;
}

body.mode-atelier .oss-grille.oss-sans-inspecteur { grid-template-columns: minmax(0, 1fr); }

/* Le pilote (éléments, vues, calques) est un tiroir ouvert à la demande depuis
   « ⋯ » des niveaux : la navigation permanente reste la colonne gauche. */
body.mode-atelier .oss-grille > .oss-pilote {
  position: absolute;
  z-index: 60;
  top: 0;
  bottom: 0;
  left: 0;
  width: var(--oss-pilote-largeur);
  min-width: 0;
  min-height: 0;
  overflow: auto;
  border: 0;
  border-right: 1px solid var(--poste-trait);
  background: #fff;
  box-shadow: 8px 0 22px rgba(17, 24, 39, 0.08);
}

body.mode-atelier .oss-grille.oss-sans-pilote > .oss-pilote,
body.mode-atelier .oss-grille.oss-sans-inspecteur > .oss-inspecteur { display: none; }

body.mode-atelier .oss-grille > .oss-zone-graphique {
  grid-column: 1;
  position: relative;
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  border: 0;
  background: #fff;
}

/* Analyse et Exploitation : la zone centrale garde son propre cadre .atelier. */
body.mode-atelier .atelier .at-centre.oss-zone-graphique { position: relative; }

body.mode-atelier .oss-zone-graphique.oss-zone-graphique-3d {
  position: relative;
  overflow: hidden;
}

body.mode-atelier .oss-zone-graphique > .oss-plan-volet {
  position: relative;
  height: 100%;
  min-height: 0;
  margin: 0;
  border: 0;
  border-radius: 0;
  box-shadow: none;
  background: #fff;
}

body.mode-atelier .oss-zone-graphique > .oss-plan-volet[hidden] { display: none; }

body.mode-atelier .oss-grille > .oss-inspecteur {
  grid-column: 2;
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  margin: 0;
  padding: 0;
  overflow: auto;
  border: 0;
  border-left: 1px solid var(--poste-trait);
  box-shadow: none;
  background: #fff;
  font-size: 12px;
  line-height: 1.45;
  scrollbar-width: thin;
}

/* Le dessin occupe tout le volet : ni marge ni cadre arrondi autour du calque.
   Le cadre du calque est posé en style en ligne par niveau.js, hors de l'Atelier
   aussi ; seul l'Atelier le retire, d'où l'!important cantonné ici. */
body.mode-atelier .oss-plan-courant > .oss-plan-dessin {
  height: 100%;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: #fff;
}

body.mode-atelier .oss-plan-courant > .oss-plan-dessin > #zone-plan { height: 100%; }

body.mode-atelier .oss-plan-courant .oss-plan-dessin svg.niveau-calque {
  border: 0 !important;
  border-radius: 0 !important;
}

/* Repères du viewport : discrets, jamais en aplat ni en cadre rouge. */
body.mode-atelier .oss-plan-courant .oss-plan-hud {
  left: 12px;
  top: 10px;
  min-height: 24px;
  padding: 4px 9px;
  border: 1px solid var(--poste-trait);
  border-radius: 4px;
  background: rgba(255, 255, 255, 0.94);
  box-shadow: none;
  color: var(--poste-sourdine);
  font-size: 11px;
}

body.mode-atelier .oss-plan-courant .oss-plan-hud .oss-plan-hud-cmd {
  color: var(--poste-encre);
  font-weight: 600;
}

body.mode-atelier .oss-plan-courant > .oss-vue-titre {
  right: 12px;
  bottom: 10px;
}

body.mode-atelier .oss-plan-courant .oss-niveau-rapide select {
  height: 28px;
  min-height: 0;
  padding: 0 26px 0 10px;
  border: 1px solid var(--poste-trait-fort);
  border-radius: 4px;
  background-color: #fff;
  box-shadow: none;
  font-size: 12px;
}

/* ---------- Inspecteur : titre de l'objet, sections à filet fin ---------- */

body.mode-atelier .ossature .oss-inspecteur > .oss-panneau-titre {
  flex: 0 0 auto;
  min-height: 0;
  margin: 0;
  padding: 14px 16px 12px;
  border: 0;
  border-bottom: 1px solid var(--poste-trait);
  border-radius: 0;
  background: #fff;
  box-shadow: none;
}

body.mode-atelier .ossature .oss-inspecteur > .oss-panneau-titre > b {
  color: var(--poste-encre);
  font-size: 15px;
  font-weight: 700;
  letter-spacing: 0;
  text-transform: none;
}

body.mode-atelier .ossature .oss-inspecteur > .oss-panneau-titre > small {
  color: var(--poste-sourdine);
  font-size: 12px;
  font-weight: 400;
  text-transform: none;
}

body.mode-atelier .ossature #oss-inspecteur > .oss-section,
body.mode-atelier .ossature #oss-inspecteur > .oss-repli {
  margin: 0;
  padding: 12px 16px 14px;
  border: 0;
  border-bottom: 1px solid var(--poste-trait);
  border-radius: 0;
  background: #fff;
  box-shadow: none;
}

body.mode-atelier .ossature #oss-inspecteur > .oss-section > h3,
body.mode-atelier .ossature #oss-inspecteur > .oss-repli > summary {
  margin: 0 0 8px;
  padding: 0;
  border: 0;
  background: none;
  color: var(--poste-encre);
  font-size: 13px;
  font-weight: 600;
  letter-spacing: 0;
  text-transform: none;
}

/* Le titre de section des propriétés est déjà recopié dans le titre du panneau
   (application-unifiee.js le lit) : il reste dans le DOM, hors de la vue. */
body.mode-atelier .ossature #oss-inspecteur #oss-proprietes-titre {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

body.mode-atelier .ossature #oss-inspecteur label {
  color: var(--poste-texte);
  font-size: 12px;
}

body.mode-atelier .ossature #oss-inspecteur :is(input:not([type="checkbox"]):not([type="radio"]), select) {
  min-height: 30px;
  padding: 4px 8px;
  border: 1px solid var(--poste-trait-fort);
  border-radius: 4px;
  background-color: #fff;
  font-size: 12px;
}

body.mode-atelier .ossature #oss-inspecteur button { font-size: 12px; }

/* ---------- Analyse et Exploitation (point 465) : même coquille que la Saisie ----------
   Le poste DDC (.atelier, atelier.js) garde son contenu et ses états ; seule sa
   disposition passe ici. Colonnes : liste de travail | dessin | inspecteur, avec la
   même largeur d'inspecteur que la Saisie. Exploitation ouvre plan seul (atelier.js :
   at-sans-gauche, at-sans-droite, at-plan-maximise) — états que les passes 405
   recouvraient, d'où la colonne grise vide. */

body.mode-atelier .oss-corps > .oss-phase-lecture {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 0;
  margin: 0;
  padding: 0;
  background: #fff;
}

body.mode-atelier .oss-phase-lecture > .oss-phase-repere {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 36px;
  margin: 0;
  padding: 0 12px 0 16px;
  border: 0;
  border-bottom: 1px solid var(--poste-trait);
  border-radius: 0;
  background: #fff;
  box-shadow: none;
  font-size: 12px;
}

body.mode-atelier .oss-phase-repere > .oss-phase-verbe {
  flex: 0 0 auto;
  padding: 0;
  border: 0;
  background: none;
  color: var(--poste-rouge);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: .04em;
}

body.mode-atelier .oss-phase-repere > div {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  align-items: baseline;
  gap: 10px;
  overflow: hidden;
  white-space: nowrap;
}

body.mode-atelier .oss-phase-repere > div strong { flex: 0 0 auto; color: var(--poste-encre); font-size: 13px; }

body.mode-atelier .oss-phase-repere > div small {
  min-width: 0;
  overflow: hidden;
  color: var(--poste-sourdine);
  font-size: 12px;
  text-overflow: ellipsis;
}

body.mode-atelier .oss-phase-repere > .oss-phase-statut {
  flex: 0 0 auto;
  padding: 3px 8px;
  border-radius: 4px;
  font-size: 11px;
}

body.mode-atelier .oss-phase-repere > button {
  flex: 0 0 auto;
  height: 28px;
  min-height: 0;
  padding: 0 10px;
  border: 1px solid var(--poste-trait-fort);
  border-radius: 4px;
  background: #fff;
  font-size: 12px;
}

body.mode-atelier .oss-phase-lecture > .oss-lecture {
  flex: 1 1 auto;
  min-height: 0;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

body.mode-atelier .oss-lecture #zone-atelier,
body.mode-atelier .oss-lecture .atelier {
  height: 100%;
  min-height: 0;
  margin: 0;
}

body.mode-atelier .oss-lecture .atelier {
  display: flex;
  flex-direction: column;
  gap: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: #fff;
  box-shadow: none;
}

body.mode-atelier .oss-lecture .atelier > .at-corps {
  --at-gauche-largeur: 264px;
  flex: 1 1 auto;
  display: grid;
  grid-template-columns: var(--at-gauche-largeur) minmax(0, 1fr) var(--oss-inspecteur-largeur, 320px);
  align-items: stretch;
  gap: 0;
  min-height: 0;
  overflow: hidden;
  background: #fff;
}

body.mode-atelier .oss-lecture .at-corps.at-sans-gauche { grid-template-columns: minmax(0, 1fr) var(--oss-inspecteur-largeur, 320px); }
body.mode-atelier .oss-lecture .at-corps.at-sans-droite { grid-template-columns: var(--at-gauche-largeur) minmax(0, 1fr); }
body.mode-atelier .oss-lecture .at-corps.at-plan-maximise,
body.mode-atelier .oss-lecture .at-corps.at-sans-gauche.at-sans-droite { grid-template-columns: minmax(0, 1fr); }

body.mode-atelier .oss-lecture .at-corps.at-sans-gauche > .at-gauche,
body.mode-atelier .oss-lecture .at-corps.at-sans-droite > .at-droite,
body.mode-atelier .oss-lecture .at-corps.at-plan-maximise > :is(.at-gauche, .at-droite) { display: none; }

body.mode-atelier .oss-lecture .at-corps > .at-gauche,
body.mode-atelier .oss-lecture .at-corps > .at-droite {
  display: block;
  min-width: 0;
  height: auto;
  min-height: 0;
  max-height: none;
  margin: 0;
  padding: 0;
  overflow: auto;
  border: 0;
  border-radius: 0;
  background: #fff;
  box-shadow: none;
  font-size: 12px;
  scrollbar-width: thin;
}

body.mode-atelier .oss-lecture .at-corps > .at-gauche { border-right: 1px solid var(--poste-trait); }
body.mode-atelier .oss-lecture .at-corps > .at-droite { border-left: 1px solid var(--poste-trait); }

body.mode-atelier .oss-lecture .at-corps > .at-centre {
  position: relative;
  display: flex;
  flex-direction: column;
  min-width: 0;
  min-height: 0;
  margin: 0;
  padding: 0;
  overflow: hidden;
  background: #fff;
}

/* Analyse et Exploitation n'ont pas d'outils de dessin : leurs actions globales
   (Plans, Hypothèses, Actualiser la DDC) rejoignent la ligne de phase au lieu
   d'occuper une rangée presque vide. Le nœud n'est pas déplacé (atelier.js lit le
   statut dans .oss-phase-lecture) : c'est la rangée qui se superpose. Sous 980 px,
   l'ordre normal revient. */
@media (min-width: 981px) {
  body.mode-atelier .ossature:is([data-phase="analyse"], [data-phase="resultats"]) { position: relative; }
  body.mode-atelier .ossature:is([data-phase="analyse"], [data-phase="resultats"]) > .oss-outils-shell {
    position: absolute;
    z-index: 95;
    top: var(--poste-onglets);
    right: 0;
    height: 44px;
    min-height: 0;
    padding: 0 12px;
    border: 0;
    background: none;
  }
  body.mode-atelier .ossature:is([data-phase="analyse"], [data-phase="resultats"]) .oss-phase-lecture > .oss-phase-repere {
    min-height: 44px;
    padding-right: 196px;
  }
}

@media (min-width: 1601px) {
  body.mode-atelier .ossature:is([data-phase="analyse"], [data-phase="resultats"]) .oss-phase-lecture > .oss-phase-repere { padding-right: 400px; }
}

/* La consigne du plan (couleurs de charge, message D7 et outils Ajuster / Pan…) est
   une bande du viewport, pas une carte flottante. */
body.mode-atelier .oss-lecture .at-centre > .at-outils-plan {
  flex: 0 0 auto;
  margin: 0;
  padding: 0;
  border: 0;
  border-bottom: 1px solid var(--poste-trait);
  background: #fff;
  box-shadow: none;
}

body.mode-atelier .oss-lecture .at-centre > .at-outils-plan > .carte {
  margin: 0;
  padding: 8px 14px;
  border: 0;
  border-radius: 0;
  background: #fff;
  box-shadow: none;
}

body.mode-atelier .oss-lecture .at-centre > .at-outils-plan .at-panneau-entete { border-bottom: 0; }
body.mode-atelier .oss-lecture .at-centre > .at-outils-plan p { margin: 2px 0 0; font-size: 12px; }

/* Dossier et niveaux sont déjà dans le fil d'Ariane et la navigation gauche, qui
   pilote le sélecteur du viewport (application-unifiee.js). */
body.application-unifiee.mode-atelier .oss-lecture .at-gauche > :is(.at-nav-projet, .at-nav-niveaux) { display: none; }

/* ---------- Barre d'état : niveau et diagnostics à gauche, mesures à droite ---------- */

body.mode-atelier .ossature > .oss-console {
  flex: 0 0 var(--poste-etat);
  display: flex;
  align-items: center;
  gap: 10px;
  height: var(--poste-etat);
  min-height: var(--poste-etat);
  max-height: var(--poste-etat);
  padding: 0 14px 0 16px;
  overflow: hidden;
  border: 0;
  border-top: 1px solid var(--poste-trait);
  background: #fff;
  color: var(--poste-texte);
  font-size: 12px;
}

body.mode-atelier .ossature > .oss-console::before { display: none; }
body.mode-atelier .ossature > .oss-console:empty,
body.mode-atelier .ossature[data-phase="resultats"] > .oss-console { display: none; }

body.mode-atelier .oss-console #zone-vue {
  flex: 1 1 auto;
  min-width: 0;
  margin: 0;
}

body.mode-atelier #oss-console .barre-etat {
  display: flex;
  flex-wrap: nowrap;
  align-items: center;
  gap: 14px;
  width: 100%;
  min-width: 0;
  min-height: 0;
  padding: 0;
  border: 0;
  border-radius: 0;
  background: none;
  overflow: hidden;
  font-size: 13px;
  white-space: nowrap;
}

body.mode-atelier #oss-console .barre-etat > .be-sep { display: none; }

body.mode-atelier #oss-console .barre-etat > .oss-etat-contexte {
  order: 1;
  display: inline-flex;
  align-items: center;
  gap: 5px;
  min-width: 0;
  margin: 0;
  padding: 0;
  border: 0;
}

body.mode-atelier #oss-console .barre-etat > span.be-diagnostics {
  order: 2;
  display: inline-flex;
  flex: 0 0 auto;
  align-items: center;
  gap: 16px;
  margin: 0;
  padding: 0 0 0 14px;
  border: 0;
  border-left: 1px solid var(--poste-trait);
}

body.mode-atelier #oss-console .barre-etat > .be-cmd {
  order: 3;
  margin-left: auto;
  padding: 0;
  border-radius: 0;
  background: none;
  font-weight: 600;
}

body.mode-atelier #oss-console .barre-etat > .be-zoom { order: 4; }
body.mode-atelier #oss-console .barre-etat > #nv-pos { order: 5; }
body.mode-atelier #oss-console .barre-etat > span:not([class]):not([id]) { order: 6; }
body.mode-atelier #oss-console .barre-etat > .be-fin { order: 7; margin-left: 0; }

body.mode-atelier #oss-console .barre-etat > :is(.be-zoom, #nv-pos, span:not([class]):not([id]), .be-fin) {
  padding-left: 14px;
  border-left: 1px solid var(--poste-trait);
}

/* ---------- Adaptation : 2100, 1840, 1600, 1500, 1350, 1280, 980, 900 et 760 px ---------- */

/* Sous 1840 px, Modifier, Vue et Repères passent en icône + chevron et les familles
   perdent leur chevron (le menu reste signalé par le survol et l'infobulle). Le
   libellé masqué reste le nom accessible : aucune commande ne disparaît. */
/* La consigne n'a de place qu'au-delà de 2100 px ; en dessous, la barre d'état et le
   HUD du plan nomment déjà le geste courant. */
@media (max-width: 2100px) {
  body.mode-atelier .ossature[data-phase] .oss-commandes .cmd-instruction { display: none; }
}

@media (max-width: 1840px) {
  body.mode-atelier .ossature .oss-commandes .cmd-menu > summary > span:not(.cmd-picto):not(.cmd-chevron):not(.cmd-raccourci) {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
  }
  body.mode-atelier .ossature .oss-commandes .cmd-famille > summary > .cmd-chevron { display: none; }
  body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu, .selection-filtre) > summary,
  body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button { padding-inline: 7px; }
}

/* Sous 1600 px, Plans et Hypothèses quittent le ruban : ils restent dans le menu
   Documents, qui les appelle (menu mandataire d'atelier-sls.js). */
@media (max-width: 1600px) {
  body.mode-atelier .oss-outils-shell .oss-globales > .oss-document-role { display: none; }
}

@media (max-width: 1500px) {
  body.mode-atelier .oss-grille { --oss-inspecteur-largeur: 300px; }
}

@media (max-width: 1280px) {
  body.mode-atelier .oss-appbar { padding-left: 16px; }
  body.mode-atelier .ossature .oss-appbar-phases { gap: 18px; }
  body.mode-atelier .ossature .oss-menu-principal > details > summary,
  body.mode-atelier .ossature .oss-menu-principal > .oss-menu-direct { padding-inline: 7px; }
  body.mode-atelier .oss-grille { --oss-inspecteur-largeur: 280px; }
}

/* Sous 1350 px, les familles d'objets passent en icône : le libellé reste le nom
   accessible (aria-label) et l'infobulle. Sélection garde son libellé. */
@media (max-width: 1350px) {
  body.mode-atelier .ossature .oss-commandes .cmd-famille > summary > span:not(.cmd-picto):not(.cmd-chevron):not(.cmd-raccourci) {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
  }
}

/* Sous 980 px, la rangée d'onglets passe sur deux lignes : phases et vues,
   puis menus. Aucun menu n'est rogné par un défilement horizontal. */
@media (max-width: 980px) {
  body.mode-atelier .oss-appbar {
    flex-wrap: wrap;
    height: auto;
    flex-basis: auto;
  }
  body.mode-atelier .oss-appbar-fin,
  body.mode-atelier .oss-appbar > .oss-vue-bascule { height: 38px; }
  body.mode-atelier .oss-appbar-menu {
    order: 2;
    flex: 1 0 100%;
    height: 34px;
    border-top: 1px solid var(--poste-trait);
  }
}

@media (max-width: 900px) {
  body.mode-atelier .oss-appbar { padding-inline: 10px; }
  body.mode-atelier .oss-appbar-fin { margin-right: 6px; padding-right: 8px; }
  body.mode-atelier .ossature .oss-appbar-phases { gap: 12px; }
  body.mode-atelier .ossature .oss-appbar-phases button { font-size: 12px; }
  body.mode-atelier .ossature .oss-menu-principal > details > summary,
  body.mode-atelier .ossature .oss-menu-principal > .oss-menu-direct { padding-inline: 5px; font-size: 11px; }
  body.mode-atelier .oss-outils-shell { gap: 6px; padding-inline: 8px; }
  body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu, .selection-filtre) > summary,
  body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button { padding-inline: 7px; gap: 3px; }
  body.mode-atelier .ossature .oss-commandes :is(.cmd-famille, .cmd-menu, .selection-filtre) > summary > span:not(.cmd-picto):not(.cmd-chevron):not(.cmd-raccourci),
  body.mode-atelier .ossature .oss-commandes .cmd-famille-directe > button > span:not(.cmd-picto):not(.cmd-chevron):not(.cmd-raccourci) {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
  }
  body.mode-atelier .oss-globales > :where(button, .bouton-lien):not(.oss-calculer) { padding-inline: 7px; }
  body.mode-atelier .oss-grille { --oss-inspecteur-largeur: 260px; }
  body.mode-atelier .ossature > .oss-console { padding-inline: 10px; font-size: 11px; }
  body.mode-atelier #oss-console .barre-etat { gap: 10px; font-size: 11px; }
  body.mode-atelier #oss-console .barre-etat > span:not([class]):not([id]) { display: none; }
  body.mode-atelier #oss-console .barre-etat > :is(.be-zoom, #nv-pos) { display: none; }
  body.mode-atelier .uw-inspecteur-onglets { gap: 10px; padding-inline: 10px; }
}

@media (max-width: 760px) {
  body.mode-atelier .oss-grille,
  body.mode-atelier .oss-grille.oss-sans-inspecteur { grid-template-columns: minmax(0, 1fr); }
  body.mode-atelier .oss-grille > .oss-inspecteur {
    position: absolute;
    z-index: 70;
    top: 0;
    right: 0;
    bottom: 0;
    width: min(300px, calc(100% - 40px));
    box-shadow: -8px 0 24px rgba(17, 24, 39, 0.14);
  }
}

/* 484 : bibliothèque contextualisée, sans modifier la coque du poste. */
.bibliotheque-logiciel { width:min(800px,calc(100vw - 32px)); max-height:88vh; overflow:auto; border:1px solid #d5d9df; border-radius:14px; padding:24px; color:#17202d; }
.bibliotheque-logiciel::backdrop { background:#17202d77; }
.bibliotheque-logiciel header { display:flex; align-items:center; justify-content:space-between; gap:16px; }
.bibliotheque-logiciel small { display:block; color:#677181; }
.bibliotheque-fiches { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:12px; margin:18px 0; }
.bibliotheque-fiches article { border:1px solid #d5d9df; border-radius:10px; padding:16px; }
.bibliotheque-logiciel label { display:grid; gap:4px; margin:12px 0; }
.bibliotheque-champs { display:grid; grid-template-columns:repeat(auto-fit,minmax(210px,1fr)); gap:0 16px; }
.bibliotheque-logiciel input,.bibliotheque-logiciel textarea,.bibliotheque-logiciel select { width:100%; box-sizing:border-box; }
.bibliotheque-logiciel [role=alert] { color:#a31d20; }
.bibliotheque-logiciel table { width:100%; }
.oss-source-logiciel { display:block; margin:6px 0; }
.bibliotheque-logiciel { position:fixed; inset:16px 16px auto auto; margin:0; width:min(640px,calc(100vw - 32px)); max-height:calc(100vh - 32px); }
.registre-inventaire { margin:12px 0; }
.registre-inventaire > summary { cursor:pointer; color:#677181; }

.bibliotheque-logiciel [data-selection-fiche] { width:100%; margin:8px 0; }
