/* Page GM « 15. Battle Mode » (klugle_battle) : compléments propres au catalogue d'objets, posés APRÈS options.css (charte et mise en page .kgo-* partagées). Préfixe .kgb-, JAMAIS .ad- / .adv- (bloqueurs de publicité). */
/* Date: 2026-10-05 ; Version: 1.9.0 ; GSt / Claude ; Sabotage photo : note des calques sous les paramètres d'un objet (.kgb-photo-note). */
/* Date: 2026-10-04 ; Version: 1.8.0 ; GSt / Claude ; Champ « Usages » des cartes ; rangée de la caisse Spéciale repliable (réglage « Reçoit »). */
/* Date: 2026-10-04 ; Version: 1.7.0 ; GSt / Claude ; Caisse Spéciale (.kgc-sp-bloc, repère .kgc-pin-in.kgc-special) et onglet Cartes (.kgk-creer, .kgk-table, .kgk-etat). */
/* Date: 2026-10-04 ; Version: 1.6.0 ; GSt / Claude ; Onglet Caisses sur une hauteur d'écran : .kgc-bar-fin (état + Enregistrer, à droite de la barre), carte et liste à la hauteur --kgc-h posée par battle-gm-crates.js (560 px sans lui) ; marge basse du cadre retirée (même marge en bas qu'en haut) ; .is-sans-liste : sans scénario choisi, la colonne de droite se retire. */
/* Date: 2026-10-03 ; Version: 1.5.0 ; GSt / Claude ; Consigne de sécurité terrain en voile par-dessus la carte des caisses (.kgc-safety-veil / .kgc-safety-card), bouton « ⚠️ Sécurité ». */
/* Date: 2026-10-03 ; Version: 1.4.0 ; GSt / Claude ; Détail d'un objet : contrôles de 38 px alignés sur leur bas, case « Annoncé au board » et « Actif » en boîte de même hauteur, ligne du nom à trois champs. */
/* Date: 2026-10-03 ; Version: 1.3.0 ; GSt / Claude ; Lien d'une caisse (QR / NFC) dans la liste : .kgc-link. */
/* Date: 2026-10-03 ; Version: 1.2.0 ; GSt / Claude ; Vignettes de langue du nom et de la description (.kg-lang-bar, même barre que la page Aventure, aux couleurs de la page : vert Klugle). */
/* Date: 2026-10-02 ; Version: 1.1.0 ; GSt / Claude ; Lot D : onglets de la page, rappel de sécurité terrain, carte et liste des caisses QR, marqueurs par type. */
/* Date: 2026-10-02 ; Version: 1.0.0 ; GSt / Claude ; NOUVEAU FICHIER — module « Battle Mode », lot B : paramètres d'effet, lignes de conditions, ligne de vente, avertissement module éteint. */

.kgb-warn {
    margin: 0 0 14px; padding: 10px 14px; border-radius: 6px;
    background: rgba(231,76,60,0.12); border: 1px solid #c0392b; color: #FFB4AA; font-size: 0.85rem;
}
.kgb-soon { color: var(--tcc-texte-faible); font-style: normal; }
/* Le code d'un objet est en minuscules (a-z, 0-9, _) : options.css met le champ code en majuscules. */
.kgb-page .kgo-input.kgo-code { text-transform: none; }

.kgb-params { display: flex; flex-wrap: wrap; gap: 10px 16px; }
.kgb-param { display: flex; align-items: center; gap: 8px; font-size: 0.82rem; color: var(--tcc-texte-doux); }
.kgb-param .kgo-input { width: 90px; }
/* Sabotage photo (05/10) : note sous les paramètres d'un objet de sabotage ou de nettoyage — pleine largeur de la rangée. */
.kgb-photo-note { flex: 1 1 100%; padding: 9px 12px; border-radius: 6px; border: 1px solid #333; background: rgba(255,255,255,0.03); font-size: 0.8rem; line-height: 1.5; color: var(--tcc-texte-doux); }
.kgb-photo-note strong { color: var(--tcc-texte); }
.kgb-photo-note .kgb-photo-ko { color: #FFB4AA; }
.kgb-photo-note .klugle-btn-sm { margin-top: 8px; }

.kgb-conds { display: flex; flex-direction: column; gap: 6px; margin-bottom: 8px; }
.kgb-cond { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.kgb-cond select.kgo-input { flex: 1 1 180px; min-width: 0; }
.kgb-cond input.kgo-input { width: 100px; flex: none; }
.kgb-cond .kgb-cond-del { flex: none; }

.kgb-row-sale { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) auto; gap: 12px; align-items: end; }

/* Détail d'un objet (03/10) : champs d'une même ligne ALIGNÉS comme ceux des conditions d'usage — même hauteur de
   contrôle (38 px), bas communs ; une case à cocher vit dans une boîte de la même hauteur. */
.kgb-page .kgo-editor .kgo-row { align-items: end; }
.kgb-page .kgo-editor input.kgo-input:not([type="checkbox"]), .kgb-page .kgo-editor select.kgo-input { height: 38px; padding-top: 0; padding-bottom: 0; }
.kgb-row-head { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) auto; }
.kgb-field-box .kgb-box {
    display: flex; align-items: center; gap: 8px; height: 38px; box-sizing: border-box; padding: 0 12px; white-space: nowrap;
    border: 1px solid #333; border-radius: 4px; background: var(--tcc-champ-plein); color: var(--tcc-texte); font-weight: 700; font-size: 0.82rem;
}
.kgb-field-box .kgb-box input { margin: 0; }
.kgb-field-box .kgb-box label { display: flex; align-items: center; gap: 8px; cursor: pointer; }
.kgb-effect-note { display: block; margin: -8px 0 12px; }
.kgb-effect-note:empty { display: none; }
.kgo-field > label .kg-page-help { margin-left: 6px; }
.kgb-actions { justify-content: flex-end; margin-top: 14px; }

/* Lot D — onglets et onglet Caisses QR. */
.kgb-tabs { display: flex; gap: 8px; justify-content: center; margin: -4px 0 16px; }
.kgb-tab { padding: 8px 18px; border-radius: 6px; border: 1px solid var(--tcc-bord-fort); background: var(--tcc-champ); color: var(--tcc-texte-doux); font-weight: 700; cursor: pointer; }
.kgb-tab.is-on { background: var(--tcc-fluo); border-color: var(--tcc-fluo); color: var(--tcc-encre); }
.kgb-safety { margin: 0 0 14px; padding: 12px 14px; border-radius: 6px; background: rgba(230,126,34,0.12); border: 1px solid #e67e22; color: #FAD7A0; font-size: 0.85rem; line-height: 1.5; }
.kgb-crates-bar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 10px; }
.kgb-crates-bar label { display: flex; align-items: center; gap: 8px; color: var(--tcc-texte-doux); font-size: 0.85rem; }
.kgb-crates-bar select { min-width: 260px; }
.kgb-crates-layout { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 12px; }
/* v1.6.0 — --kgc-h : la hauteur qui reste sous la barre, calculée par battle-gm-crates.js pour que la page ne défile pas. */
.kgc-map { height: var(--kgc-h, 560px); border-radius: 6px; border: 1px solid var(--tcc-bord-fort); }
.kgc-side { max-height: var(--kgc-h, 560px); overflow-y: auto; }
/* Même marge sous le cadre qu'au-dessus : le cadre commun porte 20 px de marge basse (pour empiler plusieurs cadres), qui
   s'ajoutaient au remplissage de la page — 36 px en bas contre 16 en haut. Cette page n'a qu'un cadre. */
.kgb-page > .klugle-panel:last-child { margin-bottom: 0; }
/* Aucun scénario choisi : pas de colonne de liste, la carte prend toute la largeur. */
.kgb-crates-layout.is-sans-liste { grid-template-columns: minmax(0, 1fr); }
.kgb-crates-layout.is-sans-liste .kgc-side { display: none; }
.kgc-bar-fin { margin-left: auto; display: flex; align-items: center; gap: 10px; min-width: 0; }
.kgc-bar-fin .kgo-status { min-width: 0; text-align: right; font-size: 0.8rem; }
.kgc-bar-fin .klugle-btn-sm { flex: 0 0 auto; white-space: nowrap; }
.kgc-list { display: flex; flex-direction: column; gap: 8px; }
.kgc-item { padding: 8px; border-radius: 6px; border: 1px solid var(--tcc-bord-doux); background: var(--tcc-relief); display: flex; flex-direction: column; gap: 6px; cursor: pointer; }
.kgc-item.is-sel { border-color: var(--tcc-fluo); }
.kgc-item.is-off { opacity: 0.55; }
.kgc-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kgc-ico { font-size: 1.3rem; }
.kgc-label { flex: 1; min-width: 120px; }
.kgc-num { font-size: 0.75rem; color: var(--tcc-texte-faible); }
.kgc-small { display: flex; align-items: center; gap: 4px; font-size: 0.78rem; color: var(--tcc-texte-doux); }
.kgc-small input[type=number] { width: 64px; }
.kgc-meta { justify-content: space-between; font-size: 0.72rem; color: var(--tcc-texte-faible); font-family: monospace; }
.kgc-pin { background: none; border: none; }
.kgc-pin-in { width: 34px; height: 34px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 18px; background: #111; border: 3px solid #e67e22; box-shadow: 0 2px 6px rgba(0,0,0,0.6); }
.kgc-pin-in.kgc-rare { border-color: #3498db; }
.kgc-pin-in.kgc-legendary { border-color: #f1c40f; }
.kgc-pin-in.kgc-special { border-color: #9b59b6; }
.kgc-pin-in.is-off { opacity: 0.4; }
.kgc-pin-in.is-sel { box-shadow: 0 0 0 4px rgba(198,255,0,0.6); }

@media (max-width: 700px) {
    .kgb-row-sale { grid-template-columns: 1fr 1fr; }
    .kgb-row-head { grid-template-columns: 1fr; }
    .kgb-crates-layout { grid-template-columns: 1fr; }
    .kgc-map { height: 380px; }
}

/* Vignettes de langue (nom, description) — même structure que la page Aventure (adventures.css), couleurs de la page. */
.kg-lang-bar { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; margin: 2px 0 6px; min-height: 24px; }
.kg-lang-tab { display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; font-size: 0.72rem; font-weight: 700; letter-spacing: 0.04em;
    color: var(--tcc-texte-doux); background: var(--tcc-tuile); border: 1px solid var(--tcc-bord-doux); border-radius: 12px; cursor: pointer; font-family: sans-serif; }
.kg-lang-tab:hover { border-color: var(--tcc-bord-fort); color: var(--tcc-texte); }
.kg-lang-tab.is-active { background: var(--tcc-vert-klugle); border-color: var(--tcc-fluo); color: var(--tcc-encre); }
.kg-lang-dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; }
.kg-lang-dot.is-done { background: var(--tcc-fluo); }
.kg-lang-dot.is-none { background: transparent; border: 1px solid var(--tcc-texte-faible); }
.kg-lang-tab.is-active .kg-lang-dot.is-done { background: var(--tcc-encre); }
.kg-lang-tab.is-active .kg-lang-dot.is-none { border-color: var(--tcc-encre); }
.kg-lang-deepl { margin-left: 4px; padding: 3px 9px; font-size: 0.72rem; color: #dff3ff; background: #1f5f8b; border: 1px solid #2e86c1; border-radius: 12px; cursor: pointer; font-family: sans-serif; }
.kg-lang-deepl:hover:not([disabled]) { background: #2e86c1; }
.kg-lang-deepl[disabled] { opacity: 0.45; cursor: not-allowed; }

/* Lien d'une caisse (le même pour le QR et le tag NFC) et son bouton « Copier ». */
.kgc-link { align-items: center; gap: 8px; flex-wrap: nowrap; }
.kgc-link code { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 0.7rem;
    color: var(--tcc-texte-doux); background: var(--tcc-tuile); padding: 3px 6px; border-radius: 4px; }
.kgc-link button { flex: 0 0 auto; white-space: nowrap; }

/* Consigne de sécurité terrain : voile PAR-DESSUS la carte et la liste (au-dessus des contrôles Leaflet, z 1000). */
.kgb-crates-layout { position: relative; }
.kgc-safety-veil { position: absolute; inset: 0; z-index: 1100; display: flex; align-items: flex-start; justify-content: center; padding: 18px; box-sizing: border-box;
    background: rgba(7, 9, 8, 0.78); border-radius: 6px; }
.kgc-safety-card { max-width: 640px; margin: 0; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.6); background: #1d150c; }
.kgc-safety-card p { margin: 0 0 8px; }
.kgc-safety-title { font-weight: 800; font-size: 1rem; color: #F8C471; }
.kgc-safety-card .klugle-btn-sm { display: block; margin: 12px auto 0; padding: 9px 22px; font-size: 0.9rem; }
.kgc-safety-btn { border-color: #e67e22 !important; color: #FAD7A0 !important; }

/* v1.7.0 — CAISSE SPÉCIALE : son contenu fixé, dans la fiche de la liste. */
.kgc-sp-bloc { border-top: 1px dashed var(--tcc-bord-fort); padding-top: 6px; display: flex; flex-direction: column; gap: 5px; }
.kgc-sp-titre { font-size: 0.74rem; color: var(--tcc-texte-doux); }
.kgc-sp-objets { display: flex; flex-wrap: wrap; gap: 4px 6px; max-height: 132px; overflow-y: auto; }
.kgc-sp-obj { display: inline-flex; align-items: center; gap: 4px; padding: 2px 7px; border-radius: 12px; border: 1px solid var(--tcc-bord-doux); background: var(--tcc-champ); font-size: 0.76rem; cursor: pointer; }
.kgc-sp-obj.is-off { opacity: 0.6; border-style: dashed; }
.kgc-sp-bloc input[type=number] { width: 64px; }

/* v1.7.0 — ONGLET CARTES (cartes physiques QR/NFC). */
.kgk-creer { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px; margin: 0 0 12px; padding: 10px 12px; border: 1px solid var(--tcc-bord-doux); border-radius: 6px; background: var(--tcc-relief); }
.kgk-creer label { display: flex; flex-direction: column; gap: 3px; font-size: 0.78rem; color: var(--tcc-texte-doux); }
.kgk-creer #kgk-item { min-width: 260px; }
.kgk-creer #kgk-count { width: 70px; }
.kgk-creer #kgk-uses, .kgk-table .kgk-uses { width: 58px; }
.kgc-sp-bloc .kgc-row { flex-wrap: wrap; }
.kgk-creer #kgk-label { width: 180px; }
.kgk-fin { margin-left: auto; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.kgk-table-wrap { overflow-x: auto; }
.kgk-table { width: 100%; border-collapse: collapse; font-size: 0.82rem; }
.kgk-table th { text-align: left; padding: 6px 8px; color: var(--tcc-texte-doux); font-weight: 600; border-bottom: 1px solid var(--tcc-bord-fort); white-space: nowrap; }
.kgk-table td { padding: 6px 8px; border-bottom: 1px solid var(--tcc-bord-doux); vertical-align: middle; }
.kgk-table tr.is-off td { opacity: 0.55; }
.kgk-table .kgk-label { min-width: 170px; }
.kgk-table .kgk-mode { min-width: 230px; }
.kgk-num { font-size: 0.68rem; color: var(--tcc-texte-faible); font-family: monospace; }
.kgk-objet { white-space: nowrap; }
.kgk-etat { display: inline-block; padding: 1px 8px; border-radius: 10px; font-size: 0.72rem; font-weight: 700; white-space: nowrap; }
.kgk-etat.is-ok { background: rgba(46,204,113,0.18); color: #2ecc71; }
.kgk-etat.is-pris { background: rgba(230,126,34,0.2); color: #f5b041; }
.kgk-etat.is-off { background: rgba(127,140,141,0.25); color: #bdc3c7; }
.kgk-actions { white-space: nowrap; }
@media (max-width: 700px) {
    .kgk-fin { margin-left: 0; width: 100%; justify-content: flex-start; }
    .kgk-creer #kgk-item, .kgk-creer #kgk-label { min-width: 0; width: 100%; }
    .kgk-creer label { width: 100%; }
    .kgk-actions { white-space: normal; }
}
