/* assets/styles/tikom-app.css — Design system Tikom (espace connecté + auth).
 *
 * Appliqué via <body class="tk-app"> dans base.html.twig.
 * N'est PAS chargé sur la landing (qui extend base_clean.html.twig).
 *
 * IMPORTANT — Cascade volontaire : plusieurs des variables CSS définies ici
 * (--tk-bg, --tk-surface, --tk-ink, --tk-line, --tk-hover) portent le même
 * nom que des variables déjà définies par assets/styles/bootstrap-custom.css
 * (qui pose la palette dark/light historique sur :root et :root[data-theme=light]).
 *
 * Comme .tk-app vit sur <body>, plus profond dans l'arbre que :root, ses
 * valeurs gagnent la cascade pour tous les descendants. C'est intentionnel :
 * la V2 (cf. spec 2026-06-02-espace-animateur-v2-design.md) rebrand TOUT
 * le site connecté avec cette palette claire, à l'exception de la landing.
 *
 * Conséquence : le thème sombre historique de bootstrap-custom.css ne
 * s'applique plus aux pages authentifiées. Si on veut conserver un dark
 * mode V2, il faudra ajouter un sélecteur dédié (ex. .tk-app[data-theme=dark]).
 */

@font-face {
    font-family: 'Plus Jakarta Sans';
    src: url("../fonts/Plus_Jakarta_Sans/PlusJakartaSans-VariableFont_wght-DMZAve_.ttf") format('truetype');
    font-weight: 200 800;
    font-style: normal;
    font-display: swap;
}

.tk-app {
    /* Force le rendu clair des contrôles natifs même si data-theme n'est pas posé (défensif, futur dark mode). */
    color-scheme: light;
    --tk-bg: #f3f4f6;
    --tk-surface: #ffffff;
    --tk-ink: #1b1d22;
    --tk-muted: #6a6f78;
    --tk-faint: #9aa0a8;
    --tk-line: #e6e8ec;
    --tk-line-strong: #d6d9df;
    --tk-hover: #f2f4f7;
    /* Accent de l'espace connecté : dérive de --tk-brand (défini sur :root par
       bootstrap-custom.css, hérité ici). Source unique partagée avec --tk-amber*. */
    --tk-accent: var(--tk-brand);
    --tk-accent-ink: #ffffff;
    --tk-accent-2: color-mix(in srgb, var(--tk-brand), #fff 16%);
    --tk-accent-soft: color-mix(in srgb, var(--tk-brand), #fff 90%);
    /* Orange fonctionnel — indépendant de l'accent (resté noir). Réservé au
       palier orange de la barre de score. */
    --tk-orange: #df8a0c;
    --tk-orange-2: #eaa53a;
    /* Bleu plein — état « disponible » des grilles de disponibilités (fiche + espace). */
    --tk-blue: #0071e3;
    --tk-ok: #1f9d63;
    --tk-ok-soft: #e7f5ee;
    --tk-alert: #e23a6b;
    --tk-alert-soft: #fdeaf0;
    /* Rouge agressif — alerte « profil non visible » (sidebar espace animateur). */
    --tk-danger: #dc2626;
    --tk-danger-rgb: 220, 38, 38;
    /* Info — encarts d'aide / d'information (ex. modale « Partager par mail »). */
    --tk-info: #2563eb;
    --tk-info-soft: #e8effd;
    --tk-ring: rgba(var(--tk-brand-rgb), .16);
    --tk-chip-bg: color-mix(in srgb, var(--tk-brand), #fff 88%);
    --tk-chip-ink: color-mix(in srgb, var(--tk-brand), #000 28%);
    --tk-chip-line: color-mix(in srgb, var(--tk-brand), #fff 74%);
    --tk-cell-off: #eef0f3;
    --tk-display: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
    /* Anciennement une pile monospace système. Aucune police mono n'étant
       chargée, le rendu retombait sur la mono de l'OS (Liberation Mono sous
       Linux), incohérent avec le reste du site. On aligne ces libellés sur
       Plus Jakarta Sans : le cachet « étiquette » vient du letter-spacing /
       uppercase, plus de la chasse fixe. */
    --tk-mono: var(--tk-display);
    --tk-shadow-pop: 0 14px 40px rgba(20, 24, 32, .16);
    /* Ombre douce des cards de contenu (panneaux espace marque / animateur). */
    --tk-shadow-card: 0 1px 2px rgba(20, 15, 10, .04), 0 20px 44px -28px rgba(20, 15, 10, .30);

    background: var(--tk-bg);
    color: var(--tk-ink);
    font-family: var(--tk-display);
    font-size: 16px;
    line-height: 1.5;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
}

.tk-app * { box-sizing: border-box; }
.tk-app a { color: var(--tk-accent); text-decoration: none; }
.tk-app a:hover { text-decoration: underline; }
/* Les boutons-liens (<a class="btn">) doivent garder la couleur Bootstrap du bouton, pas l'orange des liens. */
.tk-app a.btn { color: var(--bs-btn-color); }
/* Boutons-liens (<a class="tk-btn …">) : ne pas hériter de la couleur/soulignement des liens. */
.tk-app a.tk-btn { text-decoration: none; }
.tk-app a.tk-btn:hover { text-decoration: none; }
.tk-app a.tk-btn-primary { color: var(--tk-btn-gradient-ink); }
.tk-app a.tk-btn-success { color: #fff; }
.tk-app a.tk-btn-danger { color: #fff; }
.tk-app a.tk-btn-ghost { color: var(--tk-muted); }
.tk-app h1, .tk-app h2, .tk-app h3 { margin: 0; letter-spacing: -0.01em; }
.tk-app input, .tk-app textarea, .tk-app select, .tk-app button { font-family: inherit; }

/* Cards génériques */
.tk-card {
    background: var(--tk-surface);
    border: 1px solid var(--tk-line);
    border-radius: 14px;
    padding: 26px;
}

/* Boutons */
.tk-btn {
    font-family: var(--tk-mono);
    font-size: 11px;
    letter-spacing: .04em;
    text-transform: uppercase;
    border: none;
    border-radius: 8px;
    padding: 8px 14px;
    cursor: pointer;
    font-weight: 600;
    transition: filter .15s, background .15s;
}
.tk-btn-primary {
    background: var(--tk-btn-gradient);
    color: var(--tk-btn-gradient-ink);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.30),
                var(--tk-btn-gradient-shadow);
}
.tk-btn-primary:hover { filter: brightness(1.04); }
.tk-btn-primary:disabled {
    background: var(--tk-hover);
    color: var(--tk-faint);
    box-shadow: none;
    cursor: not-allowed;
    filter: none;
}
.tk-btn-ghost { background: transparent; color: var(--tk-muted); }
.tk-btn-ghost:hover { background: var(--tk-hover); }

/* Inputs */
.tk-input {
    width: 100%;
    background: var(--tk-surface);
    border: 1.5px solid var(--tk-line);
    border-radius: 10px;
    padding: 11px 13px;
    font-size: 15px;
    color: var(--tk-ink);
    outline: none;
    transition: border-color .15s, box-shadow .15s;
}
.tk-input:focus { border-color: var(--tk-accent); box-shadow: 0 0 0 4px var(--tk-ring); }
.tk-input::placeholder { color: var(--tk-faint); }
/* Champs dans les cartes du profil animateur : police réduite + textarea scrollable */
.tk-card .tk-input { font-size: 13px; }
.tk-card textarea.tk-input { max-height: 110px; overflow-y: auto; resize: none; }

/* Labels mono uppercase */
.tk-label {
    font-family: var(--tk-mono);
    font-size: 10.5px;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--tk-faint);
    display: block;
    margin-bottom: 7px;
}

/* Chips */
.tk-chip {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    border-radius: 999px;
    padding: 7px 13px;
    font-size: 13.5px;
    font-weight: 500;
    background: var(--tk-chip-bg);
    color: var(--tk-chip-ink);
    border: 1px solid var(--tk-chip-line);
}

/* Focus accessibility */
.tk-app *:focus-visible {
    outline: 2px solid var(--tk-accent);
    outline-offset: 2px;
}

/* ─── V2 Dashboard layout & cards ─────────────────────────────
 * Styles spécifiques au nouveau dashboard animateur V2 :
 * grille main + sidebar, cartes, identité, toggles, chips,
 * disponibilité, ville, TikTok et sidebar (visibilité/RDV/score).
 */

/* ─── Layout dashboard ───────────────────────────────────────── */
.tk-page { min-height: 100vh; background: var(--tk-bg); }
.tk-shell { max-width: none; margin: 0; padding: 0 40px; }
/* Modificateur : remet le contenu en container centré (page /espace/animateur) */
.tk-shell--contained { max-width: 1280px; margin-inline: auto; }
@media (max-width: 576px) {
    .tk-shell { padding: 0 15px; }
    .tk-topbar-inner { padding: 0 15px; }
}

/* Aperçu TikTok rendu sous le champ « Compte TikTok » du dashboard. */
.tk-tiktok-preview:not(:empty) { margin-top: 14px; }
.tk-tiktok-preview .tk-tiktok-embed { margin: 0; max-width: 100%; min-width: 0; }

/* ─── Stat chiffre (header espace marque) ───────────────────── */
.tk-stat {
    font-size: 36px; font-weight: 800; line-height: 1;
    letter-spacing: -0.03em; color: var(--tk-ink);
}

.tk-topbar {
    background: var(--tk-surface); border-bottom: 1px solid var(--tk-line);
    position: sticky; top: 0; z-index: 20;
}
.tk-topbar-inner {
    max-width: none; margin: 0; padding: 0 40px;
    height: 64px; display: flex; align-items: center; justify-content: space-between;
}
.tk-nav-logout { display: inline; margin: 0; }
.tk-nav form { display: inline; margin: 0; }
.tk-logo { font-weight: 800; font-size: 21px; letter-spacing: -0.02em; color: var(--tk-ink); }
.tk-logo span { color: var(--tk-accent); font-size: 14px; margin-left: 1px; }
.tk-nav { display: flex; align-items: center; gap: 20px; font-size: 14px; color: var(--tk-muted); }
.tk-nav a { color: inherit; text-decoration: none; }
.tk-nav a:hover { color: var(--tk-ink); }
.tk-nav-active { color: var(--tk-accent) !important; font-family: var(--tk-mono); font-size: 12px; letter-spacing: .04em; }

.tk-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 340px;
    gap: 22px; padding: 26px 0 70px;
    align-items: start;
}
.tk-main { display: flex; flex-direction: column; gap: 18px; min-width: 0; }
.tk-aside { display: flex; flex-direction: column; gap: 16px; position: sticky; top: 84px; }

@media (max-width: 880px) {
    .tk-grid { grid-template-columns: 1fr; }
    .tk-aside { position: static; order: -1; }
}

/* ─── Bandeau de pré-ouverture (pleine largeur, haut de page) ─── */
.tk-preopening {
    display: flex; align-items: center; gap: 16px;
    margin-top: 26px; padding: 16px 20px; border-radius: 14px;
    border: 1px solid var(--tk-accent-2);
    background: linear-gradient(135deg, var(--tk-accent-soft), var(--tk-surface));
}
.tk-preopening-emoji { font-size: 30px; line-height: 1; flex-shrink: 0; }
.tk-preopening-title { margin: 0 0 4px; font-weight: 800; font-size: 15px; }
.tk-preopening-text { margin: 0; font-size: 13.5px; color: var(--tk-muted); line-height: 1.5; }

/* ─── Cards ─────────────────────────────────────────────────── */
.tk-card-muted { background: var(--tk-hover); }
.tk-group { padding-bottom: 22px; margin-bottom: 22px; border-bottom: 1px solid var(--tk-line); }
.tk-group:last-child { border-bottom: none; padding-bottom: 0; margin-bottom: 0; }
.tk-group-title { font-size: 16px; font-weight: 700; margin: 0 0 4px; }
.tk-group-hint { font-size: 13px; color: var(--tk-muted); margin: 0 0 14px; max-width: 560px; }

/* ─── Identité ──────────────────────────────────────────────── */
.tk-identity-row { display: flex; align-items: center; gap: 18px; }
.tk-avatar-wrap { position: relative; width: 84px; height: 84px; flex: 0 0 auto; }
/* Avatar cliquable (bouton) : un clic déclenche l'upload de photo. */
.tk-avatar {
    position: relative;
    width: 84px; height: 84px; border-radius: 50%; overflow: hidden;
    display: flex; align-items: center; justify-content: center;
    background: linear-gradient(140deg, #3a3d44, #1b1d22);
    color: #fff; font-weight: 700; font-size: 30px;
    border: 2px solid var(--tk-surface); box-shadow: 0 2px 10px rgba(0, 0, 0, 0.10);
    padding: 0; cursor: pointer; font-family: inherit;
    transition: border-color .15s, box-shadow .15s;
}
.tk-avatar:hover { border-color: var(--tk-accent); box-shadow: 0 2px 14px rgba(0, 0, 0, 0.16); }
.tk-avatar:focus-visible { outline: 2px solid var(--tk-accent); outline-offset: 2px; }
.tk-avatar img, .tk-avatar-img { width: 100%; height: 100%; object-fit: cover; }
/* Placeholder « + » quand aucune photo. */
.tk-avatar-add { font-size: 42px; font-weight: 300; line-height: 1; color: rgba(255, 255, 255, 0.9); }
/* Voile + icône au survol/focus d'une photo existante : signale que c'est cliquable. */
.tk-avatar-overlay {
    position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
    background: rgba(0, 0, 0, 0.42); font-size: 22px; opacity: 0; transition: opacity .15s;
}
.tk-avatar:hover .tk-avatar-overlay,
.tk-avatar:focus-visible .tk-avatar-overlay { opacity: 1; }
.tk-identity-name { font-size: 24px; font-weight: 800; letter-spacing: -0.02em; }
.tk-identity-sub { display: flex; gap: 14px; margin-top: 6px; color: var(--tk-muted); font-size: 13.5px; flex-wrap: wrap; }
.tk-dot { width: 3px; height: 3px; border-radius: 3px; background: var(--tk-faint); align-self: center; }

/* ─── Inline edit ───────────────────────────────────────────── */
/* Affordance : le champ ressemble à un input bordé avec un libellé « Modifier ✎ »
   (rendu en CSS) pour montrer qu'il est éditable. Le clic ouvre le vrai champ. */
.tk-editable {
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 10px 12px;
    border: 1.5px solid var(--tk-line);
    border-radius: 10px;
    background: var(--tk-surface);
    transition: border-color .15s, background .15s;
    /* Anti-débordement : autorise le rétrécissement dans la grille et casse les
       valeurs longues insécables (e-mails) au lieu de pousser la largeur. */
    min-width: 0;
    overflow-wrap: anywhere;
}
.tk-editable:hover { background: var(--tk-hover); border-color: var(--tk-accent); }
.tk-editable [data-placeholder] { color: var(--tk-faint); font-style: italic; }
.tk-editable::after {
    content: "Modifier ✎";
    flex-shrink: 0;
    font-family: var(--tk-mono);
    font-size: 10.5px;
    letter-spacing: .04em;
    color: var(--tk-faint);
    background: var(--tk-hover);
    border-radius: 6px;
    padding: 3px 7px;
}
.tk-editable:hover::after { color: var(--tk-accent); }
/* Bio (multi-ligne) : le hint passe en haut à droite. En affichage (non focus),
   on borne la hauteur et on scrolle comme un textarea pour éviter un bloc géant. */
.tk-editable-block {
    display: block; white-space: pre-wrap; position: relative; padding-right: 88px;
    max-height: 110px; overflow-y: auto;
}
.tk-editable-block::after { position: absolute; top: 8px; right: 8px; }
/* En édition : le vrai champ occupe toute la largeur, on retire la bordure
   factice et le libellé « Modifier ». */
.tk-editable:has(input.tk-input),
.tk-editable:has(textarea.tk-input) { display: block; padding: 0; border: none; background: transparent; }
.tk-editable:has(input.tk-input)::after,
.tk-editable:has(textarea.tk-input)::after { content: none; }
.tk-input-error { border-color: var(--tk-alert); }
.tk-field-error { margin: 6px 0 0; font-family: var(--tk-mono); font-size: 11px; color: var(--tk-alert); }
.tk-siret-status { margin: 6px 0 0; }
.tk-siret-ok { font-family: var(--tk-mono); font-size: 12.5px; color: var(--tk-ok); font-weight: 600; }

/* ─── Toggle card grid ──────────────────────────────────────── */
.tk-toggle-grid { display: grid; gap: 10px; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
.tk-toggle-card {
    padding: 18px 12px; border-radius: 12px; border: 1.5px solid var(--tk-line);
    background: var(--tk-surface); cursor: pointer; display: flex; flex-direction: column;
    align-items: center; gap: 8px; transition: all .14s;
}
.tk-toggle-card:hover { border-color: var(--tk-accent-2); }
.tk-toggle-card.tk-card-on { border-color: var(--tk-accent); background: var(--tk-accent-soft); }
.tk-toggle-emoji { font-size: 28px; line-height: 1; }
.tk-toggle-label { font-size: 13.5px; font-weight: 500; }

/* ─── Rayon de déplacement (conditionnel : Sur site / Les deux) ── */
.tk-travel { margin-top: 14px; padding-top: 14px; border-top: 1px dashed var(--tk-line); display: flex; flex-direction: column; gap: 12px; }
.tk-travel[hidden] { display: none; }
.tk-travel-check { display: flex; align-items: center; gap: 9px; cursor: pointer; font-size: 14px; }
.tk-travel-check input { width: 17px; height: 17px; accent-color: var(--tk-accent); cursor: pointer; }
.tk-travel-radius[hidden] { display: none; }
.tk-input-affix { position: relative; max-width: 220px; }
.tk-input-affix .tk-input { padding-right: 44px; }
.tk-input-suffix {
    position: absolute; right: 13px; top: 50%; transform: translateY(-50%);
    color: var(--tk-faint); font-family: var(--tk-mono); font-size: 13px; pointer-events: none;
}

/* ─── Chips ─────────────────────────────────────────────────── */
.tk-chip-list { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 8px; }
.tk-chip-x { border: none; background: transparent; cursor: pointer; opacity: .55; font-size: 14px; }
.tk-chip-x:hover { opacity: 1; }
.tk-chip-add { background: transparent; border: 1px dashed var(--tk-line); color: var(--tk-muted);
    border-radius: 999px; padding: 7px 13px; cursor: pointer; font-size: 13px; }
.tk-chip-add:hover { border-color: var(--tk-accent); color: var(--tk-accent); }
.tk-pop {
    background: var(--tk-surface); border: 1px solid var(--tk-line); border-radius: 14px;
    box-shadow: var(--tk-shadow-pop); padding: 6px; max-height: 280px; overflow: auto; margin-top: 6px;
}
.tk-pop-opt { display: block; width: 100%; padding: 10px 12px; border-radius: 10px;
    background: transparent; border: none; cursor: pointer; font-size: 14px; text-align: left; }
.tk-pop-opt:hover { background: var(--tk-hover); }
.tk-pop-empty { padding: 10px 12px; color: var(--tk-faint); font-size: 13px; }

/* ─── Availability ──────────────────────────────────────────── */
.tk-availability-grid {
    display: grid; grid-template-columns: 80px repeat(7, 1fr); gap: 6px; align-items: center;
}
.tk-availability-day, .tk-availability-slot {
    text-align: center; font-family: var(--tk-mono); font-size: 10.5px;
    color: var(--tk-muted); text-transform: uppercase;
}
.tk-cell {
    height: 34px; border-radius: 9px; cursor: pointer; user-select: none;
    border: 1px solid var(--tk-line); background: var(--tk-cell-off);
    transition: background .14s, transform .1s;
}
.tk-cell:active { transform: scale(.94); }
.tk-cell.tk-cell-on { background: var(--tk-blue); border-color: var(--tk-blue); }
.tk-availability-counter { margin-top: 12px; font-family: var(--tk-mono); font-size: 11px; color: var(--tk-muted); }

/* Variante lecture seule (fiche admin) : grille non interactive. */
.tk-availability-ro .tk-cell { cursor: default; pointer-events: none; }

/* Scroll horizontal si la grille déborde (petit écran < ~480px). */
.tk-availability-card { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.tk-availability-grid { min-width: 340px; }

/* ─── Personal (privé) ──────────────────────────────────────── */
.tk-personal-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 16px; flex-wrap: wrap; }
.tk-badge-private {
    font-family: var(--tk-mono); font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase;
    color: var(--tk-muted); background: var(--tk-surface); border: 1px solid var(--tk-line);
    border-radius: 999px; padding: 5px 11px;
}
.tk-personal-grid { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 20px; }
@media (max-width: 560px) { .tk-personal-grid { grid-template-columns: minmax(0, 1fr); } }

/* ─── City picker ───────────────────────────────────────────── */
.tk-city-search {
    display: flex; align-items: center; gap: 10px; border: 1.5px solid var(--tk-line);
    border-radius: 10px; padding: 11px 13px; background: var(--tk-surface); margin-bottom: 12px;
}
.tk-city-search:focus-within { border-color: var(--tk-accent); box-shadow: 0 0 0 4px var(--tk-ring); }
.tk-input-naked { border: none; padding: 0; background: transparent; flex: 1; }
.tk-input-naked:focus { box-shadow: none; }
/* Un peu d'air entre l'icône 📍 et le texte saisi (sinon collé à gauche). */
.tk-city-search .tk-input-naked { padding-left: 4px; }
.tk-suggest {
    list-style: none; padding: 6px; margin: 0; background: var(--tk-surface);
    border: 1px solid var(--tk-line); border-radius: 14px; box-shadow: var(--tk-shadow-pop);
    max-height: 280px; overflow: auto;
}
.tk-suggest li { padding: 10px 12px; border-radius: 10px; cursor: pointer; }
.tk-suggest li:hover { background: var(--tk-hover); }
.tk-map { height: 220px; border-radius: 12px; overflow: hidden; border: 1px solid var(--tk-line); }
.tk-attr { font-family: var(--tk-mono); font-size: 9.5px; color: var(--tk-faint); margin-top: 6px; }
.tk-faint { color: var(--tk-faint); }
.tk-hint { font-family: var(--tk-mono); font-size: 10.5px; color: var(--tk-faint); text-transform: uppercase; }

/* ─── TikTok videos ─────────────────────────────────────────── */
/* Barre bordée (icône 🔗 + champ + bouton) pour que l'input se lise comme un champ. */
.tk-tiktok-input {
    display: flex; align-items: center; gap: 8px; margin-bottom: 16px;
    border: 1.5px solid var(--tk-line); border-radius: 10px;
    padding: 6px 6px 6px 13px; background: var(--tk-surface);
}
.tk-tiktok-input:focus-within { border-color: var(--tk-accent); box-shadow: 0 0 0 4px var(--tk-ring); }
.tk-tiktok-input > span { color: var(--tk-faint); }
.tk-tiktok-input .tk-btn { flex-shrink: 0; }
.tk-tiktok-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr)); gap: 14px; }
.tk-tiktok-card { position: relative; border-radius: 12px; overflow: hidden; border: 1px solid var(--tk-line); background: #000; aspect-ratio: 9 / 16; }
.tk-tiktok-card iframe { width: 100%; height: 100%; border: none; }
.tk-tiktok-remove {
    position: absolute; top: 8px; right: 8px; width: 28px; height: 28px; border-radius: 8px;
    border: none; cursor: pointer; background: rgba(20, 20, 24, .62); color: #fff;
}

/* ─── Video preview / empty ─────────────────────────────────── */
.tk-video-preview { border-radius: 12px; overflow: hidden; }
.tk-video-preview video { width: 100%; display: block; }
.tk-video-empty {
    border: 1.5px dashed var(--tk-line); border-radius: 12px; padding: 26px;
    text-align: center; color: var(--tk-muted); font-size: 13.5px;
}

/* ─── Carte identité : lien « Voir mon profil » (aperçu public) ──── */
/* Lien discret en haut à droite de la carte. Sélecteur à deux classes pour
   battre `.tk-app a` (sinon la couleur d'accent l'emporterait). */
.tk-identity-preview {
    margin-left: auto; align-self: flex-start;
    display: inline-flex; align-items: center; gap: 7px;
    font-size: 13px; font-weight: 600; white-space: nowrap;
}
.tk-app a.tk-identity-preview { color: var(--tk-muted); }
.tk-app a.tk-identity-preview:hover { color: var(--tk-ink); }
.tk-identity-preview i { font-size: 15px; }

/* ─── Identité : layout mobile ──────────────────────────────── */
@media (max-width: 640px) {
    .tk-identity-row {
        flex-direction: column;
        align-items: center;
        text-align: center;
        gap: 10px;
    }
    .tk-identity-preview {
        order: -1;
        margin-left: 0;
        align-self: center;
    }
    .tk-identity-meta { text-align: center; }
    .tk-identity-sub { justify-content: center; }
}

/* ─── Sidebar : visibilité ──────────────────────────────────── */
/* État « non visible » : rouge agressif (bordure épaisse + halo pulsé) pour
   pousser à compléter le profil. La variante .is-on (vert) reste prête pour un
   éventuel signal positif « profil visible ». */
.tk-visibility { border-radius: 14px; overflow: hidden; border: 2px solid var(--tk-danger); box-shadow: 0 0 0 4px rgba(var(--tk-danger-rgb), .12); }
.tk-visibility.is-on { border-color: var(--tk-ok); box-shadow: none; }
.tk-visibility-head { display: flex; align-items: center; gap: 8px; background: var(--tk-danger); color: #fff; padding: 14px 18px; font-weight: 800; font-size: 14px; letter-spacing: .01em; }
.tk-visibility.is-on .tk-visibility-head { background: var(--tk-ok); font-weight: 700; }
.tk-visibility-body { background: var(--tk-surface); padding: 13px 18px; font-size: 13px; color: var(--tk-muted); }
@media (prefers-reduced-motion: no-preference) {
    .tk-visibility:not(.is-on) { animation: tk-visibility-pulse 1.8s ease-in-out infinite; }
    @keyframes tk-visibility-pulse {
        0%, 100% { box-shadow: 0 0 0 0 rgba(var(--tk-danger-rgb), .30); }
        50%      { box-shadow: 0 0 0 7px rgba(var(--tk-danger-rgb), 0); }
    }
}

/* ─── Sidebar : RDV ─────────────────────────────────────────── */
.tk-rdv.is-unlocked { border-color: var(--tk-ok); background: var(--tk-ok-soft); }
.tk-rdv header { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; font-weight: 700; font-size: 14.5px; }
.tk-rdv-hint { font-size: 13.5px; color: var(--tk-muted); margin: 0 0 14px; }
.tk-rdv .tk-btn { width: 100%; padding: 13px; border-radius: 10px; font-size: 14px; }
/* Mobile : barre inline compacte — icône + titre | bouton sur une ligne. */
@media (max-width: 880px) {
    .tk-rdv {
        position: fixed; left: 0; right: 0; bottom: 0; z-index: 30;
        margin: 0; border-radius: 14px 14px 0 0;
        box-shadow: 0 -6px 24px rgba(0, 0, 0, .12);
        display: flex; align-items: center; gap: 12px; padding: 12px 16px;
    }
    .tk-rdv header { display: none; }
    .tk-rdv-hint { display: none; }
    .tk-rdv .tk-btn { width: 100%; padding: 10px 14px; font-size: 13px; }
    .tk-page { padding-bottom: 72px; }
}

/* ─── Sidebar : score ───────────────────────────────────────── */
.tk-score-head { display: flex; justify-content: space-between; margin-bottom: 12px; font-weight: 700; }
.tk-score-pct { font-family: var(--tk-mono); }
.tk-score-bar { height: 8px; border-radius: 5px; background: var(--tk-line); overflow: hidden; margin-bottom: 16px; }
.tk-score-bar > div { height: 100%; transition: width .9s cubic-bezier(.2,.8,.2,1); }
.tk-score-list { list-style: none; padding: 0; margin: 0; }
.tk-score-list li { display: flex; align-items: center; gap: 10px; padding: 9px 0; border-top: 1px solid var(--tk-line); font-size: 14px; }
.tk-score-list li:first-child { border-top: none; }
.tk-score-list li.is-done .tk-score-label { color: var(--tk-faint); text-decoration: line-through; }
.tk-score-tick { width: 18px; height: 18px; border-radius: 50%; border: 1px solid var(--tk-line); display: inline-flex; align-items: center; justify-content: center; font-size: 11px; }
.tk-score-list li.is-done .tk-score-tick { background: var(--tk-ok); color: #fff; border-color: var(--tk-ok); }
.tk-score-summary {
    list-style: none; cursor: pointer; font-size: 13.5px; font-weight: 600;
    color: var(--tk-accent); padding: 6px 0;
}
.tk-score-summary::-webkit-details-marker { display: none; }
.tk-score-summary::after { content: " ▾"; }
.tk-score-details[open] .tk-score-summary::after { content: " ▴"; }
@media (min-width: 881px) {
    .tk-score-summary { display: none; }
}

/* ─── Footer V2 ─────────────────────────────────────────────── */
.tk-footer-v2 { border-top: 1px solid var(--tk-line); background: var(--tk-surface); margin-top: 40px; }
.tk-footer-v2 .tk-footer-brand { font-family: var(--tk-mono); font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--tk-muted); }

/* ─── Logo topbar (image) ───────────────────────────────────── */
.tk-logo-img { height: 40px; width: auto; display: block; }
@media (max-width: 640px) { .tk-logo-img { height: 30px; } }

/* ─── Bouton succès (vert) ──────────────────────────────────── */
.tk-btn-success { background: var(--tk-ok); color: #fff; }
.tk-btn-success:hover { filter: brightness(1.06); }

/* ─── Bouton danger (rouge) + variante petite (listes admin) ─── */
.tk-btn-danger { background: var(--tk-danger); color: #fff; }
.tk-btn-danger:hover { filter: brightness(1.06); }
.tk-btn-sm { padding: 6px 10px; font-size: 11px; }

/* ─── Badges de statut affiliation (campagnes) ──────────────────
 * Correspondance : CampaignStatus::cssClass() → .tk-aff-status-{value}
 * - live     = vert (en cours)
 * - upcoming = orange/ambre (à venir)
 * - past     = gris (passée)
 */
.tk-aff-status {
    display: inline-flex;
    align-items: center;
    border-radius: 999px;
    padding: 3px 10px;
    font-size: 11px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
}
.tk-aff-status-live     { background: var(--tk-ok-soft);   color: var(--tk-success); }
.tk-aff-status-upcoming { background: #fff3e0;              color: var(--tk-warning); }
.tk-aff-status-past     { background: var(--tk-hover);      color: var(--tk-muted); }

/* ─── Lignes de collection produits (formulaire campagne) ──────── */
.tk-aff-collrow { align-items: flex-end; flex-wrap: wrap; }

/* ─── Sidebar : visibilité masquée quand vide (profil à 100 %) ── */
#tk-visibility:empty { display: none; }

/* ─── Légende animateurs du planning (filtre cliquable) ─────── */
.tk-cal-legend {
    display: flex;
    flex-wrap: nowrap;
    gap: 8px;
    align-items: center;
    margin-bottom: 12px;
    min-height: 34px;          /* espace reserve : le calendrier ne saute plus */
    overflow-x: auto;          /* beaucoup de marques -> scroll horizontal */
    overflow-y: hidden;
    scrollbar-width: thin;
}
.tk-cal-legend-empty { color: var(--tk-ink-mute); font-size: 0.85rem; align-self: center; }
.tk-cal-legend-chip {
    flex: 0 0 auto;            /* pas de compression : les chips defilent */
    display: inline-flex; align-items: center; gap: 8px;
    padding: 7px 14px; border: 1.5px solid var(--tk-line); border-radius: 999px;
    background: var(--tk-surface); color: var(--tk-ink);
    font-size: 14px; font-weight: 600; line-height: 1.2; cursor: pointer;
    transition: opacity .12s ease, border-color .12s ease;
    white-space: nowrap;
}
.tk-cal-legend-chip:hover { border-color: var(--tk-line-strong); }
.tk-cal-legend-chip.is-off { opacity: .4; }
.tk-cal-legend-chip.is-off .tk-cal-legend-dot { background: var(--tk-faint) !important; }
.tk-cal-legend-dot { width: 12px; height: 12px; border-radius: 4px; flex: 0 0 auto; }

/* ─── FullCalendar : boutons lisibles ────────────────────────── */
/* Sélecteur COMPOSÉ (sans espace) : .fc est sur #brand-calendar lui-même.
   On surcharge les variables CSS FC à la source pour couvrir tous les états. */
#brand-calendar.fc {
    --fc-button-bg-color:          var(--tk-ink);
    --fc-button-border-color:      var(--tk-ink);
    --fc-button-text-color:        #fff;
    --fc-button-hover-bg-color:    #000;
    --fc-button-hover-border-color:#000;
    --fc-button-active-bg-color:   #000;
    --fc-button-active-border-color:#000;
    --fc-button-active-text-color: #fff;
}

/* ─── Sélecteur produits dans la modale de création de live ─── */
.tk-prod-picker { display: flex; flex-direction: column; gap: 4px; }
.tk-prod-pick-item {
    display: flex; align-items: center; gap: 10px;
    padding: 8px 12px; border: 1px solid var(--tk-line); border-radius: 9px;
    cursor: pointer; font-size: 13.5px; user-select: none;
    transition: background .1s ease, border-color .1s ease;
}
.tk-prod-pick-item:hover { background: var(--tk-hover); }
.tk-prod-pick-item:has(.tk-prod-pick-cb:checked) {
    background: color-mix(in srgb, var(--tk-accent) 8%, transparent);
    border-color: var(--tk-accent);
}
.tk-prod-pick-cb { flex: 0 0 auto; width: 16px; height: 16px; cursor: pointer; accent-color: var(--tk-accent); }
.tk-prod-pick-name { flex: 1; font-weight: 600; color: var(--tk-ink); }
.tk-prod-pick-price { font-size: 12.5px; color: var(--tk-muted); font-variant-numeric: tabular-nums; }

/* ─── Modal V2 (dialog) ─────────────────────────────────────── */
.tk-dlg {
    border: none; border-radius: 16px; padding: 0; width: 100%;
    max-width: min(92vw, 460px); background: var(--tk-surface); color: var(--tk-ink);
    box-shadow: var(--tk-shadow-pop);
}
/* Garde indispensable : une <dialog> fermée doit rester masquée. Sans cela,
   la règle auteur .tk-dlg-wide { display:flex } écrase le display:none du UA
   (dialog:not([open])) et la modale reste affichée en permanence. */
dialog.tk-dlg:not([open]) { display: none; }
.tk-dlg-wide { max-width: min(96vw, 520px); display: flex; flex-direction: column; max-height: 92vh; }
.tk-dlg-wide .tk-dlg-body { overflow: auto; flex: 1 1 auto; min-height: 0; }
.tk-dlg::backdrop { background: rgba(12, 14, 18, .5); backdrop-filter: blur(3px); }
.tk-dlg-hd { display: flex; align-items: center; justify-content: space-between; padding: 16px 20px; border-bottom: 1px solid var(--tk-line); }
.tk-dlg-ft { display: flex; justify-content: flex-end; gap: 10px; padding: 14px 20px; border-top: 1px solid var(--tk-line); }
.tk-dlg-title { font-size: 16px; font-weight: 700; margin: 0; }
.tk-dlg-close { background: none; border: none; cursor: pointer; font-size: 18px; line-height: 1; color: var(--tk-muted); padding: 4px 9px; border-radius: 8px; }
.tk-dlg-close:hover { background: var(--tk-hover); color: var(--tk-ink); }
.tk-dlg-body { padding: 20px; }
.tk-dlg-intro { font-size: 13.5px; color: var(--tk-muted); margin: 0 0 16px; }
.tk-dlg-note { font-size: 12.5px; color: var(--tk-accent); font-style: italic; margin: 0 0 12px; }
.tk-dlg-btn { width: 100%; padding: 13px; border-radius: 10px; font-size: 14px; }
/* Modale vidéo : message d'erreur, aperçu de la vidéo existante, sélecteur de fichier. */
.tk-dlg-error { font-size: 13px; color: var(--tk-danger); margin: 0 0 16px; padding: 10px 12px; border: 1px solid var(--tk-danger); border-radius: 9px; }
.tk-dlg-current { margin-bottom: 16px; }
.tk-dlg-current-video { width: 100%; aspect-ratio: 16 / 9; display: block; border-radius: 10px; background: #000; }
.tk-dlg-current-label { display: block; margin-top: 8px; font-size: 12.5px; color: var(--tk-muted); }
.tk-dlg-hint { display: block; font-size: 12.5px; color: var(--tk-muted); margin: 0 0 10px; }
.tk-dlg-file { width: 100%; font-size: 13px; color: var(--tk-muted); padding: 12px; border: 1px dashed var(--tk-line); border-radius: 10px; background: var(--tk-hover); cursor: pointer; }
.tk-dlg-file::file-selector-button { font-family: var(--tk-mono); font-size: 11px; letter-spacing: .04em; text-transform: uppercase; font-weight: 600; margin-right: 12px; padding: 8px 14px; border: 1px solid var(--tk-line); border-radius: 8px; background: var(--tk-surface); color: var(--tk-ink); cursor: pointer; }
.tk-dlg-file::file-selector-button:hover { background: var(--tk-hover); }
.tk-dlg-progress { width: 100%; height: 8px; margin: 0 0 14px; border: 0; border-radius: 6px; overflow: hidden; appearance: none; -webkit-appearance: none; }
.tk-dlg-progress::-webkit-progress-bar { background: var(--tk-cell-off); border-radius: 6px; }
.tk-dlg-progress::-webkit-progress-value { background: var(--tk-accent); border-radius: 6px; transition: width .15s; }
.tk-dlg-progress::-moz-progress-bar { background: var(--tk-accent); border-radius: 6px; }
.tk-calendly { min-width: 300px; height: 700px; min-height: 700px; }
@media (max-width: 680px) {
    .tk-dlg-wide { width: 100vw; max-width: 100vw; height: 100dvh; max-height: 100dvh; border-radius: 0; }
    /* Corps en colonne flex : le calendrier Calendly remplit la hauteur restante
       sous l'intro. L'iframe Calendly est en height:100% → il lui faut un parent à
       hauteur DÉFINIE (fournie ici par le flex). height:auto + min-height seul ne
       résout pas le pourcentage → l'iframe s'effondrait (calendrier minuscule).
       min-width:0 évite un débordement horizontal sur les petits écrans. */
    .tk-dlg-wide .tk-dlg-body { display: flex; flex-direction: column; }
    .tk-calendly { flex: 1 1 auto; min-height: 0; min-width: 0; height: auto; }
}

/* ─── Cibles tactiles : CTA principaux ≥ 44px sur mobile ───────── */
/* .btn-primary (Bootstrap) et .tk-btn-primary (système custom) coexistent sur les mêmes pages. */
@media (max-width: 640px) {
    .btn-primary,
    .tk-btn-primary { min-height: 44px; }
    .tk-btn-sm, .tk-btn-ghost, .tk-btn-danger { min-height: 44px; display: inline-flex; align-items: center; }
}

/* ─── Dashboard admin (KPI) ───────────────────────────────────── */
.tk-kpi-label { font-size: 13.5px; font-weight: 600; color: var(--tk-muted); }
.tk-kpi-value { font-size: 30px; font-weight: 800; color: var(--tk-ink); line-height: 1.1; margin-top: 2px; }
.tk-kpi-unit  { font-size: 14px; font-weight: 600; color: var(--tk-faint); }
.tk-kpi-sub   { font-size: 12.5px; font-weight: 600; color: var(--tk-faint); }
.tk-kpi-accent { box-shadow: 0 0 0 2px var(--tk-ring); }
.tk-kpi-accent .tk-kpi-label { color: var(--tk-chip-ink); }
.tk-onboard-row { padding: 10px 12px; background: var(--tk-hover); border-radius: 9px; }
/* --tk-ink-dim hérite de bootstrap-custom.css (:root[data-theme=light]) — pas redéfini dans .tk-app. */
.tk-sector-line { font-size: 13px; font-weight: 600; color: var(--tk-ink-dim); }
.tk-link-accent { font-size: 13px; font-weight: 600; color: var(--tk-accent); text-decoration: none; }
.tk-link-accent:hover { text-decoration: underline; }

/* ─── Catalogue V2 : layout 3 colonnes sidebar/grille/carte ────── */
.tk-catalog-layout { display: grid; grid-template-columns: minmax(210px,1fr) minmax(0,3fr) minmax(0,2fr); gap: 20px; align-items: start; }
/* Colonne sidebar (gauche) */
.tk-catalog-side { background: var(--tk-surface); border: 1px solid var(--tk-line); border-radius: 16px; padding: 18px; position: sticky; top: 24px; max-height: calc(100vh - 48px); overflow: auto; }
/* Barre de recherche dans la sidebar */
.tk-side-search { display: flex; align-items: center; gap: 9px; background: var(--tk-hover); border-radius: 10px; padding: 10px 12px; }
.tk-side-search input { border: 0; background: none; outline: none; font: inherit; font-size: 13.5px; width: 100%; color: var(--tk-ink); }
.tk-side-search i { color: var(--tk-muted); }
/* Indicateur « filtrage automatique » */
.tk-side-auto { display: flex; align-items: center; gap: 7px; font-size: 11px; font-weight: 600; color: var(--tk-ok); margin: 10px 2px 2px; }
.tk-side-auto span { width: 6px; height: 6px; border-radius: 50%; background: var(--tk-ok); box-shadow: 0 0 0 3px var(--tk-ok-soft); }
/* Groupes de filtres */
.tk-fgroup { border-top: 1px solid var(--tk-line); padding: 14px 0 4px; }
.tk-flabel { font-size: 11px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--tk-faint); margin-bottom: 9px; }
/* Option case à cocher */
.tk-opt { display: flex; align-items: center; gap: 10px; padding: 5px 0; cursor: pointer; font-size: 13.5px; color: var(--tk-ink); }
.tk-opt.is-on { font-weight: 600; }
.tk-opt input { width: 16px; height: 16px; accent-color: var(--tk-ink); flex: none; cursor: pointer; }
/* Lien « Tout effacer » */
.tk-side-clear { display: inline-block; margin-top: 14px; font-size: 12.5px; font-weight: 600; color: var(--tk-muted); text-decoration: underline; text-underline-offset: 3px; }
/* Colonne carte (droite) */
.tk-catalog-map-col { position: sticky; top: 24px; }
.tk-catalog-map-wrap { position: relative; border: 1px solid var(--tk-line); border-radius: 14px; overflow: hidden; }
.tk-catalog-map { height: 72vh; min-height: 460px; }
/* Overlay « Autour de » sur la carte.
   z-index élevé : Leaflet empile ses panes/contrôles jusqu'à 1000, l'overlay doit passer au-dessus. */
.tk-map-search { position: absolute; z-index: 1100; top: 12px; left: 12px; right: 12px; display: flex; align-items: stretch; gap: 8px; }
.tk-map-near { flex: 1; min-width: 0; position: relative; display: flex; align-items: center; gap: 8px; background: var(--tk-surface); border: 1px solid var(--tk-line); border-radius: 10px; padding: 9px 12px; box-shadow: 0 2px 8px rgba(0,0,0,.08); }
.tk-map-near i { color: var(--tk-muted); flex: none; }
.tk-map-near input { border: 0; background: none; outline: none; font: inherit; font-size: 13px; width: 100%; }
.tk-map-radius { flex: none; border: 1px solid var(--tk-line); border-radius: 10px; padding: 0 10px; font: inherit; font-size: 12.5px; font-weight: 600; color: var(--tk-ink); background: var(--tk-surface); box-shadow: 0 2px 8px rgba(0,0,0,.08); cursor: pointer; }
/* Pin de carte */
.tk-map-pin span {
    display: block; width: 16px; height: 16px; border-radius: 50%;
    background: var(--tk-accent); border: 2px solid #fff; box-shadow: 0 1px 4px rgba(0, 0, 0, .4);
}
/* ─── Mobile : 1 colonne, sidebar non-sticky, carte visible empilée ─ */
@media (max-width: 991.98px) {
    .tk-catalog-layout { grid-template-columns: 1fr; }
    .tk-catalog-side { position: static; max-height: none; }
    .tk-catalog-map-col { position: static; }
    .tk-catalog-map-wrap { display: block; }
    .tk-catalog-map { height: 50vh; }
}

/* Filtres actifs (chips) — rangée à défilement horizontal sous le compteur */
.tk-active-filters {
    display: flex; flex-wrap: nowrap; align-items: center; gap: 8px;
    overflow-x: auto; overscroll-behavior-x: contain;
    margin-bottom: 16px; padding-bottom: 4px;
    scrollbar-width: thin; -webkit-overflow-scrolling: touch;
}
.tk-chip {
    flex: none; display: inline-flex; align-items: center; gap: 6px;
    background: var(--tk-hover); border: 1px solid var(--tk-line);
    border-radius: 999px; padding: 5px 6px 5px 12px;
    font-size: 12.5px; font-weight: 600; color: var(--tk-ink);
    white-space: nowrap; cursor: pointer; transition: border-color .15s, background .15s;
}
.tk-chip:hover { border-color: #c9ccd2; background: var(--tk-surface); }
.tk-chip i {
    font-size: 14px; line-height: 1; color: var(--tk-muted);
    display: inline-flex; align-items: center; justify-content: center;
    width: 18px; height: 18px; border-radius: 50%; transition: background .15s, color .15s;
}
.tk-chip:hover i { color: var(--tk-ink); background: rgba(0, 0, 0, .06); }
.tk-chip-clear {
    flex: none; background: none; border: 0; padding: 5px 8px;
    font-size: 12.5px; font-weight: 600; color: var(--tk-muted);
    text-decoration: underline; text-underline-offset: 3px; white-space: nowrap; cursor: pointer;
}
.tk-chip-clear:hover { color: var(--tk-ink); }

/* Carte catalogue — format C (avatar carré + entête + infos empilées) */
.tk-catalog-card { background: var(--tk-surface); border: 1px solid var(--tk-line); border-radius: 16px; padding: 15px; position: relative; cursor: pointer; transition: border-color .18s, box-shadow .18s; display: flex; gap: 14px; align-items: stretch; }
/* Colonne texte : moitié gauche de la carte. min-width:0 → l'ellipsis des
   langues/ville fonctionne quand la vidéo occupe l'autre moitié. */
.tk-catalog-main { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; }
/* Vidéo de présentation : colonne droite de la carte à largeur FIXE en 9:16.
   preload=metadata → la première image (fast preview) se charge vite grâce au
   faststart sans télécharger toute la vidéo. position/z-index au-dessus du
   stretched-link du nom → contrôles cliquables.
   flex:none + width fixe → la colonne texte prend tout l'espace restant ;
   aspect-ratio:9/16 → toujours portrait, jamais étiré à la hauteur de la carte. */
.tk-catalog-video { flex: none; width: 180px; aspect-ratio: 2 / 3; align-self: flex-start; position: relative; z-index: 2; border-radius: 12px; overflow: hidden; background: #0d0e10; }
.tk-catalog-video video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.tk-catalog-card:hover { border-color: #d6d9df; box-shadow: 0 6px 20px rgba(20,24,32,.07); }
.tk-catalog-card:focus-within { outline: 2px solid var(--tk-accent); outline-offset: 2px; }
.tk-catalog-head { display: flex; gap: 13px; align-items: flex-start; margin-bottom: 13px; }
.tk-catalog-avatar { width: 64px; height: 64px; flex: none; border-radius: 15px; overflow: hidden; background: var(--tk-hover); }
.tk-catalog-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Placeholder partagé avec la fiche (qui surcharge taille/rayon en inline). */
.tk-catalog-photo-placeholder { width: 100%; height: 100%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; font-weight: 800; color: var(--tk-faint); }
.tk-catalog-headtext { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 7px; }
.tk-catalog-name { display: flex; align-items: center; gap: 6px; margin: 0; font-size: 16px; font-weight: 700; letter-spacing: -.01em; color: var(--tk-ink); line-height: 1.2; }
.tk-catalog-name a { color: inherit; text-decoration: none; }
.tk-catalog-status { align-self: flex-start; font-size: 11px; font-weight: 700; letter-spacing: .02em; text-transform: uppercase; padding: 3px 9px; border-radius: 999px; background: var(--tk-grey-bg, #eef0f3); color: var(--tk-muted); }
.tk-status-selected { background: var(--tk-ok-soft); color: var(--tk-ok); }
.tk-status-contacted { background: #fbf2e1; color: #c47d12; }
.tk-status-new { background: #e8effd; color: #2563eb; }
.tk-status-rejected { background: #fdeaf0; color: var(--tk-alert); }
.tk-catalog-meta-list { list-style: none; margin: 0; padding: 0; font-size: 13px; color: var(--tk-ink-dim); display: flex; flex-direction: column; gap: 6px; }
.tk-catalog-meta-list li { display: flex; align-items: center; gap: 9px; min-width: 0; }
.tk-catalog-meta-list li i { width: 15px; flex: none; text-align: center; color: var(--tk-muted); font-size: 13px; }
.tk-catalog-meta-list li > span { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tk-meta-empty { color: var(--tk-faint); }

/* Facettes de statut (réutilise les teintes des anciens statuts) */
.tk-facet-inscrit { background: #e8effd; color: #2563eb; }
.tk-facet-to_onboard { background: #efe9fd; color: #6d28d9; }
.tk-facet-contacted { background: #fbf2e1; color: #c47d12; }
.tk-facet-validated { background: var(--tk-ok-soft); color: var(--tk-ok); }
.tk-facet-rejected { background: #fdeaf0; color: var(--tk-alert); }

/* Barre de complétion sur la carte (collée en bas de la colonne gauche) */
.tk-catalog-completion { margin-top: auto; padding-top: 12px; }
.tk-catalog-completion-head { display: flex; justify-content: space-between; align-items: baseline; font-size: 12px; color: var(--tk-ink-dim); margin-bottom: 5px; }
.tk-catalog-completion-pct { font-weight: 600; color: var(--tk-ink); }
.tk-catalog-completion-bar { height: 6px; border-radius: 99px; background: var(--tk-hover); overflow: hidden; }
.tk-catalog-completion-bar > div { height: 100%; border-radius: 99px; transition: width .3s ease; }

/* Hauteur de carte uniforme : la vidéo (stretch) et les cartes sans vidéo s'alignent.
   Valeur à ajuster visuellement (head + 6 lignes meta + barre de complétion). */
.tk-catalog-card { min-height: 224px; }

/* Vidéo « gif » muette : tout le bloc vidéo laisse passer le clic vers le stretched-link
   (ouverture fiche). pointer-events sur le wrapper — pas seulement sur <video> — sinon son
   z-index:2 intercepte le clic au-dessus du stretched-link::after (z-index:1). */
.tk-catalog-video { pointer-events: none; }

/* Mobile (≤480px) : la carte passe en colonne, la vidéo repasse pleine largeur
   SOUS le texte. Sinon la vidéo fixe (180px) + z-index:2 écrase la colonne méta
   (nowrap) et se superpose au texte sur les petits écrans (régression du partage). */
@media (max-width: 480px) {
    .tk-catalog-card { flex-direction: column; align-items: stretch; }
    .tk-catalog-video { width: 100%; aspect-ratio: 16 / 10; align-self: stretch; }
}

/* ─── Pills de filtre (onglet Propositions : En attente / Favoris / Refusés) ─── */
.tk-pfilter { display: inline-flex; align-items: center; gap: 8px; padding: 8px 14px; border-radius: 999px; background: var(--tk-surface); border: 1px solid var(--tk-line-strong); font-size: 13px; font-weight: 600; color: var(--tk-ink); cursor: pointer; transition: background .15s, color .15s, border-color .15s; }
.tk-pfilter:hover { border-color: var(--tk-ink-mute); }
.tk-pfilter.is-active { background: var(--tk-ink); border-color: var(--tk-ink); color: #fff; }
.tk-pfilter-cnt { display: inline-flex; align-items: center; justify-content: center; min-width: 20px; height: 20px; padding: 0 6px; border-radius: 999px; background: var(--tk-hover); color: var(--tk-muted); font-size: 11.5px; font-weight: 700; }
.tk-pfilter.is-active .tk-pfilter-cnt { background: rgba(255, 255, 255, .22); color: #fff; }
/* Cœur favori en surcouche de la card proposition (le <form> parent porte le
   position:absolute haut-droite ; ce bouton n'a que l'apparence circulaire). */
.tk-fav-btn { display: inline-flex; align-items: center; justify-content: center; width: 34px; height: 34px; border-radius: 50%; background: var(--tk-surface); border: 1px solid var(--tk-line-strong); color: var(--tk-muted); cursor: pointer; box-shadow: 0 2px 6px rgba(0, 0, 0, .12); transition: color .15s, border-color .15s; }
.tk-fav-btn:hover { color: #b91c1c; border-color: #fca5a5; }
.tk-fav-btn.is-on { color: #dc2626; border-color: #fca5a5; background: #fef2f2; }
/* Grille des propositions : auto-fill avec une largeur minimale de card (~380px).
   Le grid réduit le nombre de colonnes automatiquement plutôt que de comprimer la card
   en dessous du seuil lisible (180px vidéo + 14px gap interne + ~160px texte + 30px padding). */
.tk-prop-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(380px, 100%), 1fr)); gap: 18px; }

/* ─── Onglet « Animateurs » (espace marque) : cards orientées stats ──────────
   Pas de vidéo/gif : on met en avant la performance (Lives / Heures / GMV). */
.tk-team-count { display: inline-flex; align-items: center; justify-content: center; min-width: 24px; height: 24px; padding: 0 7px; border-radius: 999px; background: var(--tk-ink); color: #fff; font-size: 12px; font-weight: 800; }
.tk-team-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 18px; }
.tk-host-card { display: flex; flex-direction: column; gap: 16px; background: var(--tk-surface); border: 1px solid var(--tk-line); border-radius: 16px; padding: 20px; box-shadow: var(--tk-shadow-card); }
.tk-host-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; padding: 14px 0; border-top: 1px solid var(--tk-line); border-bottom: 1px solid var(--tk-line); }
.tk-host-stat { text-align: center; }
.tk-host-stat--mid { border-left: 1px solid var(--tk-line); border-right: 1px solid var(--tk-line); }
.tk-host-stat-val { font-size: 19px; font-weight: 800; color: var(--tk-ink); font-variant-numeric: tabular-nums; }
.tk-host-stat-unit { font-size: 13px; font-weight: 800; margin-left: 1px; }
.tk-host-stat-lbl { margin-top: 2px; font-size: 10.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--tk-faint); }

/* ─── Onglet Produits (espace marque) : catalogue produits, cf. maquette ──────── */
.tk-prod-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; flex-wrap: wrap; margin-bottom: 20px; }
.tk-prod-search { position: relative; flex: 1; min-width: 240px; max-width: 420px; }
.tk-prod-search i { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); color: var(--tk-faint); font-size: 14px; pointer-events: none; }
.tk-prod-search input { width: 100%; border: 1px solid var(--tk-line); background: var(--tk-surface); border-radius: 11px; padding: 11px 14px 11px 40px; font-family: inherit; font-size: 14px; color: var(--tk-ink); outline: none; }
.tk-prod-search input:focus { border-color: var(--tk-line-strong); }
.tk-prod-toolbar-right { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.tk-prod-count { font-size: 13px; color: var(--tk-muted); }
.tk-prod-count b { color: var(--tk-ink); }

.tk-prod-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(290px, 1fr)); gap: 18px; grid-auto-rows: 1fr; }
.tk-prod-card { display: flex; flex-direction: column; height: 100%; background: var(--tk-surface); border: 1px solid var(--tk-line); border-radius: 16px; overflow: hidden; box-shadow: var(--tk-shadow-card); }

.tk-prod-photo { position: relative; height: 148px; flex: none; display: flex; align-items: center; justify-content: center; background: linear-gradient(135deg, #f3f1ee, #e7e3dd); }
.tk-prod-photo > i { font-size: 30px; color: #c3bdb4; }
/* contain (et non cover) : la photo produit reste visible en entier, quitte à
   réduire sa taille et laisser un liseré du fond autour. padding + border-box
   pour ne pas coller aux bords. */
.tk-prod-photo img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; padding: 12px; box-sizing: border-box; }
.tk-prod-photo-label { position: absolute; left: 12px; bottom: 12px; font-size: 10px; letter-spacing: .06em; text-transform: uppercase; color: #a99f92; font-weight: 700; }
.tk-prod-price { position: absolute; right: 12px; top: 12px; background: var(--tk-ink); color: #fff; font-size: 14px; font-weight: 800; padding: 5px 11px; border-radius: 999px; font-variant-numeric: tabular-nums; }
.tk-prod-del { position: absolute; left: 12px; top: 12px; width: 30px; height: 30px; flex: none; border-radius: 8px; border: 1px solid var(--tk-line); background: var(--tk-surface); color: var(--tk-danger); cursor: pointer; display: inline-flex; align-items: center; justify-content: center; font-size: 13px; }
.tk-prod-del.is-locked { color: var(--tk-faint); cursor: default; }

.tk-prod-body { display: flex; flex-direction: column; gap: 14px; flex: 1; padding: 18px; }
.tk-prod-name { margin: 0; font-size: 16px; font-weight: 800; letter-spacing: -.01em; color: var(--tk-ink); }
.tk-prod-section-lbl { font-size: 10.5px; letter-spacing: .1em; text-transform: uppercase; color: var(--tk-faint); font-weight: 700; margin-bottom: 8px; }
.tk-prod-tags { display: flex; flex-wrap: wrap; gap: 7px; }
.tk-prod-benefit { display: inline-flex; align-items: center; gap: 6px; background: var(--tk-ok-soft); color: var(--tk-ok); font-size: 12px; font-weight: 600; padding: 5px 11px; border-radius: 999px; }
.tk-prod-spec { background: var(--tk-chip-bg); color: var(--tk-chip-ink); border: 1px solid var(--tk-chip-line); font-size: 12px; font-weight: 500; padding: 5px 11px; border-radius: 999px; }
.tk-prod-more { background: var(--tk-chip-bg); color: var(--tk-muted); font-size: 12px; font-weight: 700; padding: 5px 11px; border-radius: 999px; }
.tk-prod-brief { background: linear-gradient(135deg, #fff7e9, #fffdf8); border: 1px solid #f0e0bd; border-radius: 12px; padding: 12px 14px; }
.tk-prod-brief-lbl { display: flex; align-items: center; gap: 7px; margin-bottom: 6px; font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase; color: #c47d12; font-weight: 800; }
.tk-prod-brief-lbl i { color: #df8a0c; font-size: 12px; }
.tk-prod-brief-txt { margin: 0; font-size: 13px; color: #7a5a1e; line-height: 1.5; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.tk-prod-edit { margin-top: auto; display: inline-flex; align-items: center; justify-content: center; gap: 8px; background: var(--tk-surface); border: 1px solid var(--tk-line-strong); border-radius: 10px; padding: 11px; font-family: inherit; font-size: 12px; font-weight: 700; letter-spacing: .03em; text-transform: uppercase; color: var(--tk-ink); cursor: pointer; text-decoration: none; }
.tk-prod-edit:hover { background: var(--tk-hover); }

.tk-prod-empty { padding: 40px 20px; text-align: center; color: var(--tk-faint); font-size: 14px; background: var(--tk-surface); border: 1px dashed var(--tk-line-strong); border-radius: 16px; margin-bottom: 18px; }
.tk-prod-emptystate { display: flex; flex-direction: column; align-items: center; gap: 12px; padding: 60px 20px; text-align: center; color: var(--tk-faint); background: var(--tk-surface); border: 1px dashed var(--tk-line-strong); border-radius: 16px; }
.tk-prod-emptystate i { font-size: 30px; }
.tk-prod-emptystate p { margin: 0; font-size: 14px; }

/* ─── Fiche V2 : lecteur vidéo + galerie TikTok ────────────────── */
.tk-section-eyebrow { font-size: 11px; letter-spacing: 0.10em; text-transform: uppercase; color: var(--tk-ink-mute); margin-bottom: 10px; }
.tk-video-player { aspect-ratio: 16 / 9; background: #000; border-radius: var(--tk-radius); overflow: hidden; }
.tk-video-player video { width: 100%; height: 100%; object-fit: contain; display: block; }
.tk-tiktok-gallery { display: grid; grid-template-columns: repeat(auto-fill, minmax(230px, 1fr)); gap: 10px; }
.tk-tiktok-cell { aspect-ratio: 9 / 16; border: 1px solid var(--tk-line); border-radius: 10px; overflow: hidden; background: var(--tk-hover); }
.tk-tiktok-cell iframe { width: 100%; height: 100%; border: 0; }
/* Embed TikTok (fiche admin) : largeur recommandée par TikTok hors mode partage. */
.tk-tiktok-embed { max-width: 780px; min-width: 288px; }
/* Mode partage : on masque l'aside Admin (confidentiel) et tout élément interne
   (badge de statut) quel que soit le viewport. Masquage CSS (et non JS) →
   aucun flash d'info confidentielle à la navigation. */
.tk-share-on .tk-admin-aside { display: none; }
.tk-share-on .tk-share-hide { display: none; }

/* ════════════════════════════════════════════════════════════════
   Fiche animateur V3 — mise en page « profil » (container centré)
   Objectifs : la personne en tête, vidéo + TikTok alignés, sections
   pleine largeur (zéro vide à droite), admin en bande séparée en bas.
   ════════════════════════════════════════════════════════════════ */
.tk-fiche { max-width: 1120px; margin: 0 auto; padding: 24px 24px 64px; }

.tk-fiche-back {
    display: inline-flex; align-items: center; gap: 7px; margin-bottom: 14px;
    font-family: var(--tk-mono); font-size: 11.5px; letter-spacing: .05em;
    text-transform: uppercase; color: var(--tk-muted); text-decoration: none;
}
.tk-fiche-back:hover { color: var(--tk-ink); }

/* Aperçu public (côté animateur) : bandeau d'information au-dessus de la fiche. */
.tk-fiche-pubnote {
    display: flex; align-items: center; gap: 9px; margin-bottom: 16px;
    padding: 11px 15px; border-radius: 12px; font-size: 13.5px;
    color: var(--tk-muted); background: var(--tk-hover); border: 1px solid var(--tk-line);
}
.tk-fiche-pubnote i { color: var(--tk-accent); }

/* ── Hero ── */
/* .tk-fiche-hero porte aussi .card → on assume la colonne : rangée haute
   (photo/identité/actions) puis rangée « À propos + carte ». */
.tk-fiche-hero { display: flex; flex-direction: column; gap: 18px; padding: 20px 22px; }
/* Rangée haute : disposition horizontale d'origine. */
.tk-fiche-hero-top { display: flex; flex-direction: row; gap: 22px; align-items: center; }
/* Seconde rangée : À propos (gauche, extensible) + carte carrée (droite, fixe). */
.tk-fiche-hero-about { display: flex; gap: 20px; align-items: stretch; padding-top: 18px; border-top: 1px solid var(--tk-line); }
.tk-fiche-about-text { flex: 1 1 auto; min-width: 0; }
/* align-self: flex-start → la carte garde sa taille carrée intrinsèque même si
   la bio est plus haute (sinon align-items:stretch l'étirerait en rectangle). */
.tk-fiche-map-square { flex: 0 0 auto; align-self: flex-start; width: 240px; height: 240px; }
.tk-fiche-map-square .tk-fiche-map { height: 100%; min-height: 0; }
.tk-fiche-photo {
    position: relative;
    flex: 0 0 auto; width: 124px; height: 150px; border-radius: 18px; overflow: hidden;
    background: var(--tk-hover); box-shadow: 0 5px 16px -9px rgba(20, 24, 32, .5);
}
.tk-fiche-photo img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tk-fiche-photo .tk-catalog-photo-placeholder { font-size: 2.4rem; }
.tk-fiche-id { flex: 1; min-width: 0; }
.tk-fiche-eyebrow {
    display: inline-flex; align-items: center; gap: 8px; margin-bottom: 8px;
    font-family: var(--tk-mono); font-size: 11px; letter-spacing: .14em;
    text-transform: uppercase; color: var(--tk-faint); font-weight: 600;
}
.tk-fiche-eyebrow .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--tk-ink); }
.tk-fiche-name {
    display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin: 0;
    font-size: clamp(26px, 3.4vw, 38px); font-weight: 800; letter-spacing: -.028em;
    line-height: 1.05; color: var(--tk-ink);
}
/* Aligner le badge de statut sur la même ligne médiane que le nom
   (.tk-catalog-status hérite align-self:flex-start du catalogue → décalé). */
.tk-fiche-name .tk-catalog-status { align-self: center; }
.tk-fiche-facts { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.tk-fiche-fact {
    display: inline-flex; align-items: center; gap: 7px; font-size: 13px;
    color: var(--tk-muted); background: var(--tk-hover); border: 1px solid var(--tk-line);
    padding: 6px 12px; border-radius: 999px;
}
.tk-fiche-fact b { color: var(--tk-ink); font-weight: 600; }
.tk-fiche-fact i { color: var(--tk-muted); }
.tk-fiche-actions { flex: 0 0 auto; align-self: flex-start; }

.tk-fiche-card-pad { padding: 18px; }
/* Un peu plus d'air sous les titres de section (À PROPOS, COMPÉTENCES…). */
.tk-fiche .tk-section-eyebrow { margin-bottom: 16px; }

/* ── Présentation : vidéo verticale (1/3) + TikTok (2/3) ── */
/* align-items: stretch → la vidéo (et le placeholder) s'étirent à la hauteur réelle
   du widget TikTok rendu à côté. min-height = plancher quand la vidéo est seule. */
.tk-fiche-pres { display: grid; grid-template-columns: 1fr 2fr; gap: 16px; margin-top: 16px; align-items: stretch; }
/* Un seul média présent → il occupe toute la largeur. */
.tk-fiche-pres > .card:only-child { grid-column: 1 / -1; }
.tk-fiche-pres-video { padding: 0; overflow: hidden; position: relative; min-height: 440px; }
/* Pas de vidéo : on réserve le même gabarit (s'étire à la hauteur du TikTok) avec un message. */
.tk-fiche-pres-video--empty {
    display: flex; flex-direction: column; align-items: center; justify-content: center;
    gap: 10px; text-align: center; color: var(--tk-faint);
    background: var(--tk-hover); border: 1px dashed var(--tk-line);
}
.tk-fiche-pres-video--empty i { font-size: 30px; }
.tk-fiche-pres-video--empty span { font-size: 13px; font-weight: 600; }
/* Cadre vertical (format live shopping). object-fit cover → remplit, fini les bandes noires. */
.tk-fiche-vframe { position: absolute; inset: 0; background: #0d0e10; }
.tk-fiche-vframe video { width: 100%; height: 100%; object-fit: cover; display: block; }
/* Boutons de modération admin sur les médias de la fiche (masqués en mode partage via .tk-share-hide). */
.tk-media-reject { position: absolute; top: 8px; right: 8px; z-index: 4; margin: 0; }
.tk-media-reject .btn { box-shadow: 0 2px 8px -2px rgba(13, 14, 16, .55); }
.tk-fiche-vlabel { position: absolute; top: 11px; left: 12px; z-index: 2; font-family: var(--tk-mono); font-size: 9.5px; letter-spacing: .06em; text-transform: uppercase; color: #fff; background: rgba(0,0,0,.5); padding: 3px 8px; border-radius: 7px; display: inline-flex; align-items: center; gap: 5px; }

.tk-fiche-pres-tiktok { padding: 0; overflow: hidden; }
.tk-fiche-pres-tiktok .tk-tiktok-embed { width: 100%; max-width: 100%; min-width: 0; margin: 0; }

.tk-fiche-map-card { padding: 0; overflow: hidden; position: relative; min-height: 240px; }
.tk-fiche-map { width: 100%; height: 100%; min-height: 240px; }
.tk-fiche-map .leaflet-container { height: 100%; width: 100%; background: var(--tk-hover); }
.tk-fiche-map-loc { position: absolute; left: 12px; bottom: 12px; z-index: 650; font-family: var(--tk-mono); font-size: 11px; font-weight: 600; color: var(--tk-ink); background: rgba(255,255,255,.92); border: 1px solid var(--tk-line); padding: 5px 10px; border-radius: 8px; display: inline-flex; align-items: center; gap: 6px; }

/* ── À propos ── */
.tk-fiche-bio {
    margin: 0; font-size: 15px; line-height: 1.55; color: var(--tk-ink);
    font-style: italic; border-left: 3px solid var(--tk-ink); padding-left: 14px;
}

/* ── Grille milieu (compétences | disponibilités) ── */
/* align-items: stretch → les deux cartes ont la même hauteur (la plus haute fait foi). */
.tk-fiche-mid { display: grid; grid-template-columns: 1.15fr 1fr; gap: 16px; margin-top: 16px; align-items: stretch; }

/* ── Tags (secteurs / équipement) ── */
.tk-fiche-tags { display: flex; flex-wrap: wrap; gap: 6px; }
.tk-fiche-tag {
    font-size: 12px; font-weight: 500; padding: 4px 10px; border-radius: 8px;
    background: var(--tk-chip-bg); color: var(--tk-chip-ink); border: 1px solid var(--tk-chip-line);
}

/* ── Bande admin (confidentiel) ── */
.tk-fiche-admin { margin-top: 18px; padding: 0; overflow: hidden; border: 1.5px solid var(--tk-chip-line); }
.tk-fiche-admin-head {
    display: flex; align-items: center; gap: 9px; padding: 13px 20px;
    border-bottom: 1px solid var(--tk-line); background: var(--tk-hover);
}
.tk-fiche-admin-head .t {
    font-family: var(--tk-mono); font-size: 10.5px; letter-spacing: .1em;
    text-transform: uppercase; color: var(--tk-chip-ink); font-weight: 700;
}
.tk-fiche-admin-head .note {
    margin-left: auto; font-family: var(--tk-mono); font-size: 9.5px;
    letter-spacing: .03em; color: var(--tk-faint);
}
.tk-fiche-admin-grid { display: grid; grid-template-columns: 1.3fr 1fr; }
.tk-fiche-admin-grid > div { padding: 18px 20px; }
.tk-fiche-admin-info { border-right: 1px solid var(--tk-line); }
.tk-fiche-status-form {
    display: flex; gap: 8px; flex-wrap: wrap; margin-top: 14px;
    padding-top: 14px; border-top: 1px solid var(--tk-line);
}

/* ── Responsive ── */
@media (max-width: 900px) {
    .tk-fiche { padding: 18px 14px 56px; }
    .tk-fiche-mid, .tk-fiche-admin-grid { grid-template-columns: 1fr; }
    .tk-fiche-admin-info { border-right: none; border-bottom: 1px solid var(--tk-line); }
    /* Présentation : vidéo puis TikTok empilés pleine largeur. */
    .tk-fiche-pres { grid-template-columns: 1fr; }
    /* Hero : À propos puis carte empilés pleine largeur. */
    .tk-fiche-hero-about { flex-direction: column; }
    .tk-fiche-map-square { width: 100%; height: 220px; }
    .tk-fiche-vframe { max-height: 70vh; }
}
@media (max-width: 600px) {
    .tk-fiche-hero { flex-wrap: wrap; }
    .tk-fiche-actions { order: 3; width: 100%; }
    .tk-fiche-actions .btn { width: 100%; }
    /* Hero-top : photo seule au-dessus, identité centrée en dessous. */
    .tk-fiche-hero-top { flex-direction: column; align-items: center; text-align: center; gap: 12px; }
    .tk-fiche-id { text-align: center; }
    .tk-fiche-name { justify-content: center; }
    .tk-fiche-eyebrow { justify-content: center; }
    .tk-fiche-facts { justify-content: center; }
}

/* ─── Back-office : taille des contrôles compacts et sous-titres ──── */
.tk-app .form-control-sm, .tk-app .form-select-sm { font-size: 0.92rem; }
.tk-app .btn-sm { font-size: 0.86rem; }
.tk-page-subtitle { font-size: 15px; }

/* Champs obligatoires : Symfony ajoute la classe `required` au label des champs
   requis (theme Bootstrap 5) sans marqueur visuel. On rend un asterisque rouge. */
.tk-app label.required::after { content: " *"; color: var(--tk-danger); font-weight: 700; }

/* ─── Menu burger (mobile nav) ──────────────────────────────────── */
.tk-topbar-inner { position: relative; }
.tk-burger { display: none; flex-direction: column; gap: 4px; background: none; border: none; cursor: pointer; padding: 8px; }
.tk-burger span { display: block; width: 22px; height: 2px; background: var(--tk-ink); border-radius: 2px; transition: opacity .15s; }
@media (max-width: 768px) {
    .tk-burger { display: flex; }
    .tk-nav {
        display: none; position: absolute; top: 64px; right: 0; left: 0;
        flex-direction: column; align-items: stretch; gap: 0;
        background: var(--tk-surface); border-bottom: 1px solid var(--tk-line);
        padding: 8px 18px 16px; box-shadow: var(--tk-shadow); z-index: 30;
    }
    .tk-topbar.tk-nav-open .tk-nav { display: flex; }
    .tk-nav a, .tk-nav .tk-nav-logout, .tk-nav form { width: 100%; }
    .tk-nav a { padding: 11px 4px; }
    .tk-nav .tk-btn-ghost { width: 100%; text-align: left; padding: 11px 4px; }
}

/* ─── Pages légales (mentions légales, etc.) ──────────────────── */
.tk-legal section { margin-bottom: 26px; }
.tk-legal section:last-of-type { margin-bottom: 0; }
.tk-legal h2 {
    font-size: 1.05rem;
    color: var(--tk-ink);
    margin: 0 0 10px;
    letter-spacing: -0.01em;
}
.tk-legal p {
    color: var(--tk-ink-dim);
    font-size: 15px;
    line-height: 1.65;
    margin: 0 0 10px;
}
.tk-legal p:last-child { margin-bottom: 0; }
.tk-legal-updated {
    margin-top: 28px;
    padding-top: 18px;
    border-top: 1px solid var(--tk-line);
    font-family: var(--tk-mono);
    font-size: 12px;
    letter-spacing: 0.04em;
    color: var(--tk-faint);
}

/* ─── Mission affiliation — onglet nav (badge non-vues + verrou) ─ */
.tk-nav-badge { display: inline-flex; align-items: center; justify-content: center; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 99px; background: var(--tk-danger); color: #fff; font-size: 11px; font-weight: 700; margin-left: 6px; }

/* ════════════════════════════════════════════════════════════════
   Catalogue affiliation animateur (espace/affiliation)
   Préfixe : tk-aff- (toutes les classes ci-dessous)
   ════════════════════════════════════════════════════════════════ */

/* ─── Barre de filtres ──────────────────────────────────────────── */
.tk-aff-filters {
    display: flex;
    align-items: center;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 24px;
}

/* Toggle Toutes / Mes inscriptions */
.tk-aff-seg {
    display: inline-flex;
    background: var(--tk-surface);
    border: 1px solid var(--tk-line);
    border-radius: 999px;
    padding: 4px;
}
.tk-aff-seg-btn {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    border: none;
    background: transparent;
    padding: 7px 16px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 600;
    color: var(--tk-muted);
    cursor: pointer;
    transition: all .18s;
    user-select: none;
}
.tk-aff-seg-btn:has(input:checked) {
    background: var(--tk-ink);
    color: #fff;
}

/* Modale de confirmation (contrôleur Stimulus `confirm`) */
.tk-confirm {
    border: 1px solid var(--tk-line);
    border-radius: 14px;
    padding: 22px 24px;
    max-width: 420px;
    width: calc(100% - 32px);
    background: var(--tk-surface);
    color: var(--tk-ink);
    box-shadow: 0 18px 48px rgba(0, 0, 0, .22);
}
.tk-confirm::backdrop { background: rgba(0, 0, 0, .45); }
.tk-confirm-msg { margin: 0 0 18px; font-size: 15px; line-height: 1.5; }
.tk-confirm-actions { display: flex; justify-content: flex-end; gap: 10px; }
.tk-confirm-check { display: flex; align-items: flex-start; gap: 8px; margin: 10px 0 4px; font-size: 13.5px; }
.tk-confirm-check a { text-decoration: underline; }

/* Formulaires admin affiliation en pleine largeur : infos sur 2 colonnes. */
.tk-aff-form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.tk-aff-form-grid > .tk-aff-form-full { grid-column: 1 / -1; }
@media (max-width: 720px) { .tk-aff-form-grid { grid-template-columns: 1fr; } }

/* Panneau « secteur ciblé » du formulaire de campagne (cible des relances affiliation). */
.tk-aff-target {
    padding: 10px 14px;
    background: var(--tk-surface);
    border: 1px solid var(--tk-line);
    border-radius: 8px;
    font-size: 13.5px;
    color: var(--tk-muted);
    line-height: 1.5;
}
.tk-aff-target-warn { color: var(--tk-orange); font-weight: 600; }

/* Ligne d'un CollectionType (bénéfice/caractéristique/produit) : champ + bouton retirer alignés. */
.tk-aff-collrow { display: flex !important; flex-wrap: nowrap; gap: 8px; align-items: center; margin-bottom: 8px; }
.tk-aff-collrow > * { flex: 1 1 0; min-width: 0; margin-bottom: 0 !important; }
.tk-aff-collrow > .tk-btn, .tk-aff-collrow > button { flex: 0 0 auto; }

/* Select secteur */
.tk-aff-sector-select {
    min-width: 200px;
    max-width: 280px;
}

/* Galerie de selection de produits (formulaire campagne) */
.tk-prodpick-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 12px; margin-top: 8px; }
/* Cellule de grille : porte la card (button) + le champ commission en sibling,
   jamais a l'interieur du button (pas de controle interactif dans un <button>). */
.tk-prodpick-cell { display: flex; flex-direction: column; gap: 6px; }
.tk-prodpick-card {
    display: flex; flex-direction: column; align-items: center; gap: 6px;
    width: 100%; padding: 12px; text-align: center; cursor: pointer;
    background: var(--tk-surface); border: 1px solid var(--tk-line); border-radius: 12px;
    transition: border-color .15s, box-shadow .15s, transform .15s;
}
.tk-prodpick-card:hover { transform: translateY(-2px); box-shadow: var(--tk-shadow-sm, 0 4px 14px rgba(20,24,32,.08)); }
.tk-prodpick-card.is-selected { border-color: var(--tk-brand); box-shadow: 0 0 0 2px var(--tk-brand) inset; }
.tk-prodpick-photo { width: 84px; height: 84px; border-radius: 999px; overflow: hidden; display: grid; place-items: center; background: var(--tk-hover); }
.tk-prodpick-photo img { width: 100%; height: 100%; object-fit: cover; }
/* Nom sur 2 lignes fixes : toutes les cards ont la meme hauteur, donc les
   bordures ET les champs commission (en sibling sous la card) restent alignes,
   quelle que soit la longueur du nom. Nom complet au survol (title). */
.tk-prodpick-name {
    font-weight: 600; font-size: 13.5px; line-height: 1.2;
    display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
    overflow: hidden; min-height: 2.4em;
}
.tk-prodpick-price { font-size: 12.5px; color: var(--tk-muted); }
.tk-prodpick-state::after { content: 'Sélectionner'; font-size: 11px; font-weight: 700; color: var(--tk-muted); text-transform: uppercase; letter-spacing: .05em; }
.tk-prodpick-card.is-selected .tk-prodpick-state::after { content: '✓ Sélectionné'; color: var(--tk-brand); }
.tk-prodpick-commfield { display: flex; flex-direction: column; gap: 3px; width: 100%; }
.tk-prodpick-commlbl { font-size: 10px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--tk-faint); }
.tk-prodpick-comm { text-align: center; }
.tk-prodpick-counter { font-size: 12.5px; color: var(--tk-muted); margin-top: 8px; }

/* ─── Sections (En cours / À venir / Passées) ───────────────────── */
.tk-aff-section { margin-top: 28px; }
.tk-aff-section:first-child { margin-top: 0; }

.tk-aff-section-head {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 14px;
}

/* Pastille de couleur avant le titre */
.tk-aff-section-dot {
    width: 9px;
    height: 9px;
    border-radius: 999px;
    flex: none;
}
.tk-aff-section-dot--live     { background: var(--tk-ok); box-shadow: 0 0 0 3px var(--tk-ok-soft); }
.tk-aff-section-dot--upcoming { background: var(--tk-orange); box-shadow: 0 0 0 3px color-mix(in srgb, var(--tk-orange), transparent 82%); }
.tk-aff-section-dot--past     { background: var(--tk-faint); }

.tk-aff-section-count {
    font-size: 11px;
    font-weight: 700;
    color: var(--tk-muted);
    background: var(--tk-hover);
    border: 1px solid var(--tk-line);
    border-radius: 999px;
    padding: 2px 8px;
}
.tk-aff-section-hint {
    font-size: 12px;
    color: var(--tk-faint);
    margin-left: 4px;
}

/* En-tête de page affiliation : titre + bouton d'aide alignés. */
.tk-aff-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 18px; flex-wrap: wrap; }
.tk-aff-help-btn {
    display: inline-flex; align-items: center; gap: 6px;
    background: transparent; border: 1px solid var(--tk-line); color: var(--tk-muted);
    border-radius: 999px; padding: 7px 14px; font-size: 13.5px; font-weight: 600; cursor: pointer;
    transition: border-color .15s, color .15s;
}
.tk-aff-help-btn:hover { border-color: var(--tk-brand); color: var(--tk-brand); }

/* Groupe gauche (titre + revoir la vidéo) et bloc stats à droite du header. */
.tk-aff-head-left { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.tk-aff-headstats { display: flex; gap: 28px; }
.tk-aff-headstat { display: flex; flex-direction: column; align-items: flex-end; line-height: 1.15; }
.tk-aff-headstat-val { font-size: 22px; font-weight: 800; letter-spacing: -.02em; color: var(--tk-ink); }
.tk-aff-headstat-lbl {
    font-family: var(--tk-mono); font-size: 10px; letter-spacing: .08em;
    text-transform: uppercase; color: var(--tk-faint);
}
@media (max-width: 576px) {
    .tk-aff-headstats { gap: 18px; width: 100%; justify-content: space-between; }
    .tk-aff-headstat { align-items: flex-start; }
}

/* Modal vidéo de bienvenue. */
.tk-welcome {
    border: none; border-radius: 16px; padding: 0; width: min(880px, 92vw);
    background: var(--tk-surface); box-shadow: 0 20px 60px rgba(0,0,0,.3); overflow: hidden;
}
.tk-welcome::backdrop { background: rgba(10, 6, 7, .6); }
.tk-welcome-close {
    position: absolute; top: 10px; right: 10px; z-index: 2;
    width: 36px; height: 36px; border-radius: 999px; border: none; cursor: pointer;
    background: rgba(0,0,0,.55); color: #fff; display: flex; align-items: center; justify-content: center;
}
.tk-welcome-frame { position: relative; width: 100%; aspect-ratio: 16 / 9; background: #000; }
.tk-welcome-frame iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

/* ─── Grille de cartes ──────────────────────────────────────────── */
/* 2 cartes par ligne ; 1 sur mobile (<=760px). */
.tk-aff-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 18px;
}

/* ─── Carte campagne ────────────────────────────────────────────── */
.tk-aff-card {
    position: relative;
    background: var(--tk-surface);
    border: 1px solid var(--tk-line);
    border-radius: 16px;
    overflow: hidden;
    box-shadow: 0 1px 4px rgba(20, 24, 32, .06);
    transition: transform .2s, box-shadow .2s, border-color .2s;
    display: flex;
    flex-direction: column;
}
.tk-aff-card:hover {
    transform: translateY(-2px);
    box-shadow: 0 6px 20px rgba(20, 24, 32, .10);
    border-color: color-mix(in srgb, var(--tk-line), var(--tk-ink) 20%);
}
.tk-aff-card--past { opacity: .72; }
.tk-aff-card--past:hover { opacity: 1; }

/* Barre dorée « Nouveau » en haut */
.tk-aff-card--new { border-color: var(--tk-orange); }
.tk-aff-new-bar {
    position: absolute;
    top: 0; left: 0; right: 0;
    height: 3px;
    background: linear-gradient(90deg, var(--tk-orange), var(--tk-orange-2));
    z-index: 2;
}

.tk-aff-card-inner {
    padding: 16px 18px 14px;
    display: flex;
    flex-direction: column;
    gap: 14px;
    flex: 1;
}

/* ─── Bannière vidéo ────────────────────────────────────────────── */
.tk-aff-cover {
    position: relative;
    display: block;
    width: 100%;
    height: 148px;
    border: none;
    background-color: #0a0607;
    background-size: cover;
    background-position: center;
    cursor: pointer;
    overflow: hidden;
    font-family: inherit;
    border-bottom: 1px solid var(--tk-line);
    padding: 0;
}
.tk-aff-cover-img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
/* Aperçu vidéo (embed) quand aucune bannière : non interactif, le clic ouvre la modale. */
.tk-aff-cover-frame {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    pointer-events: none;
}
.tk-aff-cover-scrim {
    position: absolute;
    inset: 0;
    background: linear-gradient(to bottom,
        rgba(10,6,7,.1) 0%,
        rgba(10,6,7,0) 30%,
        rgba(10,6,7,.65) 100%);
    transition: background .2s;
}
.tk-aff-cover:hover .tk-aff-cover-scrim {
    background: linear-gradient(to bottom,
        rgba(10,6,7,.25) 0%,
        rgba(10,6,7,.1) 40%,
        rgba(10,6,7,.75) 100%);
}
.tk-aff-cover-play {
    position: absolute;
    top: 50%; left: 50%;
    transform: translate(-50%, -60%);
    display: flex;
    align-items: center;
    justify-content: center;
    width: 50px; height: 50px;
    border-radius: 999px;
    background: rgba(10,6,7,.45);
    border: 1.5px solid rgba(255,255,255,.55);
    color: #fff;
    font-size: 24px;
    padding-left: 3px;
    backdrop-filter: blur(2px);
    transition: background .18s, transform .18s;
}
.tk-aff-cover:hover .tk-aff-cover-play {
    background: var(--tk-orange);
    border-color: var(--tk-orange);
    transform: translate(-50%, -60%) scale(1.08);
}
.tk-aff-cover-bar {
    position: absolute;
    left: 0; right: 0; bottom: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    padding: 8px 12px;
}
.tk-aff-cover-label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 12px;
    font-weight: 600;
    color: #fff;
    text-shadow: 0 1px 3px rgba(0,0,0,.5);
}
.tk-aff-cover-expand {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .04em;
    text-transform: uppercase;
    color: #fff;
    background: rgba(10,6,7,.45);
    border: 1px solid rgba(255,255,255,.18);
    padding: 3px 9px;
    border-radius: 999px;
    backdrop-filter: blur(2px);
    transition: background .15s, border-color .15s;
}
.tk-aff-cover:hover .tk-aff-cover-expand {
    background: var(--tk-orange);
    border-color: var(--tk-orange);
    color: #1b1208;
}

/* ─── En-tête de carte : logo + meta + badges ───────────────────── */
.tk-aff-card-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
}
.tk-aff-brand {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    min-width: 0;
}
.tk-aff-brand-logo {
    flex: none;
    width: 54px; height: 54px;
    border-radius: 12px;
    background: #fff;
    border: 1px solid var(--tk-line);
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 7px;
    overflow: hidden;
}
.tk-aff-brand-logo img {
    max-width: 100%; max-height: 100%;
    object-fit: contain;
}
.tk-aff-brand-initials {
    font-size: 18px;
    font-weight: 800;
    color: var(--tk-faint);
}
.tk-aff-brand-meta { min-width: 0; }
.tk-aff-sector {
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--tk-faint);
    display: block;
    margin-bottom: 2px;
}
.tk-aff-card-title {
    font-size: 15.5px;
    font-weight: 700;
    letter-spacing: -0.01em;
    margin: 0;
    line-height: 1.25;
}
.tk-aff-sectors { display: flex; align-items: center; gap: 6px; margin-top: 4px; }
.tk-aff-card-desc { margin: 6px 0 0; font-size: 12.5px; line-height: 1.4; color: var(--tk-muted); }
.tk-aff-infobtns { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.tk-aff-card-tags {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 6px;
    flex: none;
}

/* ─── Badge statut (surcharge pour le dot animé « live ») ──────── */
.tk-aff-livedot {
    width: 6px; height: 6px;
    border-radius: 999px;
    background: var(--tk-ok);
    animation: tk-aff-pulse 1.6s ease infinite;
    flex: none;
}
@keyframes tk-aff-pulse {
    0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--tk-ok), transparent 40%); }
    50%       { box-shadow: 0 0 0 5px color-mix(in srgb, var(--tk-ok), transparent 100%); }
}

/* ─── Badge « Nouveau » ─────────────────────────────────────────── */
.tk-aff-new {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    font-size: 10px;
    font-weight: 700;
    letter-spacing: .07em;
    text-transform: uppercase;
    color: var(--tk-orange);
    background: color-mix(in srgb, var(--tk-orange), #fff 88%);
    padding: 3px 8px;
    border-radius: 999px;
}
.tk-aff-new-dot {
    width: 5px; height: 5px;
    border-radius: 999px;
    background: var(--tk-orange);
    flex: none;
}

/* ─── Pastilles produits ────────────────────────────────────────── */
.tk-aff-prodrow {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
}
.tk-aff-thumbs { display: flex; gap: 6px; overflow-x: auto; padding-bottom: 4px; scrollbar-width: thin; }
.tk-aff-thumbs::-webkit-scrollbar { height: 6px; }
.tk-aff-thumbs::-webkit-scrollbar-thumb { background: var(--tk-line); border-radius: 999px; }
.tk-aff-thumb {
    width: 46px; height: 46px;
    border-radius: 999px;
    overflow: hidden;
    background: var(--tk-hover);
    border: 2px solid var(--tk-surface);
    box-shadow: 0 1px 3px rgba(20,15,10,.1);
    flex: none;
}
.tk-aff-thumb img {
    width: 100%; height: 100%;
    object-fit: cover;
    object-position: center;
}
.tk-prodtable { width: 100%; border-collapse: collapse; font-size: 13.5px; }
.tk-prodtable th {
    text-align: left; font-family: var(--tk-mono); font-size: 10px; letter-spacing: .06em;
    text-transform: uppercase; color: var(--tk-faint); font-weight: 600;
    padding: 6px 10px; border-bottom: 1px solid var(--tk-line);
}
.tk-prodtable th:not(:first-child), .tk-prodtable td:not(:first-child) { text-align: right; white-space: nowrap; }
.tk-prodtable td { padding: 9px 10px; border-bottom: 1px solid var(--tk-line); color: var(--tk-ink); }
.tk-prodtable tr:last-child td { border-bottom: none; }
.tk-prodtable-gain { font-weight: 700; color: var(--tk-brand); }

/* ─── 4 stats ───────────────────────────────────────────────────── */
.tk-aff-stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    background: var(--tk-hover);
    border: 1px solid var(--tk-line);
    border-radius: 12px;
    overflow: hidden;
}
.tk-aff-statcell {
    padding: 10px 12px;
    display: flex;
    flex-direction: column;
    gap: 3px;
    border-left: 1px solid var(--tk-line);
    min-width: 0;
}
.tk-aff-statcell:first-child { border-left: none; }
.tk-aff-statlbl {
    font-size: 9px;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--tk-faint);
    /* Libellés affichés en entier : on autorise le retour à la ligne et on
       réserve 2 lignes pour que les valeurs restent alignées entre colonnes
       (sinon « Commission moy. » / « Gain moy./vente » sont coupés en 2 par ligne). */
    line-height: 1.2;
    min-height: 2.4em;
}
.tk-aff-statval {
    font-size: 13px;
    font-weight: 600;
    color: var(--tk-ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.tk-aff-statval--gain { color: var(--tk-ok); }

/* ─── Pied de carte (CTA) ───────────────────────────────────────── */
.tk-aff-card-foot {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: auto;
    flex-wrap: wrap;
}
.tk-aff-cta-hint {
    font-size: 11px;
    color: var(--tk-faint);
    font-style: italic;
}
.tk-aff-cta-form { display: inline-flex; margin: 0; }
.tk-aff-cta-pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 7px 14px;
    border-radius: 999px;
    font-size: 0.82rem;
    font-weight: 600;
    line-height: 1;
}
.tk-aff-cta-pill--ok   { background: color-mix(in srgb, var(--tk-success) 14%, transparent); color: var(--tk-success); }
.tk-aff-cta-pill--ko   { background: color-mix(in srgb, var(--tk-danger) 12%, transparent);  color: var(--tk-danger); }
.tk-aff-cta-pill--wait { background: var(--tk-hover); color: var(--tk-muted); }
/* Surlignage « nouvel inscrit » (admin, campagne En cours) */
.tk-aff-reg--new > td { background: color-mix(in srgb, var(--tk-orange) 9%, transparent); }

/* ─── Overlay vidéo (modal lecteur) ─────────────────────────────── */
.tk-aff-video-overlay {
    position: fixed;
    inset: 0;
    background: rgba(12, 14, 18, .55);
    backdrop-filter: blur(4px);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1050;
    padding: 20px;
    opacity: 0;
    transition: opacity .22s;
}
.tk-aff-video-overlay.is-open { opacity: 1; }

.tk-aff-video-modal {
    background: var(--tk-surface);
    border-radius: 18px;
    width: 100%;
    max-width: min(94vw, 880px);
    padding: 20px 24px 24px;
    box-shadow: 0 30px 80px rgba(10,8,6,.4);
    display: flex;
    flex-direction: column;
    gap: 14px;
    transform: translateY(10px) scale(.98);
    opacity: 0;
    transition: transform .26s, opacity .26s;
}
.tk-aff-video-overlay.is-open .tk-aff-video-modal {
    transform: translateY(0) scale(1);
    opacity: 1;
}

.tk-aff-video-modal-head {
    display: flex;
    justify-content: flex-end;
}
.tk-aff-video-modal-close {
    width: 36px; height: 36px;
    border-radius: 999px;
    border: 1px solid var(--tk-line);
    background: var(--tk-hover);
    color: var(--tk-muted);
    font-size: 15px;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all .15s;
}
.tk-aff-video-modal-close:hover {
    border-color: var(--tk-danger);
    color: var(--tk-danger);
}

/* Wrapper iframe 16:9 */
.tk-aff-video-frame {
    position: relative;
    width: 100%;
    padding-bottom: 56.25%;
    border-radius: 12px;
    overflow: hidden;
    background: #0a0607;
}
.tk-aff-video-frame iframe {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
}

/* ─── Responsive ────────────────────────────────────────────────── */
@media (max-width: 760px) {
    .tk-aff-grid { grid-template-columns: 1fr; }
    .tk-aff-stats { grid-template-columns: repeat(2, 1fr); }
    .tk-aff-statcell:nth-child(3) { border-left: none; }
    .tk-aff-cover { height: 120px; }
}
@media (max-width: 480px) {
    .tk-aff-filters { flex-direction: column; align-items: stretch; }
    .tk-aff-sector-select { max-width: 100%; }
}
.tk-nav-aff.is-locked { opacity: .5; cursor: not-allowed; }

/* ═══════════════════════════════════════════════════════════════════
   Vue Live affiliation (Phase 3) — thème sombre « studio » scopé .tk-live
   ═══════════════════════════════════════════════════════════════════ */
.tk-live {
    /* La page Live étend base_clean (pas de classe .tk-app sur <body>) : on
       redéfinit ici les tokens fonctionnels consommés par le thème studio,
       sinon ils ne résolvent pas (ils vivent dans le bloc .tk-app). Valeurs
       alignées sur .tk-app ; thème volontairement autonome (spec Phase 3). */
    --tk-orange: #df8a0c;
    --tk-orange-2: #eaa53a;
    --tk-ok: #1f9d63;
    --tk-alert: #e23a6b;
    --tk-mono: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif;
    --live-accent: var(--tk-orange);
    --live-gold-grad: linear-gradient(180deg, #fbbf24 0%, #df8a0c 100%);
    --live-card: rgba(255, 224, 200, .045);
    --live-line: rgba(255, 220, 200, .12);
    --live-muted: #c9bdb6;
    --live-faint: #8a7c75;
    --live-chip: rgba(255, 220, 200, .07);
    font-family: 'Plus Jakarta Sans', ui-sans-serif, system-ui, sans-serif;
    position: fixed;
    inset: 0;
    z-index: 50;
    height: 100dvh;
    overflow: hidden;
    display: flex;
    flex-direction: column;
    background: radial-gradient(120% 80% at 50% -10%, #1a1012 0%, #0a0607 60%);
    color: #f5efe8;
}
/* max-width généreux : la vue Live occupe tout l'espace sur grand écran
   (plafond 2200px sur ultra-wide). Jamais plus étroit qu'avant sur écran normal. */
.live-shell { max-width: 2200px; width: 100%; margin: 0 auto; padding: 16px clamp(26px, 2.5vw, 56px) 20px; flex: 1; min-height: 0; display: flex; flex-direction: column; }
.live-header { flex-shrink: 0; }
.live-header-row { display: flex; align-items: center; gap: 20px; }
.live-back { display: inline-flex; align-items: center; gap: 8px; background: var(--live-card); border: 1px solid var(--live-line); color: inherit; text-decoration: none; padding: 9px 15px; border-radius: 999px; font-size: 13.5px; font-weight: 600; flex-shrink: 0; transition: all .15s; }
.live-back:hover { border-color: var(--live-accent); color: var(--tk-orange-2); }
.live-brand { display: flex; align-items: center; gap: 16px; min-width: 0; flex: 1; }
.live-brand-logo { flex-shrink: 0; width: 60px; height: 60px; border-radius: 14px; background: #fff; display: flex; align-items: center; justify-content: center; padding: 8px; overflow: hidden; }
.live-brand-logo img { max-width: 100%; max-height: 100%; object-fit: contain; }
.live-brand-initials { color: #1b1208; font-weight: 800; font-size: 24px; }
.live-brand-line { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.live-sector { font-family: var(--tk-mono); font-size: 11px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--live-faint); }
.live-dates { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--live-muted); }
.live-title { font-size: clamp(27px, 1.9vw, 40px); font-weight: 800; letter-spacing: -0.025em; margin: 5px 0 0; line-height: 1.05; color: #fff; }
/* Badge de statut réutilisé dans l'en-tête : ses couleurs reposent sur des tokens
   .tk-app (absents ici) → on les surcharge pour le thème sombre studio. */
.tk-live .tk-aff-status { background: var(--live-chip); color: var(--live-muted); border: 1px solid var(--live-line); }
.tk-live .tk-aff-status-live { background: color-mix(in srgb, var(--tk-ok) 20%, transparent); color: #6fe0a6; border-color: transparent; }
.tk-live .tk-aff-status-upcoming { background: color-mix(in srgb, var(--tk-orange) 20%, transparent); color: var(--tk-orange-2); border-color: transparent; }
.tk-live .tk-aff-status-past { background: var(--live-chip); color: var(--live-faint); }

/* Onglets */
.live-tabs { display: flex; gap: 4px; margin-top: 16px; border-bottom: 1px solid var(--live-line); }
.live-tabs button { display: inline-flex; align-items: center; gap: 9px; background: none; border: none; color: var(--live-muted); padding: 11px 20px; font-size: 15px; font-weight: 600; cursor: pointer; position: relative; border-radius: 10px 10px 0 0; transition: color .15s; }
.live-tabs button:hover { color: #fff; }
.live-tabs button.on { color: #fff; }
.live-tabs button.on::after { content: ''; position: absolute; left: 12px; right: 12px; bottom: -1px; height: 3px; border-radius: 3px; background: var(--live-gold-grad); }
.live-tabs button em { font-style: normal; font-family: var(--tk-mono); font-size: 11px; background: var(--live-chip); padding: 2px 8px; border-radius: 999px; color: var(--live-muted); }

/* Minuteur de session */
.live-session { display: flex; align-items: stretch; flex-wrap: wrap; margin-top: 12px; padding: 3px 6px; border: 1px solid var(--live-line); border-radius: 14px; background: var(--live-card); transition: background .3s, border-color .3s; }
.live-session-timer { flex: 1 1 380px; display: flex; align-items: center; gap: 10px; min-width: 0; padding: 4px 10px; }
.live-session-timer > .live-session-btn { margin-left: auto; }
.live-session-divider { width: 1px; align-self: stretch; background: var(--live-line); margin: 5px 0; flex-shrink: 0; }
.live-session-sound { flex: 1 1 360px; display: flex; align-items: center; gap: 10px; min-width: 0; padding: 4px 10px; }
.live-session-sound > .live-test { margin-left: auto; }
.live-dur-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.live-dur-chips button { border: 1px solid var(--live-line); background: transparent; color: var(--live-muted); padding: 6px 11px; border-radius: 999px; font-size: 12.5px; font-weight: 600; cursor: pointer; transition: all .15s; }
.live-dur-chips button:hover { color: #fff; border-color: var(--live-accent); }
.live-dur-chips button.on { background: var(--live-accent); color: #1b1208; border-color: transparent; }
.live-free-input { width: 72px; background: rgba(255,255,255,.08); border: 1.5px solid var(--live-line); border-radius: 999px; color: #fff; font-size: 12.5px; font-weight: 700; padding: 6px 10px; text-align: center; }
.live-free-input:focus { outline: 2px solid var(--live-accent); outline-offset: 1px; border-color: var(--live-accent); }
.live-session-btn { display: inline-flex; align-items: center; gap: 8px; border: none; border-radius: 10px; padding: 10px 15px; font-size: 13px; font-weight: 700; cursor: pointer; white-space: nowrap; flex-shrink: 0; transition: transform .15s, filter .15s; }
.live-session-btn:hover { transform: translateY(-1px); }
.live-session-btn.start { background: var(--tk-ok); color: #fff; }
.live-session-btn.start:hover { filter: brightness(1.08); }
.live-session-btn.stop { background: transparent; color: var(--live-muted); border: 1.5px solid var(--live-line); }
.live-session-btn.stop:hover { border-color: var(--tk-alert); color: var(--tk-alert); }
.live-timer-block { display: flex; flex-direction: column; gap: 1px; }
.live-timer { font-size: clamp(22px, 1.5vw, 32px); font-weight: 800; letter-spacing: -0.01em; line-height: 1; font-variant-numeric: tabular-nums; color: #fff; }
.live-timer-sub { font-size: 12px; color: var(--live-muted); }
.live-session.alert { background: color-mix(in srgb, var(--tk-alert) 12%, transparent); border-color: color-mix(in srgb, var(--tk-alert) 50%, transparent); animation: liveSessionPulse 1.5s ease infinite; }
.live-session.alert .live-timer, .live-session.alert .live-timer-sub { color: var(--tk-alert); font-weight: 700; }
@keyframes liveSessionPulse { 0%,100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--tk-alert) 0%, transparent); } 50% { box-shadow: 0 0 0 4px color-mix(in srgb, var(--tk-alert) 18%, transparent); } }

/* Son promo (rouge) */
.live-sound { display: flex; align-items: center; gap: 10px; }
.live-sound-btn { display: inline-flex; align-items: center; gap: 8px; border: none; border-radius: 999px; padding: 10px 17px; font-size: 13.5px; font-weight: 700; color: #fff; cursor: pointer; white-space: nowrap; background: linear-gradient(180deg, #f1463f 0%, #d61f1f 100%); box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 4px 16px rgba(214,31,31,.42); transition: transform .14s, filter .14s; }
.live-sound-btn:hover { transform: translateY(-1px); filter: brightness(1.06); }
.live-sound-btn.armed { animation: liveSoundPulse 1.5s ease infinite; }
@keyframes liveSoundPulse { 0%,100% { box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 4px 16px rgba(214,31,31,.42); } 50% { box-shadow: inset 0 1px 0 rgba(255,255,255,.3), 0 4px 26px rgba(214,31,31,.75); } }
.live-sound-live { display: inline-flex; align-items: center; gap: 5px; font-family: var(--tk-mono); font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; background: rgba(255,255,255,.22); padding: 2px 7px; border-radius: 999px; }
.live-sound-livedot { width: 5px; height: 5px; border-radius: 999px; background: #fff; animation: liveDot 1.4s ease infinite; }
@keyframes liveDot { 0%,100% { opacity: 1; } 50% { opacity: .3; } }
.live-sound-chips { display: flex; gap: 4px; }
.live-sound-chips button { border: 1px solid var(--live-line); background: transparent; color: var(--live-muted); padding: 5px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; cursor: pointer; transition: all .14s; }
.live-sound-chips button.on { background: #d61f1f; color: #fff; border-color: transparent; }
.live-test { display: inline-flex; align-items: center; gap: 7px; background: transparent; border: 1px dashed var(--live-line); color: var(--live-muted); padding: 9px 14px; border-radius: 999px; font-size: 12.5px; font-weight: 600; cursor: pointer; transition: all .15s; }
.live-test:hover { border-color: #d61f1f; border-style: solid; color: #ff6a2b; }

/* Contenu + grille produits */
.live-content { flex: 1; min-height: 0; display: flex; flex-direction: column; overflow: auto; }
.live-grid { --live-card-w: calc((100% - 28px) / 3); display: grid; gap: 14px; margin-top: 16px; justify-content: center; align-content: center; flex: 1; min-height: 0; grid-template-columns: repeat(auto-fit, var(--live-card-w)); grid-auto-rows: var(--live-card-h, 1fr); }
.live-prod { background: var(--live-card); border: 1px solid var(--live-line); border-radius: 18px; overflow: hidden; cursor: pointer; position: relative; display: flex; flex-direction: column; height: 100%; min-height: 0; transition: transform .2s, border-color .2s, box-shadow .2s; }
.live-prod:hover, .live-prod:focus-visible { transform: translateY(-3px); border-color: color-mix(in srgb, var(--live-accent) 50%, var(--live-line)); box-shadow: 0 10px 30px rgba(0,0,0,.4); outline: none; }
.live-prod-num { position: absolute; top: 10px; left: 12px; font-family: var(--tk-mono); font-size: 13px; font-weight: 800; color: var(--live-accent); z-index: 2; }
.live-prod-zoom { position: absolute; top: 10px; right: 12px; color: var(--live-faint); font-size: 14px; opacity: 0; transition: opacity .2s; }
.live-prod:hover .live-prod-zoom { opacity: 1; }
.live-prod-photo { flex: none; height: 40%; display: grid; place-items: center; padding: 12px 14px 0; }
.live-circle { height: 100%; aspect-ratio: 1; max-width: 100%; border-radius: 999px; overflow: hidden; background: radial-gradient(circle at 50% 38%, #fbf9f6, #e8e1d7); box-shadow: 0 10px 34px rgba(0,0,0,.45), inset 0 0 0 1px rgba(255,255,255,.06); display: flex; align-items: center; justify-content: center; }
.live-circle img { width: 100%; height: 100%; object-fit: cover; }
.live-circle-ph { color: #b9a89c; font-size: 40px; }
.live-prod-body { padding: 6px 16px 16px; display: flex; flex-direction: column; gap: 8px; min-height: 0; overflow: hidden; }
.live-prod-titlerow { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.live-prod-name { font-size: clamp(16px, 1.05vw, 22px); font-weight: 700; margin: 0; color: #fff; line-height: 1.15; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; overflow: hidden; }
.live-prod-pricewrap { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; flex-shrink: 0; }
.live-prod-price { font-weight: 800; font-size: clamp(15px, 1vw, 20px); color: #fff; white-space: nowrap; }
.live-prod-comm { display: inline-flex; align-items: center; gap: 2px; font-family: var(--tk-mono); font-size: 11px; font-weight: 700; color: var(--tk-orange-2); white-space: nowrap; }
.live-benefits { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.live-benefits li { display: flex; align-items: baseline; gap: 7px; font-size: clamp(13px, 0.9vw, 16px); color: var(--live-muted); }
.live-benefits li .bi { color: var(--tk-ok); font-size: 12px; }
.live-benefits-more { color: var(--tk-orange-2); font-size: clamp(12px, 0.85vw, 15px); font-weight: 600; }
.live-caracs { display: flex; flex-wrap: wrap; gap: 5px; margin-top: auto; }
.live-carac { font-family: var(--tk-mono); font-size: 10.5px; font-weight: 600; letter-spacing: .03em; color: var(--live-muted); background: var(--live-chip); border: 1px solid var(--live-line); padding: 3px 8px; border-radius: 999px; }
.live-carac.more { color: var(--tk-orange-2); border-color: color-mix(in srgb, var(--live-accent) 40%, transparent); }

/* Onglet Brief */
.live-brief-panel { display: grid; grid-template-columns: 1fr 280px; gap: 20px; margin-top: 18px; }
.live-brief-card { background: var(--live-card); border: 1px solid var(--live-line); border-radius: 18px; padding: 24px; }
.live-col-label { display: inline-flex; align-items: center; gap: 8px; font-family: var(--tk-mono); font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--live-faint); margin-bottom: 12px; }
.live-brief-text { font-size: clamp(16px, 1vw, 21px); line-height: 1.6; color: #ece3da; margin: 0; white-space: pre-line; }
.live-brief-aside { display: flex; flex-direction: column; gap: 14px; }
.live-brief-meta { display: flex; flex-direction: column; gap: 2px; padding-bottom: 12px; border-bottom: 1px solid var(--live-line); }
.live-bm-label { font-family: var(--tk-mono); font-size: 10px; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; color: var(--live-faint); }
.live-bm-val { font-size: 15px; font-weight: 600; color: #fff; }
.live-bm-val.accent { color: var(--tk-orange-2); }

/* Focus plein écran */
.live-focus { position: fixed; inset: 0; z-index: 300; background: radial-gradient(120% 90% at 50% -10%, #1c1113 0%, #070405 65%); display: flex; flex-direction: column; padding: 22px 30px 26px; }
.live-focus[hidden] { display: none; }
.live-focus-top { display: flex; align-items: center; justify-content: space-between; }
.live-focus-count { font-family: var(--tk-mono); font-size: 13px; color: var(--live-muted); letter-spacing: .04em; }
.live-focus-close { display: inline-flex; align-items: center; gap: 7px; background: var(--live-card); border: 1px solid var(--live-line); color: #fff; padding: 9px 15px; border-radius: 999px; font-size: 13.5px; font-weight: 600; cursor: pointer; }
.live-focus-close:hover { border-color: var(--tk-alert); color: var(--tk-alert); }
.live-focus-brief { margin-top: 14px; background: color-mix(in srgb, var(--live-accent) 10%, transparent); border: 1px solid color-mix(in srgb, var(--live-accent) 30%, transparent); border-radius: 14px; padding: 14px 18px; }
.live-focus-brief[hidden] { display: none; }
.live-brief-kicker { display: inline-flex; align-items: center; gap: 7px; font-family: var(--tk-mono); font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: var(--tk-orange-2); }
.live-focus-brief p { margin: 6px 0 0; font-size: 17px; line-height: 1.4; color: #fff; }
.live-focus-body { flex: 1; min-height: 0; display: grid; grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr); align-items: center; gap: clamp(24px, 4vw, 60px); margin-top: 14px; position: relative; cursor: pointer; }
.live-nav { position: absolute; top: 50%; transform: translateY(-50%); z-index: 2; width: 52px; height: 52px; border-radius: 999px; background: var(--live-card); border: 1px solid var(--live-line); color: #fff; font-size: 22px; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: all .15s; }
.live-nav:hover { background: var(--live-accent); color: #1b1208; border-color: transparent; transform: translateY(-50%) scale(1.06); }
.live-nav.prev { left: -8px; }
.live-nav.next { right: -8px; }
.live-focus-media { height: 100%; max-height: 64vh; display: flex; align-items: center; justify-content: center; }
.live-focus-media img { max-width: 100%; max-height: 100%; object-fit: contain; border-radius: 20px; filter: drop-shadow(0 30px 60px rgba(0,0,0,.35)); }
.live-focus-info { min-width: 0; }
.live-focus-dots { display: flex; gap: 9px; justify-content: center; margin-top: 16px; }
.live-focus-dots button { width: 9px; height: 9px; border-radius: 999px; border: none; background: var(--live-line); cursor: pointer; padding: 0; transition: all .15s; }
.live-focus-dots button.on { background: var(--live-accent); width: 26px; }
.live-focus-titlerow { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; flex-wrap: wrap; }
.live-focus-info h2 { font-size: clamp(30px, 2.1vw, 46px); font-weight: 800; margin: 0; color: #fff; letter-spacing: -0.02em; }
.live-focus-pricewrap { display: flex; flex-direction: column; align-items: flex-end; gap: 5px; }
.live-focus-price { font-size: clamp(24px, 1.6vw, 34px); font-weight: 800; color: #fff; }
.live-focus-comm { font-family: var(--tk-mono); font-size: 13px; font-weight: 700; color: var(--tk-orange-2); }
.live-focus-gain { display: inline-flex; align-items: center; gap: 6px; font-size: 14px; font-weight: 700; color: var(--tk-ok); }
.live-focus-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 26px; margin-top: 22px; }
.live-focus-benefits, .live-focus-caracs { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.live-focus-benefits li { display: flex; align-items: baseline; gap: 9px; font-size: clamp(16px, 1vw, 21px); color: #ece3da; }
.live-focus-benefits li .bi { color: var(--tk-ok); }
.live-focus-caracs li { font-size: clamp(15px, 0.95vw, 19px); color: var(--live-muted); padding-left: 14px; position: relative; }
.live-focus-caracs li::before { content: '—'; position: absolute; left: 0; color: var(--live-faint); }

/* Feu plein écran */
.live-fire { position: fixed; inset: 0; z-index: 400; pointer-events: none; overflow: hidden; }
.live-fire-glyph { position: absolute; color: #ff5722; filter: drop-shadow(0 0 30px rgba(255,90,20,.85)) drop-shadow(0 0 8px rgba(255,180,40,.9)); opacity: 0; will-change: transform, opacity; }
.live-fire-glyph.a { top: 32%; font-size: 30vh; animation: liveFireFly 1.5s cubic-bezier(0.4,0,0.2,1) both; }
.live-fire-glyph.b { top: 12%; font-size: 17vh; color: #ff8a1f; animation: liveFireFly 1.7s cubic-bezier(0.4,0,0.2,1) .12s both; }
.live-fire-glyph.c { top: 58%; font-size: 22vh; color: #ff3b1f; animation: liveFireFly 1.6s cubic-bezier(0.4,0,0.2,1) .22s both; }
@keyframes liveFireFly { 0% { transform: translateX(115vw) scale(.6) rotate(8deg); opacity: 0; } 18% { opacity: 1; } 82% { opacity: 1; } 100% { transform: translateX(-130vw) scale(1.05) rotate(-8deg); opacity: 0; } }

/* Modal de fin de live (retour d'expérience) — thème studio sombre. */
.tk-live-feedback {
    border: none; border-radius: 18px; padding: 26px 28px; width: min(520px, 92vw);
    color: #f5efe8; background: radial-gradient(120% 90% at 50% -10%, #1c1214 0%, #120c0d 70%);
    box-shadow: 0 24px 70px rgba(0,0,0,.55); border: 1px solid var(--live-line, rgba(255,220,200,.12));
}
.tk-live-feedback::backdrop { background: rgba(5, 3, 4, .72); }
.tklf-title { font-size: 22px; font-weight: 800; margin: 0 0 4px; color: #fff; }
.tklf-sub { font-size: 14px; color: var(--live-muted, #c9bdb6); margin: 0 0 18px; }
.tklf-label { display: block; font-size: 13px; font-weight: 600; color: var(--live-muted, #c9bdb6); margin: 14px 0 6px; }
.tklf-input, .tklf-textarea {
    width: 100%; background: rgba(255,255,255,.06); border: 1px solid var(--live-line, rgba(255,220,200,.12));
    border-radius: 10px; padding: 11px 14px; color: #fff; font-size: 16px; font-family: inherit;
}
.tklf-input:focus, .tklf-textarea:focus { outline: 2px solid var(--tk-orange, #df8a0c); outline-offset: 1px; }
.tklf-emojis { display: flex; gap: 10px; }
.tklf-emoji {
    flex: 1; display: flex; flex-direction: column; align-items: center; gap: 10px;
    background: rgba(255,255,255,.05); border: 1.5px solid var(--live-line, rgba(255,220,200,.12));
    border-radius: 12px; padding: 12px 6px; font-size: 26px; cursor: pointer; color: var(--live-muted, #c9bdb6);
    transition: border-color .15s, background .15s;
}
.tklf-emoji span { font-size: 12px; font-weight: 600; }
.tklf-emoji:hover { border-color: var(--tk-orange, #df8a0c); }
.tklf-emoji.on { border-color: var(--tk-orange, #df8a0c); background: color-mix(in srgb, var(--tk-orange, #df8a0c) 18%, transparent); color: #fff; }
.tklf-error { color: #ff6a6a; font-size: 13px; font-weight: 600; min-height: 18px; margin: 10px 0 0; }
.tklf-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 18px; }
.tklf-btn { border: none; border-radius: 10px; padding: 11px 18px; font-size: 14px; font-weight: 700; cursor: pointer; }
.tklf-btn.ghost { background: transparent; color: var(--live-muted, #c9bdb6); border: 1.5px solid var(--live-line, rgba(255,220,200,.12)); }
.tklf-btn.primary { background: var(--tk-ok, #1f9d63); color: #fff; }
.tklf-btn.primary:hover { filter: brightness(1.08); }
.tklf-thanks { text-align: center; padding: 20px 0 8px; color: #fff; }
.tklf-thanks .bi { font-size: 40px; color: var(--tk-ok, #1f9d63); }
.tklf-thanks p { margin: 10px 0 0; font-size: 16px; font-weight: 600; }
.tklf-agency-notice { display: flex; align-items: flex-start; gap: 10px; background: rgba(255,210,0,.10); border: 1.5px solid rgba(255,210,0,.32); border-radius: 10px; padding: 12px 14px; margin-bottom: 18px; color: #ffd966; font-size: 13px; font-weight: 600; line-height: 1.45; }
.tklf-agency-notice .bi { font-size: 18px; flex-shrink: 0; margin-top: 1px; }
.tklf-confirm-step { text-align: center; padding: 8px 0; color: #fff; }
.tklf-confirm-step .bi { font-size: 38px; color: #ffd966; }
.tklf-confirm-title { font-size: 18px; font-weight: 800; margin: 12px 0 8px; color: #fff; }
.tklf-confirm-text { font-size: 14px; color: var(--live-muted, #c9bdb6); margin: 0 0 4px; line-height: 1.55; }

/* Bouton « Accéder au LIVE » sur la carte catalogue */
/* Bouton « Accéder au LIVE » : outline rouge + icône rouge, plus visible (retour 5.2). */
.tk-aff-live-link {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: transparent;
    border: 1.5px solid var(--tk-danger);
    color: var(--tk-danger);
}
.tk-aff-live-link i { color: var(--tk-danger); }
.tk-aff-live-link:hover { background: var(--tk-danger); color: #fff; }
.tk-aff-live-link:hover i { color: #fff; }
.tk-aff-live-link.disabled { opacity: .4; cursor: not-allowed; pointer-events: none; }
.live-session-not-active { display: flex; align-items: center; gap: 8px; color: var(--live-muted, #c9bdb6); font-size: 13px; font-weight: 600; margin: 4px 0 8px; }

/* Responsive : mobile → 1 colonne, scroll naturel */
@media (max-width: 860px), (max-height: 520px) {
    .tk-live { position: static; height: auto; min-height: 100dvh; overflow: visible; }
    .live-content { overflow: visible; }
    .live-grid { grid-template-columns: 1fr !important; grid-auto-rows: auto !important; align-content: start; }
    .live-prod { height: auto; min-height: 0; }
    .live-prod-photo { height: 230px; }
    .live-focus-body { grid-template-columns: 1fr; align-items: start; gap: 14px; overflow: auto; }
    .live-focus-media { max-height: 38vh; }
    .live-focus-cols { grid-template-columns: 1fr; }
    .live-brief-panel { grid-template-columns: 1fr; }
}
@keyframes liveFireFade { 0% { opacity: 0; transform: none; } 30% { opacity: 1; transform: none; } 100% { opacity: 0; transform: none; } }
@media (prefers-reduced-motion: reduce) {
    /* Le feu : fondu statique sans balayage horizontal (pas de gros mouvement). */
    .live-fire-glyph { animation: liveFireFade .8s ease both !important; }
    /* Coupe toutes les pulsations infinies du thème studio. */
    .live-session.alert, .live-sound-btn.armed,
    .live-sound-livedot, .tk-live .tk-aff-livedot { animation: none !important; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   ESPACE MARQUE — brand space
   ═══════════════════════════════════════════════════════════════════════════ */

/* Page wrapper */
.container-fluid.py-3 { max-width: 1140px; margin: 0 auto; }

/* ── Header marque ──────────────────────────────────────────────────────── */
.bspace-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    padding: 24px 28px;
    flex-wrap: wrap;
}

.bspace-header-identity {
    display: flex;
    align-items: center;
    gap: 16px;
}

.bspace-avatar {
    width: 52px;
    height: 52px;
    border-radius: 12px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 22px;
    font-weight: 700;
    color: #fff;
    flex-shrink: 0;
    letter-spacing: -0.5px;
}

.bspace-identity-top {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.bspace-brand-name {
    font-size: 1.375rem;
    font-weight: 700;
    margin: 0;
    line-height: 1.2;
    color: var(--tk-ink);
}

.bspace-badge-active {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 3px 9px;
    border-radius: 999px;
    font-size: 0.625rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    color: var(--tk-ok);
    background: var(--tk-ok-soft);
    border: 1px solid color-mix(in srgb, var(--tk-ok), #fff 60%);
    white-space: nowrap;
}

.bspace-badge-dot {
    width: 6px;
    height: 6px;
    border-radius: 50%;
    background: var(--tk-ok);
    flex-shrink: 0;
}

.bspace-brand-sub {
    margin: 4px 0 0;
    font-size: 0.8125rem;
    color: var(--tk-muted);
}

/* KPIs */
.bspace-kpis {
    display: flex;
    align-items: center;
    gap: 0;
}

.bspace-kpi {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    padding: 0 28px;
}
.bspace-kpi:first-child { padding-left: 0; }

.bspace-kpi-sep {
    width: 1px;
    height: 48px;
    background: var(--tk-line);
}

.bspace-kpi-label {
    font-size: 0.625rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    color: var(--tk-muted);
    text-transform: uppercase;
    margin-bottom: 2px;
}

.bspace-kpi-value {
    font-size: 1.75rem;
    font-weight: 800;
    color: var(--tk-ink);
    line-height: 1;
    letter-spacing: -0.03em;
}

.bspace-kpi-unit {
    font-size: 1rem;
    font-weight: 600;
}

.bspace-kpi-sub {
    font-size: 0.75rem;
    color: var(--tk-muted);
    margin-top: 3px;
}

/* ── Onglets ────────────────────────────────────────────────────────────── */
.bspace-tabs {
    display: flex;
    gap: 0;
    border-bottom: 1px solid var(--tk-line);
    margin-bottom: 24px;
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
}
.bspace-tabs::-webkit-scrollbar { display: none; }

.bspace-tab {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 11px 18px;
    font-size: 0.875rem;
    font-weight: 500;
    color: var(--tk-muted);
    text-decoration: none;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    white-space: nowrap;
    transition: color 0.15s, border-color 0.15s;
}
.bspace-tab:hover { color: var(--tk-ink); }
.bspace-tab.is-active {
    color: var(--tk-ink);
    border-bottom-color: var(--tk-ink);
    font-weight: 600;
}

.bspace-tab-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 5px;
    border-radius: 999px;
    font-size: 0.6875rem;
    font-weight: 700;
    background: var(--tk-hover);
    color: var(--tk-muted);
}
.bspace-tab-badge--alert {
    background: #fdeaf0;
    color: #c81e4e;
}
.bspace-tab.is-active .bspace-tab-badge { background: var(--tk-ink); color: #fff; }
.bspace-tab.is-active .bspace-tab-badge--alert { background: #c81e4e; color: #fff; }

/* ── Dashboard layout ───────────────────────────────────────────────────── */
.bspace-dashboard {
    display: grid;
    grid-template-columns: 1fr 340px;
    gap: 20px;
    align-items: start;
}

.bspace-section { padding: 20px 24px; }

.bspace-section-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 16px;
    gap: 8px;
}

.bspace-section-title {
    font-size: 0.9375rem;
    font-weight: 700;
    margin: 0;
    color: var(--tk-ink);
}

.bspace-section-sub {
    font-size: 0.75rem;
    color: var(--tk-muted);
}

.bspace-section-link {
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--tk-muted);
    text-decoration: none;
    white-space: nowrap;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}
.bspace-section-link:hover { color: var(--tk-ink); }

/* Upcoming lives list */
.bspace-lives-list { display: flex; flex-direction: column; gap: 4px; }

.bspace-live-row {
    display: flex;
    align-items: center;
    gap: 14px;
    padding: 12px 14px;
    border: 1px solid var(--tk-line);
    border-radius: 10px;
    cursor: pointer;
    transition: background 0.12s;
    text-decoration: none;
    color: inherit;
}
.bspace-live-row:hover { background: var(--tk-hover); }

.bspace-live-bar {
    width: 4px;
    height: 38px;
    border-radius: 3px;
    flex-shrink: 0;
}

.bspace-live-date {
    display: flex;
    flex-direction: column;
    align-items: center;
    width: 34px;
    flex-shrink: 0;
}

.bspace-live-day-name {
    font-size: 0.625rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    color: var(--tk-muted);
    text-transform: uppercase;
}

.bspace-live-day-num {
    font-size: 1.25rem;
    font-weight: 800;
    color: var(--tk-ink);
    line-height: 1.1;
    letter-spacing: -0.02em;
}

.bspace-live-info {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.bspace-live-title {
    font-size: 0.875rem;
    font-weight: 600;
    color: var(--tk-ink);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.bspace-live-meta {
    font-size: 0.75rem;
    color: var(--tk-muted);
}

.bspace-live-chevron {
    color: var(--tk-faint);
    font-size: 0.875rem;
    flex-shrink: 0;
}

/* Empty state */
.bspace-empty {
    display: flex;
    flex-direction: column;
    align-items: center;
    padding: 24px 16px;
    gap: 8px;
}
.bspace-empty-icon { font-size: 1.75rem; color: var(--tk-faint); }
.bspace-empty-text { font-size: 0.8125rem; color: var(--tk-muted); margin: 0; text-align: center; }

/* Quick access tools */
.bspace-tools-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}

.bspace-tool-card {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 14px 16px;
    border: 1px solid var(--tk-line);
    border-radius: 10px;
    text-decoration: none;
    color: var(--tk-ink);
    transition: background 0.12s, border-color 0.12s;
}
.bspace-tool-card:hover { background: var(--tk-hover); border-color: var(--tk-ink); color: var(--tk-ink); }

.bspace-tool-icon {
    font-size: 1.125rem;
    color: var(--tk-muted);
    flex-shrink: 0;
}

.bspace-tool-name {
    display: block;
    font-size: 0.8125rem;
    font-weight: 600;
    color: var(--tk-ink);
}

.bspace-tool-sub {
    display: block;
    font-size: 0.7rem;
    color: var(--tk-muted);
}

.bspace-tool-ext {
    margin-left: auto;
    font-size: 0.7rem;
    color: var(--tk-faint);
    flex-shrink: 0;
}

/* ── Sidebar ────────────────────────────────────────────────────────────── */

/* Propositions card */
.bspace-card-proposals {
    background: #fef9ec;
    border: 1px solid #f5d87b;
    border-radius: 12px;
    padding: 18px 20px;
    margin-bottom: 16px;
}

.bspace-proposals-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
}

.bspace-proposals-icon {
    color: #b27a08;
    font-size: 1rem;
}

.bspace-proposals-title {
    font-size: 0.875rem;
    font-weight: 700;
    margin: 0;
    color: #6b4900;
}

.bspace-proposals-text {
    font-size: 0.8125rem;
    color: #7a5500;
    margin-bottom: 14px;
    line-height: 1.5;
}

.bspace-proposals-cta {
    display: block;
    width: 100%;
    padding: 11px 16px;
    background: #1b1d22;
    color: #fff;
    text-align: center;
    border-radius: 8px;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-decoration: none;
    transition: background 0.12s;
}
.bspace-proposals-cta:hover { background: #000; color: #fff; }
/* `.tk-app a` (couleur d'accent globale) a une spécificité supérieure (0,1,1) et
   repeindrait le libellé du CTA en sombre sur fond sombre : on rétablit le blanc
   avec une spécificité qui l'emporte. */
.tk-app a.bspace-proposals-cta,
.tk-app a.bspace-proposals-cta:hover { color: #fff; }

/* Animateurs list */
.bspace-hosts-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 22px;
    height: 22px;
    padding: 0 6px;
    border-radius: 999px;
    font-size: 0.6875rem;
    font-weight: 700;
    background: var(--tk-hover);
    color: var(--tk-muted);
}

.bspace-hosts-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.bspace-host-row {
    display: flex;
    align-items: center;
    gap: 11px;
    padding: 9px 6px;
    border-radius: 8px;
    transition: background 0.12s;
    text-decoration: none;
    color: inherit;
}
.bspace-host-row:hover { background: var(--tk-hover); }

.bspace-host-avatar {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.9rem;
    font-weight: 700;
    color: #fff;
    flex-shrink: 0;
    object-fit: cover;
}

.bspace-host-name {
    font-size: 0.8125rem;
    font-weight: 500;
    color: var(--tk-ink);
    flex: 1;
    min-width: 0;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

.bspace-host-meta {
    display: flex;
    align-items: center;
    gap: 6px;
    font-size: 0.75rem;
    color: var(--tk-muted);
    white-space: nowrap;
}

.bspace-host-cal { font-size: 0.8rem; }

/* ── Responsive ─────────────────────────────────────────────────────────── */
@media (max-width: 900px) {
    .bspace-dashboard { grid-template-columns: 1fr; }
    .bspace-sidebar { order: -1; }
    .bspace-kpis { flex-wrap: wrap; gap: 16px; }
    .bspace-kpi-sep { display: none; }
    .bspace-kpi { padding: 0; }
    .bspace-header { flex-direction: column; align-items: flex-start; }
}

@media (max-width: 600px) {
    .bspace-header { padding: 18px 16px; }
    .bspace-tools-grid { grid-template-columns: 1fr; }
}

/* ───────────── Planning espace marque ───────────── */

/* Toggle Semaine / Liste */
.tk-cal-viewtoggle { display:inline-flex; background:var(--tk-surface-2,#f1f1f5); border-radius:10px; padding:3px; gap:2px; }
.tk-cal-viewtoggle button { border:0; background:transparent; font:inherit; font-size:.85rem; font-weight:600;
  color:var(--tk-muted,#6a6a73); padding:6px 12px; border-radius:8px; cursor:pointer; display:inline-flex; align-items:center; gap:5px; }
.tk-cal-viewtoggle button.is-on { background:#fff; color:var(--tk-ink,#23232a); box-shadow:0 1px 3px rgba(0,0,0,.1); }

/* Carte d'événement (vue semaine) — neutralise le fond FullCalendar par défaut */
.fc-timegrid-event, .fc-timegrid-event .fc-event-main { background:transparent !important; border:0 !important; box-shadow:none !important; padding:0 !important; }
.fc-timegrid-event .fc-event-main-frame { height:100%; }
.tk-cal-ev { --evc:var(--tk-muted,#6a6a73); display:flex; height:100%; overflow:hidden; border-radius:8px;
  background:color-mix(in srgb, var(--evc), #fff 89%);
  border:1px solid color-mix(in srgb, var(--evc), #fff 52%);
  color:color-mix(in srgb, var(--evc), #000 45%); }
.tk-cal-ev.is-live { background:color-mix(in srgb, var(--evc), #fff 82%); }
.tk-cal-ev-stripe { width:4px; flex:none; background:var(--evc); }
.tk-cal-ev-b { padding:4px 7px; min-width:0; overflow:hidden; }
.tk-cal-ev-time { font-size:11.5px; font-weight:700; line-height:1.25; }
.tk-cal-ev-host { display:flex; align-items:center; gap:5px; font-size:12.5px; font-weight:600; line-height:1.25; margin-top:1px; min-width:0; }
.tk-cal-ev-hostname { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.tk-cal-ev-dot { width:8px; height:8px; border-radius:50%; background:var(--evc); flex:none; }
.tk-cal-ev-dot.is-live { animation:tk-cal-pulse 1.4s ease-in-out infinite; }
@keyframes tk-cal-pulse { 0%,100%{ box-shadow:0 0 0 0 color-mix(in srgb,var(--evc),transparent 40%);} 50%{ box-shadow:0 0 0 4px color-mix(in srgb,var(--evc),transparent 100%);} }
.tk-cal-ev-meta { display:flex; align-items:center; gap:4px; font-size:10.5px; font-weight:600; opacity:.85; margin-top:2px; white-space:nowrap; }
.tk-cal-ev-loc { display:inline-flex; align-items:center; }
.tk-cal-ev-loc svg { display:block; }
/* Terminé : classe ajoutée nativement par FullCalendar */
.fc-event-past .tk-cal-ev { background:var(--tk-surface-2,#f1f1f5); border-color:var(--tk-line,#e6e6ea); color:var(--tk-muted,#6a6f78); }
.fc-event-past .tk-cal-ev-stripe, .fc-event-past .tk-cal-ev-dot { background:var(--tk-line-strong,#c8c8d0); }

/* Flèches prev/next : la police d'icônes embarquée de FullCalendar (data: URI
   « fcicons ») est bloquée par la CSP (font-src 'self'). On rend les chevrons
   via Bootstrap Icons (déjà servi en 'self'), cohérent avec le reste de l'UI. */
.tk-app .fc-icon-chevron-left::before,
.tk-app .fc-icon-chevron-right::before { font-family:"bootstrap-icons" !important; font-size:1rem; line-height:1; vertical-align:-.05em; }
.tk-app .fc-icon-chevron-left::before { content:"\f284"; }
.tk-app .fc-icon-chevron-right::before { content:"\f285"; }

/* Vue liste par statut */
.tk-cal-list { display:flex; flex-direction:column; gap:18px; }
.tk-cal-list-grp-h { display:flex; align-items:center; gap:8px; margin-bottom:8px; }
.tk-cal-list-grp-h .ttl { font-size:.95rem; font-weight:700; color:var(--tk-ink,#23232a); }
.tk-cal-list-grp-h .cnt { font-size:.72rem; font-weight:600; color:var(--tk-muted,#6a6a73);
  background:var(--tk-surface,#fff); border:1px solid var(--tk-line,#e6e6ea); border-radius:999px; padding:1px 8px; }
.tk-cal-list-card { display:flex; background:#fff; border:1px solid var(--tk-line,#e6e6ea); border-radius:10px;
  overflow:hidden; cursor:pointer; transition:box-shadow .15s; }
.tk-cal-list-card:hover { box-shadow:0 3px 12px rgba(0,0,0,.08); }
.tk-cal-list-card + .tk-cal-list-card { margin-top:6px; }
.tk-cal-list-card .bar { width:4px; flex:none; background:var(--evc,#c8c8d0); }
.tk-cal-list-card.is-past .bar { background:var(--tk-line-strong,#c8c8d0); }
.tk-cal-list-card.is-past .tk-cal-av,
.tk-cal-list-card.is-past .tk-cal-thumb { filter:grayscale(1); opacity:.8; }
.tk-cal-list-card.is-past .tk-cal-list-when,
.tk-cal-list-card.is-past .tk-cal-list-name { color:var(--tk-muted,#6a6f78); }
.tk-cal-list-cb { padding:9px 12px; flex:1; min-width:0; }
.tk-cal-list-top { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.tk-cal-list-when { font-size:.8rem; font-weight:600; color:var(--tk-ink,#23232a); text-transform:capitalize; }
.tk-cal-list-mid { display:flex; align-items:center; gap:10px; margin-top:7px; }
.tk-cal-av { width:30px; height:30px; border-radius:50%; flex:none; object-fit:cover; color:#fff;
  font-size:11px; font-weight:700; display:flex; align-items:center; justify-content:center; background:var(--evc,#6a6a73); }
.tk-cal-list-name { font-size:.85rem; font-weight:600; color:var(--tk-ink,#23232a); }
.tk-cal-list-sub { font-size:.75rem; color:var(--tk-muted,#6a6a73); display:flex; align-items:center; gap:5px; flex-wrap:wrap; }
.tk-cal-list-thumbs { margin-left:auto; display:flex; gap:3px; }
.tk-cal-thumb { width:28px; height:28px; border-radius:5px; object-fit:cover; background:var(--tk-surface-2,#ececf1); border:1px solid rgba(0,0,0,.05); }
.tk-cal-pill { font-size:.62rem; font-weight:700; text-transform:uppercase; letter-spacing:.03em; padding:2px 8px; border-radius:999px; flex:none; }
.tk-cal-pill.is-live { background:#fde7ee; color:#c01f4f; }
.tk-cal-pill.is-upcoming { background:#e7f0fd; color:#1b54a8; }
.tk-cal-pill.is-past { background:#eee; color:#666; }

/* Détail enrichi (modale) */
.tk-live-detail .row-prod { display:flex; align-items:center; gap:10px; padding:7px 0; border-top:1px solid var(--tk-line,#f1f1f3); }
.tk-live-detail .row-prod:first-child { border-top:0; }
.tk-live-detail .row-prod .nm { flex:1; font-weight:600; font-size:.85rem; }
.tk-live-detail .row-prod .pr { font-weight:700; font-size:.8rem; color:var(--tk-muted,#6a6a73); }
/* Commission par produit (lives affiliation / perso). Petit badge discret a droite,
   distinct du prix. Absente des lives marque (pas de cle commission -> pas d'element). */
.tk-live-detail .row-prod .comm { flex:none; font-size:.72rem; font-weight:600; white-space:nowrap;
  color:var(--tk-muted,#6a6a73); padding:2px 8px; border-radius:999px;
  background:var(--tk-surface-2,#f7f7fa); border:1px solid var(--tk-line,#e6e6ea); }
.tk-live-detail .lbl { font-size:.72rem; font-weight:700; text-transform:uppercase; letter-spacing:.03em; color:var(--tk-muted,#9a9aa2); margin:0 0 8px; display:flex; align-items:center; gap:6px; }
.tk-live-detail .host-line { display:flex; align-items:center; gap:11px; margin-bottom:16px; }
.tk-live-detail .host-sub { font-size:.78rem; color:var(--tk-muted,#7a7a82); }
.tk-live-detail .loc-badge { display:inline-flex; align-items:center; gap:5px; font-size:.72rem; font-weight:600;
  padding:2px 9px; border-radius:999px; background:var(--tk-surface-2,#f7f7fa); border:1px solid var(--tk-line,#e6e6ea); margin-top:4px; }
.tk-live-detail .brief { font-size:.82rem; color:#55555d; line-height:1.5; background:var(--tk-surface-2,#f7f7fa); border-radius:9px; padding:10px 12px; white-space:pre-line; }
.tk-live-detail .objective { display:flex; align-items:center; gap:10px; background:#fff5e8; border:1px solid #f6dcb6; border-radius:10px; padding:10px 12px; margin-bottom:16px; }
.tk-live-detail .objective .num { font-size:1.1rem; font-weight:800; color:#b45309; }

/* ---- Pages légales --------------------------------------------------------
   Carte de contenu centrée (la classe utilitaire .tk-shell est en margin:0 ;
   on la combine avec --contained qui re-centre, et on plafonne la largeur). */
.tk-shell.tk-legal-shell {
    max-width: 880px;
    padding-top: 36px;
    padding-bottom: 56px;
}
/* Lien « Retour » discret (override de la couleur d'accent par défaut des <a>). */
.tk-app a.tk-legal-back {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    margin-bottom: 18px;
    font-size: 14px;
    color: var(--tk-muted);
    text-decoration: none;
}
.tk-app a.tk-legal-back:hover {
    color: var(--tk-ink);
    text-decoration: none;
}

/* ---- Footer applicatif collant -------------------------------------------
   body.tk-app devient une colonne flex pleine hauteur : <main> pousse le footer
   en bas même sur les pages courtes. Le fond tk-bg du body couvre l'espace. */
body.tk-app {
    display: flex;
    flex-direction: column;
    min-height: 100vh;
}
.tk-app > main.tk-fg { flex: 1 0 auto; }
.tk-app > .tk-footer-v2 { flex-shrink: 0; }
.tk-app > .tk-topbar { flex-shrink: 0; }
/* Avec le footer collant, .tk-page n'a plus besoin de forcer 100vh (sinon double
   hauteur → scroll superflu). Restreint aux pages applicatives (.tk-app). */
.tk-app .tk-page { min-height: 0; }

/* Liens légaux du footer applicatif. */
.tk-app .tk-footer-inner {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
}
.tk-app .tk-footer-links {
    display: flex;
    flex-wrap: wrap;
    gap: 16px;
}
.tk-app .tk-footer-links a {
    color: var(--tk-muted);
    font-size: 13px;
    text-decoration: none;
}
.tk-app .tk-footer-links a:hover {
    color: var(--tk-ink);
    text-decoration: none;
}

/* ============================================================
   Tom Select : harmonisation charte Tikom (remplace le theme
   par defaut "bleu"). Accent = noir de marque (--tk-brand).
   Consomme les tokens ; s'applique partout (recherche async du
   planning + selects [data-tom-select] des formulaires).
   Charge apres tom-select.default.min.css (cf. app.js) -> gagne.
   ============================================================ */
.tk-app .ts-wrapper { background: transparent; background-image: none; min-width: 0; }
.tk-app .ts-control {
    background: rgba(var(--tk-tint-rgb), 0.04);   /* = .form-control */
    background-image: none;
    border: 1px solid var(--tk-line-strong, var(--tk-line));
    border-radius: var(--tk-radius-sm);           /* = .form-control */
    min-height: 44px;
    padding: 7px 12px;
    color: var(--tk-ink);
    font-size: 0.95rem;
    box-shadow: none;
    gap: 6px;
    align-items: center;
    transition: border-color .15s ease, box-shadow .15s ease, background .15s ease;
}
.tk-app .ts-control > input { color: var(--tk-ink); }
.tk-app .ts-control > input::placeholder { color: var(--tk-ink-mute); opacity: 1; }

/* Focus : anneau noir, pas de bleu */
.tk-app .ts-wrapper.focus .ts-control {
    border-color: var(--tk-brand);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--tk-brand), transparent 82%);
    outline: none;
}
.tk-app .ts-wrapper.disabled .ts-control { opacity: .6; }

/* Puces des valeurs selectionnees (multi) : noir de marque + croix */
.tk-app .ts-control .item {
    background: var(--tk-brand);
    color: #fff;
    border: none;
    border-radius: 999px;
    padding: 3px 4px 3px 12px;
    font-size: 0.85rem;
    line-height: 1.3;
    display: inline-flex;
    align-items: center;
    gap: 4px;
}
.tk-app .ts-control .item .remove {
    border: none;
    color: rgba(255, 255, 255, 0.7);
    padding: 0 6px;
    font-size: 1rem;
    line-height: 1;
    border-radius: 999px;
    text-decoration: none;
    transition: background .12s ease, color .12s ease;
}
.tk-app .ts-control .item .remove:hover {
    background: rgba(255, 255, 255, 0.18);
    color: #fff;
}
/* Valeur unique (single) : pas de puce noire, juste le texte */
.tk-app .ts-wrapper.single .ts-control .item {
    background: transparent;
    color: var(--tk-ink);
    padding: 0;
    border-radius: 0;
}

/* Puces multi : force le noir de marque. Le theme par defaut colore les puces
   via .ts-wrapper.multi .ts-control [data-value] (0,4,0, gradient background-image)
   et > div (0,3,1) ; ce selecteur (0,5,0) les bat et neutralise le gradient. */
.tk-app .ts-wrapper.multi .ts-control > .item {
    background: var(--tk-brand);
    background-image: none;
    color: #fff;
    border: none;
    border-radius: 999px;
}

/* Bouton "tout effacer" (single, clear_button) : croix discrete */
.tk-app .ts-wrapper .clear-button {
    color: var(--tk-ink-mute);
    opacity: 1;
    background: transparent;
    transition: color .15s ease;
}
.tk-app .ts-wrapper .clear-button:hover { color: var(--tk-ink); }

/* Menu deroulant */
.tk-app .ts-dropdown {
    background: var(--tk-surface);
    border: 1px solid var(--tk-line-strong, var(--tk-line));
    border-radius: var(--tk-radius);
    box-shadow: var(--tk-shadow);
    margin-top: 4px;
    padding: 4px;
    color: var(--tk-ink);
    overflow: hidden;
}
.tk-app .ts-dropdown .option {
    padding: 9px 12px;
    color: var(--tk-ink);
    border-radius: var(--tk-radius-sm);
}
.tk-app .ts-dropdown .option:hover,
.tk-app .ts-dropdown .active {
    background: color-mix(in srgb, var(--tk-brand), transparent 92%);
    color: var(--tk-ink);
}
.tk-app .ts-dropdown .no-results,
.tk-app .ts-dropdown .optgroup-header {
    color: var(--tk-ink-mute);
    padding: 8px 12px;
}

/* Filtres du planning : largeur confortable (placeholder entier visible) */
.tk-cal-filters .ts-wrapper { min-width: 240px; }

/* ---- Filtre par type : pills (remplace les cases a cocher brutes) ---- */
.tk-typefilter {
    border: 0;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
    min-width: 0;
}
.tk-typefilter-legend {
    font-size: 0.8rem;
    font-weight: 600;
    color: var(--tk-ink-dim);
    margin: 0;
    padding: 0;
    float: none;
    width: auto;
}
.tk-typefilter-list { display: flex; flex-wrap: wrap; gap: 8px; }
.tk-typefilter-pill {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 7px 14px;
    margin: 0;
    border: 1px solid var(--tk-line-strong, var(--tk-line));
    border-radius: 999px;
    font-size: 0.88rem;
    color: var(--tk-ink-dim);
    background: var(--tk-surface);
    cursor: pointer;
    user-select: none;
    transition: background .15s ease, color .15s ease, border-color .15s ease;
}
.tk-typefilter-pill input {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
}
.tk-typefilter-pill::before {
    content: "";
    width: 8px;
    height: 8px;
    border-radius: 999px;
    border: 1.5px solid currentColor;
    opacity: .5;
    transition: background .15s ease, opacity .15s ease, border-color .15s ease;
}
.tk-typefilter-pill:hover { border-color: var(--tk-brand); }
.tk-typefilter-pill:has(input:checked) {
    background: var(--tk-brand);
    border-color: var(--tk-brand);
    color: #fff;
}
.tk-typefilter-pill:has(input:checked)::before {
    background: #fff;
    border-color: #fff;
    opacity: 1;
}
.tk-typefilter-pill:has(input:focus-visible) {
    outline: 2px solid var(--tk-brand);
    outline-offset: 2px;
}

/* ============================================================
   Pill-menu de filtre (planning) : declencheur pill + panneau
   flottant contenant un Tom Select. Meme langage visuel que
   .tk-typefilter-pill. Actif = fond noir de marque.
   ============================================================ */
.tk-filter-chip { position: relative; display: inline-block; }
.tk-filter-chip__pill {
    display: inline-flex;
    align-items: center;
    border: 1px solid var(--tk-line-strong, var(--tk-line));
    border-radius: 999px;
    background: var(--tk-surface);
    color: var(--tk-ink-dim);
    transition: background .15s ease, border-color .15s ease, color .15s ease;
}
.tk-filter-chip__pill:hover { border-color: var(--tk-brand); }
.tk-filter-chip.is-active .tk-filter-chip__pill {
    background: var(--tk-brand);
    border-color: var(--tk-brand);
    color: #fff;
}
.tk-filter-chip__trigger {
    display: inline-flex;
    align-items: center;
    gap: 7px;
    padding: 7px 14px;
    background: transparent;
    border: 0;
    color: inherit;
    font-size: 0.88rem;
    line-height: 1.2;
    cursor: pointer;
    border-radius: 999px;
}
.tk-filter-chip__trigger:focus-visible { outline: 2px solid var(--tk-brand); outline-offset: 2px; }
.tk-filter-chip.is-active .tk-filter-chip__trigger:focus-visible { outline-color: #fff; }
.tk-filter-chip__caret { font-size: 0.72rem; opacity: .6; }
.tk-filter-chip.is-active .tk-filter-chip__caret { display: none; }
.tk-filter-chip__count { font-variant-numeric: tabular-nums; }
.tk-filter-chip__clear {
    display: inline-flex;
    align-items: center;
    padding: 7px 12px 7px 2px;
    background: transparent;
    border: 0;
    color: inherit;
    font-size: 0.78rem;
    cursor: pointer;
    border-radius: 999px;
}
.tk-filter-chip__clear:hover { opacity: .8; }
.tk-filter-chip__clear:focus-visible { outline: 2px solid #fff; outline-offset: 1px; }

/* Panneau flottant */
.tk-filter-chip__panel {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    z-index: 30;
    width: 280px;
    max-width: min(320px, 92vw);
    padding: 10px;
    background: var(--tk-surface);
    border: 1px solid var(--tk-line-strong, var(--tk-line));
    border-radius: var(--tk-radius);
    box-shadow: var(--tk-shadow);
}
/* Le Tom Select remplit toute la largeur du panneau (independant de la mesure
   d'init faite alors que le panneau etait masque). */
.tk-filter-chip__panel .ts-wrapper { width: 100%; min-width: 0; }

/* Panneau de filtre : le Tom Select embarque doit lire comme un champ de
   recherche integre, pas comme une boite bordee dans une autre boite. */
.tk-app .tk-filter-chip__panel .ts-control {
    border: 0;
    border-bottom: 1px solid var(--tk-line);
    border-radius: 0;
    background: transparent;
    padding-left: 2px;
    padding-right: 2px;
    min-height: 38px;
}
.tk-app .tk-filter-chip__panel .ts-wrapper.focus .ts-control {
    box-shadow: none;
    border-bottom-color: var(--tk-brand);
}
.tk-app .tk-filter-chip__panel .ts-dropdown {
    border: 0;
    box-shadow: none;
    margin-top: 6px;
}

/* Planning : sur mobile, garder une largeur lisible et scroller horizontalement
   plutot que de tasser la grille semaine. */
.tk-cal-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
@media (max-width: 767.98px) {
    .tk-cal-scroll #planning-calendar { min-width: 720px; }
}

/* Anti-zoom iOS Safari : au focus, iOS zoome tout champ dont la police calculee
   est < 16px. Sur mobile (borne md Bootstrap 767.98px) on force 16px sur les
   champs de saisie, sans toucher la densite desktop (13px dans les cartes profil,
   15px ailleurs) et sans jamais desactiver le zoom utilisateur (WCAG 1.4.4/1.4.10).
   Les selecteurs .tk-card .tk-input et .tk-app .form-control-sm/.form-select-sm
   sont explicites pour battre leur specificite (0,0,2,0). */
@media (max-width: 767.98px) {
    input,
    select,
    textarea,
    .form-control,
    .form-select,
    .form-control-sm,
    .form-select-sm,
    .tk-input,
    .tk-card .tk-input,
    .tk-app .form-control-sm,
    .tk-app .form-select-sm {
        font-size: 16px;
    }
}

/* ─────────────────────────────────────────────────────────────────────────
   AIDE ANIMATEUR (T7) : grille de vidéos tutos (style YouTube) + lecteur modale.
   Bloc contigu et autonome : ne dépend d'aucune autre règle du fichier.
   ───────────────────────────────────────────────────────────────────────── */
.tk-help-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: 20px;
    margin-bottom: 12px;
}

.tk-help-card {
    display: flex;
    flex-direction: column;
    gap: 10px;
    padding: 0;
    border: 0;
    background: transparent;
    color: inherit;
    font: inherit;
    text-align: left;
    cursor: pointer;
    border-radius: var(--tk-radius);
}

.tk-help-card:focus-visible {
    outline: 2px solid var(--tk-brand);
    outline-offset: 3px;
}

.tk-help-thumb {
    position: relative;
    display: block;
    width: 100%;
    aspect-ratio: 16 / 9;
    border-radius: 12px;
    overflow: hidden;
    background: var(--tk-hover);
    border: 1px solid var(--tk-line);
}

/* Aperçu live de l'embed dans la card (non interactif : le clic ouvre la modale). */
.tk-help-preview {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
    pointer-events: none;
}

/* Voile pour lisser le contraste sous le bouton lecture. */
.tk-help-scrim {
    position: absolute;
    inset: 0;
    background: linear-gradient(to bottom,
        rgba(10, 6, 7, .12) 0%,
        rgba(10, 6, 7, 0) 35%,
        rgba(10, 6, 7, .45) 100%);
    transition: background .2s ease;
}

.tk-help-card:hover .tk-help-scrim,
.tk-help-card:focus-visible .tk-help-scrim {
    background: linear-gradient(to bottom,
        rgba(10, 6, 7, .2) 0%,
        rgba(10, 6, 7, .05) 35%,
        rgba(10, 6, 7, .55) 100%);
}

/* Aperçu compact dans le tableau d'administration (onglet Réglages > Aide). */
.tk-help-admin-preview {
    position: relative;
    display: block;
    width: 96px;
    height: 54px;
    border-radius: 6px;
    overflow: hidden;
    border: 1px solid var(--tk-line);
    background: var(--tk-surface);
}

.tk-help-admin-preview iframe {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
    pointer-events: none;
}

.tk-help-play {
    position: absolute;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 2.6rem;
    color: #fff;
    text-shadow: 0 1px 6px rgba(0, 0, 0, .45);
    opacity: .9;
    transition: opacity .15s ease, transform .15s ease;
}

.tk-help-card:hover .tk-help-play,
.tk-help-card:focus-visible .tk-help-play {
    opacity: 1;
    transform: scale(1.06);
}

.tk-help-title {
    font-weight: 600;
    line-height: 1.3;
}

/* Modale de lecture : plus large que tk-dlg-wide (vidéo 16:9 confortable). */
.tk-dlg-wide.tk-help-dlg {
    max-width: min(96vw, 900px);
}

.tk-help-player {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;
    background: #000;
    border-radius: 10px;
    overflow: hidden;
}

.tk-help-player iframe {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
}
