/* ============================================================
   HLLV TRACKER — "Field Command"
   Langage visuel calqué sur l'UI in-game de HLL: Vietnam :
   brume gris-vert, panneaux translucides carrés, rangées
   label/valeur, capitales espacées, chiffres maigres,
   bronze réservé aux éléments actifs.
   ============================================================ */

:root {
    /* Encres */
    --ink: #eaede3;
    --ink-2: #bcc3b3;
    --muted: #939a8b;
    --faint: #6f766a;

    /* Panneaux & filets */
    --panel: rgba(10, 14, 10, 0.42);
    --panel-deep: rgba(4, 6, 4, 0.58);
    --hairline: rgba(222, 230, 216, 0.18);
    --hairline-soft: rgba(222, 230, 216, 0.07);
    --track: rgba(0, 0, 0, 0.35);

    /* Teintes */
    --accent: #c06a33;
    --accent-hi: #d67f42;
    --accent-soft: rgba(192, 106, 51, 0.14);
    --brass: #cba368;
    --olive: #98a67a;
    --danger: #bf6250;

    --sans: "Saira", "Bahnschrift", "Segoe UI", sans-serif;
    --pad: clamp(1rem, 3vw, 2rem);
    --maxw: 1280px;
}

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

body {
    font-family: var(--sans);
    font-size: 0.95rem;
    line-height: 1.55;
    color: var(--ink);
    min-height: 100vh;
    display: flex;
    flex-direction: column;
    background:
        radial-gradient(1200px 700px at 50% -8%, rgba(178, 190, 175, 0.20), transparent 60%),
        radial-gradient(900px 500px at 82% 20%, rgba(140, 152, 138, 0.10), transparent 60%),
        radial-gradient(800px 600px at 8% 45%, rgba(104, 116, 100, 0.07), transparent 60%),
        linear-gradient(#1b211a, #11150e);
    background-attachment: fixed;
}

/* Fond personnalisé (profil) : l'image remplace le dégradé de base,
   sous un voile sombre qui préserve la lisibilité ; le grain et le
   vignettage ci-dessous restent appliqués par-dessus. */
body.custom-bg {
    background:
        linear-gradient(rgba(12, 16, 11, 0.58), rgba(9, 13, 9, 0.8)),
        var(--custom-bg-image) center / cover no-repeat,
        linear-gradient(#1b211a, #11150e);
    background-attachment: fixed;
}

/* Sur image personnalisée : panneaux plus opaques et textes nus ombrés,
   pour rester lisible quelle que soit la luminosité de l'image. */
body.custom-bg .panel { background: rgba(8, 11, 8, 0.68); }

body.custom-bg .statrow__label { background: linear-gradient(90deg, rgba(4, 7, 4, 0.78), rgba(4, 7, 4, 0.48)); }
body.custom-bg .statrow__value { background: rgba(3, 5, 3, 0.8); }

body.custom-bg .sect h2,
body.custom-bg .sect__note,
body.custom-bg .hero-stat__label {
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.9);
}

body.custom-bg .hero-stat__value {
    text-shadow: 0 2px 16px rgba(0, 0, 0, 0.85);
}

/* Grain + vignette (le "brouillard" du jeu) */
body::before {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    opacity: 0.4;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.035 0'/%3E%3C/filter%3E%3Crect width='140' height='140' filter='url(%23n)'/%3E%3C/svg%3E");
}

body::after {
    content: "";
    position: fixed;
    inset: 0;
    z-index: 0;
    pointer-events: none;
    background: radial-gradient(125% 95% at 50% 38%, transparent 55%, rgba(3, 5, 3, 0.5) 100%);
}

main, .footer, .nav { position: relative; z-index: 1; }

main { flex: 1; }

.mono { letter-spacing: 0.1em; }

::selection { background: var(--accent); color: #14100a; }

:focus-visible { outline: 1px solid var(--accent-hi); outline-offset: 2px; }

img { max-width: 100%; display: block; }

a { color: var(--accent-hi); }

button, select, input { font: inherit; color: inherit; }

button { cursor: pointer; background: none; border: none; }

/* Barre de défilement fine, comme le jeu */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-track { background: rgba(0, 0, 0, 0.25); }
::-webkit-scrollbar-thumb { background: rgba(222, 230, 216, 0.18); }
::-webkit-scrollbar-thumb:hover { background: rgba(222, 230, 216, 0.3); }

@keyframes rise {
    to { opacity: 1; transform: none; }
}

/* ============================================================
   Boutons
   ============================================================ */

.btn {
    display: inline-block;
    font-size: 0.64rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    text-decoration: none;
    text-align: center;
    color: var(--ink-2);
    background: transparent;
    border: 1px solid var(--hairline);
    padding: 0.7rem 1.1rem;
    transition: border-color 0.15s, color 0.15s, background 0.15s;
    cursor: pointer;
}

.btn:hover {
    border-color: var(--accent);
    color: var(--ink);
    background: var(--accent-soft);
}

/* Le style "onglet actif" du jeu : contour bronze fin */
.btn--accent {
    border-color: var(--accent);
    color: var(--accent-hi);
    background: rgba(192, 106, 51, 0.10);
}

.btn--accent:hover { background: rgba(192, 106, 51, 0.2); color: #e89058; }

.btn-steam {
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    text-decoration: none;
    color: var(--ink);
    background: rgba(23, 32, 43, 0.85);
    border: 1px solid #31435a;
    padding: 0.75rem 1.3rem;
    transition: border-color 0.15s, background 0.15s;
}

.btn-steam:hover { border-color: #66c0f4; background: rgba(27, 40, 56, 0.95); }

.btn-steam svg { color: #66c0f4; flex-shrink: 0; }

.btn-steam--small { padding: 0.45rem 0.9rem; font-size: 0.6rem; }

/* ============================================================
   Navbar
   ============================================================ */

.nav {
    position: sticky;
    top: 0;
    z-index: 30;
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 1.2rem;
    height: 64px;
    padding: 0 var(--pad);
    background: rgba(7, 10, 7, 0.78);
    backdrop-filter: blur(14px);
    border-bottom: 1px solid var(--hairline-soft);
}

.nav__brand {
    justify-self: start;
    display: flex;
    align-items: center;
    gap: 0.7rem;
    text-decoration: none;
    white-space: nowrap;
}

/* Insigne : étoile dans un carré bronze */
.nav__emblem {
    width: 28px;
    height: 28px;
    display: grid;
    place-items: center;
    font-size: 0.8rem;
    color: var(--accent-hi);
    border: 1px solid var(--accent);
    background: var(--accent-soft);
    flex-shrink: 0;
}

.nav__word {
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 0.34em;
    text-transform: uppercase;
    color: var(--ink);
}

.nav__word b { color: var(--accent-hi); font-weight: 600; }

.nav__right {
    justify-self: end;
    display: flex;
    align-items: center;
    gap: 1rem;
    min-width: 0;
}

.nav__search { flex: 0 1 300px; }

.nav__search input {
    width: 100%;
    font-size: 0.66rem;
    letter-spacing: 0.14em;
    color: var(--ink);
    background: rgba(0, 0, 0, 0.35);
    border: 1px solid var(--hairline-soft);
    padding: 0.5rem 0.9rem;
    transition: border-color 0.15s;
}

.nav__search input:focus { border-color: var(--accent); outline: none; }
.nav__search input::placeholder { color: var(--faint); }

.nav__auth {
    display: flex;
    align-items: center;
    gap: 0.9rem;
    margin-left: auto;
    flex-shrink: 0;
}

.userchip {
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
    text-decoration: none;
    color: var(--ink-2);
    font-size: 0.7rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    border: 1px solid var(--hairline-soft);
    padding: 0.25rem 0.8rem 0.25rem 0.25rem;
    max-width: 200px;
    transition: border-color 0.15s, color 0.15s;
}

.userchip:hover { border-color: var(--accent); color: var(--ink); }

.userchip img { width: 24px; height: 24px; border: 1px solid var(--hairline-soft); }

.userchip span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.nav__logout {
    font-size: 0.58rem;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--faint);
    text-decoration: none;
}

.nav__logout:hover { color: var(--danger); }

/* ============================================================
   Panneaux & sections
   ============================================================ */

.panel {
    background: var(--panel);
    border: 1px solid var(--hairline-soft);
    backdrop-filter: blur(6px);
}

.sect-block { margin-bottom: 2rem; }

.sect {
    display: flex;
    align-items: center;
    gap: 1.1rem;
    margin-bottom: 0.9rem;
}

.sect h2 {
    font-size: 0.64rem;
    font-weight: 600;
    letter-spacing: 0.34em;
    text-transform: uppercase;
    color: var(--muted);
    white-space: nowrap;
}

.sect__rule { flex: 1; height: 1px; background: var(--hairline-soft); }

.sect__note {
    font-size: 0.6rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--faint);
    white-space: nowrap;
}

.duo {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.9rem;
}

.chartpanel { padding: 1.1rem 1.25rem 1.25rem; }

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

.chartpanel__head h3 {
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: var(--ink-2);
}

.chartpanel__note {
    font-size: 0.58rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--faint);
    text-align: right;
}

/* ============================================================
   Page profil — layout
   ============================================================ */

.profile {
    max-width: var(--maxw);
    width: 100%;
    margin: 0 auto;
    padding: 1.6rem var(--pad) 3rem;
}

.layout {
    display: grid;
    grid-template-columns: 270px minmax(0, 1fr);
    gap: 1.2rem;
    align-items: start;
}

/* ----- Sidebar (fiche du soldat, comme le panneau gauche du jeu) ----- */

.sidebar {
    position: sticky;
    top: 76px;
    padding: 1.6rem 1.4rem;
    display: flex;
    flex-direction: column;
    gap: 1.2rem;
}

.sidebar__name {
    text-align: center;
    font-size: 1rem;
    font-weight: 600;
    letter-spacing: 0.34em;
    text-transform: uppercase;
    color: var(--ink);
    overflow-wrap: anywhere;
}

.sidebar__avatar { padding: 0 0.6rem; }

.sidebar__avatar img {
    width: 100%;
    border: 1px solid var(--hairline);
    filter: saturate(0.8) contrast(1.05);
}

.sidebar__status {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    font-size: 0.6rem;
    font-weight: 500;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--muted);
}

.sidebar__status .dot {
    width: 6px;
    height: 6px;
    background: var(--faint);
    flex-shrink: 0;
}

.sidebar__status.is-online { color: var(--olive); }
.sidebar__status.is-online .dot { background: var(--olive); box-shadow: 0 0 8px rgba(152, 166, 122, 0.8); }

.sidebar__level {
    text-align: center;
    padding: 1.1rem 0 1.2rem;
    border-top: 1px solid var(--hairline-soft);
    border-bottom: 1px solid var(--hairline-soft);
}

.sidebar__level-label {
    font-size: 0.6rem;
    font-weight: 500;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 0.4rem;
}

.sidebar__level-value {
    font-size: 3rem;
    font-weight: 200;
    line-height: 1;
    color: #f4f6f0;
}

.sidebar__level-value--small {
    font-size: 0.9rem;
    font-weight: 400;
    letter-spacing: 0.1em;
}

.sidebar__rows { list-style: none; }

.sidebar__rows li {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 1rem;
    padding: 0.5rem 0;
    border-top: 1px solid var(--hairline-soft);
}

.sidebar__rows li:first-child { border-top: none; padding-top: 0; }

.sidebar__rows li span:first-child {
    font-size: 0.58rem;
    font-weight: 500;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--muted);
    white-space: nowrap;
}

.sidebar__rows li span:last-child {
    font-size: 0.76rem;
    color: var(--ink-2);
    text-align: right;
}

.sidebar__rows .ok { color: var(--olive); }

.sidebar__actions { display: flex; flex-direction: column; gap: 0.5rem; }

/* ----- Personnalisation (propriétaire) ----- */

.sidebar__custom {
    border-top: 1px solid var(--hairline-soft);
    padding-top: 1.1rem;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.sidebar__custom-label {
    font-size: 0.58rem;
    font-weight: 500;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--muted);
}

.bgpicker {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 4px;
}

.bgpicker__tile {
    aspect-ratio: 16 / 10;
    border: 1px solid var(--hairline-soft);
    background-color: var(--panel-deep);
    background-size: cover;
    background-position: center;
    cursor: pointer;
    padding: 0;
    transition: border-color 0.15s, opacity 0.15s;
    opacity: 0.85;
}

.bgpicker__tile:hover { border-color: var(--hairline); opacity: 1; }

/* Sélection = contour bronze, comme l'onglet actif du jeu */
.bgpicker__tile.is-active {
    border-color: var(--accent);
    box-shadow: 0 0 0 1px var(--accent);
    opacity: 1;
}

.bgpicker__tile--none {
    display: grid;
    place-items: center;
    font-size: 0.5rem;
    font-weight: 600;
    letter-spacing: 0.24em;
    color: var(--faint);
    background: linear-gradient(#1b211a, #11150e);
}

.sidebar__custom-hint {
    min-height: 1em;
    font-size: 0.56rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--olive);
}

.sidebar__custom-hint.is-error { color: var(--danger); }

/* ----- Overview : gros chiffres fins (l'"APERÇU" du jeu) ----- */

.herostats {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-around;
    gap: 1.8rem 2.5rem;
    padding: 1.3rem 0.5rem 1.7rem;
}

.hero-stat {
    text-align: center;
    opacity: 0;
    transform: translateY(8px);
    animation: rise 0.55s ease forwards;
    animation-delay: calc(var(--i, 0) * 80ms);
}

.hero-stat__label {
    font-size: 0.62rem;
    font-weight: 500;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 0.5rem;
}

.hero-stat__value {
    font-size: clamp(2.3rem, 4.5vw, 3.2rem);
    font-weight: 200;
    line-height: 1;
    letter-spacing: 0.02em;
    color: #f4f6f0;
}

.hero-stat__value i {
    font-style: normal;
    font-size: 0.45em;
    font-weight: 400;
    color: var(--ink-2);
    margin: 0 0.08em;
}

/* Progression du jour sous les gros chiffres */
.hero-stat__delta {
    margin-top: 0.45rem;
    font-size: 0.56rem;
    font-weight: 500;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--faint);
}

.hero-stat__delta.is-up { color: var(--olive); }
.hero-stat__delta.is-live { color: var(--accent-hi); }

/* Point "live" pulsant */
@keyframes livepulse {
    0%, 100% { opacity: 1; }
    50% { opacity: 0.3; }
}

.livedot {
    display: inline-block;
    width: 7px;
    height: 7px;
    background: var(--olive);
    margin-right: 0.45rem;
    vertical-align: 1px;
    animation: livepulse 1.7s ease-in-out infinite;
    flex-shrink: 0;
}

.hero-stat__delta.is-live .livedot { background: var(--accent-hi); }

/* ----- Rangées label / valeur (la section "COMBAT" du jeu) ----- */

.statrows {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.55rem 1.4rem;
}

.statrow {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 92px;
    column-gap: 2px;
    opacity: 0;
    transform: translateY(6px);
    animation: rise 0.45s ease forwards;
    animation-delay: calc(var(--i, 0) * 50ms);
}

.statrow__label {
    display: flex;
    align-items: center;
    min-height: 46px;
    padding: 0 1.1rem;
    background: linear-gradient(90deg, rgba(4, 7, 4, 0.6), rgba(4, 7, 4, 0.26));
    border-left: 1px solid var(--hairline-soft);
    font-size: 0.66rem;
    font-weight: 500;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--ink-2);
}

.statrow__value {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    padding: 0 1rem;
    background: var(--panel-deep);
    font-size: 1.1rem;
    font-weight: 300;
    color: #f2f4ee;
    white-space: nowrap;
    transition: background 0.15s, color 0.15s;
}

.statrow:hover .statrow__value { background: rgba(3, 5, 3, 0.78); color: #fff; }
.statrow:hover .statrow__label { color: var(--ink); }

/* ============================================================
   Graphiques
   ============================================================ */

/* ----- Colonnes (activité journalière) ----- */

.colchart {
    position: relative;
    display: flex;
    align-items: stretch;
    gap: 4px;
    height: 168px;
}

/* Aucune activité : l'axe reste visible, la légende flotte au centre */
.colchart__caption {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 30px;
    display: grid;
    place-items: center;
    text-align: center;
    font-size: 0.62rem;
    font-weight: 500;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--muted);
    padding: 0 1.5rem;
    pointer-events: none;
}

/* ----- Ligne "Total kills" ----- */

.chartpanel--wide { grid-column: 1 / -1; }

.linechart { height: 210px; }

.linechart svg { display: block; max-width: 100%; }

.linechart text {
    font-family: var(--sans);
    font-size: 10px;
    font-weight: 500;
    letter-spacing: 0.08em;
    fill: var(--muted);
}

.linechart .end-label {
    font-size: 14px;
    font-weight: 600;
    letter-spacing: 0.04em;
    fill: #f2f4ee;
}

.linechart .grid { stroke: var(--hairline-soft); stroke-width: 1; }

.linechart .area { fill: rgba(192, 106, 51, 0.12); }

.linechart .line {
    fill: none;
    stroke: var(--accent);
    stroke-width: 2;
    stroke-linejoin: round;
    stroke-linecap: round;
}

.linechart .dot {
    fill: var(--accent);
    stroke: #11150e;
    stroke-width: 2;
}

.linechart .hit { fill: transparent; pointer-events: all; }

.linechart .hit:hover + .dot,
.linechart .hit:hover { cursor: crosshair; }

.col { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.col__cap {
    height: 16px;
    text-align: center;
    font-size: 0.6rem;
    font-weight: 500;
    letter-spacing: 0.08em;
    color: var(--ink-2);
    white-space: nowrap;
}

.col__track {
    flex: 1;
    display: flex;
    align-items: flex-end;
    border-bottom: 1px solid var(--hairline-soft);
}

.col__bar {
    width: 100%;
    max-width: 26px;
    margin: 0 auto;
    background: var(--accent);
    transition: height 0.7s cubic-bezier(0.2, 0.7, 0.2, 1), background 0.15s;
}

.col--zero .col__bar { background: var(--accent-soft); }

.col:hover .col__bar { background: var(--accent-hi); }
.col--zero:hover .col__bar { background: var(--accent-soft); }

.col__day {
    text-align: center;
    font-size: 0.56rem;
    letter-spacing: 0.06em;
    color: var(--faint);
    margin-top: 0.4rem;
}

/* ----- Jauge & donut ----- */

.completion, .killsplit {
    display: flex;
    align-items: center;
    gap: 1.8rem;
}

.gauge, .donut { position: relative; width: 132px; height: 132px; flex-shrink: 0; }

.gauge svg, .donut svg { transform: rotate(-90deg); }

.gauge__track { stroke: rgba(192, 106, 51, 0.15); }

.gauge__fill {
    stroke: var(--accent);
    stroke-linecap: butt;
    transition: stroke-dashoffset 1s cubic-bezier(0.2, 0.7, 0.2, 1);
}

.gauge__center, .donut__center {
    position: absolute;
    inset: 0;
    display: grid;
    place-content: center;
    text-align: center;
}

.gauge__pct {
    font-size: 1.9rem;
    font-weight: 200;
    line-height: 1;
    color: #f4f6f0;
}

.gauge__sub {
    font-size: 0.52rem;
    font-weight: 500;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--muted);
    margin-top: 0.3rem;
}

.completion__facts { display: flex; flex-direction: column; gap: 0.9rem; min-width: 0; }

.fact__label {
    font-size: 0.56rem;
    font-weight: 500;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--muted);
}

.fact__value { font-size: 0.85rem; font-weight: 500; color: var(--ink-2); margin-top: 0.2rem; }

.fact__value .pct { color: var(--faint); font-weight: 400; font-size: 0.74rem; }

.legend { display: flex; flex-direction: column; gap: 0.8rem; }

.legend__item {
    display: grid;
    grid-template-columns: 10px auto;
    grid-template-rows: auto auto;
    column-gap: 0.7rem;
    align-items: center;
}

.legend__swatch { grid-row: 1 / 3; width: 10px; height: 10px; }

.legend__name {
    font-size: 0.6rem;
    font-weight: 500;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--muted);
}

.legend__value { font-size: 1.3rem; font-weight: 300; line-height: 1.15; color: #f2f4ee; }

.legend__value .pct { font-size: 0.62rem; color: var(--faint); font-weight: 400; margin-left: 0.5rem; letter-spacing: 0.08em; }

/* ----- Barres horizontales (cartes / modes) ----- */

.hbars { display: flex; flex-direction: column; gap: 0.7rem; }

.hbar {
    display: grid;
    grid-template-columns: 128px 1fr 52px;
    align-items: center;
    gap: 0.9rem;
}

.hbar__name {
    font-size: 0.76rem;
    font-weight: 500;
    color: var(--ink-2);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    transition: color 0.15s;
}

.hbar:hover .hbar__name { color: var(--ink); }

.hbar__track { height: 14px; background: var(--track); overflow: hidden; }

.hbar__fill {
    display: block;
    height: 100%;
    background: var(--accent);
    transition: width 0.8s cubic-bezier(0.2, 0.7, 0.2, 1);
}

.hbar.is-done .hbar__fill { background: var(--olive); }

.hbar__val {
    font-size: 0.62rem;
    font-weight: 500;
    letter-spacing: 0.1em;
    color: var(--muted);
    text-align: right;
    white-space: nowrap;
}

.hbar.is-done .hbar__val { color: var(--olive); }

/* ============================================================
   Succès
   ============================================================ */

.achpanel { padding: 1.1rem 1.25rem 0.6rem; }

.ach-toolbar {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.6rem;
    padding-bottom: 1rem;
    border-bottom: 1px solid var(--hairline-soft);
}

.ach-toolbar input[type="search"] {
    flex: 1 1 220px;
    min-width: 0;
    font-size: 0.66rem;
    letter-spacing: 0.12em;
    color: var(--ink);
    background: rgba(0, 0, 0, 0.35);
    border: 1px solid var(--hairline-soft);
    padding: 0.55rem 0.9rem;
    transition: border-color 0.15s;
}

.ach-toolbar input[type="search"]:focus { border-color: var(--accent); outline: none; }
.ach-toolbar input::placeholder { color: var(--faint); }

.filters { display: flex; gap: 0.4rem; }

.filter {
    font-size: 0.6rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--muted);
    border: 1px solid var(--hairline-soft);
    background: transparent;
    padding: 0.5rem 0.95rem;
    transition: color 0.15s, border-color 0.15s, background 0.15s;
}

.filter:hover { border-color: var(--hairline); color: var(--ink-2); }

/* Onglet actif = contour bronze, comme "STATISTIQUES" dans le jeu */
.filter.is-active {
    border-color: var(--accent);
    color: var(--accent-hi);
    background: var(--accent-soft);
}

.ach-toolbar select {
    font-size: 0.62rem;
    letter-spacing: 0.1em;
    color: var(--ink-2);
    background: rgba(0, 0, 0, 0.35);
    border: 1px solid var(--hairline-soft);
    padding: 0.5rem 0.7rem;
    cursor: pointer;
}

.ach-toolbar select option { background: #171c16; }

.ach-list { display: flex; flex-direction: column; }

.ach-row {
    display: grid;
    grid-template-columns: 48px minmax(0, 1fr) 180px 130px;
    align-items: center;
    gap: 1.1rem;
    padding: 0.75rem 0.4rem;
    border-top: 1px solid var(--hairline-soft);
    opacity: 0;
    transform: translateY(6px);
    animation: rise 0.4s ease forwards;
    animation-delay: calc(var(--i, 0) * 20ms);
    transition: background 0.15s;
}

.ach-row:first-child { border-top: none; }

.ach-row:hover { background: rgba(255, 255, 255, 0.025); }

.ach-row.is-unlocked { box-shadow: inset 2px 0 0 var(--accent); }

.ach-row__icon {
    position: relative;
    width: 48px;
    height: 48px;
    overflow: hidden;
    border: 1px solid var(--hairline-soft);
}

.ach-row__icon img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.ach-row__icon .color { opacity: 1; transition: opacity 0.3s; }
.ach-row.is-locked .ach-row__icon .color { opacity: 0; }
.ach-row.is-locked:hover .ach-row__icon .color { opacity: 0.55; }

.ach-row__icon-fallback {
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
    color: var(--faint);
    background: var(--panel-deep);
}

.ach-row__name {
    font-size: 0.85rem;
    font-weight: 500;
    letter-spacing: 0.04em;
    line-height: 1.25;
    color: var(--ink);
}

.ach-row.is-locked .ach-row__name { color: var(--ink-2); }

.ach-row__desc {
    font-size: 0.74rem;
    color: var(--muted);
    line-height: 1.35;
    margin-top: 0.15rem;
}

.rarity { min-width: 0; }

.rarity__bar {
    height: 3px;
    background: var(--track);
    overflow: hidden;
    margin-bottom: 0.4rem;
    display: block;
}

.rarity__fill { display: block; height: 100%; background: var(--muted); }

.rarity__text {
    display: flex;
    justify-content: space-between;
    gap: 0.6rem;
    font-size: 0.56rem;
    font-weight: 500;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--faint);
}

.rarity--uncommon .rarity__fill { background: var(--olive); }
.rarity--uncommon .rarity__tier { color: var(--olive); }
.rarity--rare .rarity__fill { background: var(--accent); }
.rarity--rare .rarity__tier { color: var(--accent-hi); }
.rarity--legendary .rarity__fill { background: var(--brass); }
.rarity--legendary .rarity__tier { color: var(--brass); }

.ach-row__status {
    font-size: 0.58rem;
    font-weight: 500;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--faint);
    text-align: right;
    line-height: 1.5;
}

.ach-row.is-unlocked .ach-row__status { color: var(--olive); }

.ach-row__status .secret { color: var(--danger); }

.ach-empty {
    padding: 2rem;
    text-align: center;
    color: var(--muted);
    font-size: 0.8rem;
    letter-spacing: 0.06em;
}

.generated {
    text-align: center;
    font-size: 0.56rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--faint);
    margin-top: 1rem;
}

/* ============================================================
   Notices
   ============================================================ */

.notice[hidden] { display: none; }

.notice {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 1.1rem 1.3rem;
    margin-bottom: 2rem;
    color: var(--ink-2);
    font-size: 0.82rem;
    box-shadow: inset 2px 0 0 var(--accent);
}

.notice strong {
    color: var(--ink);
    font-weight: 600;
    letter-spacing: 0.06em;
}

/* ============================================================
   Landing
   ============================================================ */

.landing {
    max-width: var(--maxw);
    width: 100%;
    margin: 0 auto;
    padding: 3rem var(--pad) 4rem;
}

/* ----- Hero plein écran sur image du jeu ----- */

/* Le header flotte en surimpression sur le hero de la landing */
.page-landing .nav {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    background: linear-gradient(180deg, rgba(5, 8, 5, 0.78), rgba(5, 8, 5, 0));
    border-bottom: none;
    backdrop-filter: none;
}


.lhero {
    position: relative;
    min-height: clamp(560px, 86vh, 900px);
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

/* Image de secours affichée instantanément ; le diaporama (landing.js)
   empile ensuite des .lhero__slide par-dessus. */
.lhero__bg {
    position: absolute;
    inset: 0;
    background: url("images/backgrounds/1.jpg") center 28% / cover no-repeat;
    overflow: hidden;
}

.lhero__slide {
    position: absolute;
    inset: 0;
    background-size: cover;
    background-position: center 28%;
    opacity: 0;
    transition: opacity 1.8s ease;
    transform: translateZ(0) scale(1.06);
    will-change: transform, opacity;
    backface-visibility: hidden;
}

.lhero__slide.is-active {
    opacity: 1;
    animation: kenburns 14s linear forwards;
}

/* Zoom lent GPU-friendly : base > 1 (pas de re-rasterisation),
   timing linéaire (l'ease-out rend les derniers pixels saccadés). */
@keyframes kenburns {
    from { transform: translateZ(0) scale(1.06); }
    to { transform: translateZ(0) scale(1.16); }
}

.lhero__slide.kb-0 { transform-origin: 50% 30%; }
.lhero__slide.kb-1 { transform-origin: 22% 65%; }
.lhero__slide.kb-2 { transform-origin: 78% 45%; }

.lhero__veil {
    position: absolute;
    inset: 0;
    background:
        radial-gradient(900px 500px at 50% 46%, rgba(8, 11, 8, 0.68), rgba(8, 11, 8, 0.3) 62%, transparent 100%),
        linear-gradient(180deg, rgba(8, 11, 8, 0.55), rgba(8, 11, 8, 0.22) 32%, rgba(8, 11, 8, 0.3) 66%, rgba(17, 21, 14, 0.97) 100%);
}

/* ----- Hero centré, focalisé sur la recherche ----- */

.lhero__center {
    position: relative;
    z-index: 1;
    flex: 1;
    width: 100%;
    max-width: 760px;
    margin: 0 auto;
    padding: 7.5rem var(--pad) 3rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
}

.lhero__center h1 {
    font-size: clamp(1.4rem, 3.4vw, 2.35rem);
    font-weight: 500;
    line-height: 1.3;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: #f4f6f0;
    text-shadow: 0 2px 26px rgba(0, 0, 0, 0.75);
}

.lhero__center h1 span { color: var(--accent-hi); }

/* Barre de recherche unique, façon console */
.herosearch {
    position: relative;
    display: flex;
    width: min(620px, 100%);
    margin-top: 2.4rem;
    border: 1px solid var(--hairline);
    background: rgba(4, 6, 4, 0.62);
    backdrop-filter: blur(8px);
    transition: border-color 0.15s;
}

/* Suggestions (recherche par pseudo) */
.herosearch__drop {
    position: absolute;
    top: calc(100% + 1px);
    left: -1px;
    right: -1px;
    z-index: 6;
    background: rgba(5, 8, 5, 0.97);
    border: 1px solid var(--accent);
    border-top: none;
    max-height: 300px;
    overflow-y: auto;
    text-align: left;
}

.herosearch__item {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    padding: 0.55rem 1rem;
    text-decoration: none;
    border-top: 1px solid var(--hairline-soft);
    transition: background 0.12s;
}

.herosearch__item:first-child { border-top: none; }

.herosearch__item:hover { background: rgba(192, 106, 51, 0.12); }

.herosearch__item img {
    width: 26px;
    height: 26px;
    border: 1px solid var(--hairline-soft);
    flex-shrink: 0;
}

.herosearch__item-name {
    flex: 1;
    min-width: 0;
    font-size: 0.7rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.herosearch__item-kills {
    font-size: 0.6rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--muted);
    flex-shrink: 0;
}

.herosearch:focus-within { border-color: var(--accent); }

.herosearch input {
    flex: 1;
    min-width: 0;
    background: transparent;
    border: none;
    padding: 1.05rem 1.25rem;
    font-size: 0.8rem;
    letter-spacing: 0.1em;
    color: var(--ink);
}

.herosearch input:focus { outline: none; }
.herosearch input::placeholder { color: var(--faint); }

.herosearch button {
    border: none;
    border-left: 1px solid var(--accent);
    background: rgba(192, 106, 51, 0.16);
    color: var(--accent-hi);
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    padding: 0 1.9rem;
    cursor: pointer;
    transition: background 0.15s, color 0.15s;
}

.herosearch button:hover { background: rgba(192, 106, 51, 0.3); color: #e89058; }

.herosearch__hint {
    margin-top: 0.8rem;
    font-size: 0.56rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--faint);
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.8);
}

.herosearch__hint.is-error { color: var(--danger); }

.herosearch__hint a {
    color: var(--accent-hi);
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* ----- Sélecteur de mode : trouver un joueur / ajouter un profil ----- */

.herosearch-modes {
    display: flex;
    justify-content: center;
    gap: 0.4rem;
    margin-top: 2.2rem;
}

.herosearch-modes .filter {
    background: rgba(4, 6, 4, 0.55);
    backdrop-filter: blur(6px);
}

.herosearch-modes .filter.is-active { background: rgba(192, 106, 51, 0.16); }

/* La barre suit immédiatement le sélecteur */
.herosearch-modes + .herosearch { margin-top: 0.7rem; }

/* ----- Tutoriel : rendre ses stats Steam publiques ----- */

.tuto {
    position: fixed;
    inset: 0;
    z-index: 70;
    display: grid;
    place-items: center;
    padding: 1rem;
    background: rgba(5, 8, 5, 0.82);
    backdrop-filter: blur(6px);
}

.tuto[hidden] { display: none; }

.tuto__panel {
    width: min(560px, 100%);
    max-height: 100%;
    overflow-y: auto;
    background: rgba(10, 14, 10, 0.97);
    border: 1px solid var(--hairline);
    padding: 1.5rem 1.5rem 1.6rem;
}

.tuto__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 1rem;
}

.tuto__title {
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: var(--ink);
}

.tuto__x {
    font-size: 1rem;
    line-height: 1;
    color: var(--muted);
    padding: 0.2rem 0.4rem;
    border: 1px solid var(--hairline-soft);
    flex-shrink: 0;
}

.tuto__x:hover { color: var(--ink); border-color: var(--hairline); }

.tuto__sub {
    margin-top: 0.6rem;
    font-size: 0.8rem;
    line-height: 1.6;
    color: var(--muted);
}

.tuto__steps {
    list-style: none;
    margin-top: 1.3rem;
    display: flex;
    flex-direction: column;
    gap: 1.1rem;
}

.tuto__step {
    display: grid;
    grid-template-columns: 34px 1fr;
    gap: 0.9rem;
}

.tuto__num {
    width: 34px;
    height: 34px;
    display: grid;
    place-items: center;
    font-size: 0.95rem;
    font-weight: 300;
    color: var(--accent-hi);
    border: 1px solid var(--accent);
    background: var(--accent-soft);
}

.tuto__step h3 {
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--ink);
    padding-top: 0.15rem;
}

.tuto__step p {
    margin-top: 0.3rem;
    font-size: 0.8rem;
    line-height: 1.6;
    color: var(--muted);
}

.tuto__step strong { color: var(--ink-2); font-weight: 500; }

.tuto__actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem;
    margin-top: 1.5rem;
}

/* ----- Réglages du profil (mêmes panneaux que le tuto) ----- */

.setting {
    margin-top: 1.2rem;
    padding-top: 1.2rem;
    border-top: 1px solid var(--hairline-soft);
}

.setting__label {
    font-size: 0.64rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--ink);
}

.setting__desc {
    margin: 0.35rem 0 0.75rem;
    font-size: 0.78rem;
    line-height: 1.55;
    color: var(--muted);
}

.setting .sidebar__custom-hint { margin-top: 0.5rem; }

.lhero__actions {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    justify-content: center;
    gap: 1.3rem;
    margin-top: 1.8rem;
}

.lhero__sample {
    font-size: 0.58rem;
    font-weight: 600;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--muted);
    text-decoration: none;
    text-shadow: 0 1px 6px rgba(0, 0, 0, 0.8);
}

.lhero__sample:hover { color: var(--accent-hi); }

/* ----- Recherche par pseudo (page Players) ----- */

.players-search { max-width: 460px; margin: 0 auto 1.6rem; }

.players-search input {
    width: 100%;
    font-size: 0.72rem;
    letter-spacing: 0.16em;
    color: var(--ink);
    background: rgba(0, 0, 0, 0.35);
    border: 1px solid var(--hairline-soft);
    padding: 0.8rem 1.1rem;
    transition: border-color 0.15s;
}

.players-search input:focus { border-color: var(--accent); outline: none; }
.players-search input::placeholder { color: var(--faint); }

.players-grid--page { max-width: 1060px; margin: 0 auto; }

.players-more { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem; }

/* ----- FAQ (accordéon) ----- */

.faq__intro {
    max-width: 760px;
    margin: 0 auto 1.4rem;
    text-align: center;
    font-size: 0.88rem;
    line-height: 1.65;
    color: var(--muted);
}

.faq {
    max-width: 860px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
}

.faq details {
    background: var(--panel);
    border: 1px solid var(--hairline-soft);
    backdrop-filter: blur(6px);
    transition: border-color 0.15s;
}

.faq details[open] { border-color: var(--hairline); }

.faq summary {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 1rem;
    padding: 0.95rem 1.25rem;
    cursor: pointer;
    list-style: none;
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--ink-2);
    transition: color 0.15s;
}

.faq summary::-webkit-details-marker { display: none; }

.faq summary::after {
    content: "+";
    color: var(--accent-hi);
    font-size: 1.05rem;
    font-weight: 400;
    flex-shrink: 0;
}

.faq details[open] summary { color: var(--ink); }

.faq details[open] summary::after { content: "–"; }

.faq summary:hover { color: var(--ink); }

.faq__a {
    padding: 0 1.25rem 1.15rem;
    max-width: 74ch;
    font-size: 0.86rem;
    line-height: 1.65;
    color: var(--muted);
}

.sect h2 .livedot { margin-right: 0.55rem; }

.lhero__stats {
    position: relative;
    z-index: 1;
    border-top: 1px solid rgba(222, 230, 216, 0.12);
    background: rgba(6, 9, 6, 0.45);
    backdrop-filter: blur(10px);
}

.lhero__stats .herostats {
    max-width: var(--maxw);
    margin: 0 auto;
    padding: 1.2rem var(--pad) 1.5rem;
}

.kicker {
    font-size: 0.6rem;
    font-weight: 600;
    letter-spacing: 0.42em;
    text-transform: uppercase;
    color: var(--accent-hi);
    margin-bottom: 1.4rem;
}

.bigsearch {
    display: flex;
    gap: 2px;
    max-width: 560px;
    margin: 2.4rem auto 0;
}

.bigsearch input {
    flex: 1;
    min-width: 0;
    font-size: 0.78rem;
    letter-spacing: 0.08em;
    color: var(--ink);
    background: rgba(0, 0, 0, 0.4);
    border: 1px solid var(--hairline-soft);
    padding: 0.9rem 1.1rem;
    transition: border-color 0.15s;
}

.bigsearch input:focus { border-color: var(--accent); outline: none; }
.bigsearch input::placeholder { color: var(--faint); }

.bigsearch button {
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    color: var(--accent-hi);
    background: rgba(192, 106, 51, 0.10);
    border: 1px solid var(--accent);
    padding: 0.9rem 1.7rem;
    transition: background 0.15s, color 0.15s;
}

.bigsearch button:hover { background: rgba(192, 106, 51, 0.22); color: #e89058; }

.bigsearch__hint {
    margin-top: 0.8rem;
    font-size: 0.6rem;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--faint);
}

.bigsearch__hint.is-error { color: var(--danger); }

.landing-cta {
    margin-top: 1.8rem;
    font-size: 0.56rem;
    letter-spacing: 0.4em;
    text-transform: uppercase;
    color: var(--faint);
}

.landing-hero .btn-steam { margin-top: 1.2rem; }

.recent { margin-top: 2.6rem; }

.recent__label {
    font-size: 0.58rem;
    font-weight: 500;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 0.8rem;
}

.recent__chips {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 0.5rem;
}

.chip {
    display: inline-flex;
    align-items: center;
    gap: 0.55rem;
    text-decoration: none;
    color: var(--ink-2);
    background: var(--panel);
    border: 1px solid var(--hairline-soft);
    padding: 0.3rem 0.9rem 0.3rem 0.3rem;
    font-size: 0.74rem;
    font-weight: 500;
    letter-spacing: 0.06em;
    transition: border-color 0.15s, color 0.15s;
}

.chip:hover { border-color: var(--accent); color: var(--ink); }

.chip img { width: 24px; height: 24px; border: 1px solid var(--hairline-soft); }

.example {
    margin-top: 2.2rem;
    font-size: 0.62rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--faint);
}

.example a { text-decoration: none; }
.example a:hover { text-decoration: underline; }

.features {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
    gap: 0.9rem;
    max-width: 980px;
    margin: 0 auto;
}

.feature {
    background: var(--panel);
    border: 1px solid var(--hairline-soft);
    backdrop-filter: blur(6px);
    padding: 1.6rem;
    transition: border-color 0.2s;
}

.feature:hover { border-color: var(--hairline); }

.feature__icon {
    display: inline-grid;
    place-items: center;
    width: 40px;
    height: 40px;
    font-size: 1.15rem;
    color: var(--accent-hi);
    border: 1px solid var(--accent);
    background: var(--accent-soft);
    margin-bottom: 1.1rem;
}

.feature h2 {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--ink);
    margin-bottom: 0.5rem;
}

.feature p { color: var(--muted); font-size: 0.8rem; line-height: 1.55; }

/* ============================================================
   Tooltip / footer / loader
   ============================================================ */

.tip {
    position: fixed;
    z-index: 60;
    max-width: 280px;
    font-size: 0.6rem;
    font-weight: 500;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    line-height: 1.6;
    color: var(--ink);
    background: rgba(8, 11, 8, 0.96);
    border: 1px solid var(--hairline);
    padding: 0.55rem 0.8rem;
    pointer-events: none;
}

.footer {
    border-top: 1px solid var(--hairline-soft);
    padding: 1.4rem var(--pad);
    text-align: center;
    color: var(--faint);
    font-size: 0.56rem;
    letter-spacing: 0.22em;
    text-transform: uppercase;
}

.loader {
    position: fixed;
    inset: 0;
    z-index: 50;
    display: grid;
    place-items: center;
    background: rgba(9, 12, 9, 0.94);
    backdrop-filter: blur(4px);
    transition: opacity 0.35s ease;
}

.loader.is-hidden { opacity: 0; pointer-events: none; }

.loader__box { text-align: center; padding: 2rem; max-width: 460px; }

.loader__title {
    font-size: 0.95rem;
    font-weight: 600;
    letter-spacing: 0.45em;
    text-transform: uppercase;
    color: var(--ink);
    margin-bottom: 0.8rem;
}

.loader__box--error .loader__title { color: var(--danger); }

.loader__sub {
    font-size: 0.6rem;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--muted);
    overflow-wrap: anywhere;
}

.cursor { color: var(--accent-hi); animation: blink 1.1s steps(1) infinite; }

@keyframes blink { 50% { opacity: 0; } }

.loader__bar {
    margin-top: 1.6rem;
    height: 2px;
    background: rgba(222, 230, 216, 0.1);
    overflow: hidden;
}

.loader__sweep {
    width: 35%;
    height: 100%;
    background: var(--accent);
    animation: sweep 1.1s ease-in-out infinite alternate;
}

@keyframes sweep {
    from { transform: translateX(-40%); }
    to { transform: translateX(240%); }
}

.loader__actions {
    display: flex;
    justify-content: center;
    gap: 0.7rem;
    margin-top: 1.6rem;
}

/* ============================================================
   Responsive
   ============================================================ */

@media (max-width: 940px) {
    .layout { grid-template-columns: 1fr; }
    .sidebar { position: static; }
    .sidebar__avatar { max-width: 220px; margin: 0 auto; width: 100%; }
    .duo { grid-template-columns: 1fr; }
    .statrows { grid-template-columns: 1fr; }
    .herostats { gap: 1.4rem 1.8rem; }
    .ach-row { grid-template-columns: 48px minmax(0, 1fr) 150px; }
    .ach-row__status { display: none; }
}

@media (max-width: 640px) {
    /* Les notes de section (compteurs) ne doivent pas forcer la largeur */
    .sect__note { white-space: normal; text-align: right; }

    .bigsearch { flex-direction: column; }

    .completion, .killsplit { flex-direction: column; align-items: flex-start; }

    .hbar { grid-template-columns: 96px 1fr 48px; }

    .colchart { gap: 3px; height: 130px; }
    .col:nth-child(odd) .col__day { visibility: hidden; }

    .ach-row { grid-template-columns: 42px minmax(0, 1fr); }
    .ach-row__icon { width: 42px; height: 42px; }
    .rarity { grid-column: 2; }
}

/* ============================================================
   Navigation par onglets (style "onglet actif" du jeu)
   ============================================================ */

.nav__links { display: flex; gap: 1.8rem; justify-self: center; }

.nav__links a {
    position: relative;
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: 0.28em;
    text-transform: uppercase;
    text-decoration: none;
    color: var(--muted);
    padding: 0.55rem 0.1rem;
    transition: color 0.15s;
}

.nav__links a::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 2px;
    background: transparent;
    transition: background 0.15s;
}

.nav__links a:hover { color: var(--ink-2); }

.nav__links a.is-active { color: var(--ink); }

.nav__links a.is-active::after { background: var(--accent); }

/* ============================================================
   Landing — hero actions & communauté
   ============================================================ */

.hero-actions {
    display: flex;
    align-items: center;
    justify-content: center;
    flex-wrap: wrap;
    gap: 1.2rem;
    margin-top: 1.8rem;
}

.hero-actions__alt {
    font-size: 0.62rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--muted);
    text-decoration: none;
}

.hero-actions__alt:hover { color: var(--accent-hi); }

/* Le contenu de la landing partage la largeur des sections profil */
.landing .sect-block { max-width: 1060px; margin-left: auto; margin-right: auto; }

@media (max-width: 760px) {
    .lhero { min-height: auto; }
    .lhero__center { padding-top: 7.5rem; padding-bottom: 2.5rem; }
    .herosearch { flex-direction: column; }
    .herosearch button { border-left: none; border-top: 1px solid var(--accent); padding: 0.9rem; }
    .lhero__veil {
        background:
            linear-gradient(rgba(8, 11, 8, 0.78), rgba(8, 11, 8, 0.82)),
            linear-gradient(180deg, transparent 68%, rgba(17, 21, 14, 0.95) 100%);
    }
    .lhero__stats .herostats { gap: 1.2rem 1.6rem; }
}

.features h3 {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.26em;
    text-transform: uppercase;
    color: var(--ink);
    margin-bottom: 0.5rem;
}

/* ----- Annuaire des soldats ----- */

.players-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: 0.7rem;
}

.pcard {
    display: flex;
    align-items: center;
    gap: 0.85rem;
    padding: 0.85rem 1rem;
    text-decoration: none;
    color: var(--ink-2);
    opacity: 0;
    transform: translateY(6px);
    animation: rise 0.45s ease forwards;
    animation-delay: calc(var(--i, 0) * 50ms);
    transition: border-color 0.15s, background 0.15s;
}

.pcard:hover { border-color: var(--accent); background: rgba(192, 106, 51, 0.06); }

.pcard__avatar {
    width: 44px;
    height: 44px;
    border: 1px solid var(--hairline-soft);
    flex-shrink: 0;
}

.pcard__body { min-width: 0; }

.pcard__name {
    font-size: 0.76rem;
    font-weight: 600;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.pcard__meta {
    font-size: 0.56rem;
    font-weight: 500;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--muted);
    margin-top: 0.2rem;
}

/* Drapeaux (images flagcdn — Windows n'affiche pas les emoji drapeaux) */
.flag {
    display: inline-block;
    vertical-align: -3px;
    border: 1px solid rgba(0, 0, 0, 0.45);
    box-shadow: 0 0 0 1px var(--hairline-soft);
}

.pcard__live {
    display: flex;
    align-items: center;
    font-size: 0.52rem;
    font-weight: 600;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--olive);
    margin-top: 0.3rem;
}

.pcard.is-live { border-color: rgba(152, 166, 122, 0.45); }

.lb__soldier .livedot { margin-left: 0.2rem; margin-right: 0; }

.sidebar__status.is-ingame { color: var(--accent-hi); }

.sidebar__status.is-ingame .dot {
    background: var(--accent-hi);
    box-shadow: 0 0 8px rgba(214, 127, 66, 0.8);
    animation: livepulse 1.7s ease-in-out infinite;
}

.pcard__stat { margin-left: auto; text-align: right; flex-shrink: 0; }

.pcard__stat b {
    display: block;
    font-size: 1.35rem;
    font-weight: 300;
    line-height: 1;
    color: #f2f4ee;
}

.pcard__stat span {
    font-size: 0.5rem;
    font-weight: 500;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: var(--muted);
}

.players-more { text-align: center; margin-top: 1.2rem; }

/* ============================================================
   Page leaderboard
   ============================================================ */

.lbpage {
    max-width: 1060px;
    width: 100%;
    margin: 0 auto;
    padding: 0 var(--pad) 3rem;
}

.lbpage-hero {
    text-align: center;
    padding: clamp(2.5rem, 6vw, 4.5rem) 0 1.8rem;
}

.lbpage-hero h1 {
    font-size: clamp(1.6rem, 4vw, 2.4rem);
    font-weight: 500;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: #f2f4ee;
}

.lbpage-hero__sub {
    margin-top: 0.6rem;
    font-size: 0.66rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--muted);
}

.filters--center { justify-content: center; flex-wrap: wrap; margin-bottom: 1.2rem; }

.lb { padding: 0.4rem 1.1rem 0.6rem; }

.lb__head, .lb__row {
    display: grid;
    grid-template-columns: 48px minmax(0, 1fr) 64px 96px 88px 84px 64px 100px 72px;
    align-items: center;
    gap: 0.8rem;
    padding: 0.6rem 0.4rem;
}

.lb__head {
    font-size: 0.56rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--muted);
    border-bottom: 1px solid var(--hairline);
}

.lb__num { text-align: right; }

.lb__row {
    text-decoration: none;
    color: var(--ink-2);
    border-top: 1px solid var(--hairline-soft);
    opacity: 0;
    transform: translateY(5px);
    animation: rise 0.4s ease forwards;
    animation-delay: calc(var(--i, 0) * 25ms);
    transition: background 0.15s;
}

.lb__row:first-of-type { border-top: none; }

.lb__row:hover { background: rgba(255, 255, 255, 0.03); }

.lb__rank {
    font-size: 0.95rem;
    font-weight: 300;
    color: var(--faint);
    letter-spacing: 0.06em;
}

.lb__row--1 .lb__rank { color: var(--brass); font-weight: 500; }
.lb__row--2 .lb__rank { color: #c8cfc1; font-weight: 500; }
.lb__row--3 .lb__rank { color: var(--accent-hi); font-weight: 500; }

.lb__soldier {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    min-width: 0;
}

.lb__soldier img {
    width: 34px;
    height: 34px;
    border: 1px solid var(--hairline-soft);
    flex-shrink: 0;
}

.lb__soldier span {
    font-size: 0.74rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.lb__val {
    font-size: 0.95rem;
    font-weight: 300;
    color: #eef0e8;
    white-space: nowrap;
}

.lb__val i {
    font-style: normal;
    font-size: 0.62em;
    color: var(--muted);
    margin-left: 0.1em;
}

@media (max-width: 900px) {
    .lb__head, .lb__row { grid-template-columns: 40px minmax(0, 1fr) 90px 104px; }
    .lb__c-level, .lb__c-hs, .lb__c-wins, .lb__c-medals, .lb__c-xp { display: none; }
    .nav__search { display: none; }
}

@media (max-width: 640px) {
    .lb { padding: 0.3rem 0.7rem 0.5rem; }

    .lb__head, .lb__row {
        grid-template-columns: 30px minmax(0, 1fr) 72px 84px;
        gap: 0.5rem;
        padding: 0.55rem 0.2rem;
    }

    .lb__head { letter-spacing: 0.14em; }
    .lb__rank { font-size: 0.8rem; }
    .lb__soldier { gap: 0.5rem; }
    .lb__soldier img { width: 28px; height: 28px; }
    .lb__soldier span { font-size: 0.68rem; }
    .lb__val { font-size: 0.82rem; }
}

/* ============================================================
   Mobile — header en rangées & confort tactile
   ============================================================ */

@media (max-width: 760px) {
    /* Header empilé : rangée 1 = marque + compte, rangée 2 =
       recherche (pages qui en ont une), rangée 3 = barre d'onglets
       segmentée pleine largeur, collée au bas du header (façon HUD).
       La grille desktop 1fr/auto/1fr déborde inévitablement sous
       ~700px (les éléments de droite sont flex-shrink: 0). Non
       collant : le header rend l'écran au défilement. */
    .nav {
        position: static;
        display: flex;
        flex-wrap: wrap;
        align-items: center;
        height: auto;
        padding: 0.55rem var(--pad) 0;
        gap: 0.55rem 0.8rem;
    }

    .nav__brand { order: 1; }

    .nav__word { font-size: 0.72rem; letter-spacing: 0.22em; }

    /* La boîte .nav__right s'efface : recherche et auth deviennent
       des rangées du header flex. */
    .nav__right { display: contents; }

    .nav__auth { order: 2; margin-left: auto; gap: 0.7rem; }

    .userchip { max-width: 136px; }

    .btn-steam--small { padding: 0.4rem 0.75rem; }

    .nav__search { display: block; order: 3; flex: 1 1 100%; }

    /* Barre d'onglets : chaque onglet occupe un tiers, le soulignage
       actif court sur toute sa largeur. Marges négatives = bord à bord. */
    .nav__links {
        order: 4;
        flex: 1 1 100%;
        gap: 0;
        margin: 0 calc(-1 * var(--pad));
        border-top: 1px solid var(--hairline-soft);
    }

    .nav__links a { flex: 1; text-align: center; padding: 0.62rem 0.2rem; letter-spacing: 0.14em; }

    /* Sous 16px, iOS Safari zoome toute la page au focus d'un champ */
    .nav__search input,
    .herosearch input,
    .players-search input,
    .ach-toolbar input[type="search"] {
        font-size: 16px;
        letter-spacing: 0.06em;
    }
}

@media (max-width: 480px) {
    .nav__word { font-size: 0.66rem; letter-spacing: 0.16em; }

    /* Pastille utilisateur : avatar seul, le pseudo n'a plus la place */
    .userchip { padding: 0.25rem; }
    .userchip span { display: none; }
}

/* iOS Safari ignore background-attachment: fixed : l'image "cover"
   se calerait sur la hauteur du document entier (zoom énorme sur les
   longues pages profil). Sur écrans tactiles, l'image personnalisée
   passe sur le calque fixe ::after — dimensionné au viewport — sous
   le vignettage existant. */
@media (pointer: coarse) {
    body.custom-bg {
        background: linear-gradient(#1b211a, #11150e);
    }

    body.custom-bg::after {
        background:
            radial-gradient(125% 95% at 50% 38%, transparent 55%, rgba(3, 5, 3, 0.5) 100%),
            linear-gradient(rgba(12, 16, 11, 0.58), rgba(9, 13, 9, 0.8)),
            var(--custom-bg-image) center / cover no-repeat;
    }
}

/* ============================================================
   Mouvement réduit
   ============================================================ */

@media (prefers-reduced-motion: reduce) {
    .cursor { animation: none; }
    .loader__sweep { animation: none; width: 100%; }
    .hero-stat, .statrow, .ach-row, .pcard, .lb__row { animation: none; opacity: 1; transform: none; }
    .livedot, .sidebar__status.is-ingame .dot { animation: none; }
    .lhero__slide { animation: none; transition: none; }
    .gauge__fill, .hbar__fill, .col__bar { transition: none; }
}

/* ============================================================
   Page statistiques du site (/stats)
   ============================================================ */

.statspage {
    max-width: var(--maxw);
    width: 100%;
    margin: 0 auto;
    padding: 1.6rem var(--pad) 3rem;
}

/* Bande de totaux : la même bande que le hero de l'accueil,
   posée dans un panneau. */
.statsband { margin-bottom: 2.4rem; }

.statsband .herostats { padding: 1.9rem 1rem 2.1rem; }

.statsband__loading {
    width: 100%;
    text-align: center;
    font-size: 0.62rem;
    font-weight: 500;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--muted);
    padding: 1rem 0;
}

.statspage .filters { margin-bottom: 1rem; }

.duo--charts { margin-bottom: 0.9rem; }

/* Colonnes denses (24-48 barres par graphique) */
.colchart--dense { gap: 2px; }

.colchart--dense .col__bar { max-width: 12px; }

.colchart--dense .col__day {
    white-space: nowrap;
    overflow: visible;
}

@media (max-width: 640px) {
    .colchart--dense { gap: 1px; }

    /* Les étiquettes horaires sont déjà clairsemées (1 sur 3/6) :
       la règle générique "1 colonne sur 2" suffit ensuite. */
}

/* Courbes horaires : points révélés au survol (bande crosshair),
   sauf l'heure en cours qui reste marquée ; variante "escalier"
   (pic en jeu) en bronze clair. */
.linechart--hourly { position: relative; height: 190px; }

.linechart--hourly .dot { opacity: 0; transition: opacity 0.12s; }

.linechart--hourly .hit:hover + .dot,
.linechart--hourly .dot.is-current { opacity: 1; }

.linechart--step .line { stroke: var(--accent-hi); }
.linechart--step .area { fill: rgba(214, 127, 66, 0.08); }
.linechart--step .dot { fill: var(--accent-hi); }

/* Colonnes denses : pas de moignon sur les valeurs nulles
   (l'axe reste la ligne de base) — géré par zeroStub côté JS. */

/* ============================================================
   Rangs communautaires (XP) : mouvement au leaderboard,
   chip de grade, bloc "Rank" de la sidebar profil.
   ============================================================ */

/* Cellule # : position + mouvement vs la veille */
.lb__rankcell {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
}

.lb__move {
    font-style: normal;
    font-size: 0.56rem;
    font-weight: 600;
    letter-spacing: 0.08em;
}

.lb__move--up { color: var(--olive); }
.lb__move--down { color: var(--danger); }
.lb__move--same { color: var(--faint); }
.lb__move--new { color: var(--brass); }

/* Chip de grade militaire à côté du nom (brass = officier) */
.lb__grade {
    flex-shrink: 0;
    font-size: 0.54rem;
    font-weight: 600;
    letter-spacing: 0.14em;
    color: var(--muted);
    border: 1px solid var(--hairline);
    padding: 0.15rem 0.3rem;
}

.lb__grade--officer {
    color: var(--brass);
    border-color: rgba(203, 163, 104, 0.45);
}

/* Mobile : le nom prime sur le chip de grade (colonne trop étroite) */
@media (max-width: 640px) {
    .lb__grade { display: none; }
}

/* Bloc "Rank" de la sidebar profil */
.sidebar__rank {
    text-align: center;
    padding-bottom: 1.2rem;
    border-bottom: 1px solid var(--hairline-soft);
}

.sidebar__rank-title {
    margin-top: 0.15rem;
    font-size: 1.02rem;
    font-weight: 500;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--ink);
}

.sidebar__rank-title.is-officer { color: var(--brass); }

.sidebar__rank-meta {
    margin-top: 0.35rem;
    font-size: 0.62rem;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--muted);
}

.rankmove { font-style: normal; font-weight: 600; }
.rankmove--up { color: var(--olive); }
.rankmove--down { color: var(--danger); }

/* Chip de grade sur les cartes joueur (annuaire + accueil) */
.pcard__grade {
    display: inline-block;
    font-size: 0.5rem;
    font-weight: 600;
    letter-spacing: 0.14em;
    color: var(--muted);
    border: 1px solid var(--hairline);
    padding: 0.05rem 0.26rem;
    margin-right: 0.15rem;
    vertical-align: 1px;
}

.pcard__grade--officer {
    color: var(--brass);
    border-color: rgba(203, 163, 104, 0.45);
}

/* ============================================================
   Anti-triche : marqueurs, wall of shame, bannière profil,
   contrôle admin de flag.
   ============================================================ */

/* Marqueur ☠ / ⚠ à côté des noms (leaderboard, pcards) */
.cheatmark {
    font-style: normal;
    font-size: 0.85em;
    color: var(--danger);
    margin-left: 0.3rem;
    flex-shrink: 0;
}

.cheatmark--sus { color: var(--brass); }

/* Wall of shame (leaderboard) */
.filter--shame.is-active,
.filter--shame:hover {
    color: var(--danger);
    border-color: rgba(191, 98, 80, 0.55);
}

.lb__rank--shame { color: var(--danger); font-weight: 500; }

.lb__row--cheat { background: rgba(191, 98, 80, 0.05); }
.lb__row--cheat:hover { background: rgba(191, 98, 80, 0.1); }

/* Bannière d'avertissement sur le profil */
.cheatwarn[hidden] { display: none; }

.cheatwarn {
    padding: 1.1rem 1.3rem;
    margin-bottom: 2rem;
    border: 1px solid rgba(191, 98, 80, 0.65);
    background: rgba(191, 98, 80, 0.1);
}

.cheatwarn__title {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--danger);
    margin-bottom: 0.4rem;
}

.cheatwarn p:not(.cheatwarn__title) {
    font-size: 0.8rem;
    color: var(--ink-2);
}

.cheatwarn a { color: var(--ink); }

.cheatwarn--sus {
    border-color: rgba(203, 163, 104, 0.5);
    background: rgba(203, 163, 104, 0.07);
}

.cheatwarn--sus .cheatwarn__title { color: var(--brass); }

/* Grade radié (sidebar profil) */
.sidebar__rank-title.is-cheater { color: var(--danger); }

/* Contrôle admin : flag anti-triche (sidebar) */
.flagctl {
    border-top: 1px solid var(--hairline-soft);
    padding-top: 0.9rem;
    margin-top: 0.4rem;
}

.flagctl__label {
    font-size: 0.56rem;
    font-weight: 600;
    letter-spacing: 0.22em;
    text-transform: uppercase;
    color: var(--muted);
    margin-bottom: 0.5rem;
}

.flagctl__btns { display: flex; gap: 0.35rem; }

.flagctl__btns .btn {
    flex: 1;
    padding: 0.5rem 0.2rem;
    font-size: 0.56rem;
}

.flagctl__btns .btn.is-active {
    border-color: var(--danger);
    color: var(--danger);
}

.flagctl__btns .btn[data-flag="0"].is-active {
    border-color: var(--olive);
    color: var(--olive);
}

/* Stats Steam privées : notice "comment devenir traquable" (profil) */
.privwarn[hidden] { display: none; }

.privwarn {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1rem 1.5rem;
    padding: 1.1rem 1.3rem;
    margin-bottom: 2rem;
    border: 1px solid rgba(192, 106, 51, 0.5);
    background: rgba(192, 106, 51, 0.08);
}

.privwarn__body { flex: 1; min-width: 260px; }

.privwarn__title {
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--accent-hi);
    margin-bottom: 0.4rem;
}

.privwarn__body p:not(.privwarn__title) {
    font-size: 0.8rem;
    color: var(--ink-2);
}

.privwarn strong { color: var(--ink); font-weight: 600; }

/* Grade inconnu (stats privées) */
.sidebar__rank-title.is-unknown { color: var(--muted); }
