/*
  Signature animée d'ouverture Klipsk, deuxième série : composant réutilisable.
  Onze candidates pour le nom, deux témoins historiques et trois transitions vers le site, combinables librement.

  Réglages, tous sur <html> (lus avant le premier rendu) :
    data-kso-direction="trace" | "trace-ensemble" | "trace-corps"   Le tracé affiné (A1) et ses deux déclinaisons (sixième passe)
                       "aplomb" | "gravure"            explorations du geste (cinquième passe)
                       "empreinte" | "aisance" | "jointure"   B, C, D (conservées)
                       "cannelure" | "galbe"           créations de la cinquième passe
                       "signature-initiale"            le premier essai du projet, porté à l'identique (sixième passe)
                       "geste" | "geste-approfondi"    témoins historiques A, conservés à l'identique
    data-kso-transition="relais" | "cadre" | "coupe"  transition 1, 2 ou 3 vers le site
    class="kso-theme-maya" | "kso-theme-mineral" | "kso-theme-indigo"   fond du voile et encre
  Sur le logo du header : attribut data-kso-relais-cible (destination de la transition « relais »).
  Pour un aperçu hors voile (asset seul), un conteneur .kso-joue lit la même direction, portée par <html>
  ou par le conteneur lui-même.
  La classe kso-intro est posée sur <html> par l'extrait de tête, avant le premier rendu, seulement si
  l'ouverture doit être montrée. Sans elle (pas de JavaScript, mouvement réduit, déjà vue, erreur),
  le voile reste masqué par l'attribut hidden et le site s'affiche directement.

  Contours : les six tracés du wordmark source sont recopiés à l'identique par le générateur
  (Sources éditables/generer-ouverture.mjs). Les mouvements révèlent ou épaississent ces tracés,
  ils ne les redessinent pas. À 1,40 s, le calque animé cède la place au tracé source, sans masque ni trait
  (à 1,44 s pour la signature initiale, qui garde le rythme du premier essai).
*/

/* ---------- Réglages ---------- */
:root {
  --kso-fond: #DEEDFC;                      /* Maya */
  --kso-encre: #19142E;                     /* Indigo */

  /* Temps comptés depuis l'apparition du voile */
  --kso-t-depart: 250ms;                    /* respiration avant le premier mouvement */
  --kso-t-fin-nom: 1400ms;                  /* nom achevé : substitution par le tracé source exact */

  /* Direction A, le geste continu */
  --kso-d-geste: 1150ms;
  --kso-ease-geste: cubic-bezier(0.090, 0.688, 0.749, 0.888);   /* profil de la courbe intérieure du pied du L */

  /* Direction B, l'empreinte entière */
  --kso-d-frappe: 90ms;                     /* le contour exact du nom entier apparaît d'un coup */
  --kso-t-encrage: 420ms;                   /* l'encre commence à gagner les traits */
  --kso-d-encrage: 980ms;                   /* fin exacte à 1,40 s, avec le passage au tracé source */
  --kso-ease-encrage: cubic-bezier(0.45, 0, 0.25, 1);
  --kso-encre-depart: 8px;                  /* filet initial : 4 unités du dessin à l'intérieur du contour */
  --kso-encre-fin: 88px;                    /* rayon inscrit maximal mesuré : 43 unités, donc tout est encré à 86 */

  /* Transition 1, relais vers la navigation */
  --kso-t-relais: 1950ms;
  --kso-d-relais: 560ms;
  --kso-tenue-relais: 40ms;                 /* le nom est immobile à sa place avant la substitution (fin à 2,55 s) */
  --kso-t-substitution: calc(var(--kso-t-relais) + var(--kso-d-relais) + var(--kso-tenue-relais));
  --kso-ease-relais: cubic-bezier(0.45, 0, 0.15, 1);
  --kso-d-fond-relais: 500ms;

  /* Transition 2, ouverture du cadre */
  --kso-t-cadre: 1950ms;
  --kso-d-cadre: 550ms;
  --kso-ease-cadre: cubic-bezier(0.76, 0, 0.24, 1);
  --kso-d-effacement-cadre: 180ms;

  /* Transition 3, coupe franche */
  --kso-t-coupe: 2250ms;

  /* Interruption volontaire (clic, touche, molette, toucher) */
  --kso-d-abrege: 280ms;
}

/* Fonds de contrôle et encres lisibles (tokens du site) */
.kso-theme-maya    { --kso-fond: #DEEDFC; --kso-encre: #19142E; }
.kso-theme-mineral { --kso-fond: #FCFAF7; --kso-encre: #19142E; }
.kso-theme-indigo  { --kso-fond: #19142E; --kso-encre: #FCFAF7; }

/* KSO GÉNÉRÉ : DÉBUT GÉOMÉTRIE DU GESTE */
/* Mesuré sur les contours source : premier point d'encre 0, 6.38 (coin supérieur du K initial),
   dernier point 1528.45, 310.67 (terminaison de la jambe du K final), course du front 1538.9803 unités. */
:root {
  --kso-geste-angle: 112.7deg;
  --kso-geste-a: 46%;
  --kso-geste-b: 46.2294%;
  --kso-geste-p0: 71.3563%;
  --kso-geste-p1: 16.8042%;
}
/* KSO GÉNÉRÉ : FIN GÉOMÉTRIE DU GESTE */

/* ---------- Le nom : asset transparent ---------- */
.kso-nom {
  position: relative;
  display: block;
  width: 400px;
  aspect-ratio: 1529 / 332;
  color: var(--kso-encre);
}
.kso-nom__anime, .kso-nom__fixe { position: absolute; inset: 0; display: block; }
.kso-nom svg {
  position: absolute; left: 0; top: 0; width: 100%; height: auto;
  display: block; fill: currentColor;
}
.kso-nom__fixe svg { overflow: hidden; }      /* rendu identique au fichier source */
.kso-nom__anime svg { overflow: visible; }    /* l'empreinte déborde légèrement du cadre du dessin */
.kso-nom__anime { visibility: hidden; }       /* par défaut : nom fixe, exact */

/* Contextes de lecture : voile d'ouverture actif, ou aperçu d'examen (.kso-joue). */
html.kso-intro[data-kso-direction] .kso-voile .kso-nom__fixe,
[data-kso-direction] .kso-joue .kso-nom__fixe,
.kso-joue[data-kso-direction] .kso-nom__fixe {
  animation: kso-montrer 0s linear var(--kso-t-fin-nom) both;
}

/* Direction A, le geste continu : un seul front, parallèle à la coupe des bras du K,
   traverse le nom du premier angle du K initial jusqu'à la terminaison du K final. */
html.kso-intro[data-kso-direction="geste"] .kso-voile .kso-nom__anime,
[data-kso-direction="geste"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="geste"] .kso-nom__anime {
  -webkit-mask-image: linear-gradient(var(--kso-geste-angle), #000 var(--kso-geste-a), transparent var(--kso-geste-b));
          mask-image: linear-gradient(var(--kso-geste-angle), #000 var(--kso-geste-a), transparent var(--kso-geste-b));
  -webkit-mask-size: 300% 100%;
          mask-size: 300% 100%;
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  animation:
    kso-geste var(--kso-d-geste) var(--kso-ease-geste) var(--kso-t-depart) both,
    kso-masquer 0s linear var(--kso-t-fin-nom) both;
}
@keyframes kso-geste {
  from { -webkit-mask-position: var(--kso-geste-p0) 0; mask-position: var(--kso-geste-p0) 0; }
  to   { -webkit-mask-position: var(--kso-geste-p1) 0; mask-position: var(--kso-geste-p1) 0; }
}

/* Direction B, l'empreinte entière : le contour exact du nom entier apparaît d'un coup, puis l'encre
   progresse partout à la même vitesse, du bord vers le cœur de chaque trait. Les déliés se remplissent
   d'abord, les fûts en dernier, ensemble. Le trait est découpé par la forme exacte (clip-path du dessin) :
   la silhouette extérieure reste celle de la source pendant tout le mouvement. */
[data-kso-direction="geste"] .kso-nom__encre { clip-path: none; }
[data-kso-direction="empreinte"] .kso-nom__encre,
.kso-joue[data-kso-direction="empreinte"] .kso-nom__encre {
  fill: none;
  stroke: currentColor;
  stroke-linejoin: round;
  stroke-width: var(--kso-encre-fin);
}
html.kso-intro[data-kso-direction="empreinte"] .kso-voile .kso-nom__anime,
[data-kso-direction="empreinte"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="empreinte"] .kso-nom__anime {
  animation:
    kso-frappe var(--kso-d-frappe) ease-out var(--kso-t-depart) both,
    kso-masquer 0s linear var(--kso-t-fin-nom) both;
}
html.kso-intro[data-kso-direction="empreinte"] .kso-voile .kso-nom__encre,
[data-kso-direction="empreinte"] .kso-joue .kso-nom__encre,
.kso-joue[data-kso-direction="empreinte"] .kso-nom__encre {
  animation: kso-encrage var(--kso-d-encrage) var(--kso-ease-encrage) var(--kso-t-encrage) both;
}
@keyframes kso-frappe { from { opacity: 0; } to { opacity: 1; } }
@keyframes kso-encrage { from { stroke-width: var(--kso-encre-depart); } to { stroke-width: var(--kso-encre-fin); } }

@keyframes kso-masquer { from { visibility: visible; } to { visibility: hidden; } }
@keyframes kso-montrer { from { visibility: hidden; } to { visibility: visible; } }
@keyframes kso-effacer { from { opacity: 1; } to { opacity: 0; } }

/* ---------- Le voile d'ouverture : présentation, distincte de l'asset ---------- */
.kso-voile {
  position: fixed;
  inset: 0;
  z-index: 2147483000;
  color: var(--kso-encre);
  container-type: size;
  --kso-largeur-ouverture: clamp(184px, 16vw + 140px, 400px);
  --kso-largeur-ouverture: clamp(184px, 16cqw + 140px, 400px);
}
.kso-voile[hidden] { display: none; }
html.kso-intro .kso-voile[hidden] { display: block; }
.kso-voile__fond { position: absolute; inset: 0; background: var(--kso-fond); }
.kso-voile__fenetre { display: none; }
.kso-voile__scene { position: absolute; inset: 0; display: grid; place-items: center; }
.kso-voile .kso-nom { position: relative; left: 0; top: 0; width: var(--kso-largeur-ouverture); pointer-events: none; }

/* Horloge commune : sert de repère de temps aux outils d'examen, sans effet visible. */
@keyframes kso-horloge { from { --kso-horloge: 0; } to { --kso-horloge: 1; } }

/* Transition 1, relais vers la navigation : le nom achevé rejoint la place mesurée du logo du header
   pendant que le fond se retire ; il s'immobilise, puis le logo du header prend le relais sur la même image.
   La destination est mesurée par le script (variables --kso-relais-*, classe kso-relais-mesure sur <html>) ;
   la substitution se fait alors en retirant kso-intro, sans animation sur le logo du header, qui garde ainsi
   exactement son rendu habituel. Sans mesure, tout reste en CSS : le nom s'efface en place avec le fond et
   le logo du header n'apparaît qu'à la disparition du voile, jamais en double. */
html.kso-intro[data-kso-transition="relais"] .kso-voile[hidden] {
  animation:
    kso-horloge 4000ms linear both,
    kso-masquer 0s linear var(--kso-t-substitution) both;
}
html.kso-intro.kso-relais-mesure[data-kso-transition="relais"] .kso-voile[hidden] {
  animation:
    kso-horloge 4000ms linear both,
    kso-fin-relais 0s linear var(--kso-t-substitution) both;
}
/* Repère de fin sans effet visible : à son terme, le script retire le voile et rend le header. */
@keyframes kso-fin-relais { from { --kso-fin: 0; } to { --kso-fin: 1; } }

/* Fond et nom sont animés par leur couleur, pas par leur opacité : le nom reste ainsi rendu sur le même plan
   que la page. */
html.kso-intro[data-kso-transition="relais"] .kso-voile__fond {
  animation: kso-fond-retrait var(--kso-d-fond-relais) ease-in-out var(--kso-t-relais) both;
}
@keyframes kso-fond-retrait { from { background-color: var(--kso-fond); } to { background-color: transparent; } }
html.kso-intro[data-kso-transition="relais"] .kso-voile .kso-nom {
  animation: kso-relais var(--kso-d-relais) var(--kso-ease-relais) var(--kso-t-relais) both;
}
@keyframes kso-relais {
  from { left: 0; top: 0; width: var(--kso-largeur-ouverture); color: var(--kso-encre); }
  to {
    left: var(--kso-relais-x, 0px);
    top: var(--kso-relais-y, 0px);
    width: var(--kso-relais-largeur, var(--kso-largeur-ouverture));
    color: var(--kso-relais-encre-fin, transparent);
  }
}
html.kso-intro[data-kso-transition="relais"] [data-kso-relais-cible] {
  animation: kso-montrer 0s linear var(--kso-t-substitution) both;
}
html.kso-intro.kso-relais-mesure[data-kso-transition="relais"] [data-kso-relais-cible] {
  animation: none;
  visibility: hidden;
}

/* Transition 2, ouverture du cadre : une seule ouverture rectangulaire naît à la place du nom,
   à sa largeur, pendant que le nom se retire, puis s'étend jusqu'aux bords et découvre le site. */
html.kso-intro[data-kso-transition="cadre"] .kso-voile[hidden] {
  animation:
    kso-horloge 4000ms linear both,
    kso-masquer 0s linear calc(var(--kso-t-cadre) + var(--kso-d-cadre)) both;
}
html[data-kso-transition="cadre"] .kso-voile__fond { display: none; }
html[data-kso-transition="cadre"] .kso-voile__fenetre {
  display: block;
  position: absolute;
  left: 50%;
  top: 50%;
  width: var(--kso-largeur-ouverture);
  height: 0;
  transform: translate(-50%, -50%);
  box-shadow: 0 0 0 200vmax var(--kso-fond);
}
html.kso-intro[data-kso-transition="cadre"] .kso-voile__fenetre {
  animation: kso-fenetre var(--kso-d-cadre) var(--kso-ease-cadre) var(--kso-t-cadre) both;
}
@keyframes kso-fenetre {
  from { width: var(--kso-largeur-ouverture); height: 0; }
  to   { width: 104%; height: 104%; }
}
html.kso-intro[data-kso-transition="cadre"] .kso-voile .kso-nom {
  animation: kso-effacer var(--kso-d-effacement-cadre) ease-in var(--kso-t-cadre) both;
}

/* Transition 3, coupe franche : après une tenue lisible, le voile disparaît d'une image à l'autre ;
   l'accueil, chargé en parallèle, est déjà là, sur un fond de la même couleur. */
html.kso-intro[data-kso-transition="coupe"] .kso-voile[hidden] {
  animation:
    kso-horloge 4000ms linear both,
    kso-masquer 0s linear var(--kso-t-coupe) both;
}
/* Le nom s'éteint sur la même image, par sa couleur : le calque fixe porte sa propre visibilité
   (bascule de 1,40 s), que le masquage du voile ne suffit pas à éteindre si le script ne tourne pas.
   La couleur, et non l'opacité, pour que le nom garde exactement le même rendu jusqu'à la coupe. */
html.kso-intro[data-kso-transition="coupe"] .kso-voile .kso-nom {
  animation: kso-eteindre 0s linear var(--kso-t-coupe) both;
}
@keyframes kso-eteindre { from { color: var(--kso-encre); } to { color: transparent; } }

/* Interruption volontaire : retrait court du voile ; le logo du header revient seulement quand le voile
   a disparu, pour qu'il n'y ait jamais deux logos visibles en même temps. */
html.kso-intro.kso-intro--abregee[data-kso-transition] .kso-voile[hidden] {
  animation: kso-abrege var(--kso-d-abrege) ease-out both;
}
html.kso-intro.kso-intro--abregee[data-kso-transition] [data-kso-relais-cible] {
  animation: kso-montrer-apres-abrege 0s linear var(--kso-d-abrege) both;
}
/* Nom distinct : l'animation repart au moment de l'interruption, au lieu de reprendre l'horloge initiale. */
@keyframes kso-montrer-apres-abrege { from { visibility: hidden; } to { visibility: visible; } }
@keyframes kso-abrege {
  from { opacity: 1; visibility: visible; }
  to   { opacity: 0; visibility: hidden; }
}

/* Mouvement réduit : le voile reste masqué hors de la preview qui demande explicitement
   data-kso-frequence="chargement" et data-kso-mouvement="complet" dans son rendu.
   La classe kso-examen, posée seulement par un rejeu demandé dans l'atelier, permet l'examen. */
@media (prefers-reduced-motion: reduce) {
  html.kso-intro:not(.kso-examen):not([data-kso-frequence="chargement"][data-kso-mouvement="complet"]) .kso-voile[hidden] { display: none; }
  html.kso-intro:not(.kso-examen):not([data-kso-frequence="chargement"][data-kso-mouvement="complet"])[data-kso-transition] [data-kso-relais-cible] { animation: none; }
  html:not(.kso-examen) .kso-joue .kso-nom__anime { animation: none !important; visibility: hidden !important; }
  html:not(.kso-examen) .kso-joue .kso-nom__fixe { animation: none !important; visibility: visible !important; }
  html:not(.kso-examen) .kso-joue .kso-nom__encre { animation: none !important; }
}

/* ---------- Mouvements produits : A corrigée (quatrième passe), C L'aisance, D La jointure ----------
   Ajoutés sans modifier les règles de B, du geste d'origine et des transitions ci-dessus. La poudre d'encre et le lever
   de la troisième passe sont retirés ; leur version se trouve dans les archives « avant la quatrième passe ». */
/* KSO GÉNÉRÉ : DÉBUT TROIS NOUVEAUX MOUVEMENTS */
/* Générés par Sources éditables/generer-ouverture.mjs (constante NOUVEAUX) : ne pas modifier à la main.
   A corrigée : trois poils, une seule progression. C, L'aisance : espaces de départ 16, 25.9, 43.7, 6.5, 28.3 unités, refermés à 65 %.
   D, La jointure : ligne la moins encrée du nom à 110.5 unités du haut (649.8 unités d'encre). */
.kso-nom__pinceau, .kso-nom__aisance, .kso-nom__jointure { display: none; }
[data-kso-direction="geste-approfondi"] .kso-nom__pinceau,
[data-kso-direction="aisance"] .kso-nom__aisance,
[data-kso-direction="jointure"] .kso-nom__jointure { display: inline; }
[data-kso-direction="geste-approfondi"] .kso-nom__encre,
[data-kso-direction="aisance"] .kso-nom__encre,
[data-kso-direction="jointure"] .kso-nom__encre { display: none; }
/* Les trois mouvements produits cèdent la place au tracé source exact au même instant que A d'origine et B.
   C et D : le calque animé n'apparaît qu'à leur départ ; « kso-masquer » ne remplit que l'après, si bien qu'il
   l'emporte sur « kso-montrer » à partir de 1,40 s sans le contredire avant. Aucun élément intérieur ne fixe
   sa propre visibilité : le masquage de 1,40 s s'applique à tout le calque (correction groupée de la quatrième passe). */
html.kso-intro[data-kso-direction="geste-approfondi"] .kso-voile .kso-nom__anime,
[data-kso-direction="geste-approfondi"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="geste-approfondi"] .kso-nom__anime {
  animation: kso-masquer 0s linear var(--kso-t-fin-nom) both;
}
html.kso-intro[data-kso-direction="aisance"] .kso-voile .kso-nom__anime,
[data-kso-direction="aisance"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="aisance"] .kso-nom__anime {
  animation: kso-montrer 0s linear 200ms both, kso-masquer 0s linear var(--kso-t-fin-nom) forwards;
}
html.kso-intro[data-kso-direction="jointure"] .kso-voile .kso-nom__anime,
[data-kso-direction="jointure"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="jointure"] .kso-nom__anime {
  animation: kso-montrer 0s linear 200ms both, kso-masquer 0s linear var(--kso-t-fin-nom) forwards;
}
/* A corrigée : un seul geste. Les trois poils suivent la même progression (une courbe de Bézier cubique :
   position et vitesse continues, vitesse nulle au départ et à l'arrivée) ; le pinceau est arrêté avant 1,40 s
   et couvre alors tout le nom et sa marge, si bien que le calque animé rend exactement le tracé source. */
.kso-poil { stroke-dasharray: 1 2; stroke-dashoffset: 1; }
html.kso-intro[data-kso-direction="geste-approfondi"] .kso-voile .kso-poil,
[data-kso-direction="geste-approfondi"] .kso-joue .kso-poil,
.kso-joue[data-kso-direction="geste-approfondi"] .kso-poil {
  animation: kso-pinceau 1060ms cubic-bezier(.4,0,.2,1) 240ms both;
}
@keyframes kso-pinceau { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } }
/* C, L'aisance : le nom arrive entier, serré et trop noir (trait de même encre autour des lettres, angles vifs),
   puis prend ses aises d'un seul souffle. Propriétés de peinture et transformations SVG seulement. Les animations ne
   remplissent que l'avant (backwards) : leur état d'arrivée est l'état de base (aucun décalage, aucun trait), si bien
   qu'une fois arrêtées elles ne laissent aucune transformation active ni calque composité. */
.kso-aisance { stroke: currentColor; stroke-width: 0; stroke-linejoin: miter; stroke-miterlimit: 3; }
html.kso-intro[data-kso-direction="aisance"] .kso-voile .kso-aisance--1,
[data-kso-direction="aisance"] .kso-joue .kso-aisance--1,
.kso-joue[data-kso-direction="aisance"] .kso-aisance--1 {
  animation: kso-aisance-graisse 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards, kso-aisance-1 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards;
}
@keyframes kso-aisance-1 { from { transform: translateX(39.2px); } to { transform: none; } }
html.kso-intro[data-kso-direction="aisance"] .kso-voile .kso-aisance--2,
[data-kso-direction="aisance"] .kso-joue .kso-aisance--2,
.kso-joue[data-kso-direction="aisance"] .kso-aisance--2 {
  animation: kso-aisance-graisse 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards, kso-aisance-2 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards;
}
@keyframes kso-aisance-2 { from { transform: translateX(28.8px); } to { transform: none; } }
html.kso-intro[data-kso-direction="aisance"] .kso-voile .kso-aisance--3,
[data-kso-direction="aisance"] .kso-joue .kso-aisance--3,
.kso-joue[data-kso-direction="aisance"] .kso-aisance--3 {
  animation: kso-aisance-graisse 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards, kso-aisance-3 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards;
}
@keyframes kso-aisance-3 { from { transform: translateX(11.9px); } to { transform: none; } }
html.kso-intro[data-kso-direction="aisance"] .kso-voile .kso-aisance--4,
[data-kso-direction="aisance"] .kso-joue .kso-aisance--4,
.kso-joue[data-kso-direction="aisance"] .kso-aisance--4 {
  animation: kso-aisance-graisse 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards, kso-aisance-4 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards;
}
@keyframes kso-aisance-4 { from { transform: translateX(-16.5px); } to { transform: none; } }
html.kso-intro[data-kso-direction="aisance"] .kso-voile .kso-aisance--5,
[data-kso-direction="aisance"] .kso-joue .kso-aisance--5,
.kso-joue[data-kso-direction="aisance"] .kso-aisance--5 {
  animation: kso-aisance-graisse 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards, kso-aisance-5 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards;
}
@keyframes kso-aisance-5 { from { transform: translateX(-20.8px); } to { transform: none; } }
html.kso-intro[data-kso-direction="aisance"] .kso-voile .kso-aisance--6,
[data-kso-direction="aisance"] .kso-joue .kso-aisance--6,
.kso-joue[data-kso-direction="aisance"] .kso-aisance--6 {
  animation: kso-aisance-graisse 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards, kso-aisance-6 1050ms cubic-bezier(.22,.5,.18,1) 200ms backwards;
}
@keyframes kso-aisance-6 { from { transform: translateX(-39.2px); } to { transform: none; } }
@keyframes kso-aisance-graisse { from { stroke-width: 12px; } to { stroke-width: 0; } }
/* D, La jointure : ouvert en deux le long de sa ligne la moins encrée, le nom se referme. Une fois les deux parts
   jointes, le nom entier (sans coupe) prend leur place : aucune couture ne reste avant la bascule de 1,40 s.
   Remplissage de l'avant seulement (backwards) : l'état d'arrivée est l'état de base, aucune transformation ne reste active. */
.kso-jointure__plein { fill-opacity: 1; }
html.kso-intro[data-kso-direction="jointure"] .kso-voile .kso-jointure__haut,
[data-kso-direction="jointure"] .kso-joue .kso-jointure__haut,
.kso-joue[data-kso-direction="jointure"] .kso-jointure__haut {
  animation: kso-jointure-haut 750ms cubic-bezier(.7,0,.25,1) 200ms backwards;
}
html.kso-intro[data-kso-direction="jointure"] .kso-voile .kso-jointure__bas,
[data-kso-direction="jointure"] .kso-joue .kso-jointure__bas,
.kso-joue[data-kso-direction="jointure"] .kso-jointure__bas {
  animation: kso-jointure-bas 750ms cubic-bezier(.7,0,.25,1) 200ms backwards;
}
html.kso-intro[data-kso-direction="jointure"] .kso-voile .kso-jointure__moities,
[data-kso-direction="jointure"] .kso-joue .kso-jointure__moities,
.kso-joue[data-kso-direction="jointure"] .kso-jointure__moities {
  animation: kso-jointure-fin-moities 0s linear 950ms backwards;
}
html.kso-intro[data-kso-direction="jointure"] .kso-voile .kso-jointure__plein,
[data-kso-direction="jointure"] .kso-joue .kso-jointure__plein,
.kso-joue[data-kso-direction="jointure"] .kso-jointure__plein {
  animation: kso-jointure-fin-plein 0s linear 950ms backwards;
}
@keyframes kso-jointure-haut { from { transform: translateY(-18px); } to { transform: none; } }
@keyframes kso-jointure-bas { from { transform: translateY(18px); } to { transform: none; } }
@keyframes kso-jointure-fin-moities { from { fill-opacity: 1; } to { fill-opacity: 0; } }
@keyframes kso-jointure-fin-plein { from { fill-opacity: 0; } to { fill-opacity: 1; } }
.kso-jointure__moities { fill-opacity: 0; }
/* Mouvement réduit : les éléments animés des trois mouvements produits restent immobiles hors examen. */
@media (prefers-reduced-motion: reduce) {
  html:not(.kso-examen) .kso-joue .kso-poil,
  html:not(.kso-examen) .kso-joue .kso-aisance,
  html:not(.kso-examen) .kso-joue .kso-jointure__haut,
  html:not(.kso-examen) .kso-joue .kso-jointure__bas,
  html:not(.kso-examen) .kso-joue .kso-jointure__moities,
  html:not(.kso-examen) .kso-joue .kso-jointure__plein { animation: none !important; }
}
/* KSO GÉNÉRÉ : FIN TROIS NOUVEAUX MOUVEMENTS */

/* ---------- Cinquième passe : Le tracé, L'aplomb, La gravure, Le verre cannelé, Le galbe ----------
   Ajoutées après les règles ci-dessus, sans les modifier : B, C, D, les deux témoins A et les trois transitions
   gardent leurs règles, leurs paramètres et leurs rythmes. Chaque création a ses propres sélecteurs. */
/* KSO GÉNÉRÉ : DÉBUT CINQ CRÉATIONS */
/* Générés par Sources éditables/generer-ouverture.mjs avec cinquieme-passe.mjs (constante CINQUIEME) : ne pas modifier à la main.
   La gravure : 114 tailles au pas de 14 unités, à 67.3°.
   Le verre cannelé : 36 cannelures. Le galbe : 52 lobes ajoutés et 37 retirés, écart maximal corde-courbe 28.1 unités. */
.kso-nom__aplomb, .kso-nom__gravure, .kso-nom__cannelure, .kso-nom__galbe { display: none; }
[data-kso-direction="aplomb"] .kso-nom__aplomb,
[data-kso-direction="gravure"] .kso-nom__gravure,
[data-kso-direction="cannelure"] .kso-nom__cannelure,
[data-kso-direction="galbe"] .kso-nom__galbe { display: inline; }
[data-kso-direction="aplomb"] .kso-nom__encre,
[data-kso-direction="gravure"] .kso-nom__encre,
[data-kso-direction="cannelure"] .kso-nom__encre,
[data-kso-direction="galbe"] .kso-nom__encre { display: none; }
/* Comme C et D : le calque animé apparaît à 200 ms et cède la place au tracé source exact à 1,40 s.
   Aucun élément intérieur ne fixe sa propre visibilité. Toutes les animations ne remplissent que l'avant (backwards) :
   leur état d'arrivée est l'état de base (masques pleins, aucune transformation, aucune taille hors des lettres). */
html.kso-intro[data-kso-direction="aplomb"] .kso-voile .kso-nom__anime,
[data-kso-direction="aplomb"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="aplomb"] .kso-nom__anime,
html.kso-intro[data-kso-direction="gravure"] .kso-voile .kso-nom__anime,
[data-kso-direction="gravure"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="gravure"] .kso-nom__anime,
html.kso-intro[data-kso-direction="cannelure"] .kso-voile .kso-nom__anime,
[data-kso-direction="cannelure"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="cannelure"] .kso-nom__anime,
html.kso-intro[data-kso-direction="galbe"] .kso-voile .kso-nom__anime,
[data-kso-direction="galbe"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="galbe"] .kso-nom__anime {
  animation: kso-montrer 0s linear 200ms both, kso-masquer 0s linear var(--kso-t-fin-nom) forwards;
}
/* Fin du verre cannelé et du galbe : à l'arrêt de leur mouvement, le nom entier (sans masque ni découpe)
   prend la place du rendu animé sur la même image (opacité de remplissage, sans fondu ; même procédé que la jointure). */
.kso-cinq__anime { fill-opacity: 0; }
.kso-cinq__plein { fill-opacity: 1; }
html.kso-intro[data-kso-direction="cannelure"] .kso-voile .kso-nom__cannelure .kso-cinq__anime,
[data-kso-direction="cannelure"] .kso-joue .kso-nom__cannelure .kso-cinq__anime,
.kso-joue[data-kso-direction="cannelure"] .kso-nom__cannelure .kso-cinq__anime {
  animation: kso-cinq-fin-anime 0s linear 1230ms backwards;
}
html.kso-intro[data-kso-direction="cannelure"] .kso-voile .kso-nom__cannelure .kso-cinq__plein,
[data-kso-direction="cannelure"] .kso-joue .kso-nom__cannelure .kso-cinq__plein,
.kso-joue[data-kso-direction="cannelure"] .kso-nom__cannelure .kso-cinq__plein {
  animation: kso-cinq-fin-plein 0s linear 1230ms backwards;
}
html.kso-intro[data-kso-direction="galbe"] .kso-voile .kso-nom__galbe .kso-cinq__anime,
[data-kso-direction="galbe"] .kso-joue .kso-nom__galbe .kso-cinq__anime,
.kso-joue[data-kso-direction="galbe"] .kso-nom__galbe .kso-cinq__anime {
  animation: kso-cinq-fin-anime 0s linear 1220ms backwards;
}
html.kso-intro[data-kso-direction="galbe"] .kso-voile .kso-nom__galbe .kso-cinq__plein,
[data-kso-direction="galbe"] .kso-joue .kso-nom__galbe .kso-cinq__plein,
.kso-joue[data-kso-direction="galbe"] .kso-nom__galbe .kso-cinq__plein {
  animation: kso-cinq-fin-plein 0s linear 1220ms backwards;
}
@keyframes kso-cinq-fin-anime { from { fill-opacity: 1; } to { fill-opacity: 0; } }
@keyframes kso-cinq-fin-plein { from { fill-opacity: 0; } to { fill-opacity: 1; } }
/* A2 · L'aplomb : pivot sur le coin inférieur gauche du fût du premier K (0, 324.5). */
.kso-aplomb { transform-box: view-box; transform-origin: 0px 324.5px; }
html.kso-intro[data-kso-direction="aplomb"] .kso-voile .kso-aplomb,
[data-kso-direction="aplomb"] .kso-joue .kso-aplomb,
.kso-joue[data-kso-direction="aplomb"] .kso-aplomb {
  animation: kso-aplomb 950ms cubic-bezier(.5,0,.1,1) 300ms backwards;
}
@keyframes kso-aplomb { from { transform: rotate(-2.6deg); } to { transform: none; } }
/* A3 · La gravure : une même plaque de tailles ; dans les lettres (masque) elles s'épaississent jusqu'au plein,
   hors des lettres (encre) elles s'amincissent jusqu'à zéro. Au départ, les deux épaisseurs sont égales : la plaque est uniforme. */
.kso-gravure__dedans { stroke-width: 17px; }
.kso-gravure__dehors { stroke-width: 0; }
html.kso-intro[data-kso-direction="gravure"] .kso-voile .kso-gravure__dedans,
[data-kso-direction="gravure"] .kso-joue .kso-gravure__dedans,
.kso-joue[data-kso-direction="gravure"] .kso-gravure__dedans {
  animation: kso-gravure-dedans 1000ms linear 200ms backwards;
}
html.kso-intro[data-kso-direction="gravure"] .kso-voile .kso-gravure__dehors,
[data-kso-direction="gravure"] .kso-joue .kso-gravure__dehors,
.kso-joue[data-kso-direction="gravure"] .kso-gravure__dehors {
  animation: kso-gravure-dehors 1000ms linear 200ms backwards;
}
@keyframes kso-gravure-dedans { 0% { stroke-width: 2.6px; animation-timing-function: cubic-bezier(.4,0,.6,1); } 45% { stroke-width: 7px; animation-timing-function: cubic-bezier(.5,0,.3,1); } 100% { stroke-width: 17px; } }
@keyframes kso-gravure-dehors { 0% { stroke-width: 2.6px; animation-timing-function: cubic-bezier(.4,0,.6,1); } 45% { stroke-width: 1.2px; animation-timing-function: cubic-bezier(.5,0,.3,1); } 100% { stroke-width: 0; } }
/* E · Le verre cannelé : chaque cannelure montre le nom comprimé autour de son axe (origine du repère local). */
html.kso-intro[data-kso-direction="cannelure"] .kso-voile .kso-cannelure__vue,
[data-kso-direction="cannelure"] .kso-joue .kso-cannelure__vue,
.kso-joue[data-kso-direction="cannelure"] .kso-cannelure__vue {
  animation: kso-cannelure 970ms cubic-bezier(.45,0,.2,1) 260ms backwards;
}
@keyframes kso-cannelure { from { transform: scaleX(0.6); } to { transform: none; } }
/* F · Le galbe : chaque lobe entre une corde et sa courbe croît perpendiculairement à la corde (repère local). */
html.kso-intro[data-kso-direction="galbe"] .kso-voile .kso-galbe__lobe,
[data-kso-direction="galbe"] .kso-joue .kso-galbe__lobe,
.kso-joue[data-kso-direction="galbe"] .kso-galbe__lobe {
  animation: kso-galbe 900ms cubic-bezier(.45,0,.2,1) 320ms backwards;
}
@keyframes kso-galbe { from { transform: scaleY(0); } to { transform: none; } }
/* Mouvement réduit : les éléments animés des quatre créations restent immobiles hors examen. */
@media (prefers-reduced-motion: reduce) {
  html:not(.kso-examen) .kso-joue .kso-aplomb,
  html:not(.kso-examen) .kso-joue .kso-gravure__dedans,
  html:not(.kso-examen) .kso-joue .kso-gravure__dehors,
  html:not(.kso-examen) .kso-joue .kso-cannelure__vue,
  html:not(.kso-examen) .kso-joue .kso-galbe__lobe,
  html:not(.kso-examen) .kso-joue .kso-cinq__anime,
  html:not(.kso-examen) .kso-joue .kso-cinq__plein { animation: none !important; }
}
/* KSO GÉNÉRÉ : FIN CINQ CRÉATIONS */

/* ---------- Sixième passe : Le tracé affiné (A1), Le tracé d'ensemble, Le trait qui prend corps, La signature initiale ----------
   Ajoutées après les règles ci-dessus. Le tracé de cinquième passe est retiré du bloc précédent : Le tracé affiné le
   remplace sous la même clé « trace ». Les autres candidates, les deux témoins et les trois transitions gardent leurs
   règles, leurs paramètres et leurs rythmes. Chaque traitement a ses propres sélecteurs. */
/* KSO GÉNÉRÉ : DÉBUT SIXIÈME PASSE */
/* Générés par Sources éditables/generer-ouverture.mjs avec sixieme-passe.mjs (constante SIXIEME) et la géométrie
   mesurée dans geometrie-des-traits.json : ne pas modifier à la main. */
.kso-nom__trace, .kso-nom__trace-ensemble, .kso-nom__trace-corps { display: none; }
[data-kso-direction="trace"] .kso-nom__trace,
[data-kso-direction="trace-ensemble"] .kso-nom__trace-ensemble,
[data-kso-direction="trace-corps"] .kso-nom__trace-corps { display: inline; }
[data-kso-direction="trace"] .kso-nom__encre,
[data-kso-direction="trace-ensemble"] .kso-nom__encre,
[data-kso-direction="trace-corps"] .kso-nom__encre { display: none; }
/* Comme les autres créations : le calque animé apparaît à 200 ms et cède la place au tracé source exact à 1,40 s.
   Aucun élément intérieur ne fixe sa propre visibilité ; toutes les animations ne remplissent que l'avant (backwards). */
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-nom__anime,
[data-kso-direction="trace"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="trace"] .kso-nom__anime,
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-nom__anime,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-nom__anime,
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-nom__anime,
[data-kso-direction="trace-corps"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="trace-corps"] .kso-nom__anime {
  animation: kso-montrer 0s linear 200ms both, kso-masquer 0s linear var(--kso-t-fin-nom) forwards;
}
/* Fin du mouvement : le nom entier, sans masque, prend la place du rendu masqué sur la même image (opacité de remplissage). */
.kso-six__anime { fill-opacity: 0; }
.kso-six__plein { fill-opacity: 1; }
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-nom__trace .kso-six__anime,
[data-kso-direction="trace"] .kso-joue .kso-nom__trace .kso-six__anime,
.kso-joue[data-kso-direction="trace"] .kso-nom__trace .kso-six__anime {
  animation: kso-six-fin-anime 0s linear 1200ms backwards;
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-nom__trace .kso-six__plein,
[data-kso-direction="trace"] .kso-joue .kso-nom__trace .kso-six__plein,
.kso-joue[data-kso-direction="trace"] .kso-nom__trace .kso-six__plein {
  animation: kso-six-fin-plein 0s linear 1200ms backwards;
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-nom__trace-ensemble .kso-six__anime,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-nom__trace-ensemble .kso-six__anime,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-nom__trace-ensemble .kso-six__anime {
  animation: kso-six-fin-anime 0s linear 1220ms backwards;
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-nom__trace-ensemble .kso-six__plein,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-nom__trace-ensemble .kso-six__plein,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-nom__trace-ensemble .kso-six__plein {
  animation: kso-six-fin-plein 0s linear 1220ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-nom__trace-corps .kso-six__anime,
[data-kso-direction="trace-corps"] .kso-joue .kso-nom__trace-corps .kso-six__anime,
.kso-joue[data-kso-direction="trace-corps"] .kso-nom__trace-corps .kso-six__anime {
  animation: kso-six-fin-anime 0s linear 1240ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-nom__trace-corps .kso-six__plein,
[data-kso-direction="trace-corps"] .kso-joue .kso-nom__trace-corps .kso-six__plein,
.kso-joue[data-kso-direction="trace-corps"] .kso-nom__trace-corps .kso-six__plein {
  animation: kso-six-fin-plein 0s linear 1240ms backwards;
}
@keyframes kso-six-fin-anime { from { fill-opacity: 1; } to { fill-opacity: 0; } }
@keyframes kso-six-fin-plein { from { fill-opacity: 0; } to { fill-opacity: 1; } }
/* Le tracé affiné et le tracé d'ensemble : chaque partie est révélée par un trait à bouts droits, découpé à sa zone.
   Avant son départ, le trait s'arrête 8 unités avant la première encre de sa zone : rien n'est visible. */
.kso-six__p { stroke-dasharray: 1 2; stroke-dashoffset: 0; }
@keyframes kso-six-k1-fut { from { stroke-dashoffset: 0.9898; } to { stroke-dashoffset: 0.0292; } }
@keyframes kso-six-l-fut { from { stroke-dashoffset: 0.9913; } to { stroke-dashoffset: 0.0292; } }
@keyframes kso-six-i-fut { from { stroke-dashoffset: 0.9898; } to { stroke-dashoffset: 0.0292; } }
@keyframes kso-six-p-fut { from { stroke-dashoffset: 0.9898; } to { stroke-dashoffset: 0.0292; } }
@keyframes kso-six-s-epine { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0.0034; } }
@keyframes kso-six-k2-fut { from { stroke-dashoffset: 0.9898; } to { stroke-dashoffset: 0.0292; } }
@keyframes kso-six-k1-bras { from { stroke-dashoffset: 0.9217; } to { stroke-dashoffset: 0.1087; } }
@keyframes kso-six-k1-jambe { from { stroke-dashoffset: 0.9508; } to { stroke-dashoffset: 0.0723; } }
@keyframes kso-six-l-pied { from { stroke-dashoffset: 0.8977; } to { stroke-dashoffset: 0.0956; } }
@keyframes kso-six-p-panse { from { stroke-dashoffset: 0.9753; } to { stroke-dashoffset: 0.0403; } }
@keyframes kso-six-s-haut { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0.0395; } }
@keyframes kso-six-s-bas { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0.032; } }
@keyframes kso-six-k2-bras { from { stroke-dashoffset: 0.9105; } to { stroke-dashoffset: 0.0975; } }
@keyframes kso-six-k2-jambe { from { stroke-dashoffset: 0.9549; } to { stroke-dashoffset: 0.0655; } }
@keyframes kso-six-s-entier { from { stroke-dashoffset: 0.9941; } to { stroke-dashoffset: 0.0118; } }
/* Le tracé affiné : premier accord 200 à 500 ms (fûts et épine du S), second accord 560 à 1200 ms (courbes).
   Le tracé d'ensemble : fûts 200 à 620 ms ; départs des courbes k1-bras 450, k1-jambe 450, l-pied 620, p-panse 220, k2-bras 450, k2-jambe 450 ms ; S 200 ms ; toutes les courbes arrivent à 1220 ms. */
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--k1-fut,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--k1-fut,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--k1-fut {
  animation: kso-six-k1-fut 300ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
  animation-timing-function: linear(0, 0.0356 1.23%, 0.0569 3.13%, 0.0843 5.42%, 0.1167 7.99%, 0.1529 10.8%, 0.1936 13.81%, 0.236 17.01%, 0.2809 20.37%, 0.3278 23.88%, 0.3764 27.53%, 0.4257 31.31%, 0.4748 35.21%, 0.5251 39.23%, 0.5752 43.36%, 0.6236 47.59%, 0.6719 51.92%, 0.7191 56.35%, 0.7635 60.87%, 0.8065 65.48%, 0.8464 70.17%, 0.8835 74.95%, 0.9161 79.81%, 0.9445 84.75%, 0.9669 89.76%, 0.9836 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--l-fut,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--l-fut,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--l-fut {
  animation: kso-six-l-fut 300ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
  animation-timing-function: linear(0, 0.0363 1.23%, 0.0576 3.13%, 0.085 5.42%, 0.1173 7.99%, 0.1536 10.8%, 0.1931 13.81%, 0.2367 17.01%, 0.281 20.37%, 0.3284 23.88%, 0.3771 27.53%, 0.4254 31.31%, 0.4755 35.21%, 0.5252 39.23%, 0.5745 43.36%, 0.6241 47.59%, 0.6713 51.92%, 0.7185 56.35%, 0.764 60.87%, 0.8059 65.48%, 0.8457 70.17%, 0.8829 74.95%, 0.9156 79.81%, 0.944 84.75%, 0.9662 89.76%, 0.983 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--i-fut,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--i-fut,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--i-fut {
  animation: kso-six-i-fut 300ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
  animation-timing-function: linear(0, 0.0358 1.23%, 0.0572 3.13%, 0.0847 5.42%, 0.117 7.99%, 0.1532 10.8%, 0.1938 13.81%, 0.2362 17.01%, 0.2811 20.37%, 0.328 23.88%, 0.3766 27.53%, 0.4257 31.31%, 0.4747 35.21%, 0.5248 39.23%, 0.5747 43.36%, 0.6231 47.59%, 0.6712 51.92%, 0.7184 56.35%, 0.7626 60.87%, 0.8058 65.48%, 0.8457 70.17%, 0.8829 74.95%, 0.9157 79.81%, 0.9442 84.75%, 0.9666 89.76%, 0.9834 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--p-fut,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--p-fut,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--p-fut {
  animation: kso-six-p-fut 300ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
  animation-timing-function: linear(0, 0.0353 1.23%, 0.0566 3.13%, 0.084 5.42%, 0.1164 7.99%, 0.1525 10.8%, 0.1928 13.81%, 0.2352 17.01%, 0.2797 20.37%, 0.3266 23.88%, 0.3752 27.53%, 0.4242 31.31%, 0.4734 35.21%, 0.5238 39.23%, 0.5739 43.36%, 0.6221 47.59%, 0.6705 51.92%, 0.7178 56.35%, 0.762 60.87%, 0.8054 65.48%, 0.8452 70.17%, 0.8826 74.95%, 0.9155 79.81%, 0.944 84.75%, 0.9663 89.76%, 0.9832 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--s-epine,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--s-epine,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--s-epine {
  animation: kso-six-s-epine 300ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
  animation-timing-function: linear(0, 0.0302 1.23%, 0.0565 3.13%, 0.0883 5.42%, 0.1237 7.99%, 0.1614 10.8%, 0.2021 13.81%, 0.2428 17.01%, 0.2856 20.37%, 0.3303 23.88%, 0.3783 27.53%, 0.4255 31.31%, 0.4731 35.21%, 0.5224 39.23%, 0.5693 43.36%, 0.6154 47.59%, 0.6617 51.92%, 0.706 56.35%, 0.7479 60.87%, 0.7876 65.48%, 0.8266 70.17%, 0.8629 74.95%, 0.8969 79.81%, 0.9279 84.75%, 0.9544 89.76%, 0.9746 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--k2-fut,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--k2-fut,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--k2-fut {
  animation: kso-six-k2-fut 300ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
  animation-timing-function: linear(0, 0.0355 1.23%, 0.0569 3.13%, 0.0843 5.42%, 0.1168 7.99%, 0.153 10.8%, 0.1936 13.81%, 0.236 17.01%, 0.2808 20.37%, 0.327 23.88%, 0.3756 27.53%, 0.4246 31.31%, 0.4738 35.21%, 0.5242 39.23%, 0.5742 43.36%, 0.6228 47.59%, 0.6714 51.92%, 0.7187 56.35%, 0.763 60.87%, 0.8062 65.48%, 0.846 70.17%, 0.8831 74.95%, 0.9158 79.81%, 0.9442 84.75%, 0.9664 89.76%, 0.9832 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--k1-bras,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--k1-bras,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--k1-bras {
  animation: kso-six-k1-bras 640ms cubic-bezier(.146,.116,.597,.983) 560ms backwards;
  animation-timing-function: linear(0, 0.0861 1.23%, 0.1335 3.13%, 0.1825 5.42%, 0.247 7.99%, 0.313 10.8%, 0.374 13.81%, 0.4314 17.01%, 0.4813 20.37%, 0.5283 23.88%, 0.5696 27.53%, 0.6085 31.31%, 0.6447 35.21%, 0.6764 39.23%, 0.708 43.36%, 0.7377 47.59%, 0.7656 51.92%, 0.7891 56.35%, 0.8126 60.87%, 0.8338 65.48%, 0.8539 70.17%, 0.8746 74.95%, 0.894 79.81%, 0.9164 84.75%, 0.9399 89.76%, 0.9648 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--k1-jambe,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--k1-jambe,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--k1-jambe {
  animation: kso-six-k1-jambe 640ms cubic-bezier(.146,.116,.597,.983) 560ms backwards;
  animation-timing-function: linear(0, 0.0538 1.23%, 0.0777 3.13%, 0.1341 5.42%, 0.1986 7.99%, 0.2478 10.8%, 0.2886 13.81%, 0.3279 17.01%, 0.3638 20.37%, 0.4007 23.88%, 0.4361 27.53%, 0.4722 31.31%, 0.5087 35.21%, 0.5435 39.23%, 0.5794 43.36%, 0.6131 47.59%, 0.6476 51.92%, 0.6796 56.35%, 0.7125 60.87%, 0.7445 65.48%, 0.776 70.17%, 0.8095 74.95%, 0.8426 79.81%, 0.8801 84.75%, 0.92 89.76%, 0.9622 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--l-pied,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--l-pied,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--l-pied {
  animation: kso-six-l-pied 640ms cubic-bezier(.146,.116,.597,.983) 560ms backwards;
  animation-timing-function: linear(0, 0.0652 1.23%, 0.1076 3.13%, 0.1607 5.42%, 0.2212 7.99%, 0.2802 10.8%, 0.3402 13.81%, 0.3972 17.01%, 0.449 20.37%, 0.497 23.88%, 0.5416 27.53%, 0.5831 31.31%, 0.6205 35.21%, 0.6551 39.23%, 0.6881 43.36%, 0.7164 47.59%, 0.7426 51.92%, 0.768 56.35%, 0.789 60.87%, 0.8116 65.48%, 0.836 70.17%, 0.8611 74.95%, 0.8855 79.81%, 0.9095 84.75%, 0.9335 89.76%, 0.9581 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--p-panse,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--p-panse,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--p-panse {
  animation: kso-six-p-panse 640ms cubic-bezier(.146,.116,.597,.983) 560ms backwards;
  animation-timing-function: linear(0, 0.0482 1.23%, 0.0973 3.13%, 0.1618 5.42%, 0.2207 7.99%, 0.2673 10.8%, 0.3052 13.81%, 0.3395 17.01%, 0.3718 20.37%, 0.402 23.88%, 0.4322 27.53%, 0.4614 31.31%, 0.4905 35.21%, 0.5195 39.23%, 0.5485 43.36%, 0.5776 47.59%, 0.6077 51.92%, 0.637 56.35%, 0.6676 60.87%, 0.7 65.48%, 0.7358 70.17%, 0.777 74.95%, 0.8261 79.81%, 0.8851 84.75%, 0.9394 89.76%, 0.9772 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--s-haut,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--s-haut,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--s-haut {
  animation: kso-six-s-haut 640ms cubic-bezier(.146,.116,.597,.983) 560ms backwards;
  animation-timing-function: linear(0, 0.0252 1.23%, 0.0396 3.13%, 0.0597 5.42%, 0.0853 7.99%, 0.1176 10.8%, 0.1573 13.81%, 0.2092 17.01%, 0.2806 20.37%, 0.3888 23.88%, 0.4947 27.53%, 0.5709 31.31%, 0.6279 35.21%, 0.6752 39.23%, 0.7155 43.36%, 0.7518 47.59%, 0.7845 51.92%, 0.8141 56.35%, 0.8425 60.87%, 0.8669 65.48%, 0.8891 70.17%, 0.9091 74.95%, 0.9266 79.81%, 0.9419 84.75%, 0.9566 89.76%, 0.9725 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--s-bas,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--s-bas,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--s-bas {
  animation: kso-six-s-bas 640ms cubic-bezier(.146,.116,.597,.983) 560ms backwards;
  animation-timing-function: linear(0, 0.0212 1.23%, 0.0362 3.13%, 0.0561 5.42%, 0.0826 7.99%, 0.1145 10.8%, 0.1562 13.81%, 0.2108 17.01%, 0.2925 20.37%, 0.4081 23.88%, 0.507 27.53%, 0.5765 31.31%, 0.6313 35.21%, 0.6771 39.23%, 0.7167 43.36%, 0.7527 47.59%, 0.7857 51.92%, 0.8151 56.35%, 0.8431 60.87%, 0.8681 65.48%, 0.8917 70.17%, 0.9113 74.95%, 0.9297 79.81%, 0.9452 84.75%, 0.9595 89.76%, 0.9763 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--k2-bras,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--k2-bras,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--k2-bras {
  animation: kso-six-k2-bras 640ms cubic-bezier(.146,.116,.597,.983) 560ms backwards;
  animation-timing-function: linear(0, 0.0858 1.23%, 0.1311 3.13%, 0.1757 5.42%, 0.2383 7.99%, 0.3039 10.8%, 0.366 13.81%, 0.4243 17.01%, 0.4746 20.37%, 0.5218 23.88%, 0.5642 27.53%, 0.602 31.31%, 0.6383 35.21%, 0.6704 39.23%, 0.7017 43.36%, 0.7315 47.59%, 0.7596 51.92%, 0.7829 56.35%, 0.8062 60.87%, 0.8275 65.48%, 0.8482 70.17%, 0.8697 74.95%, 0.8903 79.81%, 0.9128 84.75%, 0.9371 89.76%, 0.9624 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace"] .kso-voile .kso-ta__p--k2-jambe,
[data-kso-direction="trace"] .kso-joue .kso-ta__p--k2-jambe,
.kso-joue[data-kso-direction="trace"] .kso-ta__p--k2-jambe {
  animation: kso-six-k2-jambe 640ms cubic-bezier(.146,.116,.597,.983) 560ms backwards;
  animation-timing-function: linear(0, 0.0534 1.23%, 0.0772 3.13%, 0.132 5.42%, 0.1996 7.99%, 0.2479 10.8%, 0.2887 13.81%, 0.3275 17.01%, 0.363 20.37%, 0.3997 23.88%, 0.4346 27.53%, 0.4711 31.31%, 0.5063 35.21%, 0.5424 39.23%, 0.5773 43.36%, 0.6111 47.59%, 0.646 51.92%, 0.6782 56.35%, 0.7112 60.87%, 0.7421 65.48%, 0.7749 70.17%, 0.8067 74.95%, 0.8414 79.81%, 0.8767 84.75%, 0.918 89.76%, 0.9585 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--k1-fut,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--k1-fut,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--k1-fut {
  animation: kso-six-k1-fut 420ms cubic-bezier(.107,.103,.626,.955) 200ms backwards;
  animation-timing-function: linear(0, 0.0371 1.23%, 0.0598 3.13%, 0.0882 5.42%, 0.121 7.99%, 0.1573 10.8%, 0.198 13.81%, 0.2394 17.01%, 0.2838 20.37%, 0.329 23.88%, 0.3764 27.53%, 0.424 31.31%, 0.4718 35.21%, 0.5207 39.23%, 0.5693 43.36%, 0.6161 47.59%, 0.6637 51.92%, 0.7101 56.35%, 0.7538 60.87%, 0.7961 65.48%, 0.8365 70.17%, 0.8735 74.95%, 0.9078 79.81%, 0.9377 84.75%, 0.9624 89.76%, 0.9818 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--l-fut,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--l-fut,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--l-fut {
  animation: kso-six-l-fut 420ms cubic-bezier(.107,.103,.626,.955) 200ms backwards;
  animation-timing-function: linear(0, 0.0378 1.23%, 0.0605 3.13%, 0.0889 5.42%, 0.1216 7.99%, 0.158 10.8%, 0.1973 13.81%, 0.2401 17.01%, 0.2834 20.37%, 0.3297 23.88%, 0.377 27.53%, 0.4239 31.31%, 0.4726 35.21%, 0.5201 39.23%, 0.5687 43.36%, 0.6165 47.59%, 0.6631 51.92%, 0.7096 56.35%, 0.7534 60.87%, 0.7964 65.48%, 0.8359 70.17%, 0.8728 74.95%, 0.9071 79.81%, 0.937 84.75%, 0.9618 89.76%, 0.9811 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--i-fut,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--i-fut,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--i-fut {
  animation: kso-six-i-fut 420ms cubic-bezier(.107,.103,.626,.955) 200ms backwards;
  animation-timing-function: linear(0, 0.0374 1.23%, 0.0601 3.13%, 0.0886 5.42%, 0.1213 7.99%, 0.1576 10.8%, 0.1982 13.81%, 0.2396 17.01%, 0.284 20.37%, 0.3292 23.88%, 0.3765 27.53%, 0.424 31.31%, 0.4717 35.21%, 0.5204 39.23%, 0.5688 43.36%, 0.6157 47.59%, 0.663 51.92%, 0.7092 56.35%, 0.7531 60.87%, 0.7952 65.48%, 0.8358 70.17%, 0.8728 74.95%, 0.9072 79.81%, 0.9372 84.75%, 0.962 89.76%, 0.9815 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--p-fut,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--p-fut,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--p-fut {
  animation: kso-six-p-fut 420ms cubic-bezier(.107,.103,.626,.955) 200ms backwards;
  animation-timing-function: linear(0, 0.0368 1.23%, 0.0596 3.13%, 0.088 5.42%, 0.1208 7.99%, 0.1569 10.8%, 0.1973 13.81%, 0.2386 17.01%, 0.2825 20.37%, 0.3279 23.88%, 0.3752 27.53%, 0.4224 31.31%, 0.4704 35.21%, 0.5194 39.23%, 0.5678 43.36%, 0.6148 47.59%, 0.6624 51.92%, 0.7086 56.35%, 0.7525 60.87%, 0.7948 65.48%, 0.8355 70.17%, 0.8725 74.95%, 0.907 79.81%, 0.937 84.75%, 0.9618 89.76%, 0.9813 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--k2-fut,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--k2-fut,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--k2-fut {
  animation: kso-six-k2-fut 420ms cubic-bezier(.107,.103,.626,.955) 200ms backwards;
  animation-timing-function: linear(0, 0.037 1.23%, 0.0598 3.13%, 0.0882 5.42%, 0.1211 7.99%, 0.1574 10.8%, 0.198 13.81%, 0.2394 17.01%, 0.2837 20.37%, 0.3282 23.88%, 0.3755 27.53%, 0.4229 31.31%, 0.4709 35.21%, 0.5197 39.23%, 0.5682 43.36%, 0.6153 47.59%, 0.6631 51.92%, 0.7096 56.35%, 0.7534 60.87%, 0.7957 65.48%, 0.8362 70.17%, 0.8731 74.95%, 0.9073 79.81%, 0.9372 84.75%, 0.9619 89.76%, 0.9813 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--k1-bras,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--k1-bras,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--k1-bras {
  animation: kso-six-k1-bras 770ms cubic-bezier(.13,.113,.612,.97) 450ms backwards;
  animation-timing-function: linear(0, 0.091 1.23%, 0.1379 3.13%, 0.1904 5.42%, 0.2546 7.99%, 0.3205 10.8%, 0.3799 13.81%, 0.4357 17.01%, 0.484 20.37%, 0.5297 23.88%, 0.5697 27.53%, 0.6075 31.31%, 0.6428 35.21%, 0.6737 39.23%, 0.7045 43.36%, 0.7336 47.59%, 0.7611 51.92%, 0.7843 56.35%, 0.8079 60.87%, 0.8292 65.48%, 0.8492 70.17%, 0.8696 74.95%, 0.8894 79.81%, 0.9112 84.75%, 0.9352 89.76%, 0.9612 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--k1-jambe,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--k1-jambe,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--k1-jambe {
  animation: kso-six-k1-jambe 770ms cubic-bezier(.13,.113,.612,.97) 450ms backwards;
  animation-timing-function: linear(0, 0.056 1.23%, 0.0821 3.13%, 0.1441 5.42%, 0.2054 7.99%, 0.2529 10.8%, 0.2926 13.81%, 0.3309 17.01%, 0.3658 20.37%, 0.4017 23.88%, 0.4362 27.53%, 0.4712 31.31%, 0.5067 35.21%, 0.5404 39.23%, 0.5754 43.36%, 0.6082 47.59%, 0.642 51.92%, 0.6733 56.35%, 0.7057 60.87%, 0.7377 65.48%, 0.7682 70.17%, 0.8013 74.95%, 0.8341 79.81%, 0.8714 84.75%, 0.9115 89.76%, 0.957 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--l-pied,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--l-pied,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--l-pied {
  animation: kso-six-l-pied 600ms cubic-bezier(.13,.113,.612,.97) 620ms backwards;
  animation-timing-function: linear(0, 0.0686 1.23%, 0.1142 3.13%, 0.1678 5.42%, 0.2281 7.99%, 0.2884 10.8%, 0.3453 13.81%, 0.4013 17.01%, 0.4514 20.37%, 0.4986 23.88%, 0.5417 27.53%, 0.5821 31.31%, 0.6182 35.21%, 0.6524 39.23%, 0.685 43.36%, 0.7128 47.59%, 0.7388 51.92%, 0.7628 56.35%, 0.7849 60.87%, 0.807 65.48%, 0.8299 70.17%, 0.8543 74.95%, 0.88 79.81%, 0.903 84.75%, 0.929 89.76%, 0.955 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--p-panse,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--p-panse,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--p-panse {
  animation: kso-six-p-panse 1000ms cubic-bezier(.13,.113,.612,.97) 220ms backwards;
  animation-timing-function: linear(0, 0.052 1.23%, 0.1047 3.13%, 0.1699 5.42%, 0.2271 7.99%, 0.2716 10.8%, 0.3088 13.81%, 0.3422 17.01%, 0.3734 20.37%, 0.4028 23.88%, 0.4322 27.53%, 0.4606 31.31%, 0.4888 35.21%, 0.517 39.23%, 0.5455 43.36%, 0.5739 47.59%, 0.6026 51.92%, 0.6311 56.35%, 0.6607 60.87%, 0.6922 65.48%, 0.7266 70.17%, 0.766 74.95%, 0.8138 79.81%, 0.8713 84.75%, 0.93 89.76%, 0.9731 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--k2-bras,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--k2-bras,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--k2-bras {
  animation: kso-six-k2-bras 770ms cubic-bezier(.13,.113,.612,.97) 450ms backwards;
  animation-timing-function: linear(0, 0.0904 1.23%, 0.1353 3.13%, 0.1827 5.42%, 0.2459 7.99%, 0.3116 10.8%, 0.3721 13.81%, 0.4286 17.01%, 0.4773 20.37%, 0.5231 23.88%, 0.5642 27.53%, 0.601 31.31%, 0.6363 35.21%, 0.6681 39.23%, 0.6982 43.36%, 0.7274 47.59%, 0.755 51.92%, 0.7788 56.35%, 0.8016 60.87%, 0.8228 65.48%, 0.8432 70.17%, 0.8644 74.95%, 0.8858 79.81%, 0.9077 84.75%, 0.9321 89.76%, 0.959 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--k2-jambe,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--k2-jambe,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--k2-jambe {
  animation: kso-six-k2-jambe 770ms cubic-bezier(.13,.113,.612,.97) 450ms backwards;
  animation-timing-function: linear(0, 0.0557 1.23%, 0.0816 3.13%, 0.1426 5.42%, 0.2066 7.99%, 0.2531 10.8%, 0.2926 13.81%, 0.3305 17.01%, 0.3651 20.37%, 0.4008 23.88%, 0.4347 27.53%, 0.4703 31.31%, 0.5043 35.21%, 0.5398 39.23%, 0.5732 43.36%, 0.6068 47.59%, 0.6403 51.92%, 0.6719 56.35%, 0.7043 60.87%, 0.7358 65.48%, 0.7671 70.17%, 0.799 74.95%, 0.8329 79.81%, 0.8688 84.75%, 0.9095 89.76%, 0.9531 94.84%, 1);
}
html.kso-intro[data-kso-direction="trace-ensemble"] .kso-voile .kso-te__p--s-entier,
[data-kso-direction="trace-ensemble"] .kso-joue .kso-te__p--s-entier,
.kso-joue[data-kso-direction="trace-ensemble"] .kso-te__p--s-entier {
  animation: kso-six-s-entier 1020ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
  animation-timing-function: linear(0, 0.0251 1.23%, 0.0411 3.13%, 0.0622 5.42%, 0.0896 7.99%, 0.13 10.8%, 0.2216 13.81%, 0.2959 17.01%, 0.3387 20.37%, 0.3741 23.88%, 0.4081 27.53%, 0.4424 31.31%, 0.4774 35.21%, 0.5121 39.23%, 0.5461 43.36%, 0.58 47.59%, 0.614 51.92%, 0.6531 56.35%, 0.7055 60.87%, 0.8117 65.48%, 0.8727 70.17%, 0.9079 74.95%, 0.9347 79.81%, 0.9552 84.75%, 0.9717 89.76%, 0.9846 94.84%, 1);
}
/* Le trait qui prend corps : traits intérieurs de 16 unités (fûts 200 à 480 ms ; chaque courbe part de l'axe de son fût
   quand le trait du fût y passe : k1-bras 310, k1-jambe 310, l-pied 430, p-panse 220, s-entier 200, k2-bras 310, k2-jambe 310 ms ; tous achevés à 600 ms),
   puis de 600 à 1240 ms chaque section du trait s'épaissit en proportion de sa largeur finale :
   toutes atteignent le contour officiel ensemble. L'épaississement suit l'aire d'encre révélée.
   Avant 600 ms, le groupe des corps reste sans effet (opacité de trait nulle, une seule animation pour
   tous les corps) : seuls les traits minces dessinent. 342 tronçons de courbes et cinq fûts s'épaississent. */
.kso-tc__l { stroke-dasharray: 1 2; stroke-dashoffset: 0; stroke-width: 16px; }
.kso-tc__c { stroke-width: var(--kso-tc-w); }
@keyframes kso-tc-tracer { from { stroke-dashoffset: 1.03; } to { stroke-dashoffset: 0; } }
@keyframes kso-tc-epaissir { from { stroke-width: 16px; } to { stroke-width: var(--kso-tc-w); } }
@keyframes kso-tc-attente { from { stroke-opacity: 0; } to { stroke-opacity: 0; } }
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--p-fut,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--p-fut,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--p-fut {
  animation: kso-tc-tracer 280ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--k2-fut,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--k2-fut,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--k2-fut {
  animation: kso-tc-tracer 280ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--k1-fut,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--k1-fut,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--k1-fut {
  animation: kso-tc-tracer 280ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--l-fut,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--l-fut,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--l-fut {
  animation: kso-tc-tracer 280ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--i-fut,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--i-fut,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--i-fut {
  animation: kso-tc-tracer 280ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--k1-bras,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--k1-bras,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--k1-bras {
  animation: kso-tc-tracer 290ms cubic-bezier(.13,.113,.612,.97) 310ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--k1-jambe,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--k1-jambe,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--k1-jambe {
  animation: kso-tc-tracer 290ms cubic-bezier(.13,.113,.612,.97) 310ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--l-pied,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--l-pied,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--l-pied {
  animation: kso-tc-tracer 170ms cubic-bezier(.13,.113,.612,.97) 430ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--p-panse,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--p-panse,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--p-panse {
  animation: kso-tc-tracer 380ms cubic-bezier(.13,.113,.612,.97) 220ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--s-entier,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--s-entier,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--s-entier {
  animation: kso-tc-tracer 400ms cubic-bezier(.13,.113,.612,.97) 200ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--k2-bras,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--k2-bras,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--k2-bras {
  animation: kso-tc-tracer 290ms cubic-bezier(.13,.113,.612,.97) 310ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__l--k2-jambe,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__l--k2-jambe,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__l--k2-jambe {
  animation: kso-tc-tracer 290ms cubic-bezier(.13,.113,.612,.97) 310ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__corps,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__corps,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__corps {
  animation: kso-tc-attente 0s linear 600ms backwards;
}
html.kso-intro[data-kso-direction="trace-corps"] .kso-voile .kso-tc__c,
[data-kso-direction="trace-corps"] .kso-joue .kso-tc__c,
.kso-joue[data-kso-direction="trace-corps"] .kso-tc__c {
  animation: kso-tc-epaissir 640ms cubic-bezier(.205,.072,.669,.973) 600ms backwards;
  animation-timing-function: linear(0, 0.0176 3.85%, 0.0458 7.69%, 0.079 11.54%, 0.1168 15.38%, 0.157 19.23%, 0.1992 23.08%, 0.2426 26.92%, 0.2877 30.77%, 0.3329 34.62%, 0.3785 38.46%, 0.4244 42.31%, 0.469 46.15%, 0.5143 50%, 0.558 53.85%, 0.6012 57.69%, 0.6424 61.54%, 0.6828 65.38%, 0.7205 69.23%, 0.7576 73.08%, 0.7921 76.92%, 0.8236 80.77%, 0.852 84.62%, 0.8777 88.46%, 0.9037 92.31%, 0.9388 96.15%, 1);
}
/* Mouvement réduit : les éléments animés des trois tracés restent immobiles hors examen. */
@media (prefers-reduced-motion: reduce) {
  html:not(.kso-examen) .kso-joue .kso-six__p,
  html:not(.kso-examen) .kso-joue .kso-tc__l,
  html:not(.kso-examen) .kso-joue .kso-tc__c,
  html:not(.kso-examen) .kso-joue .kso-tc__corps,
  html:not(.kso-examen) .kso-joue .kso-six__anime,
  html:not(.kso-examen) .kso-joue .kso-six__plein { animation: none !important; }
}
/* La signature initiale (premier essai) : portage du mouvement du premier prototype (signature-initiale.mjs).
   Fûts et S par fronts descendants adoucis (24 unités), puis bras et jambes des K, pied du L et panse du P par fronts
   obliques à 67,3° adoucis (26 unités). Dernier mouvement achevé à 1,42 s ; tracé source exact à 1.44 s, au lieu de 1,40 s
   pour les autres directions : exception propre à cette candidate historique. */
.kso-nom__signature-initiale { display: none; }
[data-kso-direction="signature-initiale"] .kso-nom__signature-initiale { display: block; }
[data-kso-direction="signature-initiale"] .kso-nom__encre { display: none; }
[data-kso-direction="signature-initiale"] .kso-nom { --kso-t-fin-nom: 1440ms; }
.kso-nom__signature-initiale, .kso-si { position: absolute; inset: 0; }
.kso-si { display: block; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
.kso-nom__anime .kso-si > svg { overflow: hidden; }       /* comme le premier essai : débordement masqué */
.kso-si--trait {
  -webkit-mask-image: linear-gradient(180deg, #000 48.2558%, transparent 51.7442%);
          mask-image: linear-gradient(180deg, #000 48.2558%, transparent 51.7442%);
  -webkit-mask-size: 100% 207.2289%;
          mask-size: 100% 207.2289%;
}
.kso-si--elan {
  -webkit-mask-image: linear-gradient(var(--kso-si-masque-angle), #000 var(--kso-si-masque-a), transparent var(--kso-si-masque-b));
          mask-image: linear-gradient(var(--kso-si-masque-angle), #000 var(--kso-si-masque-a), transparent var(--kso-si-masque-b));
  -webkit-mask-size: var(--kso-si-masque-taille);
          mask-size: var(--kso-si-masque-taille);
}
/* Le calque animé est visible dès l'apparition du voile (les fronts cachent tout avant 280 ms) et cède la place
   au tracé source exact à 1,44 s ; les calques ne portent pas leur propre visibilité. */
html.kso-intro[data-kso-direction="signature-initiale"] .kso-voile .kso-nom__anime,
[data-kso-direction="signature-initiale"] .kso-joue .kso-nom__anime,
.kso-joue[data-kso-direction="signature-initiale"] .kso-nom__anime {
  animation: kso-masquer 0s linear var(--kso-t-fin-nom) both;
}
html.kso-intro[data-kso-direction="signature-initiale"] .kso-voile .kso-si--trait,
[data-kso-direction="signature-initiale"] .kso-joue .kso-si--trait,
.kso-joue[data-kso-direction="signature-initiale"] .kso-si--trait {
  animation: kso-si-trait var(--kso-si-duree) cubic-bezier(0.32, 0, 0.12, 1) var(--kso-si-depart) both;
}
html.kso-intro[data-kso-direction="signature-initiale"] .kso-voile .kso-si--elan,
[data-kso-direction="signature-initiale"] .kso-joue .kso-si--elan,
.kso-joue[data-kso-direction="signature-initiale"] .kso-si--elan {
  animation: kso-si-elan var(--kso-si-duree) cubic-bezier(0.4, 0, 0.12, 1) var(--kso-si-depart) both;
}
@keyframes kso-si-trait {
  from { -webkit-mask-position: 0 100%; mask-position: 0 100%; }
  to   { -webkit-mask-position: 0 0;    mask-position: 0 0; }
}
@keyframes kso-si-elan {
  from { -webkit-mask-position: 100% 0; mask-position: 100% 0; }
  to   { -webkit-mask-position: 0 0;    mask-position: 0 0; }
}
.kso-si--k1-trait { --kso-si-depart: 280ms; --kso-si-duree: 380ms; }
.kso-si--l-trait { --kso-si-depart: 350ms; --kso-si-duree: 380ms; }
.kso-si--i-trait { --kso-si-depart: 410ms; --kso-si-duree: 380ms; }
.kso-si--p-trait { --kso-si-depart: 450ms; --kso-si-duree: 380ms; }
.kso-si--s-trait { --kso-si-depart: 520ms; --kso-si-duree: 480ms; }
.kso-si--k2-trait { --kso-si-depart: 600ms; --kso-si-duree: 380ms; }
.kso-si--k1-elan { --kso-si-depart: 470ms; --kso-si-duree: 560ms; }
.kso-si--l-elan { --kso-si-depart: 540ms; --kso-si-duree: 540ms; }
.kso-si--p-elan { --kso-si-depart: 640ms; --kso-si-duree: 540ms; }
.kso-si--k2-elan { --kso-si-depart: 780ms; --kso-si-duree: 640ms; }
@media (prefers-reduced-motion: reduce) {
  html:not(.kso-examen) .kso-joue .kso-si { animation: none !important; }
}
/* KSO GÉNÉRÉ : FIN SIXIÈME PASSE */
