/**
 * TachyCab — Admin Layout System 2026
 *
 * Couche de layout dédiée au back-office admin.
 * Ne remplace PAS les styles existants (cdb-site.css, cdb-2026-portal.css…)
 * mais fournit des classes utilitaires de grille strictes pour normaliser
 * l’alignement des dashboards, formulaires et tableaux admin.
 *
 * Principes :
 * - grille 12 colonnes responsive
 * - gouttière et padding cohérents
 * - pas de couleurs magiques : on réutilise les tokens existants
 * - mobile-first
 */

/* ── Tokens admin layout ───────────────────────────────────────────────── */
:root {
    --cdb-admin-gap: 0.75rem;
    --cdb-admin-gap-sm: 0.55rem;
    --cdb-admin-gap-lg: 1rem;
    --cdb-admin-section-gap: 1rem;
    --cdb-admin-col-min: 16rem;
    --cdb-admin-kpi-min: 14rem;
    --cdb-admin-max-width: 100%;
    --cdb-admin-panel-pad: 1rem;
    --cdb-admin-panel-pad-sm: 0.75rem;
    --cdb-admin-radius: var(--cdb-radius, 16px);
    --cdb-admin-text-xs: 0.72rem;
    --cdb-admin-text-sm: 0.8125rem;
    --cdb-admin-text-base: 0.9375rem;
    --cdb-admin-text-lg: 1.0625rem;
    --cdb-admin-text-xl: 1.375rem;
    --cdb-admin-text-stat: 1.7rem;
    --cdb-admin-ease: cubic-bezier(0.2, 0.8, 0.2, 1);

    /* Palette graphique unifiée (mappée sur les tokens du design system) */
    --cdb-chart-1: var(--cdb-accent, #16878b);
    --cdb-chart-2: var(--cdb-blue, #74a7ef);
    --cdb-chart-3: var(--cdb-green, #22c55e);
    --cdb-chart-4: var(--cdb-warning, #f59e0b);
    --cdb-chart-5: var(--cdb-pink, #ec4899);
    --cdb-chart-6: var(--cdb-teal, #14b8a6);
    --cdb-chart-7: var(--cdb-purple, #a855f7);
    --cdb-chart-8: var(--cdb-slate, #64748b);
    --cdb-chart-grid: color-mix(in srgb, var(--cdb-border, #cbd5e1) 35%, transparent);
    --cdb-chart-tick: var(--cdb-text-muted, #64748b);
    --cdb-chart-soft: color-mix(in srgb, var(--cdb-accent, #16878b) 18%, transparent);
    /* Sémantique sévérité (traffic-control, alertes) */
    --cdb-danger: #ed4245;
    --cdb-warning: #d9a406;
    --cdb-info: #5865f2;
    --cdb-chart-map-idle: #dde3ec;
    --cdb-chart-map-hover: #9fb3cc;
    --cdb-chart-map-sel: #e4573d;
}

@media (min-width: 1100px) {
    :root {
        --cdb-admin-gap: 1rem;
        --cdb-admin-section-gap: 1.25rem;
        --cdb-admin-panel-pad: 1.25rem;
    }
}

/* ── Conteneurs ──────────────────────────────────────────────────────────── */
.cdb-admin-row,
.cdb-admin-stack {
    width: 100%;
    max-width: var(--cdb-admin-max-width);
    min-width: 0;
}

.cdb-admin-row {
    display: grid;
    grid-template-columns: repeat(12, minmax(0, 1fr));
    gap: var(--cdb-admin-gap);
    align-items: start;
    align-content: start;
}

.cdb-admin-row + .cdb-admin-row,
.cdb-admin-stack + .cdb-admin-stack,
.cdb-admin-row + .cdb-admin-stack,
.cdb-admin-stack + .cdb-admin-row {
    margin-top: var(--cdb-admin-section-gap);
}

/* Grille auto-fit : exploite toute la largeur, évite le vide à droite.
   À utiliser à la place de col-N quand le nombre de panneaux est variable. */
.cdb-admin-row--auto {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(var(--cdb-admin-col-min), 1fr));
    gap: var(--cdb-admin-gap);
    align-items: start;
}
.cdb-admin-row--auto > .cdb-admin-panel,
.cdb-admin-row--auto > .cdb-admin-col-12,
.cdb-admin-row--auto > .cdb-admin-col-6,
.cdb-admin-row--auto > .cdb-admin-col-4,
.cdb-admin-row--auto > .cdb-admin-col-3 {
    grid-column: auto;
    min-width: 0;
}

/* Sur grand écran, empêche un dernier panneau seul de rester étroit à droite */
@media (min-width: 1200px) {
    .cdb-admin-row:not(.cdb-admin-row--auto) > .cdb-admin-panel:last-child.cdb-admin-col-6,
    .cdb-admin-row:not(.cdb-admin-row--auto) > .cdb-admin-col-6:last-child {
        grid-column: span 12;
    }
}

.cdb-admin-stack {
    display: flex;
    flex-direction: column;
    gap: var(--cdb-admin-gap);
}

/* ── Colonnes de base ────────────────────────────────────────────────────── */
.cdb-admin-col-1  { grid-column: span 1; }
.cdb-admin-col-2  { grid-column: span 2; }
.cdb-admin-col-3  { grid-column: span 3; }
.cdb-admin-col-4  { grid-column: span 4; }
.cdb-admin-col-5  { grid-column: span 5; }
.cdb-admin-col-6  { grid-column: span 6; }
.cdb-admin-col-7  { grid-column: span 7; }
.cdb-admin-col-8  { grid-column: span 8; }
.cdb-admin-col-9  { grid-column: span 9; }
.cdb-admin-col-10 { grid-column: span 10; }
.cdb-admin-col-11 { grid-column: span 11; }
.cdb-admin-col-12 { grid-column: span 12; }

/* Pleine largeur utilitaire */
.cdb-admin-col-full { grid-column: 1 / -1; }

/* ── Colonnes responsive ─────────────────────────────────────────────────── */
@media (min-width: 600px) {
    .cdb-admin-col-sm-1  { grid-column: span 1; }
    .cdb-admin-col-sm-2  { grid-column: span 2; }
    .cdb-admin-col-sm-3  { grid-column: span 3; }
    .cdb-admin-col-sm-4  { grid-column: span 4; }
    .cdb-admin-col-sm-5  { grid-column: span 5; }
    .cdb-admin-col-sm-6  { grid-column: span 6; }
    .cdb-admin-col-sm-7  { grid-column: span 7; }
    .cdb-admin-col-sm-8  { grid-column: span 8; }
    .cdb-admin-col-sm-9  { grid-column: span 9; }
    .cdb-admin-col-sm-10 { grid-column: span 10; }
    .cdb-admin-col-sm-11 { grid-column: span 11; }
    .cdb-admin-col-sm-12 { grid-column: span 12; }
}

@media (min-width: 900px) {
    .cdb-admin-col-md-1  { grid-column: span 1; }
    .cdb-admin-col-md-2  { grid-column: span 2; }
    .cdb-admin-col-md-3  { grid-column: span 3; }
    .cdb-admin-col-md-4  { grid-column: span 4; }
    .cdb-admin-col-md-5  { grid-column: span 5; }
    .cdb-admin-col-md-6  { grid-column: span 6; }
    .cdb-admin-col-md-7  { grid-column: span 7; }
    .cdb-admin-col-md-8  { grid-column: span 8; }
    .cdb-admin-col-md-9  { grid-column: span 9; }
    .cdb-admin-col-md-10 { grid-column: span 10; }
    .cdb-admin-col-md-11 { grid-column: span 11; }
    .cdb-admin-col-md-12 { grid-column: span 12; }
}

@media (min-width: 1200px) {
    .cdb-admin-col-lg-1  { grid-column: span 1; }
    .cdb-admin-col-lg-2  { grid-column: span 2; }
    .cdb-admin-col-lg-3  { grid-column: span 3; }
    .cdb-admin-col-lg-4  { grid-column: span 4; }
    .cdb-admin-col-lg-5  { grid-column: span 5; }
    .cdb-admin-col-lg-6  { grid-column: span 6; }
    .cdb-admin-col-lg-7  { grid-column: span 7; }
    .cdb-admin-col-lg-8  { grid-column: span 8; }
    .cdb-admin-col-lg-9  { grid-column: span 9; }
    .cdb-admin-col-lg-10 { grid-column: span 10; }
    .cdb-admin-col-lg-11 { grid-column: span 11; }
    .cdb-admin-col-lg-12 { grid-column: span 12; }
}

@media (min-width: 1600px) {
    .cdb-admin-col-xl-1  { grid-column: span 1; }
    .cdb-admin-col-xl-2  { grid-column: span 2; }
    .cdb-admin-col-xl-3  { grid-column: span 3; }
    .cdb-admin-col-xl-4  { grid-column: span 4; }
    .cdb-admin-col-xl-5  { grid-column: span 5; }
    .cdb-admin-col-xl-6  { grid-column: span 6; }
    .cdb-admin-col-xl-7  { grid-column: span 7; }
    .cdb-admin-col-xl-8  { grid-column: span 8; }
    .cdb-admin-col-xl-9  { grid-column: span 9; }
    .cdb-admin-col-xl-10 { grid-column: span 10; }
    .cdb-admin-col-xl-11 { grid-column: span 11; }
    .cdb-admin-col-xl-12 { grid-column: span 12; }
}

/* ── Grilles spécialisées ──────────────────────────────────────────────── */
.cdb-admin-kpi-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--cdb-admin-kpi-min)), 1fr));
    gap: var(--cdb-admin-gap);
    width: 100%;
    align-items: start;
}

.cdb-admin-card-grid-2,
.cdb-admin-card-grid-3,
.cdb-admin-card-grid-4,
.cdb-admin-card-grid-5 {
    display: grid;
    gap: var(--cdb-admin-gap);
    width: 100%;
    align-items: start;
}

.cdb-admin-card-grid-2 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.cdb-admin-card-grid-3 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.cdb-admin-card-grid-4 { grid-template-columns: repeat(1, minmax(0, 1fr)); }
.cdb-admin-card-grid-5 { grid-template-columns: repeat(1, minmax(0, 1fr)); }

@media (min-width: 700px) {
    .cdb-admin-card-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .cdb-admin-card-grid-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .cdb-admin-card-grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .cdb-admin-card-grid-5 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (min-width: 1100px) {
    .cdb-admin-card-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .cdb-admin-card-grid-4 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .cdb-admin-card-grid-5 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (min-width: 1400px) {
    .cdb-admin-card-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
    .cdb-admin-card-grid-5 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

@media (min-width: 1800px) {
    .cdb-admin-card-grid-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
}

/* Règle de grille du dépôt (demande récurrente du propriétaire) : aucune carte ne
   doit rester seule sur une demi-ligne. Quand le nombre d'éléments laisse la
   dernière carte seule, elle occupe toute la largeur au lieu de laisser un trou.
   Les formules correspondent exactement aux paliers de colonnes ci-dessus. */
@media (min-width: 700px) {
    .cdb-admin-card-grid-2 > :last-child:nth-child(2n + 1),
    .cdb-admin-card-grid-3 > :last-child:nth-child(2n + 1),
    .cdb-admin-card-grid-4 > :last-child:nth-child(2n + 1),
    .cdb-admin-card-grid-5 > :last-child:nth-child(2n + 1) {
        grid-column: 1 / -1;
    }
}

@media (min-width: 1100px) {
    .cdb-admin-card-grid-3 > :last-child:nth-child(3n + 1),
    .cdb-admin-card-grid-4 > :last-child:nth-child(3n + 1),
    .cdb-admin-card-grid-5 > :last-child:nth-child(3n + 1) {
        grid-column: 1 / -1;
    }
}

@media (min-width: 1400px) {
    .cdb-admin-card-grid-4 > :last-child:nth-child(4n + 1),
    .cdb-admin-card-grid-5 > :last-child:nth-child(4n + 1) {
        grid-column: 1 / -1;
    }
}

@media (min-width: 1800px) {
    .cdb-admin-card-grid-5 > :last-child:nth-child(5n + 1) {
        grid-column: 1 / -1;
    }
}

/* Rangées avec panels : hauteurs égales (stretch), colonnes en flex. */
.cdb-admin-row:has(> [class*="cdb-admin-col-"] > .cdb-admin-panel) {
    align-items: stretch;
}

.cdb-admin-row > [class*="cdb-admin-col-"]:has(> .cdb-admin-panel) {
    display: flex;
    flex-direction: column;
    min-width: 0;
}

.cdb-admin-row > [class*="cdb-admin-col-"] > .cdb-admin-panel {
    flex: 1 1 auto;
    width: 100%;
    min-height: 100%;
}

.cdb-admin-row > [class*="cdb-admin-col-"] > .cdb-admin-panel > .cdb-admin-panel__body {
    flex: 1 1 auto;
}

/* ── Panel normalisé (helpers complémentaires) ─────────────────────────── */
.cdb-admin-panel {
    display: flex;
    flex-direction: column;
    min-width: 0;
    width: 100%;
    height: auto;
    border-radius: var(--cdb-admin-radius);
    background: var(--cdb-bg-elevated, #0e1726);
    border: 1px solid var(--cdb-border, rgba(255, 255, 255, 0.08));
    /* visible : overflow hidden coupait titres longs / accents / actions */
    overflow: visible;
}

.cdb-admin-panel--wide {
    grid-column: 1 / -1;
}

.cdb-admin-panel--full {
    grid-column: 1 / -1;
}

.cdb-admin-panel__head {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 0.35rem 0.75rem;
    padding: 0.65rem 1rem;
    border-bottom: 1px solid var(--cdb-border, rgba(255, 255, 255, 0.08));
}

.cdb-admin-panel__heading {
    font-family: var(--font-display, 'Orbitron', system-ui, sans-serif);
    font-size: 1rem;
    font-weight: 700;
    letter-spacing: 0.01em;
    margin: 0;
    display: inline-flex;
    align-items: center;
    gap: 0.45rem;
    min-width: 0;
    max-width: 100%;
    color: var(--cdb-text, #f3f5f9);
    overflow-wrap: normal;
    word-break: normal;
    line-height: 1.35;
}

.cdb-admin-panel__head-ico {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.1rem;
    height: 1.1rem;
    color: var(--cdb-accent, #16878b);
}

.cdb-admin-panel__head-ico svg {
    width: 100%;
    height: 100%;
}

.cdb-admin-panel__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem;
}

.cdb-admin-panel__body {
    flex: 1 1 auto;
    min-height: 0;
    padding: var(--cdb-admin-panel-pad);
}

.cdb-admin-panel--compact > .cdb-admin-panel__body {
    padding: var(--cdb-admin-panel-pad-sm);
}

.cdb-admin-definition-list {
    display: grid;
    gap: 0;
    margin: 0;
}

.cdb-admin-definition-list > div {
    display: grid;
    grid-template-columns: minmax(8rem, 0.8fr) minmax(0, 1.2fr);
    gap: 0.75rem;
    align-items: start;
    padding: 0.7rem 0;
    border-bottom: 1px solid var(--cdb-border, rgba(255, 255, 255, 0.08));
}

.cdb-admin-definition-list > div:last-child {
    border-bottom: 0;
}

.cdb-admin-definition-list dt {
    color: var(--cdb-text-muted, #9aa8ba);
    font-size: 0.82rem;
    font-weight: 650;
}

.cdb-admin-definition-list dd {
    min-width: 0;
    margin: 0;
    overflow-wrap: anywhere;
}

.cdb-admin-media-preview {
    display: block;
    width: 100%;
    max-height: 34rem;
    object-fit: contain;
    border-radius: calc(var(--cdb-admin-radius) - 0.25rem);
    background: var(--cdb-bg, #07101d);
}

@media (max-width: 520px) {
    .cdb-admin-definition-list > div {
        grid-template-columns: 1fr;
        gap: 0.25rem;
    }
}

/* ── Stat card : icône + titre sur la même ligne (comme pagehead / panels) ─ */
.cdb-admin-stat {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    column-gap: 0.4rem;
    row-gap: 0.2rem;
}

.cdb-admin-stat__head {
    display: inline-flex;
    flex: 1 1 100%;
    align-items: center;
    gap: 0.4rem;
    min-width: 0;
}

.cdb-admin-stat__ico {
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: 1.25rem;
    height: 1.25rem;
    margin: 0;
    color: var(--cdb-accent, #16878b);
}

.cdb-admin-stat__ico svg {
    width: 100%;
    height: 100%;
}

.cdb-admin-stat__label {
    display: block;
    flex: 1 1 auto;
    min-width: 0;
    margin: 0;
    line-height: 1.25;
}

.cdb-admin-stat__value,
.cdb-admin-stat__hint,
.cdb-admin-stat__trend,
.cdb-admin-stat__period,
.cdb-admin-stat__providers,
.cdb-admin-stat .cdb-stat-trend,
.cdb-admin-stat .cdb-stat-period {
    flex: 1 1 100%;
}

/* ── Formulaires inline admin ───────────────────────────────────────────── */
.cdb-admin-form--inline {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: var(--cdb-admin-gap);
    margin-bottom: var(--cdb-admin-gap);
}

.cdb-admin-form--inline .cdb-field {
    flex: 1 1 12rem;
    min-width: 0;
    margin: 0;
}

.cdb-admin-form--inline .cdb-field--grow {
    flex: 2 1 16rem;
}

.cdb-admin-form--inline .cdb-field--action {
    flex: 0 0 auto;
    display: flex;
    align-items: flex-end;
}

.cdb-admin-form--inline .cdb-field--action .cdb-btn {
    flex: 0 0 auto;
    width: auto;
    align-self: flex-end;
}

@media (max-width: 599px) {
    .cdb-admin-form--inline .cdb-field,
    .cdb-admin-form--inline .cdb-field--grow,
    .cdb-admin-form--inline .cdb-field--action {
        flex: 1 1 100%;
    }
}

/* ── Alignements et spacing helpers ─────────────────────────────────────── */
.cdb-admin-align-start   { align-items: start; }
.cdb-admin-align-center  { align-items: center; }
.cdb-admin-align-stretch { align-items: stretch; }

.cdb-admin-justify-start   { justify-items: start; }
.cdb-admin-justify-center  { justify-items: center; }
.cdb-admin-justify-stretch { justify-items: stretch; }

.cdb-admin-gap-sm { gap: var(--cdb-admin-gap-sm); }
.cdb-admin-gap-lg { gap: var(--cdb-admin-gap-lg); }

/* ── Mobile : simplification des grilles ────────────────────────────────── */
@media (max-width: 599px) {
    .cdb-admin-row {
        grid-template-columns: 1fr;
    }

    /* Sur mobile, chaque colonne occupe la ligne entière */
    [class*="cdb-admin-col-"] {
        grid-column: 1 / -1 !important;
    }

    .cdb-admin-panel--wide,
    .cdb-admin-panel--full {
        grid-column: 1 / -1;
    }
}

/* ── Intégration avec le shell existant ─────────────────────────────────── */
/*
 * Le shell actuel met déjà `.cdb-admin-shell__body` en flex-wrap pour le
 * cockpit admin. Le layout system ci-dessus fonctionne à l’intérieur de
 * `.cdb-admin-row` / `.cdb-admin-stack` sans conflit.
 */
.cdb-admin-shell__body > .cdb-admin-row,
.cdb-admin-shell__body > .cdb-admin-stack {
    width: 100%;
}

/* Sur le cockpit admin, le shell force flex:1 1 100% sur les enfants directs.
   Empêcher .cdb-admin-stack (enfant) de s'étirer verticalement et de masquer le contenu. */
body.cdb-cockpit--admin .cdb-admin-shell__body > .cdb-admin-stack {
    flex: 0 0 auto;
}

/*
 * Migration pattern : `cdb-admin-stack` est souvent posé SUR `.cdb-admin-shell__body`.
 * Combiné à `body.cdb-cockpit--admin .cdb-admin-shell__body > * { flex: 1 1 100% }`
 * (base largeur en flex-wrap), `flex-direction: column` transforme le 100% en
 * hauteur → chaque bloc occupe ~100dvh et le reste disparaît sous le fold /
 * hors zone scrollable. On neutralise ce conflit.
 */
/* Règles de neutralisation du layout admin — appliquées à TOUS les contextes
   admin (cockpit, accent, workspace), pas seulement cdb-cockpit--admin.
   Cause racine du "tout à gauche / scroll" : 75 vues admin utilisent
   body.cdb-admin-accent sans cdb-cockpit--admin, donc ces règles ne s'appliquaient
   pas et le shell débordait / ne s'étalait pas. */
body.cdb-cockpit--admin .cdb-admin-shell__body.cdb-admin-stack,
body.cdb-admin-accent .cdb-admin-shell__body.cdb-admin-stack,
body.cdb-workspace-2026 .cdb-admin-shell__body.cdb-admin-stack {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    align-items: stretch;
    align-content: flex-start;
    gap: var(--cdb-admin-gap);
    /* Laisser le corps grandir avec le contenu pour que __main scroll. */
    flex: 1 0 auto;
    height: auto;
    min-height: 0;
    overflow: visible;
}

/*
 * Critique : site.css pose `flex: 1 1 100%` sur TOUS les enfants du body.
 * En colonne, le 100% = hauteur → page-header / rows prennent ~100dvh
 * (énorme trou vide, contenu sous le fold). Neutraliser.
 */
body.cdb-cockpit--admin .cdb-admin-shell__body.cdb-admin-stack > *,
body.cdb-admin-accent .cdb-admin-shell__body.cdb-admin-stack > *,
body.cdb-workspace-2026 .cdb-admin-shell__body.cdb-admin-stack > * {
    flex: 0 0 auto !important;
    width: 100%;
    max-width: 100%;
    min-height: 0;
    height: auto;
}

/* Panels / cards pleine hauteur dans une rangée multi-colonnes seulement. */
body.cdb-cockpit--admin .cdb-admin-shell__body.cdb-admin-stack > .cdb-admin-row,
body.cdb-cockpit--admin .cdb-admin-shell__body.cdb-admin-stack > .cdb-admin-card-grid-2,
body.cdb-cockpit--admin .cdb-admin-shell__body.cdb-admin-stack > .cdb-admin-card-grid-3 {
    align-items: stretch;
}

body.cdb-cockpit--admin .cdb-admin-shell__body.cdb-admin-stack > .cdb-admin-row > [class*="cdb-admin-col-"] > .cdb-admin-panel,
body.cdb-cockpit--admin .cdb-admin-shell__body.cdb-admin-stack > .cdb-admin-row > [class*="cdb-admin-col-"] > .cdb-admin-seo-card {
    height: 100%;
}

/* Cartes SEO pleine largeur (--wide) : le formulaire court exploitait mal
   l'espace (vide à droite). On le passe en grille auto-fit pour remplir. */
body.cdb-admin-accent .cdb-admin-seo-card--wide .cdb-admin-seo-form,
body.cdb-cockpit--admin .cdb-admin-seo-card--wide .cdb-admin-seo-form {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr));
    gap: 0.65rem 0.85rem;
    align-items: start;
}
body.cdb-admin-accent .cdb-admin-seo-card--wide .cdb-admin-seo-form > .cdb-admin-seo-actions,
body.cdb-cockpit--admin .cdb-admin-seo-card--wide .cdb-admin-seo-form > .cdb-admin-seo-actions {
    grid-column: 1 / -1;
}

body.cdb-cockpit--admin .cdb-admin-kpi-grid > .cdb-admin-stat,
body.cdb-cockpit--admin .cdb-admin-kpi-grid > .cdb-admin-hub-kpi {
    min-height: 100%;
}

/* ── Header admin téléphone : 2 lignes, rien de coupé ───────────────────── */
@media (max-width: 720px) {
    body.cdb-cockpit--admin .cdb-admin-shell__header,
    body.cdb-workspace-2026.cdb-cockpit--admin .cdb-admin-shell__header {
        display: grid !important;
        grid-template-columns: minmax(0, 1fr) auto;
        grid-template-areas:
            "lead right"
            "actions actions";
        align-items: center;
        gap: 0.5rem;
        flex-wrap: unset !important;
        flex-direction: unset !important;
        min-height: 0;
        padding: 0.6rem 0.75rem;
        overflow: visible;
    }

    body.cdb-cockpit--admin .cdb-admin-shell__header-leading {
        grid-area: lead;
        min-width: 0;
        align-items: center;
    }

    body.cdb-cockpit--admin .cdb-admin-shell__header-actions {
        grid-area: actions;
        display: flex !important;
        flex-wrap: wrap;
        width: 100%;
        max-width: 100%;
        justify-content: flex-start;
        gap: 0.4rem;
    }

    body.cdb-cockpit--admin .cdb-admin-shell__header-actions .cdb-btn {
        display: inline-flex !important;
    }

    body.cdb-cockpit--admin .cdb-admin-shell__header-right {
        grid-area: right;
        width: auto;
        margin-left: 0;
    }

    body.cdb-cockpit--admin .cdb-admin-top-search {
        flex: 1 1 100%;
        max-width: none;
        width: 100%;
    }

    body.cdb-cockpit--admin .cdb-admin-shell__title {
        font-size: 1rem;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
    }

    body.cdb-cockpit--admin .cdb-admin-sidebar-toggle {
        flex: 0 0 auto;
    }
}

/* ==========================================================================
 * Densité + sticky header (toutes pages admin / recruteur)
 * Corrige : menu qui défile, double titre, air mort vertical.
 * ========================================================================== */

/* overflow-x:hidden sur body casse sticky dans Chromium — clip conserve le sticky. */
body.cdb-body.cdb-admin-accent,
body.cdb-body.cdb-workspace-2026,
body.cdb-body.cdb-cockpit--admin,
body.cdb-body.cdb-cockpit--recruiter {
    overflow-x: clip;
}

body.cdb-admin-accent,
body.cdb-workspace-2026,
body.cdb-cockpit--admin,
body.cdb-cockpit--recruiter {
    --cdb-admin-gap: 0.55rem;
    --cdb-admin-gap-sm: 0.4rem;
    --cdb-admin-gap-lg: 0.75rem;
    --cdb-admin-section-gap: 0.7rem;
    --cdb-admin-panel-pad: 0.7rem;
    --cdb-admin-panel-pad-sm: 0.55rem;
}

@media (min-width: 1100px) {
    body.cdb-admin-accent,
    body.cdb-workspace-2026,
    body.cdb-cockpit--admin,
    body.cdb-cockpit--recruiter {
        --cdb-admin-gap: 0.7rem;
        --cdb-admin-section-gap: 0.85rem;
        --cdb-admin-panel-pad: 0.85rem;
    }
}

/* Shell = viewport fixe : le scroll est dans __main (sinon sticky part avec la page). */
body.cdb-admin-accent .cdb-admin-shell,
body.cdb-workspace-2026 .cdb-admin-shell,
body.cdb-cockpit--admin .cdb-admin-shell,
body.cdb-cockpit--recruiter .cdb-admin-shell {
    height: 100dvh !important;
    max-height: 100dvh !important;
    min-height: 0 !important;
    overflow: hidden !important;
}

body.cdb-admin-accent .cdb-main--admin,
body.cdb-workspace-2026 .cdb-main--admin,
body.cdb-cockpit--admin .cdb-main--admin,
body.cdb-cockpit--recruiter .cdb-main--admin {
    min-height: 0;
    padding: 0;
    overflow: hidden;
}

/* Header sticky dans le scroll de .cdb-admin-shell__main */
body.cdb-admin-accent .cdb-admin-shell__main,
body.cdb-workspace-2026 .cdb-admin-shell__main,
body.cdb-cockpit--admin .cdb-admin-shell__main,
body.cdb-cockpit--recruiter .cdb-admin-shell__main {
    display: flex;
    flex-direction: column;
    overflow: auto !important;
    height: 100dvh !important;
    max-height: 100dvh !important;
    min-height: 0;
}

/*
 * Critique : ne jamais mettre min-height:0 sur le header flex —
 * le corps (flex:1) le compressait → titre/search/actions peints
 * par-dessus le page-header (chevauchement Module Vente, etc.).
 */
body.cdb-admin-accent .cdb-admin-shell__header,
body.cdb-workspace-2026 .cdb-admin-shell__header,
body.cdb-cockpit--admin .cdb-admin-shell__header,
body.cdb-cockpit--recruiter .cdb-admin-shell__header {
    position: sticky !important;
    top: 0 !important;
    z-index: 80 !important;
    flex: 0 0 auto !important;
    align-self: stretch;
    min-height: auto !important;
    height: auto !important;
    max-height: none !important;
    overflow: visible !important;
    padding: 0.55rem 0.9rem !important;
    /* Audit 2026-08-25 (P4) : mix noir en dur remplacé par le token portal
       remappé clair/sombre — le header restait sombre sur fond clair. */
    background: var(--cdb26-portal-panel-raised, var(--cdb-bg-elevated, #0e1726)) !important;
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border-bottom: 1px solid var(--cdb-border, rgba(255, 255, 255, 0.08));
    box-shadow: 0 8px 24px rgba(0, 0, 0, 0.18);
}

body.cdb-admin-accent .cdb-admin-shell__title,
body.cdb-workspace-2026 .cdb-admin-shell__title {
    font-size: 1.05rem;
    line-height: 1.25;
}

body.cdb-admin-accent .cdb-admin-shell__body,
body.cdb-workspace-2026 .cdb-admin-shell__body {
    flex: 0 0 auto;
    padding: 0.55rem clamp(0.65rem, 1.5vw, 1rem) 1rem;
}

body.cdb-admin-accent .cdb-admin-shell__body.cdb-admin-stack,
body.cdb-workspace-2026 .cdb-admin-shell__body.cdb-admin-stack {
    gap: var(--cdb-admin-gap);
}

/* Page-header : compact, pas de double H1 géant sous le shell */
body.cdb-admin-accent .cdb-data-pagehead,
body.cdb-workspace-2026 .cdb-data-pagehead {
    gap: 0.45rem 0.75rem;
    padding: 0 0 0.35rem;
    margin: 0;
    border-bottom: 1px solid color-mix(in srgb, var(--cdb-border, rgba(255,255,255,.08)) 70%, transparent);
}

body.cdb-admin-accent .cdb-data-pagehead__title,
body.cdb-workspace-2026 .cdb-data-pagehead__title {
    font-size: 0.95rem !important;
    font-weight: 700;
    letter-spacing: 0.01em;
}

body.cdb-admin-accent .cdb-data-pagehead__lead,
body.cdb-workspace-2026 .cdb-data-pagehead__lead {
    margin-top: 0.15rem;
    font-size: 0.82rem;
    line-height: 1.35;
    max-width: 52rem;
}

body.cdb-admin-accent .cdb-admin-panel__head,
body.cdb-workspace-2026 .cdb-admin-panel__head {
    padding: 0.45rem 0.75rem;
}

body.cdb-admin-accent .cdb-admin-panel__body,
body.cdb-workspace-2026 .cdb-admin-panel__body {
    padding: var(--cdb-admin-panel-pad);
}

body.cdb-admin-accent .cdb-admin-panel__sub,
body.cdb-admin-accent .cdb-admin-panel__note {
    margin: 0 0 0.55rem;
    font-size: 0.82rem;
    line-height: 1.4;
}

/* Discord / Telegram / settings : grille plus serrée */
.cdb-admin-discord-layout {
    gap: 0.7rem !important;
}

.cdb-admin-discord-forms {
    gap: 0.7rem !important;
}

.cdb-admin-discord-status-panel {
    position: sticky;
    top: 4.25rem;
    align-self: start;
}

@media (max-width: 960px) {
    .cdb-admin-discord-status-panel {
        position: static;
    }
}

/* CMS marketing : TOC sticky sous le header */
body.cdb-admin-accent .cdb-site-cms-toc {
    top: 4.25rem;
    max-height: calc(100dvh - 5rem);
    padding: 0.65rem 0.7rem;
}

body.cdb-admin-accent .cdb-site-cms-layout {
    gap: 0.75rem;
}

/* SEO cards densifiées */
body.cdb-admin-accent .cdb-admin-seo-grid,
body.cdb-admin-accent .cdb-admin-seo-card {
    gap: 0.65rem;
}

body.cdb-admin-accent .cdb-admin-seo-card {
    padding: 0.65rem 0.75rem;
}

/* Forms settings : moins d’espace entre champs */
body.cdb-admin-accent form.cdb-admin-seo-form,
body.cdb-admin-accent form.cdb-admin-form {
    gap: 0.65rem 0.85rem;
}

body.cdb-admin-accent .cdb-admin-seo-form .cdb-admin-seo-hint,
body.cdb-admin-accent .cdb-field__hint {
    margin-top: 0.25rem;
    font-size: 0.75rem;
    line-height: 1.35;
}

/* Inputs workspace moins « aérés » (design-system mettait 2.85rem) */
body.cdb-admin-accent :where(input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="range"]), textarea, select),
body.cdb-workspace-2026 :where(input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="range"]), textarea, select),
body.cdb-cockpit--admin :where(input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="range"]), textarea, select),
body.cdb-cockpit--recruiter :where(input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="range"]), textarea, select) {
    min-height: 2.35rem;
}

body.cdb-admin-accent textarea,
body.cdb-workspace-2026 textarea {
    min-height: 4.5rem;
}

/* Tables Data UI : densité par défaut (commandes, listes SaaS) */
body.cdb-admin-accent .cdb-data-table-shell th,
body.cdb-admin-accent .cdb-data-table-shell td,
body.cdb-admin-accent .cdb-admin-table-wrap th,
body.cdb-admin-accent .cdb-admin-table-wrap td,
body.cdb-admin-accent .cdb-data-table th,
body.cdb-admin-accent .cdb-data-table td,
body.cdb-admin-accent .cdb-admin-table th,
body.cdb-admin-accent .cdb-admin-table td,
body.cdb-workspace-2026 .cdb-data-table-shell th,
body.cdb-workspace-2026 .cdb-data-table-shell td,
body.cdb-workspace-2026 .cdb-admin-table-wrap th,
body.cdb-workspace-2026 .cdb-admin-table-wrap td {
    padding: 0.4rem 0.55rem;
    line-height: 1.3;
}

body.cdb-admin-accent .cdb-data-table-shell .cdb-btn--sm,
body.cdb-admin-accent .cdb-admin-table-wrap .cdb-btn--sm,
body.cdb-workspace-2026 .cdb-data-table-shell .cdb-btn--sm {
    min-height: 1.85rem;
    padding: 0.25rem 0.55rem;
    font-size: 0.75rem;
}

body.cdb-admin-accent .cdb-data-table-shell .cdb-badge,
body.cdb-admin-accent .cdb-admin-table-wrap .cdb-badge,
body.cdb-workspace-2026 .cdb-data-table-shell .cdb-badge {
    padding: 0.1rem 0.4rem;
    font-size: 0.72rem;
    line-height: 1.25;
}

/* Thead sticky sous le header shell (pas top:0 = collision) */
body.cdb-admin-accent .cdb-data-table-shell thead th,
body.cdb-workspace-2026 .cdb-data-table-shell thead th {
    top: 0;
    z-index: 2;
}

/* Page-header actions : wrap propre, pas de collision avec le shell */
body.cdb-admin-accent .cdb-data-pagehead__actions,
body.cdb-workspace-2026 .cdb-data-pagehead__actions {
    flex: 1 1 100%;
    justify-content: flex-start;
    gap: 0.4rem;
}

@media (min-width: 1100px) {
    body.cdb-admin-accent .cdb-data-pagehead__actions,
    body.cdb-workspace-2026 .cdb-data-pagehead__actions {
        flex: 0 1 auto;
        justify-content: flex-end;
        max-width: min(100%, 36rem);
    }
}

/* Contenu plein largeur utile + inputs moins hauts (anti air mort design-system) */
body.cdb-admin-accent .cdb-admin-shell__body,
body.cdb-workspace-2026 .cdb-admin-shell__body,
body.cdb-cockpit--admin .cdb-admin-shell__body,
body.cdb-cockpit--recruiter .cdb-admin-shell__body {
    max-width: none !important;
    margin-inline: 0 !important;
    padding: 0.55rem clamp(0.65rem, 1.5vw, 1rem) 1rem !important;
}

body.cdb-admin-accent .cdb-admin-shell__body :where(
    input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="range"]),
    textarea,
    select
),
body.cdb-workspace-2026 .cdb-admin-shell__body :where(
    input:not([type="checkbox"], [type="radio"], [type="hidden"], [type="range"]),
    textarea,
    select
) {
    min-height: 2.35rem;
}

body.cdb-admin-accent .cdb-admin-shell__body textarea,
body.cdb-workspace-2026 .cdb-admin-shell__body textarea {
    min-height: 4.5rem;
}

body.cdb-admin-accent .cdb-admin-stack > * + *,
body.cdb-workspace-2026 .cdb-admin-stack > * + * {
    margin-top: 0;
}

body.cdb-admin-accent .cdb-admin-card-grid-2,
body.cdb-admin-accent .cdb-admin-seo-grid {
    gap: 0.7rem !important;
}

body.cdb-admin-accent .cdb-site-cms-hint {
    margin: 0.35rem 0 0.65rem;
    font-size: 0.8rem;
    line-height: 1.35;
}

/* ── Utilitaires anti-inline (audit P4/P4bis 2026-08-25) ─────────────────
   Remplacement des style="" ponctuels des vues admin par des classes
   tokenisées : la CSP se durcit, le thème reste cohérent. */
.cdb-admin-h3-tight {
    margin: 0 0 var(--cdb-admin-gap) 0;
}

.cdb-admin-action-row {
    margin-bottom: var(--cdb-admin-gap);
}

.cdb-admin-form-grid--auto {
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
}

.cdb-input--upper {
    text-transform: uppercase;
}

.cdb-admin-check-inline {
    display: flex;
    gap: var(--cdb-admin-gap-sm);
    align-items: center;
}

.cdb-admin-chart-tall {
    height: 360px;
}

.cdb-admin-cell-wide {
    max-width: 420px;
    overflow-wrap: anywhere;
}

.cdb-admin-note-tight {
    margin: 0.2rem 0 0;
}

.cdb-admin-code-break {
    word-break: break-all;
}

.cdb-admin-mt-form {
    margin-top: 0.75rem;
}

.cdb-admin-actions--end {
    flex-wrap: wrap;
    align-items: end;
}

.cdb-map-desk {
    display: grid;
    grid-template-columns: minmax(0, 1.45fr) minmax(16rem, 0.75fr);
    gap: var(--cdb-admin-gap);
    align-items: start;
}

.cdb-map-desk__review {
    scroll-margin-top: 6rem;
    scroll-margin-top: 5rem;
}

.cdb-map-desk__review-head,
.cdb-map-desk__review-links,
.cdb-map-desk__pages {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.75rem;
}

.cdb-map-desk__review-head {
    justify-content: space-between;
    align-items: flex-start;
    margin-bottom: 1.25rem;
}

.cdb-map-desk__review-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.4fr) minmax(15rem, 0.6fr);
    gap: 1.25rem;
}

.cdb-map-desk__facts {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.75rem 1rem;
    margin: 0 0 1rem;
}

.cdb-map-desk__facts > div {
    min-width: 0;
}

.cdb-map-desk__facts dt {
    color: var(--cdb-admin-muted, #64748b);
    font-size: 0.85rem;
}

.cdb-map-desk__facts dd {
    margin: 0.2rem 0 0;
    overflow-wrap: anywhere;
}

.cdb-map-desk__long-text {
    white-space: pre-wrap;
}

.cdb-map-desk__review-photo {
    display: block;
    width: 100%;
    max-height: 22rem;
    object-fit: contain;
    border-radius: 0.5rem;
    background: var(--cdb-admin-surface, #f1f5f9);
}

.cdb-map-desk__reward {
    margin-top: 1.25rem;
}

.cdb-map-desk__review-form {
    display: grid;
    gap: 0.65rem;
    max-width: 56rem;
    margin-top: 1.5rem;
}

.cdb-map-desk__review-form label {
    font-weight: 600;
}

.cdb-map-desk__revision-form,
.cdb-map-desk__target-search {
    margin: 1rem 0;
    padding: 1rem;
    border: 1px solid var(--cdb-admin-line, #d8e1e5);
    border-radius: 0.75rem;
}

.cdb-map-desk__revision {
    padding: 0.55rem 0;
    border-bottom: 1px solid var(--cdb-admin-line, #d8e1e5);
    overflow-wrap: anywhere;
}

.cdb-map-desk__revision summary {
    cursor: pointer;
    font-weight: 600;
}

.cdb-map-desk__pages {
    justify-content: center;
    margin-top: 1rem;
}

.cdb-map-desk__canvas {
    min-height: 38rem;
    height: min(68vh, 46rem);
    border-radius: 0.75rem;
    overflow: hidden;
}

.cdb-map-desk__map-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 0.75rem;
}

.cdb-map-desk__map-head .cdb-admin-panel__title {
    margin-bottom: 0.2rem;
}

.cdb-map-desk__map-head .cdb-admin-panel__note {
    max-width: 48rem;
    margin: 0;
}

.cdb-map-desk__map-tools {
    display: flex;
    align-items: center;
    flex: 0 1 auto;
    flex-wrap: wrap;
    gap: 0.45rem;
}

.cdb-map-desk__map-stage {
    position: relative;
    overflow: hidden;
    border-radius: 0.75rem;
    background: #162024;
}

.cdb-map-desk__map-status {
    position: absolute;
    right: 0.75rem;
    bottom: 0.75rem;
    max-width: min(28rem, calc(100% - 1.5rem));
    padding: 0.55rem 0.7rem;
    border: 1px solid rgb(255 255 255 / 0.15);
    border-radius: 0.55rem;
    background: rgb(22 32 36 / 0.92);
    color: #f8f4e8;
    font-size: 0.78rem;
    line-height: 1.35;
}

.cdb-map-desk__distance {
    align-self: end;
    color: var(--cdb-admin-muted, #64716e);
    font-size: 0.82rem;
    font-variant-numeric: tabular-nums;
    padding-bottom: 0.65rem;
}

.cdb-map-desk__legend {
    display: flex;
    flex-wrap: wrap;
    gap: 0.55rem 1rem;
    padding-top: 0.7rem;
    color: var(--cdb-admin-muted, #64716e);
    font-size: 0.78rem;
}

.cdb-map-desk__legend span {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
}

.cdb-map-desk__legend i {
    width: 0.55rem;
    height: 0.55rem;
    border-radius: 999px;
    background: #c47b17;
    box-shadow: 0 0 0 2px rgb(255 255 255 / 0.5);
}

.cdb-map-desk__legend i.is-done { background: #2f7d4a; }
.cdb-map-desk__legend i.is-rejected { background: #a33b32; }
.cdb-map-desk__legend i.is-retired { background: #6b7280; }
.cdb-map-desk__legend i.is-catalog { background: #3b7e9e; }

.cdb-map-desk__placement-pin {
    width: 1.15rem;
    height: 1.15rem;
    border: 3px solid #fff;
    border-radius: 50% 50% 50% 0;
    background: #1687ec;
    box-shadow: 0 2px 8px rgb(0 0 0 / 0.45);
    transform: rotate(-45deg);
}

.cdb-map-desk__popup {
    display: grid;
    gap: 0.25rem;
    color: #192326;
    font-size: 0.78rem;
    line-height: 1.35;
}

.cdb-map-desk__popup .cdb-btn {
    margin-top: 0.45rem;
}

.cdb-map-desk__popup-photo {
    display: block;
    width: 100%;
    max-height: 12rem;
    margin-top: 0.6rem;
    border-radius: 0.45rem;
    object-fit: cover;
}

.cdb-road-report-map-stage {
    position: relative;
    margin-top: 1rem;
}

.cdb-road-report-map {
    min-height: 16rem;
}

.cdb-map-desk__mobile-actions {
    display: none;
}

.cdb-map-desk__kpi.is-warn { border-color: color-mix(in srgb, var(--cdb-admin-warn, #c47b17) 55%, transparent); }
.cdb-map-desk__kpi.is-ok { border-color: color-mix(in srgb, var(--cdb-admin-ok, #2f7d4a) 55%, transparent); }
.cdb-map-desk__kpi.is-error { border-color: color-mix(in srgb, var(--cdb-admin-danger, #a33b32) 55%, transparent); }
.cdb-map-desk__pin {
    width: 0.85rem;
    height: 0.85rem;
    border: 2px solid #fff;
    border-radius: 50%;
    padding: 0;
    cursor: pointer;
    box-shadow: 0 0 0 1px rgb(0 0 0 / 0.35);
}

/* Tracé d'une restriction (bouton « Tracer ») : début, fin, longueur, annuler / effacer. */
.cdb-map-desk__trace {
    display: grid;
    gap: 0.45rem;
    margin: 0 0 0.6rem;
    padding: 0.6rem 0.75rem;
    border: 1px solid var(--cdb-admin-border, rgb(0 0 0 / 0.12));
    border-radius: 0.6rem;
    background: var(--cdb-admin-surface-soft, rgb(228 87 46 / 0.06));
}

.cdb-map-desk__trace[hidden] {
    display: none;
}

.cdb-map-desk__trace .cdb-admin-panel__note {
    margin: 0;
}

.cdb-map-desk__trace-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.45rem;
}

.cdb-map-desk__trace-length {
    margin-right: auto;
    font-size: 0.85rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.cdb-map-desk__trace-vertex {
    display: grid;
    place-items: center;
    min-width: 1.6rem;
    height: 1.6rem;
    padding: 0 0.35rem;
    border: 2px solid #fff;
    border-radius: 999px;
    color: #fff;
    font-size: 0.68rem;
    font-weight: 700;
    line-height: 1;
    white-space: nowrap;
    pointer-events: none;
    box-shadow: 0 0 0 1px rgb(0 0 0 / 0.35);
}

[data-map-mode='trace'].has-trace::after {
    content: ' ✓';
}

.cdb-map-desk__map:fullscreen,
.cdb-map-desk__map.is-map-fullscreen-fallback {
    display: grid;
    grid-template-rows: auto minmax(0, 1fr);
    gap: 0.75rem;
    width: 100%;
    height: 100vh;
    height: 100dvh;
    max-width: none;
    margin: 0;
    padding: max(0.75rem, env(safe-area-inset-top))
        max(0.75rem, env(safe-area-inset-right))
        max(0.75rem, env(safe-area-inset-bottom))
        max(0.75rem, env(safe-area-inset-left));
    overflow: auto;
    border-radius: 0;
    background: var(--cdb-bg-elevated, #0e1726);
}

.cdb-map-desk__map.is-map-fullscreen-fallback {
    position: fixed;
    inset: 0;
    z-index: 10000;
}

body.cdb-map-fullscreen-active { overflow: hidden; }

.cdb-map-desk__map:is(:fullscreen, .is-map-fullscreen-fallback) .cdb-map-desk__map-stage {
    min-height: 0;
    height: 100%;
}

.cdb-map-desk__map:is(:fullscreen, .is-map-fullscreen-fallback) .cdb-map-desk__canvas {
    min-height: 0;
    height: 100%;
}

@media (max-width: 64rem) {
    .cdb-map-desk {
        grid-template-columns: minmax(0, 1fr);
    }

    .cdb-map-desk__review-grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .cdb-map-desk__canvas {
        min-height: 32rem;
        height: 60vh;
    }
}

@media (max-width: 700px) {
    .cdb-map-desk__queue-table,
    .cdb-map-desk__queue-table tbody,
    .cdb-map-desk__queue-table tr,
    .cdb-map-desk__queue-table td {
        display: block;
        width: 100%;
    }

    .cdb-map-desk__queue-table thead {
        position: absolute;
        width: 1px;
        height: 1px;
        padding: 0;
        margin: -1px;
        overflow: hidden;
        clip-path: inset(50%);
        white-space: nowrap;
    }

    .cdb-map-desk__queue-table tr:not(.cdb-map-desk__queue-empty) {
        margin: 0.75rem 0;
        padding: 0.75rem;
        border: 1px solid var(--cdb-admin-line, #d8e1e5);
        border-radius: 0.75rem;
    }

    .cdb-map-desk__queue-table td:not([colspan]) {
        display: grid;
        grid-template-columns: minmax(6rem, 34%) minmax(0, 1fr);
        gap: 0.6rem;
        padding: 0.35rem 0;
        border: 0;
        overflow-wrap: anywhere;
    }

    .cdb-map-desk__queue-table td:not([colspan])::before {
        content: attr(data-label);
        color: var(--cdb-admin-muted, #64748b);
        font-size: 0.85rem;
        font-weight: 600;
    }

    .cdb-map-desk__queue-table .cdb-data-col--actions {
        display: flex !important;
        flex-wrap: wrap;
        gap: 0.45rem;
    }

    .cdb-map-desk__queue-table .cdb-data-col--actions::before {
        flex-basis: 100%;
    }

    .cdb-map-desk__facts {
        grid-template-columns: minmax(0, 1fr);
    }
    .cdb-map-desk__map-head {
        flex-direction: column;
    }

    .cdb-map-desk__map-tools {
        width: 100%;
    }
}

/* ── Maps Creator : grilles sans trou et fiche lisible (audit 2026-10-25) ──
   8 indicateurs de suivi = 2 × 4 ; 4 indicateurs catalogue = 1 × 4 (jamais
   3 + 1) ; carte + formulaire staff mieux équilibrés ; fiche en deux colonnes
   avec notes en pleine largeur ; correction repliée sous la décision. */
body.cdb-pro-workspace.cdb-map-desk-page :is(.cdb-admin-kpi-grid.cdb-map-desk__kpis, .cdb-admin-card-grid-4.cdb-map-desk__catalog) > * { grid-column: auto !important; }
/* `!important` : cdb-workspace.css impose 3 colonnes (!important) à toutes
   les grilles d'indicateurs admin, d'où 3 + 3 + 2 ici. */
body.cdb-pro-workspace.cdb-map-desk-page .cdb-admin-kpi-grid.cdb-map-desk__kpis,
body.cdb-pro-workspace.cdb-map-desk-page .cdb-admin-card-grid-4.cdb-map-desk__catalog {
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
}
@media (min-width: 900px) {
    body.cdb-pro-workspace.cdb-map-desk-page .cdb-admin-kpi-grid.cdb-map-desk__kpis,
    body.cdb-pro-workspace.cdb-map-desk-page .cdb-admin-card-grid-4.cdb-map-desk__catalog {
        grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
    }
}
body.cdb-map-desk-page .cdb-map-desk {
    grid-template-columns: minmax(0, 1.6fr) minmax(22rem, 1fr);
}
@media (max-width: 1100px) {
    body.cdb-map-desk-page .cdb-map-desk {
        grid-template-columns: minmax(0, 1fr);
    }
}
body.cdb-map-desk-page .cdb-map-desk__facts > .cdb-map-desk__fact--wide {
    grid-column: 1 / -1;
}
body.cdb-map-desk-page .cdb-map-desk__review-form {
    max-width: none;
    margin-top: 1.25rem;
    padding: 1rem;
    border: 1px solid var(--cdb-admin-line, #d8e1e5);
    border-radius: 0.75rem;
}
body.cdb-map-desk-page .cdb-map-desk__revision-wrap {
    margin-top: 1rem;
}
body.cdb-map-desk-page .cdb-map-desk__revision-wrap > summary {
    cursor: pointer;
    font-weight: 650;
    padding: 0.5rem 0;
}
body.cdb-map-desk-page .cdb-map-desk__field-grid--three {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
    gap: 0.65rem 1rem;
}
body.cdb-map-desk-page .cdb-map-desk__field-grid--three .cdb-map-desk__field {
    display: grid;
    gap: 0.35rem;
    min-width: 0;
}
body.cdb-map-desk-page .cdb-map-desk__revision-form > .cdb-map-desk__field:has(textarea) {
    grid-column: auto;
}
@media (min-width: 768px) {
    body.cdb-map-desk-page .cdb-map-desk__revision-form {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    body.cdb-map-desk-page .cdb-map-desk__revision-form > :is(h3, p, button, .cdb-map-desk__field-grid--three) {
        grid-column: 1 / -1;
    }
}
