
      html {
        background: #eebf88;
      }
      /* Présent dès la réponse HTML, avant le téléchargement du moteur. */
      .premier-chargement {
        position: fixed; inset: auto 24px 10vh; text-align: center;
        font: 13px system-ui, sans-serif; letter-spacing: .08em; color: #2a241e;
      }
      .premier-chargement span {
        display: block; width: 132px; height: 2px; margin: 18px auto 0;
        background: #2a241e; opacity: .3; animation: premier-souffle 1.5s ease-in-out infinite alternate;
      }
      @keyframes premier-souffle { to { opacity: .75; transform: scaleX(.5); } }
      @media (prefers-reduced-motion: reduce) { .premier-chargement span { animation: none; } }
      /* Le repli sans JavaScript. Sa propre plaque et sa propre encre : il doit
         se lire aussi bien sur l'or ci-dessus que sur le fond sombre que
         `app.css` pose dès qu'il arrive — les deux cas existent. */
      .sans-js {
        position: fixed;
        inset: 0;
        display: grid;
        place-content: center;
        gap: 0.6rem;
        padding: 2rem;
        max-width: 34rem;
        margin: auto;
        /* Copies de --soot et --paper (tokens.css), pour la même raison que
           l'or ci-dessus : lu avant toute feuille de style. Si la DA bouge,
           ces deux-là bougent à la main. */
        background: #2a241e;
        color: #f0e4ce;
        font-family: system-ui, sans-serif;
        line-height: 1.5;
        text-align: left;
      }
      .sans-js h1 {
        margin: 0;
        font-size: 1.6rem;
        font-weight: 600;
      }
      .sans-js p {
        margin: 0;
      }
      .sans-js b {
        font-weight: 500;
        opacity: 0.62;
      }
    