/* WikiCollect : thème « Art déco sobre » (clair « Ivoire/Sauge » ou sombre « Nuit », selon le système ou le choix du visiteur).
   Principes : un seul accent (le laiton), des filets d'un pixel, des angles en gradins, de la symétrie, aucun dégradé décoratif.
   La couleur de rareté vient des classes .r1 … .r7 (jetons --r1 … --r7), pas du --c posé autrefois par le PHP.
   La maquette vivante est design/art-deco.html. */

/* Jost (licence SIL OFL 1.1, voir fonts/OFL.txt) : police variable hébergée ici, sans appel à un service externe. */
@font-face { font-family: "Jost"; font-style: normal; font-weight: 200 500; font-display: block; src: url("fonts/jost-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; }
@font-face { font-family: "Jost"; font-style: normal; font-weight: 200 500; font-display: block; src: url("fonts/jost-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; }





/* >>> POLICES DES CARTES À THÈME >>> */
/* Playfair, Caveat, EB Garamond italique, Space Grotesk, Cinzel, Josefin et Sora sont des polices VARIABLES : un seul fichier par famille, déclaré avec sa plage de graisses
   (auparavant, le même fichier sous plusieurs noms, téléchargé une fois par graisse employée). Pixelify Sans et Barlow Condensed 900 droit n'étaient employés nulle part. */
@font-face { font-family: "Playfair Display"; font-style: italic; font-weight: 400 700; font-display: swap; src: url("fonts/playfair-400-italic.woff2") format("woff2"); }
@font-face { font-family: "Playfair Display"; font-style: normal; font-weight: 500 900; font-display: swap; src: url("fonts/playfair-700-normal.woff2") format("woff2"); }
@font-face { font-family: "Caveat"; font-style: normal; font-weight: 500 700; font-display: swap; src: url("fonts/caveat-500-normal.woff2") format("woff2"); }
@font-face { font-family: "Special Elite"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/special-elite-400-normal.woff2") format("woff2"); }
@font-face { font-family: "EB Garamond"; font-style: italic; font-weight: 400 700; font-display: swap; src: url("fonts/eb-garamond-500-italic.woff2") format("woff2"); }
@font-face { font-family: "EB Garamond"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/eb-garamond-400-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/plex-mono-400-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 500; font-display: swap; src: url("fonts/plex-mono-500-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 600; font-display: swap; src: url("fonts/plex-mono-600-normal.woff2") format("woff2"); }
@font-face { font-family: "IBM Plex Mono"; font-style: normal; font-weight: 700; font-display: swap; src: url("fonts/plex-mono-700-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow Condensed"; font-style: italic; font-weight: 900; font-display: swap; src: url("fonts/barlow-condensed-900-italic.woff2") format("woff2"); }
@font-face { font-family: "Barlow Condensed"; font-style: normal; font-weight: 600; font-display: swap; src: url("fonts/barlow-condensed-600-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow Condensed"; font-style: normal; font-weight: 700; font-display: swap; src: url("fonts/barlow-condensed-700-normal.woff2") format("woff2"); }
@font-face { font-family: "Barlow Condensed"; font-style: normal; font-weight: 800; font-display: swap; src: url("fonts/barlow-condensed-800-normal.woff2") format("woff2"); }
@font-face { font-family: "Space Grotesk"; font-style: normal; font-weight: 500 700; font-display: swap; src: url("fonts/space-grotesk-700-normal.woff2") format("woff2"); }
@font-face { font-family: "Cinzel"; font-style: normal; font-weight: 500 700; font-display: swap; src: url("fonts/cinzel-500-normal.woff2") format("woff2"); }
@font-face { font-family: "Josefin Sans"; font-style: normal; font-weight: 400 700; font-display: block; src: url("fonts/josefin-400-normal.woff2") format("woff2"); }
@font-face { font-family: "UnifrakturCook"; font-style: normal; font-weight: 700; font-display: swap; src: url("fonts/unifraktur-700-normal.woff2") format("woff2"); }
@font-face { font-family: "Bangers"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/bangers-400-normal.woff2") format("woff2"); }
@font-face { font-family: "Dela Gothic One"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/dela-gothic-400-normal.woff2") format("woff2"); }
@font-face { font-family: "Sora"; font-style: normal; font-weight: 400 800; font-display: swap; src: url("fonts/sora-400-normal.woff2") format("woff2"); }
/* <<< POLICES DES CARTES À THÈME <<< */

/* ---------- Jetons ---------- */
:root {
  color-scheme: light;
  --font: "Jost", "Futura", "Century Gothic", "Trebuchet MS", system-ui, sans-serif;

  /* Ivoire (clair) */
  --bg: #e1e9d8;                      /* sauge */
  --surface: #ecf1e4;
  --card: #fafaf0;                    /* ivoire chaud */
  --tint: rgba(35, 121, 90, .18);     /* halo émeraude en haut de page */
  --band: rgba(35, 121, 90, .09);     /* bandeaux (chiffres, pied de page) */
  --top-bg: rgba(225, 233, 216, .72); /* en-tête translucide */
  --overlay: rgba(236, 241, 228, .82); /* voile derrière une fenêtre modale */
  --text: #17201a;
  --muted: #4f5d55;
  --line: rgba(23, 32, 26, .14);      /* filet neutre */
  --brass: #9d7b2a;                   /* laiton : filets et ornements */
  --brass-line: rgba(157, 123, 42, .5);
  --brass-ink: #765a18;               /* laiton lisible en texte et en aplat de bouton */
  --on-brass: #fbf8ee;
  --track: rgba(23, 32, 26, .08);
  --err-ink: #b8453f;                 /* texte d'erreur (≥ 4,5:1 sur les surfaces claires) */

  /* Pierres : une couleur de rareté par joyau */
  --r1: #646b75;  /* pierre  */
  --r2: #23795a;  /* émeraude */
  --r3: #2f5f9e;  /* saphir */
  --r4: #6d4aa3;  /* améthyste */
  --r5: #a37a12;  /* or */
  --r6: #a8322e;  /* rubis */
  --r7: #8f4a86;  /* opale (le cadre est irisé, voir .r7) */

  --max: 1600px;
  --ease: cubic-bezier(.2, .8, .2, 1);
  /* L'éventail (dessiné par Claude Design : design/eventail.svg et design/eventail-cercle.svg, métadonnées retirées) : 7 arcs, 25 rayons de longueurs
     variées terminés par une perle, deux faisceaux imbriqués ; --wheel en est la roue complète. Pour le modifier : retoucher les fichiers de design/ et recopier ici leurs <path>. */
  --fan: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20800%20400%27%3E%3Cpath%20d%3D%27M10%20400A390%20390%200%200%201%20790%20400M80%20400A320%20320%200%200%201%20720%20400M150%20400A250%20250%200%200%201%20650%20400M220%20400A180%20180%200%200%201%20580%20400M290%20400A110%20110%200%200%201%20510%20400M344%20400A56%2056%200%200%201%20456%20400M386.6%20400A13.4%2013.4%200%200%201%20413.4%20400M413.4%20400L790%20400M509.1%20385.6L682.6%20362.8M412.9%20396.5L742.9%20308.1M501.6%20357.9L598.6%20317.7M411.6%20393.3L737.7%20205M487.3%20333L570.6%20269.1M409.5%20390.5L651%20149M467%20312.7L573.5%20173.9M406.7%20388.4L595%2062.3M442.1%20298.4L509.1%20136.7M403.5%20387.1L491.9%2057.1M414.4%20290.9L428.1%20186.8M400%20386.6L400%2010M385.6%20290.9L371.9%20186.8M396.5%20387.1L308.1%2057.1M357.9%20298.4L290.9%20136.7M393.3%20388.4L205%2062.3M333%20312.7L226.5%20173.9M390.5%20390.5L149%20149M312.7%20333L229.4%20269.1M388.4%20393.3L62.3%20205M298.4%20357.9L201.4%20317.7M387.1%20396.5L57.1%20308.1M290.9%20385.6L117.4%20362.8M386.6%20400L10%20400%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.4%27%20vector-effect%3D%27non-scaling-stroke%27%2F%3E%3Cpath%20d%3D%27M395.5%20400A4.5%204.5%200%200%201%20404.5%20400ZM680.4%20362.8a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M740.7%20308.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M596.4%20317.7a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M568.4%20269.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M648.8%20149a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M571.3%20173.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M506.9%20136.7a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M489.7%2057.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M425.9%20186.8a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M369.7%20186.8a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M305.9%2057.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M288.7%20136.7a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M224.3%20173.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M146.8%20149a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M227.2%20269.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M199.2%20317.7a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M54.9%20308.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M115.2%20362.8a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200%27%2F%3E%3C%2Fsvg%3E");
  --wheel: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%20viewBox%3D%270%200%20800%20800%27%3E%3Cpath%20d%3D%27M10%20400a390%20390%200%201%201%20780%200a390%20390%200%201%201%20-780%200M80%20400a320%20320%200%201%201%20640%200a320%20320%200%201%201%20-640%200M150%20400a250%20250%200%201%201%20500%200a250%20250%200%201%201%20-500%200M220%20400a180%20180%200%201%201%20360%200a180%20180%200%201%201%20-360%200M290%20400a110%20110%200%201%201%20220%200a110%20110%200%201%201%20-220%200M344%20400a56%2056%200%201%201%20112%200a56%2056%200%201%201%20-112%200M386.6%20400a13.4%2013.4%200%201%201%2026.8%200a13.4%2013.4%200%201%201%20-26.8%200M413.4%20400L790%20400M509.1%20385.6L682.6%20362.8M412.9%20396.5L742.9%20308.1M501.6%20357.9L598.6%20317.7M411.6%20393.3L737.7%20205M487.3%20333L570.6%20269.1M409.5%20390.5L651%20149M467%20312.7L573.5%20173.9M406.7%20388.4L595%2062.3M442.1%20298.4L509.1%20136.7M403.5%20387.1L491.9%2057.1M414.4%20290.9L428.1%20186.8M400%20386.6L400%2010M385.6%20290.9L371.9%20186.8M396.5%20387.1L308.1%2057.1M357.9%20298.4L290.9%20136.7M393.3%20388.4L205%2062.3M333%20312.7L226.5%20173.9M390.5%20390.5L149%20149M312.7%20333L229.4%20269.1M388.4%20393.3L62.3%20205M298.4%20357.9L201.4%20317.7M387.1%20396.5L57.1%20308.1M290.9%20385.6L117.4%20362.8M386.6%20400L10%20400M290.9%20414.4L117.4%20437.2M387.1%20403.5L57.1%20491.9M298.4%20442.1L201.4%20482.3M388.4%20406.7L62.3%20595M312.7%20467L229.4%20530.9M390.5%20409.5L149%20651M333%20487.3L226.5%20626.1M393.3%20411.6L205%20737.7M357.9%20501.6L290.9%20663.3M396.5%20412.9L308.1%20742.9M385.6%20509.1L371.9%20613.2M400%20413.4L400%20790M414.4%20509.1L428.1%20613.2M403.5%20412.9L491.9%20742.9M442.1%20501.6L509.1%20663.3M406.7%20411.6L595%20737.7M467%20487.3L573.5%20626.1M409.5%20409.5L651%20651M487.3%20467L570.6%20530.9M411.6%20406.7L737.7%20595M501.6%20442.1L598.6%20482.3M412.9%20403.5L742.9%20491.9M509.1%20414.4L682.6%20437.2%27%20fill%3D%27none%27%20stroke%3D%27%23000%27%20stroke-width%3D%271.4%27%20vector-effect%3D%27non-scaling-stroke%27%2F%3E%3Cpath%20d%3D%27M395.5%20400a4.5%204.5%200%201%201%209%200a4.5%204.5%200%201%201%20-9%200ZM680.4%20362.8a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M740.7%20308.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M596.4%20317.7a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M568.4%20269.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M648.8%20149a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M571.3%20173.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M506.9%20136.7a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M489.7%2057.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M425.9%20186.8a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M369.7%20186.8a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M305.9%2057.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M288.7%20136.7a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M224.3%20173.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M146.8%20149a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M227.2%20269.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M199.2%20317.7a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M54.9%20308.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M115.2%20362.8a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M115.2%20437.2a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M54.9%20491.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M199.2%20482.3a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M227.2%20530.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M146.8%20651a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M224.3%20626.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M288.7%20663.3a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M305.9%20742.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M369.7%20613.2a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M425.9%20613.2a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M489.7%20742.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M506.9%20663.3a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M571.3%20626.1a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M648.8%20651a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M568.4%20530.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M596.4%20482.3a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M740.7%20491.9a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200M680.4%20437.2a2.2%202.2%200%201%200%204.4%200a2.2%202.2%200%201%200-4.4%200%27%2F%3E%3C%2Fsvg%3E");
}
/* Nuit (sombre) : le thème par défaut, TOUJOURS, quel que soit le réglage du système. Le clair ne s'applique que si le
   visiteur l'a choisi (data-theme="light", posé par le script de head.php d'après localStorage). */
:root:not([data-theme="light"]) {
  color-scheme: dark;
  --bg: #0a110f;
  --surface: #0f1815;
  --card: #111d19;
  --tint: rgba(47, 143, 109, .18);
  --band: rgba(47, 143, 109, .07);
  --top-bg: rgba(10, 17, 15, .48);
  --overlay: rgba(3, 7, 6, .78);
  --text: #ece7db;
  --muted: #9a9686;
  --line: rgba(236, 231, 219, .12);
  --brass: #c9a45c;
  --brass-line: rgba(201, 164, 92, .38);
  --brass-ink: #d3b06a;
  --on-brass: #14110a;
  --track: rgba(236, 231, 219, .09);
  --err-ink: #d5544f;
  --r1: #8d939c; --r2: #3fae86; --r3: #5b93d6; --r4: #9b7bd0; --r5: #d9ae4a; --r6: #d5544f; --r7: #c78fc0;
}

.r1 { --rc: var(--r1); } .r2 { --rc: var(--r2); } .r3 { --rc: var(--r3); } .r4 { --rc: var(--r4); }
.r5 { --rc: var(--r5); } .r6 { --rc: var(--r6); } .r7 { --rc: var(--r7); }

/* ---------- Angles en gradins (deux marches de --s) ---------- */
.btn, .acct-pill, .rc-btn, .sel-bar::before, .sel-bar::after, .card-face, .card-face::before, .fa .card-img, .card.r5::after, .card.r6::after, .card.r7::before {
  clip-path: polygon(
    0 calc(var(--s) * 2), var(--s) calc(var(--s) * 2), var(--s) var(--s), calc(var(--s) * 2) var(--s), calc(var(--s) * 2) 0,
    calc(100% - var(--s) * 2) 0, calc(100% - var(--s) * 2) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(var(--s) * 2), 100% calc(var(--s) * 2),
    100% calc(100% - var(--s) * 2), calc(100% - var(--s)) calc(100% - var(--s) * 2), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - var(--s) * 2) calc(100% - var(--s)), calc(100% - var(--s) * 2) 100%,
    calc(var(--s) * 2) 100%, calc(var(--s) * 2) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - var(--s) * 2), 0 calc(100% - var(--s) * 2));
}

/* ---------- Base ---------- */
* { box-sizing: border-box; }
/* overflow-x: clip sur <html> : c'est lui (et non plus <body>) qui est reporté sur la fenêtre, si bien que celui de <body>
   rogne vraiment son contenu (les décors qui dépassent, comme la roue de l'accueil) : aucun défilement horizontal, même sur iOS.
   scroll-padding-top : une ancre (index.php#open-pack…) ne passe pas sous l'en-tête collant (76 px). */
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; scroll-padding-top: 88px; overflow-x: clip; }
body {
  margin: 0; overflow-x: clip; background: radial-gradient(75% 100% at 50% 0, var(--tint), transparent) center top / 100% 900px no-repeat, var(--bg); color: var(--text);
  font: 400 16px/1.6 var(--font); -webkit-font-smoothing: antialiased; font-variant-numeric: lining-nums;
}
a { color: inherit; text-decoration-color: var(--brass-line); text-underline-offset: 4px; }
a:hover { text-decoration-color: var(--brass); }
:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
/* env(safe-area-inset-*) : encoches des iPhone en paysage (viewport-fit=cover dans head.php), 0 ailleurs */
.wrap { width: min(var(--max), 100% - clamp(40px, 8vw, 160px) - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px)); margin-inline: auto; }

/* Filet orné : ——— ◆ ——— */
.rule { display: flex; align-items: center; gap: 14px; color: var(--brass); }
.rule::before, .rule::after { content: ""; flex: 1; height: 1px; background: linear-gradient(90deg, transparent, var(--brass-line)); }
.rule::after { transform: scaleX(-1); }
.rule i { width: 7px; height: 7px; rotate: 45deg; border: 1px solid currentColor; flex: none; }

/* ---------- En-tête : marque au centre, axe de symétrie ---------- */
.top { position: sticky; top: 0; z-index: 50; border-bottom: 1px solid var(--brass-line); background: var(--top-bg); -webkit-backdrop-filter: blur(14px) saturate(1.15); backdrop-filter: blur(14px) saturate(1.15); }
.top::after { content: ""; position: absolute; inset: auto 0 -5px; height: 1px; background: var(--line); }
.top-in { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; height: 76px; }
.top-nav { grid-column: 2; display: flex; gap: clamp(20px, 2.4vw, 36px); }
/* Menu du haut : chaque lien a la largeur de son nom, et c'est l'espace entre les noms (.top-nav gap) qui est régulier. */
.top-nav .nav-link::after { left: 0; right: 0; }
/* Lien de navigation : icône au-dessus, libellé en dessous (repris à l'identique dans la barre mobile .bottom-nav). */
.nav-link { position: relative; display: inline-flex; flex-direction: column; align-items: center; gap: 6px; padding: 6px 2px 10px; font-size: 11px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; text-decoration: none; color: var(--muted); transition: color .4s ease; }
.nav-link .ic { width: 20px; height: 20px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; transition: stroke .4s ease; }
.nav-link::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: var(--brass); opacity: 0; transition: opacity .4s ease; }
.nav-link:hover, .nav-link:focus-visible { color: var(--text); }
.nav-link:hover::after, .nav-link:focus-visible::after { opacity: 1; }
.top-end { grid-column: 3; display: flex; justify-content: flex-end; align-items: center; gap: 14px; }
.brand { grid-column: 1; justify-self: start; display: inline-flex; align-items: center; gap: 14px; font-weight: 500; font-size: 19px; letter-spacing: .3em; text-transform: uppercase; text-decoration: none; }
.brand b { font-weight: 300; }
.brand .mark { margin: 0 3px 0 5px; }
.mark { position: relative; display: inline-block; width: 22px; height: 22px; rotate: 45deg; border: 1px solid var(--brass); flex: none; }
.mark::before { content: ""; position: absolute; inset: 4px; border: 1px solid var(--brass); }
.mark::after { content: ""; position: absolute; inset: 9px; background: var(--brass); }
/* Losange (pas un carré) comme le reste des accents du thème (.mark, .dm…) : le bouton entier tourne à 45°, l'icône tourne
   en sens inverse pour rester bien droite. */
.theme { transition: color .3s ease, box-shadow .3s ease; appearance: none; width: 30px; height: 30px; display: grid; place-items: center; border: 0; --edge: 1.84px; box-shadow: inset 0 0 0 var(--edge) var(--line); background: none; color: var(--brass-ink); cursor: var(--cur-hand); rotate: 45deg; padding: 0; }
/* Contour de même épaisseur que le trait des icônes (1,84 px à l'écran) : un vrai border serait arrondi au pixel entier (1 px), pas une ombre interne */
.theme svg { width: 15px; height: 15px; rotate: -45deg; fill: none; stroke: currentColor; stroke-width: 2.94; stroke-linecap: round; stroke-linejoin: round; }
.theme .moon { display: none; }
/* Le croissant est centré sur sa boîte (bbox) mais sa masse (centre de gravité à 1,84 unité en bas à gauche) paraît décalée : on le rapproche du centre visuel */
.theme .moon path { translate: 1.2px -1.2px; }
:root:not([data-theme="light"]) .theme .sun { display: none; }
:root:not([data-theme="light"]) .theme .moon { display: block; }

/* ---------- Introduction : l'éventail pend du filet d'en-tête ---------- */
.hero { position: relative; isolation: isolate; text-align: center; padding: clamp(64px, 10vw, 118px) 0 clamp(52px, 7vw, 76px); }
.hero::before, .opener::before, .jxp-page::before {
  content: ""; position: absolute; z-index: -1; top: 0; left: 50%; width: min(1100px, 130%); aspect-ratio: 1 / 1;
  translate: -50% -50%; /* le centre de la roue est épinglé au filet d'en-tête : elle tourne sur elle-même sans se déplacer, à moitié cachée derrière l'en-tête */
  background: radial-gradient(circle, var(--brass), transparent 72%); opacity: .22;
  -webkit-mask: var(--wheel) center / 100% 100% no-repeat; mask: var(--wheel) center / 100% 100% no-repeat;
  animation: fan-spin 140s linear infinite;
}
@keyframes fan-spin { to { rotate: 360deg; } }
/* La moitié haute de la roue (au-dessus du filet d'en-tête) est coupée : l'en-tête translucide ne la laisse plus deviner. Les marges négatives laissent
   déborder tout le reste (côtés, bas : cartes qui sortent du paquet…) ; seul ce qui dépasse AU-DESSUS de la section est rogné. */
.hero, .opener, .jxp-page { clip-path: inset(0 -100vw -100vh -100vw); }
.jxp-page { position: relative; isolation: isolate; }   /* pages « Jeux » et « Atelier » : la même roue que « Paquets », épinglée au filet d'en-tête */
h1 { margin: 0 auto 22px; font-size: clamp(30px, 5.2vw, 64px); line-height: 1.16; letter-spacing: -.005em; font-weight: 300; }
h1 .ln { display: block; white-space: nowrap; }

/* Les deux mots en capitales s'échangent : chaque lettre se retourne comme une carte (voir le script en bas de page).
   Le mot entrant est d'abord ivoire, puis se pose en laiton ; la largeur de l'emplacement glisse d'un mot à l'autre. */
.slot { position: relative; display: inline-block; vertical-align: baseline; perspective: 700px; text-align: center; font-weight: 500; letter-spacing: .06em; color: var(--brass-ink); transition: width .75s var(--ease); }
.word { display: inline-block; white-space: nowrap; }
.word.probe { position: absolute; left: 0; top: 0; visibility: hidden; pointer-events: none; }
.ch { display: inline-block; transform-origin: 50% 58%; will-change: transform, opacity; }
.word.out .ch { animation: ch-out .4s cubic-bezier(.5, 0, .75, 0) both; animation-delay: calc(var(--i) * var(--st, 32ms)); }
.word.in .ch { animation: ch-in .6s var(--ease) both; animation-delay: calc(var(--i) * var(--st, 32ms)); }
@keyframes ch-out { to { transform: rotateX(-90deg) translateY(-.16em); opacity: 0; } }
@keyframes ch-in { from { transform: rotateX(90deg) translateY(.16em); opacity: 0; color: var(--text); } 60% { color: var(--text); } to { transform: none; opacity: 1; color: var(--brass-ink); } }
@media (max-width: 620px) {
  /* petit écran : quatre lignes, les deux mots en capitales sur leur propre ligne */
  h1 .ln { white-space: normal; }
  .slot { display: block; width: auto !important; }
}
.eyebrow::before, .eyebrow::after { content: ""; width: 44px; height: 1px; background: var(--brass-line); }
.eyebrow { display: inline-flex; align-items: center; gap: 14px; margin: 0 0 28px; color: var(--brass-ink); font-size: 12.5px; font-weight: 500; letter-spacing: .32em; text-transform: uppercase; }
.lead { margin: 0 auto 38px; max-width: 50ch; font-size: clamp(17px, 2vw, 20px); color: var(--muted); text-wrap: pretty; }
.cta { --cta-gap: 14px; display: flex; flex-direction: column; align-items: center; gap: var(--cta-gap); }
.hint { color: var(--muted); font-size: 14px; letter-spacing: .02em; }

/* Bouton principal : aplat laiton à angles en gradins, petits losanges de part et d'autre du texte.
   Au survol (ou au focus clavier) l'éventail se lève, le bouton s'éclaircit, et les losanges se remplissent, grossissent et s'écartent. */
.btn {
  --s: 5px; appearance: none; border: 0; position: relative; isolation: isolate; overflow: hidden; display: inline-flex; align-items: center; gap: 20px;
  padding: 17px 32px; background: var(--brass-ink); color: var(--on-brass); white-space: nowrap;
  font: 500 13.5px/1 var(--font); letter-spacing: .26em; text-transform: uppercase; text-decoration: none; cursor: var(--cur-hand); transition: filter .3s ease;   /* jamais souligné, même quand c'est un lien <a> */
}
.btn::after { content: ""; position: absolute; z-index: -1; left: 50%; bottom: -34px; width: 150%; aspect-ratio: 2 / 1; translate: -50% 12px; background: var(--on-brass); opacity: 0; -webkit-mask: var(--fan) center / 100% 100% no-repeat; mask: var(--fan) center / 100% 100% no-repeat; transition: opacity .5s ease, translate .6s var(--ease); }
.btn .dm { flex: none; width: 7px; height: 7px; border: 1px solid color-mix(in srgb, var(--on-brass) 62%, transparent); rotate: 45deg; transition: background .4s ease, border-color .4s ease, translate .45s var(--ease), scale .4s ease; }
/* (les mêmes effets au survol sont plus bas, réservés aux écrans à souris : voir « Survol ») */
.btn:focus-visible { filter: brightness(1.16); }
.btn:focus-visible::after { opacity: .36; translate: -50% 0; }
.btn:focus-visible .dm { background: var(--on-brass); border-color: var(--on-brass); scale: 1.3; }
.btn:focus-visible .dm:first-child { translate: -6px 0; }
.btn:focus-visible .dm:last-child { translate: 6px 0; }
.btn:active:not(:disabled) { filter: brightness(.95); }
.btn:disabled { opacity: .4; cursor: var(--cur-blocked); filter: none; }

/* ---------- Raretés ---------- */
.rar { padding: 84px 0 96px; text-align: center; }
h2 { margin: 0 0 12px; font-size: clamp(22px, 2.6vw, 28px); font-weight: 400; letter-spacing: .24em; text-transform: uppercase; overflow-wrap: break-word; }
.rar .rule { max-width: 340px; margin: 0 auto 26px; }
.muted { margin: 0 auto 44px; color: var(--muted); max-width: 58ch; text-wrap: pretty; }

/* ---------- Bandeaux de fonctionnalités (page d'accueil visiteur, inspirés de wiki-masters.com) ----------
   Une fonctionnalité par bandeau : un court texte d'un côté, une petite mise en scène de l'interface de l'autre (rien
   d'interactif, aria-hidden). Alternance automatique par :nth-child. */
.showcase { padding: 0 0 clamp(64px, 9vw, 108px); display: grid; gap: clamp(64px, 9vw, 100px); }
.sc-row { display: flex; align-items: center; gap: clamp(32px, 6vw, 80px); }
.sc-row:nth-child(even) { flex-direction: row-reverse; }
.sc-media, .sc-text { flex: 1 1 0; min-width: 0; }
.sc-media { display: grid; justify-items: center; gap: 14px; }
.sc-text .eyebrow { margin-bottom: 10px; }
.sc-text .eyebrow::before, .sc-text .eyebrow::after { display: none; }
.sc-text h2 { text-align: left; padding: 0; }
.sc-text p { margin: 0; color: var(--muted); text-wrap: pretty; max-width: 46ch; }

.sc-chips { display: flex; flex-wrap: wrap; gap: 8px; }
.sc-chip { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px; border: 1px solid var(--line); font-size: 12px; letter-spacing: .08em; color: var(--text); }
.sc-chip i { width: 7px; height: 7px; rotate: 45deg; background: var(--rc); flex: none; }
.sc-chip.r7 i { background: conic-gradient(from 20deg, #e58fb0, #e9c26f, #7fd6a8, #7fb6ec, #b791ef, #e58fb0); }
.sc-tags { display: flex; flex-wrap: wrap; gap: 8px; }
.sc-tag { padding: 5px 11px; font-size: 11.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--brass-ink); border: 1px solid var(--brass-line); }
.sc-tag--sub { opacity: .7; }


.sc-av { flex: none; width: 64px; height: 64px; border-radius: 50%; overflow: hidden; border: 2px solid var(--brass-line); }
.sc-av img { display: block; width: 100%; height: 100%; object-fit: cover; }
.sc-vs { flex: none; display: grid; place-items: center; width: 34px; height: 34px; color: var(--brass); }
.sc-vs svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }

.sc-av--sm { width: 44px; height: 44px; margin-left: -14px; }
.sc-av--sm:first-child { margin-left: 0; }
.sc-bell { position: relative; flex: none; display: grid; place-items: center; width: 44px; height: 44px; margin-left: 10px; color: var(--brass-ink); border: 1px solid var(--brass-line); border-radius: 50%; }
.sc-bell svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.sc-bell-dot { position: absolute; top: 6px; right: 7px; width: 8px; height: 8px; border-radius: 50%; background: #d9483f; box-shadow: 0 0 0 2px var(--surface); }


@media (max-width: 760px) {
  .sc-row, .sc-row:nth-child(even) { flex-direction: column; text-align: center; }
  .sc-text h2 { text-align: center; }
  .sc-text p { margin-inline: auto; }
}

/* ---------- Pied de page ---------- */
/* Pied de page (proposition A) : pas de bandeau de fond ; un filet dégradé avec son losange CENTRÉ dessus, une ligne de liens séparés par de
   petits losanges, puis une ligne minuscule. Sur mobile, la source passe sur sa propre ligne au-dessus du © (voir src/partials/footer.php). */
.foot { --foot-ink: color-mix(in srgb, var(--muted) 62%, var(--bg)); position: relative; margin-top: clamp(40px, 6vw, 72px);   /* toujours de l'air au-dessus du pied de page */ padding: 18px 0 14px; color: var(--foot-ink); font-size: 11.5px; line-height: 1.6; letter-spacing: .03em; text-align: center; }
:root[data-theme="light"] .foot { --foot-ink: color-mix(in srgb, var(--muted) 85%, var(--bg)); }
.foot::before { content: ""; position: absolute; left: 12%; right: 12%; top: 0; height: 1px; background: linear-gradient(90deg, transparent, var(--brass-line), transparent); }
.foot::after { content: ""; position: absolute; left: 50%; top: .5px; width: 7px; height: 7px; translate: -50% -50%; rotate: 45deg; border: 1px solid var(--brass); background: var(--bg); }
.foot .wrap { width: min(1200px, 100% - 24px); }
.foot p { margin: 0 auto; text-wrap: balance; }
.foot a { text-decoration-color: color-mix(in srgb, var(--brass) 45%, transparent); text-underline-offset: 3px; }
.foot a:hover { color: var(--muted); }
.foot-links { margin-bottom: 6px; color: var(--muted); font-size: 12px; }
.foot-links > * { display: inline-block; padding: 2px 0; }
.foot-links > * + *::before { content: ""; display: inline-block; width: 5px; height: 5px; margin: 0 12px 1px; rotate: 45deg; background: var(--brass); opacity: .7; }
.foot-links a { text-decoration: none; }
.foot-logo { display: inline-flex; align-items: center; vertical-align: middle; translate: 0 -.05em; margin-right: -.33em; }   /* l’espace entre deux liens ajoute ~4 px entre le logo et le losange de DROITE (celui de gauche est dans le lien) : on la reprend, pour que le logo soit centré entre ses deux losanges */   /* centré sur la hauteur du texte voisin (le milieu de la ligne est à ~0,6 px au-dessus du milieu de l’inline-flex) */
.foot-ico { display: block; width: 18px; height: 18px; }   /* les logos Discord et Instagram, à la place du mot (pied de page) */
.foot-links a:hover, .foot-link:hover { color: var(--text); }
.foot-link { appearance: none; border: 0; background: none; padding: 0; color: inherit; font: inherit; letter-spacing: inherit; cursor: var(--cur-hand); }
.foot-link:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
.foot-short { display: none; }
@media (max-width: 760px) { .foot { font-size: 10.5px; padding: 16px 0 12px; } .foot .foot-long { display: none; } .foot .foot-short { display: block; } }
/* ---------- Paquet : cinq cartes ---------- */
.pack { padding: 8px 0 76px; }
.cards { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: clamp(14px, 1.8vw, 28px); }
.pack-note { margin: 30px 0 0; text-align: center; color: var(--muted); font-size: 14px; }
.pack-note a { color: var(--brass-ink); }

.card { position: relative; aspect-ratio: 5 / 7; min-width: 0; container-type: inline-size; perspective: 1100px; transition: translate .3s var(--ease); }
.card-in { position: absolute; inset: 0; transform-style: preserve-3d; transition: transform .8s var(--ease); }
.card.flipped .card-in { transform: rotateY(180deg); }

/* Une face = un cadre d'un pixel (le fond) + une surface intérieure (::before), toutes deux à angles en gradins */
.card-face {
  --s: 3.4cqw; position: absolute; inset: 0; overflow: hidden; isolation: isolate; background: var(--fr, var(--brass-line));
  -webkit-backface-visibility: hidden; backface-visibility: hidden;
}
.card-face::before { content: ""; position: absolute; inset: 1px; z-index: -1; background: var(--card); }
/* Filets intérieurs : même contour à gradins que le cadre, rentré de --d1 (et --d2), épais de --t1 (et --t2).
   Chaque anneau est découpé dans un seul polygone. Le nombre et l'épaisseur des filets montent avec la rareté. */
.card-face::after { content: ""; position: absolute; inset: 0; pointer-events: none; }
.card-back::after, .card.r3 .card-front::after {
  clip-path: polygon(
    calc(var(--d1)) calc((var(--d1) + (var(--s) * 2))),
    calc((var(--d1) + var(--s))) calc((var(--d1) + (var(--s) * 2))),
    calc((var(--d1) + var(--s))) calc((var(--d1) + var(--s))),
    calc((var(--d1) + (var(--s) * 2))) calc((var(--d1) + var(--s))),
    calc((var(--d1) + (var(--s) * 2))) calc(var(--d1)),
    calc(((100% - var(--d1)) - (var(--s) * 2))) calc(var(--d1)),
    calc(((100% - var(--d1)) - (var(--s) * 2))) calc((var(--d1) + var(--s))),
    calc(((100% - var(--d1)) - var(--s))) calc((var(--d1) + var(--s))),
    calc(((100% - var(--d1)) - var(--s))) calc((var(--d1) + (var(--s) * 2))),
    calc((100% - var(--d1))) calc((var(--d1) + (var(--s) * 2))),
    calc((100% - var(--d1))) calc(((100% - var(--d1)) - (var(--s) * 2))),
    calc(((100% - var(--d1)) - var(--s))) calc(((100% - var(--d1)) - (var(--s) * 2))),
    calc(((100% - var(--d1)) - var(--s))) calc(((100% - var(--d1)) - var(--s))),
    calc(((100% - var(--d1)) - (var(--s) * 2))) calc(((100% - var(--d1)) - var(--s))),
    calc(((100% - var(--d1)) - (var(--s) * 2))) calc((100% - var(--d1))),
    calc((var(--d1) + (var(--s) * 2))) calc((100% - var(--d1))),
    calc((var(--d1) + (var(--s) * 2))) calc(((100% - var(--d1)) - var(--s))),
    calc((var(--d1) + var(--s))) calc(((100% - var(--d1)) - var(--s))),
    calc((var(--d1) + var(--s))) calc(((100% - var(--d1)) - (var(--s) * 2))),
    calc(var(--d1)) calc(((100% - var(--d1)) - (var(--s) * 2))),
    calc(var(--d1)) calc((var(--d1) + (var(--s) * 2))),
    calc((var(--d1) + var(--t1))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc(((var(--d1) + var(--t1)) + var(--s))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc(((var(--d1) + var(--t1)) + var(--s))) calc(((100% - (var(--d1) + var(--t1))) - var(--s))),
    calc(((var(--d1) + var(--t1)) + (var(--s) * 2))) calc(((100% - (var(--d1) + var(--t1))) - var(--s))),
    calc(((var(--d1) + var(--t1)) + (var(--s) * 2))) calc((100% - (var(--d1) + var(--t1)))),
    calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))) calc((100% - (var(--d1) + var(--t1)))),
    calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))) calc(((100% - (var(--d1) + var(--t1))) - var(--s))),
    calc(((100% - (var(--d1) + var(--t1))) - var(--s))) calc(((100% - (var(--d1) + var(--t1))) - var(--s))),
    calc(((100% - (var(--d1) + var(--t1))) - var(--s))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc((100% - (var(--d1) + var(--t1)))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc((100% - (var(--d1) + var(--t1)))) calc(((var(--d1) + var(--t1)) + (var(--s) * 2))),
    calc(((100% - (var(--d1) + var(--t1))) - var(--s))) calc(((var(--d1) + var(--t1)) + (var(--s) * 2))),
    calc(((100% - (var(--d1) + var(--t1))) - var(--s))) calc(((var(--d1) + var(--t1)) + var(--s))),
    calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))) calc(((var(--d1) + var(--t1)) + var(--s))),
    calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))) calc((var(--d1) + var(--t1))),
    calc(((var(--d1) + var(--t1)) + (var(--s) * 2))) calc((var(--d1) + var(--t1))),
    calc(((var(--d1) + var(--t1)) + (var(--s) * 2))) calc(((var(--d1) + var(--t1)) + var(--s))),
    calc(((var(--d1) + var(--t1)) + var(--s))) calc(((var(--d1) + var(--t1)) + var(--s))),
    calc(((var(--d1) + var(--t1)) + var(--s))) calc(((var(--d1) + var(--t1)) + (var(--s) * 2))),
    calc((var(--d1) + var(--t1))) calc(((var(--d1) + var(--t1)) + (var(--s) * 2))),
    calc((var(--d1) + var(--t1))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc(var(--d1)) calc((var(--d1) + (var(--s) * 2))));
}
.card.r4 .card-front::after, .card.r5 .card-front::after, .card.r6 .card-front::after, .card.r7 .card-front::after {
  clip-path: polygon(
    calc(var(--d1)) calc((var(--d1) + (var(--s) * 2))),
    calc((var(--d1) + var(--s))) calc((var(--d1) + (var(--s) * 2))),
    calc((var(--d1) + var(--s))) calc((var(--d1) + var(--s))),
    calc((var(--d1) + (var(--s) * 2))) calc((var(--d1) + var(--s))),
    calc((var(--d1) + (var(--s) * 2))) calc(var(--d1)),
    calc(((100% - var(--d1)) - (var(--s) * 2))) calc(var(--d1)),
    calc(((100% - var(--d1)) - (var(--s) * 2))) calc((var(--d1) + var(--s))),
    calc(((100% - var(--d1)) - var(--s))) calc((var(--d1) + var(--s))),
    calc(((100% - var(--d1)) - var(--s))) calc((var(--d1) + (var(--s) * 2))),
    calc((100% - var(--d1))) calc((var(--d1) + (var(--s) * 2))),
    calc((100% - var(--d1))) calc(((100% - var(--d1)) - (var(--s) * 2))),
    calc(((100% - var(--d1)) - var(--s))) calc(((100% - var(--d1)) - (var(--s) * 2))),
    calc(((100% - var(--d1)) - var(--s))) calc(((100% - var(--d1)) - var(--s))),
    calc(((100% - var(--d1)) - (var(--s) * 2))) calc(((100% - var(--d1)) - var(--s))),
    calc(((100% - var(--d1)) - (var(--s) * 2))) calc((100% - var(--d1))),
    calc((var(--d1) + (var(--s) * 2))) calc((100% - var(--d1))),
    calc((var(--d1) + (var(--s) * 2))) calc(((100% - var(--d1)) - var(--s))),
    calc((var(--d1) + var(--s))) calc(((100% - var(--d1)) - var(--s))),
    calc((var(--d1) + var(--s))) calc(((100% - var(--d1)) - (var(--s) * 2))),
    calc(var(--d1)) calc(((100% - var(--d1)) - (var(--s) * 2))),
    calc(var(--d1)) calc((var(--d1) + (var(--s) * 2))),
    calc((var(--d1) + var(--t1))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc(((var(--d1) + var(--t1)) + var(--s))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc(((var(--d1) + var(--t1)) + var(--s))) calc(((100% - (var(--d1) + var(--t1))) - var(--s))),
    calc(((var(--d1) + var(--t1)) + (var(--s) * 2))) calc(((100% - (var(--d1) + var(--t1))) - var(--s))),
    calc(((var(--d1) + var(--t1)) + (var(--s) * 2))) calc((100% - (var(--d1) + var(--t1)))),
    calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))) calc((100% - (var(--d1) + var(--t1)))),
    calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))) calc(((100% - (var(--d1) + var(--t1))) - var(--s))),
    calc(((100% - (var(--d1) + var(--t1))) - var(--s))) calc(((100% - (var(--d1) + var(--t1))) - var(--s))),
    calc(((100% - (var(--d1) + var(--t1))) - var(--s))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc((100% - (var(--d1) + var(--t1)))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc((100% - (var(--d1) + var(--t1)))) calc(((var(--d1) + var(--t1)) + (var(--s) * 2))),
    calc(((100% - (var(--d1) + var(--t1))) - var(--s))) calc(((var(--d1) + var(--t1)) + (var(--s) * 2))),
    calc(((100% - (var(--d1) + var(--t1))) - var(--s))) calc(((var(--d1) + var(--t1)) + var(--s))),
    calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))) calc(((var(--d1) + var(--t1)) + var(--s))),
    calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))) calc((var(--d1) + var(--t1))),
    calc(((var(--d1) + var(--t1)) + (var(--s) * 2))) calc((var(--d1) + var(--t1))),
    calc(((var(--d1) + var(--t1)) + (var(--s) * 2))) calc(((var(--d1) + var(--t1)) + var(--s))),
    calc(((var(--d1) + var(--t1)) + var(--s))) calc(((var(--d1) + var(--t1)) + var(--s))),
    calc(((var(--d1) + var(--t1)) + var(--s))) calc(((var(--d1) + var(--t1)) + (var(--s) * 2))),
    calc((var(--d1) + var(--t1))) calc(((var(--d1) + var(--t1)) + (var(--s) * 2))),
    calc((var(--d1) + var(--t1))) calc(((100% - (var(--d1) + var(--t1))) - (var(--s) * 2))),
    calc(var(--d1)) calc((var(--d1) + (var(--s) * 2))),
    calc(var(--d2)) calc((var(--d2) + (var(--s) * 2))),
    calc((var(--d2) + var(--s))) calc((var(--d2) + (var(--s) * 2))),
    calc((var(--d2) + var(--s))) calc((var(--d2) + var(--s))),
    calc((var(--d2) + (var(--s) * 2))) calc((var(--d2) + var(--s))),
    calc((var(--d2) + (var(--s) * 2))) calc(var(--d2)),
    calc(((100% - var(--d2)) - (var(--s) * 2))) calc(var(--d2)),
    calc(((100% - var(--d2)) - (var(--s) * 2))) calc((var(--d2) + var(--s))),
    calc(((100% - var(--d2)) - var(--s))) calc((var(--d2) + var(--s))),
    calc(((100% - var(--d2)) - var(--s))) calc((var(--d2) + (var(--s) * 2))),
    calc((100% - var(--d2))) calc((var(--d2) + (var(--s) * 2))),
    calc((100% - var(--d2))) calc(((100% - var(--d2)) - (var(--s) * 2))),
    calc(((100% - var(--d2)) - var(--s))) calc(((100% - var(--d2)) - (var(--s) * 2))),
    calc(((100% - var(--d2)) - var(--s))) calc(((100% - var(--d2)) - var(--s))),
    calc(((100% - var(--d2)) - (var(--s) * 2))) calc(((100% - var(--d2)) - var(--s))),
    calc(((100% - var(--d2)) - (var(--s) * 2))) calc((100% - var(--d2))),
    calc((var(--d2) + (var(--s) * 2))) calc((100% - var(--d2))),
    calc((var(--d2) + (var(--s) * 2))) calc(((100% - var(--d2)) - var(--s))),
    calc((var(--d2) + var(--s))) calc(((100% - var(--d2)) - var(--s))),
    calc((var(--d2) + var(--s))) calc(((100% - var(--d2)) - (var(--s) * 2))),
    calc(var(--d2)) calc(((100% - var(--d2)) - (var(--s) * 2))),
    calc(var(--d2)) calc((var(--d2) + (var(--s) * 2))),
    calc((var(--d2) + var(--t2))) calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))),
    calc(((var(--d2) + var(--t2)) + var(--s))) calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))),
    calc(((var(--d2) + var(--t2)) + var(--s))) calc(((100% - (var(--d2) + var(--t2))) - var(--s))),
    calc(((var(--d2) + var(--t2)) + (var(--s) * 2))) calc(((100% - (var(--d2) + var(--t2))) - var(--s))),
    calc(((var(--d2) + var(--t2)) + (var(--s) * 2))) calc((100% - (var(--d2) + var(--t2)))),
    calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))) calc((100% - (var(--d2) + var(--t2)))),
    calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))) calc(((100% - (var(--d2) + var(--t2))) - var(--s))),
    calc(((100% - (var(--d2) + var(--t2))) - var(--s))) calc(((100% - (var(--d2) + var(--t2))) - var(--s))),
    calc(((100% - (var(--d2) + var(--t2))) - var(--s))) calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))),
    calc((100% - (var(--d2) + var(--t2)))) calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))),
    calc((100% - (var(--d2) + var(--t2)))) calc(((var(--d2) + var(--t2)) + (var(--s) * 2))),
    calc(((100% - (var(--d2) + var(--t2))) - var(--s))) calc(((var(--d2) + var(--t2)) + (var(--s) * 2))),
    calc(((100% - (var(--d2) + var(--t2))) - var(--s))) calc(((var(--d2) + var(--t2)) + var(--s))),
    calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))) calc(((var(--d2) + var(--t2)) + var(--s))),
    calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))) calc((var(--d2) + var(--t2))),
    calc(((var(--d2) + var(--t2)) + (var(--s) * 2))) calc((var(--d2) + var(--t2))),
    calc(((var(--d2) + var(--t2)) + (var(--s) * 2))) calc(((var(--d2) + var(--t2)) + var(--s))),
    calc(((var(--d2) + var(--t2)) + var(--s))) calc(((var(--d2) + var(--t2)) + var(--s))),
    calc(((var(--d2) + var(--t2)) + var(--s))) calc(((var(--d2) + var(--t2)) + (var(--s) * 2))),
    calc((var(--d2) + var(--t2))) calc(((var(--d2) + var(--t2)) + (var(--s) * 2))),
    calc((var(--d2) + var(--t2))) calc(((100% - (var(--d2) + var(--t2))) - (var(--s) * 2))),
    calc(var(--d2)) calc((var(--d2) + (var(--s) * 2))));
}

/* Dos : l'éventail monte du bas, un losange au centre */
.card-back { display: grid; place-items: center; }
.card-back::before { background: radial-gradient(120% 90% at 50% 100%, color-mix(in srgb, var(--brass) 9%, var(--card)), var(--card) 70%); }
.card-back::after { --d1: 3.6cqw; --t1: 1px; background: var(--brass-line); }
/* L'éventail mesure 150 % × 75 % de la carte ; la boîte, elle, s'arrête aux bords de la carte (le masque, plus large qu'elle et
   centré, garde le même dessin) : la partie qui dépassait, rognée de toute façon, n'élargit plus la page sur mobile. */
.card-back .fan { position: absolute; left: 0; right: 0; bottom: 3.6cqw; aspect-ratio: 4 / 3; background: var(--brass); opacity: .5; -webkit-mask: var(--fan) center / 150% 100% no-repeat; mask: var(--fan) center / 150% 100% no-repeat; }
/* Logo au dos : la marque, puis Wiki au-dessus de Collect */
.card-back .logo { position: absolute; left: 50%; top: 23cqw; translate: -50% 0; z-index: 1; display: grid; justify-items: center; font-size: 7.5cqw; line-height: 1.22; letter-spacing: .3em; text-transform: uppercase; color: var(--text); }
.card-back .logo > span, .card-back .logo > b { padding-left: .3em; }
.card-back .logo > span { font-weight: 500; }
.card-back .logo > b { font-weight: 300; }
.card-back .logo .mark { width: 6.7cqw; height: 6.7cqw; margin: 1.6cqw 0 5.2cqw; }
.card-back .logo .mark::before { inset: 1.4cqw; }
.card-back .logo .mark::after { inset: 3cqw; }

/* Face : cadre de la couleur du joyau, image, losange de rareté à cheval, texte centré */
.card-front { transform: rotateY(180deg); display: flex; flex-direction: column; padding: var(--p); color: var(--text); text-decoration: none; --fr: color-mix(in srgb, var(--rc) 78%, var(--card)); }
/* Traits : --u est l'unité (1 px, qui grandit avec la carte) ; le passe-partout --p est le même pour toutes les raretés (il loge les filets de l'Ultime), donc l'image a toujours la même taille */
.card-front { --u: max(1px, .4cqw); --f: var(--u); --ga: 1cqw; --gb: .8cqw; --gi: 1cqw; --t1: var(--u); --t2: var(--u); --d1: calc(var(--f) + var(--ga)); --d2: calc(var(--d1) + var(--t1) + var(--gb)); --p: calc(var(--u) * 7 + var(--ga) + var(--gb) + var(--gi)); }
.card.r5 .card-front, .card.r6 .card-front { --f: calc(var(--u) * 2); --t1: calc(var(--u) * 2); }
.card.r7 .card-front { --f: calc(var(--u) * 3); --t1: calc(var(--u) * 2); --t2: calc(var(--u) * 2); }
.card.r3 .card-front::after { background: color-mix(in srgb, var(--rc) 55%, transparent); }
.card.r4 .card-front::after { background: color-mix(in srgb, var(--rc) 60%, transparent); }
.card-front { --bg-top: color-mix(in srgb, var(--rc) 11%, var(--card)); --bg-bot: color-mix(in srgb, var(--rc) 34%, var(--card)); }
.card-front::before { inset: var(--f); background: linear-gradient(180deg, var(--bg-top) 52%, var(--bg-bot)); }
.card-img { position: relative; flex: 0 0 56%; background: var(--track); overflow: hidden; clip-path: polygon(0 calc(var(--s) * 2), var(--s) calc(var(--s) * 2), var(--s) var(--s), calc(var(--s) * 2) var(--s), calc(var(--s) * 2) 0, calc(100% - var(--s) * 2) 0, calc(100% - var(--s) * 2) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(var(--s) * 2), 100% calc(var(--s) * 2), 100% 100%, 0 100%); }
.card-img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease); }
/* Image au format portrait (posée par site.js) : alignée sur le bord du haut, c'est le bas qui est rogné */
.card-front:not(.fa) .card-img img.portrait { object-position: 50% 0; transform-origin: 50% 0; }
/* Carte sans illustration (ou dont l'image ne charge pas) : le logo complet (marque, puis Wiki au-dessus de Collect)
   sur un éventail très discret, comme au dos des cartes, dans la couleur de rareté un peu transparente. */
.card-img:has(.ph)::before { content: ""; position: absolute; left: 50%; bottom: 0; width: 130%; aspect-ratio: 2 / 1; translate: -50% 0; background: var(--rc); opacity: .22; -webkit-mask: var(--fan) center / 100% 100% no-repeat; mask: var(--fan) center / 100% 100% no-repeat; }
.card-img .ph { --ph: color-mix(in srgb, var(--rc) 60%, transparent); position: absolute; inset: 0; display: grid; place-items: center; }
.ph .logo { display: grid; justify-items: center; font-size: 7.5cqw; line-height: 1.22; letter-spacing: .3em; text-transform: uppercase; color: var(--ph); }
.ph .logo > span, .ph .logo > b { padding-left: .3em; }
.ph .logo > span { font-weight: 500; }
.ph .logo > b { font-weight: 300; }
.ph .logo .mark { width: 6.7cqw; height: 6.7cqw; margin: 1.6cqw 0 5.2cqw; border-color: var(--ph); }
.ph .logo .mark::before { inset: 1.4cqw; border-color: var(--ph); }
.ph .logo .mark::after { inset: 3cqw; background: var(--ph); }

.card-body { position: relative; flex: 1; min-height: 0; display: flex; flex-direction: column; align-items: center; justify-content: space-between; gap: 1.5cqw; padding: 7.4cqw 1.5cqw .8cqw; text-align: center; }
.card-body::before { content: ""; position: absolute; left: 50%; top: 0; width: 6.4cqw; height: 6.4cqw; translate: -50% -50%; rotate: 45deg; background: var(--rc); box-shadow: 0 0 0 1.1cqw var(--bg-top), 0 0 0 calc(1.1cqw + 1px) color-mix(in srgb, var(--rc) 60%, transparent); }
.card-body h3 { margin: 0; font-size: max(13px, 7.2cqw); line-height: 1.22; font-weight: 500; letter-spacing: .01em; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; text-wrap: balance; }
.meta { display: grid; justify-items: center; gap: .6cqw; }
.tag { font-size: max(9.5px, 3.9cqw); line-height: 1.3; font-weight: 500; letter-spacing: .24em; padding-left: .24em; text-transform: uppercase; white-space: nowrap; color: color-mix(in srgb, var(--rc) 82%, var(--text)); }
/* Description : 3 lignes au plus (2 sur les cartes étroites, 1 sous 173 px, et en Extended Art quand le titre en fait 2, voir site.js), tronquée par des points de suspension ; site.js réduit un peu la police (jusqu'à -14 %) quand le texte dépasse. */
.desc { margin: 0; font-size: max(9.5px, 4.2cqw); line-height: 1.3; color: var(--muted); text-align: center; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; }
@container (max-width: 224px) { .card-body .desc { -webkit-line-clamp: 2; } }
@container (max-width: 172px) { .card-body .desc { -webkit-line-clamp: 1; } }
@container (max-width: 149px) { .card-body .desc { display: none; } }
/* Carte trop petite pour que le titre (2 lignes) et le reste tiennent proprement : on retire le nombre de vues et le style
   (Full Art / Extended Art), la rareté seule suffit. */
@container (max-width: 160px) { .card-body .vw, .card-body .tag-style { display: none; } }
.vw { display: inline-flex; align-items: center; gap: .32em; font-size: max(10px, 4.1cqw); line-height: 1.3; color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums; }
.vw::before { content: ""; flex: none; width: .95em; height: .95em; background-color: currentColor; -webkit-mask: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 12s4-7.5 11-7.5S23 12 23 12s-4 7.5-11 7.5S1 12 1 12z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E") center / contain no-repeat; mask: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M1 12s4-7.5 11-7.5S23 12 23 12s-4 7.5-11 7.5S1 12 1 12z'/%3E%3Ccircle cx='12' cy='12' r='3'/%3E%3C/svg%3E") center / contain no-repeat; translate: 0 -.05em; }

/* Raretés hautes : deuxième filet intérieur (Légendaire), puis liseré coloré (Mythique) */
.card.r5 .card-front::after { background: color-mix(in srgb, var(--rc) 65%, transparent); }
.card.r6 .card-front::after { background: color-mix(in srgb, var(--rc) 70%, transparent); }
.card.r5 .card-front, .card.r6 .card-front { --fr: var(--rc); }
/* Ultime : le cadre est irisé et tourne lentement */
@property --a { syntax: "<angle>"; inherits: false; initial-value: 0deg; }
.card.r7 .card-front { background: conic-gradient(from var(--a), #e58fb0, #e9c26f, #7fd6a8, #7fb6ec, #b791ef, #e58fb0); animation: spin 9s linear infinite; }
.card.r7 .card-front::after { background: color-mix(in srgb, var(--rc) 65%, transparent); }
.card.r7 .card-body::before { background: conic-gradient(from 20deg, #e58fb0, #e9c26f, #7fd6a8, #7fb6ec, #b791ef, #e58fb0); box-shadow: 0 0 0 1.1cqw var(--bg-top); }
@keyframes spin { to { --a: 360deg; } }

/* Effets : un reflet qui traverse la carte (Légendaire, Mythique) et un voile arc-en-ciel lent (Ultime).
   Calques posés sur la carte elle-même (::before / ::after de .card), visibles une fois la carte retournée. */
.card.r5::after, .card.r6::after, .card.r7::before {
  content: ""; position: absolute; inset: 0; --s: 3.4cqw; pointer-events: none; opacity: 0; transition: opacity 1s ease .55s;
}
.card.r5::after, .card.r6::after {
  z-index: 2;
  background: linear-gradient(115deg, transparent 18%, color-mix(in srgb, var(--shine) 22%, transparent) 30%, var(--shine) 50%, color-mix(in srgb, var(--shine) 22%, transparent) 70%, transparent 82%) 150% 0 / 300% 100% no-repeat;
  animation: sweep 10s linear infinite;
}
.card.r5 { --shine: rgba(255, 238, 178, .13); }
.card.r6 { --shine: rgba(255, 210, 200, .11); }
.card.r7::before {
  z-index: 1;
  background: linear-gradient(115deg, rgba(255, 80, 150, 0) 0%, rgba(255, 80, 150, .5) 14%, rgba(255, 205, 90, .5) 28%, rgba(90, 230, 160, .46) 42%, rgba(90, 175, 255, .5) 56%, rgba(170, 110, 255, .5) 70%, rgba(255, 80, 150, 0) 84%) 0 0 / 260% 100% no-repeat;
  animation: rainbow 10s ease-in-out infinite alternate;
}
.card.flipped.r5::after, .card.flipped.r6::after { opacity: 1; }
.card.flipped.r7::before { opacity: .42; }
/* Le reflet entre et sort entièrement de la carte (150 % → -50 %) : la boucle est invisible, il n'y a ni saut ni extinction */
@keyframes sweep { from { background-position: 150% 0; } to { background-position: -50% 0; } }
@keyframes rainbow { from { background-position: 0% 0; } to { background-position: 100% 0; } }
/* ---------- Compte : bouton dans l'en-tête (« Se connecter », « S'inscrire », « Compte »), même cadre laiton que
   l'ancienne pastille « En construction » ---------- */
.acct-pill {
  --s: 3px; appearance: none; display: inline-flex; flex-direction: column; align-items: center; gap: 5px; border: 0;
  background: color-mix(in srgb, var(--brass) 18%, transparent); color: var(--brass-ink); padding: 8px 16px;
  font: 500 11px/1 var(--font); letter-spacing: .18em; text-transform: uppercase; text-decoration: none;
  white-space: nowrap; cursor: var(--cur-hand); transition: background .3s ease, color .3s ease;
}
.acct-pill:hover, .acct-pill:focus-visible { background: color-mix(in srgb, var(--brass) 30%, transparent); }
.acct-pill .ic { width: 18px; height: 18px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
.acct-pill.icon-only { padding: 9px; }
/* Bouton « Compte » : l'avatar remplace l'icône, un peu plus grand qu'une icône simple (sans agrandir l'en-tête, qui a une
   hauteur fixe) ; même contour et même survol (couleur + transition) que .theme. */
.acct-pill.avatar-btn { padding: 6px; }
.acct-pill .avatar-ic { display: block; width: 26px; height: 26px; flex: none; border-radius: 50%; object-fit: cover; border: 2px solid var(--line); transition: border-color .3s ease; }
.acct-pill:hover .avatar-ic, .acct-pill:focus-visible .avatar-ic { border-color: var(--brass-line); }
.auth-pills { display: inline-flex; gap: 14px; }
.burger-menu { display: none; }
.acct-menu { position: relative; }
.acct-dropdown {
  position: absolute; top: calc(100% + 10px); left: 50%; translate: -50% 0; z-index: 60; min-width: 180px;
  background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--brass); padding: 6px;
}
/* Les boutons du système de boutons (.btn, .btn-tertiary…) posés dans une liste déroulante (ex. « Récupérer » d'une notification) gardent leur propre aspect */
.acct-dropdown :is(a, button):where(:not(.btn, .btn-tertiary)) {
  display: block; width: 100%; text-align: left; background: none; border: 0; padding: 11px 14px; margin: 0;
  color: var(--text); font: inherit; font-size: 13px; letter-spacing: .03em; text-decoration: none; cursor: var(--cur-hand);
}
.acct-dropdown :is(a, button):where(:not(.btn, .btn-tertiary)):is(:hover, :focus-visible) { background: var(--band); }
.acct-dropdown form { margin: 0; }
.acct-name { max-width: 240px; margin: 0 0 4px; padding: 10px 14px 12px; border-bottom: 1px solid var(--line); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; font-weight: 500; letter-spacing: .06em; color: var(--brass-ink); }

/* ---------- Barre de navigation mobile (≤760px, visible seulement connecté·e) : voir la media query plus bas ---------- */
.bottom-nav { display: none; }

/* ---------- Formulaires (inscription, connexion…) ---------- */
.auth { padding: clamp(48px, 8vw, 88px) 0 96px; }
.auth-card { max-width: 440px; margin: 0 auto; padding: clamp(28px, 5vw, 44px) clamp(24px, 5vw, 40px); background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--brass); }
.auth-card h1 { margin: 0 0 10px; font-size: clamp(20px, 2.6vw, 26px); font-weight: 400; letter-spacing: .16em; text-transform: uppercase; text-align: center; }
.auth-card .lead-sm { margin: 0 0 30px; color: var(--muted); font-size: 14px; text-align: center; text-wrap: pretty; }
.field { display: grid; gap: 8px; margin-bottom: 20px; }
.field label { font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.field input { appearance: none; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 13px 14px; font: inherit; font-size: 15px; transition: border-color .3s ease; }
.field input:focus-visible { outline: none; border-color: var(--brass); }
.field small { color: var(--muted); font-size: 12px; }
.form-msg { margin: 0 0 22px; padding: 13px 16px; font-size: 13.5px; line-height: 1.5; border-left: 2px solid; background: var(--band); }
.form-msg.error { border-color: #b8453f; }
.form-msg.error li { margin: 2px 0; }
.form-msg.ok { border-color: var(--brass); }
.form-msg.flash { max-width: 640px; margin: 24px auto 0; }
.form-msg ul { margin: 0; padding-left: 18px; }
.auth-card .btn { width: 100%; justify-content: center; margin-top: 8px; }
.auth-card + .auth-card { margin-top: 32px; }
.danger-card { border-top-color: #b8453f; }
.btn-danger { --on-brass: #fbf8f1; background: #8a3530; }   /* texte clair dans les deux thèmes (≈ 7,5:1) ; --on-brass sert aussi aux losanges et à l'éventail */

/* ---------- Choix de l'avatar (paramètres) ---------- */
.avatar-cat { margin: 0 0 10px; font-size: 12.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); }
.avatar-cat + .avatar-grid { margin-top: 0; }
.avatar-grid { display: grid; grid-template-columns: repeat(5, 1fr); gap: 10px; margin: 4px 0 24px; }
.avatar-radio { position: absolute; opacity: 0; pointer-events: none; }
.avatar-opt { display: block; line-height: 0; padding: 3px; border: 2px solid transparent; cursor: var(--cur-hand); transition: border-color .3s ease; }
.avatar-opt img { display: block; width: 100%; aspect-ratio: 1; object-fit: cover; }
.avatar-radio:checked + .avatar-opt { border-color: var(--brass); }
.avatar-radio:focus-visible + .avatar-opt { outline: 2px solid var(--brass); outline-offset: 2px; }
@media (max-width: 480px) { .avatar-grid { gap: 6px; } }
.auth-links { margin-top: 26px; text-align: center; font-size: 13px; color: var(--muted); }
.auth-links + .auth-links { margin-top: 10px; }
.auth-links a:not(.btn) { color: var(--brass-ink); }
.dev-mail { margin-top: 24px; padding: 16px 18px; background: var(--band); border: 1px dashed var(--brass-line); font-size: 13px; color: var(--muted); word-break: break-all; }
.dev-mail b { display: block; margin-bottom: 8px; color: var(--brass-ink); font-weight: 500; letter-spacing: .08em; text-transform: uppercase; font-size: 11.5px; }
.dev-mail a { color: var(--brass-ink); }

/* ---------- Collection ---------- */
.collection { padding: clamp(48px, 8vw, 88px) 0 96px; }
/* Panneau du haut : chiffres et recherche sur une ligne, puis tri et filtres sur une seconde, séparée d'un filet orné */
.coll-panel { position: relative; margin: 0 0 40px; padding: clamp(22px, 3vw, 32px) clamp(18px, 3vw, 36px); background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--brass); }
.coll-top { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 22px 40px; }
.coll-stats { display: flex; margin: 0; }
.coll-stats > div { display: flex; flex-direction: column-reverse; gap: 4px; padding: 0 clamp(18px, 3vw, 38px); border-left: 1px solid var(--line); }
.coll-stats > div:first-child { padding-left: 0; border-left: 0; }
.coll-stats dt { font-size: 11px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.coll-stats dd { margin: 0; font-size: clamp(28px, 3.2vw, 38px); font-weight: 300; line-height: 1.1; font-variant-numeric: tabular-nums; }
.coll-stats .shown dd { color: var(--brass-ink); }
.coll-search { position: relative; flex: 1 1 300px; max-width: 460px; }
.coll-search input { appearance: none; width: 100%; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 14px 92px 14px 18px; font: inherit; font-size: 15px; transition: border-color .3s ease; }
.coll-search input::placeholder { color: var(--muted); opacity: .8; }
.coll-search input::-webkit-search-cancel-button { display: none; }
.coll-search input:hover { border-color: var(--brass-line); }
.coll-search input:focus-visible { outline: none; border-color: var(--brass); }
.coll-search button { appearance: none; position: absolute; right: 4px; top: 4px; bottom: 4px; width: 42px; display: grid; place-items: center; border: 0; background: none; color: var(--muted); cursor: var(--cur-hand); transition: color .3s ease; }
.coll-search button:hover, .coll-search button:focus-visible { color: var(--brass-ink); }
.coll-search .coll-clear { right: 46px; width: 36px; }
.coll-search .coll-clear[hidden] { display: none; }
.coll-search svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; }
.sr-only { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.coll-filters { position: relative; display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end; gap: 18px 28px; margin-top: 26px; padding-top: 26px; border-top: 1px solid var(--line); }
.coll-filters::before { content: ""; position: absolute; left: 50%; top: -5px; width: 9px; height: 9px; translate: -50% 0; rotate: 45deg; background: var(--surface); border: 1px solid var(--brass); }
.cards.collection { grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 26px 20px; }
.cards .card.flipped { cursor: var(--cur-hand); }   /* une carte retournée ouvre sa fenêtre de détail (card-modal.js) */
.cards .card.flipped .card-in:focus-visible { outline: 2px solid var(--brass); outline-offset: 4px; }
[data-part="results"] .card-in { scroll-margin: 130px 0 40px; }   /* navigation au clavier (collection-keys.js) : la carte qui prend le focus reste sous l'en-tête collant et au-dessus de la barre du bas */
.coll-none { margin: 40px 0; text-align: center; color: var(--muted); }

/* Tri et filtres de la collection */
.tool { display: grid; gap: 7px; min-width: 0; }
.tool[hidden] { display: none; }   /* « Dans ma liste de souhait » de la fenêtre d'échange : caché hors de la collection de l'ami (assets/pick-filters.js) */
.tool label, .tool-label { font-size: 11px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.sel { position: relative; display: block; }
.sel::after { content: ""; position: absolute; right: 14px; top: 50%; width: 6px; height: 6px; margin-top: -5px; border: solid var(--muted); border-width: 0 1.5px 1.5px 0; rotate: 45deg; pointer-events: none; }
.sel select { appearance: none; width: 100%; max-width: 100%; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 11px 36px 11px 14px; font: inherit; font-size: 14px; cursor: var(--cur-hand); transition: border-color .3s ease; }
.sel select:hover { border-color: var(--brass-line); }
.sel select:focus-visible { outline: none; border-color: var(--brass); }
#tri { min-width: 190px; }
.sort-row { display: flex; gap: 8px; }
.sort-row .sel { flex: 1; }
.sort-dir-wrap, .coll-reset-wrap { display: contents; }
.coll-results { transition: opacity .2s ease; }
.coll-results.is-loading { pointer-events: none; }
/* Fête d'une récompense récupérée (assets/site.js, WikiCollect.celebrate) : la gerbe de losanges (proposition R1) */
.cel-layer { position: fixed; z-index: 400; width: 0; height: 0; pointer-events: none; }
.cel-p { position: absolute; left: 0; top: 0; width: 10px; height: 10px; margin: -5px; rotate: 45deg; background: var(--c, var(--brass)); opacity: 0; animation: cel-burst var(--t, 1s) cubic-bezier(.15, .7, .3, 1) var(--d, 0s) forwards; }
@keyframes cel-burst { 0% { opacity: 1; translate: 0 0; scale: .6; } 70% { opacity: 1; } 100% { opacity: 0; translate: var(--x) var(--y); scale: 1.2; rotate: 225deg; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .cel-layer { display: none; }
/* Réglages enregistrés (assets/collection-presets.js) : une rangée sous les étiquettes, des pastilles qui s'appliquent d'un clic, 5 au plus */
.coll-presets { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; margin-top: 16px; padding-top: 16px; border-top: 1px solid var(--line); }   /* tout sur une seule ligne (elle ne passe à la suivante que faute de place) : titre, réglages, bouton ou champ, message */
.fp-head, .fp-row { display: contents; }
.fp-list { display: flex; flex-wrap: wrap; gap: 8px; margin: 0; padding: 0; list-style: none; }
.fp-chip { display: inline-flex; align-items: stretch; border: 1px solid var(--brass-line); background: var(--card); }
.fp-chip.is-on { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 16%, var(--card)); }
.fp-go { display: inline-flex; align-items: center; max-width: 220px; min-height: 36px; padding: 0 12px; color: var(--text); font-size: 13.5px; text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.fp-go:hover, .fp-go:focus-visible { color: var(--brass-ink); }
.fp-del { appearance: none; display: grid; place-items: center; width: 32px; padding: 0; border: 0; border-left: 1px solid var(--line); background: none; color: var(--muted); cursor: var(--cur-hand); }
.fp-del:hover, .fp-del:focus-visible { color: #d9483f; }
.fp-del:disabled { opacity: .5; cursor: var(--cur-blocked); }
.fp-del svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; }
.fp-none { color: var(--muted); font-size: 13px; }
.fp-field { display: flex; flex-wrap: nowrap; align-items: center; gap: 8px; }
.fp-field .btn.btn-sm { white-space: nowrap; min-height: 38px; min-width: 120px; padding: 0 22px; font-size: 12px; }   /* « Enregistrer » et « Annuler » : à la hauteur des pastilles de réglages (38 px) */
.coll-presets [hidden] { display: none !important; }
.fp-field input { min-width: 0; flex: 0 1 260px; width: 260px; min-height: 38px; padding: 0 14px; border: 1px solid var(--line); background: var(--card); color: var(--text); font: inherit; font-size: 16px; }
.fp-field input:focus-visible { outline: none; border-color: var(--brass); }
.fp-msg { margin: 0; font-size: 13px; color: var(--muted); }
.fp-msg:empty { display: none; }
.fp-msg.is-error { color: #d9483f; }
@media (max-width: 680px) { .fp-field { flex-wrap: wrap; width: 100%; } .fp-field input { flex: 1 1 100%; width: auto; } }
.coll-results.is-loading > :not(.cards) { opacity: .5; }
/* Squelettes : si la liste met plus d'un quart de seconde à revenir (tri, filtre, page, recherche), chaque carte est remplacée par une forme grise qui miroite (les cartes restent là tant que ça va vite, rien ne clignote) */
@keyframes sk-hide { to { opacity: 0; } }
@keyframes sk-sweep { to { background-position: -250% 0; } }
.coll-results.is-loading .card-face > * { animation: sk-hide .2s ease .25s forwards; }
.coll-results.is-loading .card-face::before { background: linear-gradient(105deg, var(--sk-a) 35%, var(--sk-b) 50%, var(--sk-a) 65%) 100% 0 / 250% 100%; animation: sk-sweep 1.4s linear .25s infinite; }
.coll-results.is-loading .card-face { background: var(--sk-b) !important; box-shadow: none !important; outline: none !important; filter: none !important; }
.coll-results.is-loading .card::before, .coll-results.is-loading .card::after, .coll-results.is-loading .card .fx-lz, .coll-results.is-loading .card .fx-open { display: none !important; }   /* les reflets de rareté ne se jouent pas sur un squelette */
.coll-results.is-loading .card-face::after, .coll-results.is-loading .card-face > .fx-lz { visibility: hidden; }
:root { --sk-a: color-mix(in srgb, var(--text) 7%, var(--card)); --sk-b: color-mix(in srgb, var(--text) 16%, var(--card)); }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .coll-results.is-loading .card-face::before { animation: none; background-position: 50% 0; }
.sort-dir { appearance: none; width: 44px; flex: none; display: grid; place-items: center; border: 1px solid var(--line); background: var(--card); color: var(--muted); cursor: var(--cur-hand); transition: color .3s ease, border-color .3s ease; }
.sort-dir:hover, .sort-dir:focus-visible { color: var(--brass-ink); border-color: var(--brass-line); }
.sort-dir svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }

/* Liste déroulante à choix multiples (styles) : un <details> dont le panneau contient des cases en losange */
.multi { position: relative; min-width: 190px; }
.multi summary { position: relative; list-style: none; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 11px 36px 11px 14px; font-size: 14px; cursor: var(--cur-hand); transition: border-color .3s ease; }
.multi summary::-webkit-details-marker { display: none; }
.multi summary::after { content: ""; position: absolute; right: 14px; top: 50%; width: 6px; height: 6px; margin-top: -5px; border: solid var(--muted); border-width: 0 1.5px 1.5px 0; rotate: 45deg; }
.multi summary:hover { border-color: var(--brass-line); }
.multi summary:focus-visible, .multi[open] summary { outline: none; border-color: var(--brass); }
.multi-panel { position: absolute; z-index: 30; left: 0; min-width: 100%; top: calc(100% + 4px); padding: 6px; background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--brass); box-shadow: 0 14px 40px rgba(0, 0, 0, .3); }
.tool .multi-opt { display: flex; align-items: center; gap: 12px; padding: 9px 10px; font-size: 14px; font-weight: 400; letter-spacing: 0; text-transform: none; color: var(--text); white-space: nowrap; cursor: var(--cur-hand); }
.tool .multi-opt:hover { background: var(--band); }
.multi-opt input { appearance: none; flex: none; width: 10px; height: 10px; margin: 0 2px; rotate: 45deg; border: 1px solid var(--brass); background: none; cursor: var(--cur-hand); transition: background .2s ease; }
.multi-opt input:checked { background: var(--brass); }
.multi-opt input:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
.coll-reset { align-self: flex-end; padding-bottom: 12px; font-size: 13px; color: var(--brass-ink); }

/* Raretés : les sept losanges, plusieurs peuvent être sélectionnés ; un losange sélectionné est cerclé de laiton, un second clic le désélectionne */
.rar-picker { display: flex; gap: 6px; padding: 0 2px; }
.rar-opt { position: relative; display: grid; place-items: center; width: 34px; height: 40px; cursor: var(--cur-hand); }
.rar-opt input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: var(--cur-hand); }
.rar-opt i { width: 15px; height: 15px; rotate: 45deg; background: var(--rc); transition: box-shadow .25s ease, scale .25s ease; }
.rar-opt.r7 i { background: conic-gradient(from 20deg, #e58fb0, #e9c26f, #7fd6a8, #7fb6ec, #b791ef, #e58fb0); }
.rar-opt input:checked + i { box-shadow: 0 0 0 2px var(--surface), 0 0 0 4.5px var(--brass); }
.rar-opt input:focus-visible + i { outline: 2px solid var(--brass); outline-offset: 5px; }

/* Pagination de la collection (public/assets/collection-pages.js) */
.pager { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px; margin: 0 0 32px; }
.pager:last-of-type { margin: 40px 0 0; }
.pager[hidden] { display: none; }
.pg { appearance: none; min-width: 38px; height: 38px; padding: 0 8px; display: inline-grid; place-items: center; border: 1px solid var(--line); background: none; color: var(--muted); font: 500 14px/1 var(--font); cursor: var(--cur-hand); transition: color .3s ease, border-color .3s ease, background .3s ease; }
.pg svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.pg:hover:not(:disabled), .pg:focus-visible { color: var(--text); border-color: var(--brass-line); }
.pg-input { appearance: none; -moz-appearance: textfield; box-sizing: border-box; min-width: 52px; height: 38px; padding: 0 6px; border: 1px solid var(--brass); background: color-mix(in srgb, var(--brass) 14%, transparent); color: var(--brass-ink); font: 500 14px/1 var(--font); text-align: center; letter-spacing: .02em; transition: border-color .3s ease, background .3s ease; }
.pg-input:hover { background: color-mix(in srgb, var(--brass) 22%, transparent); }
.pg-input:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.pg:disabled { opacity: .35; cursor: var(--cur-blocked); }
.cards .card[hidden] { display: none; }
@media (max-width: 480px) { .pager { gap: 4px; } .pg { min-width: 32px; height: 36px; padding: 0 4px; } .pg-input { min-width: 44px; height: 36px; } .pg-far { display: none; } }   /* les voisines à 2 pages disparaissent : la barre tient sur un téléphone */

/* ---------- Étiquettes des joueurs (public/assets/tags.js, src/TagsView.php) ---------- */
/* Une clé de couleur par étiquette (Tags::COLORS) ; --tc suit le thème clair ou sombre. Les sous-étiquettes reprennent celle du parent. */
.tc-laiton { --tc: var(--brass); } .tc-emeraude { --tc: var(--r2); } .tc-saphir { --tc: var(--r3); } .tc-amethyste { --tc: var(--r4); }
.tc-or { --tc: var(--r5); } .tc-rubis { --tc: var(--r6); } .tc-rose { --tc: #d0708c; } .tc-pierre { --tc: var(--r1); }
.tc-custom { --tc: var(--brass); }   /* couleur hexadécimale : la vraie valeur (--tc, --on-tc) est dans l'attribut style de l'élément */

.tool .dup-toggle { display: flex; align-items: center; gap: 10px; height: 43px; padding: 0 14px; border: 1px solid var(--line); background: var(--card); font-size: 14px; font-weight: 400; letter-spacing: 0; text-transform: none; color: var(--text); cursor: var(--cur-hand); transition: border-color .3s ease; }
.tool .dup-toggle:hover { border-color: var(--brass-line); }
.dup-box { flex: none; width: 10px; height: 10px; margin: 0 2px; rotate: 45deg; border: 1px solid var(--brass); transition: background .2s ease; }
.dup-toggle input:checked + .dup-box { background: var(--brass); }
.dup-toggle:has(input:focus-visible) { outline: 2px solid var(--brass); outline-offset: 2px; }

.coll-tags .dup-toggle { display: flex; align-items: center; gap: 10px; height: 40px; padding: 0 14px; border: 1px solid var(--line); background: var(--card); font-size: 14px; color: var(--text); cursor: var(--cur-hand); transition: border-color .3s ease; }   /* « Sans étiquette » : même case que Doublons et Favoris */
.coll-tags .dup-toggle:hover { border-color: var(--brass-line); }
.coll-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 22px; margin-top: 26px; padding-top: 26px; border-top: 1px solid var(--line); }
.tag-chips { display: flex; flex: 1 1 260px; flex-wrap: wrap; align-items: center; gap: 8px 10px; min-width: 0; }
.tag-empty { margin: 0; font-size: 13.5px; color: var(--muted); }
.tag-chip { position: relative; display: inline-flex; align-items: stretch; border: 1px solid color-mix(in srgb, var(--tc) 60%, transparent); background: color-mix(in srgb, var(--tc) 10%, transparent); color: var(--text); transition: background .25s ease, border-color .25s ease; }
.tag-chip:hover { border-color: var(--tc); }
.tag-chip.is-partial { background: color-mix(in srgb, var(--tc) 32%, transparent); border-color: var(--tc); }
.tag-chip.is-full { background: var(--tc-full, var(--tc)); border-color: var(--tc-full, var(--tc)); color: var(--on-tc, var(--on-brass)); }
/* Thème clair : laiton, or et rose sont trop pâles sous le texte ivoire ; variantes plus sombres (≥ 4,5:1), les autres couleurs passent déjà */
:root[data-theme="light"] .tc-laiton { --tc-full: var(--brass-ink); }
:root[data-theme="light"] .tc-or { --tc-full: #7f5f0e; }
:root[data-theme="light"] .tc-rose { --tc-full: #a84a68; }
.tag-main { display: flex; align-items: center; gap: 9px; padding: 6px 12px; font-size: 13px; font-weight: 500; letter-spacing: .02em; cursor: var(--cur-hand); }
.tag-main::before { content: ""; flex: none; width: 7px; height: 7px; rotate: 45deg; background: var(--tc); }
.tag-chip.is-full .tag-main::before { background: var(--on-tc, var(--on-brass)); }
/* Nombre de cartes de l'étiquette : un petit cartouche discret à droite du nom (teinte de l'étiquette), plus pâle à zéro ; à droite de la ligne dans la liste des sous-étiquettes */
.tag-n { flex: none; min-width: 20px; margin-left: 1px; padding: 2px 6px; text-align: center; font-size: 10.5px; font-weight: 500; line-height: 1.3; letter-spacing: .04em; font-variant-numeric: tabular-nums; background: color-mix(in srgb, var(--tc) 22%, transparent); border: 1px solid color-mix(in srgb, var(--tc) 38%, transparent); color: var(--text); opacity: .9; transition: background .25s ease, border-color .25s ease, opacity .25s ease; }
.tag-n.is-zero { opacity: .45; background: none; }
.tag-chip.is-full .tag-n { background: color-mix(in srgb, var(--on-tc, var(--on-brass)) 16%, transparent); border-color: color-mix(in srgb, var(--on-tc, var(--on-brass)) 38%, transparent); color: inherit; }
.tag-chip.is-full .tag-n.is-zero { background: none; }
.tag-sub .tag-n { margin-left: auto; }
.tag-main input, .tag-sub input, .tag-mode input, .dup-toggle input, .ctf-opt input { position: absolute; opacity: 0; width: 0; height: 0; }   /* cases masquées, dessinées en CSS */
.tag-chip:has(.tag-main input:focus-visible) { outline: 2px solid var(--brass); outline-offset: 2px; }
.tag-caret { appearance: none; display: grid; place-items: center; width: 28px; border: 0; border-left: 1px solid color-mix(in srgb, var(--tc) 60%, transparent); background: none; color: inherit; cursor: var(--cur-hand); }
.tag-chip.is-full .tag-caret { border-left-color: color-mix(in srgb, var(--on-tc, var(--on-brass)) 40%, transparent); }
.tag-caret svg { width: 11px; height: 11px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: rotate .25s ease; }
.tag-caret[aria-expanded="true"] svg { rotate: 180deg; }
.tag-menu { position: absolute; z-index: 30; top: calc(100% + 6px); left: 0; min-width: 100%; display: grid; gap: 2px; padding: 6px; background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--tc); box-shadow: 0 14px 40px rgba(0, 0, 0, .3); color: var(--text); }
.tag-menu[hidden] { display: none; }
.tag-sub { display: flex; align-items: center; gap: 11px; padding: 8px 10px; font-size: 13.5px; white-space: nowrap; cursor: var(--cur-hand); }
.tag-sub:hover { background: var(--band); }
.tag-sub::before { content: ""; flex: none; width: 9px; height: 9px; margin: 0 2px; rotate: 45deg; border: 1px solid var(--tc); transition: background .2s ease; }
.tag-sub:has(input:checked)::before { background: var(--tc); }
.tag-sub:has(input:focus-visible) { outline: 2px solid var(--brass); outline-offset: -2px; }
.tag-mode { display: inline-flex; align-items: center; gap: 8px; }
.tag-mode label { cursor: var(--cur-hand); }
.tag-mode span[title] { display: block; padding: 6px 11px; border: 1px solid var(--line); font-size: 12px; font-weight: 500; letter-spacing: .12em; color: var(--muted); transition: color .25s ease, border-color .25s ease, background .25s ease; }
.tag-mode label:hover span[title] { border-color: var(--brass-line); }
.tag-mode input:checked + span { color: var(--brass-ink); border-color: var(--brass); background: color-mix(in srgb, var(--brass) 14%, transparent); }
.tag-mode label:has(input:focus-visible) { outline: 2px solid var(--brass); outline-offset: 2px; }

/* Fenêtre de gestion des étiquettes : une ligne fine par étiquette, une sous-ligne par sous-étiquette */
.modal-box.tm-box { display: block; width: min(720px, 100%); }   /* .modal-box (plus bas dans ce fichier) est une grille à deux colonnes : sans ce sélecteur plus précis, le contenu n'occupait que la première */
.tm h2 { margin: 0 0 8px; font-size: clamp(20px, 2.6vw, 26px); font-weight: 400; letter-spacing: .16em; text-transform: uppercase; }
.tm-hint, .tm-empty, .tm-loading { margin: 0 0 12px; color: var(--muted); font-size: 14px; text-wrap: pretty; }
.tm-hint-del { display: flex; align-items: flex-start; gap: 10px; padding: 10px 14px; border-left: 2px solid #b8453f; background: var(--band); color: var(--text); font-size: 13.5px; }
.tm-hint-del svg { flex: none; width: 16px; height: 16px; margin-top: 3px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.tm-error { margin: 0 0 12px; padding: 10px 14px; border-left: 2px solid #b8453f; background: var(--band); font-size: 13.5px; }
.tm-error[hidden] { display: none; }
.tm.is-busy { opacity: .6; pointer-events: none; }
.tm-input { appearance: none; min-width: 0; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 10px 12px; font: inherit; font-size: 14px; transition: border-color .3s ease, background .3s ease; }
.tm-input:focus-visible { outline: none; border-color: var(--brass); }
.tm-new { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 16px; margin: 18px 0 22px; padding-bottom: 20px; border-bottom: 1px solid var(--line); }
.tm-new .tm-input { flex: 1 1 200px; }
.tm-colorfield { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 12px; }
.tm-colors { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.tm-swatch { position: relative; display: grid; place-items: center; width: 26px; height: 26px; cursor: var(--cur-hand); }
.tm-swatch input { position: absolute; inset: 0; margin: 0; opacity: 0; cursor: var(--cur-hand); }
.tm-swatch i { width: 14px; height: 14px; rotate: 45deg; background: var(--tc); transition: box-shadow .2s ease, scale .2s ease; }
.tm-swatch input:checked + i { box-shadow: 0 0 0 2px var(--surface), 0 0 0 4px var(--brass); }
.tm-swatch input:focus-visible + i { outline: 2px solid var(--brass); outline-offset: 5px; }
.tm-hexbox { display: inline-flex; align-items: center; gap: 8px; height: 38px; padding: 0 10px; border: 1px solid var(--line); background: var(--card); transition: border-color .3s ease; }
.tm-hexbox:focus-within { border-color: var(--brass); }
.tm-hex-preview { flex: none; width: 12px; height: 12px; rotate: 45deg; background: var(--tc, transparent); border: 1px solid var(--line); }
.tm-hex { appearance: none; width: 78px; border: 0; background: none; color: var(--text); font: inherit; font-size: 14px; outline: none; }
.tm-hex::placeholder { color: var(--muted); opacity: .7; }

.tm-list { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--line); }
.tm-label { position: relative; border-bottom: 1px solid var(--line); }
.tm-label::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px; background: var(--tc); }
.tm-row { display: flex; align-items: center; gap: 6px; min-height: 46px; padding: 3px 6px 3px 12px; }
.tm-row .tm-name, .tm-sub .tm-name { flex: 1 1 auto; border-color: transparent; background: none; padding: 8px; }
.tm-row .tm-name { font-weight: 500; }
.tm-row .tm-name:hover, .tm-sub .tm-name:hover { border-color: var(--line); }
.tm-row .tm-name:focus-visible, .tm-sub .tm-name:focus-visible { border-color: var(--brass); background: var(--card); }
.tm-dot, .tm-add, .tm-del, .tm-cancel { appearance: none; flex: none; display: grid; place-items: center; width: 32px; height: 32px; border: 1px solid transparent; background: none; color: var(--muted); cursor: var(--cur-hand); transition: color .25s ease, border-color .25s ease, background .25s ease; }
.tm-dot i { width: 12px; height: 12px; rotate: 45deg; background: var(--tc); transition: scale .2s ease, box-shadow .2s ease; }
.tm-dot[aria-expanded="true"] i { box-shadow: 0 0 0 2px var(--surface), 0 0 0 4px var(--brass); }
.tm-add:hover, .tm-add:focus-visible, .tm-add[aria-expanded="true"], .tm-cancel:hover, .tm-cancel:focus-visible { color: var(--brass-ink); border-color: var(--brass-line); }
.tm-del:hover, .tm-del:focus-visible { color: var(--text); border-color: #b8453f; }
.tm-del.armed { color: #fff; background: #8a3530; border-color: #8a3530; }
.tm-add svg, .tm-del svg, .tm-cancel svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.tm-colorpop { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; padding: 8px 12px 12px 48px; background: var(--band); }
.tm-colorpop[hidden], .tm-addsub[hidden] { display: none; }
.tm-subs { list-style: none; margin: 0; padding: 0; }
.tm-sub { position: relative; display: flex; align-items: center; gap: 6px; min-height: 40px; padding: 2px 6px 2px 40px; border-top: 1px solid color-mix(in srgb, var(--line) 60%, transparent); }
.tm-sub::before { content: ""; position: absolute; left: 22px; top: 50%; width: 6px; height: 6px; margin-top: -3px; rotate: 45deg; background: var(--tc); }
.tm-sub .tm-name { font-size: 13.5px; }
.tm-grip { appearance: none; flex: none; display: grid; place-items: center; width: 26px; height: 32px; margin-left: -8px; border: 0; background: none; color: var(--muted); cursor: var(--cur-hand); touch-action: none; transition: color .2s ease; }
.tm-grip svg { width: 16px; height: 16px; fill: currentColor; }
.tm-grip:hover, .tm-grip:focus-visible { color: var(--brass-ink); }
.tm-sub.is-dragging { opacity: .35; }
.tm-ghost { position: fixed; z-index: 300; display: flex; align-items: center; gap: 6px; min-height: 40px; padding: 2px 6px 2px 40px; background: var(--surface); border: 1px solid var(--brass); box-shadow: 0 12px 34px rgba(0, 0, 0, .45); pointer-events: none; opacity: .95; }
.tm-ghost .tm-input { flex: 1; min-width: 0; border-color: transparent; background: none; }
.tm-label.is-drop-target { background: color-mix(in srgb, var(--tc) 14%, transparent); outline: 2px dashed var(--tc); outline-offset: -2px; }
html.is-dragging-tag, html.is-dragging-tag * { cursor: grabbing !important; -webkit-user-select: none; user-select: none; }
.tm-addsub { display: flex; align-items: center; gap: 8px; padding: 6px 6px 8px 44px; border-top: 1px solid color-mix(in srgb, var(--line) 60%, transparent); }
.tm-addsub .tm-input { flex: 1 1 auto; }

/* Étiquettes d'une carte, dans sa fenêtre de détail : un champ (les étiquettes posées) + une liste déroulante avec recherche */
.ct { margin-top: 26px; }
.ct-title { margin: 0 0 10px; font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.ct-empty { margin: 0; font-size: 13.5px; color: var(--muted); }
.ct-error { margin: 10px 0 0; font-size: 13px; color: var(--err-ink); }
.ctf-field { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; min-height: 44px; padding: 5px 8px; border: 1px solid var(--line); background: var(--card); cursor: var(--cur-hand); transition: border-color .3s ease; }
.ctf-field:hover { border-color: var(--brass-line); }
.ctf-field.is-open { border-color: var(--brass); }
.ctf-chips { display: contents; }
.ctf-chip { display: inline-flex; align-items: center; gap: 4px; padding: 2px 3px 2px 10px; border: 1px solid var(--tc); background: color-mix(in srgb, var(--tc) 16%, transparent); font-size: 12.5px; }
.ctf-x { appearance: none; display: grid; place-items: center; width: 20px; height: 20px; border: 0; background: none; color: var(--muted); cursor: var(--cur-hand); }
.ctf-x:hover, .ctf-x:focus-visible { color: var(--text); }
.ctf-x svg { width: 11px; height: 11px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
.ctf-open { appearance: none; flex: 1 1 100px; display: flex; align-items: center; justify-content: space-between; gap: 10px; min-height: 32px; padding: 0 4px; border: 0; background: none; color: var(--muted); font: inherit; font-size: 14px; text-align: left; cursor: var(--cur-hand); }
.ctf-chips:not(:empty) + .ctf-open .ctf-ph { display: none; }
.ctf-open svg { width: 12px; height: 12px; margin-left: auto; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: rotate .25s ease; }
.ctf-field.is-open .ctf-open svg { rotate: 180deg; }
.ctf-open:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.ctf-panel { border: 1px solid var(--brass); border-top: 0; background: var(--surface); }
.ctf-panel[hidden] { display: none; }
.ctf-search { appearance: none; width: 100%; padding: 11px 14px; border: 0; border-bottom: 1px solid var(--line); background: var(--card); color: var(--text); font: inherit; font-size: 14px; }
.ctf-search:focus-visible { outline: none; }
.ctf-list, .ctf-subs { list-style: none; margin: 0; padding: 0; }
.ctf-list { max-height: 210px; overflow-y: auto; padding: 4px 0; }
.ctf-subs { padding-left: 22px; }
.ctf-item[hidden] { display: none; }
.ctf-opt { display: flex; align-items: center; gap: 11px; padding: 8px 14px; font-size: 14px; cursor: var(--cur-hand); }
.ctf-opt:hover { background: var(--band); }
.ctf-chip::before { content: ""; flex: none; width: 7px; height: 7px; margin-right: 4px; rotate: 45deg; background: var(--tc); }
.ctf-opt::before { content: ""; flex: none; width: 9px; height: 9px; rotate: 45deg; border: 1px solid var(--tc); transition: background .2s ease; }
.ctf-opt:has(input:checked)::before { background: var(--tc); }
.ctf-opt:has(input:focus-visible) { outline: 2px solid var(--brass); outline-offset: -2px; }
.ctf-none { margin: 0; padding: 12px 14px; font-size: 13.5px; color: var(--muted); }
.ctf-none[hidden] { display: none; }

/* Fenêtre de détail d'une carte (public/assets/card-modal.js) */
.modal { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; padding: 16px; overflow-y: auto; overscroll-behavior: contain; background: var(--overlay); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
.modal[hidden] { display: none; }
html.modal-open { overflow: hidden; }
.modal-box { position: relative; display: grid; grid-template-columns: minmax(0, 320px) minmax(0, 1fr); gap: clamp(24px, 4vw, 48px); align-items: center; width: min(880px, 100%); padding: clamp(28px, 4vw, 44px); background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--brass); box-shadow: 0 24px 80px rgba(0, 0, 0, .35); }
.modal-close { appearance: none; position: absolute; top: 12px; right: 12px; width: 36px; height: 36px; display: grid; place-items: center; border: 1px solid var(--line); background: none; color: var(--muted); cursor: var(--cur-hand); transition: color .3s ease, border-color .3s ease; }
.modal-close:hover, .modal-close:focus-visible { color: var(--text); border-color: var(--brass-line); }
.modal-close svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; }
.modal-card .card { width: 100%; cursor: var(--cur-default); }
.modal-card .card:hover { translate: none; }
.modal-info { min-width: 0; padding-right: 8px; overflow-wrap: break-word; }   /* un mot très long d'une description (nom chimique, adresse…) passe à la ligne au lieu de faire défiler la fenêtre de côté */
.modal-info h2, .cm-head h2 { margin: 0 0 14px; font-size: clamp(22px, 3vw, 30px); font-weight: 400; line-height: 1.2; overflow-wrap: anywhere; }
.modal-desc { margin: 0 0 26px; color: var(--muted); text-wrap: pretty; }
.modal-desc.none { font-style: italic; opacity: .7; }
.modal-list { margin: 0 0 28px; border-top: 1px solid var(--line); }
.modal-row { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; padding: 12px 0; border-bottom: 1px solid var(--line); }
.modal-row dt { font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.modal-row dd { margin: 0; text-align: right; font-weight: 500; }
.modal-rar { display: inline-flex; align-items: center; gap: 10px; }
.modal-rar i { width: 9px; height: 9px; rotate: 45deg; background: var(--rc); }
.modal-rar.r7 i { background: conic-gradient(from 20deg, #e58fb0, #e9c26f, #7fd6a8, #7fb6ec, #b791ef, #e58fb0); }
.modal-link { font-size: 14px; color: var(--brass-ink); }
@media (max-width: 680px) {
  .coll-stats > div { padding: 0 16px; }
  .coll-search { max-width: none; }
  .coll-filters { justify-content: flex-start; }
  .coll-filters .tool { width: 100%; }
  #tri { min-width: 0; }
  .multi { min-width: 0; }
  .modal-box { grid-template-columns: minmax(0, 1fr); justify-items: center; padding-top: 52px; }
  .modal-card { width: min(260px, 70vw); }
  .modal-info { width: 100%; padding-right: 0; }
}
.qty { position: absolute; z-index: 3; top: 10px; right: 10px; min-width: 28px; height: 28px; padding: 0 7px; display: grid; place-items: center; background: var(--brass-ink); color: var(--on-brass); font-size: 12.5px; font-weight: 600; letter-spacing: .02em; font-variant-numeric: tabular-nums; }
.empty-coll { max-width: 440px; margin: 0 auto; padding: 56px 24px; text-align: center; color: var(--muted); border: 1px solid var(--line); }
.empty-coll p { margin: 0 0 26px; text-wrap: pretty; }

/* Entre 761 et 1100 px : la navigation du centre est remplacée par un menu burger (en dessous de 761 px, c'est la barre du bas) */
.nav-burger { display: none; }
.nav-burger .acct-dropdown { left: auto; right: 0; translate: none; }
.menu-link .ic { width: 18px; height: 18px; flex: none; fill: none; stroke: var(--brass-ink); stroke-width: 1.5; stroke-linecap: round; stroke-linejoin: round; }
@media (max-width: 1100px) { .top-in { grid-template-columns: 1fr auto; } .top-nav { display: none; } .top-end { grid-column: 2; } }
@media (min-width: 761px) and (max-width: 1100px) { .nav-burger { display: block; } }
@media (max-width: 760px) {
  .cards { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
  .cards:not(.collection) > .card:last-child:nth-child(odd) { grid-column: 1 / -1; width: calc(50% - 6px); margin-inline: auto; }   /* paquet : la 5e carte seule, au centre */
  .eyebrow { gap: 10px; font-size: 11px; letter-spacing: .2em; }
  .eyebrow::before, .eyebrow::after { width: 16px; }
  .brand { font-size: 15px; letter-spacing: .2em; gap: 10px; }
  .brand .mark { width: 18px; height: 18px; }
  .brand .mark::after { inset: 7px; }

  /* Non connecté·e : les deux pastilles cèdent la place à un petit menu burger. */
  .auth-pills { display: none; }
  .burger-menu { display: inline-flex; }
}
/* Barre du bas (connecté·e) : sur tous les mobiles — écrans étroits (≤760px), mais aussi téléphones plus larges ou tenus en paysage
   et tablettes (écran tactile, sans survol, jusqu'à 1100px), qui n'ont pas la place ou l'habitude d'une navigation en haut.
   Le menu burger de l'en-tête (761–1100px) est alors inutile : il ne reste que pour les écrans à souris. */
@media (max-width: 760px), (hover: none) and (pointer: coarse) and (max-width: 1100px) {
  .nav-burger { display: none; }
  /* Connecté·e : la navigation et le bouton « Compte » du haut cèdent la place à la barre fixée en bas (.bottom-nav).
     Largeur explicite (pas seulement left/right:0) : sinon un conteneur flex en position fixe se redimensionne sur
     le contenu de ses enfants et déborde de l'écran au lieu de se laisser contraindre par le viewport. */
  .top-acct { display: none; }
  body:has(.bottom-nav) .top { display: none; }   /* l'en-tête (logo, thème, aide) est masqué : le logo est dans la barre du bas, le thème et l'aide dans le menu Compte */
  .bottom-nav {
    display: flex; align-items: center; justify-content: space-between; gap: 8px; position: fixed; left: 0; right: 0; bottom: 0;
    width: 100%; min-width: 0; z-index: 55; background: var(--top-bg); border-top: 1px solid var(--brass-line);
    /* 64 px, plus la zone sûre du bas des iPhone (barre d'accueil) et les encoches en paysage */
    height: calc(64px + env(safe-area-inset-bottom, 0px)); padding: 0 max(14px, env(safe-area-inset-right, 0px)) env(safe-area-inset-bottom, 0px) max(14px, env(safe-area-inset-left, 0px));
    -webkit-backdrop-filter: blur(14px) saturate(1.15); backdrop-filter: blur(14px) saturate(1.15);
  }
  body:has(.bottom-nav) { padding-bottom: calc(64px + env(safe-area-inset-bottom, 0px)); }
  .bn-brand { display: inline-flex; flex: none; }
  .bn-brand .mark { width: 18px; height: 18px; }
  .bn-brand .mark::after { inset: 7px; }
  /* Les icônes occupent tout l'espace entre le logo et le bouton Compte, à écarts égaux : l'écart suit la largeur du téléphone, et la barre (gap de .bottom-nav)
     les tient toujours à distance du logo et du bouton Compte, quelle que soit la largeur */
  .bn-links { display: flex; flex: 1 1 auto; justify-content: space-evenly; gap: 0; min-width: 0; }
  /* Icônes seules : les noms des pages restent lus par les lecteurs d'écran (libellé masqué visuellement), zone tactile de 44 px (moins sur les très petits écrans) */
  .bottom-nav .nav-link { flex: 0 1 44px; min-width: 0; padding: 12px 0; justify-content: center; }
  .bottom-nav .nav-link .ic { width: 22px; height: 22px; }
  .bottom-nav .nav-link[aria-current="page"]::after { opacity: 1; }   /* la page courante garde son trait laiton */
  .bottom-nav .nav-link:active::after, .bottom-nav .nav-link.is-go::after { opacity: 1; transition-duration: .08s; }   /* le trait laiton dès l'appui, pour chaque lien (site.js le garde jusqu'à la page suivante) */
  .bottom-nav .nav-link .lb { position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
  .bottom-nav .acct-pill.avatar-btn { padding: 5px; }
  .bottom-nav .acct-pill .avatar-ic { width: 20px; height: 20px; }
  /* Le bouton Compte est au bord droit : le menu s'y aligne et s'ouvre vers le haut, sans jamais sortir de l'écran */
  .bottom-nav .acct-dropdown { top: auto; bottom: calc(100% + 10px); left: auto; right: 0; translate: none; max-width: calc(100vw - 28px); }
}
/* ---------- Styles de carte « Full Art » (.fa.fa4, l'image occupe toute la carte) et « Extended Art » (.xa, l'image occupe le haut, jusqu'à la ligne de séparation) ----------
   Repris tel quel de l'ancienne maquette des cartes (angles à gradins de l'image ajoutés à la règle
   « Angles en gradins » ci-dessus, via « .fa .card-img »). Le style est ajouté au tirage d'un paquet par Packs.php,
   au plus une carte par paquet, en dernière position, dans Styles::EXTENDED (xa) ou Styles::FULL (fa). */
.card-front.fa { padding: 0; color: #f4efe2; --veil: color-mix(in srgb, var(--rc) 26%, #070b09); }
.fa .card-img { position: absolute; inset: var(--f); flex: none; background: #0d100f; }
.fa .card-img img { object-position: 50% 32%; }
.fa .card-img::after { content: ""; position: absolute; inset: 0; pointer-events: none; }
.fa .card-body { position: absolute; left: var(--f); right: var(--f); bottom: var(--f); flex: none; min-height: 0; justify-content: flex-end; padding: 0 6cqw 6cqw; gap: 1.6cqw; }
.fa .card-body::before { display: none; }
.fa .card-body h3 { text-shadow: 0 1px 10px rgba(0, 0, 0, .55); }
.fa .desc { color: rgba(244, 239, 226, .8); text-shadow: 0 1px 8px rgba(0, 0, 0, .6); }
.fa .tag { color: color-mix(in srgb, var(--rc) 55%, #fff); }
.fa4 .tag { white-space: normal; letter-spacing: .16em; padding-left: .16em; text-wrap: balance; }   /* « Inhabituelle - Full Art » : deux lignes sur une carte étroite */
.fa .vw { color: rgba(244, 239, 226, .72); }

/* Full Art : l'éventail se lève du bas de l'image, la rareté se lit dans une jauge de sept losanges, le nom du
   style est ajouté après le nom de la rareté (« Légendaire - Full Art »). */
.fa4 .card-img::before { content: ""; position: absolute; z-index: 1; left: 50%; bottom: -6%; width: 170%; aspect-ratio: 2 / 1; translate: -50% 0; background: #fff; opacity: .22; -webkit-mask: var(--fan) center / 100% 100% no-repeat; mask: var(--fan) center / 100% 100% no-repeat; pointer-events: none; }
.fa4 .card-img::after { background: linear-gradient(180deg, rgba(7, 11, 9, .5) 0%, rgba(7, 11, 9, 0) 26%, rgba(7, 11, 9, 0) 34%, color-mix(in srgb, var(--veil) 72%, transparent) 66%, color-mix(in srgb, var(--veil) 96%, transparent) 100%); }
.fa4 .gauge { display: flex; gap: 1.8cqw; margin: .6cqw 0; }
.fa4 .gauge i { width: 2.4cqw; height: 2.4cqw; rotate: 45deg; border: 1px solid color-mix(in srgb, var(--rc) 70%, #fff); }
.fa4 .gauge i.on { background: color-mix(in srgb, var(--rc) 70%, #fff); }

/* Extended Art : même agencement que le style Normal (même ligne de séparation, même zone de texte), mais l'image
   va jusqu'au cadre (haut, gauche, droite), sans marge, et s'arrête à la ligne de séparation : le bloc de texte
   garde le fond opaque de la carte. Ce style n'utilise pas la classe .fa. */
.card-front.xa { padding: var(--f) var(--f) var(--p); --xa-b: calc(var(--p) + (140cqw - 2 * var(--p)) * .56); }
.xa .card-img { flex: 0 0 calc(var(--xa-b) - var(--f)); }
.xa .card-body { margin: 0 calc(var(--p) - var(--f)); }
.xa-sep { position: absolute; z-index: 2; left: calc(var(--f) + 9cqw); right: calc(var(--f) + 9cqw); top: var(--xa-b); translate: 0 -50%; pointer-events: none; }

/* Images à fond transparent (schémas, logos…) : posées par site.js (classe .contain sur l'image), elles sont montrées
   entières dans l'encart, sur un fond clair, car elles sont dessinées pour un fond blanc. */
.card-img:has(img.contain) { background: #f6f2e6; }
.card-img img.contain { inset: 4%; width: 92%; height: 92%; object-fit: contain; object-position: 50% 50%; }
.card-front:not(.fa) .card-img img.contain.portrait { object-position: 50% 50%; }
.fa4 .card-img:has(img.contain)::after { background: linear-gradient(180deg, transparent 50%, color-mix(in srgb, var(--veil) 72%, transparent) 76%, color-mix(in srgb, var(--veil) 96%, transparent) 100%); }
.fa4 .card-img img.contain { inset: 4% 4% 38%; height: 58%; }

/* Les éléments des listes déroulantes ne se sélectionnent pas comme du texte (clics répétés, glissements) */
.acct-dropdown, .multi summary, .multi-panel, .tag-chip, .tag-menu, .ctf-field, .ctf-chip, .ctf-panel, .ctf-opt, .tm-swatch, .tm-dot, .tm-add, .tm-del { -webkit-user-select: none; user-select: none; }
.ctf-search { -webkit-user-select: text; user-select: text; }

/* Fiche d'une carte sur ordinateur (card-modal.js), trois colonnes sous le titre : la carte, ses informations, puis les actions (édition, favoris, recyclage, atelier, échange, étiquettes, signalement) */
.modal-box.cm-box { grid-template-columns: minmax(0, 270px) minmax(0, 1fr) minmax(0, 310px); grid-template-areas: "head head head" "card info side"; align-items: start; width: min(1140px, 100%); gap: clamp(20px, 2.6vw, 32px) clamp(24px, 3.4vw, 44px); }
.cm-head { grid-area: head; min-width: 0; padding: 0 52px 16px; border-bottom: 1px solid var(--line); text-align: center; }
.cm-head h2 { margin: 0; }
.cm-box .modal-info { grid-area: info; padding-right: 0; }
.cm-box .modal-info .modal-list { margin-bottom: 20px; }
.modal-side { grid-area: side; min-width: 0; }
.modal-side > :first-child { margin-top: 0; }
.modal-side .modal-btns { flex-direction: column; align-items: stretch; margin-top: 14px; }
.modal-side .modal-btns > .fav-btn, .modal-side .modal-btns > .rc-btn { width: 100%; justify-content: flex-start; }
.modal-side .modal-btns > .rc-btn { justify-content: space-between; }
@media (max-width: 1000px) {
  .modal-box.cm-box { grid-template-columns: minmax(0, 240px) minmax(0, 1fr); grid-template-areas: "head head" "card info" "side side"; }
}
@media (max-width: 680px) {
  .modal-box.cm-box { grid-template-columns: minmax(0, 1fr); grid-template-areas: "head" "card" "info" "side"; justify-items: center; padding-top: 52px; }
  .cm-head, .cm-box .modal-info, .modal-side, .modal-left { width: 100%; }
  .cm-head { padding: 0 44px 12px; }
  .modal-side .modal-btns { flex-direction: row; align-items: center; }
  .modal-side .modal-btns > .fav-btn, .modal-side .modal-btns > .rc-btn { width: auto; }
}

/* Favoris : bouton étoile dans la fenêtre d'une carte, repère sur la carte, et filtre de la collection */
.fav-star { flex: none; width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linejoin: round; transition: fill .25s ease, scale .25s var(--ease); }
.fav-error { flex-basis: 100%; margin: 0; font-size: 13px; color: var(--err-ink); }
/* étoile des cartes favorites : à droite du nombre de vues, de la taille de l'œil, en laiton avec une légère ombre (image et non masque : un masque couperait l'ombre) ; en thème clair, les cartes sont teintées : un laiton plus vif cerné d'un trait sombre reste lisible */
.card { --star: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23c9a45c' d='M12 2.2l2.9 6.1 6.7.8-4.9 4.6 1.3 6.6L12 16.9l-6 3.4 1.3-6.6L2.4 9.1l6.7-.8z'/></svg>"); }
:root[data-theme="light"] .card { --star: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23e2b13c' stroke='%236f5010' stroke-width='1.6' stroke-linejoin='round' d='M12 2.2l2.9 6.1 6.7.8-4.9 4.6 1.3 6.6L12 16.9l-6 3.4 1.3-6.6L2.4 9.1l6.7-.8z'/></svg>"); }
.fav-toggle .fav-star { width: 16px; height: 16px; color: var(--brass); }
.fav-toggle:has(input:checked) .fav-star { fill: currentColor; }
.card[data-fav="1"] .vw { gap: .6em; }
.card[data-fav="1"] .vw::after { content: ""; flex: none; width: 1.05em; height: 1.05em; background: var(--star) center / contain no-repeat; filter: drop-shadow(0 1px 1.5px rgba(0, 0, 0, .6)); translate: 0 -.05em; }
/* Carte d'un autre joueur qui est dans MA liste de souhait : un petit cœur blanc cerclé de sombre (lisible sur tous les fonds), là où l'étoile des favoris s'affiche pour mes cartes.
   Pas dans l'onglet « Ma liste de souhait » lui-même, où toutes les cartes y sont. */
.card[data-wish="1"] .vw { gap: .6em; }
.card[data-wish="1"] .vw::after { content: ""; flex: none; width: 1.4em; height: 1.4em; background: #fff; -webkit-mask: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23000' d='M12 21S3.5 15.4 3.5 9.2C3.5 6.3 5.6 4.5 8 4.5c1.7 0 3.2.9 4 2.4.8-1.5 2.3-2.4 4-2.4 2.4 0 4.5 1.8 4.5 4.7C20.5 15.4 12 21 12 21z'/></svg>") center / contain no-repeat; mask: url("data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path fill='%23000' d='M12 21S3.5 15.4 3.5 9.2C3.5 6.3 5.6 4.5 8 4.5c1.7 0 3.2.9 4 2.4.8-1.5 2.3-2.4 4-2.4 2.4 0 4.5 1.8 4.5 4.7C20.5 15.4 12 21 12 21z'/></svg>") center / contain no-repeat; filter: drop-shadow(0 0 .7px rgba(0, 0, 0, .9)) drop-shadow(0 1px 1.5px rgba(0, 0, 0, .55)); translate: 0 -.05em; }
#coll-form[data-tab="souhaits"] ~ * .card[data-wish="1"] .vw { gap: .32em; }   /* la liste est affichée APRÈS le formulaire, pas dedans */
#coll-form[data-tab="souhaits"] ~ * .card[data-wish="1"] .vw::after { content: none; }

/* ---------- Aide : icône « ? » de l'en-tête (losange comme .theme), badge de nouveauté, fenêtre à trois onglets ---------- */
/* transform: scale() plutôt que la propriété scale seule : évite les écarts de composition/origine entre moteurs
   (notamment un grossissement visiblement décentré ou saccadé sous Firefox sur le badge de la cloche) */
@keyframes help-pulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.22); } }
.modal-box.help-box { display: flex; flex-direction: column; align-items: stretch; gap: 0; width: min(1320px, 100%); max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); padding: clamp(24px, 3.5vw, 36px) clamp(20px, 3.5vw, 52px) 0; }
.help-head { flex: none; padding-right: 44px; }
.help-head h2 { margin: 0; font-size: clamp(20px, 2.6vw, 26px); font-weight: 400; letter-spacing: .16em; text-transform: uppercase; }
.help-version { margin: 6px 0 0; font-size: 12.5px; letter-spacing: .06em; color: var(--muted); }
.help-tabs { flex: none; display: flex; gap: 4px; margin: 20px 0 0; border-bottom: 1px solid var(--line); overflow-x: auto; scrollbar-width: none; }
.help-tab { appearance: none; flex: none; position: relative; padding: 12px 16px; border: 0; background: none; color: var(--muted); font: 500 12px/1 var(--font); letter-spacing: .14em; text-transform: uppercase; cursor: var(--cur-hand); -webkit-user-select: none; user-select: none; transition: color .3s ease; }
.help-tab::after { content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 2px; background: var(--brass); opacity: 0; transition: opacity .3s ease; }
.help-tab:hover, .help-tab:focus-visible { color: var(--text); }
.help-tab:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.help-tab[aria-selected="true"] { color: var(--brass-ink); }
.help-tab[aria-selected="true"]::after { opacity: 1; }
.help-panel { position: relative; flex: 1 1 auto; min-height: 0; overflow-y: auto; margin-left: -8px; padding: 24px 10px 32px 8px; overscroll-behavior: contain; overflow-wrap: break-word; }
.help-panel[hidden] { display: none; }
.help-panel:focus-visible { outline: none; }
.help-panel h3 { margin: 0 0 10px; font-size: 18px; font-weight: 500; letter-spacing: .02em; text-wrap: balance; }
.help-panel p, .help-panel li { text-wrap: pretty; }
.help-panel p { margin: 0 0 12px; }
@media (min-width: 900px) { .news-item, .cl-item { max-width: 1000px; margin-inline: auto; } .help-panel { font-size: 16.5px; line-height: 1.68; } .help-panel .news-date, .help-panel .hw-note { line-height: 1.4; } }
.help-empty { color: var(--muted); }
.news-item, .cl-item { padding-bottom: 26px; margin-bottom: 26px; border-bottom: 1px solid var(--line); }
.news-item:last-child, .cl-item:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: 0; }
.help-panel .news-date { margin: 0 0 6px; font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.help-goto { margin-top: 4px; }
.cl-item header { margin-bottom: 8px; }
.cl-item h3 { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 14px; margin-bottom: 4px; }
.cl-version { padding: 3px 10px; border: 1px solid var(--brass); color: var(--brass-ink); font-size: 14px; font-weight: 600; letter-spacing: .08em; font-variant-numeric: tabular-nums; }
.cl-item.is-target { animation: help-flash 1.6s ease-out; }
@keyframes help-flash { 0% { background: color-mix(in srgb, var(--brass) 22%, transparent); } 100% { background: transparent; } }
.cl-item h4 { margin: 18px 0 8px; font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); }
.cl-item ul, .hw-list { margin: 0; padding: 0; list-style: none; }
.cl-item li, .hw-list li { position: relative; padding: 0 0 8px 20px; }
.cl-item li::before, .hw-list li::before { content: ""; position: absolute; left: 3px; top: .62em; width: 6px; height: 6px; rotate: 45deg; background: var(--brass); }
.hw-sec:last-child { margin-bottom: 0; }
/* « Comment ça marche ? » : un sommaire collé à gauche (ordinateur) et des sections plus aérées, avec une largeur de texte confortable */
.hw-layout { display: grid; grid-template-columns: 230px minmax(0, 1fr); gap: 20px 48px; align-items: start; max-width: 1120px; margin-inline: auto; }
.hw-toc { position: sticky; top: 0; max-height: calc(100vh - 250px); max-height: calc(100dvh - 250px); overflow-y: auto; padding: 4px 4px 16px 0; font-size: 14px; line-height: 1.4; overscroll-behavior: contain; }
.hw-toc summary { display: block; margin: 0 0 12px; font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); list-style: none; cursor: default; }
.hw-toc summary::-webkit-details-marker { display: none; }
.hw-toc ol { margin: 0; padding: 0; list-style: none; border-left: 1px solid var(--line); }
.hw-toc li { margin: 0; }
.hw-toc a { display: block; padding: 7px 10px 7px 14px; margin-left: -1px; border-left: 2px solid transparent; color: var(--muted); text-decoration: none; transition: color .25s ease, border-color .25s ease, background .25s ease; }
.hw-toc a:hover, .hw-toc a:focus-visible { color: var(--text); background: color-mix(in srgb, var(--brass) 8%, transparent); }
.hw-toc a:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.hw-toc a.is-current { color: var(--brass-ink); border-left-color: var(--brass); }
.hw-main { min-width: 0; }
.hw-main .hw-sec { margin-bottom: 58px; scroll-margin-top: 12px; }
.hw-main .hw-sec:last-child { margin-bottom: 8px; }
.hw-main .hw-sec h3 { margin-bottom: 22px; }
.hw-main .hw-sec > p, .hw-main .hw-sec > ul, .hw-main .hw-sec > ol { max-width: 88ch; }
.hw-main .hw-sec > p { margin-bottom: 18px; }
.hw-main .hw-list li { padding-bottom: 11px; }
/* Onglet « FAQ » de l'aide (content/faq.php) : des questions en spoilers (<details>), regroupées par thème */
.faq { max-width: 1000px; margin-inline: auto; }
.faq-lead { margin: 0 0 26px; color: var(--muted); }
.faq-group { margin: 0 0 40px; }
.faq-group:last-child { margin-bottom: 8px; }
.faq-group > h3 { margin: 0 0 14px; font-size: 12px; font-weight: 500; letter-spacing: .22em; text-transform: uppercase; color: var(--brass-ink); }
.faq-q { border-bottom: 1px solid var(--line); }
.faq-q:first-of-type { border-top: 1px solid var(--line); }
.faq-q > summary { position: relative; display: block; padding: 16px 44px 16px 4px; font-weight: 500; line-height: 1.45; cursor: var(--cur-hand); list-style: none; transition: color .25s ease, background .25s ease; -webkit-tap-highlight-color: transparent; }
.faq-q > summary::-webkit-details-marker { display: none; }
.faq-q > summary::after { content: ""; position: absolute; right: 16px; top: 50%; width: 8px; height: 8px; margin-top: -6px; border: solid var(--brass); border-width: 0 1.6px 1.6px 0; rotate: 45deg; transition: rotate .25s ease, margin .25s ease; }
.faq-q > summary:hover, .faq-q > summary:focus-visible { color: var(--brass-ink); background: color-mix(in srgb, var(--brass) 6%, transparent); }
.faq-q > summary:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.faq-q[open] > summary { color: var(--brass-ink); }
.faq-q[open] > summary::after { rotate: 225deg; margin-top: -2px; }
.faq-a { padding: 2px 4px 18px; max-width: 84ch; }
.faq-a > :last-child { margin-bottom: 0; }
.faq-a p { margin: 0 0 12px; }
.faq-a .help-goto { margin-top: 2px; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .faq-q > summary, :where(:root[data-motion="reduce"]) .faq-q > summary::after { transition: none; }
.hw-up { margin: 4px 0 0; text-align: right; }
.hw-up a { font-size: 11.5px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); text-decoration: none; }
.hw-up a:hover, .hw-up a:focus-visible { color: var(--brass-ink); }
@media (min-width: 900px) { .hw-up { display: none; } }
@media (max-width: 899px) {
  .hw-layout { display: block; }
  .hw-toc { position: static; max-height: none; margin: 0 0 28px; padding: 0; border: 1px solid var(--line); border-top: 2px solid var(--brass); }
  .hw-toc summary { display: flex; justify-content: space-between; align-items: center; margin: 0; padding: 14px 16px; cursor: var(--cur-hand); }
  .hw-toc summary::after { content: ""; width: 8px; height: 8px; border: solid currentColor; border-width: 0 1.6px 1.6px 0; rotate: 45deg; translate: 0 -2px; transition: rotate .25s ease; }
  .hw-toc[open] summary::after { rotate: 225deg; translate: 0 2px; }
  .hw-toc ol { border-left: 0; padding: 0 8px 10px; }
  .hw-toc a { padding: 10px 10px; }
  .hw-main .hw-sec { margin-bottom: 44px; }
}

.hw-rar { list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--line); }
.hw-rar li { display: flex; justify-content: space-between; align-items: baseline; gap: 16px; padding: 9px 0; border-bottom: 1px solid var(--line); font-size: 14.5px; }
.hw-rname { display: inline-flex; align-items: center; gap: 10px; font-weight: 500; }
.hw-rname i { width: 9px; height: 9px; rotate: 45deg; background: var(--rc); }
.hw-rar .r7 .hw-rname i { background: conic-gradient(from 20deg, #e58fb0, #e9c26f, #7fd6a8, #7fb6ec, #b791ef, #e58fb0); }
.hw-rshare { color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }
/* Téléphone : les onglets deviennent une liste à puces en losange (losange plein pour la section ouverte) */
@media (max-width: 680px) {
  .modal-box.help-box { max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); padding-top: 56px; }
  .help-head { padding-right: 0; }
  .help-tabs { flex-direction: column; gap: 0; margin-top: 14px; padding-bottom: 8px; overflow: visible; }
  .help-tab { display: flex; align-items: center; gap: 14px; width: 100%; padding: 9px 2px; font-size: 11.5px; letter-spacing: .14em; text-align: left; }
  .help-tab::before { content: ""; flex: none; width: 7px; height: 7px; border: 1px solid var(--brass-line); rotate: 45deg; transition: background .3s ease, border-color .3s ease; }
  .help-tab::after { display: none; }
  .help-tab[aria-selected="true"]::before { background: var(--brass); border-color: var(--brass); }
}

/* Barres de défilement de TOUT le site, à l'image du thème : filet fin, curseur laiton à bouts carrés (page, fenêtres, listes
   déroulantes, champs de texte…). Chrome/Safari/Edge les dessinent avec ::-webkit-scrollbar ; Firefox n'a que scrollbar-width et
   scrollbar-color (Chrome, lui, ignorerait ::-webkit-scrollbar dès que ces deux propriétés existent : d'où le @supports qui les
   remet à « auto » pour lui). Les propriétés étant héritées, les poser sur :root suffit. */
:root { scrollbar-width: thin; scrollbar-color: color-mix(in srgb, var(--brass) 60%, transparent) transparent; }
@supports selector(::-webkit-scrollbar) {
  :root { scrollbar-width: auto; scrollbar-color: auto; }
  ::-webkit-scrollbar { width: 12px; height: 12px; }
  ::-webkit-scrollbar-track { background: transparent; }
  ::-webkit-scrollbar-track:vertical { background: linear-gradient(to right, transparent 5px, var(--line) 5px, var(--line) 6px, transparent 6px); }
  ::-webkit-scrollbar-track:horizontal { background: linear-gradient(to bottom, transparent 5px, var(--line) 5px, var(--line) 6px, transparent 6px); }
  ::-webkit-scrollbar-thumb { background: color-mix(in srgb, var(--brass) 60%, transparent); border: 4px solid transparent; background-clip: padding-box; border-radius: 0; transition: background .3s ease; }
  ::-webkit-scrollbar-thumb:hover { background: var(--brass); background-clip: padding-box; }
  ::-webkit-scrollbar-thumb:active { background: var(--brass-ink); background-clip: padding-box; }
  ::-webkit-scrollbar-button, ::-webkit-scrollbar-corner { display: none; }
}
/* « Comment ça marche ? » : titres de section bien visibles (grande taille, laiton, losange et filet) et tableau des chances */
.hw-sec h3 { display: flex; align-items: center; gap: 14px; margin: 0 0 16px; padding-bottom: 12px; border-bottom: 1px solid var(--brass-line); font-size: clamp(21px, 2.8vw, 26px); font-weight: 500; letter-spacing: .03em; line-height: 1.2; color: var(--brass-ink); text-wrap: balance; }
.hw-sec h3::before { content: ""; flex: none; width: 11px; height: 11px; rotate: 45deg; background: var(--brass); box-shadow: 0 0 0 3px color-mix(in srgb, var(--brass) 22%, transparent); }
.hw-sec { margin-bottom: 38px; }
.hw-note { font-size: 13.5px; color: var(--muted); }
.hw-tablewrap { margin: 16px 0 14px; overflow-x: auto; }
.hw-odds { width: 100%; min-width: 520px; border-collapse: collapse; font-size: 14px; font-variant-numeric: tabular-nums; }
.hw-odds th, .hw-odds td { padding: 10px 10px; border-bottom: 1px solid var(--line); text-align: right; vertical-align: middle; }
.hw-odds thead th { font-size: 11px; font-weight: 500; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); text-align: center; vertical-align: bottom; }
.hw-odds thead tr:first-child th { border-bottom: 0; padding-bottom: 4px; }
.hw-odds thead th[colspan], .hw-odds thead tr:first-child th[rowspan] { border-bottom: 1px solid var(--line); }   /* le filet sous l’en-tête court sur toute la largeur, cellules sur deux rangées comprises */
.hw-odds thead tr:first-child th[rowspan] { padding-bottom: 10px; }   /* même espace au-dessus du filet que les titres de la deuxième rangée */
.hw-odds thead th[rowspan] { text-align: left; }
.hw-odds thead th[rowspan]:nth-child(2) { text-align: right; }
.hw-odds tbody th { text-align: left; font-weight: 500; }
.hw-odds td b { display: block; font-weight: 500; }
.hw-odds td small { display: block; font-size: 11.5px; color: var(--muted); }
.hw-odds tbody tr:hover { background: var(--band); }

/* ---------- Petits écrans, écrans tactiles, survol, animations réduites ----------
   Regroupés ici, après tout le reste : ces règles doivent l'emporter sur celles des composants ci-dessus. */
/* Téléphone : le texte des boutons principaux peut passer à la ligne (centré), l'espacement des lettres se resserre */
@media (max-width: 480px) {
  .btn { max-width: 100%; gap: 12px; padding: 15px 18px; justify-content: center; white-space: normal; text-align: center; line-height: 1.35; letter-spacing: .14em; }
  .btn .lb { min-width: 0; }
  .tm-colorpop { padding: 8px 10px 12px 16px; }
  .coll-stats { flex-wrap: wrap; row-gap: 14px; }
  .coll-stats > div { padding: 0 12px; }
  .coll-stats dt { letter-spacing: .1em; }
}
/* Très petits écrans (320–380 px) : en-tête et losanges de rareté un peu plus serrés, pour tenir sans déborder */
@media (max-width: 380px) {
  .top-end { gap: 10px; }
  .brand { gap: 8px; letter-spacing: .16em; }
  .rar-picker { gap: 2px; padding: 0; }
  .rar-opt { width: 32px; }
}

/* Survol : seulement avec une souris. Au doigt, :hover « colle » après le toucher (carte soulevée, éventail levé…). */
@media (hover: hover) {
  .theme:hover { color: var(--text); box-shadow: inset 0 0 0 var(--edge) var(--brass-line); }
  .btn:hover:not(:disabled) { filter: brightness(1.16); }
  .btn:hover:not(:disabled)::after { opacity: .36; translate: -50% 0; }
  .btn:hover:not(:disabled) .dm { background: var(--on-brass); border-color: var(--on-brass); scale: 1.3; }
  .btn:hover:not(:disabled) .dm:first-child { translate: -6px 0; }
  .btn:hover:not(:disabled) .dm:last-child { translate: 6px 0; }
  .btn:active:not(:disabled) { filter: brightness(.95); }   /* après le survol, comme plus haut, pour qu'un clic l'emporte */
  .card:hover { translate: 0 -5px; }
  .card-front:hover .card-img img { transform: scale(1.04); }
  .rar-opt:hover i, .tm-swatch:hover i { scale: 1.15; }
  .tm-dot:hover i { scale: 1.25; }
}

/* Écrans tactiles */
@media (pointer: coarse) {
  /* iOS agrandit la page dès qu'on touche un champ écrit à moins de 16 px */
  .field input, .coll-search input, .pg-input, .sel select, .tm-input, .tm-row .tm-name, .tm-sub .tm-name, .tm-hex, .ctf-search, textarea { font-size: 16px; }
  /* Cibles d'au moins 40 px. Losanges thème et « ? » : zone invisible de 44 px, remise droite (le bouton est tourné à 45°) */
  .theme { position: relative; }
  .theme::before { content: ""; position: absolute; inset: -7px; rotate: -45deg; }
  .acct-pill.icon-only { padding: 11px; }
  .acct-pill.avatar-btn { padding: 7px; }
  .bottom-nav .acct-pill.avatar-btn { padding: 10px; }
  .modal-close { width: 44px; height: 44px; }
  .ctf-x { position: relative; width: 28px; height: 28px; }
  .ctf-x::before { content: ""; position: absolute; inset: -6px; }
  .tm-swatch { width: 36px; height: 40px; }
  .tm-grip { width: 34px; height: 40px; }
  .tm-dot, .tm-add, .tm-del, .tm-cancel { width: 40px; height: 40px; }
  .tag-main { padding-block: 10px; }
  .tag-caret { width: 40px; }
  .tag-sub, .ctf-opt { padding-block: 11px; }
  .tag-mode span[title] { padding: 10px 13px; }
  .help-tab { padding-block: 16px; }
  @media (max-width: 680px) { .help-tab { padding-block: 11px; } }
  .pg { min-width: 40px; height: 40px; }
  .pg-input { height: 40px; }
  .rar-opt input { inset: 0 -3px; }   /* la case invisible couvre aussi l'écart entre deux losanges */
  /* Poubelle d'une notification (24 px) et boutons ami/blocage du menu cloche (32 px) : zone invisible remise à 40 px,
     sans agrandir l'icône elle-même (mise en page compacte du menu et de la liste des notifications). */
  .nt-del::before { content: ""; position: absolute; inset: -8px; }
  .social-dd .fr-btn { position: relative; }
  .social-dd .fr-btn::before { content: ""; position: absolute; inset: -4px 0; }   /* pas d'extension horizontale : gap de 2px entre boutons voisins (.fr-actions) */
  /* Croix du bandeau Discord (26 px), « − » d'une carte d'échange (26 px), croix d'un emplacement de la vitrine (22 px), « changer de mission » (36 px) */
  .dc-close::before, .tr-minus::before, .vt-slot .vt-x::before, .jx-swap::before { content: ""; position: absolute; inset: -8px; }
  .jx-swap { position: relative; }
}
@media (pointer: coarse) and (max-width: 480px) {
  /* barre de pages sur téléphone : boutons de 36 px pour tenir sur une ligne, zone de toucher élargie sur les écarts */
  .pg { position: relative; min-width: 36px; }
  .pg::before { content: ""; position: absolute; inset: 0 -2px; }
}

/* Animations réduites : aucune animation en boucle, pas de mouvement au survol ni de défilement animé */
/* moins d'animations (boot.js, docs/animations.md) */ html:where([data-motion="reduce"]) { scroll-behavior: auto; }
  :where(:root[data-motion="reduce"]) .card, :where(:root[data-motion="reduce"]) .card-in, :where(:root[data-motion="reduce"]) .card-img img, :where(:root[data-motion="reduce"]) .nav-link, :where(:root[data-motion="reduce"]) .nav-link::after, :where(:root[data-motion="reduce"]) .slot, :where(:root[data-motion="reduce"]) .btn, :where(:root[data-motion="reduce"]) .btn::after, :where(:root[data-motion="reduce"]) .btn .dm { transition: none; }
  :where(:root[data-motion="reduce"]) .card.r7 .card-front { animation: none; }
  :where(:root[data-motion="reduce"]) .card.r5::after, :where(:root[data-motion="reduce"]) .card.r6::after, :where(:root[data-motion="reduce"]) .card.r7::before { animation: none; background-position: 40% 0; }
  :where(:root[data-motion="reduce"]) .hero::before, :where(:root[data-motion="reduce"]) .opener::before, :where(:root[data-motion="reduce"]) .jxp-page::before { animation: none; }
  :where(:root[data-motion="reduce"]) .cl-item.is-target { animation: none; }

/* === Stock de paquets (index) === */
/* Sous le bouton « Ouvrir un paquet » (compte connecté) : un losange par paquet disponible, le nombre, puis le compte à
   rebours du prochain paquet (public/assets/pack.js). */
.pack-stock { display: inline-flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px 14px; color: var(--muted); font-size: 13px; letter-spacing: .06em; font-variant-numeric: tabular-nums; }
.ps-gems { display: inline-flex; gap: 10px; padding: 0 3px; }
.ps-gems i { width: 9px; height: 9px; rotate: 45deg; border: 1px solid var(--brass); transition: background .4s ease, box-shadow .4s ease; }
.ps-gems i.on { background: var(--brass); box-shadow: 0 0 0 2px color-mix(in srgb, var(--brass) 22%, transparent); }
.ps-count { color: var(--text); font-size: 12px; font-weight: 500; letter-spacing: .18em; text-transform: uppercase; }
.ps-next { display: inline-flex; align-items: center; gap: 14px; }
.ps-next::before { content: ""; width: 5px; height: 5px; rotate: 45deg; background: var(--brass-line); }
.pack-stock.is-empty .ps-count { color: var(--brass-ink); }
/* Compteur du paquet doré : « Encore 12 paquets à ouvrir avant ton paquet doré » et une fine barre de progression (pack.js) */
.gold-track { display: grid; justify-items: center; gap: 8px; color: var(--muted); font-size: 13px; letter-spacing: .04em; }
.gt-text { display: inline-flex; align-items: center; gap: 10px; }
.gt-text::before { content: ""; flex: none; width: 7px; height: 7px; rotate: 45deg; background: #e2b84f; box-shadow: 0 0 0 2px color-mix(in srgb, #e2b84f 25%, transparent); }
.gt-bar { display: block; width: 150px; height: 3px; background: var(--brass-line); overflow: hidden; }
.gt-bar i { display: block; height: 100%; width: 0; background: linear-gradient(90deg, #b8862a, #f3d982); transition: width .6s ease; }
.gold-track.is-ready { color: var(--brass-ink); }
.gold-track.is-ready .gt-text { font-weight: 500; letter-spacing: .1em; text-transform: uppercase; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .gt-bar i { transition: none; }
/* Compteur du paquet diamanté : un losange par paquet doré à ouvrir, allumé (bleu glacier) une fois ouvert */
.diamond-track { display: grid; justify-items: center; gap: 8px; color: var(--muted); font-size: 13px; letter-spacing: .04em; }
.dt-gems { display: inline-flex; gap: 10px; }
.dt-gems i { width: 8px; height: 8px; rotate: 45deg; border: 1px solid color-mix(in srgb, #9fd3f0 55%, transparent); transition: background .4s ease, box-shadow .4s ease; }
.dt-gems i.on { background: linear-gradient(135deg, #ffffff, #9fd3f0 55%, #5aa7d6); border-color: #cfeaff; box-shadow: 0 0 6px color-mix(in srgb, #9fd3f0 70%, transparent); }
.diamond-track.is-ready { color: var(--text); }
.diamond-track.is-ready .dt-text { font-weight: 500; letter-spacing: .1em; text-transform: uppercase; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .dt-gems i { transition: none; }
.tag-mode-help { font-size: 12px; }
#pack { scroll-margin-top: 100px; }   /* ouverture d'un paquet : la liste s'arrête sous l'en-tête collant */
.opener-stage { scroll-margin-top: 100px; }   /* clic sur le paquet, page déjà défilée (pack.js) : on s'arrête sur la scène, pas en haut de la page */
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .ps-gems i { transition: none; }

/* Page « Paquets » (joueur connecté) : seulement le bouton, le stock de paquets et les cartes tirées */
.opener { padding-top: clamp(56px, 9vw, 112px); }
/* Visiteur : après son premier paquet, le bouton d'ouverture cède la place à « Inscris-toi » et « Connecte-toi » */
.cta-pair { display: flex; flex-wrap: wrap; justify-content: center; gap: 14px 20px; }
.cta-pair .btn { text-decoration: none; }
/* Pied de page en bas de la fenêtre même quand la page est courte (connexion, paramètres…) */
body { display: flex; flex-direction: column; min-height: 100vh; min-height: 100dvh; box-sizing: border-box; }
body > main { flex: 1 0 auto; }
body > .foot { flex: none; }
.btn[hidden] { display: none; }   /* .btn est en inline-flex : sans cette règle l'attribut hidden serait sans effet */

/* Page « Paquets » : l'éventail de l'accueil tourne aussi en haut de la page (règle .hero::before, partagée) */
.opener { position: relative; isolation: isolate; text-align: center; }
/* Les phases (home/opening/reveal) montrent et cachent l'encart, le paquet et les cartes : le défilement de la page
   est déjà géré à la main (pack.js : scrollTopNow, glide) ; sans ceci, le recalage automatique du navigateur (scroll
   anchoring) se superpose à ces changements de hauteur et, sur Firefox, s'anime visiblement par à-coups. */
.opener { overflow-anchor: none; }
/* Lien « Comment ça marche ? » : un bouton qui a l'air d'un lien (il ouvre la fenêtre d'aide sur son onglet) */
.link-btn { appearance: none; padding: 4px 2px; border: 0; background: none; color: var(--brass-ink); font: inherit; font-size: 14px; letter-spacing: .02em; text-decoration: underline; text-decoration-color: var(--brass-line); text-underline-offset: 4px; cursor: var(--cur-hand); transition: text-decoration-color .3s ease, color .3s ease; }
.link-btn:hover, .link-btn:focus-visible { color: var(--text); text-decoration-color: var(--brass); }
.link-btn:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }

/* Menu « Compte » de la barre du bas (mobile) : entrées « thème » et « Informations & Aide », qui ont quitté l'en-tête masqué */
.acct-toggle { position: relative; }
.acct-anchor { position: relative; display: inline-flex; }
.acct-dropdown .menu-link { font: inherit; font-size: 13px; }

/* Collection sur mobile : 3 cartes par ligne (2 sur les tout petits écrans, 3 à 4 sur les grands téléphones) ; la description des cartes
   se masque d'elle-même sous 150 px de large (petit format), voir @container plus haut. Sept lignes par page (collection-pages.js). */
@media (max-width: 760px) { .cards.collection { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 14px 12px; } }
@media (max-width: 520px) { .cards.collection { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px 8px; } }
@media (max-width: 330px) { .cards.collection { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* Petit format (cartes de ~105 px sur mobile, sans description) : textes resserrés pour que titre sur 2 lignes, rareté et vues tiennent */
@container (max-width: 140px) {
  .card-body { padding-top: 6.6cqw; gap: 1cqw; }
  .card-body h3 { font-size: max(10.5px, 8.6cqw); line-height: 1.15; }
  .tag { font-size: max(8.5px, 3.6cqw); letter-spacing: .12em; padding-left: .12em; }
  .vw { font-size: max(9px, 3.8cqw); }
}
.bottom-nav .acct-dropdown { min-width: 230px; }
.acct-dropdown .menu-link span { white-space: nowrap; }

/* ---------- Paramètres : titre de la page, puis les cartes (un seul bloc étroit et centré sur téléphone et tablette ;
   sur ordinateur, deux colonnes qui occupent la largeur de la page) ---------- */
.auth-card h2 { margin: 0 0 10px; font-size: clamp(20px, 2.6vw, 26px); font-weight: 400; letter-spacing: .16em; text-transform: uppercase; text-align: center; }
.settings-head { max-width: 440px; margin: 0 auto 36px; text-align: center; }
.settings-head h1 { margin: 0 0 8px; font-size: clamp(26px, 3.4vw, 40px); font-weight: 300; letter-spacing: .14em; text-transform: uppercase; line-height: 1.2; }
.settings-head .lead-sm { margin: 0; color: var(--muted); font-size: 14px; }
.settings .auth-card { width: 100%; }
.settings .auth-card + .auth-card { margin-top: 0; }
.settings .field-pair { display: block; }
@media (min-width: 1000px) {
  .settings-head { max-width: 1240px; margin-inline: auto; margin-bottom: 44px; text-align: left; }
  .settings .auth-card { max-width: none; margin: 0; padding: 40px 44px 44px; }
  .settings .auth-card h2 { text-align: left; }
  .settings .auth-card .lead-sm { text-align: left; }
  .settings .auth-card .btn { width: auto; min-width: 240px; justify-self: start; }
  .settings .field-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 0 20px; }
  .settings .avatar-grid { gap: 14px; margin: 6px 0 28px; }
  .settings .field { max-width: 520px; }
  .settings .field-pair .field { max-width: none; }
}
@media (min-width: 1500px) { .settings .avatar-grid { gap: 18px; } }
.settings .field { align-content: start; }   /* deux champs côte à côte : le plus court ne s'étire pas à la hauteur de l'autre (petit texte d'aide) */
.settings-msg { max-width: 440px; margin: -12px auto 28px; }
@media (min-width: 1000px) { .settings-msg { max-width: 1240px; margin: -20px auto 32px; } }
/* Barre flottante « Modifications non enregistrées » + « Enregistrer » (assets/settings.js) : centrée en bas de la fenêtre, au-dessus de la barre mobile */
.save-bar { position: fixed; z-index: 60; left: 50%; bottom: 24px; translate: -50% 0; display: flex; align-items: center; justify-content: center; gap: 12px 24px; width: max-content; max-width: calc(100vw - 24px); padding: 12px 14px 12px 24px; background: var(--surface); border: 1px solid var(--brass-line); border-top: 2px solid var(--brass); box-shadow: 0 14px 44px rgba(0, 0, 0, .4); }
.save-bar[hidden] { display: none; }
.save-bar:not([hidden]) { animation: sb-in .35s var(--ease) backwards; }
.save-bar.is-leaving { animation: sb-out .22s ease-in both; }
.sb-text { display: inline-flex; align-items: center; gap: 12px; color: var(--text); font-size: 13.5px; letter-spacing: .04em; }
.sb-text::before { content: ""; flex: none; width: 8px; height: 8px; rotate: 45deg; background: var(--brass); box-shadow: 0 0 0 3px color-mix(in srgb, var(--brass) 25%, transparent); }
.save-bar .btn { padding: 13px 24px; }
@keyframes sb-in { from { opacity: 0; translate: -50% 18px; } }
@keyframes sb-out { to { opacity: 0; translate: -50% 18px; } }
@media (max-width: 760px) {
  .save-bar { bottom: calc(76px + env(safe-area-inset-bottom, 0px)); flex-wrap: wrap; padding: 12px 14px; }
  .sb-text { font-size: 13px; }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .save-bar:not([hidden]), :where(:root[data-motion="reduce"]) .save-bar.is-leaving { animation: none; }
/* Fenêtre « Quitter sans enregistrer ? » : titre, phrase, puis les trois choix */
.modal-box.leave-box { display: block; width: min(520px, 100%); text-align: center; }
.leave-box h2 { margin: 0 0 12px; font-size: clamp(20px, 3vw, 26px); font-weight: 400; line-height: 1.25; }
.leave-box p { margin: 0 0 26px; color: var(--muted); text-wrap: pretty; }
.leave-actions { display: grid; justify-items: center; gap: 14px; }
.leave-actions .btn { width: min(100%, 340px); justify-content: center; }
/* =====================================================================================================================================================================================
   SYSTÈME DE BOUTONS : trois niveaux, choisis selon l'IMPORTANCE de l'action (jamais selon la page). Tous les boutons du site en sont un ; en PHP, Ui::btn() ; en JavaScript, WikiCollect.btn() (site.js).
     .btn            PRINCIPAL  : l'action que la page attend du joueur (une par zone) ; aplat laiton, gradins, petits losanges <i class="dm"> de part et d'autre du texte (définition plus haut).
                     Variante rouge : .btn.btn-danger (suppression).
     .btn-secondary  SECONDAIRE : l'autre choix, à côté d'un bouton principal (Annuler, Refuser, Revoir les corrections…) ; sans bordure, fond laiton léger, mêmes gradins. S'écrit « btn btn-secondary ».
     .btn-sm         TAILLE COMPACTE du principal et du secondaire (dans une carte, une liste, un menu) : mêmes couleurs et mêmes gradins, sans losanges. S'écrit « btn btn-sm » ou « btn btn-secondary btn-sm ».
     .btn-tertiary   TERTIAIRE  : action d'appoint sur un élément (Favoris, Améliorer le style, Étiquettes, Signaler…) ; simple filet laiton, icône à gauche (SVG de 18 px), majuscules espacées.
                     États : .is-on (actif : plein laiton), .is-danger (rouge au survol), .is-confirm (second clic de confirmation, rouge plein).
   Exceptions volontaires, avec leur propre dessin : .refill-btn (« Recharger le stock ») et .rc-btn (« Recycler »). Ne sont pas des boutons d'action : croix de fermeture, flèches, icônes de l'en-tête, onglets,
   pagination, lignes de menu, liens soulignés (.link-btn, .sel-clear). Les classes historiques (fav-btn, tags-open, sel-btn, pf-act…) ne servent plus qu'à retrouver l'élément en JavaScript.
   ===================================================================================================================================================================================== */
.btn-secondary { background: color-mix(in srgb, var(--brass) 16%, transparent); color: var(--brass-ink); --on-brass: var(--brass-ink); transition: background .3s ease; }
.btn.btn-secondary:hover:not(:disabled), .btn.btn-secondary:focus-visible { filter: none; background: color-mix(in srgb, var(--brass) 30%, transparent); }
.btn.btn-secondary:active:not(:disabled) { filter: none; background: color-mix(in srgb, var(--brass) 38%, transparent); }
.btn.btn-secondary.is-danger:hover:not(:disabled), .btn.btn-secondary.is-danger:focus-visible { color: #d9483f; --on-brass: #d9483f; background: color-mix(in srgb, #d9483f 14%, transparent); }

.btn.btn-sm { --s: 3px; gap: 8px; min-height: 40px; padding: 0 18px; justify-content: center; font-size: 11.5px; letter-spacing: .18em; line-height: 1.2; }
.btn.btn-sm .dm { display: none; }
@media (max-width: 480px) { .btn.btn-sm { min-height: 44px; padding: 0 14px; letter-spacing: .14em; } }

.btn.is-loading { opacity: .7; pointer-events: none; }   /* clic sur un bouton-lien qui change de page : retour immédiat pendant le chargement */

.btn-tertiary {
  appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: 9px; min-height: 40px; padding: 0 16px; border: 1px solid var(--brass-line); background: none; color: var(--brass-ink);
  font: 500 12px/1 var(--font); letter-spacing: .14em; text-transform: uppercase; text-decoration: none; white-space: nowrap; cursor: var(--cur-hand); -webkit-user-select: none; user-select: none;
  transition: background .3s ease, border-color .3s ease, color .3s ease;
}
.btn-tertiary:hover:not(:disabled), .btn-tertiary:focus-visible, .btn-tertiary[aria-expanded="true"] { background: color-mix(in srgb, var(--brass) 14%, transparent); border-color: var(--brass); }
.btn-tertiary:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.btn-tertiary:disabled { opacity: .5; cursor: var(--cur-blocked); }
.btn-tertiary svg { flex: none; width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; transition: fill .25s ease, scale .25s var(--ease); }
.btn-tertiary:active svg { scale: .85; }
.btn-tertiary.is-on { background: var(--brass); border-color: var(--brass); color: var(--on-brass); }
:root[data-theme="light"] .btn-tertiary.is-on { background: var(--brass-ink); border-color: var(--brass-ink); }   /* texte ivoire lisible (≈ 5,7:1) */
.btn-tertiary.is-on svg { fill: currentColor; }
.btn-tertiary.is-danger:hover:not(:disabled), .btn-tertiary.is-danger:focus-visible { color: #d9483f; border-color: #d9483f; background: none; }
.btn-tertiary.is-confirm, .btn-tertiary.is-confirm:hover:not(:disabled) { color: #fff; background: #b8453f; border-color: #b8453f; }
@media (pointer: coarse) { .btn-tertiary { min-height: 44px; } }

/* ================= Page « Paquets » : le paquet 3D (assets/pack3d.js) ================= */
/* La scène du paquet et les cartes tirées occupent la MÊME case : les cartes prennent la place du paquet une fois ouvert. */
.opener-stage { display: grid; }
.opener-stage > * { grid-area: 1 / 1; min-width: 0; }
/* Sortie des cartes : elles partent DANS le sachet, donc la scène du paquet passe devant elles le temps de leur montée (retirée ensuite : les cartes redeviennent cliquables) */
.opener-stage > .pack { position: relative; z-index: 1; }
.opener[data-emerge] .pack-stage, .pack-demo[data-emerge] .pack-stage { z-index: 2; }   /* accueil visiteurs (.pack-demo) : même sortie des cartes que la page Paquets */


/* Cartes qui sortent du paquet, puis (option) à retourner soi-même */
.cards.is-leaving { opacity: 0; transition: opacity .28s ease; }
.card.is-facedown { cursor: var(--cur-hand); }
.card.is-facedown:hover { translate: 0 -6px; }
.card.is-facedown:focus-visible { outline: 2px solid var(--brass); outline-offset: 4px; }
.opener .cta { --cta-gap: 12px; margin-top: 6px; gap: var(--cta-gap); }
.opener .cta .btn { margin-top: 10px; }
.ps-next:empty, .opener .hint:empty { display: none; }
.opener .cta [hidden] { display: none; }
@media (max-width: 760px) {
  .opener { padding-top: 24px; }
}
.opener-stage > .pack { align-self: center; }

/* ================= Page « Paquets » : phases (home -> opening -> reveal) et pile de cartes sur mobile ================= */
/* Pas de bouton « Ouvrir un paquet » : le paquet EST le bouton (libellé lu par les lecteurs d'écran seulement) */
/* Dès qu'on ouvre un paquet, toutes les autres informations disparaissent (stock, aide, option…) jusqu'à « Continuer » ; le pied de page reste */
.opener .cta { transition: opacity .5s ease .1s, visibility 0s; }
.opener[data-phase="opening"] .cta { opacity: 0; visibility: hidden; pointer-events: none; transition: opacity .3s ease, visibility 0s .3s; }   /* on garde la place : le pied de page ne bouge pas pendant la déchirure */
.opener[data-phase="reveal"] .cta { display: none; }   /* la place est rendue quand les cartes sortent : le pied de page glisse (pack.js, glide) */
.pack { position: relative; }
.pack-final { display: grid; justify-items: center; gap: 22px; margin-top: 72px; opacity: 0; visibility: hidden; transition: opacity .8s ease, visibility 0s .8s; }
.pack-final.is-shown { opacity: 1; visibility: visible; transition: opacity .8s ease; }
.pack-final .pack-note { margin: 0; }
.reveal-hint { margin: 0; min-height: 1.5em; color: var(--muted); font-size: 14px; text-align: center; }
.cards-wrap { position: relative; }
.deck-bar[hidden] { display: none; }

@media (max-width: 760px) {
  /* L'option « retourner soi-même » n'existe pas sur mobile : c'est toujours au joueur de révéler ses cartes (pack.js, deckMode : même seuil de 760 px) */
  /* « Continuer » juste sous les flèches de la pile (toujours à l'écran), la note en dessous ; la consigne vide ne prend plus de place */
  .pack { padding: 26px 0 40px; }   /* le haut des cartes tombe à 50 px du haut de l'écran, comme celui du paquet */
  .pack-final { margin-top: 16px; gap: 14px; }
  .pack-final .btn { order: -1; margin-top: 0; }
  .reveal-hint { min-height: 0; margin-top: 18px; padding: 0 16px; }
  .reveal-hint:empty { display: none; }
  /* Les cartes forment une pile : celle du dessus, en grand ; on la fait glisser à droite pour révéler la suivante, à gauche pour revenir en arrière */
  .cards.deck { display: block; position: relative; width: min(76vw, 320px); width: min(76vw, 320px, calc((100vh - 310px) * 5 / 7)); width: min(76vw, 320px, calc((100dvh - 310px) * 5 / 7)); aspect-ratio: 5 / 7; margin: 0 auto; touch-action: pan-y; -webkit-user-select: none; user-select: none; }
  .cards.deck > .card { position: absolute; inset: 0; width: 100% !important; height: 100%; aspect-ratio: auto; grid-column: auto !important; margin: 0 !important; transition: transform .34s cubic-bezier(.2, .85, .25, 1), opacity .25s ease, filter .25s ease; }
  .cards.deck .card-in { transition-duration: .28s; }   /* retournement rapide : on ne s'attarde pas sur le dos */
  .cards.deck > .card:hover { translate: none; }
  .cards.deck > .card[data-pos="top"] { z-index: 20; cursor: var(--cur-hand); }
  .cards.deck > .card[data-pos="behind"] { pointer-events: none; z-index: calc(10 - var(--k)); transform: translate(calc(var(--k) * 3px), calc(var(--k) * 10px)) rotate(calc(var(--k) * 1.5deg)) scale(calc(1 - var(--k) * .035)); filter: brightness(calc(1 - var(--k) * .16)); }
  .cards.deck > .card[data-pos="out"] { pointer-events: none; z-index: 1; opacity: 0; transform: translateX(-125%) rotate(-12deg); }
  .deck-bar[hidden] { display: flex; visibility: hidden; opacity: 0; pointer-events: none; transition: opacity .3s ease, visibility 0s .3s; }   /* la place reste réservée : rien ne bouge quand les flèches apparaissent */
  .deck-bar { min-height: 44px; transition: opacity .7s ease .1s, visibility 0s; display: flex; align-items: center; justify-content: space-between; box-sizing: border-box; width: min(100%, 360px); padding: 0 12px; margin: 46px auto 0; }
  /* Flèches : deux losanges laiton (comme les boutons thème et aide), chevron droit dedans */
  .deck-nav { appearance: none; flex: none; display: grid; place-items: center; width: 44px; height: 44px; padding: 0; border: 0; rotate: 45deg; background: color-mix(in srgb, var(--surface) 90%, transparent); box-shadow: inset 0 0 0 1.84px var(--brass-line), 0 6px 16px rgba(0, 0, 0, .4); color: var(--brass-ink); cursor: var(--cur-hand); -webkit-tap-highlight-color: transparent; transition: box-shadow .3s ease, color .3s ease, opacity .3s ease, background .3s ease; }
  .deck-nav svg { width: 20px; height: 20px; rotate: -45deg; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
  .deck-nav.prev svg { translate: -1px 1px; } .deck-nav.next svg { translate: 1px -1px; }
  .deck-nav:not(:disabled):active { background: color-mix(in srgb, var(--brass) 26%, var(--surface)); color: var(--text); }
  .deck-nav:disabled { opacity: .25; cursor: var(--cur-default); }
  .deck-nav.is-hint:not(:disabled) { box-shadow: inset 0 0 0 1.84px var(--brass), 0 0 0 0 color-mix(in srgb, var(--brass) 40%, transparent), 0 6px 16px rgba(0, 0, 0, .4); animation: deck-nudge 2s ease-in-out infinite; }
  @keyframes deck-nudge { 50% { box-shadow: inset 0 0 0 1.84px var(--brass), 0 0 0 9px color-mix(in srgb, var(--brass) 0%, transparent), 0 6px 16px rgba(0, 0, 0, .4); } 0% { box-shadow: inset 0 0 0 1.84px var(--brass), 0 0 0 0 color-mix(in srgb, var(--brass) 45%, transparent), 0 6px 16px rgba(0, 0, 0, .4); } }
  .deck-dots { display: flex; align-items: center; gap: 12px; padding: 14px 6px; margin: -14px -6px; }   /* zone sensible élargie : un toucher sur un losange revoit la carte (pack.js) */
  .deck-dots:has(i.seen) { cursor: var(--cur-hand); }
  .deck-dots i { width: 9px; height: 9px; rotate: 45deg; border: 1px solid var(--brass); transition: background .3s ease, scale .3s ease; }
  .deck-dots i.seen { background: color-mix(in srgb, var(--brass) 55%, transparent); }
  .deck-dots i.cur { background: var(--brass); scale: 1.5; }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .deck-nav.is-hint:not(:disabled) { animation: none; }

/* Ordinateur : le paquet qui flotte et la rangée des 5 cartes ont le même centre, au milieu de la hauteur de la fenêtre.
   La scène (500 px de haut) commence sous l'en-tête (77 px) : on règle le haut de la page pour que son centre tombe à 50 % de la fenêtre
   (56 px au moins sur les petites fenêtres). « Continuer » et la note passent sous les cartes, hors de la mise en page : ils ne les décalent plus. */
@media (min-width: 761px) {
  .opener { padding-top: max(28px, calc(50vh - 77px - (350px * var(--pk, 1) + 150px + 60px) / 2 - 30px)); }   /* 77 px : l'en-tête ; la scène mesure 350 px × --pk + 150 px, plus 60 px pour le nom de la zone et ses losanges */
  .pack-carousel > .pack-stage { margin-top: 45px; }   /* le nom de la zone et ses losanges occupent déjà le haut de la marge */
  .opener .pack { padding: 0; }
  .opener .reveal-hint { display: none; }   /* consigne de la pile de cartes : téléphone seulement */
  .opener .pack-final { position: absolute; left: 0; right: 0; top: 100%; margin-top: 44px; }
  .opener[data-phase="reveal"] .opener-stage { margin-bottom: 160px; }   /* la place de « Continuer » et de la note (le pied de page glisse, voir pack.js) */
  /* Paquet diamanté (10 cartes, deux rangées) : la rangée est rétrécie pour que les deux tiennent dans la fenêtre avec « Continuer » dessous
     (hauteur de deux rangées ≈ 0,58 × leur largeur ; 240 px de marge : l'en-tête, le haut de la page et la place de « Continuer »), et le haut de la page remonte : rien ne descend dans le pied de page */
  .opener .cards.is-ten { max-width: min(100%, calc((100vh - 290px) * 1.78 + 40px)); margin-inline: auto; }
  .opener .pack:has(.cards.is-ten) .pack-final { margin-top: 32px; }
  .opener[data-phase="reveal"]:has(.cards.is-ten) { padding-top: 28px; }
}


/* Menu du visiteur (bonhomme) : aligné sur le bord droit du bouton, jamais centré, pour ne pas dépasser de l'écran */
.burger-menu .acct-dropdown { left: auto; right: 0; translate: none; max-width: calc(100vw - 24px); }

/* « Comment ça marche ? » sur téléphone : le tableau des chances devient une liste de petites fiches (plus de défilement sur les côtés) */
@media (max-width: 620px) {
  .hw-tablewrap { overflow: visible; margin-inline: 0; }
  .hw-odds, .hw-odds tbody { display: block; min-width: 0; width: 100%; }
  .hw-odds thead { display: none; }
  .hw-odds tbody tr { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px 10px; padding: 12px 0; border-bottom: 1px solid var(--line); }
  .hw-odds tbody th, .hw-odds td { padding: 0; border: 0; text-align: left; }
  .hw-odds tbody th { grid-column: 1 / 3; }
  .hw-odds td:nth-of-type(1) { grid-column: 3; text-align: right; color: var(--muted); font-size: 13px; white-space: nowrap; }
  .hw-odds td:nth-of-type(n+2)::before { content: attr(data-label); display: block; margin-bottom: 2px; font-size: 9.5px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase; color: var(--muted); }
  .hw-odds td b { font-size: 15px; }
  .hw-rar li { flex-wrap: wrap; }
}

/* Page de texte (Sources & licences…) */
.doc { max-width: 760px; padding: clamp(40px, 7vw, 80px) 0 64px; overflow-wrap: break-word; }
.doc h1 { margin: 0 0 12px; font-size: clamp(26px, 4vw, 40px); font-weight: 300; letter-spacing: .12em; text-transform: uppercase; line-height: 1.2; }
.doc-lead { margin: 0 0 32px; color: var(--muted); }
.doc h2 { margin: 30px 0 8px; font-size: 18px; font-weight: 500; letter-spacing: .04em; color: var(--brass-ink); }
.doc p { margin: 0 0 12px; text-wrap: pretty; }
.doc a { color: var(--brass-ink); }
.doc a.btn { color: var(--on-brass); }   /* un lien qui a l'allure d'un bouton (espace admin) garde le texte du bouton */
.doc h3 { margin: 22px 0 6px; font-size: 15px; font-weight: 500; letter-spacing: .06em; color: var(--text); }
.doc h4 { margin: 16px 0 6px; font-size: 14px; font-weight: 500; letter-spacing: .04em; color: var(--brass-ink); }   /* sous-section (politique de confidentialité : un évènement) */
.doc ul { margin: 0 0 12px; padding-left: 20px; }
.doc li { margin: 0 0 8px; text-wrap: pretty; }
.doc li::marker { color: var(--brass); }
.doc code { padding: 1px 6px; background: var(--band); font-size: .92em; overflow-wrap: anywhere; }
.doc section[id] { scroll-margin-top: 96px; }
/* Repère d'une information à renseigner (content/legal.php) : impossible à rater avant la mise en ligne */
.todo { padding: 1px 6px; background: rgba(217, 72, 63, .22); border: 1px dashed #d9483f; color: var(--text); font-weight: 500; }

/* Collection sur téléphone : « Trier et filtrer » est un bouton qui déplie le panneau des tris, filtres et étiquettes (voir collection-panel.js).
   Un point sur le bouton signale des filtres actifs (le lien « Réinitialiser » n'existe que dans ce cas). */
.coll-toggle { display: none; }
@media (max-width: 760px) {
  .coll-toggle:not([hidden]) { display: flex; width: 100%; min-height: 46px; margin-top: 18px; padding: 0 16px; -webkit-tap-highlight-color: transparent; }
  .coll-toggle .ct-chev { width: 16px; height: 16px; margin-left: 2px; transition: rotate .3s ease; }
  .coll-toggle[aria-expanded="true"] .ct-chev { rotate: 180deg; }
  .coll-toggle .ct-dot { display: none; flex: none; width: 7px; height: 7px; rotate: 45deg; background: var(--brass); }
  .coll-panel:has(#coll-reset) .coll-toggle .ct-dot { display: block; }
  /* replié : hauteur 0 (grille à 0fr) et contenu invisible ; déplié : hauteur naturelle. La hauteur s'anime, le contenu sous le panneau suit. */
  .coll-panel.has-toggle .coll-more { display: grid; grid-template-rows: 0fr; visibility: hidden; opacity: 0; transition: grid-template-rows .4s var(--ease), opacity .3s ease, visibility 0s .4s; }
  .coll-panel.has-toggle.is-open .coll-more { grid-template-rows: 1fr; visibility: visible; opacity: 1; transition: grid-template-rows .4s var(--ease), opacity .4s ease .05s, visibility 0s; }
  .coll-panel.has-toggle .cm-inner { min-height: 0; overflow: hidden; }
  .coll-panel.has-toggle.is-open:not(.is-moving) .cm-inner { overflow: visible; }
  .coll-more .coll-filters { margin-top: 20px; padding-top: 22px; }
}

/* Titre sans sous-titre (Connexion) : l'espace sous le titre est celui d'un sous-titre */
.auth-card h1:not(:has(+ .lead-sm)) { margin-bottom: 28px; }

/* Boutons, menus et liens de navigation : jamais sélectionnés comme du texte (double-clic, appui long, glissement) sur ordinateur comme sur mobile */
button, summary, [role="button"], .btn, .link-btn, .nav-link, .menu-link, .acct-pill, .pg, .foot-links a, .top a, .bottom-nav a, .pager a, .deck-bar, .dup-toggle, .rar-opt, .tag-mode label { -webkit-user-select: none; user-select: none; }

/* ================= Apparitions, disparitions et mouvements doux ================= */
@keyframes wc-fade-in { from { opacity: 0; } }
@keyframes wc-fade-out { to { opacity: 0; } }
@keyframes wc-pop-in { from { opacity: 0; transform: translateY(-6px) scale(.97); } }
@keyframes wc-pop-out { to { opacity: 0; transform: translateY(-4px) scale(.98); } }
@keyframes wc-pop-up-in { from { opacity: 0; transform: translateY(6px) scale(.97); } }
@keyframes wc-pop-up-out { to { opacity: 0; transform: translateY(4px) scale(.98); } }
@keyframes wc-rise-in { from { opacity: 0; transform: translateY(16px) scale(.985); } }
@keyframes wc-rise-out { to { opacity: 0; transform: translateY(10px) scale(.99); } }

/* Chaque page arrive en fondu ; les résultats de la collection aussi quand ils sont remplacés (tri, filtre, page) */
main { animation: wc-fade-in .45s ease backwards; }
/* Page Paquets : pas de fondu sur <main>, qui contient le paquet 3D (une opacité animée au-dessus de plans 3D à face cachée peut les faire disparaître
   pour de bon sur Chromium et les navigateurs mobiles). Le reste de la page et les faces du paquet apparaissent en fondu séparément. */
main.opener { animation: none; }
main.opener > h1, main.opener .cta, main.opener .pack-tip { animation: wc-fade-in .45s ease backwards; }
[data-part="results"] { animation: wc-fade-in .35s ease backwards; }

/* Menus déroulants (Compte, visiteur) : ils s'ouvrent et se ferment en glissant un peu ; celui de la barre du bas s'ouvre vers le haut */
.acct-dropdown:not([hidden]) { animation: wc-pop-in .2s var(--ease) backwards; transform-origin: 50% 0; }
.acct-dropdown.is-leaving { animation: wc-pop-out .15s ease-in both; }
.bottom-nav .acct-dropdown:not([hidden]) { animation-name: wc-pop-up-in; transform-origin: 100% 100%; }
.bottom-nav .acct-dropdown.is-leaving { animation-name: wc-pop-up-out; }

/* Listes des étiquettes et des filtres */
.tag-menu:not([hidden]), .ctf-panel:not([hidden]), .tm-colorpop:not([hidden]), .tm-addsub:not([hidden]), .multi[open] .multi-panel { animation: wc-pop-in .2s var(--ease) backwards; }
.tag-menu.is-leaving, .ctf-panel.is-leaving { animation: wc-pop-out .15s ease-in both; }

/* Fenêtres (carte, aide, étiquettes) : le fond apparaît en fondu, la boîte monte doucement ; à la fermeture, l'inverse */
.modal:not([hidden]) { animation: wc-fade-in .25s ease backwards; }
.modal:not([hidden]) .modal-box { animation: wc-rise-in .35s var(--ease) backwards; }
.modal.is-leaving { animation: wc-fade-out .2s ease both; }
.modal.is-leaving .modal-box { animation: wc-rise-out .2s ease both; }

/* Page « Paquets » : au retour de « Continuer », le paquet neuf et les informations reviennent en fondu */
.opener.is-arriving .p3-leaf, .opener.is-arriving .cta, .opener.is-arriving .pack-tip { animation: wc-fade-in .7s ease backwards; }

/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) main, :where(:root[data-motion="reduce"]) [data-part="results"], :where(:root[data-motion="reduce"]) .acct-dropdown, :where(:root[data-motion="reduce"]) .tag-menu, :where(:root[data-motion="reduce"]) .ctf-panel, :where(:root[data-motion="reduce"]) .tm-colorpop, :where(:root[data-motion="reduce"]) .tm-addsub, :where(:root[data-motion="reduce"]) .multi-panel, :where(:root[data-motion="reduce"]) .modal, :where(:root[data-motion="reduce"]) .modal-box, :where(:root[data-motion="reduce"]) .opener.is-arriving .p3-leaf, :where(:root[data-motion="reduce"]) .opener.is-arriving .cta, :where(:root[data-motion="reduce"]) main.opener .cta, :where(:root[data-motion="reduce"]) main.opener .pack-tip, :where(:root[data-motion="reduce"]) .pack-stage.p3-in .p3-leaf { animation: none !important; }
  :where(:root[data-motion="reduce"]) .coll-panel.has-toggle .coll-more, :where(:root[data-motion="reduce"]) .deck-bar, :where(:root[data-motion="reduce"]) .opener .cta { transition: none !important; }

/* Inscription : cases à cocher obligatoires (âge, mentions légales et confidentialité) */
.consents { display: grid; gap: 12px; margin: 4px 0 18px; }
.check { display: flex; align-items: flex-start; gap: 12px; font-size: 13.5px; line-height: 1.5; color: var(--muted); cursor: var(--cur-hand); }
.check input { position: absolute; opacity: 0; width: 0; height: 0; }
.check .dup-box { margin-top: 7px; }
.check input:checked + .dup-box { background: var(--brass); }
.check:has(input:focus-visible) { outline: 2px solid var(--brass); outline-offset: 4px; }
.check a { color: var(--brass-ink); }

/* Fiche d'une carte : lien discret « Signaler l'image » */
.modal-report { margin: 18px 0 0; }
.modal-report .link-btn { color: var(--muted); font-size: 12.5px; text-decoration-color: color-mix(in srgb, var(--muted) 40%, transparent); }
/* « Signaler la carte ou son image » : sur un écran étroit, le texte passe sur deux lignes (le bouton grandit en hauteur) au lieu de dépasser du cadre */
.modal-report .btn-tertiary { max-width: 100%; box-sizing: border-box; padding-block: 10px; line-height: 1.35; white-space: normal; text-wrap: balance; text-align: center; overflow-wrap: anywhere; }

/* Espace admin (dossier au nom aléatoire de public/, src/Admin.php) */
.doc.admin { max-width: 1120px; }
.admin-nav { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 22px; margin: -8px 0 28px; padding-bottom: 14px; border-bottom: 1px solid var(--line); font-size: 14px; }
.admin-nav a { color: var(--muted); text-decoration: none; letter-spacing: .04em; }
.admin-nav a:hover, .admin-nav a[aria-current] { color: var(--brass-ink); }
.admin-nav form { margin: 0 0 0 auto; }
.admin-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 14px; margin: 0; }
.admin-stats > div { padding: 18px 20px; background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--brass); }
.admin-stats dt { font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.admin-stats dd { margin: 6px 0 0; font-size: 30px; font-weight: 300; }
.admin-stats a { color: var(--brass-ink); }
.admin-report { display: flex; gap: 22px; margin: 0 0 22px; padding: 20px; background: var(--surface); border: 1px solid var(--line); border-top: 2px solid var(--brass); }
.admin-thumb { flex: none; width: 150px; min-height: 100px; display: grid; place-items: center; background: var(--card); color: var(--muted); font-size: 13px; }
.admin-thumb img { display: block; max-width: 100%; max-height: 220px; }
.admin-report-body { min-width: 0; flex: 1; }
.admin-report h2 { margin: 0 0 4px; font-size: 20px; color: var(--text); overflow-wrap: anywhere; }
.admin-actions { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 18px; margin: 14px 0 0; }
.admin-actions .btn { margin: 0; }
.admin-confirm { margin: 0 0 28px; padding: 22px 24px; background: var(--surface); border: 1px solid #b8453f; border-left-width: 3px; }
.admin-confirm h2 { margin: 0 0 8px; }
.admin-confirm .check { margin: 14px 0; }
/* Page « WikiSpeed du jour » de l'espace admin : formulaire du défi d'un jour, et « Retirer » sur la même ligne que « Modifier » */
.aws-form { display: grid; gap: 4px; max-width: 720px; margin: 0 0 32px; }
.aws-form select { width: 100%; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 12px 14px; font: inherit; font-size: 15px; }
.aws-form select:focus-visible { outline: none; border-color: var(--brass); }
.aws-form .check { margin: 6px 0 16px; }
.aws-form .btn { justify-self: start; margin: 0; }
.aws-inline { display: inline; }
.aws-h { margin: 48px 0 8px; scroll-margin-top: 90px; }
.admin-search { display: flex; flex-wrap: wrap; gap: 12px; margin: 0 0 8px; }
.admin-search input { flex: 1 1 260px; appearance: none; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 13px 16px; font: inherit; font-size: 15px; }
.admin-search .btn { margin: 0; }
.admin-table-wrap { overflow-x: auto; }
.admin-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.admin-table th { padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); border-bottom: 1px solid var(--brass-line); }
.admin-table td { padding: 11px 12px; border-bottom: 1px solid var(--line); overflow-wrap: anywhere; }
.admin-table td:nth-child(n+3) { white-space: nowrap; }   /* dates et action sur une seule ligne */
.admin-pager { display: flex; justify-content: center; gap: 22px; margin: 22px 0 0; color: var(--muted); font-size: 14px; }
.admin-pager a { color: var(--brass-ink); }
@media (max-width: 680px) {
  .admin-report { flex-direction: column; }
  .admin-thumb { width: 100%; }
  .admin-table thead { display: none; }
  .admin-table, .admin-table tbody, .admin-table tr, .admin-table td { display: block; width: 100%; }
  .admin-table tr { padding: 10px 0; border-bottom: 1px solid var(--line); }
  .admin-table td { padding: 3px 0; border: 0; }
  .admin-table td[data-label]::before { content: attr(data-label) " : "; color: var(--muted); font-size: 12px; }
}

/* Page 404 (public/404.php) */
.notfound { display: grid; justify-items: center; gap: 22px; padding: clamp(56px, 12vw, 140px) 0 clamp(64px, 12vw, 150px); text-align: center; }
.nf-code { margin: 0; font-size: clamp(84px, 20vw, 190px); font-weight: 200; line-height: 1; letter-spacing: .12em; padding-left: .12em; color: var(--brass-ink); }
.notfound .rule { width: min(340px, 80%); }
.notfound h1 { margin: 0; font-size: clamp(20px, 3vw, 28px); font-weight: 400; letter-spacing: .16em; text-transform: uppercase; }
.nf-text { max-width: 460px; margin: 0 0 12px; color: var(--muted); text-wrap: pretty; }

/* Champ piège anti-robots (Auth::trapField) : hors écran, jamais visible ni focalisable */
.hp { position: absolute; left: -9999px; top: auto; width: 1px; height: 1px; overflow: hidden; }

/* ================= Amis, notifications et profil (0.12.0) : assets/social.js, assets/profile.js, public/profil.php ================= */
/* Boutons Amis et cloche : mêmes losanges que le thème et le « ? » (.theme), leur icône à la taille de celle du « ? » */
.social-wrap { position: relative; display: inline-flex; }
.social-btn svg { width: 21px; height: 21px; stroke-width: 2.1; }
/* Badge de nouveauté de la cloche (mêmes couleurs que le badge du « ? »), visible quand data-unseen n'est pas 0 */
.social-dot { position: absolute; z-index: 2; top: -4px; right: -4px; width: 11px; height: 11px; border-radius: 50%; background: #d9483f; border: 2px solid var(--bg); box-sizing: content-box; pointer-events: none; display: none; }
[data-social="bell"]:not([data-unseen="0"]) > .social-dot { display: block; animation: help-pulse 2.4s ease-in-out infinite; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) [data-social="bell"] > .social-dot { animation: none !important; }
/* Liste déroulante : plus large qu'un menu ordinaire, alignée à droite de son bouton */
.acct-dropdown.social-dd { left: auto; right: -12px; translate: none; width: min(340px, calc(100vw - 24px)); max-height: min(70vh, 560px); overflow-y: auto; padding: 0; overscroll-behavior: contain; }
.sd-title { margin: 0; padding: 14px 16px 10px; font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); }
.sd-empty { margin: 0; padding: 6px 16px 18px; color: var(--muted); font-size: 13.5px; line-height: 1.5; text-wrap: pretty; }
.sd-error { margin: 0; padding: 8px 16px; color: var(--err-ink); font-size: 13px; }
.social-dd .sd-add { display: flex; align-items: center; gap: 10px; width: 100%; padding: 13px 16px; border-top: 1px solid var(--line); color: var(--brass-ink); font-size: 12px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; }
.social-dd .sd-add svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
/* Une ligne d'ami : avatar, pseudo, puis les trois icônes (profil, retirer l'ami, bloquer) */
.fr-row { display: flex; align-items: center; gap: 10px; padding: 7px 10px 7px 14px; border-top: 1px solid var(--line); }
.fr-av { flex: none; width: 30px; height: 30px; border-radius: 50%; object-fit: cover; border: 2px solid var(--line); }
.fr-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 14px; font-weight: 500; }
.social-dd a.fr-name { display: block; width: auto; padding: 4px 0; background: none; }
.fr-actions { display: inline-flex; gap: 2px; }
.social-dd .fr-btn, .fr-btn { appearance: none; display: grid; place-items: center; width: 32px; height: 32px; padding: 0; border: 0; background: none; color: var(--muted); font: inherit; text-decoration: none; cursor: var(--cur-hand); transition: color .25s ease, background .25s ease; }
.fr-btn svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.fr-btn:hover, .fr-btn:focus-visible { color: var(--text); background: var(--band); }
.fr-btn.is-danger:hover, .fr-btn.is-danger:focus-visible { color: #d9483f; }
.fr-btn.is-confirm, .social-dd .fr-btn.is-confirm { color: #fff; background: #b8453f; }   /* premier clic sur « retirer » / « bloquer » : un second clic confirme */
.fr-btn:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.fr-btn-label { display: none; }   /* texte des actions : seulement dans le menu déroulant du « ⋯ », voir ci-dessous */
/* Bouton « ⋯ » (liste d'amis, cinq icônes) : remplace la rangée d'icônes par un menu déroulant, sur ordinateur comme sur
   mobile (où elle masquerait le pseudo). Un seul menu ouvert à la fois (assets/social.js, closeFriendMenus). Repliée dans
   le flux normal, pas un popover flottant : la liste d'amis défile dans une fenêtre déjà à hauteur limitée, qui le couperait.
   Un flex-basis de 100% envoie l'élément à la ligne suivante, sous l'avatar et le pseudo. */
.fr-more { display: grid; place-items: center; appearance: none; flex: none; width: 32px; height: 32px; padding: 0; border: 0; background: none; color: var(--muted); cursor: var(--cur-hand); transition: color .25s ease, background .25s ease; }
.fr-more svg { width: 18px; height: 18px; }
.fr-more:hover, .fr-more:focus-visible { color: var(--text); background: var(--band); }
.fr-more:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.fr-row:has(.fr-actions-full) { flex-wrap: wrap; }
.fr-actions-full { display: none; flex-basis: 100%; order: 5; flex-direction: column; gap: 0; margin-top: 10px; border-top: 1px solid var(--line); padding-top: 6px; }
.fr-row.is-open .fr-actions-full { display: flex; }
/* Spécificité : l'emporte sur .sc-friends .fr-btn (taille en icône, plus bas dans la feuille) grâce au préfixe .fr-row.is-open. */
.fr-row.is-open .fr-actions-full .fr-btn { display: flex; width: auto; height: auto; align-items: center; justify-content: flex-start; gap: 12px; padding: 10px 12px; }
.fr-row.is-open .fr-actions-full .fr-btn svg { flex: none; }
.fr-row.is-open .fr-actions-full .fr-btn-label { display: inline-block; font-size: 13.5px; font-weight: 400; color: var(--text); }
/* Une notification : avatar, texte, date, puis les boutons de la demande d'ami */
.nt-row { display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 4px 12px; padding: 12px 16px 12px 14px; border-top: 1px solid var(--line); border-left: 3px solid transparent; }
.nt-row.is-new { border-left-color: var(--brass); background: var(--band); }
/* Petite croix : supprime la notification (social.js, deleteButton) */
.nt-row { position: relative; padding-right: 38px; transition: opacity .25s ease; }
.nt-row.is-leaving { opacity: .35; }
.social-dd .nt-del, .nt-del { appearance: none; position: absolute; top: 8px; right: 8px; display: grid; place-items: center; width: 24px; height: 24px; padding: 0; border: 0; background: none; color: var(--muted); cursor: var(--cur-hand); transition: color .25s ease, background .25s ease; }
.nt-del svg { width: 13px; height: 13px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; }
.nt-del:hover, .nt-del:focus-visible { color: var(--text); background: var(--track); }
.nt-del:disabled { cursor: progress; }
.nt-av { grid-row: 1 / span 2; width: 34px; height: 34px; border-radius: 50%; object-fit: cover; border: 2px solid var(--line); }
.nt-text { margin: 0; font-size: 13.5px; line-height: 1.45; overflow-wrap: anywhere; }
.social-dd .nt-text a { display: inline; width: auto; padding: 0; background: none; color: var(--brass-ink); text-decoration: underline; text-decoration-color: var(--brass-line); text-underline-offset: 3px; }
.nt-time { color: var(--muted); font-size: 11.5px; letter-spacing: .04em; }
.nt-actions { grid-column: 2; display: flex; flex-wrap: wrap; gap: 8px; margin-top: 6px; }
/* Cloche flottante (mobile) : invisible sur ordinateur */
.notif-float { display: none; }
@media (max-width: 760px), (hover: none) and (pointer: coarse) and (max-width: 1100px) {
  .notif-float { display: block; position: fixed; z-index: 56; right: max(14px, env(safe-area-inset-right, 0px)); bottom: calc(64px + env(safe-area-inset-bottom, 0px) + 16px); }
  .notif-float .theme { width: 40px; height: 40px; background: var(--surface); box-shadow: inset 0 0 0 var(--edge) var(--brass-line), 0 6px 18px rgba(0, 0, 0, .35); }
  .notif-float .social-btn svg { width: 25px; height: 25px; }
  .notif-float .social-dot { top: -2px; right: -2px; }
  .notif-float .acct-dropdown.social-dd { top: auto; bottom: calc(100% + 16px); right: 0; left: auto; width: min(340px, calc(100vw - 28px)); transform-origin: 100% 100%; animation-name: wc-pop-up-in; }
  .notif-float .acct-dropdown.social-dd.is-leaving { animation-name: wc-pop-up-out; }
}
/* Modales des amis et du profil : une petite fenêtre centrée */
.modal-box.sm-box { display: block; width: min(500px, 100%); max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); overflow-y: auto; padding: clamp(24px, 4vw, 36px); }
.modal-box.sm-box.is-wide { width: min(920px, 100%); }
.sm-box h2 { margin: 0 0 8px; padding-right: 36px; font-size: clamp(20px, 3vw, 26px); font-weight: 400; line-height: 1.25; }
.sm-note { margin: 0 0 18px; color: var(--muted); font-size: 14px; line-height: 1.5; text-wrap: pretty; }
.sm-msg { min-height: 1.4em; margin: 12px 0 0; font-size: 14px; }
.sm-msg.is-ok { color: var(--brass-ink); }
.sm-msg.is-error { color: var(--err-ink); }
.sm-actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 8px; }
.sm-box .field { margin-bottom: 14px; }
.sm-box .fr-row { padding-left: 0; padding-right: 0; }
.sm-box .fr-row:first-of-type { border-top: 0; }
.sm-box .sd-add { display: flex; align-items: center; gap: 10px; width: 100%; margin-top: 8px; padding: 13px 4px; border: 0; border-top: 1px solid var(--line); background: none; color: var(--brass-ink); font: 500 12px/1 var(--font); letter-spacing: .14em; text-transform: uppercase; cursor: var(--cur-hand); }
.sm-box .sd-add svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }

/* ---------- Page Profil ---------- */
.profile { max-width: 1100px; padding-top: clamp(32px, 6vw, 64px); }
/* Haut du profil (1.1.0, src/ProfileView.php) : bannière (cos-ban-*), avatar dans son cadre (cos-frame-*) qui mord sur le bas de la bannière, pseudo et titre en dessous */
.pf-hero { --s: 7px; position: relative; isolation: isolate; margin-bottom: clamp(28px, 5vw, 48px); padding: 8px; }
/* Encart à gradins (comme les encarts de la page Jeux) : filet laiton, fond de carte, bannière rentrée avec ses propres gradins */
.pf-hero::before, .pf-hero::after { content: ""; position: absolute; }
.pf-hero::before { inset: 0; z-index: -2; background: var(--brass); opacity: .75; }
.pf-hero::after { inset: 1px; z-index: -1; background: var(--card); }
.pf-hero > .pf-banner { --s: 5px; }
.pf-hero::before, .pf-hero::after, .pf-hero > .pf-banner {
  clip-path: polygon(
    0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0,
    calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)),
    100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%,
    calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s)));
}
.pf-banner { position: relative; display: block; height: clamp(120px, 20vw, 220px); overflow: hidden; isolation: isolate; }
.pf-banner::before, .pf-banner::after { content: ""; position: absolute; pointer-events: none; }
.pf-hero-row { --ov: clamp(48px, 7vw, 72px); position: relative; display: flex; align-items: flex-start; flex-wrap: wrap; gap: 14px 28px; margin-top: calc(-1 * var(--ov)); padding: 0 clamp(16px, 3vw, 36px) clamp(18px, 3vw, 28px); }
.pf-avatar { position: relative; flex: none; }
.pf-avatar img { display: block; width: clamp(96px, 16vw, 144px); height: clamp(96px, 16vw, 144px); border-radius: 50%; object-fit: cover; background: var(--card); }
.pf-id { flex: 1 1 260px; min-width: 0; padding-top: calc(var(--ov) + 12px); }
.pf-name { margin: 0; font-size: clamp(26px, 4.4vw, 42px); font-weight: 300; letter-spacing: .1em; text-transform: uppercase; line-height: 1.15; overflow-wrap: anywhere; }
.pf-title { width: fit-content; margin: 6px 0 0; color: var(--brass-ink); font-size: 13px; font-weight: 500; letter-spacing: .18em; text-transform: uppercase; cursor: help; }
.pf-title::before { content: "◆ "; font-size: .8em; }
.pf-title:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
.pf-title-hint { display: block; margin-top: 4px; color: var(--muted); font-size: 12.5px; }
.pf-id .pf-count { margin-top: 14px; }
/* Son profil : « Modifier le profil » au-dessus de « Partager », à droite, chacun à sa largeur, centrés en hauteur dans la partie sombre de l'encart (sous la bannière) :
   la colonne part du bas de la bannière (--ov) et descend jusqu'au bas de l'encart (marge négative : le bas de la rangée --pb et le retrait de l'encart, 8 px moins le filet). */
.pf-hero-row:has(.pf-own-actions) { --pb: clamp(16px, 2.4vw, 22px); padding-bottom: var(--pb); }
.pf-own-actions { align-self: stretch; display: flex; flex-direction: column; justify-content: center; align-items: flex-end; gap: 12px; margin: 0 0 calc(-1 * (var(--pb) + 7px)) auto; padding-top: var(--ov); }
.pf-id .sm-msg:empty { display: none; }   /* profil d'un ami : pas de place réservée au message tant qu'il n'y en a pas */
.pf-hero-row:has(.pf-more) { padding-bottom: clamp(14px, 2.2vw, 20px); }
/* Profil d'un ami : les actions graves dans un menu « ⋯ » à droite (retirer, signaler, bloquer : en rouge) */
.pf-more { position: relative; margin: calc(var(--ov) + 12px) 0 0 auto; }
.pf-more-btn { padding: 9px 11px; }
.pf-more-btn svg { fill: currentColor; stroke: none; }
.pf-hero:has(.pf-more-menu:not([hidden])) { z-index: 5; }
.pf-more-menu { position: absolute; right: 0; top: calc(100% + 8px); z-index: 5; display: grid; min-width: 236px; padding: 6px; background: var(--surface); border: 1px solid var(--brass-line); box-shadow: 0 14px 34px rgba(0, 0, 0, .4); }
.pf-more-menu[hidden] { display: none; }
.pf-more-menu:not([hidden]) { animation: wc-fade-in .18s ease backwards; }
.pf-more-item { appearance: none; display: flex; align-items: center; gap: 10px; width: 100%; padding: 11px 12px; border: 0; background: none; color: var(--err-ink); font: 500 12px/1.2 var(--font); letter-spacing: .12em; text-transform: uppercase; text-align: left; cursor: var(--cur-hand); transition: background .2s ease, color .2s ease; }
.pf-more-item + .pf-more-item { border-top: 1px solid var(--line); }
.pf-more-item:hover, .pf-more-item:focus-visible { background: color-mix(in srgb, var(--err-ink) 12%, transparent); }
.pf-more-item:focus-visible { outline: 2px solid var(--err-ink); outline-offset: -2px; }
.pf-more-item.is-confirm { background: #b8453f; color: #fff; }
.pf-more-item:disabled { opacity: .5; cursor: var(--cur-blocked); }
.pf-more-item svg { flex: none; width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }

/* Cadres d'avatar (Cosmetics::DEFS) */
.cos-frame-classique img { border: 3px solid var(--brass-line); box-shadow: 0 0 0 5px var(--card); }

/* Bannières (Cosmetics::DEFS) : tout en CSS, à l'échelle de la bannière (la même sert au profil, à l'aperçu et aux miniatures de « Modifier le profil »).
   « Éventail » en 10 couleurs : classe commune .cos-ban-ev (le dessin) + .cos-ban-ev-<couleur> (les couleurs). D'autres dessins attendent dans design/bannieres-de-cote.css. */
.cos-ban-ev { --bn-fan: #c9a45c; --bn-op: .55; background: radial-gradient(120% 140% at 50% 120%, var(--bn-a), var(--bn-b) 60%, var(--bn-c)); }
.cos-ban-ev::before { left: 50%; bottom: -1px; height: 170%; aspect-ratio: 2; translate: -50% 0; background: var(--bn-fan); opacity: var(--bn-op); -webkit-mask: var(--fan) center / contain no-repeat; mask: var(--fan) center / contain no-repeat; }
.cos-ban-ev::after { inset: 8px; border: 1px solid color-mix(in srgb, var(--bn-fan) 40%, transparent); }
/* Les 10 couleurs : celles des thèmes du site (Paramètres > Personnalisation), 5 sombres puis 5 claires */
.cos-ban-ev-emeraude { --bn-a: #1f6a4b; --bn-b: #0f3324; --bn-c: #0a2117; }
.cos-ban-ev-noir { --bn-a: #3a2e18; --bn-b: #1b1610; --bn-c: #0e0c09; --bn-fan: #d4aa55; }
.cos-ban-ev-ardoise { --bn-a: #2b4766; --bn-b: #152536; --bn-c: #0c1117; --bn-fan: #bfa36a; }
.cos-ban-ev-vin { --bn-a: #6a1f2e; --bn-b: #321218; --bn-c: #130b0d; --bn-fan: #d6a06a; }
.cos-ban-ev-crepuscule { --bn-a: #4a3c86; --bn-b: #221d44; --bn-c: #0d0c18; --bn-fan: #d0a27f; }
.cos-ban-ev-sauge { --bn-a: #f2f5ea; --bn-b: #d3dfc7; --bn-c: #b9caa9; --bn-fan: #8a6a20; --bn-op: .6; }
.cos-ban-ev-ivoire { --bn-a: #fffaf0; --bn-b: #efe3c4; --bn-c: #dccb9c; --bn-fan: #8f6c16; --bn-op: .6; }
.cos-ban-ev-marbre { --bn-a: #ffffff; --bn-b: #e6ebec; --bn-c: #c9d3d4; --bn-fan: #7d6024; --bn-op: .55; }
.cos-ban-ev-bordeaux { --bn-a: #fff7ee; --bn-b: #efdccb; --bn-c: #dcbfa9; --bn-fan: #7b2d34; --bn-op: .55; }
.cos-ban-ev-aube { --bn-a: #fcfbff; --bn-b: #e2dcef; --bn-c: #c9c0de; --bn-fan: #96603e; --bn-op: .55; }

/* ---------- « Modifier le profil » (public/profil-modifier.php, assets/profile-edit.js) : l'aperçu sur toute la largeur, un menu vers les sections, puis les sections l'une sous l'autre ---------- */
.pe-top { display: flex; align-items: center; flex-wrap: wrap; gap: 12px 24px; margin-bottom: clamp(20px, 3vw, 32px); }
.pe-top h1 { margin: 0; font-size: clamp(24px, 3.6vw, 34px); font-weight: 300; letter-spacing: .12em; text-transform: uppercase; }
.pe-top .btn-tertiary svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.pe-prev .pf-hero { margin-bottom: 10px; }
.pe-prev > .sm-note { margin: 0; text-align: center; }
.pe-nav { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin: clamp(18px, 3vw, 28px) 0 clamp(24px, 4vw, 40px); padding: 16px 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.pe-nav a { padding: 8px 14px; border: 1px solid var(--line); color: var(--muted); font-size: 11.5px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; text-decoration: none; transition: color .25s ease, border-color .25s ease, background .25s ease; }
.pe-nav a:hover, .pe-nav a:focus-visible { color: var(--brass-ink); border-color: var(--brass); background: var(--band); }
.pe-nav a:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.pe-form { display: grid; gap: clamp(20px, 3vw, 32px); padding-bottom: 110px; }
.pe-panel { min-width: 0; padding: clamp(18px, 2.6vw, 28px); border: 1px solid var(--line); background: var(--card); scroll-margin-top: 96px; }
.pe-panel > h2, .pe-head h2 { margin: 0 0 18px; font-size: 13px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); }
.pe-head { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px 16px; margin-bottom: 18px; padding-bottom: 14px; border-bottom: 1px solid var(--line); }
.pe-head h2 { margin: 0; }
.pe-panel > .sm-note { margin: 16px 0 0; }
.pe-panel > .pe-lead { margin: 0 0 18px; }
.pe-panel .av-cat:first-of-type { margin-top: 0; }
.pe-panel .av-grid { grid-template-columns: repeat(auto-fill, minmax(72px, 1fr)); }
.pe-panel .av-opt { display: block; }
.pe-panel .av-opt:has(input:checked) { border-color: var(--brass); }
.pe-panel .av-opt:has(input:focus-visible) { outline: 2px solid var(--brass); outline-offset: 2px; }
.pe-opts { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 18px 14px; }
.pe-opts-ban { grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); }
.pe-opt { display: grid; gap: 7px; justify-items: center; text-align: center; cursor: var(--cur-hand); }
.pe-opt .pe-lb { font-size: 12.5px; letter-spacing: .06em; color: var(--text); }
.pe-opt small { color: var(--muted); font-size: 11.5px; line-height: 1.35; }
.pe-opt:has(input:checked) .pe-lb { color: var(--brass-ink); font-weight: 500; }
.pe-opt:has(input:checked) :is(.pe-ban, .pe-style, .pe-frame img) { outline: 2px solid var(--brass); outline-offset: 3px; }
.pe-opt:has(input:focus-visible) :is(.pe-ban, .pe-style, .pe-frame img) { outline: 2px dashed var(--brass); outline-offset: 3px; }
.pe-opt.is-locked { cursor: not-allowed; opacity: .5; }
.pe-opt.is-locked :is(.pe-ban, .pe-style) { filter: grayscale(1); }
.pe-ban { width: 100%; height: 72px; border: 1px solid var(--line); }
.pe-frame img { width: 76px; height: 76px; }
.pe-style { display: grid; grid-template-rows: 18px 1fr; gap: 6px; width: 100%; height: 72px; padding: 6px; border: 1px solid var(--line); background: var(--bg); }
.pe-style i { display: block; background: var(--surface); border: 1px solid var(--line); }
.pe-style i:first-child { grid-column: 1 / -1; background: var(--band); border-top: 2px solid var(--brass); }
.pe-style.cos-style-classique { grid-template-columns: 1fr 1fr; }
.pe-titles { display: flex; flex-wrap: wrap; align-content: flex-start; gap: 8px; max-height: 236px; overflow-y: auto; padding: 3px 10px 3px 3px; overscroll-behavior: contain; }
/* L'aperçu garde la place du titre même sans titre : choisir « Aucun titre » ne fait pas bouger la page */
.pe-prev .pf-title { min-height: 1.6em; }
.pe-prev .pf-title[hidden] { display: block; visibility: hidden; }
.pe-chip { cursor: var(--cur-hand); }
.pe-chip[hidden] { display: none; }
.pe-chip span { display: inline-block; padding: 7px 12px; border: 1px solid var(--line); color: var(--muted); font-size: 11.5px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase; transition: color .2s ease, border-color .2s ease, background .2s ease; }
.pe-chip-none span { border-style: dashed; border-color: var(--brass-line); }
.pe-chip:hover span { color: var(--text); border-color: var(--brass-line); }
.pe-chip:has(input:checked) span { color: var(--brass-ink); border-color: var(--brass); background: var(--band); }
.pe-chip-none:has(input:checked) span { border-style: dashed; }
.pe-chip:has(input:focus-visible) span { outline: 2px solid var(--brass); outline-offset: 2px; }
.pe-panel .bk.pf-ach { margin: 0; }
.pf-editor .save-bar { flex-wrap: wrap; }
.pf-editor .save-bar .sm-msg { flex-basis: 100%; margin: 0; text-align: center; }
.pf-editor .save-bar .sm-msg:empty { display: none; }
@media (max-width: 760px) { .pe-totop { right: auto; left: max(18px, env(safe-area-inset-left, 0px)); } }
@media (max-width: 520px) {
  .pf-hero-row { flex-direction: column; align-items: center; text-align: center; }
  .pf-id { flex: none; width: 100%; padding-top: 0; }
  .pf-title { margin-inline: auto; }
  .pf-more { margin: 0 auto; }
  .pf-own-actions { align-self: center; flex-direction: row; flex-wrap: wrap; justify-content: center; align-items: center; margin: 0 auto; padding-top: 0; }
  .pf-more-menu { right: auto; left: 50%; translate: -50% 0; }
}
/* ---------- Image « Partager ma vitrine » (assets/profile-share.js) : mise en page hors de l'écran puis dessinée dans une image de 1080 px.
   Toutes les tailles sont fixées ici (aucune ne dépend de la fenêtre) : l'image doit avoir la même mise en page que ce qui a été mesuré dans la page. ---------- */
.sh-holder { position: fixed; left: -20000px; top: 0; pointer-events: none; }
.sh-root { width: 1080px; padding: 56px 56px 40px; background: radial-gradient(80% 50% at 50% 0, var(--tint), transparent), var(--bg); color: var(--text); font: 400 16px/1.6 var(--font); -webkit-font-smoothing: antialiased; font-variant-numeric: lining-nums; }
.sh-root *, .sh-root *::before, .sh-root *::after { animation: none !important; transition: none !important; }
.sh-root .pf-hero { margin: 0 0 40px; }
.sh-root .pf-banner { height: 216px; }
.sh-root .pf-hero-row { --ov: 72px; flex-direction: row; align-items: flex-start; gap: 14px 28px; padding: 0 36px 28px; text-align: left; }
.sh-root .pf-avatar img { width: 144px; height: 144px; }
.sh-root .pf-id { flex: 1 1 260px; width: auto; padding-top: calc(var(--ov) + 12px); }
.sh-root .pf-name { font-size: 42px; }
.sh-root .pf-title { margin-inline: 0; }
.sh-head { margin: 0 0 22px; padding-bottom: 12px; border-bottom: 1px solid var(--line); font-size: 15px; font-weight: 500; letter-spacing: .24em; text-transform: uppercase; color: var(--brass-ink); }
.sh-root .cards.collection.pf-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 30px; }
.sh-root .card .card-in, .sh-root .card .card-front { transform: none !important; }
.sh-root .card .card-back { display: none !important; }
.sh-head-ach { margin-top: 40px; }
.sh-root .bk.sh-ach { margin: 0; }
.sh-root .sh-ach .pf-ach-row { padding: 6px 0 4px; }
.sh-foot { display: flex; align-items: center; justify-content: space-between; margin-top: 36px; padding-top: 18px; border-top: 1px solid var(--brass-line); }
.sh-foot .brand { font-size: 18px; }
.sh-url { color: var(--muted); font-size: 15px; letter-spacing: .14em; }
.sh-box .sh-preview { display: block; width: auto; max-width: 100%; max-height: 62vh; margin: 14px auto 18px; border: 1px solid var(--line); box-shadow: 0 14px 34px rgba(0, 0, 0, .3); }
.sh-box .sh-actions { justify-content: center; }
.pf-count { margin: 0; color: var(--muted); font-size: 15px; }
.pf-count b { color: var(--brass-ink); font-size: 22px; font-weight: 500; margin-right: .2em; }
.pf-count small { display: block; margin-top: 3px; font-size: 12.5px; }
.pf-note { margin: 14px 0 0; max-width: 46ch; color: var(--muted); font-size: 13.5px; line-height: 1.5; }
.pf-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; }
.pf-showcase-head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 20px; padding-bottom: 12px; border-bottom: 1px solid var(--line); }
.pf-showcase-head h2 { margin: 0; font-size: 13px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); }
.pf-cards, .cards.collection.pf-cards { grid-template-columns: repeat(6, minmax(0, 1fr)); gap: clamp(10px, 1.6vw, 22px); }
.pf-empty { aspect-ratio: 5 / 7; display: grid; place-items: center; border: 1px dashed var(--brass-line); color: var(--muted); font-size: 12px; letter-spacing: .14em; text-transform: uppercase; text-align: center; padding: 8px; }
/* ---------- Statistiques du profil (src/StatsView.php) : deux anneaux (raretés, styles) et des chiffres, sous la vitrine ---------- */
.pf-stats { margin-top: clamp(32px, 5vw, 56px); }
.pf-stats-head { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 20px; padding-bottom: 12px; border-bottom: 1px solid var(--line); }
.pf-stats-head h2 { margin: 0; font-size: 13px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); }
.pf-stats .sm-msg:empty { display: none; }
.st-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px; }
.st-card { margin: 0; padding: 18px 20px 20px; border: 1px solid var(--line); border-top: 2px solid var(--brass); background: var(--surface); min-width: 0; }
.st-card figcaption { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px 14px; margin-bottom: 14px; }
.st-card h3 { margin: 0; font-size: 12.5px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--text); }
.st-card .sel select { font-size: 13px; }
.st-kind[hidden] { display: none; }
.st-donut { display: flex; align-items: center; gap: 22px; }
.st-donut-svg { flex: none; width: clamp(130px, 18vw, 170px); height: auto; transform: rotate(0deg); }
.st-donut-bg { fill: none; stroke: var(--track); stroke-width: 6; }
.st-seg { fill: none; stroke-width: 6; }
.st-seg.r1 { stroke: var(--r1); } .st-seg.r2 { stroke: var(--r2); } .st-seg.r3 { stroke: var(--r3); } .st-seg.r4 { stroke: var(--r4); }
.st-seg.r5 { stroke: var(--r5); } .st-seg.r6 { stroke: var(--r6); } .st-seg.r7 { stroke: var(--r7); }
.sx-normal { --sxc: var(--r1); } .sx-xa { --sxc: var(--brass); } .sx-fa4 { --sxc: color-mix(in srgb, var(--brass) 45%, var(--text)); } .sx-theme { --sxc: var(--r4); }
.st-seg.sx-normal, .st-seg.sx-xa, .st-seg.sx-fa4, .st-seg.sx-theme { stroke: var(--sxc); }
.st-donut-n { font: 500 5.2px var(--font); fill: var(--text); font-variant-numeric: tabular-nums; }
.st-donut-l { font: 400 2.6px var(--font); fill: var(--muted); letter-spacing: .12em; text-transform: uppercase; }
.st-legend { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; flex: 1; min-width: 0; font-size: 13.5px; }
.st-legend li { display: grid; grid-template-columns: 10px minmax(0, 1fr) auto auto; align-items: center; gap: 4px 10px; }
.st-legend i { width: 9px; height: 9px; rotate: 45deg; background: var(--rc, var(--sxc)); }
.st-legend span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.st-legend b { font-weight: 500; font-variant-numeric: tabular-nums; }
.st-legend small { min-width: 4.6em; text-align: right; color: var(--muted); font-size: 12px; font-variant-numeric: tabular-nums; }
.st-foot { margin: 14px 0 0; color: var(--muted); font-size: 13px; }
.st-foot b { color: var(--brass-ink); font-weight: 500; }
.st-tiles { list-style: none; margin: 22px 0 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 14px; }
.st-tile { display: grid; align-content: start; gap: 4px; padding: 14px 16px; border: 1px solid var(--line); background: var(--card); min-width: 0; }
.st-tile b { font-size: 24px; font-weight: 400; letter-spacing: .02em; color: var(--brass-ink); font-variant-numeric: tabular-nums; }
.st-tile b.st-best { font-size: 17px; line-height: 1.25; color: var(--rc, var(--brass-ink)); overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.st-tile span { font-size: 13px; color: var(--text); }
.st-tile small { font-size: 12px; color: var(--muted); }
.st-since { margin: 16px 0 0; font-size: 12px; color: var(--muted); }
@media (max-width: 900px) { .st-grid { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 520px) { .st-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .st-tile { padding: 12px; } .st-tile b { font-size: 20px; } .st-donut { flex-direction: column; align-items: stretch; } .st-donut-svg { align-self: center; } .pf-stats-head { flex-wrap: wrap; } }
@media (max-width: 900px) { .pf-cards, .cards.collection.pf-cards { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 520px) { .pf-cards, .cards.collection.pf-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } .pf-actions { justify-content: center; } }
/* Modale « Modifier la vitrine » : les 6 emplacements en haut, puis les cartes de la collection à choisir */
.vt-slots { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 10px; margin-bottom: 18px; }
.vt-slot { position: relative; appearance: none; aspect-ratio: 5 / 7; display: grid; place-items: center; padding: 0; border: 1px dashed var(--brass-line); background: none; color: var(--muted); font: inherit; font-size: 11px; letter-spacing: .1em; text-transform: uppercase; text-align: center; cursor: var(--cur-hand); overflow: hidden; }
.vt-slot.is-active { border-style: solid; border-color: var(--brass); box-shadow: 0 0 0 2px color-mix(in srgb, var(--brass) 30%, transparent); }
/* La carte elle-même dans l'emplacement (copie de la carte : elle se réduit avec lui) ; les clics vont à l'emplacement, pas à la carte */
.vt-slot.has-card { touch-action: none; user-select: none; -webkit-user-select: none; }
.vt-slot .vt-mini { display: block; grid-template-columns: none; width: 100%; height: 100%; margin: 0; padding: 0; list-style: none; pointer-events: none; }
.vt-slot .vt-mini .card { width: 100%; height: 100%; margin: 0; }
.vt-slot .vt-mini img { -webkit-user-drag: none; }
.vt-slot:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.vt-slot.is-dragging { opacity: .35; }
.vt-slot.is-drop { border-style: solid; border-color: var(--brass); background: color-mix(in srgb, var(--brass) 14%, transparent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--brass) 45%, transparent); }
.vt-ghost { position: fixed; top: 0; left: 0; z-index: 10000; aspect-ratio: 5 / 7; opacity: .9; pointer-events: none; box-shadow: 0 10px 28px rgba(0, 0, 0, .45); }
.vt-ghost .vt-mini { display: block; width: 100%; height: 100%; margin: 0; padding: 0; list-style: none; }
.vt-ghost .vt-mini .card { width: 100%; height: 100%; margin: 0; }
.vt-slot.has-card { border-style: solid; border-color: var(--line); background: var(--card); }
.vt-slot.has-card.is-active { border-color: var(--brass); }
.vt-slot .vt-x { position: absolute; top: 3px; right: 3px; z-index: 2; appearance: none; border: 0; padding: 0; cursor: var(--cur-hand); display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: #b8453f; color: #fff; }
.vt-slot .vt-x svg { width: 12px; height: 12px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; }
.vt-search { display: flex; gap: 10px; margin-bottom: 12px; }
.vt-search input { flex: 1; min-width: 0; appearance: none; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 11px 14px; font: inherit; font-size: 15px; }
.vt-search input:focus-visible { outline: none; border-color: var(--brass); }
.pick-cards { grid-template-columns: repeat(var(--pick-cols, 6), minmax(0, 1fr)) !important; gap: 10px !important; }   /* --pick-cols : posé par card-picker.js (3 rangées pleines) */
.pk-list { transition: opacity .18s ease; }
.pk-list.is-loading { opacity: .45; pointer-events: none; }
.pk-pager { margin: 16px 0; }
.pk-pager .pager { margin: 0; }
.pick-cards .card { cursor: var(--cur-hand); }
.pick-cards .card.is-picked { outline: 2px solid var(--brass); outline-offset: 2px; }
@media (max-width: 760px) { .pick-cards { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; } }
/* Sélection multiple de la collection (assets/collection-select.js) : bouton « Sélectionner », cartes cochées et bandeau flottant d'actions groupées. */
.coll-select-toggle { align-self: flex-end; min-height: 46px; background: var(--card); }
.coll-select-toggle span { text-align: left; }
html.coll-selecting [data-part="results"] .cards.collection .card-in { cursor: var(--cur-hand); }
[data-part="results"] .card.is-selected { outline: 3px solid var(--brass); outline-offset: 3px; }
.sel-badge { position: absolute; z-index: 4; top: 10px; left: 10px; width: 24px; height: 24px; display: grid; place-items: center; border-radius: 50%; background: var(--brass-ink); box-shadow: 0 0 0 2px var(--surface); pointer-events: none; }
.sel-badge svg { width: 14px; height: 14px; fill: none; stroke: var(--on-brass); stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }
/* Onglet « Chercher dans la base » : un grand champ de recherche au milieu de la page (public/collection.php, src/BaseSearch.php) */
.coll-basesearch { display: flex; flex-direction: column; align-items: center; gap: 14px; margin: 18px auto 10px; padding: 8px 0; text-align: center; }
.coll-basesearch .cb-lead { margin: 0; max-width: 56ch; color: var(--muted); font-size: 15px; line-height: 1.6; }
.coll-basesearch .cb-search { flex: none; width: min(100%, 640px); max-width: none; }
.coll-basesearch .cb-search input { font-size: 18px; padding-top: 18px; padding-bottom: 18px; }
/* Recherche en cours (collection-live.js, searching) : la barre est grisée et figée, et trois losanges laiton s'animent le temps que le serveur lise la base */
.coll-basesearch .cb-search { transition: opacity .2s ease, filter .2s ease; }
.coll-basesearch.is-searching .cb-search { opacity: .45; filter: grayscale(1); pointer-events: none; }
.cb-loading { display: flex; align-items: center; justify-content: center; gap: 9px; margin: 16px 0 0; color: var(--muted); font-size: 14px; letter-spacing: .08em; }
.cb-loading[hidden] { display: none; }
.cb-loading span { margin-left: 6px; }
.cb-spin { width: 9px; height: 9px; background: var(--brass); transform: rotate(45deg) scale(.55); opacity: .35; animation: cb-spin 1.2s ease-in-out infinite; }
.cb-spin:nth-child(2) { animation-delay: .2s; }
.cb-spin:nth-child(3) { animation-delay: .4s; }
@keyframes cb-spin { 0%, 100% { transform: rotate(45deg) scale(.55); opacity: .35; } 40% { transform: rotate(45deg) scale(1); opacity: 1; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .cb-spin { animation: none; opacity: 1; transform: rotate(45deg) scale(.8); }
.coll-basesearch .cb-hint { margin: 0; color: var(--muted); font-size: 13px; letter-spacing: .02em; }
.coll-base .coll-none { text-align: center; }
/* Bandeau flottant des filtres actifs de la Collection (assets/collection-recap.js) : sous l’en-tête, seulement quand le formulaire a défilé hors de l’écran */
.coll-recap { position: fixed; z-index: 55; top: 66px; left: 50%; translate: -50% 0; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 6px 8px; width: max-content; max-width: min(calc(100vw - 24px), 920px); padding: 8px 14px; background: color-mix(in srgb, var(--card) 94%, transparent); border: 1px solid var(--brass-line); box-shadow: 0 10px 24px rgba(0, 0, 0, .35); backdrop-filter: blur(6px); font-size: 12.5px; animation: undo-in .3s var(--ease) both; }
.coll-recap[hidden] { display: none; }
.coll-recap .cr-chip { display: inline-flex; align-items: baseline; gap: 6px; padding: 3px 10px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 10%, transparent); color: var(--text); white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.coll-recap .cr-chip i { font-style: normal; font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--brass-ink); }
.coll-recap .cr-reset { padding: 3px 8px; border: 0; background: none; color: var(--brass-ink); font: inherit; text-decoration: underline; text-underline-offset: 3px; cursor: var(--cur-hand); }
@media (max-width: 760px) { .coll-recap { top: 58px; font-size: 12px; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .coll-recap { animation: none; }
/* Bandeau « Annuler le recyclage » (assets/card-modal.js : WikiCollect.offerUndo) : flotte en bas de l'écran quelques secondes */
.undo-bar { position: fixed; z-index: 110; left: 50%; bottom: 24px; translate: -50% 0; display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 10px 16px; width: max-content; max-width: calc(100vw - 24px); padding: 12px 20px; background: var(--card); border: 1px solid var(--brass-line); box-shadow: 0 14px 30px rgba(0, 0, 0, .45); font-size: 14px; animation: undo-in .35s var(--ease) both; }
.undo-bar .undo-count { min-width: 2.2em; text-align: right; color: var(--muted); font-variant-numeric: tabular-nums; }
.undo-bar.is-done { border-color: var(--brass); }
.undo-bar.is-error { border-color: #b4483f; }
@keyframes undo-in { from { opacity: 0; translate: -50% 14px; } }
@media (max-width: 760px) { .undo-bar { bottom: calc(76px + env(safe-area-inset-bottom, 0px)); } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .undo-bar { animation: none; }
/* Bandeau flottant de la sélection multiple : cadre à gradins et double filet laiton, comme les encarts de Jeux ; boutons de la fiche carte (favoris, recycler) ; liste d'étiquettes = celle de la fiche */
.sel-bar { --s: 5px; position: fixed; z-index: 60; left: 50%; bottom: 24px; translate: -50% 0; isolation: isolate; display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 12px 24px; width: max-content; max-width: calc(100vw - 24px); padding: 18px 30px; filter: drop-shadow(0 14px 30px rgba(0, 0, 0, .45)); }
.sel-bar::before, .sel-bar::after { content: ""; position: absolute; }
.sel-bar::before { inset: 0; z-index: -2; background: var(--brass); opacity: .75; }
.sel-bar::after { inset: 1px; z-index: -1; background: radial-gradient(ellipse 60% 140% at 12% 100%, color-mix(in srgb, var(--brass) 14%, transparent), transparent 70%), var(--card); box-shadow: inset 0 0 0 6px var(--card), inset 0 0 0 7px var(--brass-line); }
.sel-bar[hidden] { display: none; }
.sel-bar:not([hidden]) { animation: sb-in .35s var(--ease) backwards; }
.sel-bar.is-leaving { animation: sb-out .22s ease-in both; }
.sel-count { display: inline-flex; align-items: center; gap: 10px; margin: 0; font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); white-space: nowrap; }
.sel-count::before { content: ""; flex: none; width: 8px; height: 8px; rotate: 45deg; background: var(--brass); box-shadow: 0 0 0 3px color-mix(in srgb, var(--brass) 25%, transparent); }
.sel-count b { font-size: 22px; font-weight: 300; line-height: 1; letter-spacing: .02em; color: var(--text); font-variant-numeric: tabular-nums; }
.sel-actions { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px; }
.sel-btn:disabled, .rc-btn:disabled { opacity: .5; cursor: progress; }
.sel-btn .sel-caret { width: 11px; height: 11px; margin-left: 2px; stroke-width: 2; transition: rotate .25s ease; }
.sel-btn[aria-expanded="true"] .sel-caret { rotate: 180deg; }
.sel-clear { appearance: none; padding: 6px 2px; border: 0; background: none; color: var(--muted); font: 500 11px/1 var(--font); letter-spacing: .14em; text-transform: uppercase; text-decoration: underline; text-decoration-color: color-mix(in srgb, var(--muted) 40%, transparent); text-underline-offset: 5px; cursor: var(--cur-hand); }
.sel-clear:hover, .sel-clear:focus-visible { color: var(--text); text-decoration-color: var(--brass); }
.sel-clear:disabled { opacity: .5; cursor: progress; }
.sel-tag-wrap { position: relative; }
.sel-tag-panel { position: absolute; z-index: 5; left: 0; bottom: calc(100% + 12px); width: max(280px, 100%); border-top: 2px solid var(--brass); box-shadow: 0 14px 34px rgba(0, 0, 0, .35); }
.sel-tag-panel:not([hidden]) { animation-name: wc-pop-up-in; transform-origin: 0 100%; }
.sel-tag-panel.is-leaving { animation-name: wc-pop-up-out; }
.sel-tag-panel .ctf-list { max-height: 240px; }
.sel-tag-panel .ctf-opt { appearance: none; width: 100%; border: 0; background: none; color: var(--text); font: inherit; font-size: 14px; text-align: left; }
.sel-tag-panel .ctf-opt:hover, .sel-tag-panel .ctf-opt:focus-visible { background: var(--band); }
.sel-seg { display: flex; border-bottom: 1px solid var(--line); background: var(--card); }
.sel-seg-btn { appearance: none; flex: 1; padding: 11px 10px; border: 0; background: none; color: var(--muted); font: 500 11px/1 var(--font); letter-spacing: .14em; text-transform: uppercase; cursor: var(--cur-hand); transition: background .25s ease, color .25s ease; }
.sel-seg-btn + .sel-seg-btn { border-left: 1px solid var(--line); }
.sel-seg-btn:hover, .sel-seg-btn:focus-visible { color: var(--text); }
.sel-seg-btn.is-on { background: color-mix(in srgb, var(--brass) 18%, transparent); color: var(--brass-ink); box-shadow: inset 0 -2px 0 var(--brass); }
.sel-bar .sm-msg { flex-basis: 100%; margin: 0; text-align: center; }
.sel-bar .sm-msg:empty { display: none; }
@media (max-width: 760px) {
  .sel-bar { bottom: calc(76px + env(safe-area-inset-bottom, 0px)); width: calc(100vw - 24px); padding: 14px 14px; gap: 10px 16px; }
  .sel-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); width: 100%; gap: 8px; }
  .sel-btn, .sel-bar .rc-btn { width: 100%; height: 44px; justify-content: center; gap: 6px; padding-inline: 6px; font-size: 10px; letter-spacing: .04em; }
  .sel-btn span { overflow: hidden; text-overflow: ellipsis; }
  .sel-tag-wrap { position: static; }   /* la liste se cale sur le bandeau (toute la largeur), pas sur son bouton */
  .sel-tag-panel { left: 50%; translate: -50% 0; width: min(340px, calc(100vw - 24px)); }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .sel-bar:not([hidden]), :where(:root[data-motion="reduce"]) .sel-bar.is-leaving { animation: none; }
/* Tablettes tactiles (761–1100 px) : la barre de navigation du bas y est aussi affichée (voir .bottom-nav) ; les bandeaux flottants passent au-dessus d'elle, comme sur téléphone, au lieu de la recouvrir */
@media (hover: none) and (pointer: coarse) and (min-width: 761px) and (max-width: 1100px) {
  body:has(.bottom-nav) :is(.save-bar, .undo-bar, .sel-bar) { bottom: calc(76px + env(safe-area-inset-bottom, 0px)); }
}
/* Modale « Changer d'avatar » */
.av-grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; margin: 6px 0 18px; }
/* Collection au doigt : l'appui long sur une carte active la sélection multiple (collection-select.js), pas la sélection de texte ni le menu de l'image */
@media (pointer: coarse) { [data-part="results"] .card { -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; } }
.av-cat { margin: 14px 0 0; font-size: 12.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); }
.av-cat + .av-grid { margin-top: 10px; }
.av-opt { appearance: none; padding: 0; border: 3px solid var(--line); border-radius: 50%; background: var(--card); cursor: var(--cur-hand); overflow: hidden; aspect-ratio: 1; transition: border-color .25s ease, scale .25s var(--ease); }
.av-opt img { display: block; width: 100%; height: 100%; object-fit: cover; }
.av-opt:hover, .av-opt:focus-visible { border-color: var(--brass-line); scale: 1.05; }
.av-opt.is-on { border-color: var(--brass); }
.av-opt:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
@media (max-width: 420px) { .av-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; } .vt-slots { gap: 6px; } }
/* Paramètres : bascule « compte privé » */
.settings .auth-card .btn-secondary { width: auto; }
.is-in-modal .sd-title { display: none; }
/* La classe « collection » (grille de la page Collection) ajoute de grandes marges : on les retire pour la vitrine et la liste de choix */
.cards.collection.pf-cards { padding: 0 0 24px; }
.cards.collection.pick-cards { padding: 0; }
.modal-box.sm-box { text-align: left; justify-items: stretch; }
.sm-box .fr-row { width: 100%; box-sizing: border-box; }
.fr-name, .social-dd a.fr-name { text-decoration: none; }

/* Menu Compte : chaque entrée a son icône (Profil, Amis, Paramètres, Aide et actualités, Déconnexion) */
.acct-dropdown .menu-link, .acct-dropdown .menu-row { display: flex; align-items: center; gap: 12px; }
.acct-dropdown .menu-link .ic, .acct-dropdown .menu-row .ic { flex: none; width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }

/* Notification sans joueur (nouvelle actualité, conditions mises à jour) : un losange laiton à la place de l'avatar */
.nt-ico { grid-row: 1 / span 2; place-self: center; width: 14px; height: 14px; rotate: 45deg; border: 1px solid var(--brass); background: color-mix(in srgb, var(--brass) 30%, transparent); }

/* ================= Paramètres en onglets (Personnalisation / Sécurité et confidentialité) : assets/settings.js ================= */
.st-tabs { display: flex; flex-wrap: wrap; gap: 4px 8px; max-width: 440px; margin: 0 auto 32px; border-bottom: 1px solid var(--line); }
.st-tab { appearance: none; flex: 1 1 auto; margin-bottom: -1px; padding: 14px 16px; border: 0; border-bottom: 2px solid transparent; background: none; color: var(--muted); font: 500 12px/1.3 var(--font); letter-spacing: .16em; text-transform: uppercase; text-align: center; cursor: var(--cur-hand); transition: color .3s ease, border-color .3s ease; }
.st-tab:hover, .st-tab:focus-visible { color: var(--text); }
.st-tab[aria-selected="true"] { color: var(--brass-ink); border-bottom-color: var(--brass); }
.st-tab:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.st-panel { display: block; }
.st-panel[hidden] { display: none; }
.st-panel:not([hidden]) { animation: wc-fade-in .3s ease backwards; }
/* Les encarts d'un onglet s'imbriquent en colonnes (comme des briques) : chacun garde sa hauteur, le suivant se glisse dans la colonne la moins remplie */
.st-cards { display: block; max-width: 440px; margin: 0 auto; }
.st-cards > .auth-card { width: 100%; margin: 0 0 32px; break-inside: avoid; }
.st-gap { height: 14px; }
.st-gap--lg { height: 28px; }
/* Téléphone et tablette : les deux onglets côte à côte, dans un cadre laiton, l'onglet actif en aplat (un « sélecteur » bien lisible) */
@media (max-width: 999px) {
  .st-tabs { flex-wrap: nowrap; gap: 4px; padding: 4px; border: 1px solid var(--brass-line); background: var(--surface); }
  .st-tab { flex: 1 1 0; min-width: 0; margin: 0; padding: 12px 8px; border: 0; font-size: 11px; letter-spacing: .1em; line-height: 1.35; transition: background .25s ease, color .25s ease; }
  .st-tab[aria-selected="true"] { background: var(--brass-ink); color: var(--on-brass); }
  .st-tab[aria-selected="true"]:focus-visible { outline-color: var(--text); }
}
@media (min-width: 1000px) {
  .st-tabs { max-width: 1240px; gap: 0 12px; }
  .st-tab { flex: 0 0 auto; padding: 16px 26px; }
  .st-cards { max-width: 1240px; columns: 2; column-gap: 40px; }
  .st-cards > .auth-card { margin: 0 0 40px !important; }
}
/* Interrupteur (thème clair) : une piste à angles en gradins, un losange qui glisse */
/* Interrupteurs des Paramètres (dessin « classique » de Claude Design, dérivé de la variante Astre) : une ligne encadrée (.switch), une piste à angles
   en gradins (.sw-track, bord laiton qui s'allume au survol) et le texte (.sw-text). Cochée = activé. Dessin .sw-classique pour les réglages (sons du
   jeu, compte privé) : un médaillon qui glisse et pivote, la piste se remplit de laiton ; le thème clair a son propre dessin (.sw-deco .sw-eventail, plus bas). */
.switch {
  --sw-steps: polygon(0 6px,3px 6px,3px 3px,6px 3px,6px 0,calc(100% - 6px) 0,calc(100% - 6px) 3px,calc(100% - 3px) 3px,calc(100% - 3px) 6px,100% 6px,100% calc(100% - 6px),calc(100% - 3px) calc(100% - 6px),calc(100% - 3px) calc(100% - 3px),calc(100% - 6px) calc(100% - 3px),calc(100% - 6px) 100%,6px 100%,6px calc(100% - 3px),3px calc(100% - 3px),3px calc(100% - 6px),0 calc(100% - 6px));
  position: relative; display: flex; align-items: center; gap: 16px; padding: 14px; border: 1px solid var(--line); background: var(--card);
  cursor: var(--cur-hand); -webkit-user-select: none; user-select: none; -webkit-tap-highlight-color: transparent;
}
.switch input { position: absolute; width: 1px; height: 1px; margin: 0; opacity: 0; pointer-events: none; }
.sw-track { position: relative; display: block; flex: none; width: 72px; height: 34px; overflow: hidden; }
.sw-track::before, .sw-track::after { content: ""; position: absolute; clip-path: var(--sw-steps); }
.sw-track::before { inset: 0; background: var(--brass-line); transition: background-color .3s; }
.sw-track::after { inset: 1px; background: var(--card); }
.sw-track > * { position: absolute; z-index: 1; display: block; }
.switch:hover .sw-track::before { background: var(--brass); }
.switch:has(input:focus-visible) .sw-track { outline: 2px solid var(--brass); outline-offset: 3px; }
.sw-text { display: flex; flex-direction: column; min-width: 0; }
.sw-text b { display: block; font-weight: 500; }
.sw-text small { display: block; margin-top: 4px; color: var(--muted); font-size: 12.5px; line-height: 1.45; }
.sw-track > *, .sw-track > i::before, .sw-track > i::after {
  transition: transform .4s cubic-bezier(.65, 0, .35, 1), opacity .4s ease, color .4s ease, background-color .4s ease, box-shadow .4s ease;
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .sw-track > *, :where(:root[data-motion="reduce"]) .sw-track > i::before, :where(:root[data-motion="reduce"]) .sw-track > i::after { transition-property: opacity, color, background-color; transition-duration: .15s; }
/* Classique : médaillon de laiton */
.sw-classique .sw-track { width: 64px; height: 32px; }
.sw-classique i { left: 4px; top: 4px; width: 24px; height: 24px; border-radius: 50%; z-index: 2; background: var(--brass-ink); }
.sw-classique input:checked + .sw-track i { transform: translateX(32px); background: var(--on-brass); }
/* Volume des sons (sous l'interrupteur « Sons du jeu ») : une piste laiton avec un losange qui glisse, comme le reste des Paramètres.
   Masquée quand le son est coupé (assets/settings.js). Le remplissage suit --val (posé en ligne par le script, en px : un
   pourcentage brut irait plus loin que le curseur, qui ne parcourt jamais toute la largeur du champ — son centre reste à
   une demi-largeur du bord aux deux extrémités). --thumb (13px) doit rester égal à la largeur du losange ci-dessous. */
.sw-vol { display: flex; align-items: center; gap: 14px; margin-top: 0; padding: 14px; border: 1px solid var(--line); background: var(--card); }
.sw-vol[hidden] { display: none; }
#vibration-row { margin-top: 24px; }   /* de l'air entre le volume des sons et l'interrupteur « Vibrations » */
.sw-vol .vol-ico { flex: none; width: 17px; height: 17px; color: var(--muted); fill: none; stroke: currentColor; stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.sw-vol input[type="range"] {
  -webkit-appearance: none; -moz-appearance: none; appearance: none; flex: 1; height: 3px; margin: 0; padding: 0; border: 0; background: linear-gradient(to right, var(--brass-ink) var(--val, 100%), var(--track) 0); outline: none; cursor: var(--cur-hand);
}
.sw-vol input[type="range"]::-webkit-slider-thumb {
  -webkit-appearance: none; width: 13px; height: 13px; background: var(--brass-ink); transform: rotate(45deg); transform-origin: center; box-shadow: 0 0 0 3px var(--card), 0 0 0 4px var(--brass-line); cursor: var(--cur-hand);
}
.sw-vol input[type="range"]::-moz-range-track { height: 3px; background: transparent; border: none; }
.sw-vol input[type="range"]::-moz-range-progress { height: 3px; background: var(--brass-ink); }
.sw-vol input[type="range"]::-moz-range-thumb {
  width: 13px; height: 13px; border: none; border-radius: 0; background: var(--brass-ink); transform: rotate(45deg); transform-origin: center; box-shadow: 0 0 0 3px var(--card), 0 0 0 4px var(--brass-line); cursor: var(--cur-hand);
}
.sw-vol input[type="range"]:focus-visible { outline: 2px solid var(--brass); outline-offset: 4px; }
/* Désactivé */
.switch:has(input:disabled) { cursor: var(--cur-blocked); opacity: .5; }
.switch:has(input:disabled):hover .sw-track::before { background: var(--brass-line); }
/* « Joueurs bloqués » : une ligne-lien comme une entrée de réglage (icône, titre, état, chevron), du même cadre que « Compte privé » */
.st-link { appearance: none; display: flex; align-items: center; gap: 14px; width: 100%; padding: 14px; border: 1px solid var(--line); background: var(--card); color: var(--text); font: inherit; text-align: left; cursor: var(--cur-hand); transition: border-color .25s ease, background .25s ease; }
.st-link:hover, .st-link:focus-visible { border-color: var(--brass-line); background: color-mix(in srgb, var(--brass) 6%, var(--card)); }
.st-link:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.st-link-ico { flex: none; display: grid; place-items: center; width: 34px; height: 34px; rotate: 45deg; border: 1px solid var(--brass-line); }
.st-link-ico svg { width: 18px; height: 18px; rotate: -45deg; fill: none; stroke: var(--brass-ink); stroke-width: 1.7; stroke-linecap: round; }
.st-link-text { flex: 1; min-width: 0; }
.st-link-text b { display: block; font-weight: 500; }
.st-link-text small { display: block; margin-top: 3px; color: var(--muted); font-size: 12.5px; line-height: 1.45; }
.st-link-go svg { display: block; width: 18px; height: 18px; fill: none; stroke: var(--muted); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: translate .25s ease, stroke .25s ease; }
.st-link:hover .st-link-go svg, .st-link:focus-visible .st-link-go svg { translate: 3px 0; stroke: var(--brass-ink); }
/* Fenêtre « Une seconde, tu n'as pas enregistré ! » : un losange laiton au-dessus du titre */
.leave-mark { display: block; width: 26px; height: 26px; margin: 0 auto 22px; rotate: 45deg; border: 1px solid var(--brass); box-shadow: inset 0 0 0 5px var(--surface), inset 0 0 0 6px var(--brass-line); background: color-mix(in srgb, var(--brass) 55%, transparent); }
/* Collection d'un ami : lien de retour au profil, bouton « Voir sa collection » (lien qui a l'allure d'un bouton) */
.coll-back { margin: -6px 0 22px; font-size: 13px; }
.coll-back a { color: var(--muted); text-decoration: none; letter-spacing: .08em; }
.coll-back a:hover, .coll-back a:focus-visible { color: var(--brass-ink); }

/* ================= pièces et page Jeux (0.13.0) : src/Pieces.php, src/Missions.php, src/JeuxView.php, assets/jeux.js ================= */
/* Dessin de la pièce : un bloc SVG sans dimension, présent une fois dans la page (les icônes s'y réfèrent par <use>) */
.sprite { position: absolute; width: 0; height: 0; overflow: hidden; }
/* L'icône de pièce suit la taille du texte où elle se trouve (em) ; quelques contextes ci-dessous la grossissent ou la réduisent un peu */
.wc-piece { width: 1.25em; height: 1.25em; flex: none; vertical-align: -.28em; }
/* Portefeuille de l'en-tête (à gauche de l'icône Amis) : pastille à angles en gradins, la pièce puis le solde */
.acct-pill.wallet { flex-direction: row; align-items: center; gap: 8px; padding: 6px 14px 6px 10px; font-size: 14px; letter-spacing: .05em; text-transform: none; }
.wallet .wc-piece { width: 1.55em; height: 1.55em; vertical-align: middle; }
.wallet b { font-weight: 500; font-variant-numeric: tabular-nums; }
/* Mobile : le portefeuille est la première ligne du menu Compte */
.acct-dropdown a.wallet-row { display: flex; align-items: center; gap: 12px; }
.wallet-row .wc-piece { width: 1.4em; height: 1.4em; vertical-align: middle; }
.wallet-row b { margin-left: auto; font-weight: 500; color: var(--brass-ink); font-variant-numeric: tabular-nums; }

/* Page Jeux */
.jeux { max-width: 960px; padding: clamp(40px, 7vw, 80px) 0 72px; }
.jeux h1 { margin: 0 0 12px; font-size: clamp(26px, 4vw, 34px); font-weight: 400; letter-spacing: .14em; text-transform: uppercase; }
.jeux .doc-lead { max-width: 640px; }
.jx-section { margin: 40px 0 0; }
.jx-section > h2 { margin: 0 0 16px; padding-bottom: 10px; border-bottom: 1px solid var(--brass-line); font-size: 15px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); }
.jx-bonus { display: flex; align-items: center; gap: 12px; margin: 0 0 20px; padding: 12px 16px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 8%, transparent); font-size: 14px; line-height: 1.45; }
.jx-msg { min-height: 1.4em; margin: 0 0 12px; color: var(--err-ink); font-size: 14px; }
.jx-period { margin: 0 0 30px; }
.jx-head { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 20px; margin: 0 0 12px; }
.jx-head h3 { margin: 0; font-size: 18px; font-weight: 500; letter-spacing: .04em; }
.jx-reset { color: var(--muted); font-size: 13px; letter-spacing: .04em; }
.jx-reset b { font-weight: 500; color: var(--text); font-variant-numeric: tabular-nums; }
.jx-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
/* Missions : colonnes fixes (texte et barre | bouton ou « Récupérée » | récompense, tout à droite) : toutes les barres ont la même longueur.
   Hiérarchie : À RÉCUPÉRER (en tête, encadré laiton, bouton plein) > EN COURS (carte en relief, filet laiton à gauche) > RÉCUPÉRÉE (en bas, repliée sur une
   ligne : ni barre ni fond, texte discret précédé d'une coche). L'ordre est posé par JeuxView. */
.jx-mission { display: grid; grid-template-columns: minmax(0, 1fr) 128px 110px 40px; align-items: center; gap: 12px 24px; padding: 16px 18px; background: var(--surface); border: 1px solid var(--line); border-left: 3px solid var(--brass-line); transition: border-color .3s ease, background .3s ease; }
.jx-mission.is-progress { background: color-mix(in srgb, var(--card) 70%, var(--surface)); border-left-color: var(--brass); box-shadow: 0 1px 0 var(--line); }
.jx-mission.is-progress .jx-label { font-weight: 500; }
.jx-mission.is-ready { border: 1px solid var(--brass); border-left-width: 3px; background: color-mix(in srgb, var(--brass) 13%, var(--surface)); box-shadow: 0 0 0 1px color-mix(in srgb, var(--brass) 25%, transparent), 0 6px 18px -10px color-mix(in srgb, var(--brass) 70%, transparent); }
.jx-mission.is-ready .jx-label { font-weight: 500; color: var(--brass-ink); }
.jx-mission.is-claimed { padding: 9px 18px; background: none; border: 1px dashed var(--line); }
.jx-mission.is-claimed .jx-label { font-size: 13.5px; color: var(--muted); }
.jx-mission.is-claimed .jx-pieces b, .jx-mission.is-claimed .jx-packs { color: var(--muted); font-weight: 400; }
.jx-mission.is-claimed .wc-piece { filter: grayscale(1) opacity(.6); }
.jx-mission.is-meta:not(.is-claimed) { border-style: dashed; border-left-style: solid; }
.jx-main { min-width: 0; display: grid; grid-template-columns: minmax(0, 1fr) 4.6em; align-items: center; gap: 8px 14px; }
.jx-label { grid-column: 1 / -1; display: flex; align-items: center; gap: 8px; margin: 0; font-size: 15px; line-height: 1.35; }
.jx-check { flex: none; width: 15px; height: 15px; fill: none; stroke: var(--brass); stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.jx-bar { display: block; height: 6px; background: var(--brass-line); overflow: hidden; }
.jx-bar i { display: block; height: 100%; width: 0; background: linear-gradient(90deg, #b8862a, #f3d982); transition: width .6s ease; }
.jx-count { text-align: right; color: var(--muted); font-size: 13px; font-variant-numeric: tabular-nums; letter-spacing: .04em; }
.jx-reward { justify-self: end; display: grid; justify-items: end; gap: 3px; text-align: right; }
.jx-pieces { display: inline-flex; align-items: center; gap: 6px; }
.jx-pieces b { font-weight: 500; color: var(--brass-ink); font-variant-numeric: tabular-nums; }
.jx-packs { color: var(--muted); font-size: 12px; letter-spacing: .04em; }
.jx-claim { justify-self: center; animation: jx-call 2.4s ease-in-out infinite; }
@keyframes jx-call { 0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--brass) 45%, transparent); } 50% { box-shadow: 0 0 0 5px color-mix(in srgb, var(--brass) 0%, transparent); } }
.jx-claim:disabled { animation: none; }
.jx-done { justify-self: center; color: var(--muted); font-size: 11.5px; letter-spacing: .14em; text-transform: uppercase; white-space: nowrap; }
@media (max-width: 640px) {
  .jx-mission { grid-template-columns: minmax(0, 1fr) 84px; }
  .jx-mission .jx-main { grid-column: 1; grid-row: 1; }
  .jx-mission .jx-reward { grid-column: 2; grid-row: 1; }
  .jx-mission .jx-claim { grid-column: 1 / -1; grid-row: 2; }
  .jx-mission .jx-slot, .jx-mission .jx-done { display: none; }   /* sur téléphone, la coche suffit à dire « récupérée » */
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .jx-bar i, :where(:root[data-motion="reduce"]) .jx-mission { transition: none; } :where(:root[data-motion="reduce"]) .jx-claim { animation: none; }
/* Changer une mission (Missions::swap) : bouton « flèches qui tournent » à droite de la ligne, et sa confirmation sur toute la largeur, dessous */
.jx-swap { appearance: none; grid-column: 4; grid-row: 1; justify-self: end; display: grid; place-items: center; width: 36px; height: 36px; padding: 0; border: 1px solid var(--brass-line); background: none; color: var(--brass-ink); cursor: var(--cur-hand); transition: background .25s ease, border-color .25s ease; }
.jx-swap svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; transition: rotate .45s var(--ease); }
.jx-swap:hover, .jx-swap:focus-visible, .jx-swap[aria-expanded="true"] { background: color-mix(in srgb, var(--brass) 14%, transparent); border-color: var(--brass); }
.jx-swap:hover svg, .jx-swap[aria-expanded="true"] svg { rotate: 180deg; }
.jx-swap:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.jx-swap:disabled { opacity: .5; cursor: progress; }
.jx-swap.is-off, .jx-swap.is-off:hover, .jx-swap.is-off:focus-visible { opacity: .35; background: none; border-color: var(--brass-line); cursor: var(--cur-blocked); }
.jx-swap.is-off:hover svg { rotate: none; }
.jx-swapbox { grid-column: 1 / -1; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 20px; margin: 2px 0 0; padding: 12px 14px; border: 1px solid var(--line); background: var(--band); }
.jx-swapbox[hidden] { display: none; }
.jx-swapbox:not([hidden]) { animation: wc-fade-in .25s ease backwards; }
.jx-swapbox p { margin: 0; flex: 1 1 260px; font-size: 13.5px; color: var(--muted); }
.jx-swapbox p b { color: var(--text); font-weight: 600; }
.jx-swapbox .wc-piece { width: 1.25em; height: 1.25em; vertical-align: -.25em; }
.jx-swapact { display: inline-flex; gap: 8px; }
@media (max-width: 640px) {
  .jx-mission:has(.jx-swap) { grid-template-columns: minmax(0, 1fr) 84px 36px; }
  .jx-mission .jx-swap { grid-column: 3; grid-row: 1; }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .jx-swap svg { transition: none; } :where(:root[data-motion="reduce"]) .jx-swapbox:not([hidden]) { animation: none; }


/* Rangée de boutons d'action (public/echange.php : envoyer/annuler une proposition, accepter/négocier/refuser…) */
.wq-actions { display: flex; flex-wrap: wrap; gap: 14px; margin: 6px 0 4px; }

/* ================= Échanges entre amis : onglet « Échanges » de la fenêtre Social (public/echange.php, assets/trade.js, assets/social.js) ================= */
.tr .doc-lead { max-width: 720px; }
.tr-status { padding: 12px 16px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 8%, transparent); color: var(--text); }
.tr-status.is-accepted { border-color: #3f9b62; background: color-mix(in srgb, #3f9b62 14%, transparent); }
.tr-status.is-declined, .tr-status.is-cancelled, .tr-status.is-expired { border-color: var(--line); background: var(--surface); color: var(--muted); }
.tr-sides { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px; margin: 22px 0 0; }
.tr-side { padding: 18px; border: 1px solid var(--line); border-top: 2px solid var(--brass); background: var(--surface); min-width: 0; }
.tr-side h2, .tr-side h4 { margin: 0 0 14px; font-size: 14px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); }
.tr-grid { min-height: 20px; }
.tr-cards { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; gap: 10px !important; padding: 0 !important; }
.tr-cards .card { position: relative; }
.tr-empty { margin: 0 0 12px; color: var(--muted); font-size: 13px; }
.tr-empty[hidden] { display: none; }
.tr-gone { display: grid; place-items: center; aspect-ratio: 5 / 7; border: 1px dashed var(--line); color: var(--muted); font-size: 12px; text-align: center; padding: 8px; }
.tr-n { position: absolute; z-index: 3; top: 6px; left: 6px; padding: 3px 8px; background: var(--brass); color: var(--on-brass); font-size: 12px; font-weight: 500; letter-spacing: .04em; pointer-events: none; }
.tr-n[hidden] { display: none; }
/* Fiche de carte : liste des éditions (mois, vues, exemplaires) et choix de l'édition pour recycler, échanger ou transformer */
.modal-eds { margin: 0; padding: 0 0 12px; list-style: none; }
.modal-eds li { display: flex; justify-content: space-between; gap: 16px; padding: 6px 0; font-variant-numeric: tabular-nums; }
.modal-eds .eds-v { color: var(--muted); text-align: right; }
.modal-ed { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin: 16px 0 0; }
.modal-ed label { font-size: 11.5px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.modal-ed[hidden] { display: none; }
.modal-ed-label { margin: 0 0 8px; font-size: 11.5px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
/* Liste déroulante des éditions : le dessin de celle des étiquettes (.ctf-*), un seul choix */
.ced { --tc: var(--brass); }
/* Dans la fiche de carte, les listes déroulantes (éditions, étiquettes) passent PAR-DESSUS le reste, au lieu d'agrandir la fenêtre */
.modal-side .ced, .modal-side .ctf { position: relative; }
.modal-side .ced .ctf-panel, .modal-side .ctf .ctf-panel { position: absolute; top: 100%; left: 0; right: 0; z-index: 20; box-shadow: 0 14px 34px rgba(0, 0, 0, .45); }
.ced .ctf-field { min-height: 44px; }
.ced .ctf-open { color: var(--text); font-size: 14px; }
.ced-val { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ced-opt { appearance: none; width: 100%; border: 0; background: none; color: var(--text); font: inherit; font-size: 14px; text-align: left; }
.ced-opt:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.ced-opt[aria-selected="true"]::before { background: var(--tc); }
/* Les liens sous la carte, l'un au-dessus de l'autre */
.modal-left { grid-area: card; min-width: 0; }
.cm-box .modal-card { margin-inline: auto; }
.modal-links { display: grid; justify-items: center; gap: 12px; margin-top: 22px; text-align: center; }
.modal-links .modal-report { margin: 6px 0 0; }
/* « Éditions » : ligne à déplier, tout en bas de la colonne du milieu */
.modal-edrow { margin-top: 20px; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line); }
.modal-edrow[hidden] { display: none; }
.modal-edrow .modal-row { border-bottom: 0; }
.modal-edrow.is-reg { margin-top: 0; border: 0; }
.modal-sp-sum { display: flex; align-items: center; gap: 12px; padding: 12px 0; list-style: none; cursor: var(--cur-hand); -webkit-user-select: none; user-select: none; }
.modal-sp-sum::-webkit-details-marker { display: none; }
.modal-sp-label { font-size: 11.5px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.modal-sp-n { margin-left: auto; font-weight: 500; font-variant-numeric: tabular-nums; }
.modal-sp-sum svg { flex: none; width: 12px; height: 12px; fill: none; stroke: var(--muted); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: rotate .25s ease; }
.modal-sp[open] .modal-sp-sum svg { rotate: 180deg; }
.modal-sp-sum:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
/* Registre des exemplaires (assets/card-modal.js, paintRegistry) : une édition par volet, un tableau d'exemplaires dedans */
/* Registre des exemplaires, « Équerres » (design/propositions-exemplaires-deco.html, E2) : chaque édition est un volet au cadre fin tenu par deux équerres de laiton
   (angles opposés), un léger voile doré en haut, le nombre d'exemplaires en grand chiffre Limelight ; une ziggourat à trois gradins devant chaque date. Volets repliés au départ,
   dépliés et repliés en animation (card-modal.js, animateFold). */
.modal-reg { padding: 14px 0 12px; }
.modal-reg-label { margin: 0 0 10px; font-size: 11.5px; font-weight: 500; letter-spacing: .28em; text-transform: uppercase; color: var(--brass-ink); }
.modal-reg-ed { position: relative; margin: 0 0 12px; border: 1px solid var(--line); background: linear-gradient(180deg, color-mix(in srgb, var(--brass) 8%, transparent), transparent 64px), var(--surface); }
.modal-reg-ed::before, .modal-reg-ed::after { content: ""; position: absolute; width: 14px; height: 14px; pointer-events: none; }
.modal-reg-ed::before { top: -3px; left: -3px; border-top: 2px solid var(--brass); border-left: 2px solid var(--brass); }
.modal-reg-ed::after { bottom: -3px; right: -3px; border-bottom: 2px solid var(--brass); border-right: 2px solid var(--brass); }
.modal-reg-sum { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 3px 10px; padding: 13px 16px; font-size: 14px; list-style: none; cursor: var(--cur-hand); -webkit-user-select: none; user-select: none; }
.modal-reg-sum::-webkit-details-marker { display: none; }
.modal-reg-sum b { grid-column: 1; grid-row: 1; min-width: 0; font-size: 12.5px; font-weight: 500; letter-spacing: .22em; text-transform: uppercase; }
.modal-reg-sum .rg-v { grid-column: 1; grid-row: 2; margin-top: 2px; font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.modal-reg-sum .rg-q { grid-column: 2; grid-row: 1 / span 2; align-self: center; font: 24px/1 var(--font-title); color: var(--brass-ink); }
.modal-reg-sum svg { grid-column: 3; grid-row: 1 / span 2; align-self: center; width: 12px; height: 12px; fill: none; stroke: var(--muted); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: rotate .3s ease; }
.modal-reg-ed[open]:not(.is-closing) .modal-reg-sum svg { rotate: 180deg; }
.modal-reg-sum:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.modal-reg-list { margin: 0 16px; padding: 0; list-style: none; border-top: 1px solid var(--brass-line); }
.modal-reg-list li { display: grid; gap: 3px; padding: 11px 0; border-bottom: 1px dashed var(--line); }
.modal-reg-list li:last-child { border-bottom: 0; }
.modal-reg-list .rg-top { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 2px 10px; }
.modal-reg-list .rg-top b { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 500; font-variant-numeric: tabular-nums; white-space: nowrap; }
.modal-reg-list .rg-top b::before { content: ""; flex: none; width: 10px; height: 7px; background: var(--brass); clip-path: polygon(0 100%, 0 70%, 20% 70%, 20% 40%, 40% 40%, 40% 0, 60% 0, 60% 40%, 80% 40%, 80% 70%, 100% 70%, 100% 100%); }
.modal-reg-list .rg-prior { font-size: 12px; color: var(--brass-ink); }
.modal-reg-list .rg-first { padding-left: 18px; font-size: 12px; color: var(--muted); overflow-wrap: anywhere; }
.modal-reg-list .rg-first span { color: var(--text); }
.modal-reg-list .rg-first span.is-me { color: var(--brass-ink); }
.modal-reg-list .rg-more { display: block; padding-left: 0; color: var(--muted); font-size: 12px; font-style: italic; }
.tr-cards .card .qty { display: none; }
.tr-minus { position: absolute; z-index: 4; top: 5px; right: 5px; display: grid; place-items: center; width: 26px; height: 26px; padding: 0; border: 0; border-radius: 50%; background: #b8453f; color: #fff; cursor: var(--cur-hand); }
.tr-minus svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2.6; stroke-linecap: round; }
/* Icône « i » des cartes du sélecteur d'échange et des cartes déjà dans l'échange (trade.js) : un losange à double filet, comme le reste des accents du thème ; la fiche de la carte
   s'ouvre sans la choisir. Halo sombre dessiné dans le SVG (pas de filtre : il saccaderait la transition). Au survol, le losange se remplit de laiton. */
.tr-info { position: absolute; z-index: 4; top: 5px; right: 5px; display: grid; place-items: center; width: 34px; height: 34px; padding: 0; border: 0; background: none; color: var(--brass-ink); cursor: var(--cur-hand); -webkit-tap-highlight-color: transparent; transition: transform .3s cubic-bezier(.2, .8, .2, 1), color .3s ease; }
.tr-info svg { width: 100%; height: 100%; overflow: visible; fill: none; stroke: currentColor; stroke-width: 1.4; stroke-linecap: round; stroke-linejoin: round; }
.tr-info .ti-halo { fill: rgba(0, 0, 0, .5); stroke: none; }
.tr-info .ti-d { fill: color-mix(in srgb, var(--card) 92%, transparent); stroke-width: 1.7; transition: fill .3s ease, stroke .3s ease; }
.tr-info .ti-d2 { stroke-width: .9; opacity: .55; transition: opacity .3s ease; }
.tr-info .ti-i, .tr-info .ti-dot { transition: stroke .3s ease, fill .3s ease; }
.tr-info .ti-i { stroke-width: 2; }
.tr-info .ti-dot { fill: currentColor; stroke: none; }
@media (hover: hover) {
  .tr-info:hover { transform: scale(1.12); }
  .tr-info:hover .ti-d { fill: var(--brass); stroke: var(--brass); }
  .tr-info:hover .ti-d2 { opacity: 0; }
  .tr-info:hover .ti-i { stroke: var(--on-brass); }
  .tr-info:hover .ti-dot { fill: var(--on-brass); }
}
.tr-info:active { transform: scale(.94); transition-duration: .1s; }
.tr-info:focus-visible { outline: 2px solid var(--brass); outline-offset: 1px; }
/* Dans le sélecteur, l'icône prend le coin en haut à droite : le nombre d'exemplaires se range à sa gauche */
.pick-cards .card:has(.tr-info) .qty { right: 44px; top: 9px; height: 26px; min-width: 26px; font-size: 12px; }
/* Sur une carte déjà dans l'échange, l'icône se range à gauche de la pastille « − » qui la retire */
.tr-cards .tr-info { top: 1px; right: 36px; }
@media (max-width: 760px) {
  .tr-info { width: 32px; height: 32px; }
  .pick-cards .card:has(.tr-info) .qty { right: 40px; top: 8px; }
  .tr-cards .tr-info { top: 2px; right: 34px; }
}
/* Fiche d'une carte en lecture seule (icône « i ») : pas d'actions, donc deux colonnes seulement (la carte, ses informations) */
.modal-box.cm-box.cm-ro { grid-template-columns: minmax(0, 270px) minmax(0, 1fr); grid-template-areas: "head head" "card info"; width: min(860px, 100%); }
.cm-ro .modal-side { display: none; }
@media (max-width: 680px) { .modal-box.cm-box.cm-ro { grid-template-columns: minmax(0, 1fr); grid-template-areas: "head" "card" "info"; } }
.tr-pieces { display: flex; align-items: center; gap: 10px; margin: 14px 0 0; padding: 10px 12px; border: 1px solid var(--line); background: var(--card); }
.tr-pieces .wc-piece { width: 1.5em; height: 1.5em; }
.tr-pieces input { flex: 1; min-width: 0; appearance: textfield; -moz-appearance: textfield; border: 0; background: none; color: var(--text); font: inherit; font-size: 16px; text-align: right; font-variant-numeric: tabular-nums; }
.tr-pieces input:focus-visible { outline: none; }
.tr-pieces:focus-within { border-color: var(--brass); }
.tr-hint { display: block; margin: 6px 0 0; color: var(--muted); font-size: 12.5px; }
.tr-piecesline { display: flex; align-items: center; gap: 8px; margin: 14px 0 0; font-size: 16px; }
.tr-piecesline b { color: var(--brass-ink); font-weight: 500; font-variant-numeric: tabular-nums; }
.tr-picker { margin: 34px 0 0; }
.tr-filters.coll-filters, .tr-tags.coll-tags { margin-top: 16px; padding-top: 16px; }
.tr-tags.coll-tags[hidden] { display: none; }
.tr-tabs { display: flex; gap: 8px; margin: 0 0 12px; border-bottom: 1px solid var(--line); }
.tr-tab { appearance: none; margin-bottom: -1px; padding: 12px 18px; border: 0; border-bottom: 2px solid transparent; background: none; color: var(--muted); font: 500 12px/1.3 var(--font); letter-spacing: .14em; text-transform: uppercase; cursor: var(--cur-hand); }
.tr-tab[aria-selected="true"] { color: var(--brass-ink); border-bottom-color: var(--brass); }
.tr-tab:hover, .tr-tab:focus-visible { color: var(--text); }
@media (max-width: 760px) { .tr-sides { grid-template-columns: minmax(0, 1fr); } .tr-tab { flex: 1; padding: 12px 6px; letter-spacing: .06em; font-size: 11px; } }
/* Mes échanges */
.tl-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.tl-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto; align-items: center; gap: 14px; padding: 12px 16px; border: 1px solid var(--line); background: var(--surface); }
.tl-av { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; border: 2px solid var(--line); }
.tl-main { min-width: 0; display: grid; gap: 2px; }
.tl-name { color: var(--text); font-weight: 500; text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tl-sum { color: var(--muted); font-size: 13px; }
.tl-hint { color: var(--muted); font-size: 12px; letter-spacing: .08em; text-transform: uppercase; }
.tl-row.is-accepted .tl-hint { color: #3f9b62; }
@media (max-width: 560px) { .tl-row { grid-template-columns: auto minmax(0, 1fr) auto; } .tl-hint { display: none; } }

/* Liste Amis : champ de recherche, lien « Mes échanges », icône d'échange de chaque ligne */
.fr-search { display: block; width: calc(100% - 8px); margin: 8px 4px 6px; box-sizing: border-box; appearance: none; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 9px 12px; font: inherit; font-size: 14px; }
.fr-search:focus-visible { outline: none; border-color: var(--brass); }
.fr-btn svg { fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }

/* « Ajouter un ami » est maintenant sous le titre de la liste : filet dessous plutôt que dessus */
.social-dd .sd-add, .sm-box .sd-add { margin-top: 0; border-top: 0; border-bottom: 1px solid var(--line); }

/* Recharger le stock vide contre des pièces (page Paquets) */
.refill-btn { appearance: none; display: inline-flex; align-items: center; gap: 10px; padding: 11px 18px; border: 1px solid var(--brass); background: color-mix(in srgb, var(--brass) 14%, transparent); color: var(--brass-ink); font: 500 12px/1 var(--font); letter-spacing: .12em; text-transform: uppercase; cursor: var(--cur-hand); transition: background .3s ease; }
.refill-btn[hidden] { display: none; }
.refill-btn:hover:not(:disabled), .refill-btn:focus-visible { background: color-mix(in srgb, var(--brass) 28%, transparent); outline: none; }
.refill-btn:disabled { opacity: .5; cursor: var(--cur-blocked); }
.refill-btn b { font-weight: 500; color: var(--text); letter-spacing: .06em; }
.refill-btn .wc-piece { width: 1.45em; height: 1.45em; vertical-align: middle; }
.refill-msg { min-height: 1.3em; margin: 4px 0 0; text-align: center; }

/* ---------- Recyclage d'une carte (fenêtre de détail, card-modal.js) ---------- */
/* Fiche de carte : liens (Wikipédia, crédit), puis « Favoris » et « Recycler » côte à côte ; « Recycler » a le dessin de « Recharger le stock » (page Paquets) : angles en gradins,
   fond sombre teinté de laiton, « RECYCLER │ +N » et l’icône des pièces */
.modal-btns { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 12px; margin: 16px 0 0; }
.rc-wrap { margin: 14px 0 0; }
.rc-wrap:has(.rc-panel[hidden]):not(:has(.rc-done)) { display: none; }   /* rien à montrer sous les boutons */
.rc-btn { --s: 3px; appearance: none; display: inline-flex; align-items: center; gap: 12px; height: 40px; padding: 0 14px 0 16px; border: 0; white-space: nowrap;
  background: color-mix(in srgb, var(--brass) 18%, var(--card)); box-shadow: inset 0 0 0 1px var(--brass-line); color: var(--brass-ink); font: inherit; cursor: var(--cur-hand); }
.rc-btn:hover, .rc-btn[aria-expanded="true"] { background: color-mix(in srgb, var(--brass) 32%, var(--card)); }
.rc-btn:focus-visible { outline: 2px solid var(--brass); outline-offset: -4px; }
.rc-btn .rc-label { font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; line-height: 1.2; }
.rc-btn .rc-cost { display: inline-flex; align-items: center; gap: 5px; padding-left: 12px; border-left: 1px solid var(--brass-line); }
.rc-btn b { font-size: 13px; font-weight: 600; line-height: 1; color: var(--text); }
.rc-btn .wc-piece { width: 1.45em; height: 1.45em; flex: none; vertical-align: middle; }
.rc-panel { margin: 0; padding: 14px 16px; border: 1px solid var(--line); background: var(--band); }
.rc-panel[hidden] { display: none; }
.rc-count { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; margin: 0 0 10px; }
.rc-count label { font-size: 11.5px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.rc-stepper { display: inline-flex; align-items: stretch; border: 1px solid var(--line); }
.rc-step { appearance: none; width: 34px; border: 0; background: none; color: var(--text); font: 400 18px/1 var(--font); cursor: var(--cur-hand); }
.rc-step:hover, .rc-step:focus-visible { background: var(--track); }
.rc-stepper input { width: 56px; padding: 7px 4px; border: 0; border-left: 1px solid var(--line); border-right: 1px solid var(--line); background: var(--card); color: var(--text); font: inherit; font-size: 15px; text-align: center; font-variant-numeric: tabular-nums; -moz-appearance: textfield; }
.rc-stepper input::-webkit-inner-spin-button, .rc-stepper input::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; }
.rc-all { appearance: none; padding: 4px 2px; border: 0; background: none; color: var(--brass-ink); font: inherit; font-size: 13px; text-decoration: underline; text-decoration-color: var(--brass-line); text-underline-offset: 3px; cursor: var(--cur-hand); }
.rc-note, .rc-gain { margin: 0 0 12px; font-size: 14px; }
.rc-gain { color: var(--brass-ink); font-weight: 500; }
.rc-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.rc-msg { margin: 8px 0 0; font-size: 13px; color: var(--err-ink); }
.rc-msg:empty { display: none; }
.rc-done { margin: 0; font-size: 14px; color: var(--brass-ink); }
/* Carte recyclée dans un paquet ouvert : elle reste à sa place, mais estompée */
.card.is-recycled { opacity: .38; filter: grayscale(.7); }

/* ---------- Fenêtre « Social » (assets/social.js) : onglets Amis et Échanges ---------- */
.modal-box.sm-box.sc-box { width: min(1040px, 100%); }
.sc-tabs { display: flex; gap: 6px; margin: 10px 0 18px; border-bottom: 1px solid var(--line); }
.sc-tab { appearance: none; position: relative; display: inline-flex; align-items: center; gap: 8px; margin-bottom: -1px; padding: 12px 20px; border: 0; border-bottom: 2px solid transparent; background: none; color: var(--muted); font: 500 12.5px/1.3 var(--font); letter-spacing: .16em; text-transform: uppercase; cursor: var(--cur-hand); transition: color .25s ease, border-color .25s ease; }
.sc-tab[aria-selected="true"] { color: var(--brass-ink); border-bottom-color: var(--brass); }
.sc-tab:hover, .sc-tab:focus-visible { color: var(--text); }
.sc-tab:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.sc-count { min-width: 20px; padding: 2px 6px; border-radius: 10px; background: #b8453f; color: #fff; font-size: 11px; font-weight: 500; letter-spacing: 0; text-align: center; }
.sc-count[hidden], .sc-count:empty { display: none; }
.sc-pane[hidden] { display: none; }
/* Amis : la liste prend toute la largeur de la fenêtre, lignes plus grandes */
.sc-friends .sd-add { width: 100%; }
.sc-friends .fr-search { width: 100%; margin: 12px 0 10px; padding: 11px 14px; font-size: 15px; }
.sc-friends .fr-row { gap: 16px; padding: 12px 4px; }
.sc-friends .fr-av { width: 44px; height: 44px; }
.sc-friends .fr-name { font-size: 16px; }
.sc-friends .fr-actions { gap: 6px; }
.sc-friends .fr-btn { width: 40px; height: 40px; }
.sc-friends .fr-btn svg { width: 20px; height: 20px; }
/* Échanges */
.sc-intro { margin: 0 0 8px; }
.sc-section { margin: 22px 0 0; }
.sc-h { margin: 0 0 12px; font-size: 13px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); }
.sc-back { appearance: none; margin: 0 0 16px; padding: 4px 2px; border: 0; background: none; color: var(--brass-ink); font: inherit; font-size: 14px; cursor: var(--cur-hand); text-decoration: underline; text-decoration-color: var(--brass-line); text-underline-offset: 4px; }
.sc-back:hover, .sc-back:focus-visible { color: var(--text); }
.tr-title { margin: 0 0 10px; font-size: clamp(18px, 2.4vw, 22px); font-weight: 400; letter-spacing: .1em; text-transform: uppercase; }
.tr-lead { margin: 0 0 6px; color: var(--muted); font-size: 14.5px; line-height: 1.55; }
.tr-lead.tr-status { color: var(--text); }
.sc-trade .tr-picker { margin-top: 26px; }
.sc-trade .pick-cards { grid-template-columns: repeat(var(--pick-cols, 5), minmax(0, 1fr)) !important; }
.tr-picker #tr-list { margin-top: 22px; }
/* Proposition d'échange (« Tu donnes » / « Tu reçois ») : un plateau collé en bas de la fenêtre, comme les fenêtres de choix des vitrines du profil (.ap-tray) ;
   les collections à parcourir au-dessus. Les cartes choisies y sont en miniatures, sur une ligne qui défile. */
.ap-tray.tr-tray { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 250px); align-items: center; gap: 12px 20px; margin-top: 18px; }
.tr-tray .wq-actions .btn { padding: 11px 14px; font-size: 11px; letter-spacing: .12em; white-space: normal; text-align: center; }
.tr-tray .tr-sides { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin: 0; }
.tr-tray .tr-side { padding: 10px 12px 12px; }
.tr-tray .tr-side h4 { margin: 0 0 8px; font-size: 12px; }
.tr-tray .tr-cards { display: flex !important; gap: 6px !important; overflow-x: auto; padding: 0 0 4px !important; overscroll-behavior: contain; }
.tr-tray .tr-cards .card { flex: 0 0 62px; width: 62px; }
.tr-tray .tr-cards .tr-info { display: none; }
.tr-tray .tr-minus { top: 2px; right: 2px; width: 20px; height: 20px; }
.tr-tray .tr-minus svg { width: 10px; height: 10px; }
.tr-tray .tr-empty { margin: 0 0 4px; font-size: 12px; line-height: 1.4; }
.tr-tray .tr-pieces { margin: 8px 0 0; padding: 5px 10px; }
.tr-tray .tr-pieces input { font-size: 15px; }
.tr-tray .tr-hint { margin-top: 4px; font-size: 11.5px; line-height: 1.4; }
.tr-tray-foot { display: grid; gap: 6px; justify-items: stretch; }
.tr-tray .wq-actions { flex-direction: column; align-items: stretch; gap: 8px; margin: 0; }
.tr-tray .sm-msg { max-width: 280px; margin: 0; }
.tr-tray .sm-msg:empty { display: none; }
@media (max-width: 860px) {
  .ap-tray.tr-tray { grid-template-columns: minmax(0, 1fr); gap: 10px; padding-top: 10px; padding-bottom: 12px; }
  .tr-tray .tr-side { padding: 8px 10px 10px; }
  .tr-tray .wq-actions .btn { padding-block: 10px; }
  .tr-tray .wq-actions { flex-direction: row; flex-wrap: wrap; justify-content: center; }
  .tr-tray .sm-msg { max-width: none; text-align: center; }
  .tr-tray .tr-hint { display: none; }
  .tr-tray .tr-cards .card { flex-basis: 52px; width: 52px; }
}
@media (max-width: 600px) {   /* téléphone : un plateau plus ramassé, la collection garde la place */
  .tr-tray .tr-empty { display: none; }
  .tr-tray .tr-side h4 { font-size: 11px; letter-spacing: .1em; }
  .tr-tray .tr-pieces { margin-top: 6px; padding: 3px 8px; }
  .tr-tray .wq-actions { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
  .tr-tray .wq-actions #tr-send { grid-column: 1 / -1; }
  .tr-tray .wq-actions .btn { padding: 8px 10px; font-size: 10.5px; }
}
@media (max-width: 760px) {
  .sc-tab { flex: 1; justify-content: center; padding: 12px 6px; letter-spacing: .08em; }
  .sc-trade .pick-cards { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}

/* ================= Animations de rareté (dessinées par Claude Design : losange révélateur) : assets/rarete.js ================= */
/* Adaptées au site : elles ne se jouent QUE quand une carte est révélée dans un paquet (classe fx-on posée par rarete.js sur l'évènement
   wc:card-revealed), jamais sur les cartes déjà retournées de la collection ; le losange qui s'ouvre est un élément (.fx-open) et non le ::after
   de la face, qui dessine déjà le cadre intérieur des cartes Rares et mieux.
   r3 Rare       : losange, lueur, éclats
   r4 Épique     : + onde
   r5 Légendaire : + rayons, secousse
   r6 Mythique   : + impact, liseré
   r7 Ultime     : + scintillements
   Les couches (lueur, onde…) sont créées par rarete-animations.js. */

.card:is(.r3, .r4, .r5, .r6, .r7) {
  --fx-delay: .45s;   /* fin du retournement (.card-in : 0,8 s, la face est visible vers la moitié) */
  --fx-glow: color-mix(in srgb, var(--rc) 45%, #fff);
  --fx-ring: polygon(evenodd, 50% 0, 100% 50%, 50% 100%, 0 50%, 50% 0, 50% 7%, 7% 50%, 50% 93%, 93% 50%, 50% 7%);
  --fx-dia: polygon(50% 0, 100% 50%, 50% 100%, 0 50%);
}
.cards.deck .card:is(.r3, .r4, .r5, .r6, .r7) { --fx-delay: .25s; }   /* pile de cartes (mobile) : retournement plus rapide */
/* La carte qui se révèle passe AU-DESSUS de ses voisines pendant l'effet : sinon les cartes d'à côté (peintes après elle) recouvraient l'onde, les rayons et les éclats, qui paraissaient
   coupés net aux bords de la carte. Les couches (.fx-lz) restent dans son contexte d'empilement : lueur, onde et rayons derrière la carte, impact, éclats et scintillements devant. */
.card.fx-on { isolation: isolate; z-index: 30; }
/* Mythique et Ultime : l'onde et les rayons portent plus loin (au-delà des cartes voisines) */
.card.r6 .fx-wave, .card.r6 .fx-rays { width: 210%; }
.card.r7 .fx-wave, .card.r7 .fx-rays { width: 270%; }
.card.r6 .fx-halo, .card.r7 .fx-halo { width: 118%; height: 114%; filter: blur(22px); }
.card.fx-on .card-front { overflow: hidden; }

/* Losange qui s'ouvre sur la face */
.fx-open {
  position: absolute; left: 50%; top: var(--fx-cy, 50%); width: 150%; aspect-ratio: 1; z-index: 5; pointer-events: none;
  background: radial-gradient(closest-side, #fff, var(--fx-glow) 50%, var(--rc));
  clip-path: var(--fx-ring); opacity: 0;
  animation: fx-open .9s var(--fx-delay) cubic-bezier(.3,.6,.3,1) both;
}
.card.fx-on .card-front { animation: fx-flash .7s var(--fx-delay) ease-out; }
@keyframes fx-open {
  0%   { opacity: 1; transform: translate(-50%,-50%) scale(.05); }
  70%  { opacity: .9; }
  100% { opacity: 0; transform: translate(-50%,-50%) scale(1.6); }
}
@keyframes fx-flash { 0% { filter: none; } 18% { filter: brightness(1.55) saturate(1.2); } 100% { filter: none; } }

/* Couches */
.fx-lz { position: absolute; inset: 0; pointer-events: none; }
.fx-lz > i { position: absolute; left: 50%; top: var(--fx-cy, 50%); opacity: 0; }

/* Lueur */
.fx-halo {
  width: 108%; height: 106%; z-index: -1; background: var(--rc); filter: blur(14px); border-radius: 8%;
  animation: fx-halo 1s var(--fx-delay) ease-out both;
}
@keyframes fx-halo {
  0%   { opacity: 0;  transform: translate(-50%,-50%) scale(.9); }
  30%  { opacity: .9; transform: translate(-50%,-50%) scale(1.03); }
  100% { opacity: 0;  transform: translate(-50%,-50%) scale(1.1); }
}

/* Onde */
.fx-wave {
  width: 160%; aspect-ratio: 1; z-index: -1; clip-path: var(--fx-ring);
  background: radial-gradient(closest-side, var(--fx-glow) 55%, var(--rc));
  animation: fx-grow 1.2s calc(var(--fx-delay) + .05s) cubic-bezier(.15,.8,.3,1) both;
}
.fx-wave + .fx-wave { animation-delay: calc(var(--fx-delay) + .3s); animation-duration: 1.4s; }
@keyframes fx-grow {
  0%   { opacity: 1; transform: translate(-50%,-50%) scale(.1); }
  100% { opacity: 0; transform: translate(-50%,-50%) scale(1); }
}

/* Rayons */
.fx-rays {
  width: 160%; aspect-ratio: 1; z-index: -1; clip-path: var(--fx-dia);
  background: repeating-conic-gradient(var(--rc) 0 2deg, transparent 2deg 9deg, var(--rc) 9deg 10deg, transparent 10deg 18deg);
  -webkit-mask: radial-gradient(closest-side, transparent 25%, #000 38%, transparent 100%);
          mask: radial-gradient(closest-side, transparent 25%, #000 38%, transparent 100%);
  animation: fx-rays 1.3s var(--fx-delay) cubic-bezier(.2,.7,.3,1) both;
}
.card.r7 .fx-rays { animation-duration: 2s; }
@keyframes fx-rays {
  0%   { opacity: 0; transform: translate(-50%,-50%) scale(.3); }
  22%  { opacity: 1; }
  65%  { opacity: .8; }
  100% { opacity: 0; transform: translate(-50%,-50%) scale(1.05); }
}

/* Impact */
.fx-impact {
  width: 150%; aspect-ratio: 1; z-index: 3; background: var(--fx-glow);
  clip-path: polygon(evenodd, 50% 0, 100% 50%, 50% 100%, 0 50%, 50% 0, 50% 3%, 3% 50%, 50% 97%, 97% 50%, 50% 3%);
  animation: fx-impact .6s calc(var(--fx-delay) - .15s) cubic-bezier(.5,0,.7,.4) both;
}
@keyframes fx-impact {
  0%   { opacity: 0; transform: translate(-50%,-50%) scale(1.1); }
  60%  { opacity: 1; transform: translate(-50%,-50%) scale(.72); }
  100% { opacity: 0; transform: translate(-50%,-50%) scale(.66); }
}

/* Liseré */
.fx-edge {
  width: calc(100% + 6px); height: calc(100% + 6px); z-index: -1; overflow: hidden; border-radius: 8px;
  animation: fx-edge 1.6s calc(var(--fx-delay) + .1s) ease-in-out both;
}
.fx-edge::before {
  content: ""; position: absolute; left: 50%; top: 50%; width: 200%; aspect-ratio: 1;
  background: conic-gradient(transparent 0 290deg, var(--rc) 335deg, #fff 358deg, transparent 360deg);
  animation: fx-spin .8s calc(var(--fx-delay) + .1s) linear 2 both;
}
@keyframes fx-edge { 0% { opacity: 0; transform: translate(-50%,-50%); } 12%, 85% { opacity: 1; } 100% { opacity: 0; transform: translate(-50%,-50%); } }
@keyframes fx-spin { from { transform: translate(-50%,-50%) rotate(0); } to { transform: translate(-50%,-50%) rotate(360deg); } }

/* Éclats */
.fx-shard {
  width: calc(7px * var(--s, 1)); height: calc(12px * var(--s, 1)); z-index: 4;
  clip-path: var(--fx-dia); background: var(--rc);
  animation: fx-shard 1.2s calc(var(--fx-delay) + var(--t, 0s)) cubic-bezier(.1,.7,.3,1) both;
}
.fx-shard:nth-child(even) { background: var(--fx-glow); }
@keyframes fx-shard {
  0%   { opacity: 0; transform: translate(-50%,-50%) scale(.4); }
  10%, 70% { opacity: 1; }
  100% { opacity: 0; transform: translate(calc(-50% + var(--dx)), calc(-50% + var(--dy))) rotate(var(--r, 180deg)) scale(.6); }
}

/* Scintillements */
.fx-star {
  left: var(--x, 50%); top: var(--y, 50%); width: calc(18% * var(--s, 1)); aspect-ratio: 1; z-index: 4;
  clip-path: polygon(50% 0, 56% 44%, 100% 50%, 56% 56%, 50% 100%, 44% 56%, 0 50%, 44% 44%);
  background: radial-gradient(closest-side, #fff 15%, var(--fx-glow) 45%, var(--rc));
  animation: fx-star .7s calc(var(--fx-delay) + var(--t, 0s)) ease-out both;
}
@keyframes fx-star {
  0%   { opacity: 0; transform: translate(-50%,-50%) scale(0) rotate(-45deg); }
  40%  { opacity: 1; transform: translate(-50%,-50%) scale(1) rotate(0); }
  100% { opacity: 0; transform: translate(-50%,-50%) scale(.2) rotate(45deg); }
}

/* Secousse (sur .fx-shake-host ou le parent de la carte) */
.fx-shake { animation: fx-shake .45s linear; }
@keyframes fx-shake {
  0%, 100% { transform: none; }
  15% { transform: translate(-4px, 2px); } 30% { transform: translate(4px, -2px); }
  45% { transform: translate(-3px, -1px); } 60% { transform: translate(2px, 2px); } 80% { transform: translate(-1px, 0); }
}

/* Aura de lumière plein écran (Légendaire, Mythique, Ultime : voir assets/rarete.js, aura()). Vignettage sur les bords du site, dans la
   couleur de la rareté, mélangé en lumière additive (mix-blend-mode: screen) pour ne jamais assombrir ni gêner la lecture — le centre de
   l'écran, où se trouve la carte, reste transparent. Éteinte, elle passe en visibility: hidden une fois le fondu fini (plus rien à peindre). */
.wc-aura {
  position: fixed; inset: 0; z-index: 2000; pointer-events: none; opacity: 0; mix-blend-mode: screen; overflow: hidden; visibility: hidden;
  background: radial-gradient(ellipse at center, transparent 45%, var(--aura-c, var(--brass)) 100%);
  transition: opacity 1s ease-out, visibility 0s linear 1s;
}
.wc-aura.is-on { opacity: .55; visibility: visible; transition: opacity .5s ease-in, visibility 0s; }
/* Ultime : le dégradé irisé de la carte, qui tourne. C'est l'angle du dégradé conique qui s'anime (--a, voir @property plus haut), pas un
   disque géant que l'on fait pivoter : un calque surdimensionné, tournant, masqué et mélangé à la page laissait apparaître des zones noires
   (tuiles non peintes) sur les grands écrans. Ici un seul calque à la taille de l'écran, masque fixe, fondu normal. */
.wc-aura.r7 {
  mix-blend-mode: normal;
  background: conic-gradient(from calc(var(--a) + 20deg), #e58fb0, #e9c26f, #7fd6a8, #7fb6ec, #b791ef, #e58fb0);
  -webkit-mask: radial-gradient(ellipse at center, transparent 45%, #fff 100%);
          mask: radial-gradient(ellipse at center, transparent 45%, #fff 100%);
  animation: spin 7s linear infinite;
}

/* Mouvement réduit : léger éclat seulement */
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .fx-lz { display: none; }
  :where(:root[data-motion="reduce"]) .fx-open { display: none; }
  :where(:root[data-motion="reduce"]) .fx-shake { animation: none; }
  :where(:root[data-motion="reduce"]) .wc-aura { display: none; }

/* ================= Encart sous le paquet (page « Paquets ») : dessiné par Claude Design, dessin « Fronton » retenu =================
   Stock en médaillon au centre, paquets doré et diamanté de part et d'autre, missions du jour en frise dessous (public/paquets.php, assets/pack.js).
   La mise en page réagit à la largeur de l'encart (container queries : ≥ 600 px = ordinateur, sinon empilé), pas à celle de la fenêtre. */

.op-encart {
  --op-gold-1: #e2b84f;
  --op-gold-2: #f3d982;
  --op-ice-1: #9fd3f0;
  --op-ice-2: #cfeaff;
  /* encres lisibles dans les deux thèmes (mélangées avec --text) */
  --op-ice-ink: color-mix(in oklab, var(--op-ice-1) 48%, var(--text));
  --s: 12px;
  container-type: inline-size;
  box-sizing: border-box;
  width: 100%;
  max-width: 760px;
  margin: 28px auto 0;
  padding: 1px;
  background: var(--brass-line);
  color: var(--text);
  font-family: Jost, system-ui, sans-serif;
  font-size: 13px;
  line-height: 1.35;
}
.op-encart *, .op-encart *::before, .op-encart *::after { box-sizing: border-box; }

/* ---------- Angles en gradins (deux marches par coin) ---------- */
.op-encart,
.op-inner, .op-inner::before, .op-inner::after,
.op-encart .refill-btn,
.op-encart .gold-track.is-ready,
.op-encart .diamond-track.is-ready,
.op-encart .op-rewards,
.th-item::before, .th-item::after {
  clip-path: polygon(
    0 var(--s), calc(var(--s) / 2) var(--s), calc(var(--s) / 2) calc(var(--s) / 2), var(--s) calc(var(--s) / 2), var(--s) 0,
    calc(100% - var(--s)) 0, calc(100% - var(--s)) calc(var(--s) / 2), calc(100% - var(--s) / 2) calc(var(--s) / 2), calc(100% - var(--s) / 2) var(--s), 100% var(--s),
    100% calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s) / 2), calc(100% - var(--s)) calc(100% - var(--s) / 2), calc(100% - var(--s)) 100%,
    var(--s) 100%, var(--s) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s)), 0 calc(100% - var(--s))
  );
}

/* ---------- Double cadre ---------- */
.op-inner {
  --s: 12px;
  position: relative;
  display: grid;
  gap: 10px;
  padding: 14px 22px 12px;
  background: var(--card);
}
.op-inner::before, .op-inner::after { content: ""; position: absolute; --s: 8px; }
.op-inner::before { inset: 4px; background: var(--brass-line); }
.op-inner::after { inset: 5px; background: var(--card); }
.op-inner > * { position: relative; z-index: 1; }

/* ---------- En-tête : éventail + titre (ou phrase des garanties) ---------- */
.op-head {
  display: grid;
  justify-items: center;
  gap: 3px;
  text-align: center;
}
.op-head::before, .op-head::after {
  content: "";
  position: absolute;
  top: 14px;
  height: 1px;
}
.op-head::before { left: 8px; right: calc(50% + 28px); background: linear-gradient(90deg, transparent, var(--brass-line)); }
.op-head::after { right: 8px; left: calc(50% + 28px); background: linear-gradient(270deg, transparent, var(--brass-line)); }
.op-title {
  margin: 0;
  font-size: 10.5px;
  font-weight: 500;
  line-height: 1.2;
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--brass-ink);
}
.op-encart .hint {
  font-size: 12.5px;
  line-height: 1.3;
  color: var(--brass-ink);
  text-wrap: balance;
}
.op-encart .hint:empty { display: none; }
.op-head:has(.hint:not(:empty)) .op-title { display: none; }

/* ---------- Intitulés ---------- */
.op-label {
  margin: 0;
  font-size: 10.5px;
  font-weight: 500;
  line-height: 1.2;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--muted);
}

/* ---------- Grille : téléphone (empilé) ---------- */
.op-grid { display: grid; }
.op-zone { position: relative; display: grid; gap: 7px; align-content: start; padding: 12px 0; }
.op-zone + .op-zone { border-top: 1px solid var(--line); }
.op-zone--stock { padding-top: 4px; }

/* ---------- Stock ---------- */
.op-encart .pack-stock {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 4px 14px;
}
.op-encart .ps-gems { display: flex; gap: 11px; padding: 5px 3px; }
.op-encart .ps-gems i {
  display: block;
  width: 12px;
  height: 12px;
  border: 1px solid var(--brass);
  transform: rotate(45deg);
}
.op-encart .ps-gems i.on {
  background: linear-gradient(135deg, var(--brass-ink), var(--brass));
  box-shadow: 0 0 0 2px var(--card), 0 0 0 3px var(--brass-line);
}
.op-encart .ps-count {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}
.op-encart .ps-next { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.op-encart .ps-next:empty { display: none; }

/* ---------- Recharger ---------- */
.op-encart .refill-btn {
  --s: 6px;
  appearance: none;
  border: 0;
  margin: 2px 0 0;
  display: inline-flex;
  align-items: center;
  gap: 12px;
  padding: 9px 14px 9px 16px;
  white-space: nowrap;
  /* fond sombre teinté de laiton (et non laiton plein) : l'icône dorée des pièces s'y détache */
  background: color-mix(in srgb, var(--brass) 18%, var(--card));
  box-shadow: inset 0 0 0 1px var(--brass-line);
  color: var(--brass-ink);
  font: inherit;
  text-align: left;
  cursor: var(--cur-hand);
  justify-self: start;
}
.op-encart .refill-btn[hidden] { display: none; }
.op-encart .refill-btn:hover:not(:disabled) { background: color-mix(in srgb, var(--brass) 32%, var(--card)); }
.op-encart .refill-btn:focus-visible { outline: 2px solid var(--brass); outline-offset: -4px; }
.op-encart .refill-btn .op-refill-label { font-size: 11px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; line-height: 1.2; }
.op-encart .refill-btn .op-refill-cost { display: inline-flex; align-items: center; gap: 5px; padding-left: 12px; border-left: 1px solid var(--brass-line); }
.op-encart .refill-btn b { font-size: 13px; font-weight: 600; line-height: 1; color: var(--text); }
.op-encart .refill-btn .wc-piece { width: 1.45em; height: 1.45em; flex: none; }
.op-encart .refill-btn:disabled { background: var(--line); box-shadow: none; color: var(--muted); cursor: var(--cur-blocked); }
.op-encart .refill-btn:disabled b { color: var(--muted); }
.op-encart .refill-btn:disabled .wc-piece { opacity: .55; }
.op-encart .refill-msg { margin: 0; font-size: 11.5px; color: var(--muted); }
.op-encart .refill-msg:empty { display: none; }

/* ---------- Paquet doré ---------- */
.op-encart .gold-track,
.op-encart .diamond-track {
  --s: 6px;
  position: relative;
  display: grid;
  gap: 7px;
  padding: 6px 0;
}
.op-encart .gt-text, .op-encart .dt-text { display: flex; align-items: center; gap: 9px; }
.op-encart .gt-text::before, .op-encart .dt-text::before {
  content: "";
  flex: none;
  width: 7px;
  height: 7px;
  transform: rotate(45deg);
}
.op-encart .gt-text::before { background: linear-gradient(135deg, var(--op-gold-2), var(--op-gold-1)); }
.op-encart .dt-text::before { border: 1px solid var(--op-ice-ink); background: linear-gradient(135deg, var(--op-ice-2), var(--op-ice-1)); }
.op-encart .gt-bar {
  display: block;
  height: 7px;
  padding: 1px;
  border: 1px solid var(--brass-line);
  background: repeating-linear-gradient(90deg, transparent 0 calc(33.333% - 1px), var(--line) calc(33.333% - 1px) 33.333%);
}
.op-encart .gt-bar i {
  display: block;
  width: 0;
  height: 100%;
  background: linear-gradient(90deg, var(--op-gold-1), var(--op-gold-2));
  transition: width .4s ease;
}
.op-encart .gold-track.is-ready,
.op-encart .diamond-track.is-ready {
  padding: 9px 14px;
  overflow: hidden;
  font-weight: 600;
  letter-spacing: .02em;
}
.op-encart .gold-track.is-ready {
  background: linear-gradient(135deg, var(--op-gold-2), var(--op-gold-1) 60%, #cf9d38);
  color: #1d1606;
}
.op-encart .gold-track.is-ready .gt-text::before,
.op-encart .diamond-track.is-ready .dt-text::before { background: currentColor; border-color: currentColor; }
.op-encart .gold-track.is-ready .gt-bar { border-color: rgba(29, 22, 6, .35); background: none; }
.op-encart .gold-track.is-ready .gt-bar i { width: 100%; background: #1d1606; opacity: .75; }

/* ---------- Paquet diamanté ---------- */
.op-encart .dt-gems { display: flex; gap: 9px; padding: 3px 2px 2px 16px; }
.op-encart .dt-gems i {
  display: block;
  width: 8px;
  height: 8px;
  border: 1px solid var(--op-ice-ink);
  transform: rotate(45deg);
}
.op-encart .dt-gems i.on { background: linear-gradient(135deg, var(--op-ice-2), var(--op-ice-1)); }
.op-encart .diamond-track.is-ready {
  background: linear-gradient(135deg, var(--op-ice-2), var(--op-ice-1) 60%, #7fbde2);
  color: #0b2230;
}
.op-encart .diamond-track.is-ready .dt-gems i { border-color: #0b2230; background: #0b2230; opacity: .8; }

/* reflet sur les plaques prêtes */
.op-encart .gold-track.is-ready::after,
.op-encart .diamond-track.is-ready::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(105deg, transparent 40%, rgba(255, 255, 255, .55) 50%, transparent 60%) no-repeat;
  background-size: 250% 100%;
  animation: op-sheen 3.6s ease-in-out infinite;
  pointer-events: none;
}
@keyframes op-sheen {
  0%, 35% { background-position: 130% 0; }
  75%, 100% { background-position: -30% 0; }
}

/* ---------- Missions ---------- */
.op-zone--missions { gap: 8px; }
.op-m-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.op-link {
  font-size: 10.5px;
  font-weight: 500;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--brass-ink);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  white-space: nowrap;
}
.op-link::after { content: " \2192"; }
.op-link:hover { border-bottom-color: var(--brass-line); }
.op-encart .op-rewards {
  --s: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  padding: 5px 12px;
  background: var(--brass-ink);
  color: var(--on-brass);
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
  text-decoration: none;
}
.op-encart .op-rewards[hidden] { display: none; }
.op-encart .op-rewards:hover { background: var(--brass); }
.op-encart .op-rewards::before {
  content: "";
  width: 6px;
  height: 6px;
  background: currentColor;
  transform: rotate(45deg);
  animation: op-pulse 1.8s ease-in-out infinite;
}
@keyframes op-pulse { 50% { opacity: .25; } }
.op-missions { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.op-mission {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: baseline;
  column-gap: 10px;
  row-gap: 4px;
}
.op-m-name { font-size: 12.5px; }
.op-m-count { font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums; }
.op-m-bar { grid-column: 1 / -1; display: block; height: 3px; background: var(--line); }
.op-m-bar i { display: block; width: 0; height: 100%; background: var(--brass); }

/* ---------- Série de connexion (la frise elle-même : .op-frise, plus bas) ---------- */
.op-streak { position: relative; padding-top: 11px; border-top: 1px solid var(--line); display: grid; gap: 7px; }
.op-pack-mini { width: 13px; height: 18px; flex: none; margin: 0 -1px; }

/* ---------- Série de connexion : bouton de récupération ---------- */
.op-streak-action { display: flex; justify-content: center; padding-top: 1px; }
.op-streak-claimed { font-size: 11.5px; color: var(--muted); }
.op-streak-claimed.is-error { color: var(--err-ink); }
.op-streak-claimed[hidden] { display: none; }

/* ---------- Pied : deux liens discrets ---------- */
.op-foot {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 6px 16px;
  padding-top: 9px;
  border-top: 1px solid var(--line);
}
.op-foot::before {
  content: "";
  position: absolute;
  top: -4px;
  left: calc(50% - 3.5px);
  width: 7px;
  height: 7px;
  border: 1px solid var(--brass-line);
  background: var(--card);
  transform: rotate(45deg);
}
.op-encart .link-btn {
  appearance: none;
  border: 0;
  border-bottom: 1px solid var(--brass-line);
  background: none;
  padding: 1px 0;
  margin-left: auto;
  font: inherit;
  font-size: 12px;
  color: var(--brass-ink);
  cursor: var(--cur-hand);
}
.op-encart .link-btn:hover { border-bottom-color: var(--brass-ink); }

/* ---------- Téléphone ---------- */
@container (max-width: 599px) {
  .op-inner { padding: 14px 18px 12px; }
  .op-foot { justify-content: center; }
  .op-encart .link-btn { margin-left: 0; }
}

/* =====================================================================
   A · COLONNES — ordinateur
   Stock | Paquets spéciaux | Missions
   ===================================================================== */
@container (min-width: 600px) {
  .op-grid {
    grid-template-columns: minmax(0, .95fr) minmax(0, 1.05fr) minmax(0, 1.3fr);
    grid-template-areas:
      "stock gold    missions"
      "stock diamond missions";
    align-items: start;
  }
  .op-zone { padding: 0; }
  .op-zone + .op-zone { border-top: 0; }
  .op-zone--stock { grid-area: stock; padding-right: 22px; }
  .op-zone--gold { grid-area: gold; padding: 0 20px 6px; }
  .op-zone--diamond { grid-area: diamond; padding: 0 20px; }
  .op-zone--missions { grid-area: missions; padding-left: 22px; }
  .op-encart .pack-stock { flex-direction: column; align-items: flex-start; gap: 5px; }

  /* filets verticaux avec losange */
  .op-encart .op-zone--stock::after,
  .op-encart .op-zone--missions::after {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    width: 1px;
    background: linear-gradient(transparent, var(--brass-line) 30%, var(--brass-line) 70%, transparent);
  }
  .op-encart .op-zone--stock::after { right: 0; }
  .op-encart .op-zone--missions::after { left: 0; }
  .op-encart .op-zone--stock::before,
  .op-encart .op-zone--missions::before {
    content: "";
    position: absolute;
    z-index: 1;
    top: calc(50% - 3px);
    width: 6px;
    height: 6px;
    background: var(--brass);
    transform: rotate(45deg);
  }
  .op-encart .op-zone--stock::before { right: -2.5px; }
  .op-encart .op-zone--missions::before { left: -2.5px; }
}

/* ---------- Mouvement réduit ---------- */
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .op-encart .gold-track.is-ready::after,
  :where(:root[data-motion="reduce"]) .op-encart .diamond-track.is-ready::after,
  :where(:root[data-motion="reduce"]) .op-encart .op-rewards::before { animation: none; }
  :where(:root[data-motion="reduce"]) .op-encart .gold-track.is-ready::after,
  :where(:root[data-motion="reduce"]) .op-encart .diamond-track.is-ready::after { display: none; }
  :where(:root[data-motion="reduce"]) .op-encart .gt-bar i { transition: none; }

/* ---------- Cohabitation avec les anciens styles du site (stock, compteurs, bouton) ----------
   Le site tourne ses losanges avec la propriété rotate (l'encart avec transform : sans ceci, ils tourneraient deux fois), la barre dorée avait
   150 px de large, le bouton « Recharger » était transparent. */
.op-encart .ps-gems i, .op-encart .dt-gems i, .op-encart .gt-text::before, .op-encart .dt-text::before { rotate: none; }
.op-encart .gt-text::before, .op-encart .dt-gems i.on { box-shadow: none; }
.op-encart .gold-track, .op-encart .diamond-track { justify-items: stretch; color: inherit; font-size: inherit; letter-spacing: normal; }
.op-encart .gold-track.is-ready .gt-text, .op-encart .diamond-track.is-ready .dt-text { text-transform: none; letter-spacing: .02em; font-weight: 600; }
.op-encart .gt-bar { width: auto; overflow: hidden; }
.op-encart .gt-bar i { max-width: 100%; }
.op-encart .pack-stock { color: var(--text); font-size: inherit; letter-spacing: normal; }
.op-encart .ps-next { display: inline; }
.op-encart .ps-next::before { content: none; }
.op-encart .refill-btn { opacity: 1; }
.op-encart .refill-btn b { color: inherit; letter-spacing: normal; }
.op-encart .refill-btn:disabled { opacity: 1; }
.op-encart .refill-msg { min-height: 0; text-align: center; }
/* Plus de mission en cours aujourd'hui */
.op-m-empty { margin: 0; font-size: 12px; color: var(--muted); }
.op-encart .refill-msg.is-ok { color: var(--brass-ink); }
.op-encart .refill-msg.is-error { color: var(--err-ink); }
.op-encart { text-align: left; }   /* la page Paquets centre son texte (.opener) : l'encart garde sa propre mise en page */

/* ================= Interrupteur Art déco du thème (Paramètres) : cadre .sw-deco, dessin .sw-eventail (dessiné par Claude Design) =================
   Le demi-soleil (l'éventail) se lève sur l'horizon quand le thème clair est activé ; la nuit, une lune et des pièces. Les autres interrupteurs
   (« Sons du jeu », « Compte privé ») ont le dessin .sw-classique (voir « Interrupteurs des Paramètres »). */
.switch.sw-deco {
  --sw-steps: polygon(0 6px,3px 6px,3px 3px,6px 3px,6px 0,calc(100% - 6px) 0,calc(100% - 6px) 3px,calc(100% - 3px) 3px,calc(100% - 3px) 6px,100% 6px,100% calc(100% - 6px),calc(100% - 3px) calc(100% - 6px),calc(100% - 3px) calc(100% - 3px),calc(100% - 6px) calc(100% - 3px),calc(100% - 6px) 100%,6px 100%,6px calc(100% - 3px),3px calc(100% - 3px),3px calc(100% - 6px),0 calc(100% - 6px));
  align-items: center; -webkit-tap-highlight-color: transparent;
}
.sw-deco .sw-track, .sw-deco input:checked + .sw-track { position: relative; display: block; flex: none; width: 64px; height: 34px; margin: 0; border: 0; background: none; overflow: hidden; }
.sw-deco .sw-track::before, .sw-deco .sw-track::after { content: ""; position: absolute; clip-path: var(--sw-steps); }
.sw-deco .sw-track::before { inset: 0; background: var(--brass-line); transition: background-color .3s; }
.sw-deco .sw-track::after { inset: 1px; background: var(--card); }
.sw-deco .sw-track > * { position: absolute; z-index: 1; display: block; }
.sw-deco:hover .sw-track::before { background: var(--brass); }
/* Icônes : lune (croissant) et pièces */
.sw-eventail .sw-moon { left: 26px; top: 8px; width: 12px; height: 12px; border-radius: 50%; color: var(--brass-ink); box-shadow: inset 3.5px -2px 0 0 currentColor; }
.sw-eventail .sw-horizon { left: 6px; right: 6px; top: 26px; height: 1px; background: var(--brass-line); }
.sw-eventail .sw-stars { left: 14px; top: 10px; width: 2px; height: 2px; background: var(--muted); box-shadow: 34px -3px 0 var(--muted), 6px 8px 0 var(--muted), 30px 8px 0 var(--muted); }
/* Le demi-soleil en éventail */
.sw-eventail .sw-track i, .sw-eventail input:checked + .sw-track i {
  left: 10px; top: 4px; width: 44px; height: 22px; border-radius: 22px 22px 0 0; rotate: none; scale: none; translate: none;
  background:
    radial-gradient(circle at 50% 100%, var(--brass-ink) 0 6px, var(--card) 6.5px 8.5px, transparent 9px),
    repeating-conic-gradient(from -84deg at 50% 100%, var(--brass-ink) 0 8deg, transparent 8deg 20deg);
  transform-origin: 50% 100%; transform: scale(.2); opacity: 0;
}
.sw-eventail input:checked + .sw-track i { transform: none; opacity: 1; }
.sw-eventail input:checked + .sw-track .sw-moon { transform: translateY(10px); opacity: 0; }
.sw-eventail input:checked + .sw-track .sw-stars { opacity: 0; }
.sw-deco .sw-track > *, .sw-deco .sw-track > i::before, .sw-deco .sw-track > i::after {
  transition: transform .4s cubic-bezier(.65, 0, .35, 1), opacity .4s ease, color .4s ease, background-color .4s ease, box-shadow .4s ease;
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .sw-deco .sw-track > *, :where(:root[data-motion="reduce"]) .sw-deco .sw-track > i::before, :where(:root[data-motion="reduce"]) .sw-deco .sw-track > i::after { transition-property: opacity, color, background-color; transition-duration: .15s; }

/* ================= Paquet 3D « Écailles · éventail » (dessiné par Claude Design) : assets/pack3d.js =================
   Toutes les dimensions suivent --pk (posé par pack3d.js sur .opener : 1 sur téléphone, jusqu'à 1,5 sur ordinateur selon la hauteur de la fenêtre).
   La structure 3D est construite et stylée par pack3d.js (element.style) ; ce fichier gère la scène, la lueur, l'ombre, les états et le mouvement réduit.
   La sortie des cartes reste celle de pack.js (emerge) : elles partent du centre de l'ouverture donné par mouth(). */

/* ---- Scène (mise en page minimale : à fusionner avec l'existant) ---- */
.pack-stage {
  --p3-u: calc(var(--pk, 1) * 1px);
  position: relative;
  width: calc(var(--p3-u) * 200);
  height: calc(var(--p3-u) * 350);
  margin: 75px auto;   /* la scène garde sa hauteur d'avant (paquet + 150 px) : lueur, ombre et invite y tiennent, la page ne bouge pas */
  justify-self: center;
  touch-action: pan-y;               /* glisser horizontal = rotation, défilement vertical conservé */
  -webkit-user-select: none;
  user-select: none;
}

.pack3d-wrap,
.pack3d-model {
  position: absolute;
  inset: 0;
  pointer-events: none;
}
/* Règle d'or : AUCUNE opacité ni filtre sur un parent des plans 3D (.pack3d-wrap, .pack3d-model et leur descendance jusqu'aux faces), ni fixe ni animée :
   Chromium (Chrome, Opera, Edge) et les navigateurs mobiles peuvent alors écarter les faces à tort, et le paquet reste invisible. Fondus, gris et
   transparence sont posés sur les faces elles-mêmes (.p3-leaf, sans enfant 3D). */
.p3-leaf { transition: filter .4s, opacity .4s; }
.pack-stage.p3-in .p3-leaf { animation: wc-fade-in .5s ease backwards; }
/* Morceaux déchirés : affichés seulement à la déchirure, ils démarreraient alors les fondus d'apparition ci-dessus (.p3-in, .is-arriving après « Continuer »)
   depuis une opacité nulle, et le paquet entier masqué 60 ms plus tard, le paquet disparaissait (paquet rouvert moins de 0,9 s après « Continuer »). */
.pack-stage .p3-split .p3-leaf { animation: none; }

/* Zone cliquable transparente posée sur le paquet */
.pack3d {
  position: absolute;
  inset: 0;
  z-index: 2;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  cursor: var(--cur-hand);
  touch-action: pan-y;
  -webkit-tap-highlight-color: transparent;
}
.pack-stage.p3-grab .pack3d { cursor: grabbing; }
.pack3d:disabled { cursor: var(--cur-default); }
.pack-stage[data-state="idle"] .pack3d:disabled { cursor: var(--cur-blocked); }   /* plus de paquet : curseur « bloqué » (pendant une ouverture, le bouton est aussi désactivé : curseur normal) */
.pack3d:focus-visible { outline: 1px solid var(--brass, #c9a45c); outline-offset: calc(var(--p3-u) * 10); }
.pack3d .lb {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}

.pack-tip {
  position: absolute;
  top: calc(100% + var(--p3-u) * 34);
  left: 50%;
  width: max-content;
  max-width: 90vw;
  margin: 0;
  transform: translateX(-50%);
  color: var(--muted, #9a9686);
  font-family: Jost, 'Century Gothic', sans-serif;
  font-size: 14px;
  letter-spacing: .08em;
  text-align: center;
  transition: opacity .3s;
}
.pack-stage:not([data-state="idle"]) .pack-tip,
.pack-stage[data-state="idle"].p3-off .pack-tip { opacity: 0; }
.pack-tip { pointer-events: none; }
.pack-tip .on-touch { display: none; }
@media (max-width: 760px) {
  .pack-stage { margin: 26px auto 46px; }
  .pack-tip .on-touch { display: inline; }
  .pack-tip .on-mouse { display: none; }
}

/* ---- Lueur ---- */
.p3-glow {
  --p3-glow: rgba(201, 164, 92, .30);
  position: absolute;
  inset: calc(var(--p3-u) * -50) calc(var(--p3-u) * -70) calc(var(--p3-u) * -40);
  background: radial-gradient(closest-side, var(--p3-glow), transparent);
  opacity: .75;
  pointer-events: none;
  transition: opacity .4s;
}
.pack-stage[data-golden="1"]  .p3-glow { --p3-glow: rgba(243, 205, 110, .62); animation: p3-pulse 2.8s ease-in-out infinite, wc-fade-in .6s ease; }
.pack-stage[data-diamond="1"] .p3-glow { --p3-glow: rgba(150, 212, 255, .68); animation: p3-pulse 2.8s ease-in-out infinite, wc-fade-in .6s ease; }
.pack-stage[data-thematic="1"] .p3-glow { --p3-glow: rgba(190, 168, 235, .62); animation: p3-pulse 2.8s ease-in-out infinite, wc-fade-in .6s ease; }
.pack-stage[data-silver="1"]  .p3-glow { --p3-glow: rgba(215, 222, 230, .55); animation: p3-pulse 2.8s ease-in-out infinite, wc-fade-in .6s ease; }   /* la pulsation d'abord, le fondu d'apparition en dernier : il prime le temps de .6 s, puis la pulsation continue */

/* ---- Ombre au sol (insérée par le script) ---- */
.p3-shadow {
  position: absolute;
  left: calc(var(--p3-u) * 28);
  width: calc(var(--p3-u) * 144);
  top: calc(var(--p3-u) * 366);
  height: calc(var(--p3-u) * 18);
  border-radius: 50%;
  background: radial-gradient(closest-side, rgba(0, 0, 0, .45), transparent);
  animation: p3-shadow 4.2s ease-in-out infinite;
  transition: opacity .3s;
}

/* ---- Flottement (le modèle est dessiné en --p3-ss × puis réduit : amplitude multipliée d'autant ; 9 px à l'écran) ---- */
.p3-float { animation: p3-float 4.2s ease-in-out infinite; }

/* ==========================================================================
   États
   ========================================================================== */
.pack-stage:not([data-state="idle"]) .p3-float,
.pack-stage:not([data-state="idle"]) .p3-shadow { animation-play-state: paused; }

/* Grisé : aucun paquet disponible. Seulement AU REPOS : pendant l'ouverture, pack.js désactive aussi le bouton (pas de double clic), le paquet ne doit pas griser */
/* Gris et transparence posés sur chaque face (.p3-leaf), jamais sur un parent des plans 3D (voir plus haut) */
.pack-stage[data-state="idle"].p3-off .p3-leaf,
.pack-stage[data-state="idle"]:has(.pack3d:disabled) .p3-leaf { filter: grayscale(.85) brightness(.72); opacity: .5; }
.pack-stage[data-state="idle"].p3-off .p3-float,
.pack-stage[data-state="idle"].p3-off .p3-shadow,
.pack-stage[data-state="idle"]:has(.pack3d:disabled) .p3-float,
.pack-stage[data-state="idle"]:has(.pack3d:disabled) .p3-shadow { animation-play-state: paused; }
.pack-stage[data-state="idle"].p3-off .p3-glow,
.pack-stage[data-state="idle"]:has(.pack3d:disabled) .p3-glow { opacity: .12; animation: none; }

/* Secousse : lueur renforcée */
.pack-stage[data-state="shaking"] .p3-glow,
.pack-stage[data-state="tearing"] .p3-glow { opacity: 1; animation: none; }

/* Ouverture : la lueur et l'ombre s'effacent avec le sachet (0,85 → 1,6 s) */
.pack-stage[data-state="opened"] .p3-glow,
.pack-stage[data-state="opened"] .p3-shadow { animation: p3-fade .75s ease-in .85s forwards; }

/* Disparu (le paquet lui-même est masqué par visibility, jamais par une opacité : voir plus haut) */
.pack-stage[data-state="gone"] .p3-glow,
.pack-stage[data-state="gone"] .p3-shadow { opacity: 0; animation: none; }
/* La zone cliquable (transparente) ne doit pas rester posée sur les cartes et le bouton « Continuer ». Le paquet lui-même n'est PAS masqué en bloc
   (visibility sur .pack3d-wrap) : ses faces sont déjà effacées en fondu (pack3d.js, fadeOut), et masquer puis réafficher des plans 3D les laissait
   parfois invisibles sur Chrome Android. */
.pack-stage[data-state="gone"] .pack3d { visibility: hidden; pointer-events: none; }

/* ==========================================================================
   Animations
   ========================================================================== */
@keyframes p3-float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(calc(var(--pk, 1) * var(--p3-ss, 2) * -9px)); }   /* = 9 px à l'écran */
}
@keyframes p3-shadow {
  0%, 100% { transform: scale(1);   opacity: .9; }
  50%      { transform: scale(.84); opacity: .55; }
}
@keyframes p3-pulse {
  0%, 100% { opacity: .5; transform: scale(.93); }
  50%      { opacity: 1;  transform: scale(1.05); }
}
@keyframes p3-fade { to { opacity: 0; } }

/* ==========================================================================
   Mouvement réduit : ni flottement, ni pulsation (secousse et envol sont coupés par le script)
   ========================================================================== */
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .p3-float, :where(:root[data-motion="reduce"]) .p3-shadow, :where(:root[data-motion="reduce"]) .p3-glow { animation: none !important; }
  :where(:root[data-motion="reduce"]) .pack-stage[data-state="opened"] .p3-glow,
  :where(:root[data-motion="reduce"]) .pack-stage[data-state="opened"] .p3-shadow { animation: p3-fade .4s linear .6s forwards !important; }

/* ================= Curseurs Art déco (dessinés par Claude Design) : éventail, main, bloqué (32 px) =================
   Laiton du site sur un contour vert-noir (couleurs de --brass et --bg). Les règles du site qui changent de curseur utilisent ces variables
   (cursor: var(--cur-hand) au lieu de pointer, etc.) ; le mot-clé après l'image est le curseur de secours. Les champs de saisie gardent leur curseur texte. */
:root {
  --cur-default: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%3E%3Cpath%20d%3D%22M3%203L26.2%209.2A24%2024%200%200%201%209.2%2026.2Z%22%20fill%3D%22%23c9a45c%22%20stroke%3D%22%230a110f%22%20stroke-width%3D%221.5%22%20stroke-linejoin%3D%22miter%22%2F%3E%3Cpath%20d%3D%22M3%203L20%2020M11.7%205.3A9%209%200%200%201%205.3%2011.7%22%20fill%3D%22none%22%20stroke%3D%22%230a110f%22%20stroke-width%3D%221.2%22%2F%3E%3C%2Fsvg%3E") 3 3, auto;
  --cur-hand: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%3E%3Cpath%20d%3D%22M9%204A2%202%200%200%201%2013%204L13%2011A1.75%201.75%200%200%201%2016.5%2011L16.5%2012.5A1.75%201.75%200%200%201%2020%2012.5L20%2014A1.75%201.75%200%200%201%2023.5%2014L23.5%2022L20.5%2028L12%2028L4.6%2018.2A1.6%201.6%200%200%201%207%2016.4L9%2018.5Z%22%20fill%3D%22%23c9a45c%22%20stroke%3D%22%230a110f%22%20stroke-width%3D%221.5%22%20stroke-linejoin%3D%22round%22%2F%3E%3Cpath%20d%3D%22M13%2011V17M16.5%2012.5V17M20%2014V17M12.2%2028A4%204%200%200%201%2020.2%2028M16.2%2028V24%22%20fill%3D%22none%22%20stroke%3D%22%230a110f%22%20stroke-width%3D%221.2%22%2F%3E%3C%2Fsvg%3E") 11 2, pointer;
  --cur-blocked: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%3E%3Cpath%20d%3D%22M8.2%208.2L23.8%2023.8%22%20stroke%3D%22%230a110f%22%20stroke-width%3D%225.5%22%2F%3E%3Cpath%20d%3D%22M8.2%208.2L23.8%2023.8%22%20stroke%3D%22%23c9a45c%22%20stroke-width%3D%223.5%22%2F%3E%3Ccircle%20cx%3D%2216%22%20cy%3D%2216%22%20r%3D%2211%22%20fill%3D%22none%22%20stroke%3D%22%230a110f%22%20stroke-width%3D%225.5%22%2F%3E%3Ccircle%20cx%3D%2216%22%20cy%3D%2216%22%20r%3D%2211%22%20fill%3D%22none%22%20stroke%3D%22%23c9a45c%22%20stroke-width%3D%223.5%22%2F%3E%3Ccircle%20cx%3D%2216%22%20cy%3D%2216%22%20r%3D%2211%22%20fill%3D%22none%22%20stroke%3D%22%230a110f%22%20stroke-width%3D%220.8%22%2F%3E%3C%2Fsvg%3E") 16 16, not-allowed;
}
html, body { cursor: var(--cur-default); }
a, button, [role="button"], label, select, summary { cursor: var(--cur-hand); }
[disabled], .disabled, [aria-disabled="true"] { cursor: var(--cur-blocked); }

/* ---------- WikiSpeed (0.14.0) : public/wikispeed.php, assets/wikispeed.js ---------- */

.ws { max-width: 1100px; padding: clamp(28px, 5vw, 56px) 0 72px; }
/* Les phases (invite/lobby/décompte/course/fin) montrent et cachent leurs sections ([hidden]), qui changent la hauteur
   de la page : sans ceci, le recalage automatique du navigateur (scroll anchoring) s'anime par à-coups sur Firefox
   (même cause que .opener, page « Paquets », voir plus haut). */
.wrap.ws { overflow-anchor: none; }
.ws-head { text-align: center; margin: 0 0 18px; }
.ws-kicker { margin: 0 0 6px; font-size: 12px; letter-spacing: .2em; text-transform: uppercase; }
.ws-kicker a { color: var(--brass-ink); text-decoration: none; }
.ws-head h1 { margin: 0; font-size: clamp(28px, 4.4vw, 40px); font-weight: 400; letter-spacing: .24em; text-transform: uppercase; }
.ws-lead { margin: 8px auto 0; max-width: 560px; color: var(--muted); }
.ws-racing .ws-head { display: none; }
.ws-msg { min-height: 1.5em; margin: 0 0 12px; text-align: center; color: var(--brass-ink); font-size: 14.5px; }
.ws-msg.is-error { color: var(--err-ink); }
.ws-phase[hidden] { display: none; }
.ws-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 14px; margin: 22px 0 0; }
.ws-actions .btn { text-decoration: none; }
.ws-av, .ws-av-lg { border-radius: 50%; object-fit: cover; border: 2px solid var(--brass-line); background: var(--card); }
.ws-av { width: 36px; height: 36px; }
.ws-av-lg { width: 84px; height: 84px; }

/* Face à face (invitation) */
.ws-duel { display: flex; justify-content: center; align-items: center; gap: clamp(20px, 6vw, 64px); margin: 12px 0 18px; }
.ws-duelist { display: grid; justify-items: center; gap: 10px; font-weight: 500; letter-spacing: .06em; }
.ws-vs { display: grid; justify-items: center; gap: 10px; color: var(--muted); font-size: 11px; letter-spacing: .24em; text-transform: uppercase; }
.ws-invite-text { margin: 0; text-align: center; font-size: 19px; }
.ws-timer-note { margin: 6px 0 0; text-align: center; color: var(--muted); font-size: 13.5px; font-variant-numeric: tabular-nums; }

/* Choix des cartes */
.ws-seats { display: grid; grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr); align-items: start; gap: clamp(12px, 4vw, 48px); max-width: 760px; margin: 0 auto; }
.ws-seat { display: grid; justify-items: center; gap: 14px; padding: 18px 16px 22px; border: 1px solid var(--line); background: var(--surface); transition: border-color .3s ease, box-shadow .3s ease; }
.ws-seat.is-ready { border-color: var(--brass); box-shadow: 0 0 0 1px color-mix(in srgb, var(--brass) 30%, transparent); }
.ws-seats > .ws-vs { align-self: center; }
.ws-who { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 8px 10px; text-align: center; }
.ws-name { font-weight: 500; }
.ws-chip { padding: 3px 9px; border: 1px solid var(--line); color: var(--muted); font-size: 11px; letter-spacing: .12em; text-transform: uppercase; }
.ws-chip.is-ready { border-color: var(--brass); background: var(--brass-ink); color: var(--on-brass); }
.cards.collection.ws-slot { display: block; width: min(210px, 100%); padding: 0; margin: 0; }
.ws-slot > li { width: 100%; }
.ws-empty { display: grid; place-items: center; aspect-ratio: 5 / 7; border: 1px dashed var(--brass-line); color: var(--muted); font-size: 13px; text-align: center; padding: 12px; }
.ws-back .card-in { cursor: default; }
.ws-rule { max-width: 620px; margin: 20px auto 0; text-align: center; color: var(--muted); font-size: 14.5px; }
.ws-picker { margin: 34px 0 0; }
.ws-picker[hidden] { display: none; }
.ws-picker-head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 20px; margin: 0 0 16px; padding-bottom: 10px; border-bottom: 1px solid var(--brass-line); }
.ws-picker-head h2 { margin: 0; font-size: 15px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); }
.ws-search { max-width: 280px; margin: 0; }
.ws-grid .cards.collection { grid-template-columns: repeat(var(--pick-cols, 5), minmax(0, 1fr)) !important; gap: 18px 14px !important; padding: 0 !important; }   /* --pick-cols : colonnes calculées par wikispeed.js (3 rangées pleines) */
.ws-grid .card-in { cursor: var(--cur-hand); }
.ws-pager { margin: 18px 0 0; }
.ws-pager .pager { margin: 0; }
#ws-pager-top { margin: 16px 0 18px; }
.ws-picker .coll-filters { margin-bottom: 4px; }
.ws-leave { margin: 26px 0 0; text-align: center; }
.link-btn.is-confirm { color: var(--err-ink); }
@media (max-width: 560px) {
  .ws-seats { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 10px; }
  .ws-seats > .ws-vs { display: none; }
  .ws-seat { align-content: start; gap: 10px; padding: 12px 8px 14px; }
  .ws-who { flex-direction: column; gap: 6px; }
  .ws-chip { font-size: 10px; letter-spacing: .08em; white-space: nowrap; }
  .cards.collection.ws-slot { width: min(128px, 100%); }
  .ws-empty { font-size: 12px; }
  .ws-rule { margin-top: 14px; font-size: 13.5px; }
  .ws-actions { gap: 10px; margin-top: 16px; }
  .ws-actions .btn { flex: 1 1 140px; padding: 14px 12px; }
  .ws-picker { margin-top: 26px; }
  .ws-picker-head { gap: 10px; }
  .ws-search { max-width: none; width: 100%; }
  .ws-grid .cards.collection { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px 8px; }
  .ws-search { font-size: 16px; }   /* 16 px : sinon iOS agrandit toute la page quand on touche le champ */
  .ws-pager .btn, .ws-leave .btn-tertiary { min-height: 44px; padding-inline: 16px; }   /* cibles tactiles de 44 px */
}

/* Mélange et décompte */
.ws-countdown { position: relative; padding: 10px 0 40px; }
.ws-shuffle { display: flex; justify-content: center; gap: clamp(18px, 6vw, 80px); }
.ws-draw { display: grid; justify-items: center; gap: 14px; width: min(220px, 42vw); }
.ws-draw .cards.collection.ws-slot { width: 100%; }
.ws-label { display: grid; justify-items: center; gap: 2px; margin: 0; text-align: center; opacity: 0; transition: opacity .4s ease .1s; }
.ws-label span { font-size: 11.5px; font-weight: 500; letter-spacing: .24em; text-transform: uppercase; color: var(--brass-ink); }
.ws-label b { font-weight: 500; font-size: 15px; }
.ws-shuffle.is-dealt .ws-label { opacity: 1; }
.ws-shuffle.is-shuffling .is-start { animation: ws-swap-l .4s ease-in-out 4 alternate; }
.ws-shuffle.is-shuffling .is-target { animation: ws-swap-r .4s ease-in-out 4 alternate; }
@keyframes ws-swap-l { from { translate: 0 0; } to { translate: calc(100% + clamp(18px, 6vw, 80px)) -10px; } }
@keyframes ws-swap-r { from { translate: 0 0; } to { translate: calc(-100% - clamp(18px, 6vw, 80px)) 10px; } }
.ws-count { position: absolute; inset: 0; display: grid; place-items: center; margin: 0; pointer-events: none; font-size: clamp(90px, 18vw, 180px); font-weight: 300; letter-spacing: .06em; color: var(--brass-ink); text-shadow: 0 2px 0 var(--bg), 0 0 30px var(--bg); }
.ws-count:empty { display: none; }
.ws-count.is-beat { animation: ws-beat .9s var(--ease); }
/* transform: scale() plutôt que la propriété scale seule : même correctif que .help-pulse (écarts de composition entre moteurs sous Firefox) */
@keyframes ws-beat { from { transform: scale(1.6); opacity: 0; } 30% { opacity: 1; } to { transform: scale(1); opacity: 1; } }

/* La course : barre collante sous l'en-tête, puis l'article */
.ws-bar { position: sticky; top: 77px; z-index: 20; display: grid; grid-template-columns: minmax(0, 1fr); gap: 10px; padding: 12px 18px; border: 1px solid var(--brass-line); background: var(--top-bg); -webkit-backdrop-filter: blur(14px); backdrop-filter: blur(14px); }
.ws-goal { min-width: 0; display: grid; gap: 6px; }   /* deux lignes pleine largeur : l'arrivée (avec « Voir la carte d'arrivée »), puis la page où l'on est ; un long titre passe à la ligne */
.ws-goal-row { display: grid; grid-template-columns: 8.5em minmax(0, 1fr) auto; align-items: baseline; gap: 4px 12px; }
.ws-goal span { font-size: 10.5px; font-weight: 500; letter-spacing: .24em; text-transform: uppercase; color: var(--brass-ink); }
.ws-goal b { font-weight: 500; font-size: 18px; overflow-wrap: anywhere; }
.ws-goal .ws-here { font-size: 15px; color: var(--muted); }
.ws-goal-row .btn-tertiary { align-self: center; white-space: nowrap; }
.ws-barrow { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px 22px; padding-top: 10px; border-top: 1px solid var(--line); }
.ws-stats { display: flex; align-items: center; gap: 16px; }
.ws-time { font-size: 20px; font-weight: 300; font-variant-numeric: tabular-nums; letter-spacing: .04em; }
.ws-score { display: inline-flex; align-items: center; gap: 6px; font-variant-numeric: tabular-nums; }
.ws-score .ws-av { width: 28px; height: 28px; }
.ws-score b { font-weight: 500; font-size: 16px; }
.ws-score small { color: var(--muted); font-size: 11px; }
.ws-score.is-other { opacity: .8; }
.ws-tools { display: flex; gap: 8px; }
.ws-fold { display: none; }   /* téléphone seulement (plus bas) : plier / déplier la barre de course (wikispeed-bar.js) */
.ws-tools svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
#ws-dark .moon { display: none; }
#ws-dark.is-on { background: color-mix(in srgb, var(--brass) 18%, transparent); border-color: var(--brass); }
#ws-dark.is-on .sun { display: none; }
#ws-dark.is-on .moon { display: block; }
@media (max-width: 760px) {
  .ws-bar { padding: 10px 12px; margin-inline: -8px; max-height: 60vh; max-height: 60dvh; overflow-y: auto; overscroll-behavior: contain; }
  .ws-goal b { font-size: 16px; line-height: 1.3; }
  .ws-goal .ws-here { font-size: 14px; }
  .ws-barrow { gap: 8px 12px; padding-top: 8px; }
  .ws-fold { appearance: none; flex: none; display: grid; place-items: center; width: 44px; height: 44px; margin: -8px -6px -8px auto; padding: 0; border: 0; background: none; color: var(--brass-ink); cursor: var(--cur-hand); -webkit-tap-highlight-color: transparent; }
  .ws-fold svg { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; transition: rotate .25s ease; }
  .ws-fold[aria-expanded="true"] svg { rotate: 180deg; }
  /* repliée : l'arrivée (une ligne), le temps, les clics et le temps restant ; dépliée : tout le reste (page actuelle, carte d'arrivée, outils) */
  .ws-bar.is-folded .ws-goal-row:nth-child(n+2), .ws-bar.is-folded .ws-goal-row .btn-tertiary, .ws-bar.is-folded .ws-tools { display: none; }
  .ws-bar.is-folded .ws-goal { gap: 2px; }
  .ws-bar.is-folded .ws-goal-row > span { font-size: 9.5px; }
  .ws-bar.is-folded .ws-goal b { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .ws-bar.is-folded .ws-barrow { padding-top: 6px; flex-wrap: nowrap; }
  .ws-goal-row { grid-template-columns: minmax(0, 1fr); }   /* le titre prend toute la largeur ; « Voir la carte d'arrivée » passe dessous */
  .ws-goal-row .btn-tertiary { justify-self: start; }
  .ws-tools { flex: 1 1 100%; flex-wrap: wrap; justify-content: space-between; }
  .ws-tools .btn-tertiary { flex: 1 1 auto; justify-content: center; min-height: 44px; padding-inline: 10px; }
  .ws-tools { gap: 6px; }
  .ws-tools .btn-tertiary { flex: 0 1 auto; padding-inline: 8px; font-size: 11px; letter-spacing: .08em; gap: 6px; }
  .ws-tools .btn-tertiary:first-child { flex: 1 1 auto; }
  .ws-tools [aria-pressed] { flex: 0 0 44px; padding-inline: 0; }
  .ws-tools [aria-pressed] span { display: none; }   /* le bouton du mode sombre ne garde que son icône (soleil / lune) : les trois outils tiennent sur une ligne */   /* cibles tactiles de 44 px */
  .ws-stats { gap: 10px; }
  .ws-score small { display: none; }
}

/* La page de jeu occupe (quasiment) toute la largeur de la fenêtre : marges de 50 px maximum de chaque côté, réduites sur petit écran. */
.wrap.ws { width: calc(100% - 2 * clamp(16px, 4vw, 50px) - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px)); }

/* L'article de Wikipédia : TOUJOURS en thème clair Art déco (ivoire, encre, laiton), quel que soit le thème du site. Aucune image : le serveur les retire (src/WikiPage.php). */
.ws-page {
  color-scheme: light;
  --text: #1b1a16; --muted: #58584a; --line: rgba(27, 26, 22, .14); --brass: #a8823a; --brass-line: rgba(125, 95, 36, .45); --brass-ink: #7d5f24; --on-brass: #fbf8f1;
  --paper: #f8f4e7; --paper-2: #efe9d6;
  position: relative; margin: 18px 0 0; padding: clamp(22px, 4vw, 52px) clamp(18px, 5vw, 64px) 36px; background: var(--paper); color: var(--text);
  border: 1px solid var(--brass-line); box-shadow: inset 0 0 0 5px var(--paper), inset 0 0 0 6px var(--brass-line); font-size: 16.5px; line-height: 1.68; overflow-wrap: break-word;
  transition: opacity .2s ease;
}
.ws-page.is-loading { opacity: .45; pointer-events: none; }
/* Variante sombre de l'article (bouton de bascule .ws-tools #ws-dark), clair par défaut, préférence mémorisée en local. */
.ws-page.is-dark {
  color-scheme: dark;
  --text: #ece7db; --muted: #9a9686; --line: rgba(236, 231, 219, .12); --brass: #c9a45c; --brass-line: rgba(201, 164, 92, .38); --brass-ink: #d3b06a; --on-brass: #14110a;
  --paper: #141f1a; --paper-2: #1b2921;
}
.ws-title { margin: 0 0 22px; padding: 0 0 16px; text-align: center; font-size: clamp(24px, 3.6vw, 34px); font-weight: 400; letter-spacing: .12em; text-transform: uppercase; background: linear-gradient(90deg, transparent, var(--brass-line), transparent) bottom / 100% 1px no-repeat; }
/* Sommaire de l'article (généré par le serveur à partir des titres, src/WikiPage.php) : boîte repliable, style Art déco. */
.ws-toc[hidden] { display: none; }
.ws-toc-box { margin: 0 0 24px; border: 1px solid var(--brass-line); background: var(--paper-2); padding: 0 16px; }
.ws-toc-box summary { padding: 10px 0; font-size: 12.5px; font-weight: 500; letter-spacing: .18em; text-transform: uppercase; color: var(--brass-ink); cursor: var(--cur-hand); list-style: none; }
.ws-toc-box summary::-webkit-details-marker { display: none; }
.ws-toc-box summary::before { content: "▸"; display: inline-block; width: 1em; margin-right: 6px; rotate: 0deg; transition: rotate .2s ease; }
.ws-toc-box[open] summary::before { rotate: 90deg; }
.ws-toc-box ul { margin: 0 0 14px; padding-left: 0; list-style: none; columns: 2; column-gap: 28px; }
.ws-toc-box li { break-inside: avoid; font-size: 14px; line-height: 1.7; }
.ws-toc-box li.ws-toc-l3 { padding-left: 16px; }
.ws-toc-box li.ws-toc-l4 { padding-left: 32px; font-size: 13px; }
.ws-toc-box a { color: var(--text); text-decoration: none; cursor: var(--cur-hand); }
.ws-toc-box a:hover, .ws-toc-box a:focus-visible { color: var(--brass-ink); text-decoration: underline; text-decoration-color: var(--brass-line); }
@media (max-width: 600px) { .ws-toc-box ul { columns: 1; } }

.ws-content { max-width: 78ch; margin: 0 auto; }
.ws-content::after { content: ""; display: block; clear: both; }
.ws-content p { margin: 0 0 1em; }
.ws-content h2, .ws-content h3, .ws-content h4, .ws-content h5 { clear: both; margin: 1.8em 0 .6em; font-weight: 500; line-height: 1.3; }
.ws-content h2 { display: flex; align-items: center; gap: 12px; font-size: 21px; letter-spacing: .08em; text-transform: uppercase; color: var(--brass-ink); }
.ws-content h2::before { content: ""; width: 8px; height: 8px; rotate: 45deg; border: 1px solid var(--brass); flex: none; }
.ws-content h2::after { content: ""; flex: 1; height: 1px; background: linear-gradient(90deg, var(--brass-line), transparent); }
.ws-content h3 { font-size: 18px; letter-spacing: .04em; }
.ws-content h4, .ws-content h5 { font-size: 16px; color: var(--muted); }
.ws-content ul, .ws-content ol { margin: 0 0 1em; padding-left: 1.4em; }
.ws-content ul li::marker { color: var(--brass); }
.ws-content dl { margin: 0 0 1em; }
.ws-content dt { font-weight: 500; }
.ws-content dd { margin: 0 0 .4em 1.4em; }
.ws-content blockquote { margin: 1em 0; padding: 4px 0 4px 18px; border-left: 2px solid var(--brass-line); font-style: italic; }
.ws-content a.ws-a { color: var(--brass-ink); text-decoration: underline; text-decoration-color: var(--brass-line); text-underline-offset: 3px; cursor: var(--cur-hand); transition: color .15s ease, background .15s ease; }
.ws-content a.ws-a:hover, .ws-content a.ws-a:focus-visible { color: var(--text); background: color-mix(in srgb, var(--brass) 18%, transparent); text-decoration-color: var(--brass); }
.ws-content a.ws-a:focus-visible { outline: 2px solid var(--brass); outline-offset: 1px; }
.ws-content .ws-note { margin: 0 0 1.2em; padding: 6px 0 6px 14px; border-left: 2px solid var(--brass-line); color: var(--muted); font-size: 14.5px; font-style: italic; }
.ws-content .ws-note .ws-note { margin: 0; padding: 0; border: 0; }
.ws-content .ws-note p { margin: 0; }
.ws-content table { border-collapse: collapse; margin: 0 0 1.2em; font-size: 14.5px; line-height: 1.45; }
.ws-content caption { padding: 6px 8px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; font-size: 12.5px; color: var(--brass-ink); text-align: left; }
.ws-content th, .ws-content td { padding: 5px 9px; border-bottom: 1px solid var(--line); vertical-align: top; text-align: left; }
.ws-content th { font-weight: 500; }
.ws-content .ws-table { display: block; max-width: 100%; overflow-x: auto; border: 1px solid var(--line); }
/* Autres tableaux (sans classe wikitable) et blocs de code : défilent aussi au lieu d'élargir la page sur téléphone ; ceux des infobox et des boîtes de navigation gardent leur mise en page */
.ws-content pre, .ws-content table:not(.ws-infobox table, .ws-navbox table) { max-width: 100%; overflow-x: auto; }
.ws-content table:not(.ws-table, .ws-infobox table, .ws-navbox table) { display: block; }
.ws-content .ws-table th { background: var(--paper-2); }
/* Infobox : encadré à droite (au-dessus du texte sur téléphone), double filet laiton */
.ws-content .ws-infobox { float: right; clear: right; width: min(320px, 100%); margin: 0 0 20px 28px; padding: 14px 14px 8px; background: var(--paper-2); border: 1px solid var(--brass-line); box-shadow: inset 0 0 0 3px var(--paper-2), inset 0 0 0 4px var(--brass-line); font-size: 13.5px; line-height: 1.45; }
.ws-content .ws-infobox table { width: 100%; margin: 0 0 8px; font-size: 13.5px; }
.ws-content .ws-infobox th { width: 40%; color: var(--muted); font-weight: 500; }
.ws-content .ws-infobox td, .ws-content .ws-infobox th { padding: 4px 6px; }
.ws-content .ws-ib-head { margin: 0 0 8px; padding: 0 0 8px; text-align: center; font-size: 16px; font-weight: 500; letter-spacing: .08em; text-transform: uppercase; border-bottom: 1px solid var(--brass-line); }
@media (max-width: 720px) { .ws-content .ws-infobox { float: none; width: 100%; margin: 0 0 20px; } }
/* Boîtes de navigation (en bas des articles) : texte plus petit */
.ws-content .ws-navbox { clear: both; display: block; max-width: 100%; overflow-x: auto; margin: 1.6em 0 0; padding: 10px 12px; border: 1px solid var(--line); background: var(--paper-2); font-size: 13px; line-height: 1.55; }
.ws-content .ws-navbox table { margin: 0; font-size: 13px; }
.ws-content .ws-navbox th { color: var(--brass-ink); }
.ws-source { clear: both; max-width: 78ch; margin: 28px auto 0; padding-top: 12px; border-top: 1px solid var(--line); color: var(--muted); font-size: 12px; line-height: 1.5; }

/* Résultat */
.ws-verdict { position: relative; max-width: 640px; margin: 0 auto; padding: 40px 28px 32px; text-align: center; border: 1px solid var(--line); background: var(--surface); overflow: hidden; }
.ws-verdict::before { content: ""; position: absolute; inset: 0; background: radial-gradient(60% 90% at 50% -10%, color-mix(in srgb, var(--brass) 16%, transparent), transparent); pointer-events: none; }
.ws-verdict.is-win { border-color: var(--brass); box-shadow: 0 0 0 1px color-mix(in srgb, var(--brass) 35%, transparent), 0 10px 30px -18px var(--brass); }
.ws-verdict.is-loss { opacity: .92; }
.ws-verdict .ws-badge { position: relative; width: 44px; height: 44px; margin: 0 auto 22px; rotate: 45deg; border: 1px solid var(--brass); }
.ws-verdict .ws-badge::before { content: ""; position: absolute; inset: 7px; border: 1px solid var(--brass-line); }
.ws-verdict .ws-badge::after { content: ""; position: absolute; inset: 15px; background: var(--brass); }
.ws-verdict.is-loss .ws-badge { border-color: var(--muted); }
.ws-verdict.is-loss .ws-badge::before { border-color: var(--line); }
.ws-verdict.is-loss .ws-badge::after { background: var(--muted); }
.ws-verdict h2 { position: relative; margin: 0 0 10px; font-size: clamp(26px, 4vw, 36px); font-weight: 400; letter-spacing: .18em; text-transform: uppercase; }
.ws-verdict.is-win h2 { color: var(--brass-ink); }
.ws-verdict p { position: relative; margin: 0; color: var(--muted); }
.ws-verdict .ws-pieces { position: relative; display: inline-flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 8px; margin-top: 20px; padding: 8px 18px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 10%, transparent); }
.ws-pieces b { color: var(--brass-ink); font-weight: 500; }
.ws-pieces span { color: var(--muted); font-size: 13.5px; }
.ws-pieces .wc-piece { width: 1.5em; height: 1.5em; }
.ws-paths { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; max-width: 760px; margin: 26px auto 0; }
@media (max-width: 600px) { .ws-paths { grid-template-columns: minmax(0, 1fr); } }
.ws-path { padding: 18px 20px; border: 1px solid var(--line); background: var(--surface); }
.ws-path h3 { margin: 0 0 16px; font-size: 13px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--brass-ink); }
.ws-path ol { margin: 0; padding: 0; list-style: none; counter-reset: ws-step; }
.ws-path li { position: relative; padding: 0 0 16px 30px; font-size: 14.5px; line-height: 1.5; counter-increment: ws-step; overflow-wrap: anywhere; }
.ws-path li::before { content: counter(ws-step); position: absolute; left: 0; top: -1px; width: 20px; height: 20px; display: grid; place-items: center; font-size: 10.5px; font-weight: 500; font-variant-numeric: tabular-nums; color: var(--muted); border: 1px solid var(--line); background: var(--bg); }
.ws-path li::after { content: ""; position: absolute; left: 9px; top: 21px; bottom: -2px; width: 1px; background: var(--line); }
.ws-path li:last-child { padding-bottom: 0; }
.ws-path li:last-child::after { display: none; }
.ws-path a { color: var(--text); text-decoration: none; }
.ws-path a:hover, .ws-path a:focus-visible { color: var(--brass-ink); text-decoration: underline; text-decoration-color: var(--brass-line); }
.ws-path li.is-goal { font-weight: 500; }
.ws-path li.is-goal::before { color: var(--on-brass); border-color: var(--brass); background: var(--brass); }
.ws-paths > .ws-source { grid-column: 1 / -1; margin: 0; border: 0; text-align: center; }
.ws-toast { position: fixed; left: 50%; bottom: 90px; z-index: 80; translate: -50% 0; margin: 0; padding: 10px 18px; background: var(--brass-ink); color: var(--on-brass); font-size: 14px; box-shadow: 0 8px 24px -10px rgba(0, 0, 0, .5); }
.ws-toast[hidden] { display: none; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .ws-shuffle.is-shuffling :is(.is-start, .is-target) { animation: none; } :where(:root[data-motion="reduce"]) .ws-count.is-beat { animation: none; }
.ws-note { min-height: 1.5em; margin: 18px 0 0; text-align: center; color: var(--brass-ink); font-weight: 500; letter-spacing: .02em; }
@media (max-width: 760px), (hover: none) and (pointer: coarse) and (max-width: 1100px) { body:has(.bottom-nav) .ws-bar { top: env(safe-area-inset-top, 0px); } }   /* sans en-tête en haut (barre du bas) : la barre de course colle au bord */
/* Pendant la course, sur téléphone : la cloche flottante (en bas à droite) recouvrait le texte et des liens de l'article ; elle revient à la fin */
body.ws-racing .notif-float { display: none; }

/* Bouton flottant « retour en haut », visible pendant la course dès qu'on a défilé (même style Art déco que .theme / .notif-float). */
.ws-totop { position: fixed; z-index: 55; right: max(18px, env(safe-area-inset-right, 0px)); bottom: max(18px, env(safe-area-inset-bottom, 0px)); width: 44px; height: 44px; padding: 0; border: 0; appearance: none; display: grid; place-items: center; background: var(--surface); box-shadow: inset 0 0 0 1.84px var(--brass-line), 0 6px 18px rgba(0, 0, 0, .35); color: var(--brass-ink); cursor: var(--cur-hand); rotate: 45deg; opacity: 0; translate: 0 14px; pointer-events: none; transition: opacity .25s ease, translate .25s ease; }
.ws-totop.is-shown { opacity: 1; translate: 0 0; pointer-events: auto; }
.ws-totop svg { width: 20px; height: 20px; rotate: -45deg; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
@media (max-width: 760px), (hover: none) and (pointer: coarse) and (max-width: 1100px) { .ws-totop { bottom: calc(64px + env(safe-area-inset-bottom, 0px) + 16px); } }
/* Même dégagement que .ws-totop : sur téléphone, la barre de navigation du bas (64px + encoche) recouvrirait sinon le toast */
@media (max-width: 760px), (hover: none) and (pointer: coarse) and (max-width: 1100px) { .ws-toast { bottom: calc(64px + env(safe-area-inset-bottom, 0px) + 26px); } }

.jx-back { margin: 0 0 8px; font-size: 12px; letter-spacing: .16em; text-transform: uppercase; }
.jx-back a { color: var(--brass-ink); text-decoration: none; }
/* =========================================================
   Page Jeux (public/jeux.php, src/JeuxView.php) : dessinée par Claude Design, proposition D « Triptyque ».
   Classes renommées à l'intégration (ws- -> wsb-, jx- -> jxp-) : .ws-… et .jx-… existent déjà (page de course WikiSpeed, page Missions).
   Les deux cartes de l'aperçu sont de vraies cartes du site (CollectionView::card) dans un aperçu inerte (attribut inert : ni clic, ni focus).
   Dépend des jetons :root du site et des classes .r1…r7 (variable --rc).
   ========================================================= */

/* ---------- Gradins : deux marches par coin (--s = taille d'une marche) ---------- */
.wsb-frame::before, .wsb-bg,
.gqb-frame::before, .gqb-bg,
.gqj-frame::before, .gqj-bg,
.gq-end-frame::before, .gq-end-bg,
.gq-recap-item,
.jxp-encart::before, .jxp-encart::after,
.wsb-gains > div::before, .wsb-gains > div::after {
  clip-path: polygon(
    0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0,
    calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)),
    100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%,
    calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s)));
}

/* ---------- Page ---------- */
.jxp-page {
  container: jxp / inline-size;
  width: 100%;   /* un conteneur de requêtes ne prend pas la largeur de son contenu : largeur explicite */
  max-width: 1200px;
  margin: 0 auto;
  padding: 48px 24px 72px;
  color: var(--text);
  overflow-x: clip;
}
.jxp-page :focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }

/* Haut de page « Jeux » / « Atelier » : titre en Josefin Sans (géométrique, d'inspiration années 1920), motif Art déco discret de chaque côté (losange, trois chevrons, filet qui s'estompe), puis un filet orné
   et le chapeau dans la même police. La roue qui tourne derrière est celle de « Paquets » (.jxp-page::before, plus haut). */
.jxp-head { display: grid; justify-items: center; text-align: center; gap: 16px; margin-bottom: 64px; }
.jxp-title {
  --ls: .34em; display: flex; align-items: center; gap: 22px;
  margin: 0; font: 400 44px/1.1 "Josefin Sans", var(--font);
  letter-spacing: var(--ls); text-transform: uppercase;
}
.jxp-title::before, .jxp-title::after {
  content: ""; flex: none; width: clamp(90px, 18vw, 190px); height: 14px; background: var(--brass);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 14'%3E%3Cpath d='M4 3.5 7.5 7 4 10.5.5 7Z'/%3E%3Cg fill='none' stroke='%23000' stroke-width='1.1'%3E%3Cpath d='M16 2.5 21.5 7 16 11.5'/%3E%3Cpath stroke-opacity='.65' d='M27 2.5 32.5 7 27 11.5'/%3E%3Cpath stroke-opacity='.35' d='M38 2.5 43.5 7 38 11.5'/%3E%3C/g%3E%3C/svg%3E") left center / 50px 14px no-repeat, linear-gradient(90deg, #000, transparent) right center / calc(100% - 58px) 1px no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 14'%3E%3Cpath d='M4 3.5 7.5 7 4 10.5.5 7Z'/%3E%3Cg fill='none' stroke='%23000' stroke-width='1.1'%3E%3Cpath d='M16 2.5 21.5 7 16 11.5'/%3E%3Cpath stroke-opacity='.65' d='M27 2.5 32.5 7 27 11.5'/%3E%3Cpath stroke-opacity='.35' d='M38 2.5 43.5 7 38 11.5'/%3E%3C/g%3E%3C/svg%3E") left center / 50px 14px no-repeat, linear-gradient(90deg, #000, transparent) right center / calc(100% - 58px) 1px no-repeat;
}
.jxp-title::before { transform: scaleX(-1); margin-right: var(--ls); }   /* la dernière lettre garde son espacement : la marge équilibre les deux côtés */
.jxp-lead { margin: 0; max-width: 54ch; color: var(--muted); font: 400 16px/1.65 "Josefin Sans", var(--font); letter-spacing: .03em; text-wrap: balance; }
.jxp-lead::before {
  content: ""; display: block; width: 120px; height: 8px; margin: 0 auto 18px; background: var(--brass);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 8'%3E%3Cpath d='M60 .5 63.5 4 60 7.5 56.5 4Z'/%3E%3Cpath fill='none' stroke='%23000' d='M0 4H52M68 4H120'/%3E%3C/svg%3E") center / 100% 100% no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 8'%3E%3Cpath d='M60 .5 63.5 4 60 7.5 56.5 4Z'/%3E%3Cpath fill='none' stroke='%23000' d='M0 4H52M68 4H120'/%3E%3C/svg%3E") center / 100% 100% no-repeat;
}
.jxp-lead b { color: var(--text); font-weight: 600; white-space: nowrap; }   /* « pièces » et son icône ne se séparent jamais */

.jxp-page .wc-piece { width: 1.2em; height: 1.2em; vertical-align: -.22em; flex: none; }

/* Losange ornemental */
.jxp-dia { display: inline-block; width: 7px; height: 7px; transform: rotate(45deg); background: var(--brass); flex: none; }

/* Intitulé en petites capitales, encadré de filets */
.jxp-label {
  display: flex; align-items: center; gap: 12px;
  margin: 0; font-size: 11px; font-weight: 500; letter-spacing: .26em; text-transform: uppercase; color: var(--brass-ink);
}
.jxp-label::after { content: ""; flex: 1; height: 1px; background: var(--brass-line); }
/* Atelier : titres de section centrés entre deux filets de même épaisseur, en plus grand */
.at-gems > .jxp-label, .atl-board > .jxp-label { width: min(100%, 880px); align-self: center; justify-self: center; justify-content: center; gap: 22px; font-size: 18px; font-weight: 400; letter-spacing: .24em; }
.at-gems > .jxp-label::before, .atl-board > .jxp-label::before { content: ""; flex: 1; height: 1px; background: var(--brass-line); }


/* =========================================================
   WikiSpeed
   ========================================================= */
.wsb { scroll-margin-top: 96px; }

.wsb-frame { --s: 7px; position: relative; isolation: isolate; }
.wsb-frame::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); opacity: .75; }
.wsb-bg {
  position: absolute; inset: 1px; z-index: -1; overflow: hidden;
  background:
    radial-gradient(ellipse 60% 90% at 78% 100%, color-mix(in srgb, var(--brass) 14%, transparent), transparent 70%),
    var(--card);
  box-shadow: inset 0 0 0 8px var(--card), inset 0 0 0 9px var(--brass-line);
}
.wsb-burst {
  position: absolute; left: 74%; top: 50%; width: 1300px; aspect-ratio: 1; transform: translate(-50%, -50%);
  background:
    radial-gradient(circle, transparent 0 96px, var(--brass) 96px 97px, transparent 97px 106px, var(--brass) 106px 107px, transparent 107px),
    repeating-conic-gradient(from -.3deg, var(--brass) 0 .6deg, transparent .6deg 7deg, var(--brass) 7deg 8.6deg, transparent 8.6deg 15deg);
  -webkit-mask-image: radial-gradient(circle, transparent 0 60px, #000 62px, rgba(0,0,0,.55) 30%, transparent 58%);
          mask-image: radial-gradient(circle, transparent 0 60px, #000 62px, rgba(0,0,0,.55) 30%, transparent 58%);
  opacity: .2;
}

.wsb-body {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.05fr); gap: 32px;
  min-height: 400px; padding: 52px 56px 52px;
}
.wsb-main { display: flex; flex-direction: column; align-items: flex-start; gap: 18px; position: relative; z-index: 1; }

.wsb-kicker { display: flex; align-items: center; gap: 12px; margin: 0; font-size: 11px; font-weight: 500; letter-spacing: .3em; text-transform: uppercase; color: var(--brass-ink); }
.wsb-kicker::before { content: ""; width: 28px; height: 1px; background: var(--brass); }
.wsb-name { margin: -4px 0 0; font-weight: 300; font-size: 54px; line-height: 1; letter-spacing: .14em; text-transform: uppercase; }
.wsb-name b { font-weight: 600; color: var(--brass-ink); }
.wsb-rule { margin: 0; max-width: 42ch; color: var(--muted); font-size: 15px; line-height: 1.6; text-wrap: pretty; }

/* Gains : plaque à double filet */
.wsb-gains { display: grid; grid-template-columns: 1fr 1fr; min-width: 300px; margin: 8px 5px 2px; border: 1px solid var(--brass-line); box-shadow: 0 0 0 4px var(--card), 0 0 0 5px var(--brass-line); }
.wsb-gains > div { position: relative; display: flex; flex-direction: column-reverse; align-items: center; gap: 2px; padding: 12px 20px 10px; }
.wsb-gains dt { font-size: 10px; letter-spacing: .24em; text-transform: uppercase; color: var(--muted); }
.wsb-gains dd { display: flex; align-items: center; gap: 7px; margin: 0; font-size: 28px; font-weight: 300; letter-spacing: .04em; color: var(--brass-ink); }
.wsb-gains dd .wc-piece { font-size: 18px; }

/* Action : bouton + quota du jour */
.wsb-act { display: flex; flex-wrap: wrap; align-items: center; gap: 14px 22px; margin-top: 10px; }
.wsb-quota { display: flex; flex-direction: column; gap: 7px; margin: 0; font-size: 12px; line-height: 1.35; color: var(--muted); letter-spacing: .03em; max-width: 24ch; }
.wsb-quota b { color: var(--text); font-weight: 500; letter-spacing: .06em; }
.wsb-pips { display: flex; gap: 7px; }
.wsb-pips i { width: 8px; height: 8px; transform: rotate(45deg); border: 1px solid var(--brass); }
.wsb-pips i.on { background: var(--brass); }
.wsb-quota.is-spent .wsb-pips i { border-color: var(--brass-line); }


/* ---------- Aperçu de course (décoratif, déborde du cadre) ---------- */
.wsb-preview { position: relative; pointer-events: none; user-select: none; }

.wsb-win {
  position: absolute; top: -96px; right: -20px; width: 90%; height: 330px;
  transform: rotate(3deg); transform-origin: 70% 30%;
  display: flex; flex-direction: column;
  background: var(--surface); border: 1px solid var(--brass);
  box-shadow: 0 0 0 5px var(--bg), 0 0 0 6px var(--brass-line), 0 28px 60px rgba(0,0,0,.45);
}
.wsb-win-bar { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 10px; padding: 9px 12px; border-bottom: 1px solid var(--brass-line); }
.wsb-win-goal { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.wsb-win-goal span { font-size: 8px; letter-spacing: .26em; text-transform: uppercase; color: var(--brass-ink); }
.wsb-win-goal b { font-size: 12px; font-weight: 500; letter-spacing: .06em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.wsb-win-time { font-size: 17px; font-weight: 300; letter-spacing: .12em; font-variant-numeric: tabular-nums; padding: 2px 10px; border: 1px solid var(--brass-line); }
.wsb-win-players { display: flex; justify-content: flex-end; gap: 10px; }
.wsb-win-players span { display: flex; align-items: center; gap: 5px; font-size: 11px; color: var(--muted); }
.wsb-win-players .jxp-av { width: 20px; height: 20px; font-size: 9px; }

.wsb-win-page { flex: 1; margin: 10px; padding: 16px 18px; background: #f8f4e7; display: flex; flex-direction: column; gap: 7px; overflow: hidden; }
.wsb-win-page i { display: block; height: 5px; background: rgba(27,26,22,.16); }
.wsb-win-page .t { height: 11px; width: 46%; background: #1b1a16; margin-bottom: 4px; }
.wsb-win-page .h { height: 1px; background: #7d5f24; opacity: .5; margin: 2px 0 5px; }
.wsb-win-page .a { background: #7d5f24; opacity: .8; }
.wsb-win-page .row { display: flex; gap: 6px; }
.wsb-win-page .row i { flex: 1; }
.wsb-win-page .w1 { flex: 0 0 22% !important; } .wsb-win-page .w2 { flex: 0 0 14% !important; } .wsb-win-page .w3 { width: 72%; } .wsb-win-page .w4 { width: 88%; }

/* Cartes Départ / Arrivée */
.wsb-cards { position: absolute; left: -8px; bottom: -72px; display: flex; }
.wsb-card { position: relative; width: 136px; filter: drop-shadow(0 14px 20px rgba(0,0,0,.45)); }
/* La vraie carte du site (CollectionView::card), dans sa grille d'une colonne : elle prend la largeur de l'enveloppe */
.wsb-card .cards.collection { display: block; width: 100%; margin: 0; padding: 0; }
.wsb-card .card { width: 100%; }
.wsb-card--a { transform: rotate(-7deg); z-index: 2; }
.wsb-card--b { transform: rotate(5deg) translate(-18px, -28px); }
.wsb-tag {
  position: absolute; z-index: 3; top: -9px; left: 50%; transform: translateX(-50%);
  padding: 3px 9px; background: var(--brass); color: var(--on-brass);
  font-size: 8.5px; font-weight: 600; letter-spacing: .26em; text-transform: uppercase; white-space: nowrap;
}

/* ---------- Courses du joueur ---------- */
.wsb-runs { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 20px 48px; margin: 120px 56px 0; }
.wsb-group { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.wsb-list { list-style: none; margin: 0; padding: 0; }
.wsb-run { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 14px; min-height: 60px; padding: 8px 0; border-bottom: 1px solid var(--line); }
.wsb-run-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.wsb-run-txt b { font-weight: 500; letter-spacing: .03em; }
.wsb-run-txt span { font-size: 13px; color: var(--muted); }
.wsb-run.is-incoming .wsb-run-txt b { color: var(--brass-ink); }
.wsb-runs-empty { grid-column: 1 / -1; display: flex; align-items: center; justify-content: center; gap: 14px; margin: 0; font-size: 13px; letter-spacing: .08em; color: var(--muted); }
.wsb-runs-empty .jxp-dia { width: 5px; height: 5px; background: var(--brass-line); }

.jxp-av {
  display: inline-grid; place-items: center; flex: none;
  width: 38px; height: 38px; border-radius: 50%;
  background: var(--surface); border: 1px solid var(--brass-line);
  color: var(--brass-ink); font-size: 14px; font-weight: 500; font-style: normal; overflow: hidden;
}
.jxp-av img { width: 100%; height: 100%; object-fit: cover; }

/* =========================================================
   Missions + futurs jeux
   ========================================================= */
.jxp-grid { display: grid; grid-template-columns: minmax(0, 360px) minmax(0, 1fr); gap: 32px; margin-top: 32px; }

/* Même cadre à gradins que .wsb-frame (page Jeux, bloc WikiSpeed) : mêmes gradins (gorges), mêmes filets laiton. */
.jxp-encart { --s: 7px; position: relative; isolation: isolate; padding: 26px 28px 22px; display: flex; flex-direction: column; gap: 14px; }
.jxp-encart::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); opacity: .75; }
.jxp-encart::after {
  content: ""; position: absolute; inset: 1px; z-index: -1; overflow: hidden;
  background: radial-gradient(ellipse 60% 90% at 20% 100%, color-mix(in srgb, var(--brass) 14%, transparent), transparent 70%), var(--card);
  box-shadow: inset 0 0 0 8px var(--card), inset 0 0 0 9px var(--brass-line);
}
.jxp-ehead { display: grid; justify-items: center; gap: 6px; }
.jxp-ehead .jxp-fan { width: 40px; height: 20px; color: var(--brass); }
.jxp-ehead h2 { margin: 0; font-size: 15px; font-weight: 400; letter-spacing: .32em; text-transform: uppercase; }

.jxp-claim {
  display: flex; align-items: center; gap: 10px; min-height: 44px; padding: 0 14px;
  background: color-mix(in srgb, var(--brass) 14%, transparent); border: 1px solid var(--brass-line);
  color: var(--brass-ink); font-size: 13px; letter-spacing: .04em; text-decoration: none;
}
.jxp-claim b { font-weight: 600; font-size: 15px; }
.jxp-claim:hover { border-color: var(--brass); }

.jxp-mlist { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; }
.jxp-m { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px 12px; padding: 11px 0; border-bottom: 1px solid var(--line); font-size: 14px; }
.jxp-m:first-child { border-top: 1px solid var(--line); }
.jxp-m-n { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; letter-spacing: .04em; }
.jxp-bar { grid-column: 1 / -1; height: 3px; background: var(--line); position: relative; }
.jxp-bar i { position: absolute; inset: 0 auto 0 0; width: 0; background: var(--brass); }
.jxp-m.is-ready .jxp-m-n { color: var(--brass-ink); letter-spacing: .16em; text-transform: uppercase; font-size: 10px; }
.jxp-m.is-done { color: var(--muted); }
.jxp-m.is-done .jxp-m-n { display: inline-flex; align-items: center; gap: 7px; letter-spacing: .16em; text-transform: uppercase; font-size: 10px; }
.jxp-m.is-done .jxp-m-n::before { content: ""; width: 5px; height: 5px; transform: rotate(45deg); background: var(--brass-line); }
.jxp-m.is-done .jxp-bar i { background: var(--brass-line); }

.jxp-meta { margin: 0; display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--muted); letter-spacing: .03em; }
.jxp-meta b { color: var(--text); font-weight: 500; }
.jxp-link {
  display: flex; align-items: center; justify-content: center; gap: 12px; min-height: 44px;
  font-size: 11px; font-weight: 500; letter-spacing: .26em; text-transform: uppercase; color: var(--brass-ink); text-decoration: none;
  border-top: 1px solid var(--brass-line); margin-top: 2px;
}
.jxp-link:hover { color: var(--text); }
.jxp-link .jxp-dia { width: 5px; height: 5px; }

/* Bloc WikiGéo (public/jeux.php, JeuxView::geoBanner) : même langage que .wsb (aperçu, nom, règle, gains, CTA), empilé
   (carte en haut, infos en bas) à côté de l'encart Missions sur la même ligne, et de la même hauteur (grille .jxp-grid, align-items par
   défaut = stretch). */
.gqj { display: flex; }
.gqj-frame { --s: 7px; flex: 1; position: relative; isolation: isolate; display: flex; flex-direction: column; }
.gqj-frame::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); opacity: .75; }
.gqj-bg {
  position: absolute; inset: 1px; z-index: -1; overflow: hidden;
  background: radial-gradient(ellipse 70% 100% at 90% 0%, color-mix(in srgb, var(--brass) 14%, transparent), transparent 70%), var(--card);
  box-shadow: inset 0 0 0 8px var(--card), inset 0 0 0 9px var(--brass-line);
}
.gqj-body { flex: 1; display: flex; flex-direction: column; gap: 28px; padding: 34px 36px; }

/* En haut : la carte sur toute la largeur, les deux cartes posées dessus en bas à droite (tout reste dans le cadre de la carte) */
.gqj-preview { position: relative; display: flex; flex-direction: column; }
.gqj-map { position: relative; flex: 1; min-height: 140px; overflow: hidden; background: radial-gradient(ellipse at 50% 35%, #15383f, #0b1e22 78%); border: 1px solid var(--brass-line); box-shadow: 0 12px 26px rgba(0, 0, 0, .4); }
.gqj-cards { position: absolute; left: 10px; bottom: -30px; display: flex; }
.gqj-card { position: relative; width: 96px; filter: drop-shadow(0 14px 20px rgba(0, 0, 0, .45)); }
.gqj-card .cards.collection { display: block; width: 100%; margin: 0; padding: 0; }
.gqj-card--a { transform: rotate(-7deg); z-index: 2; }
.gqj-card--b { transform: rotate(5deg) translate(54px, -20px); z-index: 1; }
.gqj-body .gqj-map { flex: none; height: clamp(190px, 24vw, 290px); }
.gqj-body .gqj-cards { left: auto; right: 38px; bottom: 14px; }
.gqj-body .gqj-card--b { transform: rotate(5deg) translate(-26px, -10px); }

/* En bas : texte à gauche, gains et bouton à droite, sur toute la largeur */
.gqj-main { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 24px 40px; }
.gqj-text { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; }
.gqj-side { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.gqj .gqj-side .wsb-gains { margin: 0 5px; min-width: 0; grid-template-columns: repeat(3, auto); }
.gqj .gqj-side .wsb-gains > div { padding: 10px 18px 8px; }
.gqj .gqj-side .wsb-gains dd { font-size: 20px; white-space: nowrap; }
.gqj .gqj-side .wsb-act { margin-top: 0; justify-content: center; }
.gqj-kicker { display: flex; align-items: center; gap: 12px; margin: 0; font-size: 11px; font-weight: 500; letter-spacing: .3em; text-transform: uppercase; color: var(--brass-ink); }
.gqj-kicker::before { content: ""; width: 28px; height: 1px; background: var(--brass); }
.gqj-name { margin: -2px 0 0; font-weight: 300; font-size: 34px; line-height: 1; letter-spacing: .1em; text-transform: uppercase; }
.gqj-name b { font-weight: 600; color: var(--brass-ink); }
.gqj-rule { margin: 0; max-width: 46ch; color: var(--muted); font-size: 14px; line-height: 1.55; text-wrap: pretty; }

@container jxp (max-width: 980px) {
  .gqj-body { padding: 28px 28px 32px; }
  .gqj-main { grid-template-columns: minmax(0, 1fr); }
  .gqj-side { align-items: stretch; }
}
@container jxp (max-width: 520px) {
  .gqj-body { padding: 24px 20px 28px; }
  .gqj-name { font-size: 28px; }
  .gqj-body .gqj-card { width: 72px; }
  .gqj-body .gqj-cards { right: 22px; }
  .gqj-body .gqj-card--b { transform: rotate(5deg) translate(-18px, -8px); }
  .gqj .gqj-side .wsb-gains { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .gqj .gqj-side .wsb-gains > div { padding: 10px 4px 8px; }
  .gqj .gqj-side .wsb-gains dd { font-size: 15px; flex-wrap: wrap; justify-content: center; white-space: normal; text-align: center; }
  .gqj .gqj-side .wsb-gains dt { font-size: 9px; letter-spacing: .12em; text-align: center; }
}

/* =========================================================
   Fenêtre « Défier un ami » (habillage proposé, CSS seul)
   ========================================================= */
.jxp-modal-help { margin: 0 0 16px; text-align: center; font-size: 13px; color: var(--muted); }
.jxp-search { width: 100%; min-height: 44px; padding: 0 14px; background: var(--surface); border: 1px solid var(--brass-line); color: var(--text); font: inherit; font-size: 14px; }
.jxp-search::placeholder { color: var(--muted); }
.jxp-friends { list-style: none; margin: 10px 0 0; padding: 0; max-height: 320px; overflow-y: auto; }
.jxp-friends li { display: flex; align-items: center; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--line); }
.jxp-friends li b { flex: 1; font-weight: 500; }
.jxp-modal-empty { text-align: center; font-size: 14px; color: var(--muted); display: grid; justify-items: center; gap: 14px; padding: 10px 0; }

/* =========================================================
   Responsive (requêtes de conteneur : suit la largeur réelle de .jxp-page)
   ========================================================= */
@container jxp (max-width: 980px) {
  .wsb-body { padding: 44px 40px; }
  .wsb-runs { margin: 120px 40px 0; }
  .wsb-win { right: -16px; }
  .jxp-grid { grid-template-columns: minmax(0, 1fr); gap: 56px; }
  .jxp-encart { max-width: 560px; width: 100%; justify-self: center; }
}
@container jxp (max-width: 760px) {
  .wsb-body { grid-template-columns: minmax(0, 1fr); gap: 20px; padding: 0 28px 36px; min-height: 0; }
  .wsb-preview { order: -1; height: 270px; margin: 0 -12px; }
  .wsb-win { top: -40px; right: 0; width: 78%; height: 230px; transform: rotate(2.5deg); }
  .wsb-cards { left: 0; bottom: 6px; }
  .wsb-card { width: 108px; padding: 8px 8px 10px; }
  .wsb-card--b { transform: rotate(5deg) translate(-14px, -18px); }
  .wsb-burst { left: 60%; top: 22%; width: 900px; }
  .wsb-runs { grid-template-columns: minmax(0, 1fr); margin: 36px 0 0; }
}
@container jxp (max-width: 520px) {
  .jxp-page { padding: 32px 16px 128px; } /* barre fixe 64 px + bouton de notifications */
  .jxp-head { margin-bottom: 52px; }
  .jxp-title { --ls: .26em; font-size: 30px; gap: 12px; }
  .jxp-title::before, .jxp-title::after { width: 56px; -webkit-mask-size: 50px 14px, 0 0; mask-size: 50px 14px, 0 0; }
  .jxp-lead { font-size: 15px; }
  .wsb-body { padding: 0 20px 28px; }
  .wsb-preview { height: 230px; margin: 0 -8px; }
  .wsb-win { top: -34px; right: -2px; width: 84%; height: 196px; }
  .wsb-win-bar { padding: 7px 8px; gap: 6px; }
  .wsb-win-time { font-size: 13px; padding: 1px 6px; }
  .wsb-win-players { gap: 6px; }
  .wsb-cards { bottom: 0; left: 2px; }
  .wsb-card { width: 92px; gap: 5px; }
  .wsb-name { font-size: 36px; letter-spacing: .12em; }
  .wsb-rule { font-size: 14px; }
  .wsb-gains { min-width: 0; width: calc(100% - 10px); }
  .wsb-gains > div { padding: 10px 8px 8px; }
  .wsb-gains dd { font-size: 24px; }
  .wsb-act { flex-direction: column; align-items: stretch; width: 100%; }
  .wsb-quota { max-width: none; flex-direction: row; align-items: center; gap: 12px; justify-content: center; }
  .wsb-cta { width: 100%; }
  .wsb-run { gap: 12px; }
  .jxp-encart { padding: 24px 20px 18px; }
  .jxp-grid { margin-top: 56px; }
}

/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .wsb { scroll-behavior: auto; }


/* =========================================================
   Proposition D « Triptyque » (surcharges, à garder après ce qui précède)
   ========================================================= */
.jxp-v-d .wsb-body { grid-template-columns: minmax(0, .9fr) minmax(0, 1fr) minmax(0, .95fr); gap: 36px; padding: 34px 40px; min-height: 0; }
.jxp-v-d .wsb-preview { order: 0; }
.jxp-v-d .wsb-win { top: -70px; left: -20px; right: auto; width: 108%; height: 236px; transform: rotate(-3deg); transform-origin: 30% 30%; }
.jxp-v-d .wsb-cards { left: 8px; top: 172px; bottom: auto; }
.jxp-v-d .wsb-card { width: 132px; }
.jxp-v-d .wsb-card--b { transform: rotate(5deg) translate(-18px, 2px); }
.jxp-v-d .wsb-burst { left: 22%; top: 45%; width: 1200px; }
.jxp-v-d .wsb-main { align-items: center; text-align: center; }
.jxp-v-d .wsb-kicker::after { content: ""; width: 28px; height: 1px; background: var(--brass); }
.jxp-v-d .wsb-name { font-size: 44px; }
.jxp-v-d .wsb-main { gap: 12px; }
.jxp-v-d .wsb-rule { font-size: 14px; line-height: 1.5; }
.jxp-v-d .wsb-gains > div { padding: 8px 16px 7px; }
.jxp-v-d .wsb-gains dd { font-size: 24px; }
.jxp-v-d .wsb-gains { min-width: 0; width: calc(100% - 10px); }
.jxp-v-d .wsb-act { flex-direction: column; gap: 14px; }
.jxp-v-d .wsb-quota { align-items: center; max-width: 28ch; }
.jxp-v-d .wsb-act { width: 100%; align-items: center; margin-top: 14px; }
/* Boutons « Jouer », « Relever le défi », « Défier un ami » : plus grands et centrés dans leur colonne, pour être le premier élément vu du bloc */
.jxp-v-d .wsb-cta { align-self: center; justify-content: center; gap: 26px; min-width: min(100%, 320px); padding: 26px 48px; font-size: 16px; letter-spacing: .3em; }
.jxp-v-d .wsb-cta .dm { width: 9px; height: 9px; }

.jxp-v-d .wsb-runs { grid-template-columns: minmax(0, 1fr); align-content: start; gap: 14px; margin: 0; padding-left: 28px; border-left: 1px solid var(--brass-line); position: relative; z-index: 1; }
.jxp-v-d .wsb-run { min-height: 46px; padding: 4px 0; gap: 10px; }
.jxp-v-d .wsb-run .btn-sm { min-height: 44px; padding: 0 12px; }
.jxp-v-d .wsb-list { margin-top: 2px; }
.jxp-v-d .wsb-run .jxp-av { width: 32px; height: 32px; font-size: 12px; }
.jxp-v-d .wsb-run-txt span { font-size: 12px; }
.jxp-v-d .wsb-runs-empty { align-self: center; flex-direction: column; gap: 10px; text-align: center; height: 100%; min-height: 120px; }

.jxp-v-d .jxp-grid { margin-top: 32px; }

@container jxp (max-width: 1100px) {
  .jxp-v-d .wsb-body { grid-template-columns: minmax(0, .85fr) minmax(0, 1fr); }
  .jxp-v-d .wsb-runs { grid-column: 1 / -1; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); padding: 32px 0 0; margin-top: 64px; border-left: 0; border-top: 1px solid var(--brass-line); }
  .jxp-v-d .wsb-win { left: -24px; }
}
@container jxp (max-width: 760px) {
  .jxp-v-d .wsb-body { grid-template-columns: minmax(0, 1fr); padding: 0 24px 32px; gap: 20px; }
  .jxp-v-d .wsb-preview { order: -1; }
  .jxp-v-d .wsb-win { top: -40px; left: auto; right: 0; width: 78%; height: 220px; transform: rotate(-2.5deg); }
  .jxp-v-d .wsb-cards { left: 0; top: auto; bottom: 6px; }
  .jxp-v-d .wsb-card { width: 104px; }
  .jxp-v-d .wsb-card--b { transform: rotate(5deg) translate(-14px, -18px); }
  .jxp-v-d .wsb-runs { grid-template-columns: minmax(0, 1fr); margin-top: 16px; }
  .jxp-v-d .wsb-burst { left: 50%; top: 150px; width: 900px; }
  .jxp-v-d .wsb-act { align-items: stretch; width: 100%; }
  .jxp-v-d .wsb-quota { max-width: none; }
  .jxp-v-d .jxp-grid { margin-top: 56px; }
}
@container jxp (max-width: 760px) {
  .jxp-v-d .wsb-runs { gap: 0; padding-top: 0; border-top: 0; }
}
@container jxp (max-width: 520px) {
  .jxp-v-d .wsb-body { padding: 0 20px 28px; }
  .jxp-v-d .wsb-win { top: -34px; width: 84%; height: 196px; right: -2px; }
  .jxp-v-d .wsb-card { width: 92px; }
  .jxp-v-d .wsb-name { font-size: 36px; }
}
/* Fenêtre « Défier un ami » (social.js) : titre centré, liste en filets, comme la page Jeux */
.jxp-modal-box h2 { text-align: center; font-size: 15px; font-weight: 400; letter-spacing: .3em; text-transform: uppercase; }
.jxp-modal-box .jxp-av { width: 38px; height: 38px; }
.jxp-modal-box .btn { flex: none; }
.jxp-friends li.jxp-modal-none { justify-content: center; color: var(--muted); font-size: 13px; }
@media (max-width: 560px) { .jxp-search { font-size: 16px; } }   /* 16 px : pas de zoom iOS au toucher */
/* WikiSpeed pas encore jouable (moins de WikiSpeed::MIN_CARDS cartes) : bouton éteint, explication à côté */
.wsb-quota.is-locked { max-width: 30ch; }

/* ---------- WikiGéo (public/wikigeo.php, assets/wikigeo.js) ---------- */
/* Toute la largeur de l'écran (comme .wrap.ws pour WikiSpeed), pas la largeur de lecture habituelle (--max) */
.wrap.gq { padding-top: clamp(28px, 5vw, 48px); width: calc(100% - 2 * clamp(16px, 4vw, 50px) - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px)); }
.gq-head { text-align: center; max-width: 60ch; margin: 0 auto 32px; }
.gq-kicker { margin: 0 0 8px; font-size: 12.5px; letter-spacing: .22em; text-transform: uppercase; }
.gq-kicker a { color: var(--brass-ink); }
.gq-head h1 { margin: 0 0 10px; font-weight: 300; font-size: clamp(32px, 5vw, 48px); }
.gq-lead { margin: 0; color: var(--muted); }
.gq-msg { min-height: 1.4em; margin: 0 0 16px; text-align: center; color: var(--muted); }
.gq-msg.is-error { color: var(--err-ink); }
.gq-phase[hidden] { display: none; }

/* Pendant une partie (plein écran ou non, voir wikigeo.js show()) : plus de défilement possible sur la page, pied de page
   masqué, et la fenêtre de jeu (.gq-stage) occupe toute la largeur et toute la hauteur sous l'en-tête (ce dernier n'est jamais
   masqué « en dur » : <body> reste en colonne flexible, <main> prend simplement tout ce qu'il reste). En plein écran, #gq
   devient lui-même cette fenêtre (voir #gq:fullscreen plus bas) : l'en-tête du site n'existe alors plus dans le document. */
body.gq-playing { height: 100vh; height: 100dvh; overflow: hidden; }
body.gq-playing .foot { display: none; }
body.gq-playing > main.gq { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; width: 100%; max-width: none; padding: 0; }
body.gq-playing .gq-head { display: none; }
body.gq-playing .gq-msg:empty { display: none; }
body.gq-playing .gq-msg { margin: 10px clamp(16px, 4vw, 50px) 0; }
body.gq-playing .gq-phase.gq-play { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; }
body.gq-playing .gq-stage { flex: 1 1 auto; min-height: 0; }

#gq:fullscreen, #gq:-webkit-full-screen {
  display: flex; flex-direction: column; width: 100%; max-width: none; height: 100%;
  padding: clamp(14px, 3vw, 32px) clamp(16px, 4vw, 50px); background: var(--bg); overflow: hidden;
}

/* Bouton plein écran : un petit bouton discret sous « Valider »/« Tour suivant », visible seulement pendant la partie */
.gq-fullscreen { margin-top: 4px; gap: 8px; padding: 6px 12px; font-size: 12px; }
.gq-fullscreen .ic { width: 14px; height: 14px; }

/* Choix de l'échelle : une bannière par échelle, même langage que .wsb (page Jeux, WikiSpeed) */
.gq-scales { display: grid; gap: 28px; max-width: 1000px; margin: 0 auto; }

.gqb-frame { --s: 7px; position: relative; isolation: isolate; }
.gqb-frame::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); opacity: .75; }
.gqb-bg {
  position: absolute; inset: 1px; z-index: -1; overflow: hidden;
  background: radial-gradient(ellipse 60% 90% at 12% 100%, color-mix(in srgb, var(--brass) 14%, transparent), transparent 70%), var(--card);
  box-shadow: inset 0 0 0 8px var(--card), inset 0 0 0 9px var(--brass-line);
}
.gqb-body { display: grid; grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr); gap: 36px; align-items: center; padding: 40px 44px; min-height: 210px; }

.gqb-preview { position: relative; }
.gqb-map { position: relative; overflow: hidden; aspect-ratio: 2.1 / 1; background: radial-gradient(ellipse at 50% 35%, #15383f, #0b1e22 78%); border: 1px solid var(--brass-line); box-shadow: 0 12px 26px rgba(0, 0, 0, .4); }
.gqb-cards { position: absolute; left: 10px; bottom: -34px; display: flex; }
.gqb-card { position: relative; width: 104px; filter: drop-shadow(0 14px 20px rgba(0, 0, 0, .45)); }
.gqb-card .cards.collection { display: block; width: 100%; margin: 0; padding: 0; }
.gqb-card:not(.is-ready) .cards.collection { opacity: 0; }   /* les cartes arrivent après la page (wikigeo.js) : elles apparaissent en fondu */
.gqb-card .cards.collection { transition: opacity .4s ease; }
.gqb-card .card { width: 100%; }
.gqb-card--a { transform: rotate(-7deg); z-index: 2; }
.gqb-card--b { transform: rotate(5deg) translate(58px, -22px); z-index: 1; }

.gqb-main { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; }
.gqb-kicker { display: flex; align-items: center; gap: 12px; margin: 0; font-size: 11px; font-weight: 500; letter-spacing: .3em; text-transform: uppercase; color: var(--brass-ink); }
.gqb-kicker::before { content: ""; width: 28px; height: 1px; background: var(--brass); }
.gqb-name { margin: -2px 0 0; font-weight: 300; font-size: 38px; line-height: 1; letter-spacing: .1em; text-transform: uppercase; }
.gqb-rule { margin: 0; max-width: 34ch; color: var(--muted); font-size: 14px; line-height: 1.5; }
.gqb-act { margin-top: 8px; }

@media (max-width: 900px) {
  .gqb-body { grid-template-columns: minmax(0, 1fr); gap: 20px; padding: 0 28px 36px; min-height: 0; }
  .gqb-preview { order: -1; margin: 44px -6px 34px; }
  .gqb-cards { left: 4px; }
}
@media (max-width: 480px) {
  .gqb-body { padding: 0 20px 28px; }
  .gqb-name { font-size: 30px; }
  .gqb-card { width: 88px; }
  .gqb-card--b { transform: rotate(5deg) translate(48px, -16px); }
}

/* Carte vectorielle (écran de jeu ET aperçus de l'écran de choix) : <svg> dessiné par wikigeo.js, cadré par viewBox */
.gq-svg { position: absolute; inset: 0; display: block; width: 100%; height: 100%; pointer-events: none; user-select: none; }
.gq-grat line { stroke: rgba(201, 164, 92, .11); stroke-width: var(--sw, .05); }
.gq-svg .country { fill: #3d5246; }
.gq-svg .country path { stroke: rgba(232, 211, 160, .62); stroke-width: var(--sw, .05); stroke-linejoin: round; }
.gq-svg .country.is-on { fill: #48614f; }
.gq-svg .country.is-dim { fill: #202728; }
.gq-svg .country.is-dim path { stroke: rgba(255, 255, 255, .13); }
/* Relief vectoriel : massifs (halo clair), lacs, rivières (seulement de près) */
.relief-ranges { fill: rgba(222, 204, 150, .2); stroke: none; }
.relief-lakes { fill: #123139; stroke: rgba(232, 211, 160, .4); stroke-width: var(--sw, .05); }
.relief-rivers { fill: none; stroke: #3b8593; stroke-width: calc(var(--sw, .05) * 1.2); stroke-opacity: .75; stroke-linejoin: round; }
.gq-svg[data-lod="far"] .relief-rivers { display: none; }

/* Choix de l'échelle : intitulé */
.gq-pick-title { margin: 0 0 22px; text-align: center; font-size: 17px; letter-spacing: .06em; color: var(--brass-ink); }

/* Écran de jeu : bandeau (tour, chrono, score) toujours AU-DESSUS du cadre de la carte, jamais superposé ; la carte à deviner,
   les consignes et les boutons restent en surimpression sur la carte (.gq-layer, mêmes gorges qu'avant). */
.gq-stage { display: flex; flex-direction: column; gap: 14px; width: 100%; margin: 0 auto; min-height: 0; }

/* Bandeau : tour (pastilles), chronomètre, score, jauge de temps */
.gq-bar {
  position: relative; z-index: 3; flex: none; margin: 0 40px;
  display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 16px; padding: 9px 20px 14px;
  background: rgba(9, 18, 20, .88); border: 1px solid var(--brass-line);
}
.gq-round { justify-self: start; display: grid; gap: 8px; }
.gq-round-label { font-size: 12px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); }
.gq-round-label b { font-size: 15px; letter-spacing: 0; color: var(--text); }
.gq-pips { display: flex; gap: 9px; }
.gq-pips i { width: 10px; height: 10px; rotate: 45deg; border: 1px solid var(--brass); background: transparent; }
.gq-pips i.is-done { background: var(--brass); }
.gq-pips i.is-now { background: color-mix(in srgb, var(--brass) 45%, transparent); box-shadow: 0 0 9px var(--brass); }
.gq-clock { justify-self: center; }
.gq-timer { font-size: 28px; line-height: 1; font-weight: 300; letter-spacing: .06em; font-variant-numeric: tabular-nums; }
.gq-timer.is-low { color: var(--err-ink); }
.gq-livescore { justify-self: end; display: grid; justify-items: end; gap: 4px; }
.gq-livescore span { font-size: 12px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); }
.gq-livescore b { font-size: 24px; font-weight: 400; line-height: 1; color: var(--brass-ink); font-variant-numeric: tabular-nums; }
.gq-bar-track { position: absolute; left: 6px; right: 6px; bottom: 6px; height: 3px; background: var(--line); }
.gq-bar-track i { display: block; height: 100%; width: 100%; background: var(--brass); transition: width .3s linear; }
.gq-bar-track i.is-low { background: var(--err-ink); }

/* .gq-layer : la carte (.gq-mapbox) et, par-dessus, la carte à situer + consignes / résultat du tour / boutons (.gq-side) ;
   occupe tout l'espace restant sous le bandeau (.gq-bar), qui lui n'y est plus superposé. */
.gq-layer { position: relative; flex: 1 1 auto; min-height: 0; margin: 0 40px; display: grid; grid-template-areas: "stack"; }
.gq-mapbox, .gq-side { grid-area: stack; }

.gq-side {
  position: relative; z-index: 3; align-self: end; justify-self: stretch; margin: 0 0 20px; pointer-events: none;
  display: grid; grid-template-columns: auto auto; justify-content: space-between; align-items: end; gap: 14px;
}
.gq-card { display: flex; justify-content: center; width: min(290px, 38vw); pointer-events: auto; }   /* grande, pour lire la description */
.gq-card .cards.collection { display: block; width: 100%; padding: 0; margin: 0; filter: drop-shadow(0 14px 22px rgba(0, 0, 0, .5)); }
.gq-info { display: grid; justify-items: end; gap: 12px; pointer-events: auto; }
.gq-hint { margin: 0; padding: 6px 12px; background: rgba(9, 18, 20, .78); color: var(--muted); font-size: 13.5px; line-height: 1.45; }
.gq-round-result { margin: 0; padding: 10px 14px; background: rgba(9, 18, 20, .85); border: 1px solid var(--brass-line); text-align: center; }
.gq-round-result[hidden] { display: none; }
.gq-distance { margin: 0; font-size: 14px; color: var(--muted); }
.gq-round-score { margin: 2px 0 0; font-size: 22px; font-weight: 400; color: var(--brass-ink); }
.gq-actions { display: flex; justify-content: center; gap: 14px; margin: 0; }
.gq-end-actions { margin-top: 32px; }

/* Carte : cadre à gradins (filet laiton, gorge sombre, filet, gorge, passe-partout) + équerres aux pieces */
.gq-mapbox { align-self: stretch; justify-self: stretch; display: flex; align-items: center; justify-content: center; height: 100%; min-height: 0; padding: 14px; }
.gq-frame {
  position: relative; padding: 12px; margin: 0 auto; width: 100%; max-width: 100%;
  background: linear-gradient(145deg, #1a2d31, #0c1719);
  border: 1px solid var(--brass);
  box-shadow: 0 0 0 4px #091214, 0 0 0 5px var(--brass-line), 0 0 0 11px #111d20, 0 0 0 12px var(--brass), 0 26px 46px rgba(0, 0, 0, .55);
}
.gq-frame::before {
  content: ""; position: absolute; inset: -13px; pointer-events: none; z-index: 2;
  --b: var(--brass);
  background:
    linear-gradient(var(--b), var(--b)) 0 0 / 26px 3px no-repeat, linear-gradient(var(--b), var(--b)) 0 0 / 3px 26px no-repeat,
    linear-gradient(var(--b), var(--b)) 100% 0 / 26px 3px no-repeat, linear-gradient(var(--b), var(--b)) 100% 0 / 3px 26px no-repeat,
    linear-gradient(var(--b), var(--b)) 0 100% / 26px 3px no-repeat, linear-gradient(var(--b), var(--b)) 0 100% / 3px 26px no-repeat,
    linear-gradient(var(--b), var(--b)) 100% 100% / 26px 3px no-repeat, linear-gradient(var(--b), var(--b)) 100% 100% / 3px 26px no-repeat;
}
.gq-map-wrap {
  position: relative; overflow: hidden; width: 100%; aspect-ratio: var(--r, 1.6);
  background: radial-gradient(ellipse at 50% 35%, #15383f, #0b1e22 78%);
  border: 1px solid var(--brass-line);
  box-shadow: 0 0 0 3px #091214, 0 0 0 4px var(--brass-line), inset 0 0 46px rgba(0, 0, 0, .6);
  cursor: var(--cur-hand); touch-action: none;
}
.gq-map-wrap.is-dragging { cursor: grabbing; }
.gq-pins { position: absolute; inset: 0; pointer-events: none; }
.gq-link { position: absolute; top: 0; left: 0; height: 1px; transform-origin: 0 0; border-top: 1px dashed rgba(236, 231, 219, .7); }
.gq-pin { position: absolute; width: 14px; height: 14px; translate: -50% -50%; border-radius: 50%; box-shadow: 0 0 0 2px rgba(6, 12, 14, .85), 0 1px 5px rgba(0, 0, 0, .6); }
.gq-pin.is-guess { background: var(--r3); box-shadow: 0 0 0 2px rgba(6, 12, 14, .85), 0 0 0 5px color-mix(in srgb, var(--r3) 35%, transparent), 0 1px 5px rgba(0, 0, 0, .6); }
.gq-pin.is-truth { width: 16px; height: 16px; background: var(--r6); box-shadow: 0 0 0 2px rgba(6, 12, 14, .85), 0 0 0 5px color-mix(in srgb, var(--r6) 35%, transparent), 0 1px 5px rgba(0, 0, 0, .6); }
.gq-pin.is-guess.is-final { opacity: .85; }

/* Boutons de zoom (sur le bord droit de la carte) */
.gq-terr { position: absolute; left: 12px; top: 12px; z-index: 2; display: flex; align-items: center; gap: 8px; max-width: calc(100% - 76px); padding: 5px 8px 5px 10px; background: rgba(9, 18, 20, .85); border: 1px solid var(--brass-line); color: var(--brass-ink); font-size: 12.5px; letter-spacing: .04em; }
.gq-terr[hidden] { display: none; }
.gq-terr select { min-width: 0; max-width: 100%; padding: 4px 6px; font: inherit; color: var(--text); background: var(--card); border: 1px solid var(--line); cursor: var(--cur-hand); }
.gq-svg .dept { fill: #48614f; stroke: rgba(232, 211, 160, .5); stroke-width: calc(var(--sw, .05) * .7); stroke-linejoin: round; }   /* même vert que .country.is-on : les départements remplacent le tracé de la France (voir addDepts dans wikigeo.js) */
.gq-zoom { position: absolute; right: 12px; top: 50%; translate: 0 -50%; z-index: 2; display: grid; gap: 1px; background: var(--brass-line); border: 1px solid var(--brass-line); }
.gq-zoom button { width: 36px; height: 36px; padding: 0; font: inherit; font-size: 20px; line-height: 1; color: var(--brass-ink); background: rgba(9, 18, 20, .85); border: 0; cursor: var(--cur-hand); }
.gq-zoom button:hover { background: rgba(28, 44, 48, .95); color: var(--text); }
/* Thème clair : ces éléments gardent leur fond sombre (posé en dur, comme la carte) ; ils prennent donc les couleurs de texte du thème sombre. Aucune carte n'est à l'intérieur. */
:root[data-theme="light"] :is(.gq-bar, .gq-terr, .gq-zoom) { --text: #ece7db; --muted: #9a9686; --line: rgba(236, 231, 219, .12); --brass-ink: #d3b06a; --err-ink: #d5544f; --card: #111d19; color: var(--text); }
@media (min-width: 861px) { :root[data-theme="light"] :is(.gq-hint, .gq-round-result) { --text: #ece7db; --muted: #9a9686; --brass-ink: #d3b06a; color: var(--text); } }   /* sous 861 px, ces deux encarts quittent la carte et prennent le fond de la page */

@media (max-width: 860px) {
  .gq-stage { gap: 18px; }
  .gq-bar { margin: 0; }
  .gq-layer { margin: 0; display: flex; flex-direction: column; gap: 18px; grid-template-areas: none; }
  .gq-side { position: static; align-self: auto; margin: 0; pointer-events: auto; background: var(--band); grid-template-columns: auto minmax(0, 1fr); justify-content: stretch; align-items: center; gap: 18px; }
  .gq-mapbox { flex: 1 1 auto; }
  .gq-card { width: min(250px, 50vw); }
  .gq-info { justify-items: start; }
  .gq-hint, .gq-round-result { background: transparent; }
  .gq-round-result { text-align: left; background: var(--band); }
  .gq-actions { justify-content: flex-start; }
}
@media (max-width: 640px) {
  .gq-frame { width: 100%; padding: 8px; }
  .gq-bar { padding: 10px 14px 16px; gap: 8px; }
  .gq-timer { font-size: 26px; }
  .gq-mapbox { padding: 10px; }
  .gq-zoom button { width: 32px; height: 32px; }
  .gq-end-body { padding: 36px 20px 28px; }
  .gq-recap-item { padding: 10px 12px; gap: 12px; }
  .gq-recap-card { width: 68px; }
}

/* Résultat final : score, récapitulatif des tours et bouton de retour, dans un même encart cadre à gradins (mêmes gradins et
   filets que .wsb-frame) avec un effet rayon/éventail en fond (mêmes dégradés que .wsb-burst). */
.gq-end-frame { --s: 7px; position: relative; isolation: isolate; max-width: 720px; margin: 0 auto; }
.gq-end-frame::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); opacity: .75; }
.gq-end-bg {
  position: absolute; inset: 1px; z-index: -1; overflow: hidden;
  background: radial-gradient(ellipse 70% 90% at 50% 100%, color-mix(in srgb, var(--brass) 14%, transparent), transparent 70%), var(--card);
  box-shadow: inset 0 0 0 8px var(--card), inset 0 0 0 9px var(--brass-line);
}
.gq-end-burst {
  position: absolute; left: 50%; top: 26%; width: 900px; aspect-ratio: 1; translate: -50% -50%;
  background:
    radial-gradient(circle, transparent 0 70px, var(--brass) 70px 71px, transparent 71px 78px, var(--brass) 78px 79px, transparent 79px),
    repeating-conic-gradient(from -.3deg, var(--brass) 0 .6deg, transparent .6deg 7deg, var(--brass) 7deg 8.6deg, transparent 8.6deg 15deg);
  -webkit-mask-image: radial-gradient(circle, transparent 0 44px, #000 46px, rgba(0, 0, 0, .55) 30%, transparent 58%);
          mask-image: radial-gradient(circle, transparent 0 44px, #000 46px, rgba(0, 0, 0, .55) 30%, transparent 58%);
  opacity: .2;
}
.gq-end-body { position: relative; padding: 48px 40px 40px; }

.gq-final { max-width: 560px; margin: 0 auto; text-align: center; display: grid; gap: 8px; }
.gq-final-score { margin: 0; font-size: 28px; font-weight: 300; }

/* Récapitulatif des gains (pièces, paquets argentés, cartes gagnées) : encart art déco à double filet et angles à losanges */
.gq-gains { position: relative; margin: 28px auto 0; padding: 26px 22px 20px; text-align: center; background: linear-gradient(160deg, color-mix(in srgb, var(--brass) 10%, var(--card)), var(--card)); border: 1px solid var(--brass-line); box-shadow: 0 0 0 5px var(--card), 0 0 0 6px var(--brass-line); }
.gq-gains::before, .gq-gains::after { content: ""; position: absolute; left: 50%; width: 9px; height: 9px; margin-left: -5px; transform: rotate(45deg); background: var(--brass); }
.gq-gains::before { top: -5px; }
.gq-gains::after { bottom: -5px; }
.gq-gains-title { display: flex; align-items: center; justify-content: center; gap: 14px; margin: 0 0 16px; font-size: 12px; font-weight: 500; letter-spacing: .3em; text-transform: uppercase; color: var(--brass-ink); }
.gq-gains-title::before, .gq-gains-title::after { content: ""; width: 34px; height: 1px; background: var(--brass); }
.gq-gains-rows { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gq-gains-rows:has(> .gq-gain:nth-child(4)) { grid-template-columns: repeat(4, minmax(0, 1fr)); }   /* quiz d'Halloween : une 4e tablette « Paquets Halloween » */
@media (max-width: 560px) { .gq-gains-rows:has(> .gq-gain:nth-child(4)) { grid-template-columns: repeat(2, minmax(0, 1fr)); row-gap: 12px; } .gq-gains-rows:has(> .gq-gain:nth-child(4)) > .gq-gain:nth-child(3) { border-left: 0; } }
.gq-gain { position: relative; display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 6px 10px; }
.gq-gain + .gq-gain { border-left: 1px solid var(--brass-line); }
.gq-gain-label { font-size: 10px; letter-spacing: .22em; text-transform: uppercase; color: var(--muted); }
.gq-gain-value { font-size: 32px; font-weight: 300; line-height: 1.1; letter-spacing: .04em; color: var(--brass-ink); }
.gq-gain-note { font-size: 12px; line-height: 1.35; color: var(--muted); text-wrap: balance; }
.gq-gain.is-none .gq-gain-value { color: var(--muted); opacity: .6; }
.gq-gains-cards { list-style: none; margin: 20px 0 0; padding: 18px 0 0; border-top: 1px solid var(--brass-line); display: flex; flex-wrap: wrap; justify-content: center; gap: 18px 22px; }
.gq-gains-card { display: flex; flex-direction: column; align-items: center; gap: 6px; width: 96px; }
.gq-gains-card .gq-recap-card { width: 96px; }
.gq-gains-card-title { max-width: 100%; font-size: 12px; color: var(--text); text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
.gq-gains-card-tag { font-size: 10px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.gq-gains-card-tag.is-new { color: var(--brass-ink); font-weight: 600; }
.gq-gains-foot { margin: 14px 0 0; font-size: 12px; color: var(--muted); }
@media (max-width: 640px) {
  .gq-gains { padding: 24px 12px 16px; }
  .gq-gain { padding: 6px 4px; }
  .gq-gain-value { font-size: 24px; }
  .gq-gain-label { font-size: 9px; letter-spacing: .1em; text-align: center; }
  .gq-gain-note { font-size: 11px; }
}

/* Récapitulatif des tours : la carte de chaque tour, en grand (pas juste sa vignette), dans un cadre à gradins sans filet
   (mêmes gorges que .gq-frame, sans le filet laiton) : juste le numéro du tour, la carte, la distance et le score. */
.gq-recap { list-style: none; margin: 28px auto 0; padding: 0; display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; text-align: left; }
.gq-recap-item {
  --s: 5px; position: relative; isolation: isolate; display: flex; align-items: center; gap: 16px; padding: 12px 18px;
  background: linear-gradient(145deg, #16211f, #0d1513);
  box-shadow: inset 0 0 0 3px #070c0b, inset 0 0 0 7px #16211f, inset 0 0 0 8px #070c0b;
}
.gq-recap-n { flex: none; width: 28px; font-size: 22px; font-weight: 700; color: var(--brass-ink); text-align: center; }
.gq-recap-card { flex: none; width: 84px; filter: drop-shadow(0 8px 14px rgba(0, 0, 0, .45)); }
.gq-recap-card.is-link { cursor: var(--cur-hand); transition: translate .25s var(--ease); }   /* un clic ouvre l'article de Wikipédia dans un nouvel onglet (assets/wikigeo.js) */
.gq-recap-card.is-link .card, .gq-recap-card.is-link .card-in { cursor: var(--cur-hand); }
@media (hover: hover) { .gq-recap-card.is-link:hover { translate: 0 -4px; } }
.gq-recap-card .cards.collection { display: block; width: 100%; margin: 0; padding: 0; }
.gq-recap-title { flex: 1; min-width: 0; font-size: 15px; color: var(--text); text-overflow: ellipsis; overflow: hidden; white-space: nowrap; }
.gq-recap-stats { flex: none; text-align: right; font-size: 13px; color: var(--muted); }
.gq-recap-stats b { display: block; font-size: 18px; font-weight: 400; color: var(--brass-ink); }
/* Thème clair : la ligne du récapitulatif garde son fond sombre ; seuls ses textes passent en clair (la carte qu'elle contient garde les couleurs du thème) */
:root[data-theme="light"] .gq-recap-n, :root[data-theme="light"] .gq-recap-stats b { color: #d3b06a; }
:root[data-theme="light"] .gq-recap-title { color: #ece7db; }
:root[data-theme="light"] .gq-recap-stats { color: #9a9686; }

/* ---------- Atelier (public/atelier.php, assets/atelier.js) : transformer une carte en Extended Art / Full Art ---------- */
/* Tarifs : encart repliable, tableau avec un losange coloré par rareté (classes .r1…r7, jeton --rc) devant chaque nom. */
.atl-prices { max-width: 720px; margin: 0 auto 40px; border: 1px solid var(--brass-line); background: var(--card); }
.atl-prices summary { padding: 14px 20px; font-size: 13px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase; color: var(--brass-ink); cursor: var(--cur-hand); }
.atl-prices summary::marker { color: var(--brass); }
.atl-prices-in { padding: 0 20px 20px; overflow-x: auto; }
.atl-prices table { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.atl-prices th, .atl-prices td { padding: 8px 10px; text-align: right; border-bottom: 1px solid var(--line); white-space: nowrap; }
.atl-prices thead th { color: var(--muted); font-weight: 500; font-size: 11.5px; letter-spacing: .08em; text-transform: uppercase; border-bottom-color: var(--brass-line); }
.atl-prices th[scope="row"] { text-align: left; display: flex; align-items: center; gap: 10px; font-weight: 400; }
.atl-dia { flex: none; width: 8px; height: 8px; transform: rotate(45deg); background: var(--rc, var(--brass)); }
.hw-atl-prices { max-width: none; margin: 10px 0 0; }

.atl-msg { min-height: 1.4em; margin: 14px 0 0; text-align: center; color: var(--muted); }
.atl-msg.is-error { color: var(--err-ink); }
.atl-msg:empty { display: none; }

/* Texte d'introduction des encarts de l'Atelier */
.atl-edesc { margin: 0; max-width: 46ch; color: var(--muted); font-size: 14px; line-height: 1.6; text-wrap: pretty; }


/* =========================================================
   Accueil visiteurs : « L'Affiche » (proposition C, Claude Design, public/index.php). Réutilise .hero, .eyebrow, .rule,
   .lead, .cta, .btn, .showcase/.sc-row/.sc-media/.sc-text, .wsb-card et .gqj-… (styles plus haut) : les classes ci-dessous
   sont propres à cette mise en scène (logotype, trio de cartes, jauge horizontale, numéros d'actes).
   ========================================================= */

.poster { padding-bottom: clamp(56px, 8vw, 92px); }
.wordmark { margin: 0 0 14px; font-size: clamp(40px, 10vw, 118px); line-height: .95; letter-spacing: .14em; text-transform: uppercase; }
.wordmark b { font-weight: 500; }
.wordmark span { font-weight: 200; color: var(--brass-ink); }

/* Trio de cartes flottant : une carte centrale (visé : Ultime), deux cartes inclinées de part et d'autre, qui flottent doucement en décalé */
.hero-trio { position: relative; height: clamp(210px, 30vw, 310px); max-width: 760px; margin: 10px auto 6px; }
.hero-card { position: absolute; top: 0; left: 50%; }
.hero-card .cards.collection { display: block; margin: 0; padding: 0; }
.hero-card--c { z-index: 2; width: clamp(148px, 19vw, 215px); transform: translateX(-50%); }
.hero-card--l { top: clamp(16px, 3vw, 32px); width: clamp(108px, 14vw, 160px); transform: translateX(-165%) rotate(-9deg); opacity: .92; }
.hero-card--r { top: clamp(16px, 3vw, 32px); width: clamp(108px, 14vw, 160px); transform: translateX(65%) rotate(9deg); opacity: .92; }
/* Rareté, style (Extended/Full Art) et vues : visibles même sur ces petites cartes, malgré le repli automatique de .card-body
   (style.css, @container max-width: 160px) prévu pour la collection, pas pour cette mise en scène. */
.hero-card .card-body .vw, .hero-card .card-body .tag-style { display: inline-flex; }
.hero-float { animation: hero-bob 6s ease-in-out infinite; }
.hero-card--c .hero-float { animation-delay: .7s; }
.hero-card--r .hero-float { animation-delay: 1.5s; }
@keyframes hero-bob { 0%, 100% { translate: 0 0; } 50% { translate: 0 -10px; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .hero-float { animation: none; }
@media (max-width: 620px) {
  .hero-card--l { transform: translateX(-130%) rotate(-9deg) scale(.88); }
  .hero-card--r { transform: translateX(30%) rotate(9deg) scale(.88); }
}

/* Bande des raretés : jauge horizontale, un losange qui grossit avec la rareté (remplace l'ancienne liste des raretés) ; les tailles sont fixes (pas de style="" en ligne, la CSP du site l'interdit). */
.gauge { list-style: none; margin: 32px 0 0; padding: 0; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; text-align: center; position: relative; }
.gauge::before { content: ""; position: absolute; left: 7%; right: 7%; top: 22px; height: 1px; background: var(--brass-line); }
.gauge li { position: relative; display: grid; justify-items: center; gap: 8px; }
.gauge-gem { height: 44px; display: grid; place-items: center; }
.gauge-gem i { display: block; rotate: 45deg; background: var(--rc); box-shadow: 0 0 0 5px var(--bg), 0 0 0 6px var(--brass-line); }
.r1 .gauge-gem i { width: 12.4px; height: 12.4px; }
.r2 .gauge-gem i { width: 14.8px; height: 14.8px; }
.r3 .gauge-gem i { width: 17.2px; height: 17.2px; }
.r4 .gauge-gem i { width: 19.6px; height: 19.6px; }
.r5 .gauge-gem i { width: 22px; height: 22px; }
.r6 .gauge-gem i { width: 24.4px; height: 24.4px; }
.r7 .gauge-gem i { width: 26.8px; height: 26.8px; background: conic-gradient(from 20deg, #e58fb0, #e9c26f, #7fd6a8, #7fb6ec, #b791ef, #e58fb0); }
.gauge-name { font-size: 11px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.gauge-share { font-size: clamp(16px, 2.2vw, 26px); font-weight: 300; line-height: 1; font-variant-numeric: tabular-nums; }
.gauge-odds { font-size: 11.5px; color: var(--muted); }
@media (max-width: 760px) {
  .gauge { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 22px 10px; }
  .gauge::before { display: none; }
}
@media (max-width: 420px) { .gauge { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* « Le numéro principal » : section du paquet d'essai, détachée du bloc .hero (le vrai public/assets/pack3d.js) */
.pack-demo { padding: clamp(66px, 9vw, 108px) 0 16px; text-align: center; }
.pack-demo h2 { margin: 0 auto 28px; max-width: 20ch; font-size: clamp(26px, 3.6vw, 42px); font-weight: 300; letter-spacing: .04em; text-transform: none; }
/* .cta centre ses enfants (align-items: center) : sans stretch, la scène du paquet (et les cartes tirées, mêmes classes que la page « Paquets »)
   se réduirait à sa taille de contenu minimale au lieu de profiter de la largeur de la page, comme page « Paquets » (main.opener, pas en flex). */
.pack-demo .cta { align-items: stretch; }

/* Au programme : le titre de la section (.hp-title) puis les bandeaux ; chaque acte garde son numéro romain (.sc-num) */
.showcase-head { text-align: center; margin-bottom: 8px; }
.sc-row { border-top: 3px double var(--brass-line); padding-top: 56px; }
.sc-row--first { border-top: 0; padding-top: 0; }
.sc-num { display: inline-block; margin-right: 12px; font-size: 1.5em; font-weight: 200; color: var(--brass); vertical-align: -.06em; }

/* Acte I : les vrais paquets 3D (assets/pack3d.js, .pack3d-static), au repos et sans bouton — le normal devant, le doré et le diamanté
   décalés de part et d'autre, comme une pile de paquets posée sur la table. Le vrai paquet interactif est juste en dessous, « Le numéro principal ». */
.packs3d-trio { position: relative; height: clamp(210px, 26vw, 270px); width: 100%; margin: 0 auto; }
/* --pk doit rester un nombre pur (sans unité) : c'est le multiplicateur de calc(var(--pk,1) * 1px) dans pack3d.js/.pack-stage. clamp() ne peut pas
   mélanger un nombre et une longueur (8vw) : la taille suit donc un simple point de rupture, pas une valeur fluide. */
.packs3d-trio .pack-stage { position: absolute; left: 50%; top: 50%; margin: 0; }


/* Acte IV : WikiGéo, le même aperçu de carte que la bannière de Jeux (.gqj-…, assets/jeux-geo.js), purement décoratif ici, avec deux cartes */
.sc-geo-preview { width: min(100%, 380px); margin: 0 auto; }
.sc-geo-preview .gqj-map { height: clamp(160px, 20vw, 220px); flex: none; min-height: 0; }
.sc-geo-preview .gqj-cards { bottom: -24px; }


@media (max-width: 760px) { .sc-row { padding-top: 44px; } }

/* « Le rideau se lève » : appel final, mêmes composants que le haut de page (.eyebrow, .btn, .hint) */
.curtain { padding: clamp(70px, 9vw, 112px) 0 clamp(90px, 10vw, 128px); text-align: center; }
.curtain-title { margin: 0 auto 30px; max-width: 26ch; font-size: clamp(28px, 4.4vw, 48px); font-weight: 300; letter-spacing: .02em; text-transform: none; }
.curtain .hint { margin-top: 20px; }
.curtain .hint a { color: var(--brass-ink); }


/* ================= Rien de tout cela ne se sélectionne comme du texte (double-clic, appui long, glissement) ================= */
/* Menus (en-tête et barre du bas, burger, compte, cloche, portefeuille), cartes et leurs éléments (titre, étiquettes, vues, badge d'exemplaires, y compris la grande copie de la fenêtre de détail) :
   ce sont des commandes et des objets de jeu, pas du texte à copier. Les champs de saisie, eux, restent éditables (une saisie n'est jamais « auto » à l'intérieur d'un parent en « none »).
   Au-delà : barres d'outils de la collection (chiffres, pagination, sélection multiple), réserve de paquets, carrousel, séries et missions de la page Paquets, interfaces des jeux (WikiGéo, WikiSpeed),
   Atelier et Jeux. Le texte des fenêtres de détail (description d'une carte, règles, mentions légales, actualités…) reste sélectionnable. */
.top, .bottom-nav, .notif-float, .acct-dropdown, .brand,
.card, .modal-card, .cards .qty, .card-in,
.coll-stats, .coll-toggle, .coll-filters, .coll-tags, .sel-bar, .pager, .pk-pager,
.op-encart, .pack-carousel, .pack-stage, .pack-reserve, .deck-bar, .pack-final,
.gq-bar, .gq-map-wrap, .gq-pips, .gq-livescore, .gqb, .gqj-preview, .ws-head, .ws-bar, .ws-duel, .ws-phase,
.jxp-head, .jxp-encart,
.modal-close, .modal-btns, .help-tabs, .nt-del, .nt-time,
.wallet, .wc-piece, .dm, .fan, .logo { -webkit-user-select: none; user-select: none; }
/* Safari et d'anciens Chrome n'éditent pas un champ posé dans un parent en « none » : les champs de saisie le disent eux-mêmes */
input, textarea, [contenteditable] { -webkit-user-select: text; user-select: text; }
/* Les images ne se « saisissent » pas non plus : pas de glisser-déposer d'une illustration de carte ou d'un logo */
.card img, .brand img, .acct-pill img, .modal-card img { -webkit-user-drag: none; user-drag: none; }

/* ================= Carrousel des zones de paquets (page Paquets : normal · argenté · doré · diamanté ; assets/pack.js) ================= */
/* Le paquet 3D est unique : il glisse sur le côté en changeant de livrée. Deux flèches (celles de la pile de cartes sur mobile : un losange), chacune avec un badge qui annonce les paquets
   disponibles dans les zones de son côté ; en haut, le nom de la zone et un losange par zone (allumé s'il y a des paquets, coloré comme la livrée). */
.pack-carousel {
  --pk-nav: 44px;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
  grid-template-areas: "head head head" "prev stage next";
  align-items: center;
  justify-items: center;
  width: 100%;
}
.pack-carousel > .pack-stage { grid-area: stage; }
.pk-head { grid-area: head; display: grid; justify-items: center; gap: 4px; }
.pk-name { margin: 0; font-size: 11px; font-weight: 500; letter-spacing: .24em; text-transform: uppercase; color: var(--brass-ink); }
.pk-dots { display: flex; align-items: center; justify-content: center; }
.pk-dot { appearance: none; display: grid; place-items: center; width: 30px; height: 30px; padding: 0; border: 0; background: none; cursor: var(--cur-hand); -webkit-tap-highlight-color: transparent; }
.pk-dot i { --pk-tint: var(--brass); display: block; width: 9px; height: 9px; rotate: 45deg; border: 1px solid var(--pk-tint); transition: background .3s ease, scale .3s ease, box-shadow .3s ease; }
.pk-dot[data-zone="silver"] i { --pk-tint: #aeb6be; }
.pk-dot[data-zone="golden"] i { --pk-tint: #e2b84f; }
.pk-dot[data-zone="diamond"] i { --pk-tint: #7fc4ec; }
.pk-dot[data-zone="thematic"] i { --pk-tint: #b9a6ec; }
.pk-dot.is-cur i { background: var(--pk-tint); scale: 1.5; box-shadow: 0 0 0 2px color-mix(in srgb, var(--pk-tint) 25%, transparent); }
.pk-dot:hover:not(:disabled):not(.is-cur) i { background: color-mix(in srgb, var(--pk-tint) 80%, transparent); }
.pk-dot:focus-visible { outline: 2px solid var(--brass); outline-offset: -4px; }
.pk-dot:disabled { cursor: var(--cur-hand); }   /* pendant le changement de zone aussi : le curseur reste la main */

.pk-navwrap { position: relative; display: block; width: var(--pk-nav); height: var(--pk-nav); }
.pk-navwrap--prev { grid-area: prev; justify-self: end; margin-right: clamp(4px, 3vw, 40px); }
.pk-navwrap--next { grid-area: next; justify-self: start; margin-left: clamp(4px, 3vw, 40px); }
/* Flèches « carte précédente / suivante » de la fiche d'une carte (assets/card-modal.js) : les boutons .pk-nav du carrousel de paquets, posés de part et d'autre de la fenêtre. Elles sont rangées dans <body>, juste après la
   fenêtre (même z-index : l'ordre dans la page les met au-dessus d'elle, et sous les fenêtres ouvertes ensuite). */
.cm-navwrap { --pk-nav: 48px; position: fixed; z-index: 100; top: 50%; translate: 0 -50%; width: var(--pk-nav); height: var(--pk-nav); }
.cm-navwrap[hidden] { display: none; }
.cm-navwrap--prev { left: clamp(14px, 3vw, 48px); }
.cm-navwrap--next { right: clamp(14px, 3vw, 48px); }
/* Fenêtre trop étroite pour des flèches de part et d'autre : elles flottent en bas de l'écran, et la fenêtre gagne une marge basse pour que tout son contenu puisse défiler au-dessus d'elles */
@media (max-width: 1240px) {
  .cm-navwrap { --pk-nav: 40px; top: auto; bottom: calc(18px + env(safe-area-inset-bottom, 0px)); translate: none; }
  .cm-navwrap--prev { left: 18px; }
  .cm-navwrap--next { right: 18px; }
  .modal.has-nav { padding-bottom: calc(88px + env(safe-area-inset-bottom, 0px)); }
}
.pk-nav { appearance: none; position: absolute; inset: 0; display: grid; place-items: center; padding: 0; border: 0; rotate: 45deg; background: color-mix(in srgb, var(--surface) 90%, transparent); box-shadow: inset 0 0 0 1.84px var(--brass-line), 0 6px 16px rgba(0, 0, 0, .4); color: var(--brass-ink); cursor: var(--cur-hand); -webkit-tap-highlight-color: transparent; transition: box-shadow .3s ease, color .3s ease, opacity .3s ease, background .3s ease; }
.pk-nav svg { width: calc(var(--pk-nav) * .45); height: calc(var(--pk-nav) * .45); rotate: -45deg; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.pk-nav.prev svg { translate: -1px 1px; } .pk-nav.next svg { translate: 1px -1px; }
.pk-nav:not(:disabled):hover { box-shadow: inset 0 0 0 1.84px var(--brass), 0 6px 16px rgba(0, 0, 0, .4); color: var(--text); }
.pk-nav:not(:disabled):active { background: color-mix(in srgb, var(--brass) 26%, var(--surface)); color: var(--text); }
.pk-nav:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
.pk-nav:disabled { opacity: .25; cursor: var(--cur-default); }
/* Le badge est le FRÈRE du losange (qui pivote de 45°) : posé sur son arête haute droite, sans tourner avec lui */
.pk-badge { position: absolute; top: -5px; right: -5px; z-index: 1; min-width: 19px; height: 19px; padding: 0 5px; box-sizing: border-box; display: grid; place-items: center; border-radius: 10px; background: var(--brass-ink); color: var(--on-brass); box-shadow: 0 0 0 2px var(--bg); font-size: 11px; font-weight: 600; line-height: 1; font-variant-numeric: tabular-nums; pointer-events: none; animation: pk-badge-in .35s var(--ease, ease) backwards; }
.pk-badge[hidden] { display: none; }
@keyframes pk-badge-in { from { scale: .4; opacity: 0; } }

/* Le paquet glisse d'une zone à l'autre : sortie du côté d'où l'on part (il s'efface avec ses faces, jamais avec leur parent : voir « Règle d'or » plus haut), puis entrée de l'autre côté */
.pack-carousel > .pack-stage { transition: transform .42s cubic-bezier(.2, .8, .2, 1); }
.pack-carousel[data-slide^="out"] > .pack-stage { transition: transform .24s cubic-bezier(.5, 0, 1, .6); }
.pack-carousel[data-slide^="out"] .p3-leaf { opacity: 0; transition: opacity .2s ease; }
.pack-carousel[data-slide="out-next"] > .pack-stage { transform: translateX(calc(var(--p3-u) * -110)); }
.pack-carousel[data-slide="out-prev"] > .pack-stage { transform: translateX(calc(var(--p3-u) * 110)); }
.pack-carousel[data-slide^="in"] > .pack-stage { transition: none; }
.pack-carousel[data-slide="in-next"] > .pack-stage { transform: translateX(calc(var(--p3-u) * 110)); }
.pack-carousel[data-slide="in-prev"] > .pack-stage { transform: translateX(calc(var(--p3-u) * -110)); }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .pack-carousel > .pack-stage, :where(:root[data-motion="reduce"]) .pk-badge, :where(:root[data-motion="reduce"]) .pk-nav, :where(:root[data-motion="reduce"]) .pk-dot i { transition: none; animation: none; }
@media (max-width: 760px) {
  .pack-carousel { --pk-nav: 40px; }
  .pack-stage { margin-top: 12px; }   /* le nom de la zone et ses losanges tiennent dans la place de la marge du haut */
  .pk-navwrap--prev, .pk-navwrap--next { margin-inline: 2px; }
}
@media (max-width: 400px) { .pack-carousel { --pk-nav: 34px; } }

/* Encart « Réserve » : le stock de 8 paquets (une seule rangée de losanges, sur ordinateur comme sur téléphone) et le bloc des autres zones */
.op-encart .ps-gems { flex-wrap: nowrap; }
@container (max-width: 330px) { .op-encart .ps-gems { gap: 8px; } }
.op-encart .pack-stock[hidden], .op-encart .refill-msg[hidden] { display: none; }
.op-encart .pack-reserve { display: grid; justify-items: center; gap: 6px; padding: 4px 0 2px; }
.op-encart .pack-reserve[hidden] { display: none; }
.op-encart .pr-count { font-size: 14px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--text); font-variant-numeric: tabular-nums; }
.op-encart .pack-reserve.is-empty .pr-count { color: var(--muted); }
.op-encart .pr-note { max-width: 26ch; font-size: 12px; color: var(--muted); text-wrap: balance; }

/* ================= Page Collection : onglets (ma collection · les collections de mes amis · ma liste de souhait) ================= */
.coll-tabs { display: flex; gap: 4px; margin: 0 0 26px; border-bottom: 1px solid var(--line); overflow-x: auto; scrollbar-width: none; }
.coll-tabs::-webkit-scrollbar { display: none; }
.coll-tab { position: relative; flex: none; display: inline-flex; align-items: center; gap: 9px; padding: 13px 18px; color: var(--muted); font-size: 12px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; text-decoration: none; white-space: nowrap; cursor: var(--cur-hand); transition: color .3s ease; }
.coll-tab:hover { color: var(--text); }
.coll-tab:focus-visible { outline: 2px solid var(--brass); outline-offset: -4px; }
.coll-tab[aria-current="page"] { color: var(--brass-ink); }
.coll-tab::after { content: ""; position: absolute; left: 14px; right: 14px; bottom: -1px; height: 2px; background: var(--brass); scale: 0 1; transition: scale .3s ease; }
.coll-tab[aria-current="page"]::after { scale: 1 1; }
.coll-tab-n { min-width: 19px; height: 19px; padding: 0 5px; box-sizing: border-box; display: inline-grid; place-items: center; border-radius: 10px; background: var(--brass-ink); color: var(--on-brass); font-size: 11px; font-weight: 600; letter-spacing: 0; font-variant-numeric: tabular-nums; }
@media (max-width: 760px) { .coll-tab-n { display: none; } }   /* téléphone : pas de compteur sur l’onglet « Ma liste de souhait » (les onglets y sont serrés sur plusieurs lignes) */
/* Téléphone : les trois onglets se partagent la largeur (libellés sur deux ou trois lignes) au lieu de défiler hors de l'écran */
@media (max-width: 760px) {
  .coll-tabs { gap: 0; overflow: visible; }
  .coll-tab { flex: 1 1 0; min-width: 0; justify-content: center; gap: 6px; padding: 10px 6px 12px; font-size: 10.5px; letter-spacing: .06em; line-height: 1.3; text-align: center; white-space: normal; }
  .coll-tab::after { left: 6px; right: 6px; }
}

/* Fiche d'une carte d'ami : les amis qui la possèdent (un tag par ami : pseudo et nombre d'exemplaires, comme les étiquettes et leur nombre de cartes), liste de souhait, échange */
.fr-tags { margin-top: 18px; }
.fr-tags-label { margin: 0 0 8px; font-size: 11px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.fr-tags-none { margin: 0; font-size: 13.5px; color: var(--muted); }
.fr-chips { display: flex; flex-wrap: wrap; gap: 8px 10px; }
.fr-chip .tag-main { cursor: default; }
.fr-chip .tag-n { opacity: 1; }
.wish-btn svg, .trade-btn svg { fill: none; }
.wish-btn.is-on svg { fill: currentColor; }
.tr-wrap { display: contents; }
.tr-friends { flex-basis: 100%; margin-top: 10px; padding: 12px 14px; border: 1px solid var(--line); background: var(--card); }
.tr-friends-label { margin: 0 0 8px; font-size: 12px; letter-spacing: .06em; color: var(--muted); }
.tr-friends-list { display: flex; flex-wrap: wrap; gap: 8px; }

/* ================= Page Paquets : retouches du carrousel (aperçus des zones voisines, losanges, ligne Discord) ================= */
/* Les flèches passent devant tout (lueur et aperçus du paquet compris) */
.pk-navwrap { z-index: 3; }
/* Losanges de zone : tous pleins, dans la couleur de la livrée (vert vif pour les paquets standards, qui ressort sur le fond sombre) ; le courant est plus grand et cerclé */
.pk-dot[data-zone="normal"] i { --pk-tint: #34d58f; }
.pk-dot i { background: var(--pk-tint); }
:root[data-theme="light"] .pk-dot[data-zone="normal"] i { --pk-tint: #139a5f; }
:root[data-theme="light"] .pk-dot[data-zone="silver"] i { --pk-tint: #8a949e; }
:root[data-theme="light"] .pk-dot[data-zone="golden"] i { --pk-tint: #c99a1c; }
:root[data-theme="light"] .pk-dot[data-zone="diamond"] i { --pk-tint: #3d9ad2; }
:root[data-theme="light"] .pk-dot[data-zone="thematic"] i { --pk-tint: #8e76cc; }
.pk-dot:not(.is-cur) i { scale: .9; }

/* Aperçus des zones voisines (ordinateur) : deux paquets statiques assombris, de chaque côté, derrière le paquet central */
.pk-peeks { display: none; }
@media (min-width: 761px) {
  .pk-peeks { display: block; grid-column: 1 / -1; grid-row: 2; position: relative; align-self: stretch; width: 100%; z-index: 0; pointer-events: none; transition: visibility 0s; }
  /* L'anneau : cinq paquets statiques, un par zone, qui tournent (transform seulement). 0 devant, 1 à droite, 2 et 3 derrière, 4 à gauche. Le paquet central est le paquet interactif ; son double statique
     (pos. 0) n'apparaît que pendant la rotation (.is-turning). */
  .pk-peek { position: absolute; top: calc(50% - 15px); left: 50%; margin: 0; visibility: hidden; pointer-events: none; transition: transform var(--pk-dur, .65s) var(--pk-ease, cubic-bezier(.42, .02, .22, 1)), z-index var(--pk-dur, .65s) linear; }
  .pack-carousel.is-turning .pk-peek { visibility: visible; will-change: transform; }
  .pack-carousel.pk-instant .pk-peek, .pack-carousel.pk-instant .pk-peek .p3-leaf { transition: none !important; }
  .pack-carousel.is-turning > .pack-stage .pack3d-wrap { visibility: hidden; }   /* seul le paquet s'efface : la lueur et la mention restent en place (aucun à-coup à l'arrivée) */
  .pk-peek[data-pos="0"] { transform: translate(-50%, -50%); z-index: 30; }
  .pk-peek[data-pos="1"] { transform: translate(calc(-50% + var(--p3-u) * 194), -50%) scale(.7); z-index: 20; visibility: visible; pointer-events: auto; cursor: var(--cur-hand); }
  .pk-peek[data-pos="4"] { transform: translate(calc(-50% - var(--p3-u) * 194), -50%) scale(.7); z-index: 20; visibility: visible; pointer-events: auto; cursor: var(--cur-hand); }
  .pk-peek[data-pos="2"] { transform: translate(calc(-50% + var(--p3-u) * 64), calc(-50% - var(--p3-u) * 30)) scale(.5); z-index: 10; }
  .pk-peek[data-pos="3"] { transform: translate(calc(-50% - var(--p3-u) * 64), calc(-50% - var(--p3-u) * 30)) scale(.5); z-index: 10; }   /* un peu plus haut : l'orbite est une ellipse, pas un aller-retour sur une droite */
  /* Lumière : plein devant, assombri sur les côtés et derrière, grisé quand la zone n'a aucun paquet (comme le paquet central désactivé) */
  .pk-peek .p3-leaf { transition: filter var(--pk-dur, .65s) ease, opacity var(--pk-dur, .65s) ease-out; animation: wc-fade-in .5s ease backwards; }
  /* Le paquet de derrière est fondu : il s'efface en passant derrière (fin du mouvement) et réapparaît en sortant de derrière (début) */
  .pk-peek[data-pos="2"] .p3-leaf, .pk-peek[data-pos="3"] .p3-leaf { opacity: 0; transition: filter var(--pk-dur, .65s) ease, opacity var(--pk-dur, .65s) ease-in; }
  .pk-peek[data-pos="1"] .p3-leaf, .pk-peek[data-pos="4"] .p3-leaf { filter: brightness(.55) saturate(.8); }
  .pk-peek[data-pos="2"] .p3-leaf, .pk-peek[data-pos="3"] .p3-leaf { filter: brightness(.4) saturate(.7); }
  /* Les filtres s'écrivent TOUS dans le même ordre (brightness, saturate, grayscale) et sans halo : le navigateur n'anime un filtre d'un état à l'autre (rotation du carrousel, survol)
     que si les listes de fonctions se correspondent ; sinon il saute d'un coup. */
  .pk-peek[data-pos="0"][data-empty="1"] .p3-leaf { filter: brightness(.72) saturate(1) grayscale(.85); opacity: .5; }
  .pk-peek[data-pos="1"][data-empty="1"] .p3-leaf, .pk-peek[data-pos="4"][data-empty="1"] .p3-leaf { filter: brightness(.45) saturate(1) grayscale(.85); }
  .pk-peek[data-pos="2"][data-empty="1"] .p3-leaf, .pk-peek[data-pos="3"][data-empty="1"] .p3-leaf { filter: brightness(.3) saturate(1) grayscale(.85); }
  .pk-peek[data-pos="1"]:hover .p3-leaf, .pk-peek[data-pos="4"]:hover .p3-leaf { filter: brightness(.8) saturate(.95) grayscale(0); transition-duration: .3s; }
  .pk-peek[data-pos="1"][data-empty="1"]:hover .p3-leaf, .pk-peek[data-pos="4"][data-empty="1"]:hover .p3-leaf { filter: brightness(.7) saturate(1) grayscale(.85); }
  /* Paquets argenté, doré et diamanté sur un côté : ils gardent leur couleur au lieu de virer au gris, avec seulement un peu de gris et de transparence pour rester en retrait du paquet du
     milieu (aucun halo : il est réservé au paquet central). Zone vide (aucun paquet de ce type en réserve) : un peu plus grisés, plus transparents et plus sombres. Au survol, ils reprennent
     toute leur couleur en fondu (.3 s). Le paquet standard (vert) garde le style ci-dessus. */
  .pk-peek:not([data-kind="normal"])[data-pos="1"] .p3-leaf, .pk-peek:not([data-kind="normal"])[data-pos="4"] .p3-leaf { filter: brightness(.9) saturate(1.3) grayscale(.12); opacity: .9; }
  .pk-peek:not([data-kind="normal"])[data-pos="1"][data-empty="1"] .p3-leaf, .pk-peek:not([data-kind="normal"])[data-pos="4"][data-empty="1"] .p3-leaf { filter: brightness(.72) saturate(1.15) grayscale(.35); opacity: .78; }
  .pk-peek:not([data-kind="normal"])[data-pos="1"]:hover .p3-leaf, .pk-peek:not([data-kind="normal"])[data-pos="4"]:hover .p3-leaf,
  .pk-peek:not([data-kind="normal"])[data-pos="1"][data-empty="1"]:hover .p3-leaf, .pk-peek:not([data-kind="normal"])[data-pos="4"][data-empty="1"]:hover .p3-leaf { filter: brightness(1.06) saturate(1.45) grayscale(0); opacity: 1; transition-duration: .3s; }
  .pk-peek .p3-glow { display: none; }   /* la lueur est celle du paquet interactif, qui reste en place pendant la rotation */
  /* Les flèches se placent au-delà des aperçus */
  .pk-navwrap--prev { margin-right: calc(var(--p3-u, 1px) * 164 + 12px); }
  .pk-navwrap--next { margin-left: calc(var(--p3-u, 1px) * 164 + 12px); }
}
.pack-carousel { --p3-u: calc(var(--pk, 1) * 1px); }

/* Pendant l'ouverture d'un paquet (et la révélation des cartes), flèches, losanges, nom de la zone et aperçus s'effacent */
.pk-head, .pk-navwrap { transition: opacity .3s ease, visibility 0s; }
.opener:not([data-phase="home"]) .pk-head, .opener:not([data-phase="home"]) .pk-navwrap { opacity: 0; visibility: hidden; pointer-events: none; transition: opacity .25s ease, visibility 0s .25s; }
.opener:not([data-phase="home"]) .pk-peeks, .opener:not([data-phase="home"]) .pk-peek { visibility: hidden !important; pointer-events: none; }
.opener:not([data-phase="home"]) .pk-peek .p3-leaf { opacity: 0; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .pk-head, :where(:root[data-motion="reduce"]) .pk-navwrap { transition: none !important; } :where(:root[data-motion="reduce"]) .pk-peek .p3-leaf { animation: none; } :where(:root[data-motion="reduce"]) .pk-peek { transition: none; }

/* Encart Réserve : l'explication d'une zone tient sur deux lignes au plus */
.op-encart .pr-note { max-width: none; line-height: 1.35; }

/* Bandeau Discord : l'EN-TÊTE de l'encart Réserve (page Paquets), collé à son bord haut. Mêmes gradins que l'encart (angles du haut ici, angles du bas pour l'encart, dont les angles du haut
   deviennent droits : .op-encart--dc), même cadre de laiton à 1 px, fond en léger dégradé. Toute la bande est un lien ; la croix le retire pour de bon (compte du joueur : api/profile.php). */
.dc-head {
  --s: 6px; position: relative; width: 100%; max-width: 1040px; margin: 28px auto 0; padding: 1px; background: var(--brass-line);   /* même largeur maximale que l'encart Réserve (1040 px) */
  /* mêmes angles en gradins que le haut de l'encart Réserve (deux marches), aux quatre coins */
  --dc-top: polygon(0 calc(var(--s) * 2), var(--s) calc(var(--s) * 2), var(--s) var(--s), calc(var(--s) * 2) var(--s), calc(var(--s) * 2) 0, calc(100% - var(--s) * 2) 0, calc(100% - var(--s) * 2) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(var(--s) * 2), 100% calc(var(--s) * 2),
    100% calc(100% - var(--s) * 2), calc(100% - var(--s)) calc(100% - var(--s) * 2), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - var(--s) * 2) calc(100% - var(--s)), calc(100% - var(--s) * 2) 100%, calc(var(--s) * 2) 100%, calc(var(--s) * 2) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - var(--s) * 2), 0 calc(100% - var(--s) * 2));
}
.dc-head, .dc-link { clip-path: var(--dc-top); }
.dc-link {
  position: relative; display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 22px; box-sizing: border-box; padding: 16px 54px 15px 24px;
  color: var(--text); text-decoration: none; font-size: 13.5px; line-height: 1.4; letter-spacing: .02em;
  background:
    radial-gradient(60% 150% at 8% 0%, color-mix(in srgb, var(--brass) 20%, transparent), transparent 70%),
    linear-gradient(var(--tint), var(--tint)), var(--bg);
  transition: filter .3s ease;
}
.dc-link:hover, .dc-link:focus-visible { filter: brightness(1.12); }
.dc-link:focus-visible { outline: 2px solid var(--brass); outline-offset: -4px; }
/* « Nouveau ! » : grand, entre deux petits filets (au-dessus et en dessous), séparé du reste par un filet vertical */
.dc-new { display: grid; justify-items: center; gap: 5px; padding-right: 22px; border-right: 1px solid var(--brass-line); }
.dc-new b { color: var(--brass-ink); font-family: var(--font-title); font-size: 19px; font-weight: 400; line-height: 1; letter-spacing: .22em; text-transform: uppercase; white-space: nowrap; }
.dc-rule { display: block; width: 100%; height: 1px; background: linear-gradient(90deg, transparent, var(--brass) 25%, var(--brass) 75%, transparent); }
.dc-body { display: grid; gap: 7px; min-width: 0; }
.dc-top { display: flex; align-items: baseline; justify-content: space-between; gap: 6px 18px; }
.dc-title { font-size: 14px; font-weight: 500; letter-spacing: .03em; }
/* Les récompenses, mises en avant : un chiffre en grand, son pictogramme, séparés par des losanges */
.dc-gifts { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; color: var(--muted); font-size: 12.5px; }
.dc-gift { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.dc-gift b { color: var(--brass-ink); font-size: 17px; font-weight: 500; line-height: 1; }
.dc-gift .dc-ico { width: 20px; height: 20px; flex: none; }
.dc-gift .op-pack-mini { width: 14px; height: 20px; margin: 0; }
.dc-gem { flex: none; width: 5px; height: 5px; rotate: 45deg; background: var(--brass); opacity: .65; }
.dc-go { color: var(--brass-ink); font-size: 12px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; white-space: nowrap; }
.dc-go::after { content: "›"; margin-left: 8px; font-size: 16px; line-height: 1; transition: margin .3s ease; }
.dc-link:hover .dc-go::after, .dc-link:focus-visible .dc-go::after { margin-left: 12px; }
.dc-close { appearance: none; position: absolute; top: 50%; right: 14px; translate: 0 -50%; display: grid; place-items: center; width: 26px; height: 26px; padding: 0; border: 0; background: none; color: var(--muted); cursor: var(--cur-hand); transition: color .3s ease; }
.dc-close:hover, .dc-close:focus-visible { color: var(--text); }
.dc-close svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; }
/* L'encart sous le bandeau : collé à lui, angles du haut droits (gradins en bas seulement), cadre intérieur compris */
.op-encart--dc { margin-top: calc(-1 * var(--cta-gap, 12px)); }   /* l'écart que .cta met entre ses enfants est repris : le bandeau et l'encart se touchent exactement */
.op-encart--dc, .op-encart--dc .op-inner, .op-encart--dc .op-inner::before, .op-encart--dc .op-inner::after {
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s) / 2), calc(100% - var(--s)) calc(100% - var(--s) / 2), calc(100% - var(--s)) 100%,
    var(--s) 100%, var(--s) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s)), 0 calc(100% - var(--s)));
}
@media (max-width: 660px) {
  .dc-link { grid-template-columns: 1fr; justify-items: center; gap: 10px; padding: 14px 40px 14px 16px; text-align: center; }
  .dc-new { width: 100%; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 10px; padding: 0; border: 0; }
  .dc-new b { font-size: 17px; }
  .dc-top { flex-direction: column; align-items: center; }
  .dc-title { text-wrap: balance; }
  .dc-gifts { justify-content: center; }
  .dc-close { top: 12px; translate: 0 0; right: 10px; }
}

/* Page Collection : le titre de l'onglet affiché, en grand, sous la barre des onglets */
.coll-title { margin: 0 0 26px; }
.tr-friends-list { max-height: 180px; overflow-y: auto; }

/* Rotation du carrousel : la lueur du paquet central s'éteint d'un coup de fondu (.25 s) avant que l'ancien paquet ne parte, puis se rallume à la couleur de la nouvelle zone une fois le paquet arrivé :
   plus d'aura de l'ancien paquet qui reste en place puis change brusquement de couleur. */
.pack-carousel.is-turning > .pack-stage .p3-glow { animation: none !important; opacity: 0 !important; transition: opacity .25s ease; }

/* =========================================================
   Quiz du jour (1.0.0, src/Quiz.php) et joyaux (src/Gems.php)
   ========================================================= */
.gem { width: 1em; height: 1em; vertical-align: -.14em; flex: none; }

/* Encart de la page Jeux (même cadre que WikiGéo : .gqj-…) */
.qzb { margin-bottom: 32px; scroll-margin-top: 96px; }
.qzb-gains dd { font-size: 18px; }
.qzb-gains dd.qzb-gemcount { font-size: 14px; color: var(--muted); }
.qzb .gqj-side .wsb-gains { grid-template-columns: repeat(3, auto); }
.qzb-done { margin: 0; text-align: center; font-size: 15px; color: var(--text); line-height: 1.5; }
.qzb-done span { font-size: 13px; color: var(--muted); }
@container jxp (max-width: 520px) {
  .qzb .gqj-side .wsb-gains > div { padding: 10px 2px 8px; }
}

/* Page du quiz */
.wrap.qz { max-width: 820px; padding-top: clamp(28px, 5vw, 48px); padding-bottom: 72px; }
.qz-head { text-align: center; max-width: 60ch; margin: 0 auto 28px; }
.qz-kicker { margin: 0 0 8px; font-size: 12.5px; letter-spacing: .22em; text-transform: uppercase; }
.qz-kicker a { color: var(--brass-ink); }
.qz-head h1 { margin: 0 0 10px; font-weight: 300; font-size: clamp(32px, 5vw, 48px); }
.qz-lead { margin: 0; color: var(--muted); line-height: 1.55; }
.qz-msg { min-height: 1.4em; margin: 0 0 14px; text-align: center; color: var(--muted); }
.qz-msg.is-error { color: var(--err-ink); }
.qz-phase[hidden] { display: none; }
.qz-card { position: relative; overflow-wrap: break-word; padding: 32px clamp(20px, 5vw, 44px); background: var(--card); border: 1px solid var(--brass-line); box-shadow: 0 0 0 5px var(--card), 0 0 0 6px var(--brass-line); margin-bottom: 22px; }
.qz-h2 { margin: 0 0 14px; font-weight: 300; font-size: 28px; text-align: center; letter-spacing: .1em; }
.qz-h3 { margin: 36px 0 16px; font-weight: 400; font-size: 14px; letter-spacing: .26em; text-transform: uppercase; text-align: center; color: var(--brass-ink); }
.qz-p { color: var(--muted); text-align: center; line-height: 1.55; }
.qz-date { margin: 0 0 6px; text-align: center; font-size: 12px; letter-spacing: .24em; text-transform: uppercase; color: var(--brass-ink); }
.qz-rules { margin: 0 0 22px; padding-left: 1.2em; color: var(--muted); line-height: 1.7; }
.qz-rules b { color: var(--text); font-weight: 500; }
.qz-gains { width: 100%; margin: 0 0 24px; border-collapse: collapse; font-size: 14px; }
.qz-gains th, .qz-gains td { padding: 9px 10px; border-bottom: 1px solid var(--line); text-align: left; font-weight: 400; }
.qz-gains thead th { font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.qz-gains td b { font-weight: 500; }
.qz-card > .btn { display: flex; margin: 0 auto; width: fit-content; }

.qz-bar { position: relative; display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 14px; margin-bottom: 20px; padding: 10px 16px 16px; border: 1px solid var(--brass-line); background: var(--card); }
.qz-count { font-size: 12px; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.qz-count b { font-size: 15px; letter-spacing: 0; color: var(--text); }
.qz-pips { display: flex; justify-content: center; gap: 7px; flex-wrap: wrap; }
.qz-pips i { width: 9px; height: 9px; rotate: 45deg; border: 1px solid var(--brass); background: transparent; }
.qz-pips i.is-ok { background: var(--r2); border-color: var(--r2); }
.qz-pips i.is-bad { background: var(--err-ink); border-color: var(--err-ink); }
.qz-pips i.is-now { background: color-mix(in srgb, var(--brass) 45%, transparent); box-shadow: 0 0 8px var(--brass); }
.qz-pips i.is-hw { border-color: #e8792b; }   /* la question d'Halloween (Quiz::BONUS_POS) */
.qz-pips i.is-hw.is-now { background: color-mix(in srgb, #e8792b 55%, transparent); box-shadow: 0 0 8px #e8792b; }
.qz-timer { font-size: 28px; line-height: 1; font-weight: 300; letter-spacing: .06em; font-variant-numeric: tabular-nums; }
.qz-timer.is-low { color: var(--err-ink); }
.qz-track { position: absolute; left: 6px; right: 6px; bottom: 6px; height: 3px; background: var(--line); }
.qz-track i { display: block; height: 100%; width: 100%; background: var(--brass); transition: width .12s linear; }
.qz-track i.is-low { background: var(--err-ink); }

.qz-tags { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 16px; margin: 0 0 20px; font-size: 12px; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.qz-tags .gem { font-size: 18px; margin-right: 6px; }
.qz-theme, .qz-diff { display: inline-flex; align-items: center; }
.qz-diff .wc-piece { width: 1.3em; height: 1.3em; margin: 0 3px; }
.qz-text { margin: 0 0 26px; text-transform: none; letter-spacing: .01em; font-weight: 400; font-size: clamp(21px, 3.4vw, 28px); line-height: 1.4; text-align: center; text-wrap: balance; }
.qz-form { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px; }
.qz-input { min-height: 52px; padding: 0 16px; background: var(--surface); border: 1px solid var(--brass-line); color: var(--text); font: inherit; font-size: 18px; }
.qz-input:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.qz-note { margin: 16px 0 0; text-align: center; font-size: 12.5px; color: var(--muted); }

.qz-fb.is-ok { border-color: var(--r2); box-shadow: 0 0 0 5px var(--card), 0 0 0 6px var(--r2); }
.qz-fb.is-bad { border-color: var(--err-ink); box-shadow: 0 0 0 5px var(--card), 0 0 0 6px var(--err-ink); }
.qz-result { margin: 0 0 14px; text-align: center; font-size: 22px; font-weight: 300; letter-spacing: .06em; }
.qz-fb.is-ok .qz-result { color: var(--r2); }
.qz-fb.is-bad .qz-result { color: var(--err-ink); }
.qz-fq { margin: 0 0 8px; text-align: center; color: var(--muted); line-height: 1.5; }
.qz-fa { margin: 0 0 6px; text-align: center; font-size: 17px; }
.qz-fa b { font-weight: 600; color: var(--brass-ink); }
.qz-given { margin: 0 0 6px; text-align: center; font-size: 14px; color: var(--muted); }
.qz-fgain { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 14px; margin: 14px 0 0; }
.qz-info { margin: 18px 0 0; font-weight: 400; padding-top: 16px; border-top: 1px solid var(--line); line-height: 1.6; color: var(--text); }
.qz-src { margin: 10px 0 0; text-align: center; font-size: 13px; }
.qz-src a { color: var(--brass-ink); }
.qz-next { display: flex; justify-content: center; margin: 0; }


@media (max-width: 560px) {
  .qz-bar { grid-template-columns: 1fr auto; }
  .qz-pips { grid-column: 1 / -1; order: 3; }
  .qz-form { grid-template-columns: minmax(0, 1fr); }
  .qz-form .btn { width: 100%; }
}

/* Espace admin : page Quiz */
.admin-quiz-badge { display: inline-block; min-width: 3.4em; padding: 2px 10px; border: 1px solid var(--line); text-align: center; font-variant-numeric: tabular-nums; }
.admin-quiz-badge.is-prêt { border-color: var(--r2); color: var(--r2); }
.admin-quiz-badge.is-incomplet { border-color: #b8862a; color: #8a6511; }
.admin-quiz-ok { padding: 10px 14px; border: 1px solid var(--r2); color: var(--r2); }
.admin-quiz-err { margin: 0; padding: 10px 14px; border: 1px solid var(--err-ink); color: var(--err-ink); }

/* ---- 1.0.0 (2e passe) : quiz, classement, encarts de récompenses ---- */

/* Page du quiz : plus large (les corrections de fin de partie ont trois colonnes) */
.wrap.qz { max-width: 1060px; }
.qz-head, .qz-phase.qz-card, .qz-phase.qz-play { max-width: 820px; margin-left: auto; margin-right: auto; }
.qz-tablenote { margin: -8px 0 22px; text-align: center; font-size: 13px; color: var(--muted); }
.qz-tablenote b { color: var(--text); font-weight: 600; }
.qz-themes { list-style: none; margin: 0 0 26px; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; }
.qz-themes li { display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 12px 6px 10px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 6%, var(--card)); text-align: center; }
.qz-themes .gem { font-size: 30px; }
.qz-theme-n { font-size: 13px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--text); }
.qz-theme-l { font-size: 12px; line-height: 1.3; color: var(--muted); }
.qz-h3 { margin: 28px 0 14px; }
.qz-intro .qz-gains + .qz-tablenote { margin-top: 12px; }
@media (max-width: 640px) { .qz-themes { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Fin de partie : le cadre de WikiGéo (.gq-end-…), gains alignés sur une grille, un joyau par case */
.qz-endwrap .gq-end-frame { max-width: 760px; }
.qz-endwrap .gq-end-body { padding: 40px clamp(18px, 4vw, 40px) 36px; }
.qz-egains { max-width: none; }
.qz-egains .gq-gains-rows { margin-bottom: 18px; }
.qz-pieceval { display: inline-flex; align-items: center; gap: 8px; }
.qz-pieceval .wc-piece { width: .66em; height: .66em; }
.qz-gems5 { list-style: none; margin: 0; padding: 18px 0 0; border-top: 1px solid var(--brass-line); display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 8px; }
.qz-gem5 { display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 4px 2px; }
.qz-gem5 .gem { width: 34px; height: 34px; }
.qz-gem5 b { font-size: 20px; font-weight: 600; line-height: 1; font-variant-numeric: tabular-nums; color: var(--brass-ink); }
.qz-gem5 span { font-size: 10px; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.qz-gem5.is-none { opacity: .55; }
.qz-gem5.is-none b { color: var(--muted); font-weight: 400; }
.qz-reset { margin: 22px 0 0; text-align: center; font-size: 13.5px; color: var(--muted); }
.qz-endwrap .gq-end-actions { margin-top: 24px; flex-wrap: wrap; }
@media (max-width: 560px) { .qz-gem5 span { font-size: 8.5px; letter-spacing: .04em; } .qz-gem5 .gem { width: 28px; height: 28px; } }

.qzb-gains dd.qzb-gemcount { font-size: 13px; font-weight: 500; color: var(--muted); }

/* Page Jeux en trois lignes : Quiz du jour + Missions, puis WikiSpeed, puis WikiGéo */
.jxp-grid.jxp-grid--top { grid-template-columns: minmax(0, 1fr) minmax(0, 360px); margin-top: 0; }
.jxp-row { margin-top: 32px; }
.jxp-v-d .jxp-grid.jxp-grid--top { margin-top: 0; }
@container jxp (max-width: 980px) { .jxp-grid.jxp-grid--top { grid-template-columns: minmax(0, 1fr); } .jxp-row { margin-top: 56px; } }

/* Encart Quiz du jour : classement de la semaine en aperçu */
.qzb { margin-bottom: 0; }
.qzb-rank { display: grid; gap: 12px; }
.qzb-ranklist { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.qzb-rk { display: grid; grid-template-columns: 34px 28px minmax(0, 1fr) auto; align-items: center; gap: 10px; padding: 7px 12px; background: color-mix(in srgb, var(--brass) 6%, var(--card)); border: 1px solid var(--line); }
.qzb-rk.is-me { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 16%, var(--card)); }
.qzb-rk-n { font-weight: 600; color: var(--brass-ink); font-variant-numeric: tabular-nums; }
.qzb-rk-av { width: 28px; height: 28px; border-radius: 50%; object-fit: cover; }
.qzb-rk-p { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.qzb-rk-s { font-weight: 600; font-variant-numeric: tabular-nums; }
.qzb-rank-foot { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 6px 18px; align-items: center; font-size: 13px; color: var(--muted); }
.qzb-rank-foot a { color: var(--brass-ink); font-weight: 600; }
.qzb-empty { margin: 0; padding: 12px; text-align: center; font-size: 14px; color: var(--muted); border: 1px dashed var(--brass-line); }

/* Page du classement hebdomadaire */
.wrap.qk { max-width: 900px; padding-top: clamp(28px, 5vw, 48px); padding-bottom: 72px; }
.qk-head { text-align: center; margin: 0 auto 26px; max-width: 60ch; }
.qk-head h1 { margin: 0 0 10px; font-weight: 300; font-size: clamp(30px, 4.6vw, 44px); }
.qk-lead { margin: 0; color: var(--muted); line-height: 1.55; }
.qk-reset { margin: 10px 0 0; font-size: 13px; letter-spacing: .08em; color: var(--brass-ink); }
.qk-mine { margin: 0 0 22px; padding: 16px 20px; text-align: center; border: 1px solid var(--brass); background: color-mix(in srgb, var(--brass) 10%, var(--card)); }
.qk-mine b { font-weight: 600; color: var(--brass-ink); }
.qk-scroll { max-width: 100%; overflow-x: auto; }   /* téléphone : le tableau à 5 colonnes défile au lieu d'être rogné (html { overflow-x: clip }) */
.qk-table { width: 100%; border-collapse: collapse; margin: 0 0 8px; }
.qk-table th, .qk-table td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--line); vertical-align: middle; }
.qk-table thead th { font-size: 11px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); border-bottom: 1px solid var(--brass-line); }
.qk-table .qk-num { text-align: right; font-variant-numeric: tabular-nums; }
.qk-table tr.is-me td { background: color-mix(in srgb, var(--brass) 14%, transparent); }
.qk-table tr.is-sep td { padding: 4px; text-align: center; color: var(--muted); border-bottom: 0; }
.qk-rank { width: 56px; font-weight: 600; color: var(--brass-ink); font-variant-numeric: tabular-nums; }
.qk-rank.is-top { font-size: 20px; }
.qk-who { display: flex; align-items: center; gap: 10px; }
.qk-who img { width: 30px; height: 30px; border-radius: 50%; object-fit: cover; }
.qk-reward { font-size: 12.5px; color: var(--muted); white-space: nowrap; }
.qk-reward b { color: var(--text); font-weight: 600; }
.qk-h2 { margin: 40px 0 14px; font-size: 14px; font-weight: 500; letter-spacing: .26em; text-transform: uppercase; text-align: center; color: var(--brass-ink); }
.qk-rewards { width: 100%; border-collapse: collapse; font-size: 14px; }
.qk-rewards th, .qk-rewards td { padding: 9px 12px; border-bottom: 1px solid var(--line); text-align: left; font-weight: 400; }
.qk-rewards thead th { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); font-weight: 500; }
.qk-rewards b { font-weight: 600; }
.qk-podium { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; justify-content: center; gap: 12px 26px; }
.qk-podium li { display: flex; align-items: center; gap: 10px; }
.qk-podium img { width: 30px; height: 30px; border-radius: 50%; }
.qk-empty { text-align: center; color: var(--muted); padding: 22px 0; }
@media (max-width: 640px) { .qk-reward { white-space: normal; } .qk-table th, .qk-table td { padding: 8px 6px; } }

/* Atelier : les joyaux du joueur et le thème de chacun */
.at-gems { margin: 0 auto 28px; max-width: 880px; display: grid; gap: 12px; }
.at-gemlist { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 10px; }
.at-gem { --gc: var(--brass); display: flex; flex-direction: column; align-items: center; gap: 3px; padding: 16px 6px 13px; text-align: center; border: 1px solid var(--brass-line); border-top: 4px solid var(--gc); background: linear-gradient(180deg, color-mix(in srgb, var(--gc) 20%, var(--card)), var(--card) 78%); }
.at-gem[data-gem="histoire"] { --gc: #f0a63c; }
.at-gem[data-gem="geographie"] { --gc: #3f6fd6; }
.at-gem[data-gem="sciences"] { --gc: #2fb36b; }
.at-gem[data-gem="arts"] { --gc: #9c5fd6; }
.at-gem[data-gem="sport"] { --gc: #e03a52; }
.at-gem .gem { width: 40px; height: 40px; filter: drop-shadow(0 0 10px color-mix(in srgb, var(--gc) 55%, transparent)); }
.at-gem b { font-size: 24px; font-weight: 600; line-height: 1.1; font-variant-numeric: tabular-nums; color: var(--brass-ink); }
.at-gem-n { font-size: 12px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; color: var(--text); }
.at-gem-t { font-size: 12px; line-height: 1.3; color: var(--muted); }
.at-gems-note { margin: 0; text-align: center; font-size: 13px; color: var(--muted); }
@media (max-width: 640px) { .at-gemlist { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Espace admin : page Quiz (2e version) */
.admin-quiz-today { margin: 0 0 22px; padding: 16px 20px; background: var(--surface); border: 1px solid var(--brass); border-top-width: 3px; display: flex; flex-wrap: wrap; align-items: center; gap: 10px 22px; }
.admin-quiz-today h2 { margin: 0; font-size: 18px; }
.admin-quiz-details { margin: 0 0 14px; border: 1px solid var(--line); background: var(--surface); }
.admin-quiz-details > summary { cursor: pointer; padding: 14px 18px; font-weight: 500; letter-spacing: .06em; list-style: none; display: flex; align-items: center; gap: 12px; }
.admin-quiz-details > summary::-webkit-details-marker { display: none; }
.admin-quiz-details > summary::before { content: ""; width: 8px; height: 8px; rotate: 45deg; border: 1px solid var(--brass); background: transparent; transition: background .2s; flex: none; }
.admin-quiz-details[open] > summary::before { background: var(--brass); }
.admin-quiz-details > summary .hint { margin-left: auto; font-weight: 400; }
.admin-quiz-details .admin-table-wrap { padding: 0 14px 14px; }

/* Espace admin : page Quiz, éditeur d'un jour (une ligne par question, pleine largeur) */
.doc.admin.admin-wide { max-width: none; width: calc(100% - 2 * clamp(12px, 1.6vw, 26px) - env(safe-area-inset-left, 0px) - env(safe-area-inset-right, 0px)); }
.admin-quiz-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 22px; margin: 0 0 16px; }
.admin-quiz-bar > a { font-size: 14px; }
.admin-quiz-days { display: flex; align-items: center; gap: 12px; margin-right: auto; }
.admin-quiz-days h2 { margin: 0; font-size: 20px; }
.admin-quiz-days a { display: grid; place-items: center; width: 32px; height: 32px; border: 1px solid var(--brass-line); color: var(--brass-ink); text-decoration: none; font-size: 20px; line-height: 1; }
.admin-quiz-days a:hover, .admin-quiz-days a:focus-visible { background: color-mix(in srgb, var(--brass) 16%, transparent); }
.admin-quiz-pick { margin: 0; }
.aq-form { margin-top: 6px; }
.aq-grid { display: grid; gap: 6px; }
.aq-row { display: grid; grid-template-columns: 56px 168px 132px minmax(190px, 1.5fr) minmax(130px, .8fr) minmax(130px, .8fr) minmax(190px, 1.3fr) minmax(150px, .9fr); gap: 8px; align-items: stretch; padding: 8px; background: var(--surface); border: 1px solid var(--line); }
.aq-row.has-error { border-color: var(--err-ink); }
.aq-row.aq-head { position: sticky; top: 0; z-index: 5; padding: 8px; background: var(--card); border-bottom: 1px solid var(--brass-line); font-size: 10.5px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.aq-head i { font-style: normal; letter-spacing: .04em; text-transform: none; opacity: .75; }
.aq-n { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; font-size: 18px; color: var(--brass-ink); }
.aq-n small { font-size: 10.5px; color: var(--muted); text-align: center; line-height: 1.2; }
.aq-n small i { font-style: normal; }
.aq-c { display: block; min-width: 0; }
.aq-c textarea { display: block; width: 100%; height: 100%; min-height: 56px; resize: vertical; appearance: none; border: 1px solid var(--line); background: var(--card); color: var(--text); padding: 8px 10px; font: inherit; font-size: 14px; line-height: 1.4; }
.aq-c textarea:focus-visible { outline: 2px solid var(--brass); outline-offset: 0; }
.aq-c textarea:disabled { opacity: .75; }
.aq-err { grid-column: 1 / -1; margin: 0; padding: 6px 10px; border: 1px solid var(--err-ink); color: var(--err-ink); font-size: 13px; }
@media (max-width: 1180px) {
  .aq-row { grid-template-columns: 44px 160px 128px minmax(0, 1fr) minmax(0, 1fr); }
  .aq-head { display: none; }
  .aq-row > :nth-child(6) { grid-column: 1 / 4; }   /* variantes sous le numéro, le thème et la difficulté */
  .aq-row > :nth-child(7) { grid-column: 4; }       /* explication */
  .aq-row > :nth-child(8) { grid-column: 5; }       /* lien source */
}
@media (max-width: 760px) {
  .aq-row { grid-template-columns: minmax(0, 1fr); }
  .aq-n { flex-direction: row; justify-content: flex-start; }
  .aq-row > :nth-child(n+6) { grid-column: auto; }
}

/* Liste déroulante Art déco (assets/admin-quiz.js) */
.ad-select { position: relative; }
.ad-select-native { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.ad-select-btn { appearance: none; width: 100%; min-height: 56px; display: flex; align-items: center; gap: 8px; padding: 8px 10px; text-align: left; font: inherit; font-size: 14px; color: var(--text); background: var(--card); border: 1px solid var(--line); cursor: pointer; transition: border-color .2s, background .2s; }
.ad-select-btn:hover, .ad-select.is-open .ad-select-btn { border-color: var(--brass); }
.ad-select-btn:focus-visible { outline: 2px solid var(--brass); outline-offset: 0; }
.ad-select-btn.is-empty { color: var(--muted); }
.ad-select-btn:disabled { opacity: .75; cursor: default; }
.ad-select-btn .gem { width: 20px; height: 20px; flex: none; }
.ad-select-val { flex: 1; min-width: 0; line-height: 1.25; }
.ad-select-chev { flex: none; width: 7px; height: 7px; border-right: 1.5px solid var(--brass); border-bottom: 1.5px solid var(--brass); rotate: 45deg; translate: 0 -2px; transition: rotate .2s; }
.ad-select.is-open .ad-select-chev { rotate: 225deg; translate: 0 2px; }
.ad-select-list { display: none; position: absolute; z-index: 30; left: 0; min-width: 100%; top: calc(100% + 4px); margin: 0; padding: 4px; list-style: none; background: var(--surface); border: 1px solid var(--brass); box-shadow: 0 0 0 3px var(--surface), 0 0 0 4px var(--brass-line), 0 18px 40px rgba(0, 0, 0, .4); max-height: 300px; overflow-y: auto; }
.ad-select.is-open .ad-select-list { display: block; }
.ad-select-opt { display: flex; align-items: center; gap: 9px; padding: 9px 12px; font-size: 14px; white-space: nowrap; cursor: pointer; border-left: 2px solid transparent; }
.ad-select-opt .gem { width: 20px; height: 20px; flex: none; }
.ad-select-opt.is-active, .ad-select-opt:hover { background: color-mix(in srgb, var(--brass) 16%, transparent); border-left-color: var(--brass); }
.ad-select-opt[aria-selected="true"] { color: var(--brass-ink); font-weight: 600; }
.report-field .ad-select-btn { min-height: 48px; padding: 10px 14px; }   /* fenêtre « Signaler le joueur » (profil) : motifs parfois longs, sur plusieurs lignes */
.report-field .ad-select-opt { white-space: normal; line-height: 1.35; }
.report-field .ad-select-list { position: static; max-height: none; margin-top: 6px; }   /* la liste s'ouvre dans la fenêtre (qui s'agrandit) au lieu d'y être rognée */

/* Sélecteur de jour Art déco */
.ad-dp { position: fixed; inset: 0; z-index: 120; display: grid; place-items: center; padding: 16px; background: var(--overlay); -webkit-backdrop-filter: blur(3px); backdrop-filter: blur(3px); }
.ad-dp-box { position: relative; width: min(380px, 100%); padding: 58px 22px 18px; background: var(--surface); border: 1px solid var(--brass); box-shadow: 0 0 0 5px var(--surface), 0 0 0 6px var(--brass-line), 0 24px 80px rgba(0, 0, 0, .45); }
.ad-dp-head { display: flex; align-items: center; justify-content: space-between; margin: 0 0 14px; }
.ad-dp-title { font-size: 15px; font-weight: 500; letter-spacing: .24em; text-transform: uppercase; color: var(--brass-ink); }
.ad-dp-nav { appearance: none; width: 34px; height: 34px; border: 1px solid var(--brass-line); background: none; color: var(--brass-ink); font-size: 20px; line-height: 1; cursor: pointer; }
.ad-dp-nav:hover:not(:disabled), .ad-dp-nav:focus-visible { background: color-mix(in srgb, var(--brass) 16%, transparent); }
.ad-dp-nav:disabled { opacity: .3; cursor: default; }
.ad-dp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.ad-dp-wd { padding-bottom: 4px; text-align: center; font-size: 10px; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.ad-dp-day { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; min-height: 42px; color: var(--text); text-decoration: none; border: 1px solid transparent; font-variant-numeric: tabular-nums; }
.ad-dp-day:hover, .ad-dp-day:focus-visible { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 14%, transparent); outline: none; }
.ad-dp-day.is-past { color: var(--muted); }
.ad-dp-day.is-today { border-color: var(--brass-line); font-weight: 700; color: var(--brass-ink); }
.ad-dp-day.is-current { background: var(--brass); color: var(--on-brass); }
.ad-dp-dot { display: inline-block; width: 6px; height: 6px; rotate: 45deg; border: 1px solid var(--muted); }
.ad-dp-dot.is-full { background: var(--r2); border-color: var(--r2); }
.ad-dp-dot.is-part { background: #c8922a; border-color: #c8922a; }
.ad-dp-legend { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 14px 0 0; font-size: 12px; color: var(--muted); }
.ad-dp-foot { display: flex; justify-content: space-between; align-items: center; margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--line); }
.ad-dp-today { font-size: 13px; color: var(--brass-ink); }
.ad-dp-close { appearance: none; padding: 8px 16px; background: none; border: 1px solid var(--brass-line); color: var(--text); font: inherit; font-size: 13px; cursor: pointer; }
.ad-dp-close:hover, .ad-dp-close:focus-visible { background: color-mix(in srgb, var(--brass) 16%, transparent); }

/* Quiz du jour dans la ligne du haut de la page Jeux : colonne moins large que WikiGéo, le texte puis les récompenses sont empilés */
.qzb .gqj-main { grid-template-columns: minmax(0, 1fr); gap: 20px; }
.qzb .gqj-side { align-items: stretch; }
.qzb .gqj-rule { max-width: none; }
.qzb .gqj-side .wsb-gains { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.gqj .gqj-side .qzb-gains dd.qzb-gemcount { font-size: 12px; font-weight: 500; white-space: normal; text-align: center; color: var(--muted); }
.qzb .gqj-side .wsb-act { justify-content: center; }
.qk-rewards + .qz-tablenote { margin-top: 14px; }
.qk-table + .qz-tablenote { margin-top: 18px; }   /* sous un classement : de l'air entre la dernière ligne et la note (« X joueurs classés… ») */
.ad-select-list { width: max-content; max-width: 320px; }
.ad-select-opt span { white-space: nowrap; }

/* =========================================================
   Quiz du jour, 2e série de retouches (1.0.0)
   ========================================================= */

/* Cadres à gradins avec contour : le cadre lui-même est rogné en gradins (--s) et porte le fond ; son contour laiton (::before) et, pour les grands encarts, un filet translucide
   qui en reprend la forme avec un peu de marge (::after) sont des anneaux (--t d'épaisseur) découpés dans le même gabarit. */
.wsb-gains > div, .qz-chip { position: relative; isolation: isolate; clip-path: polygon(0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s))); }
.wsb-gains > div::before, .qz-chip::before {
  content: ""; position: absolute; z-index: -1; inset: 0; --t: 1px; opacity: 1;
  clip-path: polygon(evenodd, 0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s)), 0 calc(2*var(--s)), var(--t) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(2*var(--s) + var(--t)));
}
.wsb-gains > div::before, .qz-chip::before { background: var(--brass); }
.wsb-gains > div::after { content: none; }   /* pas de filet intérieur dans les tablettes */

/* Encarts de récompenses (WikiSpeed, WikiGéo, Quiz du jour) : tablettes à gradins, contour laiton, filet intérieur, valeur en gras */
.wsb-gains { gap: 12px; border: 0; box-shadow: none; }
.wsb-gains > div { --s: 4px; border: 0; gap: 4px; background: linear-gradient(165deg, color-mix(in srgb, var(--brass) 22%, var(--card)), color-mix(in srgb, var(--brass) 6%, var(--card)) 72%); }
.wsb-gains > div + div { border-left: 0; }
.wsb-gains dt { font-weight: 600; letter-spacing: .2em; color: var(--text); }
.wsb-gains dd { font-weight: 700; letter-spacing: .02em; }
.wsb-gains dd .wc-piece { font-size: .8em; }
/* Médaillons de récompenses : contenu centré dans les deux sens (une valeur sur deux lignes, « +1-2 paquets », ne décale plus ses voisins), lignes centrées entre elles */
.wsb-gains > div { justify-content: center; text-align: center; }
.wsb-gains dt { text-align: center; }
.wsb-gains dd { flex-wrap: wrap; justify-content: center; column-gap: .25em; row-gap: 0; line-height: 1.1; text-align: center; }

/* Gains d'une question : petites tablettes à gradins (sans filet), valeur en gras, fond dégradé, léger contour laiton */
.qz-chip { --s: 2px; display: inline-flex; align-items: center; gap: 6px; padding: 5px 12px; font-size: 14px; font-weight: 700; background: linear-gradient(165deg, color-mix(in srgb, var(--brass) 24%, var(--card)), color-mix(in srgb, var(--brass) 7%, var(--card)) 75%); }
.qz-chip .wc-piece, .qz-chip .gem { width: 1.35em; height: 1.35em; vertical-align: middle; }
.qz-chip b { font-weight: 700; }

/* Fin de partie : date et « Quiz terminé ! » sur une ligne, jauge du score, montants en gras */
.qz-endwrap .gq-final { max-width: none; }
.gq-final-title { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: center; gap: 4px 14px; margin: 0 0 10px; font-size: 13px; letter-spacing: .26em; text-transform: uppercase; color: var(--brass-ink); }
.gq-final-title > span:first-child { font-weight: 400; color: var(--muted); }
.gq-final-title > span:last-child { font-weight: 700; }
.qz-sep { color: var(--brass); }
.qz-egains .gq-gain-value { font-weight: 700; }
.qz-gem5 b { font-weight: 700; }
.qz-endwrap .gq-end-actions { gap: 12px; }
.qz-actions { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; margin-top: 8px; }
.qz-histlink { margin: 16px 0 0; text-align: center; font-size: 14px; }
.qz-histlink a, .qzb-hist a { color: var(--brass-ink); }
.qzb-hist { margin: 6px 0 0; text-align: center; font-size: 13px; }
@media (max-width: 560px) { .gq-final-title { letter-spacing: .14em; } .qz-endwrap .gq-end-actions, .qz-actions { flex-direction: column; align-items: stretch; } .qz-endwrap .gq-end-actions .btn, .qz-actions .btn { width: 100%; justify-content: center; } }

/* Pendant le quiz, le minuteur disparaît après la réponse sans que la barre ne bouge : il garde sa place */
.qz-timer.is-gone { visibility: hidden; }

/* Corrections : deux niveaux. 1er niveau : numéro en gras | question → bonne réponse (sur plusieurs lignes si besoin), ta réponse si fausse | statut et gains. 2e niveau : explication
   sur une ligne tronquée (un clic la déplie) et lien vers l'article source. Fond en dégradé vert (bonne réponse) ou rouge (mauvaise). */
.qz-recap { list-style: none; margin: 0; padding: 0; display: grid; gap: 18px; }
.qz-ri { --c: var(--err-ink); display: grid; grid-template-columns: 38px minmax(0, 1fr) auto; gap: 8px 16px; align-items: start; padding: 14px 18px 12px 14px; border: 1px solid var(--line); border-left: 3px solid var(--c); background: linear-gradient(100deg, color-mix(in srgb, var(--c) 17%, var(--card)), var(--card) 78%); }
.qz-ri.is-ok { --c: var(--r2); }
.qz-ri-n { display: flex; flex-direction: column; align-items: center; gap: 5px; }
.qz-ri-n b { font-size: 21px; font-weight: 700; line-height: 1; color: var(--c); font-variant-numeric: tabular-nums; }
.qz-ri-n .gem { width: 18px; height: 18px; }
.qz-ri-main { min-width: 0; }
.qz-ri-q { margin: 0; line-height: 1.5; overflow-wrap: anywhere; }
.qz-ri-qt { font-weight: 500; }
.qz-ri-arrow { margin: 0 2px; color: var(--brass-ink); }
.qz-ri-ans { font-weight: 700; color: var(--brass-ink); }
.qz-ri-g { margin: 5px 0 0; font-size: 13.5px; color: var(--muted); overflow-wrap: anywhere; }
.qz-ri-given { font-weight: 600; color: var(--err-ink); }
.qz-ri-none { font-style: italic; }
.qz-ri-side { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; text-align: right; min-width: 110px; }
.qz-ri-r { margin: 0; font-size: 12px; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--c); }
.qz-ri-dp { margin: 0; font-size: 12.5px; color: var(--muted); }
.qz-ri-dp.is-accepted { color: var(--r2); font-weight: 600; }
.qz-ri-dp.is-refused { color: var(--err-ink); }
.qz-ri-dbtn { font-size: 12.5px; }
.qz-ri-dmsg { color: var(--err-ink); }
.qz-ri-side .qz-fgain { margin: 0; justify-content: flex-end; gap: 6px; max-width: 280px; }
.qz-ri-side .qz-chip { padding: 3px 9px; font-size: 13px; }
.qz-ri-l2 { grid-column: 2 / -1; display: flex; align-items: baseline; gap: 6px 16px; min-width: 0; padding-top: 8px; border-top: 1px solid var(--line); }
.qz-ri-inf { flex: 1; min-width: 0; margin: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13.5px; color: var(--muted); cursor: pointer; }
.qz-ri-inf:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.qz-ri-inf.is-open { white-space: normal; overflow: visible; line-height: 1.55; }
.qz-ri-src { flex: none; margin: 0; font-size: 13px; }
.qz-ri-src a { color: var(--brass-ink); }
.qz-ri-l2:has(.qz-ri-inf.is-open) { align-items: flex-start; flex-wrap: wrap; }
@media (max-width: 640px) {
  .qz-ri { grid-template-columns: 30px minmax(0, 1fr); padding: 12px 12px 10px 10px; }
  .qz-ri-side { grid-column: 2; grid-row: 2; flex-direction: row; flex-wrap: wrap; align-items: center; justify-content: flex-start; text-align: left; gap: 6px 12px; }
  .qz-ri-side .qz-fgain { justify-content: flex-start; }
  .qz-ri-l2 { grid-column: 1 / -1; grid-row: 3; }
}

/* Page « Mon historique » */
.wrap.qh { max-width: 1100px; padding-top: clamp(28px, 5vw, 48px); padding-bottom: 72px; }
.qh-layout { display: grid; grid-template-columns: minmax(220px, 280px) minmax(0, 1fr); gap: 32px; align-items: start; }
.qh-days ul { list-style: none; margin: 0; padding: 0 4px 0 0; display: grid; gap: 8px; max-height: calc(100vh - 140px); overflow-y: auto; position: sticky; top: 96px; }
.qh-day { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; padding: 10px 14px; background: var(--surface); border: 1px solid var(--line); border-left: 3px solid var(--line); color: var(--text); text-decoration: none; }
.qh-day:hover, .qh-day:focus-visible { border-color: var(--brass); }
.qh-day.is-current { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 16%, var(--card)); }
.qh-day-d { font-size: 14px; }
.qh-day-s { font-size: 13px; font-weight: 700; color: var(--brass-ink); font-variant-numeric: tabular-nums; white-space: nowrap; }
.qh-title { margin: 0 0 6px; text-align: center; font-weight: 300; font-size: 26px; letter-spacing: .08em; }
.qh-title::first-letter { text-transform: uppercase; }
.qh-sum { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px 12px; margin: 14px 0 26px; }
@media (max-width: 860px) {
  .qh-layout { grid-template-columns: minmax(0, 1fr); }
  .qh-days ul { position: static; max-height: 240px; }
}

/* Espace admin, page Quiz : lignes plus aérées, champs de même hauteur par défaut, import Excel */
.aq-grid { --aq-h: 64px; gap: 14px; }
.aq-row { padding: 12px; gap: 10px; }
.aq-c textarea { height: 100%; min-height: var(--aq-h); }
.aq-c .ad-select { height: 100%; }
.aq-c .ad-select-btn { height: 100%; min-height: var(--aq-h); }
.aq-import { display: flex; flex-wrap: wrap; align-items: center; gap: 12px 18px; margin: 0 0 18px; padding: 14px 16px; background: var(--surface); border: 1px dashed var(--brass-line); }
.aq-import-file { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; font-size: 14px; }
.aq-import-file input[type="file"] { font: inherit; font-size: 13px; color: var(--text); max-width: 100%; }
.aq-import-file input[type="file"]::file-selector-button { margin-right: 10px; padding: 7px 14px; font: inherit; font-size: 13px; color: var(--text); background: none; border: 1px solid var(--brass-line); cursor: pointer; }
.aq-import-tpl { font-size: 14px; color: var(--brass-ink); }
.aq-import .hint { flex-basis: 100%; margin: 0; }
.admin-quiz-ok { margin: 0 0 14px; }
.admin-quiz-ok p { margin: 0; }
.admin-quiz-ok ul { margin: 6px 0 0 18px; padding: 0; color: var(--text); }
.admin-quiz-err { margin: 0 0 14px; }

/* Montants en pièces : l'icône suit le nombre, à hauteur du texte (Pieces::amount, assets/pieces.js) */
.amt { white-space: nowrap; }
.amt .wc-piece { width: 1.2em; height: 1.2em; vertical-align: -.22em; }

/* Jauge de score (assets/gauge.js) : barre à gradins à DROITE seulement, contour plein, marge transparente, remplissage doré ; à gauche, sans gradin, un ticket collé de travers,
   à perforation (ligne de petits trous et deux encoches), qui porte le score. Utilisée pour le résultat du quiz (X / 10), son historique et la fin de WikiGéo (en %). */
.tg { --h: 46px; display: flex; align-items: center; width: min(100%, 600px); margin: 14px auto 8px; }
.tg-bar { --s: 5px; --t: 1px; position: relative; isolation: isolate; flex: 1; min-width: 0; height: var(--h); margin-left: -12px; background: color-mix(in srgb, var(--brass) 11%, var(--card)); clip-path: polygon(0 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, 0 100%); }
.tg-bar::before { content: ""; position: absolute; inset: 0; z-index: 2; background: var(--brass); clip-path: polygon(evenodd, 0 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, 0 100%, 0 0, var(--t) var(--t), calc(100% - 2*var(--s) - var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--t)), var(--t) calc(100% - var(--t)), var(--t) var(--t)); pointer-events: none; }
.tg-fill { --s: 3px; position: absolute; z-index: 1; left: 7px; top: 6px; bottom: 6px; width: 0; background: linear-gradient(90deg, #b8862a, #f3d982); clip-path: polygon(0 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, 0 100%); transition: width 1s var(--ease); }
.tg-tkw { position: relative; z-index: 3; flex: none; rotate: -3.5deg; translate: 0 -2px; margin-block: 6px; filter: drop-shadow(0 3px 3px rgba(0, 0, 0, .45)); }
.tg-tk { position: relative; width: 118px; height: 52px; display: grid; place-items: center; padding-right: 10px; text-align: center; font-weight: 700; color: #2e2204; background: linear-gradient(160deg, #f6e7ae, #d9b25a);
  -webkit-mask: radial-gradient(circle 2.9px at calc(100% - 8px) 6.5px, #0000 97%, #000) 0 0 / 100% 13px repeat-y, radial-gradient(circle 7px at 100% 0, #0000 97%, #000), radial-gradient(circle 7px at 100% 100%, #0000 97%, #000);
  -webkit-mask-composite: source-in;
  mask: radial-gradient(circle 2.9px at calc(100% - 8px) 6.5px, #0000 97%, #000) 0 0 / 100% 13px repeat-y, radial-gradient(circle 7px at 100% 0, #0000 97%, #000), radial-gradient(circle 7px at 100% 100%, #0000 97%, #000);
  mask-composite: intersect; }
.tg-tk::after { content: ""; position: absolute; inset: 4px 14px 4px 4px; border: 1px solid rgba(46, 34, 4, .3); pointer-events: none; }
.tg-tk b { position: relative; z-index: 1; font-size: 24px; line-height: 1; letter-spacing: .03em; font-variant-numeric: tabular-nums; }
.tg-tk b i { font-style: normal; font-size: .62em; font-weight: 600; opacity: .75; }
@media (max-width: 480px) { .tg-tk { width: 98px; height: 48px; } .tg-tk b { font-size: 20px; } .tg-bar { margin-left: -10px; } }

/* =========================================================
   Cadres à gradins, 2e génération (1.0.0)
   - GRANDS encarts de page (WikiSpeed, WikiGéo, Quiz et Missions de la page Jeux, fins de partie, Réserve de la page Paquets) : contour plein laiton de 4 px à gradins, filet
     intérieur léger, l'éventail du logo en filigrane (en bas, translucide ; --fan-img: none pour s'en passer) et texte courant plus clair.
   - Encarts MOYENS (cartes du quiz, récapitulatif des gains) : le même cadre, sans éventail.
   ========================================================= */
:root { --fan-line: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 800 400'%3E%3Cg opacity='.17'%3E%3Cpath d='M10 400A390 390 0 0 1 790 400M80 400A320 320 0 0 1 720 400M150 400A250 250 0 0 1 650 400M220 400A180 180 0 0 1 580 400M290 400A110 110 0 0 1 510 400M344 400A56 56 0 0 1 456 400M386.6 400A13.4 13.4 0 0 1 413.4 400M413.4 400L790 400M509.1 385.6L682.6 362.8M412.9 396.5L742.9 308.1M501.6 357.9L598.6 317.7M411.6 393.3L737.7 205M487.3 333L570.6 269.1M409.5 390.5L651 149M467 312.7L573.5 173.9M406.7 388.4L595 62.3M442.1 298.4L509.1 136.7M403.5 387.1L491.9 57.1M414.4 290.9L428.1 186.8M400 386.6L400 10M385.6 290.9L371.9 186.8M396.5 387.1L308.1 57.1M357.9 298.4L290.9 136.7M393.3 388.4L205 62.3M333 312.7L226.5 173.9M390.5 390.5L149 149M312.7 333L229.4 269.1M388.4 393.3L62.3 205M298.4 357.9L201.4 317.7M387.1 396.5L57.1 308.1M290.9 385.6L117.4 362.8M386.6 400L10 400' fill='none' stroke='%23b8923f' stroke-width='1.4' vector-effect='non-scaling-stroke'/%3E%3Cpath d='M395.5 400A4.5 4.5 0 0 1 404.5 400ZM680.4 362.8a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M740.7 308.1a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M596.4 317.7a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M568.4 269.1a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M648.8 149a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M571.3 173.9a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M506.9 136.7a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M489.7 57.1a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M425.9 186.8a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M369.7 186.8a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M305.9 57.1a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M288.7 136.7a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M224.3 173.9a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M146.8 149a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M227.2 269.1a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M199.2 317.7a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M54.9 308.1a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0M115.2 362.8a2.2 2.2 0 1 0 4.4 0a2.2 2.2 0 1 0-4.4 0' fill='%23b8923f'/%3E%3C/g%3E%3C/svg%3E"); }
.wsb-frame, .gqb-frame, .gqj-frame, .gq-end-frame, .jxp-encart, .op-encart { --fan-img: var(--fan-line); --muted: color-mix(in srgb, var(--text) 82%, var(--card)); }

/* contour plein (4 px) : la couche de fond laisse 4 px de laiton visibles */
.wsb-frame::before, .gqb-frame::before, .gqj-frame::before, .gq-end-frame::before, .jxp-encart::before { opacity: 1; }
/* la couche de fond (un élément <i> par encart) : fond + éventail ; son ::after dessine le filet intérieur léger, à gradins comme le contour, à 9 px du bord du cadre */
.jxp-ebg { position: absolute; inset: 1px; z-index: -1; overflow: hidden; pointer-events: none; clip-path: polygon(0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s))); }
.wsb-bg, .gqb-bg, .gqj-bg, .gq-end-bg, .jxp-ebg { inset: 4px; box-shadow: none; }
.wsb-bg::after, .gqb-bg::after, .gqj-bg::after, .gq-end-bg::after, .jxp-ebg::after { content: ""; position: absolute; inset: 5px; --t: 1px; background: color-mix(in srgb, var(--brass) 42%, transparent); clip-path: polygon(evenodd, 0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s)), 0 calc(2*var(--s)), var(--t) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(2*var(--s) + var(--t))); pointer-events: none; }
/* le filet léger EXTÉRIEUR : deux horizontales et deux verticales posées à 8 px du cadre, qui le dépassent aux quatre coins (croisement en « # ») */
.wsb-frame::after, .gqb-frame::after, .gqj-frame::after, .gq-end-frame::after, .jxp-encart::after, .op-encart::after {
  content: ""; position: absolute; inset: -18px; z-index: -3; pointer-events: none; overflow: visible; box-shadow: none; clip-path: none; --f: color-mix(in srgb, var(--brass) 55%, transparent);
  background:
    linear-gradient(var(--f), var(--f)) 0 10px / 100% 1px no-repeat,
    linear-gradient(var(--f), var(--f)) 0 calc(100% - 11px) / 100% 1px no-repeat,
    linear-gradient(var(--f), var(--f)) 10px 0 / 1px 100% no-repeat,
    linear-gradient(var(--f), var(--f)) calc(100% - 11px) 0 / 1px 100% no-repeat;
}
/* l'éventail du site remplace les rayons : en bas au centre, discret */
.wsb-bg { background: var(--fan-img) 50% 100% / min(100%, 760px) auto no-repeat, radial-gradient(ellipse 60% 90% at 78% 100%, color-mix(in srgb, var(--brass) 12%, transparent), transparent 70%), var(--card); }
.gqb-bg { background: var(--fan-img) 50% 100% / min(100%, 760px) auto no-repeat, radial-gradient(ellipse 60% 90% at 12% 100%, color-mix(in srgb, var(--brass) 12%, transparent), transparent 70%), var(--card); }
.gqj-bg { background: var(--fan-img) 50% 100% / min(100%, 720px) auto no-repeat, radial-gradient(ellipse 70% 100% at 90% 0%, color-mix(in srgb, var(--brass) 12%, transparent), transparent 70%), var(--card); }
.gq-end-bg { background: var(--fan-img) 50% 100% / min(110%, 720px) auto no-repeat, radial-gradient(ellipse 70% 90% at 50% 100%, color-mix(in srgb, var(--brass) 12%, transparent), transparent 70%), var(--card); }
.jxp-ebg { background: var(--fan-img) 50% 100% / min(100%, 720px) auto no-repeat, radial-gradient(ellipse 60% 90% at 20% 100%, color-mix(in srgb, var(--brass) 12%, transparent), transparent 70%), var(--card); }
.wsb-burst, .gq-end-burst { display: none; }

/* Réserve (page Paquets) : le cadre n'est plus rogné lui-même (pour laisser dépasser le filet extérieur) : son contour est dessiné par ::before ; le filet intérieur (op-inner) suit les mêmes gradins */
.op-encart { padding: 4px; background: none; clip-path: none; position: relative; isolation: isolate; }
.op-encart::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); clip-path: polygon(0 var(--s), calc(var(--s) / 2) var(--s), calc(var(--s) / 2) calc(var(--s) / 2), var(--s) calc(var(--s) / 2), var(--s) 0, calc(100% - var(--s)) 0, calc(100% - var(--s)) calc(var(--s) / 2), calc(100% - var(--s) / 2) calc(var(--s) / 2), calc(100% - var(--s) / 2) var(--s), 100% var(--s), 100% calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s) / 2), calc(100% - var(--s)) calc(100% - var(--s) / 2), calc(100% - var(--s)) 100%, var(--s) 100%, var(--s) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s)), 0 calc(100% - var(--s))); }
.op-inner::before { --s: 12px; inset: 5px; background: color-mix(in srgb, var(--brass) 45%, var(--card)); }
.op-inner::after { --s: 12px; inset: 6px; background: var(--fan-img) 50% 100% / min(100%, 720px) auto no-repeat, var(--card); }

/* Encarts moyens : contour plein de 4 px à gradins, filet intérieur léger, pas d'éventail */
.qz-card, .gq-gains { --s: 5px; --ring: var(--brass); position: relative; isolation: isolate; border: 0; box-shadow: none; clip-path: polygon(0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s))); background: linear-gradient(160deg, color-mix(in srgb, var(--brass) 9%, var(--card)), var(--card) 70%); }
.qz-card::before, .gq-gains::before, .qz-card::after, .gq-gains::after { content: ""; position: absolute; z-index: -1; inset: 0; width: auto; height: auto; margin: 0; transform: none; --t: 4px; background: var(--ring); clip-path: polygon(evenodd, 0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s)), 0 calc(2*var(--s)), var(--t) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(2*var(--s) + var(--t))); }
.qz-card::after, .gq-gains::after { inset: 9px; --t: 1px; background: color-mix(in srgb, var(--ring) 42%, transparent); }
.qz-fb.is-ok { --ring: var(--r2); box-shadow: none; }
.qz-fb.is-bad { --ring: var(--err-ink); box-shadow: none; }

/* Mobile : pas de filet extérieur autour des grands encarts (il serait rogné par le bord de l'écran) */
@media (max-width: 640px) {
  .wsb-frame::after, .gqb-frame::after, .gqj-frame::after, .gq-end-frame::after, .jxp-encart::after, .op-encart::after { display: none; }
}

/* Réserve (page Paquets), plus lisible : fond uni en haut, l'éventail n'apparaît qu'en pied (fondu vers le haut), textes un peu plus grands et plus clairs */
.op-inner::after { background: linear-gradient(to bottom, var(--card) 0, var(--card) 58%, transparent 100%), var(--fan-img) 50% 100% / min(110%, 800px) auto no-repeat, var(--card); }
.op-encart { font-size: 14px; --muted: color-mix(in srgb, var(--text) 86%, var(--card)); }
.op-encart .op-m-name { font-size: 14px; }
.op-encart .op-m-count { font-size: 13px; }
.op-encart .op-label { font-size: 12px; color: var(--text); }
.op-encart .op-foot { padding-top: 22px; }

/* Atelier : fabrique de paquets spéciaux (une carte par recette : thème, effectif, coût en joyaux et en pièces, bouton) */
.atl-recipes { list-style: none; margin: 8px 0 0; padding: 0; width: 100%; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; text-align: left; }
.atl-recipe { position: relative; display: flex; flex-direction: column; gap: 8px; padding: 16px 16px 14px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 5%, var(--card)); transition: border-color .25s ease, background .25s ease; }
.atl-recipe.is-ready { border-color: var(--brass); }
.atl-recipe.is-made { animation: atl-made .9s ease; }
@keyframes atl-made { 0% { background: color-mix(in srgb, var(--brass) 38%, var(--card)); } 100% { background: color-mix(in srgb, var(--brass) 5%, var(--card)); } }
.atl-r-name { margin: 0; font-size: 15px; font-weight: 600; letter-spacing: .02em; line-height: 1.25; }
.atl-r-about { margin: 0; flex: 1 1 auto; font-size: 12.5px; line-height: 1.45; color: var(--muted); text-wrap: pretty; }
.atl-r-cards { margin: 0; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); }
.atl-r-cards b { color: var(--brass-ink); font-variant-numeric: tabular-nums; letter-spacing: 0; }
.atl-r-cost { margin: 2px 0 0; display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; font-variant-numeric: tabular-nums; }
.atl-r-gem, .atl-r-piece { display: inline-flex; align-items: center; gap: 5px; font-size: 15px; }
.atl-r-gem .gem { width: 24px; height: 24px; flex: none; }
.atl-r-piece .wc-piece { width: 1.25em; height: 1.25em; flex: none; }
.atl-r-gem b, .atl-r-piece b { font-weight: 600; }
.atl-r-gem.is-short b, .atl-r-piece.is-short b { color: var(--err-ink); }
.atl-craft-btn { align-self: stretch; margin-top: 2px; }
.atl-r-own { margin: 0; font-size: 12.5px; color: var(--muted); text-align: center; }
.atl-r-own [data-own] { font-weight: 600; color: var(--text); font-variant-numeric: tabular-nums; }
.atl-r-msg { margin: 0; min-height: 0; font-size: 12.5px; text-align: center; color: var(--brass-ink); }
.atl-r-msg:empty { display: none; }
.atl-r-msg.is-error { color: var(--err-ink); }
@media (max-width: 860px) { .atl-recipes { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px) { .atl-recipes { grid-template-columns: minmax(0, 1fr); } }

/* Atelier : la rosace des joyaux et des 15 paquets thématiques (AtelierView::map), le panneau de recettes qui s'ouvre sous elle (l'écran y défile quand on touche un joyau ou un paquet)
   et la liste complète des recettes (assets/atelier.js). Tout est posé directement sur la page, sans cadre. */
.atl-recipes[hidden], .atl-row[hidden], .atl-sec[hidden] { display: none; }
.atl-board { display: flex; flex-direction: column; align-items: stretch; gap: 14px; max-width: 1040px; margin: 0 auto 40px; }
.atl-board .atl-edesc { align-self: center; text-align: center; max-width: 66ch; }
.atl-stage { width: 100%; max-width: 980px; margin: 4px auto 0; }
.atl-panel { scroll-margin-top: 84px; outline: none; min-height: 120px; margin-top: 6px; }
.atl-panel .atl-recipes { grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: 0; }
.atl-group.is-one .atl-recipes { grid-template-columns: minmax(0, 460px); justify-content: center; }
.atl-who { display: flex; align-items: center; justify-content: center; gap: 12px; flex-wrap: wrap; margin: 4px 0 14px; font-size: 15px; text-align: center; }
.atl-who .gem { width: 34px; height: 34px; }
.atl-who b { font-weight: 600; letter-spacing: .04em; }
.atl-who span { color: var(--muted); }
.atl-group { margin-top: 14px; }
.atl-group .jxp-label { margin-bottom: 12px; letter-spacing: .2em; }
@media (max-width: 640px) { .atl-panel .atl-recipes { grid-template-columns: minmax(0, 1fr); } }

.am-svg { width: 100%; height: auto; display: block; overflow: visible; }
.am-svg, .am-svg * { -webkit-user-select: none; user-select: none; }   /* rien de la rosace (joyaux, paquets, noms, nombres) ne se sélectionne comme du texte, même avec des clics répétés */
.am-svg text { fill: var(--text); font-family: inherit; }
.am-decor { fill: none; stroke: var(--brass); stroke-width: 1; opacity: .2; }
.am-decor-hub { opacity: .5; }
.am-edge { stroke: var(--brass); stroke-width: 1.5; opacity: .35; fill: none; stroke-linecap: round; }
.am-hub { fill: var(--card); stroke: var(--brass); stroke-width: 2; }
.am-svg .am-cnt { fill: var(--brass-ink); font-weight: 600; font-variant-numeric: tabular-nums; }
.am-svg .am-mut { fill: var(--muted); }
.am-lnk { fill: none; stroke-width: 2.4; stroke-dasharray: 11 9; stroke-linecap: round; opacity: .8; transition: opacity .3s ease; }
.am-svg.has-sel .am-lnk { opacity: .2; }
.am-svg .am-lnk.is-on { opacity: 1; animation: am-dash 1.3s linear infinite; }
@keyframes am-dash { to { stroke-dashoffset: -40; } }
.am-node, .am-gem { cursor: var(--cur-hand); outline: none; transition: opacity .3s ease; }
.am-svg.has-sel .am-node:not(.is-on), .am-svg.has-sel .am-gem:not(.is-on) { opacity: .5; }
.am-halo { opacity: .5; transition: opacity .3s ease; }
.am-node.is-on .am-halo, .am-gem.is-on .am-halo { opacity: 1; }
.am-ring { fill: var(--card); stroke: var(--brass); stroke-width: 2.2; }
.am-ring-gem { stroke-width: 2; }
.am-ring2 { fill: none; stroke: var(--brass); stroke-width: 2.2; pointer-events: none; }
.am-node.is-main .am-ring2, .am-gem.is-main .am-ring { stroke: var(--text); stroke-width: 3.6; }
.am-node:focus-visible .am-ring2, .am-gem:focus-visible .am-ring { stroke: var(--text); stroke-width: 4; }
.am-svg .am-lbl { font-size: 16px; pointer-events: none; }
.am-svg .am-lbl-m { display: none; }
@media (max-width: 700px) {   /* téléphone : la rosace prend toute la largeur de l'écran, et les 15 noms (AtelierView::mobileLabel : plus grands, sur deux lignes au besoin, écartés des ronds) restent affichés */
  .atl-stage .am-svg { width: 100vw; max-width: none; margin-inline: calc(50% - 50vw); }
  .am-svg .am-lbl { display: none; }
  .am-svg .am-lbl-m { display: inline; font-size: 27px; pointer-events: none; }
  .am-svg .am-node.is-main .am-lbl-m { fill: var(--brass-ink); font-weight: 600; }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .am-svg .am-lnk.is-on { animation: none; }
.atl-craft-btn.is-armed { filter: brightness(1.18); animation: atl-armed 1s ease-in-out infinite; }   /* armé : un second clic fabrique (assets/atelier.js) */
@keyframes atl-armed { 50% { box-shadow: 0 0 0 4px color-mix(in srgb, var(--brass) 38%, transparent); } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .atl-craft-btn.is-armed { animation: none; box-shadow: 0 0 0 3px color-mix(in srgb, var(--brass) 38%, transparent); }
.at-gem { cursor: var(--cur-hand); transition: border-color .25s ease, background .25s ease; }
.at-gem:hover, .at-gem.is-cur { border-color: var(--gc); background: linear-gradient(180deg, color-mix(in srgb, var(--gc) 34%, var(--card)), color-mix(in srgb, var(--gc) 8%, var(--card)) 85%); }

/* Atelier : liste complète des recettes (dépliant), une ligne par recette */
.atl-all { margin-top: 30px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 4%, var(--card)); }
.atl-all > summary { list-style: none; display: flex; align-items: center; gap: 14px; padding: 15px 22px; cursor: var(--cur-hand); font-size: 13px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); }
.atl-all > summary::-webkit-details-marker { display: none; }
.atl-all > summary::before { content: ""; width: 8px; height: 8px; flex: none; background: var(--brass); rotate: 45deg; transition: rotate .3s ease; }
.atl-all[open] > summary::before { rotate: 135deg; }
.atl-all[open] > summary { border-bottom: 1px solid var(--brass-line); }
.atl-all > summary:focus-visible { outline: 2px solid var(--brass); outline-offset: -2px; }
.atl-all-in { padding: 18px; }
.atl-chips { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-bottom: 18px; }
.atl-chip { appearance: none; display: inline-flex; align-items: center; gap: 8px; padding: 7px 14px 7px 10px; border: 1px solid var(--brass-line); background: transparent; color: var(--text); font: 500 12px/1 var(--font); letter-spacing: .14em; text-transform: uppercase; cursor: var(--cur-hand); }
.atl-chip:not(:has(.gem)) { padding-left: 14px; }
.atl-chip .gem { width: 22px; height: 22px; }
.atl-chip:hover { border-color: var(--brass); }
.atl-chip.is-cur { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 16%, var(--card)); }
.atl-list { display: grid; border: 1px solid var(--brass-line); }
.atl-sec { display: flex; align-items: center; gap: 12px; padding: 9px 16px; background: color-mix(in srgb, var(--brass) 14%, var(--card)); border-top: 1px solid var(--brass-line); font-size: 11px; letter-spacing: .28em; text-transform: uppercase; color: var(--brass-ink); font-weight: 500; }
.atl-sec:first-child { border-top: 0; }
.atl-sec .gem { width: 26px; height: 26px; }
.atl-row { display: grid; grid-template-columns: 74px minmax(0, 1fr) auto 86px auto; align-items: center; gap: 6px 16px; padding: 12px 16px; border-top: 1px solid var(--line); background: var(--card); transition: background .25s ease; }
.atl-row.is-ready:hover { background: color-mix(in srgb, var(--brass) 8%, var(--card)); }
.atl-row.is-made { animation: atl-made .9s ease; }
.atl-sig { display: flex; align-items: center; justify-content: center; }
.atl-sig .gem { width: 34px; height: 34px; }
.atl-sig .gem + .gem { margin-left: -10px; }
.atl-row .atl-r-name { font-size: 15px; }
.atl-row .atl-r-about { margin-top: 3px; }
.atl-row .atl-r-cost { margin: 0; flex-wrap: nowrap; gap: 4px 12px; }
.atl-row .atl-craft-btn { align-self: center; margin: 0; }
.atl-row .atl-r-msg { grid-column: 2 / -1; text-align: left; }
.atl-row-own { display: grid; gap: 5px; justify-items: center; }
.atl-stock { display: inline-flex; align-items: center; gap: 9px; padding: 5px 14px 5px 11px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 9%, var(--card)); }
.atl-stock::before { content: ""; width: 8px; height: 8px; flex: none; background: var(--brass); rotate: 45deg; }
.atl-stock b { font-size: 19px; font-weight: 600; line-height: 1; color: var(--brass-ink); font-variant-numeric: tabular-nums; }
.atl-stock b.is-bump { animation: atl-bump .6s ease; }
@keyframes atl-bump { 0% { transform: scale(1); } 40% { transform: scale(1.5); } 100% { transform: scale(1); } }
.atl-row-own small { font-size: 11px; color: var(--muted); letter-spacing: .1em; text-transform: uppercase; }
@media (max-width: 820px) {
  .atl-row { grid-template-columns: 60px minmax(0, 1fr) auto; }
  .atl-row .atl-r-cost { grid-column: 2; }
  .atl-row-own { grid-column: 2; grid-row: 3; justify-items: start; }
  .atl-row .atl-craft-btn { grid-column: 3; grid-row: 2 / span 2; }
  .atl-row .atl-r-msg { grid-column: 1 / -1; text-align: center; }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .atl-row.is-made, :where(:root[data-motion="reduce"]) .atl-stock b.is-bump { animation: none; }

/* Page Paquets : zone « Paquets thématiques » du carrousel. Les quinze thèmes (un bouton par recette de l'Atelier, avec le nombre de paquets du joueur) sont DANS l'encart Réserve :
   ils prennent la place du stock, du compteur doré et du compteur diamanté (pack.js pose data-zone sur #op-encart). Tuiles à angles en gradins et filet laiton, losange du nombre de paquets à cheval
   sur le bord haut ; la tuile choisie (celle qu'ouvre le paquet) est teintée de laiton, double filet et losange plein. */
.op-encart[data-zone="thematic"] .op-zone--stock,
.op-encart[data-zone="thematic"] .op-zone--gold,
.op-encart[data-zone="thematic"] .op-zone--diamond { display: none; }
.op-encart .op-zone--themes { gap: 14px; padding: 6px 0 4px; }
.op-encart .op-zone--themes[hidden] { display: none; }
.op-encart .op-zone--themes { grid-area: themes; }
.th-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-bottom: 8px; border-bottom: 1px solid var(--line); }
.th-total { font-size: 11.5px; letter-spacing: .06em; color: var(--muted); font-variant-numeric: tabular-nums; }
.th-list { list-style: none; margin: 0; padding: 8px 0 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 20px 10px; }
@container (min-width: 480px) { .th-list { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@container (min-width: 600px) { .th-list { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.th-item {
  --s: 5px; appearance: none; position: relative; isolation: isolate; width: 100%; min-height: 62px; display: grid; place-items: center; padding: 16px 10px 11px; border: 0; background: none;
  font: 500 11px/1.3 var(--font); letter-spacing: .1em; text-transform: uppercase; text-align: center; text-wrap: balance; color: var(--text); cursor: var(--cur-hand);
  transition: color .25s ease; -webkit-tap-highlight-color: transparent;
}
.th-item::before, .th-item::after { content: ""; position: absolute; z-index: -1; transition: background .25s ease; }
.th-item::before { inset: 0; background: var(--brass-line); }
.th-item::after { inset: 1px; --s: 4.5px; background: var(--card); }
.th-item:hover:not(:disabled):not(.is-sel)::after { background: color-mix(in srgb, var(--brass) 10%, var(--card)); }
.th-item:hover:not(:disabled):not(.is-sel)::before { background: var(--brass); }
.th-item:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
.th-item.is-sel { color: var(--brass-ink); }
.th-item.is-sel::before { background: var(--brass); }
.th-item.is-empty:not(.is-sel) { color: var(--muted); }
.th-item:disabled { cursor: var(--cur-blocked); opacity: .6; }
.th-name { display: block; }
/* Losange du nombre de paquets, à cheval sur le bord haut de la tuile (le chiffre reste droit, seul le fond tourne) */
.th-n {
  position: absolute; z-index: 1; top: -10px; left: calc(50% - 10px); width: 20px; height: 20px; display: grid; place-items: center;
  font-size: 10.5px; font-weight: 500; line-height: 1; letter-spacing: 0; font-variant-numeric: tabular-nums; color: var(--brass-ink);
}
.th-n::before { content: ""; position: absolute; inset: 1px; z-index: -1; rotate: 45deg; background: var(--card); border: 1px solid var(--brass); transition: background .25s ease; }
.th-item.is-sel .th-n { color: var(--on-brass); }
.th-item.is-sel .th-n::before { background: var(--brass-ink); border-color: var(--brass-ink); }
.th-item.is-empty:not(.is-sel) .th-n { color: var(--muted); }
.th-item.is-empty:not(.is-sel) .th-n::before { border-color: var(--brass-line); }
.th-about { margin: 0; min-height: 2.8em; display: grid; align-items: center; text-align: center; font-size: 12.5px; line-height: 1.4; color: var(--muted); text-wrap: balance; }
.th-link { justify-self: center; font-size: 12.5px; color: var(--brass-ink); text-decoration: none; border-bottom: 1px solid var(--brass-line); }
.th-link:hover { border-bottom-color: var(--brass-ink); }

/* Fenêtre « Améliorer le style » / « Rétrograder le style » (fiche d'une carte de la collection, card-modal.js) : tout est centré ; la carte actuelle et, une fois un style choisi, la carte
   après le changement (même taille), puis les styles possibles OU, sous les cartes, le bouton principal « Confirmer ». */
.modal-box.st-box { display: block; width: min(640px, 100%); max-height: calc(100vh - 32px); max-height: calc(100dvh - 32px); overflow-y: auto; padding: clamp(24px, 4vw, 36px); text-align: center; justify-items: stretch; }
.st-box h2 { margin: 0 0 6px; font-size: 20px; font-weight: 500; letter-spacing: .06em; text-transform: uppercase; }
.st-body { display: flex; flex-direction: column; align-items: center; gap: 18px; }
.st-name { margin: 0; font-size: 17px; font-weight: 500; }
.st-box .st-cards { display: flex; justify-content: center; align-items: center; gap: clamp(8px, 3vw, 22px); width: 100%; }   /* dans la fenêtre de changement de style seulement : « .st-cards » est aussi la grille des cartes des Paramètres */
.st-col { flex: none; width: clamp(130px, 36vw, 230px); }
.st-col[hidden], .st-arrow[hidden], .st-confirm[hidden], .st-choices[hidden] { display: none; }
.st-label { margin: 0 0 10px; font-size: 11.5px; font-weight: 500; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.st-col .cards.collection { display: block; width: 100%; margin: 0; padding: 0; }
.st-col .card { width: 100%; cursor: var(--cur-default); }
.st-col .card:hover { translate: none; }
.st-arrow { flex: none; display: flex; align-items: center; padding-top: 28px; color: var(--brass); }
.st-arrow svg { width: 26px; height: 26px; stroke: currentColor; stroke-width: 2; fill: none; stroke-linecap: round; stroke-linejoin: round; }
.st-choices { display: flex; flex-direction: column; gap: 10px; width: min(380px, 100%); }
.atl-choose-btn {
  appearance: none; display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%;
  padding: 12px 16px; border: 1px solid var(--brass-line); background: var(--card); color: var(--text);
  font: inherit; font-size: 13px; cursor: var(--cur-hand); transition: border-color .25s ease, background .25s ease;
}
.atl-choose-btn:hover, .atl-choose-btn:focus-visible { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 10%, var(--card)); }
.atl-choose-label { letter-spacing: .02em; }
.atl-choose-cost { flex: none; display: inline-flex; align-items: center; gap: 6px; font-weight: 600; color: var(--brass-ink); font-variant-numeric: tabular-nums; }
.atl-choose-cost .wc-piece { width: 1.3em; height: 1.3em; flex: none; }
.st-confirm { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.st-what { margin: 0; font-size: 14px; display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: center; }
.st-what b { color: var(--brass-ink); font-variant-numeric: tabular-nums; }
.st-what .wc-piece { width: 1.25em; height: 1.25em; flex: none; }
.st-msg { margin: 0; min-height: 1.4em; font-size: 13.5px; color: var(--muted); }
.st-msg.is-error { color: var(--err-ink); }
.st-msg:empty { display: none; }
.st-none { margin: 0; color: var(--muted); font-size: 14px; }
@media (max-width: 520px) { .st-label { min-height: 2.6em; display: flex; align-items: flex-end; justify-content: center; } .st-arrow { padding-top: 40px; } }

/* >>> STYLES DE THÈME (région générée : python design/.cache/build-th.py) >>> */
/* ==========================================================================================================================================================================
   STYLES DE THÈME : les douze styles des paquets thématiques (src/Styles.php, THEME_STYLES). Une carte à style de thème a le même format que les autres (5 × 7) mais son propre habillage :
   .card-front.th.th-<style> > .th-in (calque) > .card-img · .th-rn (repère du rang, texte lu dans data-rn) · .card-body (h3 · .desc · .meta : .tag la rareté, .vw les vues du mois).
   Tout se mesure en em (1 em = 1/20 de la largeur de la carte = 5cqw) ; --tu est la même unité, pour les éléments qui changent leur propre taille de police.
   La partie propre à chaque style est générée depuis la page de choix (design/styles-themes.html) : les sélecteurs sont préfixés par « html body » pour passer devant le cadre à gradins des autres cartes.
   ========================================================================================================================================================================== */
html body .card .card-front.th {
  --tu: 5cqw; --ink: #15111a; --tx: #f6f1e8; --mu: #b9b0c4; --ivory: #f6f0e0; --n: 1;
  --c1: var(--r1); --c2: color-mix(in srgb, var(--r1) 62%, #000); --c3: color-mix(in srgb, var(--r1) 40%, #fff); --glow: color-mix(in srgb, var(--r1) 50%, transparent);
  --frame: linear-gradient(155deg, #a9b6c8, #6b7a90); --stub: linear-gradient(#bcc6d4, #bcc6d4);
  position: absolute; inset: 0; display: block; padding: 0; overflow: hidden; border-radius: 0; border: 0; background: none; box-shadow: none; clip-path: none;
  color: var(--text); font: 400 5cqw/normal var(--font); letter-spacing: normal; text-align: left; text-transform: none;
}
html body .card.r2 .card-front.th { --n: 2; --c1: var(--r2); --c2: color-mix(in srgb, var(--r2) 62%, #000); --c3: color-mix(in srgb, var(--r2) 40%, #fff); --glow: color-mix(in srgb, var(--r2) 55%, transparent); --frame: linear-gradient(155deg, var(--c1), var(--c2)); --stub: linear-gradient(var(--c1), var(--c1)); }
html body .card.r3 .card-front.th { --n: 3; --c1: var(--r3); --c2: color-mix(in srgb, var(--r3) 62%, #000); --c3: color-mix(in srgb, var(--r3) 40%, #fff); --glow: color-mix(in srgb, var(--r3) 55%, transparent); --frame: linear-gradient(155deg, var(--c1), var(--c2)); --stub: linear-gradient(var(--c1), var(--c1)); }
html body .card.r4 .card-front.th { --n: 4; --c1: var(--r4); --c2: color-mix(in srgb, var(--r4) 62%, #000); --c3: color-mix(in srgb, var(--r4) 40%, #fff); --glow: color-mix(in srgb, var(--r4) 55%, transparent); --frame: linear-gradient(155deg, var(--c1), var(--c2)); --stub: linear-gradient(var(--c1), var(--c1)); }
html body .card.r5 .card-front.th { --n: 5; --c1: var(--r5); --c2: color-mix(in srgb, var(--r5) 62%, #000); --c3: color-mix(in srgb, var(--r5) 40%, #fff); --glow: color-mix(in srgb, var(--r5) 60%, transparent); --frame: linear-gradient(135deg, #ffe28a, #f5b301 30%, #b7820a 55%, #ffd86b 78%, #f5b301); --stub: linear-gradient(135deg, #ffe28a, #f5b301 55%, #e6a300); }
html body .card.r6 .card-front.th { --n: 6; --c1: var(--r6); --c2: color-mix(in srgb, var(--r6) 62%, #000); --c3: color-mix(in srgb, var(--r6) 40%, #fff); --glow: color-mix(in srgb, var(--r6) 60%, transparent); --frame: linear-gradient(155deg, #ff8a8a, #ff4b4b 38%, #a61420); --stub: linear-gradient(160deg, #ff7a7a, #ff4b4b); }
html body .card.r7 .card-front.th { --n: 7; --c1: var(--r7); --c2: color-mix(in srgb, var(--r7) 62%, #000); --c3: color-mix(in srgb, var(--r7) 40%, #fff); --glow: color-mix(in srgb, var(--r7) 65%, transparent);
  --frame: conic-gradient(from var(--a), #ff5fa2, #ffb454, #f6e05e, #4ade80, #38bdf8, #a78bfa, #ff5fa2); --stub: var(--frame); }
html body .card .card-front.th::before, html body .card .card-front.th::after { content: none; background: none; inset: auto; z-index: auto; clip-path: none; opacity: 1; }
html body .card .card-front.th .th-in { position: absolute; inset: 0; }
html body .card .card-front.th .card-img { position: absolute; flex: none; clip-path: none; background: var(--ivory); overflow: hidden; }
html body .card .card-front.th .card-img::before { display: none; }
html body .card .card-front.th .th-rn { display: none; }
html body .card .card-front.th .card-body { position: absolute; display: flex; flex-direction: column; align-items: stretch; justify-content: flex-start; flex: none; min-height: 0; padding: 0; gap: 0; text-align: left; }
html body .card .card-front.th .card-body::before, html body .card .card-front.th .card-body::after { content: none; width: auto; height: auto; translate: none; rotate: none; box-shadow: none; background: none; inset: auto; }
html body .card .card-front.th h3 { margin: -.24em 0 0; padding-top: .24em; font: 600 1.2em/1.14 var(--font); letter-spacing: -.015em; text-align: inherit; text-wrap: wrap; text-transform: none; -webkit-line-clamp: 2; }
html body .card .card-front.th .desc { margin: 0; font: 400 .8em/1.42 var(--font); color: var(--mu); text-align: inherit; text-transform: none; -webkit-line-clamp: 2; }
html body .card .card-front.th .meta { display: flex; align-items: center; justify-items: normal; gap: .8em; font-size: .76em; line-height: 1.3; color: var(--muted); }
html body .card .card-front.th .tag { display: inline-flex; align-items: center; gap: .45em; min-width: 0; padding: 0; font: inherit; font-weight: 700; letter-spacing: 0; text-transform: none; color: color-mix(in srgb, var(--c1) 80%, var(--text)); white-space: nowrap; }
html body .card .card-front.th .vw { display: inline-flex; align-items: center; gap: .35em; font: inherit; color: inherit; white-space: nowrap; font-variant-numeric: tabular-nums; }
html body .card .card-front.th .vw::before { width: 1.2em; height: 1.2em; opacity: .75; }
/* Comme sur les autres cartes, la description disparaît des petites cartes, puis le nombre de vues */
@container (max-width: 189px) { html body .card .card-front.th .desc { display: none; } }
@container (max-width: 160px) { html body .card .card-front.th .vw { display: none; } }
/* Animations des styles de thème : le cœur de l'électrocardiogramme (durée selon le rang) et le disque de la pochette vinyle au survol */
@keyframes hb { 0%, 100% { transform: scale(1); } 15% { transform: scale(1.28); } 30% { transform: scale(1); } 45% { transform: scale(1.14); } }
@keyframes vspin { to { transform: rotate(360deg); } }
/* moins d'animations (boot.js, docs/animations.md) */ html:where([data-motion="reduce"]) body .card .card-front.th-ecg .th-rn::before { animation: none; }
html body .card .card-front.th-postale { --paper: #f6eedc; --pen: #2a2b3d; }
html body .card .card-front.th-postale { border-radius: .5em; background: repeating-linear-gradient(135deg, var(--c1) 0 .8em, #fff .8em 1.6em, var(--c2) 1.6em 2.4em, #fff 2.4em 3.2em); box-shadow: 0 1.4em 2.4em -1.4em var(--glow); }
html body .card .card-front.th-postale .th-in { inset: .6em; border-radius: .25em; background: repeating-linear-gradient(45deg, rgba(90, 70, 40, .04) 0 1px, transparent 1px 4px), var(--paper); }
html body .card .card-front.th-postale .card-img { position: absolute; left: .9em; right: .9em; top: .9em; height: 14.4em; border: .35em solid #fff; box-shadow: 0 .15em .45em rgba(0, 0, 0, .3); width: auto; }
html body .card .card-front.th-postale .th-in::before { content: ''; position: absolute; z-index: 4; right: 5.2em; top: 13.2em; width: 4.3em; height: 4.3em; border-radius: 50%; border: .15em solid rgba(30, 32, 80, .55); mix-blend-mode: multiply; }
html body .card .card-front.th-postale .th-in::after { content: ''; position: absolute; z-index: 4; right: .7em; top: 14.4em; width: 8em; height: 2.4em; mix-blend-mode: multiply; background: repeating-linear-gradient(180deg, rgba(30, 32, 80, .55) 0 .14em, transparent .14em .6em); }
html body .card .card-front.th-postale { --n: 1; --sw: 4.2em; --sh: 5em; }
html body .card.r2 .card-front.th-postale { --n: 2; }
html body .card.r3 .card-front.th-postale { --n: 3; }
html body .card.r4 .card-front.th-postale { --n: 4; }
html body .card.r5 .card-front.th-postale { --n: 5; }
html body .card.r6 .card-front.th-postale { --n: 6; }
html body .card.r7 .card-front.th-postale { --n: 7; }
html body .card .card-front.th-postale .th-rn { display: flex; flex-direction: column; align-items: center; justify-content: center; position: absolute; z-index: 5; right: 1.1em; top: calc(17.6em - var(--sh)); width: var(--sw); height: var(--sh); color: var(--ink); border: .32em dotted #fff; background: linear-gradient(118deg, transparent 28%, rgba(255, 255, 255, calc(var(--n) * .075)) 44%, rgba(255, 255, 255, calc(var(--n) * .13)) 50%, transparent 62%), var(--stub); box-shadow: 0 .2em .5em rgba(0, 0, 0, .35), 0 0 calc(var(--n) * .25em) var(--glow); }
html body .card .card-front.th-postale .th-rn svg { display: none; }
html body .card .card-front.th-postale .th-rn::before { content: ''; position: absolute; inset: 0; margin: auto; width: calc(var(--sw) * .5); height: calc(var(--sw) * .5); rotate: 45deg; border: .13em solid var(--ink); }
html body .card .card-front.th-postale .th-rn::after { content: attr(data-rn); position: relative; font: 800 calc(var(--sw) * .21)/1 var(--font), sans-serif; }
html body .card .card-front.th-postale .card-body { position: absolute; z-index: 3; left: 1.5em; right: 1.5em; top: 17.7em; bottom: .9em; display: flex; flex-direction: column; gap: .25em; }
html body .card .card-front.th-postale h3 { font: 700 1.85em/.9 'Caveat', var(--font), cursive; color: var(--pen); }
html body .card .card-front.th-postale .desc { color: #4a4a63; font: 500 1.22em/1.1 'Caveat', var(--font), cursive; }
html body .card .card-front.th-postale .meta { margin-top: auto; gap: .8em; padding-top: .4em; border-top: .14em dotted rgba(42, 43, 61, .45); font-size: .82em; color: #5a5a73; text-transform: uppercase; letter-spacing: .08em; }
html body .card .card-front.th-postale .tag { color: var(--c2); font-weight: 800; margin-right: auto; }
html body .card .card-front.th-postale .tag svg { display: none; }
html body .card.r7 .card-front.th-postale { background: repeating-linear-gradient(135deg, #ff4b4b 0 .8em, #fff .8em 1.6em, #ffa23a 1.6em 2.4em, #fff 2.4em 3.2em, #f6e05e 3.2em 4em, #fff 4em 4.8em, #4ade80 4.8em 5.6em, #fff 5.6em 6.4em, #38bdf8 6.4em 7.2em, #fff 7.2em 8em, #a78bfa 8em 8.8em, #fff 8.8em 9.6em); }
html body .card .card-front.th-clap { --slate: #15121b; }
html body .card .card-front.th-clap { border-radius: .7em; background: var(--slate); box-shadow: 0 1.5em 2.6em -1.6em var(--glow), 0 0 0 1px rgba(255, 255, 255, .1); }
html body .card .card-front.th-clap .th-in::before { content: ''; position: absolute; z-index: 4; left: -.4em; top: 1.9em; width: 21em; height: 1.6em; transform-origin: .8em 100%; transform: rotate(-4.5deg); transition: transform .25s cubic-bezier(.3, 1.6, .5, 1); background: repeating-linear-gradient(115deg, var(--ink) 0 1.3em, transparent 1.3em 2.6em), var(--stub); }
html body .card:hover .card-front.th-clap .th-in::before { transform: rotate(0deg); }
html:where([data-motion="reduce"]) body .card .card-front.th-clap .th-in::before { transition: none; }   /* moins d'animations */
html body .card .card-front.th-clap .th-in::after { content: ''; position: absolute; z-index: 3; left: 0; right: 0; top: 3.6em; height: 1.6em; background: repeating-linear-gradient(115deg, transparent 0 1.3em, var(--ink) 1.3em 2.6em), var(--stub); }
html body .card .card-front.th-clap .card-img { position: absolute; left: 1.1em; right: 1.1em; top: 5.7em; height: 10.3em; border: 1px solid rgba(255, 255, 255, .35); width: auto; }
html body .card .card-front.th-clap .card-body { position: absolute; z-index: 3; left: 1.1em; right: 1.1em; top: 16.5em; bottom: 1em; display: flex; flex-direction: column; gap: .3em; }
html body .card .card-front.th-clap h3 { font: 700 1.7em/.9 'Caveat', var(--font), cursive; color: var(--tx); }
html body .card .card-front.th-clap .desc { font: 400 .8em/1.4 'IBM Plex Mono', monospace; }
html body .card .card-front.th-clap .meta { margin-top: auto; display: grid; grid-template-columns: 1.6fr 1fr 1fr; gap: 0; border: 1px solid rgba(255, 255, 255, .4); font: 600 .88em/1.2 'IBM Plex Mono', monospace; color: var(--tx); }
html body .card .card-front.th-clap .tag,
html body .card .card-front.th-clap .vw { display: grid; grid-template-columns: auto 1fr; align-items: center; column-gap: .4em; row-gap: .3em; min-width: 0; padding: .45em .6em .5em; }
html body .card .card-front.th-clap .tag + .vw,
html body .card .card-front.th-clap .vw + .vw { border-left: 1px solid rgba(255, 255, 255, .4); }
html body .card .card-front.th-clap .tag::before,
html body .card .card-front.th-clap .vw::before { grid-column: 1 / -1; font-size: .72em; font-weight: 400; letter-spacing: .16em; color: var(--c1); }
html body .card .card-front.th-clap .tag::before { content: 'SC\C8NE'; }
html body .card .card-front.th-clap .vw:nth-of-type(2)::before { content: 'VUES'; }
html body .card .card-front.th-clap .vw:nth-of-type(3)::before { content: 'LONGUEUR'; }
html body .card .card-front.th-clap .tag { color: var(--tx); }
html body .card .card-front.th-clap .tag svg { width: 1.3em; height: 1.3em; }
html body .card .card-front.th-herbier { border-radius: .3em; background: repeating-linear-gradient(0deg, rgba(120, 100, 60, .05) 0 1px, transparent 1px 3px), radial-gradient(110% 90% at 30% 10%, #f8f1de, #eadfc0); box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 1px rgba(90, 70, 40, .25); }
html body .card .card-front.th-herbier .card-img { position: absolute; left: 2.3em; right: 2.3em; top: 2.1em; height: 15em; rotate: -1.2deg; border: .5em solid #fff; background: #fff; box-shadow: 0 .3em .8em rgba(60, 40, 10, .4); width: auto; }
html body .card .card-front.th-herbier .th-in::before,
html body .card .card-front.th-herbier .th-in::after { content: ''; position: absolute; z-index: 4; width: 4em; height: 1.2em; background: color-mix(in srgb, var(--c1) 50%, #fff); opacity: .85; box-shadow: 0 .05em .15em rgba(0, 0, 0, .25); rotate: -35deg; }
html body .card .card-front.th-herbier .th-in::before { left: 1.1em; top: 2.2em; }
html body .card .card-front.th-herbier .th-in::after { left: 1.1em; top: 16.1em; rotate: 35deg; }
html body .card .card-front.th-herbier { --ts: calc(2.5em + (var(--n) - 1) * .36em); }
html body .card .card-front.th-herbier .th-rn { display: grid; place-items: center; position: absolute; z-index: 4; right: 1.3em; top: calc(19.1em - var(--ts)); width: var(--ts); height: var(--ts); border-radius: 50%; color: #1c1208; border: .12em solid rgba(255, 255, 255, .85); rotate: 8deg; background: radial-gradient(circle at 30% 24%, rgba(255, 255, 255, calc(var(--n) * .1)), transparent 55%), var(--stub); box-shadow: 0 .15em .4em rgba(0, 0, 0, .4), 0 0 calc(var(--n) * .3em) var(--glow), inset 0 0 calc(var(--n) * .12em) rgba(255, 255, 255, .6); }
html body .card .card-front.th-herbier .th-rn svg { display: none; }
html body .card .card-front.th-herbier .th-rn::after { content: attr(data-rn); font: 700 calc(var(--ts) * .4)/1 'EB Garamond', Georgia, serif; }
html body .card .card-front.th-herbier .card-body { position: absolute; z-index: 3; left: 1.8em; right: 1.8em; top: 19.3em; bottom: 1.2em; display: flex; flex-direction: column; gap: .15em; padding: .5em .8em .4em; background: #fffdf6; border: .07em solid #b9a77a; box-shadow: .1em .2em .5em rgba(60, 40, 10, .25); }
html body .card .card-front.th-herbier h3 { padding-right: 2.2em; font: italic 700 1.3em/1.1 'EB Garamond', Georgia, serif; color: #2f3a1d; }
html body .card .card-front.th-herbier .desc { color: #5b5a43; font: .94em/1.3 'EB Garamond', Georgia, serif; }
html body .card .card-front.th-herbier .meta { margin-top: auto; gap: .8em; font: 500 .68em/1.2 'IBM Plex Mono', monospace; color: #6b6a50; }
html body .card .card-front.th-herbier .tag { color: color-mix(in srgb, var(--c2) 80%, #1c1208); text-transform: uppercase; letter-spacing: .08em; }
html body .card .card-front.th-herbier .tag svg { display: none; }
html body .card .card-front.th-carnet { border-radius: .3em .5em .5em .3em; background: radial-gradient(60% 40% at 80% 90%, rgba(150, 100, 40, .18), transparent), radial-gradient(50% 30% at 15% 10%, rgba(150, 100, 40, .14), transparent), #ead9a8; box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 1px rgba(90, 60, 30, .3); }
html body .card .card-front.th-carnet::before { content: ''; position: absolute; left: 2.4em; top: 0; bottom: 0; width: .17em; background: var(--c1); opacity: .85; }
html body .card .card-front.th-carnet::after { content: ''; position: absolute; left: .7em; top: 0; bottom: 0; width: 1em; background: radial-gradient(circle at 50% 50%, rgba(0, 0, 0, .55) 0 .32em, transparent .37em) 0 .8em / 1em 2.4em repeat-y; }
html body .card .card-front.th-carnet .card-img { position: absolute; left: 3.4em; right: 1.4em; top: 1.6em; height: 12.6em; rotate: 1.2deg; border: .45em solid #fbf6e6; box-shadow: .1em .3em .7em rgba(60, 40, 10, .45); width: auto; }
html body .card .card-front.th-carnet .card-img img { filter: sepia(.3) contrast(1.05); }
html body .card .card-front.th-carnet .th-in::before { content: ''; position: absolute; z-index: 4; left: 2.6em; top: 1.1em; width: 4em; height: 1.2em; background: color-mix(in srgb, var(--c1) 45%, #fff 55%); opacity: .8; rotate: -30deg; box-shadow: 0 .05em .15em rgba(0, 0, 0, .25); }
html body .card .card-front.th-carnet .th-in::after { content: ''; position: absolute; z-index: 2; right: calc(.6em - var(--tk) * 1.4em); bottom: calc(.5em - var(--tk) * 1.5em); width: calc(var(--tk) * 10.4em); height: calc(var(--tk) * 9.6em); border-radius: 54% 46% 51% 49% / 47% 55% 45% 53%; pointer-events: none; mix-blend-mode: multiply; background: radial-gradient(ellipse 50% 46% at 52% 50%, rgba(120, 72, 28, .1) 0 60%, rgba(120, 72, 28, .5) 68% 74%, rgba(120, 72, 28, .2) 75% 83%, transparent 90%), radial-gradient(ellipse 26% 22% at 22% 66%, rgba(120, 72, 28, .08) 0 55%, rgba(120, 72, 28, .38) 66% 76%, transparent 86%), radial-gradient(ellipse 30% 36% at 66% 30%, rgba(120, 72, 28, .16), transparent 70%), radial-gradient(circle at 10% 24%, rgba(120, 72, 28, .5) 0 .26em, transparent .34em), radial-gradient(circle at 19% 9%, rgba(120, 72, 28, .36) 0 .15em, transparent .22em), radial-gradient(circle at 3% 46%, rgba(120, 72, 28, .3) 0 .12em, transparent .19em); -webkit-mask: conic-gradient(from 25deg at 52% 50%, #000 0 14%, rgba(0, 0, 0, .5) 22% 30%, #000 38% 58%, rgba(0, 0, 0, .3) 66% 73%, #000 82%); mask: conic-gradient(from 25deg at 52% 50%, #000 0 14%, rgba(0, 0, 0, .5) 22% 30%, #000 38% 58%, rgba(0, 0, 0, .3) 66% 73%, #000 82%); }
html body .card .card-front.th-carnet { --tk: .58; --ts: 4.7em; }
html body .card .card-front.th-carnet .th-rn { display: grid; place-items: center; position: absolute; z-index: 4; right: 1.1em; top: calc(16.6em - var(--ts)); width: var(--ts); height: var(--ts); border: .14em double var(--c2); border-radius: 50%; color: var(--c2); rotate: -14deg; background: radial-gradient(circle at 30% 24%, rgba(255, 255, 255, .36), transparent 52%), color-mix(in srgb, var(--c1) 56%, transparent); box-shadow: 0 0 .88em var(--glow), inset 0 0 .4em rgba(255, 255, 255, .55); }
html body .card .card-front.th-carnet .th-rn svg { display: none; }
html body .card .card-front.th-carnet .th-rn::after { content: 'N° ' attr(data-rn); font: 400 calc(var(--ts) * .2)/1 'Special Elite', monospace; }
html body .card .card-front.th-carnet .card-body { position: absolute; z-index: 3; left: 3.2em; right: 1.4em; top: 15.6em; bottom: 1.3em; display: flex; flex-direction: column; gap: .1em; background: repeating-linear-gradient(0deg, transparent 0 1.55em, rgba(90, 60, 30, .2) 1.55em calc(1.55em + 1px)); }
html body .card .card-front.th-carnet h3 { font: 700 1.86em/1.05 'Caveat', cursive; color: #2b1d0f; }
html body .card .card-front.th-carnet .desc { color: #4a3520; font: 500 1.32em/1.2 'Caveat', cursive; max-width: 11.5em; }
html body .card .card-front.th-carnet .meta { margin-top: auto; gap: .8em; font: 500 .72em/1.2 'Special Elite', monospace; color: #5a4630; }
html body .card .card-front.th-carnet .tag { color: color-mix(in srgb, var(--c2) 80%, #2b1d0f); text-transform: uppercase; }
html body .card .card-front.th-carnet .tag svg { display: none; }
html body .card .card-front.th-damier { border-radius: .4em; background: #f6f6f1; box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 1px rgba(0, 0, 0, .25); }
html body .card .card-front.th-damier::before,
html body .card .card-front.th-damier::after { content: ''; position: absolute; left: 0; right: 0; height: 1.2em; z-index: 2; background: repeating-conic-gradient(#111 0 25%, #fff 0 50%) 0 0 / 1.2em 1.2em; }
html body .card .card-front.th-damier::before { top: 0; }
html body .card .card-front.th-damier::after { bottom: 0; }
html body .card .card-front.th-damier .card-img { position: absolute; left: 0; right: 0; top: 1.2em; height: 15.8em; clip-path: polygon(0 0, 100% 0, 100% 86%, 0 100%); width: auto; }
html body .card .card-front.th-damier .th-in::before { content: ''; position: absolute; left: 0; right: 0; top: 14.5em; height: 3.6em; background: var(--stub); clip-path: polygon(0 62%, 100% 0, 100% 28%, 0 90%); }
html body .card .card-front.th-damier .th-rn { display: block; position: absolute; z-index: 4; right: 1em; top: 12.6em; width: 6.8em; height: 6.8em; border-radius: 50%; background: radial-gradient(circle, #14110a 0 60%, transparent 61%), conic-gradient(from 225deg, #fff 0 calc(var(--n) * 38.57deg), rgba(255, 255, 255, .2) calc(var(--n) * 38.57deg) 270deg, transparent 270deg); box-shadow: 0 .3em .7em rgba(0, 0, 0, .5); }
html body .card .card-front.th-damier .th-rn svg { display: none; }
html body .card .card-front.th-damier .th-rn::before { content: ''; position: absolute; left: 50%; top: 50%; width: 2.6em; height: .16em; margin-top: -.08em; background: #ff3b2f; transform-origin: 0 50%; rotate: calc(135deg + var(--n) * 38.57deg); border-radius: .1em; box-shadow: 0 0 .4em #ff3b2f; }
html body .card .card-front.th-damier .th-rn::after { content: attr(data-rn); position: absolute; left: 0; right: 0; bottom: 1em; text-align: center; font: 800 .8em/1 'Barlow Condensed', sans-serif; color: #fff; }
html body .card .card-front.th-damier .card-body { position: absolute; z-index: 3; left: 1.4em; right: 8.3em; top: 18.1em; bottom: 1.7em; display: flex; flex-direction: column; gap: .2em; }
html body .card .card-front.th-damier h3 { font: italic 900 1.45em/1 'Barlow Condensed', sans-serif; text-transform: uppercase; color: #111; }
html body .card .card-front.th-damier .desc { color: #444; font-size: .91em; }
html body .card .card-front.th-damier .meta { position: absolute; left: 0; right: 0; bottom: 0; margin: 0; gap: .8em; font: 600 .91em/1.2 'Barlow Condensed', sans-serif; letter-spacing: .04em; color: #333; }
html body .card .card-front.th-damier .tag { color: #111; text-transform: uppercase; letter-spacing: .1em; }
html body .card .card-front.th-damier .tag svg { display: none; }
html body .card.r7 .card-front.th-damier .th-in::before { background: linear-gradient(100deg, #ff5fa2, #ffb454, #f6e05e, #4ade80, #38bdf8, #a78bfa); }
html body .card .card-front.th-lettre { --paper: #efe3c8; --brown: #3a2a1a; --soft: #6a5a45; --wax: color-mix(in srgb, var(--c2) 85%, #200); --bd: transparent 0, transparent 100%; }
html body .card .card-front.th-lettre { border-radius: .3em; background: repeating-linear-gradient(45deg, rgba(90, 70, 40, .04) 0 1px, transparent 1px 4px), var(--paper); box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 1px rgba(0, 0, 0, .14); }
html body .card .card-front.th-lettre .card-img { position: absolute; z-index: 1; left: 1.7em; right: 1.7em; top: 2em; height: 15em; rotate: -1deg; background: #fff; border: .35em solid #fff; box-shadow: 0 0 0 .1em rgba(110, 80, 40, .5), .1em .3em .6em rgba(0, 0, 0, .3); width: auto; }
html body .card .card-front.th-lettre .th-in::before { content: ''; position: absolute; z-index: 3; left: 0; right: 0; top: 14.6em; bottom: 0; background: linear-gradient(var(--paper), color-mix(in srgb, var(--paper) 86%, #8a6a30)); clip-path: polygon(0 0, 50% 27%, 100% 0, 100% 100%, 0 100%); }
html body .card .card-front.th-lettre .th-in::after { content: ''; position: absolute; z-index: 2; left: 0; right: 0; top: 14.3em; bottom: 0; background: rgba(60, 40, 10, .4); filter: blur(.25em); clip-path: polygon(0 0, 50% 27%, 100% 0, 100% 100%, 0 100%); }
html body .card .card-front.th-lettre::before { content: ''; position: absolute; z-index: 3; left: 0; right: 0; top: 13.2em; height: 6.1em; pointer-events: none; background: linear-gradient(19.9deg, var(--bd)) 0 0 / 50% 100% no-repeat, linear-gradient(-19.9deg, var(--bd)) 100% 0 / 50% 100% no-repeat; }
html body .card.r3 .card-front.th-lettre,
html body .card.r4 .card-front.th-lettre { --bd: transparent 0 4.34em, var(--c1) 4.34em 4.56em, transparent 4.56em; }
html body .card.r5 .card-front.th-lettre { --bd: transparent 0 4.34em, var(--c1) 4.34em 4.56em, var(--paper) 4.56em 4.78em, var(--c1) 4.78em 4.92em, transparent 4.92em; }
html body .card.r6 .card-front.th-lettre { --bd: transparent 0 4.34em, var(--c1) 4.34em 4.76em, var(--paper) 4.76em 4.98em, var(--c1) 4.98em 5.12em, transparent 5.12em; }
html body .card.r7 .card-front.th-lettre { --bd: transparent 0 4.34em, var(--c1) 4.34em 4.76em, var(--paper) 4.76em 4.98em, var(--c1) 4.98em 5.32em, var(--paper) 5.32em 5.54em, var(--c1) 5.54em 5.68em, transparent 5.68em; }
html body .card .card-front.th-lettre .th-rn { display: grid; place-items: center; position: absolute; z-index: 5; left: 50%; top: 15.9em; width: 4.8em; height: 4.8em; margin-left: -2.4em; color: color-mix(in srgb, var(--wax) 55%, #000); border-radius: 47% 53% 50% 50% / 52% 48% 55% 45%; background: radial-gradient(circle at 35% 30%, color-mix(in srgb, var(--wax) 60%, #fff), var(--wax) 55%, color-mix(in srgb, var(--wax) 70%, #000)); box-shadow: 0 .3em .7em rgba(0, 0, 0, .45), inset 0 0 0 .3em rgba(0, 0, 0, .14), inset 0 .1em .3em rgba(255, 255, 255, .3); }
html body .card .card-front.th-lettre .th-rn svg { display: none; }
html body .card .card-front.th-lettre .th-rn::before { content: ''; position: absolute; inset: 0; margin: auto; width: 2.1em; height: 2.1em; rotate: 45deg; border: .13em solid currentColor; opacity: .7; }
html body .card .card-front.th-lettre .th-rn::after { content: attr(data-rn); position: relative; font: 700 .85em/1 'Playfair Display', Georgia, serif; }
html body .card.r5 .card-front.th-lettre .th-rn { color: #4a3000; background: radial-gradient(circle at 34% 28%, #fff4bd, #f6c33a 38%, #c8921c 70%, #8a5c08); box-shadow: 0 .3em .8em rgba(120, 80, 0, .55), 0 0 1em rgba(245, 179, 1, .45), inset 0 0 0 .3em rgba(120, 70, 0, .22), inset 0 .12em .3em rgba(255, 255, 255, .7); }
html body .card.r6 .card-front.th-lettre .th-rn { color: #ffe3e3; background: radial-gradient(circle at 34% 28%, #ff9a9a, #f5212f 42%, #b50d1b 72%, #6a0610); box-shadow: 0 .3em .8em rgba(150, 0, 20, .55), 0 0 1em rgba(255, 75, 75, .5), inset 0 0 0 .3em rgba(80, 0, 10, .25), inset 0 .12em .3em rgba(255, 255, 255, .45); }
html body .card.r7 .card-front.th-lettre .th-rn { color: #2a1040; background: radial-gradient(circle at 30% 24%, rgba(255, 255, 255, .95), rgba(255, 255, 255, 0) 34%), conic-gradient(from var(--a), #ff5fa2, #ffb454, #f6e05e, #4ade80, #38bdf8, #a78bfa, #ff5fa2); box-shadow: 0 .3em .9em rgba(255, 106, 213, .6), 0 0 1.4em rgba(255, 255, 255, .55), inset 0 0 0 .3em rgba(255, 255, 255, .35), inset 0 .15em .35em rgba(255, 255, 255, .85); }
html body .card.r7 .card-front.th-lettre .th-rn::before { opacity: .85; border-color: #fff; box-shadow: 0 0 .3em rgba(255, 255, 255, .8); }
html body .card.r7 .card-front.th-lettre .th-rn::after { color: #fff; text-shadow: 0 0 .25em rgba(60, 20, 90, .85), 0 .05em .1em rgba(60, 20, 90, .8); }
html body .card .card-front.th-lettre .card-body { position: absolute; z-index: 4; left: 1.8em; right: 1.8em; top: 21.2em; bottom: 1.1em; display: flex; flex-direction: column; gap: .15em; text-align: center; }
html body .card .card-front.th-lettre h3 { font: 700 1.22em/1.1 'Playfair Display', Georgia, serif; font-style: italic; color: var(--brown); }
html body .card .card-front.th-lettre .desc { color: var(--soft); text-align: inherit; font: italic .84em/1.3 'Playfair Display', Georgia, serif; -webkit-line-clamp: 1; }
html body .card .card-front.th-lettre .meta { margin-top: auto; justify-content: center; gap: 1em; font-size: .74em; color: var(--soft); }
html body .card .card-front.th-lettre .tag { color: color-mix(in srgb, var(--wax) 85%, #000); text-transform: uppercase; letter-spacing: .14em; font-weight: 600; }
html body .card .card-front.th-lettre .tag svg { display: none; }
html body .card .card-front.th-clap { border-radius: 1.6em; }
html body .card .card-front.th-clap .th-in::before,
html body .card .card-front.th-clap .th-in::after { height: 1.1em; border-radius: .55em; }
html body .card .card-front.th-clap .th-in::before { left: .5em; width: 19em; top: 1.4em; transform-origin: .7em 100%; }
html body .card .card-front.th-clap .th-in::after { left: .8em; right: .8em; top: 2.55em; }
html body .card .card-front.th-clap .card-img { left: 1.5em; right: 1.5em; top: 4.7em; height: 13.6em; border: 0; border-radius: 1.2em; outline: .12em dashed rgba(255, 255, 255, .55); outline-offset: .35em; width: auto; }
html body .card .card-front.th-clap .card-body { top: 19.7em; left: 1.5em; right: 1.5em; bottom: 1.2em; }
html body .card .card-front.th-clap .meta { display: flex; align-items: center; gap: .6em; border: 0; }
html body .card .card-front.th-clap .tag,
html body .card .card-front.th-clap .vw { display: inline-flex; padding: .45em .9em .5em; border-radius: 2em; }
html body .card .card-front.th-clap .tag::before,
html body .card .card-front.th-clap .vw:nth-of-type(n)::before { content: none; }
html body .card .card-front.th-clap .tag { background: var(--stub); }
html body .card .card-front.th-clap .tag { color: var(--ink); }
html body .card .card-front.th-clap .tag svg { display: none; }
html body .card .card-front.th-clap .tag + .vw,
html body .card .card-front.th-clap .vw + .vw { border-left: 0; }
html body .card .card-front.th-clap .vw { border: 1px solid rgba(255, 255, 255, .45); margin-left: auto; }
html body .card .card-front.th-clap h3 { font-size: 1.6em; }
html body .card .card-front.th-polaroi { --paper: #f6efe2; --ink: #241c14; --ink2: #6a5a48; }
html body .card .card-front.th-polaroi { border-radius: .9em; background: var(--paper); box-shadow: 0 1.4em 2.4em -1.4em rgba(0, 0, 0, .65), 0 0 0 1px rgba(0, 0, 0, .1); }
html body .card .card-front.th-polaroi .th-in { display: flex; flex-direction: column; padding: .95em .95em .8em; color: var(--ink); }
html body .card .card-front.th-polaroi .card-img { flex: 0 0 61%; border-radius: .3em; box-shadow: 0 .15em .45em rgba(0, 0, 0, .3); }
html body .card .card-front.th-polaroi .card-img img { filter: saturate(.94) contrast(1.04); }
html body .card .card-front.th-polaroi .card-img::after { content: ''; position: absolute; inset: 0; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .12); }
html body .card .card-front.th-polaroi .th-in::before { content: ''; position: absolute; z-index: 5; top: -.35em; left: 50%; width: 6.4em; height: 1.7em; margin-left: -3.2em; transform: rotate(-3deg); background: color-mix(in srgb, var(--c3) 55%, rgba(255, 255, 255, .6)); opacity: .88; box-shadow: 0 .1em .3em rgba(0, 0, 0, .22); clip-path: polygon(0 0, 100% 0, 98% 25%, 100% 50%, 98% 75%, 100% 100%, 0 100%, 2% 75%, 0 50%, 2% 25%); }
html body .card .card-front.th-polaroi .th-rn { display: grid; place-items: center; position: absolute; z-index: 5; right: 1.15em; top: 13.4em; width: 3.9em; height: 3.9em; border-radius: 50%; transform: rotate(-12deg); background: var(--paper); color: var(--c2); border: .17em solid var(--c1); box-shadow: inset 0 0 0 .22em var(--paper), inset 0 0 0 .3em color-mix(in srgb, var(--c1) 55%, transparent), 0 .25em .55em rgba(0, 0, 0, .3); }
html body .card .card-front.th-polaroi .th-rn svg { width: 1.9em; height: 1.9em; fill: color-mix(in srgb, var(--c1) 30%, transparent); stroke: var(--c2); }
html body .card .card-front.th-polaroi .card-body { flex: 1; min-height: 0; display: flex; flex-direction: column; gap: .3em; padding: .95em .2em 0; }
html body .card .card-front.th-polaroi h3 { font-size: 1.2em; font-weight: 700; color: var(--ink); }
html body .card .card-front.th-polaroi .desc { color: var(--ink2); font: italic .86em/1.4 Georgia, 'Times New Roman', serif; }
html body .card .card-front.th-polaroi .meta { margin-top: auto; gap: .9em; padding-top: .5em; border-top: 1px dashed rgba(0, 0, 0, .25); color: var(--ink2); }
html body .card .card-front.th-polaroi .tag { color: var(--c2); text-transform: uppercase; letter-spacing: .1em; font-size: .9em; }
html body .card .card-front.th-polaroi .tag svg { display: none; }
html body .card.r3 .card-front.th-polaroi,
html body .card.r4 .card-front.th-polaroi { box-shadow: 0 1.4em 2.4em -1.4em rgba(0, 0, 0, .6), 0 0 0 .14em var(--c1); }
html body .card.r5 .card-front.th-polaroi { box-shadow: 0 1.4em 2.4em -1.2em var(--glow), 0 0 0 .16em #e6ab00, 0 0 0 .2em rgba(255, 226, 138, .8); }
html body .card.r6 .card-front.th-polaroi { box-shadow: 0 0 0 .16em var(--c1); }
html body .card.r7 .card-front.th-polaroi { border: .17em solid transparent; background: linear-gradient(var(--paper), var(--paper)) padding-box, var(--frame) border-box; box-shadow: 0 0 2.4em -.4em rgba(255, 106, 213, .7); }
html body .card .card-front.th-livre { --lea: color-mix(in srgb, var(--c2) 78%, #120c10); --gold: linear-gradient(135deg, #fff1b5, #e2b13c 40%, #a9741a 60%, #f6d774); }
html body .card .card-front.th-livre { border-radius: .5em .9em .9em .5em; box-shadow: 0 1.4em 2.4em -1.4em var(--glow); background: repeating-linear-gradient(45deg, rgba(255, 255, 255, .035) 0 1px, transparent 1px 3px), linear-gradient(160deg, color-mix(in srgb, var(--c1) 30%, var(--lea)), var(--lea)); }
html body .card .card-front.th-livre::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 2.2em; background: linear-gradient(90deg, rgba(0, 0, 0, .45), rgba(255, 255, 255, .14) 55%, rgba(0, 0, 0, .25) 78%, transparent); }
html body .card .card-front.th-livre::after { content: ''; position: absolute; right: 0; top: .5em; bottom: .5em; width: .7em; border-radius: 0 .3em .3em 0; background: repeating-linear-gradient(180deg, #f3ead2 0 1px, #cdbf9f 1px 2px); }
html body .card .card-front.th-livre .th-in::before { content: ''; position: absolute; left: 2.9em; right: 1.5em; top: .9em; bottom: .9em; border: .14em solid; border-image: var(--gold) 1; }
html body .card .card-front.th-livre .card-img { position: absolute; left: 3.6em; right: 2.2em; top: 1.9em; height: 12.6em; box-shadow: 0 0 0 .18em #d9ac48, 0 0 0 .32em rgba(0, 0, 0, .35); width: auto; }
html body .card .card-front.th-livre .th-rn { display: grid; place-items: center; position: absolute; z-index: 4; left: 10.7em; bottom: 1.5em; width: 3.2em; height: 3.2em; margin-left: -1.6em; border-radius: 50%; background: var(--gold); box-shadow: 0 0 0 .18em rgba(0, 0, 0, .25), 0 .2em .5em rgba(0, 0, 0, .4); }
html body .card .card-front.th-livre .th-rn svg { width: 1.6em; height: 1.6em; stroke: #3b2a08; fill: rgba(255, 255, 255, .35); filter: none; }
html body .card .card-front.th-livre .card-body { position: absolute; z-index: 3; left: 3.6em; right: 2.2em; top: 15.5em; bottom: 5em; display: flex; flex-direction: column; align-items: center; gap: .3em; text-align: center; }
html body .card .card-front.th-livre h3 { font: 700 1.02em/1.15 'Cinzel', 'Sora', serif; text-transform: uppercase; letter-spacing: .09em; background: var(--gold); -webkit-background-clip: text; background-clip: text; color: transparent; }
html body .card .card-front.th-livre .desc { text-align: center; font-size: .74em; color: rgba(255, 244, 220, .8); }
html body .card .card-front.th-livre .meta { margin-top: auto; justify-content: center; gap: .9em; color: rgba(255, 244, 220, .75); }
html body .card .card-front.th-livre .tag { color: #f6d774; text-transform: uppercase; letter-spacing: .14em; }
html body .card .card-front.th-livre .tag svg { display: none; }
html body .card .card-front.th-vinyle { --paper: #f4f1ea; }
html body .card .card-front.th-vinyle { border-radius: .5em; background: var(--paper); box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 1px rgba(0, 0, 0, .12); }
html body .card .card-front.th-vinyle .th-in { display: flex; flex-direction: column; }
html body .card .card-front.th-vinyle .card-img { flex: 0 0 19.6em; box-shadow: inset 0 -2em 3em -2em rgba(0, 0, 0, .25); }
html body .card .card-front.th-vinyle .card-body { flex: none; height: 5.8em; padding: .8em 7.9em 0 1.2em; overflow: hidden; display: flex; flex-direction: column; gap: .25em; }
html body .card .card-front.th-vinyle h3 { font: 700 1.02em/1.12 'Space Grotesk', 'Sora', sans-serif; color: var(--ink); }
html body .card .card-front.th-vinyle .desc { color: #6b665c; font-size: .72em; }
html body .card .card-front.th-vinyle .meta { position: absolute; left: 1.2em; right: 1.2em; bottom: .9em; font-size: 1em; display: flex; gap: .9em; padding-top: .5em; border-top: .1em solid var(--ink); color: var(--ink); }
html body .card .card-front.th-vinyle .tag,
html body .card .card-front.th-vinyle .vw { font-size: .74em; font-weight: 600; }
html body .card .card-front.th-vinyle .tag { color: var(--ink); text-transform: uppercase; letter-spacing: .08em; font-weight: 800; margin-right: auto; }
html body .card .card-front.th-vinyle .tag svg { display: none; }
html body .card .card-front.th-vinyle .th-in::after { content: ''; position: absolute; right: .9em; top: 16.4em; width: 7.5em; height: 7.5em; border-radius: 50%; box-shadow: 0 .3em .8em rgba(0, 0, 0, .5); background: conic-gradient(from 20deg, transparent 0 20%, rgba(255, 255, 255, .2) 25%, transparent 30% 70%, rgba(255, 255, 255, .16) 75%, transparent 80%), repeating-radial-gradient(circle at 50% 50%, #0d0d12 0 .1em, #1a1a22 .1em .2em); }
html body .card:hover .card-front.th-vinyle .th-in::after { animation: vspin 2.5s linear infinite; }
html body .card .card-front.th-vinyle .th-rn { display: grid; place-items: center; position: absolute; z-index: 4; left: 13.95em; top: 18.75em; width: 2.8em; height: 2.8em; border-radius: 50%; background: var(--stub); box-shadow: 0 0 0 .3em #0d0d12; }
html body .card .card-front.th-vinyle .th-rn svg { width: 1.4em; height: 1.4em; stroke: var(--ink); fill: rgba(255, 255, 255, .4); filter: none; }
html body .card .card-front.th-bd { --paper: #fff8e6; --star: polygon(50.0% 0.0%, 59.1% 10.0%, 71.7% 5.0%, 75.6% 17.9%, 89.1% 18.8%, 86.9% 32.2%, 98.7% 38.9%, 91.0% 50.0%, 98.7% 61.1%, 86.9% 67.8%, 89.1% 81.2%, 75.6% 82.1%, 71.7% 95.0%, 59.1% 90.0%, 50.0% 100.0%, 40.9% 90.0%, 28.3% 95.0%, 24.4% 82.1%, 10.9% 81.2%, 13.1% 67.8%, 1.3% 61.1%, 9.0% 50.0%, 1.3% 38.9%, 13.1% 32.2%, 10.9% 18.8%, 24.4% 17.9%, 28.3% 5.0%, 40.9% 10.0%); }
html body .card .card-front.th-bd { border-radius: .3em; box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 .22em var(--ink); background: repeating-conic-gradient(from 0deg at 30% 62%, color-mix(in srgb, var(--c1) 28%, var(--paper)) 0 6deg, var(--paper) 6deg 12deg); }
html body .card .card-front.th-bd .card-img { position: absolute; left: 1em; right: 1.4em; top: 1em; height: 14.2em; border: .3em solid var(--ink); box-shadow: .4em .4em 0 var(--ink); width: auto; }
html body .card .card-front.th-bd .card-img::after { content: ''; position: absolute; inset: 0; mix-blend-mode: multiply; opacity: .28; background: radial-gradient(circle, rgba(0, 0, 0, .6) 0 .09em, transparent .11em) 0 0 / .34em .34em; }
html body .card .card-front.th-bd .th-rn { display: grid; place-content: center; justify-items: center; gap: .1em; position: absolute; z-index: 5; right: .5em; top: 10.6em; width: 6.6em; height: 6.6em; transform: rotate(8deg); background: var(--ink); clip-path: var(--star); }
html body .card .card-front.th-bd .th-rn::before { content: ''; position: absolute; inset: .4em; background: var(--stub); clip-path: var(--star); }
html body .card .card-front.th-bd .th-rn svg { position: relative; z-index: 2; width: 1.4em; height: 1.4em; stroke: var(--ink); fill: rgba(255, 255, 255, .45); filter: none; }
html body .card .card-front.th-bd .th-rn::after { content: attr(data-name); position: relative; z-index: 2; font: 400 .95em/1 'Bangers', 'Sora', cursive; letter-spacing: .04em; text-transform: uppercase; color: var(--ink); }
html body .card .card-front.th-bd .card-body { position: absolute; z-index: 3; left: 1.3em; right: 1.3em; top: 13.7em; bottom: 1em; display: flex; flex-direction: column; gap: .5em; }
html body .card .card-front.th-bd h3 { display: -webkit-box; width: fit-content; max-width: 74%; margin: 0 0 0 -.3em; padding: .3em .6em .2em; background: #ffd91a; border: .2em solid var(--ink); box-shadow: .25em .25em 0 var(--ink); font: 400 1.4em/1.02 'Bangers', 'Sora', cursive; letter-spacing: .03em; text-transform: uppercase; color: var(--ink); transform: rotate(-1.5deg); }
html body .card .card-front.th-bd .desc { margin-top: .8em; padding: .5em .8em; background: #fffef5; border: .16em solid var(--ink); }
html body .card .card-front.th-bd .desc { color: var(--ink); font: 600 .78em/1.35 'Sora', sans-serif; }
html body .card .card-front.th-bd .meta { margin-top: auto; gap: .9em; padding-top: .35em; border-top: .22em solid var(--ink); font-size: .74em; font-weight: 700; color: var(--ink); }
html body .card .card-front.th-bd .tag { display: none; }
html body .card .card-front.th-livre { --lea: color-mix(in srgb, color-mix(in srgb, var(--c2) 62%, var(--c1)) 72%, #33231a); --lea-hi: color-mix(in srgb, var(--lea) 80%, #fff); --grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.1' numOctaves='2' seed='7'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .3 -.1'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23a)'/%3E%3C/svg%3E"); }
html body .card .card-front.th-livre { border-radius: .5em .9em .9em .5em; background: var(--grain), radial-gradient(130% 70% at 25% 0%, rgba(255, 255, 255, .22), transparent 62%), linear-gradient(160deg, var(--lea-hi), var(--lea) 45%, color-mix(in srgb, var(--lea) 78%, #000)); box-shadow: 0 1.4em 2.4em -1.4em var(--glow), inset 0 0 0 .08em rgba(0, 0, 0, .3), inset 0 .12em .1em rgba(255, 255, 255, .25), inset 0 -.2em .6em rgba(0, 0, 0, .25); }
html body .card .card-front.th-livre::before { width: 2.5em; background: linear-gradient(90deg, transparent 0 1.55em, rgba(0, 0, 0, .4) 1.55em 1.7em, rgba(255, 255, 255, .18) 1.7em 1.82em, transparent 1.82em), linear-gradient(90deg, rgba(0, 0, 0, .32), rgba(255, 255, 255, .1) 45%, rgba(0, 0, 0, .12) 70%, transparent); }
html body .card .card-front.th-livre .th-in { z-index: 1; }
html body .card .card-front.th-livre::after { z-index: 0; content: ''; position: absolute; inset: 0; width: auto; height: auto; border-radius: inherit; pointer-events: none; background: none; mix-blend-mode: soft-light; }
html body .card.r5 .card-front.th-livre::after { background: linear-gradient(120deg, transparent 30%, rgba(255, 226, 138, .75) 48%, transparent 66%); }
html body .card.r6 .card-front.th-livre::after { background: radial-gradient(120% 70% at 50% 100%, rgba(255, 90, 40, .75), transparent 70%); }
html body .card.r7 .card-front.th-livre::after { background: conic-gradient(from var(--a), rgba(255, 95, 162, .85), rgba(255, 180, 84, .85), rgba(246, 224, 94, .8), rgba(74, 222, 128, .8), rgba(56, 189, 248, .85), rgba(167, 139, 250, .85), rgba(255, 95, 162, .85)); }
html body .card .card-front.th-livre .th-in::before { left: 3.05em; right: .95em; top: .75em; bottom: .75em; border: .13em dashed color-mix(in srgb, var(--lea) 40%, #f3e6c6); border-radius: .35em; border-image: none; opacity: .3; }
html body .card .card-front.th-livre .th-in::after { content: attr(data-rn); position: absolute; left: calc(3.75 * var(--tu)); right: calc(1.65 * var(--tu)); top: calc(18.1 * var(--tu)); height: calc(6 * var(--tu)); z-index: 0; text-align: center; font: 700 calc(6 * var(--tu))/calc(6 * var(--tu)) 'Cinzel', 'Playfair Display', serif; color: rgba(255, 255, 255, .075); text-shadow: none; pointer-events: none; }
html body .card .card-front.th-livre .card-img { z-index: 1; left: 3.75em; right: 1.65em; top: 1.75em; height: 12.7em; border-radius: .15em; box-shadow: 0 0 0 .2em color-mix(in srgb, var(--lea) 60%, #000), 0 0 0 .3em rgba(0, 0, 0, .3), .05em .1em 0 .3em rgba(255, 255, 255, .15), inset 0 .1em .5em rgba(0, 0, 0, .6); width: auto; }
html body .card .card-front.th-livre .card-body { z-index: 2; left: 3.75em; right: 1.65em; top: 15.5em; bottom: 1.5em; gap: .3em; }
html body .card .card-front.th-livre h3 { font: 700 1.02em/1.15 'Cinzel', 'Sora', serif; text-transform: uppercase; letter-spacing: .09em; background: none; -webkit-background-clip: border-box; background-clip: border-box; color: #fff; text-shadow: 0 .07em .1em rgba(0, 0, 0, .6), 0 -.03em 0 rgba(0, 0, 0, .25); }
html body .card .card-front.th-livre .desc,
html body .card .card-front.th-livre .desc { text-align: center; font-size: .8em; font-weight: 500; color: rgba(255, 255, 255, .92); text-shadow: 0 .07em .1em rgba(0, 0, 0, .6); }
html body .card .card-front.th-livre .meta { margin-top: auto; width: 100%; justify-content: space-between; padding: .55em 0 0; position: relative; color: #fff; font-weight: 600; text-shadow: 0 .07em .1em rgba(0, 0, 0, .6); }
html body .card .card-front.th-livre .meta::before { content: ''; position: absolute; left: 0; right: 0; top: 0; height: .14em; background: linear-gradient(rgba(0, 0, 0, .4) 0 50%, rgba(255, 255, 255, .5) 50%); border-radius: .1em; }
html body .card .card-front.th-livre .tag { color: #fff; text-transform: uppercase; letter-spacing: .12em; font-size: .9em; }
html body .card .card-front.th-livre .tag svg,
html body .card .card-front.th-livre .th-rn { display: none; }
html body .card .card-front.th-livre .vw { font-weight: 700; }
html body .card .card-front.th-livre .vw svg { opacity: 1; }
html body .card .card-front.th-bd { background: repeating-conic-gradient(from 0deg at 50% 38%, color-mix(in srgb, var(--c1) 85%, #fff) 0 7deg, color-mix(in srgb, var(--c2) 85%, #000) 7deg 14deg); }
html body .card.r1 .card-front.th-bd { background: repeating-conic-gradient(from 0deg at 50% 38%, #9aa6b8 0 7deg, #6a7689 7deg 14deg); }
html body .card.r5 .card-front.th-bd { background: repeating-conic-gradient(from 0deg at 50% 38%, #ffe27a 0 7deg, #d29a12 7deg 14deg); }
html body .card.r7 .card-front.th-bd { background: repeating-conic-gradient(from 0deg at 50% 38%, #ff6fae 0 7.5deg, #ffb454 7.5deg 15deg, #f6e05e 15deg 22.5deg, #4ade80 22.5deg 30deg, #38bdf8 30deg 37.5deg, #a78bfa 37.5deg 45deg); }
html body .card .card-front.th-bd .card-img::after { opacity: .1; }
html body .card .card-front.th-bd .th-rn { width: 4.1em; height: 4.1em; right: .6em; top: 12.3em; }
html body .card .card-front.th-bd .th-rn svg { display: none; }
html body .card .card-front.th-bd .th-rn::after { content: attr(data-rn); font: 400 1.5em/1 'Bangers', 'Sora', cursive; letter-spacing: .03em; }
html body .card .card-front.th-bd .card-body { top: 14.4em; bottom: .9em; gap: .55em; }
html body .card .card-front.th-bd h3 { min-height: 0; }
html body .card .card-front.th-bd .desc { position: relative; margin-top: auto; box-sizing: border-box; height: 6em; padding: .7em .95em; background: #fffbe8; border: .18em solid var(--ink); border-radius: .3em; box-shadow: .3em .3em 0 var(--c1); outline: .08em dashed rgba(26, 26, 26, .35); outline-offset: -.42em; overflow: hidden; -webkit-line-clamp: 3; }
html body .card .card-front.th-bd .desc::after { content: ''; position: absolute; right: 0; bottom: 0; width: 3.4em; height: 2.2em; pointer-events: none; background: radial-gradient(circle, rgba(0, 0, 0, .28) 0 .1em, transparent .12em) 0 0 / .36em .36em; -webkit-mask: linear-gradient(135deg, transparent 45%, #000); mask: linear-gradient(135deg, transparent 45%, #000); }
html body .card .card-front.th-bd .meta { margin-top: 0; display: flex; justify-content: space-between; align-items: center; padding: .35em .7em; background: #fffbe8; border: .16em solid var(--ink); border-radius: .25em; box-shadow: .22em .22em 0 var(--ink); font-size: .74em; }
html body .card .card-front.th-bd .tag { display: inline-flex; }
html body .card .card-front.th-bd .tag svg { display: none; }
html body .card .card-front.th-bd .tag { color: var(--ink); font: 400 1.25em/1 'Bangers', 'Sora', cursive; letter-spacing: .06em; text-transform: uppercase; }
html body .card .card-front.th-polaroi { --paper: color-mix(in srgb, var(--c1) 16%, #f6efe2); --wash: radial-gradient(circle at 92% 6%, color-mix(in srgb, var(--c1) 52%, transparent), transparent 55%), radial-gradient(circle at 4% 98%, color-mix(in srgb, var(--c1) 42%, transparent), transparent 52%); }
html body .card .card-front.th-polaroi { background: var(--wash), linear-gradient(var(--paper), var(--paper)); box-shadow: 0 1.4em 2.4em -1.4em rgba(0, 0, 0, .65), 0 0 0 .22em var(--c1); }
html body .card.r3 .card-front.th-polaroi,
html body .card.r4 .card-front.th-polaroi,
html body .card.r5 .card-front.th-polaroi,
html body .card.r6 .card-front.th-polaroi { box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 .22em var(--c1); }
html body .card.r7 .card-front.th-polaroi { border: .22em solid transparent; background: var(--wash) padding-box, linear-gradient(var(--paper), var(--paper)) padding-box, var(--frame) border-box; box-shadow: 0 0 2.4em -.4em rgba(255, 106, 213, .7); }
html body .card .card-front.th-polaroi::before { content: ''; position: absolute; inset: 0; background: color-mix(in srgb, var(--c2) 70%, #3a3020); opacity: .2; -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 280' preserveAspectRatio='none'%3E%3Cpath fill='none' stroke='black' stroke-width='.7' d='M50 60L51 62L50 65L49 66L47 67L45 68L44 69L43 70L41 70L40 70L39 70L37 70L36 70L34 69L32 69L30 67L30 64L31 62L32 60L33 58L33 57L33 55L33 53L34 51L35 49L37 49L38 48L40 48L42 48L43 48L45 50L45 52L46 54L46 56L47 57L49 58ZM60 60L62 65L60 69L58 73L54 75L51 76L48 78L46 80L43 81L40 81L37 80L34 79L31 79L27 79L23 77L21 74L20 69L22 64L24 60L26 57L27 54L26 50L26 46L28 42L30 39L33 37L37 36L40 36L43 36L47 37L49 40L51 44L51 48L52 51L54 54L57 56ZM70 60L72 67L71 74L66 79L61 82L56 84L52 87L49 89L44 91L40 91L36 90L32 89L27 89L21 88L15 86L11 81L10 73L13 66L16 60L19 55L20 51L19 45L20 39L22 33L25 28L30 26L35 24L40 23L45 23L50 25L54 30L56 36L57 43L58 47L61 50L66 54ZM81 60L83 70L81 79L75 85L68 89L62 92L56 96L51 99L46 101L40 101L34 100L29 98L22 98L15 98L7 95L2 88L0 78L4 68L9 60L12 54L13 48L13 40L13 31L15 23L20 18L27 15L33 13L40 11L47 11L53 14L58 20L61 29L62 37L64 43L68 47L75 52ZM91 60L94 72L91 83L84 92L75 97L67 100L61 105L54 109L47 112L40 111L33 110L26 108L18 108L8 107L-1 103L-8 95L-9 82L-5 70L1 60L5 52L7 45L6 35L6 24L9 14L16 7L23 3L32 1L40 -1L49 -1L57 2L63 10L66 21L68 31L70 38L75 44L83 50ZM101 60L105 74L101 88L93 98L82 104L73 109L65 114L57 119L49 122L40 122L32 119L23 117L14 117L2 116L-10 112L-18 102L-19 87L-15 72L-7 60L-2 51L-0 42L-1 30L-1 17L3 5L11 -3L20 -8L30 -11L40 -13L50 -13L60 -9L68 0L72 13L73 25L76 34L82 41L92 49ZM111 60L116 77L112 93L101 104L89 111L78 117L69 122L60 128L50 132L40 132L30 129L20 127L9 127L-4 126L-18 121L-27 109L-29 91L-24 74L-15 60L-9 49L-7 39L-8 25L-8 10L-3 -4L6 -14L17 -20L28 -23L40 -25L52 -26L64 -21L72 -10L77 5L79 19L82 30L89 38L100 47ZM121 60L126 79L122 97L110 111L96 119L83 125L73 131L63 138L52 143L40 142L29 139L18 137L5 136L-10 135L-26 129L-37 116L-39 96L-33 76L-23 60L-16 48L-13 36L-15 21L-14 3L-9 -13L1 -25L14 -31L27 -35L40 -38L54 -38L67 -33L77 -20L82 -3L84 14L88 26L96 34L109 45ZM131 60L137 81L132 102L119 117L103 126L89 133L77 140L66 148L53 153L40 153L27 149L15 146L0 146L-17 145L-34 138L-47 123L-49 100L-42 78L-31 60L-22 46L-20 33L-22 16L-21 -4L-15 -22L-4 -35L10 -42L25 -47L40 -50L56 -50L70 -44L81 -30L87 -11L90 8L94 21L103 31L118 43ZM177 95L176 97L175 98L174 99L173 100L171 101L170 102L168 102L167 102L165 103L163 104L161 105L159 104L157 103L157 101L157 99L157 97L157 96L156 95L155 94L155 92L156 91L157 89L158 88L159 87L161 86L163 85L165 86L167 87L168 88L169 89L170 90L172 90L175 90L177 92L177 93ZM189 95L186 98L184 101L182 103L180 105L178 107L174 108L171 109L168 110L165 111L161 113L157 114L152 113L149 111L148 107L149 103L149 100L149 97L147 95L146 92L145 89L146 86L148 84L151 81L154 79L157 77L161 76L165 77L168 79L171 82L173 84L176 85L180 85L184 86L188 88L189 91ZM200 95L197 100L194 104L191 107L188 111L184 114L179 115L174 116L170 117L165 119L159 122L152 124L146 123L141 119L140 113L140 107L141 102L141 99L138 95L136 91L135 86L137 82L140 78L144 74L148 71L153 68L159 66L165 68L170 71L174 75L177 78L181 79L187 80L194 81L200 85L202 90ZM212 95L208 101L203 106L199 111L195 116L190 120L184 122L177 123L171 124L165 127L157 131L148 133L139 132L133 126L131 119L132 111L133 105L132 100L129 95L126 89L125 83L128 77L132 72L137 67L142 63L149 59L157 57L165 59L172 63L177 69L181 73L186 74L195 75L204 76L211 81L214 88ZM224 95L218 103L213 109L208 115L203 121L196 126L188 129L180 130L173 131L165 135L155 140L144 143L133 141L125 134L123 124L124 115L125 107L124 101L120 95L116 88L115 80L118 73L124 66L130 60L137 54L145 49L155 47L165 49L173 55L179 62L185 67L192 69L202 69L214 72L223 78L226 86ZM236 95L229 104L222 112L216 120L210 126L203 132L193 135L183 137L174 139L165 143L154 148L140 152L126 150L117 142L114 130L116 118L118 109L116 102L111 95L107 86L105 77L109 68L115 61L123 53L131 46L141 40L153 38L165 40L175 47L182 56L188 61L197 64L209 64L223 67L234 74L238 84ZM247 95L240 106L232 115L225 124L218 132L209 138L198 142L186 144L176 146L165 151L152 157L136 162L120 160L109 150L106 136L108 122L110 112L108 103L102 95L97 85L96 74L99 64L107 55L116 46L125 38L137 31L151 28L165 31L177 40L185 49L192 56L202 58L217 59L233 63L246 71L251 83ZM259 95L250 107L241 118L234 128L226 137L215 144L202 149L190 151L177 153L165 159L150 166L131 171L113 169L101 158L97 142L99 126L102 114L100 105L93 95L87 84L86 71L90 59L99 49L109 40L120 30L133 22L149 19L165 22L179 32L188 43L196 50L208 53L224 54L243 58L257 67L263 81ZM271 95L261 109L251 121L242 132L233 142L221 151L207 155L193 158L179 161L165 167L148 175L127 181L107 178L93 166L89 148L91 130L94 116L92 106L84 95L77 82L76 68L81 55L90 43L102 33L114 22L129 13L147 9L165 13L180 24L191 36L200 45L213 48L231 49L252 53L269 64L275 79ZM82 215L81 217L81 218L79 219L78 220L76 221L75 222L74 223L72 225L70 226L67 226L65 225L64 223L63 221L63 220L61 219L60 218L59 217L58 215L58 213L59 212L59 210L60 208L61 207L63 206L66 206L68 207L70 208L72 208L73 208L76 207L79 207L81 208L82 210L82 212L82 213ZM93 215L93 218L91 221L89 223L85 225L82 226L80 229L78 232L75 235L70 237L65 237L61 234L58 230L57 227L55 224L53 223L50 221L47 218L47 215L47 212L47 209L48 205L50 202L52 199L57 197L62 198L66 200L70 201L73 201L77 200L82 199L87 199L91 201L93 205L94 208L94 212ZM105 215L104 220L102 224L98 227L93 230L89 232L85 235L82 240L77 245L70 248L62 248L56 244L53 238L50 233L48 229L44 226L40 223L36 220L35 215L35 210L36 205L37 200L39 195L44 191L50 189L58 189L65 192L70 194L75 195L80 193L88 191L96 192L102 194L105 199L106 205L105 210ZM117 215L116 221L113 227L107 232L101 235L95 238L90 242L86 248L79 255L70 259L60 259L52 254L47 246L44 239L41 234L36 230L30 226L25 221L23 215L23 209L25 202L26 196L29 189L35 183L44 180L54 181L63 184L70 187L76 188L84 186L94 184L104 184L112 188L117 194L118 202L117 209ZM128 215L127 223L123 230L117 236L108 240L101 244L95 249L90 257L82 265L70 271L57 270L47 263L41 254L37 245L33 239L27 234L20 229L14 223L11 215L12 207L13 199L15 191L19 182L26 175L37 171L50 172L61 177L70 181L78 181L87 179L100 176L113 176L123 181L128 189L130 198L129 207ZM140 215L138 224L134 233L126 240L116 245L107 249L101 256L94 265L84 275L70 282L55 281L43 273L35 261L31 251L26 243L18 238L9 232L2 224L-0 215L0 206L2 196L4 186L9 175L17 167L30 162L46 164L59 169L70 174L79 174L91 171L105 168L121 168L134 174L140 184L141 195L141 205ZM152 215L150 226L145 236L135 244L124 250L114 255L106 263L98 274L86 285L70 293L52 292L38 282L29 269L24 257L19 248L10 242L-1 235L-9 226L-12 215L-11 204L-9 193L-7 181L-2 169L8 158L24 153L42 155L58 161L70 167L81 168L94 164L111 160L130 160L144 167L152 179L153 192L153 204ZM163 215L161 227L155 239L145 248L132 255L120 261L111 269L102 282L88 295L70 304L50 303L34 292L24 277L18 263L11 253L1 246L-11 238L-20 227L-24 215L-23 202L-21 190L-17 176L-12 162L-0 150L17 145L38 147L56 154L70 160L82 161L98 157L117 152L138 152L155 160L163 174L165 188L164 202ZM175 215L173 229L166 242L154 252L139 260L126 266L116 276L106 290L91 306L70 315L47 314L29 302L18 284L11 269L4 258L-7 249L-21 240L-31 229L-36 215L-35 201L-32 186L-28 171L-22 156L-9 142L11 136L34 138L54 146L70 153L84 154L101 149L123 144L147 145L165 153L175 168L177 185L176 201ZM182 250L181 251L180 252L180 253L180 255L180 257L179 258L178 259L176 259L175 259L174 257L173 257L172 256L171 256L170 255L169 254L168 253L168 251L167 250L167 248L167 247L168 245L169 244L171 244L172 244L173 244L174 244L175 242L176 241L178 241L179 242L180 243L181 245L181 246L182 247L182 249ZM189 250L187 252L186 254L185 257L185 260L185 263L184 267L181 269L178 269L175 267L173 265L171 263L169 262L167 261L165 260L163 258L162 255L161 253L160 250L159 247L159 243L160 240L163 239L166 238L169 239L171 239L173 237L175 235L178 233L181 233L183 234L185 236L187 239L188 242L189 244L189 247ZM196 250L194 254L191 257L190 260L190 264L190 270L188 275L184 278L179 278L175 276L172 272L169 270L166 268L163 267L159 265L157 262L155 258L154 254L152 250L151 245L151 240L153 236L157 233L162 233L166 233L169 233L172 231L175 227L179 224L183 224L187 226L190 229L192 234L194 237L196 241L196 246ZM202 250L200 255L197 259L195 263L195 269L195 276L192 284L187 288L181 288L175 284L170 280L167 276L163 274L158 272L154 270L151 266L149 261L147 256L145 250L143 244L143 237L146 231L151 227L158 227L163 228L168 227L171 224L175 220L180 216L186 215L192 218L195 223L198 228L201 233L203 239L204 244ZM209 250L206 256L202 261L201 267L200 274L200 283L197 292L190 297L182 297L175 293L169 287L164 283L160 280L154 278L149 275L145 270L142 263L140 257L137 250L135 242L135 234L138 226L145 222L153 221L161 222L166 221L170 218L175 212L182 207L189 206L196 210L200 216L204 223L207 229L210 236L211 243ZM216 250L212 257L208 263L206 270L205 279L205 290L201 300L193 307L184 307L175 302L168 294L162 289L157 286L150 283L144 280L139 273L136 266L133 258L130 250L127 240L127 230L131 221L139 216L149 215L158 216L164 216L169 211L175 204L183 199L192 198L200 202L206 209L210 217L214 225L217 233L218 241ZM223 250L218 259L213 266L211 273L210 283L210 296L205 309L197 316L185 316L175 310L167 302L160 296L153 292L146 289L139 284L133 277L129 269L126 260L122 250L119 239L119 227L123 217L133 211L145 209L155 211L162 210L168 205L175 197L184 190L195 189L204 194L211 202L216 212L220 221L224 230L225 240ZM230 250L224 260L219 268L216 277L215 288L215 303L210 317L200 326L187 326L175 319L166 309L158 302L150 298L142 295L133 289L127 281L122 272L119 261L115 250L111 237L111 224L116 212L127 205L140 204L152 205L160 204L167 198L175 189L186 182L198 180L208 186L216 195L222 206L227 217L231 227L232 239ZM237 250L231 261L224 270L221 280L221 293L219 310L214 326L203 335L188 335L175 327L165 317L156 309L147 304L138 300L128 294L121 285L116 274L112 263L107 250L103 236L103 220L109 207L121 199L136 198L149 199L158 198L166 192L175 182L187 173L200 172L212 178L221 188L227 201L233 212L238 224L239 237Z'/%3E%3C/svg%3E") center / 100% 100% no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 280' preserveAspectRatio='none'%3E%3Cpath fill='none' stroke='black' stroke-width='.7' d='M50 60L51 62L50 65L49 66L47 67L45 68L44 69L43 70L41 70L40 70L39 70L37 70L36 70L34 69L32 69L30 67L30 64L31 62L32 60L33 58L33 57L33 55L33 53L34 51L35 49L37 49L38 48L40 48L42 48L43 48L45 50L45 52L46 54L46 56L47 57L49 58ZM60 60L62 65L60 69L58 73L54 75L51 76L48 78L46 80L43 81L40 81L37 80L34 79L31 79L27 79L23 77L21 74L20 69L22 64L24 60L26 57L27 54L26 50L26 46L28 42L30 39L33 37L37 36L40 36L43 36L47 37L49 40L51 44L51 48L52 51L54 54L57 56ZM70 60L72 67L71 74L66 79L61 82L56 84L52 87L49 89L44 91L40 91L36 90L32 89L27 89L21 88L15 86L11 81L10 73L13 66L16 60L19 55L20 51L19 45L20 39L22 33L25 28L30 26L35 24L40 23L45 23L50 25L54 30L56 36L57 43L58 47L61 50L66 54ZM81 60L83 70L81 79L75 85L68 89L62 92L56 96L51 99L46 101L40 101L34 100L29 98L22 98L15 98L7 95L2 88L0 78L4 68L9 60L12 54L13 48L13 40L13 31L15 23L20 18L27 15L33 13L40 11L47 11L53 14L58 20L61 29L62 37L64 43L68 47L75 52ZM91 60L94 72L91 83L84 92L75 97L67 100L61 105L54 109L47 112L40 111L33 110L26 108L18 108L8 107L-1 103L-8 95L-9 82L-5 70L1 60L5 52L7 45L6 35L6 24L9 14L16 7L23 3L32 1L40 -1L49 -1L57 2L63 10L66 21L68 31L70 38L75 44L83 50ZM101 60L105 74L101 88L93 98L82 104L73 109L65 114L57 119L49 122L40 122L32 119L23 117L14 117L2 116L-10 112L-18 102L-19 87L-15 72L-7 60L-2 51L-0 42L-1 30L-1 17L3 5L11 -3L20 -8L30 -11L40 -13L50 -13L60 -9L68 0L72 13L73 25L76 34L82 41L92 49ZM111 60L116 77L112 93L101 104L89 111L78 117L69 122L60 128L50 132L40 132L30 129L20 127L9 127L-4 126L-18 121L-27 109L-29 91L-24 74L-15 60L-9 49L-7 39L-8 25L-8 10L-3 -4L6 -14L17 -20L28 -23L40 -25L52 -26L64 -21L72 -10L77 5L79 19L82 30L89 38L100 47ZM121 60L126 79L122 97L110 111L96 119L83 125L73 131L63 138L52 143L40 142L29 139L18 137L5 136L-10 135L-26 129L-37 116L-39 96L-33 76L-23 60L-16 48L-13 36L-15 21L-14 3L-9 -13L1 -25L14 -31L27 -35L40 -38L54 -38L67 -33L77 -20L82 -3L84 14L88 26L96 34L109 45ZM131 60L137 81L132 102L119 117L103 126L89 133L77 140L66 148L53 153L40 153L27 149L15 146L0 146L-17 145L-34 138L-47 123L-49 100L-42 78L-31 60L-22 46L-20 33L-22 16L-21 -4L-15 -22L-4 -35L10 -42L25 -47L40 -50L56 -50L70 -44L81 -30L87 -11L90 8L94 21L103 31L118 43ZM177 95L176 97L175 98L174 99L173 100L171 101L170 102L168 102L167 102L165 103L163 104L161 105L159 104L157 103L157 101L157 99L157 97L157 96L156 95L155 94L155 92L156 91L157 89L158 88L159 87L161 86L163 85L165 86L167 87L168 88L169 89L170 90L172 90L175 90L177 92L177 93ZM189 95L186 98L184 101L182 103L180 105L178 107L174 108L171 109L168 110L165 111L161 113L157 114L152 113L149 111L148 107L149 103L149 100L149 97L147 95L146 92L145 89L146 86L148 84L151 81L154 79L157 77L161 76L165 77L168 79L171 82L173 84L176 85L180 85L184 86L188 88L189 91ZM200 95L197 100L194 104L191 107L188 111L184 114L179 115L174 116L170 117L165 119L159 122L152 124L146 123L141 119L140 113L140 107L141 102L141 99L138 95L136 91L135 86L137 82L140 78L144 74L148 71L153 68L159 66L165 68L170 71L174 75L177 78L181 79L187 80L194 81L200 85L202 90ZM212 95L208 101L203 106L199 111L195 116L190 120L184 122L177 123L171 124L165 127L157 131L148 133L139 132L133 126L131 119L132 111L133 105L132 100L129 95L126 89L125 83L128 77L132 72L137 67L142 63L149 59L157 57L165 59L172 63L177 69L181 73L186 74L195 75L204 76L211 81L214 88ZM224 95L218 103L213 109L208 115L203 121L196 126L188 129L180 130L173 131L165 135L155 140L144 143L133 141L125 134L123 124L124 115L125 107L124 101L120 95L116 88L115 80L118 73L124 66L130 60L137 54L145 49L155 47L165 49L173 55L179 62L185 67L192 69L202 69L214 72L223 78L226 86ZM236 95L229 104L222 112L216 120L210 126L203 132L193 135L183 137L174 139L165 143L154 148L140 152L126 150L117 142L114 130L116 118L118 109L116 102L111 95L107 86L105 77L109 68L115 61L123 53L131 46L141 40L153 38L165 40L175 47L182 56L188 61L197 64L209 64L223 67L234 74L238 84ZM247 95L240 106L232 115L225 124L218 132L209 138L198 142L186 144L176 146L165 151L152 157L136 162L120 160L109 150L106 136L108 122L110 112L108 103L102 95L97 85L96 74L99 64L107 55L116 46L125 38L137 31L151 28L165 31L177 40L185 49L192 56L202 58L217 59L233 63L246 71L251 83ZM259 95L250 107L241 118L234 128L226 137L215 144L202 149L190 151L177 153L165 159L150 166L131 171L113 169L101 158L97 142L99 126L102 114L100 105L93 95L87 84L86 71L90 59L99 49L109 40L120 30L133 22L149 19L165 22L179 32L188 43L196 50L208 53L224 54L243 58L257 67L263 81ZM271 95L261 109L251 121L242 132L233 142L221 151L207 155L193 158L179 161L165 167L148 175L127 181L107 178L93 166L89 148L91 130L94 116L92 106L84 95L77 82L76 68L81 55L90 43L102 33L114 22L129 13L147 9L165 13L180 24L191 36L200 45L213 48L231 49L252 53L269 64L275 79ZM82 215L81 217L81 218L79 219L78 220L76 221L75 222L74 223L72 225L70 226L67 226L65 225L64 223L63 221L63 220L61 219L60 218L59 217L58 215L58 213L59 212L59 210L60 208L61 207L63 206L66 206L68 207L70 208L72 208L73 208L76 207L79 207L81 208L82 210L82 212L82 213ZM93 215L93 218L91 221L89 223L85 225L82 226L80 229L78 232L75 235L70 237L65 237L61 234L58 230L57 227L55 224L53 223L50 221L47 218L47 215L47 212L47 209L48 205L50 202L52 199L57 197L62 198L66 200L70 201L73 201L77 200L82 199L87 199L91 201L93 205L94 208L94 212ZM105 215L104 220L102 224L98 227L93 230L89 232L85 235L82 240L77 245L70 248L62 248L56 244L53 238L50 233L48 229L44 226L40 223L36 220L35 215L35 210L36 205L37 200L39 195L44 191L50 189L58 189L65 192L70 194L75 195L80 193L88 191L96 192L102 194L105 199L106 205L105 210ZM117 215L116 221L113 227L107 232L101 235L95 238L90 242L86 248L79 255L70 259L60 259L52 254L47 246L44 239L41 234L36 230L30 226L25 221L23 215L23 209L25 202L26 196L29 189L35 183L44 180L54 181L63 184L70 187L76 188L84 186L94 184L104 184L112 188L117 194L118 202L117 209ZM128 215L127 223L123 230L117 236L108 240L101 244L95 249L90 257L82 265L70 271L57 270L47 263L41 254L37 245L33 239L27 234L20 229L14 223L11 215L12 207L13 199L15 191L19 182L26 175L37 171L50 172L61 177L70 181L78 181L87 179L100 176L113 176L123 181L128 189L130 198L129 207ZM140 215L138 224L134 233L126 240L116 245L107 249L101 256L94 265L84 275L70 282L55 281L43 273L35 261L31 251L26 243L18 238L9 232L2 224L-0 215L0 206L2 196L4 186L9 175L17 167L30 162L46 164L59 169L70 174L79 174L91 171L105 168L121 168L134 174L140 184L141 195L141 205ZM152 215L150 226L145 236L135 244L124 250L114 255L106 263L98 274L86 285L70 293L52 292L38 282L29 269L24 257L19 248L10 242L-1 235L-9 226L-12 215L-11 204L-9 193L-7 181L-2 169L8 158L24 153L42 155L58 161L70 167L81 168L94 164L111 160L130 160L144 167L152 179L153 192L153 204ZM163 215L161 227L155 239L145 248L132 255L120 261L111 269L102 282L88 295L70 304L50 303L34 292L24 277L18 263L11 253L1 246L-11 238L-20 227L-24 215L-23 202L-21 190L-17 176L-12 162L-0 150L17 145L38 147L56 154L70 160L82 161L98 157L117 152L138 152L155 160L163 174L165 188L164 202ZM175 215L173 229L166 242L154 252L139 260L126 266L116 276L106 290L91 306L70 315L47 314L29 302L18 284L11 269L4 258L-7 249L-21 240L-31 229L-36 215L-35 201L-32 186L-28 171L-22 156L-9 142L11 136L34 138L54 146L70 153L84 154L101 149L123 144L147 145L165 153L175 168L177 185L176 201ZM182 250L181 251L180 252L180 253L180 255L180 257L179 258L178 259L176 259L175 259L174 257L173 257L172 256L171 256L170 255L169 254L168 253L168 251L167 250L167 248L167 247L168 245L169 244L171 244L172 244L173 244L174 244L175 242L176 241L178 241L179 242L180 243L181 245L181 246L182 247L182 249ZM189 250L187 252L186 254L185 257L185 260L185 263L184 267L181 269L178 269L175 267L173 265L171 263L169 262L167 261L165 260L163 258L162 255L161 253L160 250L159 247L159 243L160 240L163 239L166 238L169 239L171 239L173 237L175 235L178 233L181 233L183 234L185 236L187 239L188 242L189 244L189 247ZM196 250L194 254L191 257L190 260L190 264L190 270L188 275L184 278L179 278L175 276L172 272L169 270L166 268L163 267L159 265L157 262L155 258L154 254L152 250L151 245L151 240L153 236L157 233L162 233L166 233L169 233L172 231L175 227L179 224L183 224L187 226L190 229L192 234L194 237L196 241L196 246ZM202 250L200 255L197 259L195 263L195 269L195 276L192 284L187 288L181 288L175 284L170 280L167 276L163 274L158 272L154 270L151 266L149 261L147 256L145 250L143 244L143 237L146 231L151 227L158 227L163 228L168 227L171 224L175 220L180 216L186 215L192 218L195 223L198 228L201 233L203 239L204 244ZM209 250L206 256L202 261L201 267L200 274L200 283L197 292L190 297L182 297L175 293L169 287L164 283L160 280L154 278L149 275L145 270L142 263L140 257L137 250L135 242L135 234L138 226L145 222L153 221L161 222L166 221L170 218L175 212L182 207L189 206L196 210L200 216L204 223L207 229L210 236L211 243ZM216 250L212 257L208 263L206 270L205 279L205 290L201 300L193 307L184 307L175 302L168 294L162 289L157 286L150 283L144 280L139 273L136 266L133 258L130 250L127 240L127 230L131 221L139 216L149 215L158 216L164 216L169 211L175 204L183 199L192 198L200 202L206 209L210 217L214 225L217 233L218 241ZM223 250L218 259L213 266L211 273L210 283L210 296L205 309L197 316L185 316L175 310L167 302L160 296L153 292L146 289L139 284L133 277L129 269L126 260L122 250L119 239L119 227L123 217L133 211L145 209L155 211L162 210L168 205L175 197L184 190L195 189L204 194L211 202L216 212L220 221L224 230L225 240ZM230 250L224 260L219 268L216 277L215 288L215 303L210 317L200 326L187 326L175 319L166 309L158 302L150 298L142 295L133 289L127 281L122 272L119 261L115 250L111 237L111 224L116 212L127 205L140 204L152 205L160 204L167 198L175 189L186 182L198 180L208 186L216 195L222 206L227 217L231 227L232 239ZM237 250L231 261L224 270L221 280L221 293L219 310L214 326L203 335L188 335L175 327L165 317L156 309L147 304L138 300L128 294L121 285L116 274L112 263L107 250L103 236L103 220L109 207L121 199L136 198L149 199L158 198L166 192L175 182L187 173L200 172L212 178L221 188L227 201L233 212L238 224L239 237Z'/%3E%3C/svg%3E") center / 100% 100% no-repeat; pointer-events: none; }
html body .card .card-front.th-polaroi .card-img { box-shadow: 0 0 0 .3em var(--c1), 0 .15em .45em rgba(0, 0, 0, .3); }
html body .card .card-front.th-polaroi .th-in::before { background: color-mix(in srgb, var(--c1) 38%, rgba(240, 228, 170, .92)); opacity: .95; }
html body .card .card-front.th-polaroi .th-rn svg { display: none; }
html body .card .card-front.th-polaroi .th-rn { background: var(--paper); }
html body .card .card-front.th-polaroi .th-rn::after { content: attr(data-rn); font: 700 1.2em/1 'Cinzel', 'Playfair Display', serif; color: color-mix(in srgb, var(--c2) 85%, #000); }
html body .card .card-front.th-polaroi .tag { color: color-mix(in srgb, var(--c2) 85%, #000); font-weight: 700; }
html body .card .card-front.th-vinyle .th-in { display: block; padding: 0; }
html body .card .card-front.th-vinyle .card-img { position: absolute; left: 0; top: 0; width: 100%; height: 19.6em; }
html body .card .card-front.th-vinyle .card-body { position: absolute; left: 0; top: 19.6em; width: 100%; }
html body .card .card-front.th-polaroi .th-in { display: block; padding: 0; }
html body .card .card-front.th-polaroi .card-img { position: absolute; left: .95em; top: .95em; width: 18.1em; height: 16em; flex: none; }
html body .card .card-front.th-polaroi .card-body { position: absolute; left: 1.15em; right: 1.15em; top: 17.9em; bottom: .8em; padding: 0; display: flex; flex-direction: column; gap: .3em; }
html body .card .card-front.th-quotid { --paper: #f2ead4; --ik: #1b1812; }
html body .card .card-front.th-quotid { border-radius: .3em; background: repeating-linear-gradient(0deg, rgba(60, 50, 30, .04) 0 1px, transparent 1px 3px), var(--paper); box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 1px rgba(0, 0, 0, .18); }
html body .card .card-front.th-quotid::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: .7em; background: var(--stub); z-index: 1; }
html body .card .card-front.th-quotid::before { content: ''; position: absolute; left: 0; right: 0; bottom: .7em; height: 6em; background: var(--stub); opacity: .24; -webkit-mask: linear-gradient(0deg, #000, transparent); mask: linear-gradient(0deg, #000, transparent); pointer-events: none; }
html body .card .card-front.th-quotid .th-in::before { content: 'Le WikiCollect'; position: absolute; left: 0; right: 0; top: calc(.5 * var(--tu)); text-align: center; font: 400 calc(2.4 * var(--tu))/1.1 'UnifrakturCook', serif; color: var(--ik); }
html body .card .card-front.th-quotid .th-in::after { content: 'N° ' attr(data-rn) ' · Édition du jour · 1 €'; position: absolute; left: calc(1.1 * var(--tu)); right: calc(1.1 * var(--tu)); top: calc(3.7 * var(--tu)); padding: calc(.3 * var(--tu)) 0; border-top: calc(.16 * var(--tu)) solid var(--ik); border-bottom: calc(.05 * var(--tu)) solid var(--ik); text-align: center; font: 700 calc(.66 * var(--tu))/1 'Barlow Condensed', sans-serif; letter-spacing: .18em; text-transform: uppercase; color: var(--ik); background: color-mix(in srgb, var(--c1) 30%, transparent); }
html body .card .card-front.th-quotid .card-img { left: 1.1em; right: 1.1em; top: 5.2em; height: 14.2em; background: #aaa; width: auto; }
html body .card .card-front.th-quotid .card-img img { filter: grayscale(.45) contrast(1.04) brightness(1.03); }
html body .card .card-front.th-quotid .card-img::after { content: ''; position: absolute; inset: 0; mix-blend-mode: multiply; background: radial-gradient(circle, rgba(0, 0, 0, .16) 0 .09em, transparent .11em) 0 0 / .32em .32em; }
html body .card .card-front.th-quotid .card-img::before { content: ''; display: block; position: absolute; inset: 0; z-index: 3; border: .4em solid transparent; border-image: var(--stub) 1; pointer-events: none; }
html body .card .card-front.th-quotid .card-body { left: 0; right: 0; top: 0; bottom: 0; padding: 19.8em 1.1em 3.3em; gap: .2em; }
html body .card .card-front.th-quotid h3 { font: 900 1.34em/1.02 'Playfair Display', serif; color: var(--ik); letter-spacing: -.01em; }
html body .card .card-front.th-quotid .desc { font: italic 400 .78em/1.3 'Playfair Display', serif; color: #4a463c; -webkit-line-clamp: 1; }
html body .card .card-front.th-quotid .meta { position: absolute; left: calc(1.1 * var(--tu)); right: calc(1.1 * var(--tu)); bottom: calc(1.2 * var(--tu)); padding-top: .35em; border-top: .06em solid var(--ik); font: 700 .74em 'Barlow Condensed', sans-serif; letter-spacing: .12em; text-transform: uppercase; color: var(--ik); justify-content: space-between; z-index: 2; }
html body .card .card-front.th-quotid .tag { color: var(--ik); background: none; padding: 0; }
html body .card .card-front.th-quotid .card-body::after { order: 2; content: ''; flex: 1 1 0; min-height: 0; overflow: hidden; margin-top: .25em; opacity: .5; background: repeating-linear-gradient(180deg, #8d877b 0 .1em, transparent .1em .4em); -webkit-mask-image: linear-gradient(90deg, #000 0 31%, transparent 31% 34.5%, #000 34.5% 65.5%, transparent 65.5% 69%, #000 69% 100%); mask-image: linear-gradient(90deg, #000 0 31%, transparent 31% 34.5%, #000 34.5% 65.5%, transparent 65.5% 69%, #000 69% 100%); }
html body .card.r7 .card-front.th-quotid::after,
html body .card.r7 .card-front.th-quotid::before { background: linear-gradient(90deg, #ff5fa2, #ffb454, #f6e05e, #4ade80, #38bdf8, #a78bfa); }
html body .card.r7 .card-front.th-quotid .card-img::before { border-image: linear-gradient(90deg, #ff5fa2, #ffb454, #f6e05e, #4ade80, #38bdf8, #a78bfa) 1; }
html body .card .card-front.th-hexagon { --eiffel: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 140 336'%3E%3Cpath d='M7.5 330.0 L10.6 324.0 L13.6 318.0 L16.5 312.0 L19.1 306.0 L21.7 300.0 L24.1 294.0 L26.4 288.0 L28.6 282.0 L30.6 276.0 L32.6 270.0 L34.5 264.0 L36.2 258.0 L37.9 252.0 L39.5 246.0 L41.0 240.0 L42.4 234.0 L43.8 228.0 L45.1 222.0 L46.3 216.0 L47.5 210.0 L48.6 204.0 L49.6 198.0 L50.6 192.0 L51.5 186.0 L52.4 180.0 L53.3 174.0 L54.1 168.0 L54.8 162.0 L55.6 156.0 L56.2 150.0 L56.9 144.0 L57.5 138.0 L58.1 132.0 L58.7 126.0 L59.2 120.0 L59.7 114.0 L60.2 108.0 L60.6 102.0 L61.0 96.0 L61.5 90.0 L61.8 84.0 L62.2 78.0 L62.6 72.0 L62.9 66.0 L63.2 60.0 L63.5 54.0 L63.9 50.0 L64.3 46.0 L64.8 42.0 L65.2 38.0 L65.6 34.0 L66.0 30.0 L66.5 26.0 L66.9 22.0 L67.3 18.0 L67.7 14.0 L68.1 10.0 L68.6 6.0 L70.0 0.0 L71.4 6.0 L71.9 10.0 L72.3 14.0 L72.7 18.0 L73.1 22.0 L73.5 26.0 L74.0 30.0 L74.4 34.0 L74.8 38.0 L75.2 42.0 L75.7 46.0 L76.1 50.0 L76.5 54.0 L76.8 60.0 L77.1 66.0 L77.4 72.0 L77.8 78.0 L78.2 84.0 L78.5 90.0 L79.0 96.0 L79.4 102.0 L79.8 108.0 L80.3 114.0 L80.8 120.0 L81.3 126.0 L81.9 132.0 L82.5 138.0 L83.1 144.0 L83.8 150.0 L84.4 156.0 L85.2 162.0 L85.9 168.0 L86.7 174.0 L87.6 180.0 L88.5 186.0 L89.4 192.0 L90.4 198.0 L91.4 204.0 L92.5 210.0 L93.7 216.0 L94.9 222.0 L96.2 228.0 L97.6 234.0 L99.0 240.0 L100.5 246.0 L102.1 252.0 L103.8 258.0 L105.5 264.0 L107.4 270.0 L109.4 276.0 L111.4 282.0 L113.6 288.0 L115.9 294.0 L118.3 300.0 L120.9 306.0 L123.5 312.0 L126.4 318.0 L129.4 324.0 L132.5 330.0 L107.5 330.0 L107.2 324.5 L106.2 319.1 L104.6 313.9 L102.5 309.0 L99.8 304.4 L96.5 300.3 L92.8 296.7 L88.8 293.6 L84.4 291.2 L79.7 289.4 L74.9 288.4 L70.0 288.0 L65.1 288.4 L60.3 289.4 L55.6 291.2 L51.3 293.6 L47.2 296.7 L43.5 300.3 L40.2 304.4 L37.5 309.0 L35.4 313.9 L33.8 319.1 L32.8 324.5 L32.5 330.0Z M32.0 270.0 h76.0 v5.0 h-76.0 Z M45.5 213.0 h49.0 v4.0 h-49.0 Z M59.5 53.0 h21.0 v4.0 h-21.0 Z M64.8 36.0 h10.4 v14.0 h-10.4 Z M69.2 0.0 h1.6 v20 h-1.6 Z'/%3E%3C/svg%3E"); --bleu: #1f4aa8; --blanc: #fff; --rouge: #d22b3a; --tri: linear-gradient(90deg, #1f4aa8 0 33.34%, #fff 33.34% 66.67%, #d22b3a 66.67%); }
html body .card .card-front.th-hexagon .th-rn { display: block; position: absolute; z-index: 6; }
html body .card .card-front.th-hexagon .th-rn svg { display: none; }
html body .card .card-front.th-hexagon { border-radius: .4em; background: linear-gradient(180deg, #e9eef8, #f8f5ec 55%); box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 1px rgba(30, 50, 110, .25); }
html body .card .card-front.th-hexagon::after { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: .6em; background: var(--tri); z-index: 1; }
html body .card .card-front.th-hexagon::before { content: ''; position: absolute; left: 0; right: 0; bottom: .6em; height: 9.5em; background: var(--stub); opacity: .3; -webkit-mask: linear-gradient(0deg, #000, transparent); mask: linear-gradient(0deg, #000, transparent); pointer-events: none; }
html body .card .card-front.th-hexagon .th-in::before { content: ''; position: absolute; left: calc(2 * var(--tu)); right: calc(2 * var(--tu)); top: calc(2.3 * var(--tu)); height: calc(16.6 * var(--tu)); background: var(--stub); clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%); }
html body .card .card-front.th-hexagon .card-img { left: 2.28em; right: 2.28em; top: 2.58em; height: 16.04em; background: #111; clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%); width: auto; }
html body .card .card-front.th-hexagon .th-in::after { content: ''; position: absolute; right: calc(-.9 * var(--tu)); bottom: calc(.25 * var(--tu)); width: calc(8.4 * var(--tu)); height: calc(18.4 * var(--tu)); background: var(--bleu); opacity: .13; -webkit-mask: var(--eiffel) center bottom / 100% 100% no-repeat; mask: var(--eiffel) center bottom / 100% 100% no-repeat; }
html body .card .card-front.th-hexagon .th-rn { left: 1.1em; right: 1.1em; top: .9em; height: 1.25em; }
html body .card .card-front.th-hexagon .th-rn::before { content: ''; position: absolute; left: 0; top: 0; width: 1.9em; height: 1.25em; background: var(--tri); box-shadow: 0 0 0 .06em rgba(0, 0, 0, .25), .05em .1em .2em rgba(0, 0, 0, .3); border-radius: .1em; }
html body .card .card-front.th-hexagon .th-rn::after { content: attr(data-rn); position: absolute; right: 0; top: -.1em; font: 800 1.75em/1.1 'Josefin Sans', sans-serif; letter-spacing: .04em; color: var(--bleu); }
html body .card .card-front.th-hexagon .card-body { left: 1.5em; right: 1.5em; top: 19.5em; bottom: 1.4em; align-items: center; text-align: center; gap: .2em; z-index: 2; }
html body .card .card-front.th-hexagon h3 { font: 700 1.3em/1.08 'Playfair Display', serif; color: #1b2f68; }
html body .card .card-front.th-hexagon .desc { color: #4b5470; font: italic 500 .8em/1.3 'EB Garamond', serif; font-size: .86em; -webkit-line-clamp: 2; }
html body .card .card-front.th-hexagon .meta { margin-top: auto; gap: 1.2em; color: #1b2f68; font: 700 .68em 'Josefin Sans', sans-serif; letter-spacing: .14em; text-transform: uppercase; }
html body .card .card-front.th-hexagon .tag { color: #1b2f68; background: none; padding: 0; }
html body .card .card-front.th-atomiq { --tq: #2a9d8f; --or: #e76f51; --mu: #e9c46a; }
html body .card .card-front.th-atomiq { border-radius: .8em; box-shadow: 0 1.4em 2.4em -1.4em var(--glow); background: radial-gradient(circle at 50% 38%, color-mix(in srgb, var(--c1) 38%, transparent), transparent 62%), radial-gradient(circle at 50% 100%, color-mix(in srgb, var(--c1) 30%, transparent), transparent 55%), repeating-linear-gradient(135deg, color-mix(in srgb, var(--c1) 12%, transparent) 0 .3em, transparent .3em .9em), color-mix(in srgb, var(--c1) 12%, #f4ead2); }
html body .card .card-front.th-atomiq::after { content: ''; position: absolute; inset: 0; border-radius: inherit; border: .6em solid transparent; background: var(--stub) border-box; -webkit-mask: linear-gradient(#fff 0 0) padding-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask: linear-gradient(#fff 0 0) padding-box exclude, linear-gradient(#fff 0 0); pointer-events: none; z-index: 6; }
html body .card .card-front.th-atomiq .th-in::before { content: ''; position: absolute; left: calc(.9 * var(--tu)); top: calc(5.4 * var(--tu)); width: calc(18.2 * var(--tu)); height: calc(6.8 * var(--tu)); border: calc(.26 * var(--tu)) solid var(--c1); border-radius: 50%; rotate: 32deg; z-index: 1; box-shadow: 0 0 calc(.6 * var(--tu)) var(--glow), inset 0 0 0 calc(.1 * var(--tu)) rgba(255, 255, 255, .5); }
html body .card .card-front.th-atomiq .th-in::after { content: ''; position: absolute; left: calc(.9 * var(--tu)); top: calc(5.4 * var(--tu)); width: calc(18.2 * var(--tu)); height: calc(6.8 * var(--tu)); border: calc(.26 * var(--tu)) solid var(--c2); border-radius: 50%; rotate: -32deg; z-index: 1; box-shadow: 0 0 calc(.6 * var(--tu)) var(--glow), inset 0 0 0 calc(.1 * var(--tu)) rgba(255, 255, 255, .5); }
html body .card .card-front.th-atomiq .card-img { left: 3.7em; top: 2.6em; width: 12.6em; height: 12.6em; border-radius: 50%; background: #222; z-index: 2; box-shadow: 0 0 0 .3em #f8f0dc, 0 0 0 .5em #2b2b2b, 0 0 0 .8em var(--c1), .3em .5em .7em .5em rgba(0, 0, 0, .3); }
html body .card .card-front.th-atomiq .th-rn { display: grid; place-items: center; position: absolute; z-index: 7; left: 1.3em; top: 1.3em; width: 4.8em; height: 4.8em; background: var(--stub); clip-path: polygon(50% 0, 61% 18%, 79% 9%, 79% 29%, 98% 31%, 85% 46%, 100% 61%, 80% 66%, 82% 87%, 62% 81%, 50% 100%, 38% 81%, 18% 87%, 20% 66%, 0 61%, 15% 46%, 2% 31%, 21% 29%, 21% 9%, 39% 18%); }
html body .card .card-front.th-atomiq .th-rn svg { display: none; }
html body .card .card-front.th-atomiq .th-rn::after { content: attr(data-rn); color: var(--ink); font: 400 1.3em/1 'Dela Gothic One', sans-serif; }
html body .card .card-front.th-atomiq .card-body { left: 1.8em; right: 1.8em; top: 16.6em; bottom: 1.5em; align-items: center; text-align: center; gap: .3em; z-index: 3; }
html body .card .card-front.th-atomiq h3 { font: 400 1.5em/1.05 'Dela Gothic One', 'Barlow Condensed', sans-serif; color: #1c4f55; letter-spacing: -.01em; text-shadow: .06em .06em 0 color-mix(in srgb, var(--c1) 80%, #fff); }
html body .card .card-front.th-atomiq .desc { color: #5a5240; font: 600 .78em/1.3 'Josefin Sans', sans-serif; }
html body .card .card-front.th-atomiq .meta { margin-top: auto; gap: 1.2em; color: #1c4f55; font: 700 .68em 'Josefin Sans', sans-serif; letter-spacing: .16em; text-transform: uppercase; }
html body .card .card-front.th-atomiq .tag { color: color-mix(in srgb, var(--c2) 80%, #000); }
html body .card .card-front.th-olympi { --nv: #16264d; --rg: #c8402f; --wd: calc((15.6 + (var(--n) - 1) * .6) * var(--tu)); }
html body .card .card-front.th-olympi { border-radius: .35em; background: radial-gradient(circle at 50% 36%, #fbf5e4, #f1e7c9 70%), #f1e7c9; box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 .14em var(--nv), inset 0 0 0 .5em #f1e7c9, inset 0 0 0 .62em var(--nv); }
html body .card .card-front.th-olympi .th-in::before { content: ''; position: absolute; left: calc(10 * var(--tu) - var(--wd) / 2); top: calc(9.2 * var(--tu) - var(--wd) / 2); width: var(--wd); height: var(--wd); background: var(--stub); -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cellipse cx='75.6' cy='175.1' rx='10.5' ry='4.2' transform='rotate(232.0 75.6 175.1)'/%3E%3Cellipse cx='72.5' cy='184.6' rx='10.5' ry='4.2' transform='rotate(164.0 72.5 184.6)'/%3E%3Cellipse cx='61.1' cy='168.8' rx='10.5' ry='4.2' transform='rotate(243.5 61.1 168.8)'/%3E%3Cellipse cx='56.2' cy='177.5' rx='10.5' ry='4.2' transform='rotate(175.5 56.2 177.5)'/%3E%3Cellipse cx='48.2' cy='159.6' rx='10.5' ry='4.2' transform='rotate(255.0 48.2 159.6)'/%3E%3Cellipse cx='41.6' cy='167.2' rx='10.5' ry='4.2' transform='rotate(187.0 41.6 167.2)'/%3E%3Cellipse cx='37.3' cy='148.1' rx='10.5' ry='4.2' transform='rotate(266.5 37.3 148.1)'/%3E%3Cellipse cx='29.4' cy='154.2' rx='10.5' ry='4.2' transform='rotate(198.5 29.4 154.2)'/%3E%3Cellipse cx='29.0' cy='134.6' rx='10.5' ry='4.2' transform='rotate(278.0 29.0 134.6)'/%3E%3Cellipse cx='20.0' cy='139.0' rx='10.5' ry='4.2' transform='rotate(210.0 20.0 139.0)'/%3E%3Cellipse cx='23.5' cy='119.8' rx='10.5' ry='4.2' transform='rotate(289.5 23.5 119.8)'/%3E%3Cellipse cx='13.8' cy='122.3' rx='10.5' ry='4.2' transform='rotate(221.5 13.8 122.3)'/%3E%3Cellipse cx='21.1' cy='104.1' rx='10.5' ry='4.2' transform='rotate(301.0 21.1 104.1)'/%3E%3Cellipse cx='11.1' cy='104.7' rx='10.5' ry='4.2' transform='rotate(233.0 11.1 104.7)'/%3E%3Cellipse cx='21.9' cy='88.3' rx='10.5' ry='4.2' transform='rotate(312.5 21.9 88.3)'/%3E%3Cellipse cx='12.0' cy='86.8' rx='10.5' ry='4.2' transform='rotate(244.5 12.0 86.8)'/%3E%3Cellipse cx='25.8' cy='73.0' rx='10.5' ry='4.2' transform='rotate(324.0 25.8 73.0)'/%3E%3Cellipse cx='16.4' cy='69.6' rx='10.5' ry='4.2' transform='rotate(256.0 16.4 69.6)'/%3E%3Cellipse cx='32.6' cy='58.7' rx='10.5' ry='4.2' transform='rotate(335.5 32.6 58.7)'/%3E%3Cellipse cx='24.1' cy='53.5' rx='10.5' ry='4.2' transform='rotate(267.5 24.1 53.5)'/%3E%3Cellipse cx='42.2' cy='46.1' rx='10.5' ry='4.2' transform='rotate(347.0 42.2 46.1)'/%3E%3Cellipse cx='34.9' cy='39.3' rx='10.5' ry='4.2' transform='rotate(279.0 34.9 39.3)'/%3E%3Cellipse cx='54.1' cy='35.7' rx='10.5' ry='4.2' transform='rotate(358.5 54.1 35.7)'/%3E%3Cellipse cx='48.3' cy='27.5' rx='10.5' ry='4.2' transform='rotate(290.5 48.3 27.5)'/%3E%3Cellipse cx='124.4' cy='175.1' rx='10.5' ry='4.2' transform='rotate(308.0 124.4 175.1)'/%3E%3Cellipse cx='127.5' cy='184.6' rx='10.5' ry='4.2' transform='rotate(16.0 127.5 184.6)'/%3E%3Cellipse cx='138.9' cy='168.8' rx='10.5' ry='4.2' transform='rotate(296.5 138.9 168.8)'/%3E%3Cellipse cx='143.8' cy='177.5' rx='10.5' ry='4.2' transform='rotate(4.5 143.8 177.5)'/%3E%3Cellipse cx='151.8' cy='159.6' rx='10.5' ry='4.2' transform='rotate(285.0 151.8 159.6)'/%3E%3Cellipse cx='158.4' cy='167.2' rx='10.5' ry='4.2' transform='rotate(353.0 158.4 167.2)'/%3E%3Cellipse cx='162.7' cy='148.1' rx='10.5' ry='4.2' transform='rotate(273.5 162.7 148.1)'/%3E%3Cellipse cx='170.6' cy='154.2' rx='10.5' ry='4.2' transform='rotate(341.5 170.6 154.2)'/%3E%3Cellipse cx='171.0' cy='134.6' rx='10.5' ry='4.2' transform='rotate(262.0 171.0 134.6)'/%3E%3Cellipse cx='180.0' cy='139.0' rx='10.5' ry='4.2' transform='rotate(330.0 180.0 139.0)'/%3E%3Cellipse cx='176.5' cy='119.8' rx='10.5' ry='4.2' transform='rotate(250.5 176.5 119.8)'/%3E%3Cellipse cx='186.2' cy='122.3' rx='10.5' ry='4.2' transform='rotate(318.5 186.2 122.3)'/%3E%3Cellipse cx='178.9' cy='104.1' rx='10.5' ry='4.2' transform='rotate(239.0 178.9 104.1)'/%3E%3Cellipse cx='188.9' cy='104.7' rx='10.5' ry='4.2' transform='rotate(307.0 188.9 104.7)'/%3E%3Cellipse cx='178.1' cy='88.3' rx='10.5' ry='4.2' transform='rotate(227.5 178.1 88.3)'/%3E%3Cellipse cx='188.0' cy='86.8' rx='10.5' ry='4.2' transform='rotate(295.5 188.0 86.8)'/%3E%3Cellipse cx='174.2' cy='73.0' rx='10.5' ry='4.2' transform='rotate(216.0 174.2 73.0)'/%3E%3Cellipse cx='183.6' cy='69.6' rx='10.5' ry='4.2' transform='rotate(284.0 183.6 69.6)'/%3E%3Cellipse cx='167.4' cy='58.7' rx='10.5' ry='4.2' transform='rotate(204.5 167.4 58.7)'/%3E%3Cellipse cx='175.9' cy='53.5' rx='10.5' ry='4.2' transform='rotate(272.5 175.9 53.5)'/%3E%3Cellipse cx='157.8' cy='46.1' rx='10.5' ry='4.2' transform='rotate(193.0 157.8 46.1)'/%3E%3Cellipse cx='165.1' cy='39.3' rx='10.5' ry='4.2' transform='rotate(261.0 165.1 39.3)'/%3E%3Cellipse cx='145.9' cy='35.7' rx='10.5' ry='4.2' transform='rotate(181.5 145.9 35.7)'/%3E%3Cellipse cx='151.7' cy='27.5' rx='10.5' ry='4.2' transform='rotate(249.5 151.7 27.5)'/%3E%3Cpath d='M100 190 L88 199 L96 187 Z M100 190 L112 199 L104 187 Z' /%3E%3C/svg%3E") center / 100% 100% no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 200'%3E%3Cellipse cx='75.6' cy='175.1' rx='10.5' ry='4.2' transform='rotate(232.0 75.6 175.1)'/%3E%3Cellipse cx='72.5' cy='184.6' rx='10.5' ry='4.2' transform='rotate(164.0 72.5 184.6)'/%3E%3Cellipse cx='61.1' cy='168.8' rx='10.5' ry='4.2' transform='rotate(243.5 61.1 168.8)'/%3E%3Cellipse cx='56.2' cy='177.5' rx='10.5' ry='4.2' transform='rotate(175.5 56.2 177.5)'/%3E%3Cellipse cx='48.2' cy='159.6' rx='10.5' ry='4.2' transform='rotate(255.0 48.2 159.6)'/%3E%3Cellipse cx='41.6' cy='167.2' rx='10.5' ry='4.2' transform='rotate(187.0 41.6 167.2)'/%3E%3Cellipse cx='37.3' cy='148.1' rx='10.5' ry='4.2' transform='rotate(266.5 37.3 148.1)'/%3E%3Cellipse cx='29.4' cy='154.2' rx='10.5' ry='4.2' transform='rotate(198.5 29.4 154.2)'/%3E%3Cellipse cx='29.0' cy='134.6' rx='10.5' ry='4.2' transform='rotate(278.0 29.0 134.6)'/%3E%3Cellipse cx='20.0' cy='139.0' rx='10.5' ry='4.2' transform='rotate(210.0 20.0 139.0)'/%3E%3Cellipse cx='23.5' cy='119.8' rx='10.5' ry='4.2' transform='rotate(289.5 23.5 119.8)'/%3E%3Cellipse cx='13.8' cy='122.3' rx='10.5' ry='4.2' transform='rotate(221.5 13.8 122.3)'/%3E%3Cellipse cx='21.1' cy='104.1' rx='10.5' ry='4.2' transform='rotate(301.0 21.1 104.1)'/%3E%3Cellipse cx='11.1' cy='104.7' rx='10.5' ry='4.2' transform='rotate(233.0 11.1 104.7)'/%3E%3Cellipse cx='21.9' cy='88.3' rx='10.5' ry='4.2' transform='rotate(312.5 21.9 88.3)'/%3E%3Cellipse cx='12.0' cy='86.8' rx='10.5' ry='4.2' transform='rotate(244.5 12.0 86.8)'/%3E%3Cellipse cx='25.8' cy='73.0' rx='10.5' ry='4.2' transform='rotate(324.0 25.8 73.0)'/%3E%3Cellipse cx='16.4' cy='69.6' rx='10.5' ry='4.2' transform='rotate(256.0 16.4 69.6)'/%3E%3Cellipse cx='32.6' cy='58.7' rx='10.5' ry='4.2' transform='rotate(335.5 32.6 58.7)'/%3E%3Cellipse cx='24.1' cy='53.5' rx='10.5' ry='4.2' transform='rotate(267.5 24.1 53.5)'/%3E%3Cellipse cx='42.2' cy='46.1' rx='10.5' ry='4.2' transform='rotate(347.0 42.2 46.1)'/%3E%3Cellipse cx='34.9' cy='39.3' rx='10.5' ry='4.2' transform='rotate(279.0 34.9 39.3)'/%3E%3Cellipse cx='54.1' cy='35.7' rx='10.5' ry='4.2' transform='rotate(358.5 54.1 35.7)'/%3E%3Cellipse cx='48.3' cy='27.5' rx='10.5' ry='4.2' transform='rotate(290.5 48.3 27.5)'/%3E%3Cellipse cx='124.4' cy='175.1' rx='10.5' ry='4.2' transform='rotate(308.0 124.4 175.1)'/%3E%3Cellipse cx='127.5' cy='184.6' rx='10.5' ry='4.2' transform='rotate(16.0 127.5 184.6)'/%3E%3Cellipse cx='138.9' cy='168.8' rx='10.5' ry='4.2' transform='rotate(296.5 138.9 168.8)'/%3E%3Cellipse cx='143.8' cy='177.5' rx='10.5' ry='4.2' transform='rotate(4.5 143.8 177.5)'/%3E%3Cellipse cx='151.8' cy='159.6' rx='10.5' ry='4.2' transform='rotate(285.0 151.8 159.6)'/%3E%3Cellipse cx='158.4' cy='167.2' rx='10.5' ry='4.2' transform='rotate(353.0 158.4 167.2)'/%3E%3Cellipse cx='162.7' cy='148.1' rx='10.5' ry='4.2' transform='rotate(273.5 162.7 148.1)'/%3E%3Cellipse cx='170.6' cy='154.2' rx='10.5' ry='4.2' transform='rotate(341.5 170.6 154.2)'/%3E%3Cellipse cx='171.0' cy='134.6' rx='10.5' ry='4.2' transform='rotate(262.0 171.0 134.6)'/%3E%3Cellipse cx='180.0' cy='139.0' rx='10.5' ry='4.2' transform='rotate(330.0 180.0 139.0)'/%3E%3Cellipse cx='176.5' cy='119.8' rx='10.5' ry='4.2' transform='rotate(250.5 176.5 119.8)'/%3E%3Cellipse cx='186.2' cy='122.3' rx='10.5' ry='4.2' transform='rotate(318.5 186.2 122.3)'/%3E%3Cellipse cx='178.9' cy='104.1' rx='10.5' ry='4.2' transform='rotate(239.0 178.9 104.1)'/%3E%3Cellipse cx='188.9' cy='104.7' rx='10.5' ry='4.2' transform='rotate(307.0 188.9 104.7)'/%3E%3Cellipse cx='178.1' cy='88.3' rx='10.5' ry='4.2' transform='rotate(227.5 178.1 88.3)'/%3E%3Cellipse cx='188.0' cy='86.8' rx='10.5' ry='4.2' transform='rotate(295.5 188.0 86.8)'/%3E%3Cellipse cx='174.2' cy='73.0' rx='10.5' ry='4.2' transform='rotate(216.0 174.2 73.0)'/%3E%3Cellipse cx='183.6' cy='69.6' rx='10.5' ry='4.2' transform='rotate(284.0 183.6 69.6)'/%3E%3Cellipse cx='167.4' cy='58.7' rx='10.5' ry='4.2' transform='rotate(204.5 167.4 58.7)'/%3E%3Cellipse cx='175.9' cy='53.5' rx='10.5' ry='4.2' transform='rotate(272.5 175.9 53.5)'/%3E%3Cellipse cx='157.8' cy='46.1' rx='10.5' ry='4.2' transform='rotate(193.0 157.8 46.1)'/%3E%3Cellipse cx='165.1' cy='39.3' rx='10.5' ry='4.2' transform='rotate(261.0 165.1 39.3)'/%3E%3Cellipse cx='145.9' cy='35.7' rx='10.5' ry='4.2' transform='rotate(181.5 145.9 35.7)'/%3E%3Cellipse cx='151.7' cy='27.5' rx='10.5' ry='4.2' transform='rotate(249.5 151.7 27.5)'/%3E%3Cpath d='M100 190 L88 199 L96 187 Z M100 190 L112 199 L104 187 Z' /%3E%3C/svg%3E") center / 100% 100% no-repeat; filter: drop-shadow(0 calc(.1 * var(--tu)) 0 rgba(0, 0, 0, .35)); }
html body .card .card-front.th-olympi .card-img { left: 3.8em; top: 3em; width: 12.4em; height: 12.4em; border-radius: 50%; background: #111; box-shadow: 0 0 0 .22em #f1e7c9, 0 0 0 .38em var(--nv), 0 .3em .6em rgba(0, 0, 0, .3); }
html body .card .card-front.th-olympi .card-img img { filter: grayscale(.2) contrast(1.05); }
html body .card .card-front.th-olympi .th-rn { display: grid; place-items: center; position: absolute; z-index: 4; left: 50%; top: 15.5em; translate: -50% 0; width: 3.1em; height: 3.1em; border-radius: 50%; background: var(--nv); box-shadow: 0 0 0 .22em #f1e7c9, 0 0 0 .5em var(--c1); }
html body .card .card-front.th-olympi .th-rn svg { display: none; }
html body .card .card-front.th-olympi .th-rn::after { content: attr(data-rn); position: relative; top: .14em; color: #fff; font: 700 1.05em/1 'Cinzel', serif; }
html body .card .card-front.th-olympi .card-body { left: 1.7em; right: 1.7em; top: 19.9em; bottom: 1.4em; align-items: center; text-align: center; gap: .15em; }
html body .card .card-front.th-olympi h3 { font: 800 1.12em/1.1 'Playfair Display', serif; text-transform: uppercase; letter-spacing: .1em; color: var(--nv); }
html body .card .card-front.th-olympi h3::after { content: ''; display: block; width: 4em; height: .16em; margin: .3em auto 0; background: var(--rg); }
html body .card .card-front.th-olympi .desc { color: #4d4a44; font: italic 500 .84em/1.3 'EB Garamond', serif; font-size: .9em; -webkit-line-clamp: 1; }
html body .card .card-front.th-olympi .meta { margin-top: auto; gap: 1.3em; color: var(--nv); font: 700 .66em 'Josefin Sans', sans-serif; letter-spacing: .18em; text-transform: uppercase; }
html body .card .card-front.th-olympi .tag { color: var(--rg); }
html body .card .card-front.th-ecg { --tq: #6b7a90; --enc: #173a43; --ecg: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 36' preserveAspectRatio='none'%3E%3Cpath d='M0 18 H20 L23 14 L26 18 H36 L38 22 L42 2 L46 32 L49 18 H58 L62 12 L68 18 H100' fill='none' stroke='%23000' stroke-width='2.2' vector-effect='non-scaling-stroke' stroke-linejoin='round'/%3E%3C/svg%3E"); }
html body .card.r2 .card-front.th-ecg { --tq: #12b57c; }
html body .card.r3 .card-front.th-ecg { --tq: #2f86e8; }
html body .card.r4 .card-front.th-ecg { --tq: #8a4fe6; }
html body .card.r5 .card-front.th-ecg { --tq: #d99a00; }
html body .card.r6 .card-front.th-ecg { --tq: #e03a3a; }
html body .card.r7 .card-front.th-ecg { --tq: #7b3fe0; }
html body .card .card-front.th-ecg { border-radius: .5em; background: linear-gradient(180deg, #fbfdfd, #eef6f6); box-shadow: 0 1.4em 2.4em -1.4em var(--glow), 0 0 0 1px rgba(15, 100, 100, .22); }
html body .card .card-front.th-ecg::before { content: ''; position: absolute; left: 0; right: 0; bottom: 0; height: 7em; background: var(--stub); opacity: .3; -webkit-mask: linear-gradient(0deg, #000, transparent); mask: linear-gradient(0deg, #000, transparent); pointer-events: none; }
html body .card .card-front.th-ecg .th-in::before { content: ''; position: absolute; left: 0; right: 0; top: calc(14.6 * var(--tu)); height: calc(5 * var(--tu)); border-top: calc(.08 * var(--tu)) solid color-mix(in srgb, var(--tq) 40%, transparent); border-bottom: calc(.08 * var(--tu)) solid color-mix(in srgb, var(--tq) 40%, transparent); background: repeating-linear-gradient(0deg, color-mix(in srgb, var(--tq) 12%, transparent) 0 calc(.05 * var(--tu)), transparent calc(.05 * var(--tu)) calc(.5 * var(--tu))), repeating-linear-gradient(90deg, color-mix(in srgb, var(--tq) 12%, transparent) 0 calc(.05 * var(--tu)), transparent calc(.05 * var(--tu)) calc(.5 * var(--tu))), color-mix(in srgb, var(--tq) 5%, transparent); }
html body .card .card-front.th-ecg .th-in::after { content: ''; position: absolute; left: 0; right: 0; top: calc(14.9 * var(--tu)); height: calc(4.4 * var(--tu)); z-index: 3; background-color: var(--tq); -webkit-mask: var(--ecg) 0 0 / calc(100% / var(--n)) 100% repeat-x; mask: var(--ecg) 0 0 / calc(100% / var(--n)) 100% repeat-x; filter: drop-shadow(0 0 calc(.3 * var(--tu)) color-mix(in srgb, var(--tq) 70%, transparent)); }
html body .card.r7 .card-front.th-ecg .th-in::after { background-image: linear-gradient(90deg, #ff5fa2, #ffb454, #4ade80, #38bdf8, #a78bfa); }
html body .card .card-front.th-ecg .card-img { left: 1.5em; right: 1.5em; top: 1.5em; height: 12.2em; border-radius: .7em; background: #dde; border: .25em solid #fff; box-shadow: 0 .3em .8em rgba(15, 80, 90, .3); width: auto; }
html body .card .card-front.th-ecg .card-body { left: 0; right: 0; top: 0; bottom: 0; padding: 20.5em 1.6em 0; gap: .15em; }
html body .card .card-front.th-ecg h3 { font: 800 1.3em/1.05 'Josefin Sans', sans-serif; color: var(--enc); letter-spacing: .01em; }
html body .card .card-front.th-ecg .desc { color: #4a6770; font: 500 .76em/1.3 'Josefin Sans', sans-serif; -webkit-line-clamp: 1; }
html body .card .card-front.th-ecg .meta { position: absolute; right: calc(1.6 * var(--tu)); bottom: calc(1 * var(--tu)); flex-direction: column; align-items: flex-end; text-align: right; gap: .2em; color: #4a6770; font: 700 .64em 'Josefin Sans', sans-serif; letter-spacing: .14em; text-transform: uppercase; }
html body .card .card-front.th-ecg .tag { color: var(--tq); }
html body .card.r7 .card-front.th-ecg .tag b { background: linear-gradient(90deg, #ff5fa2, #ffb454, #4ade80, #38bdf8, #a78bfa); -webkit-background-clip: text; background-clip: text; color: transparent; }
html body .card .card-front.th-ecg .th-rn { display: flex; align-items: center; gap: .4em; position: absolute; z-index: 5; left: 1.6em; bottom: 1.05em; }
html body .card .card-front.th-ecg .th-rn svg { display: none; }
html body .card .card-front.th-ecg .th-rn::before { content: '♥'; font: 400 1.5em/1 sans-serif; color: var(--tq); text-shadow: 0 0 .4em color-mix(in srgb, var(--tq) 55%, transparent); animation: hb 1s ease-in-out infinite; transform-origin: 50% 55%; }
html body .card.r7 .card-front.th-ecg .th-rn::before { background: linear-gradient(90deg, #ff5fa2, #a78bfa); -webkit-background-clip: text; background-clip: text; color: transparent; text-shadow: none; }
html body .card .card-front.th-ecg .th-rn::after { font: 800 1.25em/1 'Josefin Sans', sans-serif; color: var(--enc); letter-spacing: -.01em; }
html body .card.r1 .card-front.th-ecg .th-rn::after { content: '60 bpm'; }
html body .card.r2 .card-front.th-ecg .th-rn::after { content: '72 bpm'; }
html body .card.r3 .card-front.th-ecg .th-rn::after { content: '84 bpm'; }
html body .card.r4 .card-front.th-ecg .th-rn::after { content: '96 bpm'; }
html body .card.r5 .card-front.th-ecg .th-rn::after { content: '110 bpm'; }
html body .card.r6 .card-front.th-ecg .th-rn::after { content: '130 bpm'; }
html body .card.r7 .card-front.th-ecg .th-rn::after { content: '160 bpm'; }
html body .card.r2 .card-front.th-ecg .th-rn::before { animation-duration: .86s; }
html body .card.r3 .card-front.th-ecg .th-rn::before { animation-duration: .74s; }
html body .card.r4 .card-front.th-ecg .th-rn::before { animation-duration: .64s; }
html body .card.r5 .card-front.th-ecg .th-rn::before { animation-duration: .54s; }
html body .card.r6 .card-front.th-ecg .th-rn::before { animation-duration: .46s; }
html body .card.r7 .card-front.th-ecg .th-rn::before { animation-duration: .38s; }
/* <<< STYLES DE THÈME <<< */

/* Retouches des styles de thème, hors de la région générée (la regénérer ne les efface pas) : taille minimale du texte, chiffres romains du Vinyle, du Journal, du Clap et du Diagnostic */
/* Taille du texte : jamais plus petite que sur une carte Normal (mêmes formules que .card-body h3, .desc, .tag et .vw plus haut). --fh titre, --fd description, --fv rareté et vues ;
   un style qui veut plus grand le dit avec --h3, --dsc ou --mt. Le chiffre romain du rang n'est pas concerné. */
/* Animations réduites : le cœur du Diagnostic et le disque du Vinyle (survol) ne s'animent pas ; la règle de la région générée venait avant celle qui anime le cœur, qui l'emportait */
/* moins d'animations (boot.js, docs/animations.md) */ html:where([data-motion="reduce"]) body .card .card-front.th-ecg .th-rn::before, html:where([data-motion="reduce"]) body .card:hover .card-front.th-vinyle .th-in::after { animation: none; }
html body .card .card-front.th { --fh: max(13px, 7.2cqw); --fd: max(9.5px, 4.2cqw); --fv: max(10px, 4.1cqw); }
@container (max-width: 140px) { html body .card .card-front.th { --fh: max(10.5px, 8.6cqw); --fd: max(9.5px, 4.2cqw); --fv: max(9px, 3.8cqw); } }
html body .card .card-front.th h3 { font-size: max(var(--fh), var(--h3, 0px)); }
html body .card .card-front.th .desc { font-size: max(var(--fd), var(--dsc, 0px)); }
html body .card .card-front.th .meta { font-size: max(var(--fv), var(--mt, 0px)); }
html body .card .card-front.th .tag, html body .card .card-front.th .vw { font-size: inherit; }
html body .card .card-front.th-atomiq { --h3: 7.5cqw; --dsc: 5.5cqw; --mt: 4.7cqw; }
html body .card .card-front.th-atomiq .card-body { top: 17.3em; }
html body .card .card-front.th-carnet { --h3: 9.3cqw; --dsc: 7.2cqw; }
html body .card .card-front.th-clap { --h3: 8.8cqw; }
html body .card .card-front.th-damier { --h3: 8.4cqw; --dsc: 5cqw; --mt: 4.9cqw; }
html body .card .card-front.th-olympi { --dsc: 5.8cqw; --mt: 4.7cqw; }
html body .card .card-front.th-hexagon { --dsc: 5.7cqw; --mt: 4.7cqw; }
html body .card .card-front.th-hexagon .card-body { top: 18.8em; bottom: 1.1em; }
html body .card .card-front.th-ecg { --h3: 7.8cqw; --dsc: 5.5cqw; --mt: 4.7cqw; }
html body .card .card-front.th-ecg .desc { max-width: 11.5em; }
html body .card .card-front.th-ecg .card-body { padding-top: 20em; }
html body .card .card-front.th-livre { --dsc: 5cqw; }
html body .card .card-front.th-polaroi { --dsc: 5cqw; }
html body .card .card-front.th-vinyle { --dsc: 5cqw; }
html body .card .card-front.th-postale { --h3: 10.2cqw; --dsc: 6.9cqw; }
html body .card .card-front.th-postale .card-body { top: 17.3em; }
/* Vinyle : image plus courte pour que le texte ait la taille de celui d'une carte Normal ; le disque est posé à cheval sur le bas de l'image et le chiffre romain du rang est au centre de son étiquette */
html body .card .card-front.th-vinyle .card-img { height: 16.4em; }
html body .card .card-front.th-vinyle .th-in::after { right: .9em; top: 12.9em; width: 6.2em; height: 6.2em; }
html body .card .card-front.th-vinyle .th-rn { left: 14.4em; top: 14.4em; width: 3.2em; height: 3.2em; }
html body .card .card-front.th-vinyle .th-rn::after { content: attr(data-rn); font: 700 1.3em/1 'Space Grotesk', 'Sora', sans-serif; letter-spacing: -.02em; color: var(--ink); }
html body .card .card-front.th-vinyle .card-body { top: 16.4em; height: 11.6em; padding: .9em 7.7em 0 1.2em; }
html body .card .card-front.th-vinyle .desc { margin-right: -6.5em; }
html body .card .card-front.th-vinyle .meta { align-items: baseline; }
/* Journal : plus de double filet sous le titre du journal, image remontée, titre et description plus gros ; le chiffre romain du rang est dans un encadré posé en bas à gauche de l'image */
html body .card .card-front.th-quotid { --h3: 8.4cqw; --dsc: 5.3cqw; --mt: 5cqw; }
html body .card .card-front.th-quotid .th-in::after { content: none; }
html body .card .card-front.th-quotid .card-img { top: 3.5em; height: 14.1em; }
html body .card .card-front.th-quotid .card-body { padding-top: 17.9em; }
html body .card .card-front.th-quotid .desc { -webkit-line-clamp: 2; }
html body .card .card-front.th-quotid .th-rn { display: grid; place-items: center; position: absolute; z-index: 5; left: 2.1em; top: 14em; min-width: 2.9em; height: 2.6em; padding: 0 .5em .45em; box-sizing: border-box; border: .14em solid var(--ik); background: linear-gradient(var(--paper), var(--paper)) 0 0 / 100% 76% no-repeat, var(--stub); box-shadow: .2em .2em 0 rgba(27, 24, 18, .45); }
html body .card .card-front.th-quotid .th-rn::after { content: attr(data-rn); font: 900 1.4em/1 'Playfair Display', serif; color: var(--ik); }
/* Clap : titre en Barlow Condensed (plus de manuscrit) ; clap plus petit et collé au cadre de l'image, qui est agrandi ; le chiffre romain du rang est dans un rond posé sur le coin de l'image, comme le numéro de prise */
html body .card .card-front.th-clap .th-in::before { left: .5em; width: 19em; top: 1.45em; height: .95em; border-radius: .45em .45em 0 0; transform-origin: .7em 100%; transform: rotate(-4deg); }
html body .card .card-front.th-clap .th-in::after { left: .8em; right: .8em; top: 2.4em; height: .95em; border-radius: 0; }
html body .card .card-front.th-clap .card-img { left: .8em; right: .8em; top: 3.35em; height: 14.6em; border-radius: 0 0 1.1em 1.1em; outline: 0; box-shadow: 0 0 0 .12em rgba(255, 255, 255, .4); }
html body .card .card-front.th-clap .card-body { top: 18.6em; }
html body .card .card-front.th-clap h3 { font-family: 'Barlow Condensed', var(--font), sans-serif; font-weight: 700; text-transform: uppercase; letter-spacing: .035em; line-height: .98; }
html body .card .card-front.th-clap .th-rn { display: grid; place-items: center; position: absolute; z-index: 5; left: 16em; top: 15em; width: 3em; height: 3em; border-radius: 50%; background: var(--stub); box-shadow: 0 0 0 .22em var(--slate); }
html body .card .card-front.th-clap .th-rn::after { content: attr(data-rn); font: 700 1.1em/1 'IBM Plex Mono', monospace; letter-spacing: -.06em; color: var(--ink); }
/* Lettre : vrais sceaux de cire (contour irrégulier avec coulées, anneau en relief, chiffre embossé) ; l'ombre est un calque à part, le masque qui découpe le sceau couperait toute ombre portée */
html body .card .card-front.th-lettre { --seal: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M96.1 50.0 L96.6 51.8 L96.2 53.6 L95.1 55.3 L93.8 56.9 L92.8 58.5 L92.2 60.1 L91.8 61.8 L91.3 63.4 L90.4 64.9 L89.0 66.1 L87.1 67.1 L85.3 68.0 L83.7 68.9 L82.4 69.9 L81.4 71.0 L80.5 72.1 L79.5 73.2 L78.6 74.4 L77.9 75.8 L77.7 77.7 L77.9 80.2 L78.2 83.1 L78.3 85.9 L77.8 88.3 L76.7 89.9 L75.0 90.8 L73.1 91.2 L71.1 91.5 L69.3 91.8 L67.4 92.1 L65.6 92.4 L63.8 92.5 L62.0 92.4 L60.2 92.3 L58.4 92.5 L56.8 92.9 L55.2 93.6 L53.5 94.1 L51.7 94.1 L50.0 93.5 L48.3 92.5 L46.7 91.5 L45.2 90.9 L43.5 90.9 L41.8 91.1 L40.1 91.1 L38.6 90.5 L37.3 89.1 L36.2 87.3 L35.3 85.4 L34.4 83.9 L33.3 82.8 L32.0 82.1 L30.6 81.7 L29.1 81.3 L27.6 80.9 L25.8 80.7 L23.8 80.7 L21.4 81.0 L18.8 81.2 L16.5 81.0 L14.7 80.2 L13.6 78.7 L13.2 76.8 L13.0 74.7 L12.7 72.9 L12.1 71.2 L11.2 69.8 L10.3 68.3 L9.9 66.6 L9.9 64.8 L10.2 62.9 L10.6 61.1 L10.9 59.4 L10.9 57.8 L10.8 56.2 L10.9 54.6 L11.2 53.1 L11.5 51.5 L11.6 50.0 L11.2 48.5 L10.2 46.9 L9.0 45.2 L8.1 43.4 L7.9 41.6 L8.6 40.1 L9.8 38.7 L11.1 37.4 L12.0 36.0 L12.2 34.3 L11.9 32.4 L11.5 30.4 L11.3 28.3 L11.5 26.4 L12.1 24.7 L12.9 23.0 L13.7 21.4 L14.6 19.7 L15.7 18.3 L17.1 17.1 L19.0 16.4 L21.1 16.1 L23.1 15.9 L24.9 15.4 L26.4 14.6 L27.7 13.6 L29.1 12.6 L30.7 12.2 L32.6 12.3 L34.7 13.0 L36.6 13.8 L38.4 14.3 L40.0 14.5 L41.4 14.3 L42.8 13.9 L44.2 13.5 L45.6 12.9 L47.0 12.1 L48.5 10.8 L50.0 9.0 L51.7 7.1 L53.5 5.5 L55.3 4.8 L57.1 5.2 L58.7 6.2 L60.2 7.6 L61.7 8.7 L63.2 9.4 L64.8 9.8 L66.5 10.1 L68.1 10.8 L69.5 11.7 L70.8 12.9 L72.0 14.1 L73.3 15.1 L74.7 16.0 L76.2 16.8 L77.6 17.7 L78.9 18.7 L80.1 19.9 L81.1 21.2 L82.1 22.5 L83.2 23.8 L84.4 25.0 L85.4 26.3 L86.1 27.9 L86.3 29.7 L85.9 31.7 L85.4 33.7 L85.2 35.4 L85.4 36.9 L86.1 38.3 L87.0 39.6 L87.9 40.9 L88.9 42.3 L90.0 43.7 L91.4 45.1 L93.1 46.6 L94.8 48.2Z'/%3E%3C/svg%3E"); --seal-sh: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-12 -12 124 124'%3E%3Cdefs%3E%3Cfilter id='b' x='-20%25' y='-20%25' width='140%25' height='140%25'%3E%3CfeGaussianBlur stdDeviation='2.4'/%3E%3C/filter%3E%3C/defs%3E%3Cpath filter='url(%23b)' d='M96.1 50.0 L96.6 51.8 L96.2 53.6 L95.1 55.3 L93.8 56.9 L92.8 58.5 L92.2 60.1 L91.8 61.8 L91.3 63.4 L90.4 64.9 L89.0 66.1 L87.1 67.1 L85.3 68.0 L83.7 68.9 L82.4 69.9 L81.4 71.0 L80.5 72.1 L79.5 73.2 L78.6 74.4 L77.9 75.8 L77.7 77.7 L77.9 80.2 L78.2 83.1 L78.3 85.9 L77.8 88.3 L76.7 89.9 L75.0 90.8 L73.1 91.2 L71.1 91.5 L69.3 91.8 L67.4 92.1 L65.6 92.4 L63.8 92.5 L62.0 92.4 L60.2 92.3 L58.4 92.5 L56.8 92.9 L55.2 93.6 L53.5 94.1 L51.7 94.1 L50.0 93.5 L48.3 92.5 L46.7 91.5 L45.2 90.9 L43.5 90.9 L41.8 91.1 L40.1 91.1 L38.6 90.5 L37.3 89.1 L36.2 87.3 L35.3 85.4 L34.4 83.9 L33.3 82.8 L32.0 82.1 L30.6 81.7 L29.1 81.3 L27.6 80.9 L25.8 80.7 L23.8 80.7 L21.4 81.0 L18.8 81.2 L16.5 81.0 L14.7 80.2 L13.6 78.7 L13.2 76.8 L13.0 74.7 L12.7 72.9 L12.1 71.2 L11.2 69.8 L10.3 68.3 L9.9 66.6 L9.9 64.8 L10.2 62.9 L10.6 61.1 L10.9 59.4 L10.9 57.8 L10.8 56.2 L10.9 54.6 L11.2 53.1 L11.5 51.5 L11.6 50.0 L11.2 48.5 L10.2 46.9 L9.0 45.2 L8.1 43.4 L7.9 41.6 L8.6 40.1 L9.8 38.7 L11.1 37.4 L12.0 36.0 L12.2 34.3 L11.9 32.4 L11.5 30.4 L11.3 28.3 L11.5 26.4 L12.1 24.7 L12.9 23.0 L13.7 21.4 L14.6 19.7 L15.7 18.3 L17.1 17.1 L19.0 16.4 L21.1 16.1 L23.1 15.9 L24.9 15.4 L26.4 14.6 L27.7 13.6 L29.1 12.6 L30.7 12.2 L32.6 12.3 L34.7 13.0 L36.6 13.8 L38.4 14.3 L40.0 14.5 L41.4 14.3 L42.8 13.9 L44.2 13.5 L45.6 12.9 L47.0 12.1 L48.5 10.8 L50.0 9.0 L51.7 7.1 L53.5 5.5 L55.3 4.8 L57.1 5.2 L58.7 6.2 L60.2 7.6 L61.7 8.7 L63.2 9.4 L64.8 9.8 L66.5 10.1 L68.1 10.8 L69.5 11.7 L70.8 12.9 L72.0 14.1 L73.3 15.1 L74.7 16.0 L76.2 16.8 L77.6 17.7 L78.9 18.7 L80.1 19.9 L81.1 21.2 L82.1 22.5 L83.2 23.8 L84.4 25.0 L85.4 26.3 L86.1 27.9 L86.3 29.7 L85.9 31.7 L85.4 33.7 L85.2 35.4 L85.4 36.9 L86.1 38.3 L87.0 39.6 L87.9 40.9 L88.9 42.3 L90.0 43.7 L91.4 45.1 L93.1 46.6 L94.8 48.2Z'/%3E%3C/svg%3E"); --wx1: color-mix(in srgb, var(--wax) 52%, #fff); --wx2: var(--wax); --wx3: color-mix(in srgb, var(--wax) 60%, #000); --wxt: color-mix(in srgb, var(--wax) 55%, #000); --h3: 7.4cqw; --dsc: 5.6cqw; }
html body .card.r5 .card-front.th-lettre { --wx1: #fff0b0; --wx2: #e6b02c; --wx3: #8a5c08; --wxt: #6b4604; }
html body .card.r6 .card-front.th-lettre { --wx1: #ff9a9a; --wx2: #e01c2c; --wx3: #650510; --wxt: #5a0510; }
html body .card .card-front.th-lettre::after { content: ''; position: absolute; z-index: 4; left: calc(50% - 3.47em + .1em); top: 13.05em; width: 6.94em; height: 6.94em; background: rgba(45, 18, 0, .6); -webkit-mask: var(--seal-sh) center / 100% 100% no-repeat; mask: var(--seal-sh) center / 100% 100% no-repeat; pointer-events: none; }
html body .card .card-front.th-lettre .th-rn { top: 13.4em; width: 5.6em; height: 5.6em; margin-left: -2.8em; border-radius: 0; color: var(--wxt); -webkit-mask: var(--seal) center / 100% 100% no-repeat; mask: var(--seal) center / 100% 100% no-repeat; background: radial-gradient(circle at 36% 30%, var(--wx1), var(--wx2) 50%, var(--wx3) 100%); box-shadow: none; }
html body .card.r5 .card-front.th-lettre .th-rn, html body .card.r6 .card-front.th-lettre .th-rn { color: var(--wxt); background: radial-gradient(circle at 36% 30%, var(--wx1), var(--wx2) 50%, var(--wx3) 100%); box-shadow: none; }
html body .card.r7 .card-front.th-lettre .th-rn { box-shadow: none; }
html body .card .card-front.th-lettre .th-rn::before { inset: 1.35em; width: auto; height: auto; margin: 0; rotate: none; border: 0; opacity: 1; border-radius: 50%; background: radial-gradient(circle at 64% 72%, var(--wx1), var(--wx2) 52%, var(--wx3)); box-shadow: inset .1em .16em .26em rgba(0, 0, 0, .5), inset -.07em -.1em .15em rgba(255, 255, 255, .28), 0 0 0 .14em var(--wx1), 0 0 0 .26em var(--wx3), 0 0 0 .34em var(--wx2); }
html body .card.r7 .card-front.th-lettre .th-rn::before { opacity: 1; border: 0; background: radial-gradient(circle at 64% 72%, rgba(255, 255, 255, .6), rgba(255, 255, 255, .1)); box-shadow: inset .1em .16em .26em rgba(60, 20, 90, .45), inset -.07em -.1em .15em rgba(255, 255, 255, .5), 0 0 0 .14em rgba(255, 255, 255, .8), 0 0 0 .26em rgba(120, 60, 180, .5), 0 0 0 .34em rgba(255, 255, 255, .55); }
html body .card .card-front.th-lettre .th-rn::after { font: 700 1.2em/1 'Playfair Display', Georgia, serif; text-shadow: 0 .06em 0 rgba(255, 255, 255, .4), 0 -.04em 0 rgba(0, 0, 0, .35); }
html body .card .card-front.th-lettre .card-body { top: 19.2em; bottom: .9em; }
html body .card .card-front.th-lettre .th-in::before { top: 12.5em; clip-path: polygon(0 0, 50% 3.62em, 100% 0, 100% 100%, 0 100%); }
html body .card .card-front.th-lettre .th-in::after { top: 12.2em; clip-path: polygon(0 0, 50% 3.62em, 100% 0, 100% 100%, 0 100%); }
html body .card .card-front.th-lettre::before { top: 11.1em; }
html body .card .card-front.th-lettre .desc { -webkit-line-clamp: 2; }
/* Carnet : tache d'encre à la place de la tache de café (en bas à droite, derrière le texte) ; plus de tampon : le rang est la légende de l'image, en petit sous son coin droit */
html body .card .card-front.th-carnet .th-in::after { z-index: -1; left: auto; right: -.5em; top: auto; bottom: -.4em; width: 8.6em; height: 8.6em; opacity: .72; border-radius: 0; -webkit-mask: none; mask: none; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cg fill='rgb(24,32,88)'%3E%3Cpath d='M84.9 60.0 L82.0 61.3 L80.4 62.3 L80.5 63.5 L81.3 64.9 L81.8 66.4 L81.8 67.8 L81.6 69.1 L81.8 70.7 L82.3 72.6 L82.7 74.6 L82.3 76.2 L81.1 77.2 L79.3 77.7 L77.7 78.2 L76.4 78.9 L75.3 79.8 L74.2 80.8 L73.1 81.7 L71.9 82.6 L71.0 84.0 L70.0 85.7 L68.7 86.8 L67.0 86.7 L65.0 84.8 L63.2 82.1 L61.7 80.3 L60.6 80.6 L59.3 83.0 L57.8 85.9 L56.0 87.6 L54.5 87.0 L53.5 84.7 L52.8 82.3 L51.8 81.0 L50.4 81.0 L48.8 81.3 L47.4 80.9 L46.6 79.6 L46.0 78.1 L45.0 77.3 L43.0 77.5 L40.3 78.1 L37.7 78.2 L36.2 77.3 L36.1 75.3 L36.8 73.1 L37.5 71.1 L37.5 69.5 L37.0 68.2 L36.1 67.0 L35.2 65.8 L34.3 64.5 L33.4 63.1 L33.0 61.5 L33.6 60.0 L35.6 58.6 L38.3 57.5 L40.5 56.6 L41.1 55.6 L39.8 54.1 L37.7 52.1 L36.3 50.0 L36.4 48.4 L37.7 47.4 L39.0 46.5 L39.5 45.1 L39.4 43.2 L39.5 41.2 L40.7 40.1 L42.9 40.3 L45.4 41.0 L47.1 41.2 L47.8 39.7 L47.8 36.8 L48.1 33.9 L49.3 32.5 L51.3 33.2 L53.5 35.3 L55.4 37.4 L56.9 38.4 L58.1 38.1 L59.3 37.0 L60.7 36.0 L62.1 35.3 L63.6 34.8 L65.2 34.5 L66.7 34.6 L67.9 35.5 L68.9 37.3 L69.5 39.2 L70.3 40.6 L71.5 41.0 L73.2 40.7 L75.0 40.5 L76.5 40.9 L77.6 41.9 L78.7 42.8 L80.4 43.3 L82.6 43.5 L84.6 44.2 L85.2 45.8 L84.1 48.1 L82.2 50.6 L81.0 52.5 L81.9 53.6 L84.6 54.3 L87.6 55.2 L88.9 56.7 L87.8 58.4Z' opacity='0.5'/%3E%3Cpath d='M81.5 60.0 L81.9 61.3 L81.0 62.4 L79.6 63.4 L78.4 64.3 L77.8 65.2 L77.7 66.3 L78.0 67.6 L78.3 69.0 L78.5 70.4 L78.2 71.7 L77.2 72.5 L75.6 72.8 L73.8 72.7 L72.4 72.7 L71.8 73.6 L71.9 75.5 L72.2 77.8 L71.7 79.4 L70.4 79.6 L68.4 78.5 L66.6 77.0 L65.3 76.4 L64.6 77.5 L64.0 79.6 L63.1 81.6 L61.9 82.2 L60.6 81.3 L59.4 79.7 L58.4 78.5 L57.4 78.4 L56.1 79.0 L54.8 79.7 L53.6 79.8 L52.5 79.2 L51.7 78.2 L50.8 77.4 L49.8 76.9 L48.7 76.5 L47.6 76.0 L46.8 75.3 L46.1 74.3 L45.5 73.3 L44.8 72.4 L44.1 71.6 L43.2 70.8 L42.3 70.0 L41.5 69.1 L40.9 68.1 L40.8 66.8 L41.1 65.6 L41.4 64.3 L41.5 63.2 L40.8 62.2 L39.7 61.2 L38.7 60.0 L38.5 58.8 L39.3 57.6 L40.8 56.7 L42.0 55.8 L42.3 54.8 L41.7 53.5 L41.0 51.9 L40.9 50.6 L41.7 49.7 L43.1 49.1 L44.3 48.6 L44.9 47.7 L45.3 46.5 L45.9 45.5 L46.9 44.9 L48.2 44.8 L49.3 44.3 L49.8 43.1 L50.1 41.3 L50.8 39.8 L52.1 39.8 L53.9 41.3 L55.6 43.1 L56.7 43.6 L57.4 41.9 L58.2 38.8 L59.3 36.4 L60.7 36.4 L61.8 39.1 L62.5 42.6 L63.1 44.5 L64.3 43.6 L66.2 40.8 L68.4 38.4 L69.9 38.4 L70.1 40.8 L69.6 44.1 L69.5 46.2 L70.6 46.2 L73.0 45.0 L75.5 44.1 L76.7 44.7 L76.3 46.7 L75.1 49.0 L74.8 50.5 L76.0 51.0 L78.3 51.0 L80.3 51.4 L80.8 52.6 L79.7 54.2 L78.2 55.8 L77.5 57.0 L78.3 57.9 L80.0 58.9Z' opacity='0.75'/%3E%3Cpath d='M69.3 62.0 L69.1 62.6 L69.1 63.3 L69.0 63.9 L68.9 64.5 L68.9 65.2 L69.2 66.0 L69.6 66.9 L69.9 67.8 L69.8 68.7 L69.2 69.2 L68.2 69.4 L67.2 69.5 L66.4 69.7 L65.9 70.1 L65.5 70.6 L65.1 71.2 L64.6 71.6 L64.1 72.1 L63.6 72.6 L63.1 73.2 L62.6 73.7 L61.9 73.9 L61.1 73.6 L60.3 73.2 L59.6 72.9 L58.9 73.0 L58.3 73.6 L57.6 74.3 L56.9 74.8 L56.1 75.0 L55.4 74.8 L54.7 74.4 L54.1 74.0 L53.5 73.5 L53.1 72.8 L52.8 71.9 L52.6 71.0 L52.2 70.5 L51.5 70.5 L50.5 70.7 L49.4 70.9 L48.5 70.7 L47.9 70.2 L47.7 69.5 L47.5 68.8 L47.2 68.1 L47.0 67.4 L46.9 66.7 L46.9 66.0 L47.0 65.2 L46.8 64.6 L46.4 64.0 L45.8 63.4 L45.4 62.7 L45.5 62.0 L45.9 61.3 L46.6 60.7 L47.0 60.1 L47.1 59.5 L47.0 58.8 L46.9 58.0 L47.0 57.3 L47.1 56.7 L47.3 56.0 L47.4 55.2 L47.5 54.4 L47.9 53.7 L48.6 53.4 L49.5 53.3 L50.4 53.2 L51.1 53.1 L51.6 52.6 L52.0 52.1 L52.5 51.6 L53.1 51.3 L53.8 51.2 L54.4 51.0 L55.0 50.7 L55.6 50.1 L56.2 49.7 L56.9 49.6 L57.6 49.7 L58.3 49.8 L59.0 49.8 L59.8 49.7 L60.5 49.6 L61.2 49.9 L61.7 50.5 L62.2 51.2 L62.7 51.8 L63.2 52.1 L64.0 52.1 L64.7 52.2 L65.3 52.5 L65.8 53.0 L66.3 53.5 L66.8 53.9 L67.4 54.3 L68.0 54.8 L68.4 55.3 L68.5 56.1 L68.6 56.8 L68.9 57.4 L69.4 57.9 L70.1 58.4 L70.6 59.1 L70.6 59.8 L70.2 60.6 L69.7 61.3Z' opacity='0.9'/%3E%3Cpath d='M40.6 48.0 L40.5 48.3 L40.6 48.5 L40.9 48.8 L41.2 49.2 L41.4 49.6 L41.2 49.9 L40.8 50.0 L40.2 50.1 L39.7 50.1 L39.5 50.2 L39.4 50.5 L39.6 50.9 L39.6 51.3 L39.6 51.7 L39.5 52.0 L39.3 52.3 L39.1 52.5 L38.8 52.7 L38.5 52.8 L38.2 52.7 L37.8 52.5 L37.4 52.3 L37.1 52.3 L36.9 52.5 L36.7 53.1 L36.5 53.7 L36.2 54.1 L35.8 54.0 L35.5 53.5 L35.3 52.6 L35.2 52.0 L35.0 51.7 L34.7 51.9 L34.3 52.3 L33.8 52.7 L33.4 52.9 L33.2 52.7 L33.1 52.3 L33.0 51.9 L33.0 51.5 L32.8 51.3 L32.6 51.2 L32.3 51.0 L32.1 50.9 L31.8 50.7 L31.5 50.5 L31.2 50.4 L30.9 50.2 L30.8 49.9 L30.8 49.5 L31.0 49.2 L31.2 48.8 L31.2 48.5 L31.1 48.3 L30.9 48.0 L30.7 47.7 L30.8 47.4 L31.1 47.2 L31.5 47.0 L31.7 46.7 L31.7 46.5 L31.5 46.1 L31.2 45.6 L31.2 45.3 L31.6 45.1 L32.1 45.2 L32.8 45.3 L33.1 45.4 L33.1 45.1 L32.9 44.4 L32.7 43.7 L32.6 43.0 L32.8 42.7 L33.3 42.8 L33.8 43.2 L34.3 43.6 L34.7 43.9 L34.9 43.8 L35.1 43.5 L35.3 43.1 L35.5 42.7 L35.8 42.3 L36.2 42.1 L36.5 42.2 L36.8 42.5 L37.0 43.1 L37.1 43.8 L37.2 44.4 L37.3 44.6 L37.6 44.4 L38.2 43.8 L38.9 43.2 L39.5 42.9 L39.7 43.1 L39.7 43.8 L39.3 44.6 L39.0 45.3 L38.9 45.6 L39.3 45.6 L40.0 45.5 L40.7 45.4 L41.2 45.4 L41.5 45.7 L41.4 46.1 L41.3 46.5 L41.1 46.8 L41.0 47.1 L40.9 47.4 L40.7 47.7Z' opacity='0.85'/%3E%3Ccircle cx='18.4' cy='61.3' r='1.46' opacity='0.7197751180143628'/%3E%3Ccircle cx='17.0' cy='57.2' r='1.67' opacity='0.7281140599093983'/%3E%3Ccircle cx='31.3' cy='39.5' r='0.70' opacity='0.6927616729080269'/%3E%3Ccircle cx='36.4' cy='36.9' r='1.65' opacity='0.6580631791083049'/%3E%3Ccircle cx='27.6' cy='56.8' r='1.90' opacity='0.7846719379922402'/%3E%3Ccircle cx='50.3' cy='20.5' r='0.74' opacity='0.682232336588482'/%3E%3C/g%3E%3C/svg%3E") center / 100% 100% no-repeat; }
html body .card .card-front.th-carnet .th-rn { display: block; z-index: 4; left: auto; right: 1.6em; top: 14.6em; width: auto; height: auto; border: 0; border-radius: 0; background: none; box-shadow: none; rotate: 1.2deg; color: #6b5638; }
html body .card .card-front.th-carnet .th-rn::after { content: 'N° ' attr(data-rn); font: 400 .75em/1 'Special Elite', monospace; letter-spacing: .04em; }
/* Herbier : deux coins d'album photo (bas gauche, haut droite) à la place des scotchs ; cadre du titre et de la description plus haut, remplacé par un morceau de papier de carnet déchiré et collé, sans lignes (même contour pour le papier et son ombre) */
html body .card .card-front.th-herbier { --corner: color-mix(in srgb, color-mix(in srgb, var(--c1) 52%, #d8cfbc) 72%, transparent); --torn: polygon(0.0% 0.8%, 4.7% 1.8%, 10.9% 1.5%, 15.8% 1.8%, 19.6% 1.6%, 24.9% 2.4%, 28.4% 1.0%, 31.9% 2.5%, 37.4% 0.3%, 43.8% 2.9%, 49.2% 1.9%, 52.9% 0.2%, 57.9% 0.4%, 61.7% 0.9%, 65.0% 1.5%, 69.6% 2.6%, 74.6% 2.0%, 79.4% 2.1%, 84.1% 1.0%, 90.6% 3.0%, 96.6% 2.2%, 100.0% 1.4%, 98.9% 7.0%, 98.7% 13.2%, 99.2% 21.2%, 99.1% 29.6%, 99.8% 38.4%, 98.9% 43.4%, 99.3% 52.1%, 99.2% 61.0%, 99.5% 66.3%, 99.0% 74.4%, 99.1% 79.8%, 99.7% 88.6%, 98.9% 94.1%, 100.0% 98.8%, 100.0% 97.1%, 94.6% 97.4%, 89.9% 98.1%, 86.4% 98.8%, 83.0% 98.6%, 79.6% 98.0%, 76.0% 97.6%, 70.1% 99.0%, 66.2% 99.2%, 62.5% 97.9%, 57.0% 98.6%, 53.7% 99.5%, 50.0% 97.6%, 44.7% 97.8%, 40.8% 97.1%, 37.5% 98.4%, 33.8% 98.5%, 29.7% 98.1%, 23.8% 98.2%, 19.1% 99.2%, 15.5% 97.3%, 9.8% 99.0%, 6.1% 97.4%, 0.9% 99.3%, 0.0% 99.0%, 1.0% 93.0%, 0.6% 81.6%, 0.1% 72.5%, 1.0% 65.3%, 0.7% 57.1%, 0.8% 48.8%, 0.3% 38.8%, 0.7% 31.0%, 0.2% 23.6%, 0.9% 13.8%); --holes: radial-gradient(circle at .6em 50%, transparent 0 .28em, #000 .3em) 0 0 / 100% 2.3em repeat-y; --h3: 8.6cqw; --dsc: 6.3cqw; }
html body .card .card-front.th-herbier .th-in::before { left: 2.3em; right: 2.3em; top: 2.1em; width: auto; height: 15em; rotate: -1.2deg; opacity: 1; box-shadow: none; background: linear-gradient(45deg, var(--corner) 0 46%, rgba(255, 255, 255, .55) 46% 50%, transparent 50%) 0 100% / 3.1em 3.1em no-repeat, linear-gradient(225deg, var(--corner) 0 46%, rgba(255, 255, 255, .55) 46% 50%, transparent 50%) 100% 0 / 3.1em 3.1em no-repeat; filter: drop-shadow(.03em .07em .08em rgba(0, 0, 0, .3)); }
html body .card .card-front.th-herbier .th-in::after { content: ''; position: absolute; z-index: 2; left: 1.5em; right: 1.5em; top: 16.9em; bottom: .8em; rotate: .4deg; translate: .12em .25em; background: rgba(50, 35, 10, .4); clip-path: var(--torn); -webkit-mask: var(--holes); mask: var(--holes); }
html body .card .card-front.th-herbier .th-rn { top: calc(17.2em - var(--ts)); }
html body .card .card-front.th-herbier h3 { padding-right: 0; }
html body .card .card-front.th-herbier .card-body { left: 1.5em; right: 1.5em; top: 16.9em; bottom: .8em; padding: 1em 1.2em .7em 1.6em; border: 0; box-shadow: none; rotate: .4deg; clip-path: var(--torn); -webkit-mask: var(--holes); mask: var(--holes); background: #fbf8ec; }
/* BD : le titre tient sur 2 lignes au plus et prend un peu moins de place ; sans description, la ligne rareté-vues reste tout en bas de la carte */
html body .card .card-front.th-bd h3 { font-size: 6.5cqw; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; padding: .22em .6em 0; line-height: 1.2; }   /* pas de marge basse : elle laisserait voir le haut d'une 3e ligne */
html body .card .card-front.th-bd .tag { font-size: 5.2cqw; }
html body .card .card-front.th-bd .meta { margin-top: auto; }
html body .card .card-front.th-bd .desc + .meta { margin-top: 0; }
/* Diagnostic : le chiffre romain du rang est une pastille posée à cheval sur le coin supérieur droit de l'image, comme le numéro de la dérivation sur un moniteur (le rang en battements par minute reste en bas) */
html body .card .card-front.th-ecg::after { content: 'I'; position: absolute; z-index: 6; right: .3em; top: .45em; display: grid; place-items: center; min-width: 2.6em; height: 2.1em; padding: 0 .5em .12em; box-sizing: border-box; border-radius: .6em; background: rgba(255, 255, 255, .94); border: .12em solid var(--tq); box-shadow: inset 0 -.3em 0 var(--tq), 0 .15em .4em rgba(15, 80, 90, .3); color: var(--enc); font: 800 1.25em/1 'Josefin Sans', sans-serif; letter-spacing: 0; }
html body .card.r2 .card-front.th-ecg::after { content: 'II'; }
html body .card.r3 .card-front.th-ecg::after { content: 'III'; }
html body .card.r4 .card-front.th-ecg::after { content: 'IV'; }
html body .card.r5 .card-front.th-ecg::after { content: 'V'; }
html body .card.r6 .card-front.th-ecg::after { content: 'VI'; }
html body .card.r7 .card-front.th-ecg::after { content: 'VII'; }

/* Titres (h1, h2, titre de « Jeux » et d'« Atelier ») : Limelight (capitales d'affiche Art déco, SIL OFL 1.1, voir fonts/OFL.txt) ; le reste du site garde Jost. */
@font-face { font-family: "Limelight"; font-style: normal; font-weight: 400; font-display: block; src: url("fonts/limelight-400-normal.woff2") format("woff2"); }
:root { --font-title: "Limelight", "Josefin Sans", "Jost", system-ui, sans-serif; }
h1, h2, .jxp-title { font-family: var(--font-title); font-weight: 400; }
/* Libellés du menu : Poiret One (SIL OFL 1.1), une seule graisse très fine : léger contour pour l'épaissir */
@font-face { font-family: "Poiret One"; font-style: normal; font-weight: 400; font-display: block; src: url("fonts/poiret-one-400-normal.woff2") format("woff2"); }
.nav-link { font-family: "Poiret One", var(--font); font-weight: 400; font-size: 13px; -webkit-text-stroke: .4px currentColor; }
.top-nav .nav-link { font-size: 11.5px; }

/* Liens soulignés (liens du texte, « Voir mon historique », « Retour »…) : au survol ou au focus, le soulignement s'épaissit, descend un peu et passe au laiton plein ;
   le texte d'un lien sans classe se réchauffe. Les liens sans soulignement (menu, boutons) n'en sont pas affectés. */
a, .link-btn, .rc-all, .sc-back, .sel-clear, .fr-home, .op-encart .op-link, .op-encart .th-link {
  text-decoration-thickness: 1px;
  transition: color .35s var(--ease), text-decoration-color .35s ease, text-decoration-thickness .35s var(--ease), text-underline-offset .35s var(--ease);
}
a:hover, a:focus-visible, .fr-home:hover, .fr-home:focus-visible, .op-encart .op-link:hover, .op-encart .op-link:focus-visible, .op-encart .th-link:hover, .op-encart .th-link:focus-visible, .link-btn:hover, .link-btn:focus-visible, .rc-all:hover, .rc-all:focus-visible, .sc-back:hover, .sc-back:focus-visible, .sel-clear:hover:not(:disabled),
.ws-content a.ws-a:hover, .social-dd .nt-text a:hover { text-decoration-thickness: 2px; text-underline-offset: 6px; text-decoration-color: var(--brass); }
a:not([class]):hover, a:not([class]):focus-visible { color: var(--brass-ink); }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) a, :where(:root[data-motion="reduce"]) .link-btn, :where(:root[data-motion="reduce"]) .rc-all, :where(:root[data-motion="reduce"]) .sc-back, :where(:root[data-motion="reduce"]) .sel-clear, :where(:root[data-motion="reduce"]) .fr-home, :where(:root[data-motion="reduce"]) .op-encart .op-link, :where(:root[data-motion="reduce"]) .op-encart .th-link { transition: none; }

/* ===== Boutons « pièces » : tout bouton qui fait payer ou recevoir des pièces (Recharger le stock, Recycler) =====
   Laiton plein à angles en gradins de 3 px, sur un dégradé clair (pour que l'icône de la pièce se détache), texte sombre ; le prix est dans un compartiment séparé par un filet
   (.rc-cost, .op-refill-cost). Pour en ajouter un : lui donner une de ces classes. */
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) {
  --s: 6px; --t: 2px; --clip: polygon(0px calc(0px + var(--s)), calc(0px + calc(var(--s) / 2)) calc(0px + var(--s)), calc(0px + calc(var(--s) / 2)) calc(0px + calc(var(--s) / 2)), calc(0px + var(--s)) calc(0px + calc(var(--s) / 2)), calc(0px + var(--s)) 0px, calc(100% - var(--s)) 0px, calc(100% - var(--s)) calc(0px + calc(var(--s) / 2)), calc(100% - calc(var(--s) / 2)) calc(0px + calc(var(--s) / 2)), calc(100% - calc(var(--s) / 2)) calc(0px + var(--s)), 100% calc(0px + var(--s)), 100% calc(100% - var(--s)), calc(100% - calc(var(--s) / 2)) calc(100% - var(--s)), calc(100% - calc(var(--s) / 2)) calc(100% - calc(var(--s) / 2)), calc(100% - var(--s)) calc(100% - calc(var(--s) / 2)), calc(100% - var(--s)) 100%, calc(0px + var(--s)) 100%, calc(0px + var(--s)) calc(100% - calc(var(--s) / 2)), calc(0px + calc(var(--s) / 2)) calc(100% - calc(var(--s) / 2)), calc(0px + calc(var(--s) / 2)) calc(100% - var(--s)), 0px calc(100% - var(--s))); --ring: polygon(evenodd, 0px calc(0px + var(--s)), calc(0px + calc(var(--s) / 2)) calc(0px + var(--s)), calc(0px + calc(var(--s) / 2)) calc(0px + calc(var(--s) / 2)), calc(0px + var(--s)) calc(0px + calc(var(--s) / 2)), calc(0px + var(--s)) 0px, calc(100% - var(--s)) 0px, calc(100% - var(--s)) calc(0px + calc(var(--s) / 2)), calc(100% - calc(var(--s) / 2)) calc(0px + calc(var(--s) / 2)), calc(100% - calc(var(--s) / 2)) calc(0px + var(--s)), 100% calc(0px + var(--s)), 100% calc(100% - var(--s)), calc(100% - calc(var(--s) / 2)) calc(100% - var(--s)), calc(100% - calc(var(--s) / 2)) calc(100% - calc(var(--s) / 2)), calc(100% - var(--s)) calc(100% - calc(var(--s) / 2)), calc(100% - var(--s)) 100%, calc(0px + var(--s)) 100%, calc(0px + var(--s)) calc(100% - calc(var(--s) / 2)), calc(0px + calc(var(--s) / 2)) calc(100% - calc(var(--s) / 2)), calc(0px + calc(var(--s) / 2)) calc(100% - var(--s)), 0px calc(100% - var(--s)), 0px calc(0px + var(--s)), var(--t) calc(var(--t) + var(--s)), calc(var(--t) + calc(var(--s) / 2)) calc(var(--t) + var(--s)), calc(var(--t) + calc(var(--s) / 2)) calc(var(--t) + calc(var(--s) / 2)), calc(var(--t) + var(--s)) calc(var(--t) + calc(var(--s) / 2)), calc(var(--t) + var(--s)) var(--t), calc(calc(100% - var(--t)) - var(--s)) var(--t), calc(calc(100% - var(--t)) - var(--s)) calc(var(--t) + calc(var(--s) / 2)), calc(calc(100% - var(--t)) - calc(var(--s) / 2)) calc(var(--t) + calc(var(--s) / 2)), calc(calc(100% - var(--t)) - calc(var(--s) / 2)) calc(var(--t) + var(--s)), calc(100% - var(--t)) calc(var(--t) + var(--s)), calc(100% - var(--t)) calc(calc(100% - var(--t)) - var(--s)), calc(calc(100% - var(--t)) - calc(var(--s) / 2)) calc(calc(100% - var(--t)) - var(--s)), calc(calc(100% - var(--t)) - calc(var(--s) / 2)) calc(calc(100% - var(--t)) - calc(var(--s) / 2)), calc(calc(100% - var(--t)) - var(--s)) calc(calc(100% - var(--t)) - calc(var(--s) / 2)), calc(calc(100% - var(--t)) - var(--s)) calc(100% - var(--t)), calc(var(--t) + var(--s)) calc(100% - var(--t)), calc(var(--t) + var(--s)) calc(calc(100% - var(--t)) - calc(var(--s) / 2)), calc(var(--t) + calc(var(--s) / 2)) calc(calc(100% - var(--t)) - calc(var(--s) / 2)), calc(var(--t) + calc(var(--s) / 2)) calc(calc(100% - var(--t)) - var(--s)), var(--t) calc(calc(100% - var(--t)) - var(--s)), var(--t) calc(var(--t) + var(--s))); --fill: linear-gradient(90deg, color-mix(in srgb, var(--brass) 36%, #fff3c8) 0%, var(--brass) 50%, color-mix(in srgb, var(--brass) 70%, #3a2806) 100%);
  clip-path: var(--clip); position: relative; isolation: isolate; appearance: none; border: 0; box-shadow: none; background: none; color: #1d1606;
  display: inline-flex; align-items: center; justify-content: center; gap: 14px; height: 38px; min-height: 0; padding: 0 18px 0 20px; margin: 2px 0 0; box-sizing: border-box;
  font: 500 11px/1.2 var(--font); letter-spacing: .14em; text-transform: uppercase; text-decoration: none; white-space: nowrap; transition: color .35s ease;
}
/* ::before = le fond plein (dégradé laiton) ; ::after = le contour à gradins, mêmes couleurs. Au survol le fond s'efface et le contour apparaît (opacité seulement) */
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn)::before, html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn)::after { content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none; background: var(--fill); transition: opacity .35s ease; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn)::after { clip-path: var(--ring); opacity: 0; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) > * { position: relative; z-index: 1; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) :is(.rc-cost, .op-refill-cost) { display: inline-flex; align-items: center; gap: 6px; padding-left: 14px; border-left: 1px solid rgba(29, 22, 6, .38); transition: border-color .35s ease; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) b { color: #1d1606; letter-spacing: .04em; transition: color .35s ease; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):is(:hover, :focus-visible):not(:disabled), html body .rc-btn[aria-expanded="true"] { color: var(--brass); outline: none; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):is(:hover, :focus-visible):not(:disabled)::before, html body .rc-btn[aria-expanded="true"]::before { opacity: 0; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):is(:hover, :focus-visible):not(:disabled)::after, html body .rc-btn[aria-expanded="true"]::after { opacity: 1; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):is(:hover, :focus-visible):not(:disabled) :is(.rc-cost, .op-refill-cost) { border-left-color: rgba(255, 244, 214, .4); }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):is(:hover, :focus-visible):not(:disabled) b, html body .rc-btn[aria-expanded="true"] b { color: #fff6dc; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):disabled b { color: var(--muted); }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
/* moins d'animations (boot.js, docs/animations.md) */ html:where([data-motion="reduce"]) body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn), html:where([data-motion="reduce"]) body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn)::before, html:where([data-motion="reduce"]) body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn)::after, html:where([data-motion="reduce"]) body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) :is(.rc-cost, .op-refill-cost), html:where([data-motion="reduce"]) body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) .wc-piece { transition: none; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):disabled::before, html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):disabled::after { display: none; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):disabled { background: var(--line); color: var(--muted); opacity: 1; filter: none; cursor: var(--cur-blocked); animation: none; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):disabled :is(.rc-cost, .op-refill-cost) { border-left-color: var(--brass-line); }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):disabled .wc-piece { opacity: .5; }

/* ===== Réserve (page Paquets), mise en page « R2 » : sans cadre, chaque zone titrée entre deux filets (comme « Tes joyaux » dans l'Atelier) ; stock centré ; série de connexion en rosace ===== */
.op-encart.op-encart--r2 { max-width: 1040px; padding: 0; background: none; clip-path: none; font-size: 14px; --muted: color-mix(in srgb, var(--text) 84%, var(--card)); margin-top: 36px; }
.op-encart--r2::before, .op-encart--r2::after { display: none; }
.op-encart--r2.op-encart--dc { margin-top: 22px; }
.op-encart--r2 .op-inner { padding: 0; background: none; clip-path: none; gap: 30px; }
.op-encart--r2 .op-inner::before, .op-encart--r2 .op-inner::after, .op-encart--r2 .op-head::before, .op-encart--r2 .op-head::after { display: none; }
.op-encart--r2 .op-head { gap: 8px; }
.op-encart--r2 .op-title.jxp-title { --ls: .3em; justify-content: center; font-size: 26px; color: var(--text); text-transform: uppercase; }
.op-encart--r2 .op-title.jxp-title { max-width: 100%; min-width: 0; }   /* jamais plus large que l'encart : sur téléphone, le titre (« Réserve »…) débordait à droite et décalait tout l'encart */
.op-encart--r2 .op-title.jxp-title::before, .op-encart--r2 .op-title.jxp-title::after { width: auto; flex: 0 1 clamp(60px, 14vw, 150px); min-width: 14px; }   /* les ornements raccourcissent avant le texte */
.op-encart--r2 .hint { font-size: 14px; max-width: 70ch; }
.op-encart--r2 .op-label { display: flex; align-items: center; justify-content: center; gap: 16px; margin: 0 0 16px; font-family: var(--font-title); font-size: 14px; font-weight: 400; letter-spacing: .24em; text-transform: uppercase; color: var(--brass-ink); -webkit-text-stroke: 0; }
.op-encart--r2 .op-label::before, .op-encart--r2 .op-label::after { content: ""; flex: 1; height: 1px; background: var(--brass-line); }
.op-encart--r2 .th-head { display: block; border-bottom: 0; padding-bottom: 0; }
.op-encart--r2 .th-head .th-total { display: block; text-align: center; margin-top: -4px; }
.op-encart--r2 .op-zone { gap: 10px; }
.op-encart--r2 .op-zone + .op-zone { border-top: 0; }   /* empilées sur téléphone : le filet du titre de section suffit, pas de second filet entre le stock, les paliers, les jauges et les missions */
@container (min-width: 600px) { .op-encart--r2 .op-zone--stock, .op-encart--r2 .op-zone--gold, .op-encart--r2 .op-zone--diamond, .op-encart--r2 .op-zone--missions { padding-inline: 24px; } }   /* même marge intérieure : les trois zones ont la même largeur utile */
/* stock : tout est centré */
.op-encart--r2 .op-zone--stock { justify-items: center; text-align: center; }
.op-encart--r2 .op-zone--stock > .op-label { justify-self: stretch; }
.op-encart--r2 .pack-stock { justify-content: center; align-items: center; text-align: center; }
.op-encart--r2 .ps-gems { gap: 13px; }
.op-encart--r2 .ps-gems i { width: 14px; height: 14px; }
.op-encart--r2 .ps-count { position: static; width: auto; height: auto; overflow: visible; clip-path: none; font-size: 13px; letter-spacing: .04em; color: var(--muted); white-space: normal; }
.op-encart--r2 .refill-btn { justify-self: center; }
.op-encart--r2 .pack-reserve { justify-items: center; text-align: center; }
/* paliers et missions */
.op-encart--r2 .gold-track, .op-encart--r2 .diamond-track { justify-items: stretch; }
.op-encart--r2 .gt-bar { width: 100%; max-width: 360px; }
.op-encart--r2 .op-m-name { font-size: 14px; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .op-encart--r2 .op-m-count { font-size: 13px; }
.op-encart--r2 .op-m-head { display: contents; }
.op-encart--r2 .op-m-head .op-label { order: 0; }
.op-encart--r2 .op-rewards { order: 1; justify-self: center; }
.op-encart--r2 .op-missions, .op-encart--r2 .op-m-empty { order: 2; }
.op-encart--r2 .op-m-empty { text-align: center; }   /* « Toutes les missions du jour sont terminées » */
.op-encart--r2 .op-m-head .op-link { order: 3; justify-self: center; margin-top: 2px; }
@container (min-width: 600px) {
  .op-encart--r2 .op-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }   /* les trois zones ont la même largeur */
  .op-encart--r2[data-zone="thematic"] .op-grid { grid-template-areas: "themes themes missions"; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: start; }
}
/* série de connexion : frise. Les 14 jours sont sur une piste, dont 7 seulement sont visibles (5 sur un petit écran) ; le jour en cours est au milieu, les flèches (streak.js) font glisser la piste
   en changeant --c (le jour au milieu). Les nœuds sont ceux de la carte de l'Atelier : cercle, coche ou icônes, halo qui pulse sur le jour à récupérer. */
.op-encart--r2 .op-streak { border-top: 0; padding-top: 0; display: grid; justify-items: center; gap: 12px; }
.op-encart--r2 .op-streak > .op-label { justify-self: stretch; }
.op-rose-w { width: 100%; display: grid; justify-items: center; gap: 4px; }
.op-frise { width: 100%; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 6px; }
.fr-view { overflow: hidden; -webkit-mask: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); mask: linear-gradient(90deg, transparent, #000 10%, #000 90%, transparent); }
.fr-track { --sw: 96px; list-style: none; margin: 0; padding: 0; display: flex; width: max-content; transition: transform .55s var(--ease); }
.fr-nd { position: relative; flex: 0 0 var(--sw); width: var(--sw); display: grid; grid-template-rows: 20px 64px auto; justify-items: center; align-content: start; row-gap: 4px; }
.fr-nd::before { content: ""; position: absolute; left: 0; right: 0; top: 52px; height: 2px; background: repeating-linear-gradient(90deg, color-mix(in srgb, var(--brass) 45%, transparent) 0 3px, transparent 3px 8px); opacity: .7; }
.fr-nd.is-done::before { background: var(--brass); opacity: .75; }
.fr-nd.is-cur::before, .fr-nd.is-today::before { background: linear-gradient(90deg, var(--brass) 50%, transparent 100%), repeating-linear-gradient(90deg, color-mix(in srgb, var(--brass) 45%, transparent) 0 3px, transparent 3px 8px); opacity: .75; }   /* la ligne dorée s'estompe vers les jours suivants */
.fr-nd.is-done:has(+ .fr-nd:not(.is-done))::before { background: linear-gradient(90deg, var(--brass) 50%, transparent 100%), repeating-linear-gradient(90deg, color-mix(in srgb, var(--brass) 45%, transparent) 0 3px, transparent 3px 8px); }
.fr-nd.is-done + .fr-nd:not(.is-done):not(.is-cur):not(.is-today)::before { background: linear-gradient(90deg, color-mix(in srgb, var(--brass) 45%, transparent), transparent 50%), repeating-linear-gradient(90deg, color-mix(in srgb, var(--brass) 45%, transparent) 0 3px, transparent 3px 8px); }
.fr-nd .rs-nd { position: relative; z-index: 1; width: 64px; height: 64px; overflow: visible; }
.fr-dn { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); opacity: .85; font-variant-numeric: tabular-nums; white-space: nowrap; align-self: center; }
.fr-nd.is-cur .fr-dn { color: var(--brass-ink); opacity: 1; font-weight: 600; }
.fr-lb { display: grid; gap: 1px; justify-items: center; text-align: center; padding: 0 3px; }
.fr-l { font-size: 11.5px; line-height: 1.3; color: var(--muted); font-variant-numeric: tabular-nums; -webkit-text-stroke: 0; }
.fr-l b { font-weight: 600; color: var(--brass-ink); -webkit-text-stroke: 0; }
.fr-l.fr-s b { color: #aeb6be; } .fr-l.fr-g b { color: #e2b84f; } .fr-l.fr-d b { color: #7fc4ec; }
:root[data-theme="light"] .fr-l.fr-s b { color: #6f7a84; } :root[data-theme="light"] .fr-l.fr-g b { color: #a87d12; } :root[data-theme="light"] .fr-l.fr-d b { color: #2f7fb2; }
.fr-nd.is-ghost { opacity: .38; }
.fr-nd.is-ghost .rs-ring { stroke-dasharray: 3 4; }
.fr-nd.is-ghost .fr-dn { opacity: .7; }
.rs-ck { display: none; }
.is-done .rs-ck { display: block; }
.is-done .rs-ic { display: none; }
.rs-ring { fill: var(--card); stroke: var(--brass-line); stroke-width: 1.4; }
.rs-halo { fill: none; stroke: var(--brass); stroke-width: 1; opacity: 0; transform-box: fill-box; transform-origin: center; }
.is-done .rs-ring { fill: var(--brass-ink); stroke: var(--brass); }
.rs-ck { fill: none; stroke: var(--on-brass); stroke-width: 2.6; stroke-linecap: round; stroke-linejoin: round; }
.is-today .rs-ring { stroke: var(--brass); stroke-width: 2.2; fill: color-mix(in srgb, var(--brass) 16%, var(--card)); }
.is-today .rs-halo { opacity: .55; animation: rs-pulse 2.4s ease-in-out infinite; }
@keyframes rs-pulse { 50% { opacity: .1; scale: 1.18; } }
.fr-nd.is-next .rs-nd { opacity: .55; }
.fr-nd.is-next .rs-ring { stroke-dasharray: 3 4; }
.fr-nav { appearance: none; width: 34px; height: 34px; margin: 0 6px; display: grid; place-items: center; padding: 0; border: 1px solid var(--brass-line); background: var(--card); color: var(--brass-ink); rotate: 45deg; cursor: var(--cur-hand); transition: border-color .3s ease, background .3s ease, color .3s ease, opacity .3s ease; }
.fr-nav svg { width: 16px; height: 16px; rotate: -45deg; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.fr-nav:hover:not(:disabled), .fr-nav:focus-visible { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 14%, var(--card)); color: var(--text); }
.fr-nav:disabled { opacity: .3; cursor: var(--cur-blocked); }
.fr-cap { margin: 4px 0 0; min-height: 26px; display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 4px 16px; font-size: 13px; letter-spacing: .08em; color: var(--muted); }
.fr-home { appearance: none; border: 0; background: none; padding: 2px 0; font: inherit; font-size: 12px; letter-spacing: .04em; color: var(--brass-ink); text-decoration: underline; text-decoration-color: var(--brass-line); text-underline-offset: 4px; cursor: var(--cur-hand); }
.fr-cap b { color: var(--brass-ink); font-weight: 600; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .is-today .rs-halo { animation: none; } :where(:root[data-motion="reduce"]) .fr-track { transition: none; }
.op-encart .link-btn, .op-encart .link-btn:hover { border-bottom: 0; }   /* « Comment ça marche ? » : un seul soulignement (celui des liens, animé), pas deux */

/* Réserve : le titre reste affiché (avec ses chevrons) quand une phrase de garanties s'y ajoute ; en dessous, les chances de tirage */
.op-encart--r2 .op-head:has(.hint:not(:empty)) .op-title { display: flex; }

/* Zone « thématique » : les 15 thèmes en grille régulière sur toute la largeur, puis les missions centrées dessous (le stock et les paliers laissent la place) */
@container (min-width: 600px) {
  .op-encart--r2[data-zone="thematic"] .op-grid { grid-template-areas: "themes" "missions"; grid-template-columns: minmax(0, 1fr); row-gap: 26px; }
  .op-encart--r2[data-zone="thematic"] .th-list { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  .op-encart--r2[data-zone="thematic"] .op-zone--missions { justify-self: center; width: min(100%, 520px); }
}

/* Réserve : phrase de contenu du paquet sous le titre, en gris du site ; stock : les 8 losanges sur 2 lignes de 4, plus grands et plus espacés ; « Voir les missions » et « Fabriquer des paquets à l'Atelier » : des liens comme les autres */
.op-encart--r2 .hint { color: var(--muted); font-size: 14px; }
.op-encart--r2 .ps-gems { display: grid; grid-template-columns: repeat(4, auto); gap: 22px 30px; padding: 10px 6px; justify-content: center; }
.op-encart--r2 .ps-gems i { width: 18px; height: 18px; }
.op-encart .op-link, .op-encart .th-link { font-size: 13px; font-weight: 400; letter-spacing: .02em; text-transform: none; color: var(--brass-ink); text-decoration: underline; text-decoration-color: var(--brass-line); text-underline-offset: 4px; border-bottom: 0; }
.op-encart .op-link::after { content: none; }
.op-encart .op-link:hover, .op-encart .th-link:hover { border-bottom: 0; }
/* Zone « thématique » : pas de missions (le paquet thématique ne fait avancer aucune mission du jour de la Réserve) */
.op-encart--r2[data-zone="thematic"] .op-zone--missions { display: none; }

/* Interrupteurs « capsule fine » (réglages des Paramètres, statistiques du Profil) : contour d'un pixel, pastille ronde qui glisse ; allumée, le contour et la pastille passent au laiton. Le thème clair/sombre (.sw-deco) garde son dessin. */
html body .switch.sw-classique .sw-track { position: relative; display: block; flex: none; width: 42px; height: 22px; box-sizing: border-box; overflow: visible; border: 1px solid var(--brass-line); border-radius: 11px; background: none; transition: border-color .3s ease, background-color .3s ease; }
html body .switch.sw-classique .sw-track::before, html body .switch.sw-classique .sw-track::after { display: none; }
html body .switch.sw-classique .sw-track > i { position: absolute; left: 3px; top: 3px; width: 14px; height: 14px; border-radius: 50%; background: var(--muted); transform: none; translate: 0 0; transition: translate .35s var(--ease), background-color .3s ease; }
html body .switch.sw-classique input:checked + .sw-track { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 14%, transparent); }
html body .switch.sw-classique input:checked + .sw-track > i { transform: none; translate: 20px 0; background: var(--brass); }
html body .switch.sw-classique:hover .sw-track { border-color: var(--brass); }

/* Icônes du menu : chacune a son viewBox (dans header.php) recadré pour que toutes aient le même poids visuel ; l'épaisseur du trait compense l'agrandissement (aucun style en ligne : CSP) */
.nav-link .ic-pack { stroke-width: 1.43; } .nav-link .ic-coll { stroke-width: 1.63; } .nav-link .ic-jeux { stroke-width: 1.25; } .nav-link .ic-atelier { stroke-width: 1.25; } .nav-link .ic-profile { stroke-width: 1.36; }

/* ===== Réserve : cadre à gradins discret, fond sombre ; le fond et le contour s'estompent vite vers le bas ===== */
.op-encart.op-encart--r2 { position: relative; isolation: isolate; padding: 30px 34px 26px; --s: 8px; }
.op-encart.op-encart--r2::before, .op-encart.op-encart--r2::after { display: block; content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  -webkit-mask: linear-gradient(to bottom, #000 0, #000 5%, transparent 55%); mask: linear-gradient(to bottom, #000 0, #000 5%, transparent 55%); }
.op-encart.op-encart--r2::before { --t: 1px; background: color-mix(in srgb, var(--brass) 60%, transparent); clip-path: polygon(evenodd, 0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s)), 0 calc(2*var(--s)), var(--t) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(2*var(--s) + var(--t))); }   /* le contour : un anneau à gradins d'un pixel (le fond sombre est dessous, sans laiton qui transparaisse) */
.op-encart.op-encart--r2::after { inset: 1px; background: linear-gradient(var(--tint), var(--tint)), var(--bg); clip-path: polygon(0 calc(var(--s) * 2), var(--s) calc(var(--s) * 2), var(--s) var(--s), calc(var(--s) * 2) var(--s), calc(var(--s) * 2) 0, calc(100% - var(--s) * 2) 0, calc(100% - var(--s) * 2) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(var(--s) * 2), 100% calc(var(--s) * 2), 100% 100%, 0 100%); }
@container (max-width: 599px) { .op-encart.op-encart--r2 { padding: 22px 16px 18px; } }

/* ===== Zone « thématique » : médaillons à gradins (10 thèmes simples puis 5 bicolores) =====
   Contour et filet intérieur ont les MÊMES gradins (6 px par marche). Fond : comme les cases de joyaux de l'Atelier, un dégradé de la couleur du joyau vers le transparent ;
   un thème bicolore a un halo de chaque couleur à chaque coin du haut. Le thème actif est plein laiton, texte sombre. */
.th-item[data-g1="histoire"] { --g1: #f0a63c; } .th-item[data-g1="geographie"] { --g1: #3f6fd6; } .th-item[data-g1="sport"] { --g1: #e03a52; } .th-item[data-g1="arts"] { --g1: #9c5fd6; } .th-item[data-g1="sciences"] { --g1: #2fb36b; }
.th-item[data-g2="histoire"] { --g2: #f0a63c; } .th-item[data-g2="geographie"] { --g2: #3f6fd6; } .th-item[data-g2="sport"] { --g2: #e03a52; } .th-item[data-g2="arts"] { --g2: #9c5fd6; } .th-item[data-g2="sciences"] { --g2: #2fb36b; }
.th-item { --g1: var(--brass); --g2: var(--brass); --s: 12px; min-height: 112px; padding: 18px 12px 14px; gap: 8px; align-content: center; }
.th-item::after { --s: 12px; inset: 2px; background:
    linear-gradient(180deg, color-mix(in srgb, var(--g1) 30%, transparent), transparent 88%), var(--card); }
.th-item[data-bi]::after { background:
    radial-gradient(ellipse 75% 90% at 0% 0%, color-mix(in srgb, var(--g1) 34%, transparent), transparent 78%),
    radial-gradient(ellipse 75% 90% at 100% 0%, color-mix(in srgb, var(--g2) 34%, transparent), transparent 78%), var(--card); }
.th-item:hover:not(:disabled):not(.is-sel)::after { background-color: color-mix(in srgb, var(--brass) 14%, var(--card)); }
.th-item .th-in { position: absolute; inset: 8px; z-index: 0; pointer-events: none; --s: 6px; --t: 2px; background: var(--brass-line); clip-path: polygon(evenodd, 0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s)), 0 calc(2*var(--s)), var(--t) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(2*var(--s) + var(--t))); }
.th-item .th-n { position: relative; top: auto; left: auto; z-index: 1; width: auto; height: auto; display: block; font-family: var(--font-title); font-size: 28px; font-weight: 400; line-height: 1; letter-spacing: 0; color: var(--text); -webkit-text-stroke: 0; }
.th-item .th-n::before { display: none; }
.th-item .th-name { position: relative; z-index: 1; font-size: 10.5px; letter-spacing: .12em; }
.th-item.is-empty:not(.is-sel) .th-n { color: var(--muted); opacity: .8; }
.th-item.is-empty:not(.is-sel)::after { opacity: .85; }
.th-item.is-sel { color: #1d1606; }
.th-item.is-sel .th-n, .th-item.is-sel .th-name { color: #1d1606; opacity: 1; }
.th-item.is-sel .th-in { background: rgba(29, 22, 6, .55); }

/* ===== Paliers : médaillon (anneau et nombre restant) + règle graduée ===== */
/* Thème clair : le glacier et l’or des paliers, trop pâles sur un fond ivoire (environ 1,5:1), sont foncés */
:root[data-theme="light"] .op-encart { --op-ice-1: #3d9ad2; --op-ice-2: #9fd3f0; --op-gold-1: #b88a14; --op-gold-2: #e2b84f; }
.op-encart--r2 .gold-track, .op-encart--r2 .diamond-track { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; column-gap: 16px; row-gap: 4px; justify-items: stretch; }
.pal-ring { grid-row: 1 / span 2; width: 64px; height: 64px; overflow: visible; }
.pal-ring circle { fill: none; stroke-width: 3; }
.pal-ring .rg-bg { stroke: var(--brass-line); }
.pal-ring .rg-fg { stroke: var(--brass); stroke-linecap: butt; transform: rotate(-90deg); transform-origin: 32px 32px; transition: stroke-dasharray .5s ease; }
.pal-ring .rg-seg { stroke: color-mix(in srgb, var(--op-ice-1) 28%, transparent); transform: rotate(-90deg); transform-origin: 32px 32px; transition: stroke .3s ease; }
.pal-ring .rg-seg.on { stroke: var(--op-ice-1); }
.pal-ring .pal-n { fill: var(--text); font-family: var(--font-title); font-size: 22px; text-anchor: middle; dominant-baseline: central; -webkit-text-stroke: 0; }
.op-encart--r2 .gt-text::before, .op-encart--r2 .dt-text::before { display: none; }
.op-encart--r2 .gt-text, .op-encart--r2 .dt-text { align-self: end; }
.op-encart--r2 .gt-bar { grid-column: 2; align-self: start; position: relative; display: block; width: 100%; max-width: none; height: 20px; padding: 0; border: 0; background:
    linear-gradient(var(--brass-line), var(--brass-line)) 0 50% / 100% 1px no-repeat,
    repeating-linear-gradient(90deg, var(--brass-line) 0 1px, transparent 1px calc(100% / 6)) 0 50% / calc(100% + 1px) 9px no-repeat; overflow: visible; }
.op-encart--r2 .gt-bar i { position: absolute; left: 0; top: 50%; height: 3px; margin-top: -1.5px; background: var(--brass); transition: width .5s ease; }
.op-encart--r2 .gt-bar i::after { content: ""; position: absolute; right: -5.5px; top: -4px; width: 11px; height: 11px; rotate: 45deg; background: var(--brass); box-shadow: 0 0 0 3px var(--card); }
.op-encart--r2 .dt-gems { grid-column: 2; align-self: start; position: relative; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0; height: 20px; padding: 0; }
.op-encart--r2 .dt-gems i { position: relative; display: block; width: auto; height: 3px; margin-top: 8.5px; border: 0; transform: none; rotate: none; background: color-mix(in srgb, var(--op-ice-1) 28%, transparent); box-shadow: none; }
.op-encart--r2 .dt-gems i.on { background: var(--op-ice-1); border: 0; box-shadow: none; }
.op-encart--r2 .dt-gems i::before { content: ""; position: absolute; left: 0; top: -3px; width: 1px; height: 9px; background: var(--brass-line); }
.op-encart--r2 .dt-gems i:last-child::after { content: ""; position: absolute; right: 0; top: -3px; width: 1px; height: 9px; background: var(--brass-line); }
.op-encart--r2 .dt-gems i.on:not(:has(+ i.on))::after { content: ""; position: absolute; right: -5.5px; top: -4px; width: 11px; height: 11px; rotate: 45deg; background: var(--op-ice-1); box-shadow: 0 0 0 3px var(--card); }

/* ===== Stock : anneau de 8 losanges autour du nombre de paquets ===== */
.op-encart--r2 .ps-gems { position: relative; display: block; width: 150px; height: 150px; padding: 0; margin: 4px auto; gap: 0; }
.op-encart--r2 .ps-gems::before, .op-encart--r2 .ps-gems::after { content: ""; position: absolute; border: 1px solid var(--brass-line); border-radius: 50%; }
.op-encart--r2 .ps-gems::before { inset: 13px; }
.op-encart--r2 .ps-gems::after { inset: 25px; opacity: .6; }
.op-encart--r2 .ps-gems i { position: absolute; left: 50%; top: 50%; width: 15px; height: 15px; margin: -7.5px 0 0 -7.5px; border: 1px solid color-mix(in srgb, var(--brass) 36%, transparent); background: none; box-shadow: none;
  transform: rotate(var(--a)) translateY(-62px) rotate(calc(45deg - var(--a))); transition: background .4s ease, border-color .4s ease, box-shadow .4s ease; }
.op-encart--r2 .ps-gems i.on { background: linear-gradient(135deg, var(--brass-ink), var(--brass)); border-color: var(--brass); box-shadow: 0 0 0 2px var(--card), 0 0 0 3px var(--brass-line); }
.op-encart--r2 .ps-gems i:nth-of-type(1) { --a: 0deg; } .op-encart--r2 .ps-gems i:nth-of-type(2) { --a: 45deg; } .op-encart--r2 .ps-gems i:nth-of-type(3) { --a: 90deg; } .op-encart--r2 .ps-gems i:nth-of-type(4) { --a: 135deg; }
.op-encart--r2 .ps-gems i:nth-of-type(5) { --a: 180deg; } .op-encart--r2 .ps-gems i:nth-of-type(6) { --a: 225deg; } .op-encart--r2 .ps-gems i:nth-of-type(7) { --a: 270deg; } .op-encart--r2 .ps-gems i:nth-of-type(8) { --a: 315deg; }
.ps-big { position: absolute; inset: 0; display: grid; place-content: center; text-align: center; line-height: 1; }
.ps-big b { font-family: var(--font-title); font-size: 40px; font-weight: 400; color: var(--text); -webkit-text-stroke: 0; }
.ps-big small { display: block; margin-top: 4px; font-size: 11px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); }

/* Zone « thématique » : de l'air entre la dernière rangée de médaillons et la phrase qui décrit le thème actif */
.op-encart--r2 .th-list { padding-bottom: 14px; }
.op-encart--r2 .th-about { margin-top: 10px; }

/* Stock : anneau plus fin (graduations entre les losanges, halo au centre) */
.op-encart--r2 .ps-gems { width: 156px; height: 156px; }
.op-encart--r2 .ps-gems::before { inset: 10px; border-color: color-mix(in srgb, var(--brass) 55%, transparent); }
.op-encart--r2 .ps-gems::after { inset: 30px; border-color: var(--brass-line); opacity: 1; background: radial-gradient(circle, color-mix(in srgb, var(--brass) 16%, transparent), transparent 72%); }
.op-encart--r2 .ps-gems i { width: 17px; height: 17px; margin: -8.5px 0 0 -8.5px; background: var(--card); transform: rotate(var(--a)) translateY(-68px) rotate(calc(45deg - var(--a))); }
.op-encart--r2 .ps-gems i.on { background: linear-gradient(135deg, color-mix(in srgb, var(--brass) 55%, #fff3c8), var(--brass)); box-shadow: 0 0 0 2px var(--card), 0 0 0 3px var(--brass-line), 0 0 10px color-mix(in srgb, var(--brass) 45%, transparent); }
.ps-big::before { content: ""; position: absolute; inset: 17px; border-radius: 50%; pointer-events: none;
  background: repeating-conic-gradient(from 22.5deg, color-mix(in srgb, var(--brass) 70%, transparent) 0 1deg, transparent 1deg 45deg);
  -webkit-mask: radial-gradient(circle, transparent calc(50% - 9px), #000 calc(50% - 8px), #000 calc(50% - 1px), transparent 50%); mask: radial-gradient(circle, transparent calc(50% - 9px), #000 calc(50% - 8px), #000 calc(50% - 1px), transparent 50%); }
.ps-big small { display: flex; align-items: center; justify-content: center; gap: 6px; }
.ps-big small::before, .ps-big small::after { content: ""; width: 9px; height: 1px; background: var(--brass-line); }

/* Zone « thématique » : médaillons à hauteur fixe, le nombre de paquets toujours au même endroit ; le nom s'adapte (au plus deux lignes, réduit s'il le faut) */
.th-item { height: 118px; min-height: 0; padding: 0 12px; display: grid; grid-template-rows: 38px 38px; align-content: center; justify-items: center; row-gap: 4px; }
.th-item .th-n { align-self: end; transition: color .3s ease; }
.th-item .th-name { align-self: start; display: flex; align-items: center; justify-content: center; width: 100%; height: 38px; overflow: hidden; line-height: 1.25; text-wrap: balance; transition: color .3s ease; }
.th-item .th-in { transition: background .3s ease; }
.th-item.is-long .th-name { font-size: 9.5px; letter-spacing: .08em; }
.th-item.is-xlong .th-name { font-size: 8.5px; letter-spacing: .06em; }

/* La sélection s'anime sans saut : --sel passe de 0 à 1 et fond le dégradé de la couleur du joyau vers le laiton */
@property --sel { syntax: "<number>"; inherits: true; initial-value: 0; }
.th-item { --sel: 0; transition: color .3s ease, --sel .3s ease; }
.th-item.is-sel { --sel: 1; }
.th-item::before, .th-item::after { transition: background .3s ease, background-color .3s ease; }
.th-item::after { background:
    linear-gradient(135deg, color-mix(in srgb, color-mix(in srgb, var(--brass) 42%, #fff3c8) calc(var(--sel) * 100%), transparent), color-mix(in srgb, var(--brass) calc(var(--sel) * 100%), transparent)),
    linear-gradient(180deg, color-mix(in srgb, var(--g1) calc(30% * (1 - var(--sel))), transparent), transparent 88%), var(--card); }
.th-item[data-bi]::after { background:
    linear-gradient(135deg, color-mix(in srgb, color-mix(in srgb, var(--brass) 42%, #fff3c8) calc(var(--sel) * 100%), transparent), color-mix(in srgb, var(--brass) calc(var(--sel) * 100%), transparent)),
    radial-gradient(ellipse 75% 90% at 0% 0%, color-mix(in srgb, var(--g1) calc(34% * (1 - var(--sel))), transparent), transparent 78%),
    radial-gradient(ellipse 75% 90% at 100% 0%, color-mix(in srgb, var(--g2) calc(34% * (1 - var(--sel))), transparent), transparent 78%), var(--card); }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .th-item::before, :where(:root[data-motion="reduce"]) .th-item::after, :where(:root[data-motion="reduce"]) .th-item .th-in, :where(:root[data-motion="reduce"]) .th-item .th-n, :where(:root[data-motion="reduce"]) .th-item .th-name { transition: none; }

/* Réserve : texte un peu moins blanc (thème sombre) */
:root:not([data-theme="light"]) .op-encart.op-encart--r2 { --text: #cdc8bb; --muted: #8c8878; }

/* ===== Stock : l'anneau, sa jauge « horaire » (compte à rebours) et l'apparition d'un losange ===== */
.ps-big::before { content: none; }
.op-encart--r2 .ps-gems { width: 176px; height: 176px; }
.op-encart--r2 .ps-gems::before { inset: 10px; }
.op-encart--r2 .ps-gems::after { inset: 36px; }
.op-encart--r2 .ps-gems i { transform: rotate(var(--a)) translateY(-78px) rotate(calc(45deg - var(--a))); }
.ps-clock { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.ps-clock circle { fill: none; stroke-width: 4; }
.ps-clock .pc-bg { stroke: color-mix(in srgb, var(--brass) 20%, transparent); }
.ps-clock .pc-fg { stroke: var(--brass); stroke-linecap: butt; transition: stroke-dasharray 1s linear; filter: drop-shadow(0 0 3px color-mix(in srgb, var(--brass) 55%, transparent)); }
/* un losange qui s'allume : il surgit en pivotant, déborde un instant puis se pose, avec un anneau de lumière qui s'élargit */
.op-encart--r2 .ps-gems i.is-new { animation: ps-pop .75s cubic-bezier(.2, .9, .3, 1.25) both; animation-delay: var(--d, 0ms); }
.op-encart--r2 .ps-gems i.is-new::after { content: ""; position: absolute; inset: -2px; border: 1px solid var(--brass); animation: ps-burst .9s ease-out both; animation-delay: var(--d, 0ms); }
@keyframes ps-pop { 0% { scale: .15; opacity: 0; filter: brightness(2.2); } 50% { scale: 1.4; opacity: 1; filter: brightness(1.6); } 100% { scale: 1; opacity: 1; filter: none; } }
@keyframes ps-burst { 0% { scale: .6; opacity: .9; } 100% { scale: 2.4; opacity: 0; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .ps-clock .pc-fg { transition: none; } :where(:root[data-motion="reduce"]) .op-encart--r2 .ps-gems i.is-new, :where(:root[data-motion="reduce"]) .op-encart--r2 .ps-gems i.is-new::after { animation: none; }

/* La barre de défilement de la page garde sa place, qu'elle soit nécessaire ou non : la page ne bouge plus d'un côté à l'autre quand sa hauteur change
   (animations d'ouverture d'un paquet, fenêtres, listes qui se replient). Piste transparente : la réserve est presque invisible. */
@media (pointer: coarse) { html { scrollbar-gutter: stable; } }

/* Boutons : l'activation / la désactivation (arrivée dans une zone du carrousel, par exemple) se fait en fondu */
.btn:not(.btn-secondary) { transition: filter .3s ease, opacity .4s ease; }
.btn-secondary { transition: background .3s ease, opacity .4s ease; }
.th-item { transition: color .3s ease, opacity .4s ease, --sel .3s ease; }
.op-grid-ghost { position: absolute; margin: 0; pointer-events: none; z-index: 2; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .btn, :where(:root[data-motion="reduce"]) .btn:not(.btn-secondary), :where(:root[data-motion="reduce"]) .btn-secondary, :where(:root[data-motion="reduce"]) .th-item { transition: none; }   /* « .btn:not(.btn-secondary) » : même spécificité que la règle juste au-dessus, sinon elle l'emportait */
.atl-all.is-closing > summary { border-bottom-color: transparent; transition: border-color .3s ease; }
.atl-all > summary { transition: border-color .3s ease; }

/* Barre de défilement de la page (souris) : la native est cachée, une glissière « flottante » (assets/site.js) la remplace. Elle ne prend aucune place (la page ne bouge jamais), n'a pas de fond,
   et commence sous l'en-tête. Les listes et fenêtres gardent leur barre fine. Écran tactile : la barre native, qui flotte déjà. */
@media (pointer: fine) {
  :root, html { scrollbar-width: none; }
  html::-webkit-scrollbar { display: none; width: 0; height: 0; }
}
.pg-sb { position: fixed; right: 0; z-index: 60; width: 16px; pointer-events: none; opacity: 0; transition: opacity .45s ease; }
.pg-sb.is-on { opacity: 1; }
.pg-sb:not(.is-on) i { pointer-events: none; }
.pg-sb i { position: absolute; left: 0; right: 0; top: 0; pointer-events: auto; cursor: var(--cur-hand); touch-action: none; }
.pg-sb i::after { content: ""; position: absolute; top: 0; bottom: 0; right: 3px; width: 5px; background: color-mix(in srgb, var(--brass) 55%, transparent); transition: width .25s ease, background .25s ease, box-shadow .25s ease; }
.pg-sb i:hover::after, .pg-sb.is-drag i::after { width: 8px; background: var(--brass); box-shadow: 0 0 10px color-mix(in srgb, var(--brass) 55%, transparent); }
.pg-sb.is-drag i { cursor: grabbing; }
html.modal-open .pg-sb, html.is-dragging-tag .pg-sb { opacity: 0; pointer-events: none; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .pg-sb, :where(:root[data-motion="reduce"]) .pg-sb i::after { transition: none; }

/* ===== Pages « vitrine lumineuse » : Collection, Profil, Paramètres =====
   Titres de page à chevrons (comme les Jeux et l'Atelier), panneaux plus sombres que la page avec un halo laiton qui descend de leur bord du haut, titres de section à losange allumé,
   onglets qui rayonnent, losanges de rareté qui brillent de leur couleur. --halo : la lueur sobre qu'on réutilise partout où l'on veut un néon discret. */
:root { --halo: color-mix(in srgb, var(--brass) 42%, transparent); }

.coll-title.jxp-title, .settings-head .jxp-title { justify-content: center; font-size: clamp(24px, 3.6vw, 36px); --ls: .26em; gap: 14px; margin: 0 0 30px; text-align: center; color: var(--text); text-shadow: 0 0 22px color-mix(in srgb, var(--brass) 28%, transparent); }
.coll-title.jxp-title::before, .coll-title.jxp-title::after, .settings-head .jxp-title::before, .settings-head .jxp-title::after { width: clamp(46px, 11vw, 120px); filter: drop-shadow(0 0 5px var(--halo)); }
.settings-head { text-align: center; margin-inline: auto; margin-bottom: 36px; }
.settings-head .jxp-title { margin-bottom: 14px; }

/* panneaux : fond en creux, filet laiton en haut, lueur qui descend */
.coll-panel, .settings .auth-card, .st-card {
  border: 0; border-top: 1px solid var(--brass); box-shadow: 0 -10px 26px -14px var(--halo), inset 0 0 0 1px color-mix(in srgb, var(--brass) 10%, transparent);
  background: linear-gradient(180deg, color-mix(in srgb, var(--brass) 18%, transparent), transparent 96px) top / 100% 96px no-repeat, var(--surface);
}
:root[data-theme="light"] .coll-panel, :root[data-theme="light"] .settings .auth-card, :root[data-theme="light"] .st-card {
  background: linear-gradient(180deg, color-mix(in srgb, var(--brass) 16%, transparent), transparent 96px) top / 100% 96px no-repeat, var(--surface);
}

/* titres de section : un losange allumé devant */
.pf-showcase-head h2, .pf-stats-head h2, .st-card h3 { display: flex; align-items: center; gap: 10px; }
.pf-showcase-head h2::before, .pf-stats-head h2::before, .st-card h3::before, .settings .auth-card h2::before {
  content: ""; flex: none; width: 8px; height: 8px; rotate: 45deg; background: var(--brass); box-shadow: 0 0 10px var(--brass);
}
.settings .auth-card h2 { display: flex; align-items: center; justify-content: center; gap: 12px; }
.pf-showcase-head, .pf-stats-head { border-bottom-color: var(--brass-line); }

/* onglets : l'actif rayonne */
.coll-tab[aria-current="page"], .st-tab[aria-selected="true"] { text-shadow: 0 0 14px var(--halo); }
.coll-tab[aria-current="page"]::after { box-shadow: 0 0 10px var(--brass); }
.st-tab[aria-selected="true"] { box-shadow: 0 6px 12px -8px var(--halo); }

/* chiffres de la collection : laiton dégradé, lueur */
.coll-stats dd { background: linear-gradient(180deg, #fff3c8, var(--brass)); -webkit-background-clip: text; background-clip: text; color: transparent; font-family: var(--font-title); font-weight: 400; filter: drop-shadow(0 0 8px color-mix(in srgb, var(--brass) 30%, transparent)); }
:root[data-theme="light"] .coll-stats dd { background: none; color: var(--brass-ink); filter: none; }

/* losanges de rareté : une lueur de leur couleur, plus forte au survol et quand ils sont choisis */
.rar-opt i { box-shadow: 0 0 8px color-mix(in srgb, var(--rc) 50%, transparent); }
.rar-opt:hover i { scale: 1.12; box-shadow: 0 0 14px color-mix(in srgb, var(--rc) 85%, transparent); }
.rar-opt input:checked + i { box-shadow: 0 0 0 2px var(--surface), 0 0 0 4.5px var(--brass), 0 0 16px color-mix(in srgb, var(--rc) 80%, transparent); }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .rar-opt i { transition: none; }

/* ===== Atelier : cartes de fabrication « médaillon » (comme les thèmes de la Réserve) : dégradé de la couleur du joyau (deux halos pour une alliance), contour épais et filet intérieur à gradins ===== */
.atl-recipe[data-g1="histoire"] { --g1: #f0a63c; } .atl-recipe[data-g1="geographie"] { --g1: #3f6fd6; } .atl-recipe[data-g1="sport"] { --g1: #e03a52; } .atl-recipe[data-g1="arts"] { --g1: #9c5fd6; } .atl-recipe[data-g1="sciences"] { --g1: #2fb36b; }
.atl-recipe[data-g2="histoire"] { --g2: #f0a63c; } .atl-recipe[data-g2="geographie"] { --g2: #3f6fd6; } .atl-recipe[data-g2="sport"] { --g2: #e03a52; } .atl-recipe[data-g2="arts"] { --g2: #9c5fd6; } .atl-recipe[data-g2="sciences"] { --g2: #2fb36b; }
.atl-recipe { --s: 12px; --g1: var(--brass); --g2: var(--brass); isolation: isolate; border: 0; background: none; padding: 30px 28px 20px; gap: 9px; text-align: center; transition: opacity .3s ease; }
.atl-recipe::before, .atl-recipe::after { content: ""; position: absolute; z-index: -1; clip-path: polygon(0 var(--s), calc(var(--s) / 2) var(--s), calc(var(--s) / 2) calc(var(--s) / 2), var(--s) calc(var(--s) / 2), var(--s) 0, calc(100% - var(--s)) 0, calc(100% - var(--s)) calc(var(--s) / 2), calc(100% - var(--s) / 2) calc(var(--s) / 2), calc(100% - var(--s) / 2) var(--s), 100% var(--s), 100% calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s) / 2), calc(100% - var(--s)) calc(100% - var(--s) / 2), calc(100% - var(--s)) 100%, var(--s) 100%, var(--s) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s)), 0 calc(100% - var(--s))); }
.atl-recipe::before { inset: 0; background: var(--brass-line); transition: background .3s ease; }
.atl-recipe::after { inset: 2px; background: linear-gradient(180deg, color-mix(in srgb, var(--g1) 30%, transparent), transparent 70%), var(--card); }
.atl-recipe[data-kind="bi"]::after { background: radial-gradient(ellipse 75% 70% at 0% 0%, color-mix(in srgb, var(--g1) 34%, transparent), transparent 78%), radial-gradient(ellipse 75% 70% at 100% 0%, color-mix(in srgb, var(--g2) 34%, transparent), transparent 78%), var(--card); }
.atl-recipe.is-ready::before { background: var(--brass); }
.atl-in { position: absolute; inset: 8px; z-index: 0; pointer-events: none; --s: 6px; --t: 2px; background: var(--brass-line); clip-path: polygon(evenodd, 0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)), 100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s)), 0 calc(2*var(--s)), var(--t) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(2*var(--s) + var(--t)), calc(var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) calc(var(--s) + var(--t)), calc(2*var(--s) + var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) var(--t), calc(100% - 2*var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(var(--s) + var(--t)), calc(100% - var(--s) - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(2*var(--s) + var(--t)), calc(100% - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - 2*var(--s) - var(--t)), calc(100% - var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--s) - var(--t)), calc(100% - 2*var(--s) - var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--t)), calc(2*var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - var(--s) - var(--t)), calc(var(--s) + var(--t)) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(100% - 2*var(--s) - var(--t)), var(--t) calc(2*var(--s) + var(--t))); }
.atl-recipe .atl-r-name { font-family: var(--font-title); font-weight: 400; font-size: 18px; letter-spacing: .04em; line-height: 1.25; }
.atl-recipe .atl-r-cost { justify-content: center; }
.atl-recipe .atl-craft-btn { width: 100%; justify-content: center; }
.atl-recipe.is-made { animation: atl-flash .9s ease; }
@keyframes atl-flash { 0% { filter: brightness(1.7); } 100% { filter: none; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .atl-recipe.is-made { animation: none; }

/* ===== Néon sobre : menu, carrousel, boutons principaux, champs et cases, compteurs et badges ===== */
/* menu du haut : la page courante s'allume */
.top .nav-link[aria-current="page"] { color: var(--text); text-shadow: 0 0 14px var(--halo); }
.top .nav-link[aria-current="page"]::after { opacity: 1; height: 2px; box-shadow: 0 0 10px var(--brass), 0 0 22px var(--halo); }
.top .nav-link:hover, .top .nav-link:focus-visible { text-shadow: 0 0 10px color-mix(in srgb, var(--text) 30%, transparent); }
/* carrousel : les losanges de zone brillent de la couleur de leur zone */
.pk-dot.is-cur i { box-shadow: 0 0 0 2px color-mix(in srgb, var(--pk-tint) 25%, transparent), 0 0 10px var(--pk-tint), 0 0 22px color-mix(in srgb, var(--pk-tint) 55%, transparent); }
.pk-dot:hover:not(:disabled):not(.is-cur) i { box-shadow: 0 0 8px color-mix(in srgb, var(--pk-tint) 60%, transparent); }
/* champs : contour laiton et halo diffus quand ils sont actifs */
:is(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="hidden"]):not([type="file"]), textarea, select):focus,
.coll-search:focus-within, .sel:focus-within, .multi[open] > summary {
  border-color: var(--brass); outline: none; box-shadow: 0 0 0 1px color-mix(in srgb, var(--brass) 40%, transparent), 0 0 18px -2px var(--halo);
}
.coll-search input:focus, .sel select:focus { box-shadow: none; }
/* cases cochées et interrupteurs allumés */
.dup-toggle input:checked + .dup-box, .check input:checked + .dup-box { box-shadow: 0 0 8px var(--brass), 0 0 18px var(--halo); }
html body .switch.sw-classique input:checked + .sw-track { box-shadow: 0 0 12px -2px var(--halo); }
/* compteurs et badges : lueur douce ; les pastilles battent très lentement */
.pk-badge, .coll-tab-n { box-shadow: 0 0 10px var(--brass), 0 0 22px var(--halo); animation: wc-beat 3s ease-in-out infinite; }
.social-dot { box-shadow: 0 0 8px #d9483f, 0 0 18px color-mix(in srgb, #d9483f 55%, transparent); animation: wc-beat-red 3s ease-in-out infinite; }
@keyframes wc-beat { 50% { box-shadow: 0 0 5px var(--brass), 0 0 10px var(--halo); } }
@keyframes wc-beat-red { 50% { box-shadow: 0 0 4px #d9483f, 0 0 9px color-mix(in srgb, #d9483f 55%, transparent); } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .pk-badge, :where(:root[data-motion="reduce"]) .coll-tab-n, :where(:root[data-motion="reduce"]) .social-dot { animation: none; }

/* Profil : l'interrupteur « Visibles par mes amis » sans cadre */

/* ===== Atelier : « Liste complète des recettes » au style du site (panneau lumineux, médaillons) ===== */
.atl-all { border: 0; border-top: 1px solid var(--brass); margin-top: 38px; box-shadow: 0 -10px 26px -14px var(--halo), inset 0 0 0 1px color-mix(in srgb, var(--brass) 10%, transparent);
  background: linear-gradient(180deg, color-mix(in srgb, var(--brass) 18%, transparent), transparent 96px) top / 100% 96px no-repeat, var(--surface); }
.atl-all > summary { padding: 20px 26px; gap: 14px; font-family: var(--font-title); font-weight: 400; font-size: 17px; letter-spacing: .16em; color: var(--text); text-shadow: 0 0 18px color-mix(in srgb, var(--brass) 25%, transparent); }
.atl-all > summary::before { width: 8px; height: 8px; box-shadow: 0 0 10px var(--brass), 0 0 20px var(--halo); }
.atl-all[open] > summary { border-bottom-color: var(--brass-line); }
.atl-all-in { padding: 22px 24px 26px; }
.atl-chips { gap: 10px; margin-bottom: 8px; }
.atl-chip { padding: 8px 16px 8px 11px; border-color: var(--brass-line); background: color-mix(in srgb, var(--card) 70%, transparent); transition: border-color .3s ease, background-color .3s ease, color .3s ease, box-shadow .3s ease; }
.atl-chip:hover { border-color: var(--brass); box-shadow: 0 0 14px -4px var(--halo); }
.atl-chip.is-cur { border-color: var(--brass); background: linear-gradient(135deg, color-mix(in srgb, var(--brass) 42%, #fff3c8), var(--brass)); color: #1d1606; box-shadow: 0 0 16px -3px var(--halo); }
.atl-list { border: 0; gap: 12px; }
.atl-sec { border: 0; background: none; padding: 20px 0 4px; justify-content: center; gap: 14px; font-family: var(--font-title); font-weight: 400; font-size: 15px; letter-spacing: .16em; color: var(--text); }
.atl-sec::before, .atl-sec::after { content: ""; flex: 1; height: 1px; background: linear-gradient(90deg, transparent, var(--brass-line)); }
.atl-sec::after { rotate: 180deg; }
.atl-sec:first-child { padding-top: 6px; }
.atl-row[data-g1="histoire"] { --g1: #f0a63c; } .atl-row[data-g1="geographie"] { --g1: #3f6fd6; } .atl-row[data-g1="sport"] { --g1: #e03a52; } .atl-row[data-g1="arts"] { --g1: #9c5fd6; } .atl-row[data-g1="sciences"] { --g1: #2fb36b; }
.atl-row[data-g2="histoire"] { --g2: #f0a63c; } .atl-row[data-g2="geographie"] { --g2: #3f6fd6; } .atl-row[data-g2="sport"] { --g2: #e03a52; } .atl-row[data-g2="arts"] { --g2: #9c5fd6; } .atl-row[data-g2="sciences"] { --g2: #2fb36b; }
.atl-row { --s: 8px; --g1: var(--brass); --g2: var(--brass); position: relative; isolation: isolate; border: 0; background: none; padding: 16px 24px; transition: opacity .3s ease; }
.atl-row::before, .atl-row::after { content: ""; position: absolute; z-index: -1; clip-path: polygon(0 var(--s), calc(var(--s) / 2) var(--s), calc(var(--s) / 2) calc(var(--s) / 2), var(--s) calc(var(--s) / 2), var(--s) 0, calc(100% - var(--s)) 0, calc(100% - var(--s)) calc(var(--s) / 2), calc(100% - var(--s) / 2) calc(var(--s) / 2), calc(100% - var(--s) / 2) var(--s), 100% var(--s), 100% calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s) / 2), calc(100% - var(--s)) calc(100% - var(--s) / 2), calc(100% - var(--s)) 100%, var(--s) 100%, var(--s) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s)), 0 calc(100% - var(--s))); }
.atl-row::before { inset: 0; background: var(--brass-line); transition: background .3s ease; }
.atl-row::after { inset: 2px; background: linear-gradient(90deg, color-mix(in srgb, var(--g1) 28%, transparent), transparent 55%), var(--card); }
.atl-row[data-kind="bi"]::after { background: radial-gradient(ellipse 45% 130% at 0% 50%, color-mix(in srgb, var(--g1) 30%, transparent), transparent 80%), radial-gradient(ellipse 45% 130% at 100% 50%, color-mix(in srgb, var(--g2) 30%, transparent), transparent 80%), var(--card); }
.atl-row.is-ready:hover { background: none; }
.atl-row.is-ready:hover::before { background: var(--brass); }
.atl-row.is-made { animation: atl-flash .9s ease; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .atl-row.is-made { animation: none; }   /* la règle des animations réduites de l'Atelier, plus haut, venait avant celle-ci, qui l'emportait */
.atl-stock { border-color: var(--brass-line); background: none; }

/* ===== Profil : statistiques en médaillons (les records en bandeau de médaillons, puis deux anneaux chacun dans son médaillon) ===== */
.pf-stats { display: flex; flex-direction: column; }
.pf-stats > .pf-stats-head { order: 0; } .pf-stats > .sm-msg { order: 1; } .pf-stats > .sm-note { order: 1; }
.pf-stats > .st-tiles { order: 2; margin: 4px 0 26px; } .pf-stats > .st-grid { order: 3; } .pf-stats > .st-since { order: 4; }
.st-tiles { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 14px; }
.st-tile, .pf-stats .st-card { --s: 10px; --g: var(--brass); position: relative; isolation: isolate; border: 0; box-shadow: none; background: none; }
.st-tile::before, .st-tile::after, .pf-stats .st-card::before, .pf-stats .st-card::after { content: ""; position: absolute; z-index: -1; clip-path: polygon(0 var(--s), calc(var(--s) / 2) var(--s), calc(var(--s) / 2) calc(var(--s) / 2), var(--s) calc(var(--s) / 2), var(--s) 0, calc(100% - var(--s)) 0, calc(100% - var(--s)) calc(var(--s) / 2), calc(100% - var(--s) / 2) calc(var(--s) / 2), calc(100% - var(--s) / 2) var(--s), 100% var(--s), 100% calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s) / 2), calc(100% - var(--s)) calc(100% - var(--s) / 2), calc(100% - var(--s)) 100%, var(--s) 100%, var(--s) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s)), 0 calc(100% - var(--s))); }
.st-tile::before, .pf-stats .st-card::before { inset: 0; background: var(--brass-line); }
.st-tile::after, .pf-stats .st-card::after { inset: 2px; background: linear-gradient(180deg, color-mix(in srgb, var(--g) 26%, transparent), transparent 80%), var(--card); }
.st-tile { padding: 16px 12px 14px; text-align: center; justify-items: center; align-content: center; }
.st-tile b { font-family: var(--font-title); font-weight: 400; font-size: 26px; text-shadow: 0 0 16px color-mix(in srgb, var(--g) 45%, transparent); }
.st-tile b.st-best { font-size: 18px; }
.st-tile.r1 { --g: var(--r1); } .st-tile.r2 { --g: var(--r2); } .st-tile.r3 { --g: var(--r3); } .st-tile.r4 { --g: var(--r4); } .st-tile.r5 { --g: var(--r5); } .st-tile.r6 { --g: var(--r6); } .st-tile.r7 { --g: var(--r7); }
.pf-stats .st-card { padding: 24px 26px 24px; --g: var(--r4); }
.pf-stats .st-card + .st-card { --g: var(--r5); }
.pf-stats .st-card figcaption h3 { color: var(--text); }
.pf-stats .st-donut-svg { padding: 6px; border-radius: 50%; box-shadow: 0 0 0 1px var(--brass-line), 0 0 24px -6px color-mix(in srgb, var(--g) 50%, transparent); background: radial-gradient(circle, color-mix(in srgb, var(--g) 10%, transparent), transparent 70%); }

/* Carrousel : plus de lueur derrière les paquets au repos (celle de l'ouverture, secousse et déchirure, reste) */
.pack-stage[data-state="idle"] .p3-glow { display: none; }

/* Profil : la liste « Type de paquet » des statistiques, comme les autres listes déroulantes du site */
.st-pick { display: block; }
.st-pick .ad-select-btn { min-height: 42px; min-width: 190px; padding: 6px 14px; }
.st-pick .ad-select-list { left: auto; right: 0; }
.pf-stats .st-card:has(.ad-select.is-open) { z-index: 6; }

/* Réserve : l'interrupteur « Retourner les cartes moi-même », sans cadre */

/* Thème clair « Sauge et laiton » : la lueur (--halo) y est un halo émeraude plus doux */
:root[data-theme="light"] { --halo: rgba(35, 121, 90, .30); }

/* =====================================================================================================================
   SUCCÈS : le grand livre (public/succes.php, src/AchievementsView.php, assets/succes.js) et ses timbres.
   Un chapitre = une double page ; un signet par chapitre sur la tranche. Timbre obtenu : en couleur, cachet de la poste ; à faire : grisé et transparent.
   Aucun style en ligne (CSP) : couleurs (.sc-N), formes (.sh-X), tailles (.sz-b), inclinaisons (.tl-N) et décalages (.of-N) sont des classes.
   Les dessins des timbres (sprite) viennent de src/AchievementArt.php ; la dentelure est un masque SVG : elle est transparente sur n'importe quel fond.
   ===================================================================================================================== */
.nav-link .ic-succes { stroke-width: 1.25; }
.nav-link .ic-comptoir { stroke-width: 1.25; }

/* couleurs des chapitres (les mêmes en clair et en sombre : les timbres ont toujours un papier crème) */
.sc-0 { --sc: #a9812f; } .sc-1 { --sc: #b8332b; } .sc-2 { --sc: #7a4cc0; } .sc-3 { --sc: #1f7a5a; } .sc-4 { --sc: #b5532a; } .sc-5 { --sc: #a87a14; }
.sc-6 { --sc: #2f6fb5; } .sc-7 { --sc: #c2477a; } .sc-8 { --sc: #1f8586; } .sc-9 { --sc: #6c7d1c; } .sc-10 { --sc: #5b5f9f; } .sc-11 { --sc: #c2641c; }

.bk-main .jxp-head { margin-bottom: 46px; }

.bk {
  --bk-paper: #f3ebd6; --bk-paper-2: #e3d8bb; --bk-ink: #2b261b; --bk-soft: #6a634f; --bk-line: rgba(120, 92, 30, .38);
  --bk-cover: #6a4029; --bk-cover-2: #35200f; --bk-gold: #b8923f; --bk-shadow: rgba(20, 30, 25, .42); --st-paper: #fbf5e3;
  position: relative; display: grid; grid-template-columns: minmax(0, 1fr); justify-items: center; width: min(100%, 1120px); margin: 0 auto; padding-right: 52px;
}
:root:not([data-theme="light"]) .bk {
  --bk-paper: #1f2f28; --bk-paper-2: #16231d; --bk-ink: #ece4cf; --bk-soft: #a39d88; --bk-line: rgba(201, 164, 92, .34);
  --bk-cover: #55331f; --bk-cover-2: #24130a; --bk-gold: #c9a45c; --bk-shadow: rgba(0, 0, 0, .7); --st-paper: #f4ecd5;
}

/* La couverture : cuir sombre, équerres dorées aux quatre coins ; les signets dépassent de la tranche à droite */
.bk-frame {
  --g: var(--bk-gold);
  /* cuir : le grain du style de carte « Livre » (bruit fin), un reflet doux en haut à gauche, un dégradé brun ; équerres dorées et couture en pointillé */
  --bk-grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='a'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='1.1' numOctaves='2' seed='7'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .34 -.1'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23a)'/%3E%3C/svg%3E");
  position: relative; width: 100%; padding: clamp(22px, 3.1vw, 40px); border-radius: 6px;
  background:
    linear-gradient(var(--g), var(--g)) left 4px top 4px / 30px 2px no-repeat, linear-gradient(var(--g), var(--g)) left 4px top 4px / 2px 30px no-repeat,
    linear-gradient(var(--g), var(--g)) right 4px top 4px / 30px 2px no-repeat, linear-gradient(var(--g), var(--g)) right 4px top 4px / 2px 30px no-repeat,
    linear-gradient(var(--g), var(--g)) left 4px bottom 4px / 30px 2px no-repeat, linear-gradient(var(--g), var(--g)) left 4px bottom 4px / 2px 30px no-repeat,
    linear-gradient(var(--g), var(--g)) right 4px bottom 4px / 30px 2px no-repeat, linear-gradient(var(--g), var(--g)) right 4px bottom 4px / 2px 30px no-repeat,
    var(--bk-grain), radial-gradient(120% 70% at 22% 0, rgba(255, 255, 255, .2), transparent 62%), linear-gradient(150deg, var(--bk-cover), var(--bk-cover-2));
  box-shadow: 0 34px 60px -26px var(--bk-shadow), 0 0 0 1px rgba(0, 0, 0, .45), inset 0 0 0 1px rgba(255, 255, 255, .08), inset 0 2px 3px rgba(255, 255, 255, .16), inset 0 -3px 8px rgba(0, 0, 0, .35);
}
.bk-frame::before { content: ""; position: absolute; inset: 12px; border: 1.5px dashed color-mix(in srgb, var(--bk-gold) 70%, transparent); border-radius: 4px; pointer-events: none; }

.bk-book { position: relative; display: grid; grid-template-columns: minmax(0, 1fr); aspect-ratio: 200 / 128; background: var(--bk-paper); box-shadow: 0 10px 12px -9px rgba(0, 0, 0, .55); }
/* tranche des pages (feuillets) sous le livre, et rainure au milieu */
.bk-book::after {
  content: ""; position: absolute; left: 1px; right: 1px; top: 100%; height: 6px; border-radius: 0 0 3px 3px; pointer-events: none;
  background: repeating-linear-gradient(180deg, var(--bk-paper-2) 0 1px, var(--bk-paper) 1px 2px); box-shadow: 0 2px 0 rgba(0, 0, 0, .25);
}
.bk-book::before {
  content: ""; position: absolute; z-index: 2; left: 50%; top: 0; bottom: 0; width: 96px; translate: -50% 0; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(0, 0, 0, .12) 30%, rgba(0, 0, 0, .3) 47%, rgba(0, 0, 0, .42) 50%, rgba(0, 0, 0, .3) 53%, rgba(0, 0, 0, .12) 70%, transparent);
}

.bk-spread { grid-area: 1 / 1; display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); visibility: hidden; pointer-events: none; }
.bk-spread.is-cur { visibility: visible; pointer-events: auto; }
.bk:not(.bk-js) .bk-spread:not(:first-child) { display: none; }
.bk:not(.bk-js) .bk-spread:first-child { visibility: visible; pointer-events: auto; }
.bk-spread.is-cur .bk-r { transform-origin: left center; animation: bk-turn .6s var(--ease); }
.bk-spread.is-cur .bk-l { animation: bk-in .5s var(--ease); }
@keyframes bk-turn { from { transform: perspective(1800px) rotateY(-22deg); opacity: .15; } }
@keyframes bk-in { from { opacity: 0; translate: 0 8px; } }

.bk-page {
  position: relative; container-type: inline-size; color: var(--bk-ink); background: var(--bk-paper);
  background-image: radial-gradient(120% 90% at 50% 0, rgba(255, 255, 255, .05), transparent 60%);
}
.bk-l, .bk-r { background-image: radial-gradient(120% 90% at 50% 0, rgba(255, 255, 255, .06), transparent 60%); }
.bk-l {
  border-radius: 3px 0 0 3px;
  background-image: linear-gradient(90deg, rgba(255, 255, 255, .07) 0, transparent 5%, transparent 58%, rgba(0, 0, 0, .1) 78%, rgba(0, 0, 0, .3) 100%), radial-gradient(120% 90% at 50% 0, rgba(255, 255, 255, .06), transparent 60%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .14);
}
.bk-r {
  border-radius: 0 3px 3px 0;
  background-image: linear-gradient(270deg, rgba(255, 255, 255, .07) 0, transparent 5%, transparent 58%, rgba(0, 0, 0, .1) 78%, rgba(0, 0, 0, .3) 100%), radial-gradient(120% 90% at 50% 0, rgba(255, 255, 255, .06), transparent 60%);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .14);
}
/* filet fin tout autour de la page (un cadre Art déco discret) */
.bk-page::before { content: ""; position: absolute; inset: 3.2cqw; border: 1px solid var(--bk-line); pointer-events: none; }
.bk-in { position: relative; padding: 7.4cqw 7cqw 9cqw; }
.bk-pn { position: absolute; left: 0; right: 0; bottom: 4.4cqw; text-align: center; font: 500 max(10px, 2.3cqw)/1 "Josefin Sans", var(--font); letter-spacing: .3em; color: var(--bk-soft); }

.bk-head { text-align: center; }
.bk-no { margin: 0; font: 500 max(10px, 2.2cqw)/1.2 "Josefin Sans", var(--font); letter-spacing: .36em; text-transform: uppercase; color: var(--sc, var(--bk-gold)); }
.bk-h { margin: 1.6cqw 0 0; font: 400 max(24px, 6.6cqw)/1.05 var(--font-title); letter-spacing: .06em; color: var(--bk-ink); }
.bk-h::after { content: ""; display: block; width: 24cqw; height: 1px; margin: 2.4cqw auto 0; background: linear-gradient(90deg, transparent, var(--sc, var(--bk-gold)), transparent); }
.bk-lead { margin: 1.8cqw auto 0; max-width: 40ch; font: 400 max(12.5px, 2.5cqw)/1.5 "Josefin Sans", var(--font); letter-spacing: .02em; color: var(--bk-soft); text-wrap: balance; }
.bk-count { margin: 1.6cqw 0 0; font: 500 max(12px, 2.6cqw)/1 "Josefin Sans", var(--font); letter-spacing: .18em; color: var(--bk-soft); }
.bk-count b { font-size: 1.5em; font-weight: 600; color: var(--sc, var(--bk-gold)); }

/* sommaire : le total à gauche (anneau), la table des matières à droite */
.bk-cover-page .bk-in { text-align: center; }
.bk-cover-page .bk-h { font-size: max(34px, 10cqw); }
.bk-cover-page { overflow: hidden; }
.bk-cover-page::after { content: ""; position: absolute; inset: auto 9% 7% 9%; aspect-ratio: 2 / 1; background: var(--bk-gold); opacity: .08; -webkit-mask: var(--fan) center / contain no-repeat; mask: var(--fan) center / contain no-repeat; pointer-events: none; }
.bk-ring { position: relative; display: grid; place-content: center; width: 44cqw; margin: 6cqw auto 0; aspect-ratio: 1; text-align: center; }
.bk-ring svg { position: absolute; inset: 0; width: 100%; height: 100%; }
.bk-ring-bg { fill: none; stroke: var(--bk-line); stroke-width: 5; }
.bk-ring-fg { fill: none; stroke: var(--bk-gold); stroke-width: 5; }
.bk-ring b { font: 400 max(30px, 11cqw)/1 var(--font-title); color: var(--bk-ink); }
.bk-ring span { margin-top: 1cqw; font: 500 max(11px, 2.4cqw)/1 "Josefin Sans", var(--font); letter-spacing: .24em; text-transform: uppercase; color: var(--bk-soft); }
.bk-toc { list-style: none; margin: 3.4cqw 0 0; padding: 0; display: grid; gap: 1.5cqw; }
.bk-toc-i { appearance: none; width: 100%; display: grid; grid-template-columns: max(24px, 6cqw) 1fr auto; align-items: center; gap: 0 2.6cqw; padding: 1.6cqw 2cqw; border: 0; border-bottom: 1px solid var(--bk-line); background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; transition: background .25s ease; }
.bk-toc-i:hover, .bk-toc-i:focus-visible { background: color-mix(in srgb, var(--sc) 12%, transparent); }
.bk-toc-g { grid-row: span 2; width: max(24px, 6cqw); height: max(24px, 6cqw); color: var(--sc); }
.bk-toc-t { font: 500 max(14px, 3.1cqw)/1.2 "Josefin Sans", var(--font); letter-spacing: .1em; text-transform: uppercase; }
.bk-toc-c { font: 400 max(14px, 3.1cqw)/1 var(--font-title); color: inherit; } .bk-toc-c i { font-style: normal; margin: 0 .15em; }   /* la couleur du nom du chapitre (le texte du livre) */
.bk-toc-b { grid-column: 2 / 4; height: 3px; background: var(--bk-line); }
.bk-toc-b i { display: block; height: 100%; width: 0; background: var(--sc); }

/* ---------- Les signets : une bande par chapitre, assez longue pour se glisser SOUS la couverture (le cadre est au-dessus) ; le chapitre ouvert est tiré vers la droite, sans jamais laisser de vide ---------- */
.bk-tabs { position: absolute; z-index: 0; right: 8px; top: 96px; width: 112px; display: flex; flex-direction: column; gap: 5px; }
.bk-frame { z-index: 1; }
.bk-tab {
  appearance: none; position: relative; display: flex; align-items: center; justify-content: flex-end; width: 100%; height: 50px; padding: 0 10px 0 0; border: 0; cursor: pointer; color: #fbf6e6; background: var(--sc);
  border-radius: 0 9px 9px 0; box-shadow: inset -3px 0 0 rgba(0, 0, 0, .18), 2px 3px 6px -2px rgba(0, 0, 0, .5); translate: 0 0; transition: translate .3s var(--ease), filter .25s ease;
}
.bk-tab::before { content: ""; position: absolute; right: 4px; top: 4px; bottom: 4px; width: 36px; border: 1px solid rgba(255, 255, 255, .32); border-radius: 6px; pointer-events: none; }
.bk-tab-g { position: relative; width: 25px; height: 25px; color: #fbf6e6; }
.bk-tab:hover, .bk-tab:focus-visible { translate: 5px 0; }
.bk-tip {
  position: absolute; z-index: 6; display: grid; gap: 4px; padding: 10px 18px 10px 16px; white-space: nowrap; pointer-events: none; background: var(--surface); color: var(--text);
  border: 1px solid var(--brass-line); border-right: 3px solid var(--sc, var(--brass)); box-shadow: 0 12px 24px -10px rgba(0, 0, 0, .6); opacity: 0; translate: 8px 0; transition: opacity .2s ease, translate .3s var(--ease);
}
.bk-tip.is-on { opacity: 1; translate: 0 0; }
.bk-tip b { font: 500 11.5px/1 "Josefin Sans", var(--font); letter-spacing: .24em; text-transform: uppercase; }
.bk-tip i { font: 400 11px/1 "Josefin Sans", var(--font); font-style: normal; letter-spacing: .16em; color: var(--sc, var(--brass)); font-variant-numeric: tabular-nums; }
.bk-tip::before { content: ""; position: absolute; right: -8px; top: 50%; width: 9px; height: 9px; translate: 0 -50%; rotate: 45deg; background: var(--surface); border-right: 1px solid var(--brass-line); border-top: 1px solid var(--brass-line); }
.bk-tab:not(.is-cur) { filter: saturate(.7) brightness(.9); }
.bk-tab.is-cur { translate: 9px 0; filter: none; }

/* ---------- Pagination : les deux flèches en losange du carrousel de « Paquets » (.pk-nav) ---------- */
/* Flèches aux deux bords de la barre, le chapitre et la page (« Amis et échanges · 1/2 ») occupent toute la place entre elles : jamais coupés, sur deux lignes en dernier recours */
.bk-pager { --pk-nav: 44px; display: grid; grid-template-columns: var(--pk-nav) minmax(0, 1fr) var(--pk-nav); align-items: center; gap: clamp(10px, 3vw, 28px); width: 100%; max-width: 560px; margin: 34px auto 0; }
.bk-pager .pk-navwrap { margin: 0; justify-self: center; }
.bk-where { text-align: center; font: 500 13px/1.45 "Josefin Sans", var(--font); letter-spacing: .26em; text-transform: uppercase; color: var(--muted); text-wrap: balance; overflow-wrap: anywhere; }

/* ---------- La légende du timbre touché : un médaillon comme les recettes de l'Atelier (angles en gradins, filet intérieur, dégradé de la couleur du chapitre), puis le motif, le nom, un filet orné, la condition et l'état ---------- */
.bk-caption {
  --s: 12px; --g1: var(--sc); --g2: color-mix(in srgb, var(--sc) 55%, #fff);
  position: relative; isolation: isolate; display: flex; align-items: center; justify-content: center; gap: 24px; width: min(100%, 720px); height: 140px; margin-top: 30px; padding: 20px 34px; box-sizing: border-box; text-align: left;
}
.bk-caption::before, .bk-caption::after { content: ""; position: absolute; z-index: -1; clip-path: polygon(0 var(--s), calc(var(--s) / 2) var(--s), calc(var(--s) / 2) calc(var(--s) / 2), var(--s) calc(var(--s) / 2), var(--s) 0, calc(100% - var(--s)) 0, calc(100% - var(--s)) calc(var(--s) / 2), calc(100% - var(--s) / 2) calc(var(--s) / 2), calc(100% - var(--s) / 2) var(--s), 100% var(--s), 100% calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s) / 2), calc(100% - var(--s)) calc(100% - var(--s) / 2), calc(100% - var(--s)) 100%, var(--s) 100%, var(--s) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s)), 0 calc(100% - var(--s))); }
.bk-caption:not(.is-set) { --sc: var(--brass); }
.bk-caption::before { inset: 0; background: var(--brass-line); transition: background .4s ease; }
.bk-caption::after { inset: 2px; background: linear-gradient(120deg, color-mix(in srgb, var(--g1) 46%, transparent), color-mix(in srgb, var(--g2) 12%, transparent) 62%, transparent), radial-gradient(ellipse 70% 130% at 0% 0%, color-mix(in srgb, var(--g1) 30%, transparent), transparent 75%), var(--card); transition: background .4s ease; }
.bk-caption.is-set::before { background: var(--sc); }
.bk-caption .atl-in { z-index: 0; }
.bk-caption > :not(.atl-in) { position: relative; z-index: 1; }
.bk-cap-hint { margin: 0; color: var(--muted); font: 400 15px/1.5 "Josefin Sans", var(--font); letter-spacing: .05em; text-align: center; }
.bk-cap-medal { position: relative; flex: none; display: grid; place-items: center; width: 62px; height: 62px; rotate: 45deg; border: 1.5px solid var(--sc); background: color-mix(in srgb, var(--sc) 14%, var(--card)); box-shadow: 0 0 0 4px var(--card), 0 0 0 5px color-mix(in srgb, var(--sc) 45%, transparent); }
.bk-cap-medal svg { width: 34px; height: 34px; rotate: -45deg; color: var(--sc); }
.bk-caption:not(.is-on) .bk-cap-medal { filter: grayscale(1); opacity: .65; }
.bk-cap-txt { min-width: 0; flex: 1; }
.bk-cap-n { margin: 0; font: 400 21px/1.2 var(--font-title); letter-spacing: .06em; color: var(--text); }
.bk-cap-sep { position: relative; display: block; height: 1px; margin: 10px 0 11px 5px; background: linear-gradient(90deg, var(--sc), transparent 88%); }
.bk-cap-sep::before { content: ""; position: absolute; left: 0; top: 50%; width: 7px; height: 7px; translate: -50% -50%; rotate: 45deg; background: var(--sc); }
.bk-cap-d { margin: 0; font: 400 15.5px/1.45 "Josefin Sans", var(--font); color: var(--text); text-wrap: balance; }
.bk-cap-s { display: flex; align-items: center; gap: 9px; margin: 10px 0 0; font: 600 11px/1 "Josefin Sans", var(--font); letter-spacing: .28em; text-transform: uppercase; color: var(--muted); }
.bk-cap-s::before { content: ""; width: 7px; height: 7px; rotate: 45deg; background: currentColor; opacity: .7; }
.bk-cap-bar { position: relative; flex: 1 1 90px; max-width: 220px; height: 5px; background: var(--track); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--sc) 30%, transparent); }
.bk-cap-bar i { position: absolute; inset: 0 auto 0 0; background: linear-gradient(90deg, color-mix(in srgb, var(--sc) 70%, #fff), var(--sc)); transition: width .6s var(--ease); }
.bk-cap-s b { font-weight: 600; letter-spacing: .12em; color: var(--text); font-variant-numeric: tabular-nums; white-space: nowrap; }
@supports (text-box: trim-both cap alphabetic) { .bk-cap-s > span, .bk-cap-s > b { text-box: trim-both cap alphabetic; } }
.bk-caption.is-on .bk-cap-s { color: var(--sc); } .bk-caption.is-on .bk-cap-s::before { opacity: 1; }

/* ---------- Les timbres ---------- */
/* Trois timbres par rangée au plus (leur largeur est plafonnée par --cap : le 4e ne tient jamais) : 5 timbres sur la page de titre d'un chapitre (3 + 2), 6 sur les autres (3 + 3), quelle que soit la forme ; les rangées se répartissent sur la hauteur de la page */
.bk-stamps { --cap: 26.5cqw; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; align-content: space-around; gap: 3.6cqw 2.6cqw; margin-top: 4.4cqw; }
.bk-stamps.is-head { --cap: 24.5cqw; min-height: 63cqw; row-gap: 6cqw; align-content: center; }
.bk-stamps.is-body { min-height: 100cqw; row-gap: 12cqw; align-content: center; }
/* titre courant en haut des pages qui ne portent pas le titre du chapitre, et feuille laissée vide en fin de chapitre */
.bk-run { margin: 0; display: flex; align-items: center; justify-content: center; gap: 2.4cqw; font: 500 max(10px, 2.2cqw)/1 "Josefin Sans", var(--font); letter-spacing: .34em; text-transform: uppercase; color: var(--sc, var(--bk-gold)); }
.bk-run::before, .bk-run::after { content: ""; width: 9cqw; height: 1px; background: linear-gradient(90deg, transparent, currentColor); opacity: .6; }
.bk-run::after { transform: scaleX(-1); }
.bk-blank .bk-in { display: grid; place-items: center; min-height: 80cqw; }
.bk-orn { width: 22cqw; aspect-ratio: 2 / 1; background: var(--sc, var(--bk-gold)); opacity: .22; -webkit-mask: var(--fan) center / contain no-repeat; mask: var(--fan) center / contain no-repeat; }
.st {
  --w: 24; --ar: 80 / 100; --f: 1; appearance: none; position: relative; flex: none; container-type: inline-size; width: min(calc(var(--w) * var(--f) * 1cqw), var(--cap, 26.5cqw)); aspect-ratio: var(--ar); margin: 0; padding: 0; border: 0; background: none;
  color: var(--sc); font: inherit; cursor: pointer; rotate: var(--tl, 0deg); translate: 0 var(--of, 0cqw); transition: scale .3s var(--ease), filter .3s ease, opacity .3s ease;
}
.sh-p { --ar: 80 / 100; --w: 24; } .sh-l { --ar: 100 / 80; --w: 31; } .sh-s { --ar: 1; --w: 26; } .sh-d { --ar: 1; --w: 29; }
.sh-r { --ar: 1; --w: 27; } .sh-a { --ar: 80 / 100; --w: 24; } .sh-h { --ar: 1; --w: 28; }
.sz-b { --f: 1.24; }
.tl-0 { --tl: -4.5deg; } .tl-1 { --tl: -3.2deg; } .tl-2 { --tl: -1.6deg; } .tl-3 { --tl: -.6deg; } .tl-4 { --tl: 0deg; } .tl-5 { --tl: .8deg; } .tl-6 { --tl: 2deg; } .tl-7 { --tl: 3.4deg; } .tl-8 { --tl: 4.6deg; }
.of-0 { --of: 0cqw; } .of-1 { --of: 1.2cqw; } .of-2 { --of: -1cqw; } .of-3 { --of: 2.2cqw; } .of-4 { --of: -1.8cqw; } .of-5 { --of: .6cqw; } .of-6 { --of: 1.8cqw; }

.st-f { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; }
.st-paper { fill: var(--st-paper); }
.st-line { fill: none; stroke: var(--sc); stroke-width: .9; opacity: .55; }
.st-g { position: absolute; aspect-ratio: 1; height: auto; color: var(--sc); }
.st-v { position: absolute; left: 50%; translate: -50% 0; font: 700 max(8px, 8.4cqw)/1 "Josefin Sans", var(--font); letter-spacing: .08em; color: var(--sc); white-space: nowrap; }
.st-n { position: absolute; display: grid; place-items: center; text-align: center; font: 600 max(8px, 6.9cqw)/1.15 "Josefin Sans", var(--font); letter-spacing: .07em; text-transform: uppercase; color: #2b261b; text-wrap: balance; overflow-wrap: normal; word-break: normal; hyphens: none; }
.st-pm { position: absolute; right: -9%; top: -7%; width: 44%; aspect-ratio: 1; color: var(--sc); opacity: .6; rotate: -14deg; mix-blend-mode: multiply; pointer-events: none; }
:root:not([data-theme="light"]) .st-pm { opacity: .5; }

/* géométrie propre à chaque forme (en % du timbre) : chiffre, motif, nom */
.sh-p .st-v { top: 9.5%; }     .sh-p .st-g { left: 23%; top: 18%; width: 54%; }   .sh-p .st-n { left: 8%; top: 69%; width: 84%; height: 22%; }
.sh-l .st-v { top: 11.5%; }    .sh-l .st-g { left: 33%; top: 20%; width: 34%; }   .sh-l .st-n { left: 10%; top: 64%; width: 80%; height: 26%; }
.sh-s .st-v { top: 10.5%; }    .sh-s .st-g { left: 27%; top: 19%; width: 46%; }   .sh-s .st-n { left: 9%; top: 66%; width: 82%; height: 25%; }
.sh-d .st-v { top: 19%; font-size: max(7px, 7cqw); } .sh-d .st-g { left: 34%; top: 28%; width: 32%; } .sh-d .st-n { left: 27%; top: 63%; width: 46%; height: 20%; font-size: max(7px, 6.2cqw); }
.sh-r .st-v { top: 11%; font-size: max(7px, 7.4cqw); } .sh-r .st-g { left: 30%; top: 21%; width: 40%; } .sh-r .st-n { left: 17%; top: 64%; width: 66%; height: 20%; font-size: max(7px, 6.4cqw); }
.sh-a .st-v { top: 11%; }      .sh-a .st-g { left: 22%; top: 21%; width: 56%; }   .sh-a .st-n { left: 8%; top: 69%; width: 84%; height: 22%; }
.sh-h .st-v { top: 16%; font-size: max(7px, 7.4cqw); } .sh-h .st-g { left: 30%; top: 25%; width: 40%; } .sh-h .st-n { left: 24%; top: 66%; width: 52%; height: 17%; font-size: max(7px, 6.2cqw); }

/* obtenu : en couleur, pleinement visible, avec un léger relief ; à faire : grisé et un peu transparent */
.st.is-on { filter: drop-shadow(0 1px 1px rgba(30, 20, 5, .35)) drop-shadow(0 7px 8px rgba(30, 20, 5, .22)); }
.st.is-off { filter: grayscale(1) contrast(.85); opacity: .36; }
.st:hover, .st:focus-visible, .st.is-sel { scale: 1.07; z-index: 3; }
.st.is-off:hover, .st.is-off:focus-visible, .st.is-off.is-sel { opacity: .62; }
.st.is-sel .st-line { opacity: 1; stroke-width: 1.7; }
.st:focus-visible { outline: none; }
.st:focus-visible .st-line { opacity: 1; stroke-width: 2.2; stroke: var(--bk-gold); }

/* petits écrans : une seule page à la fois (le signet « page suivante » passe de gauche à droite) ; les signets se couchent au-dessus du livre */
@media (max-width: 860px) {
  .bk { padding-right: 0; padding-top: 48px; }
  .bk-frame { padding: 14px; } .bk-frame::before { inset: 6px; }
  .bk-spread { grid-template-columns: minmax(0, 1fr); }
  .bk-spread .bk-page { grid-area: 1 / 1; }
  .bk[data-side="l"] .bk-r, .bk[data-side="r"] .bk-l { visibility: hidden; pointer-events: none; }
  .bk-book::before { display: none; }
  .bk-l, .bk-r { border-radius: 3px; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .14); background-image: radial-gradient(120% 90% at 50% 0, rgba(255, 255, 255, .06), transparent 60%); }
  .bk-book { aspect-ratio: auto; }
  .bk-page { min-height: 150cqw; }
  .bk-tabs { left: 8px; right: 8px; top: 4px; width: auto; flex-direction: row; gap: 3px; }
  .bk-tab { flex: 1 1 0; min-width: 0; width: auto; height: 62px; padding: 10px 0 0; align-items: flex-start; justify-content: center; border-radius: 8px 8px 0 0; box-shadow: inset 0 -3px 0 rgba(0, 0, 0, .18); translate: 0 0; }
  .bk-tab::before { display: none; }
  .bk-tab-g { width: 19px; height: 19px; }
  .bk-tip { display: none; }
  .bk-tab:hover, .bk-tab:focus-visible { translate: 0 -2px; } .bk-tab.is-cur { translate: 0 -4px; }
  .bk-caption { height: auto; min-height: 160px; flex-direction: column; text-align: center; gap: 18px; padding: 30px 24px; }
  .bk-cap-s { justify-content: center; } .bk-cap-sep { margin-inline: auto; background: linear-gradient(90deg, transparent, var(--sc), transparent); width: 70%; } .bk-cap-sep::before { left: 50%; }
  .st { --f: 1.5; } .sz-b { --f: 1.85; }
  .bk-stamps { --cap: 38cqw; gap: 5cqw 4cqw; } .bk-stamps.is-head { --cap: 36cqw; min-height: 0; } .bk-stamps.is-body { min-height: 0; }
  .st-n { font-size: max(8.5px, 6.9cqw); }
  .bk-where { font-size: 12px; letter-spacing: .18em; }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .bk-spread.is-cur .bk-r, :where(:root[data-motion="reduce"]) .bk-spread.is-cur .bk-l { animation: none; } :where(:root[data-motion="reduce"]) .st, :where(:root[data-motion="reduce"]) .bk-tab { transition: none; }

/* Habillage des timbres : « classique dentelé » (papier crème) en thème sombre, « aplat » (papier de la couleur du chapitre, motif et nom en crème) en thème clair. Le timbre CHOISI prend l'autre habillage (aplat en thème sombre, classique en thème clair) et reprend son style
   quand on le relâche : les couleurs se fondent doucement, un reflet traverse le timbre. */
.st .st-paper { transition: fill .6s var(--ease); }
.st .st-line { transition: stroke .6s var(--ease), opacity .6s var(--ease); }
.st .st-g, .st .st-v, .st .st-n, .st .st-pm { transition: color .6s var(--ease), opacity .6s var(--ease); }
:root[data-theme="light"] .bk .st .st-paper, :root:not([data-theme="light"]) .bk .st.is-sel .st-paper { fill: var(--sc); }
:root[data-theme="light"] .bk .st .st-line, :root:not([data-theme="light"]) .bk .st.is-sel .st-line { stroke: #fbf5e3; opacity: .6; stroke-width: .8; }
:root[data-theme="light"] .bk .st .st-g, :root[data-theme="light"] .bk .st .st-v, :root[data-theme="light"] .bk .st .st-n,
:root:not([data-theme="light"]) .bk .st.is-sel .st-g, :root:not([data-theme="light"]) .bk .st.is-sel .st-v, :root:not([data-theme="light"]) .bk .st.is-sel .st-n { color: #fbf5e3; }
:root[data-theme="light"] .bk .st .st-pm, :root:not([data-theme="light"]) .bk .st.is-sel .st-pm { color: #fbf5e3; mix-blend-mode: normal; opacity: .55; }
:root[data-theme="light"] .bk .st.is-sel .st-paper { fill: var(--st-paper); }
:root[data-theme="light"] .bk .st.is-sel .st-line { stroke: var(--sc); opacity: .55; stroke-width: .9; }
:root[data-theme="light"] .bk .st:focus-visible .st-line { stroke: var(--bk-gold); opacity: 1; stroke-width: 2.2; }   /* le focus clavier, écrasé par le filet clair ci-dessus : redevenu visible */
:root[data-theme="light"] .bk .st.is-sel .st-g, :root[data-theme="light"] .bk .st.is-sel .st-v { color: var(--sc); }
:root[data-theme="light"] .bk .st.is-sel .st-n { color: #2b261b; }
:root[data-theme="light"] .bk .st.is-sel .st-pm { color: var(--sc); mix-blend-mode: multiply; opacity: .6; }
.st-shine { opacity: 0; pointer-events: none; transition: opacity .2s ease; }
.st-shine rect { transform-box: fill-box; transform: translateX(-110%); }
.st.is-sel .st-shine { opacity: 1; }
.st.is-sel .st-shine rect { animation: st-sheen .95s var(--ease) .05s 1 both; }
@keyframes st-sheen { from { transform: translateX(-110%); } to { transform: translateX(110%); } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .st .st-paper, :where(:root[data-motion="reduce"]) .st .st-line, :where(:root[data-motion="reduce"]) .st .st-g, :where(:root[data-motion="reduce"]) .st .st-v, :where(:root[data-motion="reduce"]) .st .st-n, :where(:root[data-motion="reduce"]) .st .st-pm { transition: none; } :where(:root[data-motion="reduce"]) .st.is-sel .st-shine rect { animation: none; } :where(:root[data-motion="reduce"]) .st-shine { display: none; }

/* ===== Couleurs du thème sombre (Paramètres > Personnalisation, boot.js pose data-dark) : « emeraude » est le thème sombre d'origine (jetons de :root) ; les quatre autres ne changent que les jetons ===== */
:root:not([data-theme="light"])[data-dark="noir"] { --bg: #0e0c09; --surface: #16130e; --card: #1b1812; --tint: rgba(201, 164, 92, .16); --band: rgba(201, 164, 92, .06); --top-bg: rgba(14, 12, 9, .55); --overlay: rgba(6, 5, 3, .8); --text: #f0e9d8; --muted: #a29a84; --line: rgba(240, 233, 216, .12); --brass: #d4aa55; --brass-line: rgba(212, 170, 85, .4); --brass-ink: #deb862; --on-brass: #17120a; --track: rgba(240, 233, 216, .09); --halo: rgba(212, 170, 85, .4); }
:root:not([data-theme="light"])[data-dark="ardoise"] { --bg: #0c1117; --surface: #121922; --card: #151e29; --tint: rgba(70, 120, 170, .18); --band: rgba(70, 120, 170, .07); --top-bg: rgba(12, 17, 23, .55); --overlay: rgba(4, 7, 10, .8); --text: #e6ebf0; --muted: #8f9aa6; --line: rgba(230, 235, 240, .12); --brass: #bfa36a; --brass-line: rgba(191, 163, 106, .38); --brass-ink: #cdb078; --on-brass: #11151a; --track: rgba(230, 235, 240, .09); --halo: rgba(110, 160, 210, .32); }
:root:not([data-theme="light"])[data-dark="vin"] { --bg: #130b0d; --surface: #1b1013; --card: #211418; --tint: rgba(160, 50, 70, .2); --band: rgba(160, 50, 70, .08); --top-bg: rgba(19, 11, 13, .55); --overlay: rgba(8, 3, 4, .8); --text: #f1e6e2; --muted: #a6918d; --line: rgba(241, 230, 226, .12); --brass: #c9a05a; --brass-line: rgba(201, 160, 90, .38); --brass-ink: #e3a1a6; --on-brass: #1a0b0e; --track: rgba(241, 230, 226, .09); --err-ink: #e0605a; --halo: rgba(190, 70, 90, .35); }
:root:not([data-theme="light"])[data-dark="crepuscule"] { --bg: #0d0c18; --surface: #141325; --card: #181730; --tint: rgba(120, 100, 200, .2); --band: rgba(120, 100, 200, .08); --top-bg: rgba(13, 12, 24, .55); --overlay: rgba(5, 4, 10, .8); --text: #ebe8f5; --muted: #9a97b0; --line: rgba(235, 232, 245, .12); --brass: #d0a27f; --brass-line: rgba(208, 162, 127, .4); --brass-ink: #e2b392; --on-brass: #1a1220; --track: rgba(235, 232, 245, .09); --halo: rgba(150, 120, 210, .34); }

/* ===== Couleurs du thème clair (Paramètres > Personnalisation, boot.js pose data-tone) : « sauge » est le thème clair d'origine (jetons de :root) ; les quatre autres ne changent que les jetons ===== */
:root[data-theme="light"][data-tone="ivoire"] { --bg: #f3ecd9; --surface: #f9f4e6; --card: #fffaf0; --tint: rgba(184, 146, 63, .22); --band: rgba(184, 146, 63, .11); --top-bg: rgba(243, 236, 217, .72); --overlay: rgba(249, 244, 230, .82); --text: #231d12; --muted: #675d46; --line: rgba(35, 29, 18, .14); --brass: #a07a1c; --brass-line: rgba(160, 122, 28, .5); --brass-ink: #7a5a14; --on-brass: #fffaf0; --track: rgba(35, 29, 18, .08); --halo: rgba(168, 128, 31, .38); }
:root[data-theme="light"][data-tone="marbre"] { --bg: #e9edee; --surface: #f4f6f6; --card: #ffffff; --tint: rgba(30, 110, 90, .13); --band: rgba(30, 110, 90, .065); --top-bg: rgba(233, 237, 238, .72); --overlay: rgba(244, 246, 246, .82); --text: #122320; --muted: #4c5f5b; --line: rgba(18, 35, 32, .14); --brass: #8a6a28; --brass-line: rgba(138, 106, 40, .5); --brass-ink: #6a4f16; --on-brass: #ffffff; --track: rgba(18, 35, 32, .08); --halo: rgba(30, 110, 90, .28); }
:root[data-theme="light"][data-tone="bordeaux"] { --bg: #f1e6da; --surface: #f8efe5; --card: #fffaf3; --tint: rgba(140, 50, 60, .14); --band: rgba(140, 50, 60, .07); --top-bg: rgba(241, 230, 218, .72); --overlay: rgba(248, 239, 229, .82); --text: #2a1a1a; --muted: #6c5651; --line: rgba(42, 26, 26, .14); --brass: #a8742a; --brass-line: rgba(168, 116, 42, .5); --brass-ink: #7b2d34; --on-brass: #fff7ee; --track: rgba(42, 26, 26, .08); --halo: rgba(150, 55, 66, .3); }
:root[data-theme="light"][data-tone="aube"] { --bg: #e7e4ee; --surface: #f2f0f8; --card: #fcfbff; --tint: rgba(110, 90, 170, .15); --band: rgba(110, 90, 170, .075); --top-bg: rgba(231, 228, 238, .72); --overlay: rgba(242, 240, 248, .82); --text: #1c1b2b; --muted: #595672; --line: rgba(28, 27, 43, .14); --brass: #a8704a; --brass-line: rgba(168, 112, 74, .5); --brass-ink: #86492c; --on-brass: #fffaf6; --track: rgba(28, 27, 43, .08); --halo: rgba(140, 90, 130, .3); }

/* Le choix de la couleur dans les Paramètres : une pastille par couleur (fond, carte, laiton), visible seulement en thème clair */
.tone-pick { margin: 16px 0 0; padding: 0; border: 0; min-width: 0; }
.tone-pick[hidden] { display: none; }
.tone-pick legend { padding: 0; margin: 0 0 4px; font-weight: 500; }
.tone-pick .tone-hint { display: block; margin: 0 0 12px; color: var(--muted); font-size: 13px; line-height: 1.5; }
.tone-list { display: grid; grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); gap: 10px; }
.tone-opt { appearance: none; display: grid; gap: 8px; justify-items: start; padding: 10px; border: 1px solid var(--line); background: var(--surface); color: var(--text); font: 500 13px/1.25 var(--font); text-align: left; cursor: pointer; transition: border-color .25s ease, background .25s ease; }
.tone-opt:hover { border-color: var(--brass); }
.tone-opt[aria-checked="true"] { border-color: var(--brass); box-shadow: inset 0 0 0 1px var(--brass); }
.tone-sw { position: relative; display: block; width: 100%; height: 42px; background: var(--a); border: 1px solid rgba(0, 0, 0, .12); }
.tone-sw::before { content: ""; position: absolute; left: 8px; top: 8px; width: 34px; bottom: 8px; background: var(--b); box-shadow: 0 0 0 1px rgba(0, 0, 0, .1); }
.tone-sw::after { content: ""; position: absolute; right: 10px; top: 50%; width: 14px; height: 14px; translate: 0 -50%; rotate: 45deg; background: var(--c); }
.tone-sw[data-tone="ivoire"] { --a: #f3ecd9; --b: #fffaf0; --c: #a07a1c; }
.tone-sw[data-tone="sauge"] { --a: #e1e9d8; --b: #fafaf0; --c: #9d7b2a; }
.tone-sw[data-tone="marbre"] { --a: #e9edee; --b: #ffffff; --c: #8a6a28; }
.tone-sw[data-tone="bordeaux"] { --a: #f1e6da; --b: #fffaf3; --c: #7b2d34; }
.tone-sw[data-tone="aube"] { --a: #e7e4ee; --b: #fcfbff; --c: #a8704a; }
.tone-sw[data-tone="noir"] { --a: #0e0c09; --b: #1b1812; --c: #d4aa55; }
.tone-sw[data-tone="emeraude"] { --a: #0a110f; --b: #111d19; --c: #c9a45c; }
.tone-sw[data-tone="ardoise"] { --a: #0c1117; --b: #151e29; --c: #bfa36a; }
.tone-sw[data-tone="vin"] { --a: #130b0d; --b: #211418; --c: #e3a1a6; }
.tone-sw[data-tone="crepuscule"] { --a: #0d0c18; --b: #181730; --c: #d0a27f; }
.tone-sw { border-color: var(--line); }

/* ===== Succès : récompenses, timbres à récupérer, badge de nouveauté du menu ===== */
.bk-caption { height: auto; min-height: 140px; padding: 30px 40px; }   /* la hauteur suit le contenu, avec des marges qui gardent le texte loin du filet intérieur */
.bk-cap-rw { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; min-height: 30px; margin: 10px 0 0; }
.bk-cap-rwl { display: inline-flex; align-items: center; height: 30px; padding-top: 4px; box-sizing: border-box; font: 600 11px/1 "Josefin Sans", var(--font); letter-spacing: .24em; text-transform: uppercase; color: var(--muted); }
.rw-list { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 16px; }
.rw-chip { display: inline-flex; align-items: center; gap: 6px; height: 30px; font: 500 14px/1 var(--font); color: var(--text); }
.rw-chip svg { width: 22px; height: 22px; flex: none; }
.rw-chip svg.rw-pack { width: 16px; height: 22px; }   /* les paquets miniatures de la frise « Série actuelle » (#pack-mini-silver / golden / diamond) */
.rw-chip .wc-piece { width: 20px; height: 20px; }
.rw-chip b { font-weight: 600; font-variant-numeric: tabular-nums; position: relative; top: 1.5px; }   /* les chiffres et le libellé « Récompense » (capitales Josefin) montent dans leur ligne : on les redescend de quelques pixels pour qu'ils tombent au centre des pièces et paquets */
.rw-t { position: relative; top: 2px; font: 500 11px/1 "Josefin Sans", var(--font); letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.bk-cap-rw.is-got { opacity: .65; }
/* le titre de profil que donne le succès */
.bk-cap-ti { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 14px; margin: 6px 0 0; }
.bk-cap-tt { font-family: var(--font-title); font-size: 15px; letter-spacing: .03em; color: var(--sc, var(--brass-ink)); }
.bk-cap-ti:not(.is-got) .bk-cap-tt { color: var(--muted); }
/* navigateurs récents : on rogne la boîte du texte à la hauteur des capitales / chiffres, le centrage est alors exact (les réglages au pixel ci-dessus ne servent plus) */
@supports (text-box: trim-both cap alphabetic) {
  .bk-cap-rwl, .rw-chip b, .rw-t { padding-top: 0; top: 0; text-box: trim-both cap alphabetic; }
  .bk-cap-rwl { display: block; height: auto; }   /* le rognage ne s'applique qu'à un bloc : un conteneur flex de 30 px laissait le texte non rogné */
}
.bk-claim-btn { margin-left: auto; }
.bk-cap-msg { flex-basis: 100%; font: 500 12.5px/1.3 "Josefin Sans", var(--font); color: var(--err-ink); }
.bk-cap-msg:empty { display: none; }

/* un succès obtenu dont la récompense attend : halo de la couleur du chapitre et petit losange doré qui bat doucement */
.st.is-ready { filter: drop-shadow(0 0 7px color-mix(in srgb, var(--sc) 85%, transparent)) drop-shadow(0 7px 8px rgba(30, 20, 5, .22)); }
.st-new { position: absolute; z-index: 3; left: -3cqw; top: -3cqw; width: 14cqw; aspect-ratio: 1; rotate: 45deg; background: linear-gradient(135deg, #f7d98b 0%, #c9a45c 36%, #e8574a 50%, #c9a45c 64%, #f7d98b 100%); border: .9cqw solid var(--st-paper); box-shadow: 0 0 0 .4cqw var(--sc), 0 0 3cqw #e8574a, 0 0 1.2cqw #f7d98b; pointer-events: none; animation: ach-pulse 2.4s ease-in-out infinite; }
.st-new::after { content: ""; position: absolute; inset: 28%; background: var(--st-paper); box-shadow: inset 0 0 0 .5cqw rgba(232, 87, 74, .55); }
@keyframes ach-pulse { 50% { scale: 1.16; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .st-new { animation: none; }

/* le même losange sur chaque signet qui cache une récompense à récupérer (le signet du chapitre) ; assets/succes.js l'enlève dès que la récompense est récupérée */
.bk-new { display: none; position: absolute; z-index: 3; right: -4px; top: 3px; width: 12px; height: 12px; rotate: 45deg; background: linear-gradient(135deg, #f7d98b 0%, #c9a45c 36%, #e8574a 50%, #c9a45c 64%, #f7d98b 100%); border: 2.5px solid var(--sc); box-sizing: content-box; pointer-events: none; box-shadow: 0 0 8px #e8574a, 0 0 3px #f7d98b; animation: ach-pulse 2.4s ease-in-out infinite; }
.bk-tab.has-new .bk-new { display: block; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .bk-new { animation: none; }

/* « N récompenses à récupérer » sur la page de couverture du livre : un cartouche à angles en gradins (comme la légende d'un timbre), filet doré, nombre en titre, losanges */
.bk-claim { --s: 9px; position: relative; isolation: isolate; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 2.4cqw; margin: 4cqw auto 0; padding: 3cqw 3.6cqw; max-width: 80cqw; box-sizing: border-box; }
.bk-claim::before, .bk-claim::after { content: ""; position: absolute; z-index: -1; clip-path: polygon(0 var(--s), calc(var(--s) / 2) var(--s), calc(var(--s) / 2) calc(var(--s) / 2), var(--s) calc(var(--s) / 2), var(--s) 0, calc(100% - var(--s)) 0, calc(100% - var(--s)) calc(var(--s) / 2), calc(100% - var(--s) / 2) calc(var(--s) / 2), calc(100% - var(--s) / 2) var(--s), 100% var(--s), 100% calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s)), calc(100% - var(--s) / 2) calc(100% - var(--s) / 2), calc(100% - var(--s)) calc(100% - var(--s) / 2), calc(100% - var(--s)) 100%, var(--s) 100%, var(--s) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s) / 2), calc(var(--s) / 2) calc(100% - var(--s)), 0 calc(100% - var(--s))); }
.bk-claim::before { inset: 0; background: var(--bk-gold); }
.bk-claim::after { inset: 1.5px; background: radial-gradient(ellipse 80% 120% at 50% 0, color-mix(in srgb, var(--bk-gold) 26%, transparent), transparent 70%), var(--bk-paper); }
.bk-claim-in { position: absolute; z-index: -1; inset: 6px; border: 1px solid var(--bk-line); pointer-events: none; }
.bk-claim[hidden] { display: none; }
.bk-claim p { margin: 0; }
.bk-claim-n { font: 400 max(30px, 8.4cqw)/1 var(--font-title); color: var(--bk-gold); font-variant-numeric: tabular-nums; }
.bk-claim-l { font: 600 max(10px, 2cqw)/1.35 "Josefin Sans", var(--font); letter-spacing: .2em; text-align: left; text-transform: uppercase; color: var(--bk-ink); }
.bk-claim .btn { white-space: nowrap; }
@media (max-width: 860px) { .bk-claim { grid-template-columns: 1fr; justify-items: center; text-align: center; } .bk-claim-l { text-align: center; } }

/* badge de nouveauté du menu « Succès » (pas de notification) : le même rond rouge que la cloche, collé à l'icône de médaille ; sans nombre */
.nav-new { position: absolute; z-index: 2; top: 1px; left: 50%; margin-left: 6px; width: 8px; height: 8px; rotate: 45deg; background: linear-gradient(135deg, #f7d98b 0%, #c9a45c 36%, #e8574a 50%, #c9a45c 64%, #f7d98b 100%); border: 2px solid var(--bg); box-sizing: content-box; pointer-events: none; box-shadow: 0 0 7px #e8574a, 0 0 2px #f7d98b; animation: ach-pulse 2.4s ease-in-out infinite; }
.nav-new[hidden] { display: none; }
.bottom-nav .nav-new { top: 9px; margin-left: 5px; }
.menu-link .nav-new { position: relative; margin: 0 0 0 auto; animation: none; box-shadow: none; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .nav-new { animation: none; }
@media (max-width: 860px) { .bk-caption { height: auto; min-height: 190px; } .bk-claim-btn { margin-left: 0; } }

/* ----- Joyaux « au choix » : trois joyaux en éventail dans la pastille, puis la fenêtre où le joueur répartit ses joyaux ----- */
.rw-chip svg.rw-fan { width: 38px; height: 22px; }
.ch-hint { margin: 0 0 14px; color: var(--muted); font-size: 14px; line-height: 1.5; }
.ch-list { list-style: none; margin: 0 0 16px; padding: 0; display: grid; gap: 8px; }
.ch-row { display: grid; grid-template-columns: 34px minmax(0, 1fr) auto; align-items: center; gap: 12px; padding: 8px 12px; border: 1px solid var(--line); background: var(--surface); }
.ch-row .gem { width: 30px; height: 30px; }
.ch-name { display: grid; gap: 2px; min-width: 0; font-weight: 500; }
.ch-name small { color: var(--muted); font-size: 12px; font-weight: 400; }
.ch-name small.ch-stock { color: var(--brass); font-variant-numeric: tabular-nums; }
/* La notification flottante de « Tout récupérer » (assets/succes.js) */
.ach-toast { position: fixed; z-index: 90; left: 50%; bottom: 96px; translate: -50% 0; max-width: min(92vw, 560px); margin: 0; padding: 14px 22px; display: grid; gap: 8px; justify-items: center; border: 1px solid var(--brass); background: linear-gradient(var(--card), var(--card)), var(--bg); color: var(--text); font-size: 14px; box-shadow: 0 14px 40px -12px #000a; text-align: center; cursor: pointer; opacity: 0; transition: opacity .2s ease; pointer-events: none; }
.ach-toast.is-on { opacity: 1; pointer-events: auto; }
.ach-toast[hidden] { display: none; }
.ach-toast-t { font-weight: 600; }
.ach-toast .rw-list { justify-content: center; }
@media (max-width: 760px) { .ach-toast { bottom: calc(110px + env(safe-area-inset-bottom, 0px)); } }
.ch-step { display: inline-flex; align-items: center; gap: 8px; }
.ch-qty { min-width: 2ch; text-align: center; font: 500 18px/1 var(--font); font-variant-numeric: tabular-nums; }
.ch-row.is-on { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 8%, var(--surface)); }
.ch-foot { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.ch-left { color: var(--muted); font-size: 13.5px; }
.ch-left b { color: var(--brass-ink); font-weight: 600; font-variant-numeric: tabular-nums; }

/* ----- Vitrine de succès du profil : trois timbres (page Profil) et la fenêtre où on les choisit ----- */
.bk.pf-ach { position: static; display: block; width: auto; margin: 36px 0 0; padding: 0; justify-items: normal; }
.pf-ach .pf-ach-row { container-type: inline-size; display: flex; flex-wrap: wrap; justify-content: center; align-items: center; gap: 4cqw 5cqw; padding: 18px 0 12px; }
.pf-ach .pf-ach-row .st { --cap: 17cqw; }
.pf-ach-empty { display: grid; place-items: center; width: 17cqw; aspect-ratio: .8; border: 1px dashed var(--line); color: var(--muted); font-size: 12.5px; letter-spacing: .08em; text-align: center; }
.pf-ach-cap, .ap-cond { display: grid; gap: 3px; margin: 22px auto 0; max-width: 62ch; padding: 13px 18px 14px; border: 1px solid var(--line); border-left: 3px solid var(--brass); background: color-mix(in srgb, var(--text) 4%, var(--surface)); text-align: left; color: var(--muted); font-size: 14px; line-height: 1.5; text-wrap: pretty; }
.pf-ach-cap[hidden], .ap-cond[hidden] { display: none; }
.pf-ach-cap:not([hidden]), .ap-cond:not([hidden]) { animation: wc-fade-in .25s ease backwards; }
.pf-ach-cap .cap-d, .ap-cond .cap-d { color: var(--text); }
.pf-ach-cap .cap-at, .ap-cond .cap-at { font-size: 12px; letter-spacing: .06em; color: var(--muted); }
.ap-cond { position: sticky; top: 8px; z-index: 6; margin: 4px 0 6px; max-width: none; box-shadow: 0 8px 22px rgba(0, 0, 0, .35); }   /* reste visible en haut de la fenêtre pendant qu'on feuillette le livre */
/* Téléphone : le bouton passe sous le titre au lieu de l'écraser (et d'être coupé), le texte des emplacements vides tient dans leur largeur */
@media (max-width: 640px) {
  .pf-showcase-head { flex-wrap: wrap; row-gap: 8px; }
  .pf-ach-empty { font-size: 9.5px; letter-spacing: 0; }
}
.pf-ach-cap b, .ap-cond b { color: var(--brass-ink); font-weight: 500; letter-spacing: .12em; text-transform: uppercase; font-size: 12.5px; }
/* Fenêtre de choix des timbres : le rond « i » (le dessin de celui du sélecteur d'échange, .tr-info) en bas à droite de chaque timbre, qui affiche la condition d'obtention sans choisir le timbre */
.st .st-info { top: auto; right: -4px; bottom: -4px; width: 28px; height: 28px; z-index: 3; rotate: calc(var(--tl, 0deg) * -1); }
@media (pointer: coarse) { .st .st-info { width: 32px; height: 32px; } }
@media (max-width: 860px) { .st .st-info { right: -10px; bottom: -10px; width: 28px; height: 28px; } }   /* petits timbres : le rond « i » déborde du coin au lieu de couvrir le nom */
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .pf-ach-cap:not([hidden]), :where(:root[data-motion="reduce"]) .ap-cond:not([hidden]) { animation: none; }
.ap-book { margin: 14px 0 18px; }
/* Fenêtre « Choisir les succès de la vitrine » : consigne courte, le livre, puis un plateau collé en bas (emplacements, compte, « Valider ») */
.ap-box .ap-note { margin: 0 0 6px; max-width: 72ch; }
.ap-tray { position: sticky; bottom: calc(-1 * clamp(24px, 4vw, 36px)); z-index: 7; display: flex; align-items: center; flex-wrap: wrap; gap: 12px 28px; margin: 0 calc(-1 * clamp(24px, 4vw, 36px)) calc(-1 * clamp(24px, 4vw, 36px)); padding: 14px clamp(24px, 4vw, 36px) 16px; background: var(--surface); border-top: 1px solid var(--brass-line); box-shadow: 0 -12px 28px rgba(0, 0, 0, .28); }
.ap-tray .ap-slots { flex: 1 1 360px; justify-content: flex-start; margin: 0; }
.ap-tray .ap-slot { width: clamp(84px, 16%, 118px); min-height: 96px; font-size: 12px; }
.ap-foot { display: flex; flex-direction: column; align-items: flex-end; gap: 10px; margin-left: auto; }
.ap-tray > .sm-msg { flex-basis: 100%; margin: 0; }
.vt-tray .vt-slots { flex: 1 1 auto; grid-template-columns: repeat(6, 76px); gap: 10px; margin: 0; }
.vt-tray .vt-slot { font-size: 10px; }
.ap-tray > .sm-msg:empty { display: none; }
@media (min-width: 861px) { .ap-box .ap-book .bk { padding-right: 52px; } }
@media (max-width: 860px) { .vt-tray .vt-slots { flex-basis: 100%; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; } .ap-tray .ap-slots { flex-basis: 100%; } .ap-tray .ap-slot { min-height: 80px; } .ap-foot { flex-direction: row; align-items: center; justify-content: space-between; width: 100%; margin: 0; } }
.ap-book .bk { width: 100%; }
@media (min-width: 861px) { .ap-book .bk { padding-right: 46px; } }   /* petit écran : les signets sont couchés au-dessus du livre (règles générales du livre), pas de marge à droite */
.ap-book .bk-pager { margin-top: 22px; }
.bk[data-pick] .st.is-pick { scale: 1.07; filter: drop-shadow(0 0 7px var(--brass)) drop-shadow(0 7px 8px rgba(30, 20, 5, .3)); }
.bk[data-pick] .st.is-pick::before { content: attr(data-n); position: absolute; z-index: 4; left: -2.4cqw; top: -2.4cqw; width: 14cqw; aspect-ratio: 1; display: grid; place-items: center; border-radius: 50%; background: var(--brass); color: var(--on-brass); font: 700 8cqw/1 "Josefin Sans", var(--font); border: 1.8cqw solid var(--st-paper); box-sizing: border-box; }
.bk[data-pick] .st.is-off { cursor: not-allowed; }
.ap-book .bk-tabs { gap: 4px; }
@media (min-width: 861px) { .ap-book .bk-tabs { top: 56px; } .ap-book .bk-tab { height: 40px; } .ap-book .bk-tab-g { width: 20px; height: 20px; } }
@media (max-width: 860px) { .ap-book .bk-tabs { gap: 3px; } }
@media (max-width: 860px) { .bk-new { right: 2px; top: -5px; } }

/* Fenêtre de la vitrine de succès : les 3 emplacements au-dessus du livre ; toucher un timbre le retire */
.ap-slots { display: flex; justify-content: center; gap: clamp(10px, 3vw, 26px); width: auto; padding: 0; margin: 4px 0 10px; }
.bk.ap-slots { position: static; display: flex; justify-items: normal; }
.ap-slot { position: relative; container-type: inline-size; width: clamp(96px, 20%, 150px); min-height: 118px; display: grid; place-items: center; padding: 8px 4px; border: 1px dashed var(--line); background: color-mix(in srgb, var(--brass) 4%, transparent); color: var(--muted); font-size: 13px; letter-spacing: .08em; text-align: center; }
@media (max-width: 860px) { .ap-slots { gap: 8px; } .ap-slot { flex: 1 1 0; width: auto; min-width: 0; min-height: 104px; padding: 8px 2px; font-size: 12.5px; text-align: center; } }
.ap-slot.has-st { border-style: solid; border-color: var(--brass-line); cursor: pointer; }
.ap-slot .st { --f: 3.4; --cap: 74cqw; pointer-events: none; margin: 0; }
.ap-slot-x { position: absolute; z-index: 5; right: -9px; top: -9px; width: 22px; height: 22px; display: grid; place-items: center; border-radius: 50%; background: var(--surface); border: 1px solid var(--brass); color: var(--brass-ink); pointer-events: none; transition: background .2s ease, color .2s ease; }
.ap-slot-x svg { width: 11px; height: 11px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; }
.ap-slot.has-st:hover .ap-slot-x, .ap-slot.has-st:focus-visible .ap-slot-x { background: var(--brass); color: var(--on-brass); }
.ap-slot.has-st:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
.ap-slot { touch-action: none; user-select: none; -webkit-user-select: none; }
.ap-slot.is-dragging { opacity: .35; }
.ap-slot.is-drop { border-style: solid; border-color: var(--brass); background: color-mix(in srgb, var(--brass) 14%, transparent); box-shadow: 0 0 0 2px color-mix(in srgb, var(--brass) 45%, transparent); }
.ap-ghost { position: fixed; top: 0; left: 0; z-index: 10000; display: grid; place-items: center; container-type: inline-size; opacity: .92; pointer-events: none; filter: drop-shadow(0 10px 18px rgba(0, 0, 0, .5)); }
.ap-ghost .st { --f: 3.4; --cap: 74cqw; margin: 0; }

/* Défi quotidien WikiSpeed (public/wikispeed-jour.php) : accueil, avertissement, classement du jour, podium d'hier, historique */
.wsd-intro { max-width: 760px; margin-left: auto; margin-right: auto; }
.wsd-status { margin: 0 0 18px; padding: 10px 14px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 8%, transparent); color: var(--text); }
.wsd-status[hidden] { display: none; }
.wsd-start { margin-top: 6px; }
.wsd-reset { margin: 16px 0 0; text-align: center; color: var(--muted); font-size: 13.5px; }
.wsd-warn { margin: 10px 0 0; padding: 10px 14px; border: 1px solid var(--err-ink); color: var(--err-ink); background: color-mix(in srgb, var(--err-ink) 8%, transparent); font-weight: 500; }
.wsd-warn[hidden] { display: none; }
.wsd .ws-score.is-low b { color: var(--err-ink); }
.wsd-paths { grid-template-columns: minmax(0, 1fr); }
.wsd-back { margin-top: 4px; }
.wsd-back[hidden] { display: none; }
.jxp-space + .jxp-space { margin-top: 72px; }
.jxp-space-head { display: grid; justify-items: center; gap: 10px; margin: 0 0 30px; text-align: center; }
@container jxp (max-width: 760px) { .jxp-space-head:has(+ .jxp-row .wsb-win) { margin-bottom: 76px; } }   /* téléphone : la fenêtre de course de WikiSpeed sort de 40 px au-dessus de son encart ; sans cette marge, elle recouvrait la description de « Mini-jeux » */
.jxp-title--sec { font-size: 28px; --ls: .3em; }
.jxp-space-lead { margin: 0; color: var(--muted); font-size: 14.5px; }
.jxp-space .jxp-row:first-of-type { margin-top: 0; }
.wsb-hist { margin: 8px 0 0; font-size: 12.5px; }
.wsb-hist a { color: var(--brass-ink); text-underline-offset: 3px; }
/* L'encart « WikiSpeed du jour » : mêmes codes que celui de WikiSpeed, en plus bas (deux colonnes : les deux cartes dos visible, puis le texte) */
.jxp-anchor { color: var(--brass-ink); text-underline-offset: 3px; }
.jxp-space { scroll-margin-top: 88px; }
.jxp-v-d .wsb--daily .wsb-body { grid-template-columns: minmax(150px, .5fr) minmax(0, 2fr); gap: 20px 36px; min-height: 0; padding: 30px 48px 30px; align-items: center; }
.wsb--daily .wsb-preview { display: grid; place-items: center; min-height: 190px; }
.wsb--daily .wsb-cards { position: relative; left: auto; bottom: auto; top: auto; display: flex; justify-content: center; align-items: flex-end; padding-top: 18px; }
.wsb--daily .wsb-card { width: 108px; }
.wsb--daily .wsb-card--a { transform: rotate(-7deg); }
.wsb--daily .wsb-card--b { transform: rotate(5deg) translate(-22px, -8px); }
.wsb--daily .wsb-main { gap: 12px; }
.wsb--daily .wsb-name { font-size: 36px; margin: 0; }
.wsb--daily .wsb-name b { font-weight: 600; }
.wsb--daily .wsb-rule { max-width: 62ch; font-size: 14px; }
.wsb--daily .wsb-gains { margin: 2px 0 0; width: 100%; max-width: 470px; min-width: 0; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.wsb--daily .wsb-gains > div { align-items: center; justify-content: center; text-align: center; padding: 9px 8px 8px; min-height: 62px; }
.wsb--daily .wsb-gains dt { font-size: 9.5px; letter-spacing: .14em; white-space: nowrap; }
.wsb--daily .wsb-gains dd { font-size: 19px; text-wrap: balance; }   /* « Paquet doré » passe sur deux lignes dans un médaillon étroit (téléphone) au lieu d’être coupé */
.wsb--daily .wsb-act { margin-top: 2px; gap: 10px 20px; }
.wsb--daily .wsb-quota { max-width: 34ch; }
.wsb-d-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 4px 12px; margin: 0; font-size: 12.5px; color: var(--muted); }
.wsb-d-foot a { color: var(--brass-ink); text-underline-offset: 3px; }
.wsb-d-foot i { width: 4px; height: 4px; transform: rotate(45deg); background: var(--brass-line); }
.wsb-d-foot b { color: var(--text); font-weight: 500; }
@container jxp (max-width: 760px) {
  .jxp-v-d .wsb--daily .wsb-body { grid-template-columns: minmax(0, 1fr); padding: 24px 22px 26px; }
  .wsb--daily .wsb-preview { min-height: 170px; order: -1; }
}
.wsb-group .wsb-runs-empty { height: auto; min-height: 0; padding: 14px 0; }

/* Visite guidée des nouveaux inscrits (assets/tutorial.js, src/Tutorial.php) : voile + projecteur + panneau fixé en bas de l'écran */
.tour-veil { position: fixed; inset: 0; z-index: 900; background: rgba(3, 8, 6, .76); pointer-events: none; }
.tour-block { position: fixed; inset: 0; z-index: 901; background: transparent; }   /* aucun clic n'atteint la page */
.tour-spots { position: fixed; inset: 0; z-index: 902; pointer-events: none; opacity: 0; transition: opacity .4s ease; }
.tour-spots.is-on { opacity: 1; }
.tour-spot { position: fixed; display: block; border: 2px solid var(--brass); box-shadow: 0 0 22px 2px color-mix(in srgb, var(--brass) 38%, transparent); }
.tour-panel { position: fixed; z-index: 903; left: 50%; bottom: max(12px, env(safe-area-inset-bottom, 0px)); translate: -50% 0; width: min(760px, calc(100% - 24px)); padding: 18px 24px 16px; background: var(--card); border-top: 2px solid var(--brass); box-shadow: 0 0 0 1px var(--brass-line), 0 -10px 40px rgba(0, 0, 0, .55); outline: 0; display: grid; gap: 6px; }
.tour-panel:focus { outline: 0; }
.tour-count { margin: 0; font-size: 11px; font-weight: 500; letter-spacing: .26em; text-transform: uppercase; color: var(--muted); }
.tour-bar { display: flex; gap: 3px; height: 3px; }
.tour-bar i { flex: 1; background: var(--line); transition: background .3s ease; }
.tour-bar i.on { background: var(--brass); }
.tour-panel .is-off { visibility: hidden; }
.tour-title { margin: 8px 0 0; font-size: 16px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); }
.tour-text { margin: 0; font-size: 15px; line-height: 1.6; overflow-wrap: anywhere; }
.tour-nav { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; margin-top: 12px; }
.tour-sp { flex: 1; }
@media (max-width: 640px) { .tour-panel { padding: 14px 16px 12px; } .tour-text { font-size: 14px; } .tour-nav { justify-content: flex-end; } .tour-skip { margin-right: auto; } .tour-sp { display: none; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .tour-bar i, :where(:root[data-motion="reduce"]) .tour-spots { transition: none; }
.hj.is-loading #hj-body { opacity: .55; transition: opacity .2s; }

/* Résultat du WikiSpeed du jour : « Ton chemin » et « Les deux cartes du jour » dans des cadres Art déco (comme « Tes gains ») */
.wsd-after { max-width: 760px; margin: 0 auto; }
.wsd-block { margin-top: 34px; text-align: left; }
.wsd-steps { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 10px 22px; counter-reset: wsd-st; }
.wsd-steps li { position: relative; display: flex; align-items: center; min-height: 40px; padding: 6px 10px 6px 42px; border-bottom: 1px solid var(--brass-line); counter-increment: wsd-st; font-size: 14.5px; overflow-wrap: anywhere; }
.wsd-steps li::before { content: counter(wsd-st); position: absolute; left: 6px; top: 50%; translate: 0 -50%; width: 26px; height: 26px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; padding: 1px 0 0; line-height: 1; text-align: center; clip-path: polygon(50% 0, 100% 50%, 50% 100%, 0 50%); background: color-mix(in srgb, var(--brass) 30%, var(--card)); color: var(--brass-ink); font-size: 10.5px; font-weight: 600; font-variant-numeric: tabular-nums; }
.wsd-steps a { color: var(--text); text-decoration: none; }
.wsd-steps a:hover, .wsd-steps a:focus-visible { color: var(--brass-ink); text-decoration: underline; text-decoration-color: var(--brass-line); text-underline-offset: 3px; }
.wsd-steps li.is-goal { border-bottom-color: var(--brass); }
.wsd-steps li.is-goal::before { background: var(--brass); color: var(--on-brass); }
.wsd-steps li.is-goal a { color: var(--brass-ink); font-weight: 600; }
.wsd-cardlist { gap: 22px 64px; }
.wsd-cardlist .gq-gains-card { width: 190px; }   /* la largeur d'une carte : la légende se centre sous elle */
.wsd-cardlist .cards { width: 100%; margin: 0; padding: 0; list-style: none; }
.wsd-cardlist .gq-gains-card-title { white-space: normal; text-align: center; overflow-wrap: anywhere; }

/* Page « Historique des jeux » (public/historique-jeux.php) */
.hj { max-width: 1000px; }
.hj-note { margin: 0 0 14px; text-align: center; color: var(--muted); font-size: 14px; }
.hj-pager { margin: 0 0 18px; }
.hj-pager:last-child { margin: 22px 0 0; }
/* Blocs à gradins (deux marches par coin, comme les boutons) : un contour laiton en dessous, le fond en dessus */
.hj-cards { list-style: none; margin: 0 0 4px; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 16px; }
.hj-card {
  --s: 6px; --o: var(--brass-line);
  --clip: polygon(0 calc(var(--s) * 2), var(--s) calc(var(--s) * 2), var(--s) var(--s), calc(var(--s) * 2) var(--s), calc(var(--s) * 2) 0, calc(100% - var(--s) * 2) 0, calc(100% - var(--s) * 2) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(var(--s) * 2), 100% calc(var(--s) * 2), 100% calc(100% - var(--s) * 2), calc(100% - var(--s)) calc(100% - var(--s) * 2), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - var(--s) * 2) calc(100% - var(--s)), calc(100% - var(--s) * 2) 100%, calc(var(--s) * 2) 100%, calc(var(--s) * 2) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - var(--s) * 2), 0 calc(100% - var(--s) * 2));
  position: relative; isolation: isolate; display: grid; gap: 8px; align-content: start; padding: 16px 20px 14px; clip-path: var(--clip);
}
.hj-card::before, .hj-card::after { content: ""; position: absolute; z-index: -1; clip-path: var(--clip); }
.hj-card::before { inset: 0; background: var(--o); }
.hj-card::after { inset: 1px; background: linear-gradient(165deg, color-mix(in srgb, var(--brass) 13%, var(--card)), var(--card) 68%); }
.hj-card.is-win { --o: var(--brass); }
.hj-card.is-loss { --o: color-mix(in srgb, var(--muted) 45%, transparent); }
.hj-top { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.hj-when { font-size: 11.5px; color: var(--muted); font-variant-numeric: tabular-nums; letter-spacing: .04em; }
.hj-res { display: inline-flex; align-items: center; gap: 7px; font-size: 10.5px; font-weight: 600; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); text-align: right; }
.hj-res::before { content: ""; flex: none; width: 6px; height: 6px; rotate: 45deg; border: 1px solid currentColor; }
.hj-card.is-win .hj-res { color: var(--brass-ink); }
.hj-card.is-win .hj-res::before { background: var(--brass); border-color: var(--brass); }
.hj-title { display: flex; align-items: center; gap: 10px; margin: 2px 0 0; font-size: 16px; line-height: 1.35; overflow-wrap: anywhere; }
.hj-title b { font-weight: 600; }
.hj-title .jxp-av { width: 28px; height: 28px; flex: none; }
.hj-sub { margin: 0; font-size: 13px; color: var(--muted); overflow-wrap: anywhere; }
.hj-sub b { color: var(--brass-ink); font-weight: 600; }
.hj-bot { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 6px; padding-top: 10px; border-top: 1px solid var(--line); }
.hj-gain { font-weight: 500; font-variant-numeric: tabular-nums; }
.hj-gain .wc-piece { width: 1.1em; height: 1.1em; vertical-align: -.2em; }
.hj-none { font-style: normal; font-size: 12px; color: var(--muted); }


/* ===== Comptoir (public/comptoir.php, src/ComptoirView.php) : dessin « C6 » (la Galerie + l'Affiche) dans le style des encarts de la page Jeux ; roue « W1 Soleil » ===== */
.cp-page .wc-piece { width: 1.2em; height: 1.2em; vertical-align: -.22em; }
.cp-page .jxp-head { margin-bottom: 30px; }
.cp-page .cards.cp-one { display: block; width: 100%; padding: 0; margin: 0; min-height: 0; }
.cp-page .cards.cp-one .card { width: 100%; }

/* bandeau du solde : une plaque à gradins (les mêmes que les encarts), le solde en grand à gauche, les liens vers les parties de la page à droite */
.cp-wal { --s: 5px; position: relative; isolation: isolate; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 14px 30px; margin: 0 0 46px; padding: 16px 34px;
  --cp-steps: polygon(0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)),
    100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s))); }
.cp-wal::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); opacity: .75; clip-path: var(--cp-steps); }
.cp-wal::after { content: ""; position: absolute; inset: 1px; z-index: -1; clip-path: var(--cp-steps); box-shadow: inset 0 0 0 5px var(--card), inset 0 0 0 6px var(--brass-line);
  background: radial-gradient(ellipse 50% 170% at 0 50%, color-mix(in srgb, var(--brass) 18%, transparent), transparent 72%), var(--card); }
.cp-solde { display: flex; align-items: center; gap: 16px; }
.cp-solde .wc-piece { width: 40px; height: 40px; flex: none; vertical-align: middle; filter: drop-shadow(0 0 10px color-mix(in srgb, var(--brass) 45%, transparent)); }
.cp-solde small { display: block; margin-bottom: 3px; font-size: 10px; font-weight: 500; letter-spacing: .32em; text-transform: uppercase; color: var(--muted); }
.cp-solde b { display: block; margin-left: -.07em; font-size: 28px; font-weight: 500; line-height: 1; letter-spacing: .06em; font-variant-numeric: tabular-nums; }
.cp-jump { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 16px; padding-left: 30px; border-left: 1px solid var(--brass-line); }
.cp-jump a { position: relative; padding: 4px 0; color: var(--brass-ink); font-size: 11px; font-weight: 500; letter-spacing: .22em; text-transform: uppercase; text-decoration: none; transition: color .3s ease; }
.cp-jump a::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1px; background: var(--brass); opacity: 0; transition: opacity .3s ease; }
.cp-jump a:hover, .cp-jump a:focus-visible { color: var(--text); }
.cp-jump a:hover::after, .cp-jump a:focus-visible::after { opacity: 1; }
.cp-jump i { width: 5px; height: 5px; rotate: 45deg; background: var(--brass); opacity: .7; flex: none; }

/* les encarts : ceux de la page Jeux (.jxp-encart), un peu plus aérés */
.cp-encart { margin-bottom: 64px; padding: 34px 42px 36px; gap: 10px; }
.cp-cd { margin: 0; font-size: 12.5px; color: var(--muted); letter-spacing: .04em; text-align: center; }
.cp-cd b { color: var(--brass-ink); font-weight: 500; font-variant-numeric: tabular-nums; }
.cp-sep { margin: 2px 0; }

/* une rareté : à gauche le chiffre romain (lettres creuses), la rareté et la relance ; à droite les trois cartes */
.cp-row { display: grid; grid-template-columns: 210px minmax(0, 1fr); gap: 10px 26px; align-items: center; padding: 26px 0; }
.cp-nm { position: relative; display: grid; justify-items: center; gap: 12px; align-self: stretch; align-content: center; padding-right: 20px; border-right: 1px solid color-mix(in srgb, var(--rc) 55%, var(--brass-line)); }
.cp-nm::after { content: ""; position: absolute; right: -4px; top: 50%; width: 7px; height: 7px; translate: 0 -50%; rotate: 45deg; background: var(--rc); }
.cp-nm .n { font-family: "Cinzel", "Times New Roman", serif; font-size: 70px; line-height: .9; font-weight: 400; color: transparent; -webkit-text-stroke: 1px var(--rc); opacity: .8; }
.cp-page .rname { display: inline-flex; align-items: center; gap: 9px; font-size: 11px; font-weight: 500; letter-spacing: .22em; text-transform: uppercase; color: var(--rc); }
.cp-page .rname i { width: 8px; height: 8px; rotate: 45deg; background: var(--rc); flex: none; }
.cp-ex { display: grid; grid-template-columns: repeat(3, minmax(0, 170px)); gap: clamp(18px, 4cqw, 64px); justify-content: center; }
.cp-empty { grid-column: 1 / -1; margin: 0; color: var(--muted); font-size: 13px; text-align: center; }
.cp-sl { position: relative; display: grid; grid-template-columns: minmax(0, 1fr); gap: 12px; min-width: 0; }
.cp-sl.is-sold .cards { filter: grayscale(.85) brightness(.7); }
.cp-gone { display: grid; place-items: center; aspect-ratio: 5 / 7; border: 1px dashed var(--brass-line); color: var(--muted); font-size: 12px; text-align: center; padding: 10px; }
.cp-sold { display: grid; place-items: center; height: 40px; border: 1px dashed var(--brass-line); color: var(--muted); font-size: 11px; letter-spacing: .24em; text-transform: uppercase; }
.cp-sold-sm { height: 36px; width: 100%; font-size: 10px; letter-spacing: .2em; }

/* le coup de cœur : un cartouche à gradins posé à cheval sur le bord haut de la carte */
.cp-heart { --s: 3px; position: absolute; z-index: 7; top: -13px; left: 50%; translate: -50% 0; display: inline-flex; align-items: center; gap: 7px; padding: 6px 14px; white-space: nowrap; pointer-events: none;
  background: linear-gradient(#e8636b, #b3293a 55%, #8e1a2b); color: #fff; font-size: 9.5px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; filter: drop-shadow(0 4px 8px #0009);
  clip-path: polygon(0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)),
    100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s))); }
.cp-heart svg { width: 11px; height: 11px; fill: currentColor; flex: none; }
.cp-heart b { font-size: 11.5px; font-weight: 700; letter-spacing: .06em; }

/* les vrais boutons (ceux des pièces : « Recycler », « Recharger le stock ») : « Acheter » sous chaque carte, « Relancer » dans la colonne de gauche */
.cp-buy, .cp-rel, .cp-svc-btn { width: 100%; justify-content: space-between; }
html body .cp-buy { padding: 0 12px 0 14px; gap: 8px; }
.cp-buy .rc-label { letter-spacing: .12em; }
.cp-buy .rc-cost, .cp-rel .rc-cost { padding-left: 10px; }
.cp-buy .rc-cost s { font-size: 10.5px; font-weight: 400; color: var(--muted); margin-right: 3px; }
html body .cp-rel { height: 36px; padding: 0 8px 0 10px; gap: 6px; }   /* la colonne de gauche fait 210 px, filet vertical compris : le bouton (≈ 180 px) rentre dans ce qui reste */
.cp-rel svg { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; flex: none; }
.cp-rel .rc-label { font-size: 10px; letter-spacing: .08em; }
/* Armé (« Confirmer ? », confirmation en deux temps) : l'aspect du survol, fond retiré et contour laiton ; le texte clair posé sur le laiton plein était presque illisible en thème sombre */
html body :is(.cp-rel, .cp-buy).is-armed { color: var(--brass); }
html body :is(.cp-rel, .cp-buy).is-armed::before { opacity: 0; }
html body :is(.cp-rel, .cp-buy).is-armed::after { opacity: 1; }
html body :is(.cp-rel, .cp-buy).is-armed .rc-label { color: var(--brass); }
html body :is(.cp-rel, .cp-buy).is-armed b { color: var(--text); }
html body :is(.cp-rel, .cp-buy).is-armed .rc-cost { border-left-color: var(--brass-line); }

/* services : trois médaillons Art déco */
.cp-medal { width: 96px; height: 96px; overflow: visible; filter: drop-shadow(0 6px 14px color-mix(in srgb, var(--brass) 18%, transparent)); }
.cp-medal .mf { fill: color-mix(in srgb, var(--brass) 8%, var(--card)); }
.cp-medal .mb { fill: none; stroke: var(--brass); stroke-width: 1.2; stroke-linejoin: round; }
.cp-medal .ml { fill: none; stroke: var(--brass-line); stroke-width: 1; }
.cp-medal .mm { fill: var(--brass); }
.cp-medal .gl { fill: none; stroke: var(--brass); stroke-width: .9; stroke-linejoin: round; opacity: .85; }
.cp-medal .fr path { fill: none; stroke: #7fb7d8; stroke-width: 1.9; stroke-linecap: round; stroke-linejoin: round; }
.cp-pips { display: inline-flex; gap: 7px; }
.cp-pips i { width: 9px; height: 9px; rotate: 45deg; border: 1px solid var(--brass); }
.cp-pips i.on { background: var(--brass); }
.cp-note { font-size: 12px; color: var(--muted); }
.cp-svc-btn { width: 164px; min-width: 0; gap: 14px; }   /* largeur fixe : un prix à 3 chiffres ne pousse pas le sélecteur */
.cp-tile:has(.cp-stepbox) .cp-ctl { align-items: flex-start; }
html body .rc-btn.cp-svc-btn { margin: 0; }

/* la Roue de l'Espoir : un encart, la roue, le bouton, le tableau des gains (non sélectionnable : on joue dessus) */
.cp-roue { user-select: none; -webkit-user-select: none; }
.cp-stage { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr); gap: 26px 44px; align-items: center; margin-top: 18px; }
.cp-wheelbox { justify-self: center; width: min(100%, 520px); }
.cp-wheelbox svg.wh { display: block; width: 100%; height: auto; overflow: visible; user-select: none; -webkit-user-select: none; }
.cp-rot { transform-box: view-box; transform-origin: 220px 232px; transition: transform 4.6s cubic-bezier(.1, .72, .12, 1); }
.cp-roue .wh .ln { fill: none; stroke: var(--brass-line); }
.cp-roue .wh .br { fill: none; stroke: var(--brass); }
.cp-roue .wh .fb { fill: var(--brass); }
.cp-roue .wh .tx { fill: var(--text); font-family: var(--font); }
.cp-roue .wh .bgf { fill: var(--bg); }
.cp-roue .wh .zr { fill: none; stroke: var(--muted); stroke-width: 1.7; }
.cp-panel { display: grid; gap: 22px; align-content: center; }
.cp-ctrl { display: grid; gap: 14px; justify-items: stretch; }
.cp-spins { display: flex; align-items: center; gap: 12px; font-size: 13px; color: var(--muted); }
.cp-spin { height: 54px; width: 100%; padding: 0 22px 0 26px; gap: 18px; justify-content: space-between; }
.cp-spin .rc-label { font-size: 12.5px; letter-spacing: .22em; }
.cp-spin .rc-cost b { font-size: 17px; }
.cp-spin .wc-piece { width: 1.6em; height: 1.6em; }
.cp-res { min-height: 54px; display: grid; align-content: center; gap: 2px; padding: 8px 16px; border-left: 2px solid var(--brass); background: linear-gradient(90deg, color-mix(in srgb, var(--brass) 8%, transparent), transparent); font-size: 14px; color: var(--muted); }
.cp-res b { color: var(--text); font-weight: 500; font-size: 18px; display: inline-flex; align-items: center; gap: 8px; }
.cp-res.is-win { animation: cp-in .6s ease; }
@keyframes cp-in { from { opacity: 0; translate: 0 6px; } }
.cp-gains h3 { margin: 0 0 10px; font-size: 11px; font-weight: 500; letter-spacing: .3em; text-transform: uppercase; color: var(--brass-ink); }
.cp-gains ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.cp-gains li { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto auto; align-items: center; gap: 12px; padding: 7px 12px 7px 9px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 4%, transparent); }
.cp-gic { display: grid; place-items: center; width: 26px; height: 26px; border: 1px solid var(--brass-line); border-radius: 50%; background: color-mix(in srgb, var(--brass) 8%, transparent); }
.cp-gic .zero { width: 10px; height: 10px; border: 1.5px solid var(--muted); border-radius: 50%; }
.cp-gic .wc-piece { width: 16px; height: 16px; vertical-align: middle; }
.cp-gic .op-pack-mini { width: 10px; height: 15px; margin: 0; }
.cp-gl { font-size: 13px; }
.cp-gs { display: inline-flex; gap: 3px; }
.cp-gs i { width: 5px; height: 5px; rotate: 45deg; border: 1px solid var(--brass-line); }
.cp-gs i.on { background: var(--brass); border-color: var(--brass); }
.cp-gn { min-width: 62px; font-size: 12px; color: var(--muted); text-align: right; font-variant-numeric: tabular-nums; }

/* message qui s'efface */
.cp-toast { position: fixed; z-index: 90; left: 50%; bottom: 96px; translate: -50% 0; max-width: min(92vw, 520px); margin: 0; padding: 14px 22px; border: 1px solid var(--brass); background: linear-gradient(var(--card), var(--card)), var(--bg); color: var(--text); font-size: 14px; box-shadow: 0 14px 40px -12px #000a; text-align: center; }
.cp-toast { opacity: 0; transition: opacity .18s ease; pointer-events: none; }
.cp-toast.is-on { opacity: 1; }
.cp-toast.is-error { border-color: #d5544f; }
.cp-toast[hidden] { display: none; }

@container jxp (max-width: 900px) {
  .cp-encart { padding: 30px 26px 30px; }
  .cp-gs { display: none; }
}
@container jxp (max-width: 760px) {
  .cp-wal { padding: 14px 20px; }
  .cp-jump { padding-left: 0; border-left: 0; }
  .cp-encart { padding: 28px 14px 28px; }
  .cp-row { grid-template-columns: minmax(0, 1fr); padding: 20px 0; }
  .cp-nm { grid-template-columns: auto auto; grid-template-areas: "n r" "n b"; justify-content: center; align-items: center; column-gap: 16px; row-gap: 8px; padding-right: 0; border-right: 0; padding-bottom: 12px; border-bottom: 1px solid var(--brass-line); }
  .cp-nm::after { display: none; }
  .cp-nm .n { grid-area: n; font-size: 54px; }
  .cp-nm .rname { grid-area: r; }
  .cp-nm .cp-rel, .cp-nm .cp-sold-sm { grid-area: b; width: auto; }
  .cp-ex { gap: 10px; }
  .cp-heart .t { display: none; }
  html body .rc-btn.cp-buy { flex-direction: column; justify-content: center; height: auto; min-height: 50px; padding: 6px 4px; gap: 3px; }   /* trois colonnes étroites : le libellé au-dessus du prix */
  .cp-buy .rc-label { font-size: 9px; letter-spacing: .1em; }
  html body .rc-btn.cp-buy .rc-cost { padding-left: 0; border-left: 0; gap: 3px; }
  .cp-buy .rc-cost s { display: none; }
  .cp-stage { grid-template-columns: minmax(0, 1fr); }
  .cp-ctrl { justify-items: stretch; }
}
@container jxp (max-width: 520px) {   /* « COMPTOIR » a une lettre de plus qu'« ATELIER » : le titre rentre sur les plus petits téléphones */
  .cp-page .jxp-title { --ls: .2em; font-size: 26px; gap: 8px; }
  .cp-page .jxp-title::before, .cp-page .jxp-title::after { width: 40px; -webkit-mask-size: 36px 14px, 0 0; mask-size: 36px 14px, 0 0; }
  .cp-solde b { font-size: 24px; }
  .cp-gemlist .cp-pg .at-gem-n { font-size: 8.5px; letter-spacing: .02em; }   /* « Émeraude » et « Améthyste » ne se chevauchent plus dans les cinq colonnes */
}
@media (max-width: 760px) { .cp-toast { bottom: calc(110px + env(safe-area-inset-bottom, 0px)); } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .cp-rot { transition-duration: .01s; } :where(:root[data-motion="reduce"]) .cp-res.is-win { animation: none; }


/* ===== Comptoir : seconde passe (titres, tags, services en lignes, fenêtre de détail) ===== */
.cp-encart .jxp-ehead { gap: 10px; }
.cp-kicker { display: flex; align-items: center; justify-content: center; gap: 14px; margin: 0; font-size: 11px; font-weight: 500; letter-spacing: .3em; text-transform: uppercase; color: var(--brass-ink); }
.cp-kicker::before, .cp-kicker::after { content: ""; width: 34px; height: 1px; background: var(--brass); }
.cp-encart .jxp-ehead h2 { margin: 0; font-size: 38px; font-weight: 300; line-height: 1.05; letter-spacing: .1em; text-align: center; text-shadow: 0 0 22px color-mix(in srgb, var(--brass) 26%, transparent); }
.cp-encart .jxp-ehead h2 b { font-weight: 600; color: var(--brass-ink); }
.cp-own, .cp-step { --s: 3px;
  --cp-steps: polygon(0 calc(2*var(--s)), var(--s) calc(2*var(--s)), var(--s) var(--s), calc(2*var(--s)) var(--s), calc(2*var(--s)) 0, calc(100% - 2*var(--s)) 0, calc(100% - 2*var(--s)) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(2*var(--s)), 100% calc(2*var(--s)),
    100% calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - 2*var(--s)), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) calc(100% - var(--s)), calc(100% - 2*var(--s)) 100%, calc(2*var(--s)) 100%, calc(2*var(--s)) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - 2*var(--s)), 0 calc(100% - 2*var(--s))); }

/* « Déjà ×N » : une petite plaque à gradins, filet laiton, losange et chiffre */
.cp-own { position: absolute; z-index: 5; top: 9px; right: 9px; isolation: isolate; display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px 4px 8px; color: var(--brass-ink); font-size: 8.5px; font-weight: 600; letter-spacing: .22em; text-transform: uppercase; pointer-events: none; filter: drop-shadow(0 3px 6px #000a); }
.cp-own::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); clip-path: var(--cp-steps); }
.cp-own::after { content: ""; position: absolute; inset: 1px; z-index: -1; background: linear-gradient(var(--bg), color-mix(in srgb, var(--brass) 16%, var(--bg))); clip-path: var(--cp-steps); }
.cp-own i { width: 5px; height: 5px; rotate: 45deg; background: var(--brass); flex: none; }
.cp-own b { font-size: 12px; font-weight: 600; letter-spacing: .03em; color: var(--text); }

/* services : une ligne par service (médaillon, texte, commandes) */
.cp-tiles { display: grid; gap: 0; margin-top: 10px; }
.cp-tile { display: grid; grid-template-columns: 104px minmax(0, 300px) minmax(0, 1fr); align-items: center; gap: 12px 34px; padding: 24px 4px; }
.cp-tile + .cp-tile { border-top: 1px solid var(--brass-line); }
.cp-tx { display: grid; gap: 9px; align-content: center; justify-items: start; }
.cp-tx h3 { margin: 0; font-size: 13px; font-weight: 500; letter-spacing: .24em; text-transform: uppercase; color: var(--brass-ink); }
.cp-tx p { margin: 0; font-size: 12.5px; line-height: 1.6; color: var(--muted); }
.cp-tx p b { color: var(--text); font-weight: 500; }
.cp-ctl { display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 12px 16px; min-width: 0; }
.cp-tile-gems .cp-ctl { justify-content: stretch; }
.cp-gemlist { width: 100%; gap: 8px; }
.cp-pg { padding: 14px 4px 11px; }
.cp-pg .gem { width: 34px; height: 34px; }
.cp-pg b { font-size: 20px; }
.cp-pg .at-gem-n { font-size: 11px; }
.cp-pg .at-gem-t { font-size: 10.5px; }
.cp-pg.is-done { cursor: default; filter: grayscale(.7); opacity: .55; }
.cp-pg.is-done:hover { border-color: var(--brass-line); background: linear-gradient(180deg, color-mix(in srgb, var(--gc) 16%, var(--card)), color-mix(in srgb, var(--gc) 4%, var(--card)) 85%); }
.cp-pg.is-poor { cursor: var(--cur-blocked, not-allowed); opacity: .7; }
.cp-pg:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.cp-medal .gg { fill: url(#cp-gemg); fill-opacity: .8; stroke: var(--brass); stroke-width: 1.2; stroke-linejoin: round; }
.cp-medal .gs { fill: none; stroke: var(--brass); stroke-width: 1.2; stroke-linecap: round; }
.cp-medal .fr path { stroke-width: 1.7; }
.cp-medal .fr .fd { fill: #9fd3f0; stroke: none; }

/* le sélecteur du nombre de paquets : une capsule à gradins, boutons « − » et « + » de part et d'autre du nombre */
.cp-step { position: relative; isolation: isolate; display: inline-flex; align-items: stretch; width: 124px; height: 38px; clip-path: var(--cp-steps); }   /* clip-path sur toute la capsule : le survol des boutons suit les gradins */
.cp-step::before { content: ""; position: absolute; inset: 0; z-index: -2; background: var(--brass); opacity: .6; clip-path: var(--cp-steps); }
.cp-step::after { content: ""; position: absolute; inset: 1px; z-index: -1; background: var(--card); clip-path: var(--cp-steps); }
.cp-step button { appearance: none; width: 38px; flex: none; display: grid; place-items: center; border: 0; background: none; color: var(--brass-ink); cursor: var(--cur-hand); transition: background .25s ease, color .25s ease; }
.cp-step button svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; }
.cp-step button:hover:not(:disabled), .cp-step button:focus-visible { background: color-mix(in srgb, var(--brass) 24%, transparent); color: var(--text); }
.cp-step button:disabled { opacity: .28; cursor: default; }
.cp-step-v { display: grid; justify-items: center; align-content: center; flex: 1; min-width: 0; padding: 0 4px; border-inline: 1px solid var(--brass-line); }
.cp-step output { font-size: 20px; font-weight: 500; line-height: 1; font-variant-numeric: tabular-nums; }
.cp-stepbox { display: grid; justify-items: center; gap: 5px; }
.cp-step-u { font-size: 9px; letter-spacing: .24em; text-transform: uppercase; color: var(--muted); }

/* la fenêtre de détail d'une carte du marché */
.cp-modal .cp-mcontent { display: contents; }
.cp-modal .cards.cp-one { display: block; width: 100%; padding: 0; margin: 0; min-height: 0; }
.cp-modal .cards.cp-one .card { width: 100%; }
.cp-mprice { display: inline-flex; align-items: center; gap: 6px; font-weight: 600; }
.cp-mprice s { color: var(--muted); font-weight: 400; font-size: .85em; }
.cp-mprice .wc-piece { width: 1.3em; height: 1.3em; vertical-align: middle; }
.cp-mheart { margin-left: 10px; padding: 2px 9px; background: linear-gradient(#e8636b, #8e1a2b); color: #fff; font-size: 10px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; }
.cp-mlinks { display: grid; gap: 8px; justify-items: start; margin-top: 14px; }
.cp-mlinks + .modal-report { margin-top: 14px; }
.cp-mact { margin-top: 22px; max-width: 340px; }
.cp-mbuy { width: 100%; }
.cp-page .at-gem { min-width: 0; }

@container jxp (max-width: 900px) {
  .cp-tile { grid-template-columns: 96px minmax(0, 1fr); }
  .cp-tile .cp-ctl { grid-column: 1 / -1; justify-content: flex-start; }
}
@container jxp (max-width: 760px) {
  .cp-tile { grid-template-columns: 80px minmax(0, 1fr); gap: 12px 18px; padding: 22px 0; }
  .cp-tile .cp-medal { width: 80px; height: 80px; }
  .cp-encart .jxp-ehead h2 { font-size: 28px; letter-spacing: .08em; }
  .cp-kicker { font-size: 10px; letter-spacing: .22em; }
  .cp-kicker::before, .cp-kicker::after { width: 22px; }
  .cp-gemlist { grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 5px; }
  .cp-pg .at-gem-t { display: none; }
  .cp-pg b { font-size: 16px; }
  .cp-pg .gem { width: 26px; height: 26px; }
}

/* Gels de série (achetés au Comptoir) : la ligne sous la frise de la série de connexion (page Paquets) */
.op-streak-freeze { display: flex; align-items: center; justify-content: center; gap: 8px; margin: 12px 0 0; font-size: 13px; color: var(--muted); text-align: center; }
.op-streak-freeze b { color: var(--text); font-weight: 500; }
.frost-ico { width: 18px; height: 18px; flex: none; color: #7fb7d8; }

/* Bouton d'achat « pastille » (A2) : la pièce, en plus grand, sur une pastille sombre cerclée de laiton, à droite du prix. Prix réduit (R5) : le nouveau prix sur une plaque rouge à texte blanc. */
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) :is(.rc-cost, .op-refill-cost) { border-left: 0; padding-left: 0; gap: 7px; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) :is(.rc-cost, .op-refill-cost) .wc-piece { order: 2; box-sizing: content-box; width: 20px; height: 20px; padding: 3px; margin-right: -3px; vertical-align: 0; border-radius: 50%; background: #121c17; box-shadow: 0 0 0 1.5px #8a6011, 0 0 8px #f2c84f66; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn) :is(.rc-cost, .op-refill-cost) b { font-size: 15px; }
html body :is(.refill-btn, .rc-btn):is(.refill-btn, .rc-btn):disabled :is(.rc-cost, .op-refill-cost) .wc-piece { opacity: .6; }
html body .rc-btn.cp-spin { height: 54px; }
html body .rc-btn.cp-spin .rc-cost .wc-piece { width: 26px; height: 26px; padding: 4px; margin-right: -4px; }
html body .rc-btn.cp-spin .rc-cost b { font-size: 19px; }
html body .rc-btn.cp-buy.is-disc .rc-cost s { font-size: 10px; margin-right: 0; color: #3a2a06; }
html body .rc-btn.cp-buy.is-disc .rc-cost b { padding: 3px 8px; color: #fff; background: linear-gradient(#e8636b, #8e1a2b); box-shadow: 0 0 0 1px #5a0f19; }
html body .rc-btn.cp-buy.is-disc:is(:hover, :focus-visible):not(:disabled) .rc-cost s { color: var(--muted); }
html body .rc-btn.cp-buy.is-disc:disabled .rc-cost b { color: var(--muted); background: none; box-shadow: none; padding: 0; }
@media (max-width: 520px) { html body .rc-btn.cp-buy .rc-cost .wc-piece { width: 16px; height: 16px; padding: 2px; margin-right: 0; } html body .rc-btn.cp-buy.is-disc .rc-cost b { padding: 2px 5px; } }
.cp-confetti { position: fixed; inset: 0; width: 100vw; height: 100vh; pointer-events: none; z-index: 95; }

/* =========================================================
   Accueil visiteurs, acte II (1.0.0) : public/index.php et src/HomeView.php (dessin : design/propositions-accueil.php, proposition A).
   Titres Limelight entre chevrons (.hp-title), encarts à gradins des pages Jeux/Comptoir (.jxp-encart.cp-encart : petite mention, puis grand titre dont un mot est doré)
   pour chaque mise en scène (.hs-…), tablettes de gains (.hs-tb), pièces et joyaux en icônes. Les scènes sont aria-hidden et sans effet. Aucun style en ligne (CSP) :
   les valeurs propres à une scène (largeur d'une barre…) sont posées ici.
   ========================================================= */

/* Titres de section : Limelight, chevrons de chaque côté (comme le titre des pages Jeux et Atelier), puis un chapeau */
.hp-title { display: flex; align-items: center; justify-content: center; gap: 22px; margin: 0 0 14px; font: 400 clamp(24px, 3.6vw, 40px)/1.1 var(--font-title); letter-spacing: .2em; text-transform: uppercase; text-align: center; }
.hp-title::before, .hp-title::after { content: ""; flex: none; width: clamp(40px, 12vw, 170px); height: 14px; background: var(--brass);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 14'%3E%3Cpath d='M4 3.5 7.5 7 4 10.5.5 7Z'/%3E%3Cg fill='none' stroke='%23000' stroke-width='1.1'%3E%3Cpath d='M16 2.5 21.5 7 16 11.5'/%3E%3Cpath stroke-opacity='.65' d='M27 2.5 32.5 7 27 11.5'/%3E%3Cpath stroke-opacity='.35' d='M38 2.5 43.5 7 38 11.5'/%3E%3C/g%3E%3C/svg%3E") left center / 50px 14px no-repeat, linear-gradient(90deg, #000, transparent) right center / calc(100% - 58px) 1px no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 50 14'%3E%3Cpath d='M4 3.5 7.5 7 4 10.5.5 7Z'/%3E%3Cg fill='none' stroke='%23000' stroke-width='1.1'%3E%3Cpath d='M16 2.5 21.5 7 16 11.5'/%3E%3Cpath stroke-opacity='.65' d='M27 2.5 32.5 7 27 11.5'/%3E%3Cpath stroke-opacity='.35' d='M38 2.5 43.5 7 38 11.5'/%3E%3C/g%3E%3C/svg%3E") left center / 50px 14px no-repeat, linear-gradient(90deg, #000, transparent) right center / calc(100% - 58px) 1px no-repeat; }
.hp-title::before { transform: scaleX(-1); }
@media (max-width: 620px) { .hp-title::before, .hp-title::after { display: none; } }
.hp-sub { margin: 0 auto 40px; max-width: 62ch; text-align: center; color: var(--muted); text-wrap: balance; }
.hp-sub::before { content: ""; display: block; width: 120px; height: 8px; margin: 0 auto 16px; background: var(--brass);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 8'%3E%3Cpath d='M60 .5 63.5 4 60 7.5 56.5 4Z'/%3E%3Cpath fill='none' stroke='%23000' d='M0 4H52M68 4H120'/%3E%3C/svg%3E") center / 100% 100% no-repeat; mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 8'%3E%3Cpath d='M60 .5 63.5 4 60 7.5 56.5 4Z'/%3E%3Cpath fill='none' stroke='%23000' d='M0 4H52M68 4H120'/%3E%3C/svg%3E") center / 100% 100% no-repeat; }
.rar .hp-title { margin-bottom: 18px; }
.home-poster .hero .hp-cta { display: flex; gap: 22px; justify-content: center; align-items: center; flex-wrap: wrap; }
.hp-serie { padding: 20px 0 clamp(50px, 7vw, 80px); }
.hp-serie .jxp-encart { max-width: 1000px; margin: 0 auto; }
.showcase-head { margin-bottom: 0; }

/* Bandeaux : le texte (acte en petites capitales, titre Limelight) à côté d'une scène en encart */
.home-poster .sc-media { flex: 1 1 52%; } .home-poster .sc-text { flex: 1 1 40%; }
.home-poster .sc-text h2 { font-size: clamp(26px, 3vw, 38px); letter-spacing: .06em; text-transform: none; line-height: 1.2; }
.home-poster .sc-num { display: block; margin: 0 0 10px; font: 500 12px/1 var(--font); letter-spacing: .34em; text-transform: uppercase; color: var(--brass-ink); vertical-align: baseline; }
.home-poster .sc-num::before { content: "Acte "; }
.sc-bul { list-style: none; margin: 16px 0 0; padding: 0; display: grid; gap: 7px; font-size: 14.5px; color: var(--muted); }
.sc-bul li { position: relative; padding-left: 20px; } .sc-bul li::before { content: ""; position: absolute; left: 2px; top: .62em; width: 6px; height: 6px; rotate: 45deg; background: var(--brass); }
.sc-bul b { color: var(--text); font-weight: 500; }

/* Les scènes (encarts) : le cadre et la tête de titre de la page Comptoir (.cp-encart), sans l'éventail ; ici le titre est un peu plus petit */
.home-poster .jxp-encart { --s: 7px; width: 100%; }
.home-poster .cp-encart { margin-bottom: 0; padding: 34px clamp(14px, 3vw, 42px) 36px; }
.home-poster .cp-encart .jxp-ehead h2 { font-size: clamp(24px, 2.6vw, 34px); }
.home-poster .gem { width: 1.3em; height: 1.3em; vertical-align: middle; }
.home-poster .wc-piece { vertical-align: middle; }
/* tablette à gradins, filet laiton d'un pixel (gains du quiz, étiquettes des paquets) */
.hs-tb, .hs-tb::before, .hp-chip, .hp-chip::before { clip-path: polygon(0 calc(var(--s)*2), var(--s) calc(var(--s)*2), var(--s) var(--s), calc(var(--s)*2) var(--s), calc(var(--s)*2) 0, calc(100% - var(--s)*2) 0, calc(100% - var(--s)*2) var(--s), calc(100% - var(--s)) var(--s), calc(100% - var(--s)) calc(var(--s)*2), 100% calc(var(--s)*2), 100% calc(100% - var(--s)*2), calc(100% - var(--s)) calc(100% - var(--s)*2), calc(100% - var(--s)) calc(100% - var(--s)), calc(100% - var(--s)*2) calc(100% - var(--s)), calc(100% - var(--s)*2) 100%, calc(var(--s)*2) 100%, calc(var(--s)*2) calc(100% - var(--s)), var(--s) calc(100% - var(--s)), var(--s) calc(100% - var(--s)*2), 0 calc(100% - var(--s)*2)); }
.hs-tb { --s: 4px; position: relative; isolation: isolate; display: grid; justify-items: center; align-content: center; gap: 5px; padding: 12px 14px 13px; background: color-mix(in srgb, var(--brass) 65%, transparent); text-align: center; }
.hs-tb::before { content: ""; position: absolute; inset: 1px; z-index: -1; background: linear-gradient(var(--card), color-mix(in srgb, var(--brass) 9%, var(--card))); }
.hs-tb em { font-style: normal; font-size: 10.5px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); }
.hs-tb b { font-weight: 600; font-size: 18px; letter-spacing: .02em; }
.hs-tb small { display: inline-flex; align-items: center; justify-content: center; gap: 7px; font-size: 15px; color: var(--muted); }
.hs-cap { margin: 10px 0 0; text-align: center; font-size: 13px; color: var(--muted); letter-spacing: .04em; }
.hs-cap--geo { margin-top: 64px; }
.hs-rule { margin: 22px auto 18px; max-width: 280px; }
.hs-reward { margin: 8px 0 0; text-align: center; font-size: 13.5px; color: var(--muted); }
.hs-gel { color: var(--brass-ink); }

/* Acte I : les cinq paquets en éventail (argenté tout à gauche, thématique tout à droite, le standard devant) et leurs étiquettes, à bonne distance */
.packs3d-trio { --d1: clamp(54px, 9vw, 84px); --d2: clamp(104px, 17vw, 160px); }
.packs3d-trio .pack-stage { --pk: .7; }
.packs3d-trio .pack3d-static--silver   { transform: translate(calc(-50% - var(--d2)), calc(-50% + 8%)) rotate(-17deg); z-index: 1; opacity: .85; }
.packs3d-trio .pack3d-static--golden   { transform: translate(calc(-50% - var(--d1)), calc(-50% + 4%)) rotate(-9deg); z-index: 3; opacity: .92; }
.packs3d-trio .pack3d-static--normal   { transform: translate(-50%, -50%); z-index: 5; }
.packs3d-trio .pack3d-static--diamond  { transform: translate(calc(-50% + var(--d1)), calc(-50% + 4%)) rotate(9deg); z-index: 3; opacity: .94; }
.packs3d-trio .pack3d-static--thematic { transform: translate(calc(-50% + var(--d2)), calc(-50% + 8%)) rotate(17deg); z-index: 1; opacity: .85; }
@media (max-width: 760px) { .packs3d-trio .pack-stage { --pk: .52; } }
@media (max-width: 420px) { .packs3d-trio .pack-stage { --pk: .4; } }
.hp-chips { list-style: none; display: flex; justify-content: center; flex-wrap: wrap; gap: 12px; margin: 54px 0 0; padding: 0; }
.hp-chip { --s: 3px; --c: var(--brass); position: relative; isolation: isolate; padding: 8px 18px 8px 34px; font-size: 11px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--text); background: color-mix(in srgb, var(--c) 75%, var(--brass)); }
.hp-chip::before { content: ""; position: absolute; inset: 1px; z-index: -1; background: linear-gradient(135deg, color-mix(in srgb, var(--c) 36%, var(--card)), var(--card) 88%); }
.hp-chip::after { content: ""; position: absolute; left: 15px; top: 50%; width: 8px; height: 8px; rotate: 45deg; translate: 0 -50%; background: var(--c); box-shadow: 0 0 9px color-mix(in srgb, var(--c) 75%, transparent); }
.hp-chip--std { --c: #2a7a4a; } .hp-chip--silver { --c: #9aa0a6; } .hp-chip--golden { --c: #d4a53c; } .hp-chip--diamond { --c: #5a9ed8; } .hp-chip--thematic { --c: #9e8ad4; }

/* Acte II : collection (pastilles de rareté en dégradé, étiquettes) */
.hs-coll .sc-chips, .hs-coll .sc-tags { justify-content: center; }
.hs-coll .sc-chips { gap: 8px; margin-top: 8px; }
.hs-coll .sc-tags { gap: 8px; margin-top: 12px; }
.hs-coll .sc-chip { padding: 6px 12px 6px 11px; gap: 8px; font-size: 10.5px; font-weight: 500; letter-spacing: .1em; text-transform: uppercase; border: 1px solid color-mix(in srgb, var(--rc) 62%, transparent);
  background: linear-gradient(135deg, color-mix(in srgb, var(--rc) 36%, transparent), color-mix(in srgb, var(--rc) 7%, transparent) 90%); }
.hs-coll .sc-chip i { width: 8px; height: 8px; box-shadow: 0 0 7px var(--rc); }
.hs-coll .sc-chip.r7 { border-color: rgba(231, 200, 150, .6); background: linear-gradient(135deg, rgba(229, 143, 176, .34), rgba(233, 194, 111, .28) 35%, rgba(127, 214, 168, .26) 65%, rgba(127, 182, 236, .34)); }
.hs-coll .sc-tag { position: relative; padding: 5px 14px; font-size: 11px; font-weight: 500; letter-spacing: .14em; border: 1px solid var(--brass-line); background: linear-gradient(180deg, color-mix(in srgb, var(--brass) 14%, transparent), color-mix(in srgb, var(--brass) 5%, transparent)); }
.hs-coll .sc-tag--sub { opacity: 1; margin-left: -2px; } .hs-coll .sc-tag--sub::before { content: "›"; margin-right: 7px; color: var(--brass); }
.hs-cards4 { display: grid; grid-template-columns: repeat(4, minmax(0, 150px)); justify-content: center; gap: 12px; margin-top: 18px; }
.hs-cards4 .cards, .hs-styled .cards, .hs-ex .cards, .hs-vitrine .cards { display: block; margin: 0; padding: 0; }

/* Acte III : quiz */
.hs-qtop { display: flex; justify-content: space-between; font-size: 11.5px; letter-spacing: .22em; text-transform: uppercase; color: var(--muted); }
.hs-timer { color: var(--brass-ink); font-weight: 500; }
.hs-qbar { height: 5px; margin-top: 8px; background: var(--track); } .hs-qbar i { display: block; width: 40%; height: 100%; background: linear-gradient(90deg, var(--brass), color-mix(in srgb, var(--brass) 55%, #fff3c8)); }
.hs-qq { margin: 14px 0 12px; font: 400 clamp(17px, 2vw, 22px)/1.35 var(--font-title); letter-spacing: .02em; text-align: center; text-wrap: balance; }
.hs-qin { display: flex; justify-content: center; align-items: center; gap: 2px; margin: 0 auto; width: min(100%, 360px); padding: 11px 16px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--text) 5%, transparent); font-size: 18px; letter-spacing: .06em; }
.hs-qin u { width: 2px; height: 22px; background: var(--brass); animation: hs-blink 1.1s steps(1) infinite; } @keyframes hs-blink { 50% { opacity: 0; } }
.hs-gains { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 16px; }
.hs-gains .hs-tb b { font-size: 17px; } .hs-gains .gem { width: 1.55em; height: 1.55em; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .hs-qin u { animation: none; }

/* Acte IV : WikiSpeed (même aperçu que l'encart de la page Jeux, posé dans l'encart) ; acte V : WikiGéo */
.hs-e-speed .wsb-preview { width: min(100%, 380px); height: clamp(220px, 20vw, 260px); margin: 22px auto 40px; }
.hs-e-speed .wsb-win { position: static; width: 100%; height: 100%; transform: rotate(-1.4deg); }
.hs-e-speed .wsb-cards { left: 6%; bottom: -38px; } .hs-e-speed .wsb-card { width: clamp(94px, 11vw, 118px); }
.hs-e-geo .gqj-preview { margin-top: 22px; }

/* Acte VI : Atelier (médaillons de joyaux de la page Atelier, puis quatre cartes au style de leur thème) */
.hs-gemlist { margin-top: 20px; }
.hs-gemlist .at-gem { padding: 14px 4px 11px; } .hs-gemlist .at-gem b { font-size: 22px; } .hs-gemlist .at-gem-n, .hs-gemlist .at-gem-t { font-size: 11px; }
.hs-styled { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-top: 22px; }

/* Acte VII : Comptoir (trois étagères avec le bouton « Acheter » de la page Comptoir, puis la Roue de l'Espoir de cette page, mêmes dessin et bouton) */
.hs-ex { margin-top: 20px; grid-template-columns: repeat(3, minmax(0, 156px)); gap: clamp(12px, 3vw, 36px); }
.hs-ex .cp-sl { gap: 14px; }
.hs-wheelhead { display: grid; gap: 10px; text-align: center; }
.hs-wheelhead h3 { margin: 0; font: 300 clamp(28px, 3.4vw, 38px)/1.05 var(--font-title); letter-spacing: .1em; text-transform: uppercase; text-shadow: 0 0 22px color-mix(in srgb, var(--brass) 26%, transparent); }
.hs-wheelhead h3 b { font-weight: 600; color: var(--brass-ink); }
.hs-stage { margin-top: 18px; grid-template-columns: minmax(0, 1fr); gap: 22px; justify-items: center; }
.hs-stage .cp-wheelbox { width: min(100%, 380px); }
.hs-stage .cp-panel { width: min(100%, 340px); }
.hs-spins { margin: 0; text-align: center; font-size: 14px; color: var(--muted); letter-spacing: .04em; }
.hs-stage .rc-btn { cursor: default; }

/* Acte VIII : le vrai livre d'or de la page Succès (assets/succes.js le fait tourner) */
.hs-livre { width: 100%; }
@media (max-width: 760px) { .home-poster .sc-row { align-items: stretch; } .home-poster .sc-media, .home-poster .sc-text { flex: none; } }   /* en colonne, le livre (sans largeur propre) doit prendre toute la largeur */

/* Série de connexion : les 14 jours, chacun avec son nœud et sa récompense exacte, comme la frise de la page Paquets */
.hs-days { list-style: none; margin: 16px 0 0; padding: 0; display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 22px 4px; }
.hs-day { display: grid; justify-items: center; align-content: start; gap: 5px; }
.hs-day .rs-nd { width: 64px; height: 64px; overflow: visible; }
@media (max-width: 760px) { .hs-days { grid-template-columns: repeat(4, minmax(0, 1fr)); } }

/* Acte IX : amis, échanges, vitrine */
.hs-social { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 18px; }
.hs-duel, .hs-friends { display: flex; align-items: center; justify-content: center; gap: 14px; padding: 14px; border: 1px solid var(--brass-line); background: color-mix(in srgb, var(--brass) 6%, transparent); }
.hs-vitrine { margin-top: 20px; } .hs-vitrine p { margin: 0 0 16px; text-align: center; font: 400 12px/1 var(--font-title); letter-spacing: .28em; text-transform: uppercase; color: var(--brass-ink); }
.hs-vitrine > div { display: grid; grid-template-columns: repeat(3, minmax(0, 120px)); gap: 12px; justify-content: center; }

@media (max-width: 760px) {
  .hs-cards4 { grid-template-columns: repeat(2, minmax(0, 150px)); } .hs-styled { grid-template-columns: repeat(2, 1fr); } .hs-social { grid-template-columns: 1fr; }
  .hs-gains { grid-template-columns: 1fr; } .hs-ex { gap: 8px; }
}

/* En-tête du visiteur, sur ordinateur : « Se connecter » (secondaire) et « S'inscrire » (principal) sont les vrais boutons du jeu, un peu plus grands que les anciennes pastilles
   (le menu du haut fait 76 px : ils tiennent dedans) ; sur téléphone, ils sont remplacés par le petit bonhomme (.burger-menu, voir plus haut). */
.auth-pills { align-items: center; gap: 16px; }
.auth-pills .btn { padding: 14px 26px; font-size: 12.5px; letter-spacing: .22em; }

/* Reflet des cartes Légendaire, Mythique et Ultime (.card.r5::after, .r6::after, .r7::before : le calque posé sur la carte) : il est rogné aux gradins du cadre normal, ce qui se voyait
   sur les cartes à style de thème, dont les angles sont droits ou arrondis (les 15 styles .th-…). Ces cartes-là n'ont plus de gradins : le calque suit le rayon d'angle de CHAQUE style
   (celui de .card-front.th-…, en cqw : 1 em du cadre = 5 cqw). */
.card:has(> .card-in > .card-front.th):is(.r5, .r6)::after, .card:has(> .card-in > .card-front.th).r7::before { clip-path: none; border-radius: var(--th-rd, 2.5cqw); }
.card:has(.th-lettre), .card:has(.th-quotid), .card:has(.th-bd), .card:has(.th-herbier) { --th-rd: 1.5cqw; }
.card:has(.th-postale), .card:has(.th-vinyle), .card:has(.th-ecg) { --th-rd: 2.5cqw; }
.card:has(.th-polaroi) { --th-rd: 4.5cqw; }
.card:has(.th-olympi) { --th-rd: 1.75cqw; }
.card:has(.th-livre) { --th-rd: 2.5cqw 4.5cqw 4.5cqw 2.5cqw; }
.card:has(.th-clap) { --th-rd: 8cqw; }
.card:has(.th-carnet) { --th-rd: 1.5cqw 2.5cqw 2.5cqw 1.5cqw; }
.card:has(.th-hexagon), .card:has(.th-damier) { --th-rd: 2cqw; }
.card:has(.th-atomiq) { --th-rd: 4cqw; }

/* ================= En-tête, bloc de droite : « Filets et ornements » (proposition C retenue, design/propositions-menu-compte.php) =================
   Aucun fond : les pièces (un filet laiton ne se dessine qu'au survol), Amis et la cloche en traits dans un rond qui s'éclaire au survol, le compte en avatar à double anneau, et de petits losanges en séparateurs.
   Réservé à l'en-tête des écrans larges (.top-end) : sur téléphone et tablette tactile, l'en-tête est remplacé par la barre du bas. */
.top-end { gap: 14px; }
.top-end .top-wallet { --s: 0px; clip-path: none; flex-direction: row; align-items: center; gap: 8px; padding: 8px 2px; color: var(--brass-ink); text-transform: none; letter-spacing: 0;
  background: linear-gradient(var(--brass), var(--brass)) bottom left / 0 1px no-repeat; transition: background-size .35s var(--ease), color .3s ease; }
.top-end .top-wallet:hover, .top-end .top-wallet:focus-visible { background: linear-gradient(var(--brass), var(--brass)) bottom left / 100% 1px no-repeat; }
.top-end .top-wallet .wc-piece { width: 20px; height: 20px; }
.top-end .top-wallet b { font-size: 15px; font-weight: 500; letter-spacing: .08em; color: var(--text); }
.top-orn { width: 6px; height: 6px; rotate: 45deg; border: 1px solid var(--brass-line); flex: none; }
.top-end .top-social .theme { rotate: none; width: 34px; height: 34px; border-radius: 50%; box-shadow: inset 0 0 0 1px transparent; transition: color .25s ease, box-shadow .25s ease; }
.top-end .top-social .theme svg { rotate: none; width: 20px; height: 20px; stroke-width: 1.6; }
.top-end .top-social .theme:hover, .top-end .top-social .theme:focus-visible, .top-end .top-social .theme[aria-expanded="true"] { color: var(--text); box-shadow: inset 0 0 0 1px var(--brass-line); }
.top-end .top-social .social-dot { top: 0; right: 0; }
.top-end .acct-pill.avatar-btn { clip-path: none; background: none; padding: 0; display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%;
  box-shadow: 0 0 0 1px var(--brass-line), inset 0 0 0 3px var(--bg); transition: box-shadow .25s ease; }
.top-end .acct-pill.avatar-btn .avatar-ic { width: 32px; height: 32px; border: 0; }
.top-end .acct-pill.avatar-btn:hover, .top-end .acct-pill.avatar-btn:focus-visible, .top-end .acct-pill.avatar-btn[aria-expanded="true"] { background: none; box-shadow: 0 0 0 1px var(--brass), 0 0 0 4px color-mix(in srgb, var(--brass) 22%, transparent), inset 0 0 0 3px var(--bg); }

/* ===== Aide : onglet « Contact » (src/partials/help-panel.php, assets/help.js) : nos réseaux, puis le formulaire d'écriture à l'équipe ===== */
.hc { display: grid; gap: 34px; max-width: 720px; margin: 0 auto; }
.hc-block h3 { margin: 0 0 10px; font-size: 14px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); }
.hc-block > p { margin: 0 0 14px; color: var(--muted); text-wrap: pretty; }
.hc-links { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; margin: 0; padding: 0; list-style: none; }
.hc-link { display: flex; align-items: center; gap: 14px; height: 100%; padding: 14px 16px; border: 1px solid var(--line); border-left: 3px solid var(--brass); background: color-mix(in srgb, var(--text) 4%, var(--surface)); color: var(--text); text-decoration: none; transition: border-color .3s ease, background .3s ease; }
.hc-link:hover, .hc-link:focus-visible { border-color: var(--brass); background: color-mix(in srgb, var(--brass) 10%, var(--surface)); }
.hc-link:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
.hc-ico { flex: none; width: 28px; height: 28px; color: var(--brass-ink); }
.hc-link span { display: grid; gap: 2px; min-width: 0; }
.hc-link b { font-weight: 500; letter-spacing: .06em; }
.hc-link small { color: var(--muted); font-size: 12.5px; line-height: 1.35; }
.hc-form { display: grid; gap: 16px; }
.hc-who { margin: 0; color: var(--muted); }
.hc-who b { color: var(--text); font-weight: 500; }
.hc-field { display: grid; gap: 6px; }
.hc-field label { font-size: 11.5px; font-weight: 500; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.hc-field input, .hc-field textarea { width: 100%; box-sizing: border-box; padding: 11px 13px; border: 1px solid var(--line); background: var(--card); color: var(--text); font: inherit; font-size: 16px; line-height: 1.5; }
.hc-field textarea { min-height: 150px; resize: vertical; }
.hc-field input:focus-visible, .hc-field textarea:focus-visible { outline: none; border-color: var(--brass); }
.hc-count { margin: 0; text-align: right; font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.hc-trap { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.hc-actions { display: flex; }
.hc-msg { margin: 0; min-height: 1.4em; font-size: 14px; color: var(--brass-ink); }
.hc-msg.is-error { color: #d9483f; }
.hc-note { margin: 0; font-size: 12.5px; color: var(--muted); }
@media (max-width: 560px) { .hc-links { grid-template-columns: minmax(0, 1fr); } .hc-actions .btn { width: 100%; justify-content: center; } }

/* ===== Page Paquets, 1.0.4 ===== */
/* Libellé sous une carte tirée (compte connecté) : « Nouvelle », « ×N » ou « Souhait exaucé », visible une fois la carte retournée (assets/pack.js) */
#cards:not(.deck) { row-gap: calc(clamp(14px, 1.8vw, 28px) + 20px); }
#cards .pk-tag { position: absolute; left: 0; right: 0; top: calc(100% + 12px); text-align: center; font-size: 11px; line-height: 1.2; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); opacity: 0; transition: opacity .3s ease; pointer-events: none; }
#cards .card.flipped .pk-tag { opacity: 1; }
#cards .pk-tag.is-new, #cards .pk-tag.is-wish { color: var(--brass-ink); }
#cards .pk-tag.is-wish::before { content: "♥ "; }
#cards.deck > .card:not([data-pos="top"]) .pk-tag { opacity: 0; }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) #cards .pk-tag, :where(:root[data-motion="reduce"]) .cards.deck > .card { transition: none; }
/* Ligne d'état sous le paquet (assets/pack.js, paintStatus) : sous la consigne quand le paquet s'ouvre, à sa place quand il est grisé ; et l'erreur d'une ouverture ratée */
/* Erreur d'ouverture : en rouge, à la place de la consigne « Clique pour ouvrir » (cachée tant qu'elle est là) ; la scène s'allonge d'autant, pour ne jamais chevaucher le bandeau Discord ou l'encart */
.pack-error { position: absolute; top: calc(100% + var(--p3-u) * 34); left: 50%; transform: translateX(-50%); width: max-content; max-width: min(92vw, 560px); margin: 0; text-align: center; font-size: 13.5px; line-height: 1.45; letter-spacing: .03em; color: var(--err-ink); font-weight: 500; text-wrap: balance; z-index: 2; }
.pack-stage:has(.pack-error:not([hidden])) .pack-tip { opacity: 0; }
.pack-stage:has(.pack-error:not([hidden])) { margin-bottom: calc(var(--p3-u) * 34 + 64px); }
/* Losanges des zones : pleins s'il reste des paquets dans la zone, en contour sinon ; la zone affichée, elle, reste pleine et grossie (.is-cur). Zone de toucher de 44 px. */
.pk-dot { width: 44px; height: 44px; }
.pk-dot.has-packs:not(.is-cur) i { background: var(--pk-tint); }
.pk-dot:not(.has-packs):not(.is-cur) i { background: transparent; }   /* P8 « Plein / contour » : une zone vide n’a que le contour de son losange, dans sa couleur */
@media (max-width: 400px) { .pack-carousel { --pk-nav: 40px; } }
.pack3d:focus-visible { outline-width: 2px; }
/* Thèmes de la zone thématique, sur téléphone : en stock d'abord, épuisés repliés derrière « Voir les N thèmes épuisés », médaillons plus bas (nombre et nom côte à côte) */
.th-more { display: none; }
@media (max-width: 760px) {
  .th-list > li.th-empty { order: 1; }
  .th-list:not(.show-empty) > li.th-empty:not(.th-sel) { display: none; }
  .th-more:not([hidden]) { display: inline-flex; margin: 10px auto 0; }
  .th-item { height: 72px; grid-template-rows: none; grid-template-columns: auto minmax(0, 1fr); column-gap: 12px; justify-items: start; padding: 0 16px; }
  .th-item .th-n { align-self: center; font-size: 24px; }
  .th-item .th-name, .th-item.is-long .th-name, .th-item.is-xlong .th-name { align-self: center; justify-content: flex-start; text-align: left; height: auto; max-height: 3.9em; font-size: 10.5px; letter-spacing: .06em; }
}
/* « Mes derniers paquets » (fenêtre de la page Paquets, assets/pack.js) : un paquet par bloc, ses cartes en petit, avec leur libellé (Nouvelle, ×N, Souhait exaucé) */
.rp-box h2 { text-align: center; padding: 0 36px; margin-bottom: 4px; }
.rp-body { display: grid; gap: 0; }
.rp-body > .sm-note, .rp-body > .sm-msg { text-align: center; margin: 18px 0 6px; }
.rp-pack { display: grid; justify-items: center; padding: 26px 0 30px; border-top: 1px solid var(--line); }
.rp-pack:first-child { border-top: 0; padding-top: 14px; }
.rp-head { display: grid; justify-items: center; gap: 6px; width: 100%; margin: 0 0 22px; font-size: 14px; font-weight: 400; text-align: center; }
.rp-head b { display: flex; align-items: center; justify-content: center; gap: 14px; width: 100%; font-family: var(--font-title); font-size: 13px; font-weight: 400; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); }
.rp-head b::before, .rp-head b::after { content: ""; flex: 0 1 70px; height: 1px; background: var(--brass-line); }
.rp-head span { font-size: 12.5px; letter-spacing: .04em; color: var(--muted); }
.rp-head span::first-letter { text-transform: uppercase; }
.rp-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(112px, 132px)); justify-content: center; gap: 40px 18px; width: 100%; margin: 0; padding: 0 0 6px; }
.rp-cards .pk-tag { position: absolute; left: 0; right: 0; top: calc(100% + 10px); text-align: center; font-size: 10.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); }
.rp-cards .pk-tag.is-new, .rp-cards .pk-tag.is-wish { color: var(--brass-ink); }
.rp-cards .pk-tag.is-wish::before { content: "♥ "; }
.rp-sum { margin: 30px 0 0; max-width: 60ch; font-size: 13px; line-height: 1.5; text-align: center; color: var(--muted); }
@media (max-width: 560px) { .rp-cards { grid-template-columns: repeat(2, minmax(0, 150px)); gap: 36px 14px; } .rp-head b::before, .rp-head b::after { flex-basis: 28px; } }
/* Pastille « paquets prêts » sur l'entrée Paquets du menu (src/partials/header.php ; réglable dans Paramètres) : un petit losange laiton qui porte le nombre (9+ au-delà) */
.nav-link, .menu-link { position: relative; }

/* Récompense du jour (1.0.4) : bandeau Art déco en haut de la page Paquets (streak.js le remplit puis l'efface après la récupération ; il s'efface aussi, en fondu, pendant l'ouverture
   d'un paquet), compte à rebours sous la frise, halo du jour en cours. Bandeau : deux filets laiton, un médaillon en losange, l'intitulé en capitales espacées. */
.streak-banner { position: relative; display: flex; align-items: center; justify-content: center; gap: 14px 22px; flex-wrap: wrap; box-sizing: border-box; width: min(100% - 32px, 720px); max-height: 260px; margin: 4px auto 22px; padding: 14px 22px; border-block: 1px solid var(--brass-line); background: linear-gradient(90deg, transparent, color-mix(in srgb, var(--brass) 7%, transparent) 20%, color-mix(in srgb, var(--brass) 7%, transparent) 80%, transparent); transition: opacity .45s ease .2s, max-height .4s ease, padding .4s ease, margin .4s ease, border-width .4s ease, visibility 0s linear 0s; }
.streak-banner .sb-ic { flex: none; display: grid; place-items: center; width: 34px; height: 34px; border: 1px solid var(--brass-line); rotate: 45deg; }
.streak-banner .sb-ic svg { width: 18px; height: 18px; rotate: -45deg; fill: none; stroke: var(--brass-ink); stroke-width: 1.5; stroke-linejoin: round; stroke-linecap: round; }
.streak-banner .sb-txt { display: grid; gap: 3px; margin: 0; text-align: left; outline: none; }
.streak-banner .sb-kicker { font-size: 11px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); }
.streak-banner .sb-gain { font-family: var(--font); font-size: 16px; font-weight: 500; letter-spacing: .03em; line-height: 1.35; color: var(--text); }
.streak-banner .sb-gain .wc-piece, .op-streak-claimed .wc-piece { width: 1em; height: 1em; vertical-align: -.15em; }
.streak-banner.is-done .sb-ic { border-color: var(--brass); }
.opener:not([data-phase="home"]) .streak-banner { opacity: 0; visibility: hidden; pointer-events: none; transition: opacity .25s ease, visibility 0s linear .25s; }   /* pendant l'ouverture, il s'efface en gardant sa place (rien ne bouge sous le paquet) */
.opener[data-phase="reveal"] .opener-stage > .pack { margin-top: calc(-1 * var(--sb-h, 0px)); }   /* les cartes remontent dans la place du bandeau effacé (pack.js, setPhase) */
.fr-next-in { font-size: 12px; letter-spacing: .04em; }
.fr-next-in .fr-clock { color: var(--text); font-variant-numeric: tabular-nums; }
.fr-nd.is-cur.is-done .rs-halo { opacity: .45; }
.fr-nd.is-cur .rs-nd { filter: drop-shadow(0 0 6px color-mix(in srgb, var(--brass) 55%, transparent)); }
@media (max-width: 560px) {
  .streak-banner { flex-direction: column; gap: 10px; padding: 16px 14px 14px; text-align: center; }
  .streak-banner .sb-ic { display: none; }
  .streak-banner .sb-txt { text-align: center; }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .streak-banner, :where(:root[data-motion="reduce"]) .opener:not([data-phase="home"]) .streak-banner { transition: none; }
/* Réserve : phrase des garanties de la zone, suivie du lien « Voir les chances » sur la même ligne */
.hint-line { margin: 0; max-width: 70ch; text-align: center; font-size: 14px; line-height: 1.5; text-wrap: balance; }
.hint-line .hint-odds { padding: 0 2px; margin-left: 4px; font-size: 14px; white-space: nowrap; }
/* Pied de la Réserve : « Mes 10 derniers paquets » à gauche, « Comment ça marche ? » à droite */
.op-encart .op-foot:has(#recent-open) { justify-content: space-between; flex-wrap: nowrap; }   /* une seule ligne, même sur téléphone : chaque lien passe à la ligne dans sa moitié s'il le faut */
.op-foot #recent-open { margin-left: 0; margin-right: auto; text-align: left; }
.op-foot #recent-open + .link-btn { margin-left: 12px; text-align: right; }
/* Élément atteint par un lien ou un script (focus programmé, tabindex="-1") : pas de contour de focus */
[tabindex="-1"]:focus { outline: none; }
/* Ouverture rapide (data-fast) : la lueur et l'ombre s'effacent en même temps que le sachet, qui s'efface plus tôt et plus vite (pack3d.js, tear(quick)) */
.opener[data-fast="1"] .pack-stage[data-state="opened"] .p3-glow,
.opener[data-fast="1"] .pack-stage[data-state="opened"] .p3-shadow { animation: p3-fade .38s ease-in .12s forwards; }
.opener[data-fast="1"] .pack-stage[data-state="gone"] .p3-glow,
.opener[data-fast="1"] .pack-stage[data-state="gone"] .p3-shadow { transition: none; }
/* Atelier, liste complète des recettes, sur téléphone : joyaux et nom en tête, la description sur toute la largeur, puis le coût et la réserve sur une ligne, et le bouton en dessous */
@media (max-width: 640px) {
  .atl-row { grid-template-columns: 52px minmax(0, 1fr) auto; grid-template-areas: "sig main main" "cost cost own" "btn btn btn" "msg msg msg"; align-items: center; gap: 12px 12px; padding: 18px 18px 16px; }
  .atl-row .atl-sig { grid-area: sig; align-self: start; padding-top: 2px; }
  .atl-row .atl-sig .gem { width: 30px; height: 30px; }
  .atl-row .atl-row-main { grid-area: main; }
  .atl-row .atl-r-cost { grid-area: cost; justify-content: flex-start; }
  .atl-row .atl-row-own { grid-area: own; grid-auto-flow: column; align-items: center; gap: 8px; justify-items: end; }
  .atl-row .atl-craft-btn { grid-area: btn; justify-self: stretch; }
  .atl-row .atl-r-msg { grid-area: msg; text-align: center; }
  .atl-row .atl-r-msg:empty { display: none; }
}
/* Livre d'or dans une fenêtre (vitrine de succès du profil) : le titre de chapitre garde son dessin et reste centré (sans la marge à droite des titres de fenêtre, réservée à la croix) */
.sm-box .bk-h { margin: 1.6cqw 0 0; padding: 0; font: 400 max(24px, 6.6cqw)/1.05 var(--font-title); }
.sm-box .bk-cover-page .bk-h { font-size: max(34px, 10cqw); }
/* Croix des fenêtres : la croix flottante, dans l'angle supérieur droit de la fenêtre et collée en haut de l'écran quand on la fait défiler, remplace celle de la fenêtre (site.js : top et right) */
.modal .modal-close:not(.modal-close-float) { position: absolute; width: 1px; height: 1px; min-width: 0; min-height: 0; padding: 0; margin: 0; overflow: hidden; clip-path: inset(50%); border: 0; opacity: 0; }   /* masquée à l'œil mais focalisable : le clavier l'atteint, la croix flottante (site.js) montre son focus */
.modal-close.modal-close-float.is-focus { outline: 2px solid var(--brass); outline-offset: 3px; }
.modal-close.modal-close-float { position: fixed; z-index: 1000; top: 12px; right: 12px; width: 44px; height: 44px; background: var(--surface); border-color: var(--brass-line); color: var(--text); box-shadow: 0 6px 18px rgba(0, 0, 0, .45); animation: wc-fade-in .25s ease; }
.modal-close.modal-close-float svg { width: 18px; height: 18px; }
.modal-close.modal-close-float[hidden] { display: none; }
/* Textes « Clique… » (ordinateur) / « Touche… » (téléphone) : le bon selon l'écran */
.cp-tx .on-touch { display: none; }
@media (max-width: 760px) { .cp-tx .on-touch { display: inline; } .cp-tx .on-mouse { display: none; } }
/* Menu du bas (téléphone) : un appui ne sélectionne pas le texte et ne montre pas le carré bleu du navigateur */
.bottom-nav, .bottom-nav * { -webkit-user-select: none; user-select: none; -webkit-tap-highlight-color: transparent; -webkit-touch-callout: none; }
/* Menu du bas : trois colonnes fixes (logo, icônes, bouton Compte), la dernière réservée d'avance. Pendant le chargement d'une page, le navigateur affiche parfois le menu
   avant d'avoir lu le bouton Compte : les icônes s'étalaient alors sur toute la largeur, puis se resserraient d'un coup à son arrivée. */
@media (max-width: 760px), (hover: none) and (pointer: coarse) and (max-width: 1100px) {
  .bottom-nav { display: grid; grid-template-columns: auto minmax(0, 1fr) minmax(40px, auto); }
  .bottom-nav > .bn-brand { grid-column: 1; }
  .bottom-nav > .bn-links { grid-column: 2; }
  .bottom-nav > .acct-menu { grid-column: 3; justify-self: end; }
}
/* Succès secret obtenu : la légende le dit (« Succès secret »), au-dessus de son nom */
.bk-cap-sec { margin: 0 0 4px; font-size: 11px; font-weight: 600; letter-spacing: .2em; text-transform: uppercase; color: var(--sc, var(--brass-ink)); }
/* Menu du bas : le bouton Compte prend le dessin de celui de l'ordinateur (avatar rond dans un anneau laiton), au lieu de la pastille à gradins */
.bottom-nav .acct-pill.avatar-btn { clip-path: none; background: none; padding: 0; display: grid; place-items: center; width: 40px; height: 40px; border-radius: 50%;
  box-shadow: 0 0 0 1px var(--brass-line), inset 0 0 0 3px var(--top-bg, var(--bg)); transition: box-shadow .25s ease; }
.bottom-nav .acct-pill.avatar-btn .avatar-ic { width: 32px; height: 32px; border: 0; }
.bottom-nav .acct-pill.avatar-btn:hover, .bottom-nav .acct-pill.avatar-btn:focus-visible, .bottom-nav .acct-pill.avatar-btn[aria-expanded="true"] { background: none; box-shadow: 0 0 0 1px var(--brass), 0 0 0 4px color-mix(in srgb, var(--brass) 22%, transparent), inset 0 0 0 3px var(--top-bg, var(--bg)); }
/* Paquet 3D : sa scène garde le même contexte d'empilement du début à la fin de l'ouverture (la sortie des cartes ne fait que changer son ordre, data-emerge),
   et son cadre reste sur sa propre couche (la secousse et le glissement d'entrée y sont animés) : aucun changement de couche pendant l'ouverture, qui faisait
   parfois disparaître le paquet un instant dans Chrome et Opera. */
#pack-stage { isolation: isolate; }
#pack-stage .pack3d-wrap { will-change: translate, rotate, scale; }
/* Badge de nouveauté « étincelle » : Paquets et Succès (menus), cloche, timbres et signets du livre des succès. Étoile dorée à quatre branches qui
   scintille en tournant un peu ; l'étoile est découpée sur ::before, la lueur (filter) reste sur l'élément pour ne pas être coupée avec elle. */
.nav-new, .social-dot, .st-new, .bk-new { rotate: none; border: 0; border-radius: 0; background: none; box-shadow: none; box-sizing: border-box; filter: drop-shadow(0 0 3px #e8b94f); animation: wc-twinkle 2.6s ease-in-out infinite; }
.nav-new::before, .social-dot::before, .st-new::before, .bk-new::before { content: ""; position: absolute; inset: 0; background: linear-gradient(135deg, #fff1c2, #e8b94f); clip-path: polygon(50% 0, 62% 38%, 100% 50%, 62% 62%, 50% 100%, 38% 62%, 0 50%, 38% 38%); }
@keyframes wc-twinkle { 0%, 100% { rotate: 0deg; scale: .85; } 50% { rotate: 45deg; scale: 1.1; } }
.nav-new { width: 13px; height: 13px; margin-top: -3px; }
.menu-link .nav-new { margin-top: 0; animation: none; }
.social-dot { width: 13px; height: 13px; }
[data-social="bell"]:not([data-unseen="0"]) > .social-dot { animation: wc-twinkle 2.6s ease-in-out infinite; }
.top-end .top-social .social-dot, .notif-float .social-dot { top: -2px; right: -2px; }
.st-new { left: -13cqw; top: -13cqw; width: 34cqw; filter: drop-shadow(0 0 .6cqw rgba(0, 0, 0, .55)) drop-shadow(0 0 2.5cqw #e8b94f); }
.st-new::after { display: none; }
.bk-new { right: -6px; top: 0; width: 16px; height: 16px; filter: drop-shadow(0 0 1px var(--sc)) drop-shadow(0 0 3px #e8b94f); }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .nav-new, :where(:root[data-motion="reduce"]) .social-dot, :where(:root[data-motion="reduce"]) .st-new, :where(:root[data-motion="reduce"]) .bk-new, :where(:root[data-motion="reduce"]) [data-social="bell"] > .social-dot { animation: none !important; }


/* ==========================================================================================================================================================================
   ÉVÈNEMENT HALLOWEEN (1.1.0, propositions : design/halloween/) : paquet « Lanterne braise » et sa zone du carrousel, styles de carte « Toile » et « Série B »,
   habillage du site « Manoir aux lanternes ». Les dessins sont des SVG en URI de données (--hw-*) ; l'habillage ne s'affiche qu'avec :root[data-event="halloween"] (assets/boot.js,
   d'après la balise <meta name="wc-event"> de src/partials/head.php pendant les dates de src/Events.php, sauf si le joueur l'a coupé dans Paramètres).
   ========================================================================================================================================================================== */
@font-face { font-family: "Creepster"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/creepster-400-normal.woff2") format("woff2"); }
@font-face { font-family: "IM Fell English"; font-style: normal; font-weight: 400; font-display: swap; src: url("fonts/im-fell-english-400-normal.woff2") format("woff2"); }
@font-face { font-family: "IM Fell English"; font-style: italic; font-weight: 400; font-display: swap; src: url("fonts/im-fell-english-400-italic.woff2") format("woff2"); }
:root {
  --hw-web-tl: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27%3E%3Cpath d=%27M0 0L100.0 0.0M0 0L96.6 25.9M0 0L86.6 50.0M0 0L70.7 70.7M0 0L50.0 86.6M0 0L25.9 96.6M0 0L0.0 100.0M15.6 0.0Q13.0 1.7 15.1 4.0M15.1 4.0Q12.1 5.0 13.5 7.8M13.5 7.8Q10.4 8.0 11.0 11.0M11.0 11.0Q8.0 10.4 7.8 13.5M7.8 13.5Q5.0 12.1 4.0 15.1M4.0 15.1Q1.7 13.0 0.0 15.6M31.2 0.0Q26.0 3.4 30.2 8.1M30.2 8.1Q24.3 10.0 27.1 15.6M27.1 15.6Q20.8 16.0 22.1 22.1M22.1 22.1Q16.0 20.8 15.6 27.1M15.6 27.1Q10.0 24.3 8.1 30.2M8.1 30.2Q3.4 26.0 0.0 31.2M46.9 0.0Q39.0 5.1 45.3 12.1M45.3 12.1Q36.4 15.1 40.6 23.4M40.6 23.4Q31.2 24.0 33.1 33.1M33.1 33.1Q24.0 31.2 23.4 40.6M23.4 40.6Q15.1 36.4 12.1 45.3M12.1 45.3Q5.1 39.0 0.0 46.9M62.5 0.0Q52.1 6.9 60.4 16.2M60.4 16.2Q48.5 20.1 54.1 31.2M54.1 31.2Q41.7 32.0 44.2 44.2M44.2 44.2Q32.0 41.7 31.3 54.1M31.3 54.1Q20.1 48.5 16.2 60.4M16.2 60.4Q6.9 52.1 0.0 62.5M78.1 0.0Q65.1 8.6 75.5 20.2M75.5 20.2Q60.6 25.1 67.7 39.1M67.7 39.1Q52.1 39.9 55.2 55.2M55.2 55.2Q39.9 52.1 39.1 67.7M39.1 67.7Q25.1 60.6 20.2 75.5M20.2 75.5Q8.6 65.1 0.0 78.1M93.8 0.0Q78.1 10.3 90.6 24.3M90.6 24.3Q72.8 30.1 81.2 46.9M81.2 46.9Q62.5 47.9 66.3 66.3M66.3 66.3Q47.9 62.5 46.9 81.2M46.9 81.2Q30.1 72.8 24.3 90.6M24.3 90.6Q10.3 78.1 0.0 93.8%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%27.9%27/%3E%3C/svg%3E");
  --hw-web-tr: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27%3E%3Cg transform=%27translate%28100 0%29 scale%28-1 1%29%27%3E%3Cpath d=%27M0 0L100.0 0.0M0 0L96.6 25.9M0 0L86.6 50.0M0 0L70.7 70.7M0 0L50.0 86.6M0 0L25.9 96.6M0 0L0.0 100.0M15.6 0.0Q13.0 1.7 15.1 4.0M15.1 4.0Q12.1 5.0 13.5 7.8M13.5 7.8Q10.4 8.0 11.0 11.0M11.0 11.0Q8.0 10.4 7.8 13.5M7.8 13.5Q5.0 12.1 4.0 15.1M4.0 15.1Q1.7 13.0 0.0 15.6M31.2 0.0Q26.0 3.4 30.2 8.1M30.2 8.1Q24.3 10.0 27.1 15.6M27.1 15.6Q20.8 16.0 22.1 22.1M22.1 22.1Q16.0 20.8 15.6 27.1M15.6 27.1Q10.0 24.3 8.1 30.2M8.1 30.2Q3.4 26.0 0.0 31.2M46.9 0.0Q39.0 5.1 45.3 12.1M45.3 12.1Q36.4 15.1 40.6 23.4M40.6 23.4Q31.2 24.0 33.1 33.1M33.1 33.1Q24.0 31.2 23.4 40.6M23.4 40.6Q15.1 36.4 12.1 45.3M12.1 45.3Q5.1 39.0 0.0 46.9M62.5 0.0Q52.1 6.9 60.4 16.2M60.4 16.2Q48.5 20.1 54.1 31.2M54.1 31.2Q41.7 32.0 44.2 44.2M44.2 44.2Q32.0 41.7 31.3 54.1M31.3 54.1Q20.1 48.5 16.2 60.4M16.2 60.4Q6.9 52.1 0.0 62.5M78.1 0.0Q65.1 8.6 75.5 20.2M75.5 20.2Q60.6 25.1 67.7 39.1M67.7 39.1Q52.1 39.9 55.2 55.2M55.2 55.2Q39.9 52.1 39.1 67.7M39.1 67.7Q25.1 60.6 20.2 75.5M20.2 75.5Q8.6 65.1 0.0 78.1M93.8 0.0Q78.1 10.3 90.6 24.3M90.6 24.3Q72.8 30.1 81.2 46.9M81.2 46.9Q62.5 47.9 66.3 66.3M66.3 66.3Q47.9 62.5 46.9 81.2M46.9 81.2Q30.1 72.8 24.3 90.6M24.3 90.6Q10.3 78.1 0.0 93.8%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%27.9%27/%3E%3C/g%3E%3C/svg%3E");
  --hw-web-bl: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27%3E%3Cg transform=%27translate%280 100%29 scale%281 -1%29%27%3E%3Cpath d=%27M0 0L100.0 0.0M0 0L96.6 25.9M0 0L86.6 50.0M0 0L70.7 70.7M0 0L50.0 86.6M0 0L25.9 96.6M0 0L0.0 100.0M15.6 0.0Q13.0 1.7 15.1 4.0M15.1 4.0Q12.1 5.0 13.5 7.8M13.5 7.8Q10.4 8.0 11.0 11.0M11.0 11.0Q8.0 10.4 7.8 13.5M7.8 13.5Q5.0 12.1 4.0 15.1M4.0 15.1Q1.7 13.0 0.0 15.6M31.2 0.0Q26.0 3.4 30.2 8.1M30.2 8.1Q24.3 10.0 27.1 15.6M27.1 15.6Q20.8 16.0 22.1 22.1M22.1 22.1Q16.0 20.8 15.6 27.1M15.6 27.1Q10.0 24.3 8.1 30.2M8.1 30.2Q3.4 26.0 0.0 31.2M46.9 0.0Q39.0 5.1 45.3 12.1M45.3 12.1Q36.4 15.1 40.6 23.4M40.6 23.4Q31.2 24.0 33.1 33.1M33.1 33.1Q24.0 31.2 23.4 40.6M23.4 40.6Q15.1 36.4 12.1 45.3M12.1 45.3Q5.1 39.0 0.0 46.9M62.5 0.0Q52.1 6.9 60.4 16.2M60.4 16.2Q48.5 20.1 54.1 31.2M54.1 31.2Q41.7 32.0 44.2 44.2M44.2 44.2Q32.0 41.7 31.3 54.1M31.3 54.1Q20.1 48.5 16.2 60.4M16.2 60.4Q6.9 52.1 0.0 62.5M78.1 0.0Q65.1 8.6 75.5 20.2M75.5 20.2Q60.6 25.1 67.7 39.1M67.7 39.1Q52.1 39.9 55.2 55.2M55.2 55.2Q39.9 52.1 39.1 67.7M39.1 67.7Q25.1 60.6 20.2 75.5M20.2 75.5Q8.6 65.1 0.0 78.1M93.8 0.0Q78.1 10.3 90.6 24.3M90.6 24.3Q72.8 30.1 81.2 46.9M81.2 46.9Q62.5 47.9 66.3 66.3M66.3 66.3Q47.9 62.5 46.9 81.2M46.9 81.2Q30.1 72.8 24.3 90.6M24.3 90.6Q10.3 78.1 0.0 93.8%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%27.9%27/%3E%3C/g%3E%3C/svg%3E");
  --hw-web-br: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 100%27%3E%3Cg transform=%27translate%28100 100%29 scale%28-1 -1%29%27%3E%3Cpath d=%27M0 0L100.0 0.0M0 0L96.6 25.9M0 0L86.6 50.0M0 0L70.7 70.7M0 0L50.0 86.6M0 0L25.9 96.6M0 0L0.0 100.0M15.6 0.0Q13.0 1.7 15.1 4.0M15.1 4.0Q12.1 5.0 13.5 7.8M13.5 7.8Q10.4 8.0 11.0 11.0M11.0 11.0Q8.0 10.4 7.8 13.5M7.8 13.5Q5.0 12.1 4.0 15.1M4.0 15.1Q1.7 13.0 0.0 15.6M31.2 0.0Q26.0 3.4 30.2 8.1M30.2 8.1Q24.3 10.0 27.1 15.6M27.1 15.6Q20.8 16.0 22.1 22.1M22.1 22.1Q16.0 20.8 15.6 27.1M15.6 27.1Q10.0 24.3 8.1 30.2M8.1 30.2Q3.4 26.0 0.0 31.2M46.9 0.0Q39.0 5.1 45.3 12.1M45.3 12.1Q36.4 15.1 40.6 23.4M40.6 23.4Q31.2 24.0 33.1 33.1M33.1 33.1Q24.0 31.2 23.4 40.6M23.4 40.6Q15.1 36.4 12.1 45.3M12.1 45.3Q5.1 39.0 0.0 46.9M62.5 0.0Q52.1 6.9 60.4 16.2M60.4 16.2Q48.5 20.1 54.1 31.2M54.1 31.2Q41.7 32.0 44.2 44.2M44.2 44.2Q32.0 41.7 31.3 54.1M31.3 54.1Q20.1 48.5 16.2 60.4M16.2 60.4Q6.9 52.1 0.0 62.5M78.1 0.0Q65.1 8.6 75.5 20.2M75.5 20.2Q60.6 25.1 67.7 39.1M67.7 39.1Q52.1 39.9 55.2 55.2M55.2 55.2Q39.9 52.1 39.1 67.7M39.1 67.7Q25.1 60.6 20.2 75.5M20.2 75.5Q8.6 65.1 0.0 78.1M93.8 0.0Q78.1 10.3 90.6 24.3M90.6 24.3Q72.8 30.1 81.2 46.9M81.2 46.9Q62.5 47.9 66.3 66.3M66.3 66.3Q47.9 62.5 46.9 81.2M46.9 81.2Q30.1 72.8 24.3 90.6M24.3 90.6Q10.3 78.1 0.0 93.8%27 fill=%27none%27 stroke=%27%23fff%27 stroke-width=%27.9%27/%3E%3C/g%3E%3C/svg%3E");
  --hw-spider: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 24 26%27%3E%3Cg fill=%27none%27 stroke=%27%230a0a0a%27 stroke-width=%271.5%27 stroke-linecap=%27round%27%3E%3Cpath d=%27M10 10L6 7 4.5 3.5M14 10l4-3 1.5-3.5M9.6 12.5L4.6 12 2 9.6M14.4 12.5l5-.5 2.6-2.4M9.2 15.5L4.6 17.4 3 21M14.8 15.5l4.6 1.9L21 21M10 19l-2.6 3.6M14 19l2.6 3.6%27/%3E%3C/g%3E%3Cellipse cx=%2712%27 cy=%2710%27 rx=%272.5%27 ry=%272.7%27 fill=%27%230a0a0a%27 stroke=%27%23555%27 stroke-width=%27.4%27/%3E%3Cellipse cx=%2712%27 cy=%2716%27 rx=%273.5%27 ry=%274.2%27 fill=%27%230a0a0a%27 stroke=%27%23555%27 stroke-width=%27.4%27/%3E%3Ccircle cx=%2711%27 cy=%279.4%27 r=%27.65%27 fill=%27%23ff3b30%27/%3E%3Ccircle cx=%2713%27 cy=%279.4%27 r=%27.65%27 fill=%27%23ff3b30%27/%3E%3C/svg%3E");
  --hw-candles: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Cg fill='%23ffb347'%3E%3Cpath d='M16 1c2.4 3 2.8 5.4 0 7.6-2.8-2.2-2.4-4.6 0-7.6Z'/%3E%3Cpath d='M7 7c2 2.6 2.4 4.6 0 6.4-2.4-1.8-2-3.8 0-6.4Z'/%3E%3Cpath d='M25 9c2 2.6 2.4 4.6 0 6.4-2.4-1.8-2-3.8 0-6.4Z'/%3E%3C/g%3E%3Cg fill='%23f1e4c4'%3E%3Cpath d='M12.6 10h6.8v21h-6.8z'/%3E%3Cpath d='M4 15h6v16H4z'/%3E%3Cpath d='M22 17h6v14h-6z'/%3E%3C/g%3E%3Cpath d='M12.6 10h6.8v2.4c0 1-1.2 1-1.2 2.4v1.4c0 .8-1.2.8-1.2 0V14c0-.8-1.4-.8-1.4.4v.4c0 .7-1 .7-1 0v-2.4c0-1-1-1-2-2.4z' fill='%23fffaf0'/%3E%3Cpath d='M2 30.5h28' stroke='%23c9a45c' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
  --hw-pumpkin: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 40 36%27%3E%3Cpath d=%27M20 7c-3-2-9-2-13 2-5 5-5 15 0 21 4 4 9 4 13 3 4 1 9 1 13-3 5-6 5-16 0-21-4-4-10-4-13-2Z%27 fill=%27%23e8701e%27/%3E%3Cpath d=%27M20 7c-3 3-4 9-4 15s1 9 4 11c3-2 4-5 4-11s-1-12-4-15ZM8 10c-3 4-3 14 1 19 2 2 4 3 6 3-3-3-4-8-4-13s1-8 3-10c-2 0-4 0-6 1ZM32 10c3 4 3 14-1 19-2 2-4 3-6 3 3-3 4-8 4-13s-1-8-3-10c2 0 4 0 6 1Z%27 fill=%27%23b84d0c%27 opacity=%27.55%27/%3E%3Cpath d=%27M19 7c0-3 1-5 3-6l1.4.8c-1.6 1.2-2 3-2 5.2Z%27 fill=%27%234e5a1f%27/%3E%3Cpath d=%27M11 16l3-4.2 3 4.2ZM23 16l3-4.2 3 4.2ZM10 21.5c3 5 17 5 20 0l-3 1-2 2-2-2-3 2-3-2-2 2-2-2Z%27 fill=%27%23ffd25a%27/%3E%3C/svg%3E");
  --hw-pumpkin-pile: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 100 56%27%3E%3Cg transform=%27translate%280 20%29 scale%28.9%29%27%3E%3Cpath d=%27M20 7c-3-2-9-2-13 2-5 5-5 15 0 21 4 4 9 4 13 3 4 1 9 1 13-3 5-6 5-16 0-21-4-4-10-4-13-2Z%27 fill=%27%23e8701e%27/%3E%3Cpath d=%27M20 7c-3 3-4 9-4 15s1 9 4 11c3-2 4-5 4-11s-1-12-4-15ZM8 10c-3 4-3 14 1 19 2 2 4 3 6 3-3-3-4-8-4-13s1-8 3-10c-2 0-4 0-6 1ZM32 10c3 4 3 14-1 19-2 2-4 3-6 3 3-3 4-8 4-13s-1-8-3-10c2 0 4 0 6 1Z%27 fill=%27%23b84d0c%27 opacity=%27.55%27/%3E%3Cpath d=%27M19 7c0-3 1-5 3-6l1.4.8c-1.6 1.2-2 3-2 5.2Z%27 fill=%27%234e5a1f%27/%3E%3Cpath d=%27M11 16l3-4.2 3 4.2ZM23 16l3-4.2 3 4.2ZM10 21.5c3 5 17 5 20 0l-3 1-2 2-2-2-3 2-3-2-2 2-2-2Z%27 fill=%27%23ffd25a%27/%3E%3C/g%3E%3Cg transform=%27translate%2836 26%29 scale%28.65%29%27%3E%3Cpath d=%27M20 7c-3-2-9-2-13 2-5 5-5 15 0 21 4 4 9 4 13 3 4 1 9 1 13-3 5-6 5-16 0-21-4-4-10-4-13-2Z%27 fill=%27%23e8701e%27/%3E%3Cpath d=%27M20 7c-3 3-4 9-4 15s1 9 4 11c3-2 4-5 4-11s-1-12-4-15ZM8 10c-3 4-3 14 1 19 2 2 4 3 6 3-3-3-4-8-4-13s1-8 3-10c-2 0-4 0-6 1ZM32 10c3 4 3 14-1 19-2 2-4 3-6 3 3-3 4-8 4-13s-1-8-3-10c2 0 4 0 6 1Z%27 fill=%27%23b84d0c%27 opacity=%27.55%27/%3E%3Cpath d=%27M19 7c0-3 1-5 3-6l1.4.8c-1.6 1.2-2 3-2 5.2Z%27 fill=%27%234e5a1f%27/%3E%3Cpath d=%27M11 16l3-4.2 3 4.2ZM23 16l3-4.2 3 4.2ZM10 21.5c3 5 17 5 20 0l-3 1-2 2-2-2-3 2-3-2-2 2-2-2Z%27 fill=%27%23ffd25a%27/%3E%3C/g%3E%3Cg transform=%27translate%2862 16%29%27%3E%3Cpath d=%27M20 7c-3-2-9-2-13 2-5 5-5 15 0 21 4 4 9 4 13 3 4 1 9 1 13-3 5-6 5-16 0-21-4-4-10-4-13-2Z%27 fill=%27%23e8701e%27/%3E%3Cpath d=%27M20 7c-3 3-4 9-4 15s1 9 4 11c3-2 4-5 4-11s-1-12-4-15ZM8 10c-3 4-3 14 1 19 2 2 4 3 6 3-3-3-4-8-4-13s1-8 3-10c-2 0-4 0-6 1ZM32 10c3 4 3 14-1 19-2 2-4 3-6 3 3-3 4-8 4-13s-1-8-3-10c2 0 4 0 6 1Z%27 fill=%27%23b84d0c%27 opacity=%27.55%27/%3E%3Cpath d=%27M19 7c0-3 1-5 3-6l1.4.8c-1.6 1.2-2 3-2 5.2Z%27 fill=%27%234e5a1f%27/%3E%3Cpath d=%27M11 16l3-4.2 3 4.2ZM23 16l3-4.2 3 4.2ZM10 21.5c3 5 17 5 20 0l-3 1-2 2-2-2-3 2-3-2-2 2-2-2Z%27 fill=%27%23ffd25a%27/%3E%3C/g%3E%3C/svg%3E");
  --hw-bat: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%27-13 -6 26 10%27%3E%3Cpath d=%27M0 -1.6C-.8 -3.4-2.2-3.6-3-2.2C-5-4.6-9-5-12-3.4C-10-2.4-9.4-1-9.6.8C-8-.4-6-.2-5 1.2C-4 0-2.2.2-1.4 2L0 3.2L1.4 2C2.2.2 4 0 5 1.2C6-.2 8-.4 9.6.8C9.4-1 10-2.4 12-3.4C9-5 5-4.6 3-2.2C2.2-3.6.8-3.4 0-1.6Z%27 fill=%27%23000%27/%3E%3C/svg%3E");
  --hw-crow: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 40 36%27%3E%3Cpath d=%27M4 25c5-1 9-4 11-8 1.5-3.5 4-7 8.5-7.6 2.6-.3 4.6.8 5.8 2.8l5.4 1-4.6 2.2c0 3.4-1.4 6.6-3.6 8.6l2 6h-1.2l-2.6-5.2-3 1 1 4.2h-1.2L19.6 30C13.8 30.8 8.6 28.8 4 25Z%27 fill=%27%23000%27/%3E%3C/svg%3E");
  --hw-fence: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 12 56%27%3E%3Crect x=%275%27 y=%276%27 width=%272.2%27 height=%2750%27/%3E%3Cpath d=%27M3.4 8l2.7-7 2.7 7Z%27/%3E%3Crect x=%270%27 y=%2714%27 width=%2712%27 height=%273%27/%3E%3Crect x=%270%27 y=%2746%27 width=%2712%27 height=%273%27/%3E%3C/svg%3E");
  --hw-graves: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 400 110%27%3E%3Cpath d=%27M40 110V61a15 15 0 0 1 30 0v49ZM110 110V72a12 12 0 0 1 24 0v38ZM300 110V58a18 18 0 0 1 36 0v52ZM360 110V68a12 12 0 0 1 24 0v42Z%27/%3E%3Cpath d=%27M220 110V58c-6-8-14-12-24-14l1-3c9 1 17 5 23 11V28c-5-6-6-12-4-18l3 1c-2 6-1 11 3 16 3-8 9-13 17-15l1 3c-8 3-13 8-15 16v26c6-8 14-12 24-12v3c-10 1-17 5-22 13v53Z%27/%3E%3C/svg%3E");
}

/* ---------- Zone « Paquets Halloween » du carrousel : losange orange, lueur de braise qui vacille, étincelles qui montent ---------- */
.pk-dot[data-zone="halloween"] i { --pk-tint: #f07a1f; }
:root[data-theme="light"] .pk-dot[data-zone="halloween"] i { --pk-tint: #d9620c; }
.pack-stage[data-halloween="1"] .p3-glow { --p3-glow: rgba(255, 90, 20, .58); }
.pack-stage[data-halloween="1"][data-state="idle"]:not(.p3-off):not(:has(.pack3d:disabled)) .p3-glow { animation: hw-flicker 2.2s steps(1, end) infinite, wc-fade-in .6s ease; }
.pack-stage[data-halloween="1"][data-state="idle"]:not(.p3-off):not(:has(.pack3d:disabled)) .p3-glow::before {
  content: ""; position: absolute; inset: 8% 18% 0; pointer-events: none; opacity: .85;
  background-image: radial-gradient(circle, #ffc46b 0 1.5px, transparent 2.6px), radial-gradient(circle, #ff8a3a 0 1px, transparent 2px);
  background-size: 92px 130px, 61px 90px; background-position: 0 0, 30px 40px; animation: hw-embers 7s linear infinite;
  -webkit-mask: linear-gradient(transparent, #000 30%, #000 75%, transparent); mask: linear-gradient(transparent, #000 30%, #000 75%, transparent);
}
:where(:root[data-motion="reduce"]) .p3-glow::before { animation: none !important; opacity: 0 !important; }   /* moins d'animations : pas de braises */
@keyframes hw-flicker { 0%, 100% { opacity: 1; } 10% { opacity: .62; } 14% { opacity: 1; } 42% { opacity: .78; } 46% { opacity: 1; } 70% { opacity: .55; } 74% { opacity: .95; } }
@keyframes hw-embers { to { background-position: 0 -260px, 30px -140px; } }

/* ---------- Style de carte « Toile » (design/halloween/styles.html, Toile · 2e tour, retouché) : velours noir qui se teinte vers le bas de la couleur de rareté, double filet argenté, toiles
   d'araignée dans les coins du HAUT (une ou deux selon la rareté, fils à la couleur de rareté, irisés en Ultime), image aux angles arrondis, goutte de rosée sous le titre ; au survol,
   l'araignée descend au bout de son fil ---------- */
html body .card .card-front.th-toile { --thread: color-mix(in srgb, var(--c1) 35%, #efebe2); --webs: var(--hw-web-tl) 0 0 / 9em 9em no-repeat;
  border-radius: .6em; background: radial-gradient(90% 60% at 80% 0, #34343e, transparent 70%), linear-gradient(0deg, color-mix(in srgb, var(--c1) 34%, #0a0a0d), #111116 55%, #0a0a0d);
  box-shadow: 0 1.2em 2em -1.2em var(--glow); color: #f4f0e7; }
html body .card.r1 .card-front.th-toile { --thread: #dcd8d0; }
html body .card.r3 .card-front.th-toile, html body .card.r4 .card-front.th-toile { --webs: var(--hw-web-tl) 0 0 / 9em 9em no-repeat, var(--hw-web-tr) 100% 0 / 7em 7em no-repeat; }
html body .card.r5 .card-front.th-toile, html body .card.r6 .card-front.th-toile, html body .card.r7 .card-front.th-toile { --webs: var(--hw-web-tl) 0 0 / 10em 10em no-repeat, var(--hw-web-tr) 100% 0 / 8em 8em no-repeat; }
html body .card.r7 .card-front.th-toile { --thread: var(--frame); }
html body .card .card-front.th-toile::after { content: ""; position: absolute; inset: .55em; z-index: 2; border: 1px solid rgba(236, 232, 222, .32); outline: 1px solid rgba(236, 232, 222, .14); outline-offset: .22em; border-radius: .25em; pointer-events: none; }
html body .card .card-front.th-toile::before { content: ""; position: absolute; inset: 0; z-index: 4; pointer-events: none; background: var(--thread); -webkit-mask: var(--webs); mask: var(--webs); opacity: .9; }
html body .card .card-front.th-toile .card-img { left: 1.6em; right: 1.6em; top: 1.6em; width: auto; height: 14.2em; overflow: hidden; border-radius: .6em; background: #0b0b0e; }
html body .card .card-front.th-toile .card-img img { filter: saturate(.7) contrast(1.08) brightness(.95); }
html body .card .card-front.th-toile .card-img::after { content: ""; position: absolute; inset: 0; pointer-events: none; box-shadow: inset 0 0 2.4em rgba(0, 0, 0, .75); background: linear-gradient(transparent 60%, rgba(10, 10, 13, .55)); }
html body .card .card-front.th-toile .th-in::after { content: ""; position: absolute; z-index: 5; right: 3em; top: .55em; width: 2em; height: 5.6em; pointer-events: none;
  background: var(--hw-spider) 50% 100% / 2em auto no-repeat, linear-gradient(rgba(236, 232, 222, .75), rgba(236, 232, 222, .75)) 50% 0 / 1px calc(100% - 1.5em) no-repeat; transition: height 1.1s cubic-bezier(.5, 0, .3, 1); }
html body .card:hover .card-front.th-toile .th-in::after { height: 11.5em; }
html body .card .card-front.th-toile .card-body { z-index: 5; left: 1.6em; right: 1.6em; top: 16.4em; bottom: 1.25em; gap: .28em; }
html body .card .card-front.th-toile .card-body::before { content: ""; order: 1; height: .6em;
  background: radial-gradient(circle, color-mix(in srgb, var(--c1) 70%, #fff) 0 .15em, var(--c1) .16em .2em, transparent .24em) 50% 50% / .6em .6em no-repeat, linear-gradient(90deg, transparent, rgba(236, 232, 222, .45) 20%, rgba(236, 232, 222, .45) 80%, transparent) 50% 50% / 100% 1px no-repeat; }
html body .card.r7 .card-front.th-toile .card-body::before { background: radial-gradient(circle, #fff 0 .15em, transparent .24em) 50% 50% / .6em .6em no-repeat, var(--frame) 50% 50% / 100% 1px no-repeat; }
html body .card .card-front.th-toile h3 { font: 400 1.72em/1.05 "IM Fell English", Georgia, serif; color: #f4f0e7; text-shadow: 0 .05em .4em rgba(0, 0, 0, .8); }
html body .card .card-front.th-toile .desc { order: 2; font: italic 400 1.2em/1.26 "IM Fell English", Georgia, serif; color: #d6d1c6; }
html body .card .card-front.th-toile .meta { order: 3; margin-top: auto; justify-content: space-between; color: #b9b5aa; font-size: .9em; }
html body .card .card-front.th-toile .tag { padding: .1em .6em; border: 1px solid color-mix(in srgb, var(--c1) 70%, transparent); color: color-mix(in srgb, var(--c1) 45%, #fff); text-transform: uppercase; letter-spacing: .14em; font-weight: 500; }
html body .card .card-front.th-toile .tag svg { display: none; }

/* ---------- Style de carte « Série B » (design/halloween/styles.html, Série B · 2e tour, retouché) : affiche de film d'épouvante, photo en bichromie de la couleur de rareté jusqu'en haut,
   titre dégoulinant cerné de noir (irisé en Ultime), réplique sur un bandeau, rareté et vues entre deux barres, bloc de générique en pied ; au survol, un corbeau traverse la carte ---------- */
html body .card .card-front.th-serieb { --acid: color-mix(in srgb, var(--c3) 55%, #f2ff6a); --tone: color-mix(in srgb, var(--c1) 75%, #6a1a8a);
  border-radius: .3em; background: linear-gradient(180deg, #0a0510 52%, color-mix(in srgb, var(--c1) 42%, #0a0510)); box-shadow: inset 0 0 0 .1em var(--acid), 0 1.2em 2em -1.2em var(--glow); color: #f1dcef; }
html body .card.r1 .card-front.th-serieb { --acid: #f1f5c8; --tone: #6a6a7a; }
/* le corbeau (design/halloween/corbeaux.html, D « Au premier plan ») : au survol, un très grand corbeau flou passe vite juste devant l'objectif, ailes haute, planée puis basse ;
   la photo s'assombrit à son passage, puis une plume redescend lentement (.th-in::after). Une fois par survol. */
html body .card .card-front.th-serieb { --hw-crow-up: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2040%22%3E%3Cpath%20d%3D%22M8%2021.5%2013%2019c2-2.5%205-3%207-2%205%20.5%2012%201%2018%202.5L52%2016l-3%204.5%207%201-7%202%204%203.5-14-2.5c-6%202-15%202.5-20%20.5-3-.5-5-2-6-2.5Z%22%20fill%3D%22%230b0710%22%2F%3E%3Ccircle%20cx%3D%2215.6%22%20cy%3D%2219.4%22%20r%3D%22.9%22%20fill%3D%22%23ffd27a%22%2F%3E%3Cpath%20d%3D%22M22%2019c4-7%209-13%2017-18l-1.5%205L43%203.5%2040.5%208.5%2046%207l-4.5%205.5c-3.5%203.5-7.5%206-10.5%207Z%22%20fill%3D%22%230b0710%22%2F%3E%3C%2Fsvg%3E"); --hw-crow-mid: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2040%22%3E%3Cpath%20d%3D%22M8%2021.5%2013%2019c2-2.5%205-3%207-2%205%20.5%2012%201%2018%202.5L52%2016l-3%204.5%207%201-7%202%204%203.5-14-2.5c-6%202-15%202.5-20%20.5-3-.5-5-2-6-2.5Z%22%20fill%3D%22%230b0710%22%2F%3E%3Ccircle%20cx%3D%2215.6%22%20cy%3D%2219.4%22%20r%3D%22.9%22%20fill%3D%22%23ffd27a%22%2F%3E%3Cpath%20d%3D%22M22%2019.5c8-4.5%2018-7.5%2032-8.5l-5%203.5%207%201-7%202%204%202.5-20%201Z%22%20fill%3D%22%230b0710%22%2F%3E%3C%2Fsvg%3E"); --hw-crow-down: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2040%22%3E%3Cpath%20d%3D%22M8%2021.5%2013%2019c2-2.5%205-3%207-2%205%20.5%2012%201%2018%202.5L52%2016l-3%204.5%207%201-7%202%204%203.5-14-2.5c-6%202-15%202.5-20%20.5-3-.5-5-2-6-2.5Z%22%20fill%3D%22%230b0710%22%2F%3E%3Ccircle%20cx%3D%2215.6%22%20cy%3D%2219.4%22%20r%3D%22.9%22%20fill%3D%22%23ffd27a%22%2F%3E%3Cpath%20d%3D%22M22%2021c4%206%209%2012%2015%2018l.5-5%205%203.5L41%2032l5%202-4.5-6c-3.5-3-7.5-5.5-10.5-6.5Z%22%20fill%3D%22%230b0710%22%2F%3E%3C%2Fsvg%3E"); --hw-feather: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2040%22%3E%3Cpath%20d%3D%22M6%2034C14%2022%2030%2010%2058%204%2044%2014%2028%2026%2010%2036Z%22%20fill%3D%22%231c1424%22%2F%3E%3Cpath%20d%3D%22M6%2034%2052%207%22%20stroke%3D%22%236a5a78%22%20stroke-width%3D%22.8%22%2F%3E%3C%2Fsvg%3E"); }
html body .card .card-front.th-serieb .th-in { overflow: hidden; border-radius: .3em; }
html body .card .card-front.th-serieb .th-in::before { content: ""; position: absolute; z-index: 6; top: -6em; left: 100%; width: 30em; height: 18.75em; pointer-events: none; opacity: 0;
  background: var(--hw-crow-up) center / contain no-repeat; filter: blur(.12em); }
html body .card:hover .card-front.th-serieb .th-in::before { animation: hw-crow-wing .9s steps(1) forwards, hw-crow-pass .9s cubic-bezier(.4, 0, .7, 1) forwards; }
@keyframes hw-crow-wing { 0% { background-image: var(--hw-crow-up); } 45% { background-image: var(--hw-crow-mid); } 75% { background-image: var(--hw-crow-down); } }
@keyframes hw-crow-pass { 0% { left: 100%; top: -6em; opacity: .96; rotate: 8deg; } 100% { left: -32em; top: -2em; opacity: .96; rotate: -4deg; } }
html body .card:hover .card-front.th-serieb .card-img img { animation: hw-crow-shade .9s ease-in-out; }
@keyframes hw-crow-shade { 40%, 60% { filter: grayscale(.35) contrast(1.08) brightness(.4); } }
html body .card .card-front.th-serieb .th-in::after { content: ""; position: absolute; z-index: 6; left: 58%; top: 3em; width: 2.2em; height: 1.4em; opacity: 0; pointer-events: none;
  background: var(--hw-feather) center / contain no-repeat; filter: drop-shadow(0 0 .1em rgba(255, 243, 214, .6)); }
html body .card:hover .card-front.th-serieb .th-in::after { animation: hw-feather 3.2s ease-in-out .55s forwards; }
@keyframes hw-feather {
  0% { opacity: 0; translate: 0 0; rotate: -20deg; } 8% { opacity: 1; }
  25% { translate: -1.6em 2.4em; rotate: 18deg; } 50% { translate: .8em 5.2em; rotate: -16deg; } 75% { translate: -1em 8em; rotate: 14deg; opacity: 1; }
  100% { translate: .2em 10.6em; rotate: -6deg; opacity: 0; }
}
html body .card .card-front.th-serieb .card-img { left: .1em; right: .1em; top: .1em; width: auto; height: 13em; overflow: visible; background: #000; }
html body .card .card-front.th-serieb .card-img img { filter: grayscale(.35) contrast(1.08); }
html body .card .card-front.th-serieb .card-img::after { content: ""; position: absolute; inset: 0; pointer-events: none; mix-blend-mode: multiply; opacity: .32;   /* bichromie de la rareté, légère */
  background: radial-gradient(circle, rgba(0, 0, 0, .3) 0 .07em, transparent .09em) 0 0 / .26em .26em, linear-gradient(170deg, var(--tone), #ff3d6e 120%); }
/* coupure nette sous la photo : une bande de pellicule (perforations) */
html body .card .card-front.th-serieb .card-img::before { content: ""; display: block; position: absolute; left: 0; right: 0; top: 100%; height: 1.15em; z-index: 2;
  background: linear-gradient(#0a0510, #0a0510) 0 0 / 100% .12em no-repeat, repeating-linear-gradient(90deg, transparent 0 .35em, color-mix(in srgb, var(--acid) 70%, #fff) .35em .95em, transparent .95em 1.3em) 0 50% / 100% .42em no-repeat, #0a0510; }
html body .card .card-front.th-serieb .card-body { z-index: 3; left: .9em; right: .9em; top: 15em; bottom: .8em; align-items: center; text-align: center; gap: .45em; }
html body .card .card-front.th-serieb h3 { font: 400 2.15em/.96 "Creepster", "Bangers", cursive; color: var(--acid); letter-spacing: .03em; -webkit-text-stroke: .05em #0a0510; paint-order: stroke fill; text-shadow: .07em .08em 0 #0a0510; rotate: -2deg; }
html body .card.r7 .card-front.th-serieb h3 { background: linear-gradient(90deg, #ff8ad8, #ffe066, #8affc1, #8ab4ff, #ff8ad8); background-size: 260% 100%; -webkit-background-clip: text; background-clip: text; color: transparent; -webkit-text-stroke: 0; text-shadow: none; filter: drop-shadow(.06em .07em 0 #0a0510); animation: hw-shine 5s linear infinite; }
@keyframes hw-shine { to { background-position: 260% 0; } }
html body .card .card-front.th-serieb .desc { max-width: 100%; padding: 0 .3em; color: #fff0c2; font: italic 600 1.1em/1.2 "Barlow Condensed", sans-serif; letter-spacing: .03em; text-shadow: 0 .06em .3em #0a0510; }
html body .card .card-front.th-serieb .desc::before, html body .card .card-front.th-serieb .desc::after { color: var(--acid); font-style: normal; font-weight: 700; }
html body .card .card-front.th-serieb .desc::before { content: "« "; }
html body .card .card-front.th-serieb .desc::after { content: " »"; }
html body .card .card-front.th-serieb .meta { margin-top: auto; width: 100%; flex-flow: row wrap; justify-content: space-between; align-items: center; gap: .3em 1em; padding: .4em .2em 0; box-sizing: border-box; color: #f1dcef;
  font: 700 1.08em/1.3 "Barlow Condensed", sans-serif; letter-spacing: .12em; text-transform: uppercase;
  background: linear-gradient(var(--acid), var(--acid)) 0 0 / 100% .1em no-repeat, linear-gradient(var(--acid), var(--acid)) 0 1.95em / 100% .1em no-repeat; }   /* la rareté et les vues entre deux barres */
html body .card .card-front.th-serieb .meta .vw { color: var(--acid); }
html body .card .card-front.th-serieb .meta::after { content: ""; display: block; width: 100%; height: 1.5em; margin-top: .5em; opacity: .45;
  background: repeating-linear-gradient(90deg, #f1dcef 0 .9em, transparent .9em 1.1em, #f1dcef 1.1em 1.6em, transparent 1.6em 1.9em) 0 0 / 100% .16em no-repeat, repeating-linear-gradient(90deg, #f1dcef 0 1.3em, transparent 1.3em 1.5em, #f1dcef 1.5em 2.1em, transparent 2.1em 2.4em) 0 .45em / 100% .16em no-repeat, repeating-linear-gradient(90deg, #f1dcef 0 .7em, transparent .7em .9em, #f1dcef .9em 1.8em, transparent 1.8em 2.1em) 0 .9em / 100% .16em no-repeat, repeating-linear-gradient(90deg, #f1dcef 0 1.1em, transparent 1.1em 1.3em, #f1dcef 1.3em 1.7em, transparent 1.7em 2em) 0 1.35em / 82% .16em no-repeat; }   /* le générique, quatre lignes */
html body .card .card-front.th-serieb .tag { color: #fff; }
html body .card .card-front.th-serieb .tag svg { display: none; }
/* moins d'animations (boot.js, docs/animations.md) */ html:where([data-motion="reduce"]) body .card .card-front.th-toile .th-in::after { transition: none; } html:where([data-motion="reduce"]) body .card.r7 .card-front.th-serieb h3 { animation: none; }
  html:where([data-motion="reduce"]) body .card:hover .card-front.th-serieb .card-img img, html:where([data-motion="reduce"]) body .card:hover .card-front.th-serieb .th-in::before, html:where([data-motion="reduce"]) body .card:hover .card-front.th-serieb .th-in::after { animation: none; }

/* ---------- Habillage « Manoir aux lanternes » (design/halloween/deco.html, n° 6 : Manoir + Lanternes + Cimetière, ton orangé) ---------- */
/* Couleurs (« Laiton d'origine », design/halloween/couleurs.html n° 1, choisi le 23/10) : boutons, liens et filets gardent le laiton du site ; seuls le fond (brun-noir chaud en sombre, ivoire chaud en
   clair) et le halo du haut de page virent à l'automne, quelle que soit l'ambiance choisie dans Paramètres. L'orange reste réservé à ce qui est propre à Halloween (citrouilles, paquet, losange de la zone). */
html:root:not([data-theme="light"])[data-event="halloween"] { --bg: #0d0906; --surface: #130d08; --card: #151009; --tint: rgba(232, 110, 30, .16); --band: rgba(201, 164, 92, .07); --top-bg: rgba(13, 9, 6, .6); --overlay: rgba(6, 4, 2, .8);
  --text: #f1e9da; --muted: #a59a88; --line: rgba(241, 233, 218, .12); --brass: #c9a45c; --brass-line: rgba(201, 164, 92, .38); --brass-ink: #d3b06a; --on-brass: #14110a; --track: rgba(241, 233, 218, .09); --halo: rgba(201, 164, 92, .4);
  --ev-sil: #040201; --ev-wire: #3a2412; --ev-spider: #f2d7bd; }
html:root[data-theme="light"][data-event="halloween"] { --bg: #f3e6d6; --surface: #f8eee2; --card: #fbf3e8; --tint: rgba(232, 121, 43, .14); --band: rgba(157, 123, 42, .1); --top-bg: rgba(243, 230, 214, .72); --overlay: rgba(248, 238, 226, .82);
  --text: #2a1d0e; --muted: #6a5c46; --line: rgba(42, 29, 14, .14); --brass: #9d7b2a; --brass-line: rgba(157, 123, 42, .5); --brass-ink: #765a18; --on-brass: #fbf8ee; --track: rgba(42, 29, 14, .08); --halo: rgba(157, 123, 42, .35);
  --ev-sil: #c9ad92; --ev-wire: #6a4a2a; --ev-spider: #2a1a0e; }
/* Une grosse lune orange, en haut à droite, derrière tout */
:root[data-event="halloween"] body { background: radial-gradient(circle 95px at calc(100% - 15vw) 250px, rgba(255, 214, 160, .2), rgba(243, 154, 60, .14) 62%, transparent 64%),
  radial-gradient(circle 260px at calc(100% - 15vw) 250px, rgba(240, 130, 40, .1), transparent 70%), radial-gradient(75% 100% at 50% 0, var(--tint), transparent) center top / 100% 900px no-repeat, var(--bg); }
:root[data-theme="light"][data-event="halloween"] body { background: radial-gradient(circle 95px at calc(100% - 15vw) 250px, rgba(243, 154, 60, .2), rgba(243, 154, 60, .12) 62%, transparent 64%), radial-gradient(75% 100% at 50% 0, var(--tint), transparent) center top / 100% 900px no-repeat, var(--bg); }

/* Sous l'en-tête (src/partials/header.php, .ev-deco) : guirlande de citrouilles-lanternes, toiles dans les coins, araignée au bout de son fil, corbeau perché, chauve-souris, feuilles mortes ;
   rien ne prend les clics. Au pied de la page (src/partials/footer.php, .ev-ground) : lueur d'horizon, grille en fer forgé, tombes et arbre mort, petit tas de citrouilles, brume ; derrière le contenu. */
.ev-deco, .ev-ground { display: none; }
:root[data-event="halloween"] .ev-deco { display: block; position: relative; z-index: 45; height: 0; pointer-events: none; }
:root[data-event="halloween"] .ev-ground { display: block; position: relative; z-index: -1; flex: none; height: 0; pointer-events: none; }
.ev-deco > *, .ev-ground > * { position: absolute; pointer-events: none; }
.ev-garland { left: 0; right: 0; top: 0; width: 100%; height: 46px; color: var(--ev-wire); overflow: visible; }
.ev-pk { top: 13px; left: var(--x); width: 26px; height: 24px; margin-left: -13px; background: var(--hw-pumpkin) center / contain no-repeat; filter: drop-shadow(0 0 6px rgba(255, 170, 60, .6)); animation: hw-flicker 3s steps(1, end) infinite; animation-delay: var(--d, 0s); }
.ev-pk--1 { --x: 6.25%; --d: -0.0s; }
.ev-pk--2 { --x: 18.75%; --d: -0.7s; }
.ev-pk--3 { --x: 31.25%; --d: -1.4s; }
.ev-pk--4 { --x: 43.75%; --d: -2.1s; }
.ev-pk--5 { --x: 56.25%; --d: -2.8s; }
.ev-pk--6 { --x: 68.75%; --d: -3.5s; }
.ev-pk--7 { --x: 81.25%; --d: -4.2s; }
.ev-pk--8 { --x: 93.75%; --d: -4.9s; }
.ev-pk::before { content: ""; position: absolute; left: 50%; bottom: 100%; width: 1px; height: 7px; background: var(--ev-wire); }
.ev-web { top: 0; opacity: .5; background: var(--brass); }
.ev-web--l { left: 0; width: 150px; height: 150px; -webkit-mask: var(--hw-web-tl) 0 0 / 100% 100% no-repeat; mask: var(--hw-web-tl) 0 0 / 100% 100% no-repeat; }
.ev-web--r { right: 0; width: 110px; height: 110px; -webkit-mask: var(--hw-web-tr) 0 0 / 100% 100% no-repeat; mask: var(--hw-web-tr) 0 0 / 100% 100% no-repeat; }
.ev-spider { left: 112px; top: 0; width: 22px; height: 150px; transform-origin: 50% 0; animation: hw-bob 5s ease-in-out infinite; }
.ev-spider::before { content: ""; position: absolute; left: 50%; top: 0; width: 1px; height: calc(100% - 16px); background: linear-gradient(transparent, color-mix(in srgb, var(--brass) 70%, transparent)); }
.ev-spider::after { content: ""; position: absolute; left: 0; bottom: -4px; width: 22px; height: 24px; background: var(--ev-spider); -webkit-mask: var(--hw-spider) center / contain no-repeat; mask: var(--hw-spider) center / contain no-repeat; }
@keyframes hw-bob { 50% { transform: rotate(5deg) translateY(10px); } }
.ev-crow { top: -33px; right: 24%; width: 42px; height: 34px; background: var(--ev-sil); -webkit-mask: var(--hw-crow) center / contain no-repeat; mask: var(--hw-crow) center / contain no-repeat; }
:root:not([data-theme="light"]) .ev-crow { background: #000; }
.ev-bat { left: -50px; top: 150px; width: 30px; height: 12px; background: var(--ev-sil); -webkit-mask: var(--hw-bat) center / contain no-repeat; mask: var(--hw-bat) center / contain no-repeat; animation: hw-bat 28s linear infinite; }
:root:not([data-theme="light"]) .ev-bat { background: #1d0e05; }
@keyframes hw-bat { 0%, 62% { transform: translate(0, 0); opacity: 0; } 63% { opacity: 1; } 80% { transform: translate(55vw, -50px) scaleY(.7); } 99% { transform: translate(110vw, 10px); opacity: 1; } 100% { transform: translate(110vw, 10px); opacity: 0; } }
.ev-leaf { top: -12px; left: var(--x); width: 14px; height: 14px; border-radius: 0 70% 0 70%; background: var(--c); opacity: 0; animation: hw-fall var(--t, 12s) linear infinite; animation-delay: var(--d, 0s); }
.ev-leaf--1 { --x: 8%; --c: #b8501a; --t: 11s; --d: -0s; --dx: 70px; }
.ev-leaf--2 { --x: 27%; --c: #8c3a10; --t: 14s; --d: -4s; --dx: -80px; }
.ev-leaf--3 { --x: 46%; --c: #d4772a; --t: 12s; --d: -8s; --dx: 60px; }
.ev-leaf--4 { --x: 68%; --c: #a8661c; --t: 15s; --d: -2s; --dx: -70px; }
.ev-leaf--5 { --x: 87%; --c: #b8501a; --t: 13s; --d: -6s; --dx: 50px; }
@keyframes hw-fall { 0% { transform: translate(0, 0) rotate(0); opacity: 0; } 8%, 80% { opacity: .85; } 100% { transform: translate(var(--dx, 60px), 640px) rotate(600deg); opacity: 0; } }
.ev-ground-glow { left: 0; right: 0; bottom: 0; height: 130px; background: linear-gradient(to top, transparent, rgba(232, 110, 30, .2) 40%, transparent); }
.ev-fence { left: 0; right: 0; bottom: 0; height: 56px; background: var(--ev-sil); -webkit-mask: var(--hw-fence) 0 100% / 12px 56px repeat-x; mask: var(--hw-fence) 0 100% / 12px 56px repeat-x; }
.ev-graves { left: 0; right: 0; bottom: 0; height: 110px; background: var(--ev-sil); -webkit-mask: var(--hw-graves) 50% 100% / 400px 110px repeat-x; mask: var(--hw-graves) 50% 100% / 400px 110px repeat-x; }
.ev-pile { left: 3%; bottom: 0; width: 110px; height: 62px; background: var(--hw-pumpkin-pile) center bottom / contain no-repeat; filter: drop-shadow(0 0 8px rgba(255, 150, 40, .45)); }
.ev-fog { left: -30%; right: -30%; bottom: -20px; height: 150px; background: radial-gradient(ellipse 22% 45% at 20% 60%, rgba(255, 190, 140, .13), transparent 70%), radial-gradient(ellipse 26% 40% at 55% 50%, rgba(255, 190, 140, .1), transparent 70%), radial-gradient(ellipse 20% 50% at 85% 60%, rgba(255, 190, 140, .12), transparent 70%); animation: hw-drift 14s ease-in-out infinite alternate; }
.ev-fog--b { bottom: -60px; opacity: .8; animation-duration: 19s; animation-direction: alternate-reverse; }
:root[data-theme="light"] .ev-fog { opacity: .5; }
@keyframes hw-drift { to { transform: translateX(12%); } }
@media (max-width: 760px) {
  .ev-web--l { width: 90px; height: 90px; } .ev-web--r { width: 70px; height: 70px; }
  .ev-spider { display: none; }   /* sur téléphone, elle tomberait sur le texte */
  .ev-pk--2, .ev-pk--4, .ev-pk--6, .ev-pk--8 { display: none; }
  .ev-crow { right: 30%; }
  .ev-pile { width: 80px; height: 45px; }
}
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .ev-deco *, :where(:root[data-motion="reduce"]) .ev-ground *, :where(:root[data-motion="reduce"]) .ev-deco *::before, :where(:root[data-motion="reduce"]) .ev-deco *::after { animation: none !important; } :where(:root[data-motion="reduce"]) .ev-leaf, :where(:root[data-motion="reduce"]) .ev-bat { display: none; }


/* ---------- Passe d'Halloween (src/EventPass.php) : icône du ticket, frise de la page Paquets, page « passe », tuiles du Comptoir ----------
   Cadres « Art déco hanté » : double filet laiton (le second en retrait), losanges aux angles, éventail très léger en fond, toile d'araignée discrète dans un coin du grand cadre. */
.ev-ticket { display: inline-block; width: 1.9em; height: 1.9em; vertical-align: -.56em; color: var(--brass-ink); flex: none; }
.ps-bar { display: block; width: 100%; height: 6px; }
.ps-bar .bg { fill: var(--track); }
.ps-bar .fg { fill: var(--brass); }
.ps-bar--s { height: 4px; }
/* le double filet et les quatre losanges d'angle, communs aux cadres du passe */
/* Cadres du passe (design/halloween/bandeau-cadres.html, C2 « Angles à gradins ») : les angles coupés en deux marches. ::before trace le filet laiton (--fr) qui suit les gradins,
   ::after est le fond (--fill) avec un second filet intérieur (--fr2) ; ni l'un ni l'autre ne découpe le contenu (le numéro d'un niveau dépasse du haut de sa case). */
.ps-head, .ps-m, .ps-l, .ps-bonus { --fr: color-mix(in srgb, var(--brass) 38%, transparent); --fr2: color-mix(in srgb, var(--brass) 18%, transparent); --fill: var(--card); --c: 5px;
  --steps: polygon(0 calc(var(--c) * 2), var(--c) calc(var(--c) * 2), var(--c) var(--c), calc(var(--c) * 2) var(--c), calc(var(--c) * 2) 0, calc(100% - var(--c) * 2) 0, calc(100% - var(--c) * 2) var(--c), calc(100% - var(--c)) var(--c), calc(100% - var(--c)) calc(var(--c) * 2), 100% calc(var(--c) * 2), 100% calc(100% - var(--c) * 2), calc(100% - var(--c)) calc(100% - var(--c) * 2), calc(100% - var(--c)) calc(100% - var(--c)), calc(100% - var(--c) * 2) calc(100% - var(--c)), calc(100% - var(--c) * 2) 100%, calc(var(--c) * 2) 100%, calc(var(--c) * 2) calc(100% - var(--c)), var(--c) calc(100% - var(--c)), var(--c) calc(100% - var(--c) * 2), 0 calc(100% - var(--c) * 2));
  position: relative; isolation: isolate; border: 0; background: none; box-shadow: none; }
.ps-head, .ps-bonus { --c: 7px; }
.ps-head::before, .ps-m::before, .ps-l::before, .ps-bonus::before, .ps-head::after, .ps-m::after, .ps-l::after, .ps-bonus::after { content: ""; position: absolute; pointer-events: none; clip-path: var(--steps); }
.ps-head::before, .ps-m::before, .ps-l::before, .ps-bonus::before { inset: 0; z-index: -2; background: var(--fr); transition: background .25s ease; }
.ps-head::after, .ps-m::after, .ps-l::after, .ps-bonus::after { inset: 1px; z-index: -1; background: var(--fill); box-shadow: inset 0 0 0 4px var(--card), inset 0 0 0 5px var(--fr2); }
/* Bandeau de la page Paquets (design/halloween/bandeaux-2.html, S9 « Cartouche-billet ») : une ligne au double filet laiton, découpée comme un billet (deux encoches rondes),
   la progression en perforations qui s'allument, un talon détaché à droite qui porte le niveau, et dessous, collée et centrée, une languette « Voir le passe ».
   Le masque des encoches est sur .evp-body (il couperait sinon la languette). */
.ev-pass { --fr: color-mix(in srgb, var(--brass) 38%, transparent); --fr2: color-mix(in srgb, var(--brass) 18%, transparent);
  display: grid; justify-items: center; box-sizing: border-box; width: min(100% - 32px, 820px); margin: 0 auto 28px; color: var(--text); text-decoration: none; font-size: 14px; transition: opacity .25s ease; }
.ev-pass:hover { --fr: var(--brass); }
.evp-body { --cut: radial-gradient(circle at 0 50%, transparent 9px, #000 9.5px) left / 51% 100% no-repeat, radial-gradient(circle at 100% 50%, transparent 9px, #000 9.5px) right / 51% 100% no-repeat;
  position: relative; z-index: 1; display: flex; align-items: center; gap: 16px; width: 100%; box-sizing: border-box; height: 68px; padding: 0 0 0 20px; text-align: left;
  border: 1px solid var(--fr); box-shadow: inset 0 0 0 4px var(--card), inset 0 0 0 5px var(--fr2); background: var(--card); -webkit-mask: var(--cut); mask: var(--cut); transition: border-color .25s ease; }
.evp-tk { position: relative; display: grid; place-items: center; width: 52px; height: 52px; flex: none; }
.evp-tk::before { content: ""; position: absolute; width: 38px; height: 38px; rotate: 45deg; border: 1px solid var(--fr); }
.evp-tk .ev-ticket { position: relative; width: 46px; height: 46px; }
.evp-t { flex: none; white-space: nowrap; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; font-size: 13px; color: var(--brass-ink); }
.evp-perf { position: relative; flex: 1; min-width: 60px; height: 5px; background: radial-gradient(circle, color-mix(in srgb, var(--brass) 35%, transparent) 0 1.7px, transparent 2.1px) 0 50% / 8px 5px repeat-x; }
.evp-perf i { position: absolute; inset: 0 auto 0 0; width: 0; background: radial-gradient(circle, var(--brass-ink) 0 1.9px, transparent 2.3px) 0 50% / 8px 5px repeat-x; transition: width .5s ease; }
.evp-sub { flex: none; font-size: 14px; color: var(--muted); font-variant-numeric: tabular-nums; }
.evp-sub b { color: var(--text); font-weight: 500; }
.evp-ready { flex: none; display: grid; place-items: center; min-width: 28px; height: 25px; padding: 0 7px; background: var(--brass-ink); color: var(--on-brass); font-size: 13px; font-weight: 600; clip-path: polygon(6px 0, calc(100% - 6px) 0, 100% 50%, calc(100% - 6px) 100%, 6px 100%, 0 50%); }
.evp-ready[hidden] { display: none; }
.evp-stub { position: relative; align-self: stretch; flex: none; display: grid; place-content: center; justify-items: center; width: 108px; line-height: 1; background: color-mix(in srgb, var(--brass) 7%, var(--card)); }
.evp-stub::before { content: ""; position: absolute; left: 0; top: 8px; bottom: 8px; border-left: 2px dotted var(--fr); }
.evp-stub b { font-size: 28px; font-weight: 300; color: var(--brass-ink); margin-top: 3px; } .evp-stub small { font-size: 9.5px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); }
/* la languette sort de SOUS le bandeau : son haut est caché derrière (le contour du bandeau reste entier) ; son trapèze est tracé par deux couches (filet, puis fond) */
.evp-go { position: relative; z-index: 0; margin-top: -8px; padding: 12px 22px 6px; color: var(--brass-ink); font-size: 10.5px; letter-spacing: .22em; text-transform: uppercase; isolation: isolate; transition: color .25s ease; }
.evp-go::before, .evp-go::after { content: ""; position: absolute; z-index: -1; clip-path: polygon(0 0, 100% 0, calc(100% - 8px) 100%, 8px 100%); }
.evp-go::before { inset: 0; background: var(--fr); transition: background .25s ease; }
.evp-go::after { inset: 0 1px 1px; background: var(--card); }
.ev-pass:hover .evp-go { color: var(--text); }
.opener:not([data-phase="home"]) .ev-pass { opacity: 0; visibility: hidden; pointer-events: none; }
@media (max-width: 640px) { .evp-t { display: none; } .evp-body { gap: 8px; height: 60px; padding-left: 14px; } .evp-perf { min-width: 24px; } .evp-sub { font-size: 13px; } .evp-stub { width: 72px; padding-right: 6px; } .evp-stub small { font-size: 8px; letter-spacing: .1em; } .evp-stub b { font-size: 24px; } .evp-tk { width: 44px; height: 44px; } .evp-tk .ev-ticket { width: 38px; height: 38px; } .evp-tk::before { width: 32px; height: 32px; } }
/* Page « passe » */
.ps { padding: clamp(40px, 7vw, 80px) 0 72px; }   /* comme les pages Jeux et Missions : de l'air sous l'en-tête */
.ps h2 { display: flex; align-items: center; gap: 14px; margin: 0 0 16px; font-size: 14px; font-weight: 500; letter-spacing: .22em; text-transform: uppercase; color: var(--brass-ink); }
.ps h2::after { content: ""; flex: 1; height: 1px; background: linear-gradient(90deg, var(--brass-line), transparent); }
.ps-sec { margin-top: 48px; scroll-margin-top: 90px; }
.ps-msg { margin: 0 0 18px; padding: 10px 14px; border-left: 2px solid var(--brass); background: color-mix(in srgb, var(--brass) 8%, transparent); }
.ps-msg--err { border-color: var(--err-ink); }
.ps-head { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 18px 34px; padding: 26px 30px; overflow: hidden;
  --fill: repeating-conic-gradient(from -90deg at 50% 130%, color-mix(in srgb, var(--brass) 4.5%, transparent) 0 2deg, transparent 2deg 9deg), var(--card); }
.ps-web { position: absolute; z-index: -1; right: 1px; top: 1px; width: 120px; height: 120px; background: var(--fr2); -webkit-mask: var(--hw-web-tr) 0 0 / 100% 100% no-repeat; mask: var(--hw-web-tr) 0 0 / 100% 100% no-repeat; pointer-events: none; }
.ps-lv { position: relative; display: grid; place-items: center; width: 108px; height: 108px; line-height: 1; }
.ps-lv::before, .ps-lv::after { content: ""; position: absolute; inset: 14px; rotate: 45deg; border: 1px solid var(--fr); }
.ps-lv::after { inset: 20px; border-color: var(--fr2); }
.ps-lv b { position: relative; font-size: 40px; font-weight: 200; color: var(--brass-ink); }
.ps-lv small { position: relative; font-size: 9.5px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); }
.ps-lv small:first-child { align-self: end; } .ps-lv small:last-child { align-self: start; }
.ps-lv { grid-template-rows: 1fr auto 1fr; }
.ps-prog { position: relative; display: grid; gap: 8px; min-width: 0; }
.ps-prog p { margin: 0; }
.ps-tk { font-size: 14px; letter-spacing: .04em; } .ps-tk b { font-weight: 400; font-size: 24px; margin: 0 4px 0 8px; }
.ps-next { font-size: 13.5px; color: var(--muted); } .ps-next b { color: var(--text); font-weight: 500; }
.ps-end { font-size: 11px; color: var(--muted); letter-spacing: .16em; text-transform: uppercase; }
.ps-none { font-size: 12px; color: var(--muted); }
.ps-all { position: relative; }
.ps-form { margin: 0; display: inline; }
@media (max-width: 700px) { .ps-head { grid-template-columns: auto 1fr; padding: 20px; } .ps-all { grid-column: 1 / -1; } }
.ps-mis { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 22px; }
.ps-mcol h3 { margin: 0 0 10px; font-size: 11.5px; font-weight: 500; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.ps-mcol ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.ps-m { display: grid; grid-template-columns: 1fr auto; gap: 7px 12px; align-items: center; padding: 13px 16px; }
.ps-m.is-done { --fr: var(--line); opacity: .6; }
.ps-ml { font-size: 14px; } .ps-mr { font-size: 13px; color: var(--brass-ink); white-space: nowrap; }
.ps-mp { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.ps-mc { justify-self: end; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
.ps-grid { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 14px; }
.ps-l { display: grid; gap: 7px; align-content: start; justify-items: center; text-align: center; min-height: 140px; padding: 30px 10px 12px; }
.ps-ln { position: absolute; z-index: 1; left: 50%; top: -10px; translate: -50% 0; display: grid; place-items: center; width: 30px; height: 20px; background: var(--bg); color: var(--muted); font-size: 11px; font-variant-numeric: tabular-nums; letter-spacing: .04em; }
.ps-ln::before { content: ""; position: absolute; inset: 1px 6px; rotate: 45deg; scale: .75 1.1; border: 1px solid var(--fr); z-index: -1; }
.ps-l--hw { --fr: color-mix(in srgb, #f07a1f 40%, transparent); }
.ps-l--big { --fr2: color-mix(in srgb, var(--brass) 40%, transparent); --fill: repeating-conic-gradient(from -90deg at 50% 120%, color-mix(in srgb, var(--brass) 8%, transparent) 0 2deg, transparent 2deg 10deg), var(--card); }
.ps-l--ready { --fr: var(--brass); filter: drop-shadow(0 0 7px color-mix(in srgb, var(--brass) 45%, transparent)); }
.ps-l--ready .ps-ln { color: var(--brass-ink); }
.ps-l--locked { opacity: .5; }
.ps-l--done .ps-li, .ps-l--done .ps-lt { opacity: .5; }
.ps-li { display: flex; gap: 4px; justify-content: center; min-height: 28px; align-items: center; }
.ps-li .ps-ic { width: 22px; height: 28px; }
.ps-li .wc-piece.ps-ic { width: 22px; height: 22px; }
.ps-g5 { display: inline-flex; align-items: center; } .ps-g5 .gem { width: 18px; height: 18px; flex: none; } .ps-g5 .gem + .gem { margin-left: -7px; }   /* un joyau de chaque couleur : les cinq, qui se chevauchent */
.ps-li .ps-g5.ps-ic { width: auto; height: auto; }
.ps-lt { font-size: 12px; line-height: 1.35; }
.ps-ok { font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--muted); }
.ps-ok::before { content: "✓ "; color: var(--brass-ink); }
#ps-cur { --fr: var(--text); }
.ps-tab { width: 100%; border-collapse: collapse; font-size: 14px; }
.ps-tab th, .ps-tab td { padding: 9px 10px; border-bottom: 1px solid var(--line); text-align: left; }
.ps-tab th { font-size: 11px; font-weight: 500; letter-spacing: .16em; text-transform: uppercase; color: var(--brass-ink); border-bottom-color: var(--brass-line); }
/* ---------- Page du passe, « Frise graduée » (design/halloween/passe-sobre.html, Q2) ---------- */
.pq-head { --fr: color-mix(in srgb, var(--brass) 38%, transparent); --fr2: color-mix(in srgb, var(--brass) 18%, transparent); position: relative; isolation: isolate; padding: 6px 0 4px; text-align: center; }
/* décor : deux chauves-souris qui volent autour du titre */
.pq-bat { position: absolute; z-index: -1; width: 46px; height: 30px; background: var(--hw-bat) center / contain no-repeat; opacity: .75; pointer-events: none; animation: pq-bat 7s ease-in-out infinite; }
.pq-bat--1 { left: 14%; top: 18px; } .pq-bat--2 { right: 16%; top: 44px; width: 32px; height: 21px; animation-delay: -3s; animation-duration: 9s; }
@keyframes pq-bat { 0%, 100% { translate: 0 0; rotate: -4deg; } 25% { translate: 18px -10px; rotate: 6deg; } 50% { translate: 34px 4px; rotate: -2deg; } 75% { translate: 12px 12px; rotate: 5deg; } }
/* moins d'animations (boot.js, docs/animations.md) */ :where(:root[data-motion="reduce"]) .pq-bat { animation: none; }
.pq-k { margin: 0 0 8px; font-size: 11px; letter-spacing: .32em; text-transform: uppercase; color: var(--brass-ink); }
.pq-lv { margin: 0; font-size: clamp(26px, 4vw, 36px); font-weight: 300; letter-spacing: .14em; text-transform: uppercase; }
.pq-lv b { font-weight: 400; color: var(--brass-ink); } .pq-lv span { font-size: .42em; letter-spacing: .16em; color: var(--muted); }
.pq-frise { position: relative; height: 1px; margin: 30px 12px 44px; background: var(--fr); }
.pq-fill { position: absolute; left: 0; top: -1px; width: 0; height: 3px; background: linear-gradient(90deg, var(--brass), #e8792b); transition: width .8s ease; }
.pq-fill::after { content: ""; position: absolute; right: -7px; top: -5.5px; width: 14px; height: 14px; rotate: 45deg; background: #e8792b; box-shadow: 0 0 0 4px var(--bg), 0 0 14px rgba(232, 121, 43, .6); }
.pq-mk { position: absolute; top: 12px; translate: -50% 0; white-space: nowrap; display: grid; justify-items: center; gap: 4px; font-size: 10.5px; color: var(--muted); font-variant-numeric: tabular-nums; }
.pq-mk i { position: absolute; top: -16px; left: 50%; width: 1px; height: 8px; background: var(--fr); }
.pq-mk.is-on { color: var(--brass-ink); } .pq-mk.is-on i { background: var(--brass); }
.pq-mk--25 { left: 25%; } .pq-mk--50 { left: 50%; } .pq-mk--75 { left: 75%; }
.pq-mk--0, .pq-mk--100 { letter-spacing: .14em; text-transform: uppercase; color: var(--brass-ink); }   /* les deux bouts : le niveau atteint et le suivant */
.pq-mk--0 { left: 0; translate: 0 0; justify-items: start; } .pq-mk--0 i { left: 0; }
.pq-mk--100 { left: 100%; translate: -100% 0; justify-items: end; } .pq-mk--100 i { left: auto; right: 0; }
.pq-meta { margin: 0; font-size: 14px; color: var(--muted); } .pq-meta b { color: var(--text); font-weight: 500; } .pq-meta .ev-ticket { margin-right: 6px; }
.pq-sep { display: inline-block; width: 5px; height: 5px; margin: 0 10px 2px; rotate: 45deg; background: var(--fr); }
.pq-all { margin-top: 16px; } .pq-end { margin: 12px 0 0; font-size: 10.5px; letter-spacing: .2em; text-transform: uppercase; color: var(--muted); }
/* missions : celles du jour en une rangée de trois cartes, celles de l'évènement dessous */
.ps .ps-mis { grid-template-columns: 1fr; gap: 26px; }
.ps .ps-mcol ul { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 14px; }
/* le rail des niveaux */
.pq-rail-wrap { --fr: color-mix(in srgb, var(--brass) 38%, transparent); --fr2: color-mix(in srgb, var(--brass) 18%, transparent); --g: 12px; container: pqrail / inline-size; display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 12px; }
.pq-rail { --pad: 18px; position: relative; list-style: none; margin: 0; padding: 26px var(--pad) 26px; display: flex; gap: var(--g); overflow-x: hidden; scrollbar-width: none; }   /* ordinateur : seulement les flèches et la pagination ; les marges laissent la place aux halos des cases (le défilement rogne tout ce qui dépasse) */
.pq-rail::-webkit-scrollbar { display: none; }
@container pqrail (width < 1448px) { .pq-rail { -webkit-mask: linear-gradient(90deg, transparent, #000 48px, #000 calc(100% - 48px), transparent); mask: linear-gradient(90deg, transparent, #000 48px, #000 calc(100% - 48px), transparent); } }   /* moins de 10 cases : celles coupées aux bords s'estompent */
.pq-rail:focus-visible { outline: 1px solid var(--brass); outline-offset: 2px; }
/* une dizaine entière dans le rail (10 cases, flèches et marges ôtées) ; les cases rapetissent jusqu'à 120 px, puis le rail en montre moins */
.pq-l { position: relative; flex: 0 0 clamp(120px, (100cqi - 104px - 36px - 9 * var(--g)) / 10, 150px); display: grid; justify-items: center; align-content: start; gap: 14px; }
.pq-l::before { content: ""; position: absolute; top: 16px; left: calc(var(--g) / -2); right: calc(var(--g) / -2); height: 1px; background: var(--fr2); }   /* la ligne du temps */
.pq-l.is-done::before, .pq-l.is-ready::before { height: 2px; margin-top: -.5px; background: var(--brass); }
/* le passage du dernier niveau atteint au premier niveau à atteindre : la ligne dorée s'estompe (de même sur la frise de la série de connexion, .fr-nd) */
.pq-l:is(.is-done, .is-ready):has(+ .pq-l.is-locked)::before { background: linear-gradient(90deg, var(--brass) 50%, color-mix(in srgb, var(--brass) 45%, transparent)); }
.pq-l:is(.is-done, .is-ready) + .pq-l.is-locked::before { height: 2px; margin-top: -.5px; background: linear-gradient(90deg, color-mix(in srgb, var(--brass) 45%, transparent), var(--fr2)) 0 0 / 50% 100% no-repeat, linear-gradient(var(--fr2), var(--fr2)) 100% 50% / 50% 1px no-repeat; }
.pq-l:first-child::before { left: 50%; } .pq-l:last-child::before { right: 50%; }
.pq-n { position: relative; z-index: 1; display: grid; place-items: center; width: 34px; height: 34px; }
.pq-n::before { content: ""; position: absolute; inset: 5px; rotate: 45deg; border: 1px solid var(--fr); background: var(--bg); transition: background .25s ease, border-color .25s ease; }
.pq-n b { position: relative; font-size: 11.5px; font-weight: 500; color: var(--muted); font-variant-numeric: tabular-nums; }
.pq-l.is-done .pq-n::before { background: color-mix(in srgb, var(--brass) 30%, var(--bg)); border-color: var(--brass); } .pq-l.is-done .pq-n b { color: var(--text); }
.pq-l.is-ready .pq-n::before { background: var(--brass); border-color: var(--brass); } .pq-l.is-ready .pq-n b { color: var(--on-brass); }
.pq-l.is-next .pq-n::before { border-color: #e8792b; box-shadow: 0 0 0 3px var(--bg), 0 0 12px rgba(232, 121, 43, .55); } .pq-l.is-next .pq-n b { color: #e8792b; }
.pq-l.is-big .pq-n { width: 44px; height: 44px; margin: -5px 0; } .pq-l.is-big .pq-n b { font-size: 14px; }   /* grande étape : losange plus grand, centré sur la ligne ; la case reste de la même taille */
.pq-l .ps-l { width: 100%; aspect-ratio: 1; box-sizing: border-box; min-height: 0; padding: 12px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 9px; }   /* un carré, contenu centré */
.pq-l.is-locked .ps-l { opacity: .55; }
.pq-l.is-next .ps-l { --fr: #e8792b; opacity: 1; }
/* L'état d'une case se lit à son fond et à son contour (pas de texte) : à atteindre (le style de base), récupérée (fond braise sombre), à récupérer (fond braise clair et aura qui pulse ;
   toute la case est le bouton, .pq-claim). Grandes étapes (dizaines, .is-big) : un dégradé orange par-dessus le fond et un filet clair ; paliers 25, 50, 75 et 100 (.is-major) : le même, accentué. */
.pq-l { --ember: #e8792b; }
.pq-l .ps-l { --ring: var(--card); --tint: linear-gradient(transparent, transparent); }
.pq-l .ps-l::after { background: var(--tint), var(--fill); box-shadow: inset 0 0 0 4px var(--ring), inset 0 0 0 5px var(--fr2); }
.pq-sq { font: inherit; color: inherit; text-align: center; }
.pq-claim { width: 100%; margin: 0; }
button.pq-sq { cursor: var(--cur-hand, pointer); }
.pq-l.is-done .ps-l { --fill: color-mix(in srgb, var(--ember) 22%, var(--card)); --ring: transparent; --fr: color-mix(in srgb, var(--ember) 55%, transparent); --fr2: color-mix(in srgb, var(--ember) 28%, transparent); }
.pq-l.is-ready .ps-l { --fill: color-mix(in srgb, #ffb36b 80%, var(--card)); --ring: transparent; --fr: #ffd6a8; --fr2: color-mix(in srgb, #fff 50%, transparent); color: #2a1406; animation: pq-aura 2.2s ease-in-out infinite; }
.pq-l.is-ready .ps-l:hover { --fill: #ffc58f; }
.pq-l.is-ready .ps-l:focus-visible { outline: 2px solid var(--text); outline-offset: 3px; }
@keyframes pq-aura { 0%, 100% { filter: drop-shadow(0 0 3px rgba(255, 160, 70, .45)); } 50% { filter: drop-shadow(0 0 14px rgba(255, 160, 70, .95)); } }
:where(:root[data-motion="reduce"]) .pq-l.is-ready .ps-l { animation: none; filter: drop-shadow(0 0 8px rgba(255, 160, 70, .7)); }   /* moins d'animations : l'aura reste, sans pulser */
.pq-l.is-big .ps-l { --tint: linear-gradient(160deg, color-mix(in srgb, var(--ember) 42%, transparent), color-mix(in srgb, var(--ember) 6%, transparent) 75%); --fr: color-mix(in srgb, #ffc890 75%, transparent); --fr2: color-mix(in srgb, #ffc890 30%, transparent); }
.pq-l .ps-lt { font-size: 11.5px; line-height: 1.3; }
.pq-l.is-major .ps-l { --tint: linear-gradient(160deg, color-mix(in srgb, var(--ember) 58%, transparent), color-mix(in srgb, var(--ember) 14%, transparent) 75%); --fr: #ffc890; --fr2: color-mix(in srgb, #ffc890 50%, transparent);
  filter: drop-shadow(0 0 9px color-mix(in srgb, var(--ember) 50%, transparent)); }
.pq-l.is-major.is-locked .ps-l { opacity: .8; }
.pq-l.is-major .pq-n { width: 50px; height: 50px; margin: -8px 0; } .pq-l.is-major .pq-n b { font-size: 15px; }
.pq-l.is-major .pq-n::before { border-color: var(--ember); box-shadow: 0 0 0 3px var(--bg), 0 0 12px rgba(232, 121, 43, .55); }
.ps-li .ev-candy.ps-ic { width: 22px; height: 22px; }
/* Comptoir · Marché aux bonbons (ComptoirView::candyMarket) : le solde de bonbons sur la plaque du solde, et le texte */
.cp-cdy { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 18px 28px; padding: 4px 8px 8px; }
.cp-cdy-bal .ev-candy { width: 30px; height: 30px; }
.cp-cdy-txt { flex: 1 1 320px; max-width: 62ch; margin: 0; color: var(--muted); line-height: 1.6; } .cp-cdy-txt b { color: var(--text); font-weight: 500; } .cp-cdy-txt a { color: var(--brass-ink); }
/* Entrée « Passe » du menu, le temps d'un évènement (partials/header.php) : le ticket du passe, teinté d'orange ; sur mobile, le badge se pose sur l'avatar de la barre du bas */
.nav-passe .ic-passe, .menu-passe .ic-passe { color: #f08a3c; }
.nav-passe .ic-passe > :not(:first-child), .menu-passe .ic-passe > :not(:first-child) { stroke: none; }   /* perforation et losange : pleins, sans le trait des icônes du menu */
.acct-anchor > .acct-new { top: -3px; left: auto; right: -3px; margin: 0; }
/* Accueil des visiteurs : bandeau d'annonce de l'évènement en cours (HomeView::eventBanner), sous l'en-tête. Une ligne alignée au centre : [emblème, nom, temps restant] texte [inscription] ;
   sur mobile, trois lignes centrées. */
.ev-annonce { position: relative; z-index: 3; background: linear-gradient(90deg, transparent, rgba(232, 121, 43, .14) 18%, rgba(232, 121, 43, .14) 82%, transparent), #0c0812; border-block: 1px solid rgba(232, 121, 43, .4); color: #f3e6d4; }
.ev-an-in { display: flex; align-items: center; justify-content: center; gap: 12px 22px; max-width: 1240px; margin: 0 auto; padding: 10px 16px; }
.ev-an-head { display: inline-flex; align-items: center; gap: 10px; flex: none; }
.ev-an-em { display: block; width: 26px; height: 26px; }
.ev-an-k { color: #f08a3c; font-weight: 500; font-size: 13px; letter-spacing: .16em; text-transform: uppercase; line-height: 1; }
.ev-an-cd { padding: 4px 9px; border: 1px solid rgba(240, 138, 60, .45); color: #e9d6bd; font-size: 12px; line-height: 1; letter-spacing: .04em; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ev-an-tx { margin: 0; font-size: 14px; line-height: 1.4; color: #e6d7c3; }
.ev-annonce .ev-an-go { flex: none; }
@media (max-width: 760px) {
  .ev-an-in { flex-direction: column; gap: 8px; padding: 12px 16px; text-align: center; }
  .ev-an-tx { font-size: 13.5px; }
}
/* Comptoir, paquets Halloween : l'avertissement du dernier jour */
.cp-hw-warn { margin: 6px 0 0; color: #f08a3c; font-size: 13px; }
/* Marché aux bonbons (ComptoirView::candyMarket) : une étagère par sorte de cosmétique, chaque article avec son aperçu, sa rareté et son prix */
.cdy-shelves { margin-top: 8px; }
.cdy-kind { margin: 28px 0 12px; font-size: 12.5px; font-weight: 500; letter-spacing: .2em; text-transform: uppercase; color: var(--brass-ink); text-align: center; }
.cdy-grid { list-style: none; margin: 0; padding: 0; display: grid; gap: 14px; grid-template-columns: repeat(auto-fill, minmax(196px, 1fr)); }   /* assez large pour le bouton « Acheter · prix · bonbon » entier */
.cdy-grid--banner, .cdy-grid--style { grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.cdy-it { display: grid; justify-items: center; align-content: start; gap: 6px; padding: 12px 10px 14px; border: 1px solid var(--line); background: color-mix(in srgb, var(--card) 70%, transparent); text-align: center; }
.cdy-it.is-mine { border-color: var(--brass-line); }
.cdy-vis { display: grid; place-items: center; width: 100%; height: 124px; }
.cdy-back .cos-back-prev { height: 118px; }
.cdy-av { width: 96px; height: 96px; border-radius: 50%; }
.cdy-frame .pf-avatar img { width: 66px; height: 66px; }
.cdy-banner .pf-banner { width: 100%; height: 92px; }
.cdy-style .pe-style { width: 100%; height: 92px; }
.cdy-emblem .cos-emb-prev { width: 58px; height: 58px; }
.cdy-name { font-size: 13.5px; line-height: 1.3; color: var(--text); }
.cdy-rar { font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--rc, var(--muted)); }
.cdy-rar.r1 { --rc: var(--r1); } .cdy-rar.r2 { --rc: var(--r2); } .cdy-rar.r3 { --rc: var(--r3); } .cdy-rar.r4 { --rc: var(--r4); } .cdy-rar.r5 { --rc: var(--r5); } .cdy-rar.r6 { --rc: var(--r6); } .cdy-rar.r7 { --rc: var(--r7); }
.cdy-it .cp-buy, .cdy-it .cp-sold { margin-top: 4px; }
.cdy-it .cdy-sold { padding-inline: 22px; }
.cdy-all { margin: 24px 0 8px; text-align: center; color: var(--muted); }
/* Bouton d'achat : contenu centré (marges égales), largeur bornée, jamais rogné par les angles découpés */
html body .cdy-it .cdy-buy { width: 100%; max-width: 210px; justify-content: center; gap: 10px; padding: 0 16px; }
.cdy-buy .rc-cost { gap: 6px; padding-left: 10px; }
.cdy-buy .ev-candy { width: 16px; height: 16px; flex: none; }
@media (max-width: 640px) { .cdy-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } html body .cdy-it .cdy-buy { gap: 7px; padding: 0 10px; } .cdy-buy .rc-label { letter-spacing: .06em; } .cdy-buy .rc-cost { padding-left: 7px; } .cdy-grid--banner, .cdy-grid--style { grid-template-columns: minmax(0, 1fr); } .cdy-vis { height: 104px; } .cdy-back .cos-back-prev { height: 100px; } .cdy-av { width: 84px; height: 84px; } }
/* Modifier le profil : avatars, dos et emblèmes à débloquer ; le dos habituel garde son dessin même quand un autre dos est porté */
.av-opt.is-locked { opacity: .42; filter: grayscale(.7); cursor: not-allowed; }
.pe-back { display: block; width: 76px; aspect-ratio: 5 / 7; }
.pe-back.card { position: relative; }
:root[data-back] .pe-back .card-back { background: none; }
:root[data-back] .pe-back .card-back::before, :root[data-back] .pe-back .card-back::after, :root[data-back] .pe-back .card-back .fan { display: block; }
:root[data-back] .pe-back .card-back .logo { display: grid; }
.pe-opt:has(input:checked) :is(.pe-back, .cos-emb-prev) { outline: 2px solid var(--brass); outline-offset: 3px; }
.pe-opt.is-locked :is(.pe-back, .cos-emb-prev) { filter: grayscale(1); }
.cos-emb-none { border: 1px dashed var(--line); border-radius: 50%; }
/* les bonbons (EventPass::candiesOf) : l'icône (EventPass::candySprite), le solde sous la frise du haut */
.ev-candy { width: 1.15em; height: 1.15em; flex: none; vertical-align: -.22em; }
.top-end .top-wallet .ev-candy { width: 20px; height: 20px; } .wallet-row .ev-candy { width: 1.4em; height: 1.4em; vertical-align: middle; }
.pq-candies { margin: 14px 0 0; font-size: 13px; color: var(--muted); } .pq-candies b { color: var(--text); font-weight: 500; } .pq-candies .ev-candy { margin-right: 6px; }
.pq-candies a { color: var(--brass-ink); }
.pq-arr { display: grid; place-items: center; width: 40px; height: 40px; padding: 0; border: 1px solid var(--fr); background: var(--card); color: var(--brass-ink); cursor: pointer; rotate: 45deg; transition: border-color .2s ease; }
.pq-arr svg { width: 18px; height: 18px; rotate: -45deg; fill: none; stroke: currentColor; stroke-width: 1.6; }
.pq-arr:hover { border-color: var(--brass); } .pq-arr:focus-visible { outline: 2px solid var(--brass); outline-offset: 3px; }
/* la pagination : une case par dizaine, avec sa jauge (niveaux atteints) ; la dizaine affichée est soulignée d'un losange */
.pq-decs { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin-top: 8px; }
.pq-dec { --c: 4px; position: relative; display: grid; place-items: center; min-width: 74px; height: 34px; padding: 0 10px; border: 0; background: none; color: var(--muted); font: inherit; font-size: 12px; letter-spacing: .06em; font-variant-numeric: tabular-nums; cursor: pointer; isolation: isolate;
  transition: color .2s ease; }
.pq-dec::before, .pq-dec::after, .pq-dec-f { content: ""; position: absolute; z-index: -1; pointer-events: none;
  clip-path: polygon(0 calc(var(--c) * 2), var(--c) calc(var(--c) * 2), var(--c) var(--c), calc(var(--c) * 2) var(--c), calc(var(--c) * 2) 0, calc(100% - var(--c) * 2) 0, calc(100% - var(--c) * 2) var(--c), calc(100% - var(--c)) var(--c), calc(100% - var(--c)) calc(var(--c) * 2), 100% calc(var(--c) * 2), 100% calc(100% - var(--c) * 2), calc(100% - var(--c)) calc(100% - var(--c) * 2), calc(100% - var(--c)) calc(100% - var(--c)), calc(100% - var(--c) * 2) calc(100% - var(--c)), calc(100% - var(--c) * 2) 100%, calc(var(--c) * 2) 100%, calc(var(--c) * 2) calc(100% - var(--c)), var(--c) calc(100% - var(--c)), var(--c) calc(100% - var(--c) * 2), 0 calc(100% - var(--c) * 2)); }
.pq-dec::before { inset: 0; background: var(--line); transition: background .2s ease; }
.pq-dec::after { inset: 1px; background: var(--card); }
.pq-dec-f { inset: 1px; z-index: 0; }   /* le fond qui se remplit : niveaux atteints de la dizaine */
.pq-dec-r { position: relative; z-index: 1; line-height: 34px; }
.pq-dec-f i { position: absolute; inset: 0 auto 0 0; background: color-mix(in srgb, var(--brass) 28%, var(--card)); }
.pq-dec.is-cur .pq-dec-f i { background: linear-gradient(90deg, color-mix(in srgb, var(--brass) 28%, var(--card)), color-mix(in srgb, #e8792b 34%, var(--card))); }
.pq-dec.is-done { color: var(--brass-ink); } .pq-dec.is-done::before { background: color-mix(in srgb, var(--brass) 45%, transparent); }
.pq-dec:hover { color: var(--text); } .pq-dec:hover::before { background: var(--brass); }
.pq-dec.is-view { color: var(--text); } .pq-dec.is-view::before { background: var(--brass); }
.pq-dec.is-view .pq-dec-r::after { content: ""; position: absolute; left: 50%; bottom: -7px; width: 7px; height: 7px; margin-left: -3.5px; rotate: 45deg; background: #e8792b; }
.pq-dec:focus-visible { outline: 2px solid var(--brass); outline-offset: 2px; }
@media (max-width: 640px) { .pq-rail-wrap { grid-template-columns: minmax(0, 1fr); } .pq-arr { display: none; } .pq-rail { overflow-x: auto; scroll-snap-type: x mandatory; } .pq-l { flex-basis: 136px; scroll-snap-align: center; } .pq-frise { margin-inline: 16px; } .pq-dec { min-width: 62px; } }
/* décor d'Halloween de la page : une citrouille devant chaque titre de section, des bougies au bout de la frise */
.ps h2::before { content: ""; flex: none; width: 18px; height: 16px; background: var(--hw-pumpkin) center / contain no-repeat; filter: drop-shadow(0 0 4px rgba(255, 170, 60, .5)); }
.pq-frise::after { content: ""; position: absolute; right: -14px; top: -34px; width: 22px; height: 28px; background: var(--hw-candles) center bottom / contain no-repeat; filter: drop-shadow(0 0 5px rgba(255, 170, 70, .55)); }
.pq-rail-wrap { position: relative; }
/* Comptoir : le ticket dans la roue, les gains et la tuile (ses traits sont en currentColor) */
.wh .tk, .cp-tile .cp-tk, .cp-gains .cp-tk { color: var(--brass-ink); }


/* ---------- Petites décorations d'Halloween (design/halloween/petites-decos.html : 1, 5, 7 et 12), seulement avec :root[data-event="halloween"] ---------- */
:root {
  --hw-web-mark: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 20%27%3E%3Cg fill=%27none%27 stroke=%27%23c9a45c%27 stroke-width=%27.9%27%3E%3Cpath d=%27M10 0V20M0 10H20M0 0L20 20M20 0L0 20%27/%3E%3Cpath d=%27M10 3.5L14.6 5.4 16.5 10 14.6 14.6 10 16.5 5.4 14.6 3.5 10 5.4 5.4Z%27/%3E%3Cpath d=%27M10 6.5L12.5 7.5 13.5 10 12.5 12.5 10 13.5 7.5 12.5 6.5 10 7.5 7.5Z%27/%3E%3C/g%3E%3C/svg%3E");
  --hw-web-mark-light: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 20 20%27%3E%3Cg fill=%27none%27 stroke=%27%239d7b2a%27 stroke-width=%27.9%27%3E%3Cpath d=%27M10 0V20M0 10H20M0 0L20 20M20 0L0 20%27/%3E%3Cpath d=%27M10 3.5L14.6 5.4 16.5 10 14.6 14.6 10 16.5 5.4 14.6 3.5 10 5.4 5.4Z%27/%3E%3Cpath d=%27M10 6.5L12.5 7.5 13.5 10 12.5 12.5 10 13.5 7.5 12.5 6.5 10 7.5 7.5Z%27/%3E%3C/g%3E%3C/svg%3E");
  --hw-ghost: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 40 50%27%3E%3Cpath d=%27M6 46V18a14 14 0 0 1 28 0v28l-4.6-3.4-4.6 3.4-4.8-3.4-4.8 3.4-4.6-3.4Z%27 fill=%27%23f2e9df%27 opacity=%27.92%27/%3E%3Cellipse cx=%2715%27 cy=%2720%27 rx=%272.4%27 ry=%273.4%27 fill=%27%231a0d06%27/%3E%3Cellipse cx=%2725%27 cy=%2720%27 rx=%272.4%27 ry=%273.4%27 fill=%27%231a0d06%27/%3E%3Cellipse cx=%2720%27 cy=%2730%27 rx=%272.6%27 ry=%273.4%27 fill=%27%231a0d06%27/%3E%3C/svg%3E");
}
/* Plus d'air au-dessus du pied de page : le cimetière y tient (son pied reste sur le filet, voir .ev-ground) */
:root[data-event="halloween"] { --hw-foot-gap: clamp(110px, 13vw, 170px); }
:root[data-event="halloween"] .foot { margin-top: var(--hw-foot-gap); }
.ev-ground > * { margin-bottom: calc(-1 * var(--hw-foot-gap, clamp(40px, 6vw, 72px))); }
/* 1 · Badge « trois cierges » (design/halloween/bougies.html, B3) : l'étincelle des menus, de la cloche, des timbres et des signets devient trois petits cierges dont la flamme vacille */
:root[data-event="halloween"] :is(.nav-new, .social-dot, .st-new, .bk-new) { filter: drop-shadow(0 0 3px #ffb347); transform-origin: 50% 100%; animation-name: hw-flame; }
:root[data-event="halloween"] :is(.nav-new, .social-dot, .st-new, .bk-new)::before { clip-path: none; background: var(--hw-candles) center bottom / contain no-repeat; }
:root[data-event="halloween"] .nav-new { width: 18px; height: 18px; margin-top: -6px; }
:root[data-event="halloween"] .social-dot { width: 17px; height: 17px; }
:root[data-event="halloween"] .bk-new { width: 16px; height: 16px; }
:root[data-event="halloween"] .st-new { width: 17cqw; }
@keyframes hw-flame { 0%, 100% { rotate: 0deg; scale: 1 1; } 30% { scale: .96 1.04; } 60% { scale: 1.03 .97; } }
/* 5 · Logo : une toile tendue dans le losange intérieur ; au survol, une araignée descend au bout de son fil sous la pointe du losange */
:root[data-event="halloween"] .brand { position: relative; }
:root[data-event="halloween"] .brand .mark::before { background: var(--hw-web-mark) center / 100% 100% no-repeat; }
:root[data-theme="light"][data-event="halloween"] .brand .mark::before { background-image: var(--hw-web-mark-light); }
:root[data-event="halloween"] .brand::before { content: ""; position: absolute; left: 16px; top: calc(50% + 15px); width: 1px; height: 0; background: var(--brass-line); pointer-events: none; transition: height .9s cubic-bezier(.5, 0, .3, 1); }
:root[data-event="halloween"] .brand::after { content: ""; position: absolute; left: 10px; top: calc(50% + 14px); width: 13px; height: 14px; background: var(--ev-spider); -webkit-mask: var(--hw-spider) center / contain no-repeat; mask: var(--hw-spider) center / contain no-repeat;
  opacity: 0; pointer-events: none; transition: translate .9s cubic-bezier(.5, 0, .3, 1), opacity .3s ease; }
:root:where([data-motion="reduce"])[data-event="halloween"] .brand::before, :root:where([data-motion="reduce"])[data-event="halloween"] .brand::after { transition: none; }   /* moins d'animations */
:root[data-event="halloween"] .brand:hover::before { height: 24px; }
:root[data-event="halloween"] .brand:hover::after { opacity: 1; translate: 0 22px; }
/* téléphone : le logo de la barre du bas ; au toucher, l'araignée monte au bout de son fil (succès « Arachnophile », succes-badge.js) */
:root[data-event="halloween"] .bn-brand { position: relative; }
:root[data-event="halloween"] .bn-brand::before { content: ""; position: absolute; left: 50%; bottom: calc(50% + 9px); width: 1px; height: 0; background: var(--brass-line); pointer-events: none; transition: height .5s cubic-bezier(.5, 0, .3, 1); }
:root[data-event="halloween"] .bn-brand::after { content: ""; position: absolute; left: 50%; bottom: calc(50% + 6px); width: 13px; height: 14px; translate: -50% 0; background: var(--ev-spider); -webkit-mask: var(--hw-spider) center / contain no-repeat; mask: var(--hw-spider) center / contain no-repeat;
  opacity: 0; pointer-events: none; transition: translate .5s cubic-bezier(.5, 0, .3, 1), opacity .2s ease; }
:root[data-event="halloween"] .bn-brand:active::before { height: 22px; }
:root[data-event="halloween"] .bn-brand:active::after { opacity: 1; translate: -50% -20px; }
:root:where([data-motion="reduce"])[data-event="halloween"] .bn-brand::before, :root:where([data-motion="reduce"])[data-event="halloween"] .bn-brand::after { transition: none; }
/* 7 · Filets ornés : le losange au milieu des filets (titres, pied de page) devient une citrouille */
:root[data-event="halloween"] .rule i { width: 16px; height: 15px; rotate: none; border: 0; background: var(--hw-pumpkin) center / contain no-repeat; }
:root[data-event="halloween"] .foot::after { width: 16px; height: 15px; rotate: none; border: 0; background: var(--hw-pumpkin) center / contain no-repeat; }
/* 12 · Pages vides et page introuvable : un petit fantôme qui flotte */
:root[data-event="halloween"] .notfound .nf-code::before,
:root[data-event="halloween"] .empty-coll::before { content: ""; display: block; width: 64px; height: 80px; margin: 0 auto 14px; background: var(--hw-ghost) center / contain no-repeat; animation: hw-float 3.2s ease-in-out infinite; }
@keyframes hw-float { 50% { translate: 0 -7px; } }
/* moins d'animations (boot.js, docs/animations.md) */ :root:where([data-motion="reduce"])[data-event="halloween"] :is(.nav-new, .social-dot, .st-new, .bk-new), :root:where([data-motion="reduce"])[data-event="halloween"] .notfound .nf-code::before, :root:where([data-motion="reduce"])[data-event="halloween"] .empty-coll::before { animation: none; }
/* Niveaux bonus du passe (au-delà du niveau 100) : un cadre et le choix de la couleur du joyau */
.ps-bonus { display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 14px 24px; margin-top: 18px; padding: 18px 22px; }
.ps-bonus.is-ready { --fr: var(--brass); }
.ps-bonus h3 { margin: 0 0 6px; font-size: 13px; font-weight: 500; letter-spacing: .18em; text-transform: uppercase; color: var(--brass-ink); }
.ps-bonus p { margin: 0; font-size: 13.5px; color: var(--muted); } .ps-bonus p b { color: var(--text); font-weight: 500; }
.ps-bform { display: grid; gap: 12px; justify-items: end; margin: 0; }
.ps-gems { display: flex; gap: 8px; margin: 0; padding: 0; border: 0; }
.ps-gem { display: grid; justify-items: center; gap: 3px; padding: 6px 8px; border: 1px solid var(--line); cursor: var(--cur-hand); font-size: 10.5px; letter-spacing: .06em; color: var(--muted); }
.ps-gem input { position: absolute; opacity: 0; pointer-events: none; }
.ps-gem .gem { width: 24px; height: 24px; }
.ps-gem:has(input:checked) { border-color: var(--brass); color: var(--text); background: color-mix(in srgb, var(--brass) 10%, transparent); }
.ps-gem:has(input:focus-visible) { outline: 2px solid var(--brass); outline-offset: 2px; }
@media (max-width: 700px) { .ps-bonus { grid-template-columns: 1fr; } .ps-bform { justify-items: start; } .ps-gems { flex-wrap: wrap; } }
/* Pendant Halloween, en tête des paliers : le palier du paquet Halloween, dessiné comme le palier doré (médaillon + règle graduée), en orange ; une graduation tous les 3 paquets */
.op-encart .hw-track { margin-bottom: -4px; }   /* grille de 10 px - 4 : le même écart (6 px) qu'entre les paliers doré et diamanté */
.op-encart .hw-track .rg-fg { stroke: #e8792b; }
.op-encart .hw-track .gt-text::before { background: linear-gradient(135deg, #f5a05a, #c9561a); }
.op-encart .hw-track .gt-bar i, .op-encart--r2 .hw-track .gt-bar i, .op-encart--r2 .hw-track .gt-bar i::after { background: #e8792b; }
.op-encart--r2 .hw-track .gt-bar { background: linear-gradient(var(--brass-line), var(--brass-line)) 0 50% / 100% 1px no-repeat,
    repeating-linear-gradient(90deg, var(--brass-line) 0 1px, transparent 1px calc(100% / 5)) 0 50% / calc(100% + 1px) 9px no-repeat; }
/* Le bandeau du passe, en une ligne, est CENTRÉ entre l'en-tête (ou le bandeau de la récompense du jour) et le carrousel : la même marge --evg au-dessus et au-dessous.
   Le haut de la page (calculé pour centrer le paquet dans la fenêtre) est alors remplacé par cette marge. */
main.opener:has(> .ev-pass) { --evg: clamp(22px, 3vw, 36px); padding-top: var(--evg); }
main.opener:has(> .streak-banner) .ev-pass { margin-top: 0; }
.opener > .ev-pass { margin: 0 auto var(--evg); }

/* ---------- Corrections mobiles (contrôle du 25/10/2026) ---------- */
/* la cloche flottante se retire quand le menu Compte de la barre du bas est ouvert (elle couvrait « Déconnexion ») */
body:has(.bottom-nav .acct-dropdown:not([hidden])) .notif-float { visibility: hidden; }
/* visite guidée : le panneau passe en haut quand la zone éclairée est en bas de l'écran (tutorial.js, .is-top) */
.tour-panel.is-top { bottom: auto; top: max(12px, env(safe-area-inset-top, 0px)); }
/* Collection, filtres : l'aide de « Correspondance » passe sous les boutons au lieu d'être écrasée */
.tag-mode { flex-wrap: wrap; } .tag-mode-help { flex: 1 1 180px; min-width: 0; }
@media (max-width: 640px) {
  /* Paquets thématiques : les noms longs se coupent en syllabes et ont une ligne de plus */
  .th-item .th-name, .th-item.is-long .th-name, .th-item.is-xlong .th-name { max-height: 5.2em; font-size: 10px; letter-spacing: .03em; hyphens: auto; overflow-wrap: anywhere; }
  /* Social, proposition d'échange : le plateau tient sur une colonne plus basse */
  .ap-tray.tr-tray { grid-template-columns: minmax(0, 1fr); gap: 8px; margin-top: 10px; }
  .tr-tray .tr-side { padding: 8px 10px 10px; }
  .tr-tray .wq-actions .btn { padding: 9px 12px; }
  /* grands titres de section : moins espacés, pour ne pas se casser sur trois lignes */
  .jxp-title--sec { font-size: 22px; --ls: .16em; }
  /* zones tactiles trop petites */
  a.bn-brand { min-width: 40px; min-height: 40px; align-items: center; justify-content: center; }
  .sel-clear { min-height: 34px; padding: 8px 4px; }
  /* livre des succès : la légende d'un timbre s'amène au-dessus de la barre du bas (succes.js) */
  .bk-caption { scroll-margin-bottom: 96px; }
}
/* série de connexion : quand la frise est étroite (moins de 80 px par jour, streak.js), libellés et anneaux plus petits pour ne pas se chevaucher */
.fr-track.is-tight .fr-nd { grid-template-rows: 18px 48px auto; }
.fr-track.is-tight .fr-nd .rs-nd { width: 48px; height: 48px; }
.fr-track.is-tight .fr-l { font-size: 10px; }
.fr-track.is-tight .fr-lb { padding: 0 1px; overflow-wrap: anywhere; }

/* >>> COSMÉTIQUES D'HALLOWEEN (généré par design/cosmetiques/build-site.php : ne pas modifier à la main) >>> */
/* Dos de carte (Cosmetics::BACK) : <html data-back="…"> (meta wc-back, assets/boot.js) habille toutes les cartes face cachée ; .cos-back-prev : aperçu (Marché, Modifier le profil) */
:root[data-back] .card-back, .cos-back-prev { background: var(--back-img) center / 100% 100% no-repeat; }
:root[data-back] .card-back::before, :root[data-back] .card-back::after, :root[data-back] .card-back > * { display: none; }
.cos-back-prev { display: block; aspect-ratio: 5 / 7; }
:root[data-back="back-hw-lanterne"] .card-back, .cos-back-prev.cos-back-hw-lanterne { --back-img: url("cosmetics/back-hw-lanterne.svg"); }
:root[data-back="back-hw-manoir"] .card-back, .cos-back-prev.cos-back-hw-manoir { --back-img: url("cosmetics/back-hw-manoir.svg"); }
:root[data-back="back-hw-sabbat"] .card-back, .cos-back-prev.cos-back-hw-sabbat { --back-img: url("cosmetics/back-hw-sabbat.svg"); }
:root[data-back="back-hw-grimoire"] .card-back, .cos-back-prev.cos-back-hw-grimoire { --back-img: url("cosmetics/back-hw-grimoire.svg"); }
:root[data-back="back-hw-envol"] .card-back, .cos-back-prev.cos-back-hw-envol { --back-img: url("cosmetics/back-hw-envol.svg"); }
:root[data-back="back-hw-cimetiere"] .card-back, .cos-back-prev.cos-back-hw-cimetiere { --back-img: url("cosmetics/back-hw-cimetiere.svg"); }
:root[data-back="back-hw-follet"] .card-back, .cos-back-prev.cos-back-hw-follet { --back-img: url("cosmetics/back-hw-follet.svg"); }
:root[data-back="back-hw-lune-sang"] .card-back, .cos-back-prev.cos-back-hw-lune-sang { --back-img: url("cosmetics/back-hw-lune-sang.svg"); }
:root[data-back="back-hw-calavera"] .card-back, .cos-back-prev.cos-back-hw-calavera { --back-img: url("cosmetics/back-hw-calavera.svg"); }
:root[data-back="back-hw-friandises"] .card-back, .cos-back-prev.cos-back-hw-friandises { --back-img: url("cosmetics/back-hw-friandises.svg"); }
:root[data-back="back-hw-momie"] .card-back, .cos-back-prev.cos-back-hw-momie { --back-img: url("cosmetics/back-hw-momie.svg"); }
:root[data-back="back-hw-corbeaux"] .card-back, .cos-back-prev.cos-back-hw-corbeaux { --back-img: url("cosmetics/back-hw-corbeaux.svg"); }
/* Bannières d'Halloween (Cosmetics::BANNER) : un dessin SVG, rogné au centre */
.cos-ban-hw { background: #0c0812 center / cover no-repeat; }
.cos-ban-hw::before, .cos-ban-hw::after { content: none; }
.cos-ban-hw-manoir { background-image: url("cosmetics/ban-hw-manoir.svg"); }
.cos-ban-hw-citrouilles { background-image: url("cosmetics/ban-hw-citrouilles.svg"); }
.cos-ban-hw-cimetiere { background-image: url("cosmetics/ban-hw-cimetiere.svg"); }
.cos-ban-hw-lanternes { background-image: url("cosmetics/ban-hw-lanternes.svg"); }
.cos-ban-hw-toile { background-image: url("cosmetics/ban-hw-toile.svg"); }
.cos-ban-hw-foret { background-image: url("cosmetics/ban-hw-foret.svg"); }
.cos-ban-hw-lune-sang { background-image: url("cosmetics/ban-hw-lune-sang.svg"); }
.cos-ban-hw-morts { background-image: url("cosmetics/ban-hw-morts.svg"); }
.cos-ban-hw-friandises { background-image: url("cosmetics/ban-hw-friandises.svg"); }
.cos-ban-hw-corbeaux { background-image: url("cosmetics/ban-hw-corbeaux.svg"); }
/* Cadres d'avatar d'Halloween (Cosmetics::FRAME) : le dessin passe sous l'avatar (::before) et par-dessus (::after) ; immobiles avec « Moins d'animations » */
.cos-frame-hw { isolation: isolate; }
.cos-frame-hw img { position: relative; z-index: 1; border: 0; box-shadow: none; }
.cos-frame-hw::before, .cos-frame-hw::after { content: ""; position: absolute; left: -28.125%; top: -28.125%; width: 156.25%; height: 156.25%; pointer-events: none; background: center / contain no-repeat; }
.cos-frame-hw::before { z-index: 0; } .cos-frame-hw::after { z-index: 2; }
.cos-frame-hw-citrouilles::after { background-image: url("cosmetics/frame-hw-citrouilles-o.svg"); }
.cos-frame-hw-toile::before { background-image: url("cosmetics/frame-hw-toile-u.svg"); }
.cos-frame-hw-toile::after { background-image: url("cosmetics/frame-hw-toile-o.svg"); }
.cos-frame-hw-ronces::after { background-image: url("cosmetics/frame-hw-ronces-o.svg"); }
.cos-frame-hw-braise::after { background-image: url("cosmetics/frame-hw-braise-o.svg"); }
:where(:root[data-motion="reduce"]) .cos-frame-hw-braise::after { background-image: url("cosmetics/frame-hw-braise-o-fixe.svg"); }
.cos-frame-hw-ronde::after { background-image: url("cosmetics/frame-hw-ronde-o.svg"); }
:where(:root[data-motion="reduce"]) .cos-frame-hw-ronde::after { background-image: url("cosmetics/frame-hw-ronde-o-fixe.svg"); }
.cos-frame-hw-ossuaire::after { background-image: url("cosmetics/frame-hw-ossuaire-o.svg"); }
.cos-frame-hw-rosace::before { background-image: url("cosmetics/frame-hw-rosace-u.svg"); }
.cos-frame-hw-rosace::after { background-image: url("cosmetics/frame-hw-rosace-o.svg"); }
.cos-frame-hw-lune::before { background-image: url("cosmetics/frame-hw-lune-u.svg"); }
.cos-frame-hw-lune::after { background-image: url("cosmetics/frame-hw-lune-o.svg"); }
.cos-frame-hw-feuilles::after { background-image: url("cosmetics/frame-hw-feuilles-o.svg"); }
.cos-frame-hw-debordement::after { background-image: url("cosmetics/frame-hw-debordement-o.svg"); }
.cos-frame-hw-lanternes::after { background-image: url("cosmetics/frame-hw-lanternes-o.svg"); }
.cos-frame-hw-brume::before { background-image: url("cosmetics/frame-hw-brume-u.svg"); }
:where(:root[data-motion="reduce"]) .cos-frame-hw-brume::before { background-image: url("cosmetics/frame-hw-brume-u-fixe.svg"); }
.cos-frame-hw-brume::after { background-image: url("cosmetics/frame-hw-brume-o.svg"); }
/* Emblèmes (Cosmetics::EMBLEM) : à côté du pseudo (profil, amis, classements) */
.pf-emb-slot:empty { display: none; }
.pf-emb { display: inline-block; width: .72em; height: .72em; margin-left: .32em; vertical-align: .02em; }
.emb-img { display: inline-block; flex: none; width: 18px; height: 18px; margin-left: 6px; vertical-align: -3px; }
.cos-emb-prev { display: block; width: 48px; height: 48px; }
/* Styles de profil d'Halloween (Cosmetics::STYLE) : jetons --ps-* par style, encarts, titres ; le décor (angles, frise, objets, scène, particules) est posé par assets/profile-style.js */
/* les cartes gardent les couleurs du site (le style ne recolore que le profil) ; pas de losange devant les titres de section */
body:has(main.cos-style-hw) { --site--card: var(--card); --site--text: var(--text); --site--muted: var(--muted); --site--line: var(--line); --site--brass: var(--brass); --site--brass-ink: var(--brass-ink); --site--brass-line: var(--brass-line); --site--surface: var(--surface); --site--on-brass: var(--on-brass); --site--track: var(--track); --site--bg: var(--bg); }
main.cos-style-hw .card { --card: var(--site--card); --text: var(--site--text); --muted: var(--site--muted); --line: var(--site--line); --brass: var(--site--brass); --brass-ink: var(--site--brass-ink); --brass-line: var(--site--brass-line); --surface: var(--site--surface); --on-brass: var(--site--on-brass); --track: var(--site--track); --bg: var(--site--bg); font-family: var(--font); }
main.cos-style-hw :is(.pf-showcase-head, .pf-stats-head) h2::before { display: none; }
:where(:root[data-motion="reduce"]) main.cos-style-hw :is(.pf-name, .pf-hero, .pf-showcase, .pf-stats) { animation: none !important; }   /* Ectoplasme : pseudo qui flotte, lueur des encarts */
body:has(main.cos-style-hw-manoir) { --ps-bg: #140c22; --ps-panel: rgba(32,20,52,.92); --ps-line: rgba(201,164,92,.38); --ps-accent: #c9a45c; --ps-text: #ece2f5; --ps-tfont: italic 400 19px/1 "IM Fell English", Georgia, serif; --ps-hfont: italic 400 10px/1.2 "IM Fell English", Georgia, serif; --ps-tls: .02em; --ps-pattern: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2270%22%20height%3D%2270%22%3E%3Cpath%20d%3D%22M0%20-5L-3%20-12L-6%20-6Q-20%20-16%20-34%20-12Q-46%20-8%20-50%200Q-43%200%20-39%206Q-33%202%20-28%208Q-22%204%20-17%2010Q-11%204%20-6%209Q-3%2010%200%2014Q3%2010%206%209Q11%204%2017%2010Q22%204%2028%208Q33%202%2039%206Q43%200%2050%200Q46%20-8%2034%20-12Q20%20-16%206%20-6L3%20-12Z%22%20fill%3D%22rgba(201%2C164%2C92%2C.12)%22%20transform%3D%22translate(20%2018)%20rotate(0)%20scale(0.16)%22%2F%3E%3Cpath%20d%3D%22M0%20-5L-3%20-12L-6%20-6Q-20%20-16%20-34%20-12Q-46%20-8%20-50%200Q-43%200%20-39%206Q-33%202%20-28%208Q-22%204%20-17%2010Q-11%204%20-6%209Q-3%2010%200%2014Q3%2010%206%209Q11%204%2017%2010Q22%204%2028%208Q33%202%2039%206Q43%200%2050%200Q46%20-8%2034%20-12Q20%20-16%206%20-6L3%20-12Z%22%20fill%3D%22rgba(201%2C164%2C92%2C.08)%22%20transform%3D%22translate(52%2050)%20rotate(10)%20scale(0.12)%22%2F%3E%3C%2Fsvg%3E"); --ps-fam: "IM Fell English", Georgia, serif; }
.pe-style.cos-style-hw-manoir { background: #140c22; border-color: rgba(201,164,92,.38); } .pe-style.cos-style-hw-manoir i { background: rgba(32,20,52,.92); border-color: rgba(201,164,92,.38); } .pe-style.cos-style-hw-manoir i:first-child { border-top-color: #c9a45c; }
body:has(main.cos-style-hw-grimoire) { --ps-bg: #e6d6b0; --ps-panel: #f3e7c8; --ps-line: rgba(110,70,30,.45); --ps-accent: #8a2a18; --ps-text: #2a1a0e; --ps-name: #2a1a0e; --ps-tfont: 400 20px/1 "IM Fell English", Georgia, serif; --ps-hfont: italic 400 10.5px/1.2 "IM Fell English", Georgia, serif; --ps-tls: .01em; --ps-font: "IM Fell English", Georgia, serif; --ps-pattern: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%228%22%20height%3D%228%22%3E%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22none%22%2F%3E%3Ccircle%20cx%3D%222%22%20cy%3D%223%22%20r%3D%22.7%22%20fill%3D%22rgba(110%2C70%2C30%2C.12)%22%2F%3E%3Ccircle%20cx%3D%226%22%20cy%3D%226%22%20r%3D%22.5%22%20fill%3D%22rgba(110%2C70%2C30%2C.1)%22%2F%3E%3C%2Fsvg%3E"); --ps-fam: "IM Fell English", Georgia, serif; }
.pe-style.cos-style-hw-grimoire { background: #e6d6b0; border-color: rgba(110,70,30,.45); } .pe-style.cos-style-hw-grimoire i { background: #f3e7c8; border-color: rgba(110,70,30,.45); } .pe-style.cos-style-hw-grimoire i:first-child { border-top-color: #8a2a18; }
body:has(main.cos-style-hw-ecto) { --ps-bg: radial-gradient(120% 80% at 50% 0%, #0f3a33, #04191a 70%); --ps-panel: rgba(143,240,200,.06); --ps-line: rgba(143,240,200,.45); --ps-accent: #8ff0c8; --ps-text: #dffcf1; --ps-name: #effff8; --ps-tshadow: 0 0 8px #8ff0c8, 0 0 20px #2bb39a; --ps-glow: 0 0 14px rgba(143,240,200,.18), inset 0 0 18px rgba(143,240,200,.08); --ps-barr: 4px; --ps-tfont: 300 18px/1 var(--font); --ps-tls: .14em; --ps-fam: var(--font); }
.pe-style.cos-style-hw-ecto { background: radial-gradient(120% 80% at 50% 0%, #0f3a33, #04191a 70%); border-color: rgba(143,240,200,.45); } .pe-style.cos-style-hw-ecto i { background: rgba(143,240,200,.06); border-color: rgba(143,240,200,.45); } .pe-style.cos-style-hw-ecto i:first-child { border-top-color: #8ff0c8; }
body:has(main.cos-style-hw-veillee) { --ps-bg: linear-gradient(#2a1206, #160904); --ps-panel: rgba(58,26,10,.9); --ps-line: rgba(232,121,43,.5); --ps-accent: #f5a046; --ps-text: #f6e6d2; --ps-name: #ffe2b0; --ps-tfont: 500 18px/1 var(--font); --ps-tls: .1em; --ps-pattern: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2280%22%20height%3D%2280%22%3E%3Cpath%20d%3D%22M0%20-1L.18%20-.62L.42%20-.74L.36%20-.38L.74%20-.46L.58%20-.18L.88%20.02L.5%20.14L.56%20.36L.2%20.26L.05%20.5V.95H-.05V.5L-.2%20.26L-.56%20.36L-.5%20.14L-.88%20.02L-.58%20-.18L-.74%20-.46L-.36%20-.38L-.42%20-.74L-.18%20-.62Z%22%20fill%3D%22rgba(232%2C121%2C43%2C.10)%22%20transform%3D%22translate(20%2020)%20rotate(20)%20scale(6.9)%22%2F%3E%3Cpath%20d%3D%22M0%20-1L.18%20-.62L.42%20-.74L.36%20-.38L.74%20-.46L.58%20-.18L.88%20.02L.5%20.14L.56%20.36L.2%20.26L.05%20.5V.95H-.05V.5L-.2%20.26L-.56%20.36L-.5%20.14L-.88%20.02L-.58%20-.18L-.74%20-.46L-.36%20-.38L-.42%20-.74L-.18%20-.62Z%22%20fill%3D%22rgba(232%2C121%2C43%2C.07)%22%20transform%3D%22translate(60%2056)%20rotate(-30)%20scale(5.75)%22%2F%3E%3C%2Fsvg%3E"); --ps-fam: var(--font); }
.pe-style.cos-style-hw-veillee { background: linear-gradient(#2a1206, #160904); border-color: rgba(232,121,43,.5); } .pe-style.cos-style-hw-veillee i { background: rgba(58,26,10,.9); border-color: rgba(232,121,43,.5); } .pe-style.cos-style-hw-veillee i:first-child { border-top-color: #f5a046; }
body:has(main.cos-style-hw-friandises) { --ps-bg: #3b1d5c; --ps-panel: rgba(74,36,112,.92); --ps-line: rgba(255,210,122,.55); --ps-accent: #ffb347; --ps-text: #fff2e6; --ps-name: #ffd27a; --ps-tfont: 800 20px/1 'Sora', var(--font); --ps-tls: .02em; --ps-barr: 6px; --ps-avr: 50%; --ps-pattern: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2260%22%20height%3D%2260%22%3E%3Cg%20transform%3D%22translate(14%2014)%20rotate(20)%22%3E%3Cpath%20d%3D%22M0%20-6Q3.3%201.2%203%203.6Q0%204.8%20-3%203.6Q-3.3%201.2%200%20-6Z%22%20fill%3D%22%23fff4dc%22%2F%3E%3Cpath%20d%3D%22M-2.88%200.6Q0%201.44%202.88%200.6L3%203.6Q0%204.8%20-3%203.6Z%22%20fill%3D%22%23f4b23a%22%2F%3E%3Cpath%20d%3D%22M-2.28%20-1.8Q0%20-1.2%202.28%20-1.8L2.88%200.6Q0%201.44%20-2.88%200.6Z%22%20fill%3D%22%23e8792b%22%2F%3E%3C%2Fg%3E%3Cg%20transform%3D%22translate(46%2044)%20rotate(-30)%22%3E%3Cpath%20d%3D%22M0%20-5Q2.75%201%202.5%203Q0%204%20-2.5%203Q-2.75%201%200%20-5Z%22%20fill%3D%22%23fff4dc%22%2F%3E%3Cpath%20d%3D%22M-2.4%200.5Q0%201.2%202.4%200.5L2.5%203Q0%204%20-2.5%203Z%22%20fill%3D%22%23f4b23a%22%2F%3E%3Cpath%20d%3D%22M-1.9%20-1.5Q0%20-1%201.9%20-1.5L2.4%200.5Q0%201.2%20-2.4%200.5Z%22%20fill%3D%22%23e8792b%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); --ps-fam: 'Sora', var(--font); }
.pe-style.cos-style-hw-friandises { background: #3b1d5c; border-color: rgba(255,210,122,.55); } .pe-style.cos-style-hw-friandises i { background: rgba(74,36,112,.92); border-color: rgba(255,210,122,.55); } .pe-style.cos-style-hw-friandises i:first-child { border-top-color: #ffb347; }
body:has(main.cos-style-hw-pierre) { --ps-bg: #2a2e2c; --ps-panel: rgba(58,64,61,.95); --ps-line: rgba(150,170,120,.5); --ps-accent: #a8c27a; --ps-text: #e6e8e2; --ps-name: #dfe2da; --ps-tfont: 600 19px/1 'Cinzel', serif; --ps-tls: .16em; --ps-tshadow: 0 1px 0 rgba(255,255,255,.18), 0 -1px 0 rgba(0,0,0,.6); --ps-pattern: url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2240%22%20height%3D%2240%22%3E%3Ccircle%20cx%3D%226%22%20cy%3D%228%22%20r%3D%223%22%20fill%3D%22rgba(168%2C194%2C122%2C.10)%22%2F%3E%3Ccircle%20cx%3D%2230%22%20cy%3D%2226%22%20r%3D%225%22%20fill%3D%22rgba(168%2C194%2C122%2C.07)%22%2F%3E%3Ccircle%20cx%3D%2220%22%20cy%3D%224%22%20r%3D%221%22%20fill%3D%22rgba(255%2C255%2C255%2C.06)%22%2F%3E%3C%2Fsvg%3E"); --ps-fam: 'Cinzel', serif; }
.pe-style.cos-style-hw-pierre { background: #2a2e2c; border-color: rgba(150,170,120,.5); } .pe-style.cos-style-hw-pierre i { background: rgba(58,64,61,.95); border-color: rgba(150,170,120,.5); } .pe-style.cos-style-hw-pierre i:first-child { border-top-color: #a8c27a; }
body:has(main.cos-style-hw) {background: var(--ps-pattern, none), var(--ps-bg) !important; background-attachment: fixed !important;}
body:has(main.cos-style-hw) main.profile {position: relative; z-index: 2; --text: var(--ps-text); --muted: color-mix(in srgb, var(--ps-text) 66%, transparent); --brass: var(--ps-accent); --brass-ink: var(--ps-accent); --brass-line: var(--ps-line); --line: var(--ps-line); --card: var(--ps-panel); --surface: color-mix(in srgb, var(--ps-text) 5%, transparent); --track: color-mix(in srgb, var(--ps-text) 12%, transparent); color: var(--text); font-family: var(--ps-font, var(--font));}
body:has(main.cos-style-hw) .foot {position: relative; z-index: 1;}
body:has(main.cos-style-hw) .save-bar, body:has(main.cos-style-hw) .ad-select-list {background: linear-gradient(var(--ps-panel), var(--ps-panel)), var(--ps-bg);}
body:has(main.cos-style-hw) .pf-name {font: var(--ps-tfont) !important; font-size: clamp(30px, 4.8vw, 48px) !important; letter-spacing: var(--ps-tls, .1em); color: var(--ps-name, var(--text)); text-shadow: var(--ps-tshadow, none);}
body:has(main.cos-style-hw) .pf-showcase-head h2, body:has(main.cos-style-hw) .pf-stats-head h2 {display: flex; align-items: center; gap: 10px; font-family: var(--ps-fam, inherit); font-size: 16px;}
body:has(main.cos-style-hw) .pf-showcase, body:has(main.cos-style-hw) .pf-stats {position: relative; margin-top: clamp(30px, 4.4vw, 52px); padding: clamp(18px, 2.6vw, 30px); background: var(--ps-panel); border: 1px solid var(--ps-line); box-shadow: var(--ps-glow, none);}
body:has(main.cos-style-hw) .pf-hero {box-shadow: var(--ps-glow, none);}
body:has(main.cos-style-hw) .pf-hero::after {background: linear-gradient(var(--ps-panel), var(--ps-panel)), var(--sty-base, #0b0b0b);}
body:has(main.cos-style-hw) .pf-empty {border-color: var(--ps-line);}
body:has(main.cos-style-hw) .st-card {border-top-color: var(--ps-accent);}
.sty-orn {position: absolute; z-index: 4; width: 46px; height: 46px; pointer-events: none; overflow: visible;}
.sty-c1 {left: -6px; top: -6px;}
.sty-c2 {right: -6px; top: -6px; transform: scaleX(-1);}
.sty-c3 {right: -6px; bottom: -6px; transform: scale(-1);}
.sty-c4 {left: -6px; bottom: -6px; transform: scaleY(-1);}
.sty-head {display: inline-block; width: 30px; height: 18px; flex: none;}
.sty-head svg, .sty-item svg, .sty-aftername svg {display: block; width: 100%; height: 100%; overflow: visible;}
.sty-head svg {height: 18px;}
.sty-head-r {transform: scaleX(-1);}
.sty-strip {position: absolute; z-index: 3; left: 8px; right: 8px; background-repeat: repeat-x; pointer-events: none;}
.sty-item {position: absolute; z-index: 5; pointer-events: none; line-height: 0;}
.sty-item svg {height: auto;}
.sty-aftername {display: block; width: min(260px, 70%); height: 26px; margin-top: -4px;}
.sty-layer {position: fixed; inset: 0; z-index: 0; overflow: hidden; pointer-events: none;}
.sty-scene {position: absolute; left: 0; right: 0; bottom: 0;}
.sty-scene > svg {display: block; width: 100%; height: 100%;}
.sty-scene-r {left: auto; right: 2%; width: 260px;}
.sty-fog {position: absolute; left: -20%; width: 140%; height: 220px; border-radius: 50%; background: radial-gradient(closest-side, var(--ps-fog, rgba(207, 231, 218, .16)), transparent); filter: blur(10px); animation: sty-fog 40s linear infinite alternate;}
.sty-fog1 {bottom: -60px;}
.sty-fog2 {bottom: 30%; height: 160px; opacity: .6; animation-duration: 55s; animation-direction: alternate-reverse;}
.sty-fog3 {bottom: 60px; height: 140px; opacity: .8; animation-duration: 33s;}
@keyframes sty-fog { from { transform: translateX(-8%); } to { transform: translateX(8%); } }
.sty-p {position: absolute; line-height: 0;}
.sty-p svg {display: block; width: 100%; height: auto; overflow: visible;}
.sty-rise {bottom: -40px; animation: sty-rise linear infinite;}
.sty-fall {top: -40px; animation: sty-fall linear infinite;}
.sty-drift {left: -60px; animation: sty-drift linear infinite;}
.sty-float {animation: sty-floaty ease-in-out infinite alternate;}
.sty-twinkle {animation: sty-twinkle ease-in-out infinite;}
.sty-firefly {animation: sty-firefly ease-in-out infinite;}
@keyframes sty-rise { from { transform: translate(0, 0); opacity: 0; } 10% { opacity: 1; } 50% { transform: translate(24px, -55vh); } 90% { opacity: .8; } to { transform: translate(-10px, -110vh); opacity: 0; } }
@keyframes sty-fall { from { transform: translate(0, 0) rotate(0); } 50% { transform: translate(40px, 55vh) rotate(200deg); } to { transform: translate(-20px, 112vh) rotate(420deg); } }
@keyframes sty-drift { from { transform: translate(0, 0); } 25% { transform: translate(28vw, -30px); } 50% { transform: translate(55vw, 20px); } 75% { transform: translate(80vw, -24px); } to { transform: translate(112vw, 0); } }
@keyframes sty-floaty { from { transform: translate(0, 0); } to { transform: translate(14px, -22px); } }
@keyframes sty-twinkle { 0%, 100% { opacity: 0; transform: scale(.4); } 50% { opacity: 1; transform: scale(1); } }
@keyframes sty-firefly { 0%, 100% { opacity: 0; transform: translate(0, 0); } 30% { opacity: 1; } 50% { transform: translate(30px, -24px); opacity: .9; } 70% { opacity: 0; } }
.sty-item.sty-float {animation: sty-floaty 3.4s ease-in-out infinite alternate;}
.sty-item.sty-d2 {animation-delay: -1.2s;}
.sty-item.sty-d3 {animation-delay: -2.1s;}
.sty-item.sty-bob {animation: sty-bob 4s ease-in-out infinite; transform-origin: 50% 0;}
@keyframes sty-bob { 50% { transform: translateY(46px); } }
.sty-flick path {transform-box: fill-box; transform-origin: 50% 100%; animation: sty-flick 1.3s ease-in-out infinite;}
@keyframes sty-flick { 50% { transform: scaleY(1.16) skewX(3deg); } }
:where(:root[data-motion="reduce"]) .sty-layer *, :where(:root[data-motion="reduce"]) .sty-item, :where(:root[data-motion="reduce"]) .sty-fog, :where(:root[data-motion="reduce"]) .sty-flick path {animation: none !important;}
body:has(main.cos-style-hw-manoir) {--sty-base: #140c22;}
body:has(main.cos-style-hw-grimoire) {--sty-base: #e6d6b0;}
body:has(main.cos-style-hw-ecto) {--sty-base: #05201d;}
body:has(main.cos-style-hw-veillee) {--sty-base: #2a1206;}
body:has(main.cos-style-hw-friandises) {--sty-base: #3b1d5c;}
body:has(main.cos-style-hw-pierre) {--sty-base: #2a2e2c;}
body:has(main.cos-style-hw-manoir) {--ps-pattern: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='80' height='80'%3E%3Cpath d='M40 0L80 40L40 80L0 40Z' fill='none' stroke='rgba(201,164,92,.07)'/%3E%3Cpath d='M40 32q4-6 10-4q-6 2-6 8q4 0 6 4q-6 0-10 4q-4-4-10-4q2-4 6-4q0-6-6-8q6-2 10 4z' fill='rgba(201,164,92,.09)'/%3E%3C/svg%3E"), radial-gradient(120% 70% at 50% 0%, rgba(122, 74, 168, .35), transparent 60%) !important;}
body:has(main.cos-style-hw-manoir) .pf-showcase, body:has(main.cos-style-hw-manoir) .pf-stats {box-shadow: inset 0 0 0 4px var(--ps-panel), inset 0 0 0 5px rgba(201, 164, 92, .35), 0 20px 40px -24px #000;}
body:has(main.cos-style-hw-manoir) .pf-showcase-head h2, body:has(main.cos-style-hw-manoir) .pf-stats-head h2 {font-style: italic; font-size: 20px; letter-spacing: .06em; text-transform: none;}
body:has(main.cos-style-hw-manoir) .pf-title {font-family: 'IM Fell English', serif; font-style: italic; letter-spacing: .08em; text-transform: none; font-size: 16px;}
body:has(main.cos-style-hw-manoir) .pf-name {text-transform: none; text-shadow: 0 0 18px rgba(201, 164, 92, .35);}
body:has(main.cos-style-hw-grimoire) {--ps-pattern: radial-gradient(40% 30% at 18% 22%, rgba(120, 70, 20, .12), transparent 70%), radial-gradient(30% 24% at 82% 70%, rgba(120, 70, 20, .10), transparent 70%), radial-gradient(18% 14% at 60% 30%, rgba(90, 50, 10, .08), transparent 70%) !important;}
body:has(main.cos-style-hw-grimoire)::after {content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none; box-shadow: inset 0 0 140px 30px rgba(90, 50, 10, .45), inset 0 0 30px 6px rgba(60, 30, 5, .5);}
body:has(main.cos-style-hw-grimoire) .pf-showcase, body:has(main.cos-style-hw-grimoire) .pf-stats {background: repeating-linear-gradient(transparent 0 27px, rgba(110, 70, 30, .1) 27px 28px), linear-gradient(90deg, transparent 38px, rgba(170, 40, 30, .25) 38px 39px, transparent 39px), var(--ps-panel); box-shadow: 0 1px 0 #fff8 inset, 4px 6px 0 -1px #d9c69c, 8px 12px 0 -2px #cdb888;}
body:has(main.cos-style-hw-grimoire) .pf-showcase-head h2::first-letter, body:has(main.cos-style-hw-grimoire) .pf-stats-head h2::first-letter {color: #8a2a18;}
body:has(main.cos-style-hw-grimoire) .pf-showcase-head h2, body:has(main.cos-style-hw-grimoire) .pf-stats-head h2 {font-size: 22px; font-style: italic; letter-spacing: .02em; text-transform: none; color: #2a1a0e;}
body:has(main.cos-style-hw-grimoire) .pf-name::first-letter {color: #8a2a18; font-size: 1.3em;}
body:has(main.cos-style-hw-grimoire) .pf-name {text-transform: none;}
body:has(main.cos-style-hw-grimoire) .pf-title {font-family: 'IM Fell English', serif; font-style: italic; text-transform: none; letter-spacing: .04em; font-size: 16px; color: #8a2a18;}
body:has(main.cos-style-hw-grimoire) .pf-title::before {content: "❦ ";}
body:has(main.cos-style-hw-ecto) {--ps-fog: rgba(143, 240, 200, .14);}
body:has(main.cos-style-hw-ecto) .pf-showcase, body:has(main.cos-style-hw-ecto) .pf-stats, body:has(main.cos-style-hw-ecto) .pf-hero {-webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); animation: sty-glow 5s ease-in-out infinite alternate;}
@keyframes sty-glow { from { box-shadow: 0 0 10px rgba(143, 240, 200, .12), inset 0 0 14px rgba(143, 240, 200, .06); } to { box-shadow: 0 0 26px rgba(143, 240, 200, .28), inset 0 0 26px rgba(143, 240, 200, .12); } }
body:has(main.cos-style-hw-ecto) .pf-showcase-head h2, body:has(main.cos-style-hw-ecto) .pf-stats-head h2 {color: #dffcf1; text-shadow: 0 0 8px #8ff0c8; font-weight: 300; letter-spacing: .3em;}
body:has(main.cos-style-hw-ecto) .pf-name {animation: sty-floaty 4s ease-in-out infinite alternate;}
body:has(main.cos-style-hw-veillee) {--ps-pattern: radial-gradient(90% 60% at 50% 110%, rgba(232, 121, 43, .28), transparent 60%), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='90' height='90'%3E%3Cpath d='M20 14l3 8 8 1-6 5 2 8-7-4-7 4 2-8-6-5 8-1z' fill='rgba(232,121,43,.07)'/%3E%3C/svg%3E") !important;}
body:has(main.cos-style-hw-veillee) .pf-showcase, body:has(main.cos-style-hw-veillee) .pf-stats {border-top: 3px solid #e8792b; background: repeating-linear-gradient(92deg, rgba(0, 0, 0, .06) 0 2px, transparent 2px 9px), linear-gradient(#3e1c0c, #2e1408); box-shadow: 0 0 0 1px rgba(232, 121, 43, .25), 0 26px 50px -26px rgba(232, 121, 43, .45);}
body:has(main.cos-style-hw-veillee) .pf-showcase-head h2, body:has(main.cos-style-hw-veillee) .pf-stats-head h2 {color: #ffd27a; letter-spacing: .16em;}
body:has(main.cos-style-hw-veillee) .pf-name {text-shadow: 0 0 22px rgba(255, 179, 71, .45);}
body:has(main.cos-style-hw-veillee) .pf-hero {box-shadow: 0 30px 60px -30px rgba(232, 121, 43, .5);}
body:has(main.cos-style-hw-friandises) {--ps-pattern: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='70' height='70'%3E%3Crect x='8' y='10' width='10' height='3' rx='1.5' fill='%23e8792b' opacity='.35' transform='rotate(30 13 11)'/%3E%3Crect x='40' y='20' width='10' height='3' rx='1.5' fill='%23ffd27a' opacity='.3' transform='rotate(-20 45 21)'/%3E%3Crect x='24' y='46' width='10' height='3' rx='1.5' fill='%232f8f6d' opacity='.35' transform='rotate(70 29 47)'/%3E%3Crect x='52' y='54' width='10' height='3' rx='1.5' fill='%23c42a5a' opacity='.35' transform='rotate(10 57 55)'/%3E%3C/svg%3E") !important;}
body:has(main.cos-style-hw-friandises) .pf-showcase, body:has(main.cos-style-hw-friandises) .pf-stats {border: 6px solid transparent; border-radius: 22px; background: linear-gradient(var(--ps-panel), var(--ps-panel)) padding-box, linear-gradient(var(--sty-base), var(--sty-base)) padding-box, repeating-linear-gradient(45deg, #e8792b 0 10px, #fff2e6 10px 20px, #7a3aa8 20px 30px, #fff2e6 30px 40px) border-box;}
body:has(main.cos-style-hw-friandises) .pf-hero::before {background: repeating-linear-gradient(45deg, #e8792b 0 10px, #fff2e6 10px 20px); opacity: 1;}
body:has(main.cos-style-hw-friandises) .pf-showcase-head h2, body:has(main.cos-style-hw-friandises) .pf-stats-head h2 {font-size: 20px; letter-spacing: .04em; text-transform: none; color: #ffd27a;}
body:has(main.cos-style-hw-friandises) .pf-name {text-transform: none; text-shadow: 3px 3px 0 #e8792b, 6px 6px 0 #7a3aa8;}
body:has(main.cos-style-hw-friandises) .sty-orn {width: 52px; height: 52px;}
body:has(main.cos-style-hw-pierre) {--ps-fog: rgba(200, 214, 205, .14); --ps-pattern: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.55' numOctaves='3'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .09 0'/%3E%3C/filter%3E%3Crect width='200' height='200' filter='url(%23n)'/%3E%3C/svg%3E") !important;}
body:has(main.cos-style-hw-pierre) .pf-showcase, body:has(main.cos-style-hw-pierre) .pf-stats {background: var(--ps-pattern), linear-gradient(#444b47, #383e3b); box-shadow: inset 2px 2px 0 rgba(255, 255, 255, .1), inset -3px -3px 0 rgba(0, 0, 0, .35), 0 18px 34px -20px #000; border-color: #2a2e2c;}
body:has(main.cos-style-hw-pierre) .pf-showcase-head h2, body:has(main.cos-style-hw-pierre) .pf-stats-head h2 {color: #d8dcd4; letter-spacing: .26em; text-shadow: 0 1px 0 rgba(255, 255, 255, .15), 0 -1px 0 rgba(0, 0, 0, .7);}
body:has(main.cos-style-hw-pierre) .sty-orn {width: 54px; height: 54px;}
/* <<< COSMÉTIQUES D'HALLOWEEN <<< */
