/* ==========================================================================
   MineRaven — thème Azuriom
   --------------------------------------------------------------------------
   Sommaire
   01. Tokens & réglages
   02. Base & typographie
   03. Motif « carte marine » (signature)
   04. Boutons
   05. En-tête / navigation
   06. Menu mobile
   07. Hero
   08. Bandeau statistiques
   09. Titres de section
   10. Actualités
   11. Présentation
   12. Atouts
   13. Discord
   14. Bandeau d'appel à l'action
   15. Pied de page
   16. Habillage Bootstrap (toutes les autres pages & plugins)
   16 bis. Habillage Bootstrap — composants utilisés par les plugins
   17. Responsive
   18. Accessibilité & mouvement réduit
   19. Disposition « rail » (défaut) — colonne d'icônes + barre du haut
   20. Accueil en grille
   21. Widgets de la colonne latérale
   22. Pages internes — sous-menu latéral contextuel
   23. Responsive de la disposition « rail »
   ========================================================================== */

/* ==========================================================================
   01. Tokens & réglages
   Les huit variables --mr-* de base sont injectées par layouts/base.blade.php
   à partir de la configuration du thème. Tout le reste en découle.
   ========================================================================== */

:root {
    /* Rythme vertical */
    --mr-section-y: 5.5rem;

    /* Rayons — coques de navire : peu arrondies, jamais rondes */
    --mr-radius-sm: 4px;
    --mr-radius: 8px;
    --mr-radius-lg: 14px;

    /* Traits */
    --mr-hairline: rgba(var(--mr-primary-rgb), .28);
    --mr-hairline-soft: rgba(var(--mr-primary-rgb), .14);
    --mr-border: 1px solid var(--mr-hairline-soft);

    /* Ombres — lumière de lanterne, jamais de halo néon */
    --mr-shadow-sm: 0 2px 10px rgba(0, 0, 0, .35);
    --mr-shadow: 0 14px 34px rgba(0, 0, 0, .45);
    --mr-shadow-lift: 0 22px 48px rgba(0, 0, 0, .55);

    /* Typographie */
    --mr-font-display: 'Fraunces', 'Georgia', serif;
    --mr-font-body: 'Barlow', system-ui, -apple-system, 'Segoe UI', sans-serif;
    --mr-font-mono: 'JetBrains Mono', ui-monospace, 'SFMono-Regular', monospace;

    /* Durées */
    --mr-fast: 140ms;
    --mr-med: 260ms;
    --mr-slow: 520ms;

    /* Hauteur d'en-tête, relue par le JS */
    --mr-header-h: 116px;

    /* Rose des vents (signature) */
    --mr-compass: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'%3E%3Cpath d='M50 2 56 44 98 50 56 56 50 98 44 56 2 50 44 44Z'/%3E%3Cpath d='M71.2 28.8 56 50 71.2 71.2 50 56 28.8 71.2 44 50 28.8 28.8 50 44Z' opacity='.5'/%3E%3C/svg%3E");
}

/* ==========================================================================
   02. Base & typographie
   ========================================================================== */

*,
*::before,
*::after {
    box-sizing: border-box;
}

html {
    scroll-behavior: smooth;
    scroll-padding-top: calc(var(--mr-header-h) + 1rem);
}

body {
    min-height: 100%;
    margin: 0;
    background-color: var(--mr-bg);
    color: var(--mr-text);
    font-family: var(--mr-font-body);
    font-size: 1rem;
    font-weight: 400;
    line-height: 1.65;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
    overflow-x: hidden;
}

body.mr-no-scroll {
    overflow: hidden;
}

.mr-shell {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}

.mr-shell > main {
    flex: 1 0 auto;
}

h1, h2, h3, h4, h5, h6,
.h1, .h2, .h3, .h4, .h5, .h6 {
    margin: 0 0 .6em;
    color: var(--mr-text);
    font-family: var(--mr-font-display);
    font-weight: 700;
    line-height: 1.12;
    letter-spacing: -.015em;
}

h1, .h1 { font-size: clamp(2.1rem, 1.4rem + 2.6vw, 3.4rem); font-weight: 900; }
h2, .h2 { font-size: clamp(1.7rem, 1.2rem + 1.8vw, 2.5rem); }
h3, .h3 { font-size: clamp(1.25rem, 1.05rem + .7vw, 1.6rem); }
h4, .h4 { font-size: 1.2rem; }
h5, .h5 { font-size: 1.05rem; }
h6, .h6 { font-size: .95rem; }

p {
    margin: 0 0 1rem;
}

a {
    color: var(--mr-primary);
    text-decoration: none;
    transition: color var(--mr-fast) ease;
}

a:hover,
a:focus-visible {
    color: var(--mr-text);
}

img {
    max-width: 100%;
    height: auto;
}

hr {
    height: 1px;
    margin: 2rem 0;
    border: 0;
    background: linear-gradient(90deg, transparent, var(--mr-hairline), transparent);
    opacity: 1;
}

::selection {
    background: var(--mr-primary);
    color: var(--mr-bg);
}

/* Barre de défilement — cordage sur le bastingage */
* {
    scrollbar-width: thin;
    scrollbar-color: rgba(var(--mr-primary-rgb), .45) transparent;
}

::-webkit-scrollbar {
    width: 10px;
    height: 10px;
}

::-webkit-scrollbar-track {
    background: var(--mr-surface);
}

::-webkit-scrollbar-thumb {
    background: rgba(var(--mr-primary-rgb), .38);
    border: 2px solid var(--mr-surface);
    border-radius: 99px;
}

::-webkit-scrollbar-thumb:hover {
    background: rgba(var(--mr-primary-rgb), .62);
}

/* Étiquette monospace en petites capitales — relevé de bord */
.mr-eyebrow {
    display: inline-flex;
    align-items: center;
    gap: .55rem;
    margin: 0 0 .85rem;
    color: var(--mr-primary);
    font-family: var(--mr-font-mono);
    font-size: .72rem;
    font-weight: 500;
    letter-spacing: .22em;
    text-transform: uppercase;
}

.mr-muted {
    color: var(--mr-muted);
}

.mr-mono {
    font-family: var(--mr-font-mono);
    font-variant-numeric: tabular-nums;
}

/* ==========================================================================
   03. Motif « carte marine » (signature)
   Trame de report fixe derrière toute la page + rose des vents fantôme.
   ========================================================================== */

/* z-index négatif : le motif se peint juste au-dessus du fond de page mais
   sous tout le contenu. Cela évite d'avoir à empiler les conteneurs au-dessus
   de lui — et donc d'enfermer les modales dans un contexte d'empilement. */
.mr-chart-bg {
    position: fixed;
    inset: 0;
    z-index: -1;
    pointer-events: none;
    background-image:
        repeating-linear-gradient(0deg, rgba(var(--mr-primary-rgb), .045) 0 1px, transparent 1px 88px),
        repeating-linear-gradient(90deg, rgba(var(--mr-primary-rgb), .045) 0 1px, transparent 1px 88px);
    mask-image: radial-gradient(ellipse 110% 80% at 50% 0%, #000 25%, transparent 78%);
    -webkit-mask-image: radial-gradient(ellipse 110% 80% at 50% 0%, #000 25%, transparent 78%);
}

/* Pas de « z-index » ici : il créerait un contexte d'empilement qui
   emprisonnerait les modales des plugins sous le voile de Bootstrap.
   Le motif de fond étant en z-index -1, « position: relative » suffit. */
.mr-shell > * {
    position: relative;
}

/* L'en-tête doit peindre au-dessus du contenu : sur l'accueil il est
   en position fixed, donc il perd l'ordre naturel du flux. */
.mr-shell > header {
    z-index: 1030;
}

/* La rose des vents, réutilisable partout */
.mr-rose {
    display: block;
    background-color: currentColor;
    mask-image: var(--mr-compass);
    -webkit-mask-image: var(--mr-compass);
    mask-size: contain;
    -webkit-mask-size: contain;
    mask-repeat: no-repeat;
    -webkit-mask-repeat: no-repeat;
    mask-position: center;
    -webkit-mask-position: center;
}

/* ==========================================================================
   04. Boutons
   ========================================================================== */

.mr-btn {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .55rem;
    padding: .78rem 1.55rem;
    border: 1px solid transparent;
    border-radius: var(--mr-radius-sm);
    background: none;
    color: inherit;
    font-family: var(--mr-font-body);
    font-size: .92rem;
    font-weight: 600;
    letter-spacing: .06em;
    line-height: 1.2;
    text-transform: uppercase;
    text-align: center;
    cursor: pointer;
    transition: transform var(--mr-fast) ease,
                background-color var(--mr-med) ease,
                border-color var(--mr-med) ease,
                color var(--mr-med) ease,
                box-shadow var(--mr-med) ease;
}

.mr-btn:active {
    transform: translateY(1px);
}

.mr-btn i {
    font-size: 1.05em;
    line-height: 1;
}

/* Laiton plein — action principale, une seule par écran */
.mr-btn-primary {
    background: var(--mr-primary);
    border-color: var(--mr-primary);
    color: var(--mr-on-primary);
    box-shadow: 0 6px 20px rgba(var(--mr-primary-rgb), .28);
}

.mr-btn-primary:hover,
.mr-btn-primary:focus-visible {
    background: var(--mr-primary-bright);
    border-color: var(--mr-primary-bright);
    color: var(--mr-on-primary);
    box-shadow: 0 10px 28px rgba(var(--mr-primary-rgb), .42);
}

/* Contour — action secondaire */
.mr-btn-outline {
    border-color: rgba(var(--mr-primary-rgb), .45);
    color: var(--mr-text);
}

.mr-btn-outline:hover,
.mr-btn-outline:focus-visible {
    border-color: var(--mr-primary);
    background: rgba(var(--mr-primary-rgb), .1);
    color: var(--mr-text);
}

/* Pavillon rouge — déconnexion, suppression */
.mr-btn-danger {
    background: var(--mr-danger);
    border-color: var(--mr-danger);
    color: #fff;
}

.mr-btn-danger:hover,
.mr-btn-danger:focus-visible {
    background: color-mix(in srgb, var(--mr-danger) 82%, #fff);
    border-color: color-mix(in srgb, var(--mr-danger) 82%, #fff);
    color: #fff;
}

.mr-btn-ghost {
    padding: .5rem .85rem;
    color: var(--mr-muted);
    text-transform: none;
    letter-spacing: 0;
}

.mr-btn-ghost:hover,
.mr-btn-ghost:focus-visible {
    color: var(--mr-text);
}

.mr-btn-lg {
    padding: .95rem 2rem;
    font-size: 1rem;
}

.mr-btn-block {
    width: 100%;
}

/* Bouton « copier l'IP » — l'élément le plus cliqué du site */
.mr-ip {
    display: inline-flex;
    align-items: center;
    gap: .6rem;
    padding: .55rem .9rem;
    border: 1px dashed rgba(var(--mr-primary-rgb), .5);
    border-radius: var(--mr-radius-sm);
    background: rgba(var(--mr-primary-rgb), .07);
    color: var(--mr-text);
    font-family: var(--mr-font-mono);
    font-size: .88rem;
    font-weight: 500;
    cursor: pointer;
    transition: border-color var(--mr-med) ease, background-color var(--mr-med) ease;
}

.mr-ip:hover,
.mr-ip:focus-visible {
    border-style: solid;
    border-color: var(--mr-primary);
    background: rgba(var(--mr-primary-rgb), .14);
}

.mr-ip .mr-ip-icon {
    color: var(--mr-primary);
}

.mr-ip-label {
    white-space: nowrap;
}

.mr-ip.is-copied {
    border-style: solid;
    border-color: var(--mr-accent);
    background: rgba(var(--mr-accent-rgb), .14);
}

.mr-ip.is-copied .mr-ip-icon {
    color: var(--mr-accent);
}

/* ==========================================================================
   05. En-tête / navigation
   Deux étages : un « relevé » fin (IP + effectif) puis la barre principale.
   ========================================================================== */

.mr-header {
    position: sticky;
    top: 0;
    z-index: 1030;
    transition: background-color var(--mr-med) ease,
                border-color var(--mr-med) ease,
                box-shadow var(--mr-med) ease;
    border-bottom: 1px solid transparent;
}

/* Sur l'accueil, l'en-tête flotte au-dessus du hero */
.mr-header.is-overlay {
    position: fixed;
    inset: 0 0 auto;
    background: linear-gradient(180deg, rgba(0, 0, 0, .55), transparent);
}

.mr-header.is-solid,
.mr-header:not(.is-overlay) {
    background: color-mix(in srgb, var(--mr-bg) 88%, transparent);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border-bottom-color: var(--mr-hairline-soft);
    box-shadow: var(--mr-shadow-sm);
}

/* Étage 1 — relevé de bord (mode classique) */
.mr-topline {
    border-bottom: 1px solid rgba(255, 255, 255, .06);
    font-size: .82rem;
}

.mr-topline-inner {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    min-height: 42px;
    padding: .3rem 0;
}

.mr-topbar-servers {
    display: flex;
    align-items: center;
    gap: 1.1rem;
    min-width: 0;
    flex-wrap: wrap;
}

.mr-server-chip {
    display: inline-flex;
    align-items: center;
    gap: .6rem;
    min-width: 0;
}

.mr-server-name {
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .76rem;
    letter-spacing: .12em;
    text-transform: uppercase;
    white-space: nowrap;
}

.mr-status {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    font-family: var(--mr-font-mono);
    font-size: .78rem;
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
}

.mr-status .mr-dot {
    width: 7px;
    height: 7px;
    border-radius: 50%;
    flex: none;
}

.mr-status-online {
    color: var(--mr-success);
}

.mr-status-online .mr-dot {
    background: var(--mr-success);
    box-shadow: 0 0 0 0 rgba(var(--mr-success-rgb), .55);
    animation: mr-pulse 2.4s ease-out infinite;
}

.mr-status-offline {
    color: var(--mr-muted);
}

.mr-status-offline .mr-dot {
    background: var(--mr-danger);
}

@keyframes mr-pulse {
    0%   { box-shadow: 0 0 0 0 rgba(var(--mr-success-rgb), .5); }
    70%  { box-shadow: 0 0 0 7px rgba(var(--mr-success-rgb), 0); }
    100% { box-shadow: 0 0 0 0 rgba(var(--mr-success-rgb), 0); }
}

.mr-topbar-user {
    display: flex;
    align-items: center;
    gap: .35rem;
    flex: none;
}

.mr-topbar-link {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    padding: .35rem .7rem;
    border-radius: var(--mr-radius-sm);
    color: var(--mr-muted);
    font-size: .82rem;
    font-weight: 500;
    transition: color var(--mr-fast) ease, background-color var(--mr-fast) ease;
}

.mr-topbar-link:hover,
.mr-topbar-link:focus-visible {
    background: rgba(255, 255, 255, .06);
    color: var(--mr-text);
}

.mr-topbar-link.is-strong {
    color: var(--mr-primary);
}

/* Étage 2 — barre principale */
.mr-nav {
    display: flex;
    align-items: center;
    gap: 1.5rem;
    min-height: 74px;
}

.mr-brand {
    display: inline-flex;
    align-items: center;
    gap: .7rem;
    flex: none;
    color: var(--mr-text);
}

.mr-brand img {
    height: 42px;
    width: auto;
    max-width: 180px;
    object-fit: contain;
}

.mr-brand-name {
    font-family: var(--mr-font-display);
    font-size: 1.28rem;
    font-weight: 900;
    letter-spacing: -.01em;
    line-height: 1;
    white-space: nowrap;
}

.mr-nav-links {
    display: flex;
    align-items: center;
    gap: .15rem;
    margin: 0 auto 0 .5rem;
    padding: 0;
    list-style: none;
    flex-wrap: wrap;
}

.mr-nav-links > li {
    position: relative;
}

.mr-nav-link {
    display: inline-flex;
    align-items: center;
    gap: .45rem;
    padding: .6rem .8rem;
    border-radius: var(--mr-radius-sm);
    color: var(--mr-text);
    font-size: .92rem;
    font-weight: 600;
    letter-spacing: .01em;
    white-space: nowrap;
    transition: color var(--mr-fast) ease, background-color var(--mr-fast) ease;
}

.mr-nav-link::after {
    content: '';
    position: absolute;
    left: .8rem;
    right: .8rem;
    bottom: .3rem;
    height: 2px;
    background: var(--mr-primary);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform var(--mr-med) cubic-bezier(.4, 0, .2, 1);
}

.mr-nav-link:hover,
.mr-nav-link:focus-visible {
    color: var(--mr-primary);
}

.mr-nav-link:hover::after,
.mr-nav-links > li.is-active .mr-nav-link::after {
    transform: scaleX(1);
}

.mr-nav-links > li.is-active .mr-nav-link {
    color: var(--mr-primary);
}

.mr-nav-actions {
    display: flex;
    align-items: center;
    gap: .6rem;
    flex: none;
}

/* Menus déroulants */
.mr-nav .dropdown-menu,
.mr-topline .dropdown-menu,
.mr-topbar .dropdown-menu,
.mr-rail .dropdown-menu {
    margin-top: .5rem;
    padding: .4rem;
    border: var(--mr-border);
    border-radius: var(--mr-radius);
    background: var(--mr-surface-alt);
    box-shadow: var(--mr-shadow);
    --bs-dropdown-link-color: var(--mr-text);
    --bs-dropdown-link-hover-color: var(--mr-primary);
    --bs-dropdown-link-hover-bg: rgba(var(--mr-primary-rgb), .1);
    --bs-dropdown-link-active-color: var(--mr-on-primary);
    --bs-dropdown-link-active-bg: var(--mr-primary);
    --bs-dropdown-header-color: var(--mr-muted);
    --bs-dropdown-divider-bg: var(--mr-hairline-soft);
}

.mr-nav .dropdown-item,
.mr-topline .dropdown-item,
.mr-topbar .dropdown-item,
.mr-rail .dropdown-item {
    display: flex;
    align-items: center;
    gap: .55rem;
    border-radius: var(--mr-radius-sm);
    padding: .5rem .7rem;
    font-size: .9rem;
    font-weight: 500;
}

/* Avatar & notifications */
.mr-avatar {
    width: 26px;
    height: 26px;
    border-radius: var(--mr-radius-sm);
    object-fit: cover;
    image-rendering: pixelated;
    border: 1px solid var(--mr-hairline);
}

.mr-notif-btn {
    position: relative;
}

.mr-notif-badge {
    position: absolute;
    top: .05rem;
    right: .1rem;
    min-width: 16px;
    height: 16px;
    padding: 0 4px;
    border-radius: 99px;
    background: var(--mr-danger);
    color: #fff;
    font-family: var(--mr-font-mono);
    font-size: .62rem;
    font-weight: 700;
    line-height: 16px;
    text-align: center;
}

.mr-notif-menu {
    width: min(340px, calc(100vw - 2rem));
    max-height: 26rem;
    overflow-y: auto;
}

.mr-notif-item {
    align-items: flex-start !important;
}

.mr-notif-item .mr-notif-date {
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .7rem;
}

.mr-notif-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    flex: none;
    border-radius: var(--mr-radius-sm);
    color: #fff;
    font-size: .72rem;
}

/* Bouton hamburger */
.mr-burger {
    display: none;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    padding: 0;
    border: 1px solid var(--mr-hairline);
    border-radius: var(--mr-radius-sm);
    background: rgba(var(--mr-primary-rgb), .06);
    color: var(--mr-text);
    font-size: 1.25rem;
    cursor: pointer;
    transition: border-color var(--mr-fast) ease, background-color var(--mr-fast) ease;
}

.mr-burger:hover {
    border-color: var(--mr-primary);
    background: rgba(var(--mr-primary-rgb), .12);
}

/* ==========================================================================
   06. Menu mobile
   ========================================================================== */

.mr-drawer-backdrop {
    position: fixed;
    inset: 0;
    z-index: 1039;
    background: rgba(0, 0, 0, .6);
    backdrop-filter: blur(3px);
    -webkit-backdrop-filter: blur(3px);
    opacity: 0;
    visibility: hidden;
    transition: opacity var(--mr-med) ease, visibility var(--mr-med) ease;
}

.mr-drawer-backdrop.is-open {
    opacity: 1;
    visibility: visible;
}

.mr-drawer {
    position: fixed;
    top: 0;
    right: 0;
    z-index: 1040;
    display: flex;
    flex-direction: column;
    width: min(340px, 88vw);
    height: 100%;
    padding: 1.1rem;
    background: var(--mr-surface);
    border-left: 1px solid var(--mr-hairline-soft);
    box-shadow: -18px 0 46px rgba(0, 0, 0, .5);
    overflow-y: auto;
    transform: translateX(100%);
    visibility: hidden;
    transition: transform var(--mr-med) cubic-bezier(.4, 0, .2, 1), visibility var(--mr-med);
}

.mr-drawer.is-open {
    transform: translateX(0);
    visibility: visible;
}

.mr-drawer-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding-bottom: 1rem;
    margin-bottom: .5rem;
    border-bottom: 1px solid var(--mr-hairline-soft);
}

.mr-drawer-head img {
    height: 36px;
    width: auto;
}

.mr-drawer-close {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 38px;
    height: 38px;
    border: 1px solid var(--mr-hairline);
    border-radius: var(--mr-radius-sm);
    background: none;
    color: var(--mr-text);
    cursor: pointer;
}

.mr-drawer-nav {
    margin: 0;
    padding: .5rem 0;
    list-style: none;
}

.mr-drawer-nav a,
.mr-drawer-toggle {
    display: flex;
    align-items: center;
    gap: .6rem;
    width: 100%;
    padding: .72rem .6rem;
    border: 0;
    border-radius: var(--mr-radius-sm);
    background: none;
    color: var(--mr-text);
    font-family: var(--mr-font-body);
    font-size: .98rem;
    font-weight: 600;
    text-align: left;
    cursor: pointer;
}

.mr-drawer-nav a:hover,
.mr-drawer-toggle:hover,
.mr-drawer-nav li.is-active > a {
    background: rgba(var(--mr-primary-rgb), .1);
    color: var(--mr-primary);
}

.mr-drawer-toggle .mr-chevron {
    margin-left: auto;
    transition: transform var(--mr-med) ease;
}

.mr-drawer-toggle[aria-expanded="true"] .mr-chevron {
    transform: rotate(180deg);
}

.mr-drawer-sub {
    display: none;
    margin: 0 0 .35rem;
    padding: 0 0 0 1.1rem;
    border-left: 1px solid var(--mr-hairline-soft);
    list-style: none;
}

.mr-drawer-sub.is-open {
    display: block;
}

.mr-drawer-sub a {
    padding: .5rem .6rem;
    font-size: .92rem;
    font-weight: 500;
    color: var(--mr-muted);
}

.mr-drawer-foot {
    display: grid;
    gap: .5rem;
    margin-top: auto;
    padding-top: 1rem;
    border-top: 1px solid var(--mr-hairline-soft);
}

.mr-drawer-user {
    display: flex;
    align-items: center;
    gap: .6rem;
    margin-bottom: .3rem;
    font-weight: 600;
}

/* ==========================================================================
   07. Hero
   ========================================================================== */

.mr-hero {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: clamp(560px, 92vh, 900px);
    padding: calc(var(--mr-header-h) + 3rem) 0 5rem;
    overflow: hidden;
    text-align: center;
}

.mr-hero-media {
    position: absolute;
    inset: 0;
    background-position: center;
    background-size: cover;
    background-repeat: no-repeat;
    transform: scale(1.04);
}

/* Les eaux profondes : on noie l'image pour que le texte respire */
.mr-hero-wash {
    position: absolute;
    inset: 0;
    background:
        radial-gradient(ellipse 70% 55% at 50% 42%, rgba(var(--mr-primary-rgb), .12), transparent 70%),
        linear-gradient(180deg,
            color-mix(in srgb, var(--mr-bg) 72%, transparent) 0%,
            color-mix(in srgb, var(--mr-bg) 55%, transparent) 38%,
            color-mix(in srgb, var(--mr-bg) 88%, transparent) 78%,
            var(--mr-bg) 100%);
}

/* Rose des vents fantôme — la signature du thème */
.mr-hero-rose {
    position: absolute;
    top: 50%;
    left: 50%;
    width: min(78vh, 720px);
    aspect-ratio: 1;
    transform: translate(-50%, -50%);
    color: rgba(var(--mr-primary-rgb), .07);
    animation: mr-rotate 180s linear infinite;
    pointer-events: none;
}

.mr-hero-rose::before {
    content: '';
    position: absolute;
    inset: 12%;
    border: 1px solid rgba(var(--mr-primary-rgb), .1);
    border-radius: 50%;
}

.mr-hero-rose::after {
    content: '';
    position: absolute;
    inset: 26%;
    border: 1px dashed rgba(var(--mr-primary-rgb), .09);
    border-radius: 50%;
}

@keyframes mr-rotate {
    to { transform: translate(-50%, -50%) rotate(360deg); }
}

.mr-hero-inner {
    position: relative;
    z-index: 2;
    max-width: 60rem;
    margin: 0 auto;
}

.mr-hero-title {
    margin: 0 0 .5rem;
    font-size: clamp(2.6rem, 1.4rem + 5.4vw, 5.6rem);
    font-weight: 900;
    letter-spacing: -.03em;
    line-height: .95;
    /* Relief brun + or : le titre reprend le traitement des lettres du logo. */
    color: var(--mr-primary);
    text-shadow:
        0 3px 0 var(--mr-ink, #3f0f0f),
        0 14px 40px rgba(0, 0, 0, .6);
}

.mr-hero-subtitle {
    margin: 0 0 1rem;
    color: var(--mr-primary);
    font-family: var(--mr-font-mono);
    font-size: clamp(.82rem, .7rem + .4vw, 1rem);
    font-weight: 500;
    letter-spacing: .3em;
    text-transform: uppercase;
}

.mr-hero-text {
    max-width: 42rem;
    margin: 0 auto 2.1rem;
    color: var(--mr-text);
    font-size: clamp(1rem, .95rem + .3vw, 1.15rem);
    opacity: .88;
}

.mr-hero-actions {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .8rem;
    flex-wrap: wrap;
}

.mr-hero-actions .mr-ip {
    padding: .78rem 1.3rem;
    font-size: .95rem;
}

/* Repère de descente — une ancre, pas un chevron de plus */
.mr-hero-cue {
    position: absolute;
    left: 50%;
    bottom: 1.8rem;
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .5rem;
    padding: .5rem;
    border: 0;
    background: none;
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .64rem;
    letter-spacing: .24em;
    text-transform: uppercase;
    cursor: pointer;
    transform: translateX(-50%);
    transition: color var(--mr-fast) ease;
}

.mr-hero-cue:hover {
    color: var(--mr-primary);
}

.mr-hero-cue i {
    font-size: 1.3rem;
    animation: mr-bob 2.6s ease-in-out infinite;
}

@keyframes mr-bob {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(6px); }
}

/* Bandeau court des pages internes */
.mr-pagehead {
    position: relative;
    padding: 2.4rem 0 0;
    border-bottom: 1px solid var(--mr-hairline-soft);
}

.mr-pagehead-rule {
    display: flex;
    align-items: center;
    gap: .9rem;
    padding-bottom: 1.6rem;
    color: rgba(var(--mr-primary-rgb), .5);
}

.mr-pagehead-rule::before,
.mr-pagehead-rule::after {
    content: '';
    flex: 1;
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--mr-hairline), transparent);
}

.mr-pagehead-rule .mr-rose {
    width: 16px;
    height: 16px;
    flex: none;
}

/* ==========================================================================
   08. Bandeau statistiques — le journal de bord
   ========================================================================== */

.mr-stats {
    position: relative;
    margin-top: -2.6rem;
    z-index: 3;
}

.mr-stats-board {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background: color-mix(in srgb, var(--mr-surface-alt) 94%, transparent);
    backdrop-filter: blur(10px);
    -webkit-backdrop-filter: blur(10px);
    box-shadow: var(--mr-shadow);
    overflow: hidden;
}

.mr-stat {
    position: relative;
    padding: 1.7rem 1.4rem;
    text-align: center;
}

.mr-stat + .mr-stat::before {
    content: '';
    position: absolute;
    top: 22%;
    left: 0;
    height: 56%;
    width: 1px;
    background: var(--mr-hairline-soft);
}

.mr-stat-value {
    display: block;
    margin: 0 0 .2rem;
    color: var(--mr-primary);
    font-family: var(--mr-font-mono);
    font-size: clamp(1.7rem, 1.3rem + 1.4vw, 2.4rem);
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    line-height: 1;
}

.mr-stat-label {
    margin: 0;
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .7rem;
    letter-spacing: .18em;
    text-transform: uppercase;
}

/* ==========================================================================
   09. Titres de section — relevé sur carte marine
   ========================================================================== */

.mr-section {
    padding: var(--mr-section-y) 0;
}

.mr-section-tight {
    padding-top: 3rem;
}

.mr-section-head {
    max-width: 46rem;
    margin: 0 auto 3rem;
    text-align: center;
}

.mr-section-mark {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 1rem;
    margin-bottom: 1.1rem;
    color: var(--mr-primary);
}

.mr-section-mark::before,
.mr-section-mark::after {
    content: '';
    width: clamp(2.5rem, 8vw, 6rem);
    height: 1px;
    background: linear-gradient(90deg, transparent, var(--mr-hairline));
}

.mr-section-mark::after {
    background: linear-gradient(270deg, transparent, var(--mr-hairline));
}

.mr-section-mark .mr-rose {
    width: 20px;
    height: 20px;
    flex: none;
}

.mr-section-eyebrow {
    display: block;
    margin-bottom: .6rem;
    color: var(--mr-primary);
    font-family: var(--mr-font-mono);
    font-size: .7rem;
    letter-spacing: .26em;
    text-transform: uppercase;
}

.mr-section-title {
    margin: 0;
}

.mr-section-sub {
    margin: .9rem auto 0;
    max-width: 40rem;
    color: var(--mr-muted);
}

/* Révélation au défilement */
.mr-reveal {
    opacity: 0;
    transform: translateY(22px);
    transition: opacity var(--mr-slow) ease, transform var(--mr-slow) cubic-bezier(.16, 1, .3, 1);
}

.mr-reveal.is-visible {
    opacity: 1;
    transform: none;
}

/* ==========================================================================
   10. Actualités
   ========================================================================== */

.mr-posts {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
    gap: 1.6rem;
}

.mr-post {
    display: flex;
    flex-direction: column;
    height: 100%;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background: var(--mr-surface);
    overflow: hidden;
    transition: transform var(--mr-med) ease,
                border-color var(--mr-med) ease,
                box-shadow var(--mr-med) ease;
}

.mr-post:hover {
    transform: translateY(-5px);
    border-color: rgba(var(--mr-primary-rgb), .38);
    box-shadow: var(--mr-shadow-lift);
}

.mr-post-media {
    position: relative;
    display: block;
    aspect-ratio: 16 / 9;
    overflow: hidden;
    background: var(--mr-surface-alt);
}

.mr-post-media img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform var(--mr-slow) cubic-bezier(.16, 1, .3, 1);
}

.mr-post:hover .mr-post-media img {
    transform: scale(1.05);
}

/* Ligne de flottaison entre l'image et le texte */
.mr-post-media::after {
    content: '';
    position: absolute;
    inset: auto 0 0;
    height: 55%;
    background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--mr-surface) 92%, transparent));
}

.mr-post-body {
    display: flex;
    flex-direction: column;
    flex: 1;
    padding: 1.35rem 1.4rem 1.5rem;
}

.mr-post-meta {
    display: flex;
    align-items: center;
    gap: .8rem;
    margin-bottom: .6rem;
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .7rem;
    letter-spacing: .1em;
    text-transform: uppercase;
    flex-wrap: wrap;
}

.mr-post-meta span {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
}

.mr-post-title {
    margin: 0 0 .6rem;
    font-size: 1.3rem;
    line-height: 1.2;
}

.mr-post-title a {
    color: var(--mr-text);
}

.mr-post:hover .mr-post-title a {
    color: var(--mr-primary);
}

.mr-post-text {
    margin: 0 0 1.2rem;
    color: var(--mr-muted);
    font-size: .95rem;
}

.mr-post-link {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    margin-top: auto;
    color: var(--mr-primary);
    font-size: .82rem;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
}

.mr-post-link i {
    transition: transform var(--mr-med) ease;
}

.mr-post-link:hover i {
    transform: translateX(4px);
}

/* Écran vide — une invitation, pas une excuse */
.mr-empty {
    padding: 3.5rem 1.5rem;
    border: 1px dashed var(--mr-hairline);
    border-radius: var(--mr-radius-lg);
    color: var(--mr-muted);
    text-align: center;
}

.mr-empty i {
    display: block;
    margin-bottom: .8rem;
    color: rgba(var(--mr-primary-rgb), .5);
    font-size: 2rem;
}

.mr-empty p {
    margin: 0;
}

/* ==========================================================================
   11. Présentation
   ========================================================================== */

.mr-about {
    display: grid;
    gap: 2.6rem;
    align-items: center;
}

.mr-about.has-video {
    grid-template-columns: minmax(0, 1.05fr) minmax(0, 1fr);
}

.mr-about-text {
    font-size: 1.05rem;
    line-height: 1.8;
    white-space: pre-line;
}

.mr-about-text p:last-child {
    margin-bottom: 0;
}

.mr-video {
    position: relative;
    aspect-ratio: 16 / 9;
    border: 1px solid var(--mr-hairline);
    border-radius: var(--mr-radius-lg);
    background: var(--mr-surface);
    box-shadow: var(--mr-shadow);
    overflow: hidden;
}

.mr-video iframe {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
}

/* ==========================================================================
   12. Atouts
   ========================================================================== */

.mr-features {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 1.4rem;
}

.mr-feature {
    position: relative;
    padding: 2.1rem 1.5rem 1.8rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background: var(--mr-surface);
    text-align: center;
    overflow: hidden;
    transition: transform var(--mr-med) ease,
                border-color var(--mr-med) ease,
                box-shadow var(--mr-med) ease;
}

.mr-feature::before {
    content: '';
    position: absolute;
    inset: auto 0 0;
    height: 2px;
    background: linear-gradient(90deg, transparent, var(--mr-primary), transparent);
    transform: scaleX(0);
    transition: transform var(--mr-med) ease;
}

.mr-feature:hover {
    transform: translateY(-5px);
    border-color: rgba(var(--mr-primary-rgb), .35);
    box-shadow: var(--mr-shadow);
}

.mr-feature:hover::before {
    transform: scaleX(1);
}

.mr-feature-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 58px;
    height: 58px;
    margin-bottom: 1.1rem;
    border: 1px solid rgba(var(--mr-primary-rgb), .3);
    border-radius: var(--mr-radius);
    background: rgba(var(--mr-primary-rgb), .09);
    color: var(--mr-primary);
    font-size: 1.5rem;
    transform: rotate(45deg);
}

.mr-feature-icon i {
    transform: rotate(-45deg);
}

.mr-feature-title {
    margin: 0 0 .45rem;
    font-size: 1.25rem;
}

.mr-feature-text {
    margin: 0;
    color: var(--mr-muted);
    font-size: .95rem;
}

/* ==========================================================================
   13. Discord
   ========================================================================== */

.mr-discord {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 380px);
    gap: 2.4rem;
    align-items: center;
    padding: 2.4rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background:
        radial-gradient(ellipse 70% 120% at 0% 0%, rgba(88, 101, 242, .13), transparent 65%),
        var(--mr-surface);
}

.mr-discord-title {
    margin-bottom: .7rem;
}

.mr-discord-text {
    margin-bottom: 1.5rem;
    color: var(--mr-muted);
}

.mr-discord-widget {
    min-height: 340px;
    border: 0;
    border-radius: var(--mr-radius);
    overflow: hidden;
    background: var(--mr-surface-alt);
}

/* ==========================================================================
   14. Bandeau d'appel à l'action
   ========================================================================== */

.mr-cta {
    position: relative;
    padding: 3.2rem 2rem;
    border: 1px solid rgba(var(--mr-primary-rgb), .26);
    border-radius: var(--mr-radius-lg);
    background:
        radial-gradient(ellipse 60% 120% at 50% 0%, rgba(var(--mr-primary-rgb), .16), transparent 70%),
        var(--mr-surface-alt);
    text-align: center;
    overflow: hidden;
}

/* Trame de cordage sur les bords */
.mr-cta::before,
.mr-cta::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    height: 3px;
    background-image: repeating-linear-gradient(90deg,
        rgba(var(--mr-primary-rgb), .5) 0 8px,
        transparent 8px 16px);
}

.mr-cta::before { top: 0; }
.mr-cta::after  { bottom: 0; }

.mr-cta-title {
    margin-bottom: .6rem;
}

.mr-cta-text {
    max-width: 38rem;
    margin: 0 auto 1.9rem;
    color: var(--mr-muted);
}

.mr-cta-actions {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .8rem;
    flex-wrap: wrap;
}

/* ==========================================================================
   15. Pied de page
   ========================================================================== */

.mr-footer {
    margin-top: var(--mr-section-y);
    border-top: 1px solid var(--mr-hairline-soft);
    background: color-mix(in srgb, var(--mr-surface) 70%, var(--mr-bg));
}

.mr-footer-rope {
    height: 4px;
    background-image: repeating-linear-gradient(90deg,
        rgba(var(--mr-primary-rgb), .55) 0 10px,
        rgba(var(--mr-primary-rgb), .12) 10px 20px);
}

.mr-footer-top {
    display: grid;
    grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr) minmax(0, 1fr);
    gap: 2.4rem;
    padding: 3.4rem 0 2.6rem;
}

.mr-footer-logo {
    max-height: 54px;
    width: auto;
    margin-bottom: 1rem;
}

.mr-footer-title {
    margin-bottom: 1.1rem;
    color: var(--mr-text);
    font-family: var(--mr-font-mono);
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .22em;
    text-transform: uppercase;
}

.mr-footer-desc {
    max-width: 34rem;
    margin: 0;
    color: var(--mr-muted);
    font-size: .95rem;
}

.mr-footer-list {
    margin: 0;
    padding: 0;
    list-style: none;
}

.mr-footer-list li + li {
    margin-top: .55rem;
}

.mr-footer-list a {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    color: var(--mr-muted);
    font-size: .95rem;
    transition: color var(--mr-fast) ease, transform var(--mr-fast) ease;
}

.mr-footer-list a:hover {
    color: var(--mr-primary);
    transform: translateX(3px);
}

.mr-socials {
    display: flex;
    gap: .55rem;
    flex-wrap: wrap;
}

.mr-social {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 42px;
    height: 42px;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius);
    background: rgba(255, 255, 255, .03);
    color: var(--mr-muted);
    font-size: 1.05rem;
    transition: color var(--mr-fast) ease,
                border-color var(--mr-fast) ease,
                background-color var(--mr-fast) ease,
                transform var(--mr-fast) ease;
}

.mr-social:hover {
    transform: translateY(-3px);
    border-color: var(--mr-primary);
    background: rgba(var(--mr-primary-rgb), .12);
    color: var(--mr-primary);
}

.mr-footer-bottom {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1.2rem 0;
    border-top: 1px solid var(--mr-hairline-soft);
    color: var(--mr-muted);
    font-size: .84rem;
    flex-wrap: wrap;
}

.mr-footer-bottom p {
    margin: 0;
}

.mr-footer-bottom a {
    color: var(--mr-muted);
    text-decoration: underline;
    text-underline-offset: 3px;
}

.mr-footer-bottom a:hover {
    color: var(--mr-primary);
}

/* Retour en haut */
.mr-to-top {
    position: fixed;
    right: 1.2rem;
    bottom: 1.2rem;
    z-index: 1020;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border: 1px solid var(--mr-hairline);
    border-radius: var(--mr-radius);
    background: color-mix(in srgb, var(--mr-surface-alt) 92%, transparent);
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    color: var(--mr-primary);
    font-size: 1.1rem;
    cursor: pointer;
    opacity: 0;
    visibility: hidden;
    transform: translateY(10px);
    transition: opacity var(--mr-med) ease, visibility var(--mr-med) ease, transform var(--mr-med) ease;
}

.mr-to-top.is-visible {
    opacity: 1;
    visibility: visible;
    transform: none;
}

.mr-to-top:hover {
    border-color: var(--mr-primary);
    background: rgba(var(--mr-primary-rgb), .16);
}

/* ==========================================================================
   16. Habillage Bootstrap
   Toutes les pages qui ne sont pas l'accueil (boutique, vote, forum, profil,
   connexion, articles, plugins tiers…) utilisent les composants Bootstrap 5
   d'Azuriom. On les rhabille ici pour que l'ensemble du site reste cohérent.
   ========================================================================== */

.content {
    padding-block: 1rem;
}

/* -- Cartes -------------------------------------------------------------- */
.card {
    --bs-card-bg: var(--mr-surface);
    --bs-card-color: var(--mr-text);
    --bs-card-border-color: var(--mr-hairline-soft);
    --bs-card-border-radius: var(--mr-radius-lg);
    --bs-card-inner-border-radius: calc(var(--mr-radius-lg) - 1px);
    --bs-card-cap-bg: color-mix(in srgb, var(--mr-surface-alt) 80%, transparent);
    --bs-card-cap-color: var(--mr-text);
    --bs-card-spacer-y: 1.35rem;
    --bs-card-spacer-x: 1.4rem;
    box-shadow: var(--mr-shadow-sm);
}

.card-header,
.card-footer {
    border-color: var(--mr-hairline-soft);
}

.card-header {
    font-family: var(--mr-font-mono);
    font-size: .78rem;
    font-weight: 700;
    letter-spacing: .16em;
    text-transform: uppercase;
}

.card-title {
    font-family: var(--mr-font-display);
}

.card-footer,
.text-body-secondary,
.text-muted {
    color: var(--mr-muted) !important;
}

/* -- Boutons ------------------------------------------------------------- */
.btn {
    --bs-btn-border-radius: var(--mr-radius-sm);
    --bs-btn-padding-y: .6rem;
    --bs-btn-padding-x: 1.15rem;
    --bs-btn-font-weight: 600;
    font-family: var(--mr-font-body);
    letter-spacing: .02em;
}

.btn-primary {
    --bs-btn-bg: var(--mr-primary);
    --bs-btn-border-color: var(--mr-primary);
    --bs-btn-color: var(--mr-on-primary);
    --bs-btn-hover-bg: var(--mr-primary-bright);
    --bs-btn-hover-border-color: var(--mr-primary-bright);
    --bs-btn-hover-color: var(--mr-on-primary);
    --bs-btn-active-bg: var(--mr-primary-bright);
    --bs-btn-active-border-color: var(--mr-primary-bright);
    --bs-btn-active-color: var(--mr-on-primary);
    --bs-btn-disabled-bg: var(--mr-primary);
    --bs-btn-disabled-border-color: var(--mr-primary);
    --bs-btn-disabled-color: var(--mr-on-primary);
}

.btn-secondary {
    --bs-btn-bg: var(--mr-surface-alt);
    --bs-btn-border-color: var(--mr-hairline);
    --bs-btn-color: var(--mr-text);
    --bs-btn-hover-bg: rgba(var(--mr-primary-rgb), .16);
    --bs-btn-hover-border-color: var(--mr-primary);
    --bs-btn-hover-color: var(--mr-text);
    --bs-btn-active-bg: rgba(var(--mr-primary-rgb), .22);
    --bs-btn-active-border-color: var(--mr-primary);
    --bs-btn-active-color: var(--mr-text);
}

.btn-outline-primary {
    --bs-btn-color: var(--mr-primary);
    --bs-btn-border-color: rgba(var(--mr-primary-rgb), .55);
    --bs-btn-hover-bg: var(--mr-primary);
    --bs-btn-hover-border-color: var(--mr-primary);
    --bs-btn-hover-color: var(--mr-on-primary);
    --bs-btn-active-bg: var(--mr-primary);
    --bs-btn-active-border-color: var(--mr-primary);
    --bs-btn-active-color: var(--mr-on-primary);
}

.btn-light,
.btn-outline-light {
    --bs-btn-color: var(--mr-text);
    --bs-btn-border-color: var(--mr-hairline);
    --bs-btn-bg: transparent;
    --bs-btn-hover-bg: rgba(255, 255, 255, .08);
    --bs-btn-hover-border-color: var(--mr-primary);
    --bs-btn-hover-color: var(--mr-text);
}

.btn-link {
    --bs-btn-color: var(--mr-primary);
    --bs-btn-hover-color: var(--mr-text);
    text-decoration: none;
}

/* -- Formulaires --------------------------------------------------------- */
.form-control,
.form-select {
    padding: .65rem .85rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-sm);
    background-color: color-mix(in srgb, var(--mr-bg) 60%, var(--mr-surface));
    color: var(--mr-text);
    font-family: var(--mr-font-body);
    transition: border-color var(--mr-fast) ease, box-shadow var(--mr-fast) ease;
}

.form-control:focus,
.form-select:focus {
    border-color: var(--mr-primary);
    background-color: color-mix(in srgb, var(--mr-bg) 60%, var(--mr-surface));
    color: var(--mr-text);
    box-shadow: 0 0 0 3px rgba(var(--mr-primary-rgb), .18);
}

.form-control::placeholder {
    color: color-mix(in srgb, var(--mr-muted) 75%, transparent);
}

.form-label,
.col-form-label,
legend {
    margin-bottom: .4rem;
    color: var(--mr-text);
    font-size: .88rem;
    font-weight: 600;
}

.form-text {
    color: var(--mr-muted);
}

.form-check-input {
    background-color: color-mix(in srgb, var(--mr-bg) 60%, var(--mr-surface));
    border-color: var(--mr-hairline);
}

.form-check-input:checked {
    background-color: var(--mr-primary);
    border-color: var(--mr-primary);
}

.form-check-input:focus {
    border-color: var(--mr-primary);
    box-shadow: 0 0 0 3px rgba(var(--mr-primary-rgb), .18);
}

.input-group-text {
    border-color: var(--mr-hairline-soft);
    background: var(--mr-surface-alt);
    color: var(--mr-muted);
}

.invalid-feedback {
    color: var(--mr-danger-text);
}

.is-invalid,
.form-control.is-invalid,
.form-select.is-invalid {
    border-color: var(--mr-danger);
}

.valid-feedback {
    color: var(--mr-success-text);
}

.is-valid,
.form-control.is-valid,
.form-select.is-valid {
    border-color: var(--mr-success);
}

/* -- Tableaux ------------------------------------------------------------ */
.table {
    --bs-table-bg: transparent;
    --bs-table-color: var(--mr-text);
    --bs-table-border-color: var(--mr-hairline-soft);
    --bs-table-striped-bg: rgba(255, 255, 255, .025);
    --bs-table-striped-color: var(--mr-text);
    --bs-table-hover-bg: rgba(var(--mr-primary-rgb), .07);
    --bs-table-hover-color: var(--mr-text);
}

.table > thead {
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .72rem;
    letter-spacing: .14em;
    text-transform: uppercase;
}

/* ==========================================================================
   Tableaux du contenu (wiki, articles, forum)
   ==========================================================================
   Deux sources produisent ces tableaux, et aucune n'ajoute la classe « .table »
   de Bootstrap :

     - TinyMCE (wiki, pages, articles) écrit
       <table border="1" style="border-collapse: collapse; width: 100%">
       avec un <colgroup>, des styles EN LIGNE sur les cellules, et le plus
       souvent AUCUN <thead> : tout est dans <tbody>.
     - CommonMark (commentaires, forum) écrit un <table> nu avec un vrai
       <thead> et des attributs align="left|center|right".

   Le thème ne stylisait que « .table » : ces tableaux perdaient toute leur
   grille. Dans l'éditeur l'auteur voit un quadrillage complet, sur le site il
   ne restait que des lignes horizontales — les colonnes ne se lisaient plus.

   On rétablit donc de vrais séparateurs de colonnes. Le « :not(.table) »
   préserve les tableaux des plugins, qui portent déjà la classe Bootstrap.
   Les « !important » sont ciblés : ils ne servent qu'à neutraliser les styles
   en ligne et les attributs de présentation de TinyMCE, qui autrement
   l'emportent sur toute règle du thème.
   ========================================================================== */

.content table:not(.table) {
    width: 100%;
    margin-block: 1.25rem;
    border: 1px solid var(--mr-hairline) !important;
    border-radius: var(--mr-radius-sm);
    border-collapse: collapse !important;
    background: var(--mr-surface);
    color: var(--mr-text);
    /* Pour que le rayon rogne bien les cellules d'angle. */
    overflow: hidden;
}

/* Colonne vertébrale : séparateurs horizontaux ET verticaux.
   C'est ce qui manquait — sans eux, un tableau à quatre colonnes se lit comme
   une liste de mots posés côte à côte. */
.content table:not(.table) th,
.content table:not(.table) td {
    padding: .6rem .85rem;
    border: 0 !important;
    border-bottom: 1px solid var(--mr-hairline-soft) !important;
    vertical-align: top;
    /* Les styles en ligne de TinyMCE peuvent imposer un fond clair illisible
       sur fond sombre : on impose la transparence. */
    background-color: transparent !important;
    color: var(--mr-text) !important;
}

.content table:not(.table) th + th,
.content table:not(.table) td + td {
    border-left: 1px solid var(--mr-hairline-soft) !important;
}

.content table:not(.table) tr:last-child > th,
.content table:not(.table) tr:last-child > td {
    border-bottom: 0 !important;
}

/* -- En-tête ------------------------------------------------------------- */
/* Couvre le <thead> de CommonMark comme la « ligne d'en-tête » de TinyMCE,
   qui pose des <th> — parfois dans <thead>, parfois directement dans <tbody>. */
.content table:not(.table) thead th,
.content table:not(.table) thead td,
.content table:not(.table) tbody > tr:first-child > th {
    background-color: var(--mr-surface-alt) !important;
    color: var(--mr-text) !important;
    font-family: var(--mr-font-mono);
    font-size: .72rem;
    font-weight: 700;
    letter-spacing: .1em;
    text-align: start;
    text-transform: uppercase;
}

.content table:not(.table) thead th[align="center"],
.content table:not(.table) thead th[style*="center"] {
    text-align: center;
}

.content table:not(.table) thead th[align="right"],
.content table:not(.table) thead th[style*="right"] {
    text-align: right;
}

.content table:not(.table) thead tr,
.content table:not(.table) tbody > tr:first-child:has(> th) {
    border-bottom: 2px solid rgba(var(--mr-primary-rgb), .45) !important;
}

/* -- Lignes -------------------------------------------------------------- */
.content table:not(.table) tbody tr {
    transition: background-color .18s ease;
}

.content table:not(.table) tbody tr:hover {
    background-color: rgba(var(--mr-primary-rgb), .07) !important;
}

/* Une ligne sur deux, pour suivre l'œil sur les tableaux longs. */
.content table:not(.table) tbody tr:nth-child(even) {
    background-color: rgba(255, 255, 255, .022);
}

/* -- Contenu des cellules ------------------------------------------------- */
.content table:not(.table) code {
    white-space: nowrap;
}

.content table:not(.table) p:last-child {
    margin-bottom: 0;
}

.content table:not(.table) img {
    max-width: 100%;
    height: auto;
}

/* TinyMCE fixe les largeurs de colonnes en pourcentage via <colgroup>.
   On les laisse faire : c'est le choix de l'auteur dans l'éditeur. */

/* -- Débordement ---------------------------------------------------------- */
/* Enveloppe posée par theme.js : un tableau large défile au lieu de sortir
   de la page sur mobile. */
.content .mr-table-scroll {
    width: 100%;
    margin-block: 1.25rem;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
}

.content .mr-table-scroll > table {
    margin-block: 0;
}

/* En dessous de cette largeur, les colonnes deviennent illisibles si on les
   comprime : on laisse le tableau garder sa largeur et défiler. */
@media (max-width: 575.98px) {
    .content .mr-table-scroll > table:not(.table) {
        min-width: 34rem;
    }

    .content table:not(.table) th,
    .content table:not(.table) td {
        padding: .5rem .65rem;
    }
}

/* -- Pagination ---------------------------------------------------------- */
.pagination {
    --bs-pagination-bg: var(--mr-surface);
    --bs-pagination-color: var(--mr-text);
    --bs-pagination-border-color: var(--mr-hairline-soft);
    --bs-pagination-border-radius: var(--mr-radius-sm);
    --bs-pagination-hover-bg: rgba(var(--mr-primary-rgb), .14);
    --bs-pagination-hover-color: var(--mr-primary);
    --bs-pagination-hover-border-color: var(--mr-hairline);
    --bs-pagination-focus-bg: rgba(var(--mr-primary-rgb), .14);
    --bs-pagination-focus-color: var(--mr-primary);
    --bs-pagination-focus-box-shadow: 0 0 0 3px rgba(var(--mr-primary-rgb), .18);
    --bs-pagination-active-bg: var(--mr-primary);
    --bs-pagination-active-border-color: var(--mr-primary);
    --bs-pagination-active-color: var(--mr-on-primary);
    --bs-pagination-disabled-bg: var(--mr-surface);
    --bs-pagination-disabled-color: var(--mr-muted);
    --bs-pagination-disabled-border-color: var(--mr-hairline-soft);
    gap: .3rem;
}

.page-link {
    font-family: var(--mr-font-mono);
    font-size: .85rem;
}

/* -- Alertes ------------------------------------------------------------- */
.alert {
    --bs-alert-border-radius: var(--mr-radius);
    border-width: 1px;
    border-left-width: 3px;
}

.alert-success {
    background: rgba(var(--mr-success-rgb), .12);
    border-color: rgba(var(--mr-success-rgb), .38);
    border-left-color: var(--mr-success);
    color: var(--mr-text);
}

.alert-danger {
    background: rgba(var(--mr-danger-rgb), .12);
    border-color: rgba(var(--mr-danger-rgb), .38);
    border-left-color: var(--mr-danger);
    color: var(--mr-text);
}

/* Un avertissement se lit en or, pas en rouge : il ne doit pas être
   confondu avec une erreur (soldes insuffisants, stock limité…). */
.alert-warning {
    background: rgba(var(--mr-primary-rgb), .12);
    border-color: rgba(var(--mr-primary-rgb), .38);
    border-left-color: var(--mr-primary);
    color: var(--mr-text);
}

.alert-info {
    background: rgba(var(--mr-accent-rgb), .12);
    border-color: rgba(var(--mr-accent-rgb), .35);
    border-left-color: var(--mr-accent);
    color: var(--mr-text);
}

.alert-primary {
    background: rgba(var(--mr-primary-rgb), .1);
    border-color: rgba(var(--mr-primary-rgb), .32);
    border-left-color: var(--mr-primary);
    color: var(--mr-text);
}

/* -- Badges -------------------------------------------------------------- */
.badge {
    padding: .38em .68em;
    border-radius: var(--mr-radius-sm);
    font-family: var(--mr-font-mono);
    font-size: .7rem;
    font-weight: 600;
    letter-spacing: .06em;
}

.badge.bg-primary  { background: var(--mr-primary) !important; color: var(--mr-on-primary) !important; }
.badge.bg-secondary{ background: var(--mr-surface-alt) !important; color: var(--mr-text) !important; }
.badge.bg-success  { background: var(--mr-success) !important; color: var(--mr-on-success) !important; }
.badge.bg-danger   { background: var(--mr-danger) !important; color: var(--mr-on-danger) !important; }

/* -- Onglets & pilules --------------------------------------------------- */
.nav-tabs {
    --bs-nav-tabs-border-color: var(--mr-hairline-soft);
    --bs-nav-tabs-link-hover-border-color: transparent transparent var(--mr-primary);
    --bs-nav-tabs-link-active-color: var(--mr-primary);
    --bs-nav-tabs-link-active-bg: transparent;
    --bs-nav-tabs-link-active-border-color: transparent transparent var(--mr-primary);
    --bs-nav-link-color: var(--mr-muted);
    --bs-nav-link-hover-color: var(--mr-text);
    border-bottom-width: 1px;
}

.nav-tabs .nav-link {
    border-width: 0 0 2px;
    font-weight: 600;
}

.nav-pills {
    --bs-nav-pills-border-radius: var(--mr-radius-sm);
    --bs-nav-pills-link-active-bg: var(--mr-primary);
    --bs-nav-pills-link-active-color: var(--mr-on-primary);
    --bs-nav-link-color: var(--mr-muted);
    --bs-nav-link-hover-color: var(--mr-text);
}

/* -- Groupes de liste ---------------------------------------------------- */
.list-group {
    --bs-list-group-bg: var(--mr-surface);
    --bs-list-group-color: var(--mr-text);
    --bs-list-group-border-color: var(--mr-hairline-soft);
    --bs-list-group-border-radius: var(--mr-radius);
    --bs-list-group-action-hover-bg: rgba(var(--mr-primary-rgb), .08);
    --bs-list-group-action-hover-color: var(--mr-text);
    --bs-list-group-active-bg: var(--mr-primary);
    --bs-list-group-active-border-color: var(--mr-primary);
    --bs-list-group-active-color: var(--mr-on-primary);
}

/* -- Modales & offcanvas ------------------------------------------------- */
.modal {
    --bs-modal-bg: var(--mr-surface);
    --bs-modal-color: var(--mr-text);
    --bs-modal-border-color: var(--mr-hairline-soft);
    --bs-modal-border-radius: var(--mr-radius-lg);
    --bs-modal-header-border-color: var(--mr-hairline-soft);
    --bs-modal-footer-border-color: var(--mr-hairline-soft);
}

.offcanvas {
    --bs-offcanvas-bg: var(--mr-surface);
    --bs-offcanvas-color: var(--mr-text);
    --bs-offcanvas-border-color: var(--mr-hairline-soft);
}

.btn-close {
    filter: invert(1) grayscale(1) brightness(1.6);
}

/* -- Divers -------------------------------------------------------------- */
.progress {
    --bs-progress-bg: color-mix(in srgb, var(--mr-bg) 55%, var(--mr-surface));
    --bs-progress-bar-bg: var(--mr-primary);
    --bs-progress-border-radius: 99px;
    height: .55rem;
}

.breadcrumb {
    --bs-breadcrumb-divider-color: var(--mr-muted);
    --bs-breadcrumb-item-active-color: var(--mr-text);
    font-size: .88rem;
}

.accordion {
    --bs-accordion-bg: var(--mr-surface);
    --bs-accordion-color: var(--mr-text);
    --bs-accordion-border-color: var(--mr-hairline-soft);
    --bs-accordion-border-radius: var(--mr-radius);
    --bs-accordion-btn-bg: var(--mr-surface);
    --bs-accordion-btn-color: var(--mr-text);
    --bs-accordion-active-bg: rgba(var(--mr-primary-rgb), .1);
    --bs-accordion-active-color: var(--mr-primary);
    --bs-accordion-btn-focus-box-shadow: 0 0 0 3px rgba(var(--mr-primary-rgb), .18);
}

.tooltip {
    --bs-tooltip-bg: var(--mr-surface-alt);
    --bs-tooltip-color: var(--mr-text);
}

.popover {
    --bs-popover-bg: var(--mr-surface-alt);
    --bs-popover-border-color: var(--mr-hairline-soft);
    --bs-popover-header-bg: var(--mr-surface);
    --bs-popover-body-color: var(--mr-text);
}

.toast {
    --bs-toast-bg: var(--mr-surface-alt);
    --bs-toast-color: var(--mr-text);
    --bs-toast-border-color: var(--mr-hairline-soft);
    --bs-toast-header-bg: var(--mr-surface);
    --bs-toast-header-color: var(--mr-text);
}

.bg-body-secondary,
.bg-body-tertiary,
.bg-light {
    background-color: var(--mr-surface) !important;
    color: var(--mr-text) !important;
}

.bg-dark {
    background-color: var(--mr-surface-alt) !important;
}

.border {
    border-color: var(--mr-hairline-soft) !important;
}

.text-primary {
    color: var(--mr-primary) !important;
}

/* Contenu Markdown : articles, pages, descriptions de boutique */
.content-markdown img,
.card-body img {
    border-radius: var(--mr-radius);
}

.content-markdown blockquote,
blockquote {
    margin: 1.4rem 0;
    padding: .6rem 0 .6rem 1.2rem;
    border-left: 3px solid var(--mr-primary);
    color: var(--mr-muted);
    font-style: italic;
}

code,
kbd,
pre {
    font-family: var(--mr-font-mono);
}

:not(pre) > code {
    padding: .15em .4em;
    border-radius: var(--mr-radius-sm);
    background: rgba(var(--mr-primary-rgb), .1);
    color: var(--mr-primary);
    font-size: .88em;
}

pre {
    padding: 1rem 1.15rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius);
    background: color-mix(in srgb, var(--mr-bg) 65%, var(--mr-surface));
    overflow-x: auto;
}

/* Avatars des profils, commentaires, classements */
.rounded-circle[src*="head"],
img.avatar,
.comment img,
.user-avatar {
    image-rendering: pixelated;
}

/* ==========================================================================
   16 bis. Habillage Bootstrap — composants utilisés par les plugins
   --------------------------------------------------------------------------
   La section 16 couvrait les composants les plus courants. Cette section
   complète la liste avec tout ce que la boutique, le vote, le forum et les
   plugins tiers utilisent réellement : menus déroulants, tableaux sombres,
   variantes de boutons, utilitaires .text-bg-*, listes, spinners, options
   de <select>…

   Sans ces règles, ces composants retombaient sur les gris par défaut de
   Bootstrap : c'est l'autre moitié du problème « tout est grisé ».
   ========================================================================== */

/* -- Menus déroulants ---------------------------------------------------- */
.dropdown-menu {
    --bs-dropdown-bg: var(--mr-surface-alt);
    --bs-dropdown-color: var(--mr-text);
    --bs-dropdown-border-color: var(--mr-hairline);
    --bs-dropdown-border-radius: var(--mr-radius);
    --bs-dropdown-inner-border-radius: calc(var(--mr-radius) - 1px);
    --bs-dropdown-link-color: var(--mr-text);
    --bs-dropdown-link-hover-color: var(--mr-primary);
    --bs-dropdown-link-hover-bg: rgba(var(--mr-primary-rgb), .12);
    --bs-dropdown-link-active-color: var(--mr-on-primary);
    --bs-dropdown-link-active-bg: var(--mr-primary);
    --bs-dropdown-link-disabled-color: var(--mr-muted);
    --bs-dropdown-header-color: var(--mr-muted);
    --bs-dropdown-divider-bg: var(--mr-hairline-soft);
    box-shadow: var(--mr-shadow);
}

.dropdown-header {
    font-family: var(--mr-font-mono);
    font-size: .7rem;
    font-weight: 700;
    letter-spacing: .16em;
    text-transform: uppercase;
}

.dropdown-item {
    border-radius: var(--mr-radius-sm);
}

.dropdown-item i {
    width: 1.15em;
    text-align: center;
}

/* -- Tableaux ------------------------------------------------------------ */
.table-dark,
.table > thead.table-dark,
.table .table-dark {
    --bs-table-bg: var(--mr-surface-alt);
    --bs-table-color: var(--mr-text);
    --bs-table-border-color: var(--mr-hairline-soft);
    --bs-table-striped-bg: rgba(var(--mr-primary-rgb), .05);
    --bs-table-striped-color: var(--mr-text);
    --bs-table-hover-bg: rgba(var(--mr-primary-rgb), .08);
    --bs-table-hover-color: var(--mr-text);
}

.table-light,
.table .table-light {
    --bs-table-bg: var(--mr-surface);
    --bs-table-color: var(--mr-text);
    --bs-table-border-color: var(--mr-hairline-soft);
}

.table-active,
.table > tbody > tr.table-active > * {
    --bs-table-accent-bg: rgba(var(--mr-primary-rgb), .12);
    color: var(--mr-text);
}

.table-responsive {
    scrollbar-width: thin;
}

/* -- Boutons : variantes restantes --------------------------------------- */
.btn-success {
    --bs-btn-bg: var(--mr-success);
    --bs-btn-border-color: var(--mr-success);
    --bs-btn-color: var(--mr-on-success);
    --bs-btn-hover-bg: var(--mr-success-bright);
    --bs-btn-hover-border-color: var(--mr-success-bright);
    --bs-btn-hover-color: var(--mr-on-success);
    --bs-btn-active-bg: var(--mr-success-bright);
    --bs-btn-active-border-color: var(--mr-success-bright);
    --bs-btn-active-color: var(--mr-on-success);
    --bs-btn-disabled-bg: var(--mr-success);
    --bs-btn-disabled-border-color: var(--mr-success);
    --bs-btn-disabled-color: var(--mr-on-success);
}

.btn-danger {
    --bs-btn-bg: var(--mr-danger);
    --bs-btn-border-color: var(--mr-danger);
    --bs-btn-color: var(--mr-on-danger);
    --bs-btn-hover-bg: var(--mr-danger-bright);
    --bs-btn-hover-border-color: var(--mr-danger-bright);
    --bs-btn-hover-color: var(--mr-on-danger);
    --bs-btn-active-bg: var(--mr-danger-bright);
    --bs-btn-active-border-color: var(--mr-danger-bright);
    --bs-btn-active-color: var(--mr-on-danger);
    --bs-btn-disabled-bg: var(--mr-danger);
    --bs-btn-disabled-border-color: var(--mr-danger);
    --bs-btn-disabled-color: var(--mr-on-danger);
}

.btn-warning {
    --bs-btn-bg: var(--mr-primary);
    --bs-btn-border-color: var(--mr-primary);
    --bs-btn-color: var(--mr-on-primary);
    --bs-btn-hover-bg: var(--mr-primary-bright);
    --bs-btn-hover-border-color: var(--mr-primary-bright);
    --bs-btn-hover-color: var(--mr-on-primary);
    --bs-btn-active-bg: var(--mr-primary-bright);
    --bs-btn-active-border-color: var(--mr-primary-bright);
    --bs-btn-active-color: var(--mr-on-primary);
}

.btn-info {
    --bs-btn-bg: var(--mr-accent);
    --bs-btn-border-color: var(--mr-accent);
    --bs-btn-color: var(--mr-on-accent, #fff);
    --bs-btn-hover-bg: var(--mr-accent-bright);
    --bs-btn-hover-border-color: var(--mr-accent-bright);
    --bs-btn-hover-color: var(--mr-on-accent, #fff);
    --bs-btn-active-bg: var(--mr-accent-bright);
    --bs-btn-active-border-color: var(--mr-accent-bright);
    --bs-btn-active-color: var(--mr-on-accent, #fff);
}

.btn-dark {
    --bs-btn-bg: var(--mr-surface-alt);
    --bs-btn-border-color: var(--mr-hairline);
    --bs-btn-color: var(--mr-text);
    --bs-btn-hover-bg: rgba(var(--mr-primary-rgb), .16);
    --bs-btn-hover-border-color: var(--mr-primary);
    --bs-btn-hover-color: var(--mr-text);
    --bs-btn-active-bg: rgba(var(--mr-primary-rgb), .22);
    --bs-btn-active-border-color: var(--mr-primary);
    --bs-btn-active-color: var(--mr-text);
}

.btn-outline-secondary,
.btn-outline-dark {
    --bs-btn-color: var(--mr-text);
    --bs-btn-border-color: var(--mr-hairline);
    --bs-btn-bg: transparent;
    --bs-btn-hover-bg: rgba(var(--mr-primary-rgb), .12);
    --bs-btn-hover-border-color: var(--mr-primary);
    --bs-btn-hover-color: var(--mr-primary);
    --bs-btn-active-bg: rgba(var(--mr-primary-rgb), .18);
    --bs-btn-active-border-color: var(--mr-primary);
    --bs-btn-active-color: var(--mr-primary);
}

.btn-outline-danger {
    --bs-btn-color: var(--mr-danger);
    --bs-btn-border-color: rgba(var(--mr-danger-rgb), .55);
    --bs-btn-hover-bg: var(--mr-danger);
    --bs-btn-hover-border-color: var(--mr-danger);
    --bs-btn-hover-color: var(--mr-on-danger);
    --bs-btn-active-bg: var(--mr-danger);
    --bs-btn-active-border-color: var(--mr-danger);
    --bs-btn-active-color: var(--mr-on-danger);
}

.btn-outline-success {
    --bs-btn-color: var(--mr-success);
    --bs-btn-border-color: rgba(var(--mr-success-rgb), .55);
    --bs-btn-hover-bg: var(--mr-success);
    --bs-btn-hover-border-color: var(--mr-success);
    --bs-btn-hover-color: var(--mr-on-success);
    --bs-btn-active-bg: var(--mr-success);
    --bs-btn-active-border-color: var(--mr-success);
    --bs-btn-active-color: var(--mr-on-success);
}

.btn-outline-info {
    --bs-btn-color: var(--mr-accent);
    --bs-btn-border-color: rgba(var(--mr-accent-rgb), .55);
    --bs-btn-hover-bg: var(--mr-accent);
    --bs-btn-hover-border-color: var(--mr-accent);
    --bs-btn-hover-color: var(--mr-on-accent, #fff);
    --bs-btn-active-bg: var(--mr-accent);
    --bs-btn-active-border-color: var(--mr-accent);
    --bs-btn-active-color: var(--mr-on-accent, #fff);
}

/* Un bouton désactivé doit se voir comme tel, sans devenir illisible. */
.btn:disabled,
.btn.disabled,
fieldset:disabled .btn {
    opacity: .5;
    cursor: not-allowed;
}

/* Le vote place « .disabled » sur les liens en cooldown : on garde le compteur
   lisible plutôt que de tout éteindre. */
a.btn.disabled .vote-timer,
a.btn.disabled .badge {
    opacity: 1;
}

.btn-sm {
    --bs-btn-padding-y: .35rem;
    --bs-btn-padding-x: .7rem;
    --bs-btn-font-size: .82rem;
}

.btn-lg {
    --bs-btn-padding-y: .8rem;
    --bs-btn-padding-x: 1.5rem;
    --bs-btn-font-size: 1.02rem;
}

/* -- Utilitaires .text-bg-* (notifications, étiquettes de plugins) -------- */
.text-bg-primary { background-color: var(--mr-primary) !important; color: var(--mr-on-primary) !important; }
.text-bg-secondary { background-color: var(--mr-surface-alt) !important; color: var(--mr-text) !important; }
.text-bg-success { background-color: var(--mr-success) !important; color: var(--mr-on-success) !important; }
.text-bg-info { background-color: var(--mr-accent) !important; color: var(--mr-on-accent, #fff) !important; }
.text-bg-danger { background-color: var(--mr-danger) !important; color: var(--mr-on-danger) !important; }
.text-bg-warning { background-color: var(--mr-primary) !important; color: var(--mr-on-primary) !important; }
.text-bg-light { background-color: var(--mr-surface-alt) !important; color: var(--mr-text) !important; }
.text-bg-dark { background-color: var(--mr-surface) !important; color: var(--mr-text) !important; }

.badge.bg-warning { background: var(--mr-primary) !important; color: var(--mr-on-primary) !important; }
.badge.bg-info { background: var(--mr-accent) !important; color: var(--mr-on-accent, #fff) !important; }
.badge.bg-light { background: var(--mr-surface-alt) !important; color: var(--mr-text) !important; }
.badge.bg-dark { background: var(--mr-surface) !important; color: var(--mr-text) !important; }

/* -- Groupes de liste : la barre latérale de la boutique ------------------ */
.list-group-item {
    background-color: var(--mr-surface);
    border-color: var(--mr-hairline-soft);
    color: var(--mr-text);
}

.list-group-item-action:hover,
.list-group-item-action:focus,
a.list-group-item:hover,
a.list-group-item:focus {
    background-color: rgba(var(--mr-primary-rgb), .1);
    color: var(--mr-text);
}

.list-group-item.active,
a.list-group-item.active {
    background-color: var(--mr-primary);
    border-color: var(--mr-primary);
    color: var(--mr-on-primary);
    font-weight: 600;
}

.list-group-flush > .list-group-item {
    background-color: transparent;
    border-color: var(--mr-hairline-soft);
}

/* -- Formulaires : compléments ------------------------------------------- */
.form-control:disabled,
.form-select:disabled,
.form-control[readonly] {
    background-color: color-mix(in srgb, var(--mr-bg) 80%, var(--mr-surface));
    color: var(--mr-muted);
    cursor: not-allowed;
}

/* Les <option> natives héritent du fond de la page, pas du champ :
   sans cette règle, la liste déroulante s'ouvre en blanc sur blanc. */
.form-select option,
select option {
    background-color: var(--mr-surface-alt);
    color: var(--mr-text);
}

.form-select {
    background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23ffffff' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");
}

.form-control-sm,
.form-select-sm {
    padding: .35rem .6rem;
    font-size: .85rem;
}

.form-check-input:disabled {
    opacity: .5;
}

.input-group > .form-control:focus,
.input-group > .form-select:focus {
    z-index: 3;
}

/* -- Spinners (vote, boutique, notifications) ---------------------------- */
.spinner-border,
.spinner-grow {
    color: var(--mr-primary);
}

/* Azuriom pose « .spinner-parent » en surcouche pendant les chargements.
   On se contente d'en corriger la couleur : la position vient de base.css. */
.spinner-parent {
    background-color: rgba(var(--mr-surface-rgb), .72);
}

.spinner-border.text-white,
.spinner-grow.text-white {
    color: var(--mr-primary) !important;
}

/* -- Onglets, navigation secondaire -------------------------------------- */
.nav-link {
    color: var(--mr-muted);
}

.nav-link:hover,
.nav-link:focus {
    color: var(--mr-text);
}

.nav-link.active,
.nav-item.show .nav-link {
    color: var(--mr-primary);
}

.nav-link.disabled {
    color: color-mix(in srgb, var(--mr-muted) 60%, transparent);
}

/* -- Modales & voiles ---------------------------------------------------- */
.modal-backdrop,
.offcanvas-backdrop {
    --bs-backdrop-bg: #000;
    --bs-backdrop-opacity: .68;
}

/* Pile des surcouches — filet de sécurité.
   On réaffirme l'ordre attendu par Bootstrap pour qu'aucun élément du thème
   ne puisse passer devant une modale ouverte. Les éléments fixes du thème
   (rail, barre du haut, bouton « haut de page ») restent volontairement
   SOUS le voile : c'est ce qui donne l'effet d'assombrissement. */
.modal-backdrop   { z-index: 1050; }
.modal            { z-index: 1055; }
.offcanvas-backdrop { z-index: 1040; }
.offcanvas        { z-index: 1045; }
.popover          { z-index: 1070; }
.tooltip          { z-index: 1080; }
.toast-container  { z-index: 1090; }

/* Une modale doit rester cliquable même si un plugin l'imbrique dans une
   carte du thème qui, elle, masque ses débordements. */
.modal,
.modal-dialog,
.modal-content {
    pointer-events: auto;
}

.modal-header,
.modal-footer {
    border-color: var(--mr-hairline-soft);
}

/* -- Progression --------------------------------------------------------- */
.progress-bar {
    background-color: var(--mr-primary);
    color: var(--mr-on-primary);
}

.progress-bar-striped {
    background-image: linear-gradient(45deg,
        rgba(var(--mr-bg-rgb), .18) 25%, transparent 25%,
        transparent 50%, rgba(var(--mr-bg-rgb), .18) 50%,
        rgba(var(--mr-bg-rgb), .18) 75%, transparent 75%, transparent);
}

/* -- Alertes : variantes restantes --------------------------------------- */
.alert-secondary,
.alert-light,
.alert-dark {
    background: var(--mr-surface-alt);
    border-color: var(--mr-hairline-soft);
    border-left-color: var(--mr-muted);
    color: var(--mr-text);
}

/* -- Utilitaires de couleur --------------------------------------------- */
.bg-primary { background-color: var(--mr-primary) !important; }
.bg-success { background-color: var(--mr-success) !important; }
.bg-info { background-color: var(--mr-accent) !important; }
.bg-danger { background-color: var(--mr-danger) !important; }
.bg-warning { background-color: var(--mr-primary) !important; }
.bg-secondary { background-color: var(--mr-surface-alt) !important; }
.bg-body, .bg-body-bg { background-color: var(--mr-bg) !important; }
.bg-white { background-color: var(--mr-surface) !important; }

.text-success { color: var(--mr-success-text) !important; }
.text-info { color: var(--mr-accent) !important; }
.text-danger { color: var(--mr-danger-text) !important; }
.text-warning { color: var(--mr-primary) !important; }
.text-white, .text-light { color: var(--mr-text) !important; }
.text-dark, .text-black { color: var(--mr-text) !important; }
.text-body { color: var(--mr-text) !important; }
.text-body-emphasis { color: var(--mr-text) !important; }
.text-gray-500, .text-body-tertiary { color: var(--mr-muted) !important; }

.link-primary { color: var(--mr-primary) !important; }
.link-secondary, .link-light, .link-dark { color: var(--mr-text) !important; }

.border-primary { border-color: var(--mr-primary) !important; }
.border-secondary, .border-light, .border-dark { border-color: var(--mr-hairline) !important; }
.border-success { border-color: var(--mr-success) !important; }
.border-info { border-color: var(--mr-accent) !important; }
.border-danger { border-color: var(--mr-danger) !important; }
.border-warning { border-color: var(--mr-primary) !important; }

.shadow, .shadow-sm { box-shadow: var(--mr-shadow-sm) !important; }
.shadow-lg { box-shadow: var(--mr-shadow) !important; }

/* -- Fil d'Ariane, images, divers ---------------------------------------- */
.breadcrumb-item a { color: var(--mr-primary); }
.breadcrumb-item.active { color: var(--mr-text); }

.img-thumbnail {
    background-color: var(--mr-surface);
    border-color: var(--mr-hairline-soft);
    border-radius: var(--mr-radius);
}

.figure-caption { color: var(--mr-muted); }

.card-img-top {
    border-top-left-radius: var(--bs-card-inner-border-radius, var(--mr-radius-lg));
    border-top-right-radius: var(--bs-card-inner-border-radius, var(--mr-radius-lg));
    object-fit: cover;
}

.card-subtitle { color: var(--mr-primary); }

.card-title { color: var(--mr-text); }

del { color: var(--mr-muted); }

hr.dropdown-divider { background: none; }

/* -- Repères propres aux plugins ----------------------------------------- */

/* Boutique : la grille de packs et sa barre latérale */
#shop .card {
    transition: transform var(--mr-fast) ease, box-shadow var(--mr-fast) ease,
                border-color var(--mr-fast) ease;
}

#shop .card:hover {
    transform: translateY(-3px);
    border-color: var(--mr-hairline);
    box-shadow: var(--mr-shadow);
}

#shop .card-img-top {
    background: color-mix(in srgb, var(--mr-bg) 45%, var(--mr-surface));
    padding: .75rem;
}

/* Vote : compteur de temps restant sur chaque bouton */
.vote-timer:empty {
    display: none;
}

#vote-card [data-vote-step] .btn {
    margin: .3rem;
}

/* Zone d'alertes injectées par les plugins (vote, boutique, notifications) */
#status-message:empty {
    display: none;
}

#status-message .alert {
    margin-bottom: 1rem;
}

/* ==========================================================================
   17. Responsive
   ========================================================================== */

@media (max-width: 1199.98px) {
    .mr-nav-links {
        gap: 0;
    }

    .mr-nav-link {
        padding: .6rem .6rem;
        font-size: .88rem;
    }
}

@media (max-width: 991.98px) {
    :root {
        --mr-section-y: 4rem;
        --mr-header-h: 66px;
    }

    .mr-nav-links,
    .mr-nav-actions,
    .mr-topline {
        display: none;
    }

    .mr-burger {
        display: inline-flex;
        margin-left: auto;
    }

    .mr-nav {
        min-height: 66px;
    }

    .mr-header.is-overlay {
        background: linear-gradient(180deg, rgba(0, 0, 0, .65), transparent);
    }

    .mr-about.has-video,
    .mr-discord {
        grid-template-columns: minmax(0, 1fr);
    }

    .mr-footer-top {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    }

    .mr-footer-top > :first-child {
        grid-column: 1 / -1;
    }

    .mr-hero {
        min-height: 78vh;
        padding-top: calc(var(--mr-header-h) + 2.5rem);
    }
}

@media (max-width: 575.98px) {
    :root {
        --mr-section-y: 3.2rem;
    }

    .mr-hero-actions {
        flex-direction: column;
        align-items: stretch;
    }

    .mr-hero-actions > * {
        justify-content: center;
    }

    .mr-stats {
        margin-top: -1.5rem;
    }

    .mr-stat + .mr-stat::before {
        top: 0;
        left: 10%;
        width: 80%;
        height: 1px;
    }

    .mr-footer-top {
        grid-template-columns: minmax(0, 1fr);
        padding-top: 2.4rem;
    }

    .mr-footer-bottom {
        justify-content: center;
        text-align: center;
    }

    .mr-cta,
    .mr-discord {
        padding: 2rem 1.2rem;
    }

    .mr-brand-name {
        font-size: 1.1rem;
    }
}

/* ==========================================================================
   18. Accessibilité & mouvement réduit
   ========================================================================== */

:focus-visible {
    outline: 2px solid var(--mr-primary);
    outline-offset: 3px;
    border-radius: 2px;
}

.mr-skip {
    position: absolute;
    top: -100px;
    left: 1rem;
    z-index: 2000;
    padding: .7rem 1.1rem;
    border-radius: 0 0 var(--mr-radius) var(--mr-radius);
    background: var(--mr-primary);
    color: var(--mr-on-primary);
    font-weight: 700;
    transition: top var(--mr-fast) ease;
}

.mr-skip:focus {
    top: 0;
    color: var(--mr-on-primary);
}

.mr-sr-only {
    position: absolute !important;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }

    *,
    *::before,
    *::after {
        animation-duration: .001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .001ms !important;
    }

    .mr-reveal {
        opacity: 1;
        transform: none;
    }
}

@media print {
    .mr-header,
    .mr-drawer,
    .mr-drawer-backdrop,
    .mr-to-top,
    .mr-hero-cue,
    .mr-chart-bg {
        display: none !important;
    }

    body {
        background: #fff;
        color: #000;
    }
}

/* ==========================================================================
   19. Disposition « rail » — colonne d'icônes + barre du haut
   --------------------------------------------------------------------------
   Activée par « Disposition → Rail latéral » dans la configuration du thème.
   Le mode classique (en-tête horizontal) reste disponible : sections 05 à 07.
   ========================================================================== */

:root {
    --mr-rail-w: 78px;
    --mr-aside-w: 340px;
    --mr-gap: 1.5rem;
    --mr-container-max: 1560px;
}

/* Arrondis globaux — trois styles au choix */
body.mr-radius-soft {
    --mr-radius-sm: 4px;
    --mr-radius: 8px;
    --mr-radius-lg: 14px;
    --bs-border-radius: 8px;
}

body.mr-radius-round {
    --mr-radius-sm: 8px;
    --mr-radius: 14px;
    --mr-radius-lg: 22px;
    --bs-border-radius: 14px;
    --bs-border-radius-sm: 8px;
    --bs-border-radius-lg: 20px;
}

body.mr-radius-sharp {
    --mr-radius-sm: 0;
    --mr-radius: 2px;
    --mr-radius-lg: 4px;
    --bs-border-radius: 2px;
}

/* Conteneur large, façon tableau de bord */
.mr-container {
    width: 100%;
    max-width: var(--mr-container-max);
    margin-inline: auto;
    padding-inline: clamp(1rem, 2vw, 2rem);
}

/* ATTENTION — ne jamais remettre de « z-index » sur .mr-app.
   Bootstrap accroche le voile des modales (.modal-backdrop, z-index 1050)
   directement sur <body>. Si .mr-app porte un z-index, il devient un contexte
   d'empilement : tout ce qu'il contient — y compris les modales de la boutique
   et du vote — se retrouve peint SOUS le voile. La fenêtre s'ouvre bien, mais
   elle est grisée et n'accepte plus aucun clic. */
.mr-app {
    position: relative;
}

.mr-main {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
    margin-left: var(--mr-rail-w);
    transition: margin var(--mr-med) ease;
}

body.mr-rail-right .mr-main {
    margin-left: 0;
    margin-right: var(--mr-rail-w);
}

.mr-main > .mr-footer {
    margin-top: auto;
}

/* ---- Le rail ---------------------------------------------------------- */

.mr-rail {
    position: fixed;
    inset: 0 auto 0 0;
    z-index: 1045;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .35rem;
    width: var(--mr-rail-w);
    padding: 1rem .5rem 1.1rem;
    background:
        linear-gradient(180deg,
            var(--mr-surface-alt) 0%,
            color-mix(in srgb, var(--mr-primary) 22%, var(--mr-surface-alt)) 100%);
    border-right: 1px solid var(--mr-hairline-soft);
    box-shadow: 4px 0 24px rgba(0, 0, 0, .28);
}

body.mr-rail-right .mr-rail {
    inset: 0 0 0 auto;
    border-right: 0;
    border-left: 1px solid var(--mr-hairline-soft);
    box-shadow: -4px 0 24px rgba(0, 0, 0, .28);
}

.mr-rail-brand {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 48px;
    height: 48px;
    margin-bottom: .9rem;
    flex: none;
}

.mr-rail-brand img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    filter: drop-shadow(0 2px 6px rgba(0, 0, 0, .45));
}

.mr-rail-nav {
    width: 100%;
    flex: 1;
    min-height: 0;
}

.mr-rail-nav ul {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .3rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.mr-rail-foot {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: .4rem;
    width: 100%;
    padding-top: .8rem;
    border-top: 1px solid rgba(255, 255, 255, .08);
}

.mr-rail-item {
    position: relative;
    display: flex;
    justify-content: center;
    width: 100%;
}

.mr-rail-link {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 46px;
    height: 46px;
    padding: 0;
    border: 0;
    border-radius: var(--mr-radius);
    background: transparent;
    color: rgba(var(--mr-text-rgb), .6);
    font-size: 1.15rem;
    cursor: pointer;
    transition: color var(--mr-fast) ease,
                background-color var(--mr-fast) ease,
                transform var(--mr-fast) ease;
}

.mr-rail-link:hover,
.mr-rail-link:focus-visible {
    background: rgba(var(--mr-primary-rgb), .16);
    color: var(--mr-primary);
    transform: translateY(-1px);
}

.mr-rail-item.is-active > .mr-rail-link {
    background: rgba(var(--mr-primary-rgb), .2);
    color: var(--mr-primary);
}

.mr-rail-item.is-active > .mr-rail-link::before {
    content: '';
    position: absolute;
    left: -11px;
    width: 3px;
    height: 22px;
    border-radius: 0 3px 3px 0;
    background: var(--mr-primary);
}

body.mr-rail-right .mr-rail-item.is-active > .mr-rail-link::before {
    left: auto;
    right: -11px;
    border-radius: 3px 0 0 3px;
}

/* Info-bulle */
.mr-rail-tip {
    position: absolute;
    left: calc(100% + 12px);
    padding: .35rem .7rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-sm);
    background: var(--mr-surface);
    color: var(--mr-text);
    font-size: .8rem;
    font-weight: 600;
    white-space: nowrap;
    opacity: 0;
    visibility: hidden;
    transform: translateX(-6px);
    pointer-events: none;
    box-shadow: var(--mr-shadow-sm);
    transition: opacity var(--mr-fast) ease, transform var(--mr-fast) ease;
}

body.mr-rail-right .mr-rail-tip {
    left: auto;
    right: calc(100% + 12px);
    transform: translateX(6px);
}

.mr-rail-link:hover .mr-rail-tip,
.mr-rail-link:focus-visible .mr-rail-tip {
    opacity: 1;
    visibility: visible;
    transform: none;
}

/* Sous-menu volant */
.mr-flyout {
    position: absolute;
    top: -.4rem;
    left: calc(100% + 10px);
    z-index: 1050;
    min-width: 210px;
    padding: .5rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius);
    background: var(--mr-surface);
    box-shadow: var(--mr-shadow);
    opacity: 0;
    visibility: hidden;
    transform: translateX(-8px);
    transition: opacity var(--mr-fast) ease,
                transform var(--mr-fast) ease,
                visibility var(--mr-fast);
}

body.mr-rail-right .mr-flyout {
    left: auto;
    right: calc(100% + 10px);
    transform: translateX(8px);
}

.mr-rail-foot .mr-flyout {
    top: auto;
    bottom: -.4rem;
}

.mr-rail-item:hover > .mr-flyout,
.mr-rail-item:focus-within > .mr-flyout {
    opacity: 1;
    visibility: visible;
    transform: none;
}

.mr-flyout-head {
    display: block;
    padding: .35rem .7rem .55rem;
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .68rem;
    letter-spacing: .14em;
    text-transform: uppercase;
}

.mr-flyout-link {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: .55rem .7rem;
    border-radius: var(--mr-radius-sm);
    color: var(--mr-text);
    font-size: .9rem;
    font-weight: 500;
    transition: background-color var(--mr-fast) ease, color var(--mr-fast) ease;
}

.mr-flyout-link i {
    color: var(--mr-primary);
    font-size: .95rem;
}

.mr-flyout-link:hover,
.mr-flyout-link.is-active {
    background: rgba(var(--mr-primary-rgb), .12);
    color: var(--mr-primary);
}

.mr-flyout-link.is-danger,
.mr-flyout-link.is-danger i {
    color: var(--mr-secondary);
}

.mr-rail-avatar {
    padding: 0;
    overflow: visible;
}

.mr-rail-avatar img {
    width: 38px;
    height: 38px;
    border-radius: var(--mr-radius-sm);
    object-fit: cover;
    image-rendering: pixelated;
    border: 1px solid var(--mr-hairline);
}

.mr-rail-online {
    position: absolute;
    right: 2px;
    bottom: 2px;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--mr-accent);
    border: 2px solid var(--mr-surface-alt);
}

.mr-rail-bell .mr-notif-badge {
    top: 2px;
    right: 2px;
}

.mr-rail-bell .mr-notif-badge.is-empty {
    display: none;
}

/* ---- Barre du haut ---------------------------------------------------- */

.mr-topbar-wrap {
    position: sticky;
    top: 0;
    z-index: 1035;
}

.mr-topbar {
    padding: .75rem clamp(1rem, 2vw, 2rem);
    background: rgba(var(--mr-bg-rgb), .72);
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
    border-bottom: 1px solid transparent;
    transition: background-color var(--mr-med) ease, border-color var(--mr-med) ease;
}

.mr-topbar.is-solid {
    background: rgba(var(--mr-bg-rgb), .94);
    border-bottom-color: var(--mr-hairline-soft);
    box-shadow: var(--mr-shadow-sm);
}

.mr-topbar-inner {
    display: flex;
    align-items: center;
    gap: .75rem;
    max-width: var(--mr-container-max);
    margin-inline: auto;
}

.mr-topbar-brand {
    display: none;
    align-items: center;
    height: 40px;
}

.mr-topbar-brand img {
    max-height: 100%;
    max-width: 120px;
    object-fit: contain;
}

.mr-search {
    display: flex;
    align-items: center;
    gap: .65rem;
    flex: 1;
    max-width: 520px;
    padding: .6rem 1.1rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: 999px;
    background: var(--mr-surface);
    transition: border-color var(--mr-fast) ease;
}

.mr-search:focus-within {
    border-color: rgba(var(--mr-primary-rgb), .5);
}

.mr-search i {
    color: var(--mr-muted);
}

.mr-search input {
    width: 100%;
    border: 0;
    background: transparent;
    color: var(--mr-text);
    font-family: inherit;
    font-size: .92rem;
    outline: none;
}

.mr-search input::placeholder {
    color: var(--mr-muted);
}

.mr-topbar .mr-topbar-servers {
    flex: 1;
}

.mr-topbar-actions {
    display: flex;
    align-items: center;
    gap: .55rem;
    margin-left: auto;
}

.mr-pill {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .5rem;
    padding: .6rem 1.05rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: 999px;
    background: var(--mr-surface);
    color: var(--mr-text);
    font-size: .88rem;
    font-weight: 600;
    cursor: pointer;
    transition: border-color var(--mr-fast) ease, color var(--mr-fast) ease;
}

.mr-pill:hover,
.mr-pill:focus-visible {
    border-color: rgba(var(--mr-primary-rgb), .45);
    color: var(--mr-primary);
}

.mr-pill-icon {
    width: 44px;
    height: 44px;
    padding: 0;
}

.mr-account {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: .3rem .9rem .3rem .3rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: 999px;
    background: var(--mr-surface);
    color: var(--mr-text);
    cursor: pointer;
    transition: border-color var(--mr-fast) ease;
}

.mr-account:hover {
    border-color: rgba(var(--mr-primary-rgb), .45);
}

.mr-account-avatar {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    object-fit: cover;
    image-rendering: pixelated;
}

.mr-account-text {
    flex-direction: column;
    align-items: flex-start;
    line-height: 1.15;
}

.mr-account-name {
    font-weight: 700;
    font-size: .9rem;
}

.mr-account-role {
    color: var(--mr-primary);
    font-family: var(--mr-font-mono);
    font-size: .66rem;
    letter-spacing: .1em;
    text-transform: uppercase;
}

/* ==========================================================================
   20. Accueil en grille
   ========================================================================== */

.mr-home {
    padding: 1.6rem 0 3.5rem;
}

.mr-home-grid,
.mr-page-grid {
    display: grid;
    gap: var(--mr-gap);
    grid-template-columns: minmax(0, 1fr);
    align-items: start;
}

.mr-home-grid.has-aside {
    grid-template-columns: minmax(0, 1fr) var(--mr-aside-w);
}

.mr-home-main {
    display: flex;
    flex-direction: column;
    gap: 2.2rem;
    min-width: 0;
}

.mr-home-aside {
    display: flex;
    flex-direction: column;
    gap: var(--mr-gap);
    min-width: 0;
}

/* ---- Carte d'accueil -------------------------------------------------- */

.mr-herocard {
    position: relative;
    display: flex;
    align-items: flex-end;
    min-height: 360px;
    overflow: hidden;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background: var(--mr-surface);
}

.mr-herocard-media {
    position: absolute;
    inset: 0;
    background-size: cover;
    background-position: center;
    transform: scale(1.02);
}

.mr-herocard.has-media::after {
    content: '';
    position: absolute;
    inset: 0;
    background: linear-gradient(100deg,
        rgba(var(--mr-bg-rgb), .95) 0%,
        rgba(var(--mr-bg-rgb), .8) 42%,
        rgba(var(--mr-bg-rgb), .25) 100%);
}

.mr-herocard-body {
    position: relative;
    z-index: 2;
    max-width: 640px;
    padding: clamp(1.5rem, 3vw, 2.75rem);
}

.mr-herocard-title {
    margin: .5rem 0 .35rem;
    color: var(--mr-primary);
    font-family: var(--mr-font-display);
    font-size: clamp(1.9rem, 3.4vw, 2.9rem);
    line-height: 1.05;
    text-shadow: 0 2px 0 var(--mr-ink, #3f0f0f);
}

.mr-herocard-subtitle {
    margin: 0 0 .8rem;
    color: var(--mr-primary);
    font-weight: 600;
}

.mr-herocard-text {
    margin: 0 0 1.1rem;
    max-width: 54ch;
    color: var(--mr-muted);
}

.mr-herocard-online {
    display: flex;
    align-items: center;
    gap: .5rem;
    margin: 0 0 1.2rem;
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .85rem;
}

.mr-herocard-online strong {
    color: var(--mr-text);
}

.mr-herocard-actions {
    display: flex;
    flex-wrap: wrap;
    gap: .75rem;
}

.mr-dot {
    display: inline-block;
    width: 9px;
    height: 9px;
    border-radius: 50%;
    flex: none;
}

.mr-dot.is-on {
    background: var(--mr-accent);
    box-shadow: 0 0 0 4px rgba(var(--mr-accent-rgb), .16);
}

.mr-dot.is-off {
    background: var(--mr-secondary);
}

/* ---- Titres de bloc --------------------------------------------------- */

.mr-block-head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    margin-bottom: 1.1rem;
    flex-wrap: wrap;
}

.mr-block-title {
    display: flex;
    align-items: center;
    gap: .6rem;
    margin: 0;
    font-family: var(--mr-font-display);
    font-size: 1.55rem;
}

.mr-block-title i {
    color: var(--mr-primary);
    font-size: 1.05rem;
}

.mr-block-eyebrow {
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .68rem;
    letter-spacing: .16em;
    text-transform: uppercase;
}

.mr-panel {
    padding: clamp(1.2rem, 2.5vw, 2rem);
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background: var(--mr-surface);
}

.mr-panel .mr-about-text {
    white-space: pre-line;
}

/* Grille d'actualités resserrée dans la colonne principale */
.mr-home-main .mr-posts {
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: 1.2rem;
}

.mr-post-fallback {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
    color: rgba(var(--mr-primary-rgb), .3);
    font-size: 2.2rem;
}

.mr-home-main .mr-stats {
    margin: 0;
}

/* ==========================================================================
   21. Widgets de la colonne latérale
   ========================================================================== */

.mr-widget {
    padding: 1.25rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background: var(--mr-surface);
}

.mr-widget-title {
    display: flex;
    align-items: center;
    gap: .55rem;
    margin: 0 0 1rem;
    font-family: var(--mr-font-display);
    font-size: 1.05rem;
}

.mr-widget-title i {
    color: var(--mr-primary);
}

.mr-widget-user {
    display: flex;
    align-items: center;
    gap: .85rem;
}

.mr-widget-avatar {
    width: 52px;
    height: 52px;
    flex: none;
    border-radius: var(--mr-radius);
    object-fit: cover;
    image-rendering: pixelated;
    border: 1px solid var(--mr-hairline);
}

.mr-widget-username {
    display: block;
    font-weight: 700;
}

.mr-widget-role {
    color: var(--mr-primary);
    font-family: var(--mr-font-mono);
    font-size: .68rem;
    letter-spacing: .1em;
    text-transform: uppercase;
}

.mr-widget-go {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    margin-left: auto;
    flex: none;
    border-radius: 50%;
    background: var(--mr-surface-alt);
    color: var(--mr-text);
    transition: background-color var(--mr-fast) ease, color var(--mr-fast) ease;
}

.mr-widget-go:hover {
    background: var(--mr-primary);
    color: var(--mr-on-primary);
}

.mr-widget-actions {
    display: flex;
    flex-direction: column;
    gap: .6rem;
}

.mr-widget-action {
    display: flex;
    align-items: center;
    gap: .7rem;
    padding: .8rem 1rem;
    border: 1px solid transparent;
    border-radius: var(--mr-radius);
    background: var(--mr-surface-alt);
    color: var(--mr-text);
    font-weight: 600;
    transition: border-color var(--mr-fast) ease,
                color var(--mr-fast) ease,
                transform var(--mr-fast) ease;
}

.mr-widget-action:hover {
    border-color: rgba(var(--mr-primary-rgb), .4);
    color: var(--mr-primary);
    transform: translateX(3px);
}

.mr-widget-chev {
    margin-left: auto;
    font-size: .78rem;
    opacity: .55;
}

.mr-widget-list {
    display: flex;
    flex-direction: column;
    gap: .5rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.mr-widget-list li {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: .55rem .8rem;
    border-radius: var(--mr-radius-sm);
    background: rgba(var(--mr-surface-alt-rgb), .6);
    font-size: .9rem;
}

.mr-widget-list span {
    color: var(--mr-muted);
}

.mr-widget-list strong {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    font-family: var(--mr-font-mono);
}

.mr-widget-list strong.is-on {
    color: var(--mr-accent);
}

.mr-widget-list strong.is-off {
    color: var(--mr-secondary);
}

.mr-widget-text {
    margin: 0 0 1rem;
    color: var(--mr-muted);
    font-size: .9rem;
}

.mr-widget .mr-discord-widget {
    width: 100%;
    height: 300px;
    border: 0;
    border-radius: var(--mr-radius);
}

.mr-widget .mr-socials {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
}

/* -- Podium des meilleurs voteurs ---------------------------------------- */

/* Les trois colonnes sont alignées par le bas : c'est la hauteur du bloc
   qui traduit le rang, comme sur un vrai podium. L'ordre du DOM est déjà
   2 – 1 – 3, donc aucun réordonnancement visuel n'est nécessaire (l'ordre
   de lecture au clavier et au lecteur d'écran reste celui du balisage). */
.mr-podium {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    align-items: end;
    gap: .4rem;
    margin: 0;
    padding: 0;
    list-style: none;
}

.mr-podium-slot {
    display: flex;
    flex-direction: column;
    align-items: center;
    min-width: 0;
    text-align: center;
}

.mr-podium-name {
    display: block;
    max-width: 100%;
    margin-bottom: .3rem;
    overflow: hidden;
    color: var(--mr-text);
    font-family: var(--mr-font-mono);
    font-size: .74rem;
    font-weight: 700;
    letter-spacing: .04em;
    text-overflow: ellipsis;
    text-transform: uppercase;
    white-space: nowrap;
}

.mr-podium-1 .mr-podium-name {
    color: var(--mr-primary);
}

.mr-podium-slot.is-empty .mr-podium-name {
    color: var(--mr-muted);
}

/* ---- Le personnage ---- */
.mr-podium-skin {
    display: flex;
    align-items: flex-end;
    justify-content: center;
    width: 100%;
}

.mr-podium-skin img {
    width: auto;
    max-width: 100%;
    height: 74px;
    /* Un skin Minecraft est une texture 64×64 : sans « pixelated », le
       navigateur la lisse et le rendu devient flou. */
    image-rendering: pixelated;
    object-fit: contain;
    filter: drop-shadow(0 6px 10px rgba(0, 0, 0, .55));
}

.mr-podium-1 .mr-podium-skin img {
    height: 92px;
}

/* Repli : avatar carré d'Azuriom (jeux sans rendu de personnage). */
.mr-podium-skin img.is-avatar {
    height: 52px;
    border-radius: var(--mr-radius-sm);
}

.mr-podium-1 .mr-podium-skin img.is-avatar {
    height: 62px;
}

.mr-podium-skin img.is-ghost {
    opacity: .55;
}

/* ---- Le bloc du podium ---- */
.mr-podium-block {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: .1rem;
    width: 100%;
    padding: .4rem .25rem;
    border: 1px solid var(--mr-hairline-soft);
    border-bottom: 0;
    border-radius: var(--mr-radius-sm) var(--mr-radius-sm) 0 0;
    background: var(--mr-surface-alt);
}

/* La hauteur porte le classement. */
.mr-podium-1 .mr-podium-block { min-height: 74px; }
.mr-podium-2 .mr-podium-block { min-height: 58px; }
.mr-podium-3 .mr-podium-block { min-height: 46px; }

.mr-podium-1 .mr-podium-block {
    border-color: rgba(var(--mr-primary-rgb), .5);
    background: linear-gradient(180deg,
        rgba(var(--mr-primary-rgb), .28) 0%,
        var(--mr-surface-alt) 100%);
}

.mr-podium-2 .mr-podium-block {
    background: linear-gradient(180deg,
        rgba(var(--mr-accent-rgb), .18) 0%,
        var(--mr-surface-alt) 100%);
}

.mr-podium-rank {
    display: flex;
    align-items: center;
    gap: .25rem;
    color: var(--mr-text);
    font-family: var(--mr-font-mono);
    font-size: .68rem;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
}

.mr-podium-1 .mr-podium-rank i {
    color: var(--mr-primary);
}

.mr-podium-votes {
    color: var(--mr-muted);
    font-family: var(--mr-font-mono);
    font-size: .66rem;
}

.mr-podium-1 .mr-podium-votes {
    color: var(--mr-primary);
}

/* Sur les écrans étroits, la colonne de widgets passe pleine largeur :
   on laisse le podium respirer un peu plus. */
@media (max-width: 575.98px) {
    .mr-podium-skin img { height: 66px; }
    .mr-podium-1 .mr-podium-skin img { height: 84px; }
    .mr-podium-name { font-size: .68rem; }
}

/* ==========================================================================
   22. Pages internes — sous-menu latéral contextuel
   ========================================================================== */

.mr-page {
    padding: 1.6rem 0 3.5rem;
}

.mr-page-grid.has-aside {
    grid-template-columns: 285px minmax(0, 1fr);
}

.mr-page-aside {
    display: flex;
    flex-direction: column;
    gap: 1rem;
    position: sticky;
    top: calc(var(--mr-header-h, 76px) + 1rem);
}

.mr-aside-card {
    padding: .75rem;
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background: var(--mr-surface);
}

.mr-aside-head {
    display: flex;
    align-items: center;
    gap: .6rem;
    padding: .85rem 1rem;
    border-radius: var(--mr-radius);
    background: linear-gradient(90deg,
        rgba(var(--mr-primary-rgb), .28),
        rgba(var(--mr-primary-rgb), .06));
    font-family: var(--mr-font-display);
    font-weight: 700;
}

.mr-aside-nav {
    display: flex;
    flex-direction: column;
    gap: .25rem;
    margin: .6rem 0 0;
    padding: 0;
    list-style: none;
}

.mr-aside-nav a {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: .6rem;
    padding: .65rem .9rem;
    border-radius: var(--mr-radius);
    color: var(--mr-muted);
    font-weight: 600;
    transition: background-color var(--mr-fast) ease, color var(--mr-fast) ease;
}

.mr-aside-nav a i {
    font-size: .72rem;
    opacity: .5;
}

.mr-aside-nav a:hover {
    background: var(--mr-surface-alt);
    color: var(--mr-text);
}

.mr-aside-nav a.is-active {
    background: rgba(var(--mr-primary-rgb), .16);
    color: var(--mr-primary);
}

.mr-page-main {
    min-width: 0;
}

/* Les vues de plugins enveloppent souvent leur contenu dans un
   « .container content » (c'est l'exemple donné par la doc Azuriom). Comme le
   thème fournit déjà sa propre gouttière, ce conteneur imbriqué recentrait la
   boutique et le vote dans une colonne étroite au milieu de la page. On le
   neutralise, sans toucher aux .row / .col qu'il contient. */
.mr-page-main > .container,
.mr-page-main > .container-fluid,
.mr-page-main > .container-lg,
.mr-page-main > .container-xl,
.mr-page-main > .container-xxl {
    max-width: none;
    width: 100%;
    padding-inline: 0;
    margin-inline: 0;
}

/* ==========================================================================
   23. Responsive de la disposition « rail »
   ========================================================================== */

@media (max-width: 1399.98px) {
    :root {
        --mr-aside-w: 310px;
    }
}

@media (max-width: 1199.98px) {
    .mr-home-grid.has-aside {
        grid-template-columns: minmax(0, 1fr);
    }

    .mr-home-aside {
        display: grid;
        grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    }
}

@media (min-width: 992px) {
    .mr-topbar .mr-burger {
        display: none;
    }
}

@media (max-width: 991.98px) {
    .mr-rail {
        display: none;
    }

    .mr-main,
    body.mr-rail-right .mr-main {
        margin-left: 0;
        margin-right: 0;
    }

    .mr-topbar {
        padding: .6rem 1rem;
    }

    .mr-topbar .mr-burger {
        display: inline-flex;
    }

    .mr-topbar-brand {
        display: inline-flex;
    }

    .mr-topbar .mr-topbar-servers {
        display: none;
    }

    .mr-page-grid.has-aside {
        grid-template-columns: minmax(0, 1fr);
    }

    .mr-page-aside {
        position: static;
    }

    .mr-herocard {
        min-height: 300px;
    }

    .mr-herocard.has-media::after {
        background: linear-gradient(180deg,
            rgba(var(--mr-bg-rgb), .6) 0%,
            rgba(var(--mr-bg-rgb), .94) 70%);
    }
}

@media (max-width: 575.98px) {
    .mr-home-main .mr-posts {
        grid-template-columns: minmax(0, 1fr);
    }

    .mr-herocard-actions {
        flex-direction: column;
        align-items: stretch;
    }

    .mr-herocard-actions > * {
        justify-content: center;
    }

    .mr-search {
        display: none;
    }
}

/* Adresse du serveur, version large (bannière) */
.mr-ip-lg {
    padding: .85rem 1.35rem;
    font-size: 1rem;
}

/* Ouverture au clic (écrans tactiles) */
.mr-rail-item.has-flyout.is-open > .mr-flyout {
    opacity: 1;
    visibility: visible;
    transform: none;
}

/* Bannière pleine largeur en disposition « rail » : la barre du haut étant
   dans le flux, il ne faut pas compenser sa hauteur une seconde fois. */
body.mr-layout-rail .mr-hero {
    min-height: clamp(420px, 66vh, 720px);
    padding: 3rem 0 4rem;
    border-radius: 0;
}

body.mr-layout-rail .mr-home {
    padding-top: 2rem;
}

/* Le contenu des pages internes est posé sur un panneau, comme les cartes
   de l'accueil : les vues d'Azuriom et des plugins gardent leur structure. */
body.mr-layout-rail .mr-page-main {
    padding: clamp(1.25rem, 2.4vw, 2.25rem);
    border: 1px solid var(--mr-hairline-soft);
    border-radius: var(--mr-radius-lg);
    background: rgba(var(--mr-surface-rgb), .55);
}

body.mr-layout-rail .mr-page-main > :first-child {
    margin-top: 0;
}
