: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)}
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{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;box-shadow:var(--shadow)}.top-actions{display:flex;gap:8px;align-items:center}.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:#e0f2fe;color:#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(92px,1fr));gap:6px;min-width:max(980px, calc(var(--weeks) * 98px + 120px))}.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:repeat(var(--weeks), minmax(92px,1fr));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 rgba(15,23,42,.12)}.macro-band{background:#bfdbfe;color:#082f57}.meso-band{background:#bbf7d0;color:#14532d}.sequence-band{background:#fed7aa;color:#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}
@media(max-width:900px){.page-head{display:block}.week-days{grid-template-columns:1fr}.timeline{grid-template-columns:90px repeat(var(--weeks), 86px);min-width:calc(var(--weeks) * 92px + 90px)}.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 rgba(15,23,42,.12)}
.attendance-context-row .context-band-cell.macro-band{background:#bfdbfe;color:#082f57}
.attendance-context-row .context-band-cell.meso-band{background:#bbf7d0;color:#14532d}
.attendance-context-row .context-band-cell.sequence-band{background:#fed7aa;color:#7c2d12}
.attendance-context-row .context-band-cell.week-band{background:#e2e8f0;color:#0f172a}
html[data-theme="dark"] .attendance-context-row .context-band-cell.macro-band{background:#1e3a5f;color:#dbeafe}
html[data-theme="dark"] .attendance-context-row .context-band-cell.meso-band{background:#14532d;color:#bbf7d0}
html[data-theme="dark"] .attendance-context-row .context-band-cell.sequence-band{background:#7c2d12;color:#fed7aa}
html[data-theme="dark"] .attendance-context-row .context-band-cell.week-band{background:#334155;color:#e2e8f0}
.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 */
.month-band{background:#e2e8f0;color:#0f172a}
.competition-band{background:#fce7f3;color:#831843;border-color:#f9a8d4}
html[data-theme="dark"] .month-band{background:#1e293b;color:#e5edf7}
html[data-theme="dark"] .competition-band{background:#831843;color:#fce7f3}
.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-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}
.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)}.dryland-row{display:grid;grid-template-columns:repeat(var(--weeks),minmax(110px,1fr));gap:.25rem}.dryland-cell{font-size:.75rem;background:var(--surface-2);border:1px solid var(--border);border-radius:.5rem;padding:.35rem;text-align:center;min-height:2rem}.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}.dryland-summary .table-wrap{margin-top:.5rem}.dryland-row{grid-template-columns:repeat(var(--weeks),minmax(92px,1fr))}.dryland-cell{min-height:64px;display:flex;align-items:center;justify-content:center;line-height:1.2}.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))}.dryland-actions-top .hidden-panel{margin-top:1rem}.dryland-two-cols{display:grid;grid-template-columns:1fr 1fr;gap:1rem;align-items:start}.dryland-athlete-checks{max-height:260px;overflow:auto;border:1px solid var(--border);border-radius:1rem;padding:.75rem;background:var(--card)}.add-dryland-type-form{margin-top:1rem}.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}.dryland-two-cols{grid-template-columns:1fr}.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}.dryland-two-cols td .actions-line{gap:.35rem}.dryland-two-cols td form{display:inline-flex}.dryland-two-cols .btn.small{padding:.45rem .6rem}.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}.dryland-two-cols{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; }
.dryland-week-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:.8rem; }
.dryland-week-card { border:1px solid var(--border, #e5e7eb); border-radius:16px; padding:.85rem; background:#fff; display:flex; flex-direction:column; gap:.4rem; }
.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) {
  .dryland-week-grid { grid-template-columns:1fr; }
  .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; }
.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 nageur démo + colonne prépa physique */
.athlete-kpi-grid .hub-feature-card{min-height:140px}
.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}

/* 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-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:rgba(148,163,184,.04)}
.session-module__head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:6px}
.session-module__title{margin:0;font-size:1.05rem}
.session-module__volume{font-weight:800;font-size:.9rem;white-space:nowrap;color:var(--primary)}
.session-module__type-form{margin:0 0 6px}
.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 0 6px;font-size:.75rem;font-weight:800;text-transform:uppercase;letter-spacing:.04em;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}

/* 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(7,minmax(88px,1fr));grid-auto-rows:minmax(64px,auto);gap:6px;min-width:max(900px,calc(132px + 7 * 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:14px}
.planning-frise .timeline-week-label span{font-size:12px;color:var(--muted)}
.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}
.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)}
@media(max-width:900px){.planning-frise .timeline--rows{grid-template-columns:108px repeat(7,minmax(72px,1fr));min-width:max(760px,calc(108px + 7 * 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)}
.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)}
.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)}
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}}
