/* Curseur intelligent : bague de contexte, étiquette de destination, loupe de gravure. Jamais de capture de clic.
   Le pointeur de cristal existant reste la pointe ; l'ancienne étiquette contextuelle s'efface au profit de celle-ci. */
.tc-ci-bague, .tc-ci-etiquette, .tc-ci-loupe {
  position: fixed; left: 0; top: 0; z-index: 2147483644; pointer-events: none !important;
  opacity: 0; transition: opacity .28s ease; will-change: transform; contain: layout style;
}
body.tc-ci-actif .tc-context-cursor { display: none !important; }

/* Bague : teinte de la page (--dv-air de Codex), étirée par la vitesse, attirée par les commandes. */
.tc-ci-bague {
  width: 34px; height: 34px; margin: -17px 0 0 -17px; border-radius: 50%;
  border: 1px solid color-mix(in srgb, var(--dv-air, #d4c6aa) 72%, transparent);
  box-shadow: inset 0 0 0 1px #00000038, 0 0 18px color-mix(in srgb, var(--dv-air, #d4c6aa) 18%, transparent);
  transition: opacity .28s ease, width .45s cubic-bezier(.22,.72,.18,1), height .45s cubic-bezier(.22,.72,.18,1), margin .45s cubic-bezier(.22,.72,.18,1), background-color .45s ease, border-color .45s ease;
}
body.tc-ci-actif:not([data-tc-curseur="loupe"], [data-tc-curseur="natif"]) .tc-ci-bague { opacity: 1; }
body.tc-ci-actif:is([data-tc-curseur="lien"], [data-tc-curseur="commande"]) .tc-ci-bague {
  width: 58px; height: 58px; margin: -29px 0 0 -29px;
  background-color: color-mix(in srgb, var(--dv-air, #d4c6aa) 12%, transparent);
  border-color: color-mix(in srgb, var(--dv-air, #d4c6aa) 95%, transparent);
}
/* Lecture : la bague se retire presque, pour ne pas gêner l'œil sur le texte. */
body.tc-ci-actif[data-tc-curseur="lecture"] .tc-ci-bague { width: 8px; height: 8px; margin: -4px 0 0 -4px; opacity: .45; }
body.tc-ci-actif[data-tc-curseur="ambiance"] .tc-ci-bague { width: 46px; height: 46px; margin: -23px 0 0 -23px; }

/* Étiquette : la destination réelle ou l'atmosphère nommée. */
.tc-ci-etiquette {
  padding: 7px 11px; white-space: nowrap; max-width: 320px; overflow: hidden; text-overflow: ellipsis;
  font: 400 11.5px/1.25 var(--tc-sans, 'Terrae Flare', sans-serif); letter-spacing: .1em; text-transform: uppercase;
  color: #f4f0e8; background: #050706b8; border: 1px solid #f4f0e826; backdrop-filter: blur(8px);
}
.tc-ci-etiquette[hidden] { display: none; }
body.tc-ci-actif:is([data-tc-curseur="lien"], [data-tc-curseur="commande"], [data-tc-curseur="ambiance"]) .tc-ci-etiquette { opacity: 1; }
body.tc-ci-actif[data-tc-curseur="ambiance"] .tc-ci-etiquette { font-family: var(--tc-serif, serif); text-transform: none; letter-spacing: .02em; font-size: 15px; background: transparent; border: 0; backdrop-filter: none; text-shadow: 0 1px 12px #000; }

/* Loupe : la gravure originale à pleine résolution, sous un verre cerclé d'ivoire. */
.tc-ci-loupe {
  width: 196px; height: 196px; margin: -98px 0 0 -98px; border-radius: 50%; overflow: hidden;
  background-color: #efe8da; background-repeat: no-repeat;
  border: 1px solid #f4f0e8d9; box-shadow: 0 0 0 7px #00000059, 0 22px 60px #000000c7, inset 0 0 22px #15130f33;
}
body.tc-ci-actif[data-tc-curseur="loupe"] .tc-ci-loupe { opacity: 1; }
.tc-ci-loupe-legende {
  position: absolute; left: 0; right: 0; bottom: 0; padding: 18px 0 16px; text-align: center;
  font: 400 10.5px/1.2 var(--tc-sans, sans-serif); letter-spacing: .16em; text-transform: uppercase; color: #15130f;
  background: linear-gradient(transparent, #efe8dae6 55%);
}

@media (prefers-reduced-motion: reduce), (prefers-contrast: more), (forced-colors: active), (pointer: coarse), print {
  .tc-ci-bague, .tc-ci-etiquette, .tc-ci-loupe { display: none !important; }
  body.tc-ci-actif .tc-context-cursor { display: revert !important; }
}

/* ======================================================================================================================
   29/09/2026 — Typographie vivante (lettres.mjs) et profondeur au curseur (curseur-intelligent.mjs), lot typo-curseur.
   ====================================================================================================================== */

/* ---- Titres : décor des fragments. Le texte réel reste en place (transparent le temps du geste) ; les mots du décor
   vivent dans l'arbre fantôme de .tc-vif (styles portés par lettres.mjs), chacun posé sur le rectangle mesuré du mot
   réel : aucune ligne, aucun flux, aucun texte en double dans le document. ---- */
.tc-vif { position: absolute; left: 0; top: 0; width: 0; height: 0; overflow: visible; pointer-events: none !important; font-style: normal; contain: layout; }
/* L'ouverture reste voilée jusqu'à ce que lettres.mjs ait posé son décor (classe tc-lettres-pret sur body) : aucune image
   du titre complet avant son écriture. Sans script, en mouvement réduit ou en contraste renforcé, la règle n'existe pas ;
   si le module ne répondait pas, la variable de secours rend le titre au bout de 2,6 s. `!important` : les moteurs
   existants animent l'opacité du titre à l'entrée (WAAPI) et passeraient sinon devant le voile. */
@media (scripting: enabled) and (prefers-reduced-motion: no-preference) and (not (prefers-contrast: more)) and (not (forced-colors: active)) {
  body.tc-direction-20260928:not(.tc-lettres-pret) .tc-scene h1 { opacity: var(--tc-lettres-secours, 0) !important; animation: tc-lettres-secours 1ms 2600ms forwards; }
}
@keyframes tc-lettres-secours { to { --tc-lettres-secours: 1; } }
@media (prefers-reduced-motion: reduce), (prefers-contrast: more), (forced-colors: active), print {
  .tc-vif { display: none !important; }
}

/* ---- Profondeur au curseur : `translate` compose avec les transform des moteurs existants ; --tc-cp-x/--tc-cp-y valent
   au plus ±6 px (bord de fenêtre) ; chaque couche applique sa profondeur (négative : cartouche qui flotte devant).
   L'ouverture (.tc-scene) n'est pas touchée : ses moteurs propres suivent déjà le pointeur. ---- */
@media (pointer: fine) and (hover: hover) and (prefers-reduced-motion: no-preference) and (not (prefers-contrast: more)) and (not (forced-colors: active)) {
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) .va-mount img { translate: calc(var(--tc-cp-x, 0px) * .55) calc(var(--tc-cp-y, 0px) * .55); will-change: translate; }
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) .va-mount-label { translate: calc(var(--tc-cp-x, 0px) * -.25) calc(var(--tc-cp-y, 0px) * -.25); }
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) .tv-landscape .tv-backdrop { translate: calc(var(--tc-cp-x, 0px) * .6) calc(var(--tc-cp-y, 0px) * .6); will-change: translate; }
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) .pz-m-firenze { translate: calc(var(--tc-cp-x, 0px) * .35) calc(var(--tc-cp-y, 0px) * .35); will-change: translate; }
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) .pz-m-napoli { translate: calc(var(--tc-cp-x, 0px) * .55) calc(var(--tc-cp-y, 0px) * .55); will-change: translate; }
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) .pz-m-reims { translate: calc(var(--tc-cp-x, 0px) * .75) calc(var(--tc-cp-y, 0px) * .75); will-change: translate; }
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) .ed-colophon .ed-date { translate: calc(var(--tc-cp-x, 0px) * .3) calc(var(--tc-cp-y, 0px) * .3); }
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) main :is(.ed-number, .te-folio) { translate: calc(var(--tc-cp-x, 0px) * -.2) calc(var(--tc-cp-y, 0px) * -.2); }
  /* Reflet : une lumière ivoire très douce, en fondu (soft-light), qui glisse sur la planche avec le pointeur. */
  .tc-cp-reflet { position: absolute; inset: 0; z-index: 1; overflow: hidden; pointer-events: none !important; opacity: 0; transition: opacity 900ms ease; }
  .tc-cp-reflet b { position: absolute; inset: -30%; mix-blend-mode: soft-light; will-change: translate;
    background: radial-gradient(ellipse 38% 34% at 60% 36%, #fff6e2 0%, #fff6e200 70%);
    translate: var(--tc-cp-x, 0px) var(--tc-cp-y, 0px); }
  body.tc-direction-20260928.tc-cp-actif:not(#tc-cp) .tc-cp-reflet { opacity: .34; }
}
@media (pointer: coarse), (hover: none), (prefers-reduced-motion: reduce), (prefers-contrast: more), (forced-colors: active), print {
  .tc-cp-reflet { display: none !important; }
}
