/* === VARIABLES (design system v2 — palette chaude + indigo) === */
:root {
    /* Primaire (indigo) */
    --primary: #3f56cc;
    --primary-dark: #33469f;   /* hover */
    --primary-tint: #eef0fb;   /* fond item actif / boutons secondaires */
    --primary-tint2: #f5f6fd;
    --primary-border: #cfd4f0;
    --primary-text: #33469f;

    /* Sémantique */
    --danger: #b23636;         --danger-dark: #8f2a2a;
    --danger-bg: #fbeeee;      --danger-border: #e0b4b4;
    --warning: #b9791a;        --warning-dark: #7a5a1e;   --warning-text: #7a5a1e;
    --warning-bg: #fff3df;     --warning-border: #f0dcae;
    --success: #2f8a4f;        --success-text: #215e37;
    --success-bg: #eaf5ee;     --success-border: #bfe0cb;
    /* actions positives (vert) — aligné sur success */
    --action: #2f8a4f;         --action-dark: #215e37;

    /* Fonds */
    --bg-app: #eceae5;         /* fond général */
    --bg-content: #f7f6f2;     /* zone de contenu */
    --bg-surface: #ffffff;     /* cartes, en-têtes */
    --bg-sidebar: #fbfaf7;
    --bg-muted: #faf9f5;       /* lignes calmes, hover discret */

    /* Texte & bordures */
    --text: #1c1a17;
    --text-secondary: #57554e;
    --text-muted: #8a887f;
    --text-faint: #a3a196;
    --border: #e7e5df;
    --border-strong: #dcdad3;
    --divider: #f0eee8;

    /* Avatar */
    --avatar-bg: #e6e3f7;      --avatar-text: #33469f;

    /* Rayons */
    --radius-sm: 7px;  --radius: 9px;  --radius-lg: 14px;  --radius-pill: 99px;

    /* Ombres */
    --shadow-card: 0 1px 3px rgba(28,26,23,0.06);
    --shadow-modal: 0 24px 60px -12px rgba(28,26,23,0.40);

    /* Compat : anciens neutres gris remappés sur la palette chaude
       (encore référencés par des classes non refondues — Phase 1/2) */
    --gray-50: #faf9f5;   --gray-100: #f0eee8;  --gray-200: #e7e5df;
    --gray-300: #dcdad3;  --gray-500: #8a887f;  --gray-700: #57554e;  --gray-900: #1c1a17;
}

/* === RESET === */
* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    background: var(--bg-app);
    color: var(--text);
    line-height: 1.5;
}

a {
    color: var(--primary);
    text-decoration: none;
}

a:hover {
    color: var(--primary-dark);
}

/* === LAYOUT SHELL (sidebar v2) === */
.layout--with-sidebar {
    display: flex;
    align-items: stretch;
    min-height: 100vh;
}
.layout--with-sidebar .app-main {
    flex: 1;
    min-width: 0;
    background: var(--bg-content);
}

.sidebar {
    width: 236px;
    flex-shrink: 0;
    background: var(--bg-sidebar);
    border-right: 1px solid var(--border);
    position: sticky;
    top: 0;
    height: 100vh;
    display: flex;
    flex-direction: column;
    overflow-y: auto;
}
.sidebar-brand {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    padding: 1.1rem 1.15rem 0.9rem;
    border-bottom: 1px solid var(--divider);
}
.sidebar-logo { width: 30px; height: 30px; border-radius: var(--radius-sm); flex-shrink: 0; }
.sidebar-brand-text { display: flex; flex-direction: column; line-height: 1.2; min-width: 0; }
.sidebar-app-name { font-weight: 700; font-size: 0.98rem; color: var(--text); }
.sidebar-meta { font-size: 0.72rem; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.sidebar-nav { flex: 1; padding: 0.85rem 0.7rem; display: flex; flex-direction: column; gap: 1.1rem; }
.sidebar-section { display: flex; flex-direction: column; gap: 0.12rem; }
.sidebar-section-label {
    padding: 0 0.6rem 0.35rem;
    font-size: 0.7rem; font-weight: 600; letter-spacing: 0.05em;
    text-transform: uppercase; color: var(--text-faint);
}
.sidebar-link {
    display: flex; align-items: center; gap: 0.55rem;
    padding: 0.5rem 0.6rem; border-radius: var(--radius-sm);
    font-size: 0.9rem; font-weight: 500; color: var(--text-secondary);
    text-decoration: none;
}
.sidebar-link:hover { background: var(--bg-muted); color: var(--text); text-decoration: none; }
.sidebar-link.active { background: var(--primary-tint); color: var(--primary-text); font-weight: 600; }

.sidebar-subnav {
    display: flex; flex-direction: column; gap: 0.1rem;
    margin: 0.15rem 0 0.25rem 1rem; padding-left: 0.6rem;
    border-left: 1px solid var(--border);
}
.sidebar-sublink {
    padding: 0.35rem 0.6rem; border-radius: var(--radius-sm);
    font-size: 0.85rem; color: var(--text-secondary); text-decoration: none;
}
.sidebar-sublink:hover { background: var(--bg-muted); color: var(--text); text-decoration: none; }
.sidebar-sublink.active { background: var(--primary-tint); color: var(--primary-text); font-weight: 600; }
.sidebar-sublink.is-soon { opacity: 0.55; cursor: default; display: flex; align-items: center; gap: 0.4rem; }
.sidebar-sublink.is-soon:hover { background: none; color: var(--text-secondary); }
.soon-tag { font-size: 0.62rem; text-transform: uppercase; letter-spacing: 0.03em; background: var(--bg-muted); color: var(--text-muted); border: 1px solid var(--border); border-radius: var(--radius-pill); padding: 0.02rem 0.35rem; }

/* ==================== Écran Formulaires (v2 — cible 04) ==================== */
.forms-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 1rem; }
.form-card-v2 { display: flex; flex-direction: column; gap: 0.7rem; }
.form-card-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 0.75rem; }
.form-card-title { font-weight: 700; font-size: 1.02rem; color: var(--text); }
.form-card-title:hover { color: var(--primary); }
.form-card-desc { color: var(--text-secondary); font-size: 0.88rem; margin: 0; display: -webkit-box; -webkit-line-clamp: 3; line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.form-card-meta { display: flex; flex-direction: column; gap: 0.3rem; border-top: 1px solid var(--divider); padding-top: 0.6rem; margin-top: auto; }
.form-card-meta > div { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; font-size: 0.88rem; }
.form-card-meta .k { color: var(--text-muted); }
.form-card-meta .v { font-weight: 600; }
.form-card-actions { display: flex; align-items: center; gap: 0.5rem; }
.form-status { display: inline-flex; align-items: center; gap: 0.35rem; font-size: 0.76rem; font-weight: 600; padding: 0.15rem 0.55rem; border-radius: var(--radius-pill); white-space: nowrap; }
.form-status::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.form-status.is-active { color: var(--success-text); background: var(--success-bg); }
.form-status.is-soon { color: var(--warning-text); background: var(--warning-bg); }
.form-status.is-off { color: var(--text-muted); background: var(--bg-muted); }
.type-badges { display: flex; gap: 0.35rem; flex-wrap: wrap; margin: 0.1rem 0 0.35rem; }
.type-badge { font-size: 0.7rem; font-weight: 600; padding: 0.1rem 0.45rem; border-radius: var(--radius-pill); border: 1px solid var(--border); color: var(--text-secondary); background: var(--bg-muted); white-space: nowrap; }
.type-badge.is-fiche { background: var(--warning-bg); color: var(--warning-text); border-color: var(--warning-border); }
.avalider-pill { font-size: 0.7rem; font-weight: 600; padding: 0.1rem 0.5rem; border-radius: var(--radius-pill); background: var(--warning-bg); color: var(--warning-text); border: 1px solid var(--warning-border); white-space: nowrap; }
.form-card-icons { display: flex; gap: 0.3rem; }
/* Édition formulaire : verrou + groupes ordonnés */
.lock-banner { margin-bottom: 1rem; }
.group-add-row { margin-bottom: 1rem; }
.group-add-row select { max-width: 340px; }
.selected-groups { display: flex; flex-direction: column; gap: 0.6rem; }
.group-row { border: 1px solid var(--border); border-radius: var(--radius); padding: 0.7rem 0.8rem; background: var(--bg-muted); }
.group-row-head { display: flex; align-items: center; gap: 0.6rem; }
.group-reorder { display: flex; flex-direction: column; gap: 2px; }
.reorder-btn { width: 24px; height: 18px; line-height: 1; padding: 0; border: 1px solid var(--border-strong); background: var(--bg-surface); border-radius: 4px; cursor: pointer; color: var(--text-secondary); font-size: 0.6rem; }
.reorder-btn:hover { border-color: var(--primary-border); color: var(--primary); }
.group-name { flex: 1; }
.group-remove { border: none; background: none; font-size: 1.35rem; line-height: 1; color: var(--text-muted); cursor: pointer; padding: 0 0.3rem; }
.group-remove:hover { color: var(--danger); }
.group-fields { display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem; margin-top: 0.6rem; }
@media (max-width: 720px) { .group-fields { grid-template-columns: 1fr; } }

/* Détail formulaire */
.back-link { display: inline-block; color: var(--text-muted); font-size: 0.9rem; margin-bottom: 0.6rem; }
.back-link:hover { color: var(--primary); }
.detail-link-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; flex-wrap: wrap; margin-bottom: 0.6rem; }
.detail-link-status { display: flex; align-items: center; gap: 0.6rem; }
.pref-link-code { display: block; background: var(--bg-muted); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 0.55rem 0.75rem; font-size: 0.85rem; word-break: break-all; }
.detail-groups { margin: 0; padding-left: 1.2rem; }
.detail-groups li { margin-bottom: 0.35rem; }
.detail-group-src { font-size: 0.72rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: 0.02em; margin-left: 0.4rem; }
.page-header-title h1 .form-status { vertical-align: middle; margin-left: 0.5rem; }

/* Formulaire admin — navigation par onglets (v2) */
.form-admin-header { margin-bottom: 0.25rem; }
.form-tabs { display: flex; gap: 0.25rem; border-bottom: 1px solid var(--border); margin-bottom: 1.25rem; overflow-x: auto; }
.form-tab { padding: 0.55rem 0.9rem; color: var(--text-secondary); font-size: 0.92rem; font-weight: 600; border-bottom: 2px solid transparent; margin-bottom: -1px; white-space: nowrap; }
.form-tab:hover { color: var(--text); }
.form-tab.active { color: var(--primary); border-bottom-color: var(--primary); }
.tab-count { display: inline-block; min-width: 18px; padding: 0 0.35rem; border-radius: var(--radius-pill); background: var(--bg-muted); color: var(--text-muted); font-size: 0.72rem; text-align: center; }
.tab-count.is-alert { background: var(--warning-bg); color: var(--warning-text); }
.link-copy-row { display: flex; gap: 0.6rem; align-items: stretch; }
.link-copy-row .pref-link-code { flex: 1; margin: 0; display: flex; align-items: center; }

/* Assembleur de blocs (éditeur de formulaire v2) */
.blocks-title { margin-top: 1.5rem; margin-bottom: 0.35rem; }
.form-block { border: 1px solid var(--border); border-radius: var(--radius); margin-bottom: 1rem; background: var(--bg-surface); box-shadow: var(--shadow-card); overflow: hidden; }
.form-block-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; padding: 0.8rem 1rem; background: var(--bg-muted); border-bottom: 1px solid var(--border); }
.form-block-title { display: flex; align-items: baseline; gap: 0.5rem; flex-wrap: wrap; }
.block-ico { font-size: 1rem; }
.block-desc { color: var(--text-muted); font-size: 0.85rem; font-weight: 400; }
.form-block-body { padding: 1rem; }
.block-badge { font-size: 0.75rem; font-weight: 600; padding: 0.2rem 0.6rem; border-radius: var(--radius-pill); white-space: nowrap; }
.block-badge.is-direct { background: var(--success-bg); color: var(--success-text); }
.block-badge.is-protected { background: var(--warning-bg); color: var(--warning-text); }
.form-block-controls { display: flex; align-items: center; gap: 0.4rem; }
.block-move, .block-remove-btn { border: 1px solid var(--border-strong); background: var(--bg-surface); border-radius: 4px; cursor: pointer; color: var(--text-secondary); width: 24px; height: 22px; line-height: 1; padding: 0; font-size: 0.6rem; }
.block-move:hover { border-color: var(--primary-border); color: var(--primary); }
.block-remove-btn { font-size: 1.1rem; color: var(--text-muted); }
.block-remove-btn:hover { border-color: var(--danger-border); color: var(--danger); }
.form-block.is-hidden { display: none; }
.add-block-row { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; margin: 0.25rem 0 1rem; }
.add-block-label { color: var(--text-muted); font-size: 0.9rem; }
.fiche-group { margin-bottom: 0.75rem; }
.fiche-group-label { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.03em; color: var(--text-muted); margin-bottom: 0.35rem; }
.fiche-fields { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.fiche-field { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.35rem 0.6rem; border: 1px solid var(--border); border-radius: var(--radius-sm); font-size: 0.88rem; cursor: pointer; }
.fiche-field:hover { border-color: var(--primary-border); }
.fiche-field.is-locked { opacity: 0.6; cursor: default; background: var(--bg-muted); }
.lock-tag { font-size: 0.7rem; color: var(--text-muted); }
.survey-questions { display: flex; flex-direction: column; gap: 0.5rem; margin-bottom: 0.75rem; }
.survey-q { display: flex; align-items: center; gap: 0.5rem; }
.survey-q-reorder { display: flex; flex-direction: column; gap: 2px; }
.survey-q-label { flex: 1; }
.survey-q-type { width: auto; flex: 0 0 auto; min-width: 130px; }
.survey-q-remove { border: none; background: none; font-size: 1.35rem; line-height: 1; color: var(--text-muted); cursor: pointer; padding: 0 0.3rem; }
.survey-q-remove:hover { color: var(--danger); }

/* Onglet « À valider » — cartes de modération (diff) */
.proposal-card { margin-bottom: 1rem; }
.proposal-head { margin-bottom: 0.6rem; }
.otp-badge { display: inline-block; margin-left: 0.4rem; font-size: 0.7rem; font-weight: 600; color: #047857; background: #ecfdf5; border: 1px solid #a7f3d0; border-radius: 999px; padding: 0.1rem 0.5rem; vertical-align: middle; }
.proposal-diffs { display: flex; flex-direction: column; gap: 0.4rem; border-top: 1px solid var(--divider); padding-top: 0.6rem; }
.proposal-diff { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; font-size: 0.9rem; }
.pd-field { min-width: 120px; color: var(--text-muted); }
.pd-old { text-decoration: line-through; color: var(--danger); }
.pd-new { font-weight: 600; color: var(--success-text); background: var(--success-bg); padding: 0.05rem 0.45rem; border-radius: 4px; }
.pd-arrow { color: var(--text-muted); }
.proposal-actions { display: flex; gap: 0.5rem; justify-content: flex-end; margin-top: 0.8rem; }

/* Onglet Réponses — liste de réponses */
.response-list { display: flex; flex-direction: column; }
.response-row { display: flex; align-items: center; gap: 0.75rem; padding: 0.7rem 0; border-top: 1px solid var(--divider); }
.response-row:first-child { border-top: none; }
.response-ident { min-width: 180px; }
.response-ident strong { font-size: 0.92rem; }
.response-data { flex: 1; display: flex; flex-wrap: wrap; gap: 0.3rem; align-items: center; }
.survey-answer { font-size: 0.82rem; color: var(--text-secondary); background: var(--bg-muted); border: 1px solid var(--border); border-radius: var(--radius-pill); padding: 0.05rem 0.5rem; }
.response-date { font-size: 0.82rem; white-space: nowrap; }

.sidebar-user {
    border-top: 1px solid var(--divider);
    padding: 0.7rem 0.85rem; display: flex; align-items: center; gap: 0.6rem;
}
.sidebar-user-info { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.sidebar-user-link { font-size: 0.85rem; font-weight: 600; color: var(--text); }
.sidebar-logout { font-size: 0.8rem; color: var(--text-muted); }

/* Bouton menu mobile */
.sidebar-toggle {
    display: none;
    align-items: center; gap: 0.5rem;
    width: 100%; padding: 0.6rem 1rem;
    background: var(--bg-surface); color: var(--text);
    border: none; border-bottom: 1px solid var(--border);
    font-size: 0.95rem; font-weight: 600; cursor: pointer;
    position: sticky; top: 0; z-index: 20;
}
@media (max-width: 768px) {
    .layout--with-sidebar { display: block; }
    .sidebar {
        position: fixed; left: 0; top: 0; bottom: 0; height: auto; z-index: 30;
        transform: translateX(-100%); transition: transform 0.2s ease;
        box-shadow: var(--shadow-modal);
    }
    .sidebar.open { transform: translateX(0); }
    .sidebar-toggle { display: flex; }
}

/* === NAVBAR === */
.navbar {
    background: var(--gray-900);
    color: white;
    padding: 0 1.5rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 56px;
}

.nav-brand {
    font-weight: 600;
    font-size: 1.1rem;
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.nav-brand-icon {
    width: 28px;
    height: 28px;
    border-radius: 6px;
    flex-shrink: 0;
}

.version-tag {
    font-weight: normal;
    font-size: 0.7rem;
    color: var(--gray-500);
    vertical-align: middle;
    margin-left: 0.25rem;
}

.instance-tag {
    font-size: 0.7rem;
    font-weight: 500;
    color: var(--gray-500);
    background: rgba(255,255,255,0.08);
    border-radius: 99px;
    padding: 0.1rem 0.5rem;
    margin-left: 0.25rem;
    vertical-align: middle;
}

.nav-links {
    display: flex;
    gap: 1rem;
}

.nav-links a {
    color: var(--gray-300);
    padding: 0.5rem 0.75rem;
    border-radius: var(--radius);
}

.nav-links a:hover,
.nav-links a.active {
    color: white;
    background: rgba(255,255,255,0.1);
    text-decoration: none;
}

.nav-links .logout {
    color: var(--gray-500);
}

.nav-separator {
    border-left: 1px solid var(--gray-500);
    height: 1.25rem;
    margin: 0 0.25rem;
}

.nav-user {
    font-size: 0.85rem;
}

.role-badge {
    display: inline-block;
    padding: 0.1rem 0.4rem;
    border-radius: 99px;
    font-size: 0.65rem;
    font-weight: 600;
    background: var(--primary-tint);
    color: var(--primary-text);
    vertical-align: middle;
}

/* === CONTAINER === */
.container {
    max-width: 1200px;
    margin: 0 auto;
    padding: 1.5rem;
}

.container.container-wide {
    max-width: none;
    padding: 1.5rem 2rem;
}

/* === ALERTS === */
.alert {
    padding: 0.75rem 1rem;
    border-radius: var(--radius);
    margin-bottom: 1rem;
}

.alert-success {
    background: var(--success-bg);
    color: var(--success-text);
    border: 1px solid var(--success-border);
}

.alert-error {
    background: var(--danger-bg);
    color: var(--danger-dark);
    border: 1px solid var(--danger-border);
}

.alert-info {
    background: var(--primary-tint);
    color: var(--primary-text);
    border: 1px solid var(--primary-border);
}

.alert-warning {
    background: var(--warning-bg);
    color: var(--warning-text);
    border: 1px solid var(--warning-border);
}

/* === PAGE HEADER === */
.page-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 1.5rem;
}

.page-header h1 {
    font-size: 1.4rem;
    font-weight: 700;
    color: var(--text);
}

.page-header .count {
    color: var(--gray-500);
    font-weight: normal;
}

/* === BUTTONS === */
.btn {
    display: inline-block;
    padding: 0.5rem 1rem;
    border: 1px solid var(--gray-300);
    background: white;
    color: var(--gray-700);
    border-radius: var(--radius);
    cursor: pointer;
    font-size: 0.875rem;
    text-decoration: none;
}

.btn:hover {
    background: var(--gray-50);
    text-decoration: none;
}

.btn-primary {
    background: var(--primary);
    border-color: var(--primary);
    color: white;
}

.btn-primary:hover {
    background: var(--primary-dark);
}

.btn-secondary {
    background: var(--primary-tint);
    border-color: var(--primary-border);
    color: var(--primary-text);
}

.btn-danger {
    background: var(--danger);
    border-color: var(--danger);
    color: white;
}

.btn-danger:hover {
    background: var(--danger-dark);
}

.btn-warning {
    background: var(--warning);
    border-color: var(--warning);
    color: white;
}

.btn-warning:hover {
    background: var(--warning-dark);
}

.btn-action {
    background: var(--action);
    border-color: var(--action);
    color: white;
}

.btn-action:hover {
    background: var(--action-dark);
}

/* Un <a class="btn…"> héritait de la règle globale `a:hover { color: primary-dark }`,
   plus spécifique que `.btn-primary` : sur les boutons pleins, le texte prenait la
   couleur du fond et devenait illisible au survol. On réaffirme donc la couleur de
   chaque variante à l'état hover (même spécificité, déclaré plus bas => gagne). */
.btn-primary:hover,
.btn-danger:hover,
.btn-warning:hover,
.btn-action:hover { color: #fff; }
.btn-secondary:hover { color: var(--primary-text); background: var(--primary-tint2); }
a.btn:hover { color: var(--gray-700); }
a.btn-primary:hover,
a.btn-danger:hover,
a.btn-warning:hover,
a.btn-action:hover { color: #fff; }
a.btn-secondary:hover { color: var(--primary-text); }

.btn:disabled {
    opacity: 0.4;
    cursor: not-allowed;
    pointer-events: none;
}

.btn-small {
    padding: 0.25rem 0.5rem;
    font-size: 0.8rem;
}

/* === FILTERS === */
.filters {
    margin-bottom: 1rem;
}

.filter-form {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
}

.search-input {
    min-width: 200px;
}

/* === FORMS === */
input[type="text"],
input[type="email"],
input[type="tel"],
input[type="password"],
input[type="file"],
textarea,
select {
    width: 100%;
    padding: 0.5rem 0.75rem;
    border: 1px solid var(--gray-300);
    border-radius: var(--radius);
    font-size: 0.95rem;
}

input:focus,
textarea:focus,
select:focus {
    outline: none;
    border-color: var(--primary);
    box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1);
}

.form-card {
    background: var(--bg-surface);
    padding: 1.5rem;
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
    max-width: 600px;
}

/* Formulaires larges (ex: édition d'un formulaire de préférences avec de
   nombreuses listes) : occupe toute la largeur du conteneur au lieu du cap 600px. */
.form-card.form-card-wide {
    max-width: none;
}

.form-group {
    margin-bottom: 1rem;
}

.form-group label {
    display: block;
    font-weight: 500;
    margin-bottom: 0.25rem;
    color: var(--gray-700);
}

.form-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 1rem;
}

.form-fieldset {
    border: 1px solid var(--gray-200);
    border-radius: var(--radius);
    padding: 1rem 1.25rem 0.5rem;
    margin-bottom: 1rem;
}

.form-fieldset legend {
    font-weight: 500;
    color: var(--gray-500);
    font-size: 0.9rem;
    padding: 0 0.5rem;
}

.form-actions {
    display: flex;
    gap: 0.5rem;
    margin-top: 1.5rem;
}

.hint {
    font-size: 0.8rem;
    color: var(--gray-500);
    margin-top: 0.25rem;
}

.checkbox-group {
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
}

.checkbox-label {
    display: flex;
    align-items: center;
    gap: 0.25rem;
    font-weight: normal;
    cursor: pointer;
}

.submission-attachments-list {
    margin: 0.5rem 0 0;
    padding-left: 1.25rem;
}

.submission-attachments-list li {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin-bottom: 0.25rem;
}

.submission-attachments-list .checkbox-label {
    display: inline-flex;
}

/* === DATA TABLE === */
.data-table {
    width: 100%;
    background: var(--bg-surface);
    border-collapse: collapse;
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    overflow: hidden;
    box-shadow: var(--shadow-card);
}

.data-table th,
.data-table td {
    padding: 0.75rem;
    text-align: left;
    border-bottom: 1px solid var(--gray-200);
}

.data-table th {
    background: var(--gray-50);
    font-weight: 600;
    color: var(--gray-700);
    font-size: 0.85rem;
}

.data-table tbody tr:hover {
    background: var(--gray-50);
}

.data-table .col-checkbox {
    width: 40px;
}

.data-table .col-actions {
    width: 150px;
}

.data-table .actions {
    display: flex;
    gap: 0.25rem;
}

.data-table .empty {
    text-align: center;
    color: var(--gray-500);
    padding: 2rem;
}

/* === BULK ACTIONS === */
.bulk-actions {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    margin-bottom: 0.75rem;
    padding: 0.5rem;
    background: var(--gray-50);
    border-radius: var(--radius);
    flex-wrap: wrap;
}

.select-all-label {
    display: flex;
    align-items: center;
    gap: 0.25rem;
    font-size: 0.875rem;
}

.bulk-liste-select {
    width: auto;
    min-width: 180px;
}

/* === TAGS === */
.tag {
    display: inline-block;
    padding: 0.125rem 0.55rem;
    background: var(--primary-tint);
    color: var(--primary-text);
    border-radius: var(--radius-pill);
    font-size: 0.75rem;
    font-weight: 500;
    margin: 0 0.25rem 0.2rem 0;
    white-space: nowrap;
}

/* === CARDS GRID === */
.cards-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 1rem;
}

.card {
    background: var(--bg-surface);
    border: 1px solid var(--border);
    border-radius: var(--radius-lg);
    padding: 1rem;
    box-shadow: var(--shadow-card);
}

.card-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 0.5rem;
}

.card-header h3 {
    font-size: 1rem;
}

.badge {
    background: var(--primary);
    color: white;
    padding: 0.125rem 0.5rem;
    border-radius: 99px;
    font-size: 0.75rem;
}

.card-description {
    color: var(--gray-500);
    font-size: 0.875rem;
    margin-bottom: 0.75rem;
}

.card-actions {
    display: flex;
    gap: 0.25rem;
    flex-wrap: wrap;
}

/* === INFO BOX === */
.info-box {
    margin-top: 1.5rem;
    padding: 1rem;
    background: var(--gray-50);
    border-radius: var(--radius);
    border-left: 3px solid var(--primary);
}

.info-box h3 {
    font-size: 0.9rem;
    margin-bottom: 0.5rem;
}

.info-box ul {
    margin-left: 1.5rem;
}

.info-box code {
    background: var(--gray-200);
    padding: 0.125rem 0.25rem;
    border-radius: 3px;
    font-size: 0.85rem;
}

/* === LOGIN === */
.login-container {
    max-width: 360px;
    margin: 4rem auto;
    text-align: center;
}

.login-container h1 {
    margin-bottom: 0.25rem;
    color: var(--gray-900);
}

.login-app-icon {
    width: 72px;
    height: 72px;
    border-radius: 16px;
    margin-bottom: 1rem;
    display: block;
    margin-left: auto;
    margin-right: auto;
}

.login-instance-name {
    font-size: 0.8rem;
    color: var(--gray-500);
    margin-bottom: 1.25rem;
}

.login-form {
    background: white;
    padding: 1.5rem;
    border-radius: var(--radius);
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
}

.login-form .btn {
    width: 100%;
    margin-top: 0.5rem;
}

/* === EXPORT SECTION === */
.export-section {
    margin-top: 1rem;
}

/* === EMPTY STATE === */
.empty {
    color: var(--gray-500);
    text-align: center;
    padding: 2rem;
}

/* === HAMBURGER NAV === */
.nav-hamburger {
    display: none;
    background: none;
    border: none;
    color: white;
    font-size: 1.5rem;
    cursor: pointer;
    padding: 0.375rem 0.5rem;
    line-height: 1;
    border-radius: var(--radius);
}
.nav-hamburger:hover {
    background: rgba(255,255,255,0.1);
}

/* === MOBILE CONTACT CARDS === */
.mobile-cards { display: none; }

.contact-card {
    background: white;
    border-radius: var(--radius);
    padding: 1rem;
    box-shadow: 0 1px 3px rgba(0,0,0,0.1);
    margin-bottom: 0.75rem;
}
.contact-card-header {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.5rem;
    margin-bottom: 0.5rem;
}
.contact-card-name {
    font-weight: 600;
    font-size: 1rem;
}
.bulk-toggle { display: none; }

.contact-card-check {
    display: flex;
    align-items: center;
    flex-shrink: 0;
    padding-right: 0.25rem;
}
.contact-card-check input[type="checkbox"] {
    width: 1.2rem;
    height: 1.2rem;
    cursor: pointer;
}
.contact-card-actions {
    display: flex;
    gap: 0.25rem;
    flex-shrink: 0;
}
.contact-card-body {
    display: flex;
    flex-direction: column;
    gap: 0.3rem;
    font-size: 0.9rem;
    color: var(--gray-700);
}
.contact-card-body a {
    color: var(--primary);
    text-decoration: none;
}

/* === TABLE RESPONSIVE WRAPPER === */
.table-responsive {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    border-radius: var(--radius);
}

/* === RESPONSIVE === */
@media (max-width: 768px) {
    /* Navbar */
    .nav-hamburger { display: block; }
    .navbar {
        flex-wrap: wrap;
        height: auto;
        padding: 0.5rem 1rem;
        gap: 0;
    }
    .nav-links {
        display: none;
        flex-direction: column;
        width: 100%;
        gap: 0.125rem;
        padding: 0.5rem 0;
    }
    .nav-links.nav-open { display: flex; }
    .nav-links a { padding: 0.6rem 0.75rem; }
    .nav-separator { display: none; }

    /* Container */
    .container,
    .container.container-wide {
        padding: 1rem;
    }

    /* Page header */
    .page-header { flex-wrap: wrap; gap: 0.5rem; }
    .page-header h1 { font-size: 1.25rem; }

    /* Filters */
    .filter-form { flex-direction: column; }
    .search-input { min-width: unset; }
    .filter-form select,
    .filter-form .btn { width: 100%; }

    /* Forms */
    .form-row { grid-template-columns: 1fr; }
    .form-card { max-width: none; }
    .form-actions { flex-direction: column; }
    .form-actions .btn { width: 100%; text-align: center; }

    /* Bulk actions : masquées par défaut, toggle sur mobile */
    .bulk-toggle { display: block; width: 100%; margin-bottom: 0.5rem; }
    .bulk-actions { display: none; flex-direction: column; align-items: stretch; }
    .bulk-actions.bulk-actions-open { display: flex; }
    .bulk-liste-select { min-width: unset; width: 100%; }
    .bulk-actions .btn { width: 100%; text-align: center; }

    /* Table contacts → cards (uniquement la table contacts) */
    .data-table-contacts { display: none; }
    .mobile-cards { display: block; }

    /* Cards grid : 1 col */
    .cards-grid { grid-template-columns: 1fr; }

    /* Stats grid */
    .stats-grid { grid-template-columns: repeat(2, 1fr); }
}

/* === FOND IMAGE PAGE DE CONNEXION === */
.login-bg {
    position: fixed;
    inset: 0;
    z-index: 0;
    overflow: hidden;
}
.login-bg img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.login-bg-overlay {
    position: absolute;
    inset: 0;
}
.login-container { position: relative; z-index: 1; }
.login-container--over-image h1 {
    color: #fff;
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
}
.login-container--over-image > p a {
    color: #dbeafe;
    text-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
}

/* === PAGE PARAMÈTRES === */
.settings-page { max-width: 760px; }
.settings-section { margin-bottom: 1.5rem; }
.settings-section h2 { font-size: 1rem; font-weight: 600; margin: 0 0 0.25rem; }
.settings-hint { font-size: 0.8rem; color: var(--gray-500); margin: 0 0 1rem; }
.field-help { font-size: 0.8rem; color: var(--gray-500); margin: 0.25rem 0 0; }
.settings-foot {
    padding: 0.75rem 1rem;
    background: var(--gray-50);
    border-radius: var(--radius);
    border-left: 3px solid var(--primary);
    font-size: 0.8rem;
    color: var(--gray-500);
    margin-top: 1rem;
}
.settings-grid {
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 1.5rem;
    align-items: start;
}
@media (max-width: 640px) {
    .settings-grid { grid-template-columns: 1fr; }
}

/* Vignette aperçu fond de connexion */
.login-preview {
    aspect-ratio: 16 / 10;
    border-radius: var(--radius);
    border: 1px solid var(--gray-200);
    background: var(--gray-100);
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
}
.login-preview img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.login-preview-overlay { position: absolute; inset: 0; }
.login-preview-card {
    position: relative;
    width: 64%;
    height: 46%;
    border-radius: 4px;
    background: #fff;
    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.25);
}
.login-preview-empty {
    font-family: ui-monospace, monospace;
    font-size: 0.7rem;
    color: var(--gray-300);
    text-align: center;
    padding: 0 0.75rem;
}
.login-preview-label {
    font-size: 0.7rem;
    color: var(--gray-500);
    margin-top: 0.4rem;
    text-align: center;
}

/* === SIDEBAR PARAMÈTRES === */
.settings-layout {
    display: flex;
    gap: 1.5rem;
    align-items: flex-start;
}
.settings-sidebar {
    width: 220px;
    flex-shrink: 0;
    background: #fff;
    border-radius: var(--radius);
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
    padding: 0.5rem;
    position: sticky;
    top: 1.5rem;
    min-height: calc(100vh - 104px);
}
.settings-sidebar-label {
    padding: 0.5rem 0.85rem 0.6rem;
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    color: #9ca3af;
}
.settings-sidebar-nav {
    display: flex;
    flex-direction: column;
    gap: 0.125rem;
}
.settings-sidebar-nav a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    padding: 0.55rem 0.85rem;
    border-radius: var(--radius);
    font-size: 0.9rem;
    font-weight: 500;
    color: var(--gray-700);
    text-decoration: none;
}
.settings-sidebar-nav a:hover {
    background: var(--gray-100);
    text-decoration: none;
}
.settings-sidebar-nav a.active {
    background: #eff6ff;
    color: var(--primary);
    font-weight: 600;
}
.settings-warn-dot {
    width: 7px;
    height: 7px;
    border-radius: 99px;
    background: #f59e0b;
    flex-shrink: 0;
}
.settings-content {
    flex: 1;
    min-width: 0;
    max-width: 820px;
}
@media (max-width: 768px) {
    .settings-layout { flex-direction: column; }
    .settings-sidebar {
        width: 100%;
        position: static;
        min-height: 0;
        padding: 0.25rem;
    }
    .settings-sidebar-label { display: none; }
    .settings-sidebar-nav {
        flex-direction: row;
        overflow-x: auto;
        gap: 0.25rem;
    }
    .settings-sidebar-nav a { white-space: nowrap; }
    .settings-content { max-width: none; }
}

/* === CORBEILLE === */
.trash-toolbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 0.75rem;
    gap: 0.5rem;
    flex-wrap: wrap;
}
.trash-actions { display: flex; gap: 0.5rem; }
.empty-state-text { color: var(--gray-500); font-size: 0.9rem; font-style: italic; }

/* === FORMULAIRES DE PRÉFÉRENCES === */
.pref-liste-row { border: 1px solid var(--gray-200); border-radius: var(--radius); padding: 0.75rem 1rem; margin-bottom: 0.5rem; }
.pref-liste-check { margin-bottom: 0.5rem; }
.pref-count { font-size: 0.8rem; color: var(--gray-500); font-weight: normal; margin-left: 0.25rem; }
.badge { display: inline-block; font-size: 0.75rem; padding: 0.2rem 0.6rem; border-radius: 999px; font-weight: 600; }
.badge-green { background: #dcfce7; color: #166534; }
.badge-gray  { background: var(--gray-100); color: var(--gray-500); }
.badge-pending { background: var(--warning-bg); color: var(--warning-text); }
.badge-danger  { background: var(--danger-bg); color: var(--danger-dark); }
.badge-bounce  { background: #fde68a; color: #92400e; }
.badge-unsub   { background: #dbeafe; color: #1e40af; }

/* Historique des campagnes (mailing) — sorti du <style> inline du template (discipline v2) */
.campaign-subject { max-width: 300px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.subject-toggle { cursor: pointer; color: var(--primary); }
.subject-toggle:hover { color: var(--primary-dark); }
.content-row td { padding: 0; background: var(--gray-50); border-top: none; }
.body-text { margin: 0; padding: 1rem; white-space: pre-wrap; font-size: 0.875rem; max-height: 400px; overflow-y: auto; }
.actions-cell { white-space: nowrap; }
.actions-cell .btn { margin-right: 0.25rem; }
.actions-cell .icon-btn { margin-right: 0.2rem; vertical-align: middle; }
.stats-link { display: inline-block; text-decoration: none; color: inherit; cursor: pointer; }
.stats-link:hover { opacity: 0.75; }
.smtp-result { margin-left: 0.6rem; font-size: 0.9rem; font-weight: 600; }
.smtp-result.is-ok { color: #047857; }
.smtp-result.is-err { color: #b91c1c; }
.submissions-help { margin-top: 0.5rem; }
.submissions-help summary { cursor: pointer; color: var(--primary); font-size: 0.85rem; }
.submissions-help ul { margin: 0.5rem 0 0; padding-left: 1.1rem; font-size: 0.88rem; color: var(--gray-600, #4b5563); }
.submissions-archived { margin-top: 1.75rem; }
.sub-attach { display: inline-block; max-width: 170px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: middle; }
.preview-attachments { padding: 0.6rem 0.75rem 0; display: flex; flex-wrap: wrap; gap: 0.35rem; }
.tag-bounce  { background: #fef3c7; color: #92400e; border-color: #fde68a; }
.table-actions { display: flex; gap: 0.4rem; white-space: nowrap; }

/* === FICHE CONTACT (refonte v2, pilotée par le registre) === */
.fiche-header { display: flex; align-items: center; gap: 1rem; margin-bottom: 1.25rem; flex-wrap: wrap; }
.fiche-avatar {
    width: 42px; height: 42px; border-radius: var(--radius-pill);
    background: var(--avatar-bg); color: var(--avatar-text);
    display: flex; align-items: center; justify-content: center;
    font-weight: 700; font-size: 0.95rem; flex-shrink: 0;
}
.fiche-title { display: flex; align-items: center; gap: 0.6rem; min-width: 0; }
.fiche-title h1 { font-size: 1.3rem; font-weight: 700; color: var(--text); }
.fiche-status {
    font-size: 0.75rem; font-weight: 600; padding: 0.15rem 0.6rem; border-radius: var(--radius-pill);
    background: var(--success-bg); color: var(--success-text); border: 1px solid var(--success-border);
}
.fiche-status.is-unsub { background: var(--danger-bg); color: var(--danger-dark); border-color: var(--danger-border); }
.fiche-actions { margin-left: auto; display: flex; gap: 0.5rem; white-space: nowrap; }
.fiche-nav { display: flex; gap: 0.4rem; }
.fiche-nav[hidden] { display: none; }
/* Mode « vision » (lecture seule) de la fiche */
.field-value { padding: 0.45rem 0.1rem; min-height: 1.2rem; color: var(--text); font-size: 0.95rem; border-bottom: 1px solid var(--border); }
.pill-row { display: flex; flex-wrap: wrap; gap: 0.4rem; }

.fiche-form { display: flex; flex-direction: column; gap: 1.1rem; max-width: 920px; }
.fiche-card {
    background: var(--bg-surface); border: 1px solid var(--border);
    border-radius: var(--radius-lg); box-shadow: var(--shadow-card); padding: 1.25rem 1.4rem;
}
.fiche-card h3 { font-size: 0.95rem; font-weight: 700; color: var(--text); margin-bottom: 1rem; }
.fiche-card--muted { background: var(--bg-muted); }

.field-grid { display: grid; grid-template-columns: repeat(6, 1fr); gap: 0.9rem 1rem; }
.field { display: flex; flex-direction: column; gap: 0.3rem; }
.field--full  { grid-column: span 6; }
.field--half  { grid-column: span 3; }
.field--third { grid-column: span 2; }
.field label { font-size: 0.82rem; font-weight: 600; color: var(--text-secondary); }
.field .req { color: var(--danger); }
.field input, .field select, .field textarea {
    width: 100%; padding: 0.5rem 0.65rem; border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm); font-size: 0.9rem; font-family: inherit;
    background: var(--bg-surface); color: var(--text);
}
.field input:focus, .field select:focus, .field textarea:focus {
    outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(63,86,204,0.12);
}
/* Champ obligatoire : fond crème pour le signaler d'un coup d'œil, avant même de valider. */
.field input:required, .field select:required, .field textarea:required {
    background: var(--warning-bg); border-color: var(--warning-border);
}
.field .sysinfo { background: var(--bg-muted); color: var(--text-muted); font-family: monospace; font-size: 0.8rem; }
.field .hint { margin-top: 0; }

/* Case à cocher : coche à gauche, libellé à droite */
.field--check { justify-content: center; }
.checkbox-inline { display: flex; align-items: center; gap: 0.5rem; font-size: 0.9rem; font-weight: 500; color: var(--text); cursor: pointer; }
.checkbox-inline input { width: auto; }

/* Champ nombre : pas de flèches spinner (fioriture inutile) */
.field input[type=number] { -moz-appearance: textfield; appearance: textfield; }
.field input[type=number]::-webkit-outer-spin-button,
.field input[type=number]::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }

.unsub-banner {
    background: var(--danger-bg); border: 1px solid var(--danger-border); color: var(--danger-dark);
    padding: 0.7rem 1rem; border-radius: var(--radius); display: flex; align-items: center;
    justify-content: space-between; gap: 1rem; margin-bottom: 1rem; max-width: 920px;
}
.unsub-banner--warn { background: var(--warning-bg); border-color: var(--warning-border); color: var(--warning-text); }
.unsub-status { font-weight: 600; }

@media (max-width: 720px) {
    .field-grid { grid-template-columns: 1fr; }
    .field--full, .field--half, .field--third { grid-column: auto; }
}

/* === MODALE (composant réutilisable) === */
.modal-overlay {
    display: none; position: fixed; inset: 0; z-index: 100;
    background: rgba(28,26,23,0.45);
    align-items: flex-start; justify-content: center;
    padding: 3rem 1rem; overflow-y: auto;
}
.modal-overlay.open { display: flex; }
.modal {
    background: var(--bg-surface); border-radius: var(--radius-lg);
    box-shadow: var(--shadow-modal); width: 100%; max-width: 560px;
    max-height: calc(100vh - 6rem); display: flex; flex-direction: column;
}
.modal-header {
    display: flex; align-items: center; justify-content: space-between;
    padding: 1.1rem 1.4rem; border-bottom: 1px solid var(--border);
}
.modal-header h2 { font-size: 1.1rem; font-weight: 700; color: var(--text); }
.modal-close { background: none; border: none; font-size: 1.5rem; line-height: 1; cursor: pointer; color: var(--text-muted); padding: 0 0.25rem; }
.modal-close:hover { color: var(--text); }
.modal-body { padding: 1.3rem 1.4rem; overflow-y: auto; }
.modal-body .form-group { margin-bottom: 1rem; }
.field-info-box {
    background: var(--primary-tint2); border: 1px solid var(--primary-border);
    border-radius: var(--radius); padding: 0.85rem 1rem; margin-bottom: 1rem;
}
.field-info-box label { color: var(--primary-text); }

/* === LISTE UTILISATEURS === */
.user-name-cell { display: flex; align-items: center; gap: 0.6rem; }
.avatar-sm {
    width: 34px; height: 34px; border-radius: var(--radius-pill);
    background: var(--avatar-bg); color: var(--avatar-text);
    display: flex; align-items: center; justify-content: center;
    font-weight: 700; font-size: 0.78rem; flex-shrink: 0;
}
.status-dot { display: inline-flex; align-items: center; gap: 0.4rem; font-size: 0.85rem; }
.status-dot::before { content: ''; width: 8px; height: 8px; border-radius: 50%; background: var(--success); }
.status-dot.is-off { color: var(--text-muted); }
.status-dot.is-off::before { background: var(--text-faint); }
.status-dot.is-danger { color: var(--danger-dark); }
.status-dot.is-danger::before { background: var(--danger); }
.status-dot.is-warn { color: var(--warning-text); }
.status-dot.is-warn::before { background: var(--warning); }
.role-pill {
    display: inline-block; padding: 0.15rem 0.6rem; border-radius: var(--radius-pill);
    font-size: 0.75rem; font-weight: 600;
    background: var(--bg-muted); color: var(--text-secondary); border: 1px solid var(--border);
}
.role-pill.is-admin { background: var(--primary-tint); color: var(--primary-text); border-color: var(--primary-border); }

/* Ligne de tableau désactivée + texte discret (réutilisés : users, champs perso) */
.cf-inactive { opacity: 0.55; }
.text-muted { color: var(--text-muted); }

/* ===== Composer mailing (refonte v2) ===== */
.composer-head { display: flex; align-items: flex-start; justify-content: space-between;
    gap: 1rem; flex-wrap: wrap; margin-bottom: 1.25rem; }
.composer-head h1 { margin: 0; }
.composer-head .hint { margin-top: 0.2rem; }

.composer-grid {
    display: grid; grid-template-columns: 1fr 320px; gap: 1.25rem; align-items: start;
    grid-template-areas: "editor rail" "options rail";
}
.composer-editor { grid-area: editor; min-width: 0; }
/* Le rail empile plusieurs blocs (cartes, boutons, aide) : espacement homogène
   conforme à la charte — sans ça, Récapitulatif / Envoyer un test / CTA se touchent. */
.composer-rail { grid-area: rail; position: sticky; top: 1rem;
    display: flex; flex-direction: column; gap: 0.85rem; }
.composer-options { grid-area: options; display: flex; flex-direction: column; }
.composer-options .opt-section { padding: 0.9rem 0; }
.composer-options .opt-section:first-child { padding-top: 0; }
.composer-options .opt-section:last-child { padding-bottom: 0; }
.composer-options .opt-section + .opt-section { border-top: 1px solid var(--divider); }

.card-title { font-weight: 700; font-size: 0.95rem; margin-bottom: 0.75rem; }

/* Aide dépliable sur les variables (sous l'éditeur) */
.var-help { margin-top: 0.35rem; font-size: 0.82rem; color: var(--text-secondary); }
.var-help summary { cursor: pointer; color: var(--primary); width: fit-content; list-style: none; }
.var-help summary::-webkit-details-marker { display: none; }
.var-help[open] summary { margin-bottom: 0.4rem; font-weight: 600; }
.var-help p { margin: 0.3rem 0; }
.var-help code { font-size: 0.8rem; background: var(--bg-muted); padding: 0.05rem 0.3rem; border-radius: 4px; }

.composer-editor textarea { width: 100%; padding: 0.65rem; border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm); font-family: inherit; font-size: 0.9rem; resize: vertical; }
.composer-editor .tox-tinymce { border-radius: var(--radius-sm); }

/* Pied de mail : pastilles à cocher alignées */
.footer-options { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem; }
.footer-options-label { font-weight: 700; font-size: 0.95rem; margin-right: 0.25rem; }
.pill-toggle {
    display: inline-flex; align-items: center; gap: 0.4rem; cursor: pointer;
    padding: 0.35rem 0.7rem; border: 1px solid var(--border-strong);
    border-radius: var(--radius-pill); font-size: 0.85rem; background: var(--bg-surface);
}
.pill-toggle.is-disabled { opacity: 0.5; cursor: not-allowed; }

.signer-row { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
.signer-card .signer-preview {
    padding: 0.3rem 0.6rem; background: var(--bg-muted); border-radius: var(--radius-sm);
    font-size: 0.85rem; color: var(--text-secondary); transition: opacity 0.15s;
}

/* Pièces jointes : chips avec retrait */
.attach-list { list-style: none; margin: 0.5rem 0 0; padding: 0; display: flex; flex-wrap: wrap; gap: 0.5rem; }
.attach-chip { display: inline-flex; align-items: center; gap: 0.4rem; padding: 0.3rem 0.35rem 0.3rem 0.65rem;
    background: var(--bg-muted); border: 1px solid var(--border); border-radius: var(--radius-pill); font-size: 0.85rem; }
.attach-remove { border: none; background: none; cursor: pointer; font-size: 1.05rem; line-height: 1;
    color: var(--text-muted); padding: 0 0.2rem; }
.attach-remove:hover { color: var(--danger); }
.attach-over { color: var(--danger); font-weight: 600; }

/* Bouton stylé en lien (ex. « Vider le brouillon ») */
.linklike { background: none; border: none; color: var(--primary); cursor: pointer; padding: 0; font: inherit; }
.linklike:hover { color: var(--primary-dark); }

/* Rail destinataires */
.rail-card .rail-actions { display: flex; flex-direction: column; gap: 0.5rem; margin-top: 0.75rem; }
.rail-card .rail-actions .btn { width: 100%; }
/* Actions SOUS la carte Destinataires (mockup CLD) */
.rail-actions-outer { display: flex; flex-direction: column; gap: 0.5rem; }
.rail-actions-outer .btn { width: 100%; }

/* Rail Destinataires : multi-listes + dédoublonnage */
.rail-head { display: flex; align-items: baseline; justify-content: space-between; }
.rail-listcount { font-size: 0.78rem; color: var(--text-muted); }
.rail-search { width: 100%; padding: 0.4rem 0.55rem; margin: 0.5rem 0; border: 1px solid var(--border-strong);
    border-radius: var(--radius-sm); font-size: 0.85rem; font-family: inherit; }
.rail-lists { max-height: 240px; overflow-y: auto; display: flex; flex-direction: column; gap: 0.1rem;
    border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 0.25rem; }
.rail-list-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.35rem 0.4rem;
    border-radius: var(--radius-sm); cursor: pointer; font-size: 0.88rem; }
.rail-list-item:hover { background: var(--bg-muted); }
.rail-list-item input { flex-shrink: 0; }
.rail-list-nom { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.rail-list-count { font-size: 0.78rem; color: var(--text-muted); }
.rail-total { display: flex; align-items: baseline; justify-content: space-between; margin-top: 0.6rem;
    padding-top: 0.5rem; border-top: 1px solid var(--divider); font-size: 0.85rem; color: var(--text-secondary); }
.rail-total strong { color: var(--primary); font-size: 0.95rem; }
/* Bouton d'action principal du parcours : emphase IDENTIQUE partout.
   inline-flex + min-height neutralisent les écarts <button>/<a> et les retours
   à la ligne (on mesurait 48 / 54 / 67 px sur les 3 écrans avant ce correctif). */
.btn-cta {
    display: inline-flex; align-items: center; justify-content: center; gap: 0.4rem;
    min-height: 48px; padding: 0.6rem 1.4rem;
    font-size: 1.02rem; font-weight: 700; line-height: 1.2; text-align: center;
    white-space: nowrap;   /* un libellé long élargit le bouton, il ne le rallonge pas */
}
@media (max-width: 520px) {
    .btn-cta { white-space: normal; }   /* sur mobile étroit, on autorise le retour à la ligne */
}

/* Prévisualisation */
.preview-panel { margin-top: 1.25rem; }
.preview-header { display: flex; align-items: center; justify-content: space-between; margin-bottom: 0.5rem; }
.preview-header h3 { margin: 0; }
.preview-nav { display: flex; align-items: center; gap: 0.5rem; }
#preview-counter { font-size: 0.85rem; color: var(--text-muted); min-width: 4rem; text-align: center; }
.preview-subject { font-weight: 700; padding: 0.5rem 0.75rem; background: var(--bg-muted);
    border-radius: var(--radius-sm); margin: 0.5rem 0; }
.preview-body { padding: 0.75rem; background: var(--bg-app); border: 1px solid var(--border);
    border-radius: var(--radius-sm); min-height: 200px; }
#preview-text { white-space: pre-wrap; }

@media (max-width: 900px) {
    .composer-grid { grid-template-columns: 1fr; grid-template-areas: "editor" "rail" "options"; }
    .composer-rail { position: static; }
}

/* ===== Écran Listes (v2) ===== */
.stat-tiles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.75rem; margin-bottom: 1rem; }
.stat-tile { background: var(--bg-surface); border: 1px solid var(--border); border-radius: var(--radius-lg);
    padding: 0.7rem 0.9rem; box-shadow: var(--shadow-card); }
.stat-num { font-size: 1.45rem; font-weight: 800; line-height: 1; color: var(--text); }
.stat-label { margin-top: 0.2rem; font-size: 0.78rem; color: var(--text-secondary); }

/* Clé de tri invisible (le tri global lit textContent) — ex. dates */
.sortkey { display: none; }

.listes-table td { vertical-align: middle; }
.liste-ident { display: flex; align-items: flex-start; gap: 0.6rem; }
.liste-dot { width: 10px; height: 10px; border-radius: 50%; flex-shrink: 0; margin-top: 0.35rem; }
.liste-ident-text strong { font-size: 0.95rem; }
.liste-desc { font-size: 0.82rem; color: var(--text-muted); max-width: 42ch;
    overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.listes-note { margin-top: 0.75rem; }

.icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px;
    border: 1px solid var(--border-strong); border-radius: var(--radius-sm); background: var(--bg-surface);
    color: var(--text-secondary); cursor: pointer; font-size: 0.95rem; text-decoration: none; }
.icon-btn:hover { background: var(--bg-muted); color: var(--text); }
.icon-btn .ico { width: 18px; height: 18px; display: block; }
.icon-btn.icon-danger:hover { color: var(--danger); border-color: var(--danger-border); }

.empty-state { text-align: center; padding: 2.5rem 1rem; color: var(--text-secondary); }
.empty-state p { margin-bottom: 0.9rem; }

/* Sélecteur de couleur de pastille */
.color-swatches { display: flex; flex-wrap: wrap; gap: 0.5rem; }
.swatch { width: 26px; height: 26px; border-radius: 50%; cursor: pointer; position: relative;
    background: var(--sw, var(--bg-muted)); box-shadow: inset 0 0 0 1px rgba(0,0,0,0.12); }
.swatch input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.swatch:has(input:checked) { box-shadow: 0 0 0 2px var(--bg-surface), 0 0 0 4px var(--text); }
.swatch-auto { background: repeating-linear-gradient(45deg, var(--bg-muted), var(--bg-muted) 4px, var(--border) 4px, var(--border) 8px); }

/* ===== Étape Envoi (mailing_queue) ===== */
.send-banner { display: flex; align-items: center; gap: 0.8rem; padding: 0.9rem 1.1rem;
    border-radius: var(--radius-lg); border: 1px solid; margin-bottom: 1.1rem; }
.send-banner strong { font-size: 0.98rem; }
.send-banner-sub { font-size: 0.85rem; opacity: 0.85; }
.send-banner-ico { display: inline-flex; align-items: center; justify-content: center;
    width: 34px; height: 34px; border-radius: 50%; font-weight: 700; flex-shrink: 0; color: #fff; }
.send-banner.is-ok { background: var(--success-bg); border-color: var(--success-border); color: var(--success-text); }
.send-banner.is-ok .send-banner-ico { background: var(--success); }
.send-banner.is-warn { background: var(--warning-bg); border-color: var(--warning-border); color: var(--warning-text); }
.send-banner.is-warn .send-banner-ico { background: var(--warning); }
.send-banner.is-info { background: var(--primary-tint); border-color: var(--primary-border); color: var(--primary-text); }
.send-banner.is-info .send-banner-ico { background: var(--primary); }

.progress-card { margin-bottom: 1.1rem; }
.progress-head { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 0.6rem; }
.progress-pct { font-size: 1.1rem; color: var(--text-secondary); }
.progress-pct.is-done { color: var(--success); }
.progress-bar { height: 10px; border-radius: 99px; background: var(--bg-muted);
    border: 1px solid var(--border); overflow: hidden; }
.progress-fill { height: 100%; background: var(--success); border-radius: 99px; transition: width 0.4s ease; }
.progress-fill.is-err { background: var(--warning); }
.progress-tiles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin-top: 1.1rem; }
.progress-tiles .stat-num { font-size: 1.7rem; font-weight: 800; line-height: 1; }
.progress-tiles .stat-num.text-danger { color: var(--danger); }
.progress-tiles .stat-label { margin-top: 0.25rem; font-size: 0.82rem; color: var(--text-secondary); }

.send-actions { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; margin-bottom: 1.25rem; }
.send-actions .hint { margin: 0; }

.send-detail > summary { cursor: pointer; font-weight: 600; color: var(--text-secondary); font-size: 0.9rem; }
.send-detail[open] > summary { margin-bottom: 0.8rem; }
.detail-recap { margin-bottom: 1rem; font-size: 0.9rem; }
.detail-body { background: var(--bg-muted); padding: 0.75rem; border-radius: var(--radius-sm);
    border: 1px solid var(--border); white-space: pre-wrap; font-family: inherit; }

/* Overlay « Envoi en cours » */
#sending-overlay { display: none; position: fixed; inset: 0; background: rgba(28,26,23,0.55);
    z-index: 9999; align-items: center; justify-content: center; }
.sending-content { background: var(--bg-surface); padding: 2.5rem 3rem; border-radius: var(--radius-lg);
    text-align: center; box-shadow: var(--shadow-modal); }
.sending-content p { margin: 0.25rem 0; }
.spinner { width: 44px; height: 44px; border: 4px solid var(--bg-muted); border-top-color: var(--primary);
    border-radius: 50%; animation: spin 0.8s linear infinite; margin: 0 auto 1.25rem; }
@keyframes spin { to { transform: rotate(360deg); } }
.text-danger { color: var(--danger); }

/* Carte « Brouillons » en tête de l'historique */
.drafts-card { margin-bottom: 1.25rem; }
.drafts-card .card-title { margin-bottom: 0.25rem; }

/* Modale de confirmation d'envoi (centrée, icône + avertissement) */
.modal-confirm { max-width: 460px; text-align: center; }
.modal-confirm h2 { margin: 0.6rem 0 0.5rem; }
.modal-confirm p { color: var(--text-secondary); }
.confirm-icon { width: 52px; height: 52px; margin: 0 auto; display: flex; align-items: center;
    justify-content: center; border-radius: 50%; background: var(--success-bg); color: var(--success); }
.confirm-icon .ico { width: 26px; height: 26px; }
.confirm-warn { font-size: 0.85rem; color: var(--warning-text); background: var(--warning-bg);
    border: 1px solid var(--warning-border); border-radius: var(--radius-sm); padding: 0.5rem 0.75rem; margin-top: 0.75rem !important; }
.confirm-actions { justify-content: center; margin-top: 1.1rem; }

/* ===== Barre d'étapes du parcours d'envoi ===== */
.stepper { display: flex; align-items: center; list-style: none; margin: 0; padding: 0; flex-wrap: wrap; }
.step { display: flex; align-items: center; }
.step + .step::before { content: ''; width: 26px; height: 1px; background: var(--border-strong);
    margin: 0 0.5rem; flex-shrink: 0; }
.step-body { display: inline-flex; align-items: center; gap: 0.4rem; text-decoration: none; }
.step-num { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px;
    border-radius: 50%; background: var(--bg-muted); color: var(--text-muted);
    font-size: 0.74rem; font-weight: 700; flex-shrink: 0; }
.step-label { font-size: 0.85rem; color: var(--text-muted); white-space: nowrap; }
.step.is-done .step-num { background: var(--primary-tint); color: var(--primary-text); }
.step.is-done .step-label { color: var(--text-secondary); }
.step.is-current .step-num { background: var(--primary); color: #fff; }
.step.is-current .step-label { color: var(--text); font-weight: 700; }
a.step-body:hover .step-label { color: var(--text); }
/* Bandeau d'en-tête du parcours : PLEINE LARGEUR à droite de la sidebar, donc
   toujours au même endroit d'un écran à l'autre (un rail de process ne bouge pas). */
.page-band { display: flex; align-items: center; justify-content: space-between; gap: 1.5rem;
    padding: 0.9rem 1.75rem; background: var(--bg-surface);
    border-bottom: 1px solid var(--border); }
.page-band-title h1 { margin: 0; font-size: 1.35rem; line-height: 1.2; }
/* Nom du mailing renommable en place */
.band-name { display: flex; align-items: center; gap: 0.45rem; }
.band-edit { border: none; background: none; cursor: pointer; padding: 0.1rem 0.25rem;
    color: var(--text-faint); font-size: 0.95rem; line-height: 1; border-radius: var(--radius-sm); }
.band-edit:hover { color: var(--primary); background: var(--bg-muted); }
.band-rename { display: flex; align-items: center; gap: 0.4rem; }
.band-rename input[type="text"] { padding: 0.3rem 0.5rem; font-size: 1rem; min-width: 18rem;
    border: 1px solid var(--border-strong); border-radius: var(--radius-sm); font-family: inherit; }
.page-band-sub { margin: 0.15rem 0 0; font-size: 0.82rem; color: var(--text-muted); }

@media (max-width: 860px) {
    .page-band { padding: 0.75rem 1rem; gap: 0.75rem; }
    .page-band-title h1 { font-size: 1.1rem; }
}

/* Ligne « retour à l'étape précédente » + consigne, en haut du contenu */
.step-back-row { display: flex; align-items: center; gap: 1rem; flex-wrap: wrap; margin-bottom: 1rem; }

@media (max-width: 860px) {
    .step-label { display: none; }
    .step + .step::before { width: 14px; margin: 0 0.3rem; }
}

/* ===== Étape Aperçu (mailing_apercu) ===== */
.apercu-grid { grid-template-areas: "editor rail"; }
.apercu-main { grid-area: editor; min-width: 0; display: flex; flex-direction: column; gap: 0.75rem; }

.apercu-nav { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; }
.apercu-contact { display: flex; align-items: center; gap: 0.6rem; flex: 1; min-width: 0; }
.icon-btn.is-disabled { opacity: 0.35; pointer-events: none; }
.apercu-hl { font-size: 0.88rem; }

.mail-preview { padding: 0; overflow: hidden; }
.mail-head { padding: 0.9rem 1rem; border-bottom: 1px solid var(--divider); background: var(--bg-app); }
.mail-objet-k { font-size: 0.72rem; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); }
.mail-objet { font-size: 1.02rem; font-weight: 700; margin-top: 0.1rem; }
.mail-meta { font-size: 0.8rem; color: var(--text-muted); margin-top: 0.3rem; }
#mail-frame { width: 100%; border: 0; min-height: 320px; display: block; }
.mail-text { white-space: pre-wrap; padding: 1rem; margin: 0; font-family: inherit; font-size: 0.9rem; }
.mail-preview .hint { padding: 0 1rem 0.8rem; }

.recap-line { display: flex; align-items: baseline; justify-content: space-between; gap: 0.75rem;
    padding: 0.35rem 0; font-size: 0.85rem; color: var(--text-secondary); }
.recap-line + .recap-line { border-top: 1px solid var(--divider); }
.recap-line strong { color: var(--text); text-align: right; }
.apercu-cta { display: block; text-align: center; }

/* ===== Étape Destinataires (mailing_confirm) ===== */
.recap-card { display: flex; flex-direction: column; gap: 0.35rem; margin-bottom: 1rem; font-size: 0.9rem; }
.recap-k { display: inline-block; min-width: 6.5rem; font-weight: 600; color: var(--text-secondary); }

.recip-head { display: flex; align-items: center; justify-content: space-between;
    padding-bottom: 0.6rem; border-bottom: 1px solid var(--divider); }
.recip-count { font-size: 0.85rem; font-weight: 600; color: var(--primary); }

.recip-table td { vertical-align: middle; }
.recip-ident { display: flex; align-items: center; gap: 0.6rem; }
.recip-ident-text strong { font-size: 0.92rem; }
.recip-mail { font-size: 0.82rem; color: var(--text-muted); }
.recip-tags { text-align: right; }

.recip-foot { display: flex; align-items: center; justify-content: space-between;
    padding-top: 0.7rem; border-top: 1px solid var(--divider); font-size: 0.85rem; }
.pager { display: flex; align-items: center; gap: 0.25rem; }
.pager-btn { min-width: 30px; height: 30px; padding: 0 0.45rem; cursor: pointer;
    border: 1px solid var(--border-strong); border-radius: var(--radius-sm);
    background: var(--bg-surface); color: var(--text-secondary); font-size: 0.85rem; }
.pager-btn:hover:not(:disabled):not(.is-current) { background: var(--bg-muted); color: var(--text); }
.pager-btn.is-current { background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 700; }
.pager-btn:disabled { opacity: 0.4; cursor: default; }
.pager-gap { padding: 0 0.15rem; color: var(--text-muted); }

/* Section « Listes archivées » (repli) */
.archived-section { margin-top: 1.25rem; }
.archived-section > summary { cursor: pointer; color: var(--text-secondary); font-size: 0.9rem; font-weight: 600; width: fit-content; }
.archived-section[open] > summary { margin-bottom: 0.3rem; }

@media (max-width: 720px) {
    .stat-tiles { grid-template-columns: 1fr; }
    .liste-desc { max-width: 22ch; }
}

/* ==================== Écran Contacts (v2 — 01a/01b) ==================== */
/* En-tête : titre + sous-titre + actions */
.page-header-title h1 { margin: 0; }
.page-subtitle { margin: 0.15rem 0 0; color: var(--text-muted); font-size: 0.9rem; }
.page-header-actions { display: flex; gap: 0.5rem; align-items: center; }

/* Barre d'outils : recherche + filtres en pills + lien corbeille */
.contacts-toolbar { display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap; margin-bottom: 1rem; }
.search-wrap { position: relative; flex: 1 1 280px; max-width: 360px; }
.search-wrap .search-ico { position: absolute; left: 0.7rem; top: 50%; transform: translateY(-50%); color: var(--text-faint); pointer-events: none; }
.contacts-toolbar .search-input { width: 100%; padding-left: 1.9rem; }
.filter-pill {
    width: auto; flex: 0 0 auto; max-width: 15rem;
    padding: 0.5rem 0.7rem; border: 1px solid var(--border-strong); border-radius: var(--radius-pill);
    background: var(--bg-surface); color: var(--text-secondary); font-size: 0.88rem; cursor: pointer;
}
.filter-pill:hover { border-color: var(--primary-border); }
.toolbar-trash { margin-left: auto; color: var(--text-muted); font-size: 0.9rem; }
.toolbar-trash:hover { color: var(--danger); }

/* Carte : le tableau est à fleur, le bandeau/pied ont leur propre marge */
.contacts-card { padding: 0; overflow: hidden; }
.contacts-card .data-table { margin: 0; }
.contacts-table th, .contacts-table td { padding-left: 1rem; padding-right: 1rem; }
.contacts-table td.text-muted { white-space: nowrap; }  /* téléphone sur une ligne */
/* Case à cocher + point de statut un peu plus grands (retour #19) */
.contacts-table input[type="checkbox"],
.contact-card-check input[type="checkbox"] { width: 17px; height: 17px; accent-color: var(--primary); cursor: pointer; }
.contacts-table .status-dot::before { width: 11px; height: 11px; }

/* Bandeau de sélection (01b) */
.select-bar {
    display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; flex-wrap: wrap;
    padding: 0.7rem 1rem; background: var(--primary-tint); border-bottom: 1px solid var(--primary-border);
}
.select-bar[hidden] { display: none; }  /* l'attribut hidden doit l'emporter sur display:flex */
.select-bar-count { color: var(--primary-text); font-size: 0.92rem; }
.select-bar-actions { display: flex; gap: 0.4rem; flex-wrap: wrap; }
.btn-danger-outline {
    background: transparent; color: var(--danger); border: 1px solid var(--danger-border);
}
.btn-danger-outline:hover { background: var(--danger-bg); color: var(--danger-dark); }

/* Lignes cliquables + tri */
.contacts-table th.th-sort { cursor: pointer; user-select: none; }
.contacts-table th.th-sort:hover { background: rgba(0,0,0,0.04); }
.contact-row { cursor: pointer; }
.contact-row:hover { background: var(--bg-muted); }
.contact-row.is-open { background: var(--primary-tint2); }
.contacts-table .col-edit { width: 44px; text-align: center; }
.icon-edit { display: inline-flex; color: var(--text-muted); }
.icon-edit svg { width: 18px; height: 18px; }
.icon-edit:hover { color: var(--primary); }

/* Résumé inline (accordéon) */
.row-summary > td { background: var(--primary-tint2); border-top: 0; padding: 0.25rem 1rem 0.9rem 1rem; }
.summary-grid {
    display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 0.35rem 1.2rem;
    font-size: 0.86rem;
}
.summary-grid .sk { display: inline-block; min-width: 92px; color: var(--text-muted); font-size: 0.76rem; text-transform: uppercase; letter-spacing: 0.02em; margin-right: 0.4rem; }
.summary-notes { grid-column: 1 / -1; white-space: pre-wrap; }
.summary-actions { margin-top: 0.7rem; }

/* Bouton « inactif » qui doit AFFICHER son tooltip : un vrai <button disabled> ne reçoit
   aucun événement de survol (spec HTML) → on garde le bouton ACTIF mais stylé comme inactif. */
.btn.is-muted { opacity: 0.55; cursor: not-allowed; }

/* Affichage étendu des cartes mobiles */
.contact-card { cursor: pointer; }
.card-summary { margin-top: 0.6rem; padding-top: 0.6rem; border-top: 1px solid var(--border); cursor: default; }
.card-summary .summary-actions { display: flex; gap: 0.4rem; flex-wrap: wrap; }
.contact-card.is-open { box-shadow: 0 0 0 2px var(--primary-border) inset; }

/* Pied : compteur + pagination */
.contacts-foot { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.7rem 1rem; border-top: 1px solid var(--border); }

/* Modales : sélecteur de liste + export */
.modal-liste-select { width: 100%; margin: 0.5rem 0 1rem; padding: 0.5rem; }
.export-choices { display: flex; gap: 0.5rem; margin: 0.75rem 0; flex-wrap: wrap; }

@media (max-width: 720px) {
    .page-header-actions { width: 100%; }
    .contacts-toolbar .search-wrap { max-width: none; }
    .toolbar-trash { margin-left: 0; }
    .select-bar-actions .btn { flex: 1 1 auto; }
    /* Mobile = cartes : le cadre du tableau devient transparent (seul le bandeau de
       sélection, qui a son propre fond, reste visible quand ≥1 coché) ; pas de pagination. */
    .contacts-card { border: none; background: none; box-shadow: none; }
    .contacts-foot { display: none; }
}
