:root{--bg:#f4f7fb;--card:#fff;--text:#0f172a;--muted:#64748b;--border:#dbe3ef;--primary:#0b5cad;--primary-2:#0f74d8;--danger:#dc2626;--ok:#16a34a;--warn:#f59e0b;--shadow:0 10px 30px rgba(15,23,42,.08);
  /* V1.9.x — FRISE par thème : bandes de niveau (macro/méso/séquence/mois/compèt) en variables.
     Défauts CLAIRS = valeurs historiques. Les peaux/le mode sombre redéfinissent ce jeu (cf bloc plus bas). */
  --frise-macro-bg:#bfdbfe;--frise-macro-fg:#082f57;--frise-meso-bg:#bbf7d0;--frise-meso-fg:#14532d;
  --frise-seq-bg:#fed7aa;--frise-seq-fg:#7c2d12;--frise-month-bg:#e2e8f0;--frise-month-fg:#0f172a;
  --frise-comp-bg:#fce7f3;--frise-comp-fg:#831843;--frise-comp-br:#f9a8d4;--frise-band-border:rgba(15,23,42,.12)}
/* V1.9.x — Contexte SOMBRE = mode sombre global OU une peau de séance sombre : les bandes de frise,
   le badge info et l'étiquette « Critique » prennent leur variante lisible sur fond foncé. */
html[data-theme="dark"],
html[data-session-theme="carbone"],html[data-session-theme="carbone-rouge"],
html[data-session-theme="jedi"],html[data-session-theme="synthwave"],html[data-session-theme="synthwave-sobre"],html[data-session-theme="terminal"]{
  --frise-macro-bg:#15375f;--frise-macro-fg:#cfe3ff;--frise-meso-bg:#16432a;--frise-meso-fg:#bbf7d0;
  --frise-seq-bg:#5a3216;--frise-seq-fg:#fed7aa;--frise-month-bg:#1e293b;--frise-month-fg:#e5edf7;
  --frise-comp-bg:#4a1230;--frise-comp-fg:#fbcfe8;--frise-comp-br:#9d174d;--frise-band-border:rgba(255,255,255,.14);
  --badge-bg:color-mix(in srgb,var(--primary) 24%,transparent);--badge-fg:var(--primary);
  --obj-critique-fg:#fcd34d}
html[data-theme="dark"]{--bg:#07111f;--card:#0f1b2d;--text:#e5edf7;--muted:#9db0c6;--border:#23334a;--primary:#38bdf8;--primary-2:#0ea5e9;--shadow:0 10px 30px rgba(0,0,0,.35)}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;font-size:15px}a{color:inherit;text-decoration:none}.app-shell{display:flex;min-height:100vh}.sidebar{width:245px;background:linear-gradient(180deg,#082f57,#071a31);color:white;padding:18px;position:sticky;top:0;height:100vh}.brand{display:flex;gap:10px;align-items:center;font-weight:800;font-size:20px;margin-bottom:26px}.brand-mark{display:grid;place-items:center;width:36px;height:36px;border-radius:12px;background:#0ea5e9}.sidebar nav{display:grid;gap:6px}.sidebar a{padding:11px 12px;border-radius:12px;color:#dbeafe}.sidebar a:hover{background:rgba(255,255,255,.12);color:white}.main{flex:1;min-width:0;padding:18px}.topbar{min-height:58px;background:var(--card);border:1px solid var(--border);border-radius:18px;padding:10px 14px;margin-bottom:18px;display:flex;align-items:center;justify-content:space-between;gap:8px 12px;flex-wrap:wrap;box-shadow:var(--shadow)}.top-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;justify-content:flex-end}.card{background:var(--card);border:1px solid var(--border);border-radius:18px;padding:18px;box-shadow:var(--shadow);margin-bottom:18px}.grid{display:grid;gap:16px}.grid.cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid.cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.stat{font-size:30px;font-weight:800}.muted{color:var(--muted)}.small{font-size:13px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--primary);color:white;border:0;border-radius:12px;padding:10px 14px;font-weight:700;cursor:pointer}.btn:hover{background:var(--primary-2)}.btn.ghost{background:transparent;color:var(--text);border:1px solid var(--border)}.btn.danger{background:var(--danger)}.btn.full{width:100%}.alert{padding:12px 14px;border-radius:14px;margin-bottom:12px;background:#dbeafe;color:#1e3a8a}.alert.error{background:#fee2e2;color:#991b1b}.alert.success{background:#dcfce7;color:#166534}input,select,textarea{width:100%;border:1px solid var(--border);background:var(--card);color:var(--text);border-radius:12px;padding:10px 12px;font:inherit}textarea{min-height:90px;resize:vertical}label{display:grid;gap:6px;font-weight:650}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.form-stack{display:grid;gap:14px}.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:16px;background:var(--card)}table{width:100%;border-collapse:collapse}th,td{padding:10px 12px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}th{font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);background:rgba(148,163,184,.08)}tr:last-child td{border-bottom:0}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 8px;background:var(--badge-bg,#e0f2fe);color:var(--badge-fg,#075985);font-weight:700;font-size:12px}.status-brouillon{background:#fef3c7;color:#92400e}.status-validee{background:#dcfce7;color:#166534}.auth-body{min-height:100vh;display:grid;place-items:center;background:linear-gradient(135deg,#062a4f,#0ea5e9)}.auth-card{width:min(420px,92vw);background:white;color:#0f172a;border-radius:24px;padding:28px;box-shadow:0 30px 90px rgba(0,0,0,.25)}.auth-card h1{margin:0 0 4px}.planner{overflow-x:auto;padding-bottom:10px}.planner-grid{display:grid;grid-auto-flow:column;grid-auto-columns:135px;gap:8px;min-height:280px}.week-card{border:1px solid var(--border);border-radius:14px;background:var(--card);padding:10px;min-height:210px}.week-card.inactive{opacity:.45;background:rgba(148,163,184,.1)}.week-num{font-weight:800}.week-theme{font-weight:800;border-radius:10px;padding:6px;margin:8px 0;text-align:center}.session-builder{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:16px}.module-row{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:14px;padding:16px 0;border-bottom:1px dashed var(--border)}.module-content textarea{min-height:140px}.module-data{display:grid;gap:8px}.mini-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.module-display{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:18px;padding:18px 0;border-bottom:1px dashed var(--border)}.module-display h3{margin:0 0 8px}.preline{white-space:pre-line;line-height:1.45}.zone-dot{display:inline-block;width:10px;height:10px;border-radius:999px;margin-right:6px}.z-white{background:#f8fafc;border:1px solid #cbd5e1}.z-blue{background:#3b82f6}.z-green{background:#22c55e}.z-yellow{background:#eab308}.z-orange{background:#f97316}.z-red{background:#ef4444}.z-pink{background:#ec4899}.print-body{background:#fff;color:#111;padding:0}.terrain-sheet{max-width:760px;margin:0 auto;background:white;color:#111;padding:22px;font-family:Arial,sans-serif}.terrain-head{border-bottom:4px solid #111;padding-bottom:10px;margin-bottom:18px}.terrain-head h1{font-size:24px;margin:0}.terrain-meta{font-size:16px;font-weight:700}.terrain-content{font-size:19px;line-height:1.35}.terrain-content h2{font-size:20px;margin:18px 0 6px;text-transform:uppercase}.terrain-total{margin-top:18px;border-top:3px solid #111;padding-top:10px;font-size:22px;font-weight:900;text-align:right}@media(max-width:900px){.app-shell{display:block}.sidebar{position:relative;width:auto;height:auto}.sidebar nav{grid-template-columns:repeat(2,1fr)}.main{padding:12px}.topbar{height:auto;gap:10px;align-items:flex-start;flex-direction:column}.grid.cols-3,.grid.cols-2,.form-grid,.session-builder,.module-row,.module-display{grid-template-columns:1fr}.module-data{background:rgba(148,163,184,.08);padding:12px;border-radius:14px}.terrain-sheet{padding:14px}.terrain-content{font-size:18px}}@media print{.terrain-sheet{max-width:none}.no-print{display:none!important}}
/* Patch navigation planning + feuille d'appel */
.page-head{display:flex;justify-content:space-between;gap:16px;align-items:flex-start}.page-head h1{margin-top:0}.actions-line{display:flex;align-items:end;gap:8px}.small-stat{font-size:18px;line-height:1.25}.planning-card{padding:12px}.timeline-wrap{overflow-x:auto;padding-bottom:10px}.timeline{display:grid;grid-template-columns:120px repeat(var(--weeks), minmax(var(--frise-col-min,min-content),var(--frise-col-max,1fr)));gap:6px;min-width:min-content}.timeline-label{position:sticky;left:0;z-index:2;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:8px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:800}.timeline-row{grid-column:2 / -1;display:grid;grid-template-columns:subgrid;gap:6px}.timeline-week,.micro-cell{border:1px solid var(--border);border-radius:12px;background:var(--card);padding:8px;min-height:64px;display:grid;gap:4px}.timeline-week strong{font-size:14px}.timeline-week span,.micro-cell small{font-size:12px;color:var(--muted)}.timeline-week.inactive,.micro-cell.inactive{opacity:.45;background:rgba(148,163,184,.12)}.band-row{min-height:38px}.cycle-band{display:flex;align-items:center;justify-content:center;border-radius:12px;padding:8px;font-weight:800;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;border:1px solid var(--frise-band-border,rgba(15,23,42,.12))}.macro-band{background:var(--frise-macro-bg,#bfdbfe);color:var(--frise-macro-fg,#082f57)}.meso-band{background:var(--frise-meso-bg,#bbf7d0);color:var(--frise-meso-fg,#14532d)}.sequence-band{background:var(--frise-seq-bg,#fed7aa);color:var(--frise-seq-fg,#7c2d12)}.micro-row{align-items:stretch}.micro-cell .week-theme{display:block;margin:0;padding:6px}.week-days{display:grid;grid-template-columns:repeat(7,minmax(180px,1fr));gap:12px;overflow-x:auto}.day-card{border:1px solid var(--border);border-radius:16px;background:rgba(148,163,184,.06);padding:12px;min-height:180px}.day-card h3{margin:0 0 10px}.rest-box{border:1px dashed var(--border);border-radius:12px;padding:18px;text-align:center;color:var(--muted);font-weight:800}.session-mini{display:grid;gap:4px;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:10px;margin-bottom:8px}.row-inactive{opacity:.55}.legend-line{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-bottom:12px}.attendance-matrix-wrap{max-height:70vh}.attendance-matrix th,.attendance-matrix td{text-align:center;min-width:78px}.attendance-matrix .sticky-col{position:sticky;left:0;background:var(--card);z-index:3;text-align:left;min-width:210px}.attendance-matrix thead .sticky-col{z-index:4}.session-col{font-size:12px;line-height:1.25}.call-cell{font-size:12px}.call-cell small{display:block;color:var(--muted);margin-top:4px}.call-badge{display:inline-flex;align-items:center;justify-content:center;min-width:30px;border-radius:999px;padding:4px 7px;font-size:12px;font-weight:900;background:#e5e7eb;color:#374151}.call-badge.present{background:#dcfce7;color:#166534}.call-badge.retard{background:#fef3c7;color:#92400e}.call-badge.partiel{background:#ffedd5;color:#9a3412}.call-badge.autonomie{background:#dbeafe;color:#1e40af}.call-badge.absent{background:#fee2e2;color:#991b1b}.call-badge.blesse,.call-badge.dispense{background:#e5e7eb;color:#374151}
/* V1.9.x — Zoom de la frise saison (elargit les colonnes-semaines + defilement) */
.frise-zoom{display:inline-flex;align-items:center;gap:6px;margin:0 0 10px}.frise-zoom .btn.small{padding:5px 10px}.frise-zoom__level{min-width:46px;text-align:center;font-weight:700;font-size:13px}
@media(max-width:900px){.page-head{display:block}.week-days{grid-template-columns:1fr}.timeline{grid-template-columns:90px repeat(var(--weeks), minmax(var(--frise-col-min,min-content),var(--frise-col-max,1fr)));min-width:min-content}.timeline-label{font-size:11px}.attendance-matrix .sticky-col{min-width:160px}.top-actions{flex-wrap:wrap}}
/* V1.2 — éditeur de cycles */
.compact-timeline{display:flex;gap:6px;overflow-x:auto;padding-bottom:8px}.micro-pill{min-width:70px;border:1px solid var(--border);border-radius:12px;background:var(--card);padding:7px;text-align:center}.micro-pill.inactive{opacity:.45;background:rgba(148,163,184,.12)}.micro-pill span{display:inline-block;width:100%;height:6px;border-radius:99px;margin-top:4px}.cycle-editor{border-left:6px solid #93c5fd}.nested-block{border:1px solid var(--border);border-radius:16px;padding:14px;margin-top:14px;background:rgba(148,163,184,.06)}.meso-editor{border-left:5px solid #86efac}.sequence-editor,.sequence-create{border-left:5px solid #fdba74}.compact-form textarea{min-height:58px}.inline-delete{margin-top:8px}.btn.small{padding:7px 10px;font-size:13px;border-radius:10px}.span-2{grid-column:span 2}.danger.small{font-size:12px}.cycle-editor h2,.nested-block h3,.nested-block h4{margin-top:0}@media(max-width:900px){.span-2{grid-column:span 1}.compact-timeline{padding-bottom:12px}.micro-pill{min-width:64px}}
/* V1.3 ergonomie */
.filter-bar{display:flex;flex-wrap:wrap;gap:12px;align-items:end}.filter-bar label{min-width:180px}.month-buttons{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.inline-form{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:6px}.inline-form select,.inline-form input{width:auto;min-width:130px}.context-card .badge{margin:3px}.context-frise{display:grid;gap:8px}.accordion-cycle{border:1px solid var(--border);border-radius:14px;background:rgba(148,163,184,.06);padding:10px;margin-bottom:10px}.accordion-cycle>summary{cursor:pointer}.compact-scroll{max-height:360px;overflow:auto}.planner-grid.compact-scroll{grid-auto-columns:160px}.micro-cell .week-theme{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.cycle-band{font-size:12px}.danger-zone{border-color:#fecaca;background:#fff7f7}html[data-theme="dark"] .danger-zone{background:#2a1418;border-color:#7f1d1d}.topbar .context-mini{font-size:12px;color:var(--muted)}@media(max-width:900px){.filter-bar{display:grid}.filter-bar label{min-width:0}.inline-form select,.inline-form input{width:100%}.grid.cols-2{grid-template-columns:1fr}}
/* V1.3.1 ergonomie */
.section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;margin-bottom:12px}.section-head h2{margin:0}.hidden-panel{display:none;margin-top:14px;border:1px dashed var(--border);border-radius:16px;padding:14px;background:rgba(148,163,184,.06)}.hidden-panel.open{display:block}.slot-list{display:flex;flex-wrap:wrap;gap:10px}.slot-item{display:flex;align-items:center;gap:10px;border:1px solid var(--border);border-radius:14px;padding:10px 12px;background:rgba(148,163,184,.06)}.slot-item small{color:var(--muted)}.danger-text{color:var(--danger)!important}.cycle-actions{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0 14px}.macro-accordion{border-left:6px solid #93c5fd}.meso-accordion{border-left:5px solid #86efac}.sequence-block{border:1px solid var(--border);border-left:5px solid #fdba74;border-radius:14px;background:var(--card);padding:10px;margin:10px 0}.sequence-block>summary{cursor:pointer}.sequence-inner{padding-top:10px}.sequence-weeks-row{display:flex;gap:8px;overflow-x:auto;padding:8px 0 12px}.sequence-week-card{min-width:145px;border:1px solid var(--border);border-radius:14px;padding:8px;background:rgba(148,163,184,.06)}.week-card-head{display:grid;gap:2px;margin-bottom:8px}.week-card-head small{color:var(--muted);font-size:12px}.week-theme-form{display:grid;grid-template-columns:1fr auto;gap:6px;align-items:center}.week-theme-form select{padding:7px 8px;border-radius:10px}.abbr{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;background:rgba(14,165,233,.12);border:1px solid rgba(14,165,233,.25);padding:3px 7px;font-size:12px;font-weight:800;margin:1px;color:var(--text)}.context-band-wrap{margin:10px 0 12px}.context-band-table{table-layout:fixed;min-width:760px}.context-band-table th,.context-band-table td{padding:6px 8px;text-align:center;font-size:12px}.context-axis{width:260px;background:rgba(148,163,184,.08);color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.context-band-cell{background:#e0f2fe;color:#075985;border-radius:10px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.attendance-matrix th:nth-child(2),.attendance-matrix td:nth-child(2),.attendance-matrix th:nth-child(3),.attendance-matrix td:nth-child(3){min-width:130px}.attendance-matrix .muted{font-size:12px}.small{font-size:12px}.small.muted{color:var(--muted)}
@media(max-width:900px){.section-head{display:block}.section-head .btn{margin-top:8px}.slot-list{display:grid}.slot-item{display:grid}.sequence-week-card{min-width:132px}.context-axis{width:180px}.context-band-table{min-width:640px}.attendance-matrix th:nth-child(2),.attendance-matrix td:nth-child(2),.attendance-matrix th:nth-child(3),.attendance-matrix td:nth-child(3){min-width:110px}}
/* V1.4 consolidation */
.attendance-context-row th{border-bottom:1px solid var(--border)}
.attendance-context-row .context-axis{position:sticky;left:0;z-index:4;background:var(--card);text-align:left;min-width:210px}
.attendance-context-row .context-band-cell{font-weight:900;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border-left:2px solid var(--card);border:1px solid var(--frise-band-border,rgba(15,23,42,.12))}
/* V1.9.x — mêmes variables --frise-* que la frise -> les bandes de présences se repeignent AVEC elle. */
.attendance-context-row .context-band-cell.macro-band{background:var(--frise-macro-bg,#bfdbfe);color:var(--frise-macro-fg,#082f57)}
.attendance-context-row .context-band-cell.meso-band{background:var(--frise-meso-bg,#bbf7d0);color:var(--frise-meso-fg,#14532d)}
.attendance-context-row .context-band-cell.sequence-band{background:var(--frise-seq-bg,#fed7aa);color:var(--frise-seq-fg,#7c2d12)}
.attendance-context-row .context-band-cell.week-band{background:var(--frise-month-bg,#e2e8f0);color:var(--frise-month-fg,#0f172a)}
.attendance-context-row .context-band-cell.context-band-empty{background:transparent;border-color:transparent;font-weight:400}
.attendance-context-row .context-meta-filler{background:var(--card);border-bottom:1px solid var(--border)}
.archive-link{display:inline-flex;align-items:center;gap:6px}
.note-card{border-left:5px solid var(--primary)}
.role-badge{display:inline-flex;border-radius:999px;padding:4px 8px;background:#eef2ff;color:#3730a3;font-weight:800;font-size:12px}
.danger-confirm input{max-width:180px}
@media(max-width:900px){
  .attendance-context-row .context-axis{min-width:160px}
  .attendance-context-row .context-band-cell{font-size:11px}
}
/* V1.4.1 — bandes Mois / Compétition en variables --frise-* (repeintes par le mode sombre + les peaux). */
.month-band{background:var(--frise-month-bg,#e2e8f0);color:var(--frise-month-fg,#0f172a)}
.competition-band{background:var(--frise-comp-bg,#fce7f3);color:var(--frise-comp-fg,#831843);border-color:var(--frise-comp-br,#f9a8d4)}
/* Compèt sur la frise : nom plus petit + retour à la ligne MAIS plafonné (n'élargit pas la
   colonne ET ne s'étale pas sur 8 lignes -> max ~4 lignes + ellipsis ; le nom complet est dans la bulle). */
.cycle-band.competition-band,.timeline-pivot-cell.competition-band{
  white-space:normal;overflow-wrap:anywhere;word-break:break-word;font-size:10.5px;line-height:1.12;padding:4px 4px;
  display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.timeline-pivot-cell.competition-band{font-size:10px;line-height:1.08;padding:5px 3px}
.filter-block{display:grid;gap:10px}.filter-row{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.filter-row strong{min-width:70px;color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.04em}.link-list{display:grid;gap:8px}.link-card{display:grid;gap:2px;border:1px solid var(--border);border-radius:14px;padding:10px 12px;background:rgba(148,163,184,.06)}.link-card:hover{border-color:var(--primary);box-shadow:0 0 0 3px rgba(14,165,233,.12)}.link-card span{color:var(--muted);font-size:12px}.quick-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
/* V1.4.2 ciblée */
.empty-state{border:1px dashed var(--border);border-radius:16px;background:rgba(148,163,184,.08);padding:16px;margin:12px 0}
.group-dashboard .card{min-height:150px}
.coached-groups-block{padding-bottom:20px}
.coached-groups-intro{margin-bottom:4px}
.coached-groups-intro h2{margin:0 0 4px}
.coached-groups-track{display:flex;flex-direction:row;flex-wrap:wrap;align-items:stretch;gap:16px;margin-top:16px}
.coached-group-tile{flex:1 1 300px;max-width:380px;min-width:min(100%,280px);display:flex;flex-direction:column;gap:0;border:1px solid var(--border);border-radius:16px;background:var(--card);box-shadow:var(--shadow);overflow:hidden}
.coached-group-tile__head{padding:14px 16px 10px;border-bottom:1px solid var(--border);background:linear-gradient(180deg,rgba(14,165,233,.08),transparent)}
.coached-group-tile__title{margin:0;font-size:1.05rem;line-height:1.3}
.coached-group-tile__title a{text-decoration:none;color:inherit}
.coached-group-tile__title a:hover{color:var(--hub-blue,#0ea5e9)}
.coached-group-tile__season{display:block;margin-top:4px;font-size:12px;color:var(--muted);line-height:1.35}
.coached-group-tile__body{flex:1;padding:14px 16px;display:flex;flex-direction:column;gap:8px}
.coached-group-tile__label{margin:0;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.coached-group-tile__datetime{margin:0;display:flex;flex-direction:column;gap:2px}
.coached-group-tile__date{font-size:1.15rem;font-weight:700;line-height:1.2}
.coached-group-tile__time{font-size:14px;color:var(--muted)}
.coached-group-tile__session-title{margin:0;font-size:13px;line-height:1.4}
.coached-group-tile__hint{margin:0;font-size:13px;color:var(--muted)}
.coached-group-tile__slots{margin:6px 0 0;padding-top:10px;border-top:1px dashed var(--border);font-size:12px;color:var(--muted);line-height:1.4}
.coached-group-tile__foot{padding:12px 16px 14px;border-top:1px solid var(--border);background:rgba(148,163,184,.06);display:flex;flex-direction:column;align-items:stretch;gap:8px}
.coached-group-tile__foot .btn,.coached-group-tile__foot .btn.ghost{width:100%;justify-content:center;text-align:center}
@media(max-width:640px){.coached-groups-track{flex-direction:column}.coached-group-tile{flex:1 1 auto;max-width:none}}
.taxonomy-packs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:18px;margin:20px 0}
.taxonomy-pack-card{display:flex;flex-direction:column;gap:12px;border:1px solid var(--border);border-radius:16px;padding:16px;background:var(--card);box-shadow:var(--shadow);min-height:220px}
.taxonomy-pack-card__head{display:flex;align-items:center;justify-content:space-between;gap:8px;border-bottom:1px solid var(--border);padding-bottom:10px}
.taxonomy-pack-card__head h2{margin:0;font-size:1rem}
.taxonomy-pack-card__name{font-weight:700;font-size:1.05rem;margin:0 0 8px}
.taxonomy-pack-card__preview{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:13px}
.taxonomy-pack-card__preview li{display:flex;align-items:center;gap:8px}
.taxonomy-swatch{width:12px;height:12px;border-radius:3px;border:1px solid var(--border);flex-shrink:0}
.taxonomy-pack-card__select{margin-top:auto;display:flex;flex-direction:column;gap:6px;font-size:13px}
.taxonomy-pack-card__select select{width:100%}
.taxonomy-packs-actions{margin-top:8px;padding-top:12px;border-top:1px solid var(--border)}
.taxonomy-stroke-manage{display:flex;flex-direction:column;gap:10px;margin-top:8px}.taxonomy-stroke-system{padding:.5rem .75rem;background:var(--bg-soft,#f8fafc);border-radius:10px;border:1px solid var(--border)}.taxonomy-stroke-system__list{margin-top:.35rem}.badge--composite{background:#e0f2fe;color:#0369a1;font-size:.7rem;padding:.1em .45em;border-radius:4px;font-weight:600;white-space:nowrap}.stroke-rows{display:flex;flex-direction:column;gap:.75rem;margin:.5rem 0}.stroke-custom-row{padding:.6rem .75rem;border:1px dashed var(--border);border-radius:10px;background:var(--bg-soft,#f8fafc)}.stroke-composite-editor{margin-top:.5rem;font-size:12px}.stroke-composite-editor.hidden{display:none}.stroke-parts-table{width:100%;border-collapse:collapse;font-size:12px}.stroke-parts-table th,.stroke-parts-table td{padding:.2rem .4rem;text-align:left;border-bottom:1px solid var(--border)}.stroke-parts-table .short-input{width:60px}.session-field-cycle--composite::after{content:'◎';font-size:.72em;margin-left:.2em;opacity:.6;vertical-align:.1em}
.taxonomy-season-switch__form{align-items:end;margin-bottom:.5rem}
.taxonomy-pack-card__create,.taxonomy-pack-card__edit{margin-top:8px;border-top:1px dashed var(--border);padding-top:10px}
.taxonomy-pack-card__create summary,.taxonomy-pack-card__edit summary{cursor:pointer;list-style:none;display:inline-block;margin-bottom:8px}
.taxonomy-pack-card__current{flex:1}
.zone-guide-editor{display:flex;flex-direction:column;gap:12px;margin:12px 0}
.zone-guide-editor__toolbar{display:flex;flex-wrap:wrap;gap:12px;align-items:end}
.zone-guide-editor__rows{display:flex;flex-direction:column;gap:12px}
.zone-guide-row{padding:12px}
.zone-guide-row__head{display:grid;grid-template-columns:auto 1fr 120px auto;gap:10px;align-items:end;margin-bottom:10px}
.zone-guide-row__color input[type=color]{width:48px;height:36px;padding:2px}
.zone-guide-editor--transposed .zone-guide-editor__table-wrap{margin-top:8px}
.zones-transposed--edit th.zone-guide-col,.zones-transposed--edit td{vertical-align:top;min-width:140px}
.zones-transposed--edit .zones-transposed__corner{min-width:120px;position:sticky;left:0;background:#fff;z-index:2}
.zones-transposed--edit tbody th{position:sticky;left:0;background:#f8fafc;z-index:1}
.zone-guide-col__head{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.zone-guide-col__head input[type=color]{width:40px;height:32px;padding:2px;flex:0 0 auto}
.zone-guide-col__label{flex:1 1 100px;min-width:80px;font-weight:700}
.zone-guide-cell-input{width:100%;min-width:0;font-size:.9rem}
.zones-transposed--edit textarea.zone-guide-cell-input{min-height:52px;resize:vertical}
.zone-dist{display:flex;flex-wrap:wrap;gap:3px 8px}
.zone-dist__opt{display:inline-flex;align-items:center;gap:3px;font-size:12px;white-space:nowrap;cursor:pointer}
.zone-dist__opt input{margin:0}
.taxonomy-pack-create-form{display:flex;flex-direction:column;gap:10px;font-size:13px}
.taxonomy-pack-create-form label{display:flex;flex-direction:column;gap:4px}
.taxonomy-list-editor{margin-top:.75rem;border-top:1px dashed var(--border);padding-top:.75rem}
.taxonomy-list-editor__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem}
.taxonomy-list-row{align-items:end;margin-bottom:.5rem}
.taxonomy-list-row__actions{align-self:center;padding-bottom:.35rem}
.taxonomy-intensity-intro{margin:.5rem 0;padding:.65rem .75rem;background:var(--bg-soft, #f8fafc);border-radius:10px;border:1px solid var(--border)}
.mini-line{display:flex;gap:8px;align-items:center;border-top:1px solid var(--border);padding-top:7px;margin-top:7px;font-size:13px}.link-list-wide{gap:10px}.link-card.member-card,.link-card.season-card{grid-template-columns:1fr;align-items:start;line-height:1.25}.quick-actions.card{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.small-stat{font-size:18px;line-height:1.25}.actions-line{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
/* The Swimming Hub */
.hidden{display:none!important}
.public-ref-nav{margin:.75rem 0 1rem}
.nav-groups{display:flex;flex-direction:column;gap:.75rem}.nav-main{font-weight:800}.nav-section{display:flex;flex-direction:column;gap:.15rem;border-top:1px solid var(--border);padding-top:.65rem}.nav-section span{font-size:.72rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);padding:.15rem .65rem}.nav-section a{padding:.45rem .65rem;border-radius:.7rem;text-decoration:none}.nav-section a:hover{background:var(--surface-2)}
.module-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem}.module-type-card{border:1px solid var(--border);border-radius:1rem;padding:1rem;background:var(--surface)}.module-card-head{display:flex;justify-content:space-between;gap:.5rem;align-items:flex-start}.module-card-head h3{margin:.1rem 0}.module-preview{white-space:pre-wrap;background:var(--surface-2);border-radius:.75rem;padding:.75rem;font-size:.85rem;max-height:10rem;overflow:auto}.short-input{max-width:7rem}.inline{display:flex;gap:.4rem;align-items:center}.inline-form{display:flex;gap:.5rem;align-items:center}.check-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:.4rem .8rem;margin:.75rem 0}.side-panel{position:fixed;right:0;top:0;height:100vh;width:min(480px,96vw);background:var(--surface);box-shadow:-10px 0 30px rgba(0,0,0,.18);z-index:100;transform:translateX(105%);transition:.2s;overflow:auto;padding:1rem}.side-panel.open{transform:translateX(0)}.side-panel-head{display:flex;justify-content:space-between;align-items:center;gap:1rem;margin-bottom:1rem}.picker-item{border:1px solid var(--border);border-radius:.9rem;padding:.8rem;margin-bottom:.75rem;background:var(--surface-2)}.picker-item pre{white-space:pre-wrap;font-size:.82rem;max-height:7rem;overflow:auto}.module-data details{border:1px solid var(--border);border-radius:.75rem;padding:.55rem;margin:.45rem 0;background:var(--surface)}.info-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:.8rem;margin:.8rem 0}.info-grid div{background:var(--surface-2);border:1px solid var(--border);border-radius:.8rem;padding:.75rem}.info-grid span{display:block;color:var(--muted);font-size:.8rem}.info-grid strong{display:block;margin-top:.2rem}.danger{background:#b91c1c!important;color:white!important;border-color:#b91c1c!important}

/* v1.5.01 */
.sessions-filters-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,340px);gap:1rem;align-items:start}.advanced-filter-panel{border:1px solid var(--border);border-radius:1rem;background:var(--surface-2);padding:.8rem}.advanced-filter-panel summary{cursor:pointer;font-weight:800}.advanced-filter-form{display:grid;gap:.65rem;margin-top:.8rem}.advanced-filter-form label{display:grid;gap:.25rem}.hidden-panel{display:none;margin-top:1rem;border:1px dashed var(--border);border-radius:1rem;padding:1rem;background:var(--surface-2)}.hidden-panel.open{display:block}.inline-form{margin:.15rem 0}.inline-form input.short-input{width:5.5rem}.competition-row .competition-band{font-size:.82rem}@media(max-width:1000px){.sessions-filters-layout{grid-template-columns:1fr}.advanced-filter-panel{order:2}}

/* TrainingOS V1.5.02 */
.sessions-filters-layout.lateral{display:grid;grid-template-columns:minmax(0,1fr) 52px 0;gap:.75rem;align-items:stretch;transition:grid-template-columns .22s ease}.sessions-filters-layout.lateral.advanced-open{grid-template-columns:minmax(0,1fr) 52px minmax(285px,360px)}.advanced-filter-toggle{writing-mode:vertical-rl;transform:rotate(180deg);border:1px solid var(--border);border-radius:1rem;background:var(--primary);color:white;font-weight:900;letter-spacing:.03em;cursor:pointer;min-height:100%;padding:.8rem .45rem;display:flex;align-items:center;justify-content:center}.advanced-filter-toggle:hover{background:var(--primary-2)}.lateral-panel{overflow:hidden;opacity:0;pointer-events:none;transform:translateX(-12px);transition:opacity .18s ease, transform .18s ease}.sessions-filters-layout.advanced-open .lateral-panel{opacity:1;pointer-events:auto;transform:translateX(0)}.lateral-panel .side-panel-head{margin-bottom:.65rem}.field-block{display:grid;gap:.45rem}.compact-check-grid{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}.zones-transposed th:first-child{min-width:165px}.zones-transposed th:not(:first-child),.zones-transposed td{text-align:center;min-width:135px}.zones-transposed tbody th{background:rgba(148,163,184,.08);color:var(--muted);text-transform:none;letter-spacing:0;font-size:13px}.zones-transposed td{font-size:13px;line-height:1.25}
@media(max-width:1000px){.sessions-filters-layout.lateral,.sessions-filters-layout.lateral.advanced-open{grid-template-columns:1fr}.advanced-filter-toggle{writing-mode:horizontal-tb;transform:none;min-height:auto}.lateral-panel{opacity:1;pointer-events:auto;transform:none;display:none}.sessions-filters-layout.advanced-open .lateral-panel{display:block}.zones-transposed th:not(:first-child),.zones-transposed td{min-width:110px}}

/* v1.5.1 */
.sessions-simple-filters{display:grid;gap:.75rem}.search-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.85rem}.search-grid .span-2{grid-column:span 2}.pagination{margin-top:1rem}.sessions-simple-filters .filter-row{align-items:center}.sessions-simple-filters .btn.small{white-space:nowrap}
@media(max-width:1100px){.search-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.search-grid .span-2{grid-column:1/-1}}
@media(max-width:700px){.search-grid{grid-template-columns:1fr}}
/* V1.5.2 */
.filter-card .filter-buttons{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.small-label{font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.04em}.chip{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--border);border-radius:999px;padding:7px 10px;background:var(--card);color:var(--text);font-size:13px;font-weight:700;text-decoration:none}.chip:hover,.chip.active{border-color:var(--primary);background:rgba(14,165,233,.12);color:var(--primary)}

/* The Swimming Hub V1.6 — public layout */
.public-body{background:linear-gradient(180deg,#eef7ff 0,#f8fbff 42%,#fff 100%);color:#102033;min-height:100vh}.public-header{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:18px;padding:16px 28px;background:rgba(255,255,255,.92);backdrop-filter:blur(12px);border-bottom:1px solid rgba(20,80,130,.12)}.public-brand{display:flex;align-items:center;gap:10px;font-weight:800;font-size:1.05rem;color:#102033;text-decoration:none}.public-nav{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.public-nav a{color:#1f3a55;text-decoration:none;font-weight:650}.public-main{width:min(1120px,calc(100% - 32px));margin:0 auto;padding:34px 0 56px}.public-footer{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;padding:24px 28px;border-top:1px solid rgba(20,80,130,.12);color:#65768a;background:#fff}.public-hero{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,.65fr);gap:24px;align-items:stretch;margin-bottom:24px}.public-hero h1{font-size:clamp(2.5rem,6vw,5rem);line-height:.95;margin:.2em 0}.lead{font-size:1.25rem;line-height:1.55;max-width:760px}.eyebrow{text-transform:uppercase;letter-spacing:.12em;font-size:.8rem;font-weight:800;color:#1669a8}.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:24px}.hero-panel{border-radius:24px;padding:24px;background:#102033;color:#fff;box-shadow:0 20px 44px rgba(7,30,52,.18)}.hero-panel p{color:#dbe9f7}.public-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin:22px 0}.kpi-card{text-decoration:none;color:inherit}.kpi-card span{display:block;color:#64748b;font-weight:700}.kpi-card strong{display:block;font-size:2.2rem;margin-top:6px}.admin-inline-form{border:1px solid rgba(20,80,130,.12);border-radius:18px;padding:16px;margin:14px 0;background:#fff}.admin-inline-form h3{margin-top:0}@media(max-width:820px){.public-header{align-items:flex-start;flex-direction:column}.public-hero{grid-template-columns:1fr}.public-grid{grid-template-columns:1fr}.public-footer{flex-direction:column}.public-main{width:min(100% - 20px,1120px)}}

/* The Swimming Hub V1.6.01 — design refresh */
:root{--hub-navy:#071d35;--hub-blue:#0f7fd1;--hub-aqua:#29c4d8;--hub-ink:#102033;--hub-soft:#f3f8ff;--hub-line:rgba(15,72,120,.14)}
.public-body{background:radial-gradient(circle at 15% 5%,rgba(41,196,216,.22),transparent 32%),radial-gradient(circle at 84% 18%,rgba(15,127,209,.18),transparent 30%),linear-gradient(180deg,#f7fbff 0,#eef7ff 52%,#ffffff 100%);color:var(--hub-ink)}
.public-header{padding:18px clamp(16px,4vw,48px);border-bottom:1px solid var(--hub-line);box-shadow:0 12px 30px rgba(7,29,53,.06)}
.public-brand{font-size:1.15rem}.public-brand .brand-mark{background:linear-gradient(135deg,var(--hub-blue),var(--hub-aqua));box-shadow:0 10px 22px rgba(15,127,209,.25)}
.public-nav a:not(.btn){padding:8px 10px;border-radius:999px}.public-nav a:not(.btn):hover{background:rgba(15,127,209,.08);color:var(--hub-blue)}
.public-main{padding-top:42px}.public-hero{grid-template-columns:minmax(0,1.18fr) minmax(300px,.82fr);gap:22px}.public-hero-tight{align-items:stretch}.hero-clean,.public-hero>.card:first-child{background:linear-gradient(135deg,#fff 0,#f5fbff 100%);border-color:rgba(15,127,209,.16);box-shadow:0 28px 70px rgba(7,29,53,.11)}
.public-hero h1{letter-spacing:-.07em;color:var(--hub-navy)}.lead{color:#36536c}.hero-panel,.public-hero>.card:nth-child(2){background:linear-gradient(145deg,var(--hub-navy),#0b4d83);color:white;border:0}.hero-panel .muted,.public-hero>.card:nth-child(2) .muted,.public-hero>.card:nth-child(2) p{color:#d9ecff}.eyebrow{color:var(--hub-blue)}
.btn{background:linear-gradient(135deg,var(--hub-blue),#0b67ba);box-shadow:0 10px 18px rgba(15,127,209,.2);border:0}.btn:hover{filter:brightness(1.04);transform:translateY(-1px)}.btn.ghost{background:rgba(255,255,255,.65);border:1px solid var(--hub-line);box-shadow:none;color:var(--hub-ink)}.btn-large{padding:14px 18px;border-radius:16px;font-size:1rem}
.card{border-color:var(--hub-line);box-shadow:0 18px 50px rgba(7,29,53,.075)}.public-grid .card,.kpi-card{transition:.18s ease}.public-grid .card:hover,.kpi-card:hover{transform:translateY(-3px);box-shadow:0 24px 60px rgba(7,29,53,.12)}
.register-card{max-width:920px;margin-inline:auto}.conditional-block{padding:14px;border:1px dashed var(--hub-line);border-radius:18px;background:rgba(15,127,209,.045)}.inline-default-form{display:grid;grid-template-columns:minmax(0,1fr) 70px auto auto auto;gap:6px;align-items:center;margin:.5rem 0;padding:.5rem;border-radius:14px;background:rgba(15,127,209,.045);transition:background .15s ease,opacity .15s ease}
.inline-default-form--stroke{grid-template-columns:minmax(0,1fr) 90px 70px auto auto auto}
.inline-default-form.is-inactive{opacity:.55}
.inline-default-form.is-dirty{background:rgba(15,127,209,.12);outline:1px dashed rgba(15,127,209,.35)}
.inline-default-form.is-saving{opacity:.7;pointer-events:none}
.btn.danger{color:#b42318;border-color:rgba(180,35,24,.25)}
.btn.danger:hover{background:rgba(180,35,24,.08)}
.platform-toast{position:fixed;right:18px;bottom:18px;z-index:120;max-width:min(420px,calc(100vw - 36px));padding:12px 16px;border-radius:14px;font-weight:700;box-shadow:0 18px 50px rgba(7,29,53,.18);background:#fff;border:1px solid var(--border)}
.platform-toast--success{border-color:rgba(22,163,74,.35);color:#166534;background:#f0fdf4}
.platform-toast--error{border-color:rgba(220,38,38,.35);color:#991b1b;background:#fef2f2}
.platform-defaults-list{max-height:min(62vh,680px);overflow:auto;padding-right:4px}
.dashboard-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:16px}.sidebar{background:linear-gradient(180deg,#061a30,#082f57 58%,#063f68)}.sidebar .brand-mark{background:linear-gradient(135deg,var(--hub-blue),var(--hub-aqua))}.nav-section{border-top:1px solid rgba(255,255,255,.12)}.nav-section span{color:#9fd4ff}.topbar{background:rgba(255,255,255,.88);backdrop-filter:blur(10px)}
@media(max-width:820px){.public-nav{gap:8px}.public-nav a:not(.btn){padding:6px 8px}.inline-default-form,.inline-default-form--stroke{grid-template-columns:1fr}.public-hero h1{font-size:2.55rem}}

/* The Swimming Hub V1.6.02 — public polish + admin readability */
.hub-public-main{width:min(1180px,calc(100% - 32px));padding-top:46px}.hub-public-header{background:rgba(255,255,255,.9);box-shadow:0 14px 40px rgba(7,29,53,.07)}.hub-hero{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(300px,.82fr);gap:24px;align-items:stretch;margin-bottom:34px}.hub-hero-copy{position:relative;overflow:hidden;border:1px solid var(--hub-line);border-radius:32px;padding:clamp(24px,5vw,54px);background:linear-gradient(135deg,rgba(255,255,255,.96),rgba(235,248,255,.92));box-shadow:0 30px 80px rgba(7,29,53,.12)}.hub-hero-copy:after{content:"";position:absolute;right:-110px;bottom:-130px;width:330px;height:330px;border-radius:50%;background:radial-gradient(circle,rgba(41,196,216,.22),transparent 68%)}.hub-hero h1{font-size:clamp(3rem,8vw,6.4rem);line-height:.9;letter-spacing:-.08em;margin:.1em 0;color:var(--hub-navy)}.hub-hero-panel{border-radius:32px;padding:30px;background:linear-gradient(145deg,#071d35,#07518d);color:white;box-shadow:0 30px 80px rgba(7,29,53,.2)}.hub-hero-panel p,.hub-hero-panel li{color:#d9ecff}.panel-kicker{display:inline-flex;padding:7px 10px;border-radius:999px;background:rgba(255,255,255,.12);font-weight:800;color:#fff}.clean-list{display:grid;gap:10px;margin:18px 0 0;padding:0;list-style:none}.clean-list li{padding-left:26px;position:relative}.clean-list li:before{content:"✓";position:absolute;left:0;color:#65e4f2;font-weight:900}.hub-section{margin:32px 0}.section-heading{max-width:760px;margin-bottom:16px}.section-heading h2{font-size:clamp(1.7rem,3vw,2.6rem);margin:.15em 0;color:var(--hub-navy)}.hub-feature-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.hub-feature-card{background:rgba(255,255,255,.9);border:1px solid var(--hub-line);border-radius:26px;padding:24px;box-shadow:0 18px 52px rgba(7,29,53,.08)}.hub-feature-card span{font-size:2rem}.hub-feature-card h3{margin:.6rem 0 .3rem;color:var(--hub-navy)}.split-section{display:grid;grid-template-columns:1fr 1fr;gap:18px}.glass-card{background:rgba(255,255,255,.86)!important}.dark-card{background:linear-gradient(145deg,#071d35,#0b4d83)!important;color:white}.dark-card p,.dark-card .eyebrow{color:#d9ecff}.public-module-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.hub-public-footer{background:#071d35;color:#d9ecff;border-top:0}.hub-public-footer span{color:#d9ecff}

.platform-head h1{letter-spacing:-.04em}.admin-hub-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;margin:18px 0 22px}.admin-hub-card{display:flex;gap:16px;align-items:flex-start;text-decoration:none;color:inherit;background:#fff;border:1px solid var(--border);border-radius:24px;padding:20px;box-shadow:0 18px 46px rgba(15,23,42,.08);transition:.16s ease}.admin-hub-card:hover{transform:translateY(-3px);box-shadow:0 24px 60px rgba(15,23,42,.12);border-color:rgba(15,127,209,.35)}.admin-hub-card.primary{background:linear-gradient(145deg,#071d35,#0b4d83);color:white}.admin-hub-card.primary p{color:#d9ecff}.admin-hub-card h2{margin:.1rem 0 .35rem}.admin-hub-card p{margin:0;color:var(--muted)}.admin-hub-icon{font-size:1.75rem;line-height:1}.admin-scope-card{background:linear-gradient(135deg,#fff,#f5fbff)}.scope-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.scope-grid>div{border:1px solid var(--border);border-radius:18px;padding:14px;background:rgba(255,255,255,.72)}

.resource-admin-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin:16px 0 22px}.resource-admin-card{display:grid;gap:6px;text-decoration:none;color:inherit;background:#fff;border:1px solid var(--border);border-radius:22px;padding:18px;box-shadow:0 14px 40px rgba(15,23,42,.06)}.resource-admin-card span{font-weight:900}.resource-admin-card strong{font-size:2rem;color:var(--primary)}.resource-admin-card em{font-style:normal;color:var(--muted);font-size:.9rem}.resource-admin-card.active{background:linear-gradient(145deg,#071d35,#0b4d83);color:white}.resource-admin-card.active strong,.resource-admin-card.active em{color:#d9ecff}.readable-card{padding:22px}.section-title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.resource-list{display:grid;gap:12px}.resource-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;align-items:start;border:1px solid var(--border);border-radius:20px;padding:16px;background:#fff}.resource-row.editing{grid-template-columns:1fr}.resource-summary{display:grid;gap:4px}.resource-summary strong{font-size:1.05rem}.resource-summary span,.resource-summary small{color:var(--muted)}.admin-edit-panel{margin-top:10px;border:1px dashed rgba(15,127,209,.35);border-radius:18px;padding:16px;background:rgba(15,127,209,.045)}.resource-table{overflow:auto}.resource-table table{width:100%}.resource-table tr:nth-child(even){background:rgba(15,127,209,.035)}

.sidebar{background:linear-gradient(180deg,#061a30 0%,#082f57 62%,#063f68 100%)!important;color:#e9f6ff}.sidebar a{color:#e9f6ff!important}.sidebar a:hover{background:rgba(255,255,255,.12)!important;color:#fff!important}.sidebar .nav-section span{color:#9fd4ff!important}.sidebar .nav-main{background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.12)}

@media(max-width:900px){.hub-hero,.split-section{grid-template-columns:1fr}.hub-feature-grid{grid-template-columns:1fr}.scope-grid{grid-template-columns:1fr}.section-title-row{flex-direction:column}.hub-public-main{width:min(100% - 20px,1180px)}.resource-row{grid-template-columns:1fr}.hub-hero h1{font-size:3rem}}


/* V1.6.02 quick patch — codes invitation */
.invite-code-box{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:14px 16px;
  border:1px solid var(--border);
  border-radius:16px;
  background:var(--surface-2, rgba(15,23,42,.04));
  margin:14px 0;
}
.invite-code-box code{
  font-size:1.25rem;
  font-weight:800;
  letter-spacing:.08em;
}

/* V1.6.022 — espace nageur groupe */
.compact-form { align-items:end; }
.module-edit-block { border:1px solid var(--border, #e5e7eb); border-radius:16px; padding:1rem; background:#fff; margin:.75rem 0; }
.readonly-module form, .readonly-module .btn { display:none; }
.stat-card { display:flex; flex-direction:column; gap:.35rem; }
.stat-card span { color:var(--muted, #64748b); font-size:.85rem; }
.stat-card strong { font-size:1.25rem; }
.progress { height:8px; background:#e5e7eb; border-radius:999px; overflow:hidden; }
.progress span { display:block; height:100%; background:#0ea5e9; border-radius:999px; }
.checkline { display:flex; align-items:center; gap:.5rem; }
.timeline .timeline-week, .timeline .micro-cell { cursor:default; text-decoration:none; }
@media (max-width: 760px) {
  .module-edit-block { padding:.75rem; }
}

/* V1.6.036 — séances datées / non datées */
.day-card.day-status-done { background: #ecfdf5; border-color: #86efac; }
.day-card.day-status-planned { background: #eff6ff; border-color: #93c5fd; }
.session-mini.session-done { border-left: 4px solid #16a34a; }
.session-mini.session-planned { border-left: 4px solid #2563eb; }
.session-mini.session-linked { box-shadow: inset 0 0 0 1px rgba(15, 23, 42, .08); }
.notice.small { font-size: .9rem; padding: .55rem .75rem; border-radius: .75rem; background: #f8fafc; border: 1px solid #e2e8f0; }

/* V1.6.037 — bibliothèque de séances */
.session-library-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1rem}
.session-library-card{border:1px solid var(--border,#d8dee8);border-radius:18px;padding:1rem;background:var(--card,#fff);box-shadow:0 10px 25px rgba(15,23,42,.06)}
.library-action{margin-top:.75rem;border-top:1px solid var(--border,#d8dee8);padding-top:.75rem}
.form-stack.compact{gap:.55rem}.form-stack.compact label{margin:.25rem 0}

/* V1.6.0371 — Library Hub séances */
.info-card { display:flex; gap:.75rem; align-items:flex-start; flex-wrap:wrap; }
.library-section { margin-top:1rem; }
.section-head { display:flex; justify-content:space-between; gap:1rem; align-items:flex-start; margin-bottom:1rem; }
.library-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(280px,1fr)); gap:1rem; }
.library-card { border:1px solid rgba(15,23,42,.10); border-radius:18px; background:#fff; padding:1rem; box-shadow:0 10px 24px rgba(15,23,42,.05); }
.library-card-head { display:flex; justify-content:space-between; gap:1rem; align-items:flex-start; }
.library-card h3 { margin:.1rem 0 .35rem; }
.library-actions-grid { display:grid; grid-template-columns:repeat(auto-fit,minmax(220px,1fr)); gap:1rem; margin-top:1rem; }
.card-details { margin-top:.75rem; }
.card-details summary { cursor:pointer; color:#0f766e; font-weight:700; }

/* V1.8.9.11 — Chip-row groupes par axe (intensite / modalite / nage) sur la
   liste modules timeless. Style sobre : pas de pochettes colorees, juste un
   trait vertical fin entre les 3 groupes. */
.chip-row { display: flex; flex-wrap: wrap; gap: 0; align-items: center; margin-top: 6px; }
.chip-row .chip-group {
  display: inline-flex; gap: 4px; align-items: center;
  padding: 2px 10px;
}
.chip-row .chip-group:first-child { padding-left: 0; }
.chip-row .chip-group + .chip-group {
  border-left: 1px solid rgba(15, 72, 120, .18);
}
.chip-row .chip-group .chip {
  padding: 3px 8px; font-size: 12px; font-weight: 600;
}

/* V1.8.9.11 — Picker module compact (sessions_create) : layout 1 ligne par
   module avec champ de recherche en tete. Le content snippet du module est
   en tooltip (title) pour ne pas surcharger la liste. */
.session-picker-modal .picker-search {
  display: flex; align-items: center; gap: 12px;
  padding: 8px 10px;
  background: rgba(15, 127, 209, .04);
  border: 1px solid rgba(15, 72, 120, .14);
  border-radius: 10px;
  margin-bottom: .75rem;
}
.session-picker-modal .picker-search input[type="search"] {
  flex: 1;
  padding: 6px 10px;
  border: 1px solid rgba(15, 72, 120, .2);
  border-radius: 8px;
  font-size: .9rem;
}
.session-picker-modal .picker-count { white-space: nowrap; }
.session-picker-modal .picker-rows {
  display: flex; flex-direction: column;
  max-height: 60vh; overflow-y: auto;
  border: 1px solid rgba(15, 72, 120, .12);
  border-radius: 10px;
}
.session-picker-modal .picker-row {
  display: grid;
  grid-template-columns: auto 1fr auto auto;
  gap: 12px; align-items: center;
  padding: 8px 12px;
  border-bottom: 1px solid rgba(15, 72, 120, .08);
  cursor: default;
}
.session-picker-modal .picker-row:last-child { border-bottom: none; }
.session-picker-modal .picker-row:hover { background: rgba(15, 127, 209, .05); }
.session-picker-modal .picker-row-title {
  font-weight: 600;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.session-picker-modal .picker-row-vol {
  font-size: .85rem; color: rgba(15, 72, 120, .7);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.session-picker-modal .picker-row-type { font-size: .8rem; }

/* V1.8.9.11 — Accordeon filtres (modules + sessions) ferme par defaut */
.filters-accordion { margin: 0; }
.filters-accordion__summary {
  cursor: pointer;
  padding: 8px 0;
  font-size: 1.05rem;
  color: var(--hub-ink, #102033);
  user-select: none;
  list-style: none;
  display: flex;
  align-items: center;
  gap: 10px;
}
.filters-accordion__summary::-webkit-details-marker { display: none; }
.filters-accordion__summary::before {
  content: '▶';
  display: inline-block;
  font-size: 0.75em;
  color: var(--hub-blue, #0f7fd1);
  transition: transform .15s ease;
}
.filters-accordion[open] .filters-accordion__summary::before { transform: rotate(90deg); }
.filters-accordion[open] .filters-accordion__summary { border-bottom: 1px dashed var(--hub-line, rgba(15,72,120,.14)); margin-bottom: .75rem; }
.date-planning-box details { border:1px solid rgba(15,23,42,.12); border-radius:16px; padding:.85rem 1rem; background:#f8fafc; }
.date-planning-box summary { cursor:pointer; }
.form-grid.compact { grid-template-columns:repeat(auto-fit,minmax(180px,1fr)); margin-top:.75rem; }

/* V1.6.038 — navigation par espaces + Library Hub */
.mobile-nav-toggle{display:none}.nav-v2 .app-sidebar{width:280px;padding:18px 14px;overflow:auto}.sidebar a.brand{padding:0;margin-bottom:26px;color:#fff;display:flex;gap:10px;align-items:center;font-weight:800;font-size:20px;text-decoration:none}.sidebar a.brand:hover{background:transparent;color:#fff;opacity:.92}.space-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;margin:0 0 16px}.space-pill{display:flex!important;justify-content:center;align-items:center;border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.06);border-radius:999px;padding:8px 9px!important;font-weight:850;font-size:.84rem}.space-pill.active{background:linear-gradient(135deg,#29c4d8,#0f7fd1)!important;color:white!important;border-color:transparent}.nav-v2 .nav-section{padding-top:12px;margin-top:10px}.nav-v2 .nav-section span{display:block;margin:0 0 5px 8px;text-transform:uppercase;letter-spacing:.08em;font-size:.72rem;font-weight:900}.nav-v2 .nav-link.active,.nav-v2 .nav-main.active{background:rgba(255,255,255,.18)!important;color:white!important}.app-topbar{position:sticky;top:12px;z-index:15;gap:12px}.topbar-title{display:grid;gap:1px;min-width:190px}.top-space-switch{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.top-space{border:1px solid var(--border);background:rgba(255,255,255,.72);border-radius:999px;padding:8px 11px;font-weight:850;font-size:.88rem}.top-space.active{background:linear-gradient(135deg,var(--hub-blue,#0f7fd1),#0b67ba);color:#fff;border-color:transparent;box-shadow:0 10px 18px rgba(15,127,209,.18)}.mobile-menu-btn{display:none;cursor:pointer;border:1px solid var(--border);border-radius:12px;padding:8px 11px;font-weight:900;background:var(--card)}.hub-page-head{align-items:center}.hub-overview-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:16px;margin:18px 0}.hub-tile{display:flex;gap:16px;align-items:flex-start;border:1px solid var(--border);border-radius:24px;background:var(--card);padding:20px;box-shadow:var(--shadow);transition:.16s ease}.hub-tile:hover{transform:translateY(-2px);border-color:rgba(15,127,209,.35)}.hub-tile.primary{background:linear-gradient(145deg,#071d35,#0b4d83);color:white}.hub-tile.primary p{color:#d9ecff}.hub-tile-icon{font-size:2rem}.hub-tile h2{margin:.1rem 0 .35rem}.hub-tile p{color:var(--muted);margin:.2rem 0 .75rem}.hub-tile strong{color:var(--primary)}.hub-tile.primary strong{color:#65e4f2}.library-scope-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px}.library-scope-grid>div{border:1px solid var(--border);border-radius:18px;background:rgba(15,127,209,.04);padding:14px}.soft-card{background:linear-gradient(135deg,#fff,#f5fbff)}
@media(max-width:1100px){.top-space-switch{display:none}.nav-v2 .app-sidebar{width:250px}.top-actions{flex-wrap:wrap}}
@media(max-width:900px){.mobile-menu-btn{display:inline-flex}.nav-v2{display:block}.nav-v2 .app-sidebar{position:fixed;z-index:60;inset:0 auto 0 0;width:min(86vw,320px);height:100vh;transform:translateX(-105%);transition:.18s ease;box-shadow:30px 0 80px rgba(0,0,0,.28)}.mobile-nav-toggle:checked+.app-shell .app-sidebar{transform:translateX(0)}.app-main{padding:10px}.app-topbar{top:8px;border-radius:16px}.topbar-title{min-width:0}.top-actions .btn{padding:8px 10px}.hub-page-head{display:block}.section-head{display:block}.space-switch{grid-template-columns:repeat(2,1fr)}}
.metric-summary-grid{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}

/* V1.6.0382 — Admin Hub clarifié */
.admin-hub-grid.compact-grid{grid-template-columns:repeat(auto-fit,minmax(240px,1fr));margin-top:12px}
.admin-scope-card .admin-hub-card h3{margin:.1rem 0 .25rem;font-size:1.05rem}
.admin-scope-card .admin-hub-card p{margin:.2rem 0;color:var(--muted,#64748b)}

/* Fiche sportif — bande KPI compacte (remplace l'ancienne grille .athlete-kpi-grid : tuiles trop
   volumineuses + conflit min-height). Suit le thème. */
.athlete-statbar{display:flex;align-items:center;flex-wrap:wrap;gap:6px 16px;margin:12px 0;padding:9px 14px;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow)}
.athlete-statbar .asb-stat{display:inline-flex;align-items:baseline;gap:6px}
.athlete-statbar .asb-stat b{font-size:1.05rem;font-weight:800;color:var(--text)}
.athlete-statbar .asb-stat small{font-size:.76rem;color:var(--muted)}
.athlete-statbar .asb-sep{width:1px;align-self:stretch;background:var(--border);margin:2px 0}
.athlete-statbar .asb-period{font-size:.76rem;color:var(--muted)}
.athlete-statbar .asb-note{font-size:.7rem;opacity:.85}
@media(max-width:620px){.athlete-statbar .asb-sep{display:none}}
/* Fiche sportif — suivi hebdo en mini-widget (le moteur du graphe est inchangé ; on contraint l'affichage) */
.athlete-week-mini{max-width:660px;padding:12px 14px}
.athlete-week-mini>h2{font-size:1.02rem;margin:0 0 2px}
.athlete-week-mini .week-volume-chart__svg{height:150px!important;width:auto!important;min-width:0!important;max-width:none!important}
.athlete-week-mini .week-volume-chart__legend{font-size:11px;margin-top:6px}
.text-ok{color:var(--ok)}
.text-warn{color:var(--warn)}
.qual-volume-compare .h3-inline{margin:22px 0 10px;font-size:1rem}
.qual-volume-compare .h3-inline:first-of-type{margin-top:14px}
.qual-compare-table-wrap{margin-bottom:8px}
.qual-compare-table th.num,.qual-compare-table td.num{text-align:right;white-space:nowrap}
.qual-compare-table tbody tr:nth-child(even){background:rgba(148,163,184,.06)}
.zone-breakdown-list{list-style:none;padding:0;margin:0;display:grid;gap:10px}
.zone-breakdown-list li{display:grid;grid-template-columns:1fr auto auto;gap:8px 12px;align-items:center}
.zone-breakdown-list .zone-bar{grid-column:1/-1;height:6px;border-radius:999px;background:rgba(148,163,184,.25);overflow:hidden}
.zone-breakdown-list .zone-bar::after{content:"";display:block;height:100%;width:var(--pct);background:linear-gradient(90deg,var(--primary),var(--primary-2));border-radius:999px}
.month-volume-chart{margin-top:8px}
.month-volume-chart__scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}
.month-volume-chart--scroll .month-volume-chart__svg{width:auto;min-width:min(100%,var(--chart-w,720px));max-width:none}
.month-volume-chart--sparse .month-volume-chart__svg{display:block;width:100%;max-width:100%;height:auto}
.month-volume-chart__grid{stroke:var(--border);stroke-width:1;stroke-dasharray:4 4}
.month-volume-chart__ylabel{font-size:11px;fill:var(--muted)}
.month-volume-chart__line{stroke:var(--primary);stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.month-volume-chart--medium .month-volume-chart__line,.month-volume-chart--dense .month-volume-chart__line{stroke-width:2}
.month-volume-chart__dot{fill:var(--surface);stroke:var(--primary);stroke-width:2}
.month-volume-chart--sparse .month-volume-chart__dot{stroke-width:2.5}
.month-volume-chart__point:hover .month-volume-chart__dot{fill:var(--primary)}
.month-volume-chart--sparse .month-volume-chart__point:hover .month-volume-chart__dot{r:6}
.month-volume-chart--medium .month-volume-chart__point:hover .month-volume-chart__dot{r:5}
.month-volume-chart--dense .month-volume-chart__point:hover .month-volume-chart__dot{r:4}
.month-volume-chart__xlabel{font-size:11px;fill:var(--muted)}
.month-volume-chart--medium .month-volume-chart__xlabel{font-size:10px}
.month-volume-chart--dense .month-volume-chart__xlabel{font-size:9px}
.month-volume-chart__legend{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px 16px;margin:12px 0 0;padding:0;list-style:none}
.month-volume-chart--dense .month-volume-chart__legend{grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:6px 12px}
.month-volume-chart__legend li{display:flex;flex-direction:column;gap:2px;font-size:12px}
.month-volume-chart--dense .month-volume-chart__legend li{font-size:11px}
.month-volume-chart__legend-label{color:var(--muted)}
.month-volume-chart__legend strong{font-size:14px}
.month-volume-chart--dense .month-volume-chart__legend strong{font-size:12px}
.week-volume-chart{margin-top:8px;position:relative}
.week-volume-chart__tooltip{position:absolute;z-index:12;min-width:190px;max-width:260px;padding:10px 12px;border-radius:12px;border:1px solid var(--border);background:var(--card);box-shadow:0 12px 32px rgba(7,29,53,.16);display:none;gap:4px;font-size:12px;line-height:1.35;pointer-events:none}
.week-volume-chart__tooltip.is-open{display:grid}
.week-volume-chart__data{display:none!important}
.week-volume-chart__tooltip strong{font-size:13px}
.week-volume-chart__tooltip span{color:var(--muted)}
.week-volume-chart__tooltip span strong{color:var(--text)}
.week-volume-chart__point.is-active .week-volume-chart__dot--athlete{fill:var(--primary)}
.week-volume-chart__hit{cursor:pointer;pointer-events:all}
.week-volume-chart__scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;padding-bottom:4px}
.week-volume-chart--scroll .week-volume-chart__svg{width:auto;min-width:min(100%,var(--chart-w,760px));max-width:none}
.week-volume-chart--sparse .week-volume-chart__svg{display:block;width:100%;max-width:100%;height:auto}
.week-volume-chart__grid{stroke:var(--border);stroke-width:1;stroke-dasharray:4 4}
.week-volume-chart__ylabel{font-size:11px;fill:var(--muted)}
.week-volume-chart--medium .week-volume-chart__ylabel,.week-volume-chart--dense .week-volume-chart__ylabel{font-size:10px}
.week-volume-chart__line{stroke-width:2.5;stroke-linecap:round;stroke-linejoin:round}
.week-volume-chart--medium .week-volume-chart__line,.week-volume-chart--dense .week-volume-chart__line{stroke-width:2}
.week-volume-chart__line--athlete{stroke:var(--primary)}
.week-volume-chart__line--group{stroke:var(--primary-2);stroke-dasharray:6 4;opacity:.9}
.week-volume-chart__dot--athlete{fill:var(--surface);stroke:var(--primary);stroke-width:2}
.week-volume-chart__dot--group{fill:var(--surface);stroke:var(--primary-2);stroke-width:1.75}
.week-volume-chart--sparse .week-volume-chart__dot--athlete{stroke-width:2.5}
.week-volume-chart--sparse .week-volume-chart__dot--group{stroke-width:2}
.week-volume-chart__point:hover .week-volume-chart__dot--athlete{fill:var(--primary)}
.week-volume-chart--sparse .week-volume-chart__point:hover .week-volume-chart__dot--athlete{r:6}
.week-volume-chart--medium .week-volume-chart__point:hover .week-volume-chart__dot--athlete{r:4.5}
.week-volume-chart--dense .week-volume-chart__point:hover .week-volume-chart__dot--athlete{r:3.5}
.week-volume-chart__xlabel{font-size:10px;fill:var(--muted)}
.week-volume-chart--medium .week-volume-chart__xlabel{font-size:9px}
.week-volume-chart--dense .week-volume-chart__xlabel{font-size:8px}
.week-volume-chart__pct{font-size:11px;font-weight:600;fill:var(--text)}
.week-volume-chart--medium .week-volume-chart__pct{font-size:10px}
.week-volume-chart__legend{display:flex;flex-wrap:wrap;gap:10px 20px;margin:12px 0 0;padding:0;list-style:none;font-size:12px;align-items:center}
.week-volume-chart__legend .muted{margin-left:auto}
.week-volume-chart__swatch{display:inline-block;width:18px;height:3px;border-radius:999px;vertical-align:middle;margin-right:6px}
.week-volume-chart__swatch--athlete{background:var(--primary)}
.week-volume-chart__swatch--group{background:var(--primary-2)}
.attendance-matrix th:nth-child(4),.attendance-matrix td:nth-child(4){min-width:120px}
.athlete-name-tip{cursor:help;text-decoration:underline dotted;text-underline-offset:3px}
.pager-actions{flex-wrap:wrap}
.section-head .pager-actions{margin-top:0}
.qualitative-overview-head .qualitative-head-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;margin-bottom:10px}
.qualitative-overview-head h1{margin:0}
.qualitative-toolbar-row{display:flex;flex-wrap:nowrap;align-items:center;gap:10px;margin:0}
.qualitative-toolbar-row .qualitative-season-picker{margin:0;flex:1 1 auto;min-width:0}
.qualitative-toolbar-row .qualitative-season-picker select{width:100%;min-width:min(420px,100%);max-width:100%}
.qualitative-toolbar-row .btn,.qualitative-toolbar-row .btn.ghost{flex:0 0 auto;white-space:nowrap}
.qualitative-season-caption{font-weight:600;white-space:nowrap}
.qualitative-week-table td.num-cell,.qualitative-week-table th.week-col,.qualitative-week-table th.total-col{white-space:nowrap;font-variant-numeric:tabular-nums;text-align:right}
.qualitative-week-table td.sticky-col,.qualitative-week-table th.sticky-col{text-align:left;white-space:normal}
.qualitative-week-table th.week-col{vertical-align:bottom;line-height:1.2;min-width:72px}
.qualitative-week-table .week-col-label{display:block;font-size:11px;font-weight:700}
.qualitative-week-table .week-col-theme{display:block;font-size:10px;font-weight:800;color:var(--primary);letter-spacing:.03em;margin-top:2px}
.qualitative-week-table .row-total td{font-weight:700}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@media(max-width:900px){.qualitative-toolbar-row{flex-wrap:wrap}}

/* Attendance session — metrics accordion */
.attendance-session-table .attendance-metrics-head{min-width:min(720px,70vw)}
.attendance-session-table .attendance-metrics-cell{min-width:min(720px,70vw)}
.attendance-row-metrics{display:flex;align-items:flex-start;gap:10px}
.attendance-copy-btn{flex:0 0 auto;white-space:nowrap;margin-top:2px}
.attendance-metrics-accordion{display:flex;flex:1;min-width:0;gap:6px;flex-wrap:wrap}
.attendance-metrics-accordion>.attendance-panel{flex:1 1 120px;min-width:120px;border:1px solid var(--border);border-radius:12px;background:rgba(148,163,184,.06);overflow:hidden}
.attendance-metrics-accordion>.attendance-panel>summary{cursor:pointer;font-weight:800;font-size:12px;text-transform:uppercase;letter-spacing:.04em;padding:10px 12px;list-style:none}
.attendance-metrics-accordion>.attendance-panel>summary::-webkit-details-marker{display:none}
.attendance-metrics-accordion>.attendance-panel[open]{flex:2 1 220px;min-width:220px;background:var(--card)}
.attendance-metrics-accordion>.attendance-panel>summary::after{content:"+";float:right;color:var(--muted);font-weight:700}
.attendance-metrics-accordion>.attendance-panel[open]>summary::after{content:"−"}
.attendance-metrics-accordion .mini-grid{padding:0 10px 10px}
.attendance-panel-comment textarea{min-height:72px;margin:0 10px 10px;width:calc(100% - 20px)}
@media(max-width:900px){.attendance-row-metrics{flex-direction:column}.attendance-metrics-accordion{flex-direction:column}.attendance-metrics-accordion>.attendance-panel,.attendance-metrics-accordion>.attendance-panel[open]{flex:1 1 auto;min-width:0}}

/* Planning navigation (V1.6.036) */
.planning-nav,.planning-cycle-links{display:inline-flex;flex-wrap:wrap;gap:8px;align-items:center}
.planning-cycle-links{margin:.35rem 0 0}
.sequence-chip-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.sequence-chip{font-size:12px;line-height:1.3;white-space:nowrap;max-width:14rem;overflow:hidden;text-overflow:ellipsis}
.macro-meso-sequence-table td:last-child{min-width:180px}
.page-head .top-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:flex-end}
.radio-card{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border:1px solid var(--border);border-radius:12px;margin-bottom:10px;cursor:pointer;background:rgba(148,163,184,.04)}
.radio-card input{margin-top:4px}
.radio-card span{display:flex;flex-direction:column;gap:4px}
.radio-card small{color:var(--muted);font-weight:400}
.import-panel{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--border)}
.checkbox-grid{display:flex;flex-direction:column;gap:8px}
.call-badge.non_renseigne{background:var(--border);color:var(--muted);border:1px dashed var(--muted)}
.call-badge.hors_groupe{background:transparent;color:var(--muted);border:1px solid var(--border);font-size:10px}

/* Platform defaults hub */
.platform-defaults-hint{margin:0 0 10px;font-size:13px}
.platform-defaults-card{display:flex;flex-direction:column;min-height:0}
.platform-defaults-add{margin:0 0 12px;border:1px solid var(--border);border-radius:12px;background:rgba(148,163,184,.06);overflow:hidden}
.platform-defaults-add>summary{cursor:pointer;font-weight:700;font-size:13px;padding:10px 12px;list-style:none}
.platform-defaults-add>summary::-webkit-details-marker{display:none}
.platform-defaults-add>summary::after{content:"+";float:right;color:var(--muted);font-weight:700}
.platform-defaults-add[open]>summary::after{content:"−"}
.platform-defaults-add[open]>summary{border-bottom:1px solid var(--border);margin-bottom:0}
.platform-defaults-add .form-stack{padding:10px 12px 12px;margin:0}
.platform-defaults-list{display:grid;gap:8px;flex:1 1 auto;margin:0}
.platform-defaults-card-footer{margin-top:12px;padding-top:12px;border-top:1px solid var(--border)}
.platform-defaults-card-footer .btn{width:100%}
.inline-default-form{display:grid;grid-template-columns:1fr auto auto;gap:6px;align-items:center;padding:8px;border:1px solid var(--border);border-radius:12px;background:rgba(148,163,184,.06)}
.inline-default-form--stroke{grid-template-columns:1fr 90px auto auto}
.inline-default-form.is-dirty{border-color:var(--primary);box-shadow:0 0 0 2px rgba(14,165,233,.15)}
.inline-default-form.is-inactive{opacity:.55}
.inline-default-form.is-invalid{border-color:var(--danger)}
.platform-defaults.is-saving{opacity:.85;pointer-events:none}
.platform-toast{position:fixed;right:18px;bottom:18px;z-index:200;max-width:min(360px,92vw);padding:12px 16px;border-radius:14px;font-weight:700;box-shadow:var(--shadow)}
.platform-toast--success{background:#dcfce7;color:#166534;border:1px solid #86efac}
.platform-toast--error{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5}

/* ── Stroke catalog — badges & composite editor (V1.8.7) ── */
.badge--base{background:#e0f2fe;color:#0369a1;border:1px solid #bae6fd}
.badge--composite{background:#f3e8ff;color:#7c3aed;border:1px solid #ddd6fe}
.stroke-parts-preview{font-size:.75rem;color:var(--muted);font-style:italic;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:220px}
.stroke-composite-editor{background:rgba(124,58,237,.04);border:1px dashed #ddd6fe;border-radius:12px;padding:12px;margin:.75rem 0}
.stroke-parts-table{width:100%;border-collapse:collapse;font-size:.875rem}
.stroke-parts-table th{text-align:left;font-weight:600;padding:4px 6px;border-bottom:1px solid var(--border)}
.stroke-parts-table td{padding:4px 6px;vertical-align:middle}
.stroke-parts-table select,.stroke-parts-table input[type="number"]{font-size:.875rem}
/* Flex row for the platform strokes management list */
.platform-stroke-row{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:.5rem .625rem;border-radius:12px;border:1px solid var(--border);background:rgba(148,163,184,.06);margin:.375rem 0;transition:border-color .15s,box-shadow .15s,opacity .15s}
.platform-stroke-row input[name="name"]{flex:1 1 140px;min-width:0}
.platform-stroke-row input[name="code"]{width:84px;flex-shrink:0}
.platform-stroke-row.is-dirty{border-color:var(--primary);box-shadow:0 0 0 2px rgba(14,165,233,.15)}
.platform-stroke-row.is-inactive{opacity:.55}
.platform-stroke-row.is-invalid{border-color:var(--danger)}

/* Session show — layout récap + modules compacts */
.session-show-delete{margin-top:-.25rem;margin-bottom:.75rem}
.session-show-layout{display:grid;gap:14px;margin-bottom:14px}
.session-show-modules-card{margin:0}

/* === Session header v2 (compact, focus sur la seance) === */
.session-head{padding:12px 16px 14px;margin-bottom:14px}
.session-head__top{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:6px}
.session-head__nav{display:flex;gap:2px;flex-wrap:wrap;align-items:center;min-width:0;flex:1}
.session-head__nav-link{font-size:12px;color:var(--muted);text-decoration:none;padding:3px 8px;border-radius:6px;font-weight:600;white-space:nowrap}
.session-head__nav-link:hover{background:rgba(148,163,184,.12);color:var(--text)}
.session-head__actions{display:flex;align-items:center;gap:4px;flex-wrap:wrap;flex-shrink:0}

.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:9px;border:1px solid var(--border);background:var(--card);color:var(--text);font-size:14px;line-height:1;cursor:pointer;text-decoration:none;transition:background .15s ease,border-color .15s ease,transform .1s ease,color .15s ease;font-family:inherit;padding:0}
.icon-btn:hover{background:rgba(148,163,184,.12);border-color:var(--primary);color:var(--primary)}
.icon-btn:active{transform:scale(.94)}
.icon-btn--primary{background:var(--primary);color:#fff;border-color:var(--primary)}
.icon-btn--primary:hover{background:var(--primary-2);border-color:var(--primary-2);color:#fff}

.session-head__menu{position:relative}
.session-head__menu-panel{position:absolute;top:calc(100% + 6px);right:0;min-width:260px;max-width:320px;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 12px 32px rgba(15,23,42,.16);padding:6px;z-index:40}
.session-head__menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;border:0;background:none;color:var(--text);text-align:left;text-decoration:none;border-radius:8px;font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}
.session-head__menu-item:hover{background:rgba(148,163,184,.14)}
.session-head__menu-item--danger{color:var(--danger)}
.session-head__menu-item--danger:hover{background:rgba(220,38,38,.08)}
.session-head__menu-icon{font-size:14px;width:18px;text-align:center;flex-shrink:0}
.session-head__menu-sep{border:0;border-top:1px solid var(--border);margin:4px 6px}
.session-head__menu-form{margin:0}

.session-head__title{margin:2px 0 8px;font-size:1.55rem;line-height:1.2;font-weight:800;letter-spacing:-.01em;font-family:var(--font-title,inherit)}
.session-head__meta{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-bottom:10px;font-size:13px;color:var(--muted)}
.session-head__meta-chip{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.session-head__meta .badge{font-size:11px}

.session-head__obj{display:grid;gap:4px;padding:8px 12px;background:rgba(148,163,184,.06);border-radius:10px;border-left:3px solid var(--primary);font-size:13px}
.session-head__obj-line{margin:0;display:flex;gap:8px;align-items:baseline;line-height:1.4}
.session-head__obj-line--critical{border-top:1px dashed var(--border);padding-top:4px;margin-top:2px}
/* V1.9.x contraste : étiquette = couleur d'accent du thème + fond = teinte translucide DE CE MÊME accent
   (color-mix) -> l'accent contraste toujours avec le fond du thème (clair OU sombre), donc lisible partout. */
.session-head__obj-label{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--primary);flex-shrink:0;padding:2px 6px;border-radius:6px;background:color-mix(in srgb,var(--primary) 14%,transparent);min-width:60px;text-align:center}
/* « Critique » = ambre ; sur fond CLAIR il faut un ambre FONCÉ (un ambre vif sur tuile ambre claire est illisible). Les peaux sombres le ré-éclaircissent (cf session-themes.css). */
.session-head__obj-line--critical .session-head__obj-label{color:var(--obj-critique-fg,#b45309);background:color-mix(in srgb,var(--warn,#f59e0b) 16%,transparent)}

@media (max-width:600px){
  .session-head{padding:10px 12px 12px}
  .session-head__title{font-size:1.2rem}
  .session-head__top{flex-wrap:wrap}
  .session-head__menu-panel{right:auto;left:0;min-width:220px}
  .icon-btn{width:32px;height:32px}
}
.session-show-recap--footer{margin:0}
.session-modules{display:grid;gap:10px}
.session-module{padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:var(--module-bg,rgba(148,163,184,.04))}
.session-module__head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:6px;flex-wrap:wrap}
.session-module__title-group{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0;flex:1}
.session-module__title{margin:0;font-size:1.05rem}
.session-module__volume{font-weight:800;font-size:.9rem;white-space:nowrap;color:var(--primary);flex-shrink:0}
.session-module__type-form{margin:0;flex-shrink:0}
.session-module__content{margin:0;font-size:14px;line-height:1.45}
.session-recap{margin:0}
.session-recap__title{margin:0 0 6px;font-size:1rem}
.session-recap__total{margin:0 0 12px;font-size:1.35rem}
.session-recap__block{margin-bottom:12px}
.session-recap__block:last-child{margin-bottom:0}
.session-recap__heading{margin:0;font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:var(--muted)}
.session-recap__list{list-style:none;margin:0;padding:0;display:grid;gap:4px;font-size:13px}
.session-recap__list li{display:flex;align-items:center;justify-content:space-between;gap:8px}
.session-recap__list .zone-dot{flex:0 0 auto}

/* === Recap seance v2 (moderne) === */
.session-recap--v2{padding:0;overflow:hidden;border-radius:18px}
.session-recap--v2 .session-recap__hero{position:relative;padding:18px 20px 16px;background:var(--hero-grad,linear-gradient(135deg,var(--primary) 0%,var(--primary-2) 100%));color:var(--hero-fg,#fff);display:flex;flex-direction:column;gap:2px}
.session-recap--v2 .session-recap__hero::after{content:"";position:absolute;inset:auto -20% -60% auto;width:180px;height:180px;background:radial-gradient(circle,rgba(255,255,255,.18) 0%,transparent 70%);pointer-events:none}
.session-recap--v2 .session-recap__hero-label{font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;opacity:.85;z-index:1;position:relative}
.session-recap--v2 .session-recap__hero-value{font-size:2.1rem;font-weight:900;line-height:1;z-index:1;position:relative;display:inline-flex;align-items:baseline;gap:6px}
.session-recap--v2 .session-recap__hero-unit{font-size:1rem;font-weight:700;opacity:.85}
/* V1.9.x (temps de depart) — hero a deux stats (Volume + Duree theorique) cote a cote */
.session-recap--v2 .session-recap__hero--multi{flex-direction:row;flex-wrap:wrap;align-items:flex-end;gap:28px}
.session-recap--v2 .session-recap__hero-stat{display:flex;flex-direction:column;gap:2px;z-index:1;position:relative}
.session-recap--v2 .session-recap__hero-stat--duration .session-recap__hero-value{font-size:1.6rem}
.session-recap--v2 .session-recap__empty{padding:18px 20px;margin:0}
.session-recap--v2 .session-recap__section{padding:14px 20px;border-top:1px solid var(--border)}
.session-recap--v2 .session-recap__section-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:10px}
.session-recap--v2 .session-recap__section-total{font-size:.85rem;font-weight:800;color:var(--text)}

/* Spectre : une barre coloree avec libelles a l'interieur (zones, nages, modalites) */
.recap-spectrum{position:relative;display:flex;height:54px;border-radius:12px;overflow:visible;box-shadow:0 2px 6px rgba(15,23,42,.08),inset 0 0 0 1px rgba(15,23,42,.04)}
.recap-spectrum::before{content:"";position:absolute;inset:0;border-radius:inherit;overflow:hidden;pointer-events:none;z-index:0}
.recap-spectrum__seg{position:relative;display:flex;color:#fff;line-height:1.1;white-space:nowrap;min-width:22px;transition:flex-grow .25s ease,filter .15s ease;text-shadow:0 1px 2px rgba(0,0,0,.25);cursor:default;container-type:inline-size}
.recap-spectrum__seg:first-child{border-top-left-radius:12px;border-bottom-left-radius:12px}
.recap-spectrum__seg:last-child{border-top-right-radius:12px;border-bottom-right-radius:12px}
.recap-spectrum__seg + .recap-spectrum__seg{box-shadow:inset 1px 0 0 rgba(255,255,255,.35)}
.recap-spectrum__seg--light{color:#0f172a;text-shadow:none}
.recap-spectrum__seg--light + .recap-spectrum__seg,.recap-spectrum__seg + .recap-spectrum__seg--light{box-shadow:inset 1px 0 0 rgba(15,23,42,.18)}
.recap-spectrum__seg:hover{filter:brightness(1.08) saturate(1.1);z-index:5}
.recap-spectrum__seg-inner{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4px 4px;overflow:hidden;text-align:center;min-width:0;border-radius:inherit}
.recap-spectrum__seg-label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;opacity:.95;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.recap-spectrum__seg-value{font-size:13px;font-weight:900;font-variant-numeric:tabular-nums}
.recap-spectrum__seg-pct{font-size:10px;font-weight:700;opacity:.85;font-variant-numeric:tabular-nums}
/* Pour les segments etroits, on masque progressivement les details */
@container (max-width: 60px){ .recap-spectrum__seg-pct{display:none} }
@container (max-width: 48px){ .recap-spectrum__seg-label{display:none} }
@container (max-width: 30px){ .recap-spectrum__seg-value{display:none} }

/* Tooltip custom sur hover du segment (visible meme pour les petits) */
.recap-spectrum__seg[data-tooltip]::after{
  content:attr(data-tooltip);
  position:absolute;
  bottom:calc(100% + 8px);
  left:50%;
  transform:translateX(-50%) translateY(4px);
  background:var(--text);
  color:#fff;
  padding:6px 10px;
  border-radius:8px;
  font-size:12px;
  font-weight:700;
  white-space:nowrap;
  letter-spacing:0;
  text-transform:none;
  text-shadow:none;
  opacity:0;
  pointer-events:none;
  transition:opacity .15s ease,transform .15s ease;
  z-index:10;
  box-shadow:0 6px 16px rgba(15,23,42,.18);
}
.recap-spectrum__seg[data-tooltip]::before{
  content:"";
  position:absolute;
  bottom:calc(100% + 2px);
  left:50%;
  transform:translateX(-50%) translateY(4px);
  border:6px solid transparent;
  border-top-color:var(--text);
  opacity:0;
  pointer-events:none;
  transition:opacity .15s ease,transform .15s ease;
  z-index:10;
}
.recap-spectrum__seg:hover[data-tooltip]::after,
.recap-spectrum__seg:hover[data-tooltip]::before{
  opacity:1;
  transform:translateX(-50%) translateY(0);
}

/* Tabs pour basculer entre vues (base / detail) des nages */
.recap-tabs{display:inline-flex;gap:0;padding:3px;background:rgba(148,163,184,.14);border-radius:10px;margin-bottom:10px}
.recap-tab{appearance:none;border:0;background:transparent;color:var(--muted);font:inherit;font-size:12px;font-weight:700;padding:5px 10px;border-radius:7px;cursor:pointer;transition:background .15s ease,color .15s ease;letter-spacing:.02em}
.recap-tab:hover{color:var(--text)}
.recap-tab.is-active{background:var(--card);color:var(--text);box-shadow:0 1px 3px rgba(15,23,42,.08)}
.recap-tabs + .js-strokes-panel,.js-strokes-panel + .js-strokes-panel{margin-top:0}
.hidden{display:none!important}

/* Backgrounds des zones (pour barre coloree) */
.z-bg-white{background:#f8fafc}
.z-bg-blue{background:#3b82f6}
.z-bg-green{background:#22c55e}
.z-bg-yellow{background:#eab308}
.z-bg-orange{background:#f97316}
.z-bg-red{background:#ef4444}
.z-bg-pink{background:#ec4899}

@media (max-width:900px){
  .session-recap--v2 .session-recap__hero-value{font-size:1.8rem}
  .session-recap--v2 .session-recap__section{padding:12px 14px}
  .session-recap--v2 .session-recap__hero{padding:14px 16px 12px}
  .recap-spectrum{height:48px}
}

/* P0 — frise planning : orientation colonnes / lignes */
.planning-frise{display:grid;gap:10px}
.planning-frise--ghost-orientation .frise-orientation,.planning-frise--ghost-orientation .timeline-wrap--lignes{display:none!important}
.frise-orientation{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.frise-orientation__btn{border:1px solid var(--border);background:var(--card);color:var(--text);border-radius:999px;padding:8px 14px;font:inherit;font-weight:700;cursor:pointer}
.frise-orientation__btn:hover{border-color:var(--primary);color:var(--primary)}
.frise-orientation__btn.is-active{background:var(--primary);border-color:var(--primary);color:#fff}
.frise-season-marker{margin:0}
.planning-frise .timeline-wrap--lignes{overflow:auto;max-height:min(85vh,920px);padding-bottom:10px}
.planning-frise .timeline--rows{display:grid;grid-template-columns:132px repeat(6,minmax(88px,1fr));grid-auto-rows:minmax(64px,auto);gap:6px;min-width:max(900px,calc(132px + 6 * 92px))}
.planning-frise .timeline-corner{position:sticky;top:0;left:0;z-index:4;background:var(--card);border:1px solid var(--border);border-radius:10px;min-height:40px}
.planning-frise .timeline-band-header{position:sticky;top:0;z-index:3;background:rgba(148,163,184,.12);border:1px solid var(--border);border-radius:10px;padding:8px;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:800;display:flex;align-items:center;justify-content:center;text-align:center}
.planning-frise .timeline-week-label{position:sticky;left:0;z-index:2;background:var(--card);border:1px solid var(--border);border-radius:12px;padding:8px;min-height:64px;display:grid;gap:4px;align-content:center;text-decoration:none;color:inherit}
.planning-frise .timeline-week-label strong{font-size:12px}
.planning-frise .timeline-week-label span{font-size:9.5px;color:var(--muted);white-space:nowrap}
.planning-frise .timeline-pivot-cell{border:1px solid var(--border);border-radius:12px;background:var(--card);padding:8px;min-height:64px;display:flex;align-items:center;justify-content:center;text-align:center;font-size:12px;line-height:1.25;text-decoration:none;color:inherit}
.planning-frise .timeline-pivot-cell.micro-cell{display:grid;gap:4px;align-content:center}
.planning-frise .timeline-pivot-cell--empty{color:var(--muted);background:rgba(148,163,184,.08)}
.planning-frise .timeline-pivot-cell.cycle-band{font-weight:800;overflow:hidden;text-overflow:ellipsis}
/* Frise = hub : cycles/semaines deviennent des boutons (sans lien) -> garder le curseur main. */
.planning-frise [data-cycle-recap]{cursor:pointer}
.planning-frise .is-current-week{outline:2px solid var(--primary);outline-offset:2px;box-shadow:0 0 0 3px rgba(14,165,233,.18)}
html[data-theme="dark"] .planning-frise .is-current-week{box-shadow:0 0 0 3px rgba(56,189,248,.22)}
.planning-frise .frise-sess-row{align-items:stretch}
/* V1.9.x — En dezoom (colonnes etroites), les pastilles de seance passent a la ligne dans leur colonne au lieu de deborder sur les semaines voisines. */
.planning-frise.frise-dezoom .frise-sess-cell{flex-wrap:wrap;overflow:hidden}
.planning-frise .frise-sess-cell{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;gap:3px;align-items:flex-start;width:100%;background:var(--surface-2);border:1px solid var(--border);border-radius:.6rem;padding:3px;min-height:42px}
.planning-frise .frise-sess-day{display:flex;flex-direction:column;gap:2px;flex:0 0 auto}
.planning-frise .frise-sess-pill{position:relative;width:26px;height:36px;border-radius:9px;border:1px solid var(--border);display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:1px;padding:3px 2px 2px;line-height:1;text-decoration:none;font-weight:400;cursor:pointer;overflow:hidden}
.planning-frise .frise-sess-pill b{font-size:8.5px;font-weight:700;line-height:1}
/* Code HORIZONTAL, lisible, placé HAUT dans la pastille (juste sous l'initiale du jour). */
.planning-frise .frise-sess-pill span{font-size:8px;font-weight:600;white-space:nowrap;letter-spacing:-.2px}
.planning-frise .frise-sess-pill:hover{filter:brightness(.96)}
.planning-frise .frise-sess-pill--free{background:transparent;border-style:dashed;color:var(--muted);justify-content:center}
.planning-frise .frise-sess-pill--free span{font-size:14px;font-weight:500}
.planning-frise .frise-sess-pill--free:hover{filter:none;border-color:var(--primary);color:var(--primary)}
.planning-frise .frise-sess-pill--ghost{cursor:default}
.planning-frise .frise-sess-pill--ghost:hover{filter:none;border-color:var(--border);color:var(--muted)}
.planning-frise .frise-sess-exc{position:absolute;top:-3px;right:-3px;width:9px;height:9px;border-radius:50%;background:#D85A30;border:1.5px solid var(--card)}
/* V1.9.x — marqueur "annule / reporte" pose sur un creneau VIDE (pastille "+"). Drapeau couleur
   en coin + pastille attenuee ; le libelle complet ("Annule" / "Reporte au JJ/MM") est dans la bulle. */
.planning-frise .frise-slot-flag{position:absolute;top:-4px;right:-4px;width:10px;height:10px;border-radius:50%;border:1.5px solid var(--card);box-shadow:0 1px 2px rgba(0,0,0,.25)}
/* Anneau interne 2px (box-shadow inset = pas de decalage de taille) pour une lecture nette du marqueur. */
.planning-frise .frise-sess-pill--cancelled{border-style:solid;border-color:#d9534f;color:#b13b37;background:rgba(217,83,79,.12);box-shadow:inset 0 0 0 2px #d9534f}
.planning-frise .frise-sess-pill--cancelled b,.planning-frise .frise-sess-pill--cancelled span{text-decoration:line-through}
.planning-frise .frise-sess-pill--cancelled .frise-slot-flag{background:#d9534f}
.planning-frise .frise-sess-pill--reported{border-style:solid;border-color:#1D9E75;color:#0d6e51;background:rgba(29,158,117,.12);box-shadow:inset 0 0 0 2px #1D9E75}
.planning-frise .frise-sess-pill--reported .frise-slot-flag{background:#1D9E75}
/* Creneau de DESTINATION d'un report : un "+" VIDE utilisable (le coach y cree la seance reportee),
   distinct par un contour vert pointille + pastille verte. Reste cliquable comme un creneau normal. */
.planning-frise .frise-sess-pill--reported-target{border-style:dashed;border-color:#1D9E75;color:#0d6e51;background:rgba(29,158,117,.10)}
.planning-frise .frise-sess-pill--reported-target span{font-weight:700}
.planning-frise .frise-sess-pill--reported-target .frise-slot-flag{background:#1D9E75}
.planning-frise .frise-sess-pill--reported-target:hover{filter:none;border-color:#157d5c;color:#0a5b43}
/* Sous-étape 4 — menu clic droit d'une séance posée : ancre invisible (1px, coin haut-droit de la
   pastille) pour que app.js positionne le panneau `.row-actions-menu` près de la pastille. */
.planning-frise .frise-sess-pill-wrap{position:relative;display:inline-flex}
.planning-frise .frise-sess-actions{position:absolute;top:0;right:0;width:0;height:0}
.planning-frise .frise-sess-actions__sum{position:absolute;top:0;right:0;width:1px;height:1px;opacity:0;overflow:hidden;cursor:default;list-style:none}
.planning-frise .frise-sess-actions__sum::-webkit-details-marker{display:none}
.planning-frise .timeline-pivot-cell.cycle-band,.planning-frise .micro-cell{overflow-wrap:anywhere}
.cycle-recap__crumbs{font-size:12px;color:var(--muted);margin:0;padding:.8rem 1.25rem .35rem;display:flex;flex-wrap:wrap;gap:4px;align-items:center}
.cycle-recap__crumbs:empty{display:none}
.cycle-recap__crumb{background:none;border:0;padding:0;font:inherit;font-size:12px;color:var(--primary);cursor:pointer;text-decoration:none}
.cycle-recap__crumb:hover{text-decoration:underline}
.cycle-recap__crumb.is-current{color:var(--text);font-weight:500;cursor:default}
.cycle-recap__badge{display:inline-block;font-size:11px;padding:2px 8px;border-radius:6px;background:rgba(14,165,233,.12);color:var(--primary)}
.cycle-recap__field{margin-bottom:12px}
.cycle-recap__field>span{display:block;font-size:12px;font-weight:600;color:var(--muted);margin-bottom:2px}
.cycle-recap__field p{margin:0;font-size:14px;line-height:1.5;white-space:pre-line}
.cycle-recap__stats{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:12px}
.cycle-recap__stats>div{background:var(--surface-2);border-radius:10px;padding:.55rem .7rem}
.cycle-recap__stats span{display:block;font-size:12px;color:var(--muted)}
.cycle-recap__stats strong{font-size:18px;font-weight:600}
.cycle-recap__chips{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.cycle-recap__chips span{font-size:12px;padding:3px 8px;border-radius:8px;background:var(--surface-2);color:var(--text)}
.cycle-recap__children-label{font-size:12px;font-weight:600;color:var(--muted);margin:0 0 6px}
.cycle-recap__list{display:flex;flex-direction:column;gap:6px}
.cycle-recap__row{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:var(--card);border:1px solid var(--border);border-radius:10px;padding:.5rem .7rem;cursor:pointer;font:inherit;color:var(--text);text-decoration:none}
.cycle-recap__row:hover{border-color:var(--primary)}
.cycle-recap__row-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.cycle-recap__row-name{font-weight:500;font-size:14px;color:var(--text)}
.cycle-recap__row-meta{font-size:12px;color:var(--muted)}
.cycle-recap__row-bar{width:5px;height:30px;border-radius:3px;background:var(--primary);flex:none}
.cycle-recap__chev{color:var(--muted);font-size:16px;line-height:1}
.cycle-recap__head-actions{display:flex;gap:6px;align-items:flex-start}
.cycle-recap__edit{border:1px solid var(--border);background:var(--card);border-radius:8px;width:30px;height:30px;cursor:pointer;color:var(--muted);font-size:15px;line-height:1;padding:0}
.cycle-recap__edit:hover{border-color:var(--primary);color:var(--primary)}
.cycle-recap__of{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.8rem;margin-bottom:12px}
.cycle-recap__of .cycle-recap__field{margin-bottom:0}
.cycle-recap__block{margin-bottom:12px}
.cycle-recap__lbl{margin:0 0 5px;font-size:11px;font-weight:600;color:var(--muted)}
.cycle-recap__typebar{display:flex;height:10px;border-radius:5px;overflow:hidden}
.cycle-recap__typebar span{display:block;min-width:2px}
.cycle-recap__legend{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px;font-size:11px;color:var(--muted)}
.cycle-recap__legend b{display:inline-block;width:8px;height:8px;border-radius:2px;margin-right:4px}
.cycle-recap__curve{display:flex;align-items:stretch;gap:3px;height:48px}
.cycle-recap__col{flex:1;display:flex;align-items:flex-end;cursor:default}
.cycle-recap__col span{display:block;width:100%;background:#85B7EB;border-radius:2px 2px 0 0;min-height:2px}
.cycle-recap__col:hover span{background:#378ADD}
@media(max-width:900px){.planning-frise .timeline--rows{grid-template-columns:108px repeat(6,minmax(72px,1fr));min-width:max(760px,calc(108px + 6 * 76px))}.frise-orientation__btn{padding:7px 11px;font-size:13px}}

/* P1 — présences */
.attendance-window-nav{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px}
.attendance-window-nav__label{flex:1;text-align:center;font-weight:700}
.attendance-today-panel .section-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:12px}
.attendance-today-panel .section-head h2{margin:0;font-size:1.15rem}
.attendance-today-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.attendance-today-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid var(--border);border-radius:14px;background:rgba(148,163,184,.06)}
.call-cell--link{padding:0}
.call-cell-link{display:flex;align-items:center;justify-content:center;min-height:44px;text-decoration:none;border-radius:10px}
.call-cell-link:hover{background:rgba(14,165,233,.1)}
.call-cell-link .call-badge{pointer-events:none}
.attendance-bulk-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;margin:0 0 12px;padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:rgba(148,163,184,.06)}
.attendance-bulk-select-row th{font-weight:600;font-size:11px;vertical-align:middle}
.session-bulk-check{display:flex;align-items:center;justify-content:center;gap:4px;cursor:pointer;margin:4px 0}
.session-bulk-check input{width:16px;height:16px;cursor:pointer}
.attendance-cell-actions{display:inline-flex;align-items:center;justify-content:center;gap:4px;flex-wrap:wrap}
.attendance-cell-actions .call-cell-link{min-height:36px;padding:4px 8px}
.attendance-quick-btn{position:relative;z-index:2;min-width:30px;padding:2px 6px;font-weight:800;line-height:1;flex-shrink:0;pointer-events:auto;cursor:pointer}
.attendance-quick-btn.is-loading{opacity:.55;cursor:wait}
.attendance-quick-btn.is-long-press{box-shadow:0 0 0 2px var(--primary);background:rgba(14,165,233,.12)}
.attendance-badge-btn{background:none;border:none;padding:0;min-width:0;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;min-height:44px}
.attendance-badge-btn.is-long-press{background:none;box-shadow:none}
.attendance-badge-btn.is-long-press .call-badge{box-shadow:0 0 0 2px var(--primary);opacity:.85}
.attendance-badge-btn.is-loading .call-badge{opacity:.55;cursor:wait}
.call-badge.depart_anticipe{background:#fef3c7;color:#92400e;border:1px solid #fcd34d}
.call-badge.seance_perso{background:#d1fae5;color:#047857;border:1px solid #2dd4bf;box-shadow:inset 0 0 0 1px rgba(45,212,191,.4)}
.call-badge.competition{background:#fef3c7;color:#92400e;border:1px solid #f59e0b;font-weight:800;text-decoration:none}
a.call-badge.competition{cursor:pointer}
a.call-badge.competition:hover{background:#fde68a}
.attendance-matrix th.competition-col{background:rgba(245,158,11,.10)}
.attendance-matrix td.competition-cell{background:rgba(245,158,11,.045)}
.attendance-status-popover{width:min(300px,92vw);padding:0;margin:0;box-shadow:0 16px 40px rgba(15,23,42,.2)}
.attendance-status-popover__head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border)}
.attendance-status-popover__head strong{font-size:14px}
.attendance-status-popover__body{padding:8px;display:grid;gap:6px;max-height:min(60vh,420px);overflow:auto}
.attendance-status-option{display:grid;gap:2px;text-align:left;width:100%;padding:10px 12px;border:1px solid var(--border);border-radius:10px;background:var(--card);cursor:pointer}
.attendance-status-option:hover{border-color:var(--primary);background:rgba(14,165,233,.06)}
.attendance-module-pick-list{display:grid;gap:6px;margin:6px 0}
.attendance-module-pick{width:100%;justify-content:flex-start;text-align:left;white-space:normal}
.attendance-reason-input{width:100%;min-height:72px;padding:8px 10px;border:1px solid var(--border);border-radius:10px;font:inherit;resize:vertical}
.attendance-intra-module-btn{touch-action:none;user-select:none}
.attendance-intra-module-btn.is-long-press{outline:2px solid var(--accent, #2563eb);outline-offset:2px}
.attendance-finalize-bar{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:1400;max-width:420px;width:calc(100% - 32px);padding:12px 16px;box-shadow:0 8px 28px rgba(0,0,0,.18)}
.attendance-finalize-bar .actions-line{margin-top:10px;justify-content:flex-end;gap:8px}
.attendance-status-popover .actions-line{margin-top:10px;display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
.attendance-toast{position:fixed;bottom:20px;right:20px;z-index:1200;max-width:min(360px,92vw);padding:12px 16px;border-radius:12px;font-size:14px;font-weight:600;box-shadow:0 12px 32px rgba(15,23,42,.18)}
.attendance-toast--success{background:#ecfdf5;color:#065f46;border:1px solid #6ee7b7}
.attendance-toast--error{background:#fef2f2;color:#991b1b;border:1px solid #fca5a5}
.attendance-session-table tr.is-attendance-focus{outline:2px solid var(--primary);outline-offset:-2px;background:rgba(14,165,233,.08)}
/* Panneau presences compact sur session_show (outil discret) */
.session-attendance-quick{margin:0 0 18px;padding:10px 14px;border:1px solid var(--border);border-radius:14px;background:linear-gradient(180deg,rgba(148,163,184,.04),rgba(148,163,184,.08))}
.session-attendance-quick__head{display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px;margin-bottom:8px;padding-bottom:6px;border-bottom:1px dashed var(--border)}
.session-attendance-quick__title{font-size:13px;font-weight:800;letter-spacing:.02em}
.session-attendance-quick__hint{font-size:11px;line-height:1.3}
.session-attendance-quick__link{margin-left:auto;font-size:12px;font-weight:700;color:var(--primary);text-decoration:none;white-space:nowrap}
.session-attendance-quick__link:hover{text-decoration:underline}
.session-attendance-quick__list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:2px 14px}
.session-attendance-quick__row{display:flex;align-items:center;gap:8px;padding:3px 0;font-size:13px;min-height:32px}
.session-attendance-quick__btn{flex:0 0 auto}
.session-attendance-quick__btn .call-badge{min-width:34px;text-align:center;padding:3px 8px;font-size:11px}
.session-attendance-quick__name{flex:1;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.session-attendance-quick__volume{font-size:11px;white-space:nowrap;font-variant-numeric:tabular-nums}
.session-attendance-quick__btn.attendance-badge-btn{min-height:0}
@media (max-width:600px){
  .session-attendance-quick__list{grid-template-columns:1fr}
  .session-attendance-quick__hint{flex-basis:100%}
}
.attendance-module-pick--manual{margin-top:10px;width:100%}
html[data-theme="dark"] .attendance-session-table tr.is-attendance-focus{background:rgba(56,189,248,.12)}
/* Colonne « aujourd’hui » — bande verticale continue (pas contour par cellule) */
.attendance-matrix th.is-current-day,.attendance-matrix td.is-current-day{background:rgba(14,165,233,.1);box-shadow:none;outline:none;border-left:2px solid var(--primary);border-right:2px solid var(--primary)}
.attendance-matrix thead th.is-current-day{border-top:2px solid var(--primary);background:rgba(14,165,233,.14);z-index:2}
.attendance-matrix tbody tr:not(:last-child) td.is-current-day{border-bottom-color:rgba(14,165,233,.1)}
.attendance-matrix tbody tr:last-child td.is-current-day{border-bottom:2px solid var(--primary)}
.attendance-today-marker::before{content:"";display:inline-block;width:12px;height:12px;border-radius:3px;background:rgba(14,165,233,.25);box-shadow:inset 0 0 0 2px var(--primary);vertical-align:middle;margin-right:4px}
html[data-theme="dark"] .attendance-matrix th.is-current-day,html[data-theme="dark"] .attendance-matrix td.is-current-day{background:rgba(56,189,248,.12);border-left-color:#38bdf8;border-right-color:#38bdf8}
html[data-theme="dark"] .attendance-matrix thead th.is-current-day{border-top-color:#38bdf8;background:rgba(56,189,248,.16)}
html[data-theme="dark"] .attendance-matrix tbody tr:not(:last-child) td.is-current-day{border-bottom-color:rgba(56,189,248,.12)}
html[data-theme="dark"] .attendance-matrix tbody tr:last-child td.is-current-day{border-bottom-color:#38bdf8}
@media(max-width:768px){
  .attendance-matrix-wrap{-webkit-overflow-scrolling:touch}
}

/* Public planning — vignettes saisons */
.season-vignette-intro{margin:0 0 14px}
.season-vignette-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;margin:0 0 24px}
.season-vignette{position:relative;display:grid;gap:8px;padding:18px 16px 14px;border:1px solid var(--border);border-radius:16px;background:var(--card);text-decoration:none;color:inherit;min-height:200px;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}
.season-vignette:hover{border-color:var(--primary);box-shadow:0 10px 28px rgba(15,23,42,.08);transform:translateY(-2px)}
.season-vignette__year{position:absolute;top:12px;right:12px;font-size:11px;font-weight:800;letter-spacing:.04em;padding:4px 8px;border-radius:999px;background:rgba(14,165,233,.12);color:var(--primary)}
.season-vignette__icon{font-size:1.75rem;line-height:1}
.season-vignette__title{margin:0;font-size:1.15rem;line-height:1.25}
.season-vignette__group{margin:0;font-weight:700;color:var(--text)}
.season-vignette__dates{margin:0;font-size:13px;color:var(--muted)}
.season-vignette__meta{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px 14px;font-size:12px;color:var(--muted)}
.season-vignette__cta{margin-top:auto;font-size:13px;font-weight:800;color:var(--primary)}
@media(max-width:600px){.season-vignette-grid{grid-template-columns:1fr}}

/* Public library — vignettes séances */
.session-vignette-intro{margin:0 0 14px}
.session-vignette-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:16px;margin:0 0 24px}
.session-vignette{position:relative;display:grid;gap:8px;padding:18px 16px 14px;border:1px solid var(--border);border-radius:16px;background:var(--card);text-decoration:none;color:inherit;min-height:180px;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}
.session-vignette:hover{border-color:var(--primary);box-shadow:0 10px 28px rgba(15,23,42,.08);transform:translateY(-2px)}
.session-vignette__icon{font-size:1.75rem;line-height:1}
.session-vignette__type{position:absolute;top:12px;right:12px;font-size:11px}
.session-vignette__title{margin:0;font-size:1.15rem;line-height:1.25}
.session-vignette__subtype{margin:0;font-size:13px}
.session-vignette__meta{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px 14px;font-size:12px;color:var(--muted)}
.session-vignette__cta{margin-top:auto;font-size:13px;font-weight:800;color:var(--primary)}
@media(max-width:600px){.session-vignette-grid{grid-template-columns:1fr}}

/* Public library — vignettes modules */
.module-vignette-intro{margin:0 0 14px}
.module-vignette-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin:0 0 24px}
.module-vignette{display:flex;flex-direction:column;gap:10px;padding:18px 16px 14px;border:1px solid var(--border);border-radius:16px;background:var(--card);min-height:180px}
.module-vignette__head{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.module-vignette__title{margin:0;font-size:1.1rem;line-height:1.25;flex:1}
.module-vignette__volume{margin:0;font-size:12px;line-height:1.35}
.module-vignette__content{flex:1;padding:10px 12px;border-radius:12px;background:rgba(148,163,184,.08);border:1px solid var(--border)}
html[data-theme="dark"] .module-vignette__content{background:rgba(148,163,184,.06)}
.module-vignette__excerpt{margin:0;font-size:14px;line-height:1.55;color:var(--text);max-height:9.3em;overflow:hidden}
.module-metric-groups{display:grid;gap:6px;margin-top:auto;padding-top:8px;border-top:1px solid var(--border)}
.module-metric-group{display:grid;gap:3px}
.module-metric-group__label{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);opacity:.9}
.module-metric-chips{display:flex;flex-wrap:wrap;gap:4px 6px}
.module-metric-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 6px;border-radius:999px;font-size:10px;line-height:1.3;color:var(--muted);background:transparent;border:1px solid transparent}
.module-metric-chip strong{font-weight:700;color:var(--text);opacity:.8}
.module-metric-chip .zone-dot{width:7px;height:7px;border-radius:50%;opacity:.85}
@media(max-width:600px){.module-vignette-grid{grid-template-columns:1fr}}
.is-cap-locked{opacity:.65}
.is-cap-locked .cap-unlock-target{pointer-events:none}
/* V1.8.8.114 — Capability tiles */
.cap-toggle{position:relative;display:inline-block;width:40px;height:22px;flex-shrink:0}
.cap-toggle input{opacity:0;width:0;height:0;position:absolute}
.cap-toggle-slider{position:absolute;inset:0;border-radius:22px;background:var(--border);transition:.2s;cursor:pointer}
.cap-toggle-slider::before{content:'';position:absolute;height:16px;width:16px;left:3px;top:3px;border-radius:50%;background:#fff;transition:.2s;box-shadow:0 1px 3px rgba(0,0,0,.2)}
.cap-toggle input:checked+.cap-toggle-slider{background:var(--primary)}
.cap-toggle input:checked+.cap-toggle-slider::before{transform:translateX(18px)}
.cap-tiles-section{margin:1.25rem 0}
.cap-tiles-section-label{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:.6rem}
.cap-tiles-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:9px}
.cap-tile{border:1.5px solid var(--border);border-radius:14px;padding:13px 15px;background:var(--card);transition:border-color .15s,box-shadow .15s}
.cap-tile.is-active{border-color:var(--primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--primary) 12%,transparent)}
.cap-tile.is-disabled{opacity:.48;pointer-events:none}
.cap-tile-head{display:flex;align-items:center;gap:10px}
.cap-tile-icon{font-size:1.25rem;flex-shrink:0;line-height:1;width:24px;text-align:center}
.cap-tile-label{flex:1;min-width:0}
.cap-tile-label strong{display:block;font-size:.87rem;font-weight:600;line-height:1.2}
.cap-tile-label .muted{font-size:.74rem;display:block;margin-top:2px;line-height:1.3}
.cap-tile-sub{margin-top:11px;padding-top:10px;border-top:1px solid var(--border)}
.cap-tile-sub label{display:block;font-size:.82rem;color:var(--muted);margin-bottom:4px}
.cap-tile-sub select,.cap-tile-sub input{width:100%;font-size:.84rem}
/* V1.9.x — case « Suivi du Corps » (sous-option de la tuile Nage) : checkbox inline, pas pleine largeur. */
.cap-sub-corps{display:flex;align-items:flex-start;gap:.4rem;font-size:.82rem;color:var(--txt);margin-bottom:8px;cursor:pointer}
.cap-sub-corps input{width:auto;font-size:inherit;margin-top:.15rem;flex:none}
.cap-readonly-badge{display:inline-flex;align-items:center;font-size:.73rem;font-weight:600;padding:2px 8px;border-radius:20px;border:1px solid;flex-shrink:0;white-space:nowrap}
.cap-readonly-badge.is-on{color:var(--primary);border-color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent)}
.cap-readonly-badge.is-off{color:var(--muted);border-color:var(--border)}
a.table-sort{color:inherit;text-decoration:none;font-weight:inherit}
a.table-sort:hover{text-decoration:underline}
/* V1.9.x — Tri de colonnes UNIFIÉ (client) : en-têtes cliquables des tables [data-sortable]. */
th.th-sortable{cursor:pointer;user-select:none;white-space:nowrap}
th.th-sortable:hover{text-decoration:underline}
th.th-sortable .th-arrow{font-size:.8em;opacity:.85;font-weight:400}

/* V1.8.9.14 - constructeur seance simple (module unique + 3 axes optionnels) */
.session-simple-card .simple-form-grid{display:grid;grid-template-columns:160px 1fr;gap:.75rem 1rem;align-items:start;margin-bottom:.75rem}
.session-simple-card .simple-form-grid .span-2{grid-column:1/-1}
.session-simple-card .simple-axes-wrap{display:grid;gap:.5rem;margin-top:.5rem}
.session-simple-card .simple-axis-block{border:1px solid var(--border);border-radius:.65rem;padding:.5rem .65rem;background:var(--surface-2)}
.session-simple-card .simple-axis-head{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.25rem}
.session-simple-card .simple-axis-lines{display:flex;flex-direction:column;gap:.25rem}
.session-simple-card .simple-axis-line{display:grid;grid-template-columns:100px 1fr auto;gap:.4rem;align-items:center}
.session-simple-card .simple-axis-line input.simple-line-distance{padding:.25rem .4rem;font-size:.9rem}
.session-simple-card .simple-axis-line .simple-line-code{font-size:.85rem;padding:.2rem .55rem;justify-self:start}
.session-simple-card .simple-axis-line .simple-line-remove{font-size:1rem;line-height:1;padding:.15rem .45rem}
/* V1.9.0 - ligne Materiel avec cumul (chips) : distance / chips / + mat. / supprimer */
.session-simple-card .simple-eq-line{grid-template-columns:100px 1fr auto auto}
.session-simple-card .simple-eq-chips{display:flex;flex-wrap:wrap;gap:.3rem;align-items:center}
.session-simple-card .simple-eq-chip{display:inline-flex;align-items:center;gap:.1rem;background:var(--surface);border:1px solid var(--border);border-radius:.5rem;padding:.05rem .1rem}
.session-simple-card .simple-eq-chip .simple-eq-cyc{font-size:.82rem;padding:.15rem .45rem}
.session-simple-card .simple-eq-chip-rm{border:none;background:transparent;cursor:pointer;font-size:.95rem;line-height:1;padding:0 .2rem;color:var(--muted)}
.session-simple-card .simple-eq-add{font-size:.8rem;padding:.15rem .5rem;justify-self:start;white-space:nowrap}
/* Rendu show simple */
.session-module--simple .session-module__simple-axes{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem;margin-top:.65rem}
.simple-axis-recap{border:1px solid var(--border);border-radius:.5rem;padding:.4rem .55rem;background:var(--surface-2)}
.simple-axis-recap h4{margin:0 0 .25rem;font-size:.92rem;color:var(--text-muted)}
.simple-axis-percent{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.15rem;font-size:.88rem}

/* V1.8.6 — constructeur séance par lignes */
.session-modules-list{display:grid;gap:1rem;margin-top:1rem}
.session-module-card{border:1px solid var(--border);border-radius:1rem;padding:1rem;background:var(--surface)}
.session-module-card.is-frozen{opacity:.92;background:var(--surface-2)}
.session-module-head--frozen{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;margin-bottom:.5rem}
.session-lines-wrap--frozen .session-lines-table td{font-size:.92rem}
.session-line-row--frozen td{color:var(--text-muted)}
.session-line-row--frozen-sub td{font-size:.88rem;padding-top:.15rem;padding-bottom:.15rem}
.session-module-head{display:grid;grid-template-columns:auto 1fr 180px auto;gap:.75rem;align-items:end;margin-bottom:.75rem}
.session-module-head--frozen{grid-template-columns:auto 1fr auto}
.session-drag-handle{cursor:grab;user-select:none;color:var(--text-muted);font-weight:700;line-height:1;padding:.15rem .35rem}
.session-drag-handle:active{cursor:grabbing}
.session-module-card.is-dragging,.session-line-row.is-dragging{opacity:.55}
.session-module-card.is-drag-over,.session-line-row.is-drag-over{outline:2px dashed var(--primary);outline-offset:2px}
.session-col-drag{width:1.5rem;text-align:center;vertical-align:middle;padding:.2rem!important}
.session-lines-table{width:100%;border-collapse:collapse;font-size:.9rem}
.session-lines-table th,.session-lines-table td{padding:.35rem .4rem;border-bottom:1px solid var(--border);vertical-align:middle}
.session-lines-table select,.session-lines-table input[type=text]{width:100%;min-width:0}
.session-field-cycle{min-width:2.75rem;max-width:100%;padding:.2rem .45rem;font-size:.8rem;font-weight:600;line-height:1.2;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.session-mix-segment .session-field-cycle{min-width:2.25rem;max-width:5rem;padding:.15rem .3rem;font-size:.75rem}
.session-lines-table td:has(.session-field-cycle){white-space:nowrap}
/* Garde-fou distances (saisie) — sous-distances d'une rép composée qui ne couvrent pas le total :
   AVERTISSEMENT non bloquant (la saisie reste possible). Survol = message clair. */
.line-cover-warn{margin-left:4px;color:var(--warn,#b45309);font-weight:700;cursor:help;font-size:.95em}
.session-line-subpanel__cell{background:var(--bg-subtle,color-mix(in srgb,var(--text,#0f172a) 5%,transparent));padding:.5rem .65rem!important}
.session-sub-lines-wrap,.session-mix-wrap{margin:.25rem 0 .5rem}
.session-lines-table--sub{font-size:.85rem}
.session-line-row--sub td{border-bottom-color:transparent}
.session-line-row--parent-defaults td{background:rgba(15,23,42,.04)}
.session-sub-lines-wrap>.muted.small{margin:.25rem 0 .35rem}
.session-lines-table--sub thead th{font-size:.72rem;padding:.2rem .15rem}
.session-sub-sum--warn{color:var(--danger,#b91c1c);font-weight:600}
.session-mix-segments{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.35rem}
.session-mix-segment{display:flex;gap:.35rem;align-items:center}
.session-mix-segment .short-input{width:4rem}
.session-module-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:.75rem}
.session-module-card.is-frozen{padding:.65rem 1rem}
.session-module-compact{font-size:.92rem;color:var(--text-muted);margin:.35rem 0 .5rem;max-height:4.5rem;overflow:auto}
/* Module gele = reduit par defaut ; le detail (lecture seule) se deplie a la demande. */
.session-module-peek{margin:.2rem 0 .35rem}
.session-module-peek>summary{cursor:pointer;font-size:.82rem;color:var(--text-muted);user-select:none}
.session-module-peek>summary:hover{color:var(--text)}
.session-module-peek[open]>summary{margin-bottom:.35rem}
.session-module-peek .session-module-compact{margin:0}
.session-module-peek:not([open]) .session-module-compact{display:none}
.session-module-type-select{max-width:100%}
.session-lines-wrap--wide{overflow-x:auto;max-width:100%}
/* V1.9.x — la carte module est un ITEM de grille (#modulesList). Sans min-width:0 elle gonfle
   a la largeur min-content du tableau large (~960px), deborde sa colonne et pousse la PAGE
   (scroll horizontal en fenetre PC reduite). min-width:0 la contraint a la colonne -> le tableau
   scrolle dans son wrap (overflow-x:auto) au lieu d'elargir la carte. */
.session-module-card{min-width:0}
.session-lines-table--wide{min-width:960px;font-size:.82rem}
.session-lines-table--wide th{font-size:.75rem;font-weight:600;white-space:nowrap}
.session-mix-cols--idle{padding:0!important;border-bottom-color:transparent}
.session-mix-inline{display:flex;flex-wrap:wrap;gap:.2rem;align-items:center}
.session-mix-segment{display:inline-flex;gap:.2rem;align-items:center}
.session-mix-segment .short-input{width:2.75rem;padding:.2rem .25rem;font-size:.8rem}
.session-mix-segment select{max-width:5.5rem;font-size:.8rem;padding:.2rem}
.session-mix-segment input[data-seg="distance_m"]{width:2.85rem}
.session-mix-plus{width:1.75rem;text-align:center;padding:.2rem!important}
.btn.tiny{padding:.1rem .35rem;font-size:.75rem;line-height:1.2;min-height:0}
.session-mix-sum{display:block;font-size:.7rem;line-height:1.1}
/* Colonnes conditionnelles selon capabilities */
#modulesList.hide-intensity .col-int,
#moduleLinesList.hide-intensity .col-int{display:none}
#modulesList.hide-strokes   .col-str,
#moduleLinesList.hide-strokes   .col-str{display:none}
#modulesList.hide-equipment .col-equip,
#moduleLinesList.hide-equipment .col-equip{display:none}
/* V1.9.x (temps de depart) — colonne Depart conditionnelle a la tuile departure_time */
#modulesList.hide-departure_time .col-deptime,
#moduleLinesList.hide-departure_time .col-deptime{display:none}

/* ── V1.9.0 (refonte modalite) — cellule Materiel + apercu Corps (bras/jambes/NC) ── */
.col-equip{min-width:9rem}
.col-body{white-space:nowrap}
/* V1.9.x (temps de depart) — colonne Depart compacte (saisie m:ss) */
.col-deptime{width:4.5rem}
.col-deptime .short-input{width:3.6rem;text-align:center}
.session-eq-cell{display:flex;flex-wrap:wrap;gap:.25rem;align-items:center}
.session-eq-seg{display:inline-flex;align-items:center;gap:.15rem;padding:.1rem .2rem;border:1px solid var(--border);border-radius:.5rem}
.session-eq-seg--bras{border-color:#f97316}
.session-eq-seg--jambes{border-color:#0ea5e9}
.session-eq-chip{display:inline-flex;align-items:center;gap:.2rem;background:#fef3c7;color:#1f2937;border:none;border-radius:.4rem;padding:.15rem .4rem;font-size:.78rem;font-weight:600;cursor:pointer;line-height:1.2}
.session-eq-chip:hover{filter:brightness(.96)}
.session-eq-body{font-size:.6rem;font-weight:700;color:#fff;padding:0 .25rem;border-radius:.25rem;text-transform:uppercase}
.session-eq-body--bras{background:#f97316}
.session-eq-body--jambes{background:#0ea5e9}
.session-eq-rm{font-size:.72rem;font-weight:800;opacity:.5;margin-left:.1rem}
.session-eq-chip:hover .session-eq-rm{opacity:1}
.session-eq-plus{font-weight:800;color:var(--text-muted);font-size:.78rem;padding:0 .05rem}
.session-eq-div{background:var(--surface);color:var(--text);border:1px solid var(--border);border-radius:.4rem;padding:.1rem .35rem;font-size:.72rem;font-weight:700;cursor:pointer}
.session-eq-div--bad{border-color:var(--danger,#dc2626);color:var(--danger,#dc2626)}
.session-eq-manual{flex-basis:100%;display:flex;flex-wrap:wrap;gap:.3rem;margin-top:.2rem}
.session-eq-manual .short-input{width:4.75rem;font-size:.85rem;padding:.25rem .4rem;text-align:center}
.session-eq-hint{font-size:.68rem;color:var(--text-muted);font-style:italic;margin-left:.15rem}
.session-eq-additem,.session-eq-addseg{padding:.05rem .3rem!important}
/* V1.9.0 (3c) — chips segment intensite/nage (1 code/segment, distincts du materiel jaune). */
.session-seg-cell{display:flex;flex-wrap:wrap;gap:.25rem;align-items:center}
.session-seg-chipwrap{display:inline-flex;align-items:center}
.session-eq-chip.session-seg-chip{background:#e2e8f0;color:#0f172a}
.session-body-badge{display:inline-block;font-size:.66rem;font-weight:700;color:#06281f;border-radius:.3rem;padding:.05rem .3rem;margin:0 .1rem .1rem 0}
.session-body-badge--bras{background:#f97316;color:#fff}
.session-body-badge--jambes{background:#0ea5e9;color:#06281f}
.session-body-badge--NC{background:#10b981;color:#06281f}
.session-body-badge--conflict{background:repeating-linear-gradient(45deg,#ef4444,#ef4444 4px,#b91c1c 4px,#b91c1c 8px);color:#fff}
.session-diff-cell{white-space:nowrap}
/* Variantes par repetition v2 : controle "× N tours" dans la cellule Diff. */
.session-rounds-ctrl{display:inline-flex;align-items:center;gap:2px;margin-left:10px;font-weight:800;color:#0b5cad}
.session-rounds-input{width:2.7rem;text-align:center}
.session-rounds-ctrl .muted{font-weight:600;margin-left:2px}
/* Variantes par repetition v2 : panneau d'edition des retouches par tour. */
.session-line-roundspanel__cell{background:#f8fafc;border-top:1px dashed #cbd5e1}
.session-rounds-editor{padding:8px 12px 10px}
.session-rounds-editor>p{margin:0 0 6px}
.sre-tour{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:4px 0;border-top:1px solid #eef2f7}
.sre-tour:first-of-type{border-top:none}
.sre-num{font-weight:800;color:#0b5cad;min-width:56px;font-size:.85rem}
.sre-axis{display:inline-flex;align-items:center;gap:5px}
.sre-lab{font-size:.7rem;text-transform:uppercase;letter-spacing:.03em;color:#64748b;font-weight:700}
.sre-chip--inh{opacity:.55;font-style:italic}
.sre-chip--set{box-shadow:0 0 0 2px rgba(11,92,173,.55)}
.sre-revert{margin-left:auto;color:#0b5cad}
.sre-int{font-style:italic;font-size:.78rem}
.session-line-row--round .sre-num{font-weight:800;color:#0b5cad;font-size:.82rem;white-space:nowrap}
.session-line-row--round .sre-fixed{text-align:center;color:#94a3b8}
.session-line-row--round .sre-state{font-style:italic;color:#94a3b8}
.session-line-row--round-set{background:rgba(11,92,173,.05)}
/* Retouche par sous-ligne (B) : lignes sous-ligne d'un tour, repliables. */
.session-line-row--roundsub.is-collapsed{display:none}
.session-line-row--roundsub{background:rgba(148,163,184,.06)}
.session-line-row--roundsub .sre-subname{font-size:.82rem;color:#475569;font-weight:700;padding-left:14px}
.sre-expand{white-space:nowrap}
/* Chantier A / A2 — chip Corps (pre-selecteur au tap, devant la nage). */
.session-corps-chip{display:inline-flex;align-items:center;border:none;border-radius:.4rem;padding:.15rem .4rem;font-size:.72rem;font-weight:800;cursor:pointer;line-height:1.2;margin-right:.2rem;text-transform:uppercase;letter-spacing:.02em}
.session-corps-chip:hover{filter:brightness(.96)}
.session-corps-chip--none{background:#cbd5e1;color:#475569}
.session-corps-chip--aucun{background:#10b981;color:#06281f}
.session-corps-chip--jambes{background:#0ea5e9;color:#06281f}
.session-corps-chip--bras{background:#f97316;color:#fff}
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:120;display:none;align-items:center;justify-content:center;padding:1rem}
.modal-overlay.open,.modal-overlay:not([hidden]){display:flex}
.modal-card{background:var(--card);border:1px solid var(--border);border-radius:1rem;padding:1rem;max-width:min(720px,96vw);max-height:90vh;overflow:auto;box-shadow:var(--shadow)}
.session-picker-modal{width:min(720px,96vw)}
[data-picker-source].active{background:var(--primary);color:#fff;border-color:var(--primary)}
@media (max-width:900px){.session-module-head{grid-template-columns:1fr}}

/* ══════════ A2 (relooking formulaire séance) — 2026-06-15 ══════════ */
/* Cadre sobre : sections regroupées (Temporalité / Infos) + bloc Bassin lié. */
.session-section-group{border:1px solid var(--border);border-radius:.85rem;padding:.85rem 1rem;margin-bottom:.85rem;background:var(--surface-2)}
.session-section-group--plain{background:var(--card)}
.session-section-group__title{font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.05em;color:var(--primary);display:flex;align-items:center;gap:.5rem;margin:0 0 .75rem}
.session-section-group__title .num{display:grid;place-items:center;width:1.2rem;height:1.2rem;border-radius:.4rem;background:var(--primary);color:#fff;font-size:.68rem}
.pool-group{border:1px solid var(--border);border-radius:.75rem;padding:.75rem .85rem;background:var(--surface-2)}
.pool-group__lead{font-weight:700;margin-bottom:.55rem}
.pool-group__row{display:flex;flex-wrap:wrap;gap:1rem;align-items:flex-end}
.pool-group__hint{font-weight:600;text-transform:none;letter-spacing:0;color:var(--muted)}
.radio-pills label.is-locked{opacity:.55;pointer-events:none}

/* Survol des lignes de saisie (lisibilité). */
.session-lines-table--wide .session-line-row:hover>td{background:rgba(11,92,173,.05)}

/* MOBILE : le tableau dense de saisie devient des fiches empilées (CSS pur, DOM/JS inchangés). */
@media (max-width:760px){
  .session-lines-wrap--wide{overflow:visible}
  .session-lines-table--wide,.session-lines-table--sub{min-width:0;font-size:.92rem}
  .session-lines-table--wide thead,.session-lines-table--sub thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .session-lines-table--wide,.session-lines-table--wide tbody,.session-lines-table--wide tr,.session-lines-table--wide td,
  .session-lines-table--sub,.session-lines-table--sub tbody,.session-lines-table--sub tr,.session-lines-table--sub td{display:block;width:auto}
  .session-line-row{border:1px solid var(--border);border-radius:.75rem;padding:.5rem .65rem;margin-bottom:.55rem;background:var(--card)}
  .session-line-row--sub{border:0;border-left:3px solid var(--primary);border-radius:0;margin:.1rem 0 .5rem .5rem;padding:.4rem .55rem;background:var(--surface-2)}
  .session-line-subpanel__cell{display:block!important;padding:.25rem 0 .25rem .4rem!important;background:transparent}
  .session-line-row>td{border:0!important;padding:.22rem 0;display:flex;gap:.6rem;align-items:flex-start;background:transparent!important}
  .session-col-drag{display:none!important}
  .session-line-row>td.col-deptime::before,.session-line-row>td.col-int::before,.session-line-row>td.col-str::before,
  .session-line-row>td.col-equip::before,.session-line-row>td.col-body::before,.session-line-row>td.line-vol::before,
  .session-line-row>td.session-diff-cell::before,.session-line-row>td:nth-child(2)::before,
  .session-line-row>td:nth-child(3)::before,.session-line-row>td:nth-child(9)::before{
    flex:0 0 5rem;font-size:.64rem;font-weight:800;text-transform:uppercase;letter-spacing:.02em;color:var(--muted);padding-top:.2rem}
  .session-line-row>td:nth-child(2)::before{content:"Rép."}
  .session-line-row>td:nth-child(3)::before{content:"Distance"}
  .session-line-row>td.col-deptime::before{content:"Départ"}
  .session-line-row>td.col-int::before{content:"Intensité"}
  .session-line-row>td.col-str::before{content:"Nage"}
  .session-line-row>td.col-equip::before{content:"Matériel"}
  .session-line-row>td.col-body::before{content:"Corps"}
  .session-line-row>td:nth-child(9)::before{content:"Texte"}
  .session-line-row>td.line-vol::before{content:"Volume"}
  .session-line-row>td.session-diff-cell::before{content:"Différencier"}
  .session-line-row>td .session-seg-cell,.session-line-row>td .session-eq-cell{flex:1}
  .session-line-row>td input[type=text]{flex:1;width:auto;min-width:0}
}

/* Compacter la 1ʳᵉ partie du formulaire (Simon : prend trop de place avant le contenu). */
#sessionForm label[hidden]{display:none}                       /* labels « hidden » (ex. Lignes d'eau) réellement masqués */
#sessionForm textarea[name="objective"],#sessionForm textarea[name="comment"]{min-height:0}
.session-obj-pair{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:760px){.session-obj-pair{grid-template-columns:1fr}}
/* Bloc « Suivi du volume » : tuiles en version mini (descriptions masquées). */
#sessionCapabilitiesBlock .capabilities-card{padding:.7rem .85rem}
#sessionCapabilitiesBlock .cap-tiles-section{margin:.45rem 0}
#sessionCapabilitiesBlock .cap-tiles-section:first-child{margin-top:0}
#sessionCapabilitiesBlock .cap-tiles-section-label{margin-bottom:.35rem;font-size:.7rem}
#sessionCapabilitiesBlock .cap-tiles-grid{grid-template-columns:repeat(auto-fill,minmax(146px,1fr));gap:7px}
#sessionCapabilitiesBlock .cap-tile{padding:7px 9px;border-radius:10px;border-width:1px}
#sessionCapabilitiesBlock .cap-tile-head{gap:7px}
#sessionCapabilitiesBlock .cap-tile-icon{font-size:1rem;width:18px}
#sessionCapabilitiesBlock .cap-tile-label strong{font-size:.79rem}
#sessionCapabilitiesBlock .cap-tile-label .muted{display:none}  /* descriptions « Crawl, dos… » masquées (gain de place) */
#sessionCapabilitiesBlock .cap-tile-sub{margin-top:7px;padding-top:7px}
#sessionCapabilitiesBlock .cap-tile-sub label{margin-bottom:2px}
/* Cascade Temporalité en HORIZONTAL + tout le haut resserré (Simon : « toujours aussi gros »). */
#sessionForm section.card{padding:14px}
#sessionForm .form-grid{gap:10px}
#sessionForm label{gap:3px}
#sessionForm input,#sessionForm select,#sessionForm textarea{padding:7px 10px}
/* COMPACT : petits champs packés pour GAGNER DE LA HAUTEUR (Simon : COMPACT pas étalé ; contenu dès le 1er écran). */
#sessionForm .page-head{margin-bottom:.5rem}
#sessionForm>section.card>.page-head h1{font-size:1.4rem}
#sessionForm>section.card>.page-head>div>p.muted{display:none}     /* description redondante du haut */
#sessionForm .notice.small{padding:4px 10px;margin:.25rem 0}
#sessionForm .form-grid{gap:8px}
#sessionForm section.card{padding:12px 14px}
/* cascade Temporalité : champs PETITS qui se packent (flex, pas de stretch) */
#sessionForm .temporality-box{display:flex;flex-wrap:wrap;gap:.35rem .9rem;align-items:flex-end;padding-top:.4rem;margin-top:0;border-top:0}
#sessionForm .temporality-step{margin:0;min-width:0}
#sessionForm .temporality-step select{max-width:15rem!important;width:auto;min-width:10rem}
#sessionForm #tempSlotPicker select,#sessionForm #tempTimelessSeason select{min-width:17rem}
#sessionForm #tempTemporalityHint{display:none}
#sessionForm .temporality-label{margin-bottom:.1rem;font-size:.72rem}
#sessionForm .radio-pills{margin-top:.15rem}
#sessionForm #tempDateFields,#sessionForm #tempTimelessDayTime{display:flex;flex-wrap:wrap;gap:.35rem .8rem;margin-top:0}
#sessionForm #tempDateFields input[type=date]{width:9rem}
#sessionForm #tempDateFields input[type=time]{width:5.6rem}
/* bassin + objectifs + type : compacts (selects bornés, pas étalés) */
#sessionForm .pool-group{padding:.5rem .7rem}
#sessionForm .pool-group__lead{margin-bottom:.3rem}
#sessionForm .pool-group select{max-width:26rem}
#sessionForm textarea[name=objective],#sessionForm textarea[name=comment]{min-height:0}
#sessionTypeSection{padding:9px 14px;margin-top:8px}
#sessionTypeSection #sessionTypeField select{max-width:26rem}
/* Titre + Statut sur une ligne, compacts */
.session-title-row{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:.35rem 1.1rem;align-items:flex-end}
.session-title-row input[name=title]{width:26rem;max-width:100%}
.session-title-row select[name=status]{width:9rem}
@media(max-width:760px){.session-title-row{flex-direction:column;align-items:stretch}.session-title-row input[name=title]{width:100%}}
/* ══════════ fin A2 ══════════ */

/* ════════ A2 — SKINS d'affichage du formulaire (préférence user : data-layout) ════════ */
/* CLASSIQUE = base. CARTE = formulaire brut plus serré. BARRE/PASTILLES/HERO/FIL = « chrome »
   résumé (chips avec valeurs) piloté par session-form-chrome.js (classe .sfc-on). */

/* ===== CARTE DENSE : formulaire brut, juste plus serré ===== */
#sessionForm[data-layout="carte"] section.card{padding:10px 12px}
#sessionForm[data-layout="carte"] .temporality-box{gap:.3rem .8rem;padding-top:.35rem}
#sessionForm[data-layout="carte"] .temporality-label{font-size:.6rem;margin-bottom:.05rem}
#sessionForm[data-layout="carte"] .temporality-step select,#sessionForm[data-layout="carte"] .session-title-row input,
#sessionForm[data-layout="carte"] .pool-group select{font-size:12.5px;padding:5px 8px}
#sessionForm[data-layout="carte"] .radio-pills label{padding:.16rem .5rem;font-size:.8rem}

/* ===== CHROME (styles résumés) : résumé + bulle d'édition PAR réglage ===== */
/* on masque les contrôles bruts (le résumé prend leur place) ; ils restent soumis (display:none). */
#sessionForm.sfc-on .temporality-box .temporality-step{display:none!important}
#sessionForm.sfc-on .temporality-box{border:0;background:transparent;padding:0;margin:0;min-height:0;gap:0}
#sessionForm.sfc-on .pool-group,
#sessionForm.sfc-on [data-volume-total-row],
#sessionForm.sfc-on #sessionTypeSection{display:none}
/* la BULLE = un conteneur flottant qui accueille le(s) contrôle(s) du réglage cliqué (position JS) */
.sfc-popwrap{position:fixed;z-index:200;background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:0 18px 50px rgba(15,23,42,.2);padding:12px 14px;min-width:235px;max-width:min(400px,92vw);display:none}
.sfc-popwrap .temporality-step,.sfc-popwrap .pool-group,.sfc-popwrap #sessionTypeSection{display:block!important;margin:0;border:0;background:transparent;box-shadow:none;padding:0}
.sfc-popwrap .temporality-step.form-grid{display:flex!important;flex-wrap:wrap;gap:.5rem 1rem}
.sfc-popwrap .temporality-step+.temporality-step{margin-top:11px}
.sfc-popwrap .temporality-label,.sfc-popwrap .form-field-block__label{margin-top:0}
.sfc-popwrap select{max-width:100%!important;width:100%}

.sfc-bar,.sfc-sentence,.sfc-foldbar{grid-column:1/-1}  /* prendre TOUTE la largeur (sinon = 1 colonne de la form-grid → gros vide à droite) */
.sfc-bar{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;margin:10px 0 2px}
.sfc-chip{display:inline-flex;align-items:center;gap:9px;border:1px solid var(--border);border-radius:12px;padding:7px 11px 7px 8px;background:var(--chip-bg,#fff);color:var(--text);cursor:pointer;font:inherit;text-align:left;transition:.15s}
.sfc-chip:hover{border-color:var(--primary,#0b5cad);transform:translateY(-1px);box-shadow:0 6px 16px rgba(11,92,173,.1)}
.sfc-chip .ic{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;font-size:15px;background:var(--chip-ic-bg,rgba(14,165,233,.14));flex-shrink:0}
.sfc-chip .tx{display:flex;flex-direction:column;line-height:1.15;min-width:0}
.sfc-chip .k{font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);white-space:nowrap}
.sfc-chip .v{font-size:13.5px;font-weight:800;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:210px}
.sfc-chip .car{color:var(--muted);font-size:11px}

/* PHRASE : réglages en phrase, mots soulignés cliquables */
#sessionForm[data-layout="phrase"] .sfc-sentence{font-size:16px;line-height:1.95;margin:10px 0 2px;color:var(--text)}
#sessionForm[data-layout="phrase"] .sfc-word{font-weight:800;color:var(--primary,#0b5cad);border-bottom:1.5px dashed rgba(11,92,173,.5);cursor:pointer;padding:1px 3px;border-radius:5px;white-space:nowrap}
#sessionForm[data-layout="phrase"] .sfc-word:hover{background:rgba(11,92,173,.09)}

/* BARRE : titre en grand + accent latéral ; chips en bandeau horizontal (défaut) */
#sessionForm[data-layout="barre"] > section.card:first-of-type{position:relative;padding-left:20px}
#sessionForm[data-layout="barre"] > section.card:first-of-type::before{content:"";position:absolute;left:0;top:12px;bottom:12px;width:5px;border-radius:14px 0 0 14px;background:linear-gradient(180deg,#0ea5e9,var(--primary,#0b5cad))}
#sessionForm[data-layout="barre"] .session-title-row input[name=title]{font-size:21px;font-weight:800;border:0;border-bottom:2px solid transparent;background:transparent;padding:3px 2px}
#sessionForm[data-layout="barre"] .session-title-row input[name=title]:hover,
#sessionForm[data-layout="barre"] .session-title-row input[name=title]:focus{border-bottom-color:var(--border);outline:0}

/* CHIPS (ex pastilles/barre/hero) : chips en grille ; le liseré = couleur du THÈME
   (plus d'arc-en-ciel codé en dur). « pastilles » gardé en alias de sécurité. */
#sessionForm[data-layout="chips"] .sfc-bar,
#sessionForm[data-layout="pastilles"] .sfc-bar{display:grid;grid-template-columns:repeat(auto-fit,minmax(175px,1fr))}
#sessionForm[data-layout="chips"] .sfc-chip,
#sessionForm[data-layout="pastilles"] .sfc-chip{border-left:4px solid var(--primary,#0b5cad);box-shadow:0 2px 8px rgba(15,23,42,.05)}

/* BANDEAU COLORÉ (hero) : TOUTE la carte du haut en dégradé vif */
#sessionForm[data-layout="hero"] > section.card:first-of-type{background:linear-gradient(135deg,#0a1f5c,#0b5cad 42%,#0ea5e9 78%,#22d3ee);color:#fff;border:0;box-shadow:0 16px 44px rgba(11,92,173,.32)}
#sessionForm[data-layout="hero"] .page-head h1,#sessionForm[data-layout="hero"] .page-head p.muted{color:#fff}
#sessionForm[data-layout="hero"] .session-title-row{background:transparent;padding:0;margin:2px 0 4px}
#sessionForm[data-layout="hero"] .session-title-row label{color:#dbeafe}
#sessionForm[data-layout="hero"] .session-title-row input[name=title]{font-size:26px;font-weight:800;color:#fff;background:transparent;border:0;border-bottom:2px solid rgba(255,255,255,.45);padding:3px 2px}
#sessionForm[data-layout="hero"] .session-title-row input[name=title]::placeholder{color:#cfe3fb}
#sessionForm[data-layout="hero"] .sfc-bar{margin:10px 0 2px}
#sessionForm[data-layout="hero"] .sfc-chip{background:rgba(255,255,255,.16);border-color:rgba(255,255,255,.32);color:#fff;backdrop-filter:blur(3px)}
#sessionForm[data-layout="hero"] .sfc-chip:hover{background:rgba(255,255,255,.26);border-color:#fff}
#sessionForm[data-layout="hero"] .sfc-chip .k{color:#d7e9ff}
#sessionForm[data-layout="hero"] .sfc-chip .ic{background:rgba(255,255,255,.24)}
#sessionForm[data-layout="hero"] .sfc-chip .car{color:#d7e9ff}
#sessionForm[data-layout="hero"] .session-obj-pair label{color:#dbeafe}
#sessionForm[data-layout="hero"] .session-obj-pair textarea{background:rgba(255,255,255,.96);color:#0f172a;border-color:transparent}
/* Bandeau coloré « pleine page » : toute la zone de contenu en dégradé ; la carte du haut devient transparente */
.main:has(#sessionForm[data-layout="hero"]){background:linear-gradient(160deg,#0a1f5c,#0b5cad 38%,#0ea5e9 72%,#22d3ee)}
.main:has(#sessionForm[data-layout="hero"]) .topbar{background:rgba(255,255,255,.92);backdrop-filter:blur(6px)}
#sessionForm[data-layout="hero"] > section.card:first-of-type{background:transparent;box-shadow:none;border:0}
#sessionForm[data-layout="hero"] .session-builder-card{box-shadow:0 18px 50px rgba(8,20,38,.28)}

/* FIL : chips numérotés (en grille, plusieurs par ligne) */
#sessionForm[data-layout="fil"] .sfc-bar{counter-reset:sfc}
#sessionForm[data-layout="fil"] .sfc-chip{counter-increment:sfc;padding-left:44px;position:relative}
#sessionForm[data-layout="fil"] .sfc-chip::before{content:counter(sfc);position:absolute;left:9px;top:50%;transform:translateY(-50%);width:24px;height:24px;border-radius:50%;background:var(--primary,#0b5cad);color:#fff;display:grid;place-items:center;font-weight:800;font-size:12px}
#sessionForm[data-layout="fil"] .sfc-chip .ic{display:none}

/* BANDEAU (replie) : bandeau résumé ; chaque réglage est cliquable et déroule sa bulle */
.sfc-foldbar{margin:10px 0 2px}
.sfc-fold{display:flex;flex-wrap:wrap;align-items:center;gap:5px 6px;border:1px solid var(--border);border-radius:12px;padding:6px 8px;background:var(--surface-2,color-mix(in srgb,var(--text,#0f172a) 5%,transparent))}
.sfc-fold-item{font:inherit;font-size:13px;color:var(--text);display:inline-flex;align-items:center;gap:6px;border:0;border-radius:9px;padding:6px 10px;background:transparent;cursor:pointer;transition:.12s}
.sfc-fold-item:hover{background:color-mix(in srgb,var(--text,#0f172a) 12%,transparent);box-shadow:0 1px 5px rgba(15,23,42,.1)}
.sfc-fold-item i{font-style:normal;font-weight:800;color:var(--text)}
.sfc-fold-item .car{color:var(--muted);font-size:10px}

/* Liste d'options directe (Type / Groupe / Saison…) dans la bulle — 1 clic */
.sfc-optlist{display:flex;flex-direction:column;gap:2px;max-height:300px;overflow:auto;min-width:210px}
.sfc-opt{text-align:left;border:0;background:transparent;border-radius:8px;padding:7px 10px;font:inherit;font-size:13.5px;color:var(--text);cursor:pointer}
.sfc-opt:hover{background:rgba(11,92,173,.08)}
.sfc-opt.sel{background:rgba(11,92,173,.12);font-weight:800;color:var(--primary,#0b5cad)}

/* Statut = pastille tapable (tous les styles) */
.status-pill{display:inline-flex;align-items:center;gap:7px;border:0;border-radius:2rem;padding:7px 14px;font:inherit;font-weight:800;font-size:13px;cursor:pointer;line-height:1}
.status-pill .dot{width:8px;height:8px;border-radius:50%;background:currentColor}
.status-pill--brouillon{background:#fef3c7;color:#92400e}
.status-pill--validee{background:#dcfce7;color:#166534}
.status-pill:hover{filter:brightness(.97)}
/* ════════ fin skins A2 ════════ */

/* ── V1.8.8 — Bloc Temporalité ── */
.temporality-box{border-top:1px solid var(--border);padding-top:.85rem;margin-top:.25rem}
.temporality-step{margin-bottom:.65rem}
.temporality-step+.temporality-step{margin-top:.25rem}
.radio-pills{display:flex;flex-wrap:wrap;gap:.4rem;margin:.35rem 0 0}
.radio-pills label{display:inline-flex;align-items:center;gap:.35rem;padding:.3rem .7rem;border:1px solid var(--border);border-radius:2rem;font-size:.875rem;cursor:pointer;background:var(--card);transition:background .15s,border-color .15s,color .15s;user-select:none;white-space:nowrap}
.radio-pills label input{accent-color:var(--primary);width:14px;height:14px;flex-shrink:0;cursor:pointer}
.radio-pills label:has(input:checked){background:var(--primary);color:#fff;border-color:var(--primary)}
.radio-pills label:has(input:checked) input{accent-color:#fff}
.temporality-label{font-size:.78rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0 0 .25rem}
.temporality-step[hidden]{display:none!important}
/* V1.8.9.13 — Frise editable inline (CRUD cycles + drag/resize). */
.planning-frise.is-edit-mode .cycle-band--editable{position:relative;display:flex;align-items:center;justify-content:stretch;padding:0;overflow:visible;cursor:default}
.planning-frise.is-edit-mode .cycle-band--editable .cycle-band__title{flex:1;background:transparent;border:0;font:inherit;color:inherit;font-weight:800;padding:8px 22px;cursor:pointer;text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.planning-frise.is-edit-mode .cycle-band--editable .cycle-band__title:hover{text-decoration:underline}
.planning-frise.is-edit-mode .cycle-band--editable .cycle-band__delete{position:absolute;top:2px;right:4px;background:rgba(220,38,38,.92);color:#fff;border:0;border-radius:999px;width:18px;height:18px;line-height:16px;font-size:14px;font-weight:900;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center;opacity:.85;z-index:2}
.planning-frise.is-edit-mode .cycle-band--editable .cycle-band__delete:hover{opacity:1;transform:scale(1.1)}
.planning-frise.is-edit-mode .cycle-handle{position:absolute;top:0;bottom:0;width:8px;cursor:ew-resize;background:rgba(15,23,42,.15);border-radius:6px;touch-action:none;z-index:2}
.planning-frise.is-edit-mode .cycle-handle--left{left:-2px}
.planning-frise.is-edit-mode .cycle-handle--right{right:-2px}
.planning-frise.is-edit-mode .cycle-handle:hover{background:rgba(15,23,42,.32)}
.planning-frise.is-edit-mode .cycle-band--editable.is-dragging{opacity:.85;outline:2px dashed rgba(14,165,233,.65)}
.planning-frise.is-edit-mode .cycle-slot{background:repeating-linear-gradient(45deg,rgba(148,163,184,.12),rgba(148,163,184,.12) 6px,rgba(148,163,184,.22) 6px,rgba(148,163,184,.22) 12px);border:1px dashed rgba(100,116,139,.5);border-radius:12px;color:var(--muted);font-weight:700;cursor:pointer;font-size:12px;padding:6px 8px;display:flex;align-items:center;justify-content:center;min-height:38px}
.planning-frise.is-edit-mode .cycle-slot:hover{border-color:var(--primary);color:var(--primary);background:repeating-linear-gradient(45deg,rgba(14,165,233,.08),rgba(14,165,233,.08) 6px,rgba(14,165,233,.18) 6px,rgba(14,165,233,.18) 12px)}
.planning-frise.is-edit-mode .cycle-slot--inactive{background:rgba(148,163,184,.06);border:1px dashed rgba(100,116,139,.35);color:var(--muted);font-style:italic;font-weight:600;text-transform:none;letter-spacing:0}
.planning-frise.is-edit-mode .cycle-slot--inactive:hover{border-color:#f59e0b;color:#b45309;background:rgba(245,158,11,.10)}
/* Ajust. Simon — bandeau « Mode édition » INLINE sur la ligne de contrôles (gain de hauteur). */
.frise-edit-banner{display:inline-block;vertical-align:middle;background:rgba(14,165,233,.10);border:1px solid rgba(14,165,233,.32);color:var(--text);padding:5px 10px;border-radius:10px;margin:0}
/* Ajust. Simon — UNE ligne de contrôles de frise (Ajuster semaines · Zoom · Repère · bandeau). */
.frise-controls{display:flex;align-items:center;gap:.45rem 1.1rem;flex-wrap:wrap;margin:8px 0}
.frise-controls .frise-week-toolbar,.frise-controls .frise-zoom{margin:0}
/* Ajust. Simon — boutons Objectifs/Créneaux/Périodes dans l'en-tête de saison (entre titre et bassin). */
.season-header-buttons{display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}
/* Modale cycle */
.cycle-modal{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center}
/* La CONFIRMATION MAISON (window.appConfirm) doit passer AU-DESSUS de tout : elle pose une question
   SUR ce qui est affiché dessous. À 1000 elle se retrouvait derrière les fenêtres MT / Tests /
   Objectifs (.rm-scope, 1300) : son fond plein écran, lui, restait dessous, si bien que le clic sur
   « Valider » tombait sur le fond de la fenêtre — qui se fermait — et l'action demandée n'avait jamais
   lieu. Cible l'INSTANCE de confirmation (#appConfirmModal), pas toutes les .cycle-modal. */
#appConfirmModal{z-index:2000}
.cycle-modal[hidden]{display:none!important}
.cycle-modal__backdrop{position:absolute;inset:0;background:rgba(15,23,42,.55);backdrop-filter:blur(2px)}
.cycle-modal__panel{position:relative;background:var(--card);border:1px solid var(--border);border-radius:16px;max-width:520px;width:calc(100% - 32px);box-shadow:0 18px 50px rgba(15,23,42,.35);padding:0;display:flex;flex-direction:column;max-height:90vh;overflow:hidden}
.cycle-modal__head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid var(--border)}
.cycle-modal__head h3{margin:0;font-size:16px}
.cycle-modal__close{background:transparent;border:0;font-size:22px;cursor:pointer;color:var(--muted);width:32px;height:32px;border-radius:8px}
.cycle-modal__close:hover{background:rgba(148,163,184,.18);color:var(--text)}
.cycle-modal__form{padding:16px 18px;display:flex;flex-direction:column;gap:12px;overflow:auto}
.cycle-modal__field{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted);font-weight:700}
.cycle-modal__field input,.cycle-modal__field textarea,.cycle-modal__field select{font:inherit;color:var(--text);background:var(--card);border:1px solid var(--border);border-radius:10px;padding:8px 10px;font-weight:400}
.cycle-modal__field textarea{resize:vertical;min-height:60px}
/* Saisie courte maison (window.appPrompt) */
.cycle-modal__label{font-size:.85rem;color:var(--muted);font-weight:600}
.cycle-modal__form .app-prompt-input{font:inherit;color:var(--text);background:var(--card);border:1px solid var(--border);border-radius:10px;padding:9px 11px;width:100%}
.cycle-modal__form .app-prompt-input:focus{outline:none;border-color:var(--primary,#0b5cad);box-shadow:0 0 0 3px rgba(15,127,209,.15)}
.cycle-modal__dates{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.cycle-modal__actions{display:flex;justify-content:flex-end;gap:8px;padding-top:6px;border-top:1px solid var(--border);margin-top:4px;padding:10px 0 0;align-items:center}
.cycle-modal__spacer{flex:1}
.cycle-modal__actions .danger-text{color:#b91c1c}
.cycle-modal__actions .danger-text:hover{background:rgba(239,68,68,.08);color:#7f1d1d}
/* V1.8.9.13 patch — microcycle editable */
.planning-frise.is-edit-mode .micro-cell--editable{cursor:pointer;background:var(--card);border:1px solid var(--border);font:inherit;color:inherit;text-align:left;width:100%;padding:8px;display:grid;gap:4px;border-radius:12px;transition:border-color .15s,box-shadow .15s}
.planning-frise.is-edit-mode .micro-cell--editable:hover{border-color:var(--primary);box-shadow:0 0 0 2px rgba(14,165,233,.18)}
.cycle-modal__theme-zone{display:flex;flex-direction:column;gap:6px}
.cycle-modal__theme-zone select{font:inherit;color:var(--text);background:var(--card);border:1px solid var(--border);border-radius:10px;padding:8px 10px;font-weight:400;width:100%}
.cycle-modal__theme-zone .link-button{background:transparent;border:0;color:var(--primary);padding:2px 0;cursor:pointer;font:inherit;text-decoration:underline;font-size:12px;margin-top:4px}
.cycle-modal__theme-zone .link-button:hover{color:var(--text)}
[data-pack-picker]{background:rgba(148,163,184,.08);border:1px solid var(--border);border-radius:10px;padding:10px;margin-top:6px}
[data-pack-picker] .actions-line{margin-top:8px;justify-content:flex-end}
@media(max-width:600px){.cycle-modal__dates{grid-template-columns:1fr}}

/* V1.8.9.15 — Page Parametres (gestion unifiee des referentiels) */
.param-section{margin:24px 0 32px}
.param-section>h2{margin:0 0 12px;font-size:18px;color:var(--text)}
.param-subsection{margin-top:18px;padding-top:14px;border-top:1px dashed var(--border)}
.param-subsection>h3{margin:0 0 12px;font-size:15px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.param-grid{display:grid;gap:16px;grid-template-columns:repeat(auto-fit,minmax(320px,1fr))}
.param-card{background:var(--card);border:1px solid var(--border);border-radius:14px;padding:14px 14px 10px;display:flex;flex-direction:column;gap:10px;transition:border-color .25s,box-shadow .25s}
.param-card--highlight{border-color:var(--primary);box-shadow:0 0 0 2px rgba(14,165,233,.18)}
.param-card__head{display:flex;align-items:center;justify-content:space-between;gap:8px}
.param-card__head h3{margin:0;font-size:15px}
.param-card__section{display:flex;flex-direction:column;gap:4px;padding-top:6px;border-top:1px solid var(--border)}
.param-card__section:first-of-type{border-top:0;padding-top:0}
.param-card__section h4{margin:0 0 4px;font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-weight:700}
.param-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.param-entry{display:flex;align-items:center;gap:10px;padding:6px 8px;background:rgba(148,163,184,.08);border-radius:8px}
.param-entry__label{flex:1;font-weight:500;font-size:13px}
.param-badges{display:flex;gap:4px;align-items:center;flex-wrap:wrap}
.param-badges .badge{background:rgba(148,163,184,.18);color:var(--muted);font-size:10px;padding:2px 6px;border-radius:6px;font-weight:600}
.param-actions{display:flex;gap:4px;align-items:center}
.param-swatch{display:inline-block;width:14px;height:14px;border-radius:50%;border:1px solid var(--border);vertical-align:middle}
.param-modal-panel{max-width:640px}
.param-modal-panel--wide{max-width:840px}
.param-items{border:1px solid var(--border);border-radius:10px;padding:10px;margin:0;display:flex;flex-direction:column;gap:8px}
.param-items legend{padding:0 6px;font-size:12px;color:var(--muted);font-weight:700;text-transform:uppercase;letter-spacing:.04em}
.param-items__list{display:flex;flex-direction:column;gap:6px}
.param-item-row{display:flex;align-items:center;gap:6px;background:rgba(148,163,184,.06);border-radius:8px;padding:6px}
.param-item-row input[type=text],.param-item-row input[type=number],.param-item-row textarea,.param-item-row select{font:inherit;color:var(--text);background:var(--card);border:1px solid var(--border);border-radius:8px;padding:6px 8px}
.param-item-row input[type=color]{width:38px;height:32px;border:1px solid var(--border);border-radius:8px;padding:0;background:transparent}
.param-item-row input[type=text]:first-of-type{flex:1}
.param-item-row--full{flex-direction:column;align-items:stretch}
.param-item-row__top{display:flex;gap:6px;align-items:center}
.param-item-row__top input[type=text]:nth-of-type(2){flex:1}
.param-zone-row__top{display:flex;gap:6px;align-items:center}
.param-zone-row__top input[type=text]:nth-of-type(1){flex:1}
.param-zone-row__grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.param-zone-row__grid label,.param-item-row--full>label{display:flex;flex-direction:column;gap:2px;font-size:11px;color:var(--muted);font-weight:700}
.param-zone-row__grid label input,.param-item-row--full>label input,.param-item-row--full>label textarea{font-weight:400}
.param-part-row{align-items:center}
.param-part-row select{flex:1}
.param-part-row input[type=number]{width:80px}
.param-view-table{width:100%;border-collapse:collapse;margin-top:8px}
.param-view-table th,.param-view-table td{padding:6px 8px;text-align:left;font-size:13px;border-bottom:1px solid var(--border)}
.param-view-table th{font-weight:700;color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.param-item__code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:var(--muted);background:rgba(148,163,184,.12);padding:1px 5px;border-radius:4px;margin-left:6px}
@media(max-width:600px){.param-zone-row__grid{grid-template-columns:1fr}.param-grid{grid-template-columns:1fr}}
/* V1.8.9.15 patch — UI ajustements suite retours Simon */
/* Les modales de zones portent un tableau large (jusqu'a 10 zones + la colonne de critere ~1515px) :
   on les laisse s'etaler jusqu'a 1620px pour qu'il tienne EN ENTIER sur un ecran normal, sans defilement
   lateral. Sur une fenetre etroite, le tableau defile (avec sa colonne « Critere » gardee a gauche). */
.param-modal-panel--xl{max-width:min(1620px,96vw)}
/* Le corps d'une modale est un flex COLONNE : sans ceci, un tableau (qui scrolle deja tout seul) est
   ecrase a 0 de haut par le flex et se retrouve enferme dans un petit encart a ascenseur. On lui rend sa
   hauteur naturelle -> c'est la modale qui deroule, une seule fois, au lieu de chaque tableau. */
.cycle-modal__form>.table-wrap,.cycle-modal__form>*>.table-wrap{flex:0 0 auto}
/* Tableau de zones en lecture : la colonne « Critere » reste visible quand on fait defiler
   horizontalement (meme principe que l'editeur, cf. .zones-transposed--edit). Fond OPAQUE obligatoire
   (la teinte d'origine est translucide -> le contenu defilerait par-dessous) : on garde la meme teinte,
   posee sur la couleur de carte du theme, sans figer aucune couleur en dur. */
.cycle-modal__form .zones-transposed tbody th,.cycle-modal__form .zones-transposed thead th:first-child{position:sticky;left:0;z-index:1;background-color:var(--card);background-image:linear-gradient(rgba(148,163,184,.08),rgba(148,163,184,.08))}
.cycle-modal__form .zones-transposed thead th:first-child{z-index:2}
.param-items--roomy{padding:14px;gap:12px}
.param-items--roomy .param-item-row{padding:10px;background:rgba(148,163,184,.04)}
.param-item-row--color{align-items:center;gap:10px}
.param-item-row--color input[type=text]{flex:1;font-size:14px}
.param-item-row--color input[type=color]{width:44px;height:36px}
.param-item-row__abbr{flex:0 0 140px;text-transform:uppercase;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12px}
.param-item-row--full textarea{font-size:13px;min-height:50px}
.param-zones-toolbar{display:flex;gap:10px;align-items:center;margin-top:8px}
.param-zones-table-wrap{margin-top:8px;max-height:60vh;overflow:auto}
.param-zones-table-wrap .zones-transposed{min-width:100%}
.param-zones-table-wrap .zones-transposed--edit td input[type=text],
.param-zones-table-wrap .zones-transposed--edit td textarea{font-size:12px;padding:5px 7px;width:100%;min-width:130px}
.param-zones-table-wrap .zones-transposed--edit th.zone-guide-col{min-width:160px;background:rgba(148,163,184,.05)}
.param-zones-table-wrap .zone-guide-col__head{flex-wrap:nowrap;gap:4px}
.param-zones-table-wrap .zone-guide-col__head input[type=color]{width:32px;height:28px;flex:0 0 auto}
.param-zones-table-wrap .zone-guide-col__head input[type=text]{flex:1;min-width:80px;font-size:12px;padding:4px 6px}

/* V1.8.9.16 — Frise unifiee : bloc en-tete saison inline + auto-save badge. */
.season-header-inline{margin:0 0 14px;display:flex;flex-direction:column;gap:10px}
.season-header-field{display:flex;flex-direction:column;gap:4px;font-size:13px}
.season-header-label{font-weight:600;color:#374151;font-size:12px}
.season-header-input-wrap{position:relative;display:block}
.season-header-input-wrap input[type=text],
.season-header-input-wrap textarea{width:100%;padding:8px 86px 8px 10px;border:1px solid #d1d5db;border-radius:6px;font:inherit;background:#fff;box-sizing:border-box;resize:vertical}
.season-header-input-wrap input[type=text]:focus,
.season-header-input-wrap textarea:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 2px rgba(37,99,235,.15)}
.season-header-field--title .season-header-input-wrap input[type=text]{font-size:16px;font-weight:600}
.season-header-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}
@media (max-width:720px){.season-header-row{grid-template-columns:1fr}}
.season-saved-badge{position:absolute;top:8px;right:8px;background:#dcfce7;color:#166534;font-size:11px;font-weight:600;padding:3px 8px;border-radius:9999px;opacity:0;transition:opacity .25s ease;pointer-events:none}
.season-saved-badge.is-visible{opacity:1}
.season-header-input-wrap.is-saving::after{content:"";position:absolute;top:10px;right:10px;width:14px;height:14px;border:2px solid #cbd5e1;border-top-color:#2563eb;border-radius:50%;animation:season-saving-spin .8s linear infinite}
@keyframes season-saving-spin{to{transform:rotate(360deg)}}

/* Cellule S1 editable (bouton -> ouvre modale dates). */
.timeline-week--editable{background:transparent;border:none;text-align:inherit;font:inherit;cursor:pointer;position:relative;padding-right:18px}
.timeline-week--editable:hover{background:rgba(37,99,235,.08)}
.timeline-week__edit-hint{position:absolute;top:4px;right:4px;font-size:10px;color:#2563eb;opacity:.55}
.timeline-week--editable:hover .timeline-week__edit-hint{opacity:1}

/* Modale dates : bloc preview impacts. */
.season-dates-preview{margin-top:10px;padding:10px 12px;background:#fef3c7;border:1px solid #fbbf24;border-radius:6px;font-size:13px}
.season-dates-preview ul{margin:6px 0 0;padding-left:20px}
.season-dates-preview li{line-height:1.5}

/* V1.8.9.16 — Bloc capabilities V16 sous la frise (3 sections). */
.capabilities-v16{margin-top:14px}
.capabilities-v16 h2{margin:0 0 6px;font-size:18px}
.cap-v16-section{margin-top:18px}
.cap-v16-section-title{margin:0 0 8px;font-size:14px;color:#475569;text-transform:uppercase;letter-spacing:.05em}
.cap-v16-section--tracking{padding-top:14px;border-top:1px dashed #e5e7eb}
.cap-v16-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.cap-v16-tile{background:#fff;border:1px solid #e5e7eb;border-radius:8px;padding:12px;transition:border-color .15s ease, box-shadow .15s ease}
.cap-v16-tile.is-active{border-color:#2563eb;box-shadow:0 0 0 1px rgba(37,99,235,.1)}
.cap-v16-tile__head{display:flex;align-items:flex-start;gap:10px}
.cap-v16-tile__icon{font-size:22px;line-height:1;flex:0 0 auto}
.cap-v16-tile__label{flex:1;display:flex;flex-direction:column;gap:2px;font-size:13px}
.cap-v16-tile__label strong{font-size:14px;color:#111827}
.cap-v16-tile__label .muted{color:#6b7280;font-size:12px}
.cap-v16-tile__sub{margin-top:10px;padding-top:10px;border-top:1px solid #f3f4f6;display:flex;flex-direction:column;gap:8px;font-size:13px}
.cap-v16-tile__sub label{display:flex;flex-direction:column;gap:4px;font-weight:500}
.cap-v16-tile__sub select{padding:6px 8px;border:1px solid #d1d5db;border-radius:6px;font:inherit;background:#fff;font-weight:400}
.cap-v16-tile__actions{display:flex;gap:6px;flex-wrap:wrap}
.cap-v16-kind-radio{display:flex;gap:14px;font-size:13px}
.cap-v16-kind-radio label{display:flex;align-items:center;gap:4px;cursor:pointer}

/* Toggle switch (reuse de la cap-toggle existante mais avec un nom propre). */
.cap-v16-toggle{position:relative;display:inline-block;width:38px;height:22px;flex:0 0 auto;cursor:pointer}
.cap-v16-toggle input{opacity:0;width:0;height:0;position:absolute}
.cap-v16-toggle-slider{position:absolute;inset:0;background:#cbd5e1;border-radius:9999px;transition:background .2s ease}
.cap-v16-toggle-slider::before{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;background:#fff;border-radius:50%;transition:transform .2s ease;box-shadow:0 1px 2px rgba(0,0,0,.2)}
.cap-v16-toggle input:checked + .cap-v16-toggle-slider{background:#2563eb}
.cap-v16-toggle input:checked + .cap-v16-toggle-slider::before{transform:translateX(16px)}

/* V1.8.9.16 — Modale Creer saison (wizard 2 etapes). */
.create-season-wizard{display:flex;flex-direction:column;gap:14px}
.create-season-wizard__step{display:none}
.create-season-wizard__step.is-active{display:block}
.create-season-wizard__step h4{margin:0 0 8px}
.create-season-wizard__choices{display:flex;flex-direction:column;gap:10px}
.create-season-wizard__choices label{display:flex;align-items:center;gap:8px;padding:10px 12px;border:1px solid #e5e7eb;border-radius:6px;cursor:pointer;transition:border-color .15s ease, background .15s ease}
.create-season-wizard__choices label:hover{border-color:#2563eb;background:#f0f9ff}
.create-season-wizard__choices input{margin:0}
.create-season-wizard__step select{width:100%;padding:8px 10px;border:1px solid #d1d5db;border-radius:6px;font:inherit}
.create-season-wizard__note{padding:8px 10px;background:#fef3c7;border:1px solid #fbbf24;border-radius:6px;font-size:12px;color:#92400e;margin-top:8px}

/* V1.8.9.16 — Form capabilities : header + footer + dirty indicator. */
.capabilities-v16__head{margin-bottom:12px}
.capabilities-v16__head h2{margin:0 0 4px;font-size:18px}
.capabilities-v16__footer{display:flex;align-items:center;justify-content:flex-end;gap:12px;margin-top:18px;padding-top:14px;border-top:1px solid #e5e7eb}
.capabilities-v16__dirty-indicator{font-size:12px;color:#92400e;background:#fef3c7;padding:4px 10px;border-radius:9999px;border:1px solid #fbbf24}
.capabilities-v16-purge-list{margin:8px 0;padding-left:20px}
.capabilities-v16-purge-list li{line-height:1.6;color:#b91c1c;font-weight:500}

/* V1.8.9.16 — Toolbar +/- semaine sous la banniere edit (2 groupes : debut / fin). */
.frise-week-toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:6px 0 10px;padding:6px 10px;background:#f8fafc;border:1px dashed #cbd5e1;border-radius:6px;font-size:13px}
.frise-week-toolbar .btn{padding:4px 10px;min-width:32px}
.frise-week-toolbar__group{display:inline-flex;align-items:center;gap:6px;padding:3px 8px;background:#fff;border:1px solid #e2e8f0;border-radius:6px}
.frise-week-toolbar__label{font-weight:600;color:#475569;font-size:12px}

/* V1.8.9.16.1 — Input N× repetitions module dans le builder + rendu groupe au show. */
.session-module-repeat{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:#64748b}
.session-module-repeat input{width:48px;padding:4px 6px;border:1px solid #d1d5db;border-radius:4px}
.session-module--repeated{border-left:3px solid var(--primary,#2563eb)}
.session-module__repeat-badge{display:inline-block;background:var(--sc-rep-bg,#2563eb);color:var(--sc-rep-fg,#fff);font-weight:700;font-size:12px;padding:2px 8px;border-radius:9999px;margin-right:6px;letter-spacing:.5px}

/* V1.9.0 — Finition douce des champs semaine / date / nombre dans les modales (selecteur de semaine S1 + import). */
.cycle-modal__field input[type="week"],
.cycle-modal__field input[type="date"],
.cycle-modal__field input[type="number"]{
  min-height:42px;
  background:linear-gradient(180deg,rgba(14,165,233,.045),var(--card));
  border-color:var(--border);
  border-radius:12px;
  transition:border-color .15s ease,box-shadow .15s ease,background .15s ease;
  cursor:pointer;
}
.cycle-modal__field input[type="week"]:hover,
.cycle-modal__field input[type="date"]:hover,
.cycle-modal__field input[type="number"]:hover{border-color:var(--primary-2)}
.cycle-modal__field input[type="week"]:focus,
.cycle-modal__field input[type="date"]:focus,
.cycle-modal__field input[type="number"]:focus{
  outline:none;
  border-color:var(--primary);
  box-shadow:0 0 0 3px rgba(14,165,233,.18);
  background:var(--card);
}
.cycle-modal__field input[type="week"]::-webkit-calendar-picker-indicator,
.cycle-modal__field input[type="date"]::-webkit-calendar-picker-indicator{
  opacity:.5;
  cursor:pointer;
  border-radius:6px;
  padding:3px;
  transition:opacity .15s ease,background .15s ease;
}
.cycle-modal__field input[type="week"]:hover::-webkit-calendar-picker-indicator,
.cycle-modal__field input[type="date"]:hover::-webkit-calendar-picker-indicator,
.cycle-modal__field input[type="week"]::-webkit-calendar-picker-indicator:hover,
.cycle-modal__field input[type="date"]::-webkit-calendar-picker-indicator:hover{opacity:1;background:rgba(14,165,233,.14)}

/* Mobile : header non colle (evite le chevauchement sur le contenu en scroll) — chantier dashboard 2026-06-04 */
@media(max-width:900px){.app-topbar{position:static;top:auto}}

/* Mobile nav : FAB fixe + fermeture menu — chantier dashboard 2026-06-04 */
.mobile-nav-fab,.mobile-nav-close,.mobile-nav-backdrop{display:none}
@media(max-width:900px){
  .mobile-menu-btn{display:none}
  .mobile-nav-fab{display:inline-flex;align-items:center;justify-content:center;position:fixed;top:10px;left:10px;z-index:55;width:42px;height:42px;border-radius:12px;background:rgba(255,255,255,.92);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border);color:var(--text);font-size:20px;line-height:1;box-shadow:0 4px 14px rgba(15,23,42,.14);cursor:pointer}
  .mobile-nav-close{display:inline-flex;align-items:center;justify-content:center;position:absolute;top:12px;right:12px;width:38px;height:38px;border-radius:10px;background:rgba(255,255,255,.16);color:#fff;font-size:22px;line-height:1;cursor:pointer;z-index:3}
  .mobile-nav-toggle:checked + .app-shell .mobile-nav-backdrop{display:block;position:fixed;inset:0;z-index:55;background:rgba(2,12,27,.5)}
  .mobile-nav-toggle:checked + .app-shell .app-sidebar{z-index:60}
  .mobile-nav-toggle:checked + .app-shell .mobile-nav-fab{display:none}
}

/* Selecteur segmente (ex: type de groupe club/perso) — chantier espace coach perso */
.seg-pills{display:flex;gap:8px;flex-wrap:wrap}
.seg-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--border);border-radius:999px;padding:6px 12px;cursor:pointer;font-size:13px;font-weight:600;color:var(--muted);background:var(--card)}
.seg-pill input{margin:0}
.seg-pill:has(input:checked){border-color:var(--accent,#2563eb);background:rgba(37,99,235,.10);color:var(--text)}

/* ── V1.9.0 (Phase 5) — badges partie du corps + panneau "Modifier" des tuiles ── */
.capbp,.param-body{display:inline-flex;align-items:center;border-radius:6px;padding:2px 7px;font-weight:800;font-size:11px;line-height:1.4}
.capbp-nc,.param-body--nc{background:rgba(16,185,129,.18);color:#047857}
.capbp-bras,.param-body--bras{background:rgba(249,115,22,.18);color:#9a3412}
.capbp-jambes,.param-body--jambes{background:rgba(14,165,233,.18);color:#075985}
.capbp-sys{background:rgba(99,102,241,.18);color:#4338ca}
.cap-item-panel{margin-top:8px;border:1px solid var(--border);border-radius:10px;background:rgba(148,163,184,.06)}
.cap-item-panel>summary{cursor:pointer;padding:7px 10px;font-weight:700;font-size:13px;list-style:none}
.cap-item-panel>summary::-webkit-details-marker{display:none}
.cap-item-panel>summary::before{content:"\25B8";margin-right:6px;color:var(--muted)}
.cap-item-panel[open]>summary::before{content:"\25BE"}
.cap-item-list{display:grid;gap:2px;padding:6px 10px;max-height:240px;overflow:auto}
.cap-item-row{display:flex;align-items:center;gap:8px;padding:4px 2px;font-weight:600;font-size:13px;border-bottom:1px solid rgba(148,163,184,.18)}
.cap-item-row:last-child{border-bottom:0}
.cap-item-row input[type=checkbox]{width:16px;height:16px;flex:none;margin:0}
.cap-item-name{flex:1;min-width:0}
.cap-item-row.is-off{opacity:.5}
.cap-item-bulk{padding:6px 10px 10px}
/* Force [hidden] dans les modales (sinon .param-items{display:flex} / label{display:grid} l'ecrasent) */
.cycle-modal [hidden]{display:none}

/* === Refonte nav V20 (2026-06-11) : cluster "Au quotidien" + icones au trait + sections === */
.sidebar .nav-section a{display:flex;align-items:center;gap:9px}
.sidebar .nav-main{display:flex;align-items:center;gap:9px}
.sidebar .nav-main.active{box-shadow:inset 0 0 0 1px rgba(41,196,216,.5)}
.sidebar .nav-link.active{background:rgba(41,196,216,.20)!important;color:#fff!important;box-shadow:inset 0 0 0 1px rgba(41,196,216,.42)}
.sidebar .nav-ic{flex:0 0 18px;width:18px;display:inline-flex;align-items:center;justify-content:center;opacity:.9}
.sidebar .nav-ic svg{width:17px;height:17px;display:block}
.sidebar .daily-cluster{display:flex;flex-direction:column;gap:6px;margin-bottom:14px;padding:8px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.10);border-radius:12px}
.sidebar .daily-cluster .daily-lbl{font-size:.66rem;text-transform:uppercase;letter-spacing:.06em;color:#9fd4ff;font-weight:700;padding:0 0 1px 4px}
.sidebar .daily-cluster .nav-main{margin:0}
.sidebar .nav-soon{opacity:.65;cursor:default}
.sidebar .nav-badge-soon{margin-left:auto;font-size:.6rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase;background:rgba(245,158,11,.22);color:#ffd591;border:1px solid rgba(245,158,11,.4);padding:1px 6px;border-radius:999px}
.sidebar .split-row{display:flex;align-items:center;gap:6px;padding:4px 6px}
.sidebar .split-row .split-link{flex:1;text-align:center;padding:5px 8px;border-radius:7px;background:rgba(255,255,255,.08);color:#e9f6ff!important;border:1px solid rgba(255,255,255,.14);font-size:.86rem;font-weight:600;text-decoration:none}
.sidebar .split-row .split-link:hover{background:rgba(255,255,255,.16)!important;color:#fff!important}
.sidebar .split-row .split-link.is-active{background:linear-gradient(135deg,#0f7fd1,#0b67ba)!important;color:#fff!important;border-color:transparent}
/* « Vrai menu perso » : section « Au quotidien » rendue comme bloc (data-driven) */
.sidebar .nav-section.nav-daily{border-top:none;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.10);border-radius:12px;padding:8px 10px;margin-bottom:6px}
.sidebar .nav-section.nav-daily>span{color:#9fd4ff}
/* Modularite V20.10 : section "★ Raccourcis" (entre "Au quotidien" et "Suivi") */
.sidebar .nav-shortcuts span{color:#ffd591!important}
.sidebar .nav-link.shortcut{border-left:2px solid rgba(245,158,11,.45)}
.sidebar .nav-link.shortcut .nav-ic{color:#ffd591;opacity:.95}
.sidebar .nav-link.shortcut.active{border-left-color:#f59e0b}
/* Bouton ★ "epingler au menu" dans l'entete de la frise (calque .snav-edit) */
.hub-pin{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;border:1px solid var(--border);background:var(--card);color:#94a3b8;font-size:1.15rem;line-height:1;cursor:pointer;flex-shrink:0}
.hub-pin:hover{border-color:#f59e0b;background:rgba(245,158,11,.10);color:#d97706}
.hub-pin.is-pinned{background:#f59e0b;border-color:#f59e0b;color:#fff}
.session-head__titlebar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
/* « Vrai menu perso » : items masques par l'utilisateur (cf MenuLayoutService) */
.sidebar .nav-link.is-hidden{display:none}
.sidebar .nav-section:not(.nav-daily):not(:has(.nav-link:not(.is-hidden))){display:none}
/* Masquage global par utilisateur : item systeme cache (page Parametres) */
.param-entry--hidden{opacity:.5}
.param-hidden-badge{background:rgba(100,116,139,.18);color:#475569}
/* Reordonnancement (fleches haut/bas) page Parametres */
.param-card__head h3{flex:1 1 auto}
.param-card__move{display:inline-flex;gap:2px}
.btn.param-move{padding:2px 7px;line-height:1.1;font-size:13px;min-width:0}

/* Menu d'actions par ligne « ⋯ » (.row-actions-menu) — partagé listes séance/module/saison (M1). */
.row-actions-menu{display:inline-block;position:relative;}
.row-actions-menu>summary{list-style:none;cursor:pointer;}
.row-actions-menu>summary::-webkit-details-marker{display:none;}
.row-actions-menu__panel{position:absolute;right:0;top:calc(100% + 2px);z-index:1000;background:#fff;
  border:1px solid var(--hub-line,rgba(15,72,120,.18));border-radius:8px;
  box-shadow:0 6px 20px rgba(0,0,0,.15);min-width:210px;padding:.3rem;
  display:flex;flex-direction:column;gap:.1rem;}
.row-actions-menu__panel a,.row-actions-menu__panel button{display:block;width:100%;text-align:left;
  background:none;border:none;padding:.45rem .6rem;cursor:pointer;font-size:.85rem;
  color:var(--hub-ink,#102033);text-decoration:none;border-radius:6px;white-space:nowrap;}
.row-actions-menu__panel a:hover,.row-actions-menu__panel button:hover{background:rgba(15,127,209,.08);}
.row-actions-menu__panel form{margin:0;}

/* Favori (unif menus) — étoile dorée devant le titre. */
.fav-star{color:#f5a623;font-size:.95em;}

/* En-tête de groupe + séparateur dans le menu « ⋯ » (unif menus). */
.row-actions-menu__head{font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;
  color:var(--hub-muted,#6b7a8d);padding:.4rem .6rem .15rem;font-weight:700;cursor:default;}
.row-actions-menu__sep{height:1px;background:var(--hub-line,rgba(15,72,120,.14));margin:.25rem .3rem;}

/* =================================================================== */
/* Onglets de liste UNIFIÉS (Séances / Modules / Saisons) — V1.9.x.      */
/* Style « soulignement » + accent bleu de marque. Source unique :       */
/* une retouche ici se répercute sur les 3 pages. Markup + glisser =     */
/* _partials/list_tabs.php. Préfixe .lt- (list-tabs).                    */
/* =================================================================== */
.lt{--lt-accent:var(--hub-blue,#0f7fd1);--lt-accent-tint:rgba(15,127,209,.08);
  border:1px solid var(--border);border-radius:16px;overflow:hidden;background:var(--card);margin:14px 0}
.lt > *:last-child{border-bottom:0}
/* Niveau 1 — onglets principaux (soulignement). */
.lt-l1{display:flex;gap:2px;flex-wrap:wrap;align-items:flex-end;padding:0 10px;
  border-bottom:1px solid var(--border);background:linear-gradient(180deg,var(--card),var(--lt-accent-tint))}
.lt-tab{display:inline-flex;align-items:center;gap:7px;padding:13px 16px;color:var(--text);
  text-decoration:none;font-size:.95rem;font-weight:600;border:0;background:transparent;cursor:pointer;
  white-space:nowrap;border-bottom:3px solid transparent;transition:color .15s,background .15s,border-color .15s}
.lt-tab .lt-ico{font-size:1.05em;line-height:1}
.lt-tab .lt-label{line-height:1}
.lt-tab .lt-badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;
  padding:0 5px;border-radius:999px;background:var(--warn,#f59e0b);color:#fff;font-size:11px;font-weight:800}
.lt-tab .lt-dh{cursor:grab;color:var(--muted);opacity:0;font-size:.8em;margin-right:-2px;transition:opacity .15s;user-select:none}
.lt-tab:hover .lt-dh{opacity:.55}
.lt-tab:not(.is-active):hover{background:var(--lt-accent-tint);color:var(--lt-accent)}
.lt-tab.is-active{color:var(--lt-accent);border-bottom-color:var(--lt-accent)}
.lt-l1 .lt-ghost{opacity:.4;background:var(--lt-accent-tint)}
.lt-l1 .lt-drag{cursor:grabbing}
/* Niveau 2 — bascule Temporel / Intemporel (même look partout). */
.lt-l2{display:flex;align-items:center;gap:10px;padding:12px 14px;background:var(--card);border-bottom:1px solid var(--border)}
.lt-seg{display:inline-flex;gap:0;border:1px solid var(--border);border-radius:999px;padding:3px;background:rgba(148,163,184,.08)}
.lt-seg-opt{padding:6px 16px;border:0;background:transparent;color:var(--text);cursor:pointer;border-radius:999px;
  font-size:13px;font-weight:600;text-decoration:none;display:inline-flex;align-items:center;gap:6px;transition:all .15s}
.lt-seg-opt:hover:not(.is-active){color:var(--lt-accent)}
.lt-seg-opt.is-active{background:var(--lt-accent);color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.12)}
.lt-seg-opt .lt-cnt{font-size:11px;opacity:.85}
/* Niveau 3 — sections (admin : mine / pending / approved). */
.lt-l3{display:flex;gap:6px;flex-wrap:wrap;padding:10px 14px;background:var(--lt-accent-tint);border-bottom:1px solid var(--border)}
.lt-chip{padding:5px 12px;border-radius:8px;font-size:.82rem;font-weight:600;text-decoration:none;
  background:var(--card);color:var(--text);border:1px solid var(--border)}
.lt-chip:hover{border-color:var(--lt-accent);color:var(--lt-accent)}
.lt-chip.is-active{background:var(--lt-accent);color:#fff;border-color:var(--lt-accent)}

/* V1.9.x — Relooking « Paramètres → compte » */
.acct-hero{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:22px;align-items:center;background:var(--hero-grad,linear-gradient(135deg,var(--hub-navy,#071d35),#0b4d83));color:var(--hero-fg,#fff);border-radius:22px;padding:22px 24px;box-shadow:0 24px 60px rgba(7,29,53,.22);margin-bottom:18px}
.acct-eyebrow{text-transform:uppercase;letter-spacing:.1em;font-size:.72rem;font-weight:800;color:var(--hero-fg,#9fd4ff);opacity:.82;margin-bottom:10px}
.acct-id{display:flex;align-items:center;gap:18px;min-width:0}
.acct-avatar{width:72px;height:72px;border-radius:20px;flex:0 0 auto;display:grid;place-items:center;font-size:25px;font-weight:800;color:#fff;background:linear-gradient(135deg,var(--primary,#0f7fd1),var(--primary-2,#29c4d8));box-shadow:0 12px 26px rgba(15,127,209,.35)}
.acct-id h1{margin:0 0 4px;font-size:1.55rem;letter-spacing:-.02em;color:var(--hero-fg,#fff)}
.acct-mail{color:var(--hero-fg,#d9ecff);opacity:.9;font-size:14px;word-break:break-all}
.acct-roles{display:flex;gap:8px;margin-top:10px;flex-wrap:wrap}
.acct-rchip{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:800;padding:5px 10px;border-radius:999px;background:rgba(255,255,255,.14);color:#fff;border:1px solid rgba(255,255,255,.22)}
.acct-hero-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}
.acct-hero-actions .btn.ghost{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);color:#fff;box-shadow:none}
.acct-hero-actions .btn.ghost:hover{background:rgba(255,255,255,.2)}
.acct-stats{display:flex;gap:10px}
.acct-stat{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.16);border-radius:16px;padding:12px 16px;text-align:center;min-width:104px}
.acct-stat b{display:block;font-size:1.5rem;line-height:1.1}
.acct-stat span{font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:var(--hero-fg,#cfe6ff);opacity:.82}
/* Affichage — petite liste unifiée (espaces + thème), discrète et compacte */
.acct-display-list{display:flex;flex-direction:column;margin-top:8px}
.acct-display-row{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;padding:10px 0;border-top:1px solid var(--border)}
.acct-display-row:first-child{border-top:0}
.acct-display-lbl{display:inline-flex;align-items:center;gap:8px;font-weight:650}
.acct-display-lbl small{color:var(--muted);font-weight:500;font-size:12px}
.acct-seg{position:relative;display:inline-flex;border:1px solid var(--border);border-radius:10px;overflow:hidden;background:var(--card)}
.acct-seg input{position:absolute;opacity:0;width:0;height:0;margin:0}
.acct-seg label{display:inline-flex;align-items:center;margin:0;padding:5px 12px;font-size:12.5px;font-weight:700;color:var(--muted);cursor:pointer;transition:.15s}
.acct-seg label:hover{background:rgba(148,163,184,.12)}
.acct-seg input:checked + label{background:linear-gradient(135deg,var(--hub-blue,#0f7fd1),#0b67ba);color:#fff}
.acct-seg .seg-hide:checked + label{background:#64748b;color:#fff}
.acct-form-actions{grid-column:1/-1;display:flex;align-items:center;gap:12px}
.acct-save-status{font-size:13px;font-weight:700;color:var(--muted)}
.acct-save-status.ok{color:var(--ok)}
/* Mes espaces — carte compacte (toggles + devenir coach), discrète, en bas */
.acct-spaces-card{padding:14px 16px}
.acct-spaces-card h2{font-size:1.05rem;margin:0}
.acct-spaces-head{display:flex;flex-direction:column;gap:2px;margin-bottom:2px}
.acct-display-row form{margin:0}
@media(max-width:820px){.acct-hero{grid-template-columns:1fr}.acct-stats{justify-content:flex-start}.acct-upgrade{flex-wrap:wrap}}

/* V1.9.x — Fenêtre « Réglages différents » (compat séance↔saison à l'import) */
.compat-card{max-width:780px}
.compat-axes{margin:.4rem 0 .2rem;padding-left:20px;line-height:1.7;font-weight:650}
.compat-options{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:16px}
.compat-option{display:flex;flex-direction:column;justify-content:space-between;gap:12px;border:1px solid var(--hub-line);border-radius:16px;padding:16px;background:linear-gradient(135deg,#fff,#f5fbff)}
html[data-theme="dark"] .compat-option{background:linear-gradient(135deg,#11263c,#0f2236)}
.compat-option--reco{border-color:rgba(15,127,209,.45);box-shadow:0 0 0 3px rgba(15,127,209,.1)}
.compat-option--soon{opacity:.72}
.compat-option__body h3{margin:.4rem 0 .3rem}
.compat-option__badge{display:inline-flex;align-items:center;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.04em;padding:4px 9px;border-radius:999px;background:linear-gradient(135deg,var(--hub-blue,#0f7fd1),#0b67ba);color:#fff}
.compat-option__badge--soon{background:#64748b}
.compat-option .btn{width:100%;justify-content:center}
@media(max-width:680px){.compat-options{grid-template-columns:1fr}}
/* Fenêtre compat en MODALE (carte centrée) + listes claires « gardé / retiré » */
.compat-modal{max-width:min(560px,96vw)}
.compat-modal .compat-options{grid-template-columns:1fr;gap:12px;margin-top:6px}
.compat-kept-label{font-weight:800;color:var(--ok,#16a34a);margin:.2rem 0 0;font-size:13px}
.compat-removed-label{font-weight:800;color:var(--danger,#dc2626);margin:.3rem 0 .4rem;font-size:13px}
.compat-removed{list-style:none;margin:0 0 .4rem;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.compat-removed li{font-size:12px;font-weight:700;background:rgba(220,38,38,.08);color:#b42318;border:1px solid rgba(220,38,38,.22);border-radius:8px;padding:3px 8px}
.compat-removed li::before{content:"✗ ";font-weight:900}
html[data-theme="dark"] .compat-removed li{background:rgba(220,38,38,.16);color:#fca5a5;border-color:rgba(220,38,38,.38)}

/* V1.9.x — Sujet 9 : séance annulée / reportée. Badges + rendu planning. */
.badge.sess-life{font-weight:700}
.sess-life--cancelled{background:rgba(220,38,38,.10);color:#b42318;border:1px solid rgba(220,38,38,.28)}
.sess-life--reported{background:rgba(217,119,6,.12);color:#b45309;border:1px solid rgba(217,119,6,.30)}
html[data-theme="dark"] .sess-life--cancelled{background:rgba(220,38,38,.20);color:#fca5a5;border-color:rgba(220,38,38,.40)}
html[data-theme="dark"] .sess-life--reported{background:rgba(217,119,6,.22);color:#fcd34d;border-color:rgba(217,119,6,.42)}
.session-mini.session-cancelled{opacity:.62}
.session-mini.session-cancelled strong,.session-mini.session-cancelled span{text-decoration:line-through}
.session-mini.session-cancelled small{text-decoration:none;color:#b42318;font-weight:700}
.session-mini.session-reported{border-left:3px solid #d97706}
.session-mini.session-reported small{color:#b45309;font-weight:700}

/* V1.9.x — Sujet 9 : badge de statut unifié (tapable Brouillon/Prévue). */
.state-badge{display:inline-block;font:inherit;font-size:.72rem;font-weight:700;line-height:1;
  padding:.3em .6em;border-radius:999px;border:1px solid transparent;vertical-align:middle;white-space:nowrap}
button.state-badge{cursor:default}
button.state-badge.is-clickable{cursor:pointer;transition:filter .12s,box-shadow .12s}
button.state-badge.is-clickable:hover{filter:brightness(.96);box-shadow:0 1px 4px rgba(0,0,0,.12)}
button.state-badge.is-clickable::after{content:" ↺";opacity:.55;font-weight:400}
.state-brouillon{background:#eef1f5;color:#52606d;border-color:#dbe1e8}
.state-prevue{background:rgba(15,127,209,.12);color:#0f6fb8;border-color:rgba(15,127,209,.28)}
.state-effectuee{background:rgba(22,163,74,.13);color:#15803d;border-color:rgba(22,163,74,.30)}
.state-cancelled{background:rgba(220,38,38,.10);color:#b42318;border-color:rgba(220,38,38,.28)}
.state-reported{background:rgba(217,119,6,.12);color:#b45309;border-color:rgba(217,119,6,.30)}
.session-title-link{color:inherit;text-decoration:none}
.session-title-link:hover{text-decoration:underline}
html[data-theme="dark"] .state-brouillon{background:#2a3340;color:#aeb9c7;border-color:#3a4654}
html[data-theme="dark"] .state-prevue{background:rgba(15,127,209,.22);color:#7cc4f2;border-color:rgba(15,127,209,.40)}
html[data-theme="dark"] .state-effectuee{background:rgba(22,163,74,.22);color:#86e0a6;border-color:rgba(22,163,74,.40)}
html[data-theme="dark"] .state-cancelled{background:rgba(220,38,38,.20);color:#fca5a5;border-color:rgba(220,38,38,.40)}
html[data-theme="dark"] .state-reported{background:rgba(217,119,6,.22);color:#fcd34d;border-color:rgba(217,119,6,.42)}

/* ===== Bandeau de navigation unifie (frise + presences) — Etape 1 : selecteur de saison stylé + onglets ===== */
.snav{display:flex;flex-wrap:wrap;gap:9px 14px;align-items:center;grid-column:1/-1;position:relative}
.snav-tabs{display:inline-flex;gap:3px;flex-wrap:wrap}
.snav-tab{border:0;background:transparent;cursor:pointer;font:inherit;font-size:.85rem;font-weight:700;color:var(--muted);padding:6px 12px;border-radius:9px}
.snav-tab:hover{background:rgba(15,127,209,.08);color:var(--text)}
.snav-tab.on{background:var(--primary,#0b5cad);color:#fff}
.snav-tab .snav-cnt{font-size:11px;opacity:.75;margin-left:3px}
.snav-picker{position:static}
.snav-btn{display:inline-flex;align-items:center;gap:8px;max-width:100%;cursor:pointer;border:1px solid var(--border);background:var(--card);border-radius:10px;padding:6px 10px;text-align:left;color:var(--text)}
.snav-btn:hover{border-color:var(--primary,#0b5cad);box-shadow:0 0 0 3px rgba(15,127,209,.08)}
.snav-dot{width:11px;height:11px;border-radius:50%;flex-shrink:0}
.snav-name{font-weight:800;font-size:.92rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:240px}
.snav-sub{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px}
.snav-chev{color:var(--muted);font-size:.7rem;margin-left:2px;transition:transform .15s}
.snav-picker.open .snav-chev{transform:rotate(180deg)}
.snav-pop{position:absolute;z-index:60;top:calc(100% + 8px);left:0;width:430px;max-width:92vw;background:var(--card);border:1px solid var(--border);border-radius:16px;box-shadow:var(--shadow);overflow:hidden;display:none}
.snav-picker.open .snav-pop{display:block}
.snav-search{padding:9px 12px;border-bottom:1px solid var(--border)}
.snav-search input{width:100%;font:inherit;font-size:14px;padding:8px 11px;border:1px solid var(--border);border-radius:10px;background:var(--card);color:var(--text)}
.snav-list{max-height:340px;overflow:auto;padding:6px}
.snav-opt{display:flex;width:100%;align-items:center;gap:11px;padding:9px 10px;border:0;border-radius:11px;cursor:pointer;background:transparent;text-align:left;color:var(--text)}
.snav-opt:hover{background:rgba(15,127,209,.08)}
.snav-opt.sel{background:rgba(15,127,209,.12);outline:1px solid rgba(15,127,209,.25)}
.snav-opt-meta{display:flex;flex-direction:column;gap:1px;min-width:0;flex:1}
.snav-opt-name{font-weight:700;font-size:.92rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.snav-opt-sub{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.snav-ck{margin-left:auto;color:var(--primary,#0b5cad);font-weight:900;opacity:0}
.snav-opt.sel .snav-ck{opacity:1}
.snav-empty{padding:18px;text-align:center;color:var(--muted);font-size:13px}
.snav-right{margin-left:auto;display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap}
.snav-edit{display:grid;place-items:center;width:38px;height:38px;border-radius:11px;border:1px solid var(--border);background:var(--card);color:var(--text);font-size:1.05rem;text-decoration:none;flex-shrink:0;cursor:pointer}
.snav-edit:hover{border-color:var(--primary,#0b5cad);background:rgba(15,127,209,.07)}
.snav-edit.is-active{background:var(--primary,#0b5cad);color:#fff;border-color:var(--primary,#0b5cad)}
/* V1.9.x — Mode edition frise : groupe "Annuler" + "Enregistrer" (le crayon) cote a cote */
.snav-edit-actions{display:inline-flex;align-items:center;gap:8px;flex-shrink:0}
.snav-edit-form{display:inline;margin:0}
button.snav-edit{padding:0;font-family:inherit}
.snav-cancel{display:inline-flex;align-items:center;gap:6px;height:38px;padding:0 14px;border-radius:11px;border:1px solid var(--border);background:var(--card);color:var(--text);font:inherit;font-weight:700;font-size:.9rem;cursor:pointer;flex-shrink:0}
.snav-cancel:hover{border-color:#c0392b;color:#c0392b;background:rgba(192,57,43,.06)}
/* Hub unifie — en-tete (titre + bascule + crayon sur une ligne) */
.hub-head{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;margin-bottom:14px}
.hub-title{margin:0;font-size:1.45rem;font-weight:800;letter-spacing:-.02em;line-height:1.15;color:var(--hub-navy,#071d35)}
.hub-head-actions{margin-left:auto;display:inline-flex;align-items:center;gap:10px;flex-wrap:wrap}
/* Bascule Frise / Presences — pilule fluide harmonisee avec la reglette */
.view-toggle{display:inline-flex;align-items:center;border:1px solid var(--hub-line,rgba(15,72,120,.14));border-radius:999px;padding:3px;background:linear-gradient(180deg,#fff,var(--hub-soft,#f3f8ff));gap:2px;box-shadow:0 2px 8px rgba(15,127,209,.10)}
.view-toggle .vt-btn{border:0;background:transparent;cursor:pointer;font:inherit;font-weight:700;font-size:.88rem;color:var(--hub-ink,#102033);border-radius:999px;padding:7px 16px;display:inline-flex;align-items:center;gap:6px;transition:background .15s,color .15s,box-shadow .15s}
.view-toggle .vt-btn:not(.on):hover{background:rgba(15,127,209,.08)}
.view-toggle .vt-btn.on{background:linear-gradient(135deg,var(--hub-blue,#0f7fd1),#0b67ba);color:#fff;box-shadow:0 4px 12px rgba(15,127,209,.28)}
.hub-section[hidden]{display:none}

/* ===== Reglette de semaines (sélecteur temporel) — Etape 2 ===== */
.srg{grid-column:1/-1;width:100%;margin-top:4px}
.srg-head{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:baseline;justify-content:space-between;margin-bottom:8px}
.srg-readout{font-size:1.02rem;font-weight:800}
.srg-readout .srg-arrow{color:var(--muted);margin:0 7px;font-weight:600}
.srg-readout .srg-wk{color:var(--primary-2,#0f74d8)}
.srg-count{font-size:13px;color:var(--muted)}
.srg-rail{position:relative;height:30px;margin:72px 10px 34px;touch-action:none;user-select:none}
.srg-track{position:absolute;left:0;right:0;top:11px;height:8px;border-radius:999px;background:rgba(148,163,184,.25);border:1px solid var(--border)}
.srg-fill{position:absolute;top:11px;height:8px;border-radius:999px;cursor:grab;background:linear-gradient(90deg,var(--primary,#0b5cad),var(--hub-aqua,#29c4d8));box-shadow:0 2px 6px rgba(15,127,209,.3)}
.srg-fill:active{cursor:grabbing}
.srg-ticks{position:absolute;left:0;right:0;top:11px;height:8px;pointer-events:none}
.srg-tick{position:absolute;top:-3px;width:1px;height:14px;background:rgba(15,72,120,.18);transform:translateX(-.5px)}
.srg-tick.month{height:20px;top:-6px;background:rgba(15,72,120,.34)}
.srg-ticklabel{position:absolute;top:22px;transform:translateX(-50%);font-size:10.5px;color:var(--muted);white-space:nowrap}
.srg-monthlabel{position:absolute;top:38px;transform:translateX(-50%);font-size:11px;font-weight:800;color:var(--text);white-space:nowrap;text-transform:capitalize}
.srg-now{position:absolute;top:-8px;bottom:-22px;width:2px;background:var(--warn,#f59e0b);transform:translateX(-1px);pointer-events:none}
.srg-now-flag{position:absolute;top:-32px;transform:translateX(-50%);background:var(--warn,#f59e0b);color:#fff;font-size:10.5px;font-weight:800;padding:3px 8px;border-radius:7px;white-space:nowrap;box-shadow:0 4px 10px rgba(245,158,11,.35)}
.srg-now-flag::after{content:"";position:absolute;left:50%;bottom:-5px;transform:translateX(-50%);border:5px solid transparent;border-top-color:var(--warn,#f59e0b);border-bottom:0}
.srg-handle{position:absolute;top:-2px;width:30px;height:30px;border-radius:50%;background:var(--card,#fff);border:3px solid var(--primary,#0b5cad);box-shadow:0 4px 10px rgba(15,127,209,.35);cursor:grab;transform:translateX(-50%);display:grid;place-items:center;z-index:5}
.srg-handle::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--primary,#0b5cad)}
.srg-handle:active{cursor:grabbing}
.srg-handle.drag{box-shadow:0 0 0 6px rgba(15,127,209,.16),0 4px 10px rgba(15,127,209,.35)}
.srg-bubble{position:absolute;top:-38px;transform:translateX(-50%);background:#0f172a;color:#fff;font-size:11px;font-weight:800;padding:4px 9px;border-radius:8px;white-space:nowrap;pointer-events:none;z-index:6;display:none}
.srg-bubble::after{content:"";position:absolute;left:50%;bottom:-5px;transform:translateX(-50%);border:5px solid transparent;border-top-color:#0f172a;border-bottom:0}

/* V1.9.x Periodes exceptionnelles (Lot 2) — carte, modale, bandes frise. */
:root{--exc-stage:#f59e0b;--exc-vac:#64748b}
/* Carte : pastille de type + item */
.per-item{align-items:center}
.per-kdot{display:inline-block;width:11px;height:11px;border-radius:50%;flex:0 0 auto;background:var(--exc-stage)}
.per-kdot--stage{background:var(--exc-stage)}
.per-kdot--vacances{background:var(--exc-vac)}
/* Modale : selecteur de type */
.per-kindseg{display:flex;gap:8px;flex-wrap:wrap}
.per-kindopt{flex:1;min-width:190px;display:flex;gap:9px;align-items:flex-start;border:1.5px solid var(--border);border-radius:11px;padding:9px 11px;cursor:pointer;font-weight:400}
.per-kindopt input{display:none}
.per-kindopt .per-kt{font-weight:700;color:var(--text)}
.per-kindopt.is-on{border-color:var(--primary);background:rgba(15,127,209,.06)}
.per-kindopt[data-kind="vacances"].is-on{border-color:var(--exc-vac);background:rgba(100,116,139,.08)}
/* Modale : editeur de creneaux (jours + lignes horaires) */
.per-slotedit{border:1px dashed var(--border);border-radius:11px;padding:12px;display:flex;flex-direction:column;gap:10px}
.per-slotedit__head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.per-slotedit__head strong{font-size:13px}
.per-daychips{display:flex;gap:6px;flex-wrap:wrap}
.per-daychip{width:34px;height:34px;border-radius:9px;border:1.5px solid var(--border);background:var(--card);color:var(--muted);cursor:pointer;font-weight:700;font-size:12.5px}
.per-daychip.is-on{border-color:var(--primary);background:var(--primary);color:#fff}
.per-slotrows{display:flex;flex-direction:column;gap:8px}
.per-slotrow{display:flex;flex-direction:column;gap:6px;border:1px solid var(--border);border-radius:9px;padding:8px}
.per-row-days{display:flex;gap:5px;flex-wrap:wrap}
.per-row-days .per-daychip{width:28px;height:28px;font-size:11.5px}
.per-row-time{display:grid;grid-template-columns:58px 1fr 1fr 1.1fr 30px;gap:7px;align-items:center}
/* Point 4 — variation par semaine */
.per-weektoggle{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--text);cursor:pointer}
.per-row-weeks{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-top:6px;border-top:1px dashed var(--border)}
.per-row-weeks__lbl{flex:0 0 auto}
.per-row-weeks__chips{display:flex;gap:5px;flex-wrap:wrap}
.per-row-weeks .per-daychip{width:auto;min-width:30px;height:26px;padding:0 8px;font-size:11.5px}
.per-slotrow input,.per-slotrow select{font:inherit;padding:6px 7px;border:1px solid var(--border);border-radius:8px;background:var(--card);color:var(--text);font-size:12.5px}
.per-rtag{font-size:11px;font-weight:800;border-radius:6px;padding:4px 0;text-align:center}
.per-rtag--am{background:#e7eefb;color:#1d4ed8}
.per-rtag--pm{background:#fde9c8;color:#9a5b06}
.per-row-del{border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:18px;line-height:1}
.per-row-del:hover{color:var(--danger,#dc2626)}
/* Lot 5 (a) — sous-ligne "bassin (lieu) + lignes d'eau" d'un creneau de periode */
.per-row-place{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12.5px}
.per-row-place select{max-width:230px}
.per-row-place__laneswrap{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
.per-row-place__lanes{display:inline-flex;gap:8px;flex-wrap:wrap;align-items:center}
.per-slotedit__add{display:flex;gap:8px;flex-wrap:wrap}
.per-slotedit__vachint{margin:0}
@media(max-width:600px){.per-row-time{grid-template-columns:50px 1fr 1fr;grid-auto-rows:auto}.per-row-time select{grid-column:2/4}.per-row-del{grid-column:3;justify-self:end}}
/* Frise : bande periode (stage/vacances) + bords pointilles si demi-semaine */
.exc-period-row .exc-band{display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;color:#fff;border-radius:7px;padding:2px 8px;overflow:hidden;white-space:nowrap;border:1px solid transparent;
  background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.22) 0 7px,transparent 7px 14px)}
.exc-band--stage{background-color:var(--exc-stage)}
.exc-band--vacances{background-color:var(--exc-vac)}
.exc-band.is-partial-start{border-left:2px dashed rgba(255,255,255,.9);border-top-left-radius:0;border-bottom-left-radius:0}
.exc-band.is-partial-end{border-right:2px dashed rgba(255,255,255,.9);border-top-right-radius:0;border-bottom-right-radius:0}
/* Lot 5 (c) — semaine marquee stage/vacances : case TEINTEE + HACHUREE (reprend le style oblique de
   l'ancienne bande, plus visible que la simple teinte) + pastille + liseret haut colore. */
.timeline-week--exc{position:relative}
.timeline-week--exc-stage{
  background-color:rgba(245,158,11,.16);
  background-image:repeating-linear-gradient(135deg,rgba(245,158,11,.30) 0 6px,transparent 6px 13px);
  border-color:rgba(245,158,11,.65);box-shadow:inset 0 3px 0 0 var(--exc-stage)}
.timeline-week--exc-vacances{
  background-color:rgba(100,116,139,.16);
  background-image:repeating-linear-gradient(135deg,rgba(100,116,139,.34) 0 6px,transparent 6px 13px);
  border-color:rgba(100,116,139,.6);box-shadow:inset 0 3px 0 0 var(--exc-vac)}
.wk-exc-dot{position:absolute;top:6px;right:6px;width:10px;height:10px;border-radius:50%;z-index:2;box-shadow:0 0 0 2px var(--card)}
.wk-exc-dot--stage{background:var(--exc-stage)}
.wk-exc-dot--vacances{background:var(--exc-vac)}
html[data-theme="dark"] .timeline-week--exc-stage{background-color:rgba(245,158,11,.24)}
html[data-theme="dark"] .timeline-week--exc-vacances{background-color:rgba(100,116,139,.28)}

/* V1.9.x — Objectifs persos PARTAGES nageur<->coach (couche individuelle) — Lot 0. */
:root{--so-swim:#0f7fd1;--so-swim-bg:#eef6ff;--so-swim-br:#9cc8ee;--so-coach:#7c3aed;--so-coach-bg:#f5f0ff;--so-coach-br:#c4b1ee}
.so-panel{margin-top:14px}
.so-panel__head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:8px}
.so-panel__title{font-size:1.05rem;margin:0}
.so-panel__sub{margin:.25rem 0 0;max-width:640px}
.so-panel__hint{font-size:.78rem;color:var(--muted)}
.so-panel__counts{margin:.2rem 0 0}
/* le bloc partage */
.so-block{border:1.5px solid var(--border);border-radius:12px;overflow:hidden;background:var(--card)}
.so-channel{padding:12px 14px;border-bottom:1px dashed var(--border)}
.so-channel:last-child{border-bottom:0}
.so-channel__lab{display:flex;align-items:center;gap:8px;margin-bottom:9px}
.so-badge{font-size:.72rem;font-weight:800;letter-spacing:.03em;padding:3px 10px;border-radius:7px}
.so-badge--objective{background:#e0f2fe;color:#075985}
.so-badge--retour{background:#ede9fe;color:#5b21b6}
.so-when{font-size:.73rem;color:var(--muted)}
.so-voices{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media(max-width:640px){.so-voices{grid-template-columns:1fr}}
.so-voice{position:relative;border:1px solid var(--border);border-radius:10px;padding:10px 11px;background:var(--card)}
.so-voice--athlete{border-color:var(--so-swim-br);background:linear-gradient(180deg,var(--so-swim-bg),var(--card))}
.so-voice--coach{border-color:var(--so-coach-br);background:linear-gradient(180deg,var(--so-coach-bg),var(--card))}
.so-voice__head{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.so-av{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font-size:.7rem;font-weight:800;color:#fff;flex:0 0 24px}
.so-av--athlete{background:linear-gradient(135deg,var(--so-swim),var(--hub-aqua,#29c4d8))}
.so-av--coach{background:linear-gradient(135deg,var(--so-coach),#9333ea)}
.so-who{font-size:.82rem;font-weight:800;color:var(--text)}
.so-who small{display:block;font-weight:600;color:var(--muted);font-size:.68rem}
.so-voice__read{font-size:.9rem;color:var(--text);white-space:pre-line}
.so-voice__empty{color:var(--muted);font-style:italic}
.so-voice__empty-self{color:var(--muted)}
.so-field{display:none;width:100%;border:1px solid var(--border);border-radius:8px;padding:8px 10px;font:inherit;font-size:.9rem;color:var(--text);background:var(--card);resize:vertical;min-height:60px;margin-top:2px}
.so-field:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px rgba(15,127,209,.15)}
/* Bascule lecture <-> edition (les 2 etats rendus, CSS show/hide). */
.so-block.is-editing .so-voice.is-editable .so-voice__read{display:none}
.so-block.is-editing .so-voice.is-editable .so-field{display:block}
.so-block__foot{display:flex;justify-content:flex-end;align-items:center;gap:7px;padding:9px 12px;border-top:1px dashed var(--border);background:var(--bg)}
.so-foot-edit{display:none;gap:7px}
.so-block.is-editing .so-foot-read{display:none}
.so-block.is-editing .so-foot-edit{display:inline-flex}
/* modale coach REUTILISABLE « tous mes nageurs » (liste -> fiche -> precedent) */
.so-objmodal{z-index:2200} /* au-dessus de la modale de cycle (1090) */
.so-modal-card{max-width:min(760px,96vw);width:100%;padding:0}
.so-modal__head{display:flex;align-items:center;gap:10px;padding:13px 18px;border-bottom:1px solid var(--border)}
.so-modal__head [data-so-modal-title]{flex:1;font-size:1rem}
.so-modal__back{flex:0 0 auto}
.so-modal__body{padding:14px 16px;background:var(--bg);max-height:74vh;overflow:auto}
/* lignes nageurs cliquables (pas d'accordeon) */
.so-rows{display:flex;flex-direction:column;gap:8px}
.so-row{display:flex;align-items:center;gap:11px;width:100%;padding:11px 13px;background:var(--card);border:1px solid var(--border);border-radius:11px;cursor:pointer;text-align:left;font:inherit;transition:.12s}
.so-row:hover{border-color:var(--primary);background:var(--sc-rowhover,rgba(148,163,184,.12));box-shadow:var(--shadow-sm,0 6px 16px rgba(15,23,42,.06))}
.so-row__main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.so-row__name{font-weight:800;font-size:.92rem;color:var(--text)}
.so-row__flags{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.so-tag{font-size:.62rem;font-weight:800;color:var(--muted);background:var(--bg);border:1px solid var(--border);border-radius:99px;padding:1px 7px;margin-left:2px}
.so-flag{font-size:.66rem;font-weight:800;border-radius:99px;padding:2px 8px;border:1px solid transparent}
.so-flag--ok{background:#dcfce7;color:#15803d;border-color:#86efac}
.so-flag--todo{background:var(--bg);color:var(--muted);border-color:var(--border)}
.so-flag--wait{background:#fef3c7;color:#a16207;border-color:#fcd34d}
.so-chev{color:var(--muted);font-size:1.1rem;flex:0 0 auto}
/* carnet « Mes objectifs » (nageur) + onglet Objectifs (coach) : liste de cibles cliquables */
.so-carnet__filters{display:inline-flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.so-carnet__filters button{border:1px solid var(--border);background:var(--card);color:var(--muted);font-weight:700;font-size:.8rem;border-radius:9px;padding:6px 12px;cursor:pointer}
.so-carnet__filters button.is-on{background:linear-gradient(135deg,var(--primary),var(--primary-2));color:#fff;border-color:transparent}
.so-carnet__list{display:flex;flex-direction:column;gap:7px}
.so-crow{display:flex;align-items:center;gap:11px;width:100%;padding:10px 13px;background:var(--card);border:1px solid var(--border);border-radius:11px;cursor:pointer;text-align:left;font:inherit;transition:.12s}
.so-crow:hover{border-color:var(--primary);background:var(--sc-rowhover,rgba(148,163,184,.12));box-shadow:var(--shadow-sm,0 6px 16px rgba(15,23,42,.06))}
.so-crow__lvl{flex:0 0 auto;font-size:.62rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:var(--bg);border:1px solid var(--border);border-radius:7px;padding:3px 8px;min-width:62px;text-align:center}
.so-crow__main{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.so-crow__name{font-weight:800;font-size:.9rem;color:var(--text)}
.so-crow__dates{font-size:.74rem;color:var(--muted)}
.so-crow__flags{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.so-flag--coach{background:var(--so-coach-bg);color:var(--so-coach);border-color:var(--so-coach-br)}
/* LU / PAS-ENCORE-LU : mise en evidence du "nouveau" (voix de l'autre partie non vue) */
.so-new-badge{margin-left:auto;font-size:.62rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:#fff;background:#dc2626;border-radius:99px;padding:2px 8px;flex:0 0 auto}
.so-seen-btn{font:inherit;font-size:.62rem;font-weight:800;letter-spacing:.03em;text-transform:uppercase;color:#b91c1c;background:transparent;border:1px solid #fca5a5;border-radius:99px;padding:2px 8px;cursor:pointer;flex:0 0 auto;line-height:1.2}
.so-seen-btn:hover{background:#fee2e2}
.so-voice.is-new{box-shadow:0 0 0 2px #fca5a5}
.so-voice.is-new .so-voice__read{font-weight:600}
.so-flag--new{background:#fee2e2;color:#b91c1c;border-color:#fca5a5}
.so-crow.is-new,.so-row.is-new{border-left:3px solid #dc2626}
/* pyramide (drill-down) : fil d'Ariane + enfants d'un noeud */
.so-modal__head [data-so-modal-title]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.so-node-children{margin-top:14px;border-top:1px dashed var(--border);padding-top:12px}
.so-node-children__lbl{margin:0 0 8px;text-transform:uppercase;letter-spacing:.05em;font-weight:800;font-size:.7rem}
/* entree discrete sur la frise (ne masque pas la frise) */
/* Chantier A (ajust. Simon) — objectifs + boutons Créneaux/Périodes + repère semaine sur UNE ligne. */
.so-frise-entry{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 10px 4px 0;vertical-align:middle}
.frise-season-marker{display:inline-block;vertical-align:middle;margin:6px 0 4px}
/* tuile capacite : sous-panneau des niveaux suivis */
.cap-sub-lbl{margin:.2rem 0 .3rem;font-weight:700;font-size:.78rem;color:var(--muted)}
.cap-so-all{display:inline-flex;align-items:center;gap:5px;font-size:.82rem;font-weight:700;color:var(--text);cursor:pointer;margin-bottom:5px}
.cap-so-levels{display:flex;flex-wrap:wrap;gap:6px 14px}
.cap-so-levels label{display:inline-flex;align-items:center;gap:5px;font-size:.82rem;color:var(--text);cursor:pointer}
/* Lot 3 — panneau "seances impactees" dans la modale periode */
.per-impacted{border:1px solid #fde68a;background:#fffbeb;border-radius:11px;padding:11px 12px;display:flex;flex-direction:column;gap:7px}
html[data-theme="dark"] .per-impacted{background:#2a2206;border-color:#7c5c12}
.per-impacted__warn{font-size:12.5px;color:var(--text)}
.per-impacted__all{font-size:12px;font-weight:700;color:var(--muted);display:inline-flex;align-items:center;gap:7px;cursor:pointer}
.per-impacted__list{display:flex;flex-direction:column;gap:6px}
.per-impacted__row{display:flex;gap:9px;align-items:baseline;border:1px solid var(--border);background:var(--card);border-radius:9px;padding:7px 10px;cursor:pointer;font-size:12.5px}
.per-impacted__row b{color:var(--primary-2);white-space:nowrap}
.per-impacted__att{color:#b45309;font-weight:700;font-size:11.5px}
html[data-theme="dark"] .per-impacted__att{color:#fbbf24}
/* ============================================================= */
/* P5 — Menu du "+" d'un creneau libre + modale "depuis un modele" */
/* ============================================================= */
.frise-pill-menu{position:fixed;z-index:1200;background:var(--card);border:1px solid var(--border);
  border-radius:11px;box-shadow:var(--shadow,0 14px 36px rgba(7,29,53,.16));padding:5px;
  display:flex;flex-direction:column;gap:2px;min-width:188px}
.frise-pill-menu__item{display:flex;align-items:center;gap:8px;width:100%;text-align:left;
  border:0;background:transparent;color:var(--text);font:inherit;font-weight:600;font-size:13px;
  border-radius:8px;padding:8px 10px;cursor:pointer}
.frise-pill-menu__item:hover{background:rgba(15,116,216,.10);color:var(--primary-2)}
.frise-pill-menu__sep{height:1px;background:var(--border);margin:3px 4px}
.frise-pill-menu__item--danger{color:#b13b37}
.frise-pill-menu__item--danger:hover{background:rgba(217,83,79,.12);color:#9b302c}
/* [hidden] doit l'emporter sur le display:flex du menu/des items (sinon closeMenu() et le
   masquage des items selon le statut n'ont aucun effet visuel). Cf meme correctif .cycle-modal. */
.frise-pill-menu[hidden],
.frise-pill-menu__item[hidden],
.frise-pill-menu__sep[hidden]{display:none}
#friseSlotExcModal [hidden]{display:none}
.model-picker{max-width:560px;width:100%}
.model-picker__search{display:block;margin:0 0 .6rem}
.model-picker__search input{width:100%;box-sizing:border-box;border:1px solid var(--border);
  border-radius:9px;padding:9px 11px;font:inherit;background:var(--card);color:var(--text)}
.model-picker__list{display:flex;flex-direction:column;gap:6px;max-height:46vh;overflow:auto;
  padding-right:2px}
.model-picker__row{display:grid;grid-template-columns:auto 1fr auto;align-items:baseline;gap:10px;
  width:100%;text-align:left;border:1px solid var(--border);background:var(--card);color:var(--text);
  border-radius:10px;padding:9px 12px;cursor:pointer;font:inherit}
.model-picker__row:hover{border-color:var(--primary-2);background:rgba(15,116,216,.06)}
.model-picker__row:disabled{opacity:.55;cursor:default}
.model-picker__star{grid-column:1;color:var(--warn,#f59e0b);font-size:13px;line-height:1}
.model-picker__title{grid-column:2;font-weight:700;font-size:13.5px}
.model-picker__meta{grid-column:3;color:var(--muted);font-size:11.5px;white-space:nowrap}
.model-picker__hint{margin:.7rem 0 0;color:var(--muted)}
@media(max-width:600px){.model-picker__row{grid-template-columns:auto 1fr}.model-picker__meta{grid-column:2;white-space:normal}}

/* ====================================================================
   A1 — Refonte graphique « Compte » (settings/account.php)
   ==================================================================== */
.section-label{font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:800;margin:26px 4px 10px}
/* Crayon discret « Modifier » (gagne de la place vs un bouton plein). */
.edit-pencil{background:none;border:0;box-shadow:none;color:var(--muted);cursor:pointer;font-size:1.05rem;line-height:1;padding:2px 6px;border-radius:8px;transition:.15s}
.edit-pencil:hover{color:var(--hub-blue,#0f7fd1);background:rgba(15,127,209,.08)}

/* Identité : fiche en lecture <-> formulaire d'édition */
.identity-card .id-head{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px}
.identity-card .id-head h2{margin:0}
.identity-card[data-mode="view"] .id-edit{display:none}
.identity-card[data-mode="edit"] .id-view{display:none}
.identity-card[data-mode="edit"] #idEditBtn{visibility:hidden}
.identity-card[data-mode="edit"] .edit-pencil{visibility:hidden}
.id-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 26px;margin:0}
.id-grid>div{display:flex;flex-direction:column;gap:2px;padding:11px 0;border-bottom:1px solid var(--border)}
.id-grid>div:nth-last-child(-n+2){border-bottom:0}
.id-grid dt{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:800}
.id-grid dd{margin:0;font-size:.98rem;font-weight:650}

/* Réglages : 3 cartes-résumé compactes (Sécurité / Préférences / Notifications) */
.settings-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.setting-card{position:relative;display:flex;flex-direction:column;gap:13px;min-height:184px;padding:18px;
  background:var(--card);border:1px solid var(--hub-line,var(--border));border-radius:18px;cursor:pointer;text-decoration:none;color:inherit;
  box-shadow:0 18px 50px rgba(7,29,53,.05);transition:transform .15s,box-shadow .15s,border-color .15s}
.setting-card:hover{transform:translateY(-3px);box-shadow:0 24px 60px rgba(7,29,53,.12);border-color:var(--accent,var(--hub-blue))}
.setting-card:focus-visible{outline:2px solid var(--accent,var(--hub-blue));outline-offset:2px}
.setting-card .setting-ico{width:40px;height:40px;border-radius:12px;display:grid;place-items:center;font-size:1.25rem;
  background:var(--accent-soft,rgba(15,127,209,.12));color:var(--accent,var(--hub-blue))}
.setting-card h4{margin:0;font-size:1rem}
.setting-card .setting-status{display:flex;flex-direction:column;gap:7px;font-size:.85rem;flex:1}
.setting-card .setting-status .ln{display:flex;justify-content:space-between;align-items:center;gap:8px;color:var(--muted)}
.setting-card .setting-status .ln b{color:var(--text);font-weight:700;text-align:right}
.setting-card .setting-go{display:flex;justify-content:flex-end}
.setting-card .setting-go .btn{box-shadow:none}
.setting-card.sec{--accent:#0f7fd1;--accent-soft:rgba(15,127,209,.12)}
.setting-card.pref{--accent:#7c3aed;--accent-soft:rgba(124,58,237,.14)}
.setting-card.notif{--accent:#0891b2;--accent-soft:rgba(8,145,178,.14)}
@media(max-width:820px){
  .settings-grid{grid-template-columns:1fr}
  .id-grid{grid-template-columns:1fr}
  .id-grid>div{border-bottom:1px solid var(--border)}
  .id-grid>div:last-child{border-bottom:0}
}

/* ===========================================================================
   VITRINE A6 (lot 2) — chrome de la barre de navigation PUBLIQUE + badges de
   source / attribution d'un contenu partagé.
   Ici et pas dans `vitrine.css` parce que :
   - la barre de navigation vit dans `layouts/public.php`, donc sur TOUTES les
     pages publiques (y compris celles qui ne chargent pas vitrine.css) ;
   - `.srcbadge` / `.vauthor` habillent les vignettes de la bibliothèque, qui
     sont réutilisées en connecté comme en public.
   =========================================================================== */
/* --- barre de destinations de la vitrine (Accueil / Bibliothèque / ...) --- */
.navswitch{display:flex;gap:4px;align-items:center}
.navswitch a{font-family:inherit;font-weight:700;font-size:.93rem;color:var(--muted,#64748b);
  background:transparent;border:0;border-radius:999px;padding:8px 13px;cursor:pointer;text-decoration:none}
.navswitch a:hover{background:rgba(15,127,209,.08);color:var(--hub-blue,#0f7fd1)}
.navswitch a.on{background:linear-gradient(135deg,var(--hub-blue,#0f7fd1),var(--hub-aqua,#29c4d8));color:#fff}
.nav-tools{display:flex;align-items:center;gap:8px;margin-left:auto}
@media(max-width:980px){
  /* Mobile : la barre de destinations redevient une grille pleine largeur, sinon
     la 4e destination sort de l'écran et devient inatteignable au doigt.
     Le bandeau ne colle plus (il défile) pour rendre la hauteur à la page. */
  .public-header{position:static}
  .public-nav{width:100%;flex-direction:column;align-items:stretch}
  .navswitch{display:flex;flex-wrap:wrap;width:100%;gap:5px;background:var(--card,#fff);
    border:1px solid var(--border,#e2e8f0);border-radius:13px;padding:5px;box-shadow:var(--shadow,0 8px 22px rgba(7,29,53,.08))}
  .navswitch a{flex:1 1 calc(50% - 5px);min-width:0;white-space:nowrap;min-height:44px;font-size:.88rem;
    padding:9px 8px;display:inline-flex;align-items:center;justify-content:center}
  .nav-tools{width:100%;gap:9px}
  .nav-tools .btn{flex:1;min-height:46px;display:inline-flex;align-items:center;justify-content:center}
}
/* --- badge de SOURCE d'un contenu de la bibliothèque --- */
.srcbadge{display:inline-flex;align-items:center;gap:5px;font-size:.68rem;font-weight:800;padding:4px 9px;border-radius:999px;white-space:nowrap}
.srcbadge.official{color:#b07a16;background:#fef6e3}
.srcbadge.community{color:#0e7490;background:#e0f5fa}
/* dans une vignette en colonne, le badge ne doit pas s'étirer en barre */
.session-vignette>.srcbadge,.season-vignette>.srcbadge,.module-vignette>.srcbadge{align-self:flex-start;width:fit-content;margin-bottom:2px}
/* --- ATTRIBUTION : qui a partagé ce contenu (nom + club, décision Simon) --- */
.vauthor{display:flex;align-items:center;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}
.vava{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:800;font-size:.72rem;flex:none;background:linear-gradient(135deg,var(--hub-blue,#0f7fd1),var(--hub-aqua,#29c4d8))}
.vauthor b{font-size:.8rem}
.vauthor small{display:block;font-size:.71rem;color:var(--muted);font-weight:600}
.vauthor .vsrc{margin-left:auto}
@media(max-width:680px){
  .vauthor{flex-wrap:wrap}
  .vauthor>div{min-width:0}
  .vauthor small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .vauthor .vsrc{margin-left:0}
}

/* ---------------------------------------------------------------------------
   VITRINE A6 (lot 2-bis) — MODE EMBARQUÉ (`&embed=1`).
   Une page publique rendue DANS un cadre de l'« Aperçu en vrai » : le gabarit
   ne rend ni en-tête, ni barre de navigation, ni pied. Il reste à retirer la
   respiration prévue pour une page entière, sinon le contenu démarre trop bas
   dans un cadre déjà encadré.
   --------------------------------------------------------------------------- */
body.public-embed{background:var(--card,#fff)}
body.public-embed .public-main,
body.public-embed .hub-public-main{padding-top:14px;padding-bottom:18px;width:min(1180px,calc(100% - 24px))}
/* l'aperçu est déjà une fenêtre : pas besoin d'une 2e ombre portée plein cadre */
body.public-embed .page-head{margin-top:0}

/* ---------------------------------------------------------------------------
   VITRINE A6 (lot 3, dette E3) — enrichissement LÉGER des cartes de liste
   publiques. Volontairement pas de barre 4D ni de temps de départ ici : une
   carte de liste doit rester scannable (décision Simon). Ces deux briques
   restent sur la page de la séance.
   --------------------------------------------------------------------------- */
/* tag « ×N variantes » : des séries dont les tours diffèrent entre eux */
.vtag-variants{display:inline-flex;align-items:center;gap:3px;font-weight:800;font-size:11px;
  color:var(--primary,#0f7fd1);background:rgba(15,127,209,.09);border-radius:999px;padding:1px 8px;cursor:help}
/* chips de zones en version SLIM : la carte porte les grosses zones, pas tout le détail */
.module-metric-chips--slim{gap:3px 5px;margin-top:2px}
.module-metric-chips--slim .module-metric-chip{padding:1px 7px;font-size:10px;
  border-color:var(--border);background:rgba(148,163,184,.07)}
/* la carte reste lisible même chargée : l'attribution se colle en bas */
.session-vignette .vauthor,.module-vignette .vauthor,.season-vignette .vauthor{margin-top:auto}

/* ===========================================================================
   VITRINE A6 (lot 3, F) — RESPONSIVE DES PAGES PUBLIQUES (360 / 375 / 390 px).
   La majorite des visiteurs arrivent d'abord sur telephone. Regles SCOPEES a
   `body.public-body` : l'application connectee n'est pas touchee.

   Principe : la PAGE ne defile jamais horizontalement. Ce qui est large par
   nature (frise, matrice de presences, agenda) defile a l'INTERIEUR de son
   propre cadre, qui a deja son `overflow-x:auto`.
   =========================================================================== */
@media(max-width:680px){
  /* --- CAUSE N°1 du debordement : une grille en `1fr` vaut `minmax(auto,1fr)`,
     donc la largeur MINIMALE du contenu (ici le selecteur de saison, dont le
     libelle ne se coupe pas) impose sa taille a la colonne et la grille sort du
     cadre. `minmax(0,1fr)` autorise la colonne a se resserrer ; les enfants ont
     deja `max-width:100%` et leurs libelles savent s'abreger. */
  body.public-body .form-grid,
  body.public-body .grid.cols-2,
  body.public-body .split-section{grid-template-columns:minmax(0,1fr)}
  /* le selecteur de saison : il peut se resserrer et abreger son sous-titre */
  body.public-body .snav{min-width:0}
  body.public-body .snav-picker{min-width:0;max-width:100%}
  body.public-body .snav-btn{min-width:0;width:100%;min-height:42px}
  body.public-body .snav-sub{max-width:none;min-width:0;flex:1 1 auto}
  body.public-body .snav-pop{max-width:calc(100vw - 28px)}
  /* cibles tactiles confortables sur les commandes des pages publiques */
  body.public-body main .btn,
  body.public-body main .btn.small,
  body.public-body main .btn.ghost.small{min-height:40px;display:inline-flex;align-items:center;justify-content:center}
  /* ... sauf les commandes fines d'un reglage (zoom de la frise) : on les elargit
     sans les etirer sur toute la ligne */
  body.public-body .frise-zoom{flex-wrap:wrap;gap:6px}
  body.public-body .frise-zoom .btn{min-width:44px;min-height:40px}
  /* les blocs larges defilent en INTERNE, jamais la page */
  body.public-body .timeline-wrap,
  body.public-body .attendance-matrix-wrap,
  body.public-body .table-wrap,
  body.public-body .edt-scroll,
  body.public-body .week-days{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
  /* une carte ne pousse jamais la page : son contenu long s'abrege ou defile */
  body.public-body .card,
  body.public-body .hub-card{min-width:0}
  body.public-body .page-head{display:block}
  body.public-body .page-head .actions-line,
  body.public-body .page-head .top-actions{margin-top:10px;justify-content:flex-start;flex-wrap:wrap}
  /* garde-fou de derniere ligne : un mot/URL interminable ne peut pas elargir la page */
  body.public-body h1,body.public-body h2,body.public-body h3{overflow-wrap:anywhere}
}
@media(max-width:680px){
  /* items d'un menu deroulant (exporter…) : confortables au doigt eux aussi */
  body.public-body .exp-menu__pop button,
  body.public-body .exp-menu__pop a{min-height:40px}
}

/* ---------------------------------------------------------------------------
   LOT 3 (F) — FICHE PUBLIQUE DU NAGEUR sur telephone : override CSS SEULEMENT.
   ⚠️ La fiche (`athletes/season_profile.php`) est une surface INTERDITE a ce lot :
   on ne l'edite pas. Ces regles vivent donc ICI, et sont scopees `body.public-body`
   -> la fiche vue par un coach connecte n'est pas touchee.

   CONSTAT MESURE a 360 px (le brief la donnait deja bonne en mobile -- elle ne
   l'etait pas) :
     - la page debordait de 27 px : le basculeur « Allures de course / Allures
       d'ancres » est un `inline-flex` sans retour a la ligne, avec des libelles en
       `nowrap` -> il poussait la page ;
     - ses basculeurs faisaient 21 a 30 px de haut, sous la cible du doigt.
   A REMONTER : le correctif DURABLE appartient a la fiche (chantier separe).
   --------------------------------------------------------------------------- */
@media(max-width:680px){
  /* les basculeurs passent a la ligne au lieu de pousser la page */
  /* l'en-tete de carte (titre + basculeur) passe a la ligne : sinon le basculeur,
     item flex non-retrecissable d'une rangee `nowrap`, sort du cadre quel que soit
     son propre reglage de retour a la ligne. */
  body.public-body .sp .sp-card-h,
  body.public-body .sp .sp-ma-evo-h{flex-wrap:wrap;row-gap:8px}
  body.public-body .sp .sp-seg,
  body.public-body .sp .anch-seg,
  body.public-body .tpo-poolsel{flex-wrap:wrap;max-width:100%;min-width:0;border-radius:14px}
  /* cibles confortables au doigt, sans changer les couleurs ni l'etat actif */
  body.public-body .sp .sp-seg button,
  body.public-body .sp .anch-st,
  body.public-body .sp .anch-pl,
  body.public-body .tpo-poolsel button{min-height:38px;padding-top:8px;padding-bottom:8px;border-radius:10px}
}

/* ---------------------------------------------------------------------------
   LOT 3 (F) — OUTIL « frise imbriquee » (recap-cross) et outil de SUIVI sur
   telephone. Ces deux briques sont PARTAGEES avec l'application connectee :
   les regles sont donc scopees `body.public-body`, l'ecran du coach ne bouge pas.
   Leurs commandes tombaient a 13-26 px de haut, sous la cible du doigt.
   --------------------------------------------------------------------------- */
@media(max-width:680px){
  body.public-body .rxseg{flex-wrap:wrap}
  body.public-body .rxseg button{min-height:38px;padding:8px 12px}
  body.public-body .rxzoomctl button{width:36px;height:36px}
  /* Fleches de reordonnancement des axes (paire ▲/▼ empilee, 18x13 chacune).
     ⚠️ NE PAS elargir leur zone tactile par un ::after debordant : les deux
     fleches sont a 2 px l'une de l'autre, les zones se CHEVAUCHENT et un appui
     visant ▲ tombe sur ▼ (mesure : un appui 8 px sous le centre de ▲ activait ▼).
     C'est pire que des cibles petites. On les agrandit donc VRAIMENT, chacune
     chez elle : 26x20 -> la paire fait 42 px de haut, sans recouvrement. */
  body.public-body .rxrow__mv button{width:26px;height:20px;font-size:10px}
}
@media(max-width:680px){
  /* commandes de l'outil de suivi (partage avec l'appli connectee -> scope public) */
  body.public-body .q4-gear,
  body.public-body .q4-seg button,
  body.public-body .view-toggle .vt-btn,
  body.public-body .q4-sel select{min-height:40px}
  body.public-body .q4-seg{flex-wrap:wrap}
  body.public-body .rxzoomctl button{width:38px;height:38px}
}

/* === LOT ADMIN (30/07/2026) — barre « Actions definitives », en CLASSE ============================
   Simon a capture le bouton de suppression COUPE au bas de la fiche. Mesure faite sur la surface
   servie (fiche sportif, page rendue), a 320 / 375 / 960 / 1280 px : le bouton n'est PAS coupe et
   ne rencontre PAS le pied de page a ces largeurs — la capture n'est donc pas reproduite ici, et
   c'est dit tel quel dans le debrief.
   ⚠️ Ce qui EST etabli, lui : la barre etait entierement en styles en ligne, et son formulaire de
   suppression (champ de confirmation + bouton) etait un flex SANS retour a la ligne, sans
   `min-width:0`, sans `max-width:100%`. C'est le seul chemin de debordement qu'on ait pu etablir :
   sous ~236 px de place utile, le bouton sort de la carte, et rien ne le rattrape.
   La barre devient donc une classe, partagee par la fiche coach et la fiche admin : le libelle peut
   retrecir, le groupe d'actions passe a la ligne, et le formulaire de suppression aussi. */
.danger-actions-bar{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;
  background:rgba(220,38,38,.05);border:1px solid rgba(220,38,38,.25);border-radius:12px;padding:12px 14px;
  max-width:100%}
.danger-actions-bar>span{min-width:0;flex:0 1 auto}
.danger-actions-bar__group{display:flex;gap:8px;flex-wrap:wrap;align-items:center;min-width:0;max-width:100%}
.danger-actions-bar__group form{margin:0;display:flex;gap:6px;align-items:center;flex-wrap:wrap;min-width:0;max-width:100%}
.danger-actions-bar__group input[type=text],
.danger-actions-bar__group input:not([type]){padding:6px 8px;border:1px solid var(--border);border-radius:8px;
  width:130px;max-width:100%;flex:0 1 130px;min-width:0}
