/* ============================================================
   CASCADE LAYERS — vezi docs/REDESIGN_PLAYBOOK.md.
   Precedență (ultimul câștigă): vendor < app < kf (tokens..utilities).
     vendor      — Bootstrap (importat aici → layered, ca să nu mai bată stilul nostru)
     app         — STYLESHEET-UL PRINCIPAL, VIU (fostul „Battle Broadcast", secțiunile 1-16
                   + tokenii lui :root). NU e throwaway: e re-skinat „Kinetic Sharp" prin
                   blocul nelayered de remap GLOBAL de tokeni (vezi ~2850). ⚠️ NU-l goli /
                   șterge — ar șterge tot site-ul. „Faza 6 = empty legacy" din playbook = OBSOLET.
     tokens..utilities — stratul kf: tokenii --kf-* + base/layout/components/utilities adăugate.
   ============================================================ */
@layer vendor, app, tokens, base, layout, components, utilities;
@import url("../vendor-local/bootstrap/bootstrap.min-0hrUfGv.css") layer(vendor);

@layer app {

/* ============================================================
   DANCE CONTEST PLATFORM — Custom CSS  "Battle Broadcast"
   Brutalist street-scoreboard aesthetic.
   Newsprint paper · ink-black rules · Flash-pink accent ·
   Volt-lime for live/active · Archivo 900 display ·
   Space Mono numerals · sharp corners · hard offset shadows.
   Built on Bootstrap 5.3.3 but overrides it wholesale.

   STRUCTURA:
     1.  TOKENS          — variabile CSS globale (Cypher palette)
     2.  LAYOUT          — structura paginilor + navbar
     3.  TABLES          — tabele dense + stat columns + rank
     4.  BADGES & STATUS — badge-uri colorate + valori semantice
     5.  PILLS & FILTERS — pills cu count, filtre
     6.  CHIPS           — competitor/judge chips inline
     7.  CARDS           — carduri concurs hub
     8.  BRACKET         — vizualizare bracket
     9.  FORMS           — formulare inline compacte
    10.  JUDGE PAGE      — pagina judecatorului (mobile-first)
    11.  ADMIN           — panou admin
    12.  PUBLIC          — pagina publica /concursuri
    13.  UTILITIES       — clase helper
    14.  RANKING & TIER  — leaderboard, stat blocks, tier list, ELO
    15.  AUTH / ERROR    — login (.login-page) + pagini eroare (.error-page)
    16.  MOBILE / RESP.  — utilitare font, card-reflow tabele, nav + touch targets (mobile-first)
   ============================================================ */


/* === 1. TOKENS ============================================= */

:root {
    color-scheme: light dark;   /* native form/scrollbar theming */

    /* ============================================================
       THREE-TIER TOKENS — vezi skill `design-token-theming`.
       1) RAW (--c-*)      valori brute, fără rol — sursa unică de culoare
       2) SEMANTIC         --bg/--surface/--text/--border-*/--accent/... ← componentele folosesc ASTEA
       3) (component)      rar, doar la nevoie reală
       Tema = re-mapează SEMANTIC → RAW. Light = :root. Dark = [data-theme="dark"].
       Tokenii „value-named" istorici (--ink/--paper/--fg*/--card) sunt ALIASURI care
       țintesc rolurile → flipează corect în dark fără să rescriem fiecare componentă.
       ============================================================ */

    /* ---------- TIER 1 · RAW PALETTE ---------- */
    --c-ink-950: #0c0a08;   /* darkest — dark-mode page bg */
    --c-ink-900: #141210;   /* near-black — text / ink surfaces / strong borders */
    --c-ink-800: #1c1a16;   /* dark surface — dark-mode cards */
    --c-ink-700: #4d463d;   /* secondary text */
    --c-ink-500: #837b6e;   /* muted text / labels */
    --c-ink-300: #b3a994;   /* faint / units */
    --c-paper:   #f5f1e8;   /* warm newsprint — page bg */
    --c-paper-2: #ede7d8;   /* deeper newsprint — zebra / blocks */
    --c-card:    #fffdf7;   /* off-white card */
    --c-hair:    #d8cfbd;   /* hairline */
    --c-subtle:  #e3dccc;
    --c-white:   #ffffff;
    /* brand accents (≈ theme-invariant) */
    --c-flash:        #ff2e63;
    --c-flash-strong: #d40d44;
    --c-flash-soft:   #ffd9e3;
    --c-volt:         #d8ff3e;
    --c-volt-ink:     #1a1d00;
    /* dark-mode-only neutrals */
    --c-dark-hair: #34302a;   /* hairline on dark */
    --c-dark-line: #4a443c;   /* strong border on dark */

    /* ---------- TIER 2 · SEMANTIC ROLES — LIGHT (default) ---------- */
    --bg:              var(--c-paper);     /* page background */
    --bg-elevated:     var(--c-paper-2);   /* zebra rows / sunk blocks */
    --surface:         var(--c-card);      /* cards, panels */
    --surface-2:       var(--c-paper-2);   /* secondary surface */
    --surface-inverse: var(--c-ink-900);   /* dark strips: navbar, btn-ink, active */
    --text:            var(--c-ink-900);   /* primary text */
    --text-secondary:  var(--c-ink-700);
    --text-muted:      var(--c-ink-500);
    --text-faint:      var(--c-ink-300);
    --text-on-inverse: var(--c-paper);     /* text on surface-inverse */
    --border-hair:     var(--c-hair);      /* hairline borders (role: rămâne numele) */
    --border-subtle:   var(--c-subtle);
    --border-strong:   var(--c-ink-900);   /* 2px ink frames */
    --accent:          var(--c-flash);
    --accent-strong:   var(--c-flash-strong);
    --accent-soft:     var(--c-flash-soft);
    --accent-text:     var(--c-white);     /* text on accent */
    --live:            var(--c-volt);
    --live-ink:        var(--c-volt-ink);
    --shadow-color:    var(--c-ink-900);   /* hard offset shadow color */
    --focus-ring:      var(--c-flash);

    /* ---------- LEGACY ALIASES (țintesc rolurile; flipează în dark) ---------- */
    --primary:        var(--accent);
    --primary-strong: var(--accent-strong);
    --primary-soft:   var(--accent-soft);
    --volt:           var(--live);          /* electric lime — LIVE / highlight / hover */
    --volt-ink:       var(--live-ink);
    --ink:            var(--c-ink-900);     /* raw ink — decorativ; pt TEXT folosește --text */
    --paper:          var(--bg);            /* attn: pt text-pe-inchis folosește --text-on-inverse */
    --paper-2:        var(--bg-elevated);
    --card:           var(--surface);
    --fg1: var(--text);  --fg2: var(--text-secondary);  --fg3: var(--text-muted);  --fg4: var(--text-faint);

    /* ---------- SEMANTIC ---------- */
    --success:      #0f8a3d;
    --danger:       #d92121;
    --warning:      #d98a00;
    --neutral:      #837b6e;
    --success-soft: #dff3e3;
    --danger-soft:  #fbe0e0;
    --warning-soft: #fbeccd;
    --on-warning-soft: #8a5a00;   /* text amber pe warning-soft (tie) */
    --golden-soft:  #ffeec2;      /* bg bandă rundă de departajare (golden) — theme-INDEPENDENT, ca .sc-round--c* */
    --on-golden:    #6b4e00;      /* text pe golden-soft */

    /* ---------- WINNER (token DEDICAT, NU --success semantic) ----------
       Câștigătorul citește DOAR aceste 4 roluri → re-skin global dintr-un loc.
       Default = verdele legacy; blocul global kf le remapează la lime. */
    --winner-bg:   var(--success-soft);
    --winner-fg:   var(--success);
    --winner-edge: var(--success);
    --winner-ink:  var(--success);

    /* ---------- CONTEST STATUS ---------- */
    --status-draft-bg:    #e8e2d4; --status-draft-fg:    #6b6158;
    --status-open-bg:     #dff3e3; --status-open-fg:     #0f8a3d;
    --status-closed-bg:   #dfe9ff; --status-closed-fg:   #2f6df0;
    --status-active-bg:   #d8ff3e; --status-active-fg:   #141210;  /* LIVE = volt */
    --status-done-bg:     #ede7d8; --status-done-fg:     #837b6e;

    /* ---------- BATTLE STATUS ---------- */
    --battle-pending-bg:    #e8e2d4; --battle-pending-fg:    #6b6158;
    --battle-progress-bg:   #d8ff3e; --battle-progress-fg:   #141210;
    --battle-completed-bg:  #dff3e3; --battle-completed-fg:  #0f8a3d;

    /* ---------- CATEGORY-ROW TINTS ----------
       Foste „dance-style badge" bg-uri; consumate acum DOAR de .category-row--0..5 ca tentă.
       Badge-ul real de stil = .style-pill (hue din nume). -fg-urile + slots 6/7 = moarte (scoase). */
    --style0-bg: #ffd9e3; --style1-bg: #dfe9ff; --style2-bg: #d3f3e6;
    --style3-bg: #ffe9c9; --style4-bg: #e8ddff; --style5-bg: #ffdcd2;

    /* ---------- TIER (S/A/B/C/D) ---------- */
    --tier-s: #ff2e63; --tier-s-bg: #ffe4ec;
    --tier-a: #ff7a1a; --tier-a-bg: #ffeede;
    --tier-b: #e6b800; --tier-b-bg: #fff6d6;
    --tier-c: #2f6df0; --tier-c-bg: #e4edff;
    --tier-d: #9b9486; --tier-d-bg: #ece6d9;

    /* ---------- RANK / PODIUM ---------- */
    --rank-gold:   #c79200;
    --rank-silver: #8f8a7e;
    --rank-bronze: #b06a2c;

    /* ---------- TYPE ---------- */
    --font-display: "Archivo", system-ui, sans-serif;
    --font-sans:    "Archivo", system-ui, -apple-system, "Segoe UI", sans-serif;
    --font-mono:    "Space Mono", ui-monospace, SFMono-Regular, Menlo, monospace;

    /* Compact type scale (keeps existing var names for template compatibility) */
    --font-2xs:  0.6rem;        /* 9.6px — micro badge/label */
    --font-xs:   0.7rem;        /* 11px — labels uppercase */
    --font-sm:   0.75rem;       /* 12px — text secundar */
    --font-md:   0.8125rem;     /* 13px — tabele dense */
    --font-base: 0.875rem;      /* 14px — text normal */

    /* ---------- SPACING ---------- */
    --pad-cell:  0.35rem 0.5rem;    /* padding celula tabel compact */
    --pad-badge: 0.15rem 0.45rem;
    --pad-pill:  0.2rem 0.6rem;
    --pad-chip:  0.2rem 0.5rem;
    --pad-card:  0.5rem 0.75rem;
    --space-1: 0.25rem;  --space-2: 0.5rem;  --space-3: 0.75rem;  --space-4: 1rem;
    /* Breakpoints (referință — CSS nu acceptă var() în @media): mobil ≤640px, tabletă ≤992px */
    --tap-min: 44px;     /* touch target minim (a11y) */

    /* ---------- RADII (sharp) ---------- */
    --radius-sm: 2px;
    --radius-md: 2px;
    --radius-lg: 3px;
    /* Bordura inputurilor de înscriere = punctată + colțuri rotunjite (excepție voită de la kf-sharp,
       NU e zeroit în tema kf → rămâne rotund pe /concursuri). */
    --entry-radius: 6px;

    /* ---------- BORDERS ---------- */
    --bw:        2px;
    --bw-hair:   1px;
    --border:    1px solid var(--border-hair);  /* hairline — compat cu codul existent */
    --border-dark: 2px solid var(--border-strong);

    /* ---------- ELEVATION — hard offset, no blur ---------- */
    --shadow-hard:    4px 4px 0 0 var(--shadow-color);
    --shadow-hard-sm: 2px 2px 0 0 var(--shadow-color);

    /* ---------- ZEBRA + HOVER rows ---------- */
    --row-odd-bg:   var(--bg-elevated);
    --row-hover-bg: var(--live);
}

/* ---------- DARK THEME — re-mapează DOAR rolurile semantice (TIER 2) ----------
   Componentele nu se ating. Badge-urile (status/style/tier) rămân intenționat vii
   (pastel pe fundal închis = pop). Vezi skill `design-token-theming`. */
[data-theme="dark"] {
    --bg:              var(--c-ink-950);   /* #0c0a08 page */
    --bg-elevated:     var(--c-ink-900);   /* zebra rows */
    --surface:         var(--c-ink-800);   /* #1c1a16 cards */
    --surface-2:       var(--c-ink-900);
    --surface-inverse: #000000;            /* navbar / btn-ink strip */
    --text:            var(--c-paper);     /* light text */
    --text-secondary:  #d2caba;
    --text-muted:      #a79e8d;
    --text-faint:      #8b8274;
    --text-on-inverse: var(--c-paper);     /* stays light on dark strips */
    --border-hair:     var(--c-dark-hair); /* #34302a */
    --border-subtle:   #2a2620;
    --border-strong:   var(--c-dark-line); /* #4a443c — frames visible on dark */
    --shadow-color:    #000000;            /* hard offset shadow */
    /* accents pop on dark as-is; soften the large alert fills + lift status hues */
    --success: #4cc97e; --danger: #ff6b6b; --warning: #f0b541;
    --success-soft: #14301f; --danger-soft: #3a1717; --warning-soft: #332611;
}

/* System preference when the user has NOT chosen (no-JS / first paint fallback). */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme]) {
        --bg: var(--c-ink-950); --bg-elevated: var(--c-ink-900);
        --surface: var(--c-ink-800); --surface-2: var(--c-ink-900); --surface-inverse: #000000;
        --text: var(--c-paper); --text-secondary: #d2caba; --text-muted: #a79e8d; --text-faint: #8b8274;
        --text-on-inverse: var(--c-paper);
        --border-hair: var(--c-dark-hair); --border-subtle: #2a2620; --border-strong: var(--c-dark-line);
        --shadow-color: #000000;
        --success: #4cc97e; --danger: #ff6b6b; --warning: #f0b541;
        --success-soft: #14301f; --danger-soft: #3a1717; --warning-soft: #332611;
    }
}

/* ---------- BOOTSTRAP 5.3 THEME BRIDGE ----------
   Utilitățile Bootstrap (.text-muted, .text-secondary, .nav-tabs, .bg-light, dropdown…) se
   colorează prin --bs-*; le legăm la tokenii NOȘTRI ca să flipeze cu [data-theme] pe tot site-ul.
   Selectorul include [data-bs-theme] ca să bată regulile proprii Bootstrap dark (specificitate
   egală → câștigă app.css, încărcat DUPĂ bootstrap.min.css). Brand newsprint/ink păstrat. */
:root,
[data-bs-theme="light"],
[data-bs-theme="dark"] {
    --bs-body-bg:                  var(--bg);
    --bs-body-color:               var(--text);
    --bs-emphasis-color:           var(--text);
    --bs-heading-color:            var(--text);
    --bs-secondary-color:          var(--text-muted);   /* .text-muted, .text-secondary */
    --bs-secondary-bg:             var(--surface-2);
    --bs-tertiary-color:           var(--text-faint);
    --bs-tertiary-bg:              var(--surface-2);
    --bs-border-color:             var(--border-hair);
    --bs-border-color-translucent: var(--border-hair);
    --bs-link-color:               var(--accent);
    --bs-link-hover-color:         var(--accent-strong);
}
/* Utilitățile pe RGB nu citesc tokenii direct → override scurt cu tokeni (cele folosite). */
.bg-light     { background-color: var(--surface-2) !important; }
.bg-secondary { background-color: var(--surface-inverse) !important; color: var(--text-on-inverse) !important; }

/* Base overrides — Bootstrap bg-light → paper newsprint */
html, body {
    font-family: var(--font-sans);
    background: var(--paper);
    color: var(--fg1);
}
/* Alert bootstrap adaptat la tokens */
.alert-danger   { background: var(--danger-soft);  border-color: var(--danger);  color: var(--danger);  }
.alert-success  { background: var(--success-soft); border-color: var(--success); color: var(--success); }
.alert-warning  { background: var(--warning-soft); border-color: var(--warning); color: var(--warning); }

/* Bootstrap form-control/-select adaptate la temă (altfel rămân albe în dark).
   Override-uri mai specifice (ex. .login-card .form-control) au prioritate. */
.form-control, .form-select {
    background-color: var(--surface);
    border-color: var(--border-hair);
    color: var(--text);
}
.form-control::placeholder { color: var(--text-faint); }
.form-control:focus, .form-select:focus {
    background-color: var(--surface);
    color: var(--text);
    border-color: var(--accent);
    box-shadow: 0 0 0 .15rem var(--accent-soft);
}


/* === 2. LAYOUT ============================================= */

/* Navbar — Kinetic Sharp (light × brutalist: flat, hairline 1px, accent lime) */
.app-nav {
    background: var(--kf-surface-bright);
    border-bottom: var(--kf-border);
    box-shadow: none;
    position: sticky;
    top: 0;
    z-index: 1020;
}
.app-nav__inner {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 1rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 58px;
}
.app-nav__brand {
    font-family: var(--kf-font-display);
    font-weight: 400;
    font-size: 1.5rem;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--kf-text);
    text-decoration: none;
    display: flex;
    align-items: center;
    transition: color .1s;
}
.app-nav__brand .bi-trophy-fill { color: var(--kf-accent); }
.app-nav__brand:hover { color: var(--kf-accent); }

.app-nav__actions {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}
.app-nav__link {
    font-size: var(--font-md);
    font-weight: 600;
    color: var(--kf-text-variant);
    text-decoration: none;
    padding: 0.3rem 0.6rem;
    border-radius: var(--kf-r-sm);
    transition: color .1s, background .1s;
}
.app-nav__link:hover { color: var(--kf-text); background: var(--kf-tint); }
/* Logout = form POST cu CSRF (nu link GET); form-ul nu strică flex-ul, butonul arată ca linkul. */
.app-nav__logout { display: contents; }
.app-nav__link--btn { background: none; border: 0; font: inherit; font-size: var(--font-md); font-weight: 600; cursor: pointer; }
.app-nav__link--active {
    color: var(--kf-accent);
    box-shadow: inset 0 -2px var(--kf-accent-strip);
}

.app-nav__btn {
    font-size: var(--font-sm);
    font-weight: 700;
    padding: 0.25rem 0.75rem;
    border: var(--kf-border);
    border-radius: var(--kf-r-sm);
    background: transparent;
    color: var(--kf-text);
    text-decoration: none;
    transition: background .1s, color .1s, border-color .1s;
    line-height: 1.5;
    display: inline-flex;
    align-items: center;
}
.app-nav__btn:hover { background: var(--kf-text); color: var(--kf-surface-bright); }
.app-nav__btn--flash {
    background: var(--kf-primary);
    border-color: var(--kf-primary);
    color: var(--kf-on-primary);
}
.app-nav__btn--flash:hover {
    background: var(--kf-primary-solid);
    border-color: var(--kf-primary-solid);
    color: var(--kf-on-solid);
}
.app-nav__theme {
    display: inline-flex; align-items: center; justify-content: center;
    width: 32px; height: 32px; padding: 0; line-height: 1;
    background: transparent; border: var(--kf-border);
    border-radius: var(--kf-r-sm); color: var(--kf-text);
    cursor: pointer; transition: background .1s, color .1s, border-color .1s;
}
.app-nav__theme:hover { background: var(--kf-text); border-color: var(--kf-text); color: var(--kf-surface-bright); }

/* Login inline din bară — dropdown flat (hairline 1px) */
.app-nav__login {
    min-width: 16rem; padding: .75rem;
    border: var(--kf-border); border-radius: var(--kf-r-sm);
    box-shadow: none;
}
.app-nav__login-lbl {
    display: block; margin-bottom: .4rem;
    font-family: var(--kf-font-display); font-weight: 400; font-size: var(--font-2xs);
    text-transform: uppercase; letter-spacing: .08em; color: var(--kf-accent);
}

.app-nav__user {
    font-size: var(--font-xs);
    color: var(--kf-text-variant);
    display: flex;
    align-items: center;
    gap: 4px;
    text-decoration: none;
    transition: color .1s;
}
.app-nav__user:hover { color: var(--kf-accent); }
.app-nav__role {
    font-family: var(--kf-font-mono);
    font-size: 0.6rem;
    background: var(--kf-surface-2);
    border: 1px solid var(--kf-line);
    padding: 0 5px;
    border-radius: var(--kf-r-sm);
    color: var(--kf-text-variant);
    letter-spacing: .05em;
}

/* Wrapper principal */
.app-wrap {
    max-width: 1200px;
    margin: 0 auto;
    padding: 0 1rem;
}

/* Pagina judecatorului — fara sidebar, full screen */


/* Container login — latime fixa centrata */
.login-container { max-width: 420px; }

/* Container formular ingust */


/* Header de pagina compact */
.page-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 0.75rem;
    flex-wrap: wrap;
    gap: 0.5rem;
}
.page-header__title {
    font-family: var(--font-display);
    font-size: var(--font-base);
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    margin: 0;
}


/* === 3. TABLES ============================================= */

/* Tabel compact */






/* Coloane fixe frecvente */



.col-actions { width: 100px; text-align: right; white-space: nowrap; }

/* Rank column */

.rank-1         { color: var(--rank-gold); }
.rank-2         { color: var(--rank-silver); }
.rank-3         { color: var(--rank-bronze); }

/* Stat column */

.stat-value { font-weight: 700; color: var(--fg1); }


/* Results table */









/* Section header */



/* === 4. BADGES & STATUS ==================================== */

/* Badge status concurs */
.badge-status {
    font-family: var(--font-display);
    font-size: var(--font-xs);
    font-weight: 900;
    padding: var(--pad-badge);
    border-radius: var(--radius-md);
    display: inline-block;
    white-space: nowrap;
    line-height: 1.4;
    text-transform: uppercase;
    letter-spacing: 0.08em;
}
.badge-status--draft    { background: var(--status-draft-bg);   color: var(--status-draft-fg); }
.badge-status--open     { background: var(--status-open-bg);    color: var(--status-open-fg); }
.badge-status--closed   { background: var(--status-closed-bg);  color: var(--status-closed-fg); }
.badge-status--active   { background: var(--status-active-bg);  color: var(--status-active-fg); }
.badge-status--done     { background: var(--status-done-bg);    color: var(--status-done-fg); }

/* Badge status battle/bout */

.badge-battle--pending   { background: var(--battle-pending-bg);   color: var(--battle-pending-fg); }
.badge-battle--progress  { background: var(--battle-progress-bg);  color: var(--battle-progress-fg); }
.badge-battle--completed { background: var(--battle-completed-bg); color: var(--battle-completed-fg); }

/* Badge faza bracket */


/* Badge categorie */
.badge-category {
    font-size: var(--font-xs);
    font-weight: 700;
    padding: var(--pad-badge);
    border-radius: var(--radius-md);
    background: var(--surface-inverse);
    color: var(--text-on-inverse);
    text-decoration: none;
    display: inline-block;
    transition: background 0.1s;
}
.badge-category:hover { background: var(--primary); color: #fff; }

/* Badge metoda calificare */



/* Valori semantice */






/* === 5. PILLS & FILTERS ==================================== */

.filter-pill {
    font-size: var(--font-sm);
    padding: var(--pad-pill);
    border-radius: var(--radius-sm);
    border: 1.5px solid var(--border-strong);
    background: var(--card);
    color: var(--fg2);
    cursor: pointer;
    transition: background 0.1s, color 0.1s;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    line-height: 1.3;
}
.filter-pill:hover  { background: var(--volt); color: var(--volt-ink); border-color: var(--volt-ink); }
.filter-pill.active { background: var(--surface-inverse); color: var(--text-on-inverse); }



/* === 5b. FOLDER TABS (segmented page tabs, lipite de conținut) === */
.folder-tabs {
    display: flex; flex-wrap: wrap; gap: .25rem; align-items: flex-end;
    border-bottom: 2px solid var(--border-strong);
    margin-bottom: 1rem;
}
.folder-tab {
    display: inline-flex; align-items: center; gap: 6px;
    padding: .4rem .85rem; margin-bottom: -2px;        /* acoperă rigla containerului */
    background: transparent; border: 2px solid transparent; border-bottom: none;
    border-radius: var(--radius-sm) var(--radius-sm) 0 0;
    font-family: var(--font-display); font-weight: 900; text-transform: uppercase;
    letter-spacing: .05em; font-size: var(--font-xs); line-height: 1.3;
    color: var(--text-muted); text-decoration: none; cursor: pointer;
    transition: background .1s, color .1s;
}
.folder-tab:hover  { background: var(--volt); color: var(--volt-ink); }
.folder-tab.active { background: var(--surface); border-color: var(--border-strong); color: var(--text); }
.folder-tab__count { font-family: var(--font-mono); font-weight: 400; font-size: var(--font-2xs); color: var(--fg4); }
.folder-tab.active .folder-tab__count { color: var(--text-muted); }


/* === 6. CHIPS ============================================== */

/* Chip competitor inline */



/* Chip judecator */
.judge-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: var(--font-sm);
    padding: var(--pad-chip);
    border: 1.5px solid var(--border-strong);
    border-radius: var(--radius-md);
    background: var(--card);
    color: var(--fg1);
    text-decoration: none;
    transition: background 0.1s, color 0.1s;
    line-height: 1.4;
}
.judge-chip:hover { background: var(--volt); color: var(--volt-ink); border-color: var(--volt-ink); }

.judge-chip .chip-system  { font-size: var(--font-xs); color: var(--fg3); background: var(--paper-2); padding: 0 3px; border-radius: var(--radius-sm); }
.judge-chip__del-form { display: inline; line-height: 0; }
.judge-chip__del { border: 0; background: transparent; color: var(--danger); padding: 0; line-height: 1; cursor: pointer; font-size: var(--font-xs); }
.judge-chip:hover .judge-chip__del { color: var(--volt-ink); }
/* Jurat marcat pentru eliminare (staged) — se aplică la „Salvează modificările" */


/* Hint jurați per categorie (panel: X/N roluri · mai alege …) */
.exhint { font-size: var(--font-xs); margin-bottom: 2px; min-height: 1em; }
.exhint--ok   { color: var(--success); }
.exhint--warn { color: var(--warning); }
.exhint--err  { color: var(--danger); font-weight: 600; }


/* === 7. CARDS — Hub organizator ============================= */

.hub-card {
    border: 2px solid var(--border-strong);
    border-radius: var(--radius-lg);
    overflow: hidden;
    background: var(--card);
    transition: box-shadow .1s;
}
.hub-card:hover { box-shadow: var(--shadow-hard); }

/* Strip status colorat (top) */
.hub-strip {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: .28rem .75rem;
    font-family: var(--font-display);
    font-size: var(--font-xs);
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: .1em;
    border-bottom: 2px solid var(--border-strong);
}
.hub-strip--open   { background: var(--status-open-bg);   color: var(--status-open-fg); }
.hub-strip--closed { background: var(--status-closed-bg); color: var(--status-closed-fg); }
.hub-strip--active { background: var(--status-active-bg); color: var(--status-active-fg); }

/* Descriere concurs (sub hero, în metarow) */


/* Meta sub hero (anvergură + nr. categorii + stare + descriere) */

.hub-metarow__cats {
    font-family: var(--font-mono); font-size: var(--font-xs);
    font-variant-numeric: tabular-nums; color: var(--fg3);
}


/* Categorii hub */
.hub-cats {
    border-top: 2px solid var(--border-strong);
    padding: 0 .5rem .3rem;
}


/* Footer acțiuni */
.hub-footer {
    display: flex; align-items: center; gap: .4rem; flex-wrap: wrap;
    padding: .5rem .75rem; border-top: 2px solid var(--border-strong); background: var(--paper-2);
}

/* Head compact card — thumbnail mic + titlu proeminent + acțiuni (focus pe nume, nu poster mare) */
.hub-head {
    display: flex; align-items: flex-start; gap: .6rem;
    padding: .6rem .7rem; border-bottom: 2px solid var(--border-strong);
}
.hub-thumb {
    flex: 0 0 auto; width: 56px; height: 56px; border: 2px solid var(--border-strong);
    border-radius: var(--radius-sm); overflow: hidden; background: var(--surface-inverse);
}
.hub-thumb[data-lightbox] { cursor: zoom-in; }
.hub-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
.hub-thumb--empty { display: flex; align-items: center; justify-content: center; color: var(--text-faint); font-size: 1.3rem; }
.hub-head__main { flex: 1 1 auto; min-width: 0; }
.hub-head__title {
    font-family: var(--font-display); font-weight: 900; text-transform: uppercase;
    letter-spacing: -.01em; line-height: 1.05; font-size: clamp(1rem, 1.4vw, 1.3rem);
    color: var(--text); word-break: break-word;
}
.hub-head__meta {
    display: flex; flex-wrap: wrap; align-items: center; gap: .2rem .6rem;
    margin-top: .25rem; font-size: var(--font-sm); color: var(--text-secondary);
}
.hub-head__meta i { opacity: .75; }
.hub-head__actions { flex: 0 0 auto; }

/* Acțiuni de stare pe rândul de categorie — următorul pas explicit */
.cat-actions { display: flex; flex-wrap: wrap; gap: .3rem; margin-top: .35rem; }
.cat-actions form { display: inline; margin: 0; }

/* === Cont organizator (profil) === */
.acct-card {
    display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .75rem;
    padding: .6rem .75rem; border: 2px solid var(--border-strong);
    border-radius: var(--radius-lg); background: var(--surface);
}
.acct-card__id { display: flex; align-items: center; gap: .55rem; flex: 1 1 auto; min-width: 0; }
.acct-card__ico { font-size: 1.6rem; color: var(--text-muted); }
.acct-card__name { font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .02em; font-size: var(--font-base); color: var(--text); }
.acct-card__email { font-size: var(--font-sm); color: var(--text-secondary); }
.acct-form { display: flex; flex-wrap: wrap; align-items: flex-end; gap: .6rem; padding-top: .6rem; margin-top: .5rem; border-top: 1px solid var(--border-hair); }
.acct-form__row { display: flex; flex-direction: column; gap: .15rem; flex: 1 1 220px; }
.acct-form__lbl { font-size: var(--font-xs); text-transform: uppercase; letter-spacing: .04em; color: var(--text-muted); font-weight: 700; }
.acct-form__actions { flex: 0 0 auto; }





/* === 8. BRACKET ============================================ */

/* ── Pagina categorie LATĂ (fără sidebar, container extins pt bracket) ── */
.page-wide .app-wrap { max-width: 1600px; }

/* ── Topbar categorie: titlu mare (concurs + categorie) + strip categorii ── */
.cat-topbar { margin-bottom: .75rem; }
.cat-topbar__head {
    display: flex; justify-content: space-between; align-items: flex-start;
    gap: 1rem; flex-wrap: wrap;
}
.cat-topbar__titles { display: flex; align-items: flex-start; gap: .6rem; min-width: 0; }
.cat-topbar__back {
    display: inline-flex; align-items: center; justify-content: center;
    width: 2rem; height: 2rem; flex-shrink: 0; margin-top: .25rem;
    border: 2px solid var(--border-strong); border-radius: var(--radius-sm);
    color: var(--text); text-decoration: none;
}
.cat-topbar__back:hover { background: var(--surface-inverse); color: var(--text-on-inverse); }
.cat-topbar__cat {
    font-family: var(--font-display);
    font-size: 1.6rem; font-weight: 900; line-height: 1.1; margin: .1rem 0;
    text-transform: uppercase;
    display: flex; align-items: center; gap: .5rem; flex-wrap: wrap;
}
.cat-topbar__fmt { color: var(--primary); }
.cat-topbar__meta { font-size: var(--font-xs); color: var(--fg4); }

.cat-strip {
    display: flex; gap: .35rem; flex-wrap: wrap;
    padding-top: .5rem; margin-top: .4rem;
    border-top: 1px solid var(--border-hair);
}
.cat-strip__item {
    display: inline-flex; align-items: center; gap: .35rem;
    padding: .2rem .55rem; border-radius: 999px;
    border: 1px solid var(--border-subtle); background: var(--paper);
    font-size: var(--font-xs); color: var(--fg2); text-decoration: none; white-space: nowrap;
}
.cat-strip__item:hover { border-color: var(--border-strong); }
.cat-strip__item--on { background: var(--surface-inverse); color: var(--text-on-inverse); border-color: var(--border-strong); }
.cat-strip__fmt { font-weight: 700; }
.cat-strip__top { font-size: var(--font-2xs); color: var(--fg4); }
.cat-strip__item--on .cat-strip__top { color: rgba(245, 241, 232, .6); }

.bk-col {
    display: flex;
    flex-direction: column;
    flex: 1 1 0;
    min-width: 96px;
    max-width: 190px;
}
.bk-col-label {
    font-family: var(--font-display);
    font-size: var(--font-xs);
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: .1em;
    color: var(--fg3);
    text-align: center;
    padding: .35rem .5rem .5rem;
    border-bottom: 1px solid var(--border-hair);
    margin-bottom: .5rem;
}
.bk-col-label--active { color: var(--volt-ink); background: var(--volt); border-bottom-color: var(--volt-ink); }
.bk-col-label--done   { color: var(--success); border-bottom-color: var(--success); }

.bk-col-body {
    display: flex;
    flex-direction: column;
    flex: 1;
}

/* Fiecare battle = un slot flex egal, conținut centrat → runda cu N/2 matchuri
   pică fix la mijlocul dintre cei 2 feederi din runda dinainte. */
.bk-match {
    flex: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
    position: relative;
}

/* ── PRIMUL RÂND (T32) = FĂRĂ overlap → conector OUTGOING curat din marginea feederului.
   Brațul pleacă din muchia dreaptă a cardului (left:100%) și ajunge la bara verticală (merge point)
   la --bk-firstarm. De acolo, o linie de legătură (--bk-childlink) merge până în cardul T16. */
.bk-col--first .bk-match--up::after,
.bk-col--first .bk-match--down::after {
    content: '';
    position: absolute;
    left: 100%;
    width: var(--bk-firstarm);
    height: 50%;
    border-right: 2px solid var(--border-subtle);
}
.bk-col--first .bk-match--up::after   { top: 50%;    border-top: 2px solid var(--border-subtle); }
.bk-col--first .bk-match--down::after { bottom: 50%; border-bottom: 2px solid var(--border-subtle); }
.bk-col--first .bk-match--straight::after {
    content: '';
    position: absolute;
    left: 100%;
    top: 50%;
    width: var(--bk-firstarm);
    border-top: 2px solid var(--border-subtle);
}
/* linia de legătură de la merge point în cardul copil (T16) — ca să nu fie lipit de bracket */
.bk-col--second .bk-match::before {
    content: '';
    position: absolute;
    left: calc(var(--bk-childlink) * -1);
    top: 50%;
    width: var(--bk-childlink);
    border-top: 2px solid var(--border-subtle);
}
.bk-col--second .bk-match--resolved::before { border-color: var(--success); }

/* ── COLOANELE 3+ = overlap → conector „merge" (.bk-merge) pe matchul avansat:
   o LINIE verticală întinsă între CENTRELE celor 2 feederi (25%→75%) + cot scurt în card.
   Capetele sunt pur PROCENTUALE (sloturile flex egale țin centrele la 25%/75% indiferent de
   înălțimea cardului — ex. nume pe 2 rânduri); linia trece PE SUB cardurile feeder
   (z-index: .bk-battle=2 peste .bk-merge=1) → pare că iese din muchia cardului. */
.bk-merge {
    position: absolute;
    left: calc(var(--bk-arm) * -1);
    top: 25%;
    bottom: 25%;
    z-index: 1;
    border-left: 2px solid var(--border-subtle);
}
/* cot scurt din linie în card, la jumătatea matchului avansat */
.bk-col:not(.bk-col--first):not(.bk-col--second):not(.bk-col--final) .bk-match::after {
    content: '';
    position: absolute;
    left: calc(var(--bk-arm) * -1);
    top: 50%;
    width: var(--bk-arm);
    border-top: 2px solid var(--border-subtle);
}
/* match rezolvat → linie + cot verzi (calea câștigătorului) */
.bk-match--resolved .bk-merge,
.bk-match--resolved::after { border-color: var(--success); }

/* ── PLACEHOLDER (schelet bracket pregătit din start, ca finala „urmează") ──
   bg OPAC (--paper, ca pagina): linia merge trece pe sub carduri → fără mască s-ar vedea prin el. */
.bk-battle--ph {
    border: 1px dashed var(--border-hair);
    background: var(--paper);
    box-shadow: none;
    min-height: 40px;
    display: flex; align-items: center; justify-content: center;
}
.bk-battle--ph i { font-size: .7rem; color: var(--fg4); opacity: .5; }
/* conectorii unui placeholder = estompați (nu negru plin) */
.bk-match--ph .bk-merge,
.bk-col--second .bk-match--ph::before,
.bk-col--final .bk-battle--ph::before,
.bk-col--final .bk-battle--ph::after { border-color: var(--border-hair); }

/* Card battle — z-index 2 = peste liniile merge (vezi comentariul .bk-merge) */
.bk-battle {
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-sm);
    background: var(--card);
    overflow: hidden;
    margin: 3px 0;
    position: relative;
    z-index: 2;
    transition: box-shadow .1s;
}
.bk-battle--pending   { border-color: var(--border-hair); }
.bk-battle--active    { border-color: var(--volt-ink); background: var(--volt); color: var(--volt-ink); box-shadow: var(--shadow-hard-sm); }
.bk-battle--completed { background: var(--paper-2); }
.bk-battle--golden    { border-color: var(--primary); box-shadow: 1px 1px 0 0 var(--primary); }

/* Entry row în battle */
.bk-entry {
    display: flex;
    align-items: center;
    gap: .3rem;
    padding: .3rem .5rem;
    font-size: var(--font-base);
    border-bottom: 1px solid var(--border-hair);
    line-height: 1.25;
    min-height: 28px;
}
.bk-entry:last-of-type { border-bottom: none; }
/* câștigătorul iese clar în evidență (bandă verde la margine + bold) ca să-l urmărești ușor */
.bk-entry--winner {
    background: var(--winner-bg); color: var(--winner-fg); font-weight: 800;
    box-shadow: inset 3px 0 0 0 var(--winner-edge);
}
.bk-entry--loser  { color: var(--fg3); }   /* lizibil, dar clar secundar */
.bk-entry--bye    { color: var(--fg3); font-style: italic; letter-spacing: .08em; } /* avans liber — fără win/lose */
/* numele se aliniază spre CENTRUL bracketului: aripa stângă → dreapta, aripa dreaptă → stânga.
   Finala = centru. Nume lungi / 2v2 → maxim 2 RÂNDURI apoi taie (line-clamp); geometria nu se
   strică — sloturile .bk-match rămân egale, conectorii sunt procentuali. */
.bk-entry__name {
    flex: 1; min-width: 0; text-align: right;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
    overflow: hidden; overflow-wrap: anywhere;
}
.bk-half--right .bk-entry__name { text-align: left; }
.bk-col--final .bk-entry__name  { text-align: center; }
.bk-entry__trophy { color: var(--rank-gold); font-size: .75rem; flex-shrink: 0; }

/* Badge golden round */
/* marcaj departajare = COLȚ PLIAT (triunghi) cu nr de runde suplimentare (1/2/3) pe colț.
   Stă pe latura EXTERIOARĂ (opusă numelui, care e aliniat spre centru): stânga pe aripa
   stângă, dreapta pe aripa dreaptă → nu acoperă numele. Absolut → nu mărește înălțimea. */
.bk-golden-mark {
    position: absolute; top: 0; left: 0; z-index: 3;
    width: 26px; height: 26px;
    background: var(--primary); color: var(--text-on-inverse);
    clip-path: polygon(0 0, 100% 0, 0 100%);
    font-size: .62rem; font-weight: 800; line-height: 1;
    text-align: left; padding: 1.5px 0 0 2.5px;
}
.bk-half--right .bk-golden-mark {
    left: auto; right: 0;
    clip-path: polygon(100% 0, 0 0, 100% 100%);
    text-align: right; padding: 1.5px 2.5px 0 0;
}

/* CAMPION */
.bk-champion {
    margin-top: .75rem;
    padding: .65rem .75rem;
    background: var(--volt);
    border: 1px solid var(--volt-ink);
    border-radius: var(--radius-lg);
    text-align: center;
    color: var(--volt-ink);
    box-shadow: var(--shadow-hard-sm);
}
.bk-champion__label {
    font-family: var(--font-display);
    font-size: var(--font-xs); text-transform: uppercase; letter-spacing: .12em;
    color: var(--volt-ink); margin-bottom: .2rem;
}
.bk-champion__name {
    font-family: var(--font-display);
    font-size: 1.1rem; font-weight: 900; color: var(--volt-ink); text-transform: uppercase;
}


/* ── Split: bracket (stânga) + battle curent (dreapta), stacked pe mobil ── */
.bk-layout { display: flex; flex-direction: column; gap: 1rem; align-items: stretch; }
.bk-layout__bracket { order: 2; min-width: 0; }
.bk-layout__current { order: 1; min-width: 0; }
@media (min-width: 992px) {
    .bk-layout { flex-direction: row; align-items: flex-start; }
    /* 33 / 67: panou jurizare detaliată (battle curent) STÂNGA 33%, bracket DREAPTA 67%
       (bracketul fluid are nevoie de spațiu ca Top 32 să încapă fără scroll).
       align-self: center = panoul mai scund stă pe MIJLOCUL înălțimii bracketului, nu lipit sus;
       sticky rămâne → la scroll tot se lipește sub marginea de sus. */
    .bk-layout__current { order: 1; flex: 0 0 33%; max-width: 33%; min-width: 0; align-self: center; position: sticky; top: .75rem; }
    .bk-layout__bracket { order: 2; flex: 1 1 0; min-width: 0; }
    .bk-layout--solo .bk-layout__bracket { flex: 1 1 100%; }
}
/* bara de progres sub battle-ul curent detaliat → full width în coloana din dreapta */
.bk-progress--under { margin: .6rem 0 0; }
.bk-progress--under .bk-progress__bar { max-width: none; }

/* Capul panoului „battle curent": fază + control Start/Finalizează */
.bk-current__ctrl {
    display: flex; align-items: center; justify-content: space-between; gap: .5rem;
    padding: .35rem .55rem; margin-bottom: .5rem;
    border: 1px solid var(--volt-ink); background: var(--volt);
    border-radius: var(--radius-sm);
}
.bk-current__phase {
    font-family: var(--font-display); font-weight: 900;
    font-size: var(--font-sm); text-transform: uppercase; letter-spacing: .06em;
    color: var(--volt-ink);
}

/* Scorecard focus în coloana din stânga: umple lățimea, scară redusă vs panoul mare;
   fără umbră dură — panoul stă lipit de bracket, umbra adăuga zgomot */
.bk-layout__current .sc--focus { width: 100%; max-width: 100%; margin-bottom: 0; box-shadow: none; }
.bk-layout__current .sc--focus .sc__side { font-size: 1.02rem; padding: .5rem .7rem; }
.bk-layout__current .sc--focus .sc__score-n { font-size: 1.65rem; }
.bk-layout__current .sc--focus .sc-jt__note { font-size: var(--font-md); }
.bk-layout__current .sc--focus .sc-jt__row { grid-template-columns: 1fr 6.5rem 1fr; }

/* ── Bracket OGLINDIT (mirrored: stânga → FINALĂ ← dreapta) ──
   FLUID: mirror = 100% din container, coloanele elastice (min 96 / max 190px) → Top 32 încape
   fără scroll pe ecrane late; sub ~1250px coloanele ating minimul și .bk-scroll preia (fallback). */
.bk-scroll { overflow-x: auto; padding-bottom: .5rem; }
.bk-mirror {
    /* --bk-overlap = cât trage coloana 3+ PESTE feederul ei (mai mare = mai compact);
       --bk-firstgap = spațiul normal T32→T16 (primul rând rămâne fără overlap);
       --bk-arm = cotul scurt în card. Reglabile dintr-un loc. */
    --bk-overlap: 36px;
    --bk-firstgap: 18px;   /* T32→T16 total = brațul bracketului + linia de legătură spre copil */
    --bk-firstarm: 9px;    /* brațul bracketului (din cardul T32 până la bara verticală/merge point) */
    --bk-childlink: 9px;   /* linia care leagă merge point-ul de copil (cardul T16) — ca să nu fie lipit */
    --bk-arm: 8px;
    --bk-gap: 14px;
    display: flex;
    align-items: stretch;
    gap: 0;
    min-height: 200px;
    padding: .5rem .25rem 1.5rem;
    width: 100%;
    min-width: 0;
}
/* aripile împart spațiul egal; când coloanele ating max-width, spațiul liber merge spre
   marginile exterioare (justify flex-end + flip pe dreapta) → bracketul se strânge spre finală.
   min-width: MIN-CONTENT (nu 0!): aripa refuză să se strângă sub suma minimelor coloanelor →
   overflow-ul cade la DREAPTA mirror-ului (scrollabil), nu în stânga aripii (de neatins în LTR). */
.bk-half { display: flex; align-items: stretch; gap: 0; flex: 1 1 0; min-width: min-content; justify-content: flex-end; }
.bk-half--center { align-items: center; padding: 0 var(--bk-gap); flex: 0 0 auto; }
/* coloanele 3+ se suprapun pe orizontală → matchul avansat tras sub feederi (diagonal compact).
   Ordinea DOM (coloana mai centrală = mai târzie) o pune pe ea deasupra → conectorul „merge" se vede. */
.bk-col + .bk-col { margin-left: calc(var(--bk-overlap) * -1); }
/* a 2-a coloană (T16) NU se suprapune peste primul rând (T32) → spațiu normal pt conectorii outgoing */
.bk-col--first + .bk-col { margin-left: var(--bk-firstgap); }

/* Jumătatea dreaptă = oglindită prin CSS: scaleX flip pe coloane + conectori,
   iar conținutul (carduri + etichete) e re-flipuit ca textul să rămână normal. */
.bk-half--right { transform: scaleX(-1); }
.bk-half--right .bk-battle,
.bk-half--right .bk-col-label { transform: scaleX(-1); }

/* Finala primește din AMBELE laturi → brațe scurte stânga + dreapta */
.bk-col--final .bk-battle::before,
.bk-col--final .bk-battle::after {
    content: '';
    position: absolute;
    top: calc(50% - 1px);
    width: var(--bk-gap);
    border-top: 2px solid var(--border-subtle);
}
.bk-col--final .bk-battle::before { left: calc(var(--bk-gap) * -1); }
.bk-col--final .bk-battle::after  { right: calc(var(--bk-gap) * -1); }

/* ── SCORECARD (battle reveal: runde × jurați × participant) ── */
.sc {
    border: 1px solid var(--border-subtle);
    border-radius: var(--radius-lg);
    background: var(--card);
    margin-bottom: .75rem;
    max-width: 680px;
    overflow: hidden;
}
.sc--live { border-color: var(--volt-ink); box-shadow: var(--shadow-hard-sm); }
.sc--done { border-color: var(--success); }

/* Panou FOCUS — battle curent/rezultat */
.sc--focus { max-width: 960px; width: 100%; margin-bottom: 1rem; box-shadow: var(--shadow-hard); }
.sc--focus .sc__bar { font-size: var(--font-sm); padding: .4rem .85rem; }
.sc--focus .sc__side { font-size: 1.3rem; padding: .7rem 1rem; }
.sc--focus .sc__score-n { font-size: 2.2rem; }
.sc--focus .sc__score { min-width: 5.5rem; }
.sc--focus .sc-jt__note { font-size: 1.05rem; }
.sc--focus .sc-jt__cell { min-height: 1.8rem; }
.sc--focus .sc-round__hd { font-size: var(--font-sm); }

.sc__bar {
    display: flex; justify-content: space-between; align-items: center;
    padding: .3rem .6rem;
    background: var(--surface-inverse); color: var(--text-on-inverse);
    font-family: var(--font-display);
    font-size: var(--font-xs); text-transform: uppercase; letter-spacing: .08em;
}
.sc__state { display: inline-flex; align-items: center; gap: .3rem; font-weight: 700; }
.sc__dot { width: 8px; height: 8px; border-radius: 50%; background: var(--volt);
           animation: sc-pulse 1.1s ease-in-out infinite; }
@keyframes sc-pulse { 0%,100% { opacity: 1; } 50% { opacity: .25; } }

.sc__vs { display: flex; align-items: stretch; border-bottom: 1px solid var(--border-hair); }
.sc__side {
    flex: 1; min-width: 0; padding: .5rem .75rem;
    font-family: var(--font-display); font-weight: 900; font-size: 1.05rem; text-transform: uppercase;
    display: flex; align-items: center; gap: .4rem;
}
.sc__side--r { justify-content: flex-end; text-align: right; }
.sc__side--win { background: var(--winner-bg); color: var(--winner-fg); box-shadow: inset 4px 0 0 0 var(--winner-edge); }
.sc__side--out { color: var(--fg4); }
/* nume lungi / 2v2 → maxim 2 rânduri apoi taie (același pattern ca .bk-entry__name) */
.sc__nm {
    min-width: 0;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
    overflow: hidden; overflow-wrap: anywhere;
}
.sc__tr { color: var(--rank-gold); flex-shrink: 0; }

/* Scor mare acumulat în antet = runde câștigate (2–0) */
.sc__score { align-self: center; flex-shrink: 0; text-align: center; padding: 0 .7rem; min-width: 4.5rem; }
.sc__vs-mid { font-family: var(--font-display); font-weight: 900; color: var(--fg4); font-size: var(--font-sm); }
.sc__score-n { font-family: var(--font-display); font-weight: 900; font-size: 1.6rem; line-height: 1; color: var(--fg3); }
.sc__score-n.is-win { color: var(--winner-ink); }
.sc__score-sep { font-family: var(--font-display); font-weight: 900; color: var(--fg4); font-size: 1rem; margin: 0 .15rem; }
.sc__score-lbl { display: block; font-size: var(--font-2xs); color: var(--fg4); text-transform: uppercase; letter-spacing: .05em; margin-top: 2px; }

/* Bloc rundă = card distinct, fundal colorat ciclic (3 culori) + dungă accent stânga,
   ca rundele să se distingă clar una de alta */
.sc-round {
    border-left: 4px solid var(--fg4);
    border-radius: var(--radius-sm); margin: 0 .45rem .4rem; overflow: hidden;
}
.sc-round:first-of-type { margin-top: .4rem; }
.sc-round--c0 { border-left-color: #2f6df0; background: #f4f8ff; }
.sc-round--c0 .sc-round__hd { background: #dde9ff; }
.sc-round--c1 { border-left-color: var(--warning); background: #fffaef; }
.sc-round--c1 .sc-round__hd { background: var(--warning-soft); }
.sc-round--c2 { border-left-color: #7a4fd0; background: #f7f2ff; }
.sc-round--c2 .sc-round__hd { background: #e7dcff; }
/* runda de departajare (golden) — scoasă în evidență cu auriu */
.sc-round--golden { border: 2px solid var(--rank-gold); border-left-width: 5px; background: #fff8e6; box-shadow: 0 0 0 2px rgba(199,146,0,.12); }
.sc-round--golden .sc-round__hd { background: var(--golden-soft); color: var(--on-golden); }
.sc-round--golden .sc-round__no { color: var(--on-golden); }
.sc-round__hd {
    display: flex; justify-content: space-between; align-items: center; gap: .5rem;
    padding: .2rem .6rem; background: var(--paper-2);
    border-bottom: 1px solid var(--border-hair);
    font-size: var(--font-xs); text-transform: uppercase; letter-spacing: .05em;
}
.sc-round__no { font-family: var(--font-display); font-weight: 900; color: var(--fg2); }
.sc-round__res { display: inline-flex; align-items: center; gap: .5rem; min-width: 0; }
.sc-round__w { font-weight: 700; }
.sc-round__w--tie { color: var(--fg3); }
.sc-round__tally { font-family: var(--font-mono); color: var(--fg3); flex-shrink: 0; }

/* Tabel jurați — stânga = e1 | jurat | dreapta = e2. Fundal alb ca umplerea %-ului să se vadă clar
   (identitatea rundei rămâne pe header + dunga stângă + chenar). */
.sc-jt { display: flex; flex-direction: column; background: var(--card); }
/* Mijloc cu lățime FIXĂ (nu auto) → celulele laterale e1/e2 rămân egale pe TOATE rândurile
   și rundele, indiferent de cât de lung e numele juratului/criteriului → barele --w% nu se
   mai distorsionează. Numele/criteriile lungi se rup în mijlocul fix (overflow-wrap). */
.sc-jt__row {
    display: grid; grid-template-columns: 1fr 7.5rem 1fr;
    align-items: stretch; border-top: 1px solid var(--border-hair);
}
.sc--focus .sc-jt__row { grid-template-columns: 1fr 10rem 1fr; }
.sc-jt__row:first-child { border-top: none; }
.sc-jt__judge {
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    padding: .12rem .4rem; text-align: center; line-height: 1.05;
    border-left: 1px solid var(--border-hair); border-right: 1px solid var(--border-hair);
    min-width: 0; overflow: hidden; overflow-wrap: anywhere;
}
.sc-jt__jn { font-size: var(--font-xs); font-weight: 700; }
.sc-jt__jr { font-size: var(--font-2xs); color: var(--fg3); text-transform: uppercase; }
/* O singură linie per jurat/participant — FĂRĂ wrap. Fundalul celulei = cât din total
   (lungime = % normalizat), cu muchie clară unde se termină procentul. */
.sc-jt__cell {
    --sc-fill: rgba(20, 18, 16, .12); --sc-edge: rgba(20, 18, 16, .3);
    position: relative; overflow: hidden;
    display: flex; align-items: center; flex-wrap: nowrap; gap: .4rem;
    padding: .14rem .6rem; min-height: 1.55rem; min-width: 0;
    /* Fundal = cât din total: bloc colorat până la --w (=% normalizat) cu muchie clară */
    background:
        linear-gradient(90deg, transparent calc(var(--w, 0%) - 2px), var(--sc-edge) calc(var(--w, 0%) - 2px), var(--sc-edge) var(--w, 0%), transparent var(--w, 0%)),
        linear-gradient(90deg, var(--sc-fill) var(--w, 0%), transparent var(--w, 0%));
}
.sc-jt__cell--e2 {
    justify-content: flex-end;
    background:
        linear-gradient(270deg, transparent calc(var(--w, 0%) - 2px), var(--sc-edge) calc(var(--w, 0%) - 2px), var(--sc-edge) var(--w, 0%), transparent var(--w, 0%)),
        linear-gradient(270deg, var(--sc-fill) var(--w, 0%), transparent var(--w, 0%));
}
.sc-jt__cell.is-fav { --sc-fill: rgba(15, 138, 61, .22); --sc-edge: var(--success); box-shadow: inset 3px 0 0 0 var(--success); }
.sc-jt__cell--e2.is-fav { box-shadow: inset -3px 0 0 0 var(--success); }
/* rundă egală (scor egal) — marcaj neutru amber pe ambele părți + „egal" la mijloc */
.sc-jt__cell.is-tie { --sc-fill: rgba(199, 146, 0, .16); --sc-edge: var(--warning); box-shadow: inset 3px 0 0 0 var(--warning); }
.sc-jt__cell--e2.is-tie { box-shadow: inset -3px 0 0 0 var(--warning); }
.sc-jt__judge.is-tie { background: var(--warning-soft); }
.sc-jt__eq { font-size: var(--font-2xs); font-weight: 800; text-transform: uppercase; letter-spacing: .03em; color: var(--warning); }
/* Caret „favorit" scos din flux, fix la marginea exterioară → nu mai împinge cifrele */
.sc-jt__cell--e1 { padding-left: 1.6rem; }
.sc-jt__cell--e2 { padding-right: 1.6rem; }
.sc-jt__fav { position: absolute; top: 50%; transform: translateY(-50%); }
.sc-jt__cell--e1 .sc-jt__fav { left: .45rem; }
.sc-jt__cell--e2 .sc-jt__fav { right: .45rem; }
/* Nota = numărul prominent; %-ul mic (lungimea fundalului îl arată oricum) */
.sc-jt__note { flex-shrink: 0; font-family: var(--font-mono); font-weight: 700; font-size: var(--font-md); color: var(--fg1); }
.sc-jt__note small { font-size: var(--font-2xs); color: var(--fg2); font-weight: 400; }
/* Skilluri separate (Trivium) — inline, întregi (e loc), text lizibil */
.sc-jt__sk { display: inline-flex; flex-wrap: nowrap; gap: .45rem; }
.sc-jt__skv { font-size: var(--font-xs); color: var(--fg2); white-space: nowrap; }
.sc-jt__skv b { color: var(--fg1); font-family: var(--font-mono); }
.sc-jt__pen {
    flex-shrink: 0; font-size: var(--font-2xs); color: var(--danger); font-weight: 700; white-space: nowrap;
    background: var(--danger-soft); padding: 0 .3rem; border-radius: var(--radius-sm); text-transform: uppercase;
}
.sc-jt__fav { color: var(--success); flex-shrink: 0; }

/* Legendă reveal — explică notă / % / bară / crash pentru oameni obișnuiți */
.sc-legend {
    display: flex; flex-wrap: wrap; gap: .3rem 1.1rem;
    padding: .4rem .65rem; background: var(--paper-2); border-bottom: 1px solid var(--border-hair);
    font-size: var(--font-2xs); color: var(--fg3);
}
.sc-legend > span { display: inline-flex; align-items: center; gap: .35rem; }
.sc-legend__k {
    font-family: var(--font-mono); color: var(--fg1);
    background: var(--card); border: 1px solid var(--border-hair); border-radius: var(--radius-sm); padding: 0 .3rem;
}
.sc-legend__bar { width: 26px; height: 7px; border-radius: 999px; border: 1px solid var(--border-hair); background: linear-gradient(90deg, var(--success) 65%, var(--paper) 65%); }

/* OUR / panel — tabel JURAT × DANSATOR. Stânga = juratul + categoria pe care o jurizează;
   coloana fiecărui dansator = TOTALul dat de acel jurat pe criteriul lui. Verde = cine a luat mai
   mult la criteriul ăla; crash/slip marcat. Detaliul pe runde rămâne în bracket (vizualizare detaliată). */
/* UN tabel: cap (nume mari + scor mare, stil .sc__vs) + rânduri criterii pe ACELEAȘI 3 coloane
   (1fr | criteriu/scor | 1fr) → e1 sub nume1, criteriul sub scor, e2 sub nume2. Aliniere garantată. */
/* full-bleed în rama .sc (chenarul exterior = SINGURA ramă; fără cutie-în-cutie) */
.sc-jc { display: grid; grid-template-columns: 1fr minmax(5rem, auto) 1fr; margin: 0; background: var(--card); font-variant-numeric: tabular-nums; }
/* cap: nume mari */
.sc-jc__nm { display: flex; align-items: center; justify-content: center; gap: .4rem; padding: .5rem .75rem; border-bottom: 1px solid var(--border-hair); font-family: var(--font-display); font-weight: 900; font-size: 1.05rem; text-transform: uppercase; min-width: 0; }
.sc-jc__nm.is-win { background: var(--winner-bg); color: var(--winner-fg); }
.sc-jc__nm.is-out { color: var(--fg4); }
/* cap: scor mare (centru) */
.sc-jc__sc { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: .3rem .7rem; border-bottom: 1px solid var(--border-hair); text-align: center; }
.sc-jc__sc-n { font-family: var(--font-display); font-weight: 900; font-size: 1.6rem; line-height: 1; color: var(--fg3); }
.sc-jc__sc-n.is-win { color: var(--winner-ink); }
.sc-jc__sc-sep { font-family: var(--font-display); font-weight: 900; color: var(--fg4); font-size: 1rem; margin: 0 .15rem; }
.sc-jc__sc small { font-size: var(--font-2xs); color: var(--fg4); text-transform: uppercase; letter-spacing: .05em; margin-top: 2px; }
/* notă departajare — apare DOAR la egalitate de criterii (suma punctelor decide) */
.sc-jc__tiebreak { margin-top: 3px; padding: 1px 6px; background: var(--warning-soft); border-radius: var(--radius-sm); font-family: var(--font-sans); font-size: var(--font-2xs); font-weight: 700; text-transform: uppercase; letter-spacing: .03em; color: var(--on-warning-soft); line-height: 1.2; }
.sc-jc__tiebreak b { font-family: var(--font-mono); color: var(--fg2); }
.sc-jc__tiebreak b.is-win { color: var(--winner-ink); }
/* rânduri criterii — aliniate sub cap; cifra centrată, penalizările sub ea (nu o împing) */
.sc-jc__v { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px; padding: .3rem .5rem; border-top: 1px solid var(--border-hair); font-family: var(--font-mono); }
.sc-jc__v b { font-size: 1.3rem; font-weight: 700; color: var(--fg2); line-height: 1; }
.sc-jc__v.is-win { background: var(--winner-bg); }
.sc-jc__v.is-win b { color: var(--winner-fg); }
/* egalitate la criteriu (scor egal) — neutru amber, NU verde; „egal" în centru */
.sc-jc__v.is-tie { background: var(--warning-soft); }
.sc-jc__v.is-tie b { color: var(--on-warning-soft); }
.sc-jc__crit.is-tie { background: var(--warning-soft); }
.sc-jc__eq { font-family: var(--font-sans); font-size: var(--font-2xs); font-weight: 800; text-transform: uppercase; letter-spacing: .03em; color: var(--on-warning-soft); background: var(--warning-soft); padding: 0 .3rem; border-radius: var(--radius-sm); margin-left: .3rem; }
.sc-jc__crit { display: flex; align-items: center; justify-content: center; gap: .4rem; padding: .3rem .5rem; border-top: 1px solid var(--border-hair); text-align: center; min-width: 0; }
.sc-jc__jx { display: flex; flex-direction: column; min-width: 0; }
/* numele juratului = linia PRINCIPALĂ (mare, vizibilă) indiferent de sistemul de jurizare;
   ce jurizează (criteriu/rol) = secundar dedesubt */
.sc-jc__name { font-family: var(--font-sans); font-size: var(--font-sm); font-weight: 800; color: var(--fg1); line-height: 1.15; }
.sc-jc__role { font-family: var(--font-sans); font-size: var(--font-2xs); font-weight: 600; text-transform: uppercase; letter-spacing: .02em; color: var(--fg3); line-height: 1.15; }
/* min-height = rezervarea rândului de penalizări: când o latură are penalizări iar cealaltă nu, ambele
   randează `.sc-jc__pens` (gol unde lipsește) → înălțime egală, laturile rămân aliniate (regulă de design). */
.sc-jc__pens { display: flex; flex-wrap: wrap; justify-content: center; align-items: flex-start; gap: 2px; min-height: .9rem; }
.sc-jc__pen { font-size: var(--font-2xs); color: var(--danger); font-weight: 800; background: var(--danger-soft); padding: 0 .25rem; border-radius: var(--radius-sm); text-transform: uppercase; white-space: nowrap; }
.sc--focus .sc-jc__nm { font-size: 1.3rem; padding: .7rem 1rem; }
.sc--focus .sc-jc__sc-n { font-size: 2.2rem; }
.sc--focus .sc-jc__v b { font-size: 1.8rem; }
.sc--focus .sc-jc__name { font-size: var(--font-md); }

/* Toggle „Detaliu pe jurați" — lipit sub rezumat, deschide tabelele pe runde (Bootstrap collapse).
   Capul de tabel NU se redublează: numele sunt deja în rezumatul de deasupra. */
/* rând-footer al aceleiași rame (nu cutie separată): full-width, doar hairline sus */
.sc-detail-toggle {
    display: flex; align-items: center; justify-content: space-between; gap: .5rem;
    width: 100%; margin: 0; padding: .3rem .6rem;
    background: transparent; border: 0; border-top: 1px solid var(--border-hair); border-radius: 0;
    font-family: var(--font-display); font-size: var(--font-2xs); font-weight: 800;
    text-transform: uppercase; letter-spacing: .06em; color: var(--fg2); cursor: pointer;
    transition: background .12s, color .12s, border-color .12s;
}
.sc-detail-toggle:hover { background: var(--paper-2); color: var(--fg1); }
.sc-detail-toggle[aria-expanded="true"] { background: var(--surface-inverse); color: var(--text-on-inverse); border-color: var(--border-strong); }
.sc-detail-toggle__chev { flex-shrink: 0; font-size: var(--font-sm); transition: transform .15s; }
.sc-detail-toggle[aria-expanded="true"] .sc-detail-toggle__chev { transform: rotate(180deg); }
.sc-detail { border-top: 1px solid var(--border-hair); }
.sc--focus .sc-detail-toggle { font-size: var(--font-xs); padding: .4rem .75rem; }

/* Totaluri (baza tie-break) */
.sc-totals {
    display: flex; align-items: center; justify-content: space-between;
    padding: .35rem .75rem; background: var(--paper-2); border-top: 1px solid var(--border-hair);
}
.sc-totals__v { font-family: var(--font-mono); font-weight: 700; font-size: var(--font-md); color: var(--fg3); }
.sc-totals__v--hi { color: var(--success); }
/* maxul teoretic (constant) — mic, estompat, lipit de total ca scală („18.6 / 30") */
.sc-totals__max { font-size: var(--font-2xs); color: var(--fg4); font-weight: 400; margin-left: 2px; }
.sc-totals__lbl { font-size: var(--font-2xs); color: var(--fg3); text-transform: uppercase; letter-spacing: .06em; }

/* ── Boxe cu totalul pe rundă lângă totalul fiecărui jurat/criteriu (panel ȘI simplu).
   Celula devine rând: boxe dinspre MARGINE + totalul mare spre CENTRU. ── */
/* GRID pe 2 coloane × 2 rânduri: rândul 1 = boxe-runde + total (top-aligned, deci numerele rămân
   pe aceeași linie pe toate rândurile); rândul 2 = penalizările pe RÂND PROPRIU, sub coloana boxelor
   → un rând cu 3 taguri (wipe+slip+crash) nu mai decalează celelalte rânduri. */
/* padding vertical mic → boxele stau lipite de linia de sus a celulei (încap mai multe); orizontal strâns. */
.sc-jc__v { display: grid; align-items: start; column-gap: .3rem; row-gap: 1px; padding: 0 .3rem .15rem; }
.sc-jc__v--e1 { grid-template-columns: 1fr auto; }
.sc-jc__v--e2 { grid-template-columns: auto 1fr; }
.sc-jc__v--e1 .sc-rds { grid-column: 1; grid-row: 1; justify-content: center; }
.sc-jc__v--e1 .sc-jc__tg { grid-column: 2; grid-row: 1; }
.sc-jc__v--e2 .sc-jc__tg { grid-column: 1; grid-row: 1; }
.sc-jc__v--e2 .sc-rds { grid-column: 2; grid-row: 1; justify-content: center; }
/* Penalizările = rândul 2 pe TOATĂ lățimea (sub boxe ȘI sub punctaj) → au loc să curgă/wrap fără să se
   înghesuie doar sub o coloană (ex. fereastră mică, mai multe penalizări). */
.sc-jc__v--e1 .sc-jc__pens,
.sc-jc__v--e2 .sc-jc__pens { grid-column: 1 / 3; grid-row: 2; }
/* Coloana totalului = lățime FIXĂ → cifra (b) rămâne centrată pe aceeași coloană pe toate rândurile.
   Lățime suficientă pt 4 caractere (ex. 100%) ca cifrele să nu treacă de linia coloanei. */
.sc-jc__tg { display: flex; flex-direction: column; align-items: center; justify-content: center; align-self: center; gap: 1px; flex-shrink: 0; width: 3.4rem; }
.sc--focus .sc-jc__tg { width: 4.5rem; }
/* Boxe-runde: SUS + pe-o-parte; fără border — doar tintă subtilă de fundal (de-pătrățit). */
.sc-rds { display: flex; flex-wrap: wrap; align-items: flex-start; align-self: flex-start; gap: 2px; min-width: 0; }
.sc-rds__b {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 1.2rem; height: 1.2rem; padding: 0 .15rem; flex-shrink: 0;
    border-radius: var(--radius-sm);
    background: var(--paper-2); font-family: var(--font-mono);
    font-size: var(--font-2xs); color: var(--fg3); line-height: 1;
}
.sc--focus .sc-rds__b { min-width: 1.45rem; height: 1.45rem; font-size: var(--font-sm); }
/* rândurile per-jurat pt varianta simplă (skills) — același grid ca panelul */
.sc-jr { margin-top: .4rem; }

/* Rezumat pe RUNDE — randat în ACELAȘI grid .sc-jc ca pe-criterii: căsuțele = notele juraților brute pe
   rundă (.sc-rds), totalul pe rundă = procent (.sc-jc__tg). Verde/amber moștenit din .sc-jc__v. */
/* runda de departajare — coloana din mijloc aurie ca la detalii (.sc-round--golden), să se înțeleagă specială */
.sc-jc__crit--golden { background: var(--golden-soft); }
.sc-jc__crit--golden .sc-jc__name { color: var(--on-golden); }

/* Progres (înainte de reveal) — bară segmentată pe toată lățimea, un segment / jurat */
.sc-prog { padding: .55rem .65rem; display: flex; flex-direction: column; gap: 6px; }
.sc-prog__lbl { font-size: var(--font-2xs); color: var(--fg3); text-transform: uppercase; letter-spacing: .05em; }
.sc-prog__row { display: flex; align-items: center; gap: .5rem; }
.sc-prog__no { width: 2.2rem; flex-shrink: 0; font-family: var(--font-display); font-weight: 900; font-size: var(--font-sm); color: var(--fg3); }
.sc-prog__seg { display: flex; gap: 4px; flex: 1; }
.sc-prog__cell {
    flex: 1; height: 18px; border-radius: var(--radius-sm);
    background: var(--paper-2); border: 1px solid var(--border-hair); transition: background .15s;
}
.sc-prog__cell.is-on { background: var(--success); border-color: var(--success); }
.sc-prog__cnt { font-family: var(--font-mono); font-size: var(--font-sm); color: var(--fg2); flex-shrink: 0; min-width: 2.4rem; text-align: right; }
.sc--focus .sc-prog__cell { height: 26px; }
.sc--focus .sc-prog { gap: 8px; padding: .75rem .8rem; }
.sc-prog__empty { font-size: var(--font-sm); color: var(--fg3); }
.sc-prog__hint { font-size: var(--font-2xs); color: var(--fg4); margin-top: .2rem; }

/* Carduri battle terminate = expandabile + acordeon scorecards */
.bk-battle--expandable { cursor: pointer; }
.bk-battle--expandable:hover { box-shadow: var(--shadow-hard-sm); }
/* indiciu „apasă pt scorecard": chevron mic în COLȚ, absolut → fără div/spațiu extra sub card.
   Estompat, se aprinde la hover/expand. */
.bk-battle__more {
    position: absolute; bottom: 0; left: 1px;   /* colț exterior (numele se aliniază spre centru) */
    color: var(--fg4); font-size: .56rem; line-height: 1;
    opacity: .45; pointer-events: none;
    transition: opacity .12s, color .12s;
}
.bk-battle__more i { transition: transform .12s; }
.bk-battle--expandable:hover .bk-battle__more { opacity: 1; color: var(--text); }
.bk-battle--expandable[aria-expanded="true"] .bk-battle__more { opacity: 1; color: var(--text); }
.bk-battle--expandable[aria-expanded="true"] .bk-battle__more i { transform: rotate(180deg); }

/* Slot principal scorecard (în panoul din dreapta): un singur scorecard vizibil odată — battle-ul
   curent implicit, sau cel pe care s-a dat click în bracket. Restul rămân collapse (ascunse). */
.bk-sc-hint { font-size: var(--font-2xs); color: var(--fg3); margin: .1rem .1rem .4rem; }
.bk-sc-slot { display: flex; flex-direction: column; }
.bk-sc-slot__item .sc { margin-bottom: 0; }

/* Strip progres bracket (battle-uri terminate / total) */
.bk-progress { display: flex; align-items: center; gap: .6rem; margin: .25rem 0 .6rem; font-size: var(--font-xs); color: var(--fg3); }
.bk-progress__lbl { font-weight: 700; white-space: nowrap; }
.bk-progress__bar { flex: 1; max-width: 340px; height: 6px; background: var(--paper-2); border: 1px solid var(--border-hair); border-radius: 999px; overflow: hidden; }
.bk-progress__fill { display: block; height: 100%; background: var(--success); }

/* Finala = accent (centrul convergenței) */
.bk-col--final .bk-battle { box-shadow: var(--shadow-hard-sm); }
.bk-col--final .bk-col-label { color: var(--primary-strong); border-bottom-color: var(--primary); }


/* Backward compat */













/* === 9. FORMS ============================================== */

.form-label-xs {
    font-family: var(--font-display);
    font-size: var(--font-xs);
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 0.08em;
    color: var(--fg3);
    margin-bottom: 2px;
    display: block;
}
.form-control-xs { height: 26px; font-size: var(--font-sm); padding: 0.15rem 0.4rem; }
.form-select-xs  { height: 26px; font-size: var(--font-sm); padding: 0.1rem 1.5rem 0.1rem 0.4rem; }
.form-row-compact {
    display: flex; flex-wrap: wrap; align-items: flex-start; gap: 0.65rem 0.55rem;
}
.judge-inline-row,
.staff-inline-row { display: flex; gap: 0.4rem 0.5rem; align-items: flex-end; flex-wrap: wrap; }

/* === TOP-ALIGNED label — SSOT label câmpuri creare/editare concurs ==========================
   Cercetare UX: label deasupra inputului = cel mai scanabil pt formulare dense (vezi plan/Surse).
   Markup: control ÎNTÂI, <label> DUPĂ → `flex-direction: column-reverse` afișează label-ul DEASUPRA
   fără reordonare DOM (dropdown autocomplete rămâne absolut → neafectat). Font Archivo 600, text
   ÎNTREG (fără trunchiere). Padding sus/jos pe control = lizibilitate (anti-aglomerare). */
.form-field { display: flex; flex-direction: column-reverse; gap: 3px; min-width: 0; align-items: flex-start; }
.form-field > label {
    margin: 0; padding: 0;
    font-family: var(--font-sans); font-weight: 600; font-size: var(--font-sm);
    color: var(--text-secondary); line-height: 1.15; white-space: nowrap;
}
.form-field > .form-control,
.form-field > .form-select,
.form-field > textarea.form-control {
    width: 100%; height: auto; min-height: 1.95rem;
    padding: 0.32rem 0.55rem; font-size: var(--font-md); line-height: 1.3;
}
.form-field > textarea.form-control { min-height: 3rem; }
/* stepper „Runde/fază": label (cod fază) deasupra, input îngust centrat */
.form-field--num { width: 3.4rem; }
.form-field--num > .form-control { width: 100%; text-align: center; }
/* în rândurile jurat/staff: câmpul = coloană proprie (label sus, control jos) */
.judge-inline-row .form-field,
.staff-inline-row .form-field { min-width: 0; }

/* Panou formular pe temă (kinetic sharp light×brutalist) — înlocuiește card+bg-dark Bootstrap
   pe creare/editare concurs. Cap deschis cu hairline tare + label display uppercase. */
.form-panel {
    border: 2px solid var(--border-strong);
    border-radius: var(--radius-lg);
    background: var(--surface);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}
.form-panel__head {
    background: var(--surface-2);
    color: var(--text);
    border-bottom: 2px solid var(--border-strong);
    font-family: var(--font-display);
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    font-size: var(--font-sm);
    padding: 0.5rem 0.75rem;
    display: flex;
    align-items: center;
}
.form-panel__head--action { justify-content: space-between; gap: 0.5rem; }
.form-panel__body { padding: 0.75rem; flex: 1 1 auto; }

/* Tabel PhaseRoundConfig */






/* Formular QualificationConfig */




/* === 10. JUDGE PAGE ======================================== */

/* Pagina judecatorului — tema PROPRIE, decuplata de skin-ul kf al platformei (ergonomia
   de vot ramane a ei). Tokenizata pe .judge-page: valorile DARK = default (fallback no-JS
   corect pentru sali intunecate), remap LIGHT via [data-theme="light"] — toggle-ul global
   theme-toggle.js functioneaza neschimbat. Valorile dinamice (--fill, --bh, --rev-h,
   width progres) sunt setate din JS/Twig — nu sunt styling static.
   NAMESPACE: .sc-grid/.sc-bar/.sc-num/.sc-reveal = DOAR pagina jurat; scorecard-ul PUBLIC
   foloseste prefixele .sc-jc__ .sc-jt__ .sc__score- — nu le amesteca. (Fara asterisc+slash
   in comentarii: secventa inchide comentariul si selectorul invalid rezultat DEVOREAZA regula
   urmatoare — exact bugul care a lasat .judge-page fara tokeni.) */
.judge-page {
    --judge-bg:            #212529;
    --judge-surface:       #191d21;              /* card */
    --judge-surface-2:     #0f1113;              /* topbar + card header */
    --judge-ink:           #fff;
    --judge-ink-2:         rgba(255,255,255,.55);
    --judge-ink-3:         rgba(255,255,255,.38);
    --judge-ink-4:         rgba(255,255,255,.28);
    --judge-hair:          rgba(255,255,255,.08);
    --judge-hair-2:        rgba(255,255,255,.14);
    --judge-soft:          rgba(255,255,255,.04);
    --judge-soft-hi:       rgba(255,255,255,.16);
    --judge-accent:        #ffc107;
    --judge-on-accent:     #14181c;              /* text pe fundal accent plin */
    --judge-accent-soft:   rgba(255,193,7,.14);
    --judge-accent-border: rgba(255,193,7,.28);
    --judge-accent-hair:   rgba(255,193,7,.18);
    --judge-accent-faint:  rgba(255,193,7,.07);
    /* bare de scor: hue = --bh (Twig per bara); saturatie/luminozitate = literale per tema
       in regulile .sc-bar (o singura axa variabila — hue-ul; starile raman usor de citit) */
    --judge-bar-rest:      rgba(255,255,255,.045);
    --judge-bar-rest-hi:   rgba(255,255,255,.09);
    --judge-bar-rest-sel:  rgba(255,255,255,.07);
    --judge-rev-txt:       rgba(255,255,255,.8);
    /* penalizari: cod de culoare pe intensitate slip < crash < wipe */
    --judge-pen-slip:      #ca8a04;
    --judge-pen-crash:     #ea580c;
    --judge-pen-wipe:      #dc2626;
    --judge-pen-ink:       #fdba74;
    --judge-pen-soft:      rgba(181,71,8,.22);
    --judge-pen-border:    rgba(249,115,22,.4);
    /* stare de eroare pagina (banner offline) — aceeasi familie de rosu ca pen-wipe */
    --judge-danger-bg:     #dc2626;
    --judge-danger-ink:    #fff;
    min-height: 100vh;
    background: var(--judge-bg);
    color: var(--judge-ink);
    /* Bootstrap e incarcat NELAYERED pe pagina jurat → regula lui `body` bate stratul app la
       background/color. Ii alimentam PROPRIILE variabile in loc de !important. */
    --bs-body-bg: var(--judge-bg);
    --bs-body-color: var(--judge-ink);
}
[data-theme="light"] .judge-page {
    --judge-bg:            #f2f3f5;
    --judge-surface:       #ffffff;
    --judge-surface-2:     #e7e9ec;
    --judge-ink:           #14181c;
    --judge-ink-2:         rgba(0,0,0,.66);
    --judge-ink-3:         rgba(0,0,0,.5);
    --judge-ink-4:         rgba(0,0,0,.38);
    --judge-hair:          rgba(0,0,0,.1);
    --judge-hair-2:        rgba(0,0,0,.18);
    --judge-soft:          rgba(0,0,0,.04);
    --judge-soft-hi:       rgba(0,0,0,.12);
    --judge-accent:        #a16207;              /* amber inchis, lizibil pe deschis */
    --judge-on-accent:     #fff;
    --judge-accent-soft:   rgba(161,98,7,.12);
    --judge-accent-border: rgba(161,98,7,.34);
    --judge-accent-hair:   rgba(161,98,7,.22);
    --judge-accent-faint:  rgba(161,98,7,.08);
    --judge-bar-rest:      rgba(0,0,0,.05);
    --judge-bar-rest-hi:   rgba(0,0,0,.09);
    --judge-bar-rest-sel:  rgba(0,0,0,.06);
    --judge-rev-txt:       rgba(0,0,0,.75);
    --judge-pen-slip:      #a16207;
    --judge-pen-crash:     #c2410c;
    --judge-pen-wipe:      #b91c1c;
    --judge-pen-ink:       #9a3412;
    --judge-pen-soft:      rgba(194,65,12,.12);
    --judge-pen-border:    rgba(234,88,12,.45);
    --judge-danger-bg:     #b91c1c;
    --judge-danger-ink:    #fff;
}

/* --- Topbar: UN rand subtire (nume · concurs) — inaltimea e la premium pe telefonul juratului --- */
.judge-header {
    background: var(--judge-surface-2);
    padding: .25rem .75rem;
    display: flex; justify-content: space-between; align-items: center; gap: .5rem;
    margin-bottom: .4rem;
}
.judge-header__id { display: flex; flex-wrap: wrap; align-items: baseline; gap: .1rem .6rem; min-width: 0; }
.judge-header__name { font-weight: 700; font-size: .85rem; white-space: nowrap; }
.judge-header__name .bi { color: var(--judge-accent); }
.judge-header__meta { font-size: .65rem; color: var(--judge-ink-4); }
/* Toggle tema — tinta touch pastrata (40px), dar nu mai dicteaza un header inalt */
.judge-header__theme {
    width: 2.5rem; height: 2.5rem; flex-shrink: 0;
    display: inline-flex; align-items: center; justify-content: center;
    background: transparent; border: 1px solid var(--judge-hair-2);
    border-radius: 8px; color: var(--judge-ink-2); font-size: 1.05rem; cursor: pointer;
}
.judge-header__theme:hover { color: var(--judge-ink); border-color: var(--judge-ink-3); }

/* --- Banner conexiune pierduta — overlay fixed (zero layout shift), aprins/stins din
       judge-panel.js la >=2 esecuri consecutive de fetch respectiv primul succes --- */
.judge-conn {
    position: fixed; top: 0; left: 0; right: 0; z-index: 1080;
    display: none;
    padding: .5rem .75rem;
    text-align: center;
    font-size: var(--font-sm); font-weight: 600;
    background: var(--judge-danger-bg); color: var(--judge-danger-ink);
}
.judge-conn--on { display: block; }

/* --- Progres calificare --- */
.qual-progress { margin-bottom: .6rem; }
.qual-progress__head {
    display: flex; justify-content: space-between; margin-bottom: .25rem;
    font-size: .7rem; color: var(--judge-ink-3);
}
.qual-progress__count { font-weight: 700; color: var(--judge-ink-2); }
.qual-progress__track { height: 3px; background: var(--judge-hair-2); border-radius: 2px; overflow: hidden; }
.qual-progress__bar { height: 100%; background: var(--judge-accent); border-radius: 2px; transition: width .4s; }

/* --- Bar chart (un grid per skill) --- */
/* Bare clickabile pe TOATA inaltimea — umplerea vizuala = gradient pana la --fill;
   restul (sus) = zona faint, dar tot clickabila (tinta mare, usor de nimerit).
   Mobile-first: grid mai INALT pe telefon (degete), compact pe desktop.
   Compactat 2026-07-10 (5.4→3.4rem): 2 concurenti × 2 subcriterii trebuie sa incapa pe un ecran
   de telefon fara scroll; bara ~54px + latime flex:1 ramane peste tinta touch de 44px. */
.sc-grid { display: flex; align-items: stretch; gap: 3px; height: 3.4rem; }
/* Gradientul barei: hue-ul (rosu 0 -> verde 120) vine per bara din --bh (randat in Twig,
   inline custom-prop = exceptia dinamica documentata); saturatia/luminozitatea = literale
   per tema (dark aici, light in override-ul de mai jos). */
.sc-bar {
    flex: 1; min-width: 1.4rem; height: 100%;
    display: flex; align-items: flex-end; justify-content: center;
    cursor: pointer; border-radius: 4px; position: relative;
    background: linear-gradient(to top,
        hsl(var(--bh,60), 55%, 18%) var(--fill,100%),
        var(--judge-bar-rest) var(--fill,100%));
    transition: background .12s, box-shadow .12s;
}
.sc-bar:hover { background: linear-gradient(to top,
        hsl(var(--bh,60), 66%, 30%) var(--fill,100%),
        var(--judge-bar-rest-hi) var(--fill,100%)); }
/* Selectia = gradient viu + halou + CONTUR de cerneala (vizibil garantat pe dark SI pe light) */
.sc-bar.sel { background: linear-gradient(to top,
        hsl(var(--bh,60), 82%, 50%) var(--fill,100%),
        var(--judge-bar-rest-sel) var(--fill,100%));
    box-shadow: 0 0 14px hsl(var(--bh,60), 82%, 42%);
    outline: 2px solid var(--judge-ink); outline-offset: 1px; }
[data-theme="light"] .judge-page .sc-bar { background: linear-gradient(to top,
        hsl(var(--bh,60), 60%, 78%) var(--fill,100%),
        var(--judge-bar-rest) var(--fill,100%)); }
[data-theme="light"] .judge-page .sc-bar:hover { background: linear-gradient(to top,
        hsl(var(--bh,60), 65%, 68%) var(--fill,100%),
        var(--judge-bar-rest-hi) var(--fill,100%)); }
[data-theme="light"] .judge-page .sc-bar.sel { background: linear-gradient(to top,
        hsl(var(--bh,60), 80%, 42%) var(--fill,100%),
        var(--judge-bar-rest-sel) var(--fill,100%));
    box-shadow: 0 0 14px hsl(var(--bh,60), 80%, 55%); }
.judge-col--locked .sc-bar,
.judge-col--locked .sc-bar:hover { cursor: default; }
.sc-num { position: absolute; bottom: 4px; font-size: .62rem; font-weight: 700; color: var(--judge-ink-3); pointer-events: none; }
.sc-bar.sel .sc-num { color: #fff; font-size: .72rem; }   /* pe umplerea vivida — lizibil in ambele teme */
@media (min-width: 768px) {
    .sc-grid { height: 3.2rem; }
}

/* --- Skill row (label + grid, stacked vertical) --- */
.sk-row { margin-bottom: .35rem; }
.sk-label {
    display: flex; justify-content: space-between; align-items: baseline;
    font-size: .62rem; font-weight: 700; text-transform: uppercase;
    letter-spacing: .04em; color: var(--judge-ink-2); margin-bottom: .25rem;
}
.sk-label .sk-max { color: var(--judge-ink-4); font-weight: 700; }
.sk-name { display: flex; flex-direction: column; gap: 1px; }


/* --- Header criteriu — MEREU vizibil (juratul nu trebuie sa uite ce jurizeaza).
   Un skill = numele lui mare; multi-skill = numele sistemului + subcriteriile enumerate. --- */
.crit-header { text-align: center; padding: .5rem .6rem .35rem; border-bottom: 1px solid var(--judge-hair); }
.crit-header__name { font-size: 1.35rem; font-weight: 900; color: var(--judge-ink); line-height: 1.04; letter-spacing: -.02em; text-transform: uppercase; }
.crit-header__sub { font-size: .74rem; color: var(--judge-ink-2); margin-top: .15rem; }
.crit-header__lbl { font-size: .55rem; font-weight: 700; text-transform: uppercase; letter-spacing: .09em; color: var(--judge-ink-4); }
.crit-header--multi .crit-header__name { font-size: 1.15rem; }

/* --- Bara 0 = penalizare (atingere/interferenta), marcata distinct --- */
.sc-bar--zero { opacity: .9; outline: 1px dashed var(--judge-hair-2); outline-offset: -2px; }

/* --- Reveal ancora per coloana: intre numele concurentului si bare. Slot rezervat
   (min-height = fara salt la prima apasare), .sc-reveal--on = colorat din hue-ul notei. --- */
.sc-reveal { margin: .25rem 0 .4rem; padding: .4rem .5rem; border-radius: 7px; min-height: 2.3rem;
    border-left: 4px solid var(--judge-hair-2); background: var(--judge-soft);
    font-size: .76rem; line-height: 1.3; }
.sc-reveal__hint { color: var(--judge-ink-4); font-size: .68rem; }
.sc-reveal--on { border-left-color: hsl(var(--rev-h,60), 72%, 50%); background: hsla(var(--rev-h,60), 55%, 42%, .16); }
.sc-reveal--on .sc-reveal__lvl { display: block; font-weight: 800; text-transform: uppercase; letter-spacing: .04em; font-size: .7rem; margin-bottom: .12rem; color: hsl(var(--rev-h,60), 85%, 66%); }
[data-theme="light"] .judge-page .sc-reveal--on .sc-reveal__lvl { color: hsl(var(--rev-h,60), 85%, 32%); }
.sc-reveal__txt { display: block; color: var(--judge-rev-txt); }

/* --- Penalizare crash (battle slot): PROEMINENTA — 4 butoane egale pe un rand,
   tinta touch >= 44px mereu. COD DE CULOARE pe intensitate (slip galben < crash portocaliu
   < wipe rosu), vizibil si inactiv prin banda din stanga; activ = fundal plin. --- */
.pen-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 4px; margin-top: .5rem; }
.pen-row__lbl { grid-column: 1 / -1; font-size: .6rem; text-transform: uppercase; letter-spacing: .04em; color: var(--judge-ink-4); }
.pen-btn {
    min-height: var(--tap-min);
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
    font-size: .72rem; font-weight: 700; padding: 2px 6px; border-radius: 6px;
    border: 1px solid var(--judge-hair-2); border-left-width: 3px;
    background: var(--judge-soft); color: var(--judge-ink-2); cursor: pointer;
}
.pen-btn:hover { border-color: var(--judge-ink-3); }
.pen-btn__pct { font-weight: 400; opacity: .65; font-size: .6rem; }
.pen-btn[data-pen="slip"]  { border-left-color: var(--judge-pen-slip); }
.pen-btn[data-pen="crash"] { border-left-color: var(--judge-pen-crash); }
.pen-btn[data-pen="wipe"]  { border-left-color: var(--judge-pen-wipe); }
.pen-btn[data-pen="slip"].pen-btn--on  { background: var(--judge-pen-slip);  border-color: var(--judge-pen-slip);  color: #fff; }
.pen-btn[data-pen="crash"].pen-btn--on { background: var(--judge-pen-crash); border-color: var(--judge-pen-crash); color: #fff; }
.pen-btn[data-pen="wipe"].pen-btn--on  { background: var(--judge-pen-wipe);  border-color: var(--judge-pen-wipe);  color: #fff; }
.pen-btn[data-pen="none"].pen-btn--on { background: var(--judge-soft-hi); border-color: var(--judge-ink-3); color: var(--judge-ink); }
.pen-applied { margin-top: .35rem; font-size: .62rem; font-weight: 700; color: var(--judge-pen-ink); text-align: center; background: var(--judge-pen-soft); border: 1px solid var(--judge-pen-border); border-radius: 4px; padding: 2px 6px; }

/* --- Coloane concurenti — mobile-first: STACKED (unul sub altul), side-by-side >= 768px --- */
.judge-cols { display: grid; gap: 1px; grid-template-columns: 1fr; }
.judge-cols--voted { opacity: .6; }

.judge-col { padding: .5rem .6rem .4rem; border-bottom: 1px solid var(--judge-hair); }
.judge-col:last-child { border-bottom: none; }
@media (min-width: 768px) {
    .judge-cols--2 { grid-template-columns: 1fr 1fr; }
    .judge-cols--3 { grid-template-columns: 1fr 1fr 1fr; }
    .judge-cols--4 { grid-template-columns: 1fr 1fr; }
    .judge-col { border-bottom: none; border-right: 1px solid var(--judge-hair); }
    .judge-col:last-child { border-right: none; }
}
/* Marcaj pozitie pe scena (battle): pe mobil (stacked) „SUS/JOS · STANGA/DREAPTA scenei";
   la side-by-side partea SUS/JOS dispare (coloanele chiar sunt stanga/dreapta). */
.judge-col__side {
    display: inline-flex; align-items: center; gap: .3rem;
    font-size: .6rem; font-weight: 800; text-transform: uppercase; letter-spacing: .07em;
    color: var(--judge-accent); background: var(--judge-accent-soft);
    border: 1px solid var(--judge-accent-border); border-radius: 4px;
    padding: 2px 8px; margin-bottom: .3rem;
}
@media (min-width: 768px) {
    .judge-col__side-pos { display: none; }
}
/* Concurentul din DREAPTA scenei = totul aliniat la dreapta (nume/oras/badge/reveal) —
   intareste maparea pozitiei; grid-urile flex (bare, penalizari) nu sunt afectate de text-align. */
.judge-col--r { text-align: right; }
.judge-col__name { font-size: 1.05rem; font-weight: 900; color: var(--judge-ink); line-height: 1.15; margin-bottom: .12rem; letter-spacing: -.01em; }
.judge-col__city { font-size: .68rem; color: var(--judge-ink-4); margin-bottom: .4rem; }
.judge-col__total {
    font-size: .85rem; font-weight: 700; color: var(--judge-ink-3);
    text-align: center; margin-top: .25rem; padding-top: .3rem;
    border-top: 1px solid var(--judge-hair); min-height: 1.2rem;
}
.judge-col__total.ok { color: var(--judge-ink); }
.judge-col__total.locked { color: var(--judge-accent); }
.judge-col__total .tmax { color: var(--judge-ink-4); font-weight: 400; }

/* --- Card --- */
.j-card { background: var(--judge-surface); border: 1px solid var(--judge-hair); border-radius: 10px; overflow: hidden; margin-bottom: 1rem; }
.j-card__hdr {
    background: var(--judge-surface-2); padding: .42rem .8rem;
    font-size: .6rem; font-weight: 700; text-transform: uppercase; letter-spacing: .09em;
    color: var(--judge-ink-3);
    display: flex; justify-content: space-between; align-items: center;
}
.j-card__hdr-max { color: var(--judge-ink-4); }
/* Runda curenta in strip-ul cardului — mica dar vizibila (fostul indicator de 2.8rem e sters) */
.j-card__hdr-round { font-size: .78rem; color: var(--judge-accent); letter-spacing: .06em; }
.j-card__foot { padding: .6rem .75rem; border-top: 1px solid var(--judge-hair); }
.btn-vote { font-size: .95rem; font-weight: 700; padding: .65rem 1rem; border-radius: 8px; width: 100%; min-height: 52px; }
.btn-vote:disabled { opacity: .35; cursor: not-allowed; }

/* --- Badge votat --- */
.badge-voted { font-size: .62rem; background: var(--judge-accent-soft); color: var(--judge-accent); border: 1px solid var(--judge-accent-border); border-radius: 4px; padding: 2px 7px; }

/* --- Waiting banner --- */
.waiting-banner {
    display: flex; align-items: center; gap: .6rem; padding: .65rem .75rem;
    background: var(--judge-accent-faint); border-top: 1px solid var(--judge-accent-hair);
    color: var(--judge-ink-2); font-size: .8rem;
}
.waiting-banner--lg { padding: 1.2rem .75rem; }
.waiting-banner .spin { animation: spin 1.8s linear infinite; color: var(--judge-accent); font-size: 1.1rem; flex-shrink: 0; }
@keyframes spin { to { transform: rotate(360deg); } }
.waiting-banner strong { color: var(--judge-accent); }
.waiting-banner__sub { font-size: .7rem; color: var(--judge-ink-3); }

/* --- Idle / toate scorurile trimise --- */
.judge-idle { text-align: center; padding: 3rem 0; }
.judge-idle__icon { font-size: 3rem; }
.judge-idle__hint { color: var(--judge-ink-3); }
.judge-idle__sub { margin-top: .5rem; font-size: .7rem; color: var(--judge-ink-4); }

/* --- Head-coach flow (B25): panoul de desfășurare al primului jurat --- */
.flow-panel { margin: 0 0 1rem; padding: .6rem .75rem; background: var(--judge-surface); border: 1px solid var(--judge-accent-border); border-radius: 10px; }
.flow-panel__lbl { font-size: .6rem; font-weight: 700; text-transform: uppercase; letter-spacing: .09em; color: var(--judge-accent); margin-bottom: .45rem; }
.flow-btn {
    width: 100%; min-height: 52px;
    font-size: .95rem; font-weight: 800; border-radius: 8px; cursor: pointer;
    background: var(--judge-accent-soft); color: var(--judge-accent);
    border: 1px solid var(--judge-accent-border);
}
.flow-btn:hover { background: var(--judge-accent); color: var(--judge-on-accent); }
.flow-btn--hot { background: var(--judge-accent); color: var(--judge-on-accent); border-color: var(--judge-accent); }
.flow-btn--hot:hover { filter: brightness(1.06); }
.flow-btn:disabled { opacity: .5; cursor: wait; }


/* === 10c. CATEGORY SHOW ==================================== */

.cat-panel-hdr {
    display: flex; align-items: center; justify-content: space-between;
    padding: .32rem .65rem;
    background: var(--paper-2);
    border-top: 2px solid var(--border-strong);
    border-bottom: 1px solid var(--border-hair);
    font-family: var(--font-display);
    font-size: var(--font-xs); font-weight: 900; text-transform: uppercase;
    letter-spacing: .1em; color: var(--fg1); margin-bottom: .35rem;
}
.cat-panel-hdr--active { border-left: 3px solid var(--volt-ink); background: var(--volt); color: var(--volt-ink); }
.cat-panel-hdr--done   { border-left: 3px solid var(--success); background: var(--success-soft); color: var(--success); }
.cat-panel-hdr--info   { border-left: 3px solid var(--status-closed-fg); }

.config-pill {
    display: inline-flex; align-items: center; gap: 4px;
    background: var(--card); border: 1px solid var(--border-hair); border-radius: var(--radius-sm);
    padding: 2px 8px; font-size: var(--font-xs); color: var(--fg2);
}
.config-pill__val { font-family: var(--font-mono); font-weight: 700; color: var(--fg1); }

/* Tabs categorie */
.cat-tabs .nav-link { font-size: var(--font-sm); padding: .3rem .75rem; color: var(--text-muted); border-radius: var(--radius-sm) var(--radius-sm) 0 0; }
.cat-tabs .nav-link.active {
    font-weight: 700; color: var(--text);
    background: var(--surface);
    border-color: var(--border-hair) var(--border-hair) var(--surface);
}
.cat-tabs .nav-link .tab-badge { font-size: .55rem; vertical-align: middle; margin-left: 3px; }





/* Grid de grupe calificare — 2 carduri/rând mobil, 4/rând desktop */
.bouts-groups-grid {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 4px;
    margin-top: .35rem;
}
@media (min-width: 768px) {
    .bouts-groups-grid { grid-template-columns: repeat(4, 1fr); }
}

/* Card grupă — background se umple orizontal pe măsură ce votează jurații (--fill dinamic) */
.bgc {
    position: relative;
    border: 1px solid var(--border-hair);
    border-radius: var(--radius-sm);
    background: var(--card);
    overflow: hidden;
    font-size: var(--font-sm);
}
.bgc::before {
    content: ""; position: absolute; inset: 0;
    width: var(--fill, 0%);
    background: color-mix(in srgb, var(--volt) 38%, transparent);
    transition: width .3s ease;
    z-index: 0; pointer-events: none;
}
.bgc--done::before { width: 100%; background: color-mix(in srgb, var(--success) 26%, transparent); }
.bgc--done   { border-color: var(--success); background: var(--success-soft); }
.bgc--active { border-color: var(--volt-ink); background: var(--volt); }

.bgc__hdr {
    position: relative; z-index: 1;
    display: flex; align-items: center; justify-content: space-between; gap: 4px;
    font-family: var(--font-display);
    font-size: var(--font-xs); font-weight: 900;
    text-transform: uppercase; letter-spacing: .08em;
    padding: .15rem .35rem;
    background: color-mix(in srgb, var(--text) 7%, transparent);
    border-bottom: 1px solid var(--border-hair);
    color: var(--fg3);
}
.bgc--done .bgc__hdr   { color: var(--success); background: color-mix(in srgb, var(--success) 12%, transparent); border-color: var(--success); }
.bgc--active .bgc__hdr { color: var(--volt-ink); background: color-mix(in srgb, var(--text) 10%, transparent); border-color: var(--volt-ink); }
.bgc__ord { white-space: nowrap; }
.bgc__state { display: inline-flex; align-items: center; gap: 3px; font-size: var(--font-2xs); opacity: .85; }
.bgc--pending { opacity: .72; }
.bgc--pending .bgc__state { color: var(--fg4); }
/* Rundă de departajare (tie-break) — accent golden ca să iasă din grupele normale (B24).
   După regulile de stare → câștigă pe antet chiar și când e „done". */
.bgc--golden { border-color: var(--on-golden); opacity: 1; }
.bgc--golden .bgc__hdr { color: var(--on-golden); background: var(--golden-soft); border-color: var(--on-golden); }
.bgc__live-dot {
    width: 6px; height: 6px; border-radius: 50%;
    background: var(--volt-ink); display: inline-block;
    animation: bgc-pulse 1.2s ease-in-out infinite;
}
@keyframes bgc-pulse { 0%,100% { opacity: 1; transform: scale(1); } 50% { opacity: .35; transform: scale(.7); } }

.bgc__row {
    position: relative; z-index: 1;
    display: flex; align-items: center; gap: 4px;
    padding: .18rem .3rem;
    border-bottom: 1px solid var(--border-hair);
    min-width: 0;
}
.bgc__row:last-child { border-bottom: none; }

.bgc__dot {
    width: 6px; height: 6px; border-radius: 50%;
    flex-shrink: 0;
    background: var(--border-hair);
}
.bgc__dot--done   { background: var(--success); }
.bgc__dot--active { background: var(--volt-ink); }

.bgc__name {
    flex: 1; min-width: 0;
    overflow: hidden; white-space: nowrap; text-overflow: ellipsis;
    color: var(--fg1); font-weight: 600;
    line-height: 1.3;
}
.bgc--done .bgc__name   { color: var(--success); }
.bgc--active .bgc__name { color: var(--volt-ink); }
.bgc__crew { color: var(--fg3); font-weight: 400; }

/* Listă calificați — 2 coloane jumate/jumate (stivuite pe mobil) + iconiță metodă */
.qual-2col { display: grid; grid-template-columns: 1fr; gap: .5rem; }
@media (min-width: 768px) { .qual-2col { grid-template-columns: 1fr 1fr; } }
.qual-method { font-size: .55rem; margin-left: .3rem; vertical-align: middle; }
/* Celula nume = flex → marcajul ⚖ (departajare) împins la dreapta, aliniat în coloană */
.qual-name-cell { display: flex; align-items: center; gap: .25rem; min-width: 0; }
.qual-name-cell .e-chip { min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.qual-name-cell .qual-method { margin-left: auto; flex-shrink: 0; }
.qual-method--tie_break { color: var(--primary); }
/* Voturile juriului (decidentul PRIMAR) — coloană proeminentă X/Y; plin (toți jurații) = verde */
.qual-votes {
    display: inline-block; min-width: 2.2rem; text-align: center;
    font-family: var(--font-mono); font-size: .72rem; font-weight: 700;
    color: var(--fg2); background: var(--surface-2);
    border: 1px solid var(--border-hair); border-radius: 4px; padding: 0 .3rem;
}
.qual-votes--full { color: var(--success); border-color: var(--success); background: transparent; }
.qual-legend { font-size: .64rem; color: var(--text-muted); margin: .4rem .15rem 0; line-height: 1.45; }
.qual-cutline {
    display: flex; align-items: center; gap: .5rem;
    margin: .6rem 0 .25rem; font-family: var(--font-display); font-weight: 900;
    font-size: var(--font-2xs); text-transform: uppercase; letter-spacing: .08em;
    color: var(--text-faint);
}
.qual-cutline::before, .qual-cutline::after { content: ""; flex: 1; height: 0; border-top: 1px dashed var(--border-hair); }
.qual-out-table { opacity: .72; }
.qual-row--out td { color: var(--text-muted); }

/* Bouturi compacte */
.bout-compact { font-size: var(--font-md); }
.bout-compact .bout-group { border: 2px solid var(--border-strong); border-radius: var(--radius-sm); overflow: hidden; margin-bottom: .3rem; }

.bout-compact .bout-row {
    display: flex; align-items: center; gap: .35rem;
    padding: .18rem .45rem; border-bottom: 1px solid var(--border-hair);
    font-size: var(--font-md);
}
.bout-compact .bout-row:last-child { border-bottom: none; }
.bout-compact .bout-row:nth-child(even) { background: var(--row-odd-bg); }
.bout-compact .bout-row:hover { background: var(--row-hover-bg) !important; color: var(--volt-ink) !important; cursor: pointer; }
.bout-compact .bout-row__num  { color: var(--fg4); font-size: var(--font-xs); width: 1.1rem; flex-shrink: 0; }
.bout-compact .bout-row__name { flex: 1; min-width: 0; }


/* Detalii subtile sub fiecare categorie în sidebar */






/* === 11. ADMIN ============================================= */

.admin-grid {
    display: grid;
    grid-template-columns: repeat(12, 1fr);
    gap: 0.75rem; align-items: start;
}
/* Plasare deliberată: row1 = Stiluri(3) Formate(3) Utilizatori(6); row2 = Sisteme(12); row3 = Dansatori(12) */
.admin-section--c3  { grid-column: span 3; }
.admin-section--c6  { grid-column: span 6; }
.admin-section--c12 { grid-column: span 12; }
.admin-section--o1 { order: 1; }
.admin-section--o2 { order: 2; }
.admin-section--o3 { order: 3; }
.admin-section--o4 { order: 4; }
.admin-section--o5 { order: 5; }
@media (max-width: 992px) {
    .admin-section--c3, .admin-section--c6, .admin-section--c12 { grid-column: 1 / -1; }
}
.admin-section {
    border: 2px solid var(--border-strong);
    border-radius: var(--radius-lg);
    overflow: hidden;
}
.admin-section__header {
    font-family: var(--font-display);
    font-size: var(--font-xs); font-weight: 900; text-transform: uppercase;
    letter-spacing: 0.1em; color: var(--fg1);
    padding: 0.4rem 0.6rem;
    background: var(--surface-inverse); color: var(--text-on-inverse);
    border-bottom: var(--border);
}
.admin-section__hint { font-size: var(--font-xs); font-weight: 400; text-transform: none; letter-spacing: 0; color: rgba(255,255,255,.5); margin-left: 0.4rem; }

.admin-item {
    display: flex; align-items: center; justify-content: space-between;
    padding: 0.3rem 0.6rem; font-size: var(--font-md);
    border-bottom: 1px solid var(--border-hair);
    background: var(--card);
}
.admin-item:last-child { border-bottom: none; }
.admin-item:hover { background: var(--paper-2); }





.admin-sys-badge { font-size: 0.6rem; font-weight: 700; padding: 1px 6px; border-radius: var(--radius-sm); }
.admin-sys-badge--ok   { background: var(--success-soft); color: var(--success); }
.admin-sys-badge--warn { background: var(--warning-soft); color: var(--warning); }

.admin-skill-tag { display: inline-flex; align-items: center; gap: 3px; font-size: 0.68rem; background: var(--paper-2); border: 1px solid var(--border-hair); border-radius: var(--radius-sm); padding: 1px 5px; color: var(--fg2); }
.admin-skill-tag__max { color: var(--fg4); font-family: var(--font-mono); }
.admin-skill-tag__del { color: var(--danger); cursor: pointer; background: none; border: none; padding: 0; line-height: 1; font-size: 0.7rem; }
.admin-skill-tag__del:hover { color: var(--primary-strong); }
.admin-skill-tag--anchored { border-color: var(--success); }
.admin-skill-tag__anchor { color: var(--fg4); cursor: pointer; background: none; border: none; padding: 0; line-height: 1; font-size: 0.7rem; }
.admin-skill-tag__anchor:hover { color: var(--primary-strong); }
.admin-skill-tag--anchored .admin-skill-tag__anchor { color: var(--success); }

/* Barem ancorat — panou editare per skill */
.anchor-panel { width: 100%; }
.anchor-form {
    width: 100%; margin-top: 0.2rem;
    border: 1px solid var(--border-hair); border-left: 3px solid var(--primary);
    border-radius: var(--radius-sm); background: var(--paper-2); padding: 0.5rem 0.6rem;
}
.anchor-form__title {
    font-family: var(--font-display);
    font-size: var(--font-xs); font-weight: 900; text-transform: uppercase;
    letter-spacing: .08em; color: var(--fg1);
}
.anchor-form__max { color: var(--fg4); font-family: var(--font-mono); }
.anchor-form__hint { font-size: var(--font-xs); color: var(--fg3); margin: 0.15rem 0 0.45rem; }
.anchor-row { display: flex; align-items: center; gap: 0.35rem; margin-bottom: 0.25rem; }
.anchor-row__score { flex-shrink: 0; width: 1.3rem; text-align: center; font-family: var(--font-mono); font-weight: 700; font-size: var(--font-sm); color: var(--fg2); }
.anchor-row__label { flex-shrink: 0; width: 92px; }
.anchor-row__text { flex: 1; min-width: 0; }
.anchor-row--penalty .anchor-row__score { color: var(--danger); }

.bout-group {
    border: 2px solid var(--border-strong);
    border-radius: var(--radius-sm); overflow: hidden; margin-bottom: 0.4rem;
}


.bout-row {
    display: flex; align-items: center; gap: 0.4rem;
    padding: 0.25rem 0.5rem;
    border-bottom: 1px solid var(--border-hair);
    font-size: var(--font-md); background: var(--card);
}
.bout-row:last-child { border-bottom: none; }
.bout-row__num    { color: var(--fg4); font-size: var(--font-xs); width: 1.2rem; flex-shrink: 0; font-family: var(--font-mono); }
.bout-row__name   { flex: 1; min-width: 0; }
.bout-row__status { flex-shrink: 0; }

.admin-table { width: 100%; font-size: var(--font-md); border-collapse: collapse; }
.admin-table th {
    font-family: var(--font-display);
    font-size: var(--font-xs); font-weight: 900; text-transform: uppercase;
    letter-spacing: .1em; color: var(--text-on-inverse);
    padding: 0.3rem 0.6rem; border-bottom: 2px solid var(--border-strong); background: var(--surface-inverse);
}
.admin-table td { padding: 0.28rem 0.6rem; border-bottom: 1px solid var(--border-hair); vertical-align: middle; background: var(--card); }
.admin-table tr:last-child td { border-bottom: none; }
.admin-table tr:hover td { background: var(--paper-2); }
.admin-table .col-actions { width: 1%; white-space: nowrap; text-align: right; }

/* Sisteme de jurizare — grilă carduri (≈3 coloane după lățime) */
.judging-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(330px, 1fr));
    gap: 0.5rem; padding: 0.5rem 0.6rem;
    align-items: start;
}
.judging-card {
    border: 1px solid var(--border-hair); border-radius: var(--radius-sm);
    background: var(--card); padding: 0.4rem 0.5rem;
    display: flex; flex-direction: column; gap: 0.4rem;
}
.judging-card:hover { background: var(--paper-2); }
/* Sisteme inactive — ascunse implicit, dezvăluite cu toggle „Inactive (N)" */
.judging-card--inactive { display: none; }
.judging-grid--show-inactive .judging-card--inactive { display: flex; opacity: 0.6; }

/* Panele specialiste — grup de sisteme cu 1 skill, un jurat pe rol (OUR-3/OUR-5) */
.panel-strip { border: 1px dashed var(--border-hair); border-radius: var(--radius-sm); padding: 0.45rem 0.6rem; margin: 0 0.6rem 0.6rem; display: flex; flex-direction: column; gap: 0.45rem; }
.panel-strip__head { font-size: var(--font-sm); font-weight: 700; display: flex; align-items: center; flex-wrap: wrap; gap: 0.4rem; }
.panel-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 0.4rem; }
.panel-card { border: 1px solid var(--border-hair); border-radius: var(--radius-sm); background: var(--card); padding: 0.4rem 0.5rem; display: flex; flex-direction: column; gap: 0.35rem; }
.panel-card:hover { background: var(--paper-2); }
.panel-card--inactive { opacity: 0.55; }
.panel-card__head { display: flex; align-items: center; gap: 0.35rem; flex-wrap: wrap; }
.panel-card__actions { margin-left: auto; display: flex; gap: 0.2rem; }
.panel-card__actions form { display: inline; }
.panel-card__roles { display: flex; flex-wrap: wrap; gap: 0.25rem; }
.panel-card__empty { font-size: var(--font-xs); }
.panel-role-chip { display: inline-flex; align-items: baseline; gap: 0.3rem; font-size: var(--font-xs); font-weight: 600; padding: 1px 7px; border-radius: var(--radius-sm); background: var(--paper-2); border: 1px solid var(--border-hair); }
.panel-role-chip__sys { color: var(--fg4); font-weight: 400; }
.panel-strip__create { max-width: 360px; }
/* Marcaj panel pe cardul sistemului */
.sys-panel-tag { display: inline-flex; align-items: center; gap: 0.2rem; font-size: var(--font-xs); padding: 1px 7px; border-radius: var(--radius-sm); background: var(--paper-2); border: 1px solid var(--border-hair); align-self: flex-start; }
.sys-panel-tag__form { display: inline; }
.sys-panel-tag__del { border: 0; background: transparent; color: var(--danger); padding: 0 0 0 2px; line-height: 1; cursor: pointer; }
/* Accent culoare per panel — leagă cardul panelului de sistemele membre din grid */
.jacc-0 { border-left: 3px solid #e8590c; }
.jacc-1 { border-left: 3px solid #2f9e44; }
.jacc-2 { border-left: 3px solid #1971c2; }
.jacc-3 { border-left: 3px solid #f08c00; }
.jacc-4 { border-left: 3px solid #9c36b5; }
.jacc-5 { border-left: 3px solid #0c8599; }

/* Dansatori (admin) — grilă carduri compacte (≈4+ coloane după lățime).
   NB: clasa `.dancer-grid` e deja folosită (2-col) pe alte pagini → nume unic aici. */
.admin-dancer-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
    gap: 0.4rem; padding: 0.45rem 0.6rem;
}
.dancer-card {
    border: 1px solid var(--border-hair); border-radius: var(--radius-sm);
    background: var(--card); padding: 0.3rem 0.45rem;
}
.dancer-card:hover { background: var(--paper-2); }
.dancer-card__top { display: flex; align-items: center; justify-content: space-between; gap: 0.3rem; }
.dancer-card__id { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.dancer-card__id strong { font-size: var(--font-md); }
.dancer-card__crew { color: var(--fg3); font-size: var(--font-xs); margin-left: 0.3rem; }
.dancer-card__act { flex-shrink: 0; display: flex; gap: 0.2rem; }
.dancer-card__meta { font-size: var(--font-xs); color: var(--fg4); margin-top: 1px; }
.dancer-card__edit { margin-top: 0.35rem; }
.dancer-edit-form { display: flex; flex-direction: column; gap: 0.3rem; }


/* === 11b. CONTEST EDIT — /cont/{id}/edit ============== */

.ecat { border: 2px solid var(--border-strong); border-radius: var(--radius-sm); background: var(--card); margin-bottom: .5rem; }
.ecat__hdr {
    display: flex; align-items: center; justify-content: space-between; gap: 6px;
    padding: .3rem .6rem; background: var(--paper-2);
    border-bottom: 1px solid var(--border-hair);
}
.ecat__title { font-family: var(--font-display); font-size: var(--font-md); font-weight: 900; text-transform: uppercase; letter-spacing: .03em; }
.ecat__meta { font-size: var(--font-xs); color: var(--fg3); font-weight: 400; text-transform: none; letter-spacing: 0; }
.ecat__body { padding: .5rem .65rem; }
.rounds-form { display: flex; align-items: center; flex-wrap: wrap; gap: .4rem; }
.config-pill--lock { opacity: .6; border-style: dashed; }
.inp-poster { max-width: 160px; }
.edit-locked-note {
    font-size: var(--font-xs); color: var(--fg3);
    display: inline-flex; align-items: center; gap: 4px;
}

/* Câmp modificat dar nesalvat — semnal vizual (form-dirty.js îl pune/scoate). Bară accent la stânga. */
.is-dirty {
    border-color: var(--accent) !important;
    box-shadow: inset 3px 0 0 0 var(--accent);
}

/* Bară unică de salvare, lipită jos — un singur „Salvează modificările" pentru tot ce e configurabil. */
.edit-savebar {
    position: sticky; bottom: 0; z-index: 10;
    display: flex; align-items: center; gap: .5rem; flex-wrap: wrap;
    margin-top: .75rem; padding: .55rem .7rem;
    background: var(--surface);
    border: 2px solid var(--border-strong); border-radius: var(--radius-sm);
    box-shadow: var(--shadow-hard-sm);
    transition: border-color .15s ease, background-color .15s ease;
}
/* Stare „nesalvat" — semnal vizual în pagină (fără popup), accent pe bară + status. */
.edit-savebar--dirty { border-color: var(--accent); background: var(--bg-elevated); }
.savebar-status {
    font-family: var(--font-display); font-weight: 900; text-transform: uppercase;
    letter-spacing: .06em; font-size: var(--font-xs); color: var(--accent);
}

/* Flash = toast fix, vizibil indiferent de scroll (sub navbar, centrat). Auto-dispar prin flash-toast.js. */
.flash-stack {
    position: fixed; top: 64px; left: 50%; transform: translateX(-50%);
    z-index: 1080; width: min(560px, 92vw);
    display: flex; flex-direction: column; gap: .4rem; pointer-events: none;
}
.flash-stack:empty { display: none; }
.flash-toast { pointer-events: auto; margin: 0; box-shadow: var(--shadow-hard-sm); }


/* === 12. PUBLIC — /concursuri ============================== */

/* Pagina LIVE = proiector fullscreen, fără chrome. Clasă pe <body> (NU body{} inline — evită
   bug-ul de fundal scurs prin reconcilierea <head> la navigare Turbo, vezi UI_RULES). */
.live-projector { background: var(--paper); min-height: 100vh; }
.live-projector .app-wrap { max-width: 1280px; }

/* Badge-uri tip eveniment */









/* (.badge-style-0..7 eliminate — înlocuite de .style-pill cu hue din name|style_hue) */

/* ── CONTEST GRID — masonry pe coloane (JS: assets/js/masonry-columns.js).
   Card = bandă poster SUS (titlu + meta peste) + categorii dedesubt. Coloanele-s independente
   → expand-ul unei înscrieri crește DOAR coloana cardului (fără salt, fără împins rândul de jos).
   Fallback fără JS = CSS Grid de mai jos. ── */
.bcast-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; align-items: start; }
@media (max-width: 1280px) { .bcast-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 760px)  { .bcast-grid { grid-template-columns: 1fr; } }
.bcast-grid.is-masonry { display: flex; align-items: flex-start; }   /* JS a construit coloane independente */
.bcast-col { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1rem; }

.ccard {
    background: var(--surface);
    border: 2px solid var(--border-strong);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-hard-sm);
    overflow: hidden;
}

/* HERO — poster bandă sus, full-width, cu titlu + meta PESTE (gradient pt lizibilitate) */
.ccard__hero { position: relative; aspect-ratio: 16 / 9; background: var(--surface-inverse); }
.ccard__hero[data-lightbox] { cursor: zoom-in; }
.ccard__hero img { display: block; width: 100%; height: 100%; object-fit: cover; }
.ccard__hero-ov  { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; gap: 2px; padding: .55rem .65rem; background: linear-gradient(to bottom, transparent 28%, rgba(0,0,0,.84)); }
.ccard__title    { font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: -.01em; line-height: 1.05; font-size: clamp(1.1rem, 1.5vw, 1.45rem); color: #fff; }
.ccard__herometa { display: flex; flex-wrap: wrap; align-items: center; gap: .1rem .7rem; font-size: var(--font-sm); color: rgba(255,255,255,.88); }
.ccard__herometa i { opacity: .8; }
.ccard__hero-badges { position: absolute; top: 6px; right: 6px; display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 4px; max-width: 75%; }
.cbc-days        { font-family: var(--font-mono); font-size: var(--font-xs); font-weight: 700; background: var(--ink); color: var(--text-on-inverse); padding: 2px 7px; border-radius: var(--radius-sm); white-space: nowrap; }
.cbc-days--today { background: var(--primary); color: #fff; }
.ccard__zoom { position: absolute; bottom: 6px; right: 6px; background: rgba(0,0,0,.55); color: #fff; font-size: var(--font-2xs); padding: 1px 5px; border-radius: var(--radius-sm); }

/* CATEGORIE — bloc pe 3 rânduri + bară „înscrie-te" full-width jos (tot blocul = toggle collapse) */
.ccat { display: block; padding: .5rem .65rem .6rem; border-top: 1px solid var(--border-hair); cursor: pointer; text-decoration: none; color: inherit; }
.ccat:first-of-type { border-top: none; }
.ccat:hover { background: var(--bg-elevated); }
.ccat__l1  { display: flex; flex-wrap: nowrap; align-items: center; gap: .25rem; overflow: hidden; }
.ccat__l1 > * { flex-shrink: 0; }
.ccat__row { display: flex; flex-wrap: wrap; align-items: center; gap: .2rem; margin-top: .3rem; }
.ccat__row--entries { align-items: flex-start; }   /* zona Înscriși = 2 linii fixe → label la vârf */
.ccat__lbl { font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .06em; font-size: var(--font-2xs); color: var(--text-muted); margin-right: 2px; }
.ccat__cta { display: flex; align-items: center; justify-content: center; gap: .35rem; margin-top: .5rem; padding: .35rem .5rem; background: var(--surface-inverse); color: var(--text-on-inverse); border: 2px solid var(--border-strong); border-radius: var(--radius-sm); font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .05em; font-size: var(--font-xs); transition: background .1s, color .1s, border-color .1s; }
.ccat__cta .bi-chevron-down { transition: transform .2s; }
.ccat:hover .ccat__cta, .ccat[aria-expanded="true"] .ccat__cta { background: var(--primary); border-color: var(--primary); color: #fff; }
.ccat[aria-expanded="true"] .ccat__cta .bi-chevron-down { transform: rotate(180deg); }
.ccat-form { padding: .6rem .65rem .7rem; background: var(--bg-elevated); border-top: 2px solid var(--border-strong); }
.ccat-form .pc-form-title { margin-bottom: .5rem; }
.e-chip-list { display: inline-flex; flex-wrap: wrap; gap: .2rem; }

/* Confirmare „te-ai înscris" în formular — apare, ține câteva secunde, apoi se estompează și se pliază,
   lăsând formularul gol gata de o nouă înscriere (înlocuit prin Turbo Stream). */
@keyframes regDoneFade {
    0%, 60% { opacity: 1; max-height: 3rem; padding-top: .35rem; padding-bottom: .35rem; margin-bottom: .4rem; }
    100%    { opacity: 0; max-height: 0;    padding-top: 0;       padding-bottom: 0;       margin-bottom: 0; }
}
.reg-done {
    font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .04em;
    font-size: var(--font-sm); color: var(--success); overflow: hidden;
    animation: regDoneFade 4.5s ease forwards;
}

/* Lightbox poster — overlay seamless, view-only (poster-lightbox.js) */
body.lightbox-open { overflow: hidden; }
.lightbox { position: fixed; inset: 0; z-index: 2000; display: none; align-items: center; justify-content: center; background: rgba(0,0,0,.88); padding: 2rem; }
.lightbox.is-open { display: flex; }
.lightbox__img { max-width: 95vw; max-height: 92vh; border: 3px solid var(--ink); box-shadow: var(--shadow-hard); }
.lightbox__close { position: absolute; top: 1rem; right: 1.2rem; width: 40px; height: 40px; background: var(--ink); color: #fff; border: 2px solid #fff; border-radius: var(--radius-sm); font-size: 1.1rem; cursor: pointer; display: flex; align-items: center; justify-content: center; }
.lightbox__close:hover { background: var(--primary); border-color: var(--primary); }


/* Form collapse row */


/* Grid formular dancer */
.dancer-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.3rem; margin-bottom: 0.45rem; }
.dancer-lbl  { font-family: var(--font-display); font-size: 0.63rem; font-weight: 900; text-transform: uppercase; letter-spacing: .08em; color: var(--fg3); margin-bottom: 1px; display: block; }
.pc-form-title { font-family: var(--font-display); font-size: var(--font-xs); font-weight: 900; text-transform: uppercase; letter-spacing: .1em; color: var(--fg3); margin-bottom: 0.5rem; }

/* Pill spoturi */




/* Judecător pill: [Nume | Meta] — Flash-pink tint */
.j-pill     { display: inline-flex; align-items: stretch; font-size: 0.68rem; border: 1px solid rgba(255,46,99,.28); border-radius: var(--radius-sm); background: rgba(255,46,99,.07); overflow: hidden; white-space: nowrap; line-height: 1.7; vertical-align: middle; }
.j-pill__n  { padding: 0 5px; font-weight: 700; color: var(--primary-strong); }
.j-pill__m  { padding: 0 5px; background: rgba(255,46,99,.12); color: var(--primary); border-left: 1px solid rgba(255,46,99,.18); font-size: 0.63rem; }
/* Staff (DJ/Host) line-up pills — same frame as judge pills, distinct neutral/ink accent. */
.s-pill              { border-color: var(--border-strong); background: var(--surface-2); }
.s-pill .j-pill__n   { color: var(--text); }
.s-pill__r           { display: inline-flex; align-items: center; padding: 0 5px; font-weight: 700; font-size: 0.6rem; text-transform: uppercase; letter-spacing: .04em; background: var(--surface-inverse); color: var(--text-on-inverse); }
.s-pill .j-pill__m   { background: var(--surface); color: var(--text-muted); border-left-color: var(--border-hair); }

/* Competitor chip simplu */
.e-chip     { display: inline-block; font-size: 0.67rem; padding: 0 5px; border: 1px solid var(--border-hair); border-radius: var(--radius-sm); background: var(--paper-2); color: var(--fg2); white-space: nowrap; line-height: 1.7; vertical-align: middle; }
.e-chip .e-city { color: var(--fg4); }
/* Zona „Înscriși" = înălțime FIXĂ 2 rânduri de e-chip peste tot (uniform, indiferent de câți).
   Colapsat: max 2 linii + „Vezi toți (N)" (JS); deschis (.is-open): crește inline pe loc.
   ~2.6rem = 2×(line-height 1.7 × .67rem) + gap-ul de wrap; sigur pt gap .2rem (default) ȘI .3rem (kf). */
/* Zona „Înscriși" = înălțime fixă 2 linii (uniform). Pliere LINE-BASED în JS: chip-urile de pe
   linia 3+ se ascund, iar „… Vezi toți (N)" se pune INLINE după ultimul chip vizibil (în flux,
   nu absolut). Deschis (.is-open): tot vizibil + „Ascunde". */
.e-chip-list[data-collapse-entries] { min-height: 2.6rem; align-content: flex-start; }
.ccat__more-btn {
    appearance: none; border: 0; background: none; cursor: pointer;
    margin-left: .2rem; padding: 0 .15rem;
    font-family: var(--font-mono); font-size: 0.66rem; font-weight: 700;
    text-transform: uppercase; letter-spacing: .03em; color: var(--primary);
    text-decoration: underline; text-underline-offset: 2px;
}
.ccat__more-btn:hover { color: var(--text); }

/* Competitor chip cu buton X delete — hub /cont */
.e-chip-del {
    display: inline-flex; align-items: center;
    font-size: 0.67rem;
    border: 1px solid var(--border-hair);
    border-radius: var(--radius-sm);
    background: var(--paper-2);
    color: var(--fg2);
    white-space: nowrap;
    line-height: 1.7;
    vertical-align: middle;
    overflow: hidden;
    margin-bottom: 2px;
}
.e-chip-del__name { padding: 0 4px 0 5px; }
.e-chip-del__name .e-city { color: var(--fg4); }
.e-chip-del__form { display: inline-flex; margin: 0; padding: 0; }
.e-chip-del__x {
    display: inline-flex; align-items: center; justify-content: center;
    width: 16px; height: 100%;
    background: var(--paper-2);
    border: none; border-left: 1px solid var(--border-hair);
    color: var(--fg3); font-size: 0.75rem; line-height: 1;
    cursor: pointer; padding: 0;
    transition: background .1s, color .1s;
}
.e-chip-del__x:hover { background: var(--danger); color: #fff; }
/* Fără X pe concursuri nemodificabile */
.e-chip-del:not(.e-chip-del--rm) .e-chip-del__name { padding: 0 5px; }

/* Poster thumb */
.poster-thumb       { height: 42px; width: auto; object-fit: cover; }


/* Backward compat */







































.spots { font-family: var(--font-mono); font-size: 0.65rem; font-weight: 700; padding: 0 7px; border-radius: var(--radius-sm); line-height: 1.8; white-space: nowrap; flex-shrink: 0; }













/* (.pc-form-title / .dancer-grid / -col / -lbl = definite mai sus în secțiunea form; dup scos) */

/* Autocomplete dancer name */
.ac-wrap { position: relative; }
.ac-dropdown {
    display: none; position: absolute; top: 100%; left: 0; right: 0;
    background: var(--card); border: 2px solid var(--border-strong);
    border-top: none; border-radius: 0 0 var(--radius-sm) var(--radius-sm);
    max-height: 210px; overflow-y: auto; z-index: 1050;
    box-shadow: var(--shadow-hard);
}
.ac-dropdown.ac-open { display: block; }
/* Autocomplete în rânduri inline (jurat/staff): wrap lățime fixă ca inputul direct (nu full-width,
   altfel butonul +/× sare pe rândul următor); dropdown lăsat mai lat ca să încapă numele. */
.judge-inline-row .ac-wrap,
.staff-inline-row .ac-wrap { display: inline-block; width: 150px; vertical-align: middle; }
/* Câmpul de nume e și .form-field → trebuie flex column-reverse (label DEASUPRA), nu inline-block. */
.judge-inline-row .ac-wrap.form-field,
.staff-inline-row .ac-wrap.form-field { display: flex; flex-direction: column-reverse; width: auto; }
.judge-inline-row .ac-wrap .form-control,
.staff-inline-row .ac-wrap .form-control { width: 100%; }
.judge-inline-row .ac-dropdown,
.staff-inline-row .ac-dropdown { right: auto; min-width: 230px; }
.ac-item {
    padding: 5px 8px; font-size: var(--font-md); cursor: pointer;
    border-bottom: 1px solid var(--border-hair); line-height: 1.45;
    background: var(--card);
}
.ac-item:last-child { border-bottom: none; }
.ac-item:hover, .ac-item.ac-item--hover { background: var(--volt); color: var(--volt-ink); }
/* Eticheta de rol în sugestia de persoană unificată (contribuitor / ↔ legat). */
.ac-tag {
    display: inline-block; margin-left: 4px; padding: 0 5px;
    font-size: var(--font-2xs); font-weight: 600; line-height: 1.5;
    border: 1px solid var(--border-hair); border-radius: var(--radius-sm); color: var(--fg4);
}
.ac-item:hover .ac-tag, .ac-item.ac-item--hover .ac-tag { color: inherit; border-color: currentColor; }
/* Badge per-rol (dansator / jurat / DJ / Host) în sugestie — accent flash subtil, distinct de .ac-tag. */
.ac-role {
    display: inline-block; margin-left: 4px; padding: 0 5px;
    font-size: var(--font-2xs); font-weight: 700; line-height: 1.5; text-transform: lowercase;
    border: 1px solid var(--accent-soft); border-radius: var(--radius-sm); color: var(--primary); background: var(--accent-soft);
}
.ac-item:hover .ac-role, .ac-item.ac-item--hover .ac-role { color: inherit; border-color: currentColor; background: transparent; }
.ac-hint { font-size: var(--font-xs); color: var(--fg4); margin-top: 2px; margin-bottom: 4px; }

/* Tabel categorii în card */
.pub-cat-table { font-size: var(--font-md); width: 100%; border-collapse: collapse; }
.pub-cat-table td { padding: 0.3rem 0.6rem; vertical-align: top; border: none; }
.pub-cat-table tr + tr td { border-top: 1px solid var(--border-hair); }

/* Rândul de entries */
.cat-entries-row { display: flex; flex-wrap: wrap; align-items: center; gap: 2px; margin-top: 3px; }
.cat-entries-lbl { font-family: var(--font-display); font-size: var(--font-xs); font-weight: 900; color: var(--fg1); text-transform: uppercase; letter-spacing: .08em; white-space: nowrap; margin-right: 3px; }

/* Badge format battle (1v1, 2v2) */
.badge-battle-fmt { font-size: 0.65rem; color: var(--fg2); background: var(--paper-2); border: 1px solid var(--border-hair); border-radius: var(--radius-sm); padding: 1px 5px; font-weight: 600; white-space: nowrap; }

/* Badge TOP N */
.badge-top-n { font-family: var(--font-mono); font-size: 0.63rem; color: var(--fg1); background: var(--paper-2); border: 1px solid var(--border-hair); border-radius: var(--radius-sm); padding: 0 5px; font-weight: 700; white-space: nowrap; }

/* Separator inline */
.cat-sep { color: var(--border-hair); margin: 0 3px; font-size: 0.75rem; }

/* Grid dancer 2-col */
.dancer-grid-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; margin-bottom: 3px; }

/* Label număr dansator */

/* Sloturile dancer în formular multi-dansator */




/* === 12b. CATEGORY ROW (formular creare concurs) =========== */

.category-row { border-radius: var(--radius-md); margin-bottom: 0.5rem; position: relative; padding: 8px 10px; border: 2px solid var(--border-strong); }
.category-row--0 { background: var(--style3-bg); }
.category-row--1 { background: var(--style1-bg); }
.category-row--2 { background: var(--style2-bg); }
.category-row--3 { background: var(--style4-bg); }
.category-row--4 { background: var(--style5-bg); }
.category-row--5 { background: var(--style0-bg); }

.judges-section { border-top: 1px solid var(--border-hair); padding-top: 6px; margin-top: 6px; }
.judges-section__label { font-family: var(--font-sans); font-weight: 600; font-size: var(--font-sm); color: var(--fg3); }

/* Jurați + DJ/Host UNUL LÂNGĂ ALTUL (2 coloane desktop, stivuit pe mobil). Rândurile interioare
   rămân pe O linie: numele se întinde/strânge (flex), restul fixe, butonul × pe aceeași linie. */
.judges-staff-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0 14px; }
.judges-staff-grid .judges-section { margin-top: 0; }
/* Rândurile jurat/staff în grid: lasă-le să curgă pe rândul următor (wrap) când nu încap, în loc
   să strângă numele la nimic. Numele păstrează o lățime minimă ≈15 caractere. */
.judges-staff-grid .judge-inline-row,
.judges-staff-grid .staff-inline-row { flex-wrap: wrap; row-gap: 4px; }
.judges-staff-grid .ac-wrap { flex: 1 1 110px; width: auto; min-width: 100px; }
.judges-staff-grid .input-w-name { max-width: none !important; }
/* Listele jurați/staff: intrările curg UNA LÂNGĂ ALTA când e loc (nu stivuiesc pe rânduri noi degeaba —
   ex. DJ/Host la edit, col lat). Fiecare intrare = lățime de conținut. */
.judges-list, .staff-list { display: flex; flex-wrap: wrap; gap: .5rem .75rem; align-items: flex-end; }
.judges-list > .judge-inline-row, .staff-list > .staff-inline-row { flex: 0 1 auto; }
@media (max-width: 640px) {
    .judges-staff-grid { grid-template-columns: 1fr; }
    .judges-staff-grid .judge-inline-row,
    .judges-staff-grid .staff-inline-row { flex-wrap: wrap; }
}

/* Staff DJ/Host — line-up dens grupat pe rol (compact skill: line-up pe roluri, info puțină). */
.staff-groups { display: flex; flex-wrap: wrap; gap: .2rem .9rem; align-items: center; margin: 2px 0 4px; }
.staff-grp { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.staff-grp__lbl { font-size: var(--font-xs); font-weight: 700; text-transform: uppercase; letter-spacing: .06em; color: var(--fg4); }

/* === 12c. FORM ELEMENT WIDTHS ============================== */

.input-w-country  { width: 116px !important; }  /* select țară: steag + nume RO */
.input-w-role     { width: 56px !important; }   /* DJ / Host */
.input-w-spots    { width: 48px !important; }   /* 4/8/16/32 — max 2 cifre */
.input-w-age      { width: 62px !important; }
.input-w-gender   { width: 80px !important; }
.input-w-tie      { width: 100px !important; }   /* „Rundă extra" / „Scor total" */
.input-w-group    { width: 84px !important; }    /* concurenți pe grupă (2-8) + label „Pe grupă" */
.input-w-name     { max-width: 112px !important; }  /* nume jurat ≈ 15 caractere */
.input-w-system   { min-width: 110px !important; }
.input-w-skill    { width: 90px !important; }
.input-w-score-sm { width: 50px !important; }

.input-w-format   { width: 70px !important; }   /* „5vs5" / „crew" */
.input-w-dancers  { width: 55px !important; }
.input-w-style    { min-width: 120px !important; }

/* Săgeată compactă pe selecturi înguste — SVG mai mic + padding-right redus, ca textul scurt
   (Gen / Zi / format / rol) să nu fie acoperit de săgeata Bootstrap. Aplicat prin clasă (scoped). */
.sel-tight { background-size: 8px 8px !important; padding-right: 1.05rem !important; background-position: right .3rem center !important; }


/* === 13. UTILITIES ========================================= */




.text-xs { font-size: var(--font-xs) !important; }
.text-sm { font-size: var(--font-sm) !important; }



.action-group { display: flex; align-items: center; gap: 4px; flex-wrap: wrap; }

/* Buton ultra-compact */
.btn-xs {
    font-family: var(--font-display);
    font-size: var(--font-xs);
    font-weight: 900;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    padding: 0.15rem 0.45rem;
    line-height: 1.4;
    border-radius: var(--radius-sm);
}







/* === 14. RANKING & TIER ==================================== */

/* Coloane cu procent + mini bar */
.col-stat-pct   { width: 90px; text-align: right; }
.lb-col-rank    { width: 26px; }
.stat-pct-value { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: var(--font-md); font-weight: 700; }
.pct-high       { color: var(--success); }
.pct-low        { color: var(--danger); }

.stat-pct-bar   { height: 3px; border-radius: var(--radius-sm); background: var(--paper-2); margin-top: 2px; overflow: hidden; }
/* lățimea vine din template ca --w (singura formă de style inline permisă) */
.stat-pct-bar .bar-fill { height: 100%; border-radius: var(--radius-sm); width: var(--w, 0%); }
.bar-win        { background: var(--success); }

/* Δ ELO (evoluția la ultimul concurs) + formă (ultimele 5 battle-uri, V/Î) — /clasament */
.lb-delta       { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: var(--font-sm); font-weight: 700; color: var(--fg3); white-space: nowrap; }
.lb-delta--up   { color: var(--success); }
.lb-delta--down { color: var(--danger); }
.lb-form        { display: inline-flex; gap: .2rem; justify-content: flex-end; }
.form-pip       { font-family: var(--font-mono); font-size: var(--font-xs); font-weight: 700; line-height: 1; }
.form-pip--w    { color: var(--success); }
.form-pip--l    { color: var(--danger); }



/* Entity display */
.col-entity   { min-width: 160px; }


.entity-name { font-weight: 700; font-size: var(--font-md); color: var(--fg1); }


/* Tier list */
.role-tabs  { display: flex; gap: 0; border-bottom: 2px solid var(--border-strong); margin-bottom: 1rem; }
.role-tab {
    padding: 0.35rem 0.9rem; font-family: var(--font-display); font-size: var(--font-md); font-weight: 700;
    text-transform: uppercase; letter-spacing: 0.06em;
    color: var(--fg3); border-bottom: 3px solid transparent;
    text-decoration: none; white-space: nowrap; margin-bottom: -2px;
    transition: color .1s, border-color .1s;
}
.role-tab:hover  { color: var(--primary); }
.role-tab.active { color: var(--fg1); border-bottom-color: var(--primary); }

.tier-header {
    display: flex; align-items: center; gap: 0.6rem;
    padding: 0.3rem 0.5rem; margin-bottom: 0;
    font-family: var(--font-display);
    font-size: var(--font-xs); font-weight: 900; text-transform: uppercase;
    letter-spacing: .1em; border-bottom: 2px solid var(--border-strong);
}
.tier-badge {
    display: inline-flex; align-items: center; justify-content: center;
    width: 22px; height: 22px; border-radius: var(--radius-md);
    font-size: var(--font-md); font-weight: 900; flex-shrink: 0;
}
.tier-S { background: var(--tier-s-bg); } .tier-S .tier-badge { background: var(--tier-s); color: #fff; }
.tier-A { background: var(--tier-a-bg); } .tier-A .tier-badge { background: var(--tier-a); color: #fff; }
.tier-B { background: var(--tier-b-bg); } .tier-B .tier-badge { background: var(--tier-b); color: #fff; }
.tier-C { background: var(--tier-c-bg); } .tier-C .tier-badge { background: var(--tier-c); color: #fff; }
.tier-D { background: var(--tier-d-bg); } .tier-D .tier-badge { background: var(--tier-d); color: #fff; }

.tier-table      { font-size: var(--font-md); width: 100%; border-collapse: collapse; }
.tier-table td   { padding: 0.3rem 0.5rem; border-bottom: 1px solid var(--border-hair); vertical-align: middle; }
.tier-table tbody tr:last-child td { border-bottom: none; }
.tier-table tbody tr:hover { background: var(--volt); color: var(--volt-ink); }
.tier-table-header th {
    font-family: var(--font-display);
    font-size: 0.68rem; font-weight: 900; text-transform: uppercase;
    letter-spacing: .1em; color: var(--text-on-inverse);
    padding: 0.25rem 0.5rem; border-bottom: 2px solid var(--border-strong);
    background: var(--surface-inverse); white-space: nowrap; text-align: right;
}
.tier-table-header th:first-child,
.tier-table-header th:nth-child(2) { text-align: left; }

.col-rank-small { width: 28px; text-align: center; font-family: var(--font-mono); font-size: var(--font-sm); font-weight: 700; color: var(--fg4); }
.rank-top       { color: var(--rank-gold); }

/* === 15. AUTH / LOGIN ====================================== */
/* Scoped pe .login-page (clasă pe <body>), NU pe `body` global.
   Regula `body { background }` inline din template scurgea fundalul negru
   în celelalte pagini la navigarea Turbo (head-ul rămânea în DOM). */
.login-page { background: var(--surface-inverse); font-family: var(--font-sans); }
.login-brand { font-family: var(--font-display); font-weight: 900; font-size: 1.5rem; text-transform: uppercase; letter-spacing: -.01em; color: var(--text-on-inverse); }
.login-brand .bi-trophy-fill { color: var(--primary); }
.login-sub { font-size: 0.75rem; color: rgba(245,241,232,.38); text-transform: uppercase; letter-spacing: .1em; font-family: var(--font-mono); }
.login-error { font-size: 0.8125rem; border-radius: var(--radius-sm); border: 2px solid var(--danger); }
.login-card { background: var(--card); border: 2px solid var(--border-strong); border-radius: var(--radius-sm); box-shadow: 6px 6px 0 0 var(--primary); }
.login-card .form-label { font-family: var(--font-display); font-size: 0.7rem; font-weight: 900; text-transform: uppercase; letter-spacing: .1em; color: var(--fg2); }
.login-card .input-group-text { background: var(--paper); border: 2px solid var(--border-strong); border-right: none; color: var(--text); }
.login-card .form-control { border: 2px solid var(--border-strong); border-left: none; font-family: var(--font-sans); }
.login-card .form-control:focus { box-shadow: none; border-color: var(--primary); }
.btn-login { font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .08em; background: var(--surface-inverse); color: var(--text-on-inverse); border: 2px solid var(--border-strong); border-radius: var(--radius-sm); padding: .6rem 1rem; transition: background .1s, color .1s; }
.btn-login:hover { background: var(--primary); border-color: var(--primary); color: #fff; }

/* Pagini de eroare (error403/404) — scoped pe .error-page, NU pe `body` global. */
.error-page { background: var(--paper); font-family: "Archivo", system-ui, sans-serif; }
.err-code { font-size: 5rem; font-weight: 900; color: var(--text); line-height: 1; text-transform: uppercase; letter-spacing: -.04em; }
.err-code--alert { color: var(--primary); }
.err-title { font-weight: 900; font-size: 1.25rem; text-transform: uppercase; letter-spacing: .04em; color: var(--text); }
.err-msg { color: var(--fg3); font-size: 0.8125rem; }
.btn-ink { background: var(--surface-inverse); color: var(--text-on-inverse); border: 2px solid var(--border-strong); border-radius: var(--radius-sm); padding: .4rem 1rem; font-weight: 700; text-transform: uppercase; font-size: 0.75rem; letter-spacing: .06em; text-decoration: none; transition: background .1s; display: inline-block; }
.btn-ink:hover { background: var(--primary); border-color: var(--primary); color: #fff; }
.btn-ink--ghost { background: transparent; color: var(--text); }
.btn-ink--danger { background: var(--danger); border-color: var(--danger); color: #fff; }
.btn-ink--danger:hover { background: var(--primary); border-color: var(--primary); color: #fff; }

/* Pagină de confirmare server-side pentru acțiuni ireversibile (B13, _confirm_page.html.twig) */
.confirm-page { display: flex; justify-content: center; padding: 2rem 1rem; }
.confirm-page__card { max-width: 34rem; width: 100%; padding: 1.25rem 1.5rem; border-left: 4px solid var(--danger); }
.confirm-page__lines { margin: .75rem 0 0; padding-left: 1.1rem; font-size: var(--font-sm); }
.confirm-page__lines li { margin-bottom: .25rem; }
.confirm-page__warn { font-weight: 700; color: var(--danger); font-size: var(--font-sm); margin: .5rem 0 1rem; }
.confirm-page__actions { display: flex; gap: .6rem; align-items: center; }

/* Modal de confirmare brand-uit (SSOT) — folosit de confirm-action.js + form-dirty.js.
   Ramă 2px ink + offset shadow, titlu Archivo uppercase, în loc de cardul soft Bootstrap. */
.confirm-modal .modal-content {
    border: 2px solid var(--border-strong);
    border-radius: var(--radius-sm);
    box-shadow: 6px 6px 0 var(--shadow-color);
    background: var(--surface);
    color: var(--text);
}
.confirm-modal .modal-header { border-bottom: 2px solid var(--border-strong); padding: .6rem .9rem; }
.confirm-modal .modal-title { font-family: var(--font-display, inherit); font-weight: 900; text-transform: uppercase; letter-spacing: .04em; font-size: 1rem; }
.confirm-modal .modal-body { padding: .9rem; }
.confirm-modal .modal-footer { border-top: 0; padding: .6rem .9rem; gap: .5rem; }

/* === 16. MOBILE / RESPONSIVE =============================== */
/* Mobile-first dense data. Vezi skill: references/mobile-first-dense-data.md.
   Bază = stiluri care merg pe telefon; @media(min-width) ar adăuga desktop unde e cazul.
   Aici: utilitare ca să scoatem style="" inline + card-reflow tabele + nav + touch. */

/* --- Utilitare font/opacity (înlocuiesc style="font-size:var(--font-*)") --- */
.fs-2xs  { font-size: var(--font-2xs); }
.fs-xs   { font-size: var(--font-xs); }
.fs-sm   { font-size: var(--font-sm); }


.empty-ico { font-size: 3rem; opacity: .2; }
.empty-ico--lg { font-size: 2.5rem; opacity: .25; }
   /* bulină status în strip */

.cursor-pointer { cursor: pointer; }
.badge-top-n--muted { background: var(--paper-2); color: var(--fg2); }

/* --- Tabel lat care trebuie păstrat 2D (bracket) → scroll orizontal cu degetul --- */


/* --- CARD-REFLOW: tabel dens → listă de carduri pe telefon ---
   Markup: <table class="reflow-table"> + data-label="..." pe FIECARE <td>. */
@media (max-width: 640px) {
    
    
    
    
    
    
    /* td fără data-label (gol) → ascuns ca rând de card */
    
}

/* --- Navbar responsive: pe telefon nu mai forțăm un singur rând fix --- */
@media (max-width: 640px) {
    .app-nav__inner { height: auto; min-height: 44px; flex-wrap: wrap; gap: 0.25rem; padding: 0.3rem 0.6rem; }
    .app-nav__actions { flex-wrap: wrap; gap: 0.35rem; }
    .app-nav__user { max-width: 40vw; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    /* Touch targets pe acțiunile principale */
    .app-nav__link, .app-nav__btn { min-height: 38px; display: inline-flex; align-items: center; }
}

/* --- Touch targets + forms fluide pe telefon --- */
@media (max-width: 640px) {
    .btn, .judge-chip__del, .pen-btn, .filter-pill, .badge-category { min-height: var(--tap-min); }
    .btn { display: inline-flex; align-items: center; justify-content: center; }
    /* Inputuri/select cu lățime fixă (admin) → fluide pe telefon */
    .w-in-lg, .w-in-md, .w-in-sm { width: 100%; }
}

/* --- Clase semantice care înlocuiesc style="" repetat în template-uri --- */
.cell-actions { width: 1%; white-space: nowrap; text-align: right; }   /* coloană acțiuni/chevron */
.cell-actions--top { vertical-align: top; padding-top: 0.35rem; }


.tbl-th { font-size: var(--font-xs); color: var(--fg4); text-transform: uppercase; letter-spacing: .05em; padding: .2rem .6rem; }
.col-rank-narrow { width: 1.8rem; font-weight: 700; }

.bk-col-count { font-size: .55rem; font-weight: 400; opacity: .6; }
.admin-edit-cell { background: var(--paper-2); padding: 0.5rem 0.6rem; }
.w-in-lg { width: 200px; }   /* input lat (email)   — devine 100% pe mobil */
.w-in-md { width: 140px; }   /* input mediu (parolă)— devine 100% pe mobil */
.w-in-sm { width: 120px; }   /* select (rol)        — devine 100% pe mobil */

/* Warning fuzzy „ești tu?" la înscriere (near-duplicate nudge) — bloc full-width SUB rând */
.dup-warn { width: 100%; margin: 0 0 .5rem; padding: .35rem .5rem; background: var(--warning-soft); border: 1px solid #ffe08a; border-radius: var(--radius-md); font-size: var(--font-xs); }
.dup-warn__head { display: flex; align-items: center; justify-content: space-between; gap: .5rem; margin-bottom: .25rem; }
.dup-warn__q { color: var(--warning); font-weight: 600; }
.dup-warn__close { flex-shrink: 0; border: 1px solid var(--border-hair); background: var(--card); border-radius: var(--radius-sm); padding: .05rem .5rem; font-size: var(--font-xs); cursor: pointer; white-space: nowrap; color: var(--fg2); }
.dup-warn__close:hover { background: var(--surface-inverse); color: var(--text-on-inverse); border-color: var(--border-strong); }
.dup-warn__pick { display: inline-block; margin: .12rem .2rem .12rem 0; padding: .12rem .5rem; background: var(--card); border: 1px solid var(--border-hair); border-radius: var(--radius-sm); font-size: var(--font-xs); cursor: pointer; }
.dup-warn__pick:hover { background: var(--volt); color: var(--volt-ink); border-color: var(--volt-ink); }

/* Input oraș îngust în rândul de membru (echipă) — încape pe o linie */


/* Formular înscriere: TOATE câmpurile pe UN rând care se împachetează fluid (nu 2 rânduri rigide).
   Câmpurile „text lat" (nume/crew/email/oraș) cresc (flex-grow) ca să umple linia fără gol la capăt;
   gen + dată = fixe. La lățimi mici rup natural pe 2+ linii, fiecare justificată de câmpurile care cresc. */
.enf-row    { display: flex; gap: 4px; align-items: center; flex-wrap: wrap; }
.enf-name   { flex: 1 1 8rem; min-width: 7rem; }
.enf-gender { flex: 0 0 auto; }
.enf-gender > select { width: 3.6rem; }
.enf-dob    { flex: 0 0 auto; }
.enf-crew   { flex: 1 1 8rem; min-width: 6rem; }
.enf-city   { flex: 1 1 6rem; min-width: 4.5rem; }
.enf-email  { flex: 1 1 8rem; min-width: 7rem; }
/* Dată naștere = 3 selecturi (zi · lună · an). Font mic + padding redus ca să încapă cuvântul/anul întreg. */
.dob-row { display: inline-flex; gap: 3px; }
.dob-row select { font-size: .72rem; padding: .2rem .15rem .2rem .3rem; background-position: right .2rem center; background-size: 8px 8px; }
.dob-row .dob-d { flex: 0 0 2.6rem; }   /* Zi  — 2 cifre */
.dob-row .dob-m { flex: 0 0 3.2rem; }   /* Lună — 2 cifre */
.dob-row .dob-y { flex: 0 0 3.6rem; }   /* An  — 4 cifre */

/* Câmp gol în formularul de înscriere — hint vizual (nu blochează), bordură punctată discretă. */
.field-empty { border-color: var(--danger) !important; border-style: dashed !important; }
/* Câmp opțional (email/gen/dată/crew/oraș) cu comutare input↔readout „pe profil" (B22). Dansator
   existent care ARE câmpul completat → inputul DISPARE, apare readout-ul (email = mascat, crew/oraș =
   valoarea, gen/dată = doar bifă). Lipsă → rămâne input editabil (backfillProfile salvează la înscriere).
   Crew/oraș needitabile: crew-ul de bază NU se schimbă la reînscriere (ar muta dansatorul în alt crew ELO). */
.enf-opt { display: inline-flex; align-items: center; min-width: 0; }
.enf-opt > .ac-wrap { flex: 1 1 auto; min-width: 0; }
.enf-opt > input { flex: 1 1 auto; min-width: 0; }
.enf-opt > .enf-onfile { display: none; }
.enf-opt.is-onfile > select,
.enf-opt.is-onfile > input,
.enf-opt.is-onfile > .dob-row,
.enf-opt.is-onfile > .ac-wrap { display: none; }
.enf-opt.is-onfile > .enf-onfile {
    display: inline-flex; align-items: center; gap: .3rem;
    font-size: var(--font-xs); font-weight: 600; color: var(--text); white-space: nowrap;
    padding: .18rem .45rem; border: 1px solid var(--success); border-radius: var(--radius-sm);
    background: var(--success-soft);
}
.enf-opt.is-onfile > .enf-onfile .bi { color: var(--success); }
.enf-onfile-val { font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0; }
/* On-file (readout): pilula = content-size + shrink-friendly, NU dimensiunea inputului. Elimină golul
   de flex-grow (crew→oraș) + suprapunerea de nowrap (oraș sub email). Împachetare naturală în .enf-row. */
.enf-opt.is-onfile { flex: 0 1 auto; min-width: 0; max-width: 100%; }
.enf-opt.is-onfile > .enf-onfile { max-width: 100%; min-width: 0; }

/* Membru de echipă = bloc distinct: cele 2 rânduri (person_rows) + număr mic în gutter + zebra discret,
   ca să deosebești concurent 1/2/3/4 fără să aglomerezi. #num tăiat din spațiu la ecrane mici prin padding. */
.member-rows { display: flex; flex-direction: column; gap: .15rem; }
.member-block { position: relative; padding: .3rem .45rem .3rem 1.5rem; border-radius: var(--radius-sm); }
.member-block:nth-child(even) { background: var(--paper-2); }
.member-block__num {
    position: absolute; left: .3rem; top: .5rem;
    font-size: var(--font-xs); font-weight: 700; line-height: 1; color: var(--text-muted);
}

/* Anti-overflow orizontal: media nu depășește lățimea ecranului */
img, svg, table { max-width: 100%; }


/* === 17. HOME (landing) + page heads — Battle-Broadcast ===== */
.page-head { font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .02em; font-size: 1.4rem; line-height: 1.1; color: var(--text); margin: 0; display: inline-flex; align-items: center; }

/* --- Breadcrumbs (SSOT) + marcaj de context (LIVE / REZULTATE / ARHIVĂ) --- */
.breadcrumbs {
    display: flex; flex-wrap: wrap; align-items: center; gap: .4rem;
    margin: 0 0 var(--kf-5); font-family: var(--kf-font-mono);
    font-size: var(--font-sm); color: var(--text-muted);
}
.breadcrumbs a { color: var(--text-muted); text-decoration: none; }
.breadcrumbs a:hover { color: var(--accent); }
.breadcrumbs__sep { color: var(--text-faint); }
.breadcrumbs__current { color: var(--text); font-weight: 700; }

.page-state {
    display: inline-flex; align-items: center; gap: .4rem; vertical-align: middle;
    font-family: var(--font-display); font-weight: 900; font-size: var(--font-sm);
    text-transform: uppercase; letter-spacing: .08em;
    padding: .2rem .65rem; border-radius: var(--radius-md);
}
.page-state--live            { background: var(--status-active-bg); color: var(--status-active-fg); }
.page-state--results,
.page-state--archive-results { background: var(--surface-inverse);  color: var(--text-on-inverse); }
.page-state--archive         { background: var(--status-done-bg);   color: var(--status-done-fg); }
.page-state__dot {
    width: .5rem; height: .5rem; border-radius: 50%; background: currentColor;
    animation: page-state-pulse 1.2s ease-in-out infinite;
}
@keyframes page-state-pulse { 0%, 100% { opacity: 1; } 50% { opacity: .25; } }

/* Proiector fullscreen: ascunde chrome-ul (nav + breadcrumbs) — toggle pe <body>, vezi projector-toggle.js */
.live-projector .app-nav,
.live-projector .breadcrumbs { display: none; }

/* --- Arhivă publică (/arhiva) --- */
.arch-toolbar { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; margin-bottom: var(--kf-5); }
.arch-toolbar__filters { display: flex; flex-wrap: wrap; gap: .35rem; }
.arch-year { font-family: var(--font-display); font-weight: 900; font-size: 1.5rem; text-transform: uppercase; letter-spacing: .02em; color: var(--text); margin: 1.4rem 0 .6rem; }
.arch-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: .8rem; }
.arch-actions { flex: 0 0 auto; display: flex; align-items: flex-start; }
.arch-cats { display: flex; flex-wrap: wrap; gap: .3rem; margin-top: .55rem; }
.arch-cat { display: inline-flex; align-items: center; gap: .3rem; padding: .15rem .4rem; border: 1px solid var(--border-subtle); border-radius: var(--radius-md); text-decoration: none; color: var(--text-muted); }
.arch-cat:hover { border-color: var(--accent); color: var(--text); }
.arch-cat__fmt { font-family: var(--kf-font-mono); font-size: var(--font-xs); }
.home-hero {
    border: var(--border-dark); border-radius: var(--radius-lg); background: var(--card);
    box-shadow: var(--shadow-hard); padding: 2.2rem 1.4rem; text-align: center; margin: 1rem 0 1.4rem;
}
.home-hero__mark { font-size: 2rem; color: var(--text); line-height: 1; }
.home-hero__title {
    font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .015em;
    font-size: clamp(2.2rem, 6vw, 3.4rem); line-height: 1; margin: .3rem 0 .45rem; color: var(--text);
}
.home-hero__flash { color: var(--primary); }
.home-hero__tag { font-size: var(--font-md); color: var(--fg2); max-width: 38rem; margin: 0 auto 1.1rem; }
.home-hero__cta { display: flex; flex-wrap: wrap; justify-content: center; gap: .5rem; }
.home-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr)); gap: 1rem; }
.home-card__body { padding: .8rem .9rem; display: flex; flex-direction: column; gap: .65rem; align-items: flex-start; }
.home-card__body p { margin: 0; font-size: var(--font-sm); color: var(--fg2); }

/* Leaderboard (clasament) — panou înrămat scoreboard, rânduri dense pe o linie */
.lb-panel { border: var(--border-dark); border-radius: var(--radius-lg); background: var(--card); overflow: hidden; }
.lb-panel__head {
    display: flex; align-items: center; gap: .4rem; padding: .4rem .65rem;
    background: var(--surface-inverse); color: var(--text-on-inverse);
    font-family: var(--font-display); font-weight: 900; font-size: var(--font-sm);
    text-transform: uppercase; letter-spacing: .08em;
}
.lb-panel__head .lb-panel__count { margin-left: auto; font-family: var(--font-mono); font-size: var(--font-xs); color: var(--volt); }
.lb-panel .tier-table { margin: 0; }
.lb-panel .tier-table td { padding: .3rem .55rem; }
.lb-panel .tier-table tbody tr:nth-child(even) td { background: var(--paper-2); }
.lb-panel .tier-table tbody tr:hover td { background: var(--volt); color: var(--volt-ink); }
/* ELO = numărul-vedetă, font display (Archivo) */
.lb-elo { font-family: var(--font-display); font-weight: 900; font-size: 1rem; color: var(--text); line-height: 1; }
/* meta inline pe ACEEAȘI linie cu numele (crew · oraș · țară) — nu pe rând nou */
.lb-meta { font-size: var(--font-xs); color: var(--fg3); white-space: nowrap; }
/* a doua linie meta (N concursuri · ultima participare) — pe rând propriu sub nume */
.lb-meta--sub { display: block; }
.lb-meta__cc { font-family: var(--font-mono); color: var(--fg2); }
.lb-empty { padding: 1rem .65rem; font-size: var(--font-sm); color: var(--fg3); }

/* === 18. RESULTS — pagina /rezultate (concurs terminat, cu chrome) =====
   Identică cu /live (tab-uri Calificare|Bracket, partiale read-only), DOAR că în sistem (cu nav) +
   antet de concurs LIZIBIL. Datele dense (bracket/scoruri) rămân compacte; titlurile + detaliile
   publice = mărite/citibile (NU stil compact-data) — pagina e exact ce caută vizitatorul. */
.res-hero { padding: .25rem 0 1rem; border-bottom: var(--border-dark); margin-bottom: 1rem; }
.res-hero__name {
    font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .01em;
    font-size: clamp(1.7rem, 4.5vw, 2.6rem); line-height: 1.04; color: var(--text); margin: 0;
}
.res-hero__meta { display: flex; flex-wrap: wrap; gap: .25rem 1.5rem; margin-top: .65rem; font-size: 1rem; color: var(--fg2); }
.res-hero__meta i { color: var(--primary); margin-right: .4rem; }
.res-hero__meta b { color: var(--text); font-weight: 700; }

.res-cat-strip { margin-bottom: .75rem; }

/* Titlul categoriei curente — lizibil (nu compact) */
.res-cat-head { margin-bottom: .5rem; }
.res-cat-name {
    font-family: var(--font-display); font-weight: 900; text-transform: uppercase; letter-spacing: .01em;
    font-size: 1.3rem; line-height: 1.1; color: var(--text); margin: 0 0 .35rem;
    display: flex; align-items: center; flex-wrap: wrap; gap: .45rem;
}
.res-cat-fmt { color: var(--primary); }

/* Line-up + Juriu pe același rând în antet; fiecare grup (.res-jury) păstrează flex-wrap → numele se
   rup între ele. Pe ecran mic grupurile se stivuiesc (juriul cade pe rând nou sub line-up). */
.cat-people { display: flex; flex-wrap: wrap; align-items: flex-start; gap: .35rem 1rem; margin-top: .45rem; }
@media (max-width: 640px) { .cat-people { flex-direction: column; gap: .3rem; } }
.res-jury { display: flex; align-items: center; flex-wrap: wrap; gap: .3rem; }
.res-jury__lbl { font-size: var(--font-sm); text-transform: uppercase; letter-spacing: .04em; color: var(--fg3); font-weight: 700; margin-right: .2rem; }

} /* === END @layer app (stylesheet principal, re-skinat prin remap) ==== */


/* ████████████████████████████████████████████████████████████████
   KINETIC FLOW — design nou (light/airy, line-less, rotunjit).
   Tokens namespaced --kf-* ca să coexiste cu „Battle Broadcast" (legacy)
   până migrăm fiecare pagină. Sursă: .claude/newdesign/kinetic_flow/DESIGN.md
   ████████████████████████████████████████████████████████████████ */

@layer tokens {
  :root {
    /* ---------- TIER 1 · RAW (Material roles din DESIGN.md) ---------- */
    /* lime */
    --c-kf-lime:        #ccff00;   /* primary-container — buton lime (RAR, doar CTA critic) */
    --c-kf-lime-tint:   #eef7c6;   /* lime pal — badge-uri/accente soft (lime „diluat") */
    --c-kf-lime-dim:    #abd600;   /* inverse-primary */
    --c-kf-olive:       #506600;   /* primary — solid / accent text */
    --c-kf-olive-2:     #5b7300;   /* on-primary-container — text pe lime */
    --c-kf-olive-ink:   #161e00;   /* on-primary-fixed */
    /* purple */
    --c-kf-purple:      #7000ff;   /* secondary-container */
    /* orange / alert (tertiary) */
    --c-kf-orange:      #b42800;   /* tertiary */
    --c-kf-orange-2:    #ca2f00;   /* on-tertiary-container */
    --c-kf-orange-soft: #ffe8e3;   /* tertiary-container */
    /* cyan / info (al treilea neon — callout) */
    --c-kf-cyan:        #0a7d88;   /* text cyan închis pe light */
    --c-kf-cyan-soft:   #d6f7fb;   /* bg soft */
    /* error */
    --c-kf-error:       #ba1a1a;
    --c-kf-error-soft:  #ffdad6;
    --c-kf-error-2:     #93000a;
    /* success / done (verde kf — distinct de lime-winner) */
    --c-kf-green:       #2f6b3a;
    --c-kf-green-soft:  #c8efce;
    --c-kf-green-2:     #0b3d1d;
    /* warning / tie (amber kf — distinct de orange-alert/error) */
    --c-kf-amber:       #7a5800;
    --c-kf-amber-soft:  #ffe6a0;
    --c-kf-amber-2:     #5a3e00;
    /* neutrals / surfaces */
    --c-kf-bg:        #f9f9f6;   /* background */
    --c-kf-s-lowest:  #ffffff;   /* surface-container-lowest */
    --c-kf-s-low:     #f4f4f1;   /* surface-container-low — tonal card */
    --c-kf-s:         #eeeeeb;   /* surface-container */
    --c-kf-s-high:    #e8e8e5;   /* surface-container-high */
    --c-kf-s-highest: #e2e3e0;   /* surface-container-highest */
    --c-kf-on:        #1a1c1a;   /* on-surface */
    --c-kf-on-var:    #444933;   /* on-surface-variant */
    --c-kf-outline:   #747a60;   /* outline */
    --c-kf-outline-v: #c4c9ac;   /* outline-variant */
    --c-kf-inverse-on:#f1f1ee;   /* inverse-on-surface */

    /* ---------- TIER 2 · SEMANTIC ROLES (light) ---------- */
    --kf-bg:            var(--c-kf-bg);
    --kf-surface:       var(--c-kf-s-low);    /* carduri / panouri (line-less) */
    --kf-surface-2:     var(--c-kf-s);        /* nested / chips bg */
    --kf-surface-3:     var(--c-kf-s-high);
    --kf-surface-inset: var(--c-kf-s-highest);/* ghost input / inset */
    --kf-surface-bright:var(--c-kf-s-lowest); /* rânduri „feed" */
    --kf-text:          var(--c-kf-on);
    --kf-text-variant:  var(--c-kf-on-var);
    --kf-outline:       var(--c-kf-outline);
    --kf-outline-soft:  var(--c-kf-outline-v);

    --kf-primary:       var(--c-kf-lime);     /* buton lime, bg (RAR) */
    --kf-on-primary:    var(--c-kf-olive-2);  /* text pe lime */
    --kf-tint:          var(--c-kf-lime-tint);/* badge/accent soft (lime diluat) */
    --kf-on-tint:       var(--c-kf-olive);    /* text pe tentă */
    --kf-primary-solid: var(--c-kf-olive);    /* buton solid (submit) */
    --kf-on-solid:      var(--c-kf-s-lowest);  /* text alb pe solid */
    --kf-accent:        var(--c-kf-olive);    /* etichete date / accent text */
    --kf-accent-strip:  var(--c-kf-lime);     /* bară accent stânga */

    --kf-secondary:     var(--c-kf-purple);
    --kf-on-secondary:  var(--c-kf-s-lowest);

    --kf-alert:         var(--c-kf-orange);
    --kf-alert-soft:    var(--c-kf-orange-soft);
    --kf-on-alert-soft: var(--c-kf-orange-2);

    --kf-info:          var(--c-kf-cyan);       /* callout/info (cyan) */
    --kf-info-soft:     var(--c-kf-cyan-soft);

    --kf-danger:        var(--c-kf-error);
    --kf-danger-soft:   var(--c-kf-error-soft);
    --kf-on-danger-soft:var(--c-kf-error-2);

    --kf-success:        var(--c-kf-green);      /* done / qualified / positive */
    --kf-success-soft:   var(--c-kf-green-soft);
    --kf-on-success-soft:var(--c-kf-green-2);

    --kf-warning:        var(--c-kf-amber);      /* tie / locked / atenție */
    --kf-warning-soft:   var(--c-kf-amber-soft);
    --kf-on-warning-soft:var(--c-kf-amber-2);

    /* ---------- TYPOGRAPHY ---------- */
    --kf-font:         'Archivo', system-ui, sans-serif;
    --kf-font-display: 'Anton', 'Archivo', sans-serif;  /* condensat brutalist, uppercase */
    --kf-font-mono:    'Space Mono', ui-monospace, monospace;
    --kf-fs-body:    1rem;     /* 16 — singurul fs kf consumat; restul scalei = superseded de --font-* legacy */

    /* ---------- RADII (brutalist pătrățos) ---------- */
    --kf-r-sm:   0;           /* singurul radius kf consumat; restul = superseded de --radius-* remapat la 0 */

    /* ---------- SPACING (unit 4px) ---------- */
    --kf-1: .25rem;  --kf-2: .5rem;  --kf-3: .75rem;  --kf-4: 1rem;
    --kf-5: 1.5rem;  --kf-6: 2rem;   --kf-7: 2.5rem;  --kf-8: 3rem;
    --kf-gutter: 1.5rem;       /* 24px */
    --kf-margin: 2.5rem;       /* 40px desktop */
    --kf-container: 1440px;

    /* ---------- STRUCTURĂ (brutalist FLAT: hairline subțire, zero umbre) ---------- */
    --kf-line:   #cdd0bd;                      /* hairline muted deschis (NU negru gros) */
    --kf-line-strong: var(--c-kf-outline);     /* hairline mai vizibil la nevoie */
    --kf-border: 1px solid var(--kf-line);     /* 1px subțire */
    /* FLAT — zero umbre: --shadow-hard* (legacy) e remapat la `none`, nu mai trebuie token kf separat. */
  }

  /* ---------- DARK (remap doar rolurile; accentele rămân vii) ---------- */
  [data-theme="dark"] {
    --kf-bg:            #14160f;
    --kf-surface:       #1f211c;
    --kf-surface-2:     #262822;
    --kf-surface-3:     #2f312b;
    --kf-surface-inset: #34362f;
    --kf-surface-bright:#1a1c17;
    --kf-text:          var(--c-kf-inverse-on);
    --kf-text-variant:  #b9bda6;
    --kf-outline:       #8a8f74;
    --kf-outline-soft:  #4a4d3e;
    --kf-on-primary:    var(--c-kf-olive-ink);  /* text mai închis pe lime */
    --kf-tint:          #2c3a00;                 /* tentă lime întunecată */
    --kf-on-tint:       var(--c-kf-lime-dim);
    --kf-line:          #3a3d31;                 /* hairline subțire pe fundal închis */
    --kf-line-strong:   var(--c-kf-outline);
    --kf-shadow:        none;
    --kf-shadow-hover:  none;
    --kf-shadow-float:  none;
    /* semantice pe dark — soft-urile light ar da fundal greșit (remap unlayered = ambele teme) */
    --kf-success:        #7ddb96; --kf-success-soft: #15311d; --kf-on-success-soft: #c8efce;
    --kf-warning:        #e8c466; --kf-warning-soft: #33270a; --kf-on-warning-soft: #ffe6a0;
    --kf-danger:         #ffb4ab; --kf-danger-soft:  #3a1717; --kf-on-danger-soft:  #ffdad6;
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   SCHIMBARE TOTALĂ kf — remap GLOBAL al tokenilor de SKIN din @layer app → valori kf.
   Nelayered → bate @layer app (inclusiv [data-theme=dark]) în AMBELE teme;
   tokenii --kf-* sunt theme-aware → light+dark automat. Atinge DOAR skin
   (culoare/font/umbră/rază); width/grid/flex/gap/size rămân legacy → ARANJAMENTUL NEATINS.
   Stările semantice (--success/--danger/--warning + soft) = remapate la kf-native
   (--kf-success/-danger/-warning, theme-aware) → done/penalty/tie/fav urmează paleta kf.
   Codarea pe criterii (.sc-round--c0/c1/c2 hardcodate; golden via --golden-soft/--on-golden
   definite DOAR în :root base, neremapate aici/dark) = PĂSTRATĂ light intenționat (theme-independent).
   ═══════════════════════════════════════════════════════════════════════════ */
:root {
  /* fonturi: display → Anton (headere/numere mari peste tot); sans/mono rămân (= kf) */
  --font-display: 'Anton', 'Archivo', system-ui, sans-serif;
  /* flat total + colțuri ascuțite */
  --shadow-hard: none; --shadow-hard-sm: none;
  --radius-sm: 0; --radius-md: 0; --radius-lg: 0;
  /* borduri: gata cu ramele ink 2px groase → hairline kf */
  --border-strong: var(--kf-line); --border-hair: var(--kf-line); --border-subtle: var(--kf-line);
  /* accent/live/highlight → lime kf */
  /* --volt = lime (theme-INDEPENDENT, lime în ambele teme) → „ink pe lime" trebuie să fie ÎNCHIS FIX,
     nu un token care se inversează (kf-text→alb pe dark) sau olive cu contrast slab. olive-ink = #161e00. */
  --volt: var(--kf-accent-strip); --volt-ink: var(--c-kf-olive-ink);
  --primary: var(--kf-primary-solid); --accent: var(--kf-primary-solid);
  --primary-strong: var(--kf-primary-solid); --primary-soft: var(--kf-tint);
  /* semantice → kf-native (done/penalty/tie/fav + alerte/badge/spots, dintr-un loc) */
  --success: var(--kf-success); --success-soft: var(--kf-success-soft);
  --danger:  var(--kf-danger);  --danger-soft:  var(--kf-danger-soft);
  --warning: var(--kf-warning); --warning-soft: var(--kf-warning-soft);
  --on-warning-soft: var(--kf-on-warning-soft);
  /* suprafețe */
  --paper: var(--kf-surface); --paper-2: var(--kf-surface-bright); --card: var(--kf-surface);
  --surface: var(--kf-surface); --surface-2: var(--kf-surface-bright);
  --surface-inverse: var(--kf-text); --text-on-inverse: var(--kf-surface-bright);
  /* text */
  --text: var(--kf-text);
  --fg1: var(--kf-text); --fg2: var(--kf-text);
  --fg3: var(--kf-text-variant); --fg4: var(--kf-outline);
  --text-secondary: var(--kf-text); --text-muted: var(--kf-text-variant); --text-faint: var(--kf-outline);
  /* winner → lime kf (toate regulile is-win/winner urmează automat) */
  --winner-bg: var(--kf-tint); --winner-fg: var(--kf-on-tint);
  --winner-edge: var(--kf-primary-solid); --winner-ink: var(--kf-text);
}

@layer base {
  /* Scop opt-in: paginile migrate primesc body class `kf` → look nou.
     NU atinge paginile legacy (care n-au clasa). */
  body.kf {
    background: var(--kf-bg);
    color: var(--kf-text);
    font-family: var(--kf-font);
    font-size: var(--kf-fs-body);
    line-height: 1.5;
  }
  body.kf .text-muted { color: var(--kf-text-variant) !important; }
}

/* ===== LAYOUT — composition primitives (scoped la body.kf) ===== */
@layer layout {
  /* ritm vertical reutilizabil */
  
}

/* ===== COMPONENTS — Kinetic Flow (scoped la body.kf, bate legacy) ===== */
@layer components {

  /* ---- Dance-style pill — hue din name|style_hue (SSOT: StyleColorExtension) ----
     Culoare distinctă + stabilă per nume stil, număr nelimitat. Single inline
     `--style-h` = excepția dinamică permisă (ca --w%/--fill%). NU e scoped kf →
     se aplică și pe paginile legacy (live/results/category show). */
  .style-pill {
    --style-s: 70%; --style-l-bg: 90%; --style-l-fg: 30%; --style-l-accent: 45%;
    display: inline-flex; align-items: center; gap: .25rem;
    padding: .12rem .5rem .12rem .42rem; border-radius: 999px;
    background: hsl(var(--style-h) var(--style-s) var(--style-l-bg));
    color: hsl(var(--style-h) var(--style-s) var(--style-l-fg));
    border: 1px solid hsl(var(--style-h) var(--style-s) var(--style-l-accent) / .55);
    border-left: 3px solid hsl(var(--style-h) var(--style-s) var(--style-l-accent));
    font-weight: 600; line-height: 1.25; white-space: nowrap;
  }
  [data-theme="dark"] .style-pill {
    --style-s: 55%; --style-l-bg: 22%; --style-l-fg: 82%; --style-l-accent: 62%;
  }
  @media (prefers-color-scheme: dark) {
    :root:not([data-theme]) .style-pill {
      --style-s: 55%; --style-l-bg: 22%; --style-l-fg: 82%; --style-l-accent: 62%;
    }
  }

  /* ---- Page head → Anton condensat uppercase ---- */
  body.kf .page-head {
    font-family: var(--kf-font-display);
    font-weight: 400;
    font-size: 2.6rem;
    letter-spacing: .01em;
    text-transform: uppercase;
    color: var(--kf-text);
    line-height: .98;
    margin: 0;
  }

  /* ---- Folder tabs → segmented flat, divizor 1px subțire ---- */
  body.kf .folder-tabs {
    display: flex; flex-wrap: wrap; gap: 0;
    border: var(--kf-border); margin-bottom: var(--kf-5);
    background: var(--kf-surface-bright);
    padding: 0;
    border-radius: var(--kf-r-sm);
    width: fit-content;
    overflow: hidden;
  }
  body.kf .folder-tab {
    border: 0; border-right: 1px solid var(--kf-line); margin: 0;
    border-radius: 0;
    padding: .5rem 1.1rem;
    font-family: var(--kf-font-mono);
    font-weight: 700; font-size: .76rem; text-transform: uppercase; letter-spacing: .04em;
    color: var(--kf-text-variant);
    background: transparent;
    display: inline-flex; align-items: center; gap: .4rem;
    transition: none;
  }
  body.kf .folder-tab:last-child { border-right: 0; }
  body.kf .folder-tab:hover { color: var(--kf-text); background: var(--kf-surface-2); }
  body.kf .folder-tab.active {
    background: var(--kf-primary);
    color: var(--kf-on-primary);
  }

  /* ---- Masonry gutter (coloane independente construite de masonry-columns.js) ---- */
  body.kf .bcast-grid { gap: var(--kf-gutter); }
  body.kf .bcast-grid.is-masonry { gap: 0; }
  body.kf .bcast-col { gap: var(--kf-gutter); padding: 0 calc(var(--kf-gutter) / 2); }

  /* ---- Concurs card (FLAT, sharp, hairline subțire) ---- */
  body.kf .ccard {
    background: var(--kf-surface);
    border: var(--kf-border);
    border-radius: var(--kf-r-sm);
    overflow: hidden;
    display: flex; flex-direction: column;
    transition: border-color .1s;
  }
  /* hover flat: contur lime instant (fără lift, fără umbră) */
  body.kf .ccard:hover { border-color: var(--kf-primary-solid); }

  /* hero poster band + overlay — grayscale → color la hover (brutalist) */
  body.kf .ccard__hero {
    position: relative; height: 190px; overflow: hidden;
    background: var(--kf-surface-3); cursor: pointer;
  }
  body.kf .ccard__hero img {
    width: 100%; height: 100%; object-fit: cover; display: block;
    filter: grayscale(1) contrast(1.05); transition: filter .25s;
  }
  body.kf .ccard:hover .ccard__hero img { filter: grayscale(0) contrast(1); }
  body.kf .ccard__hero-ov {
    position: absolute; inset: auto 0 0 0;
    padding: var(--kf-5) var(--kf-4) var(--kf-3);
    background: linear-gradient(to top, rgba(20,22,15,.82) 0%, rgba(20,22,15,.45) 55%, transparent 100%);
  }
  body.kf .ccard__title {
    font-family: var(--kf-font-display); font-weight: 400; font-size: 1.85rem;
    line-height: .95; color: #fff; letter-spacing: .01em; text-transform: uppercase;
  }
  body.kf .ccard__herometa {
    display: flex; flex-wrap: wrap; gap: .25rem 1rem; margin-top: .35rem;
    font-family: var(--kf-font-mono); font-size: .78rem; color: rgba(255,255,255,.82);
  }
  body.kf .ccard__hero-badges {
    position: absolute; top: var(--kf-3); right: var(--kf-3);
    display: flex; flex-wrap: wrap; gap: .35rem; z-index: 2;
  }
  body.kf .ccard__zoom {
    position: absolute; top: var(--kf-3); left: var(--kf-3); z-index: 2;
    width: 32px; height: 32px; border-radius: var(--kf-r-sm);
    background: rgba(255,255,255,.85); color: var(--kf-text);
    display: flex; align-items: center; justify-content: center;
    opacity: 0; transition: opacity .18s;
  }
  body.kf .ccard__hero:hover .ccard__zoom { opacity: 1; }

  /* status badge / countdown → fill plat pătrat (flat, fără border) */
  body.kf .badge-status, body.kf .cbc-days {
    border: 0; border-radius: 0;
    padding: .22rem .55rem; font-size: .66rem; font-weight: 700;
    font-family: var(--kf-font-mono); letter-spacing: .06em; text-transform: uppercase;
    display: inline-flex; align-items: center;
  }
  body.kf .badge-status--open   { background: var(--kf-tint);       color: var(--kf-on-tint); }
  body.kf .badge-status--active { background: var(--kf-secondary);  color: var(--kf-on-secondary); }
  body.kf .badge-status--done   { background: var(--kf-surface-inset); color: var(--kf-text-variant); }
  body.kf .cbc-days { background: var(--kf-alert-soft); color: var(--kf-on-alert-soft); }
  body.kf .cbc-days--today { background: var(--kf-alert); color: #fff; }

  /* ---- Categorie (rând în card) ---- */
  body.kf .ccard > .ccat,
  body.kf .ccard .ccat {
    background: var(--kf-surface-bright);
    border: 0; border-radius: 0;
    margin: 0 var(--kf-4) var(--kf-3);
    padding: var(--kf-3) var(--kf-4);
    position: relative; overflow: hidden;
    transition: background .1s;
  }
  body.kf .ccard .ccat:first-of-type { margin-top: var(--kf-4); }
  body.kf .ccard a.ccat { display: block; color: inherit; text-decoration: none; }
  body.kf .ccat::before {
    content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 5px;
    background: var(--kf-accent-strip); opacity: 0; transition: opacity .15s;
  }
  body.kf .ccat:hover { background: var(--kf-surface-2); }
  body.kf .ccat:hover::before { opacity: 1; }

  body.kf .ccat__l1 { display: flex; flex-wrap: wrap; align-items: center; gap: .4rem; margin-bottom: .6rem; }
  /* rând meta = grilă 2-col: etichetă lățime fixă | valori (aliniere verticală a etichetelor) */
  body.kf .ccat__row {
    display: grid; grid-template-columns: 4.5rem 1fr;
    align-items: start; gap: .25rem .5rem; margin-top: .45rem;
  }
  body.kf .ccat__lbl {
    grid-column: 1; align-self: start; justify-self: start;
    font-family: var(--kf-font-mono); font-size: .66rem; font-weight: 700;
    text-transform: uppercase; letter-spacing: .05em; color: var(--kf-text-variant);
    margin: 0; padding-top: .28rem; white-space: nowrap;
  }
  /* valorile = cluster wrap în col 2 (wrapper .ccat__vals sau .e-chip-list) */
  body.kf .ccat__vals, body.kf .ccat__row .e-chip-list {
    grid-column: 2; display: flex; flex-wrap: wrap; align-items: center; gap: .3rem;
  }

  /* style-pill pe kf → PĂSTREAZĂ hue-ul (tentă + strip stânga), dar brutalist:
     mono uppercase, plat, sharp. Iese în evidență față de format/TOP gri. */
  body.kf .style-pill {
    border-radius: 0; border: 0;
    border-left: 4px solid hsl(var(--style-h) var(--style-s) var(--style-l-accent));
    background: hsl(var(--style-h) var(--style-s) var(--style-l-bg));
    color: hsl(var(--style-h) var(--style-s) var(--style-l-fg));
    font-family: var(--kf-font-mono); font-weight: 700; font-size: .68rem;
    text-transform: uppercase; letter-spacing: .04em;
    padding: .2rem .5rem .2rem .42rem;
  }
  body.kf .badge-battle-fmt {
    border: 0; border-radius: 0;
    background: var(--kf-surface-inset); color: var(--kf-text-variant);
    font-family: var(--kf-font-mono); font-weight: 700; font-size: .66rem;
    padding: .2rem .5rem; text-transform: uppercase; letter-spacing: .05em;
  }
  body.kf .badge-top-n {
    border: 0; border-radius: 0;
    background: var(--kf-tint); color: var(--kf-on-tint);
    font-family: var(--kf-font-mono); font-weight: 700; font-size: .66rem;
    padding: .2rem .5rem; letter-spacing: .03em;
  }
  body.kf .ccat .badge.bg-secondary {
    border-radius: 0; background: var(--kf-info-soft) !important;
    color: var(--kf-info); font-family: var(--kf-font-mono); font-weight: 700; font-size: .66rem;
  }

  /* juriu / staff / înscriși → fill plat pătrat (fără border) */
  body.kf .j-pill, body.kf .e-chip {
    border: 0; border-radius: 0;
    background: var(--kf-surface-2); color: var(--kf-text);
    font-size: .72rem; padding: .2rem .55rem; display: inline-flex; align-items: center; gap: .3rem;
  }
  /* numele juratului prelua --primary-strong (remapat la olive) → olive-pe-surface ilizibil.
     → text on-surface normal, lizibil pe chip. */
  body.kf .j-pill__n { color: var(--kf-text); }
  body.kf .j-pill__m, body.kf .e-city { color: var(--kf-text-variant); font-family: var(--kf-font-mono); font-size: .68rem; }
  body.kf .s-pill { background: var(--kf-surface-inset); }
  body.kf .s-pill__r {
    font-family: var(--kf-font-mono); font-size: .62rem; font-weight: 700;
    text-transform: uppercase; color: var(--kf-accent); letter-spacing: .04em;
  }
  body.kf .e-chip-list { display: inline-flex; flex-wrap: wrap; gap: .3rem; }

  /* CTA înscriere → lime plat (SINGURUL lime), hover invert instant */
  body.kf .ccat__cta {
    margin-top: var(--kf-4);
    background: var(--kf-primary); color: var(--kf-on-primary);
    border: 0; border-radius: 0;
    padding: .7rem 1rem;
    font-family: var(--kf-font-mono);
    font-weight: 700; font-size: .82rem; text-transform: uppercase; letter-spacing: .06em;
    display: flex; align-items: center; justify-content: center; gap: .5rem;
    transition: none;
  }
  body.kf .ccat:hover .ccat__cta,
  body.kf .ccat[aria-expanded="true"] .ccat__cta {
    background: var(--kf-primary-solid); color: var(--kf-on-solid);
  }
  body.kf .ccat__cta .bi-chevron-down { margin-left: auto; }
  body.kf .ccat[aria-expanded="true"] .ccat__cta .bi-chevron-down { transform: rotate(180deg); }

  /* ---- Formular înscriere inline (flat) ---- */
  body.kf .ccat-form {
    background: var(--kf-surface-2);
    margin: 0 var(--kf-4) var(--kf-4);
    border: 0; border-radius: 0;
    padding: var(--kf-4);
  }
  body.kf .pc-form-title {
    font-family: var(--kf-font-display); font-weight: 400; font-size: 1.15rem;
    text-transform: uppercase; letter-spacing: .02em;
    color: var(--kf-text); margin-bottom: var(--kf-3);
  }
  body.kf .ac-hint, body.kf .dancer-lbl {
    font-family: var(--kf-font-mono); font-size: .68rem; text-transform: uppercase;
    letter-spacing: .04em; color: var(--kf-text-variant);
  }
  /* inputuri → hairline 1px plat, focus = contur lime instant */
  body.kf .ccat-form .form-control,
  body.kf .ccat-form .form-select {
    background-color: var(--kf-surface-bright);   /* background-color (NU background) — nu șterge săgeata select */
    border: 1px solid var(--kf-line);
    border-radius: 0;
    color: var(--kf-text); font-family: var(--kf-font-mono); font-size: .82rem;
    box-shadow: none; transition: border-color .1s;
  }
  body.kf .ccat-form .form-control::placeholder { color: var(--kf-outline); }
  body.kf .ccat-form .form-control:focus,
  body.kf .ccat-form .form-select:focus {
    background-color: var(--kf-surface-bright);
    border-color: var(--kf-primary-solid);
    box-shadow: inset 2px 0 0 var(--kf-accent-strip); outline: none;
  }
  body.kf .ccat-form .dob-row select { font-family: var(--kf-font-mono); }

  /* Formular înscriere — strip „left-strip" DASHED pe stânga + colțuri rotunjite (nu cutie completă).
     Bordura e doar pe stânga; border-radius rotunjește boxul (fundal + capetele strip-ului) = look cool.
     SSOT prin clasa .entry-form pe <form> (_entry_form.html.twig) → identic pe /concursuri
     (în .ccat-form) ȘI pe pagina categoriei organizatorului (formular plain). Plasat în
     @layer components, DUPĂ regula .ccat-form, ca să bată cutia kf (specificitate egală + ordine). */
  body.kf .entry-form .form-control,
  body.kf .entry-form .form-select {
    border: 0; border-left: 2px dashed var(--kf-line);
    border-radius: var(--entry-radius); background-color: var(--kf-surface-bright);
    box-shadow: none; transition: border-left-color .12s;
  }
  body.kf .entry-form .form-control:focus,
  body.kf .entry-form .form-select:focus {
    border-left-color: var(--kf-primary-solid);
    box-shadow: none; outline: none;
  }

  /* submit → olive solid plat, hover invert instant */
  body.kf .ccat-form .btn-ink {
    background: var(--kf-primary-solid); color: var(--kf-on-solid);
    border: 0; border-radius: 0;
    font-family: var(--kf-font-mono); font-weight: 700; padding: .65rem 1.5rem;
    text-transform: uppercase; letter-spacing: .06em;
    transition: none;
  }
  body.kf .ccat-form .btn-ink:hover { background: var(--kf-primary); color: var(--kf-on-primary); }
  body.kf .ccat-form .btn-outline-secondary {
    border-radius: 0; border-color: var(--kf-line); color: var(--kf-text-variant);
    font-family: var(--kf-font-mono); text-transform: uppercase; font-size: .7rem;
  }

  /* empty state */
  body.kf .empty-ico--lg { color: var(--kf-outline); }

  /* ═══════════ DASHBOARD „Contul meu" /cont (scoped body.kf) ═══════════ */

  /* Page header → titlu Anton + acțiune dreapta, hairline jos */
  body.kf .page-header {
    display: flex; align-items: flex-end; justify-content: space-between;
    flex-wrap: wrap; gap: var(--kf-3);
    border-bottom: var(--kf-border); padding-bottom: var(--kf-3); margin-bottom: var(--kf-5);
  }
  body.kf .page-header__title {
    font-family: var(--kf-font-display); font-weight: 400; font-size: 2.4rem;
    line-height: .98; letter-spacing: .01em; text-transform: uppercase;
    color: var(--kf-text); margin: 0;
  }

  /* btn-ink (page/acct primary) → olive solid plat, hover invert instant */
  body.kf .btn-ink {
    background: var(--kf-primary-solid); color: var(--kf-on-solid);
    border: 0; border-radius: 0;
    font-family: var(--kf-font-mono); font-weight: 700;
    text-transform: uppercase; letter-spacing: .05em;
    padding: .5rem 1.1rem; display: inline-flex; align-items: center; gap: .4rem;
    transition: none;
  }
  body.kf .btn-ink:hover { background: var(--kf-primary); color: var(--kf-on-primary); }
  body.kf .btn-ink.btn-xs { padding: .35rem .8rem; font-size: .72rem; }

  /* Card profil organizator → flat hairline */
  body.kf .acct-card {
    background: var(--kf-surface); border: var(--kf-border); border-radius: 0;
    padding: var(--kf-3) var(--kf-4);
  }
  body.kf .acct-card__ico { color: var(--kf-text-variant); }
  body.kf .acct-card__name {
    font-family: var(--kf-font-display); font-weight: 400; text-transform: uppercase;
    letter-spacing: .02em; font-size: 1.1rem; color: var(--kf-text);
  }
  body.kf .acct-card__email { font-family: var(--kf-font-mono); font-size: .74rem; color: var(--kf-text-variant); }
  body.kf .acct-form { border-top: 1px solid var(--kf-line); }
  body.kf .acct-form__lbl {
    font-family: var(--kf-font-mono); font-size: .64rem; font-weight: 700;
    text-transform: uppercase; letter-spacing: .05em; color: var(--kf-text-variant);
  }
  body.kf .acct-card .form-control {
    background: var(--kf-surface-bright); border: 1px solid var(--kf-line); border-radius: 0;
    color: var(--kf-text); font-family: var(--kf-font-mono); font-size: .82rem; box-shadow: none;
  }
  body.kf .acct-card .form-control:focus {
    border-color: var(--kf-primary-solid); box-shadow: inset 2px 0 0 var(--kf-accent-strip); outline: none;
  }

  /* Head card concurs (thumbnail mic + titlu + meta + acțiuni) */
  body.kf .hub-head {
    padding: var(--kf-3) var(--kf-4); border-bottom: 1px solid var(--kf-line);
  }
  body.kf .hub-thumb {
    width: 56px; height: 56px; border-radius: 0; background: var(--kf-surface-3);
  }
  body.kf .hub-thumb img { filter: grayscale(1) contrast(1.05); transition: filter .25s; }
  body.kf .ccard:hover .hub-thumb img { filter: grayscale(0) contrast(1); }
  body.kf .hub-thumb--empty { color: var(--kf-outline); }
  body.kf .hub-head__title {
    font-family: var(--kf-font-display); font-weight: 400; font-size: 1.35rem;
    line-height: 1; text-transform: uppercase; letter-spacing: .01em; color: var(--kf-text);
  }
  body.kf .hub-head__meta {
    display: flex; flex-wrap: wrap; align-items: center; gap: .25rem .7rem; margin-top: .35rem;
    font-family: var(--kf-font-mono); font-size: .68rem; color: var(--kf-text-variant);
  }

  /* Tabel categorii în card */
  body.kf .hub-cats { padding: var(--kf-2) var(--kf-4) var(--kf-3); }
  body.kf .pub-cat-table td { padding: .4rem .5rem; }
  body.kf .pub-cat-table tr + tr td { border-top: 1px solid var(--kf-line); }
  /* rând categorie (clasă proprie kf → NU se ciocnește cu legacy .cat-tr important) */
  body.kf .kf-catrow td { transition: background .1s; }
  body.kf .kf-catrow--odd td { background: var(--kf-surface-bright); }
  body.kf .kf-catrow:hover td { background: var(--kf-surface-2); color: var(--kf-text); }
  /* hover = strip lime stânga + grey subtil (ca .ccat::before de pe /concursuri) */
  body.kf .kf-catrow:hover td:first-child { box-shadow: inset 4px 0 0 var(--kf-accent-strip); }
  body.kf .cat-entries-lbl {
    font-family: var(--kf-font-mono); font-size: .62rem; font-weight: 700;
    text-transform: uppercase; letter-spacing: .05em; color: var(--kf-text-variant);
  }
  body.kf .badge-top-n--muted { background: var(--kf-surface-inset); color: var(--kf-text-variant); }
  /* tier pill (clasă proprie → fără Bootstrap text-bg-* care e important în @layer vendor) */
  body.kf .tier-pill {
    border: 0; border-radius: 0; padding: .2rem .5rem;
    background: var(--kf-surface-inset); color: var(--kf-text-variant);
    font-family: var(--kf-font-mono); font-weight: 700; font-size: .66rem;
    text-transform: uppercase; letter-spacing: .03em; display: inline-flex; align-items: center;
  }
  body.kf .tier-pill--rank { background: var(--kf-tint); color: var(--kf-on-tint); }

  /* Acțiuni per-categorie → next-step = lime plat; restul = outline hairline mono */
  body.kf .cat-actions .btn {
    border-radius: 0; border: 1px solid var(--kf-line);
    font-family: var(--kf-font-mono); font-weight: 700; font-size: .68rem;
    text-transform: uppercase; letter-spacing: .04em; padding: .3rem .7rem;
    transition: none; background: var(--kf-surface-bright); color: var(--kf-text-variant);
  }
  body.kf .cat-actions .btn:hover { border-color: var(--kf-primary-solid); color: var(--kf-text); }
  body.kf .cat-actions .btn-success,
  body.kf .cat-actions .btn-warning,
  body.kf .cat-actions .btn-dark,
  body.kf .hub-footer .btn-dark {
    background: var(--kf-primary); color: var(--kf-on-primary); border-color: var(--kf-primary);
  }
  body.kf .cat-actions .btn-success:hover,
  body.kf .cat-actions .btn-warning:hover,
  body.kf .cat-actions .btn-dark:hover,
  body.kf .hub-footer .btn-dark:hover {
    background: var(--kf-primary-solid); color: var(--kf-on-solid); border-color: var(--kf-primary-solid);
  }

  /* Editează (head) + Editează profil → outline hairline mono transparent */
  body.kf .hub-head__actions .btn,
  body.kf .acct-card .btn-outline-secondary {
    border-radius: 0; border: 1px solid var(--kf-line);
    font-family: var(--kf-font-mono); font-weight: 700; font-size: .68rem;
    text-transform: uppercase; letter-spacing: .04em;
    background: transparent; color: var(--kf-text-variant); transition: none;
  }
  body.kf .hub-head__actions .btn:hover,
  body.kf .acct-card .btn-outline-secondary:hover { border-color: var(--kf-primary-solid); color: var(--kf-text); }

  /* Footer card */
  body.kf .hub-footer {
    border-top: 1px solid var(--kf-line); padding: var(--kf-2) var(--kf-4);
    font-family: var(--kf-font-mono); font-size: .68rem;
  }

  /* empty-state icon */
  body.kf .empty-ico { color: var(--kf-outline); opacity: .35; }

  /* === LANDING `/` — Kinetic Sharp (flat, hairline, Anton) ============ */
  body.kf .home-hero {
    border: 0; border-top: 2px solid var(--kf-accent-strip);
    border-radius: 0; background: var(--kf-surface);
    box-shadow: none; padding: var(--kf-7) var(--kf-4);
    text-align: center; margin: var(--kf-4) 0 var(--kf-5);
  }
  body.kf .home-hero__mark { color: var(--kf-accent); }
  body.kf .home-hero__title {
    font-family: var(--kf-font-display); font-weight: 400;
    text-transform: uppercase; letter-spacing: .01em;
    color: var(--kf-text);
  }
  body.kf .home-hero__flash { color: var(--kf-accent); }
  body.kf .home-hero__tag { color: var(--kf-text-variant); }

  body.kf .home-grid { gap: var(--kf-4); }
  body.kf .home-card__body p { color: var(--kf-text-variant); }

  /* Hub cards (DOAR landing) → flat hairline, fără radius/umbră */
  body.kf .hub-card {
    border: var(--kf-border); border-radius: 0;
    background: var(--kf-surface); transition: none;
  }
  body.kf .hub-card:hover { box-shadow: none; border-color: var(--kf-accent-strip); }
  body.kf .hub-strip {
    font-family: var(--kf-font-display); font-weight: 400;
    border-bottom: var(--kf-border); letter-spacing: .08em;
  }

  /* === CLASAMENT `/clasament` — Kinetic Sharp (flat, hairline, mono) ==== */
  /* Selector stil dans = tab-uri (consecvent cu .folder-tab kf) */
  body.kf .role-tabs {
    border-bottom: 1px solid var(--kf-line); gap: 0;
  }
  body.kf .role-tab {
    font-family: var(--kf-font-mono); text-transform: uppercase;
    letter-spacing: .04em; font-size: .72rem; color: var(--kf-text-variant);
    border-bottom: 2px solid transparent; margin-bottom: -1px;
  }
  body.kf .role-tab:hover { color: var(--kf-text); background: var(--kf-surface-2); }
  body.kf .role-tab.active {
    color: var(--kf-text); border-bottom-color: var(--kf-accent-strip);
  }

  /* Panou leaderboard = plat, hairline, 0-radius */
  body.kf .lb-panel {
    border: var(--kf-border); border-radius: 0;
    background: var(--kf-surface); box-shadow: none;
  }
  body.kf .lb-panel__head {
    font-family: var(--kf-font-display); font-weight: 400;
    text-transform: uppercase; letter-spacing: .06em;
    color: var(--kf-text); background: var(--kf-surface-bright);
    border-bottom: 1px solid var(--kf-line);
  }
  body.kf .lb-panel__head .lb-panel__count {
    font-family: var(--kf-font-mono); color: var(--kf-accent);
  }

  /* Tabel ELO — celule hairline, header mono, hover lime (NU volt-galben legacy) */
  body.kf .lb-panel .tier-table td { border-bottom: 1px solid var(--kf-line); }
  body.kf .lb-panel .tier-table tbody tr:nth-child(even) td { background: var(--kf-surface-bright); }
  body.kf .lb-panel .tier-table tbody tr:hover td {
    background: var(--kf-surface-2); color: var(--kf-text);
  }
  body.kf .lb-panel .tier-table tbody tr:hover td:first-child {
    box-shadow: inset 4px 0 0 var(--kf-accent-strip);
  }
  body.kf .tier-table-header th {
    font-family: var(--kf-font-mono); text-transform: uppercase;
    letter-spacing: .04em; font-size: .66rem; color: var(--kf-text-variant);
    border-bottom: 1px solid var(--kf-line);
  }

  body.kf .entity-name {
    font-family: var(--kf-font-display); font-weight: 400;
    letter-spacing: .01em; color: var(--kf-text);
  }
  body.kf .lb-elo {
    font-family: var(--kf-font-display); font-weight: 400; color: var(--kf-accent);
  }
  body.kf .lb-meta { color: var(--kf-text-variant); }
  body.kf .lb-meta__cc { font-family: var(--kf-font-mono); color: var(--kf-text); }
  body.kf .lb-empty { font-family: var(--kf-font-mono); color: var(--kf-text-variant); }

  /* Statistici V–Î / Win% */
  body.kf .stat-pct-value { font-family: var(--kf-font-mono); color: var(--kf-text); }
  body.kf .stat-pct-value.pct-high { color: var(--kf-accent); }
  body.kf .stat-pct-value.pct-low { color: var(--kf-text-variant); }
  /* Δ + formă pe skin kf */
  body.kf .lb-delta { font-family: var(--kf-font-mono); color: var(--kf-text-variant); }
  body.kf .lb-delta--up { color: var(--kf-accent); }
  body.kf .lb-delta--down { color: var(--kf-danger); }
  body.kf .form-pip--w { color: var(--kf-accent); }
  body.kf .form-pip--l { color: var(--kf-danger); }
  body.kf .stat-pct-bar { background: var(--kf-surface-inset); border-radius: 0; }
  body.kf .stat-pct-bar .bar-fill, body.kf .bar-win {
    background: var(--kf-accent-strip); border-radius: 0;
  }

  /* Paginare numere (scoped kf — nu atinge alte pagini legacy cu .filter-pill) */
  body.kf .filter-pill {
    font-family: var(--kf-font-mono); border: 1px solid var(--kf-line);
    border-radius: 0; color: var(--kf-text-variant); background: var(--kf-surface);
  }
  body.kf .filter-pill:hover { background: var(--kf-surface-2); color: var(--kf-text); }
  body.kf .filter-pill.active {
    background: var(--kf-tint); color: var(--kf-on-tint); border-color: var(--kf-primary-solid);
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   KF — overrides COMPONENT peste SSOT-ul de tokeni (blocul global `:root{}` ~2950).
   SSOT skin = tokenii. AICI DOAR ce tokenul NU poate exprima: greutatea Anton (400),
   uppercase pe nume, MONO pe label-uri ce erau sans/display, accente lime punctuale
   (unde legacy folosea alt token), hover-strip, winner consistent. NU rescrie
   border/bg/radius/shadow/font-display — alea vin din token. (Vezi UI_RULES „SSOT skin".)
   ═══════════════════════════════════════════════════════════════════════════ */
@layer components {
  /* Numere/headere mari = Anton (font-family din --font-display via token) → doar greutatea 400 */
  body.kf .sc-jc__nm, body.kf .sc-round__no, body.kf .sc-jc__sc-n, body.kf .sc-jc__sc-sep,
  body.kf .sc__score-n, body.kf .sc__score-sep, body.kf .sc__vs-mid, body.kf .sc-prog__no,
  body.kf .sc__side, body.kf .cat-topbar__cat, body.kf .cat-panel-hdr,
  body.kf .bk-champion__name, body.kf .bk-champion__label { font-weight: 400; }
  body.kf .cat-topbar__cat { letter-spacing: .01em; }
  body.kf .cat-panel-hdr { letter-spacing: .04em; }

  /* MONO pe label-uri/taguri care erau sans/display (semnal kf — nu vine din token) */
  body.kf .cat-tabs .nav-link, body.kf .bk-col-label,
  body.kf .bgc__hdr, body.kf .tbl-th, body.kf .stat-value, body.kf .sc-totals__v,
  body.kf .sc-round__hd, body.kf .sc-totals__lbl, body.kf .sc-prog__lbl, body.kf .sc-jt__jr,
  body.kf .bk-progress__lbl, body.kf .bk-col-count,
  body.kf .bk-current__phase, body.kf .bk-sc-hint,
  body.kf .sc-jc__pen, body.kf .sc-jt__pen, body.kf .sc-jc__eq, body.kf .sc-jt__eq,
  body.kf .bgc__ord, body.kf .bgc__state, body.kf .bgc__crew { font-family: var(--kf-font-mono); }

  /* UPPERCASE scoreboard pe nume (fontul rămâne) */
  body.kf .bk-entry__name, body.kf .sc-jt__jn { text-transform: uppercase; letter-spacing: .02em; }

  /* Tab-uri Calificare|Bracket = underline flat (legacy = tab cu rame/radius literal) */
  body.kf .cat-tabs .nav-link {
    text-transform: uppercase; letter-spacing: .04em;
    border: 0; border-bottom: 2px solid transparent; border-radius: 0; background: transparent;
  }
  body.kf .cat-tabs .nav-link:hover { background: var(--kf-surface-2); }
  body.kf .cat-tabs .nav-link.active { border-bottom-color: var(--kf-accent-strip); }

  /* Accente lime PUNCTUALE (legacy folosea alt token → nu vin din remap) */
  /* Categoria activă = clar evidențiată: bordură accent groasă + bold + bulină lime (e clar pe ce categorie ești) */
  body.kf .cat-strip__item--on {
    background: var(--volt); color: var(--volt-ink);
    border: 2px solid var(--volt-ink); font-weight: 700;
  }
  body.kf .cat-strip__item--on .cat-strip__top { color: var(--volt-ink); opacity: .65; }
  body.kf .cat-strip__item--on::after {
    content: ""; width: .55rem; height: .55rem; border-radius: 50%;
    background: var(--volt-ink); flex-shrink: 0;
    animation: bgc-pulse 1.1s ease-in-out infinite;
  }
  body.kf .bgc__live-dot, body.kf .bgc__dot--active { background: var(--kf-primary-solid); }
  body.kf .sc-totals__v--hi { color: var(--kf-accent); }
  body.kf .sc-prog__cell.is-on { background: var(--kf-primary-solid); border-color: var(--kf-primary-solid); }

  /* Barele de magnitudine din celulele de scor: gri-neutru → lime (is-fav verde / is-tie amber) */
  body.kf .sc-jt__cell { --sc-fill: color-mix(in srgb, var(--kf-accent-strip) 22%, transparent); --sc-edge: var(--kf-primary-solid); }
  body.kf .sc-jt__cell.is-fav { --sc-fill: color-mix(in srgb, var(--kf-success) 20%, transparent); --sc-edge: var(--kf-success); }
  body.kf .sc-jt__cell.is-tie { --sc-fill: color-mix(in srgb, var(--kf-warning) 18%, transparent); --sc-edge: var(--kf-warning); }

  /* WINNER = lime: vine acum din tokenul global --winner-* (legacy :root + remap kf),
     citit de TOATE regulile is-win/winner (bk-entry, sc__side, sc-jc, bracket-entry).
     Zero override per-clasă aici → fără spoturi ratate. */

  /* Hover left-strip (lipsea) */
  body.kf .bk-battle:hover { box-shadow: inset 4px 0 0 var(--kf-accent-strip); }
  body.kf .sc-jt__row:hover { background: var(--kf-surface-2); }

  /* Bara „battle curent": fundalul lime remapat dădea text olive-pe-lime (mohorât, ilizibil).
     → text near-black pe lime = contrast brutalist curat. */
  body.kf .bk-current__phase { color: var(--volt-ink); }

  /* Bara Start: olive-solid avea text olive (on-primary, gândit pt LIME) → olive-pe-olive ilizibil.
     → text alb (on-solid) pe olive-solid = contrast clar. */
  body.kf .bk-current__ctrl .btn-warning, body.kf .bk-current__ctrl .btn-warning:hover {
    background: var(--kf-primary-solid); border-color: var(--kf-primary-solid); color: var(--kf-on-solid);
    text-transform: uppercase; border-radius: 0;
  }
  body.kf .bk-current__ctrl .btn-success, body.kf .bk-current__ctrl .btn-success:hover { text-transform: uppercase; border-radius: 0; }
}
