/* Labo Blocs 0.3.0 — styles limités à l'élément .labo-blocs. Construit par « npm run module ». */
.labo-blocs, .labo-blocs * { box-sizing: border-box; }
.labo-blocs [hidden] { display: none !important; }
.labo-blocs-page { margin: 0; height: 100%; }
.labo-blocs button { font-family: var(--police); color: inherit; }
.labo-blocs button:focus-visible { outline: 3px solid var(--signal); outline-offset: 2px; }
.labo-blocs .icone { width: 1.375rem; height: 1.375rem; flex: none; display: block; }
.labo-blocs .editeur {
  position: relative; background: #FFFFFF; border: 1px solid var(--bord); border-radius: 0.75rem;
  overflow: hidden; min-height: 0;
}
.labo-blocs .editeur-blockly { position: absolute; inset: 0; }
.labo-blocs .editeur-etiquettes { position: absolute; inset: 0; pointer-events: none; overflow: hidden; z-index: 20; }
.labo-blocs .etiquette-bloc {
  position: absolute; transform: translateY(-50%);
  display: inline-flex; align-items: center; height: 1.625rem; padding: 0 0.625rem;
  border-radius: 999px; font-size: 0.8125rem; font-weight: 700; white-space: nowrap;
}
.labo-blocs .etiquette-en-cours { background: var(--signal); color: var(--encre); }
.labo-blocs .etiquette-hors { background: #FFFFFF; color: var(--encre); border: 2px dashed var(--encre); }
.labo-blocs .editeur .blocklyToolbox {
  background: #FAFBFC; border-right: 1px solid var(--bord);
  padding: 0.375rem; width: 5.75rem; overflow-y: auto;
}
.labo-blocs .editeur .blocklyToolboxCategoryGroup { display: flex; flex-direction: column; gap: 0.125rem; }
.labo-blocs .editeur .blocklyToolboxCategory.cat-ligne {
  display: flex; align-items: center; justify-content: center;
  min-height: 3.875rem; padding: 0.25rem 0.125rem; margin: 0;
  border: none !important; border-radius: 0.625rem; background: transparent !important; cursor: pointer;
}
.labo-blocs .editeur .blocklyToolboxCategory.cat-ligne:hover { background: #EDF2F5 !important; }
.labo-blocs .editeur .blocklyToolboxCategory.cat-choisie { background: var(--bleu-pale) !important; box-shadow: inset 0 0 0 2px var(--bleu); }
.labo-blocs .editeur .blocklyTreeRowContentContainer { display: flex; flex-direction: column; align-items: center; gap: 0.25rem; }
.labo-blocs .editeur .cat-tuile {
  width: 2.125rem; height: 2.125rem; border-radius: 0.5625rem;
  background-repeat: no-repeat; background-position: center; background-size: 1.375rem;
}
.labo-blocs .editeur .cat-libelle { font: 600 0.8125rem var(--police); color: var(--encre); padding: 0; }
.labo-blocs .editeur .blocklyFlyoutBackground { fill: #EAF0F3; fill-opacity: 1; }
.labo-blocs .editeur .blocklyText, .labo-blocs .editeur .blocklyEditableText > text, .labo-blocs .editeur .blocklyNonEditableText > text { fill: var(--encre) !important; font-weight: 700; }
.labo-blocs .editeur .blocklyDropdownText { fill: var(--encre) !important; }
.labo-blocs .editeur .blocklyMainBackground { stroke: none; }
.labo-blocs .editeur .bloc-en-cours > .blocklyPath {
  stroke: var(--signal) !important; stroke-width: 5px !important;
  filter: drop-shadow(0 0 0.6px var(--encre)) drop-shadow(0 0 0.6px var(--encre));
}
.labo-blocs .editeur .bloc-hors-programme > .blocklyPath {
  stroke: var(--encre) !important; stroke-width: 3px !important; stroke-dasharray: 7 5;
}
.labo-blocs .editeur-outils {
  position: absolute; right: 5.25rem; bottom: 0.75rem; z-index: 30;
  display: flex; align-items: center; gap: 0.5rem;
}
.labo-blocs .groupe-outils {
  display: flex; align-items: center; border: 2px solid var(--bord); border-radius: 0.625rem;
  background: #FFFFFF; overflow: hidden;
}
.labo-blocs .groupe-outils button {
  width: 2.75rem; height: 2.5rem; border: none; background: transparent; cursor: pointer;
  font-size: 1.375rem; font-weight: 700; display: flex; align-items: center; justify-content: center;
}
.labo-blocs .groupe-outils button + button { border-left: 1px solid var(--bord); }
.labo-blocs .groupe-outils button:hover { background: #EDF2F5; }
.labo-blocs .groupe-outils .icone { width: 1.25rem; height: 1.25rem; }
.labo-blocs .zoom-valeur { min-width: 3.25rem; text-align: center; font-size: 0.875rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.labo-blocs .simulateur {
  display: flex; flex-direction: column; gap: 0.5rem;
  background: #FFFFFF; border: 1px solid var(--bord); border-radius: 0.75rem;
  padding: 0.625rem 0.75rem 0.75rem; min-height: 0; overflow: hidden;
}
.labo-blocs .simu-titre { display: flex; align-items: center; gap: 0.5rem; flex: none; font-size: 1rem; font-weight: 700; }
.labo-blocs .simu-note { font-size: 0.8125rem; font-weight: 600; color: var(--bleu-fonce); background: var(--bleu-pale); border-radius: 999px; padding: 0 0.625rem; }
.labo-blocs .simu-note:empty { display: none; }
.labo-blocs .chrono { margin-left: auto; display: flex; align-items: center; gap: 0.375rem; font-weight: 700; font-size: 1.125rem; font-variant-numeric: tabular-nums; }
.labo-blocs .chrono .icone { stroke: var(--bleu) !important; }
.labo-blocs .simu-carte { flex: 1 1 0; min-height: 2.5rem; display: flex; gap: 0.5rem; padding: 0 0.25rem; }
.labo-blocs .simu-carte-dessin { flex: 1 1 0; min-width: 0; display: flex; }
.labo-blocs .carte-arduino { width: 100%; height: 100%; display: block; }
.labo-blocs .carte-etiquette { fill: #FFFFFF; font: 700 5.5px var(--police); }
.labo-blocs .carte-titre { fill: #FFFFFF; font: 700 7px var(--police); letter-spacing: 1px; }
.labo-blocs .carte-nom { fill: #FFFFFF; font: 800 22px var(--police); letter-spacing: 2px; opacity: 0.9; }
.labo-blocs .simu-milieu { display: flex; gap: 0.5rem; flex: none; min-height: 0; }
.labo-blocs .simu-milieu .simu-composants { flex: 1; min-width: 0; align-content: start; }
.labo-blocs .simu-distributeur { display: none; }
.labo-blocs .avec-distributeur .simu-distributeur { display: block; flex: none; width: 8.5rem; }
.labo-blocs .distributeur { width: 100%; height: auto; display: block; }
.labo-blocs .voyant-nom, .labo-blocs .trappe-etat { fill: var(--encre); font: 700 7px var(--police); }
.labo-blocs .trappe { transition: transform 0.25s linear; }
.labo-blocs .grain-chute { opacity: 0; }
.labo-blocs .distributeur.ouverte .grain-chute { animation: chute 0.8s linear infinite; }
@keyframes chute {
  0% { transform: translateY(0); opacity: 1; }
  85% { opacity: 1; }
  100% { transform: translateY(78px); opacity: 0; }
}
.labo-blocs .simu-composants { display: grid; grid-template-columns: repeat(auto-fit, minmax(13.125rem, 1fr)); gap: 0.375rem; flex: none; }
.labo-blocs .composant {
  display: flex; align-items: center; gap: 0.75rem; min-height: 3.75rem; padding: 0.375rem 0.625rem;
  background: #FFFFFF; border: 2px solid var(--bord); border-left: 6px solid var(--famille); border-radius: 0.75rem;
}
.labo-blocs .composant.conflit { border-color: var(--ecart, #F5A623); background: var(--ecart-pale, #FFF4DC); flex-wrap: wrap; }
.labo-blocs .composant-conflit { flex-basis: 100%; font-size: 0.8125rem; font-weight: 700; color: var(--ecart-texte, #6B4A00); }
.labo-blocs .composant.compact { gap: 0.5rem; min-height: 2.75rem; padding: 0.1875rem 0.5rem; }
.labo-blocs .composant.survol { border-color: var(--bleu); border-left-color: var(--famille); box-shadow: 0 0 0 3px var(--signal); }
.labo-blocs .composant-dessin { flex: none; width: 3.25rem; height: 3.25rem; }
.labo-blocs .composant.compact .composant-dessin { width: 2.25rem; height: 2.25rem; }
.labo-blocs .composant-dessin svg { width: 100%; height: 100%; display: block; }
.labo-blocs .bouton-poussoir {
  width: 3.75rem; height: 3.75rem; min-width: 2.75rem; min-height: 2.75rem; padding: 2px;
  border: 2px solid #9AA8B0; border-radius: 0.625rem; background: var(--fond); cursor: pointer;
}
.labo-blocs .composant.compact .bouton-poussoir { width: 2.75rem; height: 2.75rem; }
.labo-blocs .bouton-poussoir:hover { background: #E6EDF1; }
.labo-blocs .bouton-capuchon { transition: y 0.08s, height 0.08s; }
.labo-blocs .composant-bouton.actif .bouton-capuchon { y: 23px; height: 7px; }
.labo-blocs .composant-led.actif .led-halo { opacity: 0.3; }
.labo-blocs .composant-led.actif .led-verre { fill: var(--led); stroke: #5B3A00; }
.labo-blocs .composant-led.actif .led-socle { fill: #5B3A00; }
.labo-blocs .composant-led.actif .led-reflet { opacity: 0.55; }
.labo-blocs .composant-texte { display: flex; flex-direction: column; gap: 0.1875rem; min-width: 0; flex: 1; }
.labo-blocs .composant-nom { display: flex; align-items: center; gap: 0.375rem; font-weight: 700; font-size: 0.9375rem; line-height: 1.2; }
.labo-blocs .composant.compact .composant-nom { font-size: 0.8125rem; }
.labo-blocs .composant-fil { width: 10px; height: 10px; border-radius: 2px; flex: none; }
.labo-blocs .composant-etat { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.labo-blocs .pastille-etat {
  display: inline-flex; align-items: center; height: 1.625rem; padding: 0 0.5625rem;
  border-radius: 999px; border: 2px solid var(--encre); background: #FFFFFF;
  font-weight: 700; font-size: 0.875rem; white-space: nowrap; font-variant-numeric: tabular-nums;
}
.labo-blocs .composant.compact .pastille-etat { height: 1.375rem; font-size: 0.8125rem; }
.labo-blocs .composant-led.actif .pastille-etat, .labo-blocs .composant-bouton.actif .pastille-etat { background: var(--encre); color: #FFFFFF; }
.labo-blocs .composant-aide { font-size: 0.8125rem; color: var(--texte-2); }
.labo-blocs .servo-texte { fill: var(--texte-2); font: 700 6px var(--police); }
.labo-blocs .simu-commandes { display: flex; align-items: center; gap: 0.375rem; flex: none; }
.labo-blocs .btn-lancer, .labo-blocs .btn-commande {
  display: flex; align-items: center; gap: 0.375rem; height: 3rem; border-radius: 0.625rem;
  font-weight: 700; font-size: 1rem; cursor: pointer; white-space: nowrap;
}
.labo-blocs .btn-lancer .icone, .labo-blocs .btn-commande .icone { width: 1.125rem; height: 1.125rem; }
.labo-blocs .btn-lancer {
  padding: 0 0.875rem; border: none; background: var(--bleu); color: #FFFFFF;
  box-shadow: inset 0 -3px 0 rgba(0, 0, 0, 0.22);
}
.labo-blocs .btn-lancer:hover { background: #17627F; }
.labo-blocs .btn-lancer.actif { background: var(--bleu-fonce); box-shadow: inset 0 3px 0 rgba(0, 0, 0, 0.3), 0 0 0 3px var(--signal); }
.labo-blocs .btn-commande { padding: 0 0.625rem; border: 2px solid var(--bleu); background: #FFFFFF; color: var(--bleu-fonce); }
.labo-blocs .btn-commande:hover:not(:disabled) { background: var(--bleu-pale); }
.labo-blocs .btn-commande:disabled { background: var(--gris-fond); border: 2px dashed var(--gris-bord); color: var(--gris); cursor: not-allowed; }
.labo-blocs .vitesse { display: flex; margin-left: auto; border: 2px solid var(--bleu); border-radius: 0.625rem; overflow: hidden; flex: none; }
.labo-blocs .btn-vitesse {
  width: 2.75rem; height: 2.75rem; border: none; background: #FFFFFF; color: var(--bleu-fonce);
  font-weight: 600; font-size: 0.9375rem; cursor: pointer;
}
.labo-blocs .btn-vitesse + .btn-vitesse { border-left: 2px solid var(--bleu); }
.labo-blocs .btn-vitesse[aria-pressed="true"] { background: var(--bleu); color: #FFFFFF; font-weight: 700; }
.labo-blocs .btn-principal, .labo-blocs .btn-secondaire {
  display: flex; align-items: center; gap: 0.5rem; height: 3rem; padding: 0 1rem;
  border-radius: 0.625rem; font-weight: 700; font-size: 1rem; cursor: pointer;
}
.labo-blocs .btn-principal { border: none; background: var(--bleu); color: #FFFFFF; box-shadow: inset 0 -3px 0 rgba(0, 0, 0, 0.22); }
.labo-blocs .btn-principal:hover { background: #17627F; }
.labo-blocs .btn-secondaire { border: 2px solid var(--bord); background: #FFFFFF; }
.labo-blocs .btn-secondaire:hover { background: #EDF2F5; }
.labo-blocs .message-bref {
  position: absolute; left: 50%; bottom: 5rem; transform: translateX(-50%); z-index: 60;
  background: var(--encre); color: #FFFFFF; padding: 0.625rem 1rem; border-radius: 0.625rem;
  font-weight: 600; box-shadow: 0 10px 28px rgba(31, 42, 48, 0.25); max-width: 40rem;
}
.labo-blocs .message-bref[hidden] { display: none; }
.labo-blocs .simu-composants.compact { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.3125rem; }
.labo-blocs .avec-distributeur .simu-composants.compact { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.labo-blocs .simu-composants.compact .composant { gap: 0.375rem; padding: 0.1875rem 0.375rem; border-left-width: 5px; }
.labo-blocs .simu-composants.compact .composant-nom { font-size: 0.75rem; align-items: flex-start; }
.labo-blocs .simu-composants.compact .composant-fil { margin-top: 0.2rem; }
.labo-blocs .simu-composants.compact .pastille-etat { height: 1.25rem; font-size: 0.75rem; padding: 0 0.4375rem; }
.labo-blocs .etat-enregistrement { margin-left: auto; font-size: 0.875rem; color: var(--texte-2); white-space: nowrap; }
.labo-blocs .etat-enregistrement.a-faire { color: #8A5300; font-weight: 700; }
.labo-blocs .etat-enregistrement + .btn-enregistrer { margin-left: 0; }
.labo-blocs .accueil-erreur {
  margin: 0.875rem 0 0; padding: 0.625rem 0.875rem; border-radius: 0.625rem;
  background: #FFF4DD; border-left: 6px solid var(--orange); color: #5B3A00; font-weight: 600;
}
.labo-blocs .accueil-erreur[hidden] { display: none; }
.labo-blocs .chemin { display: flex; flex-wrap: wrap; align-items: center; gap: 0.375rem; margin: 0.5rem 0 0.875rem; }
.labo-blocs .chemin-dossier {
  display: inline-flex; align-items: center; height: 2rem; padding: 0 0.625rem; border-radius: 0.5rem;
  background: var(--fond); border: 1px solid var(--bord); font-weight: 600; font-size: 0.9375rem;
}
.labo-blocs .chemin-dossier.equipe { background: var(--consigne-fond); border: 2px solid var(--orange); }
.labo-blocs .chemin-fleche { color: var(--texte-2); font-weight: 700; }
.labo-blocs .dossier-aide { color: var(--texte-2); }
.labo-blocs .sans-acces-texte { display: none; }
.labo-blocs .sans-acces .sans-acces-texte { display: block; }
.labo-blocs .sans-acces .avec-acces { display: none; }
.labo-blocs .avertissement { margin-top: 0.875rem; padding: 0.75rem 1rem; border-radius: 0.75rem; background: #FFF4DD; border-left: 6px solid var(--orange); }
.labo-blocs .avertissement p { margin: 0; }
.labo-blocs .avertissement .accueil-actions { margin-top: 0.75rem; }
.labo-blocs .confirmation { display: flex; gap: 0.75rem; align-items: flex-start; margin-top: 0.875rem; padding: 0.75rem 1rem; border-radius: 0.75rem; background: #E8F5E9; border-left: 6px solid #2E7D32; }
.labo-blocs .confirmation p { margin: 0; }
.labo-blocs .confirmation .icone { width: 1.75rem; height: 1.75rem; }
.labo-blocs .panneau-aide {
  position: absolute; top: 0; bottom: 0; left: 0; z-index: 80; width: min(27rem, 70%);
  display: flex; flex-direction: column; background: #FFFFFF; border-right: 2px solid var(--bleu);
  box-shadow: 8px 0 28px rgba(31, 42, 48, 0.18); animation: glisser 0.18s ease-out;
}
@keyframes glisser { from { transform: translateX(-1.5rem); opacity: 0; } to { transform: none; opacity: 1; } }
.labo-blocs .panneau-aide-entete { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0.375rem 0.375rem 1rem; border-bottom: 1px solid var(--bord); flex: none; }
.labo-blocs .panneau-aide-titre { margin: 0; font-size: 1.125rem; flex: 1; }
.labo-blocs .panneau-aide-fermer { width: 2.75rem; height: 2.75rem; border: none; background: transparent; border-radius: 0.5rem; font-size: 1.5rem; color: var(--texte-2); cursor: pointer; }
.labo-blocs .panneau-aide-fermer:hover { background: #EDF2F5; }
.labo-blocs .panneau-aide-corps { padding: 0.75rem 1rem 1rem; overflow-y: auto; font-size: 1rem; line-height: 1.45; }
.labo-blocs .panneau-aide-corps p { margin: 0 0 0.625rem; }
.labo-blocs .fiche-lignes { margin: 0 0 0.75rem; padding-left: 1.25rem; }
.labo-blocs .fiche-lignes li { margin-bottom: 0.375rem; }
.labo-blocs .fiche-schema { padding: 0.5rem; border: 1px solid var(--bord); border-radius: 0.75rem; background: var(--fond); }
.labo-blocs .fiche-etapes { padding: 0.625rem; border: 1px solid var(--bord); border-radius: 0.75rem; background: var(--fond); min-height: 9rem; }
.labo-blocs .etape-texte { font-weight: 600; }
.labo-blocs .fiche-navigation { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.625rem; }
.labo-blocs .etape-numero { flex: 1; text-align: center; font-weight: 700; color: var(--texte-2); }
.labo-blocs .fiche-navigation button:disabled { opacity: 0.45; cursor: not-allowed; }
.labo-blocs .indice { padding: 0.625rem 0.75rem; margin-bottom: 0.625rem; border-left: 5px solid var(--orange); background: var(--consigne-fond); border-radius: 0.625rem; }
.labo-blocs .indice h3 { display: flex; align-items: center; gap: 0.5rem; margin: 0 0 0.375rem; font-size: 0.9375rem; }
.labo-blocs .indice p { margin: 0 0 0.5rem; }
.labo-blocs .indice-niveau { display: inline-flex; align-items: center; justify-content: center; width: 1.625rem; height: 1.625rem; border-radius: 999px; background: var(--orange); font-size: 0.875rem; }
.labo-blocs .indice-intro { color: var(--texte-2); }
.labo-blocs .btn-indice-suivant .icone { width: 1.25rem; height: 1.25rem; }
.labo-blocs .schema-svg { width: 100%; height: auto; display: block; }
.labo-blocs .schema-etroit { max-width: 16rem; margin: 0 auto; }
.labo-blocs .schema-texte { fill: var(--encre); font: 700 11px var(--police); }
.labo-blocs .schema-petit { fill: var(--texte-2); font: 600 9px var(--police); }
.labo-blocs .schema-grand { fill: var(--encre); font: 800 28px var(--police); }
.labo-blocs .petits-blocs { display: flex; flex-direction: column; gap: 0.75rem; align-items: flex-start; font-size: 0.8125rem; font-weight: 700; color: var(--encre); }
.labo-blocs .pb-c { display: inline-flex; flex-direction: column; align-items: flex-start; }
.labo-blocs .pb-tete {
  display: flex; align-items: center; gap: 0.375rem; flex-wrap: wrap; min-height: 2.25rem; padding: 0.25rem 0.75rem;
  background: var(--c); border-radius: 6px 6px 6px 0;
}
.labo-blocs .pb-chapeau > .pb-tete { border-radius: 16px 16px 6px 0; min-width: 9rem; }
.labo-blocs .pb-milieu { border-radius: 0 6px 6px 0; min-height: 1.75rem; }
.labo-blocs .pb-corps { display: flex; flex-direction: column; gap: 2px; padding: 3px 0 3px 0.875rem; border-left: 0.875rem solid var(--c); margin-left: 0; }
.labo-blocs .pb-corps { margin-left: 0; padding-left: 2px; }
.labo-blocs .pb-pied { width: 6rem; height: 0.75rem; background: var(--c); border-radius: 0 6px 6px 6px; }
.labo-blocs .pb-bloc { display: inline-flex; align-items: center; gap: 0.375rem; flex-wrap: wrap; min-height: 2rem; padding: 0.1875rem 0.625rem; border-radius: 6px; }
.labo-blocs .pb-icone { width: 1rem; height: 1rem; }
.labo-blocs .pb-champ { display: inline-flex; align-items: center; height: 1.375rem; padding: 0 0.5rem; border-radius: 999px; background: #FFFFFF; }
.labo-blocs .pb-trou { display: inline-flex; align-items: center; justify-content: center; min-width: 2rem; height: 1.375rem; padding: 0 0.375rem; border-radius: 999px; border: 2px dashed var(--encre); background: rgba(255, 255, 255, 0.75); }
.labo-blocs .pb-vide { display: inline-block; width: 3rem; height: 1.375rem; border-radius: 6px; border: 2px dashed rgba(31, 42, 48, 0.55); }
.labo-blocs .pb-emplacement { width: 7rem; height: 1.5rem; border: 2px dashed #9AA8B0; border-radius: 6px; }
.labo-blocs .pb-hexa {
  display: inline-flex; align-items: center; gap: 0.3125rem; min-height: 1.625rem; padding: 0 0.75rem;
  clip-path: polygon(10px 0, calc(100% - 10px) 0, 100% 50%, calc(100% - 10px) 100%, 10px 100%, 0 50%);
}
.labo-blocs .pb-grand { min-height: 2rem; padding: 0 0.875rem; }
.labo-blocs .pb-rond { display: inline-flex; align-items: center; height: 1.375rem; padding: 0 0.5rem; border-radius: 999px; }
.labo-blocs .dialogue-lexique {
  width: min(56rem, 94vw); max-height: 86vh; border: 2px solid var(--bleu); border-radius: 0.75rem; padding: 1rem;
  box-shadow: 0 12px 40px rgba(31, 42, 48, 0.25); color: var(--encre);
}
.labo-blocs .dialogue-lexique[open] { display: flex; flex-direction: column; }
.labo-blocs .dialogue-lexique::backdrop { background: rgba(31, 42, 48, 0.35); }
.labo-blocs .dialogue-lexique .dialogue-entete { gap: 0.5rem; }
.labo-blocs .dialogue-lexique .dialogue-entete .icone { stroke: var(--bleu) !important; }
.labo-blocs .lexique-outils { display: flex; align-items: center; gap: 1rem; margin: 0.625rem 0; flex: none; }
.labo-blocs .lexique-recherche { flex: 1; height: 2.75rem; padding: 0 0.875rem; border: 2px solid var(--bord); border-radius: 0.625rem; font: 400 1rem var(--police); }
.labo-blocs .lexique-recherche:focus { outline: 3px solid var(--signal); border-color: var(--bleu); }
.labo-blocs .lexique-filtre { display: flex; align-items: center; gap: 0.5rem; font-weight: 600; min-height: 2.75rem; cursor: pointer; }
.labo-blocs .lexique-filtre input { width: 1.25rem; height: 1.25rem; }
.labo-blocs .lexique-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(16rem, 1fr)); gap: 0.5rem; overflow-y: auto; padding: 2px; }
.labo-blocs .lexique-carte { display: flex; gap: 0.625rem; padding: 0.625rem 0.75rem; border: 2px solid var(--bord); border-left: 6px solid var(--bleu); border-radius: 0.75rem; }
.labo-blocs .lexique-carte.vu { background: #FFFBF0; border-left-color: var(--orange); }
.labo-blocs .lexique-carte h3 { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; margin: 0 0 0.25rem; font-size: 1rem; }
.labo-blocs .lexique-carte p { margin: 0; font-size: 0.9375rem; line-height: 1.4; }
.labo-blocs .lexique-picto { flex: none; width: 2.5rem; height: 2.5rem; border-radius: 0.625rem; background: var(--bleu-pale); display: flex; align-items: center; justify-content: center; }
.labo-blocs .lexique-badge { font-size: 0.75rem; font-weight: 700; padding: 0 0.5rem; border-radius: 999px; background: var(--orange); }
.labo-blocs .lexique-vide { grid-column: 1 / -1; padding: 1.5rem; text-align: center; color: var(--texte-2); font-weight: 600; }
.labo-blocs .indice-note { padding: 0.5rem 0.75rem; border-left: 4px solid var(--bleu); background: var(--bleu-pale); border-radius: 0.5rem; font-size: 0.9375rem; }
.labo-blocs .avec-carte .simu-carte { max-height: none; flex: none; }
.labo-blocs .simu-microbit, .labo-blocs .simu-mbot { justify-content: center; align-items: center; }
.labo-blocs .mb-carte {
  display: flex; align-items: center; gap: 0.75rem; padding: 0.625rem 0.875rem;
  background: #1F2A30; border-radius: 1rem; box-shadow: inset 0 0 0 3px #3B4A52;
}
.labo-blocs .mb-centre { display: flex; flex-direction: column; align-items: center; gap: 0.375rem; }
.labo-blocs .mb-ecran { display: grid; grid-template-columns: repeat(5, 1.125rem); gap: 0.4375rem; padding: 0.375rem; }
.labo-blocs .mb-point {
  position: relative; width: 1.125rem; height: 1.125rem; border-radius: 0.1875rem; --allume: 0; background: #3B4A52;
}
.labo-blocs .mb-point::after {
  content: ''; position: absolute; inset: 0; border-radius: inherit; background: #FF3B30; opacity: var(--allume);
  box-shadow: 0 0 10px rgba(255, 59, 48, 0.8);
}
.labo-blocs .poussoir-carte { cursor: pointer; font-family: var(--titres); font-weight: 700; touch-action: none; }
.labo-blocs .mb-bouton {
  width: 3rem; height: 3rem; border-radius: 50%; border: 3px solid #9AA8B0; background: #2B3338; color: #FFFFFF; font-size: 1.125rem;
}
.labo-blocs .mb-bouton[aria-pressed="true"], .labo-blocs .mb-logo[aria-pressed="true"], .labo-blocs .mbot-bouton[aria-pressed="true"] {
  background: var(--signal, #FFC400); color: var(--texte); border-color: #FFFFFF;
}
.labo-blocs .mb-logo {
  display: flex; align-items: center; gap: 0.25rem; padding: 0.125rem 0.5rem; min-height: 2rem;
  border: 2px solid #9AA8B0; border-radius: 999px; background: #2B3338; color: #E8EDF0; font-size: 0.8125rem;
}
.labo-blocs .mb-logo svg { width: 1.75rem; height: 0.875rem; }
.labo-blocs .mb-son, .labo-blocs .mbot-son { min-height: 1.125rem; font-size: 0.8125rem; font-weight: 700; color: #FFFFFF; }
.labo-blocs .mbot-son { color: var(--texte); }
.labo-blocs .mbot { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; justify-content: center; }
.labo-blocs .mbot-dessin { width: 8.5rem; height: auto; flex: none; }
.labo-blocs .mbot-fleche { fill: #FFFFFF; font: 700 14px var(--police); }
.labo-blocs .mbot-texte { fill: #FFFFFF; font: 700 9px var(--police); }
.labo-blocs .mbot-etats { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.125rem; font-size: 0.875rem; }
.labo-blocs .mbot-bouton { min-height: 2.75rem; padding: 0 0.875rem; border: 2px solid #9AA8B0; border-radius: 0.625rem; background: var(--fond); font-size: 0.875rem; }
.labo-blocs .simu-capteurs { flex: none; background: #FFFFFF; border: 1px solid var(--bord); border-radius: 0.75rem; padding: 0.375rem 0.625rem; }
.labo-blocs .simu-capteurs summary { cursor: pointer; font-family: var(--titres); font-weight: 700; font-size: 0.875rem; }
.labo-blocs .capteurs-aide { font-family: var(--police); font-weight: 400; font-size: 0.8125rem; color: var(--texte-2); }
.labo-blocs .capteurs-liste { display: grid; grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr)); gap: 0.25rem 0.75rem; padding-top: 0.375rem; }
.labo-blocs .simu-capteurs label.capteur { display: grid; grid-template-columns: 7.5rem 1fr auto; align-items: center; gap: 0.375rem; font-size: 0.8125rem; font-weight: 400; }
.labo-blocs .capteur select { grid-column: 2 / 4; font: inherit; min-height: 2rem; }
.labo-blocs .capteur input[type="range"] { min-width: 0; }
.labo-blocs .capteur-valeur { font-variant-numeric: tabular-nums; font-weight: 700; min-width: 3.5rem; text-align: right; }
@font-face { font-family: 'Lexend'; font-weight: 500; font-display: swap; src: url('polices/lexend-500.woff2') format('woff2'); }
@font-face { font-family: 'Lexend'; font-weight: 700; font-display: swap; src: url('polices/lexend-700.woff2') format('woff2'); }
@font-face { font-family: 'Atkinson Hyperlegible'; font-weight: 400; font-display: swap; src: url('polices/atkinson-400.woff2') format('woff2'); }
@font-face { font-family: 'Atkinson Hyperlegible'; font-weight: 700; font-display: swap; src: url('polices/atkinson-700.woff2') format('woff2'); }
@font-face { font-family: 'JetBrains Mono'; font-weight: 500; font-display: swap; src: url('polices/jetbrains-mono-500.woff2') format('woff2'); }
.labo-blocs {
  
  --texte: #14213D;
  --texte-2: #4A5670;
  --fond: #F3F5F9;
  --bord: #D5DBE7;
  --bord-fort: #A9B6CC;
  --action: #2547D0;
  --action-fonce: #1B37A8;
  --action-pale: #E4EAFD;
  --reussi: #1B7F4B;
  --reussi-pale: #E1F4EA;
  --reussi-texte: #0F4D2C;
  --ecart: #F5C45E;
  --ecart-pale: #FFF1D0;
  --ecart-texte: #4A2F00;
  --ecart-fonce: #7A4A00;
  --blocage: #B3261E;
  --blocage-pale: #FDE7E5;
  --accent: #2547D0; 
  --titres: 'Lexend', 'Segoe UI', system-ui, sans-serif;
  --police: 'Atkinson Hyperlegible', 'Segoe UI', system-ui, sans-serif;
  --mono: 'JetBrains Mono', Consolas, monospace;
  
  --encre: var(--texte);
  --bleu: var(--action);
  --bleu-fonce: var(--action-fonce);
  --bleu-pale: var(--action-pale);
  --orange: var(--ecart);
  --consigne-fond: var(--ecart-pale);
  --gris: #6B7890;
  --gris-bord: var(--bord-fort);
  --gris-fond: #ECEFF5;
  --signal: #FFC400;
  color-scheme: light;
}
.labo-blocs-page { height: 100%; }
.labo-blocs-page {
  margin: 0; background: var(--fond); color: var(--texte);
  font: 400 1rem/1.4 var(--police);
  display: flex; flex-direction: column; overflow: hidden;
}
.labo-blocs h1, .labo-blocs h2, .labo-blocs h3, .labo-blocs .btn-principal, .labo-blocs .btn-secondaire, .labo-blocs .btn-onglet { font-family: var(--titres); }
.labo-blocs button, .labo-blocs input, .labo-blocs select { font-family: var(--police); color: inherit; }
.labo-blocs button:focus-visible, .labo-blocs input:focus-visible, .labo-blocs select:focus-visible { outline: 3px solid var(--signal); outline-offset: 2px; }
.labo-blocs .espace { flex: 1; }
.labo-blocs .ecran { flex: 1; min-height: 0; }
.labo-blocs .btn-principal, .labo-blocs .btn-secondaire {
  display: inline-flex; align-items: center; justify-content: center; gap: 0.5rem; height: 3rem; padding: 0 1.25rem;
  border-radius: 0.75rem; font-weight: 500; font-size: 1rem; cursor: pointer; white-space: nowrap;
}
.labo-blocs .btn-principal { border: none; background: var(--action); color: #FFFFFF; }
.labo-blocs .btn-principal:hover { background: var(--action-fonce); }
.labo-blocs .btn-secondaire { border: 2px solid var(--action); background: #FFFFFF; color: var(--action); }
.labo-blocs .btn-secondaire:hover { background: var(--action-pale); }
.labo-blocs .btn-principal .icone, .labo-blocs .btn-secondaire .icone { width: 1.125rem; height: 1.125rem; }
.labo-blocs .btn-lien { border: none; background: none; color: var(--action); text-decoration: underline; cursor: pointer; font-size: 0.875rem; min-height: 2.75rem; }
.labo-blocs .btn-onglet {
  display: inline-flex; align-items: center; gap: 0.375rem; height: 2.5rem; padding: 0 0.875rem; border: none; border-radius: 0.625rem;
  background: var(--action-pale); color: var(--texte); font-weight: 500; font-size: 0.875rem; cursor: pointer;
}
.labo-blocs .btn-onglet:hover { background: #D3DDFB; }
.labo-blocs .btn-onglet .icone { width: 1rem; height: 1rem; }
.labo-blocs .btn-aide {
  display: inline-flex; align-items: center; gap: 0.375rem; height: 2.5rem; padding: 0 0.875rem;
  border: 2px solid var(--bord); border-radius: 0.625rem; background: #FFFFFF; font-weight: 700; font-size: 0.875rem; cursor: pointer;
}
.labo-blocs .btn-aide:hover { background: var(--fond); }
.labo-blocs .btn-aide .icone { width: 1.125rem; height: 1.125rem; stroke: var(--action) !important; }
.labo-blocs .bandeau { flex: none; }
.labo-blocs .bandeau-accent { height: 8px; background: var(--accent); }
.labo-blocs .bandeau-barre {
  display: flex; align-items: center; gap: 1rem; padding: 0.375rem 1.25rem; background: #FFFFFF; border-bottom: 1px solid var(--bord);
}
.labo-blocs .logo { width: 2.125rem; height: 2.125rem; flex: none; }
.labo-blocs .bandeau-titre { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
.labo-blocs .bandeau-titre strong { font-family: var(--titres); font-size: 1.0625rem; }
.labo-blocs .equipe-texte { font-size: 0.875rem; color: var(--texte-2); }
.labo-blocs .bandeau-avancement { display: flex; flex-direction: column; gap: 0.25rem; }
.labo-blocs .avancement-texte { font-size: 0.8125rem; color: var(--texte-2); font-weight: 700; }
.labo-blocs .segments { display: flex; gap: 3px; }
.labo-blocs .segment { width: 1.125rem; height: 0.5rem; border-radius: 3px; background: var(--bord); }
.labo-blocs .segment-reussi { background: var(--reussi); }
.labo-blocs .segment-a_reverifier { background: var(--ecart); }
.labo-blocs .segment-courant { outline: 2px solid var(--texte); outline-offset: 1px; }
.labo-blocs .etat-enregistrement { font-size: 0.875rem; color: var(--reussi); font-weight: 700; white-space: nowrap; }
.labo-blocs .etat-enregistrement.a-faire { color: var(--ecart-fonce); }
.labo-blocs .carte { background: #FFFFFF; border: 1px solid var(--bord); border-radius: 1rem; padding: 0.875rem 1rem; }
.labo-blocs .carte h2 { margin: 0; font-size: 1rem; font-weight: 700; }
.labo-blocs .ecran-accueil { overflow: auto; }
.labo-blocs .accueil-contenu { max-width: 72.5rem; margin: 0 auto; padding: 2.25rem 1.75rem 2.5rem; display: flex; flex-direction: column; gap: 1.5rem; }
.labo-blocs .etiquette-projet { display: inline-block; font-family: var(--titres); font-weight: 500; font-size: 0.875rem; background: var(--accent); color: #FFFFFF; border-radius: 0.5rem; padding: 0.375rem 0.75rem; }
.labo-blocs .accueil-entete h1 { font-size: 2.375rem; line-height: 1.15; margin: 0.75rem 0 0; }
.labo-blocs .accueil-entete p { font-size: 1.1875rem; color: var(--texte-2); margin: 0.5rem 0 0; }
.labo-blocs .accueil-cartes { display: grid; grid-template-columns: repeat(auto-fit, minmax(20rem, 1fr)); gap: 1.125rem; align-items: stretch; }
.labo-blocs .carte-accueil { background: #FFFFFF; border: 1px solid var(--bord); border-radius: 1.125rem; padding: 1.375rem 1.5rem; display: flex; flex-direction: column; gap: 0.75rem; }
.labo-blocs .carte-accueil h2 { margin: 0; font-size: 1.375rem; line-height: 1.25; }
.labo-blocs .carte-reprendre { border: 3px solid var(--action); }
.labo-blocs .carte-surtitre { font-size: 0.875rem; font-weight: 700; color: var(--action); }
.labo-blocs .reprendre-date, .labo-blocs .carte-texte { margin: 0; font-size: 1rem; color: var(--texte-2); }
.labo-blocs .formulaire-equipe { display: flex; flex-direction: column; gap: 0.75rem; }
.labo-blocs .formulaire-equipe label { display: flex; flex-direction: column; gap: 0.25rem; font-size: 0.9375rem; font-weight: 700; }
.labo-blocs .formulaire-equipe input, .labo-blocs .formulaire-equipe select {
  height: 2.875rem; padding: 0 0.75rem; border: 2px solid var(--bord-fort); border-radius: 0.625rem; font-size: 1.0625rem; background: #FFFFFF;
}
.labo-blocs .chemin-modele { background: var(--fond); border-radius: 0.75rem; padding: 0.75rem 0.875rem; display: flex; flex-direction: column; gap: 0.25rem; }
.labo-blocs .chemin-legende { font-size: 0.8125rem; font-weight: 700; color: var(--texte-2); }
.labo-blocs .chemin-texte { font-family: var(--mono); font-size: 0.8125rem; line-height: 1.6; word-break: break-word; }
.labo-blocs .info-firefox { display: flex; gap: 0.75rem; align-items: flex-start; background: var(--action-pale); border-radius: 0.875rem; padding: 0.75rem 1rem; margin: 1rem 0 0; font-size: 0.9375rem; }
.labo-blocs .info-firefox .icone { stroke: var(--action) !important; }
.labo-blocs .carte-large { max-width: 46rem; }
.labo-blocs .accueil-erreur { margin: 0; padding: 0.625rem 0.875rem; border-radius: 0.625rem; background: var(--ecart-pale); color: var(--ecart-texte); font-weight: 700; }
.labo-blocs .accueil-erreur[hidden] { display: none; }
.labo-blocs .accueil-actions { display: flex; gap: 0.625rem; margin-top: 0.5rem; flex-wrap: wrap; }
.labo-blocs .chemin { display: flex; flex-wrap: wrap; align-items: center; gap: 0.375rem; }
.labo-blocs .chemin-dossier { display: inline-flex; align-items: center; height: 2rem; padding: 0 0.625rem; border-radius: 0.5rem; background: var(--fond); border: 1px solid var(--bord); font-weight: 700; font-size: 0.9375rem; }
.labo-blocs .chemin-dossier.cible { background: var(--ecart-pale); border: 2px solid var(--ecart); box-shadow: 0 0 0 3px rgba(245, 166, 35, 0.25); }
.labo-blocs .chemin-dossier.equipe { gap: 0.375rem; background: #FFFFFF; border: 2px dashed var(--bord-fort); }
.labo-blocs .chemin-dossier .icone { width: 1.125rem; height: 1.125rem; }
.labo-blocs .dossier-etapes { margin: 0 0 0.75rem; padding-left: 1.375rem; line-height: 1.55; }
.labo-blocs .dossier-equipe-auto { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; margin: 0 0 0.5rem; color: var(--texte-2); }
.labo-blocs .sans-acces-inline { display: none; }
.labo-blocs .sans-acces .sans-acces-inline { display: inline; }
.labo-blocs .sans-acces .avec-acces-inline { display: none; }
.labo-blocs .chemin-fleche { color: var(--texte-2); font-weight: 700; }
.labo-blocs .dossier-aide { color: var(--texte-2); margin: 0; }
.labo-blocs .sans-acces-texte { display: none; }
.labo-blocs .sans-acces .sans-acces-texte { display: block; }
.labo-blocs .sans-acces .avec-acces { display: none; }
.labo-blocs .avertissement { padding: 0.75rem 1rem; border-radius: 0.75rem; background: var(--ecart-pale); }
.labo-blocs .avertissement p { margin: 0; }
.labo-blocs .confirmation { display: flex; gap: 0.75rem; align-items: flex-start; padding: 0.75rem 1rem; border-radius: 0.75rem; background: var(--reussi-pale); }
.labo-blocs .confirmation p { margin: 0; }
.labo-blocs .confirmation .icone { width: 1.75rem; height: 1.75rem; }
.labo-blocs .ecran-parcours { overflow: auto; }
.labo-blocs .parcours-contenu { max-width: 77.5rem; margin: 0 auto; padding: 1.625rem 1.75rem 2.25rem; display: flex; flex-direction: column; gap: 1.25rem; }
.labo-blocs .parcours-tete { display: flex; align-items: flex-end; justify-content: space-between; gap: 1.25rem; flex-wrap: wrap; }
.labo-blocs .parcours-tete h1 { margin: 0; font-size: 1.875rem; line-height: 1.15; }
.labo-blocs .parcours-tete p { margin: 0.375rem 0 0; font-size: 1.125rem; color: var(--texte-2); }
.labo-blocs .parcours-avancement { display: flex; align-items: center; gap: 1.125rem; flex-wrap: wrap; background: #FFFFFF; border: 1px solid var(--bord); border-radius: 1rem; padding: 0.875rem 1.25rem; }
.labo-blocs .parcours-avancement strong { font-family: var(--titres); }
.labo-blocs .barre { flex: 1; min-width: 13.75rem; height: 0.75rem; border-radius: 6px; background: var(--bord); overflow: hidden; }
.labo-blocs .barre span { display: block; height: 100%; background: var(--reussi); }
.labo-blocs .pilule-revoir { display: inline-flex; align-items: center; gap: 0.5rem; font-size: 0.9375rem; color: var(--ecart-fonce); background: var(--ecart-pale); border-radius: 999px; padding: 0.375rem 0.875rem; font-weight: 700; }
.labo-blocs .pilule-revoir .icone { width: 1rem; height: 1rem; }
.labo-blocs .parcours-grille { display: grid; grid-template-columns: repeat(auto-fill, minmax(21.25rem, 1fr)); gap: 1rem; }
.labo-blocs .carte-exercice {
  display: flex; gap: 0.875rem; align-items: flex-start; text-align: left; border-radius: 1rem; padding: 1rem 1.125rem;
  background: #FFFFFF; border: 2px solid var(--bord); cursor: pointer; color: var(--texte);
}
.labo-blocs .carte-exercice:hover { border-color: var(--action); }
.labo-blocs .numero-exercice {
  width: 2.75rem; height: 2.75rem; border-radius: 0.75rem; display: flex; align-items: center; justify-content: center;
  font-family: var(--titres); font-weight: 700; font-size: 1.125rem; flex: none; background: var(--action-pale); color: var(--action);
}
.labo-blocs .exercice-texte { display: flex; flex-direction: column; gap: 0.4375rem; min-width: 0; }
.labo-blocs .exercice-texte strong { font-family: var(--titres); font-size: 1.125rem; line-height: 1.25; }
.labo-blocs .exercice-etat { display: flex; align-items: center; gap: 0.4375rem; font-size: 0.9375rem; font-weight: 700; color: var(--action); }
.labo-blocs .exercice-etat .icone { width: 1.125rem; height: 1.125rem; }
.labo-blocs .exercice-note { font-size: 0.875rem; color: var(--texte-2); line-height: 1.35; }
.labo-blocs .etat-reussi .numero-exercice { background: var(--reussi); color: #FFFFFF; }
.labo-blocs .etat-reussi .exercice-etat { color: var(--reussi); }
.labo-blocs .etat-a_reverifier { background: #FFFBF0; border-color: var(--ecart); }
.labo-blocs .etat-a_reverifier .numero-exercice { background: var(--ecart); color: #2A1F00; }
.labo-blocs .etat-a_reverifier .exercice-etat { color: var(--ecart-fonce); }
.labo-blocs .carte-exercice.courant { border: 3px solid var(--action); }
.labo-blocs .carte-exercice.courant .numero-exercice { background: var(--action); color: #FFFFFF; }
.labo-blocs .etat-verrouille { background: #ECEFF5; color: var(--texte-2); cursor: not-allowed; }
.labo-blocs .etat-verrouille:hover { border-color: var(--bord); }
.labo-blocs .etat-verrouille .numero-exercice { background: var(--bord); color: var(--texte-2); }
.labo-blocs .etat-verrouille .exercice-etat { color: var(--texte-2); }
.labo-blocs .carte-exercice.defi { border-style: dashed; border-color: var(--accent); }
.labo-blocs .carte-exercice.defi .numero-exercice { background: #FFFFFF; color: var(--accent); border: 2px solid var(--accent); }
.labo-blocs .parcours-legende { display: flex; gap: 1.375rem; flex-wrap: wrap; font-size: 0.875rem; color: var(--texte-2); }
.labo-blocs .parcours-legende span { display: flex; align-items: center; gap: 0.5rem; }
.labo-blocs .leg { width: 0.875rem; height: 0.875rem; border-radius: 4px; display: inline-block; }
.labo-blocs .leg-reussi { background: var(--reussi); }
.labo-blocs .leg-courant { background: var(--action); }
.labo-blocs .leg-revoir { background: var(--ecart); }
.labo-blocs .leg-verrou { background: var(--bord); }
.labo-blocs .leg-defi { border: 2px dashed var(--accent); }
.labo-blocs .ecran-exercice {
  --col-gauche: minmax(16rem, 19rem); --col-droite: minmax(22rem, 27rem);
  display: grid; grid-template-columns: var(--col-gauche) minmax(0, 1fr) var(--col-droite); grid-template-rows: auto minmax(0, 1fr);
  gap: 0.75rem; column-gap: 1.75rem; padding: 0.75rem; min-height: 0; overflow: hidden;
}
.labo-blocs .colonne-aide, .labo-blocs .colonne-test { display: flex; flex-direction: column; gap: 0.75rem; min-height: 0; overflow-y: auto; }
.labo-blocs .colonne-programme { position: relative; display: flex; flex-direction: column; gap: 0.5rem; min-height: 0; min-width: 0; }
.labo-blocs .consigne { grid-column: 1 / 3; grid-row: 1; position: relative; display: flex; flex-direction: column; gap: 0.5rem; padding: 0.625rem 1rem 0.75rem; }
.labo-blocs .colonne-test { grid-column: 3; grid-row: 1 / 3; }
.labo-blocs .consigne-tete { display: flex; align-items: baseline; flex-wrap: wrap; gap: 0.25rem 0.875rem; }
.labo-blocs .consigne-texte { max-height: 30vh; overflow-y: auto; padding-right: 0.5rem; }
.labo-blocs .consigne-texte > :last-child { margin-bottom: 0; }
.labo-blocs .consigne-actions { display: flex; align-items: center; flex-wrap: wrap; gap: 0.375rem; margin-left: auto; align-self: center; }
.labo-blocs .consigne-actions .btn-aide { height: 2.25rem; padding: 0 0.625rem; }
.labo-blocs .btn-reduire-consigne {
  border: none; background: none; height: 2.25rem; padding: 0 0.5rem; border-radius: 0.5rem; cursor: pointer;
  font-weight: 700; font-size: 0.875rem; color: var(--action); text-decoration: underline; text-underline-offset: 3px;
}
.labo-blocs .btn-reduire-consigne:hover { background: var(--action-pale); }
.labo-blocs .consigne.reduite .consigne-texte { display: none; }
.labo-blocs .consigne-numero { font-size: 0.875rem; font-weight: 700; color: var(--accent); }
.labo-blocs .titre-exercice { margin: 0; font-size: 1.25rem; line-height: 1.2; }
.labo-blocs .consigne-texte p { margin: 0 0 0.375rem; font-size: 1.0625rem; line-height: 1.45; }
.labo-blocs .consigne.longue .consigne-texte p { font-size: 0.9375rem; }
.labo-blocs .consigne-etiquettes { display: flex; flex-wrap: wrap; gap: 0.25rem; margin: 0.25rem 0 0.5rem; }
.labo-blocs .consigne-etiquette { background: var(--fond); border-radius: 0.5rem; padding: 0.125rem 0.5rem; font-size: 0.875rem; }
.labo-blocs .broche { font-family: var(--mono); font-weight: 500; font-size: 0.9em; background: var(--texte); color: #FFFFFF; border-radius: 0.375rem; padding: 0 0.3125rem; white-space: nowrap; }
.labo-blocs .mot-cle { border: none; background: none; padding: 0; font: inherit; font-weight: 700; color: inherit; text-decoration: underline dotted var(--action); text-decoration-thickness: 2px; text-underline-offset: 3px; cursor: help; }
.labo-blocs .rangee { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.labo-blocs .mot-structure { font-weight: 700; background: #F7AE5E; color: #1F2A30; border-radius: 0.375rem; padding: 0 0.3125rem; white-space: nowrap; }
.labo-blocs .mot-cle .mot-structure { text-decoration: inherit; }
.labo-blocs .consigne-ligne { display: block; }
.labo-blocs .consigne-ligne.niveau-1 { padding-left: 1.25rem; border-left: 3px solid #F7AE5E; margin-left: 0.25rem; }
.labo-blocs .consigne-ligne + .consigne-ligne { margin-top: 0.125rem; }
.labo-blocs .bulle { position: absolute; width: min(26rem, 90%); z-index: 40; background: #FFFFFF; border: 2px solid var(--action); border-radius: 0.75rem; padding: 0.5rem 0.75rem; box-shadow: 0 10px 28px rgba(20, 33, 61, 0.2); }
.labo-blocs .bulle-entete { display: flex; align-items: center; }
.labo-blocs .bulle-fermer { margin-left: auto; width: 2.5rem; height: 2.5rem; border: none; background: none; font-size: 1.375rem; cursor: pointer; }
.labo-blocs .bulle-definition { margin: 0.25rem 0 0; }
.labo-blocs .liste-composants { list-style: none; margin: 0.5rem 0 0; padding: 0; display: flex; flex-direction: column; gap: 0.375rem; }
.labo-blocs .liste-composants li { display: flex; align-items: center; gap: 0.625rem; font-weight: 700; }
.labo-blocs .composant-pastille { width: 2rem; height: 2rem; border-radius: 0.5rem; display: flex; align-items: center; justify-content: center; background: var(--fond); flex: none; }
.labo-blocs .composant-pastille .icone { width: 1.125rem; height: 1.125rem; }
.labo-blocs .carte-aide { display: flex; flex-direction: column; gap: 0.5rem; }
.labo-blocs .aide-tete { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; }
.labo-blocs .aide-texte { margin: 0; font-size: 0.875rem; color: var(--texte-2); }
.labo-blocs .compteur { font-size: 0.8125rem; font-weight: 700; color: var(--texte-2); background: var(--fond); border-radius: 999px; padding: 0.125rem 0.625rem; white-space: nowrap; }
.labo-blocs .btn-indice .icone { stroke: currentColor !important; }
.labo-blocs .programme-tete { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; }
.labo-blocs .programme-tete h2 { margin: 0; font-size: 1.125rem; }
.labo-blocs .niveaux, .labo-blocs .modes { display: inline-flex; align-items: center; background: var(--action-pale); border-radius: 0.75rem; padding: 0.25rem; gap: 0.25rem; }
.labo-blocs .niveaux-libelle { font-size: 0.8125rem; font-weight: 700; color: var(--texte-2); padding: 0 0.375rem; }
.labo-blocs .btn-niveau, .labo-blocs .btn-mode { border: none; background: transparent; border-radius: 0.5625rem; padding: 0 0.75rem; height: 2.5rem; font-family: var(--titres); font-weight: 500; font-size: 0.8125rem; cursor: pointer; }
.labo-blocs .btn-niveau[aria-pressed="true"], .labo-blocs .btn-mode[aria-pressed="true"] { background: var(--action); color: #FFFFFF; }
.labo-blocs .btn-niveau:disabled { opacity: 0.45; cursor: not-allowed; text-decoration: line-through; }
.labo-blocs .editeur { position: relative; flex: 1; min-height: 12rem; background: #FFFFFF; border: 1px solid var(--bord); border-radius: 1rem; overflow: hidden; }
.labo-blocs .code-arduino { flex: none; height: 32%; min-height: 9rem; display: flex; flex-direction: column; background: var(--texte); border-radius: 1rem; overflow: hidden; }
.labo-blocs .code-tete { display: flex; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap; padding: 0.5rem 0.875rem; color: #FFFFFF; font-size: 0.8125rem; border-bottom: 1px solid #2C3A5A; }
.labo-blocs .code-tete span { color: #B9C3D9; }
.labo-blocs .code-lignes { margin: 0; padding: 0.5rem 0; overflow: auto; flex: 1; font: 500 0.8125rem/1.55 var(--mono); color: #F3F5F9; }
.labo-blocs .code-lignes .ligne { display: block; padding: 0 0.875rem; white-space: pre; }
.labo-blocs .code-lignes .surlignee { background: rgba(255, 196, 0, 0.28); box-shadow: inset 4px 0 0 var(--signal); }
.labo-blocs .simulateur { display: flex; flex-direction: column; gap: 0.5rem; flex: 1 1 auto; min-height: auto; overflow: visible; }
.labo-blocs .simu-titre { display: flex; align-items: center; justify-content: space-between; gap: 0.5rem; font-family: var(--titres); font-weight: 700; }
.labo-blocs .simu-carte { flex: 1 1 0; min-height: 2.5rem; max-height: 13rem; display: flex; }
.labo-blocs .simu-ligne { display: flex; align-items: center; gap: 0.5rem; }
.labo-blocs .simu-note { font-size: 0.8125rem; font-weight: 700; color: var(--action-fonce); background: var(--action-pale); border-radius: 999px; padding: 0 0.625rem; }
.labo-blocs .simu-note:empty { display: none; }
.labo-blocs .chrono { margin-left: auto; display: flex; align-items: center; gap: 0.375rem; font-weight: 700; font-variant-numeric: tabular-nums; }
.labo-blocs .chrono .icone { width: 1.125rem; height: 1.125rem; stroke: var(--action) !important; }
.labo-blocs .simu-commandes { flex-wrap: wrap; }
.labo-blocs .btn-lancer, .labo-blocs .btn-commande { height: 2.75rem; font-family: var(--titres); font-weight: 500; font-size: 0.9375rem; }
.labo-blocs .btn-lancer { background: var(--action); }
.labo-blocs .btn-lancer:hover { background: var(--action-fonce); }
.labo-blocs .btn-lancer.actif { background: var(--action-fonce); }
.labo-blocs .btn-commande { border-color: var(--action); color: var(--action); }
.labo-blocs .btn-vitesse { width: 2.5rem; height: 2.5rem; color: var(--action); }
.labo-blocs .vitesse { border-color: var(--action); }
.labo-blocs .btn-vitesse + .btn-vitesse { border-left-color: var(--action); }
.labo-blocs .btn-vitesse[aria-pressed="true"] { background: var(--action); }
.labo-blocs .verification { display: flex; flex-direction: column; gap: 0.75rem; flex: none; }
.labo-blocs .verification[hidden] { display: none; }
.blocklyFlyoutButton { fill: #A8352C; cursor: pointer; }
.blocklyFlyoutButton:hover { fill: #8C2B23; }
.labo-blocs .editeur .blocklyFlyoutButton .blocklyText { fill: #FFFFFF !important; font-weight: 700; font-size: 14px; }
.labo-blocs .btn-verifier {
  display: flex; align-items: center; justify-content: center; gap: 0.625rem; height: 3.25rem; border: none; border-radius: 0.75rem;
  background: var(--action); color: #FFFFFF; font-family: var(--titres); font-weight: 500; font-size: 1.0625rem; cursor: pointer;
}
.labo-blocs .btn-verifier:hover { background: var(--action-fonce); }
.labo-blocs .btn-verifier .icone { width: 1.375rem; height: 1.375rem; }
.labo-blocs .btn-verifier[hidden] { display: none; }
.labo-blocs .composants-note { margin: 0.5rem 0 0; font-size: 0.875rem; color: var(--texte-2); line-height: 1.4; }
.labo-blocs .composants-note[hidden] { display: none; }
.labo-blocs .composants-note.ecart { padding: 0.5rem 0.625rem; border-radius: 0.5rem; background: var(--ecart-pale); color: var(--ecart-texte); font-weight: 700; }
.labo-blocs .resultat { border-radius: 0.75rem; padding: 0.75rem 0.875rem; display: flex; flex-direction: column; gap: 0.625rem; }
.labo-blocs .resultat-message { display: flex; gap: 0.625rem; align-items: flex-start; }
.labo-blocs .resultat-message > div { display: flex; flex-direction: column; gap: 0.25rem; font-size: 1rem; line-height: 1.4; }
.labo-blocs .resultat-message .icone { width: 1.5rem; height: 1.5rem; margin-top: 0.125rem; }
.labo-blocs .resultat.ecart { background: var(--ecart-pale); color: var(--ecart-texte); }
.labo-blocs .resultat.ecart .icone { stroke: var(--ecart-fonce) !important; }
.labo-blocs .resultat.reussi { background: var(--reussi-pale); color: var(--reussi-texte); }
.labo-blocs .resultat.reussi .icone { stroke: var(--reussi) !important; }
.labo-blocs .resultat.reussi strong { font-family: var(--titres); font-size: 1.125rem; }
.labo-blocs .resultat-note { font-size: 0.875rem; opacity: 0.9; }
.labo-blocs .resultat-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }
.labo-blocs .resultat-actions .btn-principal, .labo-blocs .resultat-actions .btn-secondaire { height: 2.75rem; font-size: 0.9375rem; }
.labo-blocs .editeur .bloc-en-cours > .blocklyPath { stroke: #FFC400 !important; stroke-width: 5px !important; }
.labo-blocs .editeur .blocklyToolbox { width: 6rem; }
.labo-blocs .message-bref { position: fixed; bottom: 1.25rem; }
.labo-blocs .erreur-fatale { max-width: 40rem; margin: 4rem auto; padding: 1.5rem; background: #FFFFFF; border-radius: 1rem; border: 2px solid var(--blocage); }
@media (max-width: 1400px) {
.labo-blocs .ecran-exercice { --col-gauche: minmax(14.5rem, 16.5rem); --col-droite: minmax(20rem, 24rem); }
.labo-blocs .btn-niveau { padding: 0 0.5rem; }
}
.labo-blocs .ecran-exercice.beaucoup { --col-gauche: minmax(14rem, 16rem); --col-droite: minmax(28rem, 33rem); }
.labo-blocs .beaucoup .simu-carte { max-height: 7rem; min-height: 2.5rem; }
.labo-blocs .beaucoup .composant-dessin { width: 2rem; height: 2rem; }
.labo-blocs .beaucoup .bouton-poussoir { width: 2.5rem; height: 2.5rem; min-width: 2.5rem; min-height: 2.5rem; }
.labo-blocs .beaucoup .composant-aide { display: none; }
.labo-blocs .ecran-exercice.replie-gauche { --col-gauche: 2.75rem; }
.labo-blocs .ecran-exercice.replie-droite { --col-droite: 2.75rem; }
.labo-blocs .bande-repliee { display: none; }
.labo-blocs .replie-gauche .colonne-aide > :not(.bande-repliee), .labo-blocs .replie-droite .colonne-test > :not(.bande-repliee) { display: none; }
.labo-blocs .replie-gauche .colonne-aide > .bande-repliee, .labo-blocs .replie-droite .colonne-test > .bande-repliee {
  display: flex; flex-direction: column; align-items: center; gap: 0.75rem; flex: 1; width: 100%; padding: 0.75rem 0;
  border: 1px solid var(--bord); border-radius: 1rem; background: #FFFFFF; color: var(--action); cursor: pointer;
  font-family: var(--titres); font-weight: 500; font-size: 0.9375rem;
}
.labo-blocs .bande-repliee:hover { background: var(--action-pale); }
.labo-blocs .bande-texte { writing-mode: vertical-rl; transform: rotate(180deg); white-space: nowrap; }
.labo-blocs .btn-plier {
  position: absolute; top: 50%; z-index: 5; transform: translateY(-50%);
  display: flex; align-items: center; justify-content: center; width: 1.5rem; height: 5rem; padding: 0;
  border: 2px solid var(--action); border-radius: 0.75rem; background: #FFFFFF; color: var(--action);
  box-shadow: 0 2px 6px rgba(31, 42, 48, 0.18); cursor: pointer;
}
.labo-blocs .btn-plier[data-colonne="gauche"] { left: -1.625rem; }
.labo-blocs .btn-plier[data-colonne="droite"] { right: -1.625rem; }
.labo-blocs .btn-plier:hover, .labo-blocs .btn-plier:focus-visible { background: var(--action); color: #FFFFFF; }
.labo-blocs .btn-plier .icone { width: 1.125rem; height: 1.125rem; stroke: currentColor !important; }
.labo-blocs .texte-plier { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.labo-blocs .programme-tete h2 { margin-right: auto; }
.labo-blocs .dialogue-liste { border: none; border-radius: 1rem; padding: 1rem 1.25rem; width: min(32rem, 92vw); box-shadow: 0 20px 50px rgba(20, 33, 61, 0.3); }
.labo-blocs .dialogue-liste .dialogue-entete { display: flex; align-items: center; margin-bottom: 0.5rem; }
.labo-blocs .dialogue-liste .btn-fermer-liste { margin-left: auto; width: 2.5rem; height: 2.5rem; border: none; background: none; font-size: 1.375rem; cursor: pointer; }
.labo-blocs .liste-exercices { display: flex; flex-direction: column; gap: 0.25rem; max-height: 70vh; overflow-y: auto; }
.labo-blocs .liste-exercices button { display: flex; gap: 0.75rem; align-items: center; min-height: 2.75rem; padding: 0 0.75rem; border: 1px solid var(--bord); border-radius: 0.625rem; background: #FFFFFF; text-align: left; font-size: 1rem; cursor: pointer; }
.labo-blocs .liste-exercices button:hover { background: var(--action-pale); }
.labo-blocs .liste-numero { font-family: var(--titres); font-weight: 700; min-width: 2.25rem; color: var(--accent); }
.labo-blocs .projecteur .consigne-texte p { font-size: 1.25rem; }
.labo-blocs .simulateur.mode-carte > :not(.simu-titre):not(.panneau-carte) { display: none !important; }
.labo-blocs .panneau-carte { display: flex; flex-direction: column; gap: 0.75rem; border-radius: 1rem; padding: 1rem 1.125rem; background: #FFFFFF; border: 1px solid var(--bord); }
.labo-blocs .panneau-carte[hidden] { display: none; }
.labo-blocs .panneau-carte.pc-reussi { background: #F2FAF5; border: 2px solid var(--reussi); }
.labo-blocs .panneau-carte.pc-blocage { background: #FDF1F0; border: 2px solid var(--blocage); }
.labo-blocs .panneau-carte.pc-ecart { background: var(--ecart-pale); border: 2px solid var(--ecart); color: var(--ecart-texte); }
.labo-blocs .pc-tete { display: flex; align-items: center; gap: 0.75rem; background: #FFFFFF; border-radius: 0.75rem; padding: 0.625rem 0.75rem; }
.labo-blocs .pc-carte svg { display: block; }
.labo-blocs .pc-titres { display: flex; flex-direction: column; gap: 0.125rem; }
.labo-blocs .pc-titre { font-family: var(--titres); font-weight: 700; font-size: 1.0625rem; line-height: 1.25; }
.labo-blocs .pc-statut { display: flex; align-items: center; gap: 0.375rem; font-weight: 700; font-size: 0.9375rem; }
.labo-blocs .pc-statut .icone { width: 1.25rem; height: 1.25rem; stroke: var(--action) !important; }
.labo-blocs .pc-reussi .pc-statut .icone { stroke: var(--reussi) !important; }
.labo-blocs .pc-blocage .pc-statut .icone { stroke: var(--blocage) !important; }
.labo-blocs .pc-ecart .pc-statut .icone { stroke: var(--ecart-fonce) !important; }
.labo-blocs .pc-barre { height: 0.75rem; border-radius: 0.375rem; background: var(--bord); overflow: hidden; }
.labo-blocs .pc-barre > div { height: 100%; background: var(--action); transition: width 0.15s; }
.labo-blocs .pc-avance { font-size: 0.875rem; color: var(--texte-2); margin-top: -0.375rem; }
.labo-blocs .pc-message { margin: 0; font-size: 1rem; line-height: 1.4; }
.labo-blocs .pc-actions { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.labo-blocs .pc-actions button { height: 2.875rem; font-size: 0.9375rem; }
.labo-blocs .composant-pastille.composant-carte { background: #EFE8F8; }
.labo-blocs .composants-carte { font-size: 0.875rem; line-height: 1.35; }
.labo-blocs .dialogue-carte { display: flex; flex-direction: column; gap: 0.75rem; background: var(--fond); color: var(--texte); font-family: var(--police); border-radius: 1rem; padding: 1rem 1.125rem 1.125rem; }
.labo-blocs .dialogue-carte .dialogue-entete { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; font-family: var(--titres); font-size: 1.125rem; }
.labo-blocs .dialogue-carte .btn-fermer-carte { width: 2.75rem; height: 2.75rem; border: none; background: transparent; font-size: 1.5rem; cursor: pointer; color: var(--texte); }
.labo-blocs .dc-intro { margin: 0; font-size: 1rem; line-height: 1.4; }
.labo-blocs .simulateur.mode-direct .btn-pas, .labo-blocs .simulateur.mode-direct .vitesse, .labo-blocs .simulateur.mode-direct .btn-recommencer, .labo-blocs .simulateur.mode-direct .btn-pause { display: none; }
.labo-blocs .simulateur.mode-direct .panneau-carte { padding: 0.75rem 0.875rem; gap: 0.5rem; }
.labo-blocs .simulateur.mode-direct .pc-tete { padding: 0.375rem 0.625rem; }
.labo-blocs .simulateur.mode-direct .pc-message { font-size: 0.9375rem; }
.labo-blocs .broche-partagee { font-size: 0.8125rem; font-weight: 700; color: var(--ecart-texte); }
