/* Arcmarch, lot 4 : écrans de résultat (18 octobre 2026), jugement d'Astra du tour 2 (médiane 6,2, cible 8).
   Victoire (toutes variantes, tous temps), défaites, résultats d'Arène et de niveau bonus, attentes de publicité, chargements.
   Cette feuille charge APRÈS le socle (socle-menus.css) et lot2 : elle ne fait que décider de la mise en page et de l'habillage,
   aucune règle de jeu, aucun flux, aucun filter ni backdrop-filter. Une règle de cadre étroit ou court est placée après la règle
   qu'elle adapte (une requête de média n'ajoute aucune spécificité).

   HIÉRARCHIE TYPOGRAPHIQUE (constat 1 d'Astra) : trois rôles. AFFICHE (Barlow Condensed italique) = le titre court et le chiffre héros ;
   ACTION = les boutons ; LECTURE (Barlow) = tout le reste (étiquettes, sommes partielles, phrases, noms).

   POINTS D'ANCRAGE DES ICÔNES DE RÉCOMPENSE : le jeu d'icônes unifié (pièce, gemme, pierre, coffre, médailles, trophées) livré par l'art
   se branche ICI sans toucher au reste. Tout pictogramme de récompense d'un résultat porte `.res-ico[data-res="or|gemme|pierre|coffre|
   medaille|trophee|recompense|relique|bouclier"]` ; sa vignette est la variable `--res-<nom>` (une `url()` ou un dégradé, posée sur
   :root ou sur l'écran), sa taille `--res-taille` (par défaut celle du contexte). Tant que l'art n'a pas livré, les variables reprennent
   l'existant (`--img-piece`, `--img-gemme`). Pour remplacer un pictogramme : définir `--res-or: url(...)` ; rien d'autre à changer. */

:root {
  --res-or: var(--img-piece);
  --res-gemme: var(--img-gemme);
  /* pierre taillée en perspective, dans la gamme grise de la brique des puces (#C7CFDA, #8E99A8, #6E7A8A) : SVG sobre, hors du jeu d'icônes candidat (non validé) */
  --res-pierre: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 40 36'%3E%3Cpath d='M20 4 36 12 20 20 4 12z' fill='%23E4E9F0'/%3E%3Cpath d='M4 12 20 20v13L4 25z' fill='%23B3BCC9'/%3E%3Cpath d='M36 12 20 20v13l16-8z' fill='%238E99A8'/%3E%3Cpath d='M20 4 36 12v13L20 33 4 25V12z M4 12 20 20 36 12 M20 20v13' fill='none' stroke='%236E7A8A' stroke-width='1.8' stroke-linejoin='round'/%3E%3Cpath d='M12 11 20 7' stroke='%23FFFFFF' stroke-width='1.6' stroke-linecap='round' opacity='.7'/%3E%3C/svg%3E");
  --res-coffre: none;
  --res-medaille: none;
  --res-trophee: none;
  --res-bouclier: none;
  --res-relique: none;
  --res-recompense: none;
  /* les trois états du coffre du territoire (le héros du temps « coffre ») : l'art les remplace ici */
  --res-coffre-ferme: url(epure/AM-UIK-120_Coffre_Territoire_Ferme_D3@3x.webp);
  --res-coffre-entrouvert: url(epure/AM-UIK-120_Coffre_Territoire_Entrouvert_D3@3x.webp);
  --res-coffre-ouvert: url(epure/AM-UIK-120_Coffre_Territoire_Ouvert_D3@3x.webp);
  /* mesures de la carte de victoire : trois zones à hauteur fixe, donc aucun saut entre les temps */
  --rs-h-entete: 118px;
  --rs-h-scene: 212px;
}
/* quand une vignette est fournie, elle remplace le masque de pictogramme ; sinon le pictogramme existant reste (aucune règle ici) */
.res-ico[data-res="or"] { --img: var(--res-or); }
.res-ico[data-res="gemme"] { --img: var(--res-gemme); }
.res-ico.res-ico-img { -webkit-mask:none; mask:none; background:var(--res-img) center / contain no-repeat; }
.res-ico[data-res="pierre"].res-ico-img { --res-img: var(--res-pierre); }
.res-ico[data-res="coffre"].res-ico-img { --res-img: var(--res-coffre); }
.res-ico[data-res="medaille"].res-ico-img { --res-img: var(--res-medaille); }
.res-ico[data-res="trophee"].res-ico-img { --res-img: var(--res-trophee); }
.res-ico[data-res="bouclier"].res-ico-img { --res-img: var(--res-bouclier); }
.res-ico[data-res="recompense"].res-ico-img { --res-img: var(--res-recompense); }
.res-ico[data-res="relique"].res-ico-img { --res-img: var(--res-relique); }

/* ================================================================ VICTOIRE
   La carte est une pile de trois zones de hauteur fixe : l'EN-TÊTE (titre, lieu, étoiles), la SCÈNE (un seul héros par temps) et le PIED (la
   récompense, la vidéo, Continuer). `data-temps` (titre, butin, coffre, adresse, repos), posé par hud.js, décide de ce qui paraît dans la
   scène ; l'en-tête grossit au temps « titre » puis se réduit (transform seulement) ; Continuer garde sa place et est secondaire tant qu'un
   geste est attendu. */
#stage .screen.outcome.outcome-victory { justify-content:flex-end; padding:calc(var(--safe-t) + 60px) 14px calc(var(--safe-b) + 16px); }
#stage .outcome-victory .victory-panel { display:flex; flex-direction:column; gap:0; padding:12px 14px 14px; }
#stage .outcome-victory .won-scene { display:flex; flex-direction:column; gap:0; padding:0; align-items:stretch; }

#stage .coffre-img { background-image:var(--res-coffre-ferme); }
#stage .coffre-img[data-etat="entrouvert"] { background-image:var(--res-coffre-entrouvert); }
#stage .coffre-img[data-etat="ouvert"] { background-image:var(--res-coffre-ouvert); }

/* --- l'en-tête --- */
/* les victoires à emblème (moitié du royaume, libération, clan, seigneur) ajoutent une médaille au-dessus du titre : l'en-tête est plus haut, jamais plus bas ni plus haut selon le temps */
#stage .outcome-victory:is([data-kind="mid"], [data-kind="free"], [data-kind="clan"], [data-kind="horde"]) { --rs-h-entete:158px; }
#stage .outcome-victory .rs-entete { height:var(--rs-h-entete); display:flex; flex-direction:column; align-items:center; justify-content:flex-start; gap:4px;
  transform-origin:50% 0; transition:transform 360ms var(--courbe); position:relative; z-index:2; }
/* au titre, la scène et les lignes réservées du pied sont vides : l'en-tête grossi se centre dans toute cette zone (transform seulement, rien ne bouge dans la mise en page) */
#stage .outcome-victory[data-temps="titre"] .rs-entete { transform:translateY(calc((var(--rs-h-scene) + 134px - var(--rs-h-entete) * .18) / 2)) scale(1.34); }
#stage .outcome-victory .won-plaque { width:100%; margin:0; padding:0; transform:none; display:flex; flex-direction:column; align-items:center; gap:2px; animation:none; }
#stage .outcome-victory .won-plaque .result-heading, #stage .outcome-victory .won-scene .won-plaque .result-heading { font:italic 900 42px/1 var(--f-titre); letter-spacing:.02em; transform:none; margin:0; animation:none; }
#stage .outcome-victory .won-plaque .result-copy { font:600 15px/1.25 var(--f-texte); font-style:normal; color:var(--sm-ink2); transform:none; margin:0; text-align:center; text-wrap:balance; }
#stage .outcome-victory .won-embleme { width:34px; height:34px; margin:0; }
#stage .outcome-victory .won-embleme .picon { width:20px; }
#stage .outcome-victory[data-kind="free"] .won-embleme { width:38px; height:38px; margin:0; }
#stage .outcome-victory .won-etoiles { gap:6px; margin:2px 0 0; min-height:34px; }
#stage .outcome-victory .etoile-forme { width:34px; height:34px; }
#stage .outcome-victory .etoile { min-width:0; flex:none; }

/* --- la scène : un seul héros par temps --- */
#stage .outcome-victory .rs-scene { position:relative; height:var(--rs-h-scene); display:grid; grid-template:1fr / 1fr; }
#stage .outcome-victory .rs-scene > * { grid-area:1 / 1; min-width:0; }
#stage .outcome-victory .won-fente { display:grid; grid-template:1fr / 1fr; place-items:center; width:100%; order:0; }
#stage .outcome-victory .won-fente > * { grid-area:1 / 1; transition:none; }
#stage .outcome-victory .won-fente > .off { display:none; }
#stage .outcome-victory .won-fente > :not(.off) { animation:rs-vient 240ms var(--courbe) both; }
@keyframes rs-vient { from { opacity:0; transform:translateY(10px); } to { opacity:1; transform:none; } }
#stage .outcome-victory .rs-gain { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:2px; pointer-events:none; transition:opacity 200ms var(--courbe); }
#stage .outcome-victory .rs-gain > * { pointer-events:auto; }
#stage .outcome-victory[data-temps="titre"] .rs-gain { opacity:0; visibility:hidden; }
#stage .outcome-victory .won-gain-lbl { order:0; margin:0; font:700 13px/1 var(--f-texte); letter-spacing:.08em; text-transform:uppercase; color:var(--sm-ink2); }
#stage .outcome-victory .gain { order:1; min-height:0; margin:0; gap:10px; transform:none; opacity:1; }
#stage .outcome-victory .gain-piece { width:60px; }
#stage .outcome-victory .gain-n { font:italic 900 70px/1 var(--f-titre); color:var(--sm-ink); letter-spacing:-.01em; }
#stage .outcome-victory .won-pris { display:none; }

/* butin : le gain est le héros, sa source passe en légende sous lui */
#stage .outcome-victory[data-temps="butin"] .rs-gain { align-self:center; margin-top:-26px; }
/* le gain et sa légende descendent vers le centre de la zone libre (les lignes du pied sont réservées mais invisibles) : transform seulement */
#stage .outcome-victory[data-temps="butin"] .rs-scene { transform:translateY(calc(var(--rs-h-scene) * .2)); }
#stage .outcome-victory .won-sources:not(.liste) { align-self:end; margin-bottom:30px; justify-content:center; }
#stage .outcome-victory .won-sources:not(.liste) .source-lbl { font:600 15px/1.1 var(--f-texte); color:var(--sm-ink2); }

/* coffre et jauge : le gain recule en bande de statut (somme partielle discrète, étiquetée), le geste attendu est le héros */
#stage .outcome-victory:is([data-temps="coffre"]) .rs-gain { align-self:start; flex-direction:row; justify-content:center; gap:8px; height:34px; align-items:center; }
#stage .outcome-victory:is([data-temps="coffre"]) .won-gain-lbl { display:block; font-size:12px; letter-spacing:.04em; }
#stage .outcome-victory:is([data-temps="coffre"]) .gain { gap:6px; }
#stage .outcome-victory:is([data-temps="coffre"]) .gain-piece { width:24px; }
#stage .outcome-victory:is([data-temps="coffre"]) .gain-n { font:800 24px/1 var(--f-texte); font-style:normal; color:var(--sm-ink2); letter-spacing:0; }
#stage .outcome-victory:is([data-temps="coffre"]) .won-fente { padding-top:40px; box-sizing:border-box; }

/* repos : « Total reçu » est le seul héros ; le bonus d'adresse (ou « butin doublé ») en légende, le détail en lien */
#stage .outcome-victory[data-temps="repos"] .rs-gain { align-self:start; justify-content:flex-start; padding-top:18px; gap:4px; box-sizing:border-box; height:100%; }
/* détail à la demande : la liste prend la scène, le total reste en dernière ligne ; le lien en bas la referme */
#stage .outcome-victory .rs-scene:has(.won-sources.liste) .rs-gain { justify-content:flex-end; padding-top:0; }
#stage .outcome-victory .won-sources.liste { align-self:start; margin:0 0 44px; max-height:164px; overflow:auto; padding:8px 14px; gap:3px; }
#stage .outcome-victory .won-sources.liste .source { padding:1px 0; }
#stage .outcome-victory .won-sources.liste .source-lbl { font:600 14px/1.2 var(--f-texte); color:var(--sm-ink2); }
#stage .outcome-victory .won-sources.liste .source-n { font:800 15px/1.2 var(--f-texte); font-style:normal; color:var(--sm-ink); }
#stage .outcome-victory .won-sources.liste .source-total { margin-top:3px; padding-top:5px; border-top:1.5px solid var(--sm-bord); }
#stage .outcome-victory .won-sources.liste .source-total .source-lbl, #stage .outcome-victory .won-sources.liste .source-total .source-n { font-weight:800; color:var(--sm-ink); font-size:16px; }

/* le coffre : héros du temps « coffre », plus saillant que Continuer (halo qui respire, consigne dessous, trois témoins visibles) */
#stage .outcome-victory .won-coffre { flex-direction:column; align-items:center; gap:4px; min-height:0; padding:0; max-width:100%; }
#stage .outcome-victory .coffre-boite { width:112px; height:100px; }
#stage .outcome-victory .coffre-img { width:112px; height:100px; animation:rs-respire 1.8s ease-in-out infinite; }
#stage .outcome-victory .won-coffre.ouvert .coffre-img { animation:coffreOuvre 560ms var(--courbe) both; }
@keyframes rs-respire { 0%, 100% { transform:scale(1); filter:drop-shadow(0 0 4px rgba(232,182,76,.35)) drop-shadow(0 4px 3px rgba(12,8,4,.55)); } 50% { transform:scale(1.045); filter:drop-shadow(0 0 16px rgba(246,211,126,.9)) drop-shadow(0 4px 3px rgba(12,8,4,.55)); } }
#stage .outcome-victory .coffre-copy { align-items:center; gap:3px; text-align:center; }
#stage .outcome-victory .coffre-nom { display:none; }
#stage .outcome-victory .coffre-etiq { font:700 12px/1 var(--f-texte); letter-spacing:.06em; text-transform:uppercase; color:var(--sm-ink2); text-shadow:none; }
#stage .outcome-victory .coffre-contenu { justify-content:center; gap:4px 14px; }
#stage .outcome-victory .coffre-part b, #stage .outcome-victory .coffre-part:last-child b, #stage .outcome-victory .coffre-part:first-child:last-child b { font:800 18px/1 var(--f-texte); font-style:normal; color:var(--sm-ink); text-shadow:none; }
#stage .outcome-victory .coffre-part .picon { width:22px; color:var(--sm-or-s); }
#stage .outcome-victory .coffre-part .pi-or, #stage .outcome-victory .coffre-part .pi-cristaux { color:inherit; }
#stage .outcome-victory .coffre-aide { gap:10px; font:700 14px/1 var(--f-texte); font-style:normal; color:var(--sm-ink); text-shadow:none; white-space:nowrap; }
#stage .outcome-victory .won-coffre.ouvert .coffre-aide { color:var(--sm-vert); }
#stage .outcome-victory .won-coffre.ouvert .coffre-aide::before { content:''; width:16px; height:16px; background:var(--sm-vert); -webkit-mask:var(--ic-valider) center / contain no-repeat; mask:var(--ic-valider) center / contain no-repeat; }

/* la jauge : un bloc délimité et teinté, un rail épais et contrasté, la zone du meilleur résultat en or, un curseur franc */

/* --- le pied : la récompense, la vidéo, Continuer --- */
#stage .outcome-victory .won-panneau { display:flex; flex-direction:column; gap:8px; margin:6px 0 0; padding:0; }
#stage .outcome-victory .won-marche, #stage .outcome-victory .won-marche.plaque-module { display:flex; flex-direction:row; align-items:center; justify-content:space-between; gap:10px; height:60px; min-height:0; padding:6px 12px; box-sizing:border-box; }
/* les lignes du pied gardent leur place avant le repos (lot 1 les retirait : la carte changeait de hauteur) : invisibles et inertes, jamais retirées */
#stage .outcome-victory:not([data-temps="repos"]):not(.avec-relique) .won-marche { display:flex; visibility:hidden; pointer-events:none; }
#stage .outcome-victory:not([data-temps="repos"]) .victory-relic:not([hidden]) { display:flex; visibility:hidden; pointer-events:none; }
#stage .outcome-victory:is([data-temps="titre"], [data-temps="butin"]) .won-video { display:flex; }
#stage .outcome-victory .won-actions { animation:none; }
#stage .outcome-victory[data-temps="repos"] .won-marche { animation:rs-vient 260ms var(--courbe) both; }
#stage .outcome-victory .won-marche .won-rec { order:0; flex:1 1 auto; min-width:0; gap:8px; }
#stage .outcome-victory .won-rec > .picon { width:30px; flex:none; }
#stage .outcome-victory .won-rec-copy { flex-direction:column; flex-wrap:nowrap; align-items:flex-start; gap:1px; }
#stage .outcome-victory .won-rec-copy .won-rec-etiq { display:block; font:700 11px/1.1 var(--f-texte); letter-spacing:.06em; text-transform:uppercase; color:var(--sm-ink2); }
#stage .outcome-victory .won-rec-copy b { font:800 18px/1.1 var(--f-texte); font-style:normal; color:var(--sm-ink); white-space:normal; }
#stage .outcome-victory .won-rec-copy small:not(.won-rec-etiq) { font:700 13px/1.1 var(--f-texte); color:var(--sm-or-s); }
#stage .outcome-victory .won-rec.sans-note .won-rec-copy small:not(.won-rec-etiq) { position:absolute; width:1px; height:1px; margin:-1px; padding:0; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
#stage .outcome-victory .won-marche-pas { order:1; flex:none; display:flex; flex-direction:column; align-items:center; gap:3px; }
#stage .outcome-victory .won-marche-pas .marche-pas { gap:7px; order:0; }
#stage .outcome-victory .won-pas-lbl { font:700 12px/1 var(--f-texte); color:var(--sm-ink2); white-space:nowrap; }
#stage .outcome-victory.avec-relique .won-marche { display:none; }
#stage .outcome-victory .victory-relic { min-height:60px; padding:6px 12px; gap:10px; align-items:center; }
#stage .outcome-victory .victory-relic .picon { width:34px; flex:none; }
#stage .outcome-victory .relic-copy { gap:1px; }
#stage .outcome-victory .relic-copy small { font:700 11px/1.1 var(--f-texte); letter-spacing:.06em; text-transform:uppercase; color:var(--sm-ink2); }
#stage .outcome-victory .relic-copy strong { font:800 18px/1.1 var(--f-texte); font-style:normal; color:var(--sm-ink); }
#stage .outcome-victory .relic-copy em { font:600 13px/1.2 var(--f-texte); font-style:normal; color:var(--sm-ink2); }

/* la vidéo : une action secondaire à bord d'or qui DIT son total ; avant le repos, ou indisponible, une seule ligne discrète sans cadre */
#stage .outcome-victory .won-video { display:flex; align-items:center; justify-content:center; gap:12px; height:52px; min-height:0; margin:0; padding:0 14px; box-sizing:border-box; border:2px solid var(--sm-or-s); background:#FFF7DE; box-shadow:none; }
#stage .outcome-victory .won-video > .picon { width:30px; height:22px; flex:none; }
#stage .outcome-victory .won-video-copy { display:flex; flex-direction:column; align-items:flex-start; gap:2px; min-width:0; }
#stage .outcome-victory .won-video-lbl { font:italic 900 22px/1 var(--f-titre); color:var(--sm-ink); white-space:nowrap; }
#stage .outcome-victory .won-video-sub { display:flex; align-items:center; gap:4px; font:700 14px/1 var(--f-texte); font-style:normal; color:var(--sm-or-s); }
#stage .outcome-victory .won-video-n { display:inline-flex; align-items:center; gap:4px; }
#stage .outcome-victory .won-video-n b { font:800 14px/1 var(--f-texte); font-style:normal; color:var(--sm-ink); }
#stage .outcome-victory .won-video-n .picon { width:16px; height:16px; }
#stage .outcome-victory .won-video-apres { flex:none; max-width:none; font:700 13px/1 var(--f-texte); font-style:normal; white-space:nowrap; color:var(--sm-ink2); }
#stage .outcome-victory:not([data-temps="repos"]) .won-video, #stage .outcome-victory .won-video.indispo { height:52px; border-color:transparent; background:none; box-shadow:none; opacity:1; }
#stage .outcome-victory:not([data-temps="repos"]) .won-video-copy, #stage .outcome-victory .won-video.indispo .won-video-copy { flex-direction:row; align-items:baseline; gap:8px; }
#stage .outcome-victory:not([data-temps="repos"]) .won-video-lbl, #stage .outcome-victory .won-video.indispo .won-video-lbl { font:700 15px/1 var(--f-texte); font-style:normal; color:var(--sm-ink2); }
#stage .outcome-victory:not([data-temps="repos"]) .won-video > .picon, #stage .outcome-victory .won-video.indispo > .picon { width:22px; height:16px; opacity:.55; background-color:var(--sm-ink2); }
#stage .outcome-victory .won-video.indispo .won-video-sub { display:none; }
#stage .outcome-victory .won-video.absente, #stage .outcome-victory:is([data-temps="titre"], [data-temps="butin"]) .won-video { visibility:hidden; }

/* Continuer : l'action principale ne l'est qu'au repos ; tant qu'un geste est attendu, il est secondaire (contour, sans halo) et ne bouge pas */
#stage .outcome-victory .won-actions { margin:0; }
#stage .outcome-victory #won-continue { height:58px; min-height:0; transition:background 160ms var(--courbe), color 160ms var(--courbe), border-color 160ms var(--courbe), box-shadow 160ms var(--courbe); }
#stage .outcome-victory #won-continue strong { font-size:32px; }
/* retour 11 du 19 octobre 2026 : Continuer reste l'action principale (bleue) dans tous les temps ; plus de geste attendu */

/* la bande de statut du haut (la Cité, la série) : compacte, au repos seulement, jamais deux gros cartouches */
#stage .outcome-victory .won-haut { top:calc(var(--safe-t) + 8px); align-items:center; }
#stage .outcome-victory:not([data-temps="repos"]) .won-haut { opacity:0; visibility:hidden; }
#stage .outcome-victory .won-haut .won-cite, #stage .outcome-victory .won-haut .won-cite.garnison { position:relative; min-height:44px; height:44px; padding:0 12px 0 10px; border-radius:12px; }
#stage .outcome-victory .won-haut .won-cite .picon { width:20px; }
#stage .outcome-victory .won-haut .won-cite.garnison small { font:800 13px/1 var(--f-texte); }
#stage .outcome-victory .won-haut .serie { height:36px; min-height:0; padding:0 10px; border-radius:10px; }
#stage .outcome-victory .won-haut .serie-tete > .picon { width:18px; }
#stage .outcome-victory .won-haut .serie-copy b, #stage .outcome-victory .won-haut .serie-copy small { font-size:13px; }

/* la scène de fond : un voile qui calme la mêlée sous la carte, des éclats d'or légers (transform et opacité seulement) */
#stage .outcome-victory .outcome-veil { background:linear-gradient(to top, rgba(8,14,28,.82), rgba(8,14,28,.55) 52%, rgba(8,14,28,.18) 82%, rgba(8,14,28,0)); }
#stage .outcome-victory[data-kind="free"] .outcome-veil, #stage .outcome-victory[data-kind="horde"] .outcome-veil { background:linear-gradient(to top, rgba(10,14,34,.88), rgba(10,14,34,.6) 52%, rgba(10,14,34,.22) 82%, rgba(10,14,34,0)); }
#stage .outcome-victory .victory-panel { position:relative; }
#stage .outcome-victory .victory-panel::before { content:''; position:absolute; left:50%; top:-96px; width:260px; height:96px; margin-left:-130px; pointer-events:none; z-index:-1;
  background:radial-gradient(ellipse at 50% 100%, rgba(246,211,126,.55), rgba(246,211,126,0) 70%); opacity:0; }
#stage .outcome-victory:is([data-temps="titre"], [data-temps="repos"]) .victory-panel::before { animation:rs-halo 1.6s ease-out both; }
@keyframes rs-halo { 0% { opacity:0; transform:scale(.7); } 40% { opacity:1; } 100% { opacity:.55; transform:scale(1); } }
@media (prefers-reduced-motion: reduce) {
  #stage .outcome-victory .coffre-img, #stage .outcome-victory .victory-panel::before { animation:none; }
  #stage .outcome-victory .rs-entete { transition:none; }
}

/* cadre court (360 x 640 et moins) : l'en-tête et la scène se resserrent, le pied garde ses cibles de 44 points */
@media (max-height:700px) {
  :root { --rs-h-entete:98px; --rs-h-scene:190px; }
  #stage .outcome-victory:is([data-kind="mid"], [data-kind="free"], [data-kind="clan"], [data-kind="horde"]) { --rs-h-entete:138px; }
  #stage .outcome-victory .won-plaque .result-heading, #stage .outcome-victory .won-scene .won-plaque .result-heading { font-size:36px; }
  #stage .outcome-victory .etoile-forme { width:28px; height:28px; }
  #stage .outcome-victory .gain-n { font-size:58px; }
  #stage .outcome-victory .gain-piece { width:50px; }
  #stage .outcome-victory .coffre-boite, #stage .outcome-victory .coffre-img { width:76px; height:70px; }
  #stage .outcome-victory .won-marche, #stage .outcome-victory .won-marche.plaque-module { height:54px; }
  #stage .outcome-victory #won-continue { height:54px; }
}

/* ================================================================ VICTOIRE, retour 11 du 19 octobre 2026 (« encore beaucoup trop d'informations »)
   Trois groupes seulement : le RÉSULTAT (Victoire, les étoiles ; la phrase d'un jalon), le GAIN (un seul montant d'or, les autres gains reçus
   sur une ligne dessous, le détail derrière une petite commande), la SUITE (la vidéo en secondaire compact, Continuer). Plus de coffre à
   toucher (remis directement, main.js poseVictoire), plus de série ni de garnison, plus de lieu sous le titre, plus de marche 3/3 ; la
   récompense du territoire n'a sa ligne que le jour où elle tombe. Le montant reste au même endroit du comptage au repos ; une tape
   n'importe où achève la révélation (main.js accelereVictoire). La carte est plus basse : la scène de victoire reste visible au-dessus. */
#stage .outcome-victory { --rs-h-entete:90px; --rs-h-scene:128px; --rs-h-pied:52px; }
#stage .outcome-victory:is([data-kind="mid"], [data-kind="free"], [data-kind="clan"], [data-kind="horde"]) { --rs-h-entete:150px; }
#stage .outcome-victory.avec-deblocage, #stage .outcome-victory.avec-relique { --rs-h-pied:110px; }
/* une seule mise en page pour tous les temps : rien ne se déplace, rien ne reste vide ; le titre claque sur place, le gain compte dès le
   départ à sa place définitive, Continuer est là dès le premier instant (bleu, seul) */
#stage .outcome-victory[data-temps="titre"] .rs-entete { transform:none; }
#stage .outcome-victory .won-plaque .result-heading, #stage .outcome-victory .won-scene .won-plaque .result-heading { transition:transform 280ms var(--courbe); }
#stage .outcome-victory[data-temps="titre"] .won-plaque .result-heading { transform:scale(1.18); }
#stage .outcome-victory[data-temps="titre"] .rs-gain { opacity:1; visibility:visible; }
/* la bande du haut : seulement le petit bouton de la Cité, sans compteur ni série */
#stage .outcome-victory .won-haut .serie, #stage .outcome-victory .won-haut .won-bourses { display:none; }
#stage .outcome-victory .won-haut .won-cite, #stage .outcome-victory .won-haut .won-cite.garnison { width:48px; height:48px; min-height:48px; padding:0; justify-content:center; border-radius:14px; }
#stage .outcome-victory .won-haut .won-cite .won-cite-copy { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
#stage .outcome-victory .won-haut .won-cite .picon { width:22px; }
/* le gain : sans étiquette ni légende de source (le détail les garde), posé en haut de sa zone dans tous les temps */
#stage .outcome-victory .won-gain-lbl, #stage .outcome-victory .won-sources:not(.liste) { display:none; }
#stage .outcome-victory .rs-gain, #stage .outcome-victory[data-temps="butin"] .rs-gain, #stage .outcome-victory[data-temps="repos"] .rs-gain { align-self:start; justify-content:flex-start; height:auto; margin:0; padding-top:6px; gap:2px; }
#stage .outcome-victory[data-temps="butin"] .rs-scene { transform:none; }
#stage .outcome-victory .won-autres { order:2; display:flex; align-items:center; justify-content:center; gap:14px; margin:2px 0 0; min-height:24px; }
#stage .outcome-victory .won-autres[hidden] { display:none; }
#stage .outcome-victory .won-autre { display:inline-flex; align-items:center; gap:5px; }
#stage .outcome-victory .won-autre .picon, #stage .outcome-victory .won-autre .res-ico { width:22px; height:22px; flex:none; }
#stage .outcome-victory .won-autre b { font:800 18px/1 var(--f-texte); font-style:normal; color:var(--sm-ink); }
#stage .outcome-victory .won-autre small { font:700 13px/1 var(--f-texte); color:var(--sm-ink2); }
#stage .outcome-victory .won-pris:not([hidden]) { order:2; display:flex; align-items:center; justify-content:center; gap:5px; margin:0; font:800 14px/1 var(--f-texte); color:var(--sm-vert); }
#stage .outcome-victory .won-pris .picon { width:16px; height:16px; background-color:var(--sm-vert); }
/* le détail déplié : la liste prend la place du gain, la commande « Masquer le détail » reste dessous, la carte grandit vers le haut */
#stage .outcome-victory .rs-scene:has(.won-sources.liste) { height:auto; display:flex; flex-direction:column; }
#stage .outcome-victory .rs-scene:has(.won-sources.liste) .won-sources.liste { margin:6px 0 0; max-height:none; }
/* la récompense du territoire : une ligne, le jour où elle tombe seulement */
#stage .screen.outcome-victory:not(.avec-deblocage) .won-marche.plaque-module { display:none; }
#stage .outcome-victory .won-marche-pas { display:none; }
#stage .outcome-victory .won-marche, #stage .outcome-victory .won-marche.plaque-module { height:50px; justify-content:center; }
#stage .outcome-victory .won-marche .won-rec { flex:0 1 auto; }
#stage .outcome-victory .won-rec-copy .won-rec-etiq { font-size:11px; }
/* la vidéo : secondaire compacte, une ligne (« Vidéo : or ×2 »), absente du flux une fois vue */
#stage .outcome-victory .won-video { height:46px; gap:10px; }
#stage .outcome-victory .won-video-sub { display:none; }
#stage .outcome-victory .won-video-lbl { font-size:20px; }
#stage .outcome-victory[data-temps="repos"] .won-video.absente { display:none; }
/* Continuer : seul bouton bleu, présent dès l'arrivée (une tape ailleurs achève la révélation) ; la vidéo paraît au repos */
/* avant le repos, la case de la vidéo dit comment passer la révélation (texte seul, inerte : hud.js) */
#stage .screen.outcome-victory:not([data-temps="repos"]) .won-video { display:flex; visibility:visible; border-color:transparent; background:none; box-shadow:none; pointer-events:none; }
#stage .screen.outcome-victory:not([data-temps="repos"]) .won-video > .picon { display:none; }
#stage .screen.outcome-victory:not([data-temps="repos"]) .won-video-lbl { font:600 14px/1 var(--f-texte); font-style:normal; color:var(--sm-ink2); }
@media (max-height:700px) {
  #stage .outcome-victory { --rs-h-entete:82px; --rs-h-scene:116px; }
  #stage .outcome-victory:is([data-kind="mid"], [data-kind="free"], [data-kind="clan"], [data-kind="horde"]) { --rs-h-entete:132px; }
}

/* ================================================================ ÉCLATS ET BRAISES (mise en scène légère des grandes surfaces sombres)
   Quelques éclats d'or qui montent (victoire) ou des braises qui descendent (défaite) dans le haut de l'écran : transform et opacité
   seulement, aucune ombre portée animée, coupés sous prefers-reduced-motion. Ils vivent dans la zone libre au-dessus de la carte. */
.rs-eclats, .rs-braises { position:absolute; left:0; right:0; top:0; height:56%; pointer-events:none; overflow:hidden; z-index:0; }
.rs-eclats > i, .rs-braises > i { position:absolute; display:block; border-radius:50%; opacity:0; }
.rs-eclats > i { bottom:-8px; width:7px; height:7px; background:radial-gradient(circle, #FFF3B8 0 35%, rgba(246,211,126,0) 70%); animation:rs-monte 4.2s ease-in infinite; }
.rs-braises > i { top:-10px; width:6px; height:6px; background:radial-gradient(circle, #FFB36B 0 35%, rgba(224,75,58,0) 70%); animation:rs-tombe 5.4s ease-in infinite; }
.rs-eclats > i:nth-child(1), .rs-braises > i:nth-child(1) { left:8%; animation-delay:0s; }
.rs-eclats > i:nth-child(2), .rs-braises > i:nth-child(2) { left:19%; animation-delay:1.1s; width:5px; height:5px; }
.rs-eclats > i:nth-child(3), .rs-braises > i:nth-child(3) { left:31%; animation-delay:2.3s; }
.rs-eclats > i:nth-child(4), .rs-braises > i:nth-child(4) { left:43%; animation-delay:.6s; width:9px; height:9px; }
.rs-eclats > i:nth-child(5), .rs-braises > i:nth-child(5) { left:55%; animation-delay:3.1s; }
.rs-eclats > i:nth-child(6), .rs-braises > i:nth-child(6) { left:66%; animation-delay:1.7s; width:5px; height:5px; }
.rs-eclats > i:nth-child(7), .rs-braises > i:nth-child(7) { left:78%; animation-delay:2.7s; }
.rs-eclats > i:nth-child(8), .rs-braises > i:nth-child(8) { left:90%; animation-delay:.3s; width:8px; height:8px; }
.rs-braises > i:nth-child(9) { left:25%; animation-delay:3.6s; }
.rs-braises > i:nth-child(10) { left:72%; animation-delay:4.2s; width:8px; height:8px; }
@keyframes rs-monte { 0% { opacity:0; transform:translate(0, 0) scale(.7); } 15% { opacity:.95; } 100% { opacity:0; transform:translate(12px, -200px) scale(1.15); } }
@keyframes rs-tombe { 0% { opacity:0; transform:translate(0, 0) scale(1); } 20% { opacity:.85; } 100% { opacity:0; transform:translate(-10px, 230px) scale(.6); } }
.arena-outcome:not(.defaite) .rs-braises, .arena-outcome.defaite .rs-eclats, .outcome-victory:not([data-temps="titre"]):not([data-temps="repos"]) .rs-eclats { display:none; }
.result-panel { position:relative; z-index:1; }
@media (prefers-reduced-motion: reduce) { .rs-eclats > i, .rs-braises > i { animation:none; opacity:0; } }

/* emblème de défaite : le portail brisé, posé à cheval sur le bord haut de la carte */
.rs-emblem { display:none; }
.outcome-defeat .rs-emblem-defaite, .arena-outcome.defaite .rs-emblem-defaite { display:block; width:60px; height:60px; margin:-46px auto -4px; position:relative; z-index:2; animation:rs-vient 320ms var(--courbe) 120ms both; }

/* ================================================================ DÉFAITE (Campagne)
   Une pile courte : (surtitre du mode), titre, cause + jauge, ce qu'on conserve, la plus grande armée en une ligne discrète, puis les actions.
   Deux compositions : reprise possible (Rejouer, puis « Relever le portail » et la Cité côte à côte) et sans reprise (Rejouer, puis
   « Retour à la Cité » en bouton large : plus de bouton isolé au milieu d'une grille vide). */
#stage .outcome-defeat .outcome-veil { background:linear-gradient(to top, rgba(18,6,10,.94), rgba(18,6,10,.78) 46%, rgba(40,10,14,.4) 78%, rgba(40,10,14,.12)); }
#stage .outcome-defeat .defeat-panel { padding:16px 14px 14px; gap:0; }
#stage .outcome-defeat .defeat-panel .result-body { gap:10px; align-items:stretch; }
#stage .outcome-defeat .result-heading { font:italic 900 40px/1 var(--f-titre); margin:0; }
#stage .outcome-defeat .over-surtitre { align-self:center; font:800 12px/1 var(--f-texte); letter-spacing:.12em; text-transform:uppercase; color:var(--sm-ink2); }
#stage .outcome-defeat .over-accroche { margin:-4px 0 0; text-align:center; font:italic 900 24px/1 var(--f-titre); color:var(--sm-or-s); }
#stage .outcome-defeat .over-base { gap:8px; }
#stage .outcome-defeat .over-base-lbl { order:0; font:700 17px/1.25 var(--f-texte); font-style:normal; color:var(--sm-ink); text-align:center; text-wrap:balance; }
#stage .outcome-defeat .over-base-n { order:1; font:800 15px/1.2 var(--f-texte); font-style:normal; color:var(--sm-rouge-s); text-align:center; }
#stage .outcome-defeat .over-base.si-pres .over-base-n { font-size:17px; }
#stage .outcome-defeat .over-base .sangle { order:2; height:14px; }
#stage .outcome-defeat .over-garde { margin:2px 0 0; display:flex; align-items:center; justify-content:center; gap:8px; font:700 15px/1 var(--f-texte); font-style:normal; color:var(--sm-ink2); }
#stage .outcome-defeat .over-garde .picon { width:26px; flex:none; }
#stage .outcome-defeat .over-garde b { font:italic 900 26px/1 var(--f-titre); color:var(--sm-or-s); }
#stage .outcome-defeat .over-score { margin:0; gap:2px 16px; }
#stage .outcome-defeat .over-cote small { font:600 12.5px/1 var(--f-texte); color:var(--sm-ink2); }
#stage .outcome-defeat .over-cote strong { font:800 14px/1 var(--f-texte); font-style:normal; color:var(--sm-ink2); }
#stage .outcome-defeat .over-actions { gap:12px; margin-top:6px; }
#stage .outcome-defeat #over-retry { min-height:62px; height:auto; padding:6px 16px; flex-direction:column; justify-content:center; gap:0; }
#stage .outcome-defeat #over-retry .command-copy { display:flex; flex-direction:column; align-items:center; gap:2px; }
#stage .outcome-defeat #over-retry strong { font-size:34px; line-height:1; }
#stage .outcome-defeat #over-retry small { font:700 13px/1 var(--f-texte); font-style:normal; color:rgba(255,255,255,.92); text-shadow:none; letter-spacing:0; }
#stage .outcome-defeat .over-second { display:flex; align-items:stretch; gap:10px; }
#stage .outcome-defeat .over-second #over-revive { flex:1 1 auto; min-width:0; margin:0; min-height:58px; padding:6px 12px; gap:10px; justify-content:flex-start; }
#stage .outcome-defeat #over-revive .command-copy { display:flex; flex-direction:column; align-items:flex-start; gap:3px; min-width:0; }
#stage .outcome-defeat #over-revive strong { font-size:20px; line-height:1; }
#stage .outcome-defeat #over-revive small { display:flex; align-items:center; gap:5px; font:700 13px/1 var(--f-texte); font-style:normal; color:var(--sm-ink2); }
#stage .outcome-defeat #over-revive small .picon { width:16px; height:16px; }
#stage .outcome-defeat .over-cite { width:62px; min-height:58px; margin:0; border-radius:16px; }
#stage .outcome-defeat[data-variante="sans-reprise"] .over-second { display:block; }
#stage .outcome-defeat[data-variante="sans-reprise"] .over-cite { width:100%; min-height:52px; flex-direction:row; gap:10px; }
#stage .outcome-defeat[data-variante="sans-reprise"] .over-cite small { font:800 17px/1 var(--f-texte); color:var(--sm-ink); }

/* ================================================================ RÉSULTAT D'ARÈNE ET DE NIVEAU BONUS
   Même langage : l'emblème à la défaite, un éclat d'or derrière le gain à la victoire, le score en ligne discrète, un seul bouton plein,
   le secondaire plus fin et la Cité en lien de 44 points. La première victoire d'un niveau bonus porte un ruban d'or. */
#stage .arena-outcome .outcome-veil { background:linear-gradient(to top, rgba(8,14,28,.88), rgba(8,14,28,.62) 50%, rgba(8,14,28,.22) 80%, rgba(8,14,28,.05)); }
#stage .arena-outcome.defaite .outcome-veil { background:linear-gradient(to top, rgba(18,6,10,.94), rgba(18,6,10,.76) 48%, rgba(40,10,14,.4) 78%, rgba(40,10,14,.12)); }
#stage .arena-outcome .arena-panel { gap:8px; }
#stage .arena-outcome.defaite .over-base { gap:8px; margin:2px 0 0; }
#stage .arena-outcome.defaite .over-base-lbl { font:700 17px/1.25 var(--f-texte); font-style:normal; color:var(--sm-ink); text-align:center; text-wrap:balance; }
#stage .arena-outcome.defaite .over-base-n { order:1; font:800 15px/1.2 var(--f-texte); font-style:normal; color:var(--sm-rouge-s); text-align:center; }
#stage .arena-outcome.defaite .over-base .sangle { order:2; height:14px; }
#stage .arena-outcome.defaite .arena-result-reward { display:flex; align-items:center; justify-content:center; gap:8px; margin:2px 0; font:700 15px/1 var(--f-texte); color:var(--sm-ink2); }
#stage .arena-outcome.defaite .arena-result-reward .picon { width:26px; flex:none; }
#stage .arena-outcome.defaite .arena-result-reward b { font:italic 900 26px/1 var(--f-titre); color:var(--sm-or-s); }
#stage .arena-outcome:not(.defaite) .arena-result-gain { position:relative; isolation:isolate; }
#stage .arena-outcome:not(.defaite) .arena-result-gain::before { content:''; position:absolute; left:50%; top:50%; width:260px; height:120px; margin:-60px 0 0 -130px; z-index:-1; pointer-events:none;
  background:radial-gradient(ellipse at 50% 50%, rgba(246,211,126,.7), rgba(246,211,126,0) 68%); }
#stage .arena-outcome[data-premier="oui"] #arena-result-rank { align-self:center; padding:6px 16px; border-radius:999px; background:linear-gradient(180deg, #FFE27A, #F2B52E); border:2px solid var(--or-tranche); color:var(--or-texte); font:800 15px/1 var(--f-texte); letter-spacing:.03em; box-shadow:0 2px 0 var(--or-tranche); }
#stage .arena-outcome .arena-result-actions { gap:8px; }
#stage .arena-outcome .arena-result-actions > .menu-command:not(.primary) { min-height:48px; border-width:1.5px; box-shadow:none; }
#stage .arena-outcome .arena-result-actions > .menu-command:not(.primary) strong { font-size:20px; }
#stage .arena-outcome .arena-result-actions > .lien-action { min-height:44px; padding:0 18px; font:700 15px/1 var(--f-texte); color:var(--sm-ink2); border:0; background:none; text-decoration:underline; text-underline-offset:3px; display:flex; align-items:center; align-self:center; }

/* ================================================================ ATTENTE DE PUBLICITÉ
   UNE carte compacte, centrée, sur la scène voilée : le titre (et la croix éteinte, neutre), le minuteur (seul centre), ce que la vidéo
   rapporte avec son icône, la phrase d'explication juste dessous, Continuer dont la place est réservée (la carte ne bouge pas quand la
   vidéo se termine) ; le son est une petite commande sans halo. */
#stage .screen.ad { justify-content:center; align-items:center; padding:calc(var(--safe-t) + 16px) 18px calc(var(--safe-b) + 16px); gap:0; }
#stage .screen.ad .outcome-veil { position:absolute; inset:0; height:auto; background:radial-gradient(ellipse at 50% 45%, rgba(8,14,28,.55), rgba(8,14,28,.86)); }
#stage .ad .ad-carte { position:relative; z-index:1; width:100%; max-width:336px; box-sizing:border-box; display:flex; flex-direction:column; align-items:stretch; gap:14px;
  padding:14px 16px 16px; border-radius:22px; background:var(--sm-iv); border:1.5px solid var(--sm-bord); box-shadow:var(--sm-ombre-carte); color:var(--sm-ink); }
#stage .ad .ad-head { width:100%; min-height:44px; padding:0; gap:10px; display:flex; align-items:center; }
#stage .ad .ad-head > .picon { width:26px; color:var(--sm-or-s); flex:none; }
#stage .ad .ad-title { flex:1; min-width:0; font:italic 900 26px/1.05 var(--f-titre); color:var(--sm-ink); text-shadow:none; }
#stage .ad .ad-close { position:static; flex:none; width:44px; height:44px; border-radius:50%; background:#E7DFC8; border:1.5px solid var(--sm-bord); box-shadow:none; opacity:1; }
#stage .ad .ad-close .picon { width:18px; color:var(--sm-ink2); }
#stage .ad .ad-close:disabled { opacity:1; }
#stage .ad .ad-close:disabled .picon { opacity:.55; }
#stage .ad .box { position:relative; flex:none; max-height:none; width:100%; padding:0; background:none; box-shadow:none; border-radius:0; gap:10px; display:flex; flex-direction:column; align-items:center; text-align:center; }
#stage .ad .ad-video { width:92px; height:92px; background:#EEE6CC; box-shadow:inset 0 0 0 1.5px var(--sm-bord); }
#stage .ad .ad-video::before { background:conic-gradient(from -90deg, var(--or-tranche), var(--or) var(--fill), rgba(18,35,63,.14) 0); -webkit-mask:radial-gradient(circle closest-side, transparent 38px, #000 39px); mask:radial-gradient(circle closest-side, transparent 38px, #000 39px); }
#stage .ad .ad-video strong { font:italic 900 30px/1 var(--f-titre); color:var(--sm-ink); }
/* fin de vidéo : la récompense n'est PAS encore versée (elle l'est au toucher de Continuer ou de la croix), donc aucune coche verte « reçu » :
   l'anneau est plein, un halo doré autour de l'icône du gain dit « prêt » */
#stage .ad .ad-video.fin::after { content:none; }
#stage .ad .ad-video.fin::before { background:var(--or); }
#stage .ad.ad-fin .ad-recompense { box-shadow:0 0 0 5px rgba(232,182,76,.4); background:#FFF3C9; }
#stage .ad #ad-box-label { font:700 14px/1.2 var(--f-texte); font-style:normal; color:var(--sm-ink2); }
#stage .ad .ad-recompense { display:flex; align-items:center; justify-content:center; gap:12px; min-height:56px; max-width:100%; box-sizing:border-box; padding:6px 14px; border-radius:16px; }
#stage .ad .ad-ico { width:34px; height:34px; flex:none; color:var(--sm-or-s); }
#stage .ad .ad-ico.res-ico-img { width:38px; height:34px; }
#stage .ad .ad-ico[data-res="bouclier"] { color:#2F86E6; }
#stage .ad #ad-reward { min-height:0; min-width:0; padding:0; display:flex; flex-direction:column; align-items:flex-start; gap:3px; text-align:left; white-space:normal; font:italic 900 32px/1 var(--f-titre); color:var(--sm-ink); text-shadow:none; overflow-wrap:anywhere; }
#stage .ad #ad-reward > span { max-width:100%; }
/* le gain en grand, la cible dessous en plus petit (« +123 pierres » / « Trésorerie niveau 100 ») : une ligne unique débordait de la carte à 360 */
#stage .ad #ad-reward > small { max-width:100%; font:700 17px/1.15 var(--f-texte); font-style:normal; color:var(--sm-ink2); text-wrap:balance; }
#stage .ad .ad-reminder { margin:0; max-width:272px; font:600 15px/1.35 var(--f-texte); color:var(--sm-ink2); text-shadow:none; text-wrap:balance; min-height:40px; }
#stage .ad .ad-continue { display:flex; position:relative; width:100%; margin:0; min-height:58px; }
#stage .ad .ad-continue.attend { background:#E9E1CA; color:var(--sm-ink2); border:2px solid var(--sm-bord); box-shadow:none; text-shadow:none; }
#stage .ad .ad-continue.attend strong { color:var(--sm-ink2); text-shadow:none; opacity:.7; }
#stage .ad .ad-continue .picon { display:none; }
#stage .ad .ad-mute { position:absolute; left:2px; top:2px; right:auto; bottom:auto; width:44px; height:44px; min-height:0; padding:0; border-radius:50%; background:#EFE8D2; border:1.5px solid var(--sm-bord); box-shadow:none; display:flex; align-items:center; justify-content:center; opacity:.9; }
#stage .ad .ad-mute .picon { width:20px; color:var(--sm-ink2); opacity:1; }
#stage .ad .ad-mute:active { background:#E4DBC0; transform:none; }
#stage .ad[data-son="off"] .ad-mute { opacity:1; }
#stage .ad[data-son="off"] .ad-mute .picon { opacity:.55; }
#stage .ad[data-son="off"] .ad-mute::after { content:''; position:absolute; left:11px; right:11px; top:50%; height:2.5px; margin-top:-1.25px; border-radius:2px; background:var(--sm-ink); transform:rotate(-45deg); }

/* ================================================================ CHARGEMENTS
   Une identité : l'écusson (le portail sous un arc d'or), la marque, UN message de progression (le titre ; « Chargement… » ou le lieu en
   dessous), une barre épaisse dont l'éclat court tant que rien d'autre ne bouge (l'attente se voit, un blocage se distingue d'une attente). */
#stage #loading[data-state="loading"] { justify-content:center; gap:10px; padding:calc(var(--safe-t) + 16px) 24px calc(var(--safe-b) + 16px); }
#stage #loading .loading-crest { display:none; }
#stage #loading[data-state="loading"] .loading-crest { display:block; width:92px; height:92px; filter:drop-shadow(0 0 14px rgba(24,185,255,.45)); margin-bottom:2px; animation:rs-crest 2.4s ease-in-out infinite; }
@keyframes rs-crest { 0%, 100% { transform:translateY(0) scale(1); } 50% { transform:translateY(-4px) scale(1.04); } }
#stage #loading[data-state="loading"] .loading-kicker { font-size:44px; margin-bottom:6px; }
#stage #loading[data-state="loading"] .loading-title { font:800 19px/1.2 var(--f-texte); letter-spacing:.03em; color:var(--ivoire); margin-top:10px; text-align:center; }
#stage #loading[data-state="loading"] #loading-text { margin-top:2px; font:600 15px/1.3 var(--f-texte); font-style:normal; color:#CFE0F5; }
#stage #loading[data-mode="bataille"] #loading-text { display:none; }
#stage #loading[data-state="loading"] #loading-detail { font:700 16px/1.2 var(--f-texte); color:var(--or-clair); text-align:center; }
#stage #loading[data-state="loading"] .loading-progress { position:relative; overflow:hidden; width:min(260px, 80%); height:12px; margin-top:8px; border-radius:6px; background:rgba(255,255,255,.14); box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.35); }
#stage #loading[data-state="loading"] .loading-progress > i { border-radius:6px; background:linear-gradient(90deg, var(--or-appui), var(--or) 70%, var(--or-clair)); }
#stage #loading[data-state="loading"] .loading-progress::after { content:''; position:absolute; top:0; bottom:0; left:-40%; width:40%; background:linear-gradient(90deg, rgba(255,255,255,0), rgba(255,255,255,.55), rgba(255,255,255,0)); animation:rs-eclat 1.5s linear infinite; }
@keyframes rs-eclat { from { transform:translateX(0); } to { transform:translateX(360%); } }
@media (prefers-reduced-motion: reduce) { #stage #loading .loading-crest, #stage #loading .loading-progress::after { animation:none; } }

/* « Annuler » : un seul contour, le dessin du bouton secondaire des autres écrans (plus de double filet gris) */
#stage #loading[data-mode="bataille"] #loading-home, #stage #loading[data-state="loading"] #loading-home { background:transparent; color:#fff; border:2px solid rgba(255,255,255,.6); box-shadow:none; outline:none; text-shadow:none; }

/* écran d'erreur : un ton calme (pas de lettrage de promotion), les deux boutons du même dessin, le diagnostic en lien discret */
#stage #loading[data-state="error"] #loading-retry strong { font-size:26px; }
#stage #loading[data-state="error"] #loading-home { font:800 18px/1 var(--f-texte); font-style:normal; border:2px solid rgba(255,255,255,.6); background:transparent; box-shadow:none; }
#stage #loading[data-state="error"] .loading-error-detail summary { min-height:44px; font:600 13px/1 var(--f-texte); color:rgba(255,255,255,.7); }

/* ================================================================ DÉFAITE, retour 11 du 19 octobre 2026
   Le titre, UNE phrase utile au-dessus de sa jauge (ce qu'il restait à détruire, « Si près ! » en tête quand c'est le cas), l'or gardé en
   petite ligne quand il existe, Rejouer seul en bleu, au plus une offre (relever le portail), la Cité en commande discrète sans cadre. */
#stage .outcome-defeat .defeat-panel .result-body { gap:12px; }
#stage .outcome-defeat .over-base-lbl { font-size:16px; }
#stage .outcome-defeat .over-base.si-pres .over-base-lbl { color:var(--sm-or-s); font-weight:800; }
#stage .outcome-defeat .over-garde { margin:0; gap:6px; font-size:14px; }
#stage .outcome-defeat .over-garde .picon { width:20px; }
#stage .outcome-defeat .over-garde b { font:800 16px/1 var(--f-texte); font-style:normal; color:var(--sm-or-s); }
#stage .outcome-defeat #over-retry { min-height:58px; }
#stage .outcome-defeat #over-retry small { display:none; }
#stage .outcome-defeat .over-cite { border:0; background:none; box-shadow:none; color:var(--sm-ink2); }
#stage .outcome-defeat .over-cite small { font:700 13px/1 var(--f-texte); color:var(--sm-ink2); }
#stage .outcome-defeat[data-variante="sans-reprise"] .over-cite { min-height:44px; }
#stage .outcome-defeat[data-variante="sans-reprise"] .over-cite small { font:700 15px/1 var(--f-texte); color:var(--sm-ink2); text-decoration:underline; text-underline-offset:3px; }
#stage .outcome-defeat .result-heading { font-size:34px; }
#stage .outcome-defeat #over-revive strong { font-size:19px; }
@media (max-height:700px) {
  #stage .outcome-defeat .defeat-panel .result-body { gap:9px; }
  #stage .outcome-defeat #over-retry { min-height:52px; }
}

/* retour 11, second jet : le gain est visible dès l'arrivée (« +0 » qui compte) et le détail replié se recentre */
#stage .outcome-victory .gain.vide { visibility:visible; opacity:.35; }
#stage .outcome-victory .rs-scene:has(.won-sources.liste) .rs-gain { align-self:center; }
/* résultat de raid : la Cité en commande discrète, comme à la défaite (pas un second bouton cadré) */
#stage .screen.raid-outcome .raid-cite { background:none; border:0; box-shadow:none; color:var(--sm-ink2); }
#stage .screen.raid-outcome .raid-cite .picon { color:var(--sm-ink2); }
/* la récompense du territoire tient sa ligne dès l'arrivée (grise, puis dorée au repos) : la carte n'a plus qu'une case réservée, la vidéo */
#stage .screen.outcome-victory.avec-deblocage:not([data-temps="repos"]) .won-marche.plaque-module { visibility:visible; pointer-events:none; }
#stage .outcome-victory[data-temps="titre"] .gain { display:flex; }

/* retour 11, après la critique d'Astra (ecrans-monde_apres1) : un statut n'a pas l'air d'un bouton, la vidéo vue garde sa case, les montants longs se resserrent */
#stage .outcome-victory .won-marche, #stage .outcome-victory .won-marche.plaque-module { height:34px; padding:0; background:none; border:0; box-shadow:none; }
#stage .outcome-victory .won-rec-copy { flex-direction:row; align-items:baseline; gap:6px; }
#stage .outcome-victory .won-rec-copy .won-rec-etiq { display:none; }
#stage .outcome-victory .won-rec-copy b { font:800 16px/1 var(--f-texte); color:var(--sm-or-s); }
#stage .outcome-victory .won-rec > .picon { width:22px; }
#stage .outcome-victory.avec-deblocage, #stage .outcome-victory.avec-relique { --rs-h-pied:94px; }
#stage .screen.outcome-victory[data-temps="repos"] .won-video.fait { display:flex; border-color:transparent; background:none; box-shadow:none; pointer-events:none; }
#stage .screen.outcome-victory .won-video.fait > .picon { display:none; }
#stage .screen.outcome-victory .won-video.fait .won-video-lbl { display:inline-flex; align-items:center; gap:6px; font:800 16px/1 var(--f-texte); font-style:normal; color:var(--sm-vert); }
#stage .screen.outcome-victory .won-video.fait .won-video-lbl::before { content:''; width:16px; height:16px; background:var(--sm-vert); -webkit-mask:var(--ic-valider) center / contain no-repeat; mask:var(--ic-valider) center / contain no-repeat; }
#stage .outcome-victory .gain.long .gain-n { font-size:56px; }
#stage .outcome-victory .gain.long .gain-piece { width:50px; }
@media (max-height:700px) { #stage .outcome-victory .gain.long .gain-n { font-size:48px; } }
/* défaite, après la critique d'Astra : « Si près ! » est la seule accroche chaude ; l'or gardé reste une ligne calme */
#stage .outcome-defeat .over-base.si-pres .over-base-lbl { font:italic 900 24px/1 var(--f-titre); color:var(--sm-or-s); }
#stage .outcome-defeat .over-base-n, #stage .outcome-defeat .over-base.si-pres .over-base-n { font-size:15px; }
#stage .outcome-defeat .over-garde b { color:var(--sm-ink); }

/* retour 11, seconde critique d'Astra : la victoire arrive gratifiante (le gain compte en pleine couleur dès l'arrivée), sans consigne
   concurrente de Continuer ; le détail du butin n'est plus une ligne de texte : toute la zone du gain se touche, un petit chevron le dit */
#stage .outcome-victory .gain.vide { opacity:1; }
#stage .screen.outcome-victory:not([data-temps="repos"]) .won-video { visibility:hidden; }
#stage .outcome-victory .rs-gain { position:relative; }
#stage .outcome-victory .won-haut .won-cite, #stage .outcome-victory .won-haut .won-cite.garnison { width:44px; height:44px; min-height:44px; background:rgba(8,20,48,.55); border:0; box-shadow:none; color:#fff; }
#stage .outcome-victory .won-haut .won-cite .picon { color:#fff; background-color:#fff; }

/* ================================================================ refonte des interfaces (23 octobre 2026, chantier « boutique »)
   Retour de Bastien : « trop de cartes et de boutons ». Contrat : docs/design/INTERFACE_GRAMMAIRE.md. Sur chaque écran de résultat : UN héros
   (le montant ou le titre), UN seul bouton plein, aucune carte dans la carte, aucune pilule qui imite un bouton. Les offres secondaires
   (vidéo, rejouer) deviennent du texte souligné de 44 de haut ; un statut (record, « Tu mènes ») est du texte coloré, jamais une plaque.
   Ni les montants ni les enchaînements ne changent. Cette feuille charge avant social.css : les règles des raids amicaux ont donc #stage. */

/* défaite : « Reprendre ici avec une vidéo » est un lien, Rejouer reste le seul bouton plein */
#stage .screen.outcome-defeat .over-second #over-revive.menu-command { min-height:48px; padding:4px 6px; border:0; border-radius:0; background:none; box-shadow:none; gap:10px; }
#stage .screen.outcome-defeat #over-revive .command-copy strong { font:800 17px/1.2 var(--f-texte); font-style:normal; color:var(--sm-ink); text-decoration:underline; text-underline-offset:3px; }
#stage .screen.outcome-defeat #over-revive small { font:600 14px/1.2 var(--f-texte); color:var(--sm-ink2); }
#stage .screen.outcome-defeat #over-revive > .picon { color:var(--sm-ink); }
#stage .screen.outcome-defeat[data-variante="sans-reprise"] .over-cite { background:none; }

/* victoire : la vidéo ×2 est un lien d'or sombre, Continuer reste le seul bouton plein */
#stage .screen.outcome-victory[data-temps="repos"] .won-video:not(.fait):not(.indispo):not(.absente) { height:46px; border:0; border-radius:0; background:none; box-shadow:none; }
#stage .screen.outcome-victory[data-temps="repos"] .won-video:not(.fait):not(.indispo) .won-video-lbl { font:800 17px/1.2 var(--f-texte); font-style:normal; color:var(--sm-or-s); text-decoration:underline; text-underline-offset:3px; }
#stage .screen.outcome-victory[data-temps="repos"] .won-video:not(.fait):not(.indispo) > .picon { background-color:var(--sm-or-s); }

/* arène : le rang inédit est du texte d'or, « Rejouer ce rang » un lien (le seul bouton plein est « Rang suivant » ou « Rejouer ») */
#stage .arena-outcome[data-premier="oui"] #arena-result-rank { padding:0; border:0; border-radius:0; background:none; box-shadow:none; color:var(--sm-or-s); font:800 16px/1.2 var(--f-texte); letter-spacing:.02em; }
#stage .screen.arena-outcome .arena-result-actions > .menu-command:not(.primary) { min-height:44px; border:0; border-radius:0; background:none; box-shadow:none; padding:0 18px; align-self:center; width:auto; }
#stage .screen.arena-outcome .arena-result-actions > .menu-command:not(.primary) strong { font:700 16px/1 var(--f-texte); font-style:normal; color:var(--sm-ink2); text-decoration:underline; text-underline-offset:3px; }

/* raid : le titre ne rivalise plus avec le montant (le montant est le héros), plus de plaque pour le coffre ni pour le doublement */
#stage .screen.raid-outcome .raid-corps .plaque-titre .result-heading { font-size:34px; line-height:1; }
#stage .screen.raid-outcome .rr-plus { padding:0; border:0; border-radius:0; background:none; box-shadow:none; }
#stage .screen.raid-outcome .raid-double.menu-command { min-height:48px; width:100%; margin:0; padding:2px 6px; border:0; border-radius:0; background:none; box-shadow:none; justify-content:center; }
#stage .screen.raid-outcome .raid-double .command-copy strong { font:800 17px/1.2 var(--f-texte); font-style:normal; color:var(--sm-or-s); text-decoration:underline; text-underline-offset:3px; }
#stage .screen.raid-outcome .raid-double .command-copy small { font:600 14px/1.2 var(--f-texte); color:var(--sm-ink2); }
#stage .screen.raid-outcome .raid-trophee { padding:4px 0; border:0; border-radius:0; background:none; box-shadow:none; }

/* raid amical : le record est du texte d'or, le duel deux colonnes séparées d'un filet, « Tu mènes » du texte vert */
#stage .screen.allie-outcome .allie-record { padding:0; border:0; border-radius:0; background:none; box-shadow:none; color:var(--sm-or-s); font:italic 900 24px/1.1 var(--f-affiche); }
#stage .screen.allie-outcome .allie-duel { gap:0; padding:8px 0 4px; border-top:1px solid rgba(20,37,74,.12); border-bottom:1px solid rgba(20,37,74,.12); }
#stage .screen.allie-outcome .allie-duel .ar-duel-l { padding:2px 10px; border:0; border-radius:0; background:none; align-items:center; text-align:center; }
#stage .screen.allie-outcome .allie-duel .ar-duel-l + .ar-duel-l { border-left:1px solid rgba(20,37,74,.12); }
#stage .screen.allie-outcome .allie-duel small { font:600 14px/1.2 var(--f-lecture); }
#stage .screen.allie-outcome .allie-duel .al-duel { padding:0; border:0; border-radius:0; background:none; margin-top:6px; font:800 16px/1.2 var(--f-lecture); }
#stage .screen.allie-outcome .allie-duel .al-duel.tu { color:#1D6A30; background:none; }
#stage .screen.allie-outcome .allie-duel .al-duel.lui { color:#8A4A08; background:none; }
#stage .screen.allie-outcome .ar-duel-seul { padding:6px 0; border:0; border-radius:0; background:none; font:700 16px/1.3 var(--f-lecture); color:var(--sm-ink2); }

/* ================================================================ VICTOIRE resserrée (23 octobre 2026, seconde critique d'Astra : 6,5)
   Le panneau monumental masquait le jeu et le gain principal écrasait le reste. Panneau bas d'environ 340 de haut (406 avant) : titre 30,
   gain principal 40, gemmes 20, étoiles 28, le vide avant Continuer retiré ; la ligne du déblocage reste collée aux gains. Ni montants ni
   enchaînements ne changent (hud.js, main.js intacts) ; tout est mesure et typographie. */
#stage .outcome-victory { --rs-h-entete:74px; --rs-h-scene:96px; }
#stage .outcome-victory:is([data-kind="mid"], [data-kind="free"], [data-kind="clan"], [data-kind="horde"]) { --rs-h-entete:116px; }
#stage .outcome-victory .victory-panel { padding:12px 14px 14px; }
#stage .outcome-victory .won-plaque .result-heading, #stage .outcome-victory .won-scene .won-plaque .result-heading { font-size:30px; }
#stage .outcome-victory .won-plaque .result-copy { font-size:14px; }
#stage .outcome-victory .won-etoiles { min-height:28px; margin:0; }
#stage .outcome-victory .etoile-forme { width:28px; height:28px; }
#stage .outcome-victory .gain { gap:8px; }
#stage .outcome-victory .gain-piece { width:36px; }
#stage .outcome-victory .gain-n, #stage .outcome-victory .gain.long .gain-n { font-size:40px; }
#stage .outcome-victory .gain.long .gain-piece { width:32px; }
#stage .outcome-victory[data-temps="repos"] .rs-gain { padding-top:8px; }
#stage .outcome-victory .won-autres { gap:10px; margin:0; min-height:24px; }
#stage .outcome-victory .won-autres .picon { width:20px; height:20px; }
#stage .outcome-victory .won-autres b { font:800 20px/1 var(--f-texte); font-style:normal; color:var(--sm-ink); }
#stage .outcome-victory .won-panneau { gap:6px; margin:4px 0 0; }
#stage .outcome-victory .won-marche, #stage .outcome-victory .won-marche.plaque-module { height:30px; }
#stage .screen.outcome-victory[data-temps="repos"] .won-video:not(.fait):not(.indispo):not(.absente) { height:44px; }
#stage .outcome-victory #won-continue { min-height:54px; height:54px; }

/* raid : « Changer de cibles » (le même mot que sur l'écran du rival) tient sur une ligne à côté de la Cité */
#stage .screen.raid-outcome .raid-autre-pied { gap:8px; padding-inline:12px; }
#stage .screen.raid-outcome .raid-autre-pied .picon { width:24px; flex:none; }
#stage .screen.raid-outcome .raid-autre-pied strong { font-size:25px; white-space:nowrap; }
