/* 17.10.2026 V9.6
PROJET WOW SERVER
CSS mini: 3
web/armurerie/admin.css
styles propres a la zone d'administration (login, formulaires, liste de comptes) - complete style.css partage

Liste des modifications faites :
17.10.2026 V9.6 Carte plein ecran (map.php, atelier.php) : vue en pleine largeur/hauteur, image qui la recouvre (worldmap.js V1.3) ; sur demande explicite ("ca m'affiche la map sur la gauche, pas en full width").
10.10.2026 V9.5 .cmp-stats-lien : lien « Statistiques » de la page Dashboard (comparaison.php).
10.10.2026 V9.4 .nav-link-comptes : picto utilisateur vert du menu (page Comptes).
10.10.2026 V9.3 dashboard.php : resume (comptes / personnages / en ligne) et barre d'outils (recherche, filtres, « N / N comptes ») centres ; sur demande explicite.
10.10.2026 V9.2 Bloc « Demandes de creation de compte » (#demandes) a largeur fixe centree (960 px) ; classes du titre renommees .dash-head / .dash-head-btn (.ac-head existait deja pour les cartes de comptes).
10.10.2026 V9.1 dashboard.php : champ de recherche a largeur fixe (320 px, plus fluide) ; .ac-head-btn : bouton « Ajouter un joueur » / « Demander un compte » a droite du titre.
10.10.2026 V9.0 .esp-hors / .esp-enligne : cartes de espace.php (personnages hors ligne attenues).
10.10.2026 V8.9 .nav-link-ico : pictos Bugs/Configuration seuls, un peu plus grands.
10.10.2026 V8.8 Menu : .nav-ico (pictos Configuration/Bugs), .nav-restart reduit a un gros picto.
10.10.2026 V8.7 .cfg-head/.cfg-loot : bouton « Taux de loot » en haut a droite du titre de rates.php.
10.10.2026 V8.6 Formulaire public de bug (bugs.php) : .bug-captcha, champs select/texte de .dm-form ; sur demande explicite.
21.09.2026 Dashboard : badge "MJ3" a cote du nom du compte (.ac-nameline/.ac-gm), demande : "MJ niveau 3 ne doit pas s'afficher comme ca. mettre MJ3 a coté du nom".
21.09.2026 Dashboard : comptes en 6 colonnes centrees (.ac-grid en flex, .admin-wrap-dash 1700px, 4/3/2/1 colonnes selon la largeur), demande : "met 6 colonnes centre pour les comptes ( les perso en dessou comme actuellement)".
20.09.2026 .pl-rankform : menu deroulant du rang de guilde dans l'entete de la fiche (remplace .pl-joinfdg), demande : "le menu deroulant de la selection de rang".
20.09.2026 .pl-joinfdg : bouton Ajouter a FDG a cote du choix du rang, demande : "il faut juste un bouton ajouter a la guilde FDG et a coté le rang".
21.09.2026 Comparaison : couleurs de rang des reputations (.cmp-line b.rep, .cmp-bar.rep) et bloc des quetes partagees (.cmp-main/.cmp-shared), demande : "met les reputations, les 5 les plus avancees ... regroupe les quetes partagees ... dans un bloc row seul".
21.09.2026 Comparaison : titre de page dans la colonne de gauche au-dessus des volets (.cmp-title), demande : "met ca au dessus du volet personnage a gauche".
21.09.2026 Menu refait dans l'esprit WoW (style.css) : retrait des surcharges .site-nav/.nav-link de la zone admin (boutons plats) et habillage du bouton .nav-login en Cinzel dore ; demande : "refait le menu, il faut l'esprit wow".
20.09.2026 Comparaison : volets de selection a gauche, fermes par defaut (.cmp-layout/.cmp-side/.cmp-panel), demande : "met les selection a gauche en menu devellopent ... ferme par defaut. idem pour equipe".
20.09.2026 Page comparaison d'equipe (.cmp-*), demande : "ajoute une page comparaison ... 3 personnes a glisser dans 3 colonnes".
20.09.2026 Objets : champs numeriques du formulaire de recherche (niveau requis min/max), demande : "il faut filtrer par lvl et par class".
20.09.2026 Taux serveur : .rate-groups/.rate-card (une card par theme), demande : "c'est moche, regroupe les par type dans des card".
20.09.2026 Barre d'experience : un seul trait de 1px entre segments (bordure exterieure commune + separateurs), demande : "il faut juste 1 px border sur les 3".
20.09.2026 Barre d'experience : separation entre segments reduite (gap 3px -> 1px), demande : "moins de separation entre chaque blocs".
20.09.2026 Barre d'experience decoupee en 20 segments (.pl-xp i, remplissage par --p), demande : "la barre du lvl en cour doit etre divise en 20 morceau comme dans le jeu".
20.09.2026 Modal de niveau : ligne de commande a copier (.pl-cmd), demande : "donne la commande a faire en jeu a cote".
20.09.2026 Fiche joueur : cases de niveau cliquables pour les MJ (.pl-cases span.clic), demande : "sur le lvl des perso on doit pouvoir faire up".
20.09.2026 Carte : bouton icone de synchronisation des positions (.map-sync, rotation .spin), demande : "ajoute un bouton simple icon sync de la position des perso connecte".
20.09.2026 Fiche joueur : barre d'experience du niveau actuel (.pl-xp) et rangee de 80 cases de niveaux (.pl-cases), demande : "une progression des 80 lvl, on doit voir comme dans wow les cases de chaque lvl".
20.09.2026 Carte : cases a cocher Joueurs/Grille de la barre d'outils (.map-check), demande : "une grille de 1000 (1px blanc) et 500 (1px gris) affichable avec une case a cocher".
20.09.2026 Page quests.php : barre de progression (.qt-bar), tableau des quetes (.qt-table/.qt-scroll) et filtre (.qt-search), demande : "une page de la liste des quetes faites x/max".
20.09.2026 Fiche joueur : embleme de faction dans le coin haut gauche et icone de classe dans le coin haut droit du bandeau (nom reste centre), demande : "modifi la position comme montre".
20.09.2026 Fiche joueur : elements editables de l'en-tete (.pl-edit) et modal d'edition argent/nom/niveau/classe/sexe (.pl-modal*, .pl-coin, .pl-choice*), demande : "ouvrir un modal ou popup pour modifier ... il faut le faire plus graphiquement".
20.09.2026 Fiche joueur : icone de faction a gauche du nom (.pl-faction) et choix de faction dans le modal, demande : "l'icone de la faction aligne a gauche sur le nom ... changer la faction en cliquant sur le bon icone".
20.09.2026 Tableau de bord : cartes de comptes (.ac-*), barre d'outils (.outils) et resume, demande : "cliquer sur un compte ... plus belle presentation basee sur armurerie/index.html".
20.09.2026 Fiche joueur : logos de faction fournis par l'utilisateur (emblemes Alliance/Horde affiches en entier, sans cadre rond) : "D:\TRAVAIL\mes perso wow ... est le logo de l'alliance ... la horde".
20.09.2026 Fiche joueur : fond .pl-scene (ecran de chargement de la carte du personnage), demande : "mettre cette photo dans le fond de la page player.php".
20.09.2026 Fiche joueur : zone .char3d (visionneuse 3D BabylonJS du personnage au centre), demande : "extraire un modele 3d ... montrer mieux le personnage au centre de player.php".
20.09.2026 Fiche joueur : icone de classe a droite du nom (.pl-classe), symetrique avec la faction, demande : "met l'embleme de classe a droite du nom".
20.09.2026 Fiche joueur : case a cocher .char3d-opt sous le modele 3D (sous-vetements), demande : "une case a cocher pour retirer les vetements ou pas".
20.09.2026 Bulle de la carte : note .mb-note (Fermeture auto), entry cliquable (.mb-link) et modal des objets d'une meme entry (.mb-modal*), demande : "un modal qui affiche la liste des autres disponibles".
20.09.2026 Bulle de la carte : .mb-act label (flex 1 1 90px) etirait .ios-switch, remis a 51x30 px (demande : "class=ios-switch est extensible en largeur, c'est etrange").
20.09.2026 Bulle de la carte sur 2 colonnes (.mb-cols/.mb-col, une colonne sous 520 px via .mb-narrow), largeur fixee en JS, demande : "met ca sur 2 colonnes logiquement structuree".
20.09.2026 Carte plein ecran sans defilement de page (body.map-page, demande : "la carte doit etre fullscreen fixed ... seul le zoom et le
           deplacement peuvent etre faits") : la vue garde le ratio de l'image dans la hauteur restante (container queries, --ar).
20.09.2026 Carte unifiee (map.php V2.0) : bulle large et defilante (.map-bubble), sections .mb-* (donnees, butin, actions,
           message), barre d'outils a deux formulaires, liste de voisins avec pastille de type.
20.09.2026 Ajout des styles de la carte (map.php) : .worldmap, .worldmap-pin, .map-marker-*.
20.09.2026 Carte : bulle de details de l'objet (.map-bubble), points voisins
           (.pin-nearby) et liste scrollable des objets a moins de 100 m
           (.map-nearby-list) ; .worldmap passe en overflow visible.
20.09.2026 player.php : cartes de personnages (.pl-grid/.pl-card) inspirees de
           l'armurerie locale, avec couleurs de classe (.c-<classe>).
20.09.2026 Carte : bouton icone de copie de la commande de teleportation (.map-bubble-tp).
20.09.2026 Carte pleine largeur (.admin-wrap-full, demande : "la map est trop petite") ;
           zoom/deplacement (.worldmap-view/.worldmap-stage/.worldmap-zoom, points a
           echelle constante via --z) ; page gameobjets_map.php (.gm-*).
19.09.2026 Ajout de .nav-restart (bouton "Redemarrer le serveur" du menu).
19.09.2026 Ajout de .ios-switch (toggle style Apple, checkbox natif reskinne
           en CSS pur) pour gameobject.php.
09.09.2026 Ajout de .admin-rate-list/.admin-rate-row (calque de
           .player-actions/.player-action-row) pour la nouvelle mise en page
           de rates.php : une ligne par parametre, libelle + explication en
           francais a gauche, champ (nombre/texte/liste Oui-Non) a droite -
           remplace .admin-form-grid, devenu trop etroit pour des libelles
           longs avec 25 parametres.
06.09.2026 Ajout du style input[type="number"] (absent jusque-la, seuls text/
           password etaient couverts) et de .admin-form-grid (grille de
           champs courts) pour la nouvelle page rates.php.
31.08.2026 Creation initiale
04.09.2026 Ajout des styles pour loot.php (tableau editable) et items.php
           (grille d'objets, recherche a deux champs) - .admin-wrap-wide,
           .admin-table, .admin-chance-form, .admin-search-form, .item-grid
04.09.2026 Retour utilisateur ("mal aligné, moche et icone trop petits") :
           refonte de .item-card (icone Wowhead forcee en 42x42 via
           !important, ligne icone+nom puis pied de carte id/copier separe)
           + effet de survol. Ajout du versionnage (?v=filemtime) sur les
           <link>/<script> admin.css/style.css/site.js pour eviter le cache
           navigateur apres un deploiement scp.
04.09.2026 Icone Wowhead agrandie a 64x64 sur demande explicite ("Icônes
           trop petites met 64/64").
04.09.2026 Carte objet refaite en 2 colonnes : icone seule 64x64 a gauche
           (.item-card-main/.item-wh-icon), nom + niveaux a droite
           (.item-card-text/.item-card-levels), sur demande explicite.
04.09.2026 items.php passe a whTooltips.iconSize:"large" (vraie source
           56x56 au lieu de l'icone "tiny" 18x18 par defaut) : le widget
           peut alors inserer un <span> plutot qu'un simple <ins>, ajout
           de .item-card .item-wh-icon span a la regle de mise a l'echelle.
04.09.2026 Ajout des styles pour player.php (fiche personnage, liste
           d'actions) et bugs.php (liste de signalements) - .warn-banner,
           .player-actions/.player-action-row, .bug-list/.bug-item.
20.09.2026 Theme "armurerie" (fin de fichier), sur demande explicite : variables, barre du
           haut, panneaux, boutons, champs, couleurs de classe/qualite repris de wow.css ;
           styles de la fiche joueur (.hero/.equip/.slot/.reput) et du regroupement des
           personnages par compte (.acc-group).
20.09.2026 Correctif d'un effet de bord du theme armurerie : .admin-wrap (720px) ecrasait
           .admin-wrap-full (pleine largeur) de map.php / gameobjets_map.php, remis apres.
           Retravail du style de gameobjets_map.php (barre d'outils, panneau lateral,
           filtres, legende scrollable, bulles) aux couleurs du theme armurerie.
20.09.2026 Fiche joueur : indicateur de chargement .char3d-charge (roue + texte) pendant la generation/le chargement du modele 3D.
20.09.2026 Barre des niveaux coloree par palier (.pl-niv.t1-t3, .pl-cases span.t1-t3 : 1-60 blanc, 61-70 jaune clair, 71-80 bleu clair) sur demande explicite ("met blanc, de 60 a 70 met jaune clair et de 70 a 80 bleu clair") ; acces public : .nav-login, .adm-modal*, .admin-readonly*, .admin-gm-list, .admin-fs, .pl-ro (sur demande explicite : "le login doit etre sur un bouton en haut a droite avec un modal").
20.09.2026 Site renomme /ADMIN -> /armurerie (chemin d'en-tete) ; sur demande explicite ("le site https://wow.adc-business.fr/ADMIN doit etre renomme https://wow.adc-business.fr/armurerie").
20.09.2026 Bouton .pl-joinfdg (Ajouter a FDG, Officier) sur la fiche joueur, sur demande : "il faut mettre un bouton sur les personnage qui ne sont pas dans la guilde FDG et ca les affectera en officier".
27.09.2026 Accueil : modal de modification de compte (.ac-edit-sec, .ac-gm-choices), bouton .ac-open, cartes .ac-card.is-readonly non cliquables pour les visiteurs ; demande : "on peux pas editer les compte pour les modifier".

27.09.2026 Page donjons.php : tableaux instances x membres FDG (.dj-table, .dj-b badges N/H/10/25, .dj-cell.is-done, .dj-ext) ; demande : "liste des donjons faits par personnes de la guilde FDG. sous forme de tableau. puis liste des Raids".
27.09.2026 Page metiers.php : onglets par metier (.mt-tabs), tableau des recettes (.mt-table, couleurs de difficulte .mt-d), filtres et modal des composants avec commandes .additem (.mt-m-*).
28.09.2026 Page metiers.php : colonne des personnages ayant le niveau de la recette (.mt-who, grise .is-unknown si recette non apprise).
28.09.2026 Page metiers.php : etiquettes de source (.mt-tag.is-butin/.is-marchand/.is-quete), filtre .mt-srcs et bloc des formules du modal (.mt-m-formule).
28.09.2026 Page metiers.php : personnage n'ayant pas appris la recette en rouge (.mt-who.is-unknown) ; lignes du bloc des formules en affichage bloc (le flex de .mt-m-list li decoupait le texte du butin en colonnes).
28.09.2026 Page montures.php : etiquettes de source (.mt-tag.is-hautfait/.is-metier/.is-classe/.is-introuvable), badge de faction (.mo-fac), couleur par type de monture (.mo-type) et liste des origines du modal (.mo-m-src).
01.10.2026 Page donjons.php : boutons MJ de validation (.dj-act.dj-add, "+N"/"+H") et de retrait (.dj-act.dj-del, "×" dans le badge) d'un mode d'instance.
02.10.2026 Sous-menu du compte connecte (.nav-user : Connecte/Comptes/Deconnexion, pastille des demandes) ; demandes de creation de
           compte (.dm-*) : formulaire visiteur et liste a valider/refuser ; sur demande explicite.
02.10.2026 Formulaire "Demander un compte" en modal (.dm-modal-box, .dm-open-wrap) ; sur demande explicite.
02.10.2026 Comparaison : modele 3D par colonne (.cmp-3d, badge LVL, variante theme Glace) ; sur demande explicite.
02.10.2026 Comparaison : cadre et badge LVL du modele 3D retires, indicateur de chargement ; sur demande explicite.
02.10.2026 Fiche joueur : case a cocher "Masquer du podium" (.pa-check) ; sur demande explicite.
04.10.2026 Page metiers.php (onglet Calligraphie) : etiquette de source .mt-tag.is-decouverte, filtre par classe des glyphes (.mt-glyphs) et nom de la classe dans la liste (.mt-gcl).
04.10.2026 V8.4 Page metiers.php (metiers de recolte) : sections recolte/fonte (.mt-section, .mt-sec-title), etiquettes Creature/Banc
           (.mt-tag.is-creature/.is-banc), colonnes zones et creatures (.mt-gzones/.mt-gcrea), creatures et zones du modal (.mt-g-*).
05.10.2026 V8.5 Page metiers.php (specialisations) : cartes (.mt-spe-card/.mt-spes-grid/.mt-spe*), filtre (.mt-spes), etiquettes
           recette reservee / objet reserve / fournee bonus (.mt-tag.is-spe-apprendre/.is-spe-objet/.is-spe-bonus), icone .mt-ico.xs ; demande "2. oui".

*/

.admin-wrap { max-width: 640px; }
.admin-wrap-wide { max-width: 1000px; }
.admin-wrap-full { max-width: none; padding-left: 24px; padding-right: 24px; }
.admin-wrap-full header { margin-bottom: 24px; }

.admin-login-card { max-width: 420px; margin: 0 auto; }

.admin-form {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.admin-form label {
  display: flex;
  flex-direction: column;
  gap: 6px;
  color: var(--muted);
  font-size: 0.85rem;
}
.admin-form input[type="text"],
.admin-form input[type="password"],
.admin-form input[type="number"] {
  background: #0b0d11;
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 10px 12px;
  color: var(--text);
  font-size: 0.95rem;
  font-family: inherit;
}
.admin-form input[type="text"]:focus,
.admin-form input[type="password"]:focus,
.admin-form input[type="number"]:focus {
  outline: none;
  border-color: var(--accent-dim);
}
.admin-form .btn-download { padding: 14px 32px; }

.admin-form-inline {
  flex-direction: row;
  align-items: flex-end;
  flex-wrap: wrap;
  gap: 14px;
}
.admin-form-inline label { flex: 1; min-width: 180px; }
.admin-btn-inline { width: auto; flex-shrink: 0; padding: 10px 24px; }

.admin-form-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 14px 18px;
}
.admin-form-grid .btn-download { grid-column: 1 / -1; }

.admin-rate-list {
  display: flex;
  flex-direction: column;
}
.admin-rate-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  flex-wrap: wrap;
  padding: 14px 0;
  border-bottom: 1px solid var(--border);
}
.admin-rate-row:last-of-type { border-bottom: none; }
.admin-rate-row .ar-label {
  color: var(--text);
  font-weight: 600;
  font-size: 0.9rem;
  flex: 1 1 320px;
}
.admin-rate-row .ar-sub {
  display: block;
  color: var(--muted);
  font-size: 0.78rem;
  font-weight: 400;
  margin-top: 3px;
  max-width: 520px;
}
.admin-rate-row select,
.admin-rate-row input[type="number"],
.admin-rate-row input[type="text"] {
  background: #0b0d11;
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 8px 10px;
  color: var(--text);
  font-family: inherit;
  flex-shrink: 0;
}
.admin-rate-row select:focus,
.admin-rate-row input[type="number"]:focus,
.admin-rate-row input[type="text"]:focus { outline: none; border-color: var(--accent-dim); }
.admin-rate-row input[type="number"] { width: 100px; }
.admin-rate-row input[type="text"] { width: 220px; }
.admin-rate-list .btn-download { margin-top: 20px; }

.admin-msg {
  margin: 0;
  font-size: 0.9rem;
}
.admin-msg-error { color: #e07070; }
.admin-msg-success { color: var(--torrent); }
.admin-msg-card { padding: 20px 24px; }

.admin-new-account {
  margin-top: 14px;
  border: 1px solid var(--border);
  border-radius: 8px;
  padding: 14px 16px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.admin-new-row { display: flex; align-items: center; gap: 12px; }
.admin-new-row .k { color: var(--muted); font-size: 0.8rem; width: 100px; flex-shrink: 0; }

.admin-who { color: var(--muted); font-size: 0.85rem; }

/* Bouton "Redemarrer le serveur" du menu (admin_restart_button() dans ra.php) */
.nav-restart-form { margin: 0; }
.nav-restart {
  background: transparent;
  border: 1px solid var(--danger);
  color: var(--danger);
  border-radius: 6px;
  padding: 4px 12px;
  font: inherit;
  font-size: 0.8rem;
  letter-spacing: 0.02em;
  cursor: pointer;
}
.nav-restart:hover { background: var(--danger); color: #fff; }
.nav-restart { display: inline-flex; align-items: center; justify-content: center; padding: 3px 6px; line-height: 1; }
.nav-restart svg { display: block; }
.nav-ico { vertical-align: -3px; margin-right: 5px; }
.cmp-stats-lien { margin: 0 0 12px; }
.cmp-stats-lien .btn-download { display: inline-block; width: auto; }
.nav-link-comptes .nav-ico { color: #3ddc6b; }
.esp-hors { opacity: 0.72; filter: grayscale(0.35); }
.esp-hors:hover { opacity: 1; filter: none; }
.esp-enligne { font-size: 0.8rem; font-weight: 400; color: var(--muted); }
.nav-link-ico .nav-ico { width: 20px; height: 20px; margin-right: 0; vertical-align: -5px; }

.admin-account-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.admin-account-item {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 8px 0;
  border-bottom: 1px solid var(--border);
}
.admin-account-item:last-child { border-bottom: none; }
.admin-account-item .oi-dot {
  flex-shrink: 0;
  width: 8px; height: 8px; border-radius: 50%;
  background: #5a6274;
}
.admin-account-item.is-online .oi-dot {
  background: var(--torrent);
  box-shadow: 0 0 6px var(--torrent);
}
.admin-account-name { flex: 1; color: var(--text); font-weight: 600; }
.admin-account-status { color: var(--muted); font-size: 0.8rem; }
.admin-account-item.is-online .admin-account-status { color: var(--torrent); }

@media (max-width: 560px) {
  .admin-form-inline { flex-direction: column; align-items: stretch; }
  .admin-btn-inline { width: 100%; }
}

.admin-search-form {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
  align-items: flex-end;
}
.admin-search-form label {
  display: flex;
  flex-direction: column;
  gap: 6px;
  color: var(--muted);
  font-size: 0.85rem;
  flex: 1;
  min-width: 200px;
}
.admin-search-form input[type="text"],
.admin-search-form input[type="number"],
.admin-search-form select {
  background: #0b0d11;
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 10px 12px;
  color: var(--text);
  font-size: 0.95rem;
  font-family: inherit;
}
.admin-search-form input[type="number"] { width: 100%; }
.admin-search-form label:has(input[type="number"]) { flex: 0 1 130px; min-width: 110px; }
.admin-search-form input[type="text"]:focus,
.admin-search-form input[type="number"]:focus,
.admin-search-form select:focus { outline: none; border-color: var(--accent-dim); }

.admin-table-wrap { overflow-x: auto; }
.admin-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; }
.admin-table th, .admin-table td {
  padding: 10px 12px;
  border-bottom: 1px solid var(--border);
  text-align: left;
  vertical-align: middle;
}
.admin-table th {
  color: var(--muted);
  font-weight: 600;
  font-size: 0.75rem;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.admin-table tr:last-child td { border-bottom: none; }

.admin-chance-form { display: flex; align-items: center; gap: 8px; }
.admin-chance-form input[type="number"] {
  width: 74px;
  background: #0b0d11;
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 6px 8px;
  color: var(--text);
  font-family: inherit;
}
.admin-chance-form input[type="number"]:focus { outline: none; border-color: var(--accent-dim); }
.admin-chance-form .btn-copy { padding: 6px 14px; font-size: 0.8rem; }

.item-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 14px;
}
.item-card {
  border: 1px solid var(--border);
  border-radius: 10px;
  padding: 14px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  background: linear-gradient(180deg, rgba(255,255,255,0.03), rgba(255,255,255,0.01));
  transition: border-color 0.15s ease, transform 0.15s ease;
}
.item-card:hover {
  border-color: var(--accent-dim);
  transform: translateY(-2px);
}
.item-card-main {
  display: flex;
  align-items: flex-start;
  gap: 12px;
}
.item-card .item-wh-icon {
  display: block;
  width: 64px;
  height: 64px;
  flex-shrink: 0;
  border-radius: 6px;
  overflow: hidden;
}
/* le widget Wowhead (power.js, iconSize:"large") injecte selon les cas un <ins>/<img> ou un
   <span> englobant : on force chacun a occuper toute la boite 64x64 du conteneur parent */
.item-card .item-wh-icon ins,
.item-card .item-wh-icon img,
.item-card .item-wh-icon span {
  display: block;
  width: 64px !important;
  height: 64px !important;
  min-width: 64px !important;
  border-radius: 6px;
  background-size: cover !important;
}
.item-card .item-wh-icon img { object-fit: cover; }
.item-card-text {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}
.item-card .item-wh-link {
  color: var(--text);
  text-decoration: none;
  font-size: 0.92rem;
  font-weight: 600;
  line-height: 1.25;
}
.item-card .item-wh-link:hover { text-decoration: underline; }
.item-card-levels {
  display: flex;
  flex-direction: column;
  gap: 2px;
  color: var(--muted);
  font-size: 0.76rem;
}
.item-card-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  margin-top: auto;
}
.item-card .item-card-id { color: var(--muted); font-size: 0.78rem; }
.item-card .btn-copy { padding: 6px 14px; font-size: 0.78rem; flex-shrink: 0; }

.warn-banner {
  border: 1px solid rgba(224, 169, 76, 0.5);
  background: rgba(224, 169, 76, 0.08);
  color: #e0a94c;
  border-radius: 8px;
  padding: 12px 16px;
  font-size: 0.85rem;
  margin: 14px 0 20px;
}

.player-actions {
  display: flex;
  flex-direction: column;
}
.player-action-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  flex-wrap: wrap;
  padding: 14px 0;
  border-bottom: 1px solid var(--border);
}
.player-action-row:last-child { border-bottom: none; }
.player-action-row .pa-label {
  color: var(--text);
  font-weight: 600;
  font-size: 0.9rem;
}
.player-action-row .pa-sub {
  display: block;
  color: var(--muted);
  font-size: 0.78rem;
  font-weight: 400;
  margin-top: 3px;
  max-width: 480px;
}
.player-action-row .pa-check {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  cursor: pointer;
  font-size: 0.88rem;
  color: var(--text);
}
.player-action-row .pa-check input { width: 18px; height: 18px; accent-color: var(--accent, #e0b84a); cursor: pointer; }
.player-action-row form {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 0;
}
.player-action-row select,
.player-action-row input[type="number"] {
  background: #0b0d11;
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 8px 10px;
  color: var(--text);
  font-family: inherit;
}
.player-action-row select:focus,
.player-action-row input[type="number"]:focus { outline: none; border-color: var(--accent-dim); }
.player-action-row input[type="number"] { width: 80px; }

.bug-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.bug-item {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 14px;
  padding: 12px 0;
  border-bottom: 1px solid var(--border);
}
.bug-item:last-child { border-bottom: none; }
.bug-item .bug-content {
  flex: 1;
  color: var(--text);
  font-size: 0.88rem;
  line-height: 1.5;
  white-space: pre-wrap;
  word-break: break-word;
}
.bug-item .bug-meta {
  color: var(--muted);
  font-size: 0.75rem;
  margin-bottom: 4px;
}
.bug-item form { flex-shrink: 0; }

.ios-switch {
  position: relative;
  display: inline-block;
  width: 51px;
  height: 30px;
  flex-shrink: 0;
}
.ios-switch input {
  position: absolute;
  opacity: 0;
  width: 100%;
  height: 100%;
  margin: 0;
  cursor: pointer;
}
.ios-switch-track {
  position: absolute;
  inset: 0;
  background: #3a3f4a;
  border-radius: 999px;
  transition: background-color 0.2s ease;
}
.ios-switch-track::before {
  content: "";
  position: absolute;
  top: 2px;
  left: 2px;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.35);
  transition: transform 0.2s ease;
}
.ios-switch input:checked + .ios-switch-track { background: var(--torrent); }
.ios-switch input:checked + .ios-switch-track::before { transform: translateX(21px); }
.ios-switch input:focus-visible + .ios-switch-track { outline: 2px solid var(--accent-dim); outline-offset: 2px; }

/* Carte (map.php) */
.map-toolbar, .map-marker-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 12px; margin-bottom: 14px; }
.map-toolbar label, .map-marker-form label { display: flex; flex-direction: column; gap: 4px; color: var(--muted); font-size: 0.8rem; }
.map-toolbar input, .map-toolbar select, .map-marker-form input { min-width: 0; }
.map-marker-form input[type="number"] { width: 120px; }
.map-marker-form input[type="text"] { width: 200px; }
.worldmap { position: relative; width: 100%; line-height: 0; }
.worldmap-view { position: relative; overflow: hidden; border-radius: 6px; box-shadow: 0 0 0 1px var(--border); cursor: crosshair; user-select: none; touch-action: none; background: #05070a; }
.worldmap-view.is-dragging { cursor: grabbing; }
.worldmap-stage { position: relative; transform-origin: 0 0; }
.worldmap-pin, .worldmap-cursor { transform: scale(calc(1 / var(--z, 1))); }
.worldmap-zoom { position: absolute; top: 10px; left: 10px; z-index: 6; display: flex; align-items: center; gap: 4px; line-height: 1; }
.worldmap-zoom button { width: 30px; height: 30px; padding: 0; background: rgba(15,18,24,0.88); border: 1px solid var(--border); border-radius: 6px; color: var(--accent); font-size: 1.1rem; cursor: pointer; }
.worldmap-zoom button:hover { border-color: var(--accent); background: var(--panel-2); }
.worldmap-zoom-level { min-width: 44px; padding: 0 6px; text-align: center; font-size: 0.75rem; color: var(--muted); background: rgba(15,18,24,0.88); border-radius: 6px; line-height: 30px; }
.worldmap img { display: block; width: 100%; height: auto; border-radius: 5px; }
.worldmap-layer { position: absolute; inset: 0; pointer-events: none; }
.worldmap-pin { position: absolute; width: 14px; height: 14px; margin: -7px 0 0 -7px; border-radius: 50%; border: 2px solid #fff; box-shadow: 0 0 6px rgba(0,0,0,0.8); pointer-events: auto; }
.worldmap-pin.pin-object { background: var(--danger); width: 18px; height: 18px; margin: -9px 0 0 -9px; }
.worldmap-pin.pin-marker { background: var(--arcane); }
.worldmap-cursor { position: absolute; width: 12px; height: 12px; margin: -6px 0 0 -6px; border: 2px dashed var(--accent); border-radius: 50%; pointer-events: none; }
#worldmap-coords { margin: 10px 0 14px; color: var(--muted); font-size: 0.85rem; }
.map-marker-list { list-style: none; margin: 0 0 10px; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.map-marker-list li { display: flex; align-items: center; justify-content: space-between; gap: 12px; color: var(--muted); font-size: 0.85rem; }
.map-marker-list .btn-copy { padding: 4px 12px; font-size: 0.75rem; }
.map-toolbar input, .map-toolbar select, .map-marker-form input {
  background: #0b0d11;
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 8px 10px;
  color: var(--text);
  font-family: inherit;
}
.map-toolbar input:focus, .map-toolbar select:focus, .map-marker-form input:focus { outline: none; border-color: var(--accent-dim); }

.worldmap-pin.pin-object { cursor: pointer; z-index: 3; }
.worldmap-pin.pin-nearby { width: 8px; height: 8px; margin: -4px 0 0 -4px; border-width: 1px; background: #b9c0d0; opacity: 0.85; cursor: pointer; z-index: 2; }
.worldmap-pin.pin-nearby:hover { background: var(--accent); opacity: 1; width: 12px; height: 12px; margin: -6px 0 0 -6px; }
.map-bubble { position: absolute; z-index: 5; width: 300px; max-width: 80%; padding: 12px 14px 12px; line-height: 1.35; cursor: default;
  background: var(--panel); border: 1px solid var(--accent-dim); border-radius: 8px; box-shadow: 0 6px 20px rgba(0,0,0,0.6); color: var(--text); font-size: 0.8rem; }
.map-bubble[hidden] { display: none; }
.map-bubble h3 { margin: 0 22px 8px 0; font-size: 0.95rem; color: var(--accent); }
.map-bubble-close { position: absolute; top: 6px; right: 8px; background: none; border: 0; color: var(--muted); font-size: 1.2rem; line-height: 1; cursor: pointer; }
.map-bubble-close:hover { color: var(--text); }
.map-bubble-rows > div { display: flex; justify-content: space-between; gap: 10px; padding: 2px 0; border-bottom: 1px dashed var(--border); }
.map-bubble-rows .k { color: var(--muted); flex: none; }
.map-bubble-rows .v { text-align: right; word-break: break-word; }
.map-bubble-state { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.map-bubble-state label { display: flex; flex-direction: column; gap: 4px; color: var(--muted); }
.map-bubble-state select { background: #0b0d11; border: 1px solid var(--border); border-radius: 6px; padding: 6px 8px; color: var(--text); font-family: inherit; }
.map-bubble-state .map-bubble-check { flex-direction: row; align-items: flex-start; gap: 6px; font-size: 0.72rem; }
.map-bubble-state .btn-copy { align-self: flex-start; }
.map-nearby-list { list-style: none; margin: 0; padding: 0; max-height: 260px; overflow-y: auto; border: 1px solid var(--border); border-radius: 6px; }
.map-nearby-list li + li { border-top: 1px solid var(--border); }
.map-nearby-list a { display: flex; align-items: baseline; gap: 12px; padding: 7px 12px; color: var(--text); text-decoration: none; font-size: 0.85rem; }
.map-nearby-list a:hover { background: var(--panel-2); }
.map-nearby-list .nb-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.map-nearby-list .nb-meta { color: var(--muted); font-size: 0.75rem; }
.map-nearby-list .nb-dist { color: var(--accent); min-width: 56px; text-align: right; }

.c-warrior { --cc: #c69b6d; } .c-paladin { --cc: #f48cba; } .c-hunter { --cc: #aad372; } .c-rogue { --cc: #fff468; }
.c-priest { --cc: #ffffff; } .c-deathknight { --cc: #c41e3a; } .c-shaman { --cc: #2d8cff; } .c-mage { --cc: #3fc7eb; }
.c-warlock { --cc: #8788ee; } .c-druid { --cc: #ff7c0a; } .c-none { --cc: var(--muted); }
.pl-name { color: var(--cc); }
.pl-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 12px; }
.pl-card { display: flex; align-items: center; gap: 12px; padding: 10px 12px; color: var(--text); text-decoration: none;
  background: var(--panel-2); border: 1px solid var(--border); border-left: 4px solid var(--cc); border-radius: 6px;
  transition: background .15s, border-color .15s; }
.pl-card:hover { background: #1d2230; border-color: var(--cc); }
.pl-card.is-selected { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; }
.pl-avatar { position: relative; flex: none; width: 56px; height: 56px; border-radius: 50%; border: 2px solid var(--cc); background: #000;
  display: grid; place-items: center; overflow: hidden; color: var(--cc); font: 700 1.3rem Cinzel, serif; }
.pl-avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.pl-body { display: flex; flex-direction: column; min-width: 0; flex: 1; line-height: 1.3; }
.pl-card .pl-name { font: 600 1.05rem Cinzel, Georgia, serif; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pl-line { font-size: 0.88rem; }
.pl-sub { font-size: 0.78rem; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pl-dot { display: inline-block; width: 9px; height: 9px; border-radius: 50%; margin-right: 5px; }
.pl-dot.alliance { background: #3a78d6; } .pl-dot.horde { background: #c0392b; }
.pl-status { flex: none; font-size: 0.72rem; color: var(--torrent); }
.pl-card.is-online .pl-avatar { box-shadow: 0 0 8px var(--torrent); }
.map-bubble-tp { position: absolute; top: 5px; right: 30px; background: none; border: 1px solid var(--border); border-radius: 4px; color: var(--accent);
  width: 24px; height: 22px; padding: 0; font-size: 0.95rem; line-height: 1; cursor: pointer; }
.map-bubble-tp:hover { border-color: var(--accent); background: var(--panel-2); }
.map-bubble h3 { margin-right: 60px; }

/* Objets sur la carte (gameobjets_map.php) */
.gm-layout { display: grid; grid-template-columns: minmax(0, 1fr) 330px; gap: 18px; align-items: start; }
.gm-side { position: sticky; top: 70px; max-height: calc(100vh - 90px); overflow-y: auto; display: flex; flex-direction: column; gap: 0; }
.gm-side .card { margin-bottom: 14px; }
.gm-status { color: var(--muted); font-size: 0.85rem; padding-bottom: 8px; }
.gm-canvas { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
.gm-ring { position: absolute; z-index: 3; width: 20px; height: 20px; margin: -10px 0 0 -10px; border: 2px solid #fff; border-radius: 50%; box-shadow: 0 0 8px rgba(0,0,0,0.9); pointer-events: none; }
.gm-ring-sel { width: 26px; height: 26px; margin: -13px 0 0 -13px; border-color: var(--accent); z-index: 4; }
.gm-ring[hidden], .gm-tip[hidden] { display: none; }
.gm-tip { position: absolute; z-index: 7; max-width: 250px; padding: 6px 9px; line-height: 1.35; font-size: 0.75rem; color: var(--text); pointer-events: none;
  background: var(--panel); border: 1px solid var(--accent-dim); border-radius: 6px; box-shadow: 0 4px 14px rgba(0,0,0,0.6); }
.gm-tip b { color: var(--accent); }
.gm-filters { display: flex; flex-direction: column; gap: 10px; }
.gm-filters label { display: flex; flex-direction: column; gap: 4px; color: var(--muted); font-size: 0.8rem; }
.gm-filters input, .gm-filters select { background: #0b0d11; border: 1px solid var(--border); border-radius: 6px; padding: 7px 9px; color: var(--text); font-family: inherit; min-width: 0; }
.gm-filters input:focus, .gm-filters select:focus { outline: none; border-color: var(--accent-dim); }
.gm-legend-tools { display: flex; gap: 8px; margin-bottom: 8px; }
.gm-legend-tools .btn-copy { padding: 4px 12px; font-size: 0.75rem; }
.gm-legend { display: flex; flex-direction: column; }
.gm-leg { display: flex; align-items: center; gap: 8px; padding: 3px 2px; font-size: 0.82rem; cursor: pointer; }
.gm-leg:hover { background: var(--panel-2); }
.gm-leg-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gm-leg b { color: var(--muted); font-weight: 400; font-size: 0.75rem; }
.gm-dot { display: inline-block; flex: none; width: 11px; height: 11px; margin-right: 4px; border-radius: 50%; border: 1px solid rgba(0,0,0,0.6); vertical-align: middle; }
.gm-leg .gm-dot { margin-right: 0; }
.gm-info-name { margin: 0 0 8px; font-size: 0.95rem; color: var(--accent); word-break: break-word; }
.gm-info-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 10px; }
.gm-info-actions .btn-copy { text-decoration: none; }
.gm-side .map-bubble-rows { font-size: 0.8rem; }
@media (max-width: 1000px) {
  .gm-layout { grid-template-columns: minmax(0, 1fr); }
  .gm-side { position: static; max-height: none; }
}

/* ==========================================================================
   Theme "armurerie" (20.09.2026) - reprend css/wow.css de l'armurerie locale
   (fond sombre, panneaux, or, titres Georgia, barre du haut, couleurs de classe
   et de qualite d'objet). Charge apres style.css : les variables du site
   public sont redefinies ici, uniquement pour la zone /ADMIN.
   ========================================================================== */
:root {
  --bg: #0b0b10;
  --panel: #14141c;
  --panel-2: #1b1b26;
  --border: #2e2b25;
  --text: #e9e4d6;
  --muted: #9b968a;
  --accent: #ffd75e;
  --accent-dim: #e8b923;
  --fond: #0b0b10; --panneau: #14141c; --panneau2: #1b1b26; --bord: #2e2b25;
  --or: #e8b923; --or-clair: #ffd75e; --texte: #e9e4d6; --muet: #9b968a;
  --alliance: #3a78d6; --horde: #c0392b;
  --q-poor: #9d9d9d; --q-common: #ffffff; --q-uncommon: #1eff00; --q-rare: #0070dd;
  --q-epic: #a335ee; --q-legendary: #ff8000; --q-artifact: #e6cc80; --q-heirloom: #00ccff;
  --q: #ffffff;
}
body { background: var(--fond); font: 15px/1.45 "Segoe UI", Roboto, Arial, sans-serif; min-height: 100vh; }
a { color: var(--or-clair); }
h1, h2, h3 { font-family: Georgia, "Times New Roman", serif; font-weight: 600; }

/* barre du haut (.barre) */
/* menu : style WoW defini dans ../style.css (les anciennes surcharges en boutons plats ont ete retirees le 21.09.2026) */
.nav-restart { border-radius: 4px; }

/* page et panneaux (.section) */
.wrap { max-width: 1400px; }
.admin-wrap { max-width: 720px; }
.admin-wrap-wide { max-width: 1400px; }
.admin-wrap-full { max-width: none; }
h1 { color: var(--or-clair); text-shadow: none; animation: none; }
header p { animation: none; }
.card { background: var(--panneau); border: 1px solid var(--bord); border-radius: 6px; animation: none; }
.card::before, .card::after, .card .corner-bl, .card .corner-br { display: none; }
.card h2 { color: var(--or-clair); text-transform: none; }
.divider { display: none; }

/* boutons et champs */
button, .btn-copy, .bouton {
  background: var(--panneau); color: var(--texte); border: 1px solid var(--bord); border-radius: 4px; font: inherit; cursor: pointer;
}
button:hover, .btn-copy:hover, .bouton:hover { border-color: var(--or); color: var(--or-clair); text-decoration: none; }
.bouton { display: inline-block; padding: 4px 12px; }
.btn-download {
  border-radius: 4px; box-shadow: none;
  background: var(--panneau2); border: 1px solid var(--or); color: var(--or-clair);
  font-family: Georgia, serif; text-transform: none;
}
.btn-download:hover { transform: none; box-shadow: none; background: #24232f; }
.btn-download::before { display: none; }
input[type="text"], input[type="password"], input[type="number"], input[type="search"], select, textarea {
  background: var(--panneau2); color: var(--texte); border: 1px solid var(--bord); border-radius: 4px; font-family: inherit;
}
input:focus, select:focus, textarea:focus { outline: none; border-color: var(--or); }
code { background: #000; border-radius: 4px; color: var(--or-clair); }
.item-card { border-radius: 6px; background: var(--panneau2); }
.item-card:hover { transform: none; border-color: var(--or); }

/* couleurs de classe (valeurs officielles, comme wow.css) et de qualite */
.c-shaman { --cc: #0070dd; }
.q-poor { --q: var(--q-poor); } .q-common { --q: var(--q-common); } .q-uncommon { --q: var(--q-uncommon); }
.q-rare { --q: var(--q-rare); } .q-epic { --q: var(--q-epic); } .q-legendary { --q: var(--q-legendary); }
.q-artifact { --q: var(--q-artifact); } .q-heirloom { --q: var(--q-heirloom); }

/* cartes de personnages (.carte de l'armurerie) */
.pl-card { background: var(--panneau); }
.pl-card:hover { background: var(--panneau2); text-decoration: none; }
.pl-card .pl-name { font-family: Georgia, "Times New Roman", serif; }

/* comptes : regroupement des personnages */
.acc-group { margin-bottom: 22px; }
.acc-head { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; padding: 8px 12px; margin-bottom: 12px;
  background: var(--panneau2); border: 1px solid var(--bord); border-left: 4px solid var(--or); border-radius: 6px; }
.acc-head h3 { font-size: 1.15rem; color: var(--or-clair); margin: 0; }
.acc-head .acc-meta { color: var(--muet); font-size: 0.85rem; }
.acc-head .acc-sp { flex: 1; }
.acc-head a.bouton { font-size: 0.8rem; padding: 2px 10px; }
.acc-empty { color: var(--muet); font-style: italic; margin: 0 0 4px; }

/* ---------- fiche personnage (player.php, comme personnage.html) ---------- */
.hero { position: relative; margin-bottom: 20px; overflow: hidden; background: var(--panneau); border: 1px solid var(--bord); border-radius: 6px; }
.entete { padding: 22px 26px 0; text-align: center; text-shadow: 0 2px 6px #000; }
.entete h1 { font-size: 2.6rem; color: var(--cc); line-height: 1.1; margin: 0; }
.entete .sous { font-size: 1.05rem; margin-top: 4px; }
.entete .sous .sp { color: var(--cc); }
.entete .guilde { color: var(--or-clair); margin-top: 2px; }
.pl-rankform { display: inline; margin: 0; }
.pl-rankform select { width: auto; min-width: 120px; margin-left: 4px; padding: 2px 6px; }
.entete .maj { font-size: 0.8rem; color: var(--muet); margin-top: 6px; }
.chips { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; margin-top: 12px; }
.chip { background: rgba(0,0,0,0.6); border: 1px solid var(--bord); border-radius: 14px; padding: 3px 12px; font-size: 0.88rem; }
.chip b { color: var(--or-clair); }
.chip.alliance { border-color: var(--alliance); }
.chip.horde { border-color: var(--horde); }
.chip.on { border-color: var(--q-uncommon); }
.chip.off { color: var(--muet); }
.chip.alerte { border-color: #ff5a4d; color: #ff8a80; }
.equip { display: grid; grid-template-columns: minmax(260px, 1fr) minmax(240px, 420px) minmax(260px, 1fr); gap: 10px; padding: 14px 20px 0; align-items: start; }
.colonne { display: flex; flex-direction: column; gap: 9px; padding-bottom: 20px; }
.rendu { align-self: stretch; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; padding: 0 0 20px; text-align: center; }
.rendu .emblem { width: 132px; height: 132px; border-radius: 50%; border: 3px solid var(--cc); background: #000; overflow: hidden; box-shadow: 0 0 26px rgba(0,0,0,0.8); }
.rendu .emblem img { width: 100%; height: 100%; object-fit: cover; }
.rendu .char3d { width: 100%; height: 460px; position: relative; }
.rendu .char3d[hidden], .rendu .emblem[hidden] { display: none; }
.char3d-opt { display: inline-flex; align-items: center; gap: 8px; font-size: 0.85rem; color: var(--muet); cursor: pointer; }
.char3d-opt[hidden], .char3d-arm[hidden] { display: none; }
.char3d-arm { display: flex; flex-direction: column; align-items: center; gap: 6px; }
.slot-vis { flex: none; margin-left: auto; display: grid; place-items: center; width: 34px; height: 34px; cursor: pointer; }
.slot-vis input { width: 18px; height: 18px; cursor: pointer; accent-color: var(--or); }
.colonne.droite .slot .slot-vis { margin-left: 0; margin-right: auto; }
.char3d-charge { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 12px; color: var(--muet); font-size: 0.9rem; pointer-events: none; }
.char3d-charge::before { content: ''; width: 34px; height: 34px; border: 3px solid rgba(255,255,255,0.15); border-top-color: var(--or, #d9b45a); border-radius: 50%; animation: char3d-tour 0.9s linear infinite; }
@keyframes char3d-tour { to { transform: rotate(360deg); } }
.char3d-canvas { width: 100%; height: 100%; display: block; outline: none; touch-action: none; cursor: grab; }
.rendu .barres { width: 100%; max-width: 300px; display: flex; flex-direction: column; gap: 5px; }
.barre-res { position: relative; height: 18px; background: #000; border: 1px solid var(--bord); border-radius: 3px; overflow: hidden; font-size: 0.72rem; line-height: 16px; text-align: center; text-shadow: 0 1px 2px #000; }
.barre-res i { position: absolute; left: 0; top: 0; bottom: 0; width: 100%; opacity: 0.85; }
.barre-res span { position: relative; }
.armes { display: flex; justify-content: center; gap: 30px; padding: 4px 20px 20px; flex-wrap: wrap; }
.armes .slot { min-width: 260px; }
.slot { display: flex; align-items: center; gap: 10px; min-height: 58px; background: rgba(8,8,12,0.72); border: 1px solid var(--bord); border-radius: 4px; padding: 4px 8px 4px 4px; min-width: 0; }
.colonne.droite .slot { flex-direction: row-reverse; text-align: right; padding: 4px 4px 4px 8px; }
.slot .ico { display: block; box-sizing: border-box; width: 50px; height: 50px; flex: none; border: 2px solid var(--q); border-radius: 4px; background: #000; position: relative; overflow: hidden; }
.slot .ico .item-wh-icon { display: block; box-sizing: border-box; width: 46px; height: 46px; overflow: hidden; }
.slot .ico ins, .slot .ico img, .slot .ico span { display: block; width: 46px !important; height: 46px !important; min-width: 46px !important; max-width: 46px !important; max-height: 46px !important; box-sizing: border-box; background-size: cover !important; position: absolute !important; top: 0 !important; left: 0 !important; margin: 0 !important; transform: none !important; }
.slot .ico del { display: none !important; }
.slot .ico ins { background-size: 100% 100% !important; background-position: 0 0 !important; background-repeat: no-repeat !important; }
.slot .txt { min-width: 0; }
.slot .nom { display: block; color: var(--q); font-weight: 600; font-size: 0.9rem; line-height: 1.2; overflow: hidden; text-overflow: ellipsis; }
.slot a.nom:hover { text-decoration: underline; }
.slot .det { font-size: 0.78rem; color: var(--muet); }
.slot .det .ench { color: var(--q-uncommon); }
.slot.vide { opacity: 0.45; border-style: dashed; }
.slot.vide .ico { border-color: var(--bord); display: grid; place-items: center; color: var(--muet); font-size: 0.65rem; text-align: center; }
.slot:hover:not(.vide) { background: rgba(30,30,44,0.9); border-color: var(--q); }
.grille2 { display: grid; grid-template-columns: minmax(300px, 1fr) minmax(320px, 1.4fr); gap: 20px; align-items: start; margin-bottom: 20px; }
.grille2 > .card { margin-bottom: 0; }
.groupe { margin-bottom: 14px; }
.groupe h3 { color: var(--muet); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.08em; border-bottom: 1px solid var(--bord); padding-bottom: 3px; margin: 0 0 4px; font-family: inherit; }
.stat-l { display: flex; justify-content: space-between; gap: 10px; padding: 2px 0; }
.stat-l .val { font-weight: 600; font-variant-numeric: tabular-nums; }
.stat-l .val small { color: var(--muet); font-weight: 400; }
.note { color: var(--muet); font-size: 0.82rem; margin: 6px 0 0; }
.vide-msg { color: var(--muet); font-style: italic; }
.reputs { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 10px; }
.reput { background: var(--panneau2); border: 1px solid var(--bord); border-radius: 6px; padding: 8px 12px; --rc: var(--muet); }
.reput .ligne { display: flex; justify-content: space-between; gap: 8px; }
.reput .rang { color: var(--rc); font-size: 0.85rem; white-space: nowrap; }
.reput .jauge { height: 8px; margin: 5px 0 3px; background: #000; border: 1px solid var(--bord); border-radius: 4px; overflow: hidden; }
.reput .jauge i { display: block; height: 100%; background: var(--rc); }
.reput .det { font-size: 0.78rem; color: var(--muet); }
.reput.r1, .reput.r2 { --rc: #c0392b; } .reput.r3 { --rc: #e67e22; } .reput.r4 { --rc: #e8d44d; }
.reput.r5 { --rc: #4caf50; } .reput.r6 { --rc: #2e9fd6; } .reput.r7 { --rc: #a335ee; } .reput.r8 { --rc: var(--or); }
.familiers { display: flex; flex-wrap: wrap; gap: 12px; }
.familier { background: var(--panneau2); border: 1px solid var(--bord); border-radius: 6px; padding: 8px 12px; }
.familier b { color: var(--or-clair); display: block; }
.familier span { color: var(--muet); font-size: 0.82rem; }
.acces-manquant { border: 1px dashed var(--bord); border-radius: 6px; padding: 10px 14px; color: var(--muet); font-size: 0.85rem; }
.acces-manquant code { padding: 1px 6px; font-size: 0.85em; }
@media (max-width: 1000px) {
  .equip { grid-template-columns: 1fr 1fr; }
  .rendu { grid-column: 1 / -1; order: -1; }
  .colonne.droite .slot { flex-direction: row; text-align: left; padding: 4px 8px 4px 4px; }
  .colonne.droite .slot .slot-vis { margin-left: auto; margin-right: 0; }
  .grille2 { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .equip { grid-template-columns: 1fr; padding: 10px 12px 0; }
  .entete h1 { font-size: 2rem; padding: 0 56px; }
  .pl-faction { top: 10px; left: 12px; width: 46px; height: 60px; }
  .pl-classe { top: 12px; right: 12px; width: 52px; height: 52px; }
}

/* ---------- carte et objets de carte (map.php, gameobjets_map.php) au theme armurerie ---------- */
.hint { color: var(--muet); font-size: 0.82rem; margin: 10px 0 0; }
.admin-wrap-full { padding-top: 28px; }
.admin-wrap-full header { text-align: left; margin-bottom: 18px; }
.admin-wrap-full h1 { font-size: 1.8rem; margin: 0 0 4px; }
.map-toolbar { padding-bottom: 12px; border-bottom: 1px solid var(--bord); }
.map-toolbar select { min-width: 220px; padding: 7px 10px; }
.worldmap-view { box-shadow: 0 0 0 1px var(--bord); border-radius: 4px; }
.worldmap-zoom button { border-radius: 4px; border-color: var(--bord); color: var(--or-clair); background: rgba(11,11,16,0.9); }
.worldmap-zoom button:hover { border-color: var(--or); background: var(--panneau2); }
.worldmap-zoom-level { background: rgba(11,11,16,0.9); border-radius: 4px; }
.map-bubble, .gm-tip { background: var(--panneau); border: 1px solid var(--or); border-radius: 4px; }
.map-bubble h3, .gm-tip b, .gm-info-name { color: var(--or-clair); }
.map-bubble-rows > div { border-bottom: 1px dashed var(--bord); }
.gm-layout { grid-template-columns: minmax(0, 1fr) 340px; }
.gm-side { top: 84px; max-height: calc(100vh - 104px); padding-right: 2px; scrollbar-width: thin; scrollbar-color: var(--bord) transparent; }
.gm-side .card h2 { font-size: 1.05rem; margin: 0 0 10px; padding-bottom: 6px; border-bottom: 1px solid var(--bord); }
.gm-status { color: var(--muet); padding-bottom: 0; align-self: center; margin-left: auto; }
.gm-filters label { color: var(--muet); }
.gm-filters input, .gm-filters select { background: var(--panneau2); border-color: var(--bord); border-radius: 4px; }
.gm-filters input:focus, .gm-filters select:focus { border-color: var(--or); }
.gm-legend-tools .btn-copy { padding: 4px 14px; }
.gm-legend { max-height: 46vh; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--bord) transparent; border: 1px solid var(--bord); border-radius: 4px; background: var(--panneau2); }
.gm-leg { padding: 4px 8px; border-bottom: 1px solid var(--bord); }
.gm-leg:last-child { border-bottom: none; }
.gm-leg:hover { background: #24232f; }
.gm-leg b { color: var(--muet); font-variant-numeric: tabular-nums; }
.gm-leg input[type="checkbox"] { accent-color: var(--or); margin: 0; }
.gm-ring-sel { border-color: var(--or-clair); }
.gm-info-actions .btn-copy { padding: 5px 12px; font-size: 0.8rem; display: inline-block; }
@media (max-width: 1000px) {
  .gm-status { margin-left: 0; }
  .gm-legend { max-height: 300px; }
}

/* Carte unifiee (map.php V2.0) : bulle de fiche avec actions, barre d'outils, voisins */
.map-toolbar form { display: flex; align-items: flex-end; gap: 8px; }
.map-toolbar #guid-input { width: 140px; }
.map-bubble { width: 340px; max-width: 86%; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--bord) transparent; }
.map-bubble .map-bubble-rows .k { max-width: 55%; }
.map-bubble .gm-dot { margin-right: 6px; }
.mb-det { margin-top: 8px; }
.mb-det summary { cursor: pointer; color: var(--or-clair); font-size: 0.8rem; }
.mb-det[open] summary { margin-bottom: 4px; }
.mb-title { margin: 12px 0 4px; padding-bottom: 3px; border-bottom: 1px solid var(--bord); color: var(--or-clair); font-size: 0.85rem; }
.mb-loot .map-bubble-rows { max-height: 170px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--bord) transparent; }
.mb-act { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 8px; margin-top: 8px; }
.mb-act label { display: flex; flex-direction: column; gap: 3px; color: var(--muet); font-size: 0.72rem; flex: 1 1 90px; min-width: 0; }
.mb-act input, .mb-act select { min-width: 0; background: var(--panneau2); border: 1px solid var(--bord); border-radius: 4px; padding: 5px 7px; color: var(--texte); font-family: inherit; font-size: 0.8rem; }
.mb-act input:focus, .mb-act select:focus { outline: none; border-color: var(--or); }
.mb-act .ios-switch input { padding: 0; }
.mb-act .btn-copy { padding: 5px 12px; font-size: 0.75rem; }
.mb-lbl { flex: 1 1 auto; color: var(--muet); font-size: 0.8rem; }
.mb-lbl b { color: var(--or-clair); font-weight: 600; }
.mb-actions .map-bubble-check { display: flex; align-items: flex-start; gap: 6px; margin-top: 10px; font-size: 0.72rem; color: var(--muet); }
.mb-msg { margin: 8px 0 0; padding: 6px 8px; border-radius: 4px; font-size: 0.78rem; line-height: 1.35; border: 1px solid var(--bord); }
.mb-msg.ok { color: #8fe08f; border-color: #2f6b2f; }
.mb-msg.ko { color: #ff8f8f; border-color: #7a2c2c; }
.map-nearby-list .gm-dot { flex: none; align-self: center; margin-right: 0; }
.gm-side .map-nearby-list { max-height: 300px; }
.gm-side .map-nearby-list a { gap: 8px; padding: 6px 8px; }
.gm-side .map-nearby-list .nb-meta { display: none; }
.gm-side .map-marker-form input[type="number"] { width: 90px; }
.gm-side .map-marker-form input[type="text"] { width: 100%; }
.gm-side .map-marker-form { margin-top: 0; }
.map-nearby-list { border-color: var(--bord); background: var(--panneau2); }
.map-nearby-list a:hover { background: #24232f; }
.map-nearby-list .nb-dist { color: var(--or-clair); }

/* Carte plein ecran (map.php V2.1) : aucune barre de defilement de page, la carte tient dans la fenetre. */
@media (min-width: 1001px) {
  body.map-page { height: 100vh; height: 100dvh; overflow: hidden; display: flex; flex-direction: column; }
  body.map-page .site-nav { flex: none; position: relative; padding: 10px 24px; }
  body.map-page .wrap.admin-wrap-full { flex: 1 1 auto; min-height: 0; display: flex; flex-direction: column; margin: 0; width: 100%; padding: 12px 16px; }
  body.map-page .wrap > header, body.map-page .wrap > footer { display: none; }
  body.map-page .admin-msg-card { flex: none; margin-bottom: 10px; padding: 10px 16px; }
  body.map-page .gm-layout { flex: 1 1 auto; min-height: 0; grid-template-rows: minmax(0, 1fr); align-items: stretch; gap: 14px; }
  body.map-page .gm-layout > .card { display: flex; flex-direction: column; min-height: 0; margin-bottom: 0; padding: 12px 16px; overflow: hidden; }
  body.map-page .map-toolbar { flex: none; margin-bottom: 8px; padding-bottom: 8px; }
  body.map-page .gm-layout > .card > .hint { flex: none; margin: 4px 0 0; font-size: 0.75rem; line-height: 1.3; }
  body.map-page .worldmap { flex: 1 1 auto; min-height: 0; container-type: size; }
  /* carte pleine largeur : la vue remplit la zone, l'image la recouvre (worldmap.js V1.3 : deplacement, zoom minimal = image entiere) */
  body.map-page .worldmap-view { width: 100cqw; height: 100cqh; }
  body.map-page .worldmap-stage { width: max(100cqw, calc(100cqh * var(--ar))); }
  body.map-page .gm-side { position: static; top: auto; max-height: none; min-height: 0; height: 100%; }
}

/* Bulle de la carte sur 2 colonnes (map.js V1.1) : largeur calculee en JS (inline), 1 colonne si trop etroite. */
.map-bubble { max-width: none; }
.mb-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0 18px; align-items: start; }
.mb-col { min-width: 0; }
.mb-col > .mb-title:first-child, .mb-col > .mb-loot:first-child > .mb-title, .mb-col > .mb-actions:first-child > .mb-title { margin-top: 0; }
.mb-col .mb-det:first-child { margin-top: 0; }
.mb-narrow .mb-cols { grid-template-columns: minmax(0, 1fr); }
.mb-cols .mb-actions > .mb-title { margin-top: 12px; }
.mb-col .mb-loot .map-bubble-rows { max-height: 140px; }

/* Le selecteur .mb-act label (flex: 1 1 90px) etirait l'interrupteur : taille fixe rendue a .ios-switch. */
.mb-act label.ios-switch { display: inline-block; flex: none; width: 51px; min-width: 51px; height: 30px; gap: 0; }

.mb-note { margin: 4px 0 0; font-size: 0.7rem; line-height: 1.3; }
.mb-link { padding: 0; background: none; border: 0; border-bottom: 1px dotted var(--or); color: var(--or-clair); font: inherit; cursor: pointer; }
.mb-link:hover { color: var(--texte); border-bottom-style: solid; }

/* Modal des objets d'une meme entry (map.js V1.3) */
.mb-modal { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; padding: 20px; background: rgba(4,4,8,0.72); }
.mb-modal[hidden] { display: none; }
.mb-modal-box { position: relative; display: flex; flex-direction: column; width: min(860px, 100%); max-height: 100%; padding: 16px 18px; background: var(--panneau); border: 1px solid var(--or); border-radius: 6px; box-shadow: 0 12px 40px rgba(0,0,0,0.6); line-height: 1.35; }
.mb-modal-box h3 { margin: 0 28px 4px 0; font-size: 1.05rem; color: var(--or-clair); }
.mb-modal-box h3 small { margin-left: 6px; color: var(--muet); font-size: 0.75rem; font-weight: 400; }
.mb-modal-box .hint { margin: 0 0 10px; font-size: 0.78rem; }
.mb-modal-box .map-bubble-close { position: absolute; top: 8px; right: 12px; background: none; border: 0; color: var(--muet); font-size: 1.4rem; line-height: 1; cursor: pointer; }
.mb-modal-box .map-bubble-close:hover { color: var(--texte); }
.mb-modal-list { min-height: 0; overflow: auto; border: 1px solid var(--bord); border-radius: 4px; scrollbar-width: thin; scrollbar-color: var(--bord) transparent; }
.mb-modal-table { width: 100%; border-collapse: collapse; font-size: 0.78rem; }
.mb-modal-table th { position: sticky; top: 0; padding: 6px 10px; background: var(--panneau2); color: var(--or-clair); font-weight: 600; text-align: left; white-space: nowrap; }
.mb-modal-table td { padding: 5px 10px; border-top: 1px solid var(--bord); white-space: nowrap; }
.mb-modal-table tbody tr { cursor: pointer; }
.mb-modal-table tbody tr:hover { background: #24232f; }
.mb-modal-table tr.is-cur td { color: var(--or-clair); background: rgba(217,180,92,0.08); }
.mb-modal-table em { color: var(--muet); font-style: normal; font-size: 0.7rem; }

/* Fiche joueur : elements editables de l'en-tete et modal d'edition (player.php) */
.pl-edit { display: inline; padding: 0; margin: 0; background: none; border: 0; border-bottom: 1px dashed transparent; border-radius: 0; color: inherit; font: inherit; text-transform: none; letter-spacing: inherit; cursor: pointer; }
.pl-edit i { margin-left: 6px; font-style: normal; font-size: 0.7em; opacity: 0; transition: opacity 0.15s; color: var(--or-clair); }
.pl-edit:hover, .pl-edit:focus-visible { border-bottom-color: var(--or); color: inherit; outline: none; }
.pl-edit:hover i, .pl-edit:focus-visible i { opacity: 1; }
.entete h1 .pl-edit { color: var(--cc); }
.entete .sous .pl-edit.sp { color: var(--cc); }
.chip.pl-edit { display: inline-block; padding: 3px 12px; background: rgba(0,0,0,0.6); border: 1px solid var(--bord); border-radius: 14px; }
.chip.pl-edit:hover { border-color: var(--or); }
.pl-modal { position: fixed; inset: 0; z-index: 100; display: flex; align-items: center; justify-content: center; padding: 20px; background: rgba(4,4,8,0.72); }
.pl-modal[hidden] { display: none; }
.pl-modal-box { position: relative; width: min(520px, 100%); max-height: 100%; overflow: auto; padding: 18px 22px 20px; background: var(--panneau); border: 1px solid var(--or); border-radius: 6px; box-shadow: 0 12px 40px rgba(0,0,0,0.6); }
.pl-modal-box h3 { margin: 0 28px 14px 0; font-size: 1.15rem; color: var(--or-clair); }
.pl-modal-box h3 small { margin-left: 6px; color: var(--muet); font-size: 0.75rem; font-weight: 400; }
.pl-modal-close { position: absolute; top: 8px; right: 12px; padding: 0; background: none; border: 0; color: var(--muet); font-size: 1.6rem; line-height: 1; cursor: pointer; }
.pl-modal-close:hover { color: var(--texte); border: 0; }
.pl-panel[hidden] { display: none; }
.pl-panel-sub { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--bord); }
.pl-modal-box .note { margin: 10px 0 0; font-size: 0.78rem; }
.pl-modal-btns { display: flex; justify-content: flex-end; gap: 8px; margin-top: 14px; }
.pl-ok { border-color: var(--or); color: var(--or-clair); }
.pl-field { display: block; font-size: 0.85rem; color: var(--muet); }
.pl-field input, .pl-level input[type="number"], .pl-coin input { background: var(--panneau2); border: 1px solid var(--bord); border-radius: 4px; color: var(--texte); font: inherit; }
.pl-field input { display: block; width: 100%; margin-top: 6px; padding: 10px 12px; font-size: 1.3rem; }
.pl-field input:focus, .pl-level input:focus, .pl-coin input:focus { outline: none; border-color: var(--or); }
.pl-money { display: flex; gap: 10px; }
.pl-coin { flex: 1 1 0; display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 10px 8px; background: var(--panneau2); border: 1px solid var(--bord); border-radius: 6px; }
.pl-coin input { width: 100%; padding: 6px 4px; font-size: 1.4rem; text-align: center; }
.pl-coin span { font: 700 0.9rem Cinzel, serif; }
.pl-coin.gold { border-color: #d9b45c; } .pl-coin.gold span { color: #f2cf6b; }
.pl-coin.silver { border-color: #a9b1b8; } .pl-coin.silver span { color: #cfd6dc; }
.pl-coin.copper { border-color: #b5713d; } .pl-coin.copper span { color: #d98b4f; }
.pl-level { display: flex; align-items: center; gap: 14px; }
.pl-level input[type="range"] { flex: 1; accent-color: var(--or); }
.pl-level input[type="number"] { width: 84px; padding: 8px; font-size: 1.4rem; text-align: center; }
.pl-quick { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.pl-quick .btn-copy { padding: 4px 12px; font-size: 0.8rem; }
.pl-choices { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 8px; }
.pl-choices-2 { grid-template-columns: 1fr 1fr; }
.pl-choice { display: block; cursor: pointer; }
.pl-choice input { position: absolute; opacity: 0; pointer-events: none; }
.pl-choice-box { display: flex; align-items: center; gap: 10px; padding: 8px 10px; background: var(--panneau2); border: 1px solid var(--bord); border-left: 4px solid var(--cc, var(--bord)); border-radius: 6px; transition: background 0.15s, border-color 0.15s; }
.pl-choice-box img { flex: none; width: 36px; height: 36px; border: 2px solid var(--cc, var(--bord)); border-radius: 50%; }
.pl-choice-box b { font-size: 0.85rem; color: var(--cc, var(--texte)); }
.pl-choice:hover .pl-choice-box { border-color: var(--cc, var(--or)); }
.pl-choice input:checked + .pl-choice-box { background: rgba(217,180,92,0.12); border-color: var(--or); box-shadow: 0 0 0 1px var(--or) inset; }
.pl-choice input:focus-visible + .pl-choice-box { outline: 2px solid var(--or-clair); outline-offset: 2px; }
.pl-choices-2 .pl-choice-box { flex-direction: column; justify-content: center; padding: 18px 10px; border-left-width: 1px; }
.pl-sym { font-size: 2.6rem; line-height: 1; }
.pl-choices-2 .pl-choice:nth-child(1) .pl-sym { color: #4aa3ff; }
.pl-choices-2 .pl-choice:nth-child(2) .pl-sym { color: #ff7ab8; }
/* Fiche joueur : fond = ecran de chargement de la carte du personnage */
.pl-scene { position: fixed; inset: 0; z-index: -1; background-size: cover; background-position: center; opacity: 0.55; filter: saturate(1.05); pointer-events: none; }
.pl-scene::after { content: ""; position: absolute; inset: 0; background: linear-gradient(to bottom, rgba(8,8,12,0.55), rgba(8,8,12,0.25) 35%, rgba(8,8,12,0.75)); }
.hero.has-scene { background: rgba(14,14,20,0.72); }
/* Fiche joueur : icone de faction a gauche du nom + choix de faction dans le modal */
.entete h1 { display: flex; align-items: center; justify-content: center; gap: 14px; }
.pl-faction { position: absolute; top: 16px; left: 24px; z-index: 2; width: 72px; height: 94px; padding: 0; background: none; border: 0; font: 700 1.4rem Cinzel, serif; color: var(--texte); cursor: pointer; transition: transform 0.15s, box-shadow 0.15s; }
.pl-faction img { display: block; width: 100%; height: 100%; object-fit: contain; filter: drop-shadow(0 2px 6px rgba(0,0,0,0.7)); }
.pl-classe { position: absolute; top: 18px; right: 24px; z-index: 2; width: 84px; height: 84px; border-radius: 50%; border: 2px solid var(--cc); overflow: hidden; background: #000; box-shadow: 0 2px 10px rgba(0,0,0,0.7); }
.pl-classe img { display: block; width: 100%; height: 100%; object-fit: cover; }
.pl-faction:hover { transform: scale(1.1); }
.pl-faction:hover img { filter: drop-shadow(0 0 10px rgba(217,180,92,0.8)); }
.pl-choice-btn { width: 100%; padding: 0; background: none; border: 0; text-align: left; font: inherit; color: inherit; }
.pl-choice-btn:disabled { opacity: 0.45; cursor: not-allowed; }
.pl-choices-2 .pl-choice-box img { width: 72px; height: 92px; border: 0; border-radius: 0; object-fit: contain; }
.pl-choice-box small { color: var(--muet); font-size: 0.72rem; }
.pl-choice-box.pl-fac-alliance b { color: #5a9dff; } .pl-choice-box.pl-fac-horde b { color: #ff5a4d; }
.pl-choice-box.is-current { background: rgba(217,180,92,0.12); border-color: var(--or); box-shadow: 0 0 0 1px var(--or) inset; }
.pl-choice-btn:not(:disabled):hover .pl-choice-box { border-color: var(--or); }

/* Tableau de bord : cartes de comptes (dashboard.php), sur le modele de .carte de l'armurerie */
.ac-summary { display: flex; flex-wrap: wrap; justify-content: center; gap: 8px; margin: 0 0 14px; }
.outils { display: flex; flex-wrap: wrap; justify-content: center; gap: 12px; align-items: center; margin-bottom: 18px; }
.outils input, .outils select { background: var(--panneau2); color: var(--texte); border: 1px solid var(--bord); border-radius: 4px; padding: 8px 10px; font: inherit; }
.outils input { flex: 0 0 320px; width: 320px; max-width: 100%; }
.outils .compte { color: var(--muet); font-size: 0.85rem; }
/* Comptes : 6 colonnes centrees (moins de comptes que de colonnes = lignes centrees) */
.wrap.admin-wrap-dash { max-width: 1700px; }
.ac-grid { --ac-cols: 6; --ac-gap: 14px; display: flex; flex-wrap: wrap; justify-content: center; gap: var(--ac-gap); margin-bottom: 20px; }
.ac-grid > .ac-card { box-sizing: border-box; min-width: 0; flex: 0 0 calc((100% - (var(--ac-cols) - 1) * var(--ac-gap)) / var(--ac-cols)); }
@media (max-width: 1400px) { .ac-grid { --ac-cols: 4; } }
@media (max-width: 1000px) { .ac-grid { --ac-cols: 3; } }
@media (max-width: 720px) { .ac-grid { --ac-cols: 2; } }
@media (max-width: 480px) { .ac-grid { --ac-cols: 1; } }
.ac-card { display: flex; flex-direction: column; gap: 10px; padding: 14px; cursor: pointer; background: var(--panneau); border: 1px solid var(--bord);
  border-left: 4px solid var(--bord); border-radius: 6px; transition: background .15s, border-color .15s; }
.ac-card[hidden], .vide-msg[hidden] { display: none; }
.ac-card:hover { background: var(--panneau2); border-color: var(--or); }
.ac-card.is-online { border-left-color: var(--q-uncommon, #1eff00); }
.ac-card.is-banned { border-left-color: #ff5a4d; }
.ac-head { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; }
.ac-avatar { flex: none; width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center; background: #000; color: var(--or-clair);
  border: 2px solid var(--or); font: 700 1.3rem Cinzel, Georgia, serif; }
.ac-card.is-online .ac-avatar { box-shadow: 0 0 10px var(--torrent); }
.ac-id { display: flex; flex-direction: column; min-width: 0; flex: 1; line-height: 1.3; }
.ac-name { font: 600 1.15rem Georgia, "Times New Roman", serif; color: var(--or-clair); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; text-decoration: none; }
.ac-name:hover { text-decoration: underline; }
.ac-nameline { display: flex; align-items: center; gap: 6px; min-width: 0; }
.ac-nameline .ac-name { min-width: 0; }
.ac-gm { flex: none; }
.ac-sub { font-size: 0.8rem; color: var(--muet); }
.ac-status { flex: 1 0 100%; font-size: 0.75rem; color: var(--muet); }
.ac-card.is-online .ac-status { color: var(--torrent); }
.ac-badges { display: flex; flex-wrap: wrap; gap: 6px; }
.ac-chars { display: flex; flex-direction: column; gap: 5px; }
.ac-char { display: flex; align-items: center; gap: 9px; padding: 4px 8px; color: var(--texte); text-decoration: none; background: rgba(0,0,0,0.25);
  border: 1px solid var(--bord); border-left: 3px solid var(--cc); border-radius: 5px; }
.ac-char:hover { background: rgba(255,255,255,0.06); border-color: var(--cc); text-decoration: none; }
.ac-ico { position: relative; flex: none; width: 28px; height: 28px; border-radius: 50%; border: 2px solid var(--cc); background: #000; display: grid; place-items: center;
  overflow: hidden; color: var(--cc); font: 700 0.8rem Cinzel, serif; }
.ac-ico img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.ac-char.is-online .ac-ico { box-shadow: 0 0 6px var(--torrent); }
.ac-cname { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--cc); font-family: Georgia, serif; }
.ac-lvl { flex: none; font-size: 0.8rem; color: var(--muet); }
.ac-lvl .pl-dot { margin-right: 5px; }
.ac-empty { margin: 0; color: var(--muet); font-style: italic; font-size: 0.85rem; }
.ac-foot { display: flex; justify-content: space-between; gap: 8px; margin-top: auto; padding-top: 8px; border-top: 1px solid var(--bord); font-size: 0.75rem; color: var(--muet); }
.ac-open { color: var(--or); }

/* Page des quetes d'un personnage (quests.php) */
.qt-bar { height: 14px; border-radius: 7px; background: rgba(255,255,255,0.08); border: 1px solid var(--bordure, rgba(255,255,255,0.15)); overflow: hidden; margin: 4px 0 8px; }
.qt-bar i { display: block; height: 100%; background: linear-gradient(90deg, var(--or-clair), var(--accent)); }
.qt-search { display: flex; align-items: center; gap: 10px; margin: 10px 0 0; }
.qt-search input { flex: 1; max-width: 360px; }
.qt-scroll { max-height: 640px; overflow: auto; }
.qt-table { width: 100%; border-collapse: collapse; font-size: 0.92rem; }
.qt-table th { position: sticky; top: 0; background: #14141c; text-align: left; padding: 6px 10px; color: var(--or-clair); }
.qt-table td { padding: 5px 10px; border-top: 1px solid rgba(255,255,255,0.07); }
.qt-table tr:hover td { background: rgba(255,255,255,0.04); }

/* Cases a cocher de la barre d'outils de la carte (joueurs, grille) */
.map-toolbar label.map-check { flex-direction: row; align-items: center; gap: 6px; padding-bottom: 8px; font-size: 0.85rem; cursor: pointer; }
.map-toolbar label.map-check input { width: auto; margin: 0; padding: 0; }
.map-toolbar .map-sync { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; padding: 0; margin-bottom: 4px; background: transparent; color: inherit; border: 1px solid currentColor; border-radius: 6px; cursor: pointer; opacity: 0.85; }
.map-toolbar .map-sync:hover { opacity: 1; }
.map-toolbar .map-sync.spin svg { animation: map-sync-spin 0.8s linear infinite; }
@keyframes map-sync-spin { to { transform: rotate(360deg); } }

/* Fiche joueur : progression de niveau (barre d'XP + 80 cases, une par niveau) */
.pl-niv { max-width: 860px; margin: 16px auto 4px; padding: 0 26px; text-shadow: 0 1px 4px #000; }
.pl-niv-tete { display: flex; justify-content: space-between; gap: 10px; flex-wrap: wrap; font-size: 0.85rem; color: var(--muet); margin-bottom: 4px; }
.pl-niv-tete b { color: var(--cc); font-size: 1rem; }
.pl-xp { --xc: #a45cff; display: flex; height: 12px; margin-bottom: 8px; border: 1px solid rgba(255,255,255,0.22); border-radius: 6px; overflow: hidden; background: rgba(0,0,0,0.55); }
.pl-xp i { flex: 1 1 0; min-width: 0; height: 100%; border-right: 1px solid rgba(255,255,255,0.22); background: linear-gradient(90deg, var(--xc) var(--p), transparent var(--p)); }
.pl-xp i:last-child { border-right: 0; }
.pl-cases { display: flex; gap: 2px; padding-bottom: 16px; }
.pl-cases span { position: relative; flex: 1 1 0; min-width: 0; height: 12px; border-radius: 2px; background: rgba(0,0,0,0.55); border: 1px solid rgba(255,255,255,0.18); }
.pl-cmd { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 10px 0; font-size: 0.85rem; }
.pl-cmd code { padding: 3px 8px; background: var(--panneau2); border: 1px solid var(--bord); border-radius: 4px; color: var(--or-clair); }
.pl-cases span.clic { cursor: pointer; }
.pl-cases span.clic:hover { border-color: var(--or); outline: 1px solid var(--or); z-index: 1; }
.pl-cases span.fait { background: var(--cc); border-color: rgba(255,255,255,0.35); }
.pl-cases span.cur { background: linear-gradient(90deg, var(--cc) var(--p), rgba(0,0,0,0.55) var(--p)); border-color: #fff; box-shadow: 0 0 6px var(--cc); }
.pl-cases span.dix { height: 18px; margin-top: -3px; }
.pl-cases span em { position: absolute; top: 100%; left: 50%; transform: translateX(-50%); margin-top: 1px; font-style: normal; font-size: 0.65rem; color: var(--muet); }
@media (max-width: 640px) { .pl-niv { padding: 0 12px; } .pl-cases { gap: 1px; } .pl-cases span { border-width: 0; } }
/* Acces public : bouton Connexion du menu + modal, bloc "reserve aux administrateurs" */
.nav-login { background: transparent; border: 1px solid var(--or); color: var(--or-clair); border-radius: 4px; padding: 4px 14px; font: inherit; font-size: 0.85rem; cursor: pointer; }
.nav-login:hover { background: var(--or); color: #1a1408; }
.adm-modal { position: fixed; inset: 0; z-index: 200; display: flex; align-items: center; justify-content: center; padding: 20px; background: rgba(4,4,8,0.72); }
.adm-modal[hidden] { display: none; }
.adm-modal-box { position: relative; width: min(400px, 100%); padding: 18px 22px 20px; background: var(--panneau); border: 1px solid var(--or); border-radius: 6px; box-shadow: 0 10px 40px rgba(0,0,0,0.6); color: var(--texte); text-align: left; }
.adm-modal-box h3 { margin: 0 28px 14px 0; font-size: 1.15rem; color: var(--or-clair); }
.adm-modal-close { position: absolute; top: 8px; right: 12px; padding: 0; background: none; border: 0; color: var(--muet); font-size: 1.6rem; line-height: 1; cursor: pointer; }
.adm-modal-close:hover { color: var(--texte); }
.adm-modal-box .admin-form { display: flex; flex-direction: column; gap: 12px; }
.adm-modal-box .admin-msg { margin: 0; }
.admin-readonly { padding: 12px 16px; margin: 8px 0; background: rgba(217,180,92,0.07); border: 1px solid var(--bord); border-left: 3px solid var(--or); border-radius: 4px; }
.admin-readonly-msg { margin: 0; color: var(--or-clair); font-weight: 600; }
.admin-readonly-sub { margin: 8px 0 4px; color: var(--muet); font-size: 0.85rem; }
.admin-gm-list { display: flex; flex-wrap: wrap; gap: 6px 8px; margin: 0; padding: 0; list-style: none; }
.admin-gm-list li { padding: 3px 12px; background: rgba(0,0,0,0.35); border: 1px solid var(--bord); border-radius: 14px; }
.admin-gm-list small { margin-left: 4px; color: var(--muet); font-size: 0.72rem; }
.admin-fs { min-width: 0; margin: 0; padding: 0; border: 0; }
.admin-fs:disabled input, .admin-fs:disabled select { opacity: 0.75; cursor: not-allowed; }
.pl-ro .pl-edit { cursor: default; pointer-events: none; }
.pl-ro .pl-edit i { display: none; }
.pl-ro .pl-faction { cursor: default; pointer-events: none; }
.pl-ro .pl-faction:hover { transform: none; }

/* Barre des niveaux : couleurs par palier (1-60 blanc, 61-70 jaune clair, 71-80 bleu clair) */
.pl-cases span.t1 { --cc: #ffffff; }
.pl-cases span.t2 { --cc: #fff1a8; }
.pl-cases span.t3 { --cc: #9fd6ff; }
.pl-niv.t1 .pl-xp { --xc: #ffffff; }
.pl-niv.t2 .pl-xp { --xc: #fff1a8; }
.pl-niv.t3 .pl-xp { --xc: #9fd6ff; }

/* Page taux serveur : une card par theme */
.rate-groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(440px, 100%), 1fr)); gap: 18px; align-items: start; }
.rate-card { margin: 0; }
.rate-card h2 { margin-bottom: 2px; }
.rate-card-sub { margin: 0 0 4px; color: var(--muted); font-size: 0.8rem; }
.rate-card .admin-rate-row { padding: 11px 0; }
.rate-card .admin-rate-row .ar-label { flex: 1 1 200px; }
.rate-card .admin-rate-row:last-child { border-bottom: none; }

/* Page comparaison d'equipe */
.cmp-filters { display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-end; margin-bottom: 12px; }
.cmp-filters label { display: flex; flex-direction: column; gap: 6px; color: var(--muted); font-size: 0.85rem; flex: 1; min-width: 200px; }
.cmp-filters select, .cmp-filters input { background: #0b0d11; border: 1px solid var(--border); border-radius: 6px; padding: 9px 11px; color: var(--text); font-family: inherit; font-size: 0.95rem; }
.cmp-filters select:focus, .cmp-filters input:focus { outline: none; border-color: var(--accent-dim); }
.cmp-list { max-height: 340px; overflow-y: auto; padding-right: 4px; }
.cmp-band { display: flex; justify-content: space-between; align-items: baseline; margin: 12px 0 6px; padding-bottom: 3px; border-bottom: 1px solid var(--border); color: var(--accent); font: 600 0.95rem Cinzel, Georgia, serif; }
.cmp-band:first-child { margin-top: 0; }
.cmp-band small { color: var(--muted); font: 400 0.75rem "Segoe UI", sans-serif; }
.cmp-band-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 5px; }
.cmp-band-grid .ac-char { cursor: grab; user-select: none; }
.cmp-band-grid .ac-char.is-placed { opacity: 0.4; }
.cmp-cols { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; align-items: start; margin-top: 18px; }
.cmp-col { margin: 0; min-height: 220px; transition: border-color 0.15s, box-shadow 0.15s; }
.cmp-col.drop { border-color: var(--accent); box-shadow: 0 0 14px rgba(227,194,110,0.35); }
.cmp-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; min-height: 180px; border: 2px dashed var(--border); border-radius: 8px; color: var(--muted); text-align: center; }
.cmp-empty strong { color: var(--accent); font-family: Cinzel, Georgia, serif; }
.cmp-head { position: relative; cursor: grab; padding-right: 30px; }
/* modele 3D du personnage compare (char3d.js), comme les cartes de l'accueil */
.cmp-3d { position: relative; display: block; width: 170px; height: 240px; margin: 10px auto 4px; background: radial-gradient(ellipse at 50% 85%, rgba(232,185,35,0.16), transparent 70%); transition: background .25s; }
.cmp-3d:hover { background: radial-gradient(ellipse at 50% 85%, rgba(232,185,35,0.32), transparent 72%); }
.cmp-3d-scene, .cmp-3d-scene canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; outline: none; }
.cmp-3d .char3d-charge { font-size: 0.8rem; }
.cmp-3d-sans .cmp-3d-scene::after { content: '?'; position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; color: var(--muet); font-size: 2.4rem; }
html[data-theme="glace"] .cmp-3d { background: radial-gradient(ellipse at 50% 85%, rgba(127,216,255,0.22), transparent 70%); }
html[data-theme="glace"] .cmp-3d:hover { background: radial-gradient(ellipse at 50% 85%, rgba(127,216,255,0.40), transparent 72%); }
.cmp-id { display: flex; flex-direction: column; min-width: 0; flex: 1; }
.cmp-id small { color: var(--muted); font-size: 0.75rem; }
.cmp-x { position: absolute; top: 4px; right: 6px; background: none; border: 0; color: var(--muted); font-size: 1.3rem; line-height: 1; cursor: pointer; }
.cmp-x:hover { color: var(--danger); }
.cmp-sec { margin-top: 14px; }
.cmp-sec h3 { margin: 0 0 6px; font: 600 0.8rem "Segoe UI", sans-serif; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); }
.cmp-big { display: flex; align-items: center; gap: 10px; font: 700 2rem Cinzel, Georgia, serif; color: var(--accent); }
.cmp-delta { font: 600 0.75rem "Segoe UI", sans-serif; padding: 2px 8px; border-radius: 10px; }
.cmp-delta.retard { background: rgba(224,98,92,0.18); color: var(--danger); }
.cmp-delta.tete { background: rgba(95,191,122,0.18); color: var(--ok); }
.cmp-bar { height: 8px; margin: 4px 0; border: 1px solid rgba(255,255,255,0.22); border-radius: 4px; background: rgba(0,0,0,0.55); overflow: hidden; }
.cmp-bar.thin { height: 5px; margin: 2px 0 8px; }
.cmp-bar i { display: block; height: 100%; background: linear-gradient(90deg, #6b2fbf, #a45cff); }
.cmp-bar.thin i { background: var(--accent-dim); }
.cmp-sub { color: var(--muted); font-size: 0.78rem; }
.cmp-line { display: flex; justify-content: space-between; align-items: baseline; gap: 10px; font-size: 0.88rem; padding: 2px 0; }
.cmp-line b { font-variant-numeric: tabular-nums; }
.cmp-line b.top { color: var(--ok); }
.cmp-line .sec { color: var(--muted); }
.cmp-wname { display: flex; flex-direction: column; min-width: 0; }
.cmp-wname small { color: var(--muted); font-size: 0.72rem; }
.cmp-quests { list-style: none; margin: 0; padding: 0; max-height: 300px; overflow-y: auto; }
.cmp-quests li { display: flex; justify-content: space-between; gap: 8px; padding: 3px 0; border-bottom: 1px solid var(--border); font-size: 0.83rem; }
.cmp-quests li a { color: var(--text); text-decoration: none; }
.cmp-quests li a:hover { color: var(--accent); }
.cmp-quests li small { flex: none; color: var(--muted); }
.cmp-quests li.fait small { color: var(--ok); }
@media (max-width: 900px) { .cmp-cols { grid-template-columns: 1fr; } }
.cmp-wname a { color: var(--q, var(--text)); text-decoration: none; }
.cmp-wname a:hover { text-decoration: underline; }
/* Comparaison : volets de selection a gauche, fermes par defaut */
.cmp-layout { display: grid; grid-template-columns: 340px minmax(0, 1fr); gap: 18px; align-items: start; }
.cmp-side { display: flex; flex-direction: column; gap: 14px; position: sticky; top: 12px; max-height: calc(100vh - 24px); overflow-y: auto; }
.cmp-panel { margin: 0; }
.cmp-panel > summary { list-style: none; cursor: pointer; display: flex; align-items: center; justify-content: space-between; gap: 8px; }
.cmp-panel > summary::-webkit-details-marker { display: none; }
.cmp-panel > summary h2 { margin: 0; }
.cmp-panel > summary::after { content: "▸"; color: var(--accent); font-size: 1.1rem; transition: transform 0.15s; }
.cmp-panel[open] > summary::after { transform: rotate(90deg); }
.cmp-panel .cmp-filters label { min-width: 0; flex-basis: 100%; }
.cmp-panel .cmp-band-grid { grid-template-columns: 1fr; }
.cmp-layout .cmp-cols { margin-top: 0; }
@media (max-width: 1100px) { .cmp-layout { grid-template-columns: 1fr; } .cmp-side { position: static; max-height: none; } }
.cmp-main { display: flex; flex-direction: column; gap: 18px; min-width: 0; }
.cmp-main .cmp-cols { margin-top: 0; }
.cmp-shared { margin: 0; }
.cmp-shared[hidden] { display: none; }
.cmp-shared h2 { margin: 0 0 10px; }
.cmp-shared-groups { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 16px; }
.cmp-shared-group h3 { margin: 0 0 6px; font: 600 0.95rem Cinzel, Georgia, serif; color: var(--accent); }
.cmp-shared-group h3 small { color: var(--muted); font: 400 0.75rem "Segoe UI", sans-serif; }
.cmp-shared-group .cmp-quests { max-height: 360px; }
.cmp-line b.rep.r1, .cmp-line b.rep.r2 { color: #c0392b; } .cmp-line b.rep.r3 { color: #e67e22; } .cmp-line b.rep.r4 { color: #e8d44d; }
.cmp-line b.rep.r5 { color: #4caf50; } .cmp-line b.rep.r6 { color: #2e9fd6; } .cmp-line b.rep.r7 { color: #a335ee; } .cmp-line b.rep.r8 { color: var(--accent); }
.cmp-bar.rep.r1 i, .cmp-bar.rep.r2 i { background: #c0392b; } .cmp-bar.rep.r3 i { background: #e67e22; } .cmp-bar.rep.r4 i { background: #e8d44d; }
.cmp-bar.rep.r5 i { background: #4caf50; } .cmp-bar.rep.r6 i { background: #2e9fd6; } .cmp-bar.rep.r7 i { background: #a335ee; } .cmp-bar.rep.r8 i { background: var(--accent); }
.cmp-side .cmp-title { margin: 0; text-align: left; }
.cmp-side .cmp-title h1 { font-size: 1.5rem; margin: 0 0 6px; }
.cmp-side .cmp-title p { font-size: 0.85rem; }
.site-nav .nav-login { font-family: "Cinzel", "Segoe UI", serif; font-weight: 600; font-size: 0.75rem; letter-spacing: 0.1em; text-transform: uppercase; margin-left: 14px; padding: 6px 16px; border: 1px solid var(--accent-dim); border-radius: 3px; color: #ffe08a; background: linear-gradient(180deg, rgba(120,84,30,0.55), rgba(40,26,10,0.85)); box-shadow: inset 0 1px 0 rgba(255,235,180,0.25), 0 1px 4px rgba(0,0,0,0.6); text-shadow: 0 1px 2px #000; }
.site-nav .nav-login:hover { background: linear-gradient(180deg, rgba(170,120,40,0.75), rgba(70,46,14,0.9)); color: #fff6d8; box-shadow: inset 0 1px 0 rgba(255,235,180,0.4), 0 0 12px rgba(227,194,110,0.45); }
.site-nav .admin-who { margin-left: 14px; font-family: "Cinzel", serif; font-size: 0.72rem; letter-spacing: 0.06em; color: #a89468; }
/* Accueil : modification de compte (MJ) */
.ac-card.is-readonly { cursor: default; }
.ac-card.is-readonly:hover { background: var(--panneau); border-color: var(--bord); }
button.ac-open { padding: 0; background: none; border: 0; color: var(--or); font: inherit; cursor: pointer; }
button.ac-open:hover { color: var(--or-clair); }
.ac-edit-sec { margin: 0; padding: 12px 0; border-top: 1px solid var(--bord); }
.ac-edit-sec[hidden] { display: none; }
.ac-edit-sec h4 { margin: 0 0 10px; font: 600 0.85rem Cinzel, serif; color: var(--or); letter-spacing: 0.05em; }
.ac-gm-choices { grid-template-columns: repeat(4, 1fr); }
.ac-gm-choices .pl-choice-box { justify-content: center; }
/* Donjons et raids de la guilde (donjons.php) */
.dj-toggle { display: inline-flex; align-items: center; gap: 6px; cursor: pointer; }
.dj-toggle input { accent-color: var(--or); }
.dj-table th, .dj-table td { padding: 7px 8px; }
.dj-table .dj-mem { text-align: center; text-transform: none; letter-spacing: 0; white-space: nowrap; }
.dj-table .dj-mem a { display: block; color: var(--cc, var(--texte)); font-size: 0.85rem; text-decoration: none; }
.dj-table .dj-mem a:hover { text-decoration: underline; }
.dj-table .dj-mem small { color: var(--muet); font-weight: 400; }
.dj-table td.dj-inst { font-weight: 600; white-space: nowrap; }
.dj-table .dj-tot { text-align: center; white-space: nowrap; color: var(--muet); }
.dj-table tr.is-done .dj-tot { color: var(--or-clair); }
.dj-table tr.dj-ext th { padding-top: 14px; color: var(--or); font: 600 0.9rem Cinzel, serif; text-transform: none; border-bottom: 1px solid var(--or); }
.dj-table tbody tr.dj-row:hover td { background: rgba(255,255,255,0.03); }
.dj-cell { text-align: center; }
.dj-cell.is-done { background: rgba(30,255,0,0.06); }
.dj-no { color: var(--bord); }
.dj-b { display: inline-block; min-width: 20px; margin: 1px; padding: 1px 6px; border: 1px solid var(--q-uncommon); border-radius: 10px; color: var(--q-uncommon); font-size: 0.72rem; font-weight: 700; cursor: help; }
.dj-b.is-h { border-color: var(--q-epic); color: #c98bff; }
.dj-table tbody[hidden], .dj-table tr[hidden], .admin-table-wrap[hidden] { display: none; }
.dj-act { font: inherit; cursor: pointer; }
.dj-add { display: inline-block; min-width: 20px; margin: 1px; padding: 1px 6px; border: 1px dashed var(--bord); border-radius: 10px; background: transparent; color: var(--muet); font-size: 0.72rem; font-weight: 700; opacity: 0.55; }
.dj-add:hover, .dj-cell:hover .dj-add { opacity: 1; }
.dj-add:hover { border-color: var(--q-uncommon); color: var(--q-uncommon); }
.dj-del { margin-left: 4px; padding: 0 2px; border: 0; background: transparent; color: var(--muet); font-size: 0.8rem; line-height: 1; }
.dj-del:hover { color: #e07070; }
.hint .dj-act { cursor: default; opacity: 1; }

/* Page metiers.php */
.mt-tabs { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 14px; border-bottom: 1px solid var(--bord); }
.mt-tab { display: inline-flex; align-items: center; gap: 8px; padding: 8px 16px; border: 1px solid var(--bord); border-bottom: 0; border-radius: 6px 6px 0 0; background: rgba(0,0,0,0.45); color: var(--muet); font-family: 'Cinzel', serif; font-weight: 600; }
.mt-tab:hover { color: var(--or-clair); text-decoration: none; }
.mt-tab.active { background: var(--panneau); border-color: var(--or); color: var(--or-clair); margin-bottom: -1px; }
.mt-tab small { color: var(--muet); font-family: inherit; font-size: 0.75rem; }
.mt-ico { display: inline-block; flex: none; width: 28px; height: 28px; border: 1px solid #000; border-radius: 4px; background: #000 center / cover no-repeat; box-shadow: 0 0 0 1px var(--bord); vertical-align: middle; }
.mt-ico.sm { width: 22px; height: 22px; }
.mt-filters { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 8px; }
.mt-filters input[type=search] { flex: 1 1 260px; }
.mt-tiers { display: flex; flex-wrap: wrap; gap: 6px; }
.mt-tiers .chip { cursor: pointer; color: var(--texte); }
.mt-d { font-weight: 700; }
.mt-d.o { color: #ff8040; } .mt-d.y { color: #ffff00; } .mt-d.g { color: #40bf40; } .mt-d.x { color: #808080; }
.mt-table tr.mt-row { cursor: pointer; }
.mt-table tr.mt-row:hover td, .mt-table tr.mt-row:focus td { background: rgba(200,160,60,0.08); }
.mt-table tr[hidden] { display: none; }
.mt-table td.mt-lvl { white-space: nowrap; text-align: center; }
.mt-table td.mt-lvl small { display: block; font-size: 0.72rem; }
.mt-name { display: flex; align-items: center; gap: 10px; }
.mt-name small { color: var(--muet); }
.mt-comps { white-space: nowrap; }
.mt-comp { display: inline-flex; align-items: center; gap: 3px; margin: 1px 6px 1px 0; }
.mt-comp .mt-ico { box-shadow: 0 0 0 1px var(--q); }
.mt-comp b { color: var(--texte); font-size: 0.8rem; }
.mt-tag { display: inline-block; margin: 1px 2px; padding: 1px 8px; border: 1px solid var(--bord); border-radius: 10px; font-size: 0.75rem; color: var(--muet); }
.mt-tag.is-f { border-color: var(--q-uncommon); color: #8fef7f; }
.mt-modal-box { width: min(640px, 100%); }
.mt-modal-box h3 { display: flex; align-items: center; gap: 10px; }
.mt-modal-box h3 .mt-ico { width: 40px; height: 40px; }
.mt-modal-box h4 { margin: 14px 0 6px; color: var(--or); font-size: 0.95rem; }
.mt-m-desc { margin: 0 0 8px; color: #1eff00; font-size: 0.85rem; white-space: pre-line; }
.mt-m-meta { display: flex; flex-wrap: wrap; gap: 6px; font-size: 0.82rem; }
.mt-m-meta > span { padding: 2px 8px; border: 1px solid var(--bord); border-radius: 10px; background: rgba(0,0,0,0.4); }
.mt-m-mult { display: inline-flex; align-items: center; gap: 8px; margin-top: 12px; font-size: 0.88rem; }
.mt-m-mult input { width: 70px; }
.mt-m-list { margin: 0; padding: 0; list-style: none; }
.mt-m-list li { display: flex; align-items: center; gap: 8px; padding: 5px 0; border-bottom: 1px solid rgba(255,255,255,0.05); }
.mt-m-q { min-width: 40px; text-align: right; font-weight: 700; }
.mt-m-n { flex: 1 1 auto; min-width: 0; }
.mt-m-list code { padding: 2px 6px; background: rgba(0,0,0,0.5); border-radius: 3px; font-size: 0.78rem; color: var(--or-clair); white-space: nowrap; }
.mt-copy, .mt-copy-all { padding: 3px 10px; font-size: 0.78rem; }
.mt-copy.ok, .mt-copy-all.ok { border-color: var(--q-uncommon); color: #8fef7f; }
.mt-m-cmds { margin-top: 10px; }
.mt-m-cmds .note { margin: 0 0 6px; }
.mt-m-send { margin-top: 6px; padding-top: 6px; border-top: 1px solid var(--bord); }
.mt-m-send-row { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.mt-m-send-row select { flex: 1 1 180px; }
.mt-m-tools-cb { display: inline-flex; align-items: center; gap: 4px; font-size: 0.85rem; }
@media (max-width: 600px) {
  .mt-m-list code { display: none; }
  .mt-comps { white-space: normal; }
}
.mt-whos { white-space: nowrap; }
.mt-who { display: inline-block; margin: 1px 6px 1px 0; color: var(--cc, var(--texte)); font-weight: 600; font-size: 0.85rem; }
.mt-who.is-unknown { color: #e05555; font-weight: 600; }
.mt-srcs { display: flex; flex-wrap: wrap; gap: 6px; flex-basis: 100%; }
.mt-srcs .chip { cursor: pointer; color: var(--texte); }
.mt-tag.is-butin { border-color: var(--q-epic); color: #c98bff; }
.mt-tag.is-marchand { border-color: var(--or); color: var(--or-clair); }
.mt-tag.is-quete { border-color: #ffd100; color: #ffd100; }
.mt-tag.is-entraineur { border-color: var(--q-rare); color: #6fb2ff; }
.mt-tag.is-decouverte { border-color: #3fc7eb; color: #8fe3f5; }
.mt-glyphs { display: flex; flex-wrap: wrap; gap: 6px; flex-basis: 100%; }
.mt-glyphs .chip { cursor: pointer; color: var(--cc, var(--texte)); }
.mt-name .mt-gcl { color: var(--cc); }
.mt-section + .mt-section { margin-top: 22px; }
.mt-sec-title { margin: 0 0 8px; font-family: 'Cinzel', serif; font-size: 1rem; color: var(--or); }
.mt-tag.is-creature { border-color: #a33; color: #f08080; }
.mt-tag.is-banc { border-color: #3fc7eb; color: #8fe3f5; }
.mt-gzones, .mt-gcrea { font-size: 0.85rem; }
.mt-gzones small, .mt-gcrea small, .mt-comps > small { color: var(--muet); }
.mt-g-crea li .mt-m-n small { color: var(--muet); }
.mt-g-crea li > small { min-width: 52px; text-align: right; }
.mt-g-zones { display: flex; flex-wrap: wrap; gap: 4px; margin: 0; }
.mt-g-zones .mt-tag { margin: 0; color: var(--texte); }
.mt-g-zones .mt-tag b { color: var(--or-clair); font-weight: 600; }
.mt-m-formules > li { display: block; }
.mt-m-formule > div { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.mt-m-formule ul { margin: 4px 0 2px 36px; padding: 0; list-style: none; font-size: 0.82rem; }
.mt-m-formule ul li { display: block; padding: 2px 0; border: 0; line-height: 1.4; }
.mt-m-formule ul b { color: var(--or); font-weight: 600; }
.mt-ico.xs { width: 16px; height: 16px; margin-right: 5px; border-radius: 3px; }
.mt-spes { display: flex; flex-wrap: wrap; gap: 6px; flex-basis: 100%; }
.mt-spes .chip { display: inline-flex; align-items: center; cursor: pointer; color: var(--texte); }
.mt-spe-card > .hint { margin-top: 0; }
.mt-spes-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(300px, 100%), 1fr)); gap: 12px; }
.mt-spe { display: flex; flex-direction: column; gap: 6px; padding: 10px 12px; border: 1px solid var(--bord); border-radius: 6px; background: rgba(0,0,0,0.35); font-size: 0.85rem; }
.mt-spe.is-sub { border-style: dashed; }
.mt-spe p { margin: 0; }
.mt-spe-head { display: flex; align-items: center; gap: 10px; }
.mt-spe-head .mt-ico { width: 36px; height: 36px; }
.mt-spe-head b { color: var(--or-clair); font-family: 'Cinzel', serif; }
.mt-spe-head small { display: block; color: var(--muet); font-size: 0.75rem; }
.mt-spe-desc { color: #1eff00; }
.mt-spe-how { line-height: 1.5; }
.mt-spe-how b { color: var(--or); font-weight: 600; }
.mt-spe-how small, .mt-spe-foot small { color: var(--muet); }
.mt-spe-n { color: var(--muet); }
.mt-spe-foot { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin-top: auto; padding-top: 6px; border-top: 1px solid rgba(255,255,255,0.05); }
.mt-spe-go { margin-left: auto; padding: 3px 10px; font-size: 0.78rem; }
.mt-tag.is-spe-apprendre { border-color: #ff8040; color: #ffb080; }
.mt-tag.is-spe-objet { border-color: #c79c6e; color: #e6cc80; }
.mt-tag.is-spe-bonus { border-color: var(--q-uncommon); border-style: dashed; color: #8fef7f; }
/* Page montures.php */
.mt-tag.is-hautfait { border-color: #ffd100; color: #ffe680; background: rgba(255,209,0,0.08); }
.mt-tag.is-metier { border-color: var(--q-uncommon); color: #8fef7f; }
.mt-tag.is-classe { border-color: var(--q-rare); color: #6fb2ff; }
.mt-tag.is-introuvable { border-color: #7a3030; color: #e05555; }
.mo-fac { display: inline-block; margin-left: 6px; padding: 0 5px; border-radius: 3px; font-size: 0.7rem; font-weight: 700; color: #fff; }
.mo-fac.is-A, .mo-fac-txt.is-A { background: #1f4fa8; }
.mo-fac.is-H, .mo-fac-txt.is-H { background: #a82020; }
.mt-m-meta > span.mo-fac-txt { color: #fff; border-color: transparent; }
.mo-type { white-space: nowrap; font-size: 0.85rem; }
.mo-type.is-s60 { color: var(--muet); } .mo-type.is-s100 { color: var(--texte); }
.mo-type.is-v150 { color: #6fb2ff; } .mo-type.is-v280 { color: #c98bff; } .mo-type.is-adapt { color: #ff8040; }
.mo-cond { font-size: 0.8rem; color: var(--muet); }
.mo-m-src { margin: 0; padding: 0; list-style: none; font-size: 0.85rem; }
.mo-m-src li { padding: 3px 0; line-height: 1.4; }
.mo-m-src b { color: var(--or); font-weight: 600; }
/* Sous-menu du compte connecte */
.nav-user { position: relative; margin-left: 14px; }
.nav-user > summary { list-style: none; cursor: pointer; user-select: none; }
.nav-user > summary::-webkit-details-marker { display: none; }
.nav-user-badge { display: inline-block; min-width: 18px; padding: 0 5px; border-radius: 9px; background: var(--danger, #c0392b); color: #fff; font: 700 0.7rem/18px "Segoe UI", sans-serif; text-align: center; vertical-align: 1px; }
.nav-user-menu { position: absolute; right: 0; top: calc(100% + 8px); z-index: 60; min-width: 210px; display: flex; flex-direction: column; background: var(--panneau, #11151c); border: 1px solid var(--bord); border-radius: 4px; box-shadow: 0 8px 24px rgba(0,0,0,0.6); padding: 6px 0; }
.nav-user-menu > * { padding: 8px 16px; font-size: 0.85rem; white-space: nowrap; }
.nav-user-who { color: var(--muet); border-bottom: 1px solid var(--bord); margin-bottom: 4px; }
.nav-user-who b { color: var(--or-clair); }
.nav-user-menu a { color: var(--texte, #e8e8e8); text-decoration: none; }
.nav-user-menu a:hover { background: rgba(217,180,92,0.12); color: var(--or-clair); }
.nav-user-menu small { color: var(--danger, #e07070); }
/* Demandes de creation de compte */
.dm-form { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 14px 18px; }
.dm-form .dm-full { grid-column: 1 / -1; }
.dm-form textarea { min-height: 70px; resize: vertical; padding: 10px 12px; border-radius: 6px; font: inherit; font-size: 0.95rem; color: var(--text); background: #0b0d11; border: 1px solid var(--border); }
.dm-form .btn-download { grid-column: 1 / -1; }
.dm-piege { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.dm-table td.dm-msg { max-width: 340px; white-space: pre-wrap; color: var(--muet); font-size: 0.82rem; }
.dm-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.dm-actions form { margin: 0; }
.dm-actions .dm-refuse { border-color: var(--danger, #c0392b); }
.dm-hist { margin-top: 10px; color: var(--muet); font-size: 0.82rem; }
.dm-open-wrap { margin-top: 14px; }
.dm-modal-box { width: min(620px, 100%); }
.dm-modal-box h3 { margin: 0 0 14px; }
.dm-modal-box .admin-msg { margin: 0 0 14px; }
.dm-hist .ok { color: #6fcf6f; } .dm-hist .ko { color: #e07070; }

/* Formulaire public de signalement de bug (bugs.php) */
.dm-form select, .dm-form input[type="text"] { padding: 9px 12px; border-radius: 6px; font: inherit; font-size: 0.95rem; color: var(--text); background: #0b0d11; border: 1px solid var(--border); width: 100%; box-sizing: border-box; }
.dash-head { position: relative; }
.dash-head .dash-head-btn { position: absolute; top: 4px; right: 0; margin: 0; }
@media (max-width: 640px) { .dash-head .dash-head-btn { position: static; margin: 0 0 12px; } }
#demandes { max-width: 960px; margin-left: auto; margin-right: auto; }
.cfg-head { position: relative; }
.cfg-head .cfg-loot { position: absolute; top: 4px; right: 0; margin: 0; width: auto; }
@media (max-width: 640px) { .cfg-head .cfg-loot { position: static; display: inline-block; margin-bottom: 12px; } }
.bug-captcha { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 6px 0; }
.bug-captcha img { border-radius: 6px; border: 1px solid var(--border); max-width: 100%; height: auto; }
