/* =====================================================================
   Qeewee — habillage (build-free, surcharge des composants Filament).
   Étape 1 : arrondis + ombres douces. Étape 2 : classes qw-* pour les
   pages custom. Étape 3 : fond teinté + cartes détachées + underline.
   Étape 4 (2026-06-28) : MODE SOMBRE via variables sémantiques.

   Principe du mode sombre : toutes les couleurs « de surface » passent par
   des variables (--qw-*) qui s'inversent sous .dark (classe posée par
   Filament sur <html>). Les styles inline des pages custom utilisent ces
   mêmes var(), donc ils basculent aussi (l'inline ne peut pas être
   surchargé par .dark, mais var() résout la bonne valeur selon le thème).
   ===================================================================== */
:root {
    --qw-radius-lg: 1rem;
    --qw-radius-md: 0.75rem;

    /* Surfaces / texte / bordures — basculent en sombre (voir .dark) */
    --qw-page:        #f5f4ff; /* fond de page (lavande très clair)      */
    --qw-surface:     #ffffff; /* cartes, sidebar, widgets               */
    --qw-surface-2:   #f9fafb; /* fonds secondaires (en-têtes table…)    */
    --qw-surface-3:   #f3f4f6; /* puces / badges neutres                 */
    --qw-text:        #1f2433; /* texte principal                        */
    --qw-heading:     #1f2433; /* titres                                 */
    --qw-muted:       #6b7280; /* texte secondaire                       */
    --qw-faint:       #9ca3af; /* texte très discret                     */
    --qw-line:        #e5e7eb; /* bordures                               */
    --qw-line-soft:   #f3f4f6; /* bordures discrètes (lignes de tableau) */
    --qw-card-border: transparent; /* bord de carte (visible en sombre)  */
    --qw-label:       #6366f1; /* libellés de formulaire (indigo)        */
    --qw-input-line:  #ddd9f5; /* trait sous les inputs                  */
    --qw-accent-bg:   #eef2ff; /* puce accent indigo (fond)              */
    --qw-accent-fg:   #4338ca; /* puce accent indigo (texte)             */
    --qw-row-today:   #fffbeb; /* surlignage ligne « aujourd'hui »       */

    /* Ombres */
    --qw-shadow:      0 6px 20px rgba(35, 40, 100, 0.07);
    --qw-shadow-soft: 0 2px 8px  rgba(35, 40, 100, 0.06);
    --qw-shadow-deep: 0 4px 6px rgba(79, 70, 229, 0.04),
                      0 12px 28px rgba(79, 70, 229, 0.10),
                      0 2px 4px rgba(0, 0, 0, 0.04);

    /* Couleurs de marque (constantes, ne basculent pas) */
    --qw-primary:   #4f46e5;
    --qw-primary-d: #4338ca;
    --qw-danger:    #e11d48;
    --qw-ink:       #1f2433;
}

/* ── Palette sombre : Filament pose .dark sur <html> ── */
.dark {
    --qw-page:        #0d1017;
    --qw-surface:     #1b2030;
    --qw-surface-2:   #151a27;
    --qw-surface-3:   #232838;
    --qw-text:        #e8eaf0;
    --qw-heading:     #f1f3f8;
    --qw-muted:       #9aa3b5;
    --qw-faint:       #6b7280;
    --qw-line:        #2c3343;
    --qw-line-soft:   #222838;
    --qw-card-border: #2c3343;
    --qw-label:       #a5b4fc; /* indigo-300, lisible sur sombre */
    --qw-input-line:  #3a4055;
    --qw-accent-bg:   rgba(99, 102, 241, 0.16);
    --qw-accent-fg:   #a5b4fc;
    --qw-row-today:   rgba(245, 200, 66, 0.13);

    --qw-shadow:      0 2px 8px rgba(0, 0, 0, 0.45);
    --qw-shadow-soft: 0 1px 4px rgba(0, 0, 0, 0.4);
    --qw-shadow-deep: 0 8px 24px rgba(0, 0, 0, 0.5);
}

/* Sections / cartes : arrondis + ombre douce */
.fi-section {
    border-radius: var(--qw-radius-lg) !important;
    box-shadow: var(--qw-shadow) !important;
}

/* Tableaux : conteneur arrondi + ombre */
.fi-ta-ctn {
    border-radius: var(--qw-radius-lg) !important;
    box-shadow: var(--qw-shadow) !important;
    overflow: hidden;
}

/* Boutons : plus arrondis */
.fi-btn {
    border-radius: var(--qw-radius-md) !important;
}

/* Champs de formulaire : arrondis + légère ombre (effet surélevé) */
.fi-input-wrp,
.fi-fo-field-wrp .fi-input,
.fi-select-input {
    border-radius: var(--qw-radius-md) !important;
    box-shadow: var(--qw-shadow-soft);
}

/* Filet pour TOUT <select> natif de l'admin : quel que soit le style posé par
   ailleurs (classe, style inline), le chevron que Filament met en image de fond
   reste UNIQUE et à DROITE. Un raccourci `background:` quelque part remettait
   repeat / position 0 0 / size auto sous cette image, et le chevron se répétait
   sur toute la largeur du champ (2026-08-19). Les valeurs sont celles de
   Filament ; les !important ne servent qu'à passer devant un style inline. */
.fi-body select:not(.choices):not([multiple]):not([size]) {
    background-repeat: no-repeat !important;
    background-position: right 0.5rem center !important;
    background-size: 1.5em 1.5em !important;
}

/* Badges en pilule */
.fi-badge {
    border-radius: 999px !important;
}

/* Modales arrondies */
.fi-modal-window {
    border-radius: var(--qw-radius-lg) !important;
}

/* =====================================================================
   Étape 2 : système unifié pour les pages CUSTOM (Livewire en styles
   inline) qui n'héritent pas des classes .fi-*.
   ===================================================================== */

/* Carte / conteneur élevé pour les pages qui n'utilisent pas .fi-section */
.qw-card,
.qw-elevate {
    border-radius: var(--qw-radius-lg) !important;
    box-shadow: var(--qw-shadow) !important;
}
.qw-card {
    background: var(--qw-surface);
    border: 1px solid var(--qw-card-border, rgba(35, 40, 100, 0.06));
}

/* Boutons — UN seul langage : primaire (plein), discret (ghost), danger */
.qw-btn {
    display: inline-flex; align-items: center; gap: 0.4rem;
    font-size: 0.8rem; font-weight: 600; line-height: 1;
    padding: 0.5rem 0.9rem; border-radius: var(--qw-radius-md);
    border: 1px solid transparent; cursor: pointer; white-space: nowrap;
    text-decoration: none;
    transition: background .15s, color .15s, border-color .15s, box-shadow .15s, transform .1s;
}
.qw-btn:active { transform: translateY(1px); }

.qw-btn--primary { background: var(--qw-primary); color: #fff; box-shadow: 0 6px 16px rgba(79, 70, 229, 0.22); }
.qw-btn--primary:hover { background: var(--qw-primary-d); color: #fff; }

.qw-btn--ghost { background: var(--qw-surface); color: var(--qw-muted); border-color: var(--qw-line); }
.qw-btn--ghost:hover { border-color: var(--qw-faint); color: var(--qw-text); }

.qw-btn--danger { background: var(--qw-surface); color: var(--qw-danger); border-color: #fecdd3; }
.qw-btn--danger:hover { background: var(--qw-danger); color: #fff; }
.dark .qw-btn--danger { border-color: #7f1d2e; }

/* Variante sémantique « accepter » (vert) — même anatomie que --danger. */
.qw-btn--success { background: var(--qw-surface); color: #15803d; border-color: #bbf7d0; }
.qw-btn--success:hover { background: #16a34a; color: #fff; }
.dark .qw-btn--success { color: #4ade80; border-color: #14532d; }

/* Bascule « mode responsable » dans la barre du haut (voir member-mode-switch). */
.qw-mode-switch { display: inline-flex; align-items: center; gap: 0.4rem; margin-inline-start: 0.5rem; }
.qw-mode-pill { display: inline-flex; align-items: center; gap: 0.3rem; font-size: 0.78rem; font-weight: 600; color: var(--qw-muted, #64748b); white-space: nowrap; }
.qw-mode-ico { width: 1rem; height: 1rem; flex: none; }
.qw-mode-back { white-space: nowrap; }
/* Mobile / tablette : icône seule, pour ne pas masquer la pastille de compte. */
@media (max-width: 1024px) {
    .qw-mode-switch { margin-inline-start: 0.25rem; }
    .qw-mode-pill { display: none; }
    .qw-mode-back .qw-mode-txt { display: none; }
}

/* =====================================================================
   Étape 3 + 4 : fond teinté (ou sombre), cartes détachées, underline.
   ===================================================================== */

/* ── 1. Fond de page (clair lavande / sombre) ── */
body,
.fi-body,
.fi-layout,
.fi-main {
    background: var(--qw-page) !important;
}

/* ── 1b. Respiration entre le topbar et le contenu ── */
.fi-page {
    padding-top: 1.25rem !important;
}

/* ── 1c/1d. (Historique) La sidebar n'est plus affichée nulle part depuis
   l'étape 6 (navigation par modules) : ses styles ont été retirés. Le topbar
   garde son empilement au-dessus du contenu sur desktop. ── */
@media (min-width: 1024px) {
    .fi-topbar {
        position: relative !important;
        z-index: 30 !important;
    }
}

/* ── 1d bis. Le menu du sélecteur de modules doit pouvoir sortir de la barre ──
   Le menu (.qw-switcher-menu, position: absolute) est empilé DANS le contexte de
   la barre du haut. Deux réglages de Filament l'en empêchaient sur mobile :
   - la barre reste à son z-20 (la règle d'empilement ci-dessus est réservée au
     desktop), donc la bande de section passait DEVANT le menu ;
   - la barre est clippée (overflow-x-clip), ce qui peut rogner ce qui déborde.
   On monte donc l'empilement et on laisse déborder, sur tous les écrans. La
   barre garde son position: sticky sur mobile (on ne touche qu'au z-index). ── */
.fi-topbar {
    z-index: 50 !important;
    overflow: visible !important;
}
.fi-topbar > nav {
    overflow: visible !important;
}

/* ── 1e. Zone sûre iOS (barre d'état + barre d'accueil) ──
   Dans l'app (WebView Capacitor), la page est dessinée SOUS l'heure et les
   icônes système : sans décalage, le topbar les chevauche sur iPhone.
   Même motif que .mb-head / .mb-nav de l'espace membre (qeewee-member.css).
   Dépend de viewport-fit=cover, injecté par filament/pwa/meta.blade.php.
   env() vaut 0 partout ailleurs : la règle est neutre hors iOS encoché.
   La hauteur passe en auto car h-16 (4rem) est en border-box : sans ça, le
   padding rognerait le contenu du topbar au lieu de le décaler. ── */
.fi-topbar > nav {
    padding-top: calc(env(safe-area-inset-top, 0px) + 0.3rem) !important;
    padding-bottom: 0.3rem !important;
    height: auto !important;
    min-height: calc(2.6rem + env(safe-area-inset-top, 0px)) !important;
}
.fi-main {
    padding-bottom: env(safe-area-inset-bottom, 0px) !important;
}

/* ── 1f. Barre du haut compacte : maximiser la surface de travail ──
   La hauteur est imposée par l'élément le plus HAUT de la barre, pas par le
   conteneur : réduire `min-height` seul ne sert à rien. Le bouton du sélecteur
   (icône 1.85rem + 2 x 0.35rem de padding = 2.55rem) dominait la pastille de
   compte (2rem) et le logo (1.7rem). On le compacte pour descendre la barre de
   4rem à ~2.6rem, soit un tiers de gagné, sur mobile comme sur desktop.
   L'icône n'est réduite QUE dans le bouton : celles des entrées du menu
   déroulant gardent leur taille. La zone sûre iOS est préservée telle quelle. ── */
.fi-topbar .qw-switcher-btn {
    padding: 0.2rem 0.5rem !important;
}
.fi-topbar .qw-switcher-btn .qw-switcher-ico {
    width: 1.5rem !important; height: 1.5rem !important; border-radius: 0.5rem !important;
}
.fi-topbar .qw-switcher-btn .qw-switcher-svg {
    width: 0.9rem !important; height: 0.9rem !important;
}
.fi-topbar .fi-avatar {
    width: 1.9rem !important; height: 1.9rem !important;
}

/* ── 2. Sections : ombres profondes, cartes bien détachées ── */
.fi-section {
    border: 1px solid var(--qw-card-border) !important;
    border-radius: 1.25rem !important;
    box-shadow: var(--qw-shadow-deep) !important;
}
.fi-section,
.fi-section-content-ctn {
    background: var(--qw-surface) !important;
}
/* Le conteneur de contenu porte un FOND mais n'héritait d'aucun rayon : dernier
   enfant, son coin carré se peignait PAR-DESSUS le coin arrondi de la section
   (un fond d'enfant n'est pas rogné par le border-radius du parent). D'où des
   cartes tantôt arrondies, tantôt à coins carrés selon que le contenu descend
   ou non jusqu'au bord. On lui rend le rayon du bas.
   `overflow: hidden` sur la section corrigerait aussi, mais rognerait les menus
   déroulants qu'elle contient : ce serait payer trop cher. */
.fi-section-content-ctn {
    border-bottom-left-radius: 1.25rem !important;
    border-bottom-right-radius: 1.25rem !important;
}
.fi-section-header-ctn {
    border-bottom: 1px solid var(--qw-line-soft) !important;
}

/* ── 3. Tableaux ── */
.fi-ta-ctn {
    border: 1px solid var(--qw-card-border) !important;
    border-radius: 1.25rem !important;
    box-shadow: var(--qw-shadow-deep) !important;
}

/* ── 4. Widgets tableau de bord ──
   .fi-wi = grille parente → transparent ; cellules → cartes de surface. */
.fi-wi {
    background: transparent !important;
    box-shadow: none !important;
    border: none !important;
}
.fi-wi-widget,
.fi-wi-stats-overview-stat,
.fi-wi-stats-overview-stats-ctn {
    background: var(--qw-surface) !important;
    border: 1px solid var(--qw-card-border) !important;
    border-radius: 1.25rem !important;
    box-shadow: var(--qw-shadow-deep) !important;
}

/* ── 5. Inputs underline (formulaires seulement, pas les tables) ── */
.fi-section .fi-input-wrp {
    background: transparent !important;
    border: none !important;
    border-bottom: 2px solid var(--qw-input-line) !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    transition: border-color .18s !important;
}
.fi-section .fi-input-wrp:focus-within {
    border-bottom-color: var(--qw-primary) !important;
    box-shadow: 0 2px 0 0 rgba(79, 70, 229, 0.15) !important;
}
.fi-section .fi-input-wrp input,
.fi-section .fi-input-wrp textarea {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    border-radius: 0 !important;
    padding-left: 0 !important;
}

/* ── 6. Labels en indigo doux ── */
.fi-section .fi-fo-field-wrp > label,
.fi-section .fi-fo-field-label {
    color: var(--qw-label) !important;
    font-size: 0.75rem !important;
    font-weight: 600 !important;
    letter-spacing: 0.05em !important;
    text-transform: uppercase !important;
}

/* =====================================================================
   Étape 5 (2026-07) : utilitaires qw-* pour les pages custom admin
   (équité, conformité, santé des groupes, DPA, registre…).
   Toutes les couleurs de surface passent par var(--qw-*) → mode sombre OK.
   ===================================================================== */

/* ── Barre de filtres ── */
.qw-filters { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: flex-end; margin-bottom: 1rem; }
.qw-filter-label { display: block; font-size: 0.72rem; font-weight: 600; color: var(--qw-muted); margin-bottom: 0.2rem; }
.qw-filter-input {
    font-size: 0.85rem; padding: 0.4rem 0.6rem; border: 1px solid var(--qw-line);
    /* 🔴 background-COLOR, jamais le raccourci `background:` sur un champ qui
       peut être un <select>. Filament pose le chevron des <select> natifs par
       `select:not(.choices) { background-image }` (plus spécifique qu'une
       classe) ; le raccourci remettait repeat / position 0 0 / size auto sous
       cette image, qui se répétait alors sur toute la largeur du champ (vu
       par Stéphane le 2026-08-19 sur Équité, Santé des groupes, RGPD, Relevé). */
    border-radius: 0.5rem; background-color: var(--qw-surface); color: var(--qw-text);
}
/* Le chevron de Filament est posé à droite (right .5rem) : la valeur ne doit pas
   passer dessous. */
select.qw-filter-input { padding-right: 2.1rem; }
.qw-filter-input--grow { width: 100%; }
/* Variante en ligne : filtre posé DANS une barre d'outils horizontale, libellé
   à côté et non au-dessus (grille du planning). Ces trois règles vivent ici, et
   non dans le <style> de la vue du planning, parce que ce bloc-là n'est rendu
   que lorsque la grille contient au moins une activité : une lentille qui ne
   ramène rien s'afficherait sans style, au moment précis où l'on en a besoin
   pour revenir en arrière. */
.qw-filter-input--compact { padding: 0.2rem 0.5rem; font-size: 0.78rem; max-width: 14rem; }
.qw-toolbar-label {
    font-size: 0.7rem; color: var(--qw-faint);
    text-transform: uppercase; letter-spacing: .05em;
}
.qw-toolbar-sep { width: 1px; align-self: stretch; background: var(--qw-line); margin: 0 0.25rem; }
/* Bouton-lien discret (réinitialiser…) */
.qw-linkbtn {
    font-size: 0.8rem; color: var(--qw-muted); background: none; border: none;
    cursor: pointer; text-decoration: underline; padding-bottom: 0.5rem;
}

/* ── Cartes de statistiques ── */
.qw-stats { display: flex; flex-wrap: wrap; gap: 0.75rem; margin-bottom: 1rem; }
.qw-stat {
    flex: 1; min-width: 140px; background: var(--qw-surface-2);
    border: 1px solid var(--qw-line); border-radius: 0.75rem; padding: 0.75rem 1rem;
}
.qw-stat--wide { min-width: 180px; }
.qw-stat--ok { background: #f0fdf4; border-color: #bbf7d0; }
.qw-stat--warn { background: #fffbeb; border-color: #fde68a; }
.qw-stat-value { font-size: 1.5rem; font-weight: 700; color: var(--qw-text); }
.qw-stat--ok .qw-stat-value { color: #15803d; }
.qw-stat--warn .qw-stat-value { color: #b45309; }
.qw-stat-label { font-size: 0.75rem; color: var(--qw-muted); }

/* ── Tableaux « maison » ── */
.qw-table-wrap { overflow-x: auto; border: 1px solid var(--qw-line); border-radius: 0.75rem; background: var(--qw-surface); }
.qw-table { width: 100%; border-collapse: collapse; font-size: 0.85rem; }
.qw-table--wide { min-width: 720px; }
.qw-table thead tr { text-align: left; border-bottom: 1px solid var(--qw-line); background: var(--qw-surface-2); }
.qw-table th { padding: 0.6rem 0.875rem; font-weight: 600; color: var(--qw-text); text-align: left; }
.qw-table td { padding: 0.55rem 0.875rem; }
.qw-table tbody tr { border-bottom: 1px solid var(--qw-line-soft); }
.qw-table-empty { padding: 2rem; text-align: center; color: var(--qw-faint); }

/* ── Micro-utilitaires texte ── */
.qw-center { text-align: center; }
.qw-nowrap { white-space: nowrap; }
.qw-muted { color: var(--qw-muted); }
.qw-faint { color: var(--qw-faint); }
.qw-footnote { margin-top: 0.75rem; font-size: 0.75rem; color: var(--qw-faint); }

/* ── Pastilles ── */
.qw-pill {
    display: inline-block; font-size: 0.72rem; font-weight: 600;
    padding: 0.1rem 0.5rem; border-radius: 999px;
    border: 1px solid transparent; white-space: nowrap;
}
.qw-pill--green { background: #f0fdf4; color: #15803d; border-color: #bbf7d0; }
.qw-pill--amber { background: #fffbeb; color: #b45309; border-color: #fde68a; }
.qw-pill--red { background: #fef2f2; color: #b91c1c; border-color: #fecaca; }
.qw-pill--orange { background: #fff7ed; color: #ea580c; }
.qw-pill--blue { background: #eff6ff; color: #2563eb; }
.qw-pill--neutral { background: var(--qw-surface-3); color: var(--qw-text); border-color: var(--qw-line); }

/* ── Encarts d'information ── */
.qw-callout { border-radius: 0.75rem; padding: 0.75rem 1rem; margin-bottom: 1rem; font-size: 0.82rem; }
.qw-callout--ok { background: #f0fdf4; border: 1px solid #bbf7d0; color: #15803d; }
.qw-callout--warn { background: #fffbeb; border: 1px solid #fde68a; color: #92400e; }
.qw-callout--danger { background: #fef2f2; border: 1px solid #fecaca; color: #b91c1c; }
.qw-callout--info { background: #eef2ff; border: 1px solid #c7d2fe; color: #3730a3; }

/* ── Titres et libellés de section ── */
.qw-section-title { margin: 1.25rem 0 0.6rem; font-size: 0.95rem; font-weight: 700; color: var(--qw-text); }
.qw-eyebrow {
    font-size: 0.68rem; font-weight: 700; text-transform: uppercase;
    letter-spacing: 0.04em; color: #6366f1; margin-bottom: 0.3rem;
}

/* =====================================================================
   ÉTAPE 6 (2026-07-06) : navigation par modules, à la Planning Center.
   Sur TOUS les écrans : la barre latérale et le hamburger disparaissent ;
   on navigue via le sélecteur de modules (barre du haut) + les onglets
   de la bande de section (défilables horizontalement sur mobile).
   ===================================================================== */
[x-cloak] { display: none !important; }

.fi-sidebar,
.fi-topbar-open-sidebar-btn,
.fi-topbar-close-sidebar-btn { display: none !important; }

/* ── Sélecteur de modules (barre du haut) ──
   Bâti sur <details>/<summary> (voir filament/branding/module-switcher.blade.php) :
   l'ouverture est native, donc insensible au clic synthétique qu'iOS rejoue après
   un tap et qui rendait la version Alpine inutilisable. Il faut juste effacer le
   marqueur de <summary> : .qw-switcher-btn étant en display:flex, le display
   list-item par défaut est déjà écrasé, mais Safari garde son propre marqueur. ── */
.qw-switcher { position: relative; display: block; margin-left: 0.75rem; }
.qw-switcher > summary { list-style: none; cursor: pointer; }
.qw-switcher > summary::-webkit-details-marker { display: none; }
.qw-switcher > summary::marker { content: ''; }
.qw-switcher[open] .qw-switcher-chev { transform: rotate(180deg); }
.qw-switcher-btn {
    display: flex; align-items: center; gap: 0.55rem;
    padding: 0.35rem 0.65rem; border-radius: 0.8rem;
    font-weight: 700; font-size: 0.92rem; color: var(--qw-text);
}
.qw-switcher-btn:hover { background: var(--qw-surface-2); }
.qw-switcher-btn:hover .qw-switcher-chev { transform: translateY(1px); }
.qw-switcher-ico {
    display: inline-flex; align-items: center; justify-content: center;
    width: 1.85rem; height: 1.85rem; border-radius: 0.6rem;
    color: #fff; flex-shrink: 0;
}
.qw-switcher-svg { width: 1.05rem; height: 1.05rem; }
.qw-switcher-chev { width: 1rem; height: 1rem; color: var(--qw-faint); transition: transform 0.15s; }
.qw-switcher-menu {
    position: absolute; top: calc(100% + 0.55rem); left: 0; z-index: 40;
    min-width: 15.5rem; max-height: calc(100vh - 6rem); overflow-y: auto;
    background: var(--qw-surface); border: 1px solid var(--qw-line);
    border-radius: 1rem; padding: 0.45rem;
    box-shadow: 0 20px 45px rgba(15, 23, 42, 0.18);
}
.dark .qw-switcher-menu { box-shadow: 0 20px 45px rgba(0, 0, 0, 0.55); }
.qw-switcher-item {
    display: flex; align-items: center; gap: 0.65rem;
    padding: 0.42rem 0.6rem; border-radius: 0.7rem;
    font-weight: 600; font-size: 0.875rem; color: var(--qw-text);
}
.qw-switcher-item:hover { background: var(--qw-surface-2); }
.qw-switcher-item.is-active { background: var(--qw-accent-bg); color: var(--qw-accent-fg); }
.qw-switcher-ico--home { background: #6366f1; }
.qw-switcher-sep { height: 1px; background: var(--qw-line); margin: 0.35rem 0.3rem; }
.qw-switcher-foot {
    display: block; padding: 0.4rem 0.6rem; text-align: center;
    font-size: 0.72rem; color: var(--qw-faint);
}
.qw-switcher-foot:hover { color: var(--qw-primary); }
.qw-switcher-foot strong { font-weight: 600; letter-spacing: -0.01em; }

/* ── Bande de section : en-tête du module + onglets ── */
.qw-band {
    position: relative; overflow: hidden;
    display: flex; align-items: center; flex-wrap: wrap; gap: 0.75rem 1.25rem;
    background: var(--qw-section, #6366f1);
    border-radius: 1.1rem; padding: 0.85rem 1.4rem; margin: 1.25rem 0 0;
    box-shadow: 0 12px 28px color-mix(in srgb, var(--qw-section, #6366f1) 24%, transparent);
}
.qw-band-head { position: relative; display: flex; align-items: center; gap: 0.8rem; color: #fff; }
.qw-band-ico {
    display: inline-flex; align-items: center; justify-content: center;
    width: 2.3rem; height: 2.3rem; border-radius: 0.8rem;
    background: rgba(255, 255, 255, 0.18); flex-shrink: 0;
}
.qw-band-title { font-size: 1.1rem; font-weight: 600; letter-spacing: 0.01em; white-space: nowrap; }
.qw-band-tabs {
    position: relative; display: flex; flex-wrap: wrap; gap: 0.35rem;
    margin-left: auto; justify-content: flex-end;
}
.qw-band-tab {
    display: inline-flex; align-items: center; gap: 0.4rem;
    padding: 0.38rem 0.85rem; border-radius: 999px;
    font-size: 0.83rem; font-weight: 600; color: #fff;
    background: rgba(255, 255, 255, 0.14); white-space: nowrap;
}
.qw-band-tab:hover { background: rgba(255, 255, 255, 0.28); color: #fff; }
.qw-band-tab.is-active {
    background: #fff; color: var(--qw-section, #6366f1);
    box-shadow: 0 4px 10px rgba(15, 23, 42, 0.16);
}
.qw-band-tab-badge {
    padding: 0 0.4rem; border-radius: 999px; font-size: 0.7rem;
    background: rgba(255, 255, 255, 0.25);
}
.qw-band-tab.is-active .qw-band-tab-badge { background: var(--qw-section-soft, #eef2ff); }

/* ── Assistant de mise en route (dons) : checklist + étapes ── */
.qw-setup { display: flex; gap: 1.25rem; align-items: flex-start; }
.qw-setup-nav {
    flex: 0 0 240px; position: sticky; top: 5rem;
    display: flex; flex-direction: column; gap: 0.15rem;
    background: var(--qw-surface); border-radius: 1rem; padding: 0.6rem;
}
.qw-setup-nav-item {
    display: flex; align-items: center; gap: 0.6rem; text-align: left;
    padding: 0.5rem 0.6rem; border-radius: 0.7rem;
    font-size: 0.86rem; font-weight: 600; color: var(--qw-muted);
}
.qw-setup-nav-item:hover { background: var(--qw-surface-2); }
.qw-setup-nav-item.is-current { background: var(--qw-accent-bg); color: var(--qw-accent-fg); }
.qw-setup-nav-item.is-done { color: var(--qw-text); }
.qw-setup-dot {
    display: inline-flex; align-items: center; justify-content: center;
    width: 1.15rem; height: 1.15rem; border-radius: 999px; flex-shrink: 0;
    border: 2px solid var(--qw-line); background: var(--qw-surface);
}
.qw-setup-nav-item.is-current .qw-setup-dot { border-color: var(--qw-primary); }
.qw-setup-nav-item.is-done .qw-setup-dot { border-color: #0d9488; background: #0d9488; color: #fff; }
.qw-setup-dot-svg { width: 0.75rem; height: 0.75rem; }
.qw-setup-optional {
    margin-left: auto; font-size: 0.65rem; font-weight: 600;
    color: var(--qw-faint); text-transform: uppercase; letter-spacing: 0.03em;
}
.qw-setup-body { flex: 1; min-width: 0; padding: 1.5rem 1.75rem; }
.qw-setup-h { font-size: 1.25rem; font-weight: 700; color: var(--qw-heading); margin-bottom: 0.35rem; }
.qw-setup-lead { color: var(--qw-muted); margin-bottom: 1rem; }
.qw-setup-list { list-style: disc; padding-left: 1.25rem; margin-top: 0.4rem; display: grid; gap: 0.25rem; }
.qw-setup-input { width: 100%; max-width: 26rem; margin-bottom: 0.9rem; }
.qw-setup-actions { display: flex; flex-wrap: wrap; gap: 0.6rem; margin-top: 1.1rem; }
.qw-setup-actions--nav { border-top: 1px solid var(--qw-line-soft); padding-top: 1rem; margin-top: 1.5rem; }
.qw-setup-or { margin-top: 1.25rem; font-weight: 600; color: var(--qw-muted); }
.qw-setup-code {
    display: inline-block; margin: 0.35rem 0 0.9rem; padding: 0.3rem 0.6rem;
    background: var(--qw-surface-3); border-radius: 0.5rem;
    font-size: 0.8rem; word-break: break-all;
}
.qw-setup-choices { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 0.6rem; margin-bottom: 1.1rem; }
.qw-setup-choice {
    display: flex; flex-direction: column; gap: 0.25rem; text-align: left;
    padding: 0.8rem 0.9rem; border: 2px solid var(--qw-line); border-radius: 0.9rem;
    background: var(--qw-surface); font-size: 0.82rem; color: var(--qw-muted);
}
.qw-setup-choice strong { color: var(--qw-text); font-size: 0.9rem; }
.qw-setup-choice:hover { border-color: var(--qw-faint); }
.qw-setup-choice.is-selected { border-color: var(--qw-primary); background: var(--qw-accent-bg); }
@media (max-width: 1023px) {
    .qw-setup { flex-direction: column; }
    .qw-setup-nav { position: static; flex-basis: auto; width: 100%; }
}

/* ── Mobile : sélecteur compact, onglets sur une ligne défilable ── */
@media (max-width: 1023px) {
    .qw-switcher { margin-left: 0.5rem; }
    /* Icône + sélecteur seulement : le nom de catégorie est masqué pour laisser
       la place à la pastille de compte et au bouton « Revenir à mon espace ». */
    .qw-switcher-label { display: none; }
    .qw-band { padding: 0.85rem 1rem; }
    .qw-band-tabs {
        width: 100%; margin-left: 0; justify-content: flex-start;
        flex-wrap: nowrap; overflow-x: auto;
        -webkit-overflow-scrolling: touch; scrollbar-width: none;
    }
    .qw-band-tabs::-webkit-scrollbar { display: none; }
}

/* =====================================================================
   PORTE DE CONNEXION — casquette de couleur (2026-08-06, validée).
   La carte Filament reste ; un bandeau compact la coiffe, avec le logo
   partagé x-mb-logo et le semis de graines du kiwi. La marque a désormais
   UN SEUL logo : le SVG dessiné, ici comme dans l'espace membre.
   ===================================================================== */

/* La marque (pages simples, barre du haut, casquette). Remplace les styles
   en attribut qui vivaient dans brand-logo.blade.php. */
.qw-brand { display: flex; align-items: center; gap: 0.5rem; }
.qw-wordmark { font-weight: 700; font-size: 1.25rem; letter-spacing: -0.02em; white-space: nowrap; }
.qw-wordmark--topbar { font-size: 1.1rem; }
.qw-wordmark-vert { color: #65a30d; }
.qw-wordmark-point { color: #84cc16; }
.qw-topbar-logo { display: flex; align-items: center; gap: 0.45rem; text-decoration: none; color: inherit; }
.qw-badge-soft {
    display: inline-flex; align-items: center; padding: 0.1rem 0.45rem;
    font-size: 0.62rem; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase;
    color: #92400e; background: #fef3c7; border: 1px solid #fcd34d;
    border-radius: 9999px; line-height: 1.3; white-space: nowrap;
}

/* L'ancien en-tête (logo + « Connectez-vous à votre compte ») disparaît, mais
   SEULEMENT sur la page qui porte la casquette : le :has suit la casquette,
   pas la page, pour ne toucher aucune autre page simple.

   🔴 LA MARGE HAUTE NÉGATIVE VIT SOUS LA MÊME GARDE : elle est calibrée pour
   un en-tête ABSENT. Inconditionnelle, elle faisait mordre la casquette de
   24 px sur le titre quand :has manque (mesuré : 3rem de remontée moins le
   row-gap de 1.5rem de la grille Filament). Sous la garde, les deux gestes
   dégradent ENSEMBLE : sans :has, l'en-tête reste ET la casquette reste sous
   lui — redondant, jamais chevauché. */
.fi-simple-main:has(.qw-login-cover) .fi-simple-header { display: none; }
.fi-simple-main:has(.qw-login-cover) .qw-login-cover { margin-top: -3rem; }

/* La casquette. Les marges négatives recopient le padding de .fi-simple-main
   (px-6 py-12, sm:px-12) pour épouser les bords de la carte ; les coins hauts
   suivent le sm:rounded-xl (0.75rem) de la carte. Même recette de fond que le
   bandeau membre : graines, lueur blanche, fondu vers le violet dérivé en
   oklch quand le navigateur sait le calculer. */
.qw-login-cover {
    margin: 0 -1.5rem 1.75rem; padding: 1.6rem 1.5rem 1.8rem; color: #fff;
    background-color: var(--qw-primary);
    background-image:
        radial-gradient(rgba(255, 255, 255, 0.20) 1.4px, transparent 1.5px),
        radial-gradient(rgba(255, 255, 255, 0.13) 1.1px, transparent 1.2px),
        radial-gradient(120% 95% at 88% -15%, rgba(255, 255, 255, 0.30), transparent 62%),
        linear-gradient(145deg, var(--qw-primary) 0%, #6366f1 100%);
    background-size: 26px 26px, 17px 17px, auto, auto;
    background-position: 0 0, 9px 13px, 0 0, 0 0;
}
@supports (color: oklch(from red l c h)) {
    .qw-login-cover {
        background-image:
            radial-gradient(rgba(255, 255, 255, 0.20) 1.4px, transparent 1.5px),
            radial-gradient(rgba(255, 255, 255, 0.13) 1.1px, transparent 1.2px),
            radial-gradient(120% 95% at 88% -15%, rgba(255, 255, 255, 0.30), transparent 62%),
            linear-gradient(150deg,
                var(--qw-primary) 0%,
                oklch(from var(--qw-primary) calc(l + 0.04) calc(c * 0.90) calc(h + 8)) 45%,
                oklch(from var(--qw-primary) calc(l + 0.07) calc(c * 0.85) calc(h + 19)) 100%);
    }
}
@media (min-width: 640px) {
    .qw-login-cover { margin-left: -3rem; margin-right: -3rem; padding: 1.6rem 2rem 1.8rem; border-radius: 0.75rem 0.75rem 0 0; }
}
/* Dans la casquette, le mot-symbole et les badges passent en blanc : les
   verts du mot-symbole et l'ambre du badge ne se lisent pas sur l'indigo. */
.qw-login-cover .qw-wordmark { color: #fff; }
.qw-login-cover .qw-wordmark-vert { color: #c9ea8b; }
.qw-login-cover .qw-wordmark-point { color: #c9ea8b; }
.qw-login-cover .qw-badge-soft { color: #fff; background: rgba(255, 255, 255, 0.18); border-color: rgba(255, 255, 255, 0.28); }
/* Le titre de la casquette est le H1 de la page : l'ancien (« Connectez-vous
   a votre compte ») est masque ci-dessus, et une page sans h1 laisse un
   lecteur d'ecran naviguer dans une hierarchie qui commence au niveau 2. */
.qw-login-cover h1 { margin: 0.8rem 0 0; font-size: 1.35rem; font-weight: 800; letter-spacing: -0.015em; color: #fff; }

/* ── La casquette assortie à la vitrine membre (demande du 2026-08-06) ──
   Même famille visuelle des deux côtés : ciel de graines dessiné, quart de
   kiwi au trait dans l'angle, marque en grand, champs lavande, bouton en
   dégradé. La structure Filament, elle, ne bouge toujours pas. */
.qw-login-cover { position: relative; overflow: hidden; }
.qw-login-ciel { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0.45; }
.qw-login-filigrane { position: absolute; width: 12rem; height: 12rem; top: -4.5rem; right: -4.5rem; }
/* Le contenu passe DEVANT le ciel et le filigrane : entre un positionné et du
   flux, le positionné est peint au-dessus — même mécanique que côté membre. */
.qw-login-cover > :not(.qw-login-ciel):not(.qw-login-filigrane) { position: relative; }
/* La marque en grand, comme sur la vitrine : le nom pèse autant que le logo. */
.qw-login-cover .qw-brand { gap: 0.6rem; }
.qw-login-cover .qw-wordmark { font-size: 1.9rem; }
.qw-login-cover h1 { margin-top: 1rem; }

/* Champs lavande au repos, blancs à la saisie — le geste des écrans membres.
   ⚠️ MODE CLAIR SEULEMENT : en sombre, la carte est gris-nuit et un champ
   lavande y hurlerait ; Filament garde alors ses fonds. Le ciblage suit la
   casquette (:has), donc uniquement la porte de connexion. */
html:not(.dark) .fi-simple-main:has(.qw-login-cover) .fi-input-wrp { background-color: #eef2ff; }
html:not(.dark) .fi-simple-main:has(.qw-login-cover) .fi-input-wrp:focus-within { background-color: #fff; }

/* Le bouton d'entrée prend le fondu de la casquette — les deux portes se
   répondent. Les boutons SSO, eux, restent neutres (règle Apple : aucune mise
   en avant inégale des fournisseurs). */
/* Le degrade du bouton primaire est devenu GENERAL (lot B, plus bas) : la
   regle propre a la porte de connexion n'a plus lieu d'etre. On garde le
   repli plat pour les navigateurs sans oklch. */
.fi-simple-main:has(.qw-login-cover) .fi-btn-color-primary:not(.fi-btn-outlined) {
    background-image: linear-gradient(135deg, var(--qw-primary), #6366f1);
}


/* =====================================================================
   LOT B (2026-08-06, valide sur maquette) — l'interieur admin parle la
   langue des portes d'entree : fondu oklch derive, vrai kiwi au trait,
   boutons en degrade, lisere du topbar. Aucune structure ne bouge.
   ===================================================================== */

/* ── La bande de section fond vers SA teinte ──
   La couleur du module (--qw-section, injectee par SectionTheme au HEAD_END)
   reste seule maitresse : le fondu en DERIVE. L'aplat reste le repli. */
@supports (color: oklch(from red l c h)) {
    .qw-band {
        background: linear-gradient(150deg,
            var(--qw-section, #6366f1),
            oklch(from var(--qw-section, #6366f1) calc(l + 0.07) calc(c * 0.85) calc(h + 19)));
    }
}
/* Le kiwi au trait de la bande (composant x-kiwi-trait, place ici).
   right: -10px et non -30px : a -30px, l'anneau du logo etait trop mange par
   le bord droit sur un ecran de PC (constate par Stephane sur Chrome et
   Firefox, valeur -10px validee a l'oeil par lui le 2026-08-14). Le filigrane
   reste volontairement coupe en haut : c'est le deborde du bas qui gene. */
.qw-band-kiwi { position: absolute; top: -54px; right: -10px; width: 170px; height: 170px; }

/* ── Les tuiles d'acces rapide : memes regles que l'accueil membre ──
   La couleur du module arrive en donnee (`--tuile` pose par la vue depuis
   SectionTheme::PALETTE) ; fond, fondu et ombre en derivent. */
.qw-launch-titre { margin: 0 0 0.65rem; font-size: 0.95rem; font-weight: 600; color: var(--qw-heading); }
.qw-launch-grille { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 14px; width: 100%; }
.qw-launch-tuile {
    position: relative; overflow: hidden; display: block;
    background: var(--tuile, #6366f1);
    border-radius: 1.1rem; padding: 1.05rem 1.15rem; min-height: 108px;
    color: #fff; text-decoration: none;
    box-shadow: 0 10px 22px color-mix(in srgb, var(--tuile, #23286a) 30%, transparent);
    transition: transform 0.12s ease, box-shadow 0.12s ease;
}
@supports (color: oklch(from red l c h)) {
    .qw-launch-tuile {
        background: linear-gradient(150deg,
            var(--tuile, #6366f1),
            oklch(from var(--tuile, #6366f1) calc(l + 0.07) calc(c * 0.85) calc(h + 19)));
    }
}
@media (hover: hover) {
    .qw-launch-tuile:hover {
        transform: translateY(-2px);
        box-shadow: 0 16px 30px color-mix(in srgb, var(--tuile, #23286a) 40%, transparent);
    }
}
.qw-launch-kiwi { position: absolute; top: -28px; right: -24px; width: 104px; height: 104px; }
.qw-launch-ico {
    position: relative; display: inline-flex; width: 2.4rem; height: 2.4rem;
    align-items: center; justify-content: center;
    background: rgba(255, 255, 255, 0.18); border-radius: 0.8rem;
}
.qw-launch-ico svg { width: 1.35rem; height: 1.35rem; }
.qw-launch-libelle { position: relative; margin-top: 0.7rem; font-size: 0.95rem; font-weight: 600; }

/* ── Les boutons primaires prennent le fondu, clair ET sombre ──
   (le fondu derive de --qw-primary, constante de marque : rien a redefinir
   sous .dark). L'aplat + survol plein restent les replis hors oklch. */
@supports (color: oklch(from red l c h)) {
    .qw-btn--primary {
        background: linear-gradient(135deg,
            var(--qw-primary),
            oklch(from var(--qw-primary) calc(l + 0.07) calc(c * 0.85) calc(h + 19)));
    }
    .qw-btn--primary:hover {
        background: linear-gradient(135deg,
            var(--qw-primary-d),
            oklch(from var(--qw-primary) calc(l + 0.03) calc(c * 0.9) calc(h + 12)));
    }
    /* ⚠️ `:not(.fi-btn-outlined)` : Filament pose fi-btn-color-primary sur
       TOUS les boutons primaires, y compris ->outlined() (fond transparent,
       texte indigo). Sans la garde, le degrade les remplirait : indigo sur
       indigo, illisible. Aucun outlined dans app/ aujourd'hui — c'est
       precisement le genre de piege qui casse au premier usage, sans bruit. */
    .fi-btn-color-primary:not(.fi-btn-outlined) {
        background-image: linear-gradient(135deg,
            var(--qw-primary),
            oklch(from var(--qw-primary) calc(l + 0.07) calc(c * 0.85) calc(h + 19)));
    }
    /* ⚠️ LE SURVOL FILAMENT NE SUFFIT PLUS : hover:bg-custom-500 ne change
       que background-COLOR, peint SOUS notre image de degrade opaque — sans
       cette regle, aucun bouton primaire de l'admin ne reagissait plus au
       survol (mesure). Meme degrade fonce que .qw-btn--primary:hover. */
    .fi-btn-color-primary:not(.fi-btn-outlined):hover {
        background-image: linear-gradient(135deg,
            var(--qw-primary-d),
            oklch(from var(--qw-primary) calc(l + 0.03) calc(c * 0.9) calc(h + 12)));
    }
}

/* ── Le lisere du topbar (option validee) ──
   3 px au ras du haut : indigo vers le violet derive vers le vert du logo —
   le rappel du login sur chaque ecran. Le vert #8cc63f est la constante du
   kiwi, comme partout.
   ⚠️ AUCUN `position: relative` ICI : le topbar est `sticky` (donc deja
   positionne, le ::before absolu s'y ancre tres bien), et une regle
   `relative` posee apres la feuille Filament lui VOLAIT son sticky sous
   1024 px — la barre partait avec le defilement sur mobile (mesure). */
.fi-topbar::before {
    content: ""; position: absolute; top: 0; left: 0; right: 0; height: 3px; z-index: 1;
    background: linear-gradient(90deg, var(--qw-primary), #8b5cf6 55%, #8cc63f);
}
@supports (color: oklch(from red l c h)) {
    .fi-topbar::before {
        background: linear-gradient(90deg,
            var(--qw-primary),
            oklch(from var(--qw-primary) calc(l + 0.07) calc(c * 0.85) calc(h + 19)) 55%,
            #8cc63f);
    }
}

/* ── Page Abonnement (SubscriptionPage) ──
   Trois cartes : la situation, les limites de la formule, les factures.
   Tout en classes : la seule valeur inline est la largeur des jauges,
   calculee par le serveur. Les couleurs de badge suivent la semantique
   deja employee par les cartes stat (ok / warn) et l'indigo pour l'info. */
.qw-sub-card { padding: 1.5rem; }
.qw-sub-card + .qw-sub-card { margin-top: 1rem; }
.qw-sub-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 1rem; flex-wrap: wrap; }
.qw-sub-plan { font-size: 1.35rem; font-weight: 700; color: var(--qw-text); letter-spacing: -0.01em; }
.qw-sub-org { color: var(--qw-muted); font-size: 0.9rem; }
.qw-sub-badge { display: inline-block; padding: 0.25rem 0.7rem; border-radius: 999px; font-size: 0.8rem; font-weight: 600; white-space: nowrap; }
.qw-sub-badge--ok { background: #f0fdf4; color: #15803d; border: 1px solid #bbf7d0; }
.qw-sub-badge--info { background: #eef2ff; color: var(--qw-primary-d); border: 1px solid #c7d2fe; }
.qw-sub-badge--warn { background: #fffbeb; color: #b45309; border: 1px solid #fde68a; }
.qw-sub-lead { margin: 1rem 0 0; color: var(--qw-text); line-height: 1.55; max-width: 68ch; }
.qw-sub-actions { display: flex; flex-wrap: wrap; gap: 0.6rem; margin-top: 1rem; }
.qw-sub-fine { margin: 0.75rem 0 0; font-size: 0.82rem; color: var(--qw-muted); }
.qw-sub-fine a { color: var(--qw-primary); text-decoration: underline; }
.qw-sub-title { margin: 0 0 1rem; font-size: 1rem; font-weight: 700; color: var(--qw-text); }
.qw-sub-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1rem; }
.qw-sub-metric { border: 1px solid var(--qw-line); border-radius: 0.75rem; padding: 0.9rem 1rem; background: var(--qw-surface); }
.qw-sub-metric-label { font-size: 0.78rem; color: var(--qw-muted); text-transform: uppercase; letter-spacing: 0.04em; }
.qw-sub-metric-value { font-size: 1.5rem; font-weight: 700; color: var(--qw-text); margin-top: 0.15rem; font-variant-numeric: tabular-nums; }
.qw-sub-metric-of { font-size: 0.9rem; font-weight: 500; color: var(--qw-muted); margin-left: 0.15rem; }
.qw-sub-metric-hint { font-size: 0.78rem; color: var(--qw-faint); margin-top: 0.35rem; }
.qw-sub-bar { height: 6px; border-radius: 999px; background: var(--qw-line-soft); overflow: hidden; margin-top: 0.5rem; }
.qw-sub-bar-fill { display: block; height: 100%; background: var(--qw-primary); border-radius: 999px; }
.qw-sub-bar-fill--warn { background: #d97706; }
.qw-sub-modules { margin-top: 1rem; font-size: 0.9rem; color: var(--qw-text); }
.qw-sub-modules p { margin: 0.35rem 0 0; }
.qw-sub-inv-links { white-space: nowrap; }
.qw-sub-inv-links a { color: var(--qw-primary); text-decoration: underline; margin-right: 0.75rem; }

/* ── Page Securite du compte (TwoFactorSettings) ──
   Sections Connexion, Comptes lies, Appareils connectes : listes de lignes
   (titre, sous-titre, geste a droite). Les blocs 2FA et passkeys d'origine
   gardent leur mise en forme. */
.qw-sec-card { padding: 1.5rem; }
.qw-sec-head { display: flex; align-items: center; gap: 0.6rem; margin-bottom: 0.35rem; }
.qw-sec-title { font-weight: 700; color: var(--qw-text); }
.qw-sec-intro { margin: 0 0 1rem; color: var(--qw-muted); }
.qw-sec-list { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 0.5rem; }
.qw-sec-row { display: flex; align-items: center; justify-content: space-between; gap: 0.75rem; border: 1px solid var(--qw-line); border-radius: 0.6rem; padding: 0.7rem 0.85rem; }
.qw-sec-row--current { border-color: var(--qw-primary); background: color-mix(in srgb, var(--qw-primary) 6%, var(--qw-surface)); }
.qw-sec-row-title { font-weight: 600; color: var(--qw-text); display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; }
.qw-sec-row-sub { font-size: 0.82rem; color: var(--qw-muted); }
.qw-sec-row-note { font-size: 0.8rem; color: var(--qw-faint); text-align: right; max-width: 18rem; }
.qw-sec-pill { display: inline-block; padding: 0.05rem 0.5rem; border-radius: 999px; background: var(--qw-primary); color: #fff; font-size: 0.72rem; font-weight: 600; }
.qw-sec-actions { margin-top: 1rem; display: flex; gap: 0.6rem; flex-wrap: wrap; }
.qw-sec-fine { margin: 1rem 0 0; font-size: 0.85rem; color: var(--qw-muted); }
