/* Connexions (avec un X) — id technique dotlink — identité cyberpunk : nuit d'encre,
   jaune acide et rouge alarme pour l'interface, câbles néon sur la grille.
   Volontairement loin de Néon Nexus (cyan/magenta sur marine) et de Focus
   (cyan, Rajdhani). Polices auto-hébergées (licence OFL). */
@font-face{font-family:'DL Orbitron';font-style:normal;font-weight:800;font-display:swap;src:url('/joueur/dotlink/orbitron-800.woff2') format('woff2')}
@font-face{font-family:'DL Chakra';font-style:normal;font-weight:500;font-display:swap;src:url('/joueur/dotlink/chakrapetch-500.woff2') format('woff2')}
@font-face{font-family:'DL Chakra';font-style:normal;font-weight:700;font-display:swap;src:url('/joueur/dotlink/chakrapetch-700.woff2') format('woff2')}

.dl{--nuit:#07060b;--panneau:#100e18;--trait:#241f36;--texte:#ecebf5;--muted:#8a86a3;--jaune:#f5f000;--rouge:#ff2a4f;--cyan:#00e8ff;
 position:fixed;z-index:100;overflow:hidden;display:flex;flex-direction:column;color:var(--texte);font:500 14px 'DL Chakra',sans-serif;
 background:
  repeating-linear-gradient(0deg,rgba(255,255,255,.018) 0 1px,transparent 1px 3px),
  radial-gradient(120% 60% at 50% 0%,#1d0f2a 0%,transparent 60%),
  radial-gradient(90% 50% at 100% 100%,#2a0712 0%,transparent 55%),
  var(--nuit)}
.dl *{box-sizing:border-box}
.dl button{font:700 13px 'DL Chakra',sans-serif;letter-spacing:.6px;text-transform:uppercase;color:var(--texte);background:var(--panneau);
 border:1px solid var(--trait);min-height:42px;padding:8px 12px;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent;
 clip-path:polygon(10px 0,100% 0,100% calc(100% - 10px),calc(100% - 10px) 100%,0 100%,0 10px)}
.dl button:active{transform:translateY(1px);filter:brightness(1.25)}
.dl button:disabled{opacity:.35;cursor:default}
.dl button:focus-visible{outline:2px solid var(--jaune);outline-offset:2px}
.dl button.primary{background:var(--jaune);color:#0b0a00;border-color:var(--jaune);text-shadow:none}
.dl button.danger{border-color:var(--rouge);color:var(--rouge)}

.dl header{height:46px;flex-shrink:0;display:flex;align-items:center;gap:8px;padding:0 10px;border-bottom:1px solid var(--trait);
 font:800 13px 'DL Orbitron',sans-serif;letter-spacing:2px;color:var(--jaune)}
.dl header .back{min-height:34px;width:38px;padding:0;background:transparent;border:0;clip-path:none;font:700 24px/1 'DL Chakra',sans-serif;color:var(--jaune)}
.dl header .titre{flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dl header .aide{min-height:30px;width:30px;padding:0;border-radius:50%;clip-path:none;border:1px solid var(--jaune);background:transparent;color:var(--jaune);font:700 15px/1 'DL Chakra',sans-serif}
.dl header .tag{font:700 9px 'DL Chakra',sans-serif;letter-spacing:1.5px;color:#0b0a00;background:var(--rouge);padding:3px 6px}
.dl main{flex:1;min-height:0;position:relative;display:flex;flex-direction:column}

/* ── Accueil (tient sans défilement dès 360×640) ─────────────────────────── */
.dl .home{padding:14px 16px 12px;display:flex;flex-direction:column;gap:12px;flex:1;min-height:0}
.dl .eyebrow{font:700 10px 'DL Chakra',sans-serif;letter-spacing:3px;color:var(--rouge);text-transform:uppercase}
.dl .hero{display:flex;align-items:center;gap:14px}
.dl .hero img{width:78px;height:78px;flex-shrink:0;filter:drop-shadow(0 0 10px rgba(245,240,0,.35))}
.dl h1{margin:2px 0 0;font:800 31px/1.02 'DL Orbitron',sans-serif;letter-spacing:1px;color:var(--texte);
 text-shadow:2px 0 0 rgba(255,42,79,.75),-2px 0 0 rgba(0,232,255,.6)}
.dl h1 em{font-style:normal;color:var(--jaune);text-shadow:0 0 14px rgba(245,240,0,.55)}
.dl .pitch{margin:0;font-size:13px;line-height:1.45;color:#c9c6dc}
.dl .pitch b{color:var(--jaune);font-weight:700}
.dl .cartes{display:flex;flex-direction:column;gap:9px}
.dl .carte{display:flex;align-items:center;gap:12px;text-align:left;text-transform:none;letter-spacing:0;min-height:62px;padding:8px 14px;
 background:linear-gradient(90deg,rgba(245,240,0,.07),transparent 60%),var(--panneau);border-left:3px solid var(--jaune)}
.dl .carte .num{font:800 20px 'DL Orbitron',sans-serif;color:var(--jaune);min-width:64px}
.dl .carte .quoi{flex:1;display:flex;flex-direction:column;gap:2px}
.dl .carte .quoi b{font-size:14px}
.dl .carte .quoi small{font-size:11px;color:var(--muted);font-weight:500}
.dl .carte .etat{font:700 12px 'DL Chakra',sans-serif;color:var(--cyan);text-align:right;white-space:nowrap}
.dl .carte.fait{border-left-color:var(--cyan)}
.dl .stats{display:flex;gap:10px}
.dl .stats span{flex:1;padding:8px 12px;background:var(--panneau);border:1px solid var(--trait);font:700 9px 'DL Chakra',sans-serif;letter-spacing:2px;color:var(--muted)}
.dl .stats b{display:block;font:800 19px 'DL Orbitron',sans-serif;letter-spacing:0;color:var(--texte);margin-bottom:3px;font-variant-numeric:tabular-nums}
.dl button.grand{min-height:54px;font-size:15px}
.dl .row{display:flex;gap:8px}
.dl .row>*{flex:1;font-size:11px;padding:8px 6px}
.dl h2.titre-carte{margin:0;font:800 18px 'DL Orbitron',sans-serif;color:var(--texte)}
.dl .carte-grilles{display:grid;grid-template-columns:repeat(10,1fr);gap:4px}
.dl .carte-grilles .chapitre{grid-column:1/-1;margin:6px 0 1px;font:700 10px 'DL Chakra',sans-serif;letter-spacing:2px;text-transform:uppercase;color:var(--rouge)}
.dl .carte-grilles .case{min-height:0;height:28px;padding:0;font:800 10px 'DL Orbitron',sans-serif;letter-spacing:0;clip-path:polygon(5px 0,100% 0,100% calc(100% - 5px),calc(100% - 5px) 100%,0 100%,0 5px);background:#0c0a12;color:#4a4560}
.dl .carte-grilles .case.faite{background:rgba(0,232,255,.14);border-color:rgba(0,232,255,.5);color:var(--cyan)}
.dl .carte-grilles .case.ouverte{background:var(--jaune);border-color:var(--jaune);color:#0b0a00;box-shadow:0 0 12px rgba(245,240,0,.5)}
.dl .carte-grilles .case:disabled{opacity:1}
.dl .note{margin-top:auto;font-size:11px;color:var(--muted);line-height:1.45;border-top:1px dashed var(--trait);padding-top:8px}

/* ── Jeu ─────────────────────────────────────────────────────────────────── */
.dl .hud{display:flex;align-items:flex-end;justify-content:space-between;padding:10px 14px 4px}
.dl .hud .niv{font:800 24px/1 'DL Orbitron',sans-serif;color:var(--jaune)}
.dl .hud .niv small{display:block;font:700 10px 'DL Chakra',sans-serif;letter-spacing:2px;color:var(--muted);margin-top:4px}
.dl .hud .chrono{font:800 24px/1 'DL Orbitron',sans-serif;font-variant-numeric:tabular-nums;color:var(--texte);text-align:right}
.dl .hud .chrono small{display:block;font:700 10px 'DL Chakra',sans-serif;letter-spacing:2px;color:var(--muted);margin-top:4px}
.dl .jauges{display:flex;gap:10px;padding:4px 14px 8px}
.dl .jauge{flex:1;font:700 10px 'DL Chakra',sans-serif;letter-spacing:1.5px;color:var(--muted)}
.dl .jauge b{color:var(--texte);font-size:12px;letter-spacing:.5px}
.dl .jauge i{display:block;height:3px;margin-top:4px;background:var(--trait);position:relative;overflow:hidden}
.dl .jauge i::after{content:'';position:absolute;inset:0 auto 0 0;width:var(--v,0%);background:var(--jaune);box-shadow:0 0 8px var(--jaune);transition:width .15s}
.dl .jauge.cables i::after{background:var(--cyan);box-shadow:0 0 8px var(--cyan)}
.dl .plateau{flex:1;min-height:0;display:flex;align-items:center;justify-content:center;position:relative;padding:0 8px}
.dl .cadre{position:relative;padding:5px}
.dl .cadre::before,.dl .cadre::after{content:'';position:absolute;width:18px;height:18px;border:2px solid var(--jaune);pointer-events:none}
.dl .cadre::before{top:0;left:0;border-right:0;border-bottom:0}
.dl .cadre::after{bottom:0;right:0;border-left:0;border-top:0}
.dl svg.grille{display:block;touch-action:none;user-select:none;-webkit-user-select:none}
.dl .grille .fil{fill:none;stroke-linecap:round;stroke-linejoin:round}
.dl .grille .halo{fill:none;stroke-linecap:round;stroke-linejoin:round;opacity:.28}
.dl .grille .relie .halo{opacity:.5}
.dl .grille.gagne .fil{animation:dl-pulse .9s ease-in-out 2}
@keyframes dl-pulse{50%{stroke-width:5.2;filter:brightness(1.6)}}
.dl .message{min-height:34px;padding:4px 16px;text-align:center;font-size:12px;line-height:1.35;color:var(--muted)}
.dl .message.alerte{color:var(--jaune)}
.dl .actions{display:flex;gap:8px;padding:0 12px 12px}
.dl .actions button{flex:1}

/* ── Fenêtres (pause, victoire) ──────────────────────────────────────────── */
.dl .voile{position:absolute;inset:0;z-index:5;display:flex;align-items:center;justify-content:center;padding:20px;
 background:rgba(7,6,11,.78);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px)}
.dl .fenetre{width:100%;max-width:300px;padding:20px 18px;background:var(--panneau);border:1px solid var(--jaune);display:flex;flex-direction:column;gap:10px;text-align:center;
 clip-path:polygon(16px 0,100% 0,100% calc(100% - 16px),calc(100% - 16px) 100%,0 100%,0 16px);box-shadow:0 0 30px rgba(245,240,0,.15)}
.dl .fenetre h2{margin:0;font:800 20px 'DL Orbitron',sans-serif;color:var(--jaune);letter-spacing:1px}
.dl .fenetre .temps{font:800 34px 'DL Orbitron',sans-serif;color:var(--texte);font-variant-numeric:tabular-nums}
.dl .fenetre p{margin:0;font-size:13px;color:#c9c6dc;line-height:1.45}
.dl .fenetre .record{color:var(--cyan);font-weight:700}
.dl .gagne-anim .fenetre{animation:dl-glitch .45s steps(2) 1}
@keyframes dl-glitch{0%{transform:translate(-3px,0);opacity:0}30%{transform:translate(3px,-1px)}60%{transform:translate(-1px,1px)}100%{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.dl .grille.gagne .fil,.dl .gagne-anim .fenetre{animation:none}}

/* ── Accueil de production ───────────────────────────────────────────────── */
.dl .pad{padding:16px}
.dl .sous-titre{font:700 13px 'DL Chakra',sans-serif;letter-spacing:2px;color:var(--rouge);margin-top:2px}
.dl h1{font-size:28px}
.dl h1 em{font-size:1.18em;color:var(--jaune);text-shadow:0 0 14px rgba(245,240,0,.7),0 0 2px #fff}
.dl .stats span{padding:7px 9px;font-size:8px;letter-spacing:1.5px}
.dl .stats b{font-size:17px}
.dl button.grand{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px}
.dl button.grand small{font:700 10px 'DL Chakra',sans-serif;letter-spacing:1.5px;opacity:.7}
.dl .row>*{font-size:12px}
.dl .note.hors-ligne{color:var(--jaune)}
.dl .pagination{display:flex;align-items:center;gap:8px}
.dl .pagination h2{flex:1;text-align:center;margin:0}
.dl .pagination button{min-height:36px;width:44px;padding:0;font-size:20px}
.dl h2.titre-carte{font-size:16px}
/* ── Classements ── */
.dl .onglets{display:flex;gap:6px}
.dl .onglets button{flex:1}
.dl .onglets button.actif{background:var(--jaune);color:#0b0a00;border-color:var(--jaune)}
.dl .note-haut{margin:0;font-size:11px;color:var(--muted)}
.dl .perso{margin:0;font-size:12px;color:var(--cyan)}
.dl ol.classement{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:3px;overflow:auto;min-height:0;flex:1}
.dl .classement li{display:flex;align-items:center;gap:10px;padding:7px 10px;background:var(--panneau);border-left:2px solid var(--trait);font-size:13px}
.dl .classement li.moi{border-left-color:var(--cyan);background:linear-gradient(90deg,rgba(0,232,255,.12),transparent 70%),var(--panneau)}
.dl .classement li.vide{color:var(--muted);border:0;background:none}
.dl .classement .rang{font:800 13px 'DL Orbitron',sans-serif;color:var(--jaune);min-width:28px}
.dl .classement .nom{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dl .classement .val{font:700 13px 'DL Chakra',sans-serif;font-variant-numeric:tabular-nums;color:var(--texte)}
/* ── Tutoriel ── */
.dl .tuto{align-items:stretch}
.dl h2.titre-tuto{margin:0;font:800 22px 'DL Orbitron',sans-serif;color:var(--jaune)}
.dl .tuto .cadre{align-self:center}
.dl svg.grille.illu{width:200px;height:200px}
.dl .points{display:flex;justify-content:center;gap:8px}
.dl .points i{width:8px;height:8px;background:var(--trait);transform:rotate(45deg)}
.dl .points i.on{background:var(--jaune);box-shadow:0 0 8px var(--jaune)}
.dl .jeu{display:flex;flex-direction:column;flex:1;min-height:0}
.dl .fenetre .row{display:flex;gap:8px}
.dl .fenetre .row>*{flex:1}
