/* ==========================================================================
   SimScope · AFGSU — moniteur de simulation (moteur.css)
   Contrat docs/AFGSU-CONTRAT.md §7. Commun à la page iPad (scope.html) et à
   l'aperçu formateur de JARVIS (afgsu.js) ; classes préfixées .ss-.
   Tout est dimensionné en calc(var(--ss-u) * n) : moteur.js pose --ss-u =
   min(largeur / 100, hauteur / 62,5) px sur .ss-ecran (ResizeObserver), donc le
   moniteur garde ses proportions de l'iPad paysage (1024×768 à 1366×1024) à
   l'aperçu 16:10 de 640 px de large ; en portrait, le surplus de hauteur va aux tracés.
   Couleurs d'un scope d'anesthésie : fond bleu nuit, ECG vert, pléthysmographie
   turquoise, PA rouge, PNI rose, CO2 jaune, textes et température blanc bleuté.
   Aucun style en ligne (CSP) : seules --ss-u, la position des repères de PA et la
   jauge de pouls sont posées par le script (CSSOM).
   ========================================================================== */

.ss-ecran {
  --ss-u: 6.4px;
  --ss-fond: #050505;
  --ss-fond-haut: #121212;
  --ss-filet: rgba(242, 242, 242, 0.09);
  --ss-ecg: #22e05a;
  --ss-pleth: #1ec8e6;
  --ss-pa: #ff2d55;
  --ss-co2: #ffd60a;
  --ss-pni: #ff6fae;
  --ss-texte: #f2f2f2;
  --ss-sourd: #a1a1a6;
  --ss-haute: #ff2d55;
  --ss-moyenne: #ffd60a;
  --ss-technique: #35d4f0;
  position: relative;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  min-height: 0;
  overflow: hidden;
  background: var(--ss-fond);
  color: var(--ss-texte);
  font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", "Segoe UI", Roboto, Arial, sans-serif;
  font-variant-numeric: tabular-nums;
  font-feature-settings: "tnum" 1;
  line-height: 1.1;
  -webkit-user-select: none;
  user-select: none;
  -webkit-tap-highlight-color: transparent;
  -webkit-text-size-adjust: 100%;
  -webkit-font-smoothing: antialiased;
}
.ss-ecran *,
.ss-ecran *::before,
.ss-ecran *::after { box-sizing: border-box; }
/* conteneur sans hauteur propre : le moniteur prend 16:10 de sa largeur (sinon il remplit le conteneur) */
.ss-hauteur-auto { height: auto; aspect-ratio: 16 / 10; }
.ss-cache { display: none !important; }

/* ---------------------------------------------------------------- en-tête */
.ss-entete {
  flex: 0 0 calc(var(--ss-u) * 4.6);
  display: flex;
  align-items: center;
  gap: calc(var(--ss-u) * 1.2);
  min-width: 0;
  padding: 0 calc(var(--ss-u) * 1.4);
  background: var(--ss-fond-haut);
  border-bottom: 1px solid var(--ss-filet);
  font-size: calc(var(--ss-u) * 1.7);
  white-space: nowrap;
}
.ss-marque { color: var(--ss-sourd); font-weight: 600; letter-spacing: 0.02em; }
.ss-mention {
  margin-left: calc(var(--ss-u) * -0.4);
  padding: calc(var(--ss-u) * 0.15) calc(var(--ss-u) * 0.6);
  border: 1px solid var(--ss-filet);
  border-radius: calc(var(--ss-u) * 0.5);
  color: var(--ss-sourd);
  font-size: calc(var(--ss-u) * 1.15);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.ss-patient { color: var(--ss-texte); font-weight: 600; overflow: hidden; text-overflow: ellipsis; max-width: calc(var(--ss-u) * 18); }
.ss-alarmes {
  flex: 1 1 auto;
  display: flex;
  justify-content: center;
  gap: calc(var(--ss-u) * 0.8);
  min-width: 0;
  overflow: hidden;
}
.ss-alarme {
  padding: calc(var(--ss-u) * 0.45) calc(var(--ss-u) * 1.2);
  border-radius: calc(var(--ss-u) * 0.5);
  font-size: calc(var(--ss-u) * 1.85);
  font-weight: 800;
  letter-spacing: 0.02em;
  color: #050505;
  overflow: hidden;
  text-overflow: ellipsis;
}
.ss-alarme-haute { background: var(--ss-haute); color: #ffffff; animation: ss-clignote 0.9s linear infinite; }
.ss-alarme-moyenne { background: var(--ss-moyenne); animation: ss-clignote 1.8s linear infinite; }
.ss-alarme-technique { background: var(--ss-technique); }
.ss-alarmes-silence .ss-alarme { animation: none; opacity: 0.6; }
.ss-silence {
  color: var(--ss-moyenne);
  font-weight: 700;
  font-size: calc(var(--ss-u) * 1.5);
}
.ss-heure { color: var(--ss-texte); font-weight: 600; }
.ss-temoin {
  display: inline-flex;
  align-items: center;
  gap: calc(var(--ss-u) * 0.5);
  color: var(--ss-sourd);
  font-size: calc(var(--ss-u) * 1.35);
}
.ss-temoin::before {
  content: "";
  width: calc(var(--ss-u) * 0.9);
  height: calc(var(--ss-u) * 0.9);
  border-radius: 50%;
  background: var(--ss-ecg);
  opacity: 0.8;
}
.ss-temoin-reconnexion { color: var(--ss-moyenne); }
.ss-temoin-reconnexion::before { background: var(--ss-moyenne); animation: ss-clignote 1s linear infinite; }
.ss-temoin-perdue { color: var(--ss-haute); }
.ss-temoin-perdue::before { background: var(--ss-haute); }

@keyframes ss-clignote {
  0%, 55% { opacity: 1; }
  56%, 100% { opacity: 0.28; }
}

/* ---------------------------------------------------------------- tracés et chiffres (une rangée par paramètre) */
.ss-corps {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  min-height: 0;
}
.ss-rangee {
  position: relative;
  flex: 1 1 0;
  min-height: 0;
  display: grid;
  grid-template-columns: minmax(0, 7fr) minmax(0, 3fr);
  border-bottom: 1px solid var(--ss-filet);
}
.ss-r-ecg { flex-grow: 1.35; color: var(--ss-ecg); }
.ss-r-pleth { color: var(--ss-pleth); }
.ss-r-pa { color: var(--ss-pa); }
.ss-r-co2 { color: var(--ss-co2); }
.ss-trace { position: relative; min-width: 0; min-height: 0; overflow: hidden; }
.ss-canvas {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: block;
}
.ss-etiquette {
  position: absolute;
  top: calc(var(--ss-u) * 0.5);
  left: calc(var(--ss-u) * 1);
  z-index: 1;
  display: flex;
  align-items: baseline;
  gap: calc(var(--ss-u) * 0.9);
  font-size: calc(var(--ss-u) * 1.7);
  font-weight: 700;
  pointer-events: none;
}
.ss-etiquette-detail { font-size: calc(var(--ss-u) * 1.3); font-weight: 500; opacity: 0.75; }
.ss-repere {
  position: absolute;
  left: 0;
  right: 0;
  height: 0;
  border-top: 1px dashed rgba(255, 45, 85, 0.22);
  pointer-events: none;
}
.ss-repere span {
  position: absolute;
  top: 0;
  right: calc(var(--ss-u) * 0.6);
  padding: 0 calc(var(--ss-u) * 0.3);
  transform: translateY(-50%);
  background: var(--ss-fond);
  font-size: calc(var(--ss-u) * 1.2);
  line-height: 1;
  color: rgba(255, 45, 85, 0.6);
}

.ss-num {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: calc(var(--ss-u) * 0.2);
  min-width: 0;
  min-height: 0;
  overflow: hidden;
  padding: calc(var(--ss-u) * 0.5) calc(var(--ss-u) * 1.4);
  border-left: 1px solid var(--ss-filet);
}
.ss-num-tete {
  display: flex;
  align-items: center;
  gap: calc(var(--ss-u) * 0.8);
  font-size: calc(var(--ss-u) * 1.85);
  font-weight: 700;
}
.ss-num-unite { font-size: calc(var(--ss-u) * 1.35); font-weight: 500; opacity: 0.75; }
.ss-num-corps {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: calc(var(--ss-u) * 1);
  min-width: 0;
}
.ss-num-val {
  font-size: calc(var(--ss-u) * 8.6);
  font-weight: 600;
  line-height: 0.95;
  letter-spacing: -0.02em;
  white-space: nowrap;
}
.ss-num-ecg .ss-num-val { font-size: calc(var(--ss-u) * 10.4); }
.ss-num-pa .ss-num-val { font-size: calc(var(--ss-u) * 6.2); }
.ss-num-co2 .ss-num-val { font-size: calc(var(--ss-u) * 6.4); }
.ss-num-lim {
  align-self: flex-start;
  display: flex;
  flex-direction: column;
  margin-right: auto;
  font-size: calc(var(--ss-u) * 1.35);
  line-height: 1.25;
  opacity: 0.7;
}
.ss-coeur {
  width: calc(var(--ss-u) * 2.1);
  height: calc(var(--ss-u) * 2.1);
  fill: currentColor;
  opacity: 0.22;
  transition: opacity 0.08s linear;
}
.ss-coeur.ss-bat { opacity: 1; }
.ss-perf {
  position: relative;
  flex: 0 0 auto;
  width: calc(var(--ss-u) * 1.1);
  height: calc(var(--ss-u) * 7);
  overflow: hidden;
  border: 1px solid currentColor;
  border-radius: 2px;
  opacity: 0.85;
}
.ss-perf-jauge {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  height: 100%;
  background: currentColor;
  transform-origin: 50% 100%;
  transform: scaleY(0);
}
.ss-pa-vals { display: flex; flex-direction: column; align-items: flex-end; }
.ss-num-moy { font-size: calc(var(--ss-u) * 3.6); font-weight: 600; }
.ss-num-fr {
  display: flex;
  align-items: baseline;
  justify-content: flex-end;
  gap: calc(var(--ss-u) * 0.7);
  font-size: calc(var(--ss-u) * 1.7);
  font-weight: 700;
}
.ss-fr-val { font-size: calc(var(--ss-u) * 3.6); font-weight: 600; }

/* ligne PNI (mode pression non invasive) : occupe toute la rangée de la PA */
.ss-pni-ligne {
  grid-column: 1 / -1;
  display: none;
  align-items: center;
  gap: calc(var(--ss-u) * 3);
  min-width: 0;
  padding: 0 calc(var(--ss-u) * 1.4);
  color: var(--ss-pni);
}
.ss-pni .ss-trace,
.ss-pni .ss-num { display: none; }
.ss-pni .ss-pni-ligne { display: flex; }
.ss-r-pa.ss-pni { color: var(--ss-pni); }
.ss-pni-tete { display: flex; flex-direction: column; gap: calc(var(--ss-u) * 0.3); font-size: calc(var(--ss-u) * 1.85); font-weight: 700; }
.ss-pni-vals { display: flex; align-items: baseline; gap: calc(var(--ss-u) * 1.4); white-space: nowrap; }
.ss-pni-val { font-size: calc(var(--ss-u) * 7.4); font-weight: 600; letter-spacing: -0.02em; line-height: 1; }
.ss-pni-moy { font-size: calc(var(--ss-u) * 4.4); font-weight: 600; }
.ss-pni-infos {
  display: flex;
  flex-direction: column;
  gap: calc(var(--ss-u) * 0.35);
  margin-left: auto;
  min-width: 0;
  font-size: calc(var(--ss-u) * 1.7);
  text-align: right;
  white-space: nowrap;
}
.ss-pni-heure { font-weight: 600; }
.ss-pni-mode { opacity: 0.8; }
.ss-pni-statut { font-weight: 700; min-height: 1.1em; }
.ss-pni-en-cours .ss-pni-statut { color: var(--ss-texte); }
.ss-pni-en-cours .ss-pni-vals { opacity: 0.45; }
.ss-pni-erreur .ss-pni-statut { color: var(--ss-moyenne); }

/* ---------------------------------------------------------------- bas d'écran */
.ss-bas {
  flex: 0 0 calc(var(--ss-u) * 11);
  display: flex;
  align-items: stretch;
  gap: calc(var(--ss-u) * 1);
  min-width: 0;
  padding: calc(var(--ss-u) * 0.7) calc(var(--ss-u) * 1.4);
  background: var(--ss-fond-haut);
  font-size: calc(var(--ss-u) * 1.55);
}
.ss-tendances { flex: 1 1 auto; display: flex; min-width: 0; overflow: hidden; }
.ss-tend-noms { flex: 0 0 auto; padding-right: calc(var(--ss-u) * 1); font-weight: 700; }
.ss-tend-cols { flex: 1 1 auto; display: flex; justify-content: flex-end; min-width: 0; overflow: hidden; }
.ss-tend-col {
  flex: 0 0 auto;
  padding: 0 calc(var(--ss-u) * 0.9);
  border-left: 1px solid var(--ss-filet);
  text-align: right;
}
.ss-tend-c {
  height: calc(var(--ss-u) * 2.35);
  line-height: calc(var(--ss-u) * 2.35);
  white-space: nowrap;
}
.ss-tend-heure { color: var(--ss-texte); }
.ss-tend-fc { color: var(--ss-ecg); }
.ss-tend-spo2 { color: var(--ss-pleth); }
.ss-tend-pa { color: var(--ss-pni); }
.ss-case {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-width: calc(var(--ss-u) * 10);
  padding: 0 calc(var(--ss-u) * 1.4);
  border-left: 1px solid var(--ss-filet);
  color: var(--ss-texte);
}
.ss-case-tete { display: flex; align-items: baseline; gap: calc(var(--ss-u) * 0.6); font-weight: 700; }
.ss-case-unite { font-weight: 500; opacity: 0.75; font-size: calc(var(--ss-u) * 1.3); }
.ss-case-val { font-size: calc(var(--ss-u) * 4.6); font-weight: 600; text-align: right; white-space: nowrap; }
.ss-case-fr { color: var(--ss-co2); }
.ss-boutons {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: calc(var(--ss-u) * 0.6);
  padding-left: calc(var(--ss-u) * 1);
  border-left: 1px solid var(--ss-filet);
}
.ss-bouton {
  min-height: calc(var(--ss-u) * 4.2);
  padding: 0 calc(var(--ss-u) * 1.6);
  border: 1px solid rgba(242, 242, 242, 0.28);
  border-radius: calc(var(--ss-u) * 0.7);
  background: rgba(242, 242, 242, 0.07);
  color: var(--ss-texte);
  font: inherit;
  font-size: calc(var(--ss-u) * 1.65);
  font-weight: 700;
  cursor: pointer;
  touch-action: manipulation;
  -webkit-appearance: none;
  appearance: none;
}
.ss-bouton:active { background: rgba(242, 242, 242, 0.2); }
.ss-bouton:disabled { opacity: 0.45; cursor: default; }
.ss-bouton:focus-visible { outline: 2px solid var(--ss-technique); outline-offset: 2px; }
.ss-bouton-pni { color: var(--ss-pni); border-color: rgba(255, 111, 174, 0.55); }

/* ---------------------------------------------------------------- attente et portrait */
.ss-attente {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 5;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(5, 5, 5, 0.86);
  color: var(--ss-sourd);
  font-size: calc(var(--ss-u) * 2.6);
  font-weight: 600;
}
.ss-portrait .ss-bas { flex-basis: auto; flex-wrap: wrap; row-gap: calc(var(--ss-u) * 0.8); }
.ss-portrait .ss-tendances { flex-basis: 100%; }
.ss-portrait .ss-mention { display: none; }
