/* ============================================================
   Démos animées — bâties sur les captures réelles de l'application
   (générées par gen_demos.py — modifier le script, pas ce fichier)
   v2 — 30 septembre 2026 : nouveau logo, séquence « du plan au prix »,
   capsule assemblages, démos des modules plus longues avec légendes.
   ============================================================ */

/* ---------- Composants communs ---------- */
.demo { --cursor: 20px; }
.demo-body { position: relative; }
.demo-stage {
  position: relative;
  width: 100%;
  aspect-ratio: var(--ar, 16 / 9);
  overflow: hidden;
  background: #eef1f0;
  contain: layout paint;
}
.demo-layer { position: absolute; inset: 0; }
.demo-layer picture { display: block; width: 100%; height: 100%; }
.demo-layer img,
.demo-layer picture img {
  display: block;
  width: 100%;
  height: 100%;
  max-width: none;
  object-fit: cover;
  object-position: 50% 0;
  background: transparent;
}
.demo-zoom {
  position: absolute;
  inset: 0;
  transform-origin: var(--ox, 50%) var(--oy, 50%);
  will-change: transform;
}
.demo-cursor {
  position: absolute;
  left: 50%;
  top: 50%;
  width: var(--cursor);
  height: calc(var(--cursor) * 1.2);
  z-index: 12;
  pointer-events: none;
  filter: drop-shadow(0 1px 1.5px rgba(0, 0, 0, 0.55));
  animation-timing-function: ease-in-out;
  animation-iteration-count: infinite;
}
.demo-cursor svg { display: block; width: 100%; height: 100%; }
.demo-cursor::before {
  content: "";
  position: absolute;
  left: calc(var(--cursor) * 0.1 - 11px);
  top: calc(var(--cursor) * 0.1 - 11px);
  width: 22px;
  height: 22px;
  border: 2px solid var(--gold-bright, #e3b565);
  border-radius: 50%;
  opacity: 0;
  transform: scale(0.3);
  animation-iteration-count: infinite;
  animation-timing-function: ease-out;
}
.demo-anim, .demo-anim::before, .demo-anim::after { animation-iteration-count: infinite; }

/* Légendes courtes : une phrase à la fois, en bas à gauche de la scène */
.demo-cap {
  position: absolute;
  left: 2.2%;
  bottom: 3.5%;
  max-width: 62%;
  z-index: 11;
  padding: 0.5em 0.9em;
  border-radius: 4px;
  background: rgba(8, 14, 20, 0.86);
  color: var(--paper, #eef1f0);
  font-family: var(--font-body, sans-serif);
  font-size: clamp(0.72rem, 1.35vw, 0.98rem);
  line-height: 1.35;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.35);
  border-left: 3px solid var(--gold, #c8973f);
  opacity: 0;
  pointer-events: none;
}
.demo-cap b { color: var(--gold-bright, #e3b565); font-weight: 600; }
.demo-cap.is-right { left: auto; right: 2.2%; }
.demo-cap.is-top { bottom: auto; top: 3.5%; }

/* Section « Du plan au prix » (accueil) : la démo pleine largeur, puis les cinq étapes */
.section-plan-prix .section-head { max-width: 68ch; }
.section-plan-prix .plan-prix-demo .module-shot { max-width: 1040px; margin-top: 0; }
.plan-prix-steps {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 18px;
  margin-top: 28px;
  max-width: 1040px;
}
.plan-prix-steps li {
  display: flex;
  flex-direction: column;
  gap: 8px;
  padding: 16px 16px 18px;
  border: 1px solid var(--steel-line);
  border-top: 2px solid var(--gold);
  border-radius: var(--radius);
  background: var(--steel-surface);
  font-size: 0.9rem;
  color: var(--paper-dim);
  line-height: 1.45;
}
.plan-prix-steps .num {
  font-family: var(--font-mono);
  font-size: 0.78rem;
  letter-spacing: 0.1em;
  color: var(--gold);
}
@media (max-width: 1000px) { .plan-prix-steps { grid-template-columns: repeat(3, 1fr); } }
@media (max-width: 640px) { .plan-prix-steps { grid-template-columns: 1fr; gap: 10px; } .plan-prix-steps li { flex-direction: row; gap: 12px; } }

/* Pause au survol (et quand la démo est hors écran — classe posée par main.js) */
.demo:hover *, .demo:hover *::before, .demo:hover *::after,
.demo.is-off *, .demo.is-off *::before, .demo.is-off *::after { animation-play-state: paused; }

.demo figcaption .pause-hint { color: var(--steel-line); }
@media (hover: none) { .demo figcaption .pause-hint { display: none; } }


/* ---------- Héros : carrousel des six modules ---------- */
.hc-stage { --ar: 2 / 1; }
.shot-bar .hc-titles { position: relative; flex: 1; min-width: 0; margin-left: 8px; font-size: 0.66rem; height: 1.5em; }
.shot-bar .hc-titles em {
  position: absolute; inset: 0; margin-left: 0; line-height: 1.5em; font-size: inherit;
  opacity: 0;
  animation: hcTab 33s infinite;
  animation-delay: calc(var(--i) * 5.5s);
}
.shot-bar .hc-titles em.is-first { opacity: 1; animation-name: hcTab0; }
.hc-tabs {
  display: flex;
  height: 36px;
  background: var(--ink);
  border-bottom: 1px solid var(--steel-line);
}
.hc-tab {
  position: relative;
  flex: 1 1 0%;
  min-width: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-inline: 4px;
  font-family: var(--font-mono);
  font-size: 0.6rem;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--paper-faint);
  white-space: nowrap;
  overflow: hidden;
  animation: hcTabColor 33s infinite;
  animation-delay: calc(var(--i) * 5.5s);
}
.hc-tab .s { display: none; }
.hc-tab::after {
  content: "";
  position: absolute;
  left: 10%;
  right: 10%;
  bottom: 0;
  height: 2px;
  background: var(--gold);
  opacity: 0;
  animation: hcTab 33s infinite;
  animation-delay: calc(var(--i) * 5.5s);
}
.hc-tab.is-first { color: var(--paper); animation-name: hcTabColor0; }
.hc-tab.is-first::after { opacity: 1; animation-name: hcTab0; }
.hc-slide {
  opacity: 0;
  animation: hcShow 33s infinite;
  animation-delay: calc(var(--i) * 5.5s);
  will-change: opacity;
}
.hc-slide img {
  object-position: var(--from, 50% 0%);
  transform-origin: var(--ox, 50%) var(--oy, 50%);
  animation: hcPan 33s infinite;
  animation-delay: calc(var(--i) * 5.5s);
  will-change: transform;
}
.hc-slide.is-first { opacity: 1; animation-name: hcShow0; }
.hc-cursor { animation-name: hcCursor; animation-duration: 33s; }
.hc-cursor::before { animation-name: hcClick; animation-duration: 33s; }
@media (max-width: 640px) {
  .hc-tab .l { display: none; }
  .hc-tab .s { display: inline; }
  .hc-tabs { height: 30px; }
  .hc-tab { font-size: 0.56rem; letter-spacing: 0.05em; }
}

@keyframes hcShow {
  0.000% { opacity: 0; }
  2.424% { opacity: 1; }
  19.091% { opacity: 1; }
  21.515% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes hcShow0 {
  0.000% { opacity: 1; }
  19.091% { opacity: 1; }
  19.121% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes hcTab {
  0.000% { opacity: 0; }
  1.515% { opacity: 1; }
  16.667% { opacity: 1; }
  18.182% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes hcTab0 {
  0.000% { opacity: 1; }
  16.667% { opacity: 1; }
  18.182% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes hcTabColor {
  0.000% { color: var(--paper-faint); }
  1.515% { color: var(--paper); }
  16.667% { color: var(--paper); }
  18.182% { color: var(--paper-faint); }
  100.000% { color: var(--paper-faint); }
}
@keyframes hcTabColor0 {
  0.000% { color: var(--paper); }
  16.667% { color: var(--paper); }
  18.182% { color: var(--paper-faint); }
  100.000% { color: var(--paper-faint); }
}
@keyframes hcPan {
  0.000% { object-position: var(--from, 50% 0%); transform: scale(1); animation-timing-function: ease-in-out; }
  19.091% { object-position: var(--to, 50% 100%); transform: scale(var(--z, 1)); }
  100.000% { object-position: var(--to, 50% 100%); transform: scale(var(--z, 1)); }
}
@keyframes hcCursor {
  0.000% { left: 8.33%; top: 18px; }
  1.515% { left: 8.33%; top: 18px; }
  4.242% { left: 32.00%; top: calc(36px + 0.720 * (100% - 36px)); }
  7.576% { left: 32.00%; top: calc(36px + 0.720 * (100% - 36px)); }
  10.606% { left: 80.00%; top: calc(36px + 0.720 * (100% - 36px)); }
  13.030% { left: 80.00%; top: calc(36px + 0.720 * (100% - 36px)); }
  14.848% { left: 25.00%; top: 18px; }
  16.664% { left: 25.00%; top: 18px; }
  16.667% { left: 25.00%; top: 18px; }
  18.182% { left: 25.00%; top: 18px; }
  20.909% { left: 45.00%; top: calc(36px + 0.620 * (100% - 36px)); }
  24.242% { left: 45.00%; top: calc(36px + 0.620 * (100% - 36px)); }
  27.273% { left: 92.00%; top: calc(36px + 0.720 * (100% - 36px)); }
  29.697% { left: 92.00%; top: calc(36px + 0.720 * (100% - 36px)); }
  31.515% { left: 41.67%; top: 18px; }
  33.330% { left: 41.67%; top: 18px; }
  33.333% { left: 41.67%; top: 18px; }
  34.848% { left: 41.67%; top: 18px; }
  37.576% { left: 31.00%; top: calc(36px + 0.400 * (100% - 36px)); }
  40.909% { left: 31.00%; top: calc(36px + 0.400 * (100% - 36px)); }
  43.939% { left: 42.00%; top: calc(36px + 0.780 * (100% - 36px)); }
  46.364% { left: 42.00%; top: calc(36px + 0.780 * (100% - 36px)); }
  48.182% { left: 58.33%; top: 18px; }
  49.997% { left: 58.33%; top: 18px; }
  50.000% { left: 58.33%; top: 18px; }
  51.515% { left: 58.33%; top: 18px; }
  54.242% { left: 12.00%; top: calc(36px + 0.500 * (100% - 36px)); }
  57.576% { left: 12.00%; top: calc(36px + 0.500 * (100% - 36px)); }
  60.606% { left: 83.00%; top: calc(36px + 0.700 * (100% - 36px)); }
  63.030% { left: 83.00%; top: calc(36px + 0.700 * (100% - 36px)); }
  64.848% { left: 75.00%; top: 18px; }
  66.664% { left: 75.00%; top: 18px; }
  66.667% { left: 75.00%; top: 18px; }
  68.182% { left: 75.00%; top: 18px; }
  70.909% { left: 38.00%; top: calc(36px + 0.550 * (100% - 36px)); }
  74.242% { left: 38.00%; top: calc(36px + 0.550 * (100% - 36px)); }
  77.273% { left: 86.00%; top: calc(36px + 0.350 * (100% - 36px)); }
  79.697% { left: 86.00%; top: calc(36px + 0.350 * (100% - 36px)); }
  81.515% { left: 91.67%; top: 18px; }
  83.330% { left: 91.67%; top: 18px; }
  83.333% { left: 91.67%; top: 18px; }
  84.848% { left: 91.67%; top: 18px; }
  87.576% { left: 27.00%; top: calc(36px + 0.160 * (100% - 36px)); }
  90.909% { left: 27.00%; top: calc(36px + 0.160 * (100% - 36px)); }
  93.939% { left: 30.00%; top: calc(36px + 0.460 * (100% - 36px)); }
  96.364% { left: 30.00%; top: calc(36px + 0.460 * (100% - 36px)); }
  98.182% { left: 8.33%; top: 18px; }
  99.997% { left: 8.33%; top: 18px; }
}
@keyframes hcClick {
  0.000% { opacity: 0; transform: scale(0.3); }
  15.727% { opacity: 0; transform: scale(0.3); }
  15.758% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  17.030% { opacity: 0; transform: scale(1.7); }
  32.394% { opacity: 0; transform: scale(0.3); }
  32.424% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  33.697% { opacity: 0; transform: scale(1.7); }
  49.061% { opacity: 0; transform: scale(0.3); }
  49.091% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  50.364% { opacity: 0; transform: scale(1.7); }
  65.727% { opacity: 0; transform: scale(0.3); }
  65.758% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  67.030% { opacity: 0; transform: scale(1.7); }
  82.394% { opacity: 0; transform: scale(0.3); }
  82.424% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  83.697% { opacity: 0; transform: scale(1.7); }
  99.061% { opacity: 0; transform: scale(0.3); }
  99.091% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  100.000% { opacity: 0; transform: scale(0.3); }
  100.000% { opacity: 0; transform: scale(1.7); }
}

/* ---------- Du plan au prix : une mesure sur le plan devient des lignes de coût ---------- */
.demo-pp .demo-stage { --ar: 1400 / 868; }
.demo-pp .demo-cursor { animation-name: ppCursor; animation-duration: 42s; --cursor: 17px; }
.demo-pp .demo-cursor::before { animation-name: ppClick; animation-duration: 42s; }
.pp-trace { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 5; }
.pp-trace polyline {
  fill: none;
  stroke: var(--gold-bright, #e3b565);
  stroke-width: 5;
  stroke-linejoin: round;
  stroke-linecap: round;
  stroke-dasharray: 1270 1270;
  stroke-dashoffset: 1270;
  animation: ppTrace 42s infinite;
}
.pp-trace circle { fill: var(--gold-bright, #e3b565); stroke: #fff; stroke-width: 2; opacity: 0; }
.pp-trace .v1 { animation: ppV1 42s infinite; }
.pp-trace .v2 { animation: ppV2 42s infinite; }
.pp-trace .v3 { animation: ppV3 42s infinite; }
.pp-trace .v4 { animation: ppV4 42s infinite; }

.pp-f1 { opacity: 0; animation: pppp-f1 42s infinite; will-change: opacity; }
.pp-f2 { opacity: 0; animation: pppp-f2 42s infinite; will-change: opacity; }
.pp-f3 { opacity: 0; animation: pppp-f3 42s infinite; will-change: opacity; }
.pp-f4 { opacity: 0; animation: pppp-f4 42s infinite; will-change: opacity; }
.pp-f5 { opacity: 0; animation: pppp-f5 42s infinite; will-change: opacity; }
.pp-f6 { opacity: 0; animation: pppp-f6 42s infinite; will-change: opacity; }
.pp-f8 { opacity: 0; animation: pppp-f8 42s infinite; will-change: opacity; }
.pp-f1b { opacity: 0; animation: pppp-f1b 42s infinite; will-change: opacity; }
@keyframes pppp-f1 {
  0.000% { opacity: 1; }
  21.429% { opacity: 1; }
  22.619% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-f2 {
  0.000% { opacity: 0; }
  20.238% { opacity: 0; }
  21.429% { opacity: 1; }
  29.524% { opacity: 1; }
  30.714% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-f3 {
  0.000% { opacity: 0; }
  28.333% { opacity: 0; }
  29.524% { opacity: 1; }
  36.190% { opacity: 1; }
  37.381% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-f4 {
  0.000% { opacity: 0; }
  35.000% { opacity: 0; }
  36.190% { opacity: 1; }
  51.429% { opacity: 1; }
  52.619% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-f5 {
  0.000% { opacity: 0; }
  50.238% { opacity: 0; }
  51.429% { opacity: 1; }
  58.571% { opacity: 1; }
  59.762% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-f6 {
  0.000% { opacity: 0; }
  57.381% { opacity: 0; }
  58.571% { opacity: 1; }
  68.095% { opacity: 1; }
  69.286% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-f8 {
  0.000% { opacity: 0; }
  66.905% { opacity: 0; }
  68.095% { opacity: 1; }
  95.238% { opacity: 1; }
  96.429% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-f1b {
  0.000% { opacity: 0; }
  94.048% { opacity: 0; }
  95.238% { opacity: 1; }
  100.000% { opacity: 1; }
  100.000% { opacity: 1; }
}
@keyframes ppCursor {
  0.000% { left: 6.00%; top: 26.00%; }
  1.905% { left: 6.00%; top: 26.00%; }
  3.810% { left: 22.86%; top: 49.19%; }
  4.762% { left: 22.86%; top: 49.19%; animation-timing-function: linear; }
  10.000% { left: 59.21%; top: 49.19%; animation-timing-function: linear; }
  12.619% { left: 59.21%; top: 78.00%; animation-timing-function: linear; }
  17.857% { left: 22.86%; top: 78.00%; }
  18.810% { left: 22.86%; top: 78.00%; }
  21.190% { left: 93.00%; top: 74.00%; }
  22.381% { left: 93.00%; top: 74.00%; }
  26.667% { left: 89.70%; top: 89.50%; }
  28.571% { left: 89.70%; top: 89.50%; }
  30.238% { left: 89.70%; top: 89.50%; }
  33.333% { left: 40.00%; top: 61.20%; }
  35.238% { left: 40.00%; top: 61.20%; }
  36.667% { left: 40.00%; top: 61.20%; }
  40.000% { left: 60.00%; top: 49.00%; }
  41.429% { left: 60.00%; top: 49.00%; }
  43.333% { left: 54.00%; top: 73.60%; }
  44.286% { left: 54.00%; top: 73.60%; }
  46.190% { left: 54.00%; top: 78.70%; }
  47.143% { left: 54.00%; top: 78.70%; }
  49.048% { left: 54.00%; top: 83.80%; }
  50.952% { left: 54.00%; top: 83.80%; }
  54.762% { left: 72.00%; top: 61.00%; }
  57.619% { left: 72.00%; top: 61.00%; }
  60.952% { left: 60.00%; top: 55.00%; }
  63.333% { left: 62.00%; top: 78.00%; }
  65.000% { left: 62.00%; top: 78.00%; }
  66.667% { left: 68.60%; top: 90.30%; }
  68.095% { left: 68.60%; top: 90.30%; }
  72.619% { left: 28.00%; top: 48.50%; }
  76.190% { left: 28.00%; top: 48.50%; }
  79.762% { left: 93.60%; top: 48.50%; }
  83.333% { left: 93.60%; top: 48.50%; }
  88.095% { left: 55.00%; top: 62.00%; }
  92.857% { left: 55.00%; top: 62.00%; }
  97.619% { left: 6.00%; top: 26.00%; }
  100.000% { left: 6.00%; top: 26.00%; }
}
@keyframes ppClick {
  0.000% { opacity: 0; transform: scale(0.3); }
  2.357% { opacity: 0; transform: scale(0.3); }
  2.381% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  3.381% { opacity: 0; transform: scale(1.7); }
  4.738% { opacity: 0; transform: scale(0.3); }
  4.762% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  5.762% { opacity: 0; transform: scale(1.7); }
  9.976% { opacity: 0; transform: scale(0.3); }
  10.000% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  11.000% { opacity: 0; transform: scale(1.7); }
  12.595% { opacity: 0; transform: scale(0.3); }
  12.619% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  13.619% { opacity: 0; transform: scale(1.7); }
  17.833% { opacity: 0; transform: scale(0.3); }
  17.857% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  18.310% { opacity: 0; transform: scale(0.3); }
  18.333% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  18.857% { opacity: 0; transform: scale(1.7); }
  19.333% { opacity: 0; transform: scale(1.7); }
  21.405% { opacity: 0; transform: scale(0.3); }
  21.429% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  22.429% { opacity: 0; transform: scale(1.7); }
  28.548% { opacity: 0; transform: scale(0.3); }
  28.571% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  29.571% { opacity: 0; transform: scale(1.7); }
  35.214% { opacity: 0; transform: scale(0.3); }
  35.238% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  36.238% { opacity: 0; transform: scale(1.7); }
  44.262% { opacity: 0; transform: scale(0.3); }
  44.286% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  45.286% { opacity: 0; transform: scale(1.7); }
  47.119% { opacity: 0; transform: scale(0.3); }
  47.143% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  48.143% { opacity: 0; transform: scale(1.7); }
  50.929% { opacity: 0; transform: scale(0.3); }
  50.952% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  51.952% { opacity: 0; transform: scale(1.7); }
  67.357% { opacity: 0; transform: scale(0.3); }
  67.381% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  68.381% { opacity: 0; transform: scale(1.7); }
  100.000% { opacity: 0; transform: scale(0.3); }
}
@keyframes ppTrace {
  0.000% { stroke-dashoffset: 1270; opacity: 1; }
  4.762% { stroke-dashoffset: 1270; opacity: 1; animation-timing-function: linear; }
  17.857% { stroke-dashoffset: 0; opacity: 1; }
  20.952% { stroke-dashoffset: 0; opacity: 1; }
  22.143% { stroke-dashoffset: 0; opacity: 0; }
  99.976% { stroke-dashoffset: 0; opacity: 0; }
  100.000% { stroke-dashoffset: 1270; opacity: 0; }
}
@keyframes ppV1 {
  0.000% { opacity: 0; }
  4.738% { opacity: 0; }
  4.762% { opacity: 1; }
  20.952% { opacity: 1; }
  22.143% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes ppV2 {
  0.000% { opacity: 0; }
  9.976% { opacity: 0; }
  10.000% { opacity: 1; }
  20.952% { opacity: 1; }
  22.143% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes ppV3 {
  0.000% { opacity: 0; }
  12.595% { opacity: 0; }
  12.619% { opacity: 1; }
  20.952% { opacity: 1; }
  22.143% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes ppV4 {
  0.000% { opacity: 0; }
  17.833% { opacity: 0; }
  17.857% { opacity: 1; }
  20.952% { opacity: 1; }
  22.143% { opacity: 0; }
  100.000% { opacity: 0; }
}
.pp-c1 { animation: pppp-c1 42s infinite; }
.pp-c2 { animation: pppp-c2 42s infinite; }
.pp-c3 { animation: pppp-c3 42s infinite; }
.pp-c4 { animation: pppp-c4 42s infinite; }
.pp-c5 { animation: pppp-c5 42s infinite; }
@keyframes pppp-c1 {
  0.000% { opacity: 0; }
  0.476% { opacity: 0; }
  1.429% { opacity: 1; }
  20.000% { opacity: 1; }
  20.952% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-c2 {
  0.000% { opacity: 0; }
  20.952% { opacity: 0; }
  21.905% { opacity: 1; }
  34.762% { opacity: 1; }
  35.714% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-c3 {
  0.000% { opacity: 0; }
  36.190% { opacity: 0; }
  37.143% { opacity: 1; }
  57.143% { opacity: 1; }
  58.095% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-c4 {
  0.000% { opacity: 0; }
  58.095% { opacity: 0; }
  59.048% { opacity: 1; }
  67.143% { opacity: 1; }
  68.095% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes pppp-c5 {
  0.000% { opacity: 0; }
  69.048% { opacity: 0; }
  70.000% { opacity: 1; }
  93.810% { opacity: 1; }
  94.762% { opacity: 0; }
  100.000% { opacity: 0; }
}

/* ---------- Module 01 : base de données ---------- */
.demo-bd .demo-stage { --ar: 1400 / 868; }
.demo-bd .demo-zoom { --ox: 65%; --oy: 45%; animation: bdZoom 14s ease-in-out infinite; }
.demo-bd .demo-cursor { animation-name: bdCursor; animation-duration: 14s; --cursor: 18px; }
.bd-band {
  position: absolute;
  left: 15.9%;
  right: 3.4%;
  height: 4.38%;
  top: 40.7%;
  background: rgba(200, 151, 63, 0.16);
  box-shadow: inset 3px 0 0 var(--gold);
  opacity: 0;
  animation: bdBand 14s infinite;
}

@keyframes bdZoom {
  0.000% { transform: scale(1); }
  50.000% { transform: scale(1.10); }
  100.000% { transform: scale(1); }
}
@keyframes bdCursor {
  0.000% { left: 55.00%; top: 20.00%; }
  7.143% { left: 38.00%; top: 42.86%; }
  11.429% { left: 38.00%; top: 42.86%; }
  15.714% { left: 40.00%; top: 47.24%; }
  20.000% { left: 37.00%; top: 51.61%; }
  24.286% { left: 42.00%; top: 55.99%; }
  28.571% { left: 39.00%; top: 60.37%; }
  32.857% { left: 41.00%; top: 64.75%; }
  37.143% { left: 38.00%; top: 69.12%; }
  46.429% { left: 38.00%; top: 69.12%; }
  53.571% { left: 92.40%; top: 32.50%; }
  64.286% { left: 92.40%; top: 32.50%; }
  71.429% { left: 43.50%; top: 32.50%; }
  82.143% { left: 43.50%; top: 32.50%; }
  89.286% { left: 55.00%; top: 20.00%; }
  100.000% { left: 55.00%; top: 20.00%; }
}
@keyframes bdBand {
  0.000% { opacity: 0; top: 40.67%; }
  7.071% { opacity: 0; top: 40.67%; }
  7.143% { opacity: 1; top: 40.67%; }
  15.643% { opacity: 1; top: 40.67%; }
  15.714% { opacity: 1; top: 45.05%; }
  19.929% { opacity: 1; top: 45.05%; }
  20.000% { opacity: 1; top: 49.42%; }
  24.214% { opacity: 1; top: 49.42%; }
  24.286% { opacity: 1; top: 53.80%; }
  28.500% { opacity: 1; top: 53.80%; }
  28.571% { opacity: 1; top: 58.18%; }
  32.786% { opacity: 1; top: 58.18%; }
  32.857% { opacity: 1; top: 62.56%; }
  37.071% { opacity: 1; top: 62.56%; }
  37.143% { opacity: 1; top: 66.94%; }
  46.429% { opacity: 1; top: 66.94%; }
  49.286% { opacity: 0; top: 66.94%; }
  100.000% { opacity: 0; top: 40.67%; }
}
.bd-c1 { animation: bdbd-c1 14s infinite; }
.bd-c2 { animation: bdbd-c2 14s infinite; }
@keyframes bdbd-c1 {
  0.000% { opacity: 0; }
  2.857% { opacity: 0; }
  5.714% { opacity: 1; }
  45.714% { opacity: 1; }
  48.571% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes bdbd-c2 {
  0.000% { opacity: 0; }
  50.000% { opacity: 0; }
  52.857% { opacity: 1; }
  87.143% { opacity: 1; }
  90.000% { opacity: 0; }
  100.000% { opacity: 0; }
}

/* ---------- Module 03 : appels d'offres ---------- */
.demo-ao .demo-stage { --ar: 1400 / 868; }
.demo-ao .demo-cursor { animation-name: aoCursor; animation-duration: 16s; }
.demo-ao .demo-cursor::before { animation-name: aoClick; animation-duration: 16s; }

.ao-f1 { opacity: 0; animation: aoao-f1 16s infinite; will-change: opacity; }
.ao-f2 { opacity: 0; animation: aoao-f2 16s infinite; will-change: opacity; }
.ao-f1b { opacity: 0; animation: aoao-f1b 16s infinite; will-change: opacity; }
@keyframes aoao-f1 {
  0.000% { opacity: 1; }
  25.000% { opacity: 1; }
  28.125% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes aoao-f2 {
  0.000% { opacity: 0; }
  21.875% { opacity: 0; }
  25.000% { opacity: 1; }
  91.250% { opacity: 1; }
  94.375% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes aoao-f1b {
  0.000% { opacity: 0; }
  88.125% { opacity: 0; }
  91.250% { opacity: 1; }
  100.000% { opacity: 1; }
  100.000% { opacity: 1; }
}
@keyframes aoCursor {
  0.000% { left: 60.00%; top: 75.00%; }
  6.250% { left: 60.00%; top: 75.00%; }
  16.250% { left: 32.00%; top: 52.20%; }
  21.250% { left: 32.00%; top: 52.20%; }
  27.500% { left: 32.00%; top: 52.20%; }
  35.000% { left: 18.30%; top: 41.60%; }
  38.750% { left: 18.30%; top: 41.60%; }
  43.125% { left: 25.00%; top: 41.60%; }
  46.250% { left: 25.00%; top: 41.60%; }
  50.625% { left: 31.20%; top: 41.60%; }
  55.000% { left: 31.20%; top: 41.60%; }
  61.250% { left: 30.00%; top: 77.00%; }
  65.000% { left: 30.00%; top: 77.00%; }
  68.750% { left: 30.00%; top: 85.00%; }
  72.500% { left: 30.00%; top: 85.00%; }
  78.750% { left: 22.00%; top: 47.50%; }
  83.750% { left: 22.00%; top: 47.50%; }
  90.000% { left: 60.00%; top: 75.00%; }
  100.000% { left: 60.00%; top: 75.00%; }
}
@keyframes aoClick {
  0.000% { opacity: 0; transform: scale(0.3); }
  22.438% { opacity: 0; transform: scale(0.3); }
  22.500% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  25.125% { opacity: 0; transform: scale(1.7); }
  53.062% { opacity: 0; transform: scale(0.3); }
  53.125% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  55.750% { opacity: 0; transform: scale(1.7); }
  100.000% { opacity: 0; transform: scale(0.3); }
}
.ao-c1 { animation: aoao-c1 16s infinite; }
.ao-c2 { animation: aoao-c2 16s infinite; }
.ao-c3 { animation: aoao-c3 16s infinite; }
@keyframes aoao-c1 {
  0.000% { opacity: 0; }
  1.250% { opacity: 0; }
  3.750% { opacity: 1; }
  21.250% { opacity: 1; }
  23.750% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes aoao-c2 {
  0.000% { opacity: 0; }
  26.250% { opacity: 0; }
  28.750% { opacity: 1; }
  57.500% { opacity: 1; }
  60.000% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes aoao-c3 {
  0.000% { opacity: 0; }
  58.750% { opacity: 0; }
  61.250% { opacity: 1; }
  87.500% { opacity: 1; }
  90.000% { opacity: 0; }
  100.000% { opacity: 0; }
}

/* ---------- Module 04 : rapports ---------- */
.demo-rapports .demo-stage { --ar: 1400 / 868; }
.demo-rapports .demo-zoom { --ox: 78%; --oy: 74%; animation: rpZoom 17s ease-in-out infinite; }
.demo-rapports .demo-cursor { animation-name: rpCursor; animation-duration: 17s; --cursor: 18px; }
.demo-rapports .demo-cursor::before { animation-name: rpClick; animation-duration: 17s; }

.rp-f1 { opacity: 0; animation: rprp-f1 17s infinite; will-change: opacity; }
.rp-f2 { opacity: 0; animation: rprp-f2 17s infinite; will-change: opacity; }
.rp-f1b { opacity: 0; animation: rprp-f1b 17s infinite; will-change: opacity; }
@keyframes rprp-f1 {
  0.000% { opacity: 1; }
  29.412% { opacity: 1; }
  32.353% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes rprp-f2 {
  0.000% { opacity: 0; }
  26.471% { opacity: 0; }
  29.412% { opacity: 1; }
  91.765% { opacity: 1; }
  94.706% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes rprp-f1b {
  0.000% { opacity: 0; }
  88.824% { opacity: 0; }
  91.765% { opacity: 1; }
  100.000% { opacity: 1; }
  100.000% { opacity: 1; }
}
@keyframes rpZoom {
  0.000% { transform: scale(1); }
  44.118% { transform: scale(1); }
  58.824% { transform: scale(1.28); }
  77.647% { transform: scale(1.28); }
  89.412% { transform: scale(1); }
  100.000% { transform: scale(1); }
}
@keyframes rpCursor {
  0.000% { left: 30.00%; top: 20.00%; }
  4.706% { left: 30.00%; top: 20.00%; }
  8.824% { left: 15.00%; top: 35.80%; }
  11.765% { left: 15.00%; top: 35.80%; }
  15.294% { left: 24.00%; top: 35.80%; }
  17.647% { left: 24.00%; top: 35.80%; }
  21.176% { left: 46.00%; top: 35.80%; }
  23.529% { left: 46.00%; top: 35.80%; }
  27.059% { left: 12.40%; top: 50.20%; }
  31.765% { left: 12.40%; top: 50.20%; }
  40.000% { left: 55.00%; top: 62.00%; }
  50.000% { left: 83.00%; top: 72.00%; }
  73.529% { left: 83.00%; top: 72.00%; }
  82.353% { left: 45.00%; top: 90.00%; }
  88.235% { left: 45.00%; top: 90.00%; }
  100.000% { left: 30.00%; top: 20.00%; }
}
@keyframes rpClick {
  0.000% { opacity: 0; transform: scale(0.3); }
  28.765% { opacity: 0; transform: scale(0.3); }
  28.824% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  31.294% { opacity: 0; transform: scale(1.7); }
  100.000% { opacity: 0; transform: scale(0.3); }
}
.rp-c1 { animation: rprp-c1 17s infinite; }
.rp-c2 { animation: rprp-c2 17s infinite; }
.rp-c3 { animation: rprp-c3 17s infinite; }
@keyframes rprp-c1 {
  0.000% { opacity: 0; }
  1.176% { opacity: 0; }
  3.529% { opacity: 1; }
  25.882% { opacity: 1; }
  28.235% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes rprp-c2 {
  0.000% { opacity: 0; }
  30.588% { opacity: 0; }
  32.941% { opacity: 1; }
  50.588% { opacity: 1; }
  52.941% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes rprp-c3 {
  0.000% { opacity: 0; }
  54.118% { opacity: 0; }
  56.471% { opacity: 1; }
  85.882% { opacity: 1; }
  88.235% { opacity: 0; }
  100.000% { opacity: 0; }
}

/* ---------- Module 05 : BIM / IFC ---------- */
.demo-bim .demo-stage { --ar: 1512 / 800; }
.bim-frame { position: absolute; left: 1.52%; top: 15.4%; width: 74.82%; height: 77.55%; opacity: 0; will-change: opacity; }
.bim-frame picture, .bim-frame img { display: block; width: 100%; height: 100%; object-fit: fill; }
.demo-bim .bim-map { opacity: 0; animation: bimMap 20s infinite; }
.demo-bim .demo-cursor { animation-name: bimCursor; animation-duration: 20s; }
.demo-bim .demo-cursor::before { animation-name: bimClick; animation-duration: 20s; }

.bim-frame.f1 { animation: bimF1 20s infinite; }
@keyframes bimF1 {
  0.000% { opacity: 0; }
  1.350% { opacity: 0; }
  2.750% { opacity: 1; }
  37.100% { opacity: 1; }
  38.500% { opacity: 0; }
  100.000% { opacity: 0; }
}
.bim-frame.f2 { animation: bimF2 20s infinite; }
@keyframes bimF2 {
  0.000% { opacity: 0; }
  4.100% { opacity: 0; }
  5.500% { opacity: 1; }
  34.350% { opacity: 1; }
  35.750% { opacity: 0; }
  100.000% { opacity: 0; }
}
.bim-frame.f3 { animation: bimF3 20s infinite; }
@keyframes bimF3 {
  0.000% { opacity: 0; }
  6.850% { opacity: 0; }
  8.250% { opacity: 1; }
  31.600% { opacity: 1; }
  33.000% { opacity: 0; }
  100.000% { opacity: 0; }
}
.bim-frame.f4 { animation: bimF4 20s infinite; }
@keyframes bimF4 {
  0.000% { opacity: 0; }
  9.600% { opacity: 0; }
  11.000% { opacity: 1; }
  28.850% { opacity: 1; }
  30.250% { opacity: 0; }
  100.000% { opacity: 0; }
}
.bim-frame.f5 { animation: bimF5 20s infinite; }
@keyframes bimF5 {
  0.000% { opacity: 0; }
  12.350% { opacity: 0; }
  13.750% { opacity: 1; }
  26.100% { opacity: 1; }
  27.500% { opacity: 0; }
  100.000% { opacity: 0; }
}
.bim-frame.f6 { animation: bimF6 20s infinite; }
@keyframes bimF6 {
  0.000% { opacity: 0; }
  15.100% { opacity: 0; }
  16.500% { opacity: 1; }
  23.350% { opacity: 1; }
  24.750% { opacity: 0; }
  100.000% { opacity: 0; }
}
.bim-frame.f7 { animation: bimF7 20s infinite; }
@keyframes bimF7 {
  0.000% { opacity: 0; }
  17.850% { opacity: 0; }
  19.250% { opacity: 1; }
  20.600% { opacity: 1; }
  22.000% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes bimMap {
  0.000% { opacity: 0; }
  47.000% { opacity: 0; }
  49.500% { opacity: 1; }
  92.000% { opacity: 1; }
  94.500% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes bimCursor {
  0.000% { left: 33.00%; top: 55.00%; animation-timing-function: linear; }
  20.000% { left: 46.00%; top: 55.00%; animation-timing-function: linear; }
  39.500% { left: 33.00%; top: 55.00%; }
  44.500% { left: 89.60%; top: 11.50%; }
  48.000% { left: 89.60%; top: 11.50%; }
  54.000% { left: 76.00%; top: 26.00%; }
  57.000% { left: 76.00%; top: 26.00%; }
  63.000% { left: 76.00%; top: 53.00%; }
  67.000% { left: 76.00%; top: 53.00%; }
  73.000% { left: 89.00%; top: 62.00%; }
  77.000% { left: 89.00%; top: 62.00%; }
  83.000% { left: 30.00%; top: 17.00%; }
  86.000% { left: 30.00%; top: 17.00%; }
  90.000% { left: 82.80%; top: 11.50%; }
  94.000% { left: 82.80%; top: 11.50%; }
  100.000% { left: 33.00%; top: 55.00%; }
}
@keyframes bimClick {
  0.000% { opacity: 0; transform: scale(0.3); }
  0.950% { opacity: 0; transform: scale(0.3); }
  1.000% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  3.100% { opacity: 0; transform: scale(1.7); }
  45.950% { opacity: 0; transform: scale(0.3); }
  46.000% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  48.100% { opacity: 0; transform: scale(1.7); }
  92.450% { opacity: 0; transform: scale(0.3); }
  92.500% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  94.600% { opacity: 0; transform: scale(1.7); }
  100.000% { opacity: 0; transform: scale(0.3); }
}
.bim-c1 { animation: bimbim-c1 20s infinite; }
.bim-c2 { animation: bimbim-c2 20s infinite; }
@keyframes bimbim-c1 {
  0.000% { opacity: 0; }
  1.000% { opacity: 0; }
  3.000% { opacity: 1; }
  41.000% { opacity: 1; }
  43.000% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes bimbim-c2 {
  0.000% { opacity: 0; }
  49.000% { opacity: 0; }
  51.000% { opacity: 1; }
  89.000% { opacity: 1; }
  91.000% { opacity: 0; }
  100.000% { opacity: 0; }
}

/* ---------- Module 06 : WBS ---------- */
.demo-wbs .demo-stage { --ar: 1316 / 919; }
.demo-wbs .demo-zoom { --ox: 50%; --oy: 30%; animation: wbsZoom 12s ease-in-out infinite; }
.demo-wbs .demo-cursor { animation-name: wbsCursor; animation-duration: 12s; --cursor: 18px; }

@keyframes wbsZoom {
  0.000% { transform: scale(1); }
  50.000% { transform: scale(1.06); }
  100.000% { transform: scale(1); }
}
@keyframes wbsCursor {
  0.000% { left: 50.00%; top: 75.00%; }
  12.500% { left: 26.60%; top: 12.00%; }
  25.000% { left: 26.60%; top: 12.00%; }
  35.000% { left: 42.60%; top: 12.00%; }
  43.333% { left: 42.60%; top: 12.00%; }
  53.333% { left: 22.30%; top: 37.80%; }
  61.667% { left: 22.30%; top: 37.80%; }
  71.667% { left: 30.00%; top: 85.00%; }
  80.000% { left: 30.00%; top: 85.00%; }
  88.333% { left: 60.40%; top: 12.00%; }
  95.000% { left: 60.40%; top: 12.00%; }
  100.000% { left: 50.00%; top: 75.00%; }
}
.wbs-c1 { animation: wbswbs-c1 12s infinite; }
.wbs-c2 { animation: wbswbs-c2 12s infinite; }
@keyframes wbswbs-c1 {
  0.000% { opacity: 0; }
  3.333% { opacity: 0; }
  6.667% { opacity: 1; }
  46.667% { opacity: 1; }
  50.000% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes wbswbs-c2 {
  0.000% { opacity: 0; }
  48.333% { opacity: 0; }
  51.667% { opacity: 1; }
  91.667% { opacity: 1; }
  95.000% { opacity: 0; }
  100.000% { opacity: 0; }
}

.demo-wbs-est .demo-stage { --ar: 1400 / 868; }
.demo-wbs-est .est-grouped { opacity: 0; animation: estGrouped 15s infinite; }
.demo-wbs-est .demo-cursor { animation-name: estCursor; animation-duration: 15s; }
.demo-wbs-est .demo-cursor::before { animation-name: estClick; animation-duration: 15s; }

@keyframes estGrouped {
  0.000% { opacity: 0; }
  27.333% { opacity: 0; }
  30.667% { opacity: 1; }
  95.333% { opacity: 1; }
  98.667% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes estCursor {
  0.000% { left: 50.00%; top: 75.00%; }
  10.000% { left: 50.00%; top: 75.00%; }
  21.333% { left: 41.10%; top: 35.80%; }
  30.667% { left: 41.10%; top: 35.80%; }
  41.333% { left: 17.00%; top: 58.30%; }
  46.667% { left: 17.00%; top: 58.30%; }
  53.333% { left: 19.00%; top: 62.80%; }
  58.667% { left: 19.00%; top: 62.80%; }
  66.667% { left: 80.00%; top: 68.00%; }
  76.000% { left: 80.00%; top: 68.00%; }
  84.000% { left: 12.90%; top: 35.80%; }
  92.667% { left: 12.90%; top: 35.80%; }
  100.000% { left: 50.00%; top: 75.00%; }
}
@keyframes estClick {
  0.000% { opacity: 0; transform: scale(0.3); }
  24.600% { opacity: 0; transform: scale(0.3); }
  24.667% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  27.467% { opacity: 0; transform: scale(1.7); }
  93.267% { opacity: 0; transform: scale(0.3); }
  93.333% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  96.133% { opacity: 0; transform: scale(1.7); }
  100.000% { opacity: 0; transform: scale(0.3); }
}
.est-c1 { animation: estest-c1 15s infinite; }
.est-c2 { animation: estest-c2 15s infinite; }
@keyframes estest-c1 {
  0.000% { opacity: 0; }
  1.333% { opacity: 0; }
  4.000% { opacity: 1; }
  22.667% { opacity: 1; }
  25.333% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes estest-c2 {
  0.000% { opacity: 0; }
  30.667% { opacity: 0; }
  33.333% { opacity: 1; }
  89.333% { opacity: 1; }
  92.000% { opacity: 0; }
  100.000% { opacity: 0; }
}

/* ---------- Module 07 : assemblages configurables ---------- */
.demo-ca .demo-stage { --ar: 1400 / 868; }
.demo-ca .demo-cursor { animation-name: caCursor; animation-duration: 44s; --cursor: 17px; }
.demo-ca .demo-cursor::before { animation-name: caClick; animation-duration: 44s; }

.ca-f0 { opacity: 0; animation: caca-f0 44s infinite; will-change: opacity; }
.ca-f1 { opacity: 0; animation: caca-f1 44s infinite; will-change: opacity; }
.ca-f2 { opacity: 0; animation: caca-f2 44s infinite; will-change: opacity; }
.ca-f3 { opacity: 0; animation: caca-f3 44s infinite; will-change: opacity; }
.ca-f4 { opacity: 0; animation: caca-f4 44s infinite; will-change: opacity; }
.ca-f5 { opacity: 0; animation: caca-f5 44s infinite; will-change: opacity; }
.ca-f6 { opacity: 0; animation: caca-f6 44s infinite; will-change: opacity; }
.ca-f7 { opacity: 0; animation: caca-f7 44s infinite; will-change: opacity; }
.ca-f0b { opacity: 0; animation: caca-f0b 44s infinite; will-change: opacity; }
@keyframes caca-f0 {
  0.000% { opacity: 1; }
  14.773% { opacity: 1; }
  15.909% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-f1 {
  0.000% { opacity: 0; }
  13.636% { opacity: 0; }
  14.773% { opacity: 1; }
  21.364% { opacity: 1; }
  22.500% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-f2 {
  0.000% { opacity: 0; }
  20.227% { opacity: 0; }
  21.364% { opacity: 1; }
  27.273% { opacity: 1; }
  28.409% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-f3 {
  0.000% { opacity: 0; }
  26.136% { opacity: 0; }
  27.273% { opacity: 1; }
  37.273% { opacity: 1; }
  38.409% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-f4 {
  0.000% { opacity: 0; }
  36.136% { opacity: 0; }
  37.273% { opacity: 1; }
  47.273% { opacity: 1; }
  48.409% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-f5 {
  0.000% { opacity: 0; }
  46.136% { opacity: 0; }
  47.273% { opacity: 1; }
  58.182% { opacity: 1; }
  59.318% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-f6 {
  0.000% { opacity: 0; }
  57.045% { opacity: 0; }
  58.182% { opacity: 1; }
  70.000% { opacity: 1; }
  71.136% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-f7 {
  0.000% { opacity: 0; }
  68.864% { opacity: 0; }
  70.000% { opacity: 1; }
  93.182% { opacity: 1; }
  94.318% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-f0b {
  0.000% { opacity: 0; }
  92.045% { opacity: 0; }
  93.182% { opacity: 1; }
  100.000% { opacity: 1; }
  100.000% { opacity: 1; }
}
@keyframes caCursor {
  0.000% { left: 55.00%; top: 85.00%; }
  2.273% { left: 55.00%; top: 85.00%; }
  5.000% { left: 36.00%; top: 54.30%; }
  6.818% { left: 36.00%; top: 54.30%; }
  8.636% { left: 62.00%; top: 61.00%; }
  10.455% { left: 62.00%; top: 61.00%; }
  12.273% { left: 70.00%; top: 69.30%; }
  14.091% { left: 70.00%; top: 69.30%; }
  16.364% { left: 35.00%; top: 39.00%; }
  17.727% { left: 35.00%; top: 39.00%; }
  19.545% { left: 72.10%; top: 31.20%; }
  20.909% { left: 72.10%; top: 31.20%; }
  22.273% { left: 72.10%; top: 31.20%; }
  24.545% { left: 43.00%; top: 53.60%; }
  26.364% { left: 43.00%; top: 53.60%; }
  28.182% { left: 43.00%; top: 53.60%; }
  30.909% { left: 52.00%; top: 44.30%; }
  32.273% { left: 52.00%; top: 44.30%; }
  33.864% { left: 52.00%; top: 59.00%; }
  35.909% { left: 52.00%; top: 59.00%; }
  38.636% { left: 30.00%; top: 44.00%; }
  40.455% { left: 30.00%; top: 44.00%; }
  42.727% { left: 30.00%; top: 81.00%; }
  46.364% { left: 30.00%; top: 81.00%; }
  49.091% { left: 53.60%; top: 38.50%; }
  50.455% { left: 53.60%; top: 38.50%; }
  52.273% { left: 53.60%; top: 43.50%; }
  54.091% { left: 53.60%; top: 43.50%; }
  56.818% { left: 62.00%; top: 64.00%; }
  58.182% { left: 62.00%; top: 64.00%; }
  60.909% { left: 74.00%; top: 81.50%; }
  64.091% { left: 74.00%; top: 81.50%; }
  66.818% { left: 68.20%; top: 90.30%; }
  69.545% { left: 68.20%; top: 90.30%; }
  73.182% { left: 25.00%; top: 3.50%; }
  76.818% { left: 25.00%; top: 3.50%; }
  80.000% { left: 94.50%; top: 3.50%; }
  83.182% { left: 94.50%; top: 3.50%; }
  86.364% { left: 45.00%; top: 19.00%; }
  90.909% { left: 45.00%; top: 19.00%; }
  95.455% { left: 55.00%; top: 85.00%; }
  100.000% { left: 55.00%; top: 85.00%; }
}
@keyframes caClick {
  0.000% { opacity: 0; transform: scale(0.3); }
  20.886% { opacity: 0; transform: scale(0.3); }
  20.909% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  21.864% { opacity: 0; transform: scale(1.7); }
  26.341% { opacity: 0; transform: scale(0.3); }
  26.364% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  27.318% { opacity: 0; transform: scale(1.7); }
  50.432% { opacity: 0; transform: scale(0.3); }
  50.455% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  51.409% { opacity: 0; transform: scale(1.7); }
  54.068% { opacity: 0; transform: scale(0.3); }
  54.091% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  55.045% { opacity: 0; transform: scale(1.7); }
  68.841% { opacity: 0; transform: scale(0.3); }
  68.864% { opacity: 0.95; transform: scale(0.3); animation-timing-function: ease-out; }
  69.818% { opacity: 0; transform: scale(1.7); }
  100.000% { opacity: 0; transform: scale(0.3); }
}
.ca-c1 { animation: caca-c1 44s infinite; }
.ca-c2 { animation: caca-c2 44s infinite; }
.ca-c3 { animation: caca-c3 44s infinite; }
.ca-c4 { animation: caca-c4 44s infinite; }
.ca-c5 { animation: caca-c5 44s infinite; }
.ca-c6 { animation: caca-c6 44s infinite; }
.ca-c7 { animation: caca-c7 44s infinite; }
@keyframes caca-c1 {
  0.000% { opacity: 0; }
  0.455% { opacity: 0; }
  1.364% { opacity: 1; }
  13.636% { opacity: 1; }
  14.545% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-c2 {
  0.000% { opacity: 0; }
  15.000% { opacity: 0; }
  15.909% { opacity: 1; }
  25.909% { opacity: 1; }
  26.818% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-c3 {
  0.000% { opacity: 0; }
  27.727% { opacity: 0; }
  28.636% { opacity: 1; }
  36.364% { opacity: 1; }
  37.273% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-c4 {
  0.000% { opacity: 0; }
  37.273% { opacity: 0; }
  38.182% { opacity: 1; }
  46.364% { opacity: 1; }
  47.273% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-c5 {
  0.000% { opacity: 0; }
  47.273% { opacity: 0; }
  48.182% { opacity: 1; }
  57.273% { opacity: 1; }
  58.182% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-c6 {
  0.000% { opacity: 0; }
  58.182% { opacity: 0; }
  59.091% { opacity: 1; }
  69.091% { opacity: 1; }
  70.000% { opacity: 0; }
  100.000% { opacity: 0; }
}
@keyframes caca-c7 {
  0.000% { opacity: 0; }
  70.909% { opacity: 0; }
  71.818% { opacity: 1; }
  91.818% { opacity: 1; }
  92.727% { opacity: 0; }
  100.000% { opacity: 0; }
}

/* ---------- Mouvement réduit ---------- */
@media (prefers-reduced-motion: reduce) {
  .demo *, .demo *::before, .demo *::after { animation: none !important; }
  .demo-cursor, .bd-band, .pp-trace, .demo-cap { display: none !important; }
  .hc-slide, .hc-tab::after, .shot-bar .hc-titles em { opacity: 0; }
  .hc-slide.is-first, .hc-tab.is-first::after, .shot-bar .hc-titles em.is-first { opacity: 1; }
  .hc-slide img { object-position: 50% 0; transform: none; }
  .demo-layer { opacity: 0; }
  .demo-layer.is-static { opacity: 1 !important; }
  .demo-zoom { transform: none !important; }
  .demo-wbs-est .est-grouped { opacity: 1; }
  .bim-frame { opacity: 0; }
  .demo-bim .bim-map { opacity: 0; }
}

