PageSourceSearch

https://coachfrancois-calendrier-cnbv.pages.dev/

html coachfrancois-calendrier-cnbv.pages.dev collected 2026-10-03 06:38:57 UTC 438,901 bytes, 1,768 lines download raw bytes

1<!doctype html><html lang="fr"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Calendrier sportif CNBV 2026-2027</title><style>
2*{box-sizing:border-box} body{font-family:Arial,Helvetica,sans-serif;margin:0;padding:12px;color:#12244f;background:#f1f5f9}
3h1{font-size:18px;margin:0 0 4px;color:#0b3d2e} .sub{font-size:12px;color:#475569;margin-bottom:8px}
4#printhdr{display:none}
5.bar{position:sticky;top:0;background:#f1f5f9;padding:8px 0;z-index:10;display:flex;flex-wrap:wrap;gap:6px;align-items:center;border-bottom:1px solid #cbd5e1;margin-bottom:8px}
6.bar button{border:1px solid #cbd5e1;background:#fff;color:#1e293b;border-radius:999px;padding:7px 13px;font-size:13px;font-weight:700;cursor:pointer}
7.bar button.active{background:#0b3d2e;color:#fff;border-color:#0b3d2e}
8.bar select,.bar input{border:1px solid #cbd5e1;border-radius:999px;padding:7px 10px;font-size:13px;font-weight:700}
9.grp{display:flex;gap:6px;align-items:center;background:#fff;border:1px solid #cbd5e1;border-radius:999px;padding:2px 8px}
10.grp.on{background:#fef3c7;border-color:#f59e0b}
11.tool{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap}
12table{width:100%;border-collapse:collapse;font-size:12px;background:#fff} th,td{border:1px solid #b8c2cc;padding:4px 6px;vertical-align:middle}
13th{background:#2E75B6;color:#fff;font-size:10px;text-align:center} th small{font-weight:400;font-size:9px}
14td.l{text-align:left} td.c,td.x{text-align:center} .x .on{color:#0F6E56;font-weight:800}
15tr.mois td{background:#C00000;color:#fff;font-weight:800} tr.vac td{background:#FFF2CC;color:#7F6000;font-style:italic;font-weight:700;text-align:center;font-size:11px}
16tr.janhdr td{background:#BDD7EE;color:#1F4E79;font-weight:700;font-size:10px;text-align:center}
17tr.today>td{outline:2px solid #f59e0b}@media print{tr.today>td{outline:none}}
18.car{color:#0b3d2e;font-weight:800;display:inline-block;width:12px}
19.badge{font-size:9px;font-weight:800;border-radius:5px;padding:1px 5px;white-space:nowrap;vertical-align:middle}
20.bdep{background:#0F6E56;color:#fff} .blig{background:#1d4ed8;color:#fff} .bnat{background:#7c3aed;color:#fff}
21.home{font-size:11px} .catsum{display:none;color:#475569;font-weight:700;font-size:11px;margin-left:4px}
22.ics{border:1px solid #cbd5e1;background:#fff;border-radius:6px;padding:1px 5px;font-size:11px;cursor:pointer;margin-left:2px}
23.progbox{background:#f8fafc;border-left:4px solid #0b3d2e;padding:8px 12px;font-size:12px;line-height:1.7;color:#1e293b}
24.legend{font-size:11px;color:#334155;margin-top:10px;line-height:1.8} .sw{display:inline-block;width:14px;height:14px;border:1px solid #999;vertical-align:middle;margin-right:3px}
25.hint{font-size:12px;color:#0b3d2e;margin:4px 0;font-weight:700;min-height:1.2em}
26@media print{@page{size:A4 landscape;margin:7mm} .bar,.tool,.noprint{display:none !important} body{background:#fff;padding:0} h1{font-size:15px} #printhdr{display:block;font-size:14px;font-weight:800;color:#0b3d2e;margin:2px 0 8px} table{font-size:9.5px} th{font-size:8.5px} th small{font-size:7.5px} .badge{font-size:8px} table,tr,td,th{page-break-inside:avoid}}
27@media(max-width:640px){
28  th.ct, td.x{display:none}
29  table,tr,td{display:block;width:100%} thead{display:none}
30  tr.ev{border:1px solid #b8c2cc;border-radius:8px;margin-bottom:6px;padding:4px}
31  tr.ev td{border:none;padding:2px 6px}
32  .catsum{display:inline-block}
33  tr.mois td,tr.vac td,tr.janhdr td{display:block;border-radius:6px;margin-bottom:4px}
34  tr.prog td{display:block}
35}
36.lgbw{display:none}@media print{*{-webkit-print-color-adjust:exact;print-color-adjust:exact} body.pbw *{background:#fff !important;color:#000 !important} body.pbw td,body.pbw th{border-color:#000 !important} body.pbw th{font-weight:800;border-bottom:2px solid #000} body.pbw tr.mois td{font-weight:800;text-transform:uppercase;border-top:2px solid #000;border-bottom:2px solid #000} body.pbw tr.janhdr td{font-weight:700;border-bottom:1px solid #000} body.pbw tr.vac td{font-style:italic;text-align:center} body.pbw .badge,body.pbw .bwtag{border:1px solid #000 !important;color:#000 !important;background:#fff !important} body.pbw .lgcolor{display:none} body.pbw .lgbw{display:inline} body.pcolor .lgbw{display:none} .bwtag{border:1px solid #333;border-radius:4px;padding:0 3px;font-size:8px;font-weight:800;margin-right:4px}}.hlogo{display:inline-flex;align-items:center;justify-content:center;min-width:15px;height:15px;background:#e2001a;color:#fff;border-radius:3px;font-size:10px;line-height:1;margin-right:4px;vertical-align:middle;font-weight:800}img.hlogo{background:none;height:20px;width:auto;min-width:0;border-radius:0}@media print{body.pbw .hlogo{background:#fff !important;color:#000 !important;border:1px solid #000} body.pbw img.hlogo{filter:grayscale(1)}}#nlogin-modal{position:fixed;inset:0;background:#0007;display:none;align-items:center;justify-content:center;z-index:1000}#nlogin-modal.on{display:flex}.nl-card{position:relative;background:#fff;border-radius:14px;padding:24px 22px 18px;max-width:360px;width:92%;box-shadow:0 10px 40px #0005;text-align:center}.nl-card h3{margin:2px 0 6px;font-size:18px;color:#0b3d2e}.nl-card p{color:#607089;font-size:13px;margin:0 0 14px;line-height:1.4}.nl-card input{width:100%;padding:11px;border:1px solid #cbd5e1;border-radius:9px;font-size:15px}.nl-btn{background:#0b3d2e;color:#fff;border:none;border-radius:9px;padding:11px 16px;font-weight:700;cursor:pointer;margin-top:12px;font-size:15px;width:100%}.nl-btn.nl-out{background:#b23b3b}
37.hlogo{display:inline-block;vertical-align:-3px;margin:0 2px}
38.coachbox{text-align:left;font-size:14px}
39.coachbox h3{margin:0 0 8px}
40.coachbox .cbsec{border:1px solid #e5e7eb;border-radius:10px;padding:12px;margin:10px 0;background:#fafafa}
41.coachbox .cbsec>b{display:block;margin-bottom:6px;color:#0b3d2e}
42.coachbox input[type=file]{width:100%;font-size:13px}
43.coachbox .cbprev{max-height:190px;overflow:auto;border:1px solid #e5e7eb;border-radius:8px;margin-top:8px;background:#fff;font-size:12px}
44.coachbox .cbprev div{padding:3px 8px;border-bottom:1px solid #f1f5f9}
45.coachbox .cbnew{color:#0a7c2f;font-weight:700}
46.coachbox .cbnote{font-size:12px;color:#64748b;margin-top:6px}
47.coachbox .cbstat{margin-top:8px;font-size:13px;min-height:18px}
48.coachbox .cbstat.ok{color:#0a7c2f}.coachbox .cbstat.err{color:#b23b3b}
49.coachbox .amber{background:#fef3c7;border:1px solid #fde68a;color:#92400e;padding:8px 10px;border-radius:8px;font-size:12px;margin-top:8px}.nl-lnk{display:inline-block;margin:6px 0;color:#0b3d2e;font-weight:700;font-size:13px}.nl-x{position:absolute;top:8px;right:14px;font-size:24px;color:#94a3b8;cursor:pointer;line-height:1}.nl-status{font-size:13px;margin-top:8px;min-height:1.1em;color:#607089}.nl-status.err{color:#c0392b}.qbadge{font-size:9px;font-weight:800;border-radius:5px;padding:1px 6px;margin-left:5px;white-space:nowrap;vertical-align:middle}.qok{background:#0a7c2f;color:#fff}.qaim{background:#f4f4f5;color:#9ca3af;border:1px solid #e5e7eb;font-weight:600}@media print{.qbadge{display:none}}.selbadge{background:#0a7c2f;color:#fff;font-size:9px;font-weight:800;border-radius:5px;padding:1px 6px;margin-left:5px;white-space:nowrap;vertical-align:middle}.selno{background:#f4f4f5;color:#9ca3af;border:1px solid #e5e7eb;font-size:9px;font-weight:600;border-radius:5px;padding:1px 6px;margin-left:5px;white-space:nowrap;vertical-align:middle}@media print{.selno{display:none}}#selbanner{display:none;margin:2px 0 10px;padding:9px 13px;border-radius:9px;background:#eaf7ef;border:1px solid #7bc99a;font-size:13px;font-weight:700;color:#0a7c2f;line-height:1.4}#selbanner.on{display:block}</style></head><body><div id="printhdr"></div><h1 class="noprint">🏊 Calendrier sportif interactif 2026-2027 — CNBV</h1><div class="sub noprint">Filtre par catégorie / année de naissance · clic sur ▸ pour le programme · 📅 agenda · 🎯 sélection · 🏠 domicile.</div><div class="noprint" style="margin:2px 0 10px"><button id="nlogin-btn" onclick="nlOpen()" style="background:#0b3d2e;color:#fff;border:none;font-weight:800;padding:10px 18px;border-radius:999px;font-size:14px;box-shadow:0 2px 6px #0b3d2e33;cursor:pointer">🏊 Espace nageur — me connecter</button></div><div id="nlogin-modal" class="noprint"><div class="nl-card"><span class="nl-x" onclick="nlClose()">×</span><div id="nl-body"></div></div></div><div id="selbanner" class="noprint"></div><div class="bar"><button data-f="all" onclick="flt('all')">Tout</button><button data-f="av" onclick="flt('av')">Avenirs</button><button data-f="benj" onclick="flt('benj')">Benjamins</button><button data-f="jun" onclick="flt('jun')">Juniors et +</button><button data-f="mai" onclick="flt('mai')">Maîtres</button><button data-f="handi" onclick="flt('handi')">Handi</button><button data-f="club" onclick="flt('club')">RDV CNBV</button><button data-f="sel" onclick="fltSel()">🎯 Sélection</button><button data-f="home" onclick="flt('home')">🏠 Domicile</button><button class="fut" onclick="toggleFuture(this)">À venir</button><span class="grp" id="yearg">🎂 <select id="year" onchange="fltYear(this.value)"><option value="">année</option><option value="2022">2022</option><option value="2021">2021</option><option value="2020">2020</option><option value="2019">2019</option><option value="2018">2018</option><option value="2017">2017</option><option value="2016">2016</option><option value="2015">2015</option><option value="2014">2014</option><option value="2013">2013</option><option value="2012">2012</option><option value="2011">2011</option><option value="2010">2010</option><option value="2009">2009</option><option value="2008">2008</option><option value="2007">2007</option><option value="2006">2006</option><option value="2005">2005</option></select></span><span class="grp">🔎 <input id="q" placeholder="rechercher…" oninput="doSearch(this.value)" style="border:none;outline:none;width:110px"></span><span class="grp noprint">👤 <input id="prenom" placeholder="Prénom" oninput="setPrenom(this.value)" style="border:none;outline:none;width:90px"></span><span class="tool"><button class="noprint" onclick="calxOpen()" style="background:#0b6ba8;color:#fff;border-color:#0b6ba8;font-weight:700">📅 Exporter vers Calendrier</button>
49<button class="noprint" onclick="expandAll()">Déplier tout</button><button class="noprint" onclick="collapseAll()">Replier tout</button><button class="noprint" onclick="printColor()" style="background:#0b3d2e;color:#fff;border-color:#0b3d2e">🖨 Couleur</button><button class="noprint" onclick="printBW()" style="background:#334155;color:#fff;border-color:#334155">🖨 N&amp;B</button></span></div><div class="hint" id="cnt"></div><table id="cal"><thead><tr class="hdr"><th>DATES</th><th>Bassin</th><th>DÉSIGNATION</th><th>LIEUX</th><th class="ct">E.N.F<br><small>tous âges</small></th><th class="ct">AVENIRS<br><small>11 ans et -<br>2015 &amp; +</small></th><th class="ct">BENJAMINS<br><small>12-13 ans<br>2013-2014</small></th><th class="ct">JUNIORS ET +<br><small>14 ans et +<br>2012 &amp; -</small></th><th class="ct">MAÎTRES<br><small>25 ans et +<br>2001 &amp; -</small></th><th class="ct">HANDI<br><small>cat. FFH</small></th></tr></thead><tbody><tr class="mois"><td colspan="10">SEPTEMBRE 2026</td></tr><tr class="ev" data-id="1" data-cats="club" data-club="1" data-period="2026" data-date="2026-09-01" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Rentrée du CNBV" data-lieu="BELLEGARDE (ValséO)" data-search="rentrée du cnbv bellegarde (valséo)" style="background:#FCE4D6"><td class="l">Mardi 01 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Rentrée du CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Club</span></td><td class="l">BELLEGARDE (ValséO)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="2" data-cats="club" data-club="1" data-period="2026" data-date="2026-09-02" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Journée de test entrée au CNBV" data-lieu="BELLEGARDE" data-search="journée de test entrée au cnbv bellegarde" style="background:#FCE4D6"><td class="l">Mercredi 02 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Journée de test entrée au CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Club</span></td><td class="l">BELLEGARDE</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="3" data-cats="club" data-club="1" data-period="2026" data-date="2026-09-06" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Journée Portes Ouvertes (JPO) ValséO" data-lieu="BELLEGARDE" data-search="journée portes ouvertes (jpo) valséo bellegarde" style="background:#FCE4D6"><td class="l">Dimanche 06 (matin) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Journée Portes Ouvertes (JPO) ValséO</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Club</span></td><td class="l">BELLEGARDE</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="4" data-cats="club" data-club="1" data-period="2026" data-date="2026-09-26" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Soirée Faluches Jéjé aux berges du Rhône" data-lieu="BELLEGARDE" data-search="soirée faluches jéjé aux berges du rhône bellegarde" style="background:#FCE4D6"><td class="l">Samedi 26 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Soirée Faluches Jéjé aux berges du Rhône</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Club</span></td><td class="l">BELLEGARDE</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="5" data-cats="club" data-club="1" data-period="2026" data-date="2026-09-30" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Journée de test entrée au CNBV" data-lieu="BELLEGARDE" data-search="journée de test entrée au cnbv bellegarde" style="background:#FCE4D6"><td class="l">Mercredi 30 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Journée de test entrée au CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Club</span></td><td class="l">BELLEGARDE</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="mois"><td colspan="10">OCTOBRE 2026</td></tr><tr class="ev" data-id="6" data-cats="enf av" data-club="0" data-period="2026" data-date="2026-10-03" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Regroupement U11 et moins" data-lieu="BELLEGARDE (ValséO)" data-search="regroupement u11 et moins bellegarde (valséo)" style="background:#ffffff"><td class="l">Samedi 03 (matin) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Regroupement U11 et moins</b> <span class="home" title="À Bellegarde / ValséO">🏠</span> <span class="badge bdep">🎯 Sélection</span><span class="catsum">ENF · Av</span></td><td class="l">BELLEGARDE (ValséO)</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="7" data-cats="enf av" data-club="0" data-period="2026" data-date="2026-10-03" data-op="14:00" data-dur="3.75" data-comp="1" data-home="1" data-title="Circuit Avenirs Plot 4" data-lieu="BELLEGARDE (ValséO)" data-search="circuit avenirs plot 4 bellegarde (valséo)" onclick="tog(7)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi 03 (après-midi) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car7">
49▸</span> <b>Circuit Avenirs Plot 4</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av</span></td><td class="l">BELLEGARDE (ValséO)</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog7" style="display:none"><td colspan="10"><div class="progbox"><b>Circuit Avenirs — Plot n°4 (U11 et moins)</b> · Bassin 25 m (8 lignes) · une réunion · échauffement 14h–15h.<br><u>Épreuves</u> (D &amp; M) : 100 4N · 200 4N · 50 Pap · 100 Pap · 50 NL · 100 NL · 50 Brasse · 100 Brasse · 50 Dos · 100 Dos · <b>Relais mixte 4×50 4 Nages</b> (2F+2G).<br><u>Règlement</u> : règle des deux départs · 4 courses max/nageur (hors relais) · toutes années d'âge confondues, D/M séparés · SNS obligatoire.<br><u>Récompenses</u> : médailles aux 3 premiers au cumul des 4 meilleures perfs — classements distincts Avenirs 1 (2015
49) / 2 (2016) / 3 (2017 &amp; après) ; 3 premiers relais.<br><u>Défis</u> : 1er 100 4N (Avenirs 2 &amp; 3) · 1er 200 4N (Avenirs 1).</div></td></tr><tr class="ev" data-id="8" data-cats="benj" data-club="0" data-period="2026" data-date="2026-10-03" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Regroupement U12 &amp; U13" data-lieu="BELLEGARDE (ValséO)" data-search="regroupement u12 &amp; u13 bellegarde (valséo)" style="background:#ffffff"><td class="l">Samedi 03 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Regroupement U12 &amp; U13</b> <span class="home" title="À Bellegarde / ValséO">🏠</span> <span class="badge bdep">🎯 Sélection</span><span class="catsum">Benj</span></td><td class="l">BELLEGARDE (ValséO)</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="9" data-cats="" data-club="0" data-period="2026" data-date="2026-10-10" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="Assemblée générale de l'Ain" data-lieu="BELLEY" data-search="assemblée générale de l'ain belley" style="background:#ffffff"><td class="l">Samedi 10 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Assemblée générale de l'Ain</b><span class="catsum">—</span></td><td class="l">BELLEY</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="10" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2026" data-date="2026-10-10" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Kilomètre nagé forum santé CNBV - entrée gratuite" data-lieu="BELLEGARDE (ValséO)" data-search="kilomètre nagé forum santé cnbv - entrée gratuite bellegarde (valséo)" style="background:#FCE4D6"><td class="l">Samedi 10 (matin) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Kilomètre nagé forum santé CNBV - entrée gratuite</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> BELLEGARDE (ValséO)</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="11" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2026" data-date="2026-10-10" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Forum santé 9h-18h Salle Etournelles - entrée gratuite" data-lieu="VALSERHÔNE" data-search="forum santé 9h-18h salle etournelles - entrée gratuite valserhône" style="background:#FCE4D6"><td class="l">Samedi 10 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Forum santé 9h-18h Salle Etournelles - entrée gratuite</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> VALSERHÔNE</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="12" data-cats="benj jun" data-club="0" data-period="2026" data-date="2026-10-11" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Interclubs U15 / Meeting de rentrée U12 et +" data-lieu="OYONNAX" data-search="interclubs u15 / meeting de rentrée u12 et + oyonnax" onclick="tog(12)" style="cursor:pointer;background:#ffffff"><td class="l">Dimanche 11 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car12">▸</span> <b>Interclubs U15 / Meeting de rentrée U12 et +</b><span class="catsum">Benj · Jun+</span></td><td class="l">OYONNAX</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog12" style="display:none"><td colspan="10"><div class="progbox"><b>Interclubs U15 + Meeting de rentrée (U12 et +)</b> · Oyonnax · Bassin 25 m (8 lignes) · deux réunions · engagements Extranat.<br><u>Meeting U12 et + — R1</u> (éch. 8h30) : Relais 4×50 NL · 800 NL · 100 Dos · 50 Brasse · 200 Pap · 400 4N · 50 Pap · 100 NL · 200 Brasse · 200 NL.<br><u>R2</u> (éch. 14h) : 1500 NL · 100 4N · 50 NL · 100 Brasse · 200 4N · 50 Dos · 400 NL · 100 Pap · 200 Dos · Relais 4×100 4N.<br><u>Interclubs U15</u> (équipes de 4, nés 2012 &amp; 2011) — R1 : Relais 4×50 NL · 50 Brasse · 50 Pap ; R2 : 50 NL · 50 Dos · Relais 4×100 4N.<br>Qualificative meetings Ligue (grilles jaune/verte/bleue, 25 m). Règlement FFN p.85–87 · 4 épreuves indiv. + 2 relais · règle des deux départs.</div></td></tr><tr class="ev" data-id="13" data-cats="" data-club="0" data-period="2026" data-date="2026-10-17" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="Assemblée générale Ligue AuRa" data-lieu="BELLEVILLE-EN-BEAUJOLAIS" data-search="assemblée générale ligue aura belleville-en-beaujolais" style="background:#ffffff"><td class="l">Samedi 17 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Assemblée générale Ligue AuRa</b><span class="catsum">—</span></td><td class="l">BELLEVILLE-EN-BEAUJOLAIS</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="14" data-cats="handi" data-club="0" data-period="2026" data-date="2026-10-18" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Plot 1 du C.N.C. Handisport" data-lieu="VALENCE" data-search="plot 1 du c.n.c. handisport valence" style="background:#ffffff"><td class="l">Dimanche 18 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Plot 1 du C.N.C. Handisport</b><span class="catsum">Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> VALENCE</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="15" data-cats="jun" data-club="0" data-period="2026" data-date="2026-10-22" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="France Elite (petit bassin)" data-lieu="ANGERS" data-search="france elite (petit bassin) angers" onclick="tog(15)" style="cursor:pointer;background:#ffffff"><td class="l">Jeudi 22 au dimanche 25 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><span class="car" id="car15">▸</span> <b>France Elite (petit bassin)</b> <span class="badge bnat">🎯 National</span><span class="catsum">Jun+</span></td><td class="l">ANGERS</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog15" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="vac" data-keep="1"><td colspan="10" style="background:#FFF2CC;color:#5b4a12;font-weight:600">Vacances de la Toussaint 2026 : samedi 17 octobre au dimanche 01 novembre inclus</td></tr><tr class="ev" data-id="17" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2026" data-date="2026-10-17" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Arrêt Technique Fermeture ValséO" data-lieu="BELLEGARDE" data-search="arrêt technique fermeture valséo bellegarde" style="background:#FCE4D6"><td class="l">Samedi 17 au dimanche 25 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Arrêt Technique Fermeture ValséO</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAoCAYAAACxbNkLAAAOHElEQVR4nNWZa3SV1ZnH/8/e73tuycmFJISICoKAEMEqjkJlCNGiYlW8cGKrVpZTlaml2naUpV21J2e1tZelFsdCDXZkaXVcnuhiFKWooyeIF9QgF0kKgqgJ5J6cJOf6XvZ+5sNJEOQStJ3ReT6c82nvd//2/3n2/u+9gRGiKhYzAKCxPRE6d23HnrNfGeC/9WUvAwBmliO1/1pFNBqVALB2T/zKues7XNR9xJe+3Jlm5qkAwMziqx3hF4gwswAz9Sa4svqVHherdtujoh380OaO1QQgHM4p9/8imJlCUZbMTItf3f+OfLyFUbfLmb+uLc3Mp4GZhtVhZuJQSHI4/PVVKxTN1cbybd3LTljTzajbZfmeauN/39r9MgAgPJRqRIe0Y2bCVxyHzSozU30NNDOf+HqXG27rG9QgoKIoD5PKAi+AmcLzIJiZwAxm9nN4+Zz4mr+OJyL+qqEOA1qyebMBBu7d3HtDLOkJQDsaDGM8ZeyLy8zNIOLKeWDU1hIz+3p/dOf67CPLN5rPrWv8OiwWh36YCKvWrlU+Q/A7XZmF8USapRSAlKJUuhmY5lYAmLBqlaBIRKdXP3NRcN3Gue1tHRnjrw0lqSfrryYiRm3t1wMo9PTTEpGIfr89M7lVmzNgZZgIAgywZgIgqmIxo2tHVoCZMtu3XJNpadcmlYrBzja232tcyMw+RCL6K+I5FGhaWRkBQGNP9up21/CBtWaGgFZqt+vN60m4F2yornYveeh2
49C14P2x+3nGW5acFCGBm4ZG//8GwAownQX1XaHbKXNDTk/nf0Z785YAEQAooBkiy2d6Ww+F1aueytjvFjCgObbx2VLTAuu3b8frhMxAIQyt/XLe1du6oA/KWhtkEA+NJKMUCIRkVDzYqjLzLheZhXW6uIiI8ItAE5O3PRCy0y45rAUFdMgqBsrGtJVMQCvj+UBlw89Oqu9M3tLZ4b4CGtGQSpvD1ZaW/bPREAutHwhRViZkJNvUD9CiJscFFTo47ZILIBiEQQQ5UxjxsUEfEBoHA4LCKRahe1fMKogHk+2pMQEvLAFBOB2OFMwtat8QQF2zsCdRUenJzxY0Gfg0GYwurrAe9vOQGGgVBz87EH83mYUFQSkQKghuA8ydUvVdFrzWeooDkn+/ZuVh2DAkw6/8xxwhltflJw8smvGr+8/i0i6gEROBSVR7QvrSmX8HmhicAgIjsroSQ78f18UjJFp6U1LDCEkCKTScDYs3c+An5Qff1xAXE4LCgS0VRfo5jZi7rXzu1/9pWr2ibddEVeRo+TXSnAceA7qNx5/QcwSMMZ/eFt/U9u2J/+Vu0f/K+EHyGiwcOAWnrS6LLUkAvgAzDQGshaoIwF7cmnatgI743jJDsfGdDQ5zS4o83lgUGDiNxjgjAT5tVKikRcZpaq/o3r4pf84i6xtWWq0ZOC4VgYgNYEqQEiguZD24O4s5dNYKxsS97Xe8bSG5J/3nDnYUABAAFxkDxEgFJAKgvBmnXaxdXTg5knP+yhQdv1pyVBKABEIgtbleXlTwBwHoANzDycRoerQqQBuMlo7Bv9F9/zJ1/T/lnOvi5kAU0wNJEQAkKAD9/8gVx5E0m4AHdYaeXbnpqR/uUTLw0ZzKgMhXILRGlpAF5BDOZcK6WBdBakNHTS0ieXF9NPZpbfn1z38l6FIEgPzRwzAAlu7RGIJ3KlV38EZRCSFIloZg7Gz797WeqOuvf0S42zuva1K4tMLcgUBBjg3P53zODhXyaA4G3vg8EMIqo5UIwAqMwvcsrpHAwcBXJdZluJmUHdfV6p8VxHvv8HGjYDvoN6N8FtPbD3fjwRwMaDiZiZsGSJQatWOdk3Pz5t8IpfrPW+03RqIpXmLPm1gJC5STmOIICZFcAywCT8BUGkyvOb3FnT/2gQgXviLy2ydce4ilE3PAjAPcFvDMDRo2BnGI4iOC607Wif1y+nlfiew6Y3xxZ7C0s7oFxBZIAZ0BqEAFNbL5ytW+Yz8DiamgjIpVgtESKAk1r5wi3W0t8+kN2yM68fXleQzyCm4zO0BDCgmRUVwSNT+QbElDGNPHXCyrK/3P4EETmCmUviiaceVerN+7qAUiLq3N+Z2ABhQFuOhuMCjgOks1zk96DklIrtWPFYj97XxwQTn82qAIRPJJP9yGxqngVmQiSiY4BBkYiuZZaDt/7m55nah+tSW3bmZcmnBaSRS5uReZiINSvXz1rkFxWQPWX0i96r58wZ1bzyn/Kf+PFqInI4FJVGfODVpQqbgtnsBfHioZ7LSvNM2Z2Esl3AdSFsBzqZwZjRDmaV+IpRUXES9Lt06EAMECCyMHXhm9tOUZu3fscIeJ+EEJrfax4/cOnPludv3rmwvyuuIPKE0CRyzmvkawlNrCS7sqy42MhMHr3Jc+bpywKP3rQRu3TOUYSiAvUhTfWkRCL1zjXJ1Kfs85xq5g2N8NKTggNFrHKLgWUDlg1YjpC
49ZNIoLsSV71oxFys4itwTy0AwLQBMIPkr9rRW9i+54oqt68cbuBT94qefKuz7QL25cuL+j0yUKSNKgHMwIZoIIGkoVsZT+CWN66fqqWws33X9B4OF/2Ri1teRwWBDAVF+jCDn7IyD6p1qWRZbTfsB7dQ2m1vpNA8hYQNYGZ23AcQT6+/G+gbdVMklauweSGjAPDI5ApOCl7CedEC82zhH1r19o7fwkPwHSgvxDKSYxEhATaWZblQTyJc2a9ELeAzee53no5j8RUToaCskaQNERXL1Ipj7SALGrPhQAPNEo5MJytbUsEe+H7Qq2bfZYNiiZgcGMcwA/2/bwZw8MjkkyiBTIo3Oewsdp8qi08ClNXs7tKcMQhKPVDQHQBG2yI4rGV0i6btYPC7Y/eJnvijm7uCpsMDPVHMOFCEf1CIJHCfmRr2fwmTtragw1duzYj0tEJgnHFL6MxUbWArsKKm2jG9CfuVsCYEIDSnKW8pilwUpogMGCwEJCkyQG5VQcbnM0dQgK2slnFmLS6H3uhbOr8h798UqkrdxmvCHiHuysjxSGoAATeYzevlbY9u+Wbtp+atknrbNOnztGj/3vDZPZDHxbKNuGyFiA1hgANExzyGEY0GA9yueVqenfiItZ03dQw85JgQ/2jEkTsWQ5JMNw4QscFYYIDK1KpMfU1ZX7As/fXe33+/c04hZzJla5R0qvIypUGJxOWisQ+TCY2M15+T3XZNzdlWPymuCRA+xYCjJjgW1XebTESQlcbhieTim9YCLt97pC1lStH/Pus3OL6+6dW/T48tk4fXKbhxkMGrIbB9eMxOHpRtDsKh+U5FlT1nlejnzL7/fvabylzjwbqxzCiJ7hMyDW+Z2maQCsWQgvpZLCjQ9oPWf6FJo95Vphx5MQzOCMzR5bQVhOkXfrjjUiUKwNTpH5/ZruwGMPLyKiHWyP8/rPrPjEc8uVrxTklxLgqNyR6+A0+xxMThlntC8gzcXz3g2++7tv+4h2cZjF2auWOMcLcgDI55lQnx+sAMPWQ7ZIGqYrSgpm7j1/8hkfmKRgpR0tUhY460LH+71Y+t1mGjdKFJw72yhecd98IkpxLGaAdzvMTIU1cx+wJ5e7BAiIg9U5FIhA0NDaA9vk73yzqWj1HTeyrYhjMYMi9KVOu6K89Pp6j5wBpbIidwhg9vk8SGRS+6eVT/vJlLI8OANpHUzbcDIOoJVJk6a3Zq67/OfiriV3EtE2ZhZUXe0SkQYRoby8yZlYvs0Pv2CG/kyhQ9VRgnUAWvhvWtDjX337+UTUjHCYqLr6mEePY4UB4C1WJZuCBXnnZtJaEUmZGExxYUX5nEUL0Pbia/mxzmZvdVanLFtlJYpHPcvMRES/BoAwMHwUyEVVWBCRG19W9543+OHMdGJQA0J8fqlmSdqjMvCef26v95Hb5hNRF8dixt8DA+QG4wYDF/wmzz+RtM4OWSuDNZoJaM+vnFq+9LRTC+NZHfBOnFxOlaM9SSJirqszY+GwEfn8RcjoZgYALlEvZn1gQAjQcNoNwQjBUmXhP2eaUr+9Zr6XaCtHo/LvhQEAgzksgKvW9X/62rZA3p4zMmmtpfBxxtqJfZ3r7rnz+zdd/h//+fqCkyeN+9mM0wv+C8BH4TALWkJHKdgQgHr4Tjmzn0t30GD3LpYHL9NCADrtFp52qinuX1wbOKdyC8fYoOpjn3CPO5jDBgCksruu/LjjQn5ra8B5Z3uFfnt7QO9uuTHJzGXA8fjh4f6YABAzn9j7zz/saMMC3SKu0K1YyK20kD+ly5xswXWcWPH8ehDAM28xR+z0C4QgirixWNjI81WuMfiSp4qKSgytLQU2FeT7gd6B528GQMsffNAbCkVHtMbDOzkZtM9K6nYvPATOnTGYoP3sGvbFM7bm33rZYuaQRGPdP0aZYSAA6O6uZMClE8fc/iu/52JN0hJEAerv30P9A2/+lJkLb7vtdjsaDR33Usouk/e8aUE1fBCWgklndOCS2bb36WXfI6JOREMYycp8KaCamhoVjUYFETUH/d+7pjA4QxAlYTvkCk9TiesOziYCNzQ0HNebKiNM5DGZ/PJ9r+EFANYq4544cYoh7r7qV16iHY11jSaNdJH4ZYGGoWKxKqO0eO4zhb6b7ykumiCJNFt2k9vR9/iinGVpOL5ew/MEHBcg8w1zVJCZHbtQBszBiyqf9c+p/D0jJGcumfkPTbWjRiwWNgAD7V2PPdy09yy1c18Bf9T603ai4HH3Mfw8yTt2TOuq/FeO0wIe/NHKvcy5m9r/80cx5ioDAPr611+7v++8pz5ti/yeyDdSs0P7CEUlM5t9/1a3JvHde99g5gmMsPjffpX4HzQSOqbL0Sq8AAAAAElFTkSuQmCC"> BELLEGARDE</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="18" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2026" data-date="2026-10-26" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="STAGES CNBV" data-lieu="BELLEGARDE" data-search="stages cnbv bellegarde" style="background:#FCE4D6"><td class="l">Lundi 26 au vendredi 30 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>STAGES CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> BELLEGARDE</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="mois"><td colspan="10">NOVEMBRE 2026</td></tr><tr class="ev" data-id="19" data-cats="av benj jun mai" data-club="0" data-period="2026" data-date="2026-11-07" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Interclubs Finale TC Ligue AuRa" data-lieu="VILLEFRANCHE-EN-BEAUJOLAIS" data-search="interclubs finale tc ligue aura villefranche-en-beaujolais" onclick="tog(19)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi 07 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car19">▸</span> <b>Interclubs Finale TC Ligue AuRa</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Av · Benj · Jun+ · Maî</span></td><td class="l">VILLEFRANCHE-EN-BEAUJOLAIS</td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td></tr><tr class="prog" id="prog19" style="display:none"><td colspan="10"><div class="progbox"><b>Interclubs Toutes Catégories</b>.<br><i>Programme et compo d'équipe : à venir.</i></div></td></tr><tr class="ev" data-id="20" data-cats="benj jun mai" data-club="0" data-period="2026" data-date="2026-11-08" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Interclubs départementaux TC" data-lieu="BOURG" data-search="interclubs départementaux tc bourg" onclick="tog(20)" style="cursor:pointer;background:#ffffff"><td class="l">Dimanche 08 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car20">
49▸</span> <b>Interclubs départementaux TC</b><span class="catsum">Benj · Jun+ · Maî</span></td><td class="l">BOURG</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td></tr><tr class="prog" id="prog20" style="display:none"><td colspan="10"><div class="progbox"><b>Interclubs départementaux TC (Toutes Catégories)</b> · Bassin 25 m (8 lignes) · deux réunions · engagements Extranat.<br><u>R1</u> (éch. 8h30) : 10×50 NL (D+M) · 100 Dos D / 200 Dos M · 100 Brasse D / 200 Brasse M · 100 NL D / 400 NL M · 100 Pap D / 200 Pap M · 100 4N D / 200 4N M · (pause) 4×200 NL Dames.<br><u>R2</u> (éch. 14h) : 4×200 NL M · 200 Dos D / 100 Dos M · 200 Brasse D / 100 Brasse M · 400 NL D / 100 NL M · 200 Pap D / 100 Pap M · 200 4N D / 100 4N M · (pause) 4×100 4N (D &amp; M).<br>Règlement FFN p.88–93 · toute l'équipe fait le programme pour être classée · avenirs : SNS + licence Nat. Course · classements Dames et Messieurs · qualificative meetings Ligue · règle des deux départs.</div></td></tr><tr class="ev" data-id="21" data-cats="benj" data-club="0" data-period="2026" data-date="2026-11-22" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Meeting départemental U12 &amp; U13" data-lieu="FERNEY" data-search="meeting départemental u12 &amp; u13 ferney" onclick="tog(21)" style="cursor:pointer;background:#ffffff"><td class="l">Dimanche 22 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car21">▸</span> <b>Meeting départemental U12 &amp; U13</b><span class="catsum">Benj</span></td><td class="l">FERNEY</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog21" style="display:none"><td colspan="10"><div class="progbox"><b>Meeting départemental U12 &amp; U13</b> · Ferney · Bassin 25 m (6 lignes) · deux réunions · engagements Extranat.<br><u>R1</u> (éch. 8h30) : 800 NL · 50 Pap · 100 Dos · 50 Brasse · 200 Pap · 400 4N · 100 NL · 200 Brasse · 200 NL.<br><u>R2</u> (éch. 14h) : 1500 NL · 50 Dos · 100 4N · 50 NL · 100 Brasse · 200 4N · 400 NL · 100 Pap · 200 Dos.<br>Qualificative aux Championnats de France U13 en 25 m (règlement FFN p.41). Amendes : 800/1500 NL &amp; 400 4N. 1 seul départ par course.</div></td></tr><tr class="ev" data-id="22" data-cats="benj jun mai handi" data-club="0" data-period="2026" data-date="2026-11-22" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Journée Multinage Handi-Valide" data-lieu="SAINT-ETIENNE" data-search="journée multinage handi-valide saint-etienne" style="background:#ffffff"><td class="l">Dimanche 22 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Journée Multinage Handi-Valide</b><span class="catsum">Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> SAINT-ETIENNE</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="23" data-cats="jun" data-club="0" data-period="2026" data-date="2026-11-27" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnats Ligue AuRa Hiver (25m)" data-lieu="ROMANS-SUR-ISERE" data-search="championnats ligue aura hiver (25m) romans-sur-isere" onclick="tog(23)" style="cursor:pointer;background:#BDD7EE"><td class="l">Vendredi 27 au dimanche 29 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car23">▸</span> <b>Championnats Ligue AuRa Hiver (25m)</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Jun+</span></td><td class="l">ROMANS-SUR-ISERE</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog23" style="display:none"><td colspan="10"><div class="progbox"><b>Championnats Ligue AuRA Hiver (25 m)</b> — U18.<br><b>Sur qualification</b> (grille bleue). <b>Grille : à venir.</b></div></td></tr><tr class="mois"><td colspan="10">DECEMBRE 2026</td></tr><tr class="ev" data-id="24" data-cats="enf av" data-club="0" data-period="2026" data-date="2026-12-05" data-op="14:00" data-dur="3.75" data-comp="1" data-home="0" data-title="Finale Trophée de l'Ain (U11 et moins)" data-lieu="AMBERIEU" data-search="finale trophée de l'ain (u11 et moins) amberieu" onclick="tog(24)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi 05 (après-midi) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car24">
49▸</span> <b>Finale Trophée de l'Ain (U11 et moins)</b><span class="catsum">ENF · Av</span></td><td class="l">AMBERIEU</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog24" style="display:none"><td colspan="10"><div class="progbox"><b>Finale Trophée de l'Ain (U11 et moins)</b> · Ambérieu · Bassin 25 m (8 lignes) · échauffement 14h–15h · engagements Extranat.<br>Le nageur choisit <b>un</b> des 3 Trophées et dispute toutes ses courses :<br>• <b>Nageur le plus complet</b> : 100 4N · 200 NL · 50 NL.<br>• <b>Sprint</b> : 50 Pap · 50 Dos · 50 Brasse · 50 NL.<br>• <b>100 m</b> : 100 Pap · 100 Dos · 100 Brasse · 100 NL.<br><u>Règlement</u> : règle des deux départs · toutes années d'âge confondues, D/M séparés · SNS obligatoire.<br><u>Récompenses</u> : médailles aux 3 premières/premiers de chaque Trophée — classements distincts Avenirs 1 (2015) / 2 (2016) / 3 (2017 &amp; après).</div></td></tr><tr class="ev" data-id="25" data-cats="handi" data-club="0" data-period="2026" data-date="2026-12-05" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnat de France Hiver 25m Handisport (à confirmer)" data-lieu="(à définir)" data-search="championnat de france hiver 25m handisport (à confirmer) (à définir)" onclick="tog(25)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi 05 et dimanche 06 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car25">▸</span> <b>Championnat de France Hiver 25m Handisport (à confirmer)</b> <span class="badge bnat">🎯 National</span><span class="catsum">Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> (à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td></tr><tr class="prog" id="prog25" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="ev" data-id="26" data-cats="benj jun" data-club="0" data-period="2026" data-date="2026-12-06" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Meeting départemental U12 +" data-lieu="AMBERIEU" data-search="meeting départemental u12 + amberieu" onclick="tog(26)" style="cursor:pointer;background:#ffffff"><td class="l">Dimanche 06 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car26">▸</span> <b>Meeting départemental U12 +</b><span class="catsum">Benj · Jun+</span></td><td class="l">AMBERIEU</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog26" style="display:none"><td colspan="10"><div class="progbox"><b>Meeting départemental (U12 et +)</b> · Ambérieu · Bassin 25 m (8 lignes) · deux réunions · engagements Extranat.<br><u>R1</u> (éch. 8h30) : 200 4N · 50 Brasse · 100 Dos · 200 Pap · 100 NL · 50 Dos · 200 Brasse · 100 4N · Relais 4×50 4N Mixte.<br><u>R2</u> (éch. 14h) : 400 4N · 400 NL · 50 Pap · 100 Brasse · 200 NL · 50 NL · 100 Pap · 200 Dos.<br>Qualificative aux meetings Ligue (grilles jaune &amp; verte). 1 seul départ par course.</div></td></tr><tr class="ev" data-id="27" data-cats="jun" data-club="0" data-period="2026" data-date="2026-12-08" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnats de France U18 (25m)" data-lieu="(à définir)" data-search="championnats de france u18 (25m) (à définir)" onclick="tog(27)" style="cursor:pointer;background:#ffffff"><td class="l">Mardi 08 au samedi 12 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car27">
49▸</span> <b>Championnats de France U18 (25m)</b> <span class="badge bnat">🎯 National</span><span class="catsum">Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog27" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="ev" data-id="28" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2026" data-date="2026-12-17" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Assemblée générale du club CNBV (à confirmer)" data-lieu="BELLEGARDE" data-search="assemblée générale du club cnbv (à confirmer) bellegarde" style="background:#FCE4D6"><td class="l">Jeudi 17 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Assemblée générale du club CNBV (à confirmer)</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> BELLEGARDE</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="29" data-cats="benj" data-club="0" data-period="2026" data-date="2026-12-17" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnats de France U12-U13" data-lieu="CHOLET" data-search="championnats de france u12-u13 cholet" onclick="tog(29)" style="cursor:pointer;background:#ffffff"><td class="l">Jeudi 17 au samedi 19 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car29">▸</span> <b>Championnats de France U12-U13</b> <span class="badge bnat">🎯 National</span><span class="catsum">Benj</span></td><td class="l">CHOLET</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog29" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="ev" data-id="30" data-cats="benj" data-club="0" data-period="2026" data-date="2026-12-20" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Finale Coupe de France des départements" data-lieu="CHOLET" data-search="finale coupe de france des départements cholet" onclick="tog(30)" style="cursor:pointer;background:#ffffff"><td class="l">Dimanche 20 et lundi 21 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car30">
49▸</span> <b>Finale Coupe de France des départements</b> <span class="badge bdep">🎯 Sélection</span><span class="catsum">Benj</span></td><td class="l">CHOLET</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog30" style="display:none"><td colspan="10"><div class="progbox"><b>Coupe de France des départements</b> · équipe départementale sélectionnée par le Comité de l'Ain.</div></td></tr><tr class="vac" data-keep="1"><td colspan="10" style="background:#FFF2CC;color:#5b4a12;font-weight:600">Vacances de Noël 2026 : samedi 19 décembre 2026 au dimanche 03 janvier 2027 inclus</td></tr><tr class="ev" data-id="32" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2026" data-date="2026-12-21" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="STAGES CNBV" data-lieu="BELLEGARDE" data-search="stages cnbv bellegarde" style="background:#FCE4D6"><td class="l">Lundi 21-mardi 22 et lundi 28-mardi 29 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>STAGES CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> BELLEGARDE</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="mois"><td colspan="10">JANVIER 2027</td></tr><tr class="janhdr" data-keep="1"><td class="l" colspan="4"><b>Changement de catégories au 1er janvier 2027 — nouvelles années ↓</b></td><td class="x">(tous)</td><td class="x">2016 &amp; +</td><td class="x">2014-15</td><td class="x">2013 &amp; -</td><td class="x">2002 &amp; -</td><td class="x">FFH</td></tr><tr class="ev" data-id="33" data-cats="enf av benj jun handi" data-club="0" data-period="2027" data-date="2027-01-16" data-op="" data-dur="3.75" data-comp="1" data-home="1" data-title="Compétition interne CNBV" data-lieu="BELLEGARDE (ValséO)" data-search="compétition interne cnbv bellegarde (valséo)" style="background:#ffffff"><td class="l">Samedi 16 (après-midi) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Compétition interne CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAAoCAYAAACxbNkLAAAOHElEQVR4nNWZa3SV1ZnH/8/e73tuycmFJISICoKAEMEqjkJlCNGiYlW8cGKrVpZTlaml2naUpV21J2e1tZelFsdCDXZkaXVcnuhiFKWooyeIF9QgF0kKgqgJ5J6cJOf6XvZ+5sNJEOQStJ3ReT6c82nvd//2/3n2/u+9gRGiKhYzAKCxPRE6d23HnrNfGeC/9WUvAwBmliO1/1pFNBqVALB2T/zKues7XNR9xJe+3Jlm5qkAwMziqx3hF4gwswAz9Sa4svqVHherdtujoh380OaO1QQgHM4p9/8imJlCUZbMTItf3f+OfLyFUbfLmb+uLc3Mp4GZhtVhZuJQSHI4/PVVKxTN1cbybd3LTljTzajbZfmeauN/39r9MgAgPJRqRIe0Y2bCVxyHzSozU30NNDOf+HqXG27rG9QgoKIoD5PKAi+AmcLzIJiZwAxm9nN4+Zz4mr+OJyL+qqEOA1qyebMBBu7d3HtDLOkJQDsaDGM8ZeyLy8zNIOLKeWDU1hIz+3p/dOf67CPLN5rPrWv8OiwWh36YCKvWrlU+Q/A7XZmF8USapRSAlKJUuhmY5lYAmLBqlaBIRKdXP3NRcN3Gue1tHRnjrw0lqSfrryYiRm3t1wMo9PTTEpGIfr89M7lVmzNgZZgIAgywZgIgqmIxo2tHVoCZMtu3XJNpadcmlYrBzja232tcyMw+RCL6K+I5FGhaWRkBQGNP9up21/CBtWaGgFZqt+vN60m4F2yornYveeh2
49C14P2x+3nGW5acFCGBm4ZG//8GwAownQX1XaHbKXNDTk/nf0Z785YAEQAooBkiy2d6Ww+F1aueytjvFjCgObbx2VLTAuu3b8frhMxAIQyt/XLe1du6oA/KWhtkEA+NJKMUCIRkVDzYqjLzLheZhXW6uIiI8ItAE5O3PRCy0y45rAUFdMgqBsrGtJVMQCvj+UBlw89Oqu9M3tLZ4b4CGtGQSpvD1ZaW/bPREAutHwhRViZkJNvUD9CiJscFFTo47ZILIBiEQQQ5UxjxsUEfEBoHA4LCKRahe1fMKogHk+2pMQEvLAFBOB2OFMwtat8QQF2zsCdRUenJzxY0Gfg0GYwurrAe9vOQGGgVBz87EH83mYUFQSkQKghuA8ydUvVdFrzWeooDkn+/ZuVh2DAkw6/8xxwhltflJw8smvGr+8/i0i6gEROBSVR7QvrSmX8HmhicAgIjsroSQ78f18UjJFp6U1LDCEkCKTScDYs3c+An5Qff1xAXE4LCgS0VRfo5jZi7rXzu1/9pWr2ibddEVeRo+TXSnAceA7qNx5/QcwSMMZ/eFt/U9u2J/+Vu0f/K+EHyGiwcOAWnrS6LLUkAvgAzDQGshaoIwF7cmnatgI743jJDsfGdDQ5zS4o83lgUGDiNxjgjAT5tVKikRcZpaq/o3r4pf84i6xtWWq0ZOC4VgYgNYEqQEiguZD24O4s5dNYKxsS97Xe8bSG5J/3nDnYUABAAFxkDxEgFJAKgvBmnXaxdXTg5knP+yhQdv1pyVBKABEIgtbleXlTwBwHoANzDycRoerQqQBuMlo7Bv9F9/zJ1/T/lnOvi5kAU0wNJEQAkKAD9/8gVx5E0m4AHdYaeXbnpqR/uUTLw0ZzKgMhXILRGlpAF5BDOZcK6WBdBakNHTS0ieXF9NPZpbfn1z38l6FIEgPzRwzAAlu7RGIJ3KlV38EZRCSFIloZg7Gz797WeqOuvf0S42zuva1K4tMLcgUBBjg3P53zODhXyaA4G3vg8EMIqo5UIwAqMwvcsrpHAwcBXJdZluJmUHdfV6p8VxHvv8HGjYDvoN6N8FtPbD3fjwRwMaDiZiZsGSJQatWOdk3Pz5t8IpfrPW+03RqIpXmLPm1gJC5STmOIICZFcAywCT8BUGkyvOb3FnT/2gQgXviLy2ydce4ilE3PAjAPcFvDMDRo2BnGI4iOC607Wif1y+nlfiew6Y3xxZ7C0s7oFxBZIAZ0BqEAFNbL5ytW+Yz8DiamgjIpVgtESKAk1r5wi3W0t8+kN2yM68fXleQzyCm4zO0BDCgmRUVwSNT+QbElDGNPHXCyrK/3P4EETmCmUviiaceVerN+7qAUiLq3N+Z2ABhQFuOhuMCjgOks1zk96DklIrtWPFYj97XxwQTn82qAIRPJJP9yGxqngVmQiSiY4BBkYiuZZaDt/7m55nah+tSW3bmZcmnBaSRS5uReZiINSvXz1rkFxWQPWX0i96r58wZ1bzyn/Kf+PFqInI4FJVGfODVpQqbgtnsBfHioZ7LSvNM2Z2Esl3AdSFsBzqZwZjRDmaV+IpRUXES9Lt06EAMECCyMHXhm9tOUZu3fscIeJ+EEJrfax4/cOnPludv3rmwvyuuIPKE0CRyzmvkawlNrCS7sqy42MhMHr3Jc+bpywKP3rQRu3TOUYSiAvUhTfWkRCL1zjXJ1Kfs85xq5g2N8NKTggNFrHKLgWUDlg1YjpC
49ZNIoLsSV71oxFys4itwTy0AwLQBMIPkr9rRW9i+54oqt68cbuBT94qefKuz7QL25cuL+j0yUKSNKgHMwIZoIIGkoVsZT+CWN66fqqWws33X9B4OF/2Ri1teRwWBDAVF+jCDn7IyD6p1qWRZbTfsB7dQ2m1vpNA8hYQNYGZ23AcQT6+/G+gbdVMklauweSGjAPDI5ApOCl7CedEC82zhH1r19o7fwkPwHSgvxDKSYxEhATaWZblQTyJc2a9ELeAzee53no5j8RUToaCskaQNERXL1Ipj7SALGrPhQAPNEo5MJytbUsEe+H7Qq2bfZYNiiZgcGMcwA/2/bwZw8MjkkyiBTIo3Oewsdp8qi08ClNXs7tKcMQhKPVDQHQBG2yI4rGV0i6btYPC7Y/eJnvijm7uCpsMDPVHMOFCEf1CIJHCfmRr2fwmTtragw1duzYj0tEJgnHFL6MxUbWArsKKm2jG9CfuVsCYEIDSnKW8pilwUpogMGCwEJCkyQG5VQcbnM0dQgK2slnFmLS6H3uhbOr8h798UqkrdxmvCHiHuysjxSGoAATeYzevlbY9u+Wbtp+atknrbNOnztGj/3vDZPZDHxbKNuGyFiA1hgANExzyGEY0GA9yueVqenfiItZ03dQw85JgQ/2jEkTsWQ5JMNw4QscFYYIDK1KpMfU1ZX7As/fXe33+/c04hZzJla5R0qvIypUGJxOWisQ+TCY2M15+T3XZNzdlWPymuCRA+xYCjJjgW1XebTESQlcbhieTim9YCLt97pC1lStH/Pus3OL6+6dW/T48tk4fXKbhxkMGrIbB9eMxOHpRtDsKh+U5FlT1nlejnzL7/fvabylzjwbqxzCiJ7hMyDW+Z2maQCsWQgvpZLCjQ9oPWf6FJo95Vphx5MQzOCMzR5bQVhOkXfrjjUiUKwNTpH5/ZruwGMPLyKiHWyP8/rPrPjEc8uVrxTklxLgqNyR6+A0+xxMThlntC8gzcXz3g2++7tv+4h2cZjF2auWOMcLcgDI55lQnx+sAMPWQ7ZIGqYrSgpm7j1/8hkfmKRgpR0tUhY460LH+71Y+t1mGjdKFJw72yhecd98IkpxLGaAdzvMTIU1cx+wJ5e7BAiIg9U5FIhA0NDaA9vk73yzqWj1HTeyrYhjMYMi9KVOu6K89Pp6j5wBpbIidwhg9vk8SGRS+6eVT/vJlLI8OANpHUzbcDIOoJVJk6a3Zq67/OfiriV3EtE2ZhZUXe0SkQYRoby8yZlYvs0Pv2CG/kyhQ9VRgnUAWvhvWtDjX337+UTUjHCYqLr6mEePY4UB4C1WJZuCBXnnZtJaEUmZGExxYUX5nEUL0Pbia/mxzmZvdVanLFtlJYpHPcvMRES/BoAwMHwUyEVVWBCRG19W9543+OHMdGJQA0J8fqlmSdqjMvCef26v95Hb5hNRF8dixt8DA+QG4wYDF/wmzz+RtM4OWSuDNZoJaM+vnFq+9LRTC+NZHfBOnFxOlaM9SSJirqszY+GwEfn8RcjoZgYALlEvZn1gQAjQcNoNwQjBUmXhP2eaUr+9Zr6XaCtHo/LvhQEAgzksgKvW9X/62rZA3p4zMmmtpfBxxtqJfZ3r7rnz+zdd/h//+fqCkyeN+9mM0wv+C8BH4TALWkJHKdgQgHr4Tjmzn0t30GD3LpYHL9NCADrtFp52qinuX1wbOKdyC8fYoOpjn3CPO5jDBgCksruu/LjjQn5ra8B5Z3uFfnt7QO9uuTHJzGXA8fjh4f6YABAzn9j7zz/saMMC3SKu0K1YyK20kD+ly5xswXWcWPH8ehDAM28xR+z0C4QgirixWNjI81WuMfiSp4qKSgytLQU2FeT7gd6B528GQMsffNAbCkVHtMbDOzkZtM9K6nYvPATOnTGYoP3sGvbFM7bm33rZYuaQRGPdP0aZYSAA6O6uZMClE8fc/iu/52JN0hJEAerv30P9A2/+lJkLb7vtdjsaDR33Usouk/e8aUE1fBCWgklndOCS2bb36WXfI6JOREMYycp8KaCamhoVjUYFETUH/d+7pjA4QxAlYTvkCk9TiesOziYCNzQ0HNebKiNM5DGZ/PJ9r+EFANYq4544cYoh7r7qV16iHY11jSaNdJH4ZYGGoWKxKqO0eO4zhb6b7ykumiCJNFt2k9vR9/iinGVpOL5ew/MEHBcg8w1zVJCZHbtQBszBiyqf9c+p/D0jJGcumfkPTbWjRiwWNgAD7V2PPdy09yy1c18Bf9T603ai4HH3Mfw8yTt2TOuq/FeO0wIe/NHKvcy5m9r/80cx5ioDAPr611+7v++8pz5ti/yeyDdSs0P7CEUlM5t9/1a3JvHde99g5gmMsPjffpX4HzQSOqbL0Sq8AAAAAElFTkSuQmCC"> BELLEGARDE (ValséO)</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="34" data-cats="mai" data-club="0" data-period="2027" data-date="2027-01-16" data-op="" data-dur="3.75" data-comp="1" data-home="1" data-title="Championnats de l'Ain Maîtres" data-lieu="BELLEGARDE (ValséO)" data-search="championnats de l'ain maîtres bellegarde (valséo)" style="background:#ffffff"><td class="l">Samedi 16 (OP : 17h) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Championnats de l'Ain Maîtres</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Maî</span></td><td class="l">BELLEGARDE (ValséO)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td></tr><tr class="ev" data-id="35" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2027" data-date="2027-01-17" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="Thé Dansant CNBV" data-lieu="CHATILLON" data-search="thé dansant cnbv chatillon" style="background:#FCE4D6"><td class="l">Dimanche 17 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Thé Dansant CNBV</b><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> CHATILLON</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="36" data-cats="jun" data-club="0" data-period="2027" data-date="2027-01-23" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Meeting Ligue AuRa jaune" data-lieu="LYON (VAISE)" data-search="meeting ligue aura jaune lyon (vaise)" style="background:#FFE699"><td class="l">Samedi 23 et dimanche 24 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Meeting Ligue AuRa jaune</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Jun+</span></td><td class="l">LYON (VAISE)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="37" data-cats="enf av" data-club="0" data-period="2027" data-date="2027-01-30" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="Regroupement avenirs (U11 et -)" data-lieu="BOURG" data-search="regroupement avenirs (u11 et -) bourg" style="background:#ffffff"><td class="l">Samedi 30 (matin) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Regroupement avenirs (U11 et -)</b> <span class="badge bdep">🎯 Sélection</span><span class="catsum">ENF · Av</span></td><td class="l">BOURG</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="38" data-cats="enf av" data-club="0" data-period="2027" data-date="2027-01-30" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Circuit Avenirs Plot n°1 (U11 et -) (OP : 14h)" data-lieu="BOURG" data-search="circuit avenirs plot n°1 (u11 et -) (op : 14h) bourg" onclick="tog(38)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi 30 (après-midi) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car38">
49▸</span> <b>Circuit Avenirs Plot n°1 (U11 et -) (OP : 14h)</b><span class="catsum">ENF · Av</span></td><td class="l">BOURG</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog38" style="display:none"><td colspan="10"><div class="progbox"><b>Circuit Avenirs — Natathlon (Plot)</b> · Bassin 25 m · après-midi (OP 14h) · 4 courses max/nageur (hors relais).<br><u>Épreuves</u> : 100 4N · 50 Dos · 100 Dos · 50 Brasse · 100 Brasse · 50 NL · 100 NL · 50 Pap · 100 Pap (D &amp; M) — puis <b>Relais mixte 4×50 NL</b> (2F+2G).<br><u>Catégories</u> : Avenirs 1 = U11 (2015) · Avenirs 2 = U10 (2016) · Avenirs 3 = U9 (2017 &amp; après). SNS requis · règle des deux départs.</div></td></tr><tr class="ev" data-id="39" data-cats="benj jun" data-club="0" data-period="2027" data-date="2027-01-31" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Compétition 1/2 fond (50m) (U12 et +)" data-lieu="OYONNAX" data-search="compétition 1/2 fond (50m) (u12 et +) oyonnax" style="background:#ffffff"><td class="l">Dimanche 31 (matin) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Compétition 1/2 fond (50m) (U12 et +)</b><span class="catsum">Benj · Jun+</span></td><td class="l">OYONNAX</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="40" data-cats="benj jun" data-club="0" data-period="2027" data-date="2027-01-31" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnat départemental sprint (50m) (U12 et +)" data-lieu="OYONNAX" data-search="championnat départemental sprint (50m) (u12 et +) oyonnax" style="background:#ffffff"><td class="l">Dimanche 31 (après-midi) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Championnat départemental sprint (50m) (U12 et +)</b><span class="catsum">Benj · Jun+</span></td><td class="l">OYONNAX</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="mois"><td colspan="10">FEVRIER 2027</td></tr><tr class="ev" data-id="41" data-cats="jun" data-club="0" data-period="2027" data-date="2027-02-05" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Meeting Ligue AuRa vert" data-lieu="(à définir)" data-search="meeting ligue aura vert (à définir)" style="background:#C6E0B4"><td class="l">Vendredi 05 au dimanche 07 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Meeting Ligue AuRa vert</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="42" data-cats="benj" data-club="0" data-period="2027" data-date="2027-02-06" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="Regroupement Benjamins (U12 &amp; U13)" data-lieu="BELLEY" data-search="regroupement benjamins (u12 &amp; u13) belley" style="background:#ffffff"><td class="l">Samedi 06 ou dimanche 07 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Regroupement Benjamins (U12 &amp; U13)</b> <span class="badge bdep">🎯 Sélection</span><span class="catsum">Benj</span></td><td class="l">BELLEY</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="43" data-cats="handi" data-club="0" data-period="2027" data-date="2027-02-07" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Plot 2 du C.N.C. Handisport" data-lieu="BRON" data-search="plot 2 du c.n.c. handisport bron" style="background:#ffffff"><td class="l">Dimanche 07 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Plot 2 du C.N.C. Handisport</b><span class="catsum">Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> BRON</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td></tr><tr class="vac" data-keep="1"><td colspan="10" style="background:#FFF2CC;color:#5b4a12;font-weight:600">Vacances d'hiver 2027 : samedi 13 février au dimanche 28 février inclus</td></tr><tr class="ev" data-id="45" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2027" data-date="2027-02-15" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="STAGES CNBV" data-lieu="BELLEGARDE" data-search="stages cnbv bellegarde" style="background:#FCE4D6"><td class="l">Lundi 15 au vendredi 19 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>STAGES CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> BELLEGARDE</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="46" data-cats="handi" data-club="0" data-period="2027" data-date="2027-02-15" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Stage régional Handisport AuRA" data-lieu="VICHY" data-search="stage régional handisport aura vichy" style="background:#ffffff"><td class="l">Mardi 15 au samedi 19 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Stage régional Handisport AuRA</b><span class="catsum">Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> VICHY</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td></tr><tr class="mois"><td colspan="10">MARS 2027</td></tr><tr class="ev" data-id="47" data-cats="benj jun mai" data-club="0" data-period="2027" data-date="2027-03-05" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Webconfrontation / Championnats Ligue AuRa Printemps (50m)" data-lieu="(à définir)" data-search="webconfrontation / championnats ligue aura printemps (50m) (à définir)" style="background:#BDD7EE"><td class="l">Vendredi 05 au dimanche 07 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Webconfrontation / Championnats Ligue AuRa Printemps (50m)</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Benj · Jun+ · Maî</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td></tr><tr class="ev" data-id="48" data-cats="enf av" data-club="0" data-period="2027" data-date="2027-03-13" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="Regroupement avenirs (U11 et -)" data-lieu="FERNEY" data-search="regroupement avenirs (u11 et -) ferney" style="background:#ffffff"><td class="l">Samedi 13 (matin) ? <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Regroupement avenirs (U11 et -)</b> <span class="badge bdep">🎯 Sélection</span><span class="catsum">ENF · Av</span></td><td class="l">FERNEY</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="49" data-cats="enf av" data-club="0" data-period="2027" data-date="2027-03-13" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Circuit Avenirs Plot n°2 (U11 et -) (OP : 14h)" data-lieu="FERNEY" data-search="circuit avenirs plot n°2 (u11 et -) (op : 14h) ferney" onclick="tog(49)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi 13 (après-midi) ? <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car49">
49▸</span> <b>Circuit Avenirs Plot n°2 (U11 et -) (OP : 14h)</b><span class="catsum">ENF · Av</span></td><td class="l">FERNEY</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog49" style="display:none"><td colspan="10"><div class="progbox"><b>Circuit Avenirs — Natathlon (Plot)</b> · Bassin 25 m · après-midi (OP 14h) · 4 courses max/nageur (hors relais).<br><u>Épreuves</u> : 100 4N · 50 Dos · 100 Dos · 50 Brasse · 100 Brasse · 50 NL · 100 NL · 50 Pap · 100 Pap (D &amp; M) — puis <b>Relais mixte 4×50 NL</b> (2F+2G).<br><u>Catégories</u> : Avenirs 1 = U11 (2015) · Avenirs 2 = U10 (2016) · Avenirs 3 = U9 (2017 &amp; après). SNS requis · règle des deux départs.</div></td></tr><tr class="ev" data-id="50" data-cats="benj jun mai" data-club="0" data-period="2027" data-date="2027-03-14" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnats départementaux (U12 et +)" data-lieu="BOURG" data-search="championnats départementaux (u12 et +) bourg" style="background:#ffffff"><td class="l">Dimanche 14 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Championnats départementaux (U12 et +)</b><span class="catsum">Benj · Jun+ · Maî</span></td><td class="l">BOURG</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td></tr><tr class="ev" data-id="51" data-cats="jun" data-club="0" data-period="2027" data-date="2027-03-19" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Challenge national n°1" data-lieu="(à définir)" data-search="challenge national n°1 (à définir)" onclick="tog(51)" style="cursor:pointer;background:#ffffff"><td class="l">Vendredi 19 au dimanche 21 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><span class="car" id="car51">▸</span> <b>Challenge national n°1</b> <span class="badge bnat">🎯 National</span><span class="catsum">Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog51" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="ev" data-id="52" data-cats="handi" data-club="0" data-period="2027" data-date="2027-03-27" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnat Interrégional Handisport" data-lieu="AIX-EN-PROVENCE" data-search="championnat interrégional handisport aix-en-provence" style="background:#ffffff"><td class="l">Samedi 27 et dimanche 28 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Championnat Interrégional Handisport</b> <span class="badge bnat">🎯 National</span><span class="catsum">Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> AIX-EN-PROVENCE</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td></tr><tr class="mois"><td colspan="10">AVRIL 2027</td></tr><tr class="ev" data-id="53" data-cats="benj" data-club="0" data-period="2027" data-date="2027-04-04" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Interclubs (U12-U13)" data-lieu="BOURG" data-search="interclubs (u12-u13) bourg" style="background:#ffffff"><td class="l">Dimanche 04 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Interclubs (U12-U13)</b><span class="catsum">Benj</span></td><td class="l">BOURG</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="vac" data-keep="1"><td colspan="10" style="background:#FFF2CC;color:#5b4a12;font-weight:600">Vacances de printemps 2027 : samedi 10 avril au dimanche 25 avril inclus</td></tr><tr class="ev" data-id="55" data-cats="benj jun" data-club="0" data-period="2027" data-date="2027-04-10" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="Grand Prix d'Oyonnax + / regroupement U12 &amp; U13" data-lieu="OYONNAX" data-search="grand prix d'oyonnax + / regroupement u12 &amp; u13 oyonnax" style="background:#ffffff"><td class="l">Samedi 10 et dimanche 11 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Grand Prix d'Oyonnax + / regroupement U12 &amp; U13</b> <span class="badge bdep">🎯 Sélection</span><span class="catsum">Benj · Jun+</span></td><td class="l">OYONNAX</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="56" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2027" data-date="2027-04-12" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="STAGES CNBV" data-lieu="BELLEGARDE" data-search="stages cnbv bellegarde" style="background:#FCE4D6"><td class="l">Lundi 12 au mercredi 14 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>STAGES CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> BELLEGARDE</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="57" data-cats="benj jun club" data-club="1" data-period="2027" data-date="2027-04-18" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="STAGE SPORTIF BASSIN 50m" data-lieu="Espagne" data-search="stage sportif bassin 50m espagne" style="background:#FCE4D6"><td class="l">Dimanche 18 au samedi 24 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>STAGE SPORTIF BASSIN 50m</b><span class="catsum">Benj · Jun+</span></td><td class="l">Espagne</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="58" data-cats="jun" data-club="0" data-period="2027" data-date="2027-04-23" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Challenge national n°2" data-lieu="(à définir)" data-search="challenge national n°2 (à définir)" onclick="tog(58)" style="cursor:pointer;background:#ffffff"><td class="l">Vendredi 23 au dimanche 25 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><span class="car" id="car58">▸</span> <b>Challenge national n°2</b> <span class="badge bnat">🎯 National</span><span class="catsum">Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog58" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b>
49 · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="ev" data-id="59" data-cats="jun" data-club="0" data-period="2027" data-date="2027-04-26" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnat de France U18" data-lieu="(à définir)" data-search="championnat de france u18 (à définir)" onclick="tog(59)" style="cursor:pointer;background:#ffffff"><td class="l">Lundi 26 au dimanche 02 (mai) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><span class="car" id="car59">▸</span> <b>Championnat de France U18</b> <span class="badge bnat">🎯 National</span><span class="catsum">Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog59" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="mois"><td colspan="10">MAI 2027</td></tr><tr class="ev" data-id="60" data-cats="enf av" data-club="0" data-period="2027" data-date="2027-05-02" data-op="" data-dur="3.75" data-comp="0" data-home="0" data-title="Regroupement Avenirs (U11 et -)" data-lieu="FERNEY" data-search="regroupement avenirs (u11 et -) ferney" style="background:#ffffff"><td class="l">Dimanche 02 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Regroupement Avenirs (U11 et -)</b> <span class="badge bdep">🎯 Sélection</span><span class="catsum">ENF · Av</span></td><td class="l">FERNEY</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="61" data-cats="enf av" data-club="0" data-period="2027" data-date="2027-05-02" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Interclubs U11 et moins" data-lieu="FERNEY" data-search="interclubs u11 et moins ferney" style="background:#ffffff"><td class="l">Dimanche 02 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Interclubs U11 et moins</b><span class="catsum">ENF · Av</span></td><td class="l">FERNEY</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="62" data-cats="jun" data-club="0" data-period="2027" data-date="2027-05-15" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Meeting Ligue AuRa jaune" data-lieu="(à définir)" data-search="meeting ligue aura jaune (à définir)" style="background:#FFE699"><td class="l">Samedi 15 et dimanche 16 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Meeting Ligue AuRa jaune</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="63" data-cats="benj" data-club="0" data-period="2027" data-date="2027-05-22" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Coupe de France des départements (U12 &amp; U13)" data-lieu="(à définir)" data-search="coupe de france des départements (u12 &amp; u13) (à définir)" style="background:#ffffff"><td class="l">Samedi 22 et dimanche 23 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Coupe de France des départements (U12 &amp; U13)</b> <span class="badge bdep">🎯 Sélection</span><span class="catsum">Benj</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="64" data-cats="handi" data-club="0" data-period="2027" data-date="2027-05-23" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Plot 3 du C.N.C. Handisport" data-lieu="SAINT-ETIENNE" data-search="plot 3 du c.n.c. handisport saint-etienne" style="background:#ffffff"><td class="l">Dimanche 23 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Plot 3 du C.N.C. Handisport</b><span class="catsum">Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> SAINT-ETIENNE</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="65" data-cats="benj jun" data-club="0" data-period="2027" data-date="2027-05-30" data-op="" data-dur="3.75" data-comp="1" data-home="1" data-title="Meeting départemental (U12 et +)" data-lieu="BELLEGARDE (ValséO)" data-search="meeting départemental (u12 et +) bellegarde (valséo)" onclick="tog(65)" style="cursor:pointer;background:#ffffff"><td class="l">Dimanche 30 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car65">▸</span> <b>Meeting départemental (U12 et +)</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Benj · Jun+</span></td><td class="l">BELLEGARDE (ValséO)</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog65" style="display:none"><td colspan="10"><div class="progbox"><b>Meeting du Circuit Juniors &amp; + (U12 et +)</b>.<br>Qualificatif pour les Meetings/Championnats de Ligue.<br><i>Programme détaillé : à venir.</i></div></td></tr><tr class="ev" data-id="66" data-cats="jun" data-club="0" data-period="2027" data-date="2027-05-29" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnats de France Elite (50m)" data-lieu="(à définir)" data-search="championnats de france elite (50m) (à définir)" onclick="tog(66)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi 29 mai au jeudi 03 juin <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><span class="car" id="car66">
49▸</span> <b>Championnats de France Elite (50m)</b> <span class="badge bnat">🎯 National</span><span class="catsum">Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog66" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="mois"><td colspan="10">JUIN 2027</td></tr><tr class="ev" data-id="67" data-cats="enf av" data-club="0" data-period="2027" data-date="2027-06-05" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Coupe PLEWINSKI (U11 et -)" data-lieu="(à définir)" data-search="coupe plewinski (u11 et -) (à définir)" style="background:#ffffff"><td class="l">Samedi 05 et dimanche 06 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><b>Coupe PLEWINSKI (U11 et -)</b> <span class="badge bdep">🎯 Sélection</span><span class="catsum">ENF · Av</span></td><td class="l">(à définir)</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="68" data-cats="jun" data-club="0" data-period="2027" data-date="2027-06-11" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Meeting de Ligue AuRA vert" data-lieu="(à définir)" data-search="meeting de ligue aura vert (à définir)" style="background:#C6E0B4"><td class="l">Vendredi 11 au dimanche 13 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Meeting de Ligue AuRA vert</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="69" data-cats="enf av" data-club="0" data-period="2027" data-date="2027-06-19" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Circuit Avenirs Plot n°3 (U11 et -) (OP : 14h)" data-lieu="AMBERIEU" data-search="circuit avenirs plot n°3 (u11 et -) (op : 14h) amberieu" onclick="tog(69)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi 19 (après-midi) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">25m</td><td class="l"><span class="car" id="car69">▸</span> <b>Circuit Avenirs Plot n°3 (U11 et -) (OP : 14h)</b><span class="catsum">ENF · Av</span></td><td class="l">AMBERIEU</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="prog" id="prog69" style="display:none"><td colspan="10"><div class="progbox"><b>Circuit Avenirs — Natathlon (Plot)</b> · Bassin 25 m · après-midi (OP 14h) · 4 courses max/nageur (hors relais).<br><u>Épreuves</u> : 100 4N · 50 Dos · 100 Dos · 50 Brasse · 100 Brasse · 50 NL · 100 NL · 50 Pap · 100 Pap (D &amp; M) — puis <b>Relais mixte 4×50 NL</b> (2F+2G).<br><u>Catégories</u> : Avenirs 1 = U11 (2015) · Avenirs 2 = U10 (2016) · Avenirs 3 = U9 (2017 &amp; après). SNS requis · règle des deux départs.</div></td></tr><tr class="ev" data-id="70" data-cats="benj jun" data-club="0" data-period="2027" data-date="2027-06-20" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Finale départementale (U12 et +) (50m)" data-lieu="OYONNAX" data-search="finale départementale (u12 et +) (50m) oyonnax" style="background:#ffffff"><td class="l">Dimanche 20 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Finale départementale (U12 et +) (50m)</b><span class="catsum">Benj · Jun+</span></td><td class="l">OYONNAX</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="71" data-cats="benj" data-club="0" data-period="2027" data-date="2027-06-26" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Webconfrontation / Finalité Ligue AuRa (U12-U13)" data-lieu="ANNEMASSE" data-search="webconfrontation / finalité ligue aura (u12-u13) annemasse" style="background:#ffffff"><td class="l">Samedi 26 et dimanche 27 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Webconfrontation / Finalité Ligue AuRa (U12-U13)</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Benj</span></td><td class="l">ANNEMASSE</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="72" data-cats="handi" data-club="0" data-period="2027" data-date="2027-06-01" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnat de France Été 50m Handisport (date et lieu à définir)" data-lieu="(à définir)" data-search="championnat de france été 50m handisport (date et lieu à définir) (à définir)" onclick="tog(72)" style="cursor:pointer;background:#ffffff"><td class="l">Samedi et dimanche (à définir) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><span class="car" id="car72">
49▸</span> <b>Championnat de France Été 50m Handisport (date et lieu à définir)</b> <span class="badge bnat">🎯 National</span><span class="catsum">Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> (à définir)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td></tr><tr class="prog" id="prog72" style="display:none"><td colspan="10"><div class="progbox"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div></td></tr><tr class="mois"><td colspan="10">JUILLET 2027</td></tr><tr class="ev" data-id="73" data-cats="benj jun" data-club="0" data-period="2027" data-date="2027-07-02" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnats Ligue AuRA été (U13/14 et +)" data-lieu="(à définir)" data-search="championnats ligue aura été (u13/14 et +) (à définir)" style="background:#BDD7EE"><td class="l">Vendredi 02 au dimanche 04 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Championnats Ligue AuRA été (U13/14 et +)</b> <span class="badge blig">🎯 Ligue</span><span class="catsum">Benj · Jun+</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="74" data-cats="club" data-club="1" data-period="2027" data-date="2027-07-05" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Opération J'apprends à nager JAN" data-lieu="BELLEGARDE (ValséO)" data-search="opération j'apprends à nager jan bellegarde (valséo)" style="background:#FCE4D6"><td class="l">Lundi 05 au vendredi 16 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Opération J'apprends à nager JAN</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Club</span></td><td class="l">BELLEGARDE (ValséO)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="75" data-cats="club" data-club="1" data-period="2027" data-date="2027-07-19" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Opération J'apprends à nager JAN" data-lieu="BELLEGARDE (ValséO)" data-search="opération j'apprends à nager jan bellegarde (valséo)" style="background:#FCE4D6"><td class="l">Lundi 19 au vendredi 30 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Opération J'apprends à nager JAN</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">Club</span></td><td class="l">BELLEGARDE (ValséO)</td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td><td class="x"></td></tr><tr class="ev" data-id="76" data-cats="av benj jun mai" data-club="0" data-period="2027" data-date="2027-07-10" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Traversée du Lac de Nantua (organisation clubs de l'Ain)" data-lieu="NANTUA" data-search="traversée du lac de nantua (organisation clubs de l'ain) nantua" style="background:#ffffff"><td class="l">Samedi 10 (tôt matin) <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Traversée du Lac de Nantua (organisation clubs de l'Ain)</b><span class="catsum">Av · Benj · Jun+ · Maî</span></td><td class="l">NANTUA</td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td></tr><tr class="ev" data-id="77" data-cats="enf av benj jun mai handi club" data-club="1" data-period="2027" data-date="2027-07-11" data-op="" data-dur="3.75" data-comp="0" data-home="1" data-title="Fête du club CNBV" data-lieu="BELLEGARDE (ValséO)" data-search="fête du club cnbv bellegarde (valséo)" style="background:#FCE4D6"><td class="l">Dimanche 11 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c"></td><td class="l"><b>Fête du club CNBV</b> <span class="home" title="À Bellegarde / ValséO">🏠</span><span class="catsum">ENF · Av · Benj · Jun+ · Maî · Handi</span></td><td class="l"><img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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"> BELLEGARDE (ValséO)</td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td></tr><tr class="ev" data-id="78" data-cats="benj jun mai" data-club="0" data-period="2027" data-date="2027-07-23" data-op="" data-dur="3.75" data-comp="1" data-home="0" data-title="Championnats Open d'été (50m)" data-lieu="(à définir)" data-search="championnats open d'été (50m) (à définir)" style="background:#ffffff"><td class="l">Vendredi 23 au mercredi 28 <button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button></td><td class="c">50m</td><td class="l"><b>Championnats Open d'été (50m)</b><span class="catsum">Benj · Jun+ · Maî</span></td><td class="l">(à définir)</td><td class="x"></td><td class="x"></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"><span class="on">X</span></td><td class="x"></td></tr></tbody></table><div class="legend"><b>Légende :</b> <span class="lgcolor"><span class="sw" style="background:#C00000"></span>Mois &nbsp;<span class="sw" style="background:#BDD7EE"></span>Championnats Ligue AuRA &nbsp;<span class="sw" style="background:#FFE699"></span>Meeting « jaune » &nbsp;<span class="sw" style="background:#C6E0B4"></span>Meeting « vert » &nbsp;<span class="sw" style="background:#FCE4D6"></span>RDV CNBV &nbsp;<span class="sw" style="background:#FFF2CC"></span>Vacances</span><span class="lgbw"><b>N&amp;B :</b> <span class="bwtag">LIGUE</span> Championnats Ligue AuRA · <span class="bwtag">JAUNE</span>/<span class="bwtag">
49VERT</span> Meetings Ligue · <span class="bwtag">CNBV</span> RDV club · Mois en gras souligné · Vacances en italique</span><br><b>🎯</b> <span class="badge bdep">Sélection</span> départementale · <span class="badge blig">Ligue</span> AuRA · <span class="badge bnat">National</span> · 🏠 = à Bellegarde/ValséO.<br><b>📅</b> ajoute au calendrier perso : compétitions = OP + durée estimée (~3h45 départemental, ~4h Ligue/national) ; le reste = tu saisis l'heure. ▸ = programme (clic). <b>🎂</b> année de naissance → saison filtrée pour ce nageur (bascule au 1er janvier). Choix mémorisé sur cet appareil.</div>
49<script>
50var TODAY=new Date().toISOString().slice(0,10);
51var LS={get:function(k){try{return localStorage.getItem(k)}catch(e){return null}},set:function(k,v){try{localStorage.setItem(k,v)}catch(e){}}};
52function catsOf(a){ if(a<=11)return['av']; if(a<=13)return['benj']; if(a<=24)return['jun']; return['mai','jun']; }
53function catLabel(a){ if(a<=11)return'Avenirs'; if(a<=13)return'Benjamins'; if(a<=24)return'Juniors et +'; return'Maîtres'; }
54function tog(id){var p=document.getElementById('prog'+id),c=document.getElementById('car'+id); if(!p)return; var o=(p.style.display!=='none'); p.style.display=o?'none':''; if(c)c.textContent=o?'▸':'▾';}
55function collapseAll(){document.querySelectorAll('#cal tr.prog').forEach(function(p){p.style.display='none';});document.querySelectorAll('#cal .car').forEach(function(c){c.textContent='▸';});}
56function expandAll(){document.querySelectorAll('#cal tr.ev').forEach(function(r){if(r.style.display==='none')return;var pr=r.nextElementSibling;if(pr&&pr.classList.contains('prog')){pr.style.display='';var id=pr.id.replace('prog','');var c=document.getElementById('car'+id);if(c)c.textContent='▾';}});}
57function hideEmptyMonths(){var cur=null,vis=false;function fl(){if(cur)cur.style.display=vis?'':'none';}
58  document.querySelectorAll('#cal tbody tr').forEach(function(r){if(r.classList.contains('mois')){fl();cur=r;vis=false;}else if(r.classList.contains('ev')&&r.style.display!=='none')vis=true;});fl();}
59function setBtn(f){document.querySelectorAll('.bar button[data-f]').forEach(function(b){b.classList.toggle('active',b.dataset.f===f);});}
60var STATE={mode:'all',val:'',future:false,q:''};
61function passFilters(r){
62  if(STATE.future && r.dataset.date < TODAY) return false;
63  if(STATE.q && r.dataset.search.indexOf(STATE.q)<0) return false;
64  if(STATE.mode==='all') return true;
65  if(STATE.mode==='home') return r.dataset.home==='1';
66  if(STATE.mode==='club') return r.dataset.club==='1';
67  if(STATE.mode==='sel') return !!r.querySelector('.bdep');
68  if(STATE.mode==='cat') return (' '+r.dataset.cats+' ').indexOf(' '+STATE.val+' ')>=0;
69  if(STATE.mode==='year'){ if(r.dataset.club==='1')return true;
70     var y=parseInt(STATE.val,10),need=(r.dataset.period==='2027')?catsOf(2027-y):catsOf(2026-y),s=' '+r.dataset.cats+' ';
71     return need.some(function(k){return s.indexOf(' '+k+' ')>=0;}); }
72  return true;
73}
74function apply(){
75  collapseAll(); var n=0;
76  document.querySelectorAll('#cal tbody tr.ev').forEach(function(r){var sh=passFilters(r);r.style.display=sh?'':'none';if(sh)n++;});
77  hideEmptyMonths();
78  var msg;
79  if(STATE.mode==='year'){var y=parseInt(STATE.val,10);msg='🎂 Né(e) en '+y+' → '+catLabel(2026-y)+' jusqu\'en déc. 2026, puis '+catLabel(2027-y)+' dès janvier 2027 — '+n+' RDV';}
80  else msg=(STATE.mode==='all'&&!STATE.future&&!STATE.q?'Tous les événements affichés':n+' événement(s) affiché(s)');
81  document.getElementById('cnt').textContent=msg;
82}
83function flt(f){document.getElementById('year').value='';document.getElementById('yearg').classList.remove('on');
84  if(f==='home'){STATE.mode='home';setBtn('');}else{STATE.mode=(f==='all'?'all':(f==='club'?'club':'cat'));STATE.val=f;setBtn(f);}
85  LS.set('cal_filter',f); apply();}
86function fltSel(){document.getElementById('year').value='';document.getElementById('yearg').classList.remove('on');STATE.mode='sel';STATE.val='sel';setBtn('sel');LS.set('cal_filter','sel');apply();}
87function fltYear(v){if(!v){flt('all');return;} setBtn('');document.getElementById('yearg').classList.add('on');STATE.mode='year';STATE.val=v;LS.set('cal_year',v);LS.set('cal_filter','year');setPrintHdr();apply();}
88function toggleFuture(b){STATE.future=b.classList.toggle('active');apply();}
89function doSearch(v){STATE.q=(v||'').toLowerCase();apply();}
90function setPrenom(v){LS.set('cal_prenom',v);setPrintHdr();}
91function setPrintHdr(){var p=(document.getElementById('prenom').value||'').trim();var y=document.getElementById('year').value;
92  var h=document.getElementById('printhdr');
93  if(y){h.textContent='Calendrier de compétitions'+(p?' de '+p:'')+' — né(e) en '+y+'  (CNBV 2026-2027)';}
94  else{h.textContent='Calendrier sportif CNBV 2026-2027'+(p?' — '+p:'');}}
95function two(n){return (n<10?'0':'')+n;}
96function parseTime(t){if(!t)return null;t=t.replace('h',':').replace('H',':');var m=t.match(/(\d{1,2})[:h\.]?(\d{2})?/);if(!m)return null;return two(parseInt(m[1],10))+':'+(m[2]?m[2]:'00');}
97function addHours(hm,h){var p=hm.split(':');var d=new Date(2000,0,1,parseInt(p[0],10),parseInt(p[1],10));d.setMinutes(d.getMinutes()+Math.round(parseFloat(h)*60));return two(d.getHours())+':'+two(d.getMinutes());}
98function dl(name,content){var b=new Blob([content],{type:'text/calendar'});var u=URL.createObjectURL(b);var a=document.createElement('a');a.href=u;a.download=name;document.body.appendChild(a);a.click();document.body.removeChild(a);setTimeout(function(){URL.revokeObjectURL(u);},1500);}
99function ics(btn){
100  var r=btn.closest('tr'); var id=r.dataset.id;
101  var date=r.dataset.date, title=r.dataset.title, lieu=r.dataset.lieu, comp=r.dataset.comp==='1', op=r.dataset.op, dur=r.dataset.dur;
102  var start,end,allday=false;
103  if(op){start=op;end=addHours(op,dur);}
104  else{
105    var t=prompt('Heure de début pour « '+title+' » ?\n(ex : 14h00 — laisser vide = journée entière)','');
106    if(t===null)return; t=parseTime(t);
107    if(!t){allday=true;}
108    else{start=t; if(comp){end=addHours(t,dur);} else{var e=prompt('Heure de fin ? (ex : 16h00 — vide = +1h)','');e=parseTime(e);end=e||addHours(t,1);}}
109  }
110  var dcompact=date.replace(/-/g,'');
111  var body='';
112  if(allday){var nd=new Date(date+'T00:00:00');nd.setDate(nd.getDate()+1);var ndc=nd.getFullYear()+two(nd.getMonth()+1)+two(nd.getDate());
113    body='DTSTART;VALUE=DATE:'+dcompact+'\nDTEND;VALUE=DATE:'+ndc;}
114  else{body='DTSTART:'+dcompact+'T'+start.replace(':','')+'00\nDTEND:'+dcompact+'T'+end.replace(':','')+'00';}
115  var ical='BEGIN:VCALENDAR\nVERSION:2.0\nPRODID:-//CNBV//Calendrier//FR\nBEGIN:VEVENT\nUID:'+dcompact+'-'+id+'@cnbv\nSUMMARY:'+title.replace(/[,;]/g,' ')+(comp?' (OP '+(op||start)+')':'')+'\n'+body+'\nLOCATION:'+(lieu||'').replace(/[,;]/g,' ')+'\nDESCRIPTION:Calendrier CNBV 2026-2027'+(comp?' — durée estimée '+(dur=='3.75'?'~3h45 (départemental)':'~4h (Ligue/national)'):'')+'\nEND:VEVENT\nEND:VCALENDAR';
116  dl(title.replace(/[^a-zA-Z0-9]+/g,'_').slice(0,40)+'.ics',ical);
117}
118// init : mémoire + aujourd'hui
119(function(){
120  document.querySelectorAll('#cal tr.ev').forEach(function(r){if(r.dataset.date===TODAY)r.classList.add('today');});
121  var p=LS.get('cal_prenom'); if(p)document.getElementById('prenom').value=p;
122  var y=LS.get('cal_year'), f=LS.get('cal_filter');
123  if(f==='year'&&y){document.getElementById('year').value=y;fltYear(y);}
124  else if(f&&f!=='home'){flt(f);}
125  else{flt('all');}
126  setPrintHdr();
127  var first=[].slice.call(document.querySelectorAll('#cal tr.ev')).find(function(r){return r.style.display!=='none'&&r.dataset.date>=TODAY;});
128  if(first)first.scrollIntoView({block:'center'});
129})();
130const BWMAP={"bdd7ee":"LIGUE","ffe699":"JAUNE","c6e0b4":"VERT","fce4d6":"CNBV"};function tagBW(){document.querySelectorAll("tr.ev").forEach(function(tr){var m=/background:\s
130*#([0-9a-fA-F]{6})/.exec(tr.getAttribute("style")||"");var lab=m?BWMAP[m[1].toLowerCase()]:null;if(lab){var c=tr.querySelectorAll("td")[2];if(c&&!c.querySelector(".bwtag")){var s=document.createElement("span");s.className="bwtag";s.textContent=lab;c.insertBefore(s,c.firstChild);}}});}function clearBW(){document.querySelectorAll(".bwtag").forEach(function(e){e.remove();});}function printColor(){clearBW();document.body.classList.remove("pbw");document.body.classList.add("pcolor");window.print();}function printBW(){document.body.classList.remove("pcolor");document.body.classList.add("pbw");tagBW();window.print();}window.addEventListener("afterprint",clearBW);var HLOGO="data:image/png;base64,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bnDMmTNnbet3MRDIb5pm1qFDhxKsVmtQ1/WEmpqa9KilEy4vL9/fq1evLxRF63rRRRdxKBxW6uvrcwCwHg7XEjC3d+/ee2fNmvXDXXfddWFqeqqWmBif+Pbbbw+dMmVKrSFl9QsvvHBI13WWkD4A0FQt9Y033lj71rtvrRakZABAOKR/Fh8fv6uisvp+IUQFAGiaFjG3iHQjHO60b98+a3Ji4qFGr/fedjltsz/0fDh/zJgx3QKhUMdku33zmjVrnKqqytS0tBXpmZnVPp/vbm9d3b7t27enm5LLP/jgg/JnXnjh5/79++sbN2y4qWP79qt9Pt8l0R1oZOaETz75ZG1mRvqMA/vLp03+0596Aaj2+QIpAH730P+Z4p+lKYtoqWZrRewo2Gw2YbXZPnj88cfLmNkGKQOCOVVRFMTHx4en3HLL3atXr555YO+B5/bu3SuIREvQ77cCUBJSkyCZ7684dCjrqaeeylOFGOytr/+mqaXlm1AgNJiZKc5qpfz8fEt8fDzb7XYCAElYMGXKlGdunTz5qUA4+D4AxMXFpc6bN29uXV3NtmafL6E1jZrV6nvv/fefnTRpUrk/FLLbk5L+u6Kysubpxx/vk5qcfEFLS8vqRq/367S0tCFVVVVJwUBQzJ07921vQ0N527Zt84uLizcKReDOO+54aNKkSTNefeaZtoIou6qycpWu67vHXXHFALvd3iilrH/mmWfaxicl9VdUtVHTNKkqapCIRfnevfEADpeS/P8KLpcraerUqYmIZLKJLrm5+Q6Ho68QAjfddJN91MiRZ91xxx0dgUgReZ8+fToOHTS0iJkVl8uVJoTAbbfdljpr1qxkl8uVEet38uTJGUSERx99NBsAFRcXK08++WQWEFE8x48f3/eaa67pGTOnn3jiiTZRGmj27NmZ0fEIAGbPnp155513xgGge++91/75559bX3/9dfsLL7zQ7qmnnjo85qtPvZoxe/Zs65+nTUtHJDgNp9OZDAANzCkzZszYNX369JGff/65dd68eVmxMe688860F198MdHlciUyszJixIiiq6++Og8Arh09OqNv3759rr322tg4/zIm+b9CM6x19/HNjQAAAABJRU5ErkJggg==";(function(){document.querySelectorAll("tr.ev").forEach(function(tr){if(/handi/i.test(tr.getAttribute("data-title")||"")){var c=tr.querySelectorAll("td")[3];if(c&&!c.querySelector(".hlogo")){var el;if(HLOGO){el=document.createElement("img");el.src=HLOGO;el.alt="Handisport";el.className="hlogo";}else{el=document.createElement("span");el.className="hlogo";el.textContent="♿";el.title="Manifestation Handisport";}c.insertBefore(el,c.firstChild);}}});})();</script>
130<script>
131const QWORKER='https://super-math-ffn-perfs.francois-debutnocode.workers.dev';
132const QDB={"source": "Programme Sportif AuRA 2026 (v.23/12/2025) + Grilles 25:50m 2026", "grids": {"U13_WebConfrontation_2026": {"cats": ["U12(2014)", "U13(2013)"], "events": ["50 NL", "100 NL", "200 NL", "400 NL", "800 NL", "1500 NL", "50 Dos", "100 Dos", "200 Dos", "50 Brasse", "100 Brasse", "200 Brasse", "50 Pap", "100 Pap", "200 Pap", "200 4N", "400 4N"], "FILLES": {"50 NL": {"50m": ["00:36,36", "00:33,43"], "25m": ["00:35,66", "00:32,73"]}, "100 NL": {"50m": ["01:21,32", "01:13,00"], "25m": ["01:20,12", "01:11,80"]}, "200 NL": {"50m": ["02:57,91", "02:40,34"], "25m": ["02:55,01", "02:37,44"]}, "400 NL": {"50m": ["06:06,30", "05:43,68"], "25m": ["06:00,10", "05:37,48"]}, "800 NL": {"50m": ["x", "11:31,66"], "25m": ["x", "11:18,76"]}, "1500 NL": {"50m": ["x", "x"], "25m": ["x", "x"]}, "50 Dos": {"50m": ["00:44,19", "00:40,32"], "25m": ["00:42,89", "00:39,02"]}, "100 Dos": {"50m": ["01:33,02", "01:26,70"], "25m": ["01:30,72", "01:24,40"]}, "200 Dos": {"50m": ["03:27,55", "03:09,64"], "25m": ["03:22,15", "03:04,24"]}, "50 Brasse": {"50m": ["00:47,79", "00:43,70"], "25m": ["00:47,09", "00:43,00"]}, "100 Brasse": {"50m": ["01:44,94", "01:35,33"], "25m": ["01:43,04", "01:33,43"]}, "200 Brasse": {"50m": ["03:40,07", "03:22,66"], "25m": ["03:35,57", "03:18,16"]}, "50 Pap": {"50m": ["00:42,03", "00:37,40"], "25m": ["00:41,43", "00:36,80"]}, "100 Pap": {"50m": ["01:39,87", "01:28,44"], "25m": ["01:38,47", "01:27,04"]}, "200 Pap": {"50m": ["x", "03:11,86"], "25m": ["x", "03:08,56"]}, "200 4N": {"50m": ["03:24,15", "03:01,21"], "25m": ["03:20,75", "02:57,81"]}, "400 4N": {"50m": ["x", "06:25,94"], "25m": ["x", "06:18,44"]}}, "GARÇONS": {"50 NL": {"50m": ["00:35,08", "00:33,00"], "25m": ["00:34,38", "00:32,30"]}, "100 NL": {"50m": ["01:17,59", "01:12,85"], "25m": ["01:16,09", "01:11,35"]}, "200 NL": {"50m": ["02:48,94", "02:39,57"], "25m": ["02:45,34", "02:35,97"]}, "400 NL": {"50m": ["06:07,13", "05:42,75"], "25m": ["05:59,43", "05:35,05"]}, "800 NL": {"50m": ["x", "11:30,00"], "25m": ["x", "11:14,10"]}, "1500 NL": {"50m": ["x", "x"], "25m": ["x", "x"]}, "50 Dos": {"50m": ["00:42,79", "00:40,12"], "25m": ["00:41,29", "00:38,62"]}, "100 Dos": {"50m": ["01:31,76", "01:26,30"], "25m": ["01:28,76", "01:23,30"]}, "200 Dos": {"50m": ["03:20,14", "03:08,92"], "25m": ["03:13,24", "03:02,02"]}, "50 Brasse": {"50m": ["00:46,69", "00:43,47"], "25m": ["00:45,59", "00:42,37"]}, "100 Brasse": {"50m": ["01:40,50", "01:35,19"], "25m": ["01:38,00", "01:32,69"]}, "200 Brasse": {"50m": ["03:28,39", "03:21,63"], "25m": ["03:22,49", "03:15,73"]}, "50 Pap": {"50m": ["00:38,51", "00:36,63"], "25m": ["00:37,81", "00:35,93"]}, "100 Pap": {"50m": ["01:32,85", "01:26,28"], "25m": ["01:31,45", "01:24,88"]}, "200 Pap": {"50m": ["x", "03:05,00"], "25m": ["x", "03:01,70"]}, "200 4N": {"50m": ["03:12,19", "03:00,87"], "25m": ["03:08,09", "02:56,77"]}, "400 4N": {"50m": ["x", "06:23,00"], "25m": ["x", "06:14,00"]}}}, "Juniors_et_plus": {"cats": ["Seniors(2007-)", "U18(2008)", "U17(2009)", "U16(2010)", "U15(2011)", "U14(2012)"], "events": ["50 NL", "100 NL", "200 NL", "400 NL", "800 NL", "1500 NL", "50 Dos", "100 Dos", "200 Dos", "50 Brasse", "100 Brasse", "200 Brasse", "50 Pap", "100 Pap", "200 Pap", "200 4N", "400 4N"], "DAMES": {"Bleu_ChampLigue": {"50 NL": {"50m": ["00:29,00", "00:29,15", "00:29,42", "00:29,93", "00:29,98", "00:30,75"], "25m": ["00:28,30", "00:28,45", "00:28,72", "00:29,23", "00:29,28", "00:30,05"]}, "100 NL": {"50m": ["01:02,21", "01:02,53", "01:03,13", "01:04,19", "01:04,59", "01:06,11"], "25m": ["01:01,01", "01:01,33", "01:01,93", "01:02,99", "01:03,39", "01:04,91"]}, "200 NL": {"50m": ["02:15,86", "02:16,55", "02:17,83", "02:20,28", "02:21,08", "02:24,51"], "25m": ["02:12,96", "02:13,65", "02:14,93", "02:17,38", "02:18,18", "02:21,61"]}, "400 NL": {"50m": ["04:45,35", "04:46,80", "04:48,74", "04:53,85", "04:56,06", "05:02,94"], "25m": ["04:39,15", "04:40,60", "04:42,54", "04:47,65", "04:49,86", "04:56,74"]}, "800 NL": {"50m": ["09:59,00", "09:59,00", "09:59,00", "10:04,00", "10:10,00", "10:25,00"], "25m": ["09:46,10", "09:46,10", "09:46,10", "09:51,10", "09:57,10", "10:12,10"]}, "1500 NL": {"50m": ["19:05,00", "19:05,00", "19:05,00", "19:15,00", "19:30,00", "20:05,00"], "25m": ["18:40,50", "18:40,50", "18:40,50", "18:50,50", "19:05,50", "19:40,50"]}, "50 Dos": {"50m": ["00:33,05", "00:33,21", "00:33,51", "00:34,07", "00:34,33", "00:35,17"], "25m": ["00:31,75", "00:31,91", "00:32,21", "00:32,77", "00:33,03", "00:33,87"]}, "100 Dos": {"50m": ["01:11,11", "01:11,47", "01:12,05", "01:13,34", "01:13,93", "01:16,49"], "25m": ["01:08,81", "01:09,17", "01:09,75", "01:11,04", "01:11,63", "01:14,19"]}, "200 Dos": {"50m": ["02:33,30", "02:33,99", "02:35,31", "02:37,77", "02:38,96", "02:47,03"], "25m": ["02:27,90", "02:28,59", "02:29,91", "02:32,37", "02:33,56", "02:41,63"]}, "50 Brasse": {"50m": ["00:36,53", "00:36,72", "00:37,01", "00:37,62", "00:37,93", "00:38,82"], "25m": ["00:35,83", "00:36,02", "00:36,31", "00:36,92", "00:37,23", "00:38,12"]}, "100 Brasse": {"50m": ["01:20,49", "01:20,91", "01:21,70", "01:22,94", "01:23,41", "01:25,45"], "25m": ["01:18,59", "01:19,01", "01:19,80", "01:21,04", "01:21,51", "01:23,55"]}, "200 Brasse": {"50m": ["02:53,00", "02:53,88", "02:55,29", "02:58,23", "02:59,20", "03:04,78"], "25m": ["02:48,50", "02:49,38", "02:50,79", "02:53,73", "02:54,70", "03:00,28"]}, "50 Pap": {"50m": ["00:30,74", "00:30,90", "00:31,16", "00:31,69", "00:31,92", "00:32,67"], "25m": ["00:30,14", "00:30,30", "00:30,56", "00:31,09", "00:31,32", "00:32,07"]}, "100 Pap": {"50m": ["01:09,75", "01:10,11", "01:10,76", "01:11,95", "01:12,52", "01:14,61"], "25m": ["01:08,35", "01:08,71", "01:09,36", "01:10,55", "01:11,12", "01:13,21"]}, "200 Pap": {"50m": ["02:36,32", "02:37,26", "02:38,17", "02:41,47", "02:42,80", "02:50,27"], "25m": ["02:33,02", "02:33,96", "02:34,87", "02:38,17", "02:39,50", "02:46,97"]}, "200 4N": {"50m": ["02:35,12", "02:35,91", "02:37,47", "02:39,97", "02:41,29", "02:44,74"], "25m": ["02:31,72", "02:32,51", "02:34,07", "02:36,57", "02:37,89", "02:41,34"]}, "400 4N": {"50m": ["05:28,75", "05:30,44", "05:33,01", "05:38,69", "05:40,54", "05:49,29"], "25m": ["05:21,25", "05:22,94", "05:25,51", "05:31,19", "05:33,04", "05:41,79"]}}
132, "Vert": {"50 NL": {"50m": ["00:29,84", "00:30,05", "00:30,26", "00:30,77", "00:30,85", "00:31,48"], "25m": ["00:29,14", "00:29,35", "00:29,56", "00:30,07", "00:30,15", "00:30,78"]}, "100 NL": {"50m": ["01:04,44", "01:04,89", "01:05,34", "01:06,44", "01:06,63", "01:07,98"], "25m": ["01:03,24", "01:03,69", "01:04,14", "01:05,24", "01:05,43", "01:06,78"]}, "200 NL": {"50m": ["02:20,76", "02:21,74", "02:22,73", "02:25,12", "02:25,55", "02:28,50"], "25m": ["02:17,86", "02:18,84", "02:19,83", "02:22,22", "02:22,65", "02:25,60"]}, "400 NL": {"50m": ["04:55,22", "04:57,28", "04:59,35", "05:04,37", "05:05,26", "05:11,46"], "25m": ["04:49,02", "04:51,08", "04:53,15", "04:58,17", "04:59,06", "05:05,26"]}, "800 NL": {"50m": ["10:13,38", "10:17,67", "10:21,97", "10:32,39", "10:34,23", "10:47,12"], "25m": ["10:00,48", "10:04,77", "10:09,07", "10:19,49", "10:21,33", "10:34,22"]}, "1500 NL": {"50m": ["19:33,57", "19:41,78", "19:50,00", "20:09,95", "20:13,47", "20:38,12"], "25m": ["19:09,07", "19:17,28", "19:25,50", "19:45,45", "19:48,97", "20:13,62"]}, "50 Dos": {"50m": ["00:34,00", "00:34,24", "00:34,48", "00:35,05", "00:35,16", "00:35,97"], "25m": ["00:32,70", "00:32,94", "00:33,18", "00:33,75", "00:33,86", "00:34,67"]}, "100 Dos": {"50m": ["01:13,68", "01:14,19", "01:14,71", "01:15,96", "01:16,19", "01:18,40"], "25m": ["01:11,38", "01:11,89", "01:12,41", "01:13,66", "01:13,89", "01:16,10"]}, "200 Dos": {"50m": ["02:38,27", "02:39,28", "02:40,49", "02:43,18", "02:43,65", "02:52,03"], "25m": ["02:32,87", "02:33,88", "02:35,09", "02:37,78", "02:38,25", "02:46,63"]}, "50 Brasse": {"50m": ["00:37,55", "00:37,81", "00:38,08", "00:38,71", "00:38,83", "00:39,62"], "25m": ["00:36,85", "00:37,11", "00:37,38", "00:38,01", "00:38,13", "00:38,92"]}, "100 Brasse": {"50m": ["01:23,42", "01:24,00", "01:24,59", "01:26,01", "01:26,26", "01:28,01"], "25m": ["01:21,52", "01:22,10", "01:22,69", "01:24,11", "01:24,36", "01:26,11"]}, "200 Brasse": {"50m": ["02:58,72", "02:59,97", "03:01,22", "03:04,26", "03:04,80", "03:09,11"], "25m": ["02:54,22", "02:55,47", "02:56,72", "02:59,76", "03:00,30", "03:04,61"]}, "50 Pap": {"50m": ["00:31,67", "00:31,89", "00:32,11", "00:32,65", "00:32,75", "00:33,41"], "25m": ["00:31,07", "00:31,29", "00:31,51", "00:32,05", "00:32,15", "00:32,81"]}, "100 Pap": {"50m": ["01:12,76", "01:13,27", "01:13,78", "01:15,02", "01:15,23", "01:16,76"], "25m": ["01:11,36", "01:11,87", "01:12,38", "01:13,62", "01:13,83", "01:15,36"]}, "200 Pap": {"50m": ["02:42,58", "02:43,72", "02:44,86", "02:47,62", "02:48,11", "02:54,14"], "25m": ["02:39,28", "02:40,42", "02:41,56", "02:44,32", "02:44,81", "02:50,84"]}, "200 4N": {"50m": ["02:40,70", "02:41,82", "02:42,95", "02:45,68", "02:46,16", "02:49,54"], "25m": ["02:37,30", "02:38,42", "02:39,55", "02:42,28", "02:42,76", "02:46,14"]}, "400 4N": {"50m": ["05:41,00", "05:43,38", "05:45,77", "05:51,57", "05:52,59", "05:59,76"], "25m": ["05:33,50", "05:35,88", "05:38,27", "05:44,07", "05:45,09", "05:52,26"]}}, "Jaune": {"50 NL": {"50m": ["00:30,72", "00:30,92", "00:31,13", "00:31,66", "00:31,76", "00:32,41"], "25m": ["00:30,02", "00:30,22", "00:30,43", "00:30,96", "00:31,06", "00:31,71"]}, "100 NL": {"50m": ["01:07,53", "01:07,98", "01:08,44", "01:09,59", "01:09,83", "01:11,24"], "25m": ["01:06,33", "01:06,78", "01:07,24", "01:08,39", "01:08,63", "01:10,04"]}, "200 NL": {"50m": ["02:27,28", "02:28,27", "02:29,27", "02:31,77", "02:32,29", "02:35,38"], "25m": ["02:24,38", "02:25,37", "02:26,37", "02:28,87", "02:29,39", "02:32,48"]}, "400 NL": {"50m": ["05:08,68", "05:10,76", "05:12,85", "05:18,09", "05:19,18", "05:25,66"], "25m": ["05:02,48", "05:04,56", "05:06,65", "05:11,89", "05:12,98", "05:19,46"]}, "800 NL": {"50m": ["10:34,00", "10:38,28", "10:42,56", "10:53,34", "10:55,56", "11:08,87"], "25m": ["10:21,10", "10:25,38", "10:29,66", "10:40,44", "10:42,66", "10:55,97"]}, "1500 NL": {"50m": ["19:58,50", "20:06,59", "20:14,68", "20:35,05", "20:39,25", "21:04,42"], "25m": ["19:34,00", "19:42,09", "19:50,18", "20:10,55", "20:14,75", "20:39,92"]}, "50 Dos": {"50m": ["00:36,00", "00:36,24", "00:36,49", "00:37,10", "00:37,22", "00:37,98"], "25m": ["00:34,70", "00:34,94", "00:35,19", "00:35,80", "00:35,92", "00:36,68"]}, "100 Dos": {"50m": ["01:17,04", "01:17,56", "01:18,08", "01:19,39", "01:19,66", "01:21,28"], "25m": ["01:14,74", "01:15,26", "01:15,78", "01:17,09", "01:17,36", "01:18,98"]}, "200 Dos": {"50m": ["02:45,31", "02:46,42", "02:47,54", "02:50,35", "02:50,93", "02:57,35"], "25m": ["02:39,91", "02:41,02", "02:42,14", "02:44,95", "02:45,53", "02:51,95"]}, "50 Brasse": {"50m": ["00:39,00", "00:39,26", "00:39,53", "00:40,19", "00:40,33", "00:41,15"], "25m": ["00:38,30", "00:38,56", "00:38,83", "00:39,49", "00:39,63", "00:40,45"]}, "100 Brasse": {"50m": ["01:27,07", "01:27,66", "01:28,25", "01:29,73", "01:30,03", "01:31,86"], "25m": ["01:25,17", "01:25,76", "01:26,35", "01:27,83", "01:28,13", "01:29,96"]}, "200 Brasse": {"50m": ["03:02,76", "03:03,99", "03:05,23", "03:08,33", "03:08,97", "03:14,96"], "25m": ["02:58,26", "02:59,49", "03:00,73", "03:03,83", "03:04,47", "03:10,46"]}, "50 Pap": {"50m": ["00:32,93", "00:33,15", "00:33,37", "00:33,93", "00:34,05", "00:34,74"], "25m": ["00:32,33", "00:32,55", "00:32,77", "00:33,33", "00:33,45", "00:34,14"]}, "100 Pap": {"50m": ["01:16,09", "01:16,60", "01:17,12", "01:18,41", "01:18,68", "01:20,27"], "25m": ["01:14,69", "01:15,20", "01:15,72", "01:17,01", "01:17,28", "01:18,87"]}, "200 Pap": {"50m": ["02:49,75", "02:50,89", "02:52,04", "02:54,93", "02:55,52", "02:59,53"], "25m": ["02:46,45", "02:47,59", "02:48,74", "02:51,63", "02:52,22", "02:56,23"]}, "200 4N": {"50m": ["02:47,82", "02:48,95", "02:50,09", "02:52,94", "02:53,53", "02:57,05"], "25m": ["02:44,42", "02:45,55", "02:46,69", "02:49,54", "02:50,13", "02:53,65"]}, "400 4N": {"50m": ["05:50,50", "05:52,86", "05:55,23", "06:01,19", "06:02,42", "06:09,78"], "25m": ["05:43,00", "05:45,36", "05:47,73", "05:53,69", "05:54,92", "06:02,28"]}}}, "MESSIEURS": {"Bleu_ChampLigue": {"50 NL": {"50m": ["00:24,77", "00:25,48", "00:25,91", "00:26,39", "00:27,17", "00:28,93"], "25m": ["00:24,07", "00:24,78", "00:25,21", "00:25,69", "00:26,47", "00:28,23"]}, "100 NL": {"50m": ["00:54,56", "00:56,12", "00:56,95", "00:58,03", "00:59,77", "01:03,62"], "25m": ["00:53,06", "00:54,62", "00:55,45", "00:56,53", "00:58,27", "01:02,12"]}, "200 NL": {"50m": ["02:00,47", "02:03,05", "02:04,91", "02:07,12", "02:11,09", "02:20,06"], "25m": ["01:56,87", "01:59,45", "02:01,31", "02:03,52", "02:07,49", "02:16,46"]}, "400 NL": {"50m": ["04:18,36", "04:23,30", "04:27,26", "04:32,71", "04:41,51", "04:56,81"], "25m": ["04:10,66", "04:15,60", "04:19,56", "04:25,01", "04:33,81", "04:49,11"]}, "800 NL": {"50m": ["08:55,00", "09:10,00", "09:15,00", "09:25,00", "09:38,00", "10:16,22"], "25m": ["08:39,10", "08:54,10", "08:59,10", "09:09,10", "09:22,10", "10:00,32"]}, "1500 NL": {"50m": ["17:35,00", "17:45,00", "17:55,00", "18:10,00", "18:25,00", "19:50,00"], "25m": ["17:04,90", "17:14,90", "17:24,90", "17:39,90", "17:54,90", "19:19,90"]}, "50 Dos": {"50m": ["00:29,17", "00:30,10", "00:30,55", "00:31,15", "00:32,10", "00:34,64"], "25m": ["00:27,67", "00:28,60", "00:29,05", "00:29,65", "00:30,60", "00:33,14"]}, "100 Dos": {"50m": ["01:02,86", "01:04,30", "01:05,30", "01:06,56", "01:08,50", "01:14,66"], "25m": ["00:59,86", "01:01,30", "01:02,30", "01:03,56", "01:05,50", "01:11,66"]}, "200 Dos": {"50m": ["02:18,42", "02:21,39", "02:23,29", "02:26,14", "02:30,50", "02:41,06"], "25m": ["02:11,52", "02:14,49", "02:16,39", "02:19,24", "02:23,60", "02:34,16"]}, "50 Brasse": {"50m": ["00:31,57", "00:32,40", "00:32,96", "00:33,58", "00:34,60", "00:37,89"], "25m": ["00:30,47", "00:31,30", "00:31,86", "00:32,48", "00:33,50", "00:36,79"]}
132, "100 Brasse": {"50m": ["01:11,26", "01:12,76", "01:13,85", "01:15,31", "01:17,76", "01:23,75"], "25m": ["01:08,76", "01:10,26", "01:11,35", "01:12,81", "01:15,26", "01:21,25"]}, "200 Brasse": {"50m": ["02:35,07", "02:38,33", "02:40,35", "02:43,14", "02:48,63", "03:01,74"], "25m": ["02:29,17", "02:32,43", "02:34,45", "02:37,24", "02:42,73", "02:55,84"]}, "50 Pap": {"50m": ["00:26,58", "00:27,46", "00:27,91", "00:28,47", "00:29,34", "00:31,83"], "25m": ["00:25,88", "00:26,76", "00:27,21", "00:27,77", "00:28,64", "00:31,13"]}, "100 Pap": {"50m": ["00:59,66", "01:01,41", "01:02,39", "01:03,46", "01:05,59", "01:13,17"], "25m": ["00:58,26", "01:00,01", "01:00,99", "01:02,06", "01:04,19", "01:11,77"]}, "200 Pap": {"50m": ["02:18,34", "02:21,23", "02:23,44", "02:26,21", "02:30,37", "02:44,48"], "25m": ["02:15,04", "02:17,93", "02:20,14", "02:22,91", "02:27,07", "02:41,18"]}, "200 4N": {"50m": ["02:17,69", "02:20,51", "02:22,68", "02:25,49", "02:29,74", "02:38,67"], "25m": ["02:13,59", "02:16,41", "02:18,58", "02:21,39", "02:25,64", "02:34,57"]}, "400 4N": {"50m": ["04:53,68", "04:59,80", "05:04,20", "05:07,25", "05:19,15", "05:41,48"], "25m": ["04:44,68", "04:50,80", "04:55,20", "04:58,25", "05:10,15", "05:32,48"]}}, "Vert": {"50 NL": {"50m": ["00:25,98", "00:26,60", "00:26,97", "00:27,41", "00:28,19", "00:29,69"], "25m": ["00:25,28", "00:25,90", "00:26,27", "00:26,71", "00:27,49", "00:28,99"]}, "100 NL": {"50m": ["00:56,46", "00:57,82", "00:58,61", "00:59,57", "01:01,26", "01:05,41"], "25m": ["00:54,96", "00:56,32", "00:57,11", "00:58,07", "00:59,76", "01:03,91"]}, "200 NL": {"50m": ["02:05,50", "02:08,51", "02:10,27", "02:12,40", "02:16,17", "02:24,24"], "25m": ["02:01,90", "02:04,91", "02:06,67", "02:08,80", "02:12,57", "02:20,64"]}, "400 NL": {"50m": ["04:25,51", "04:31,88", "04:35,60", "04:40,11", "04:48,08", "05:05,73"], "25m": ["04:17,81", "04:24,18", "04:27,90", "04:32,41", "04:40,38", "04:58,03"]}, "800 NL": {"50m": ["09:07,90", "09:21,05", "09:28,72", "09:38,03", "09:54,47", "10:25,90"], "25m": ["08:52,00", "09:05,15", "09:12,82", "09:22,13", "09:38,57", "10:10,00"]}, "1500 NL": {"50m": ["18:01,00", "18:26,94", "18:42,08", "19:00,46", "19:32,89", "20:12,50"], "25m": ["17:30,90", "17:56,84", "18:11,98", "18:30,36", "19:02,79", "19:42,40"]}, "50 Dos": {"50m": ["00:30,89", "00:31,63", "00:32,06", "00:32,59", "00:33,52", "00:35,87"], "25m": ["00:29,39", "00:30,13", "00:30,56", "00:31,09", "00:32,02", "00:34,37"]}, "100 Dos": {"50m": ["01:05,78", "01:07,36", "01:08,28", "01:09,40", "01:11,37", "01:17,73"], "25m": ["01:02,78", "01:04,36", "01:05,28", "01:06,40", "01:08,37", "01:14,73"]}, "200 Dos": {"50m": ["02:22,66", "02:26,08", "02:28,08", "02:30,51", "02:34,79", "02:46,97"], "25m": ["02:15,76", "02:19,18", "02:21,18", "02:23,61", "02:27,89", "02:40,07"]}, "50 Brasse": {"50m": ["00:33,47", "00:34,27", "00:34,74", "00:35,31", "00:36,31", "00:39,09"], "25m": ["00:32,37", "00:33,17", "00:33,64", "00:34,21", "00:35,21", "00:37,99"]}, "100 Brasse": {"50m": ["01:13,99", "01:15,77", "01:16,80", "01:18,06", "01:20,28", "01:26,58"], "25m": ["01:11,49", "01:13,27", "01:14,30", "01:15,56", "01:17,78", "01:24,08"]}, "200 Brasse": {"50m": ["02:43,18", "02:47,10", "02:49,38", "02:52,15", "02:57,05", "03:08,55"], "25m": ["02:37,28", "02:41,20", "02:43,48", "02:46,25", "02:51,15", "03:02,65"]}, "50 Pap": {"50m": ["00:28,60", "00:29,29", "00:29,69", "00:30,17", "00:31,03", "00:33,37"], "25m": ["00:27,90", "00:28,59", "00:28,99", "00:29,47", "00:30,33", "00:32,67"]}, "100 Pap": {"50m": ["01:03,91", "01:05,44", "01:06,34", "01:07,43", "01:09,34", "01:16,54"], "25m": ["01:02,51", "01:04,04", "01:04,94", "01:06,03", "01:07,94", "01:15,14"]}, "200 Pap": {"50m": ["02:25,38", "02:28,87", "02:30,90", "02:33,38", "02:37,74", "02:51,52"], "25m": ["02:22,08", "02:25,57", "02:27,60", "02:30,08", "02:34,44", "02:48,22"]}, "200 4N": {"50m": ["02:22,60", "02:26,02", "02:28,02", "02:30,44", "02:34,72", "02:42,81"], "25m": ["02:18,50", "02:21,92", "02:23,92", "02:26,34", "02:30,62", "02:38,71"]}, "400 4N": {"50m": ["05:03,65", "05:10,94", "05:15,19", "05:20,35", "05:29,46", "05:52,32"], "25m": ["04:54,65", "05:01,94", "05:06,19", "05:11,35", "05:20,46", "05:43,32"]}}, "Jaune": {"50 NL": {"50m": ["00:26,35", "00:26,98", "00:27,35", "00:27,80", "00:28,59", "00:30,61"], "25m": ["00:25,65", "00:26,28", "00:26,65", "00:27,10", "00:27,89", "00:29,91"]}, "100 NL": {"50m": ["00:58,50", "00:59,90", "01:00,72", "01:01,72", "01:03,48", "01:07,43"], "25m": ["00:57,00", "00:58,40", "00:59,22", "01:00,22", "01:01,98", "01:05,93"]}, "200 NL": {"50m": ["02:11,60", "02:14,76", "02:16,60", "02:18,84", "02:22,79", "02:28,70"], "25m": ["02:08,00", "02:11,16", "02:13,00", "02:15,24", "02:19,19", "02:25,10"]}, "400 NL": {"50m": ["04:42,50", "04:49,28", "04:53,24", "04:58,04", "05:06,51", "05:15,19"], "25m": ["04:34,80", "04:41,58", "04:45,54", "04:50,34", "04:58,81", "05:07,49"]}, "800 NL": {"50m": ["09:40,00", "09:53,90", "10:02,05", "10:11,90", "10:29,30", "10:45,26"], "25m": ["09:24,10", "09:38,00", "09:46,15", "09:56,00", "10:13,40", "10:29,36"]}, "1500 NL": {"50m": ["18:21,00", "18:47,42", "19:02,84", "19:21,56", "19:54,59", "20:50,00"], "25m": ["17:50,90", "18:17,32", "18:32,74", "18:51,46", "19:24,49", "20:19,90"]}, "50 Dos": {"50m": ["00:31,40", "00:32,15", "00:32,59", "00:33,13", "00:34,07", "00:37,08"], "25m": ["00:29,90", "00:30,65", "00:31,09", "00:31,63", "00:32,57", "00:35,58"]}, "100 Dos": {"50m": ["01:08,90", "01:10,55", "01:11,52", "01:12,69", "01:14,76", "01:20,82"], "25m": ["01:05,90", "01:07,55", "01:08,52", "01:09,69", "01:11,76", "01:17,82"]}, "200 Dos": {"50m": ["02:31,30", "02:34,93", "02:37,05", "02:39,62", "02:44,16", "02:54,40"], "25m": ["02:24,40", "02:28,03", "02:30,15", "02:32,72", "02:37,26", "02:47,50"]}, "50 Brasse": {"50m": ["00:33,99", "00:34,81", "00:35,28", "00:35,86", "00:36,88", "00:40,30"], "25m": ["00:32,89", "00:33,71", "00:34,18", "00:34,76", "00:35,78", "00:39,20"]}, "100 Brasse": {"50m": ["01:15,90", "01:17,72", "01:18,78", "01:20,07", "01:22,35", "01:29,26"], "25m": ["01:13,40", "01:15,22", "01:16,28", "01:17,57", "01:19,85", "01:26,76"]}, "200 Brasse": {"50m": ["02:48,90", "02:52,95", "02:55,32", "02:58,19", "03:03,26", "03:12,81"], "25m": ["02:43,00", "02:47,05", "02:49,42", "02:52,29", "02:57,36", "03:06,91"]}, "50 Pap": {"50m": ["00:28,75", "00:29,44", "00:29,84", "00:30,33", "00:31,19", "00:34,40"], "25m": ["00:28,05", "00:28,74", "00:29,14", "00:29,63", "00:30,49", "00:33,70"]}, "100 Pap": {"50m": ["01:05,84", "01:07,42", "01:08,34", "01:09,46", "01:11,44", "01:18,91"], "25m": ["01:04,44", "01:06,
13202", "01:06,94", "01:08,06", "01:10,04", "01:17,51"]}, "200 Pap": {"50m": ["02:31,50", "02:35,14", "02:37,26", "02:39,83", "02:44,38", "02:59,09"], "25m": ["02:28,20", "02:31,84", "02:33,96", "02:36,53", "02:41,08", "02:55,79"]}, "200 4N": {"50m": ["02:30,20", "02:33,80", "02:35,91", "02:38,46", "02:42,97", "02:47,85"], "25m": ["02:26,10", "02:29,70", "02:31,81", "02:34,36", "02:38,87", "02:43,75"]}, "400 4N": {"50m": ["05:19,65", "05:27,32", "05:31,80", "05:37,23", "05:46,82", "06:03,22"], "25m": ["05:10,65", "05:18,32", "05:22,80", "05:28,23", "05:37,82", "05:54,22"]}}}}, "Vers_Nationales": {"note": "Seuils par niveau, bassin 50m. Dans ce doc FranceU18=OpenEte. 19+ : colonne finale = France Élite / Giant Open / Open d'Été.", "data": {"DAMES": {"U14": {"50 NL": {"Jaune": "00:32,41", "Vert": "00:31,48", "ChampLigue": "00:30,75", "ChallengeNat": "00:30,00", "FranceU18": "00:28,58", "OpenEte": "00:28,58", "FranceElite": "00:26,84"}, "100 NL": {"Jaune": "01:11,24", "Vert": "01:07,98", "ChampLigue": "01:06,11", "ChallengeNat": "01:05,44", "FranceU18": "01:02,33", "OpenEte": "01:02,33", "FranceElite": "00:58,10"}, "200 NL": {"Jaune": "02:35,38", "Vert": "02:28,50", "ChampLigue": "02:24,51", "ChallengeNat": "02:23,06", "FranceU18": "02:16,25", "OpenEte": "02:16,25", "FranceElite": "02:06,50"}, "400 NL": {"Jaune": "05:25,66", "Vert": "05:11,46", "ChampLigue": "05:02,94", "ChallengeNat": "04:59,08", "FranceU18": "04:44,84", "OpenEte": "04:44,84", "FranceElite": "04:26,55"}, "800 NL": {"Jaune": "11:08,87", "Vert": "10:47,12", "ChampLigue": "10:25,00", "ChallengeNat": "10:13,83", "FranceU18": "09:44,60", "OpenEte": "09:44,60", "FranceElite": "09:08,98"}, "1500 NL": {"Jaune": "21:04,42", "Vert": "20:38,12", "ChampLigue": "20:05,00", "ChallengeNat": "19:49,92", "FranceU18": "18:53,26", "OpenEte": "18:53,26", "FranceElite": "17:36,38"}, "50 Dos": {"Jaune": "00:37,98", "Vert": "00:35,97", "ChampLigue": "00:35,17", "ChallengeNat": "00:34,44", "FranceU18": "00:32,80", "OpenEte": "00:32,80", "FranceElite": "00:30,61"}, "100 Dos": {"Jaune": "01:21,28", "Vert": "01:18,40", "ChampLigue": "01:16,49", "ChallengeNat": "01:14,41", "FranceU18": "01:10,17", "OpenEte": "01:10,17", "FranceElite": "01:06,11"}, "200 Dos": {"Jaune": "02:57,35", "Vert": "02:52,03", "ChampLigue": "02:47,03", "ChallengeNat": "02:40,03", "FranceU18": "02:32,41", "OpenEte": "02:32,41", "FranceElite": "02:23,92"}, "50 Brasse": {"Jaune": "00:41,15", "Vert": "00:39,62", "ChampLigue": "00:38,82", "ChallengeNat": "00:38,22", "FranceU18": "00:36,40", "OpenEte": "00:36,40", "FranceElite": "00:33,94"}, "100 Brasse": {"Jaune": "01:31,86", "Vert": "01:28,01", "ChampLigue": "01:25,45", "ChallengeNat": "01:23,64", "FranceU18": "01:19,66", "OpenEte": "01:19,66", "FranceElite": "01:14,56"}, "200 Brasse": {"Jaune": "03:14,96", "Vert": "03:09,11", "ChampLigue": "03:04,78", "ChallengeNat": "03:00,55", "FranceU18": "02:51,96", "OpenEte": "02:51,96", "FranceElite": "02:41,64"}, "50 Pap": {"Jaune": "00:34,74", "Vert": "00:33,41", "ChampLigue": "00:32,67", "ChallengeNat": "00:31,99", "FranceU18": "00:30,47", "OpenEte": "00:30,47", "FranceElite": "00:28,36"}, "100 Pap": {"Jaune": "01:20,27", "Vert": "01:16,76", "ChampLigue": "01:14,61", "ChallengeNat": "01:12,36", "FranceU18": "01:08,92", "OpenEte": "01:08,92", "FranceElite": "01:03,48"}, "200 Pap": {"Jaune": "02:59,53", "Vert": "02:54,14", "ChampLigue": "02:50,27", "ChallengeNat": "02:46,72", "FranceU18": "02:38,79", "OpenEte": "02:38,79", "FranceElite": "02:23,28"}, "200 4N": {"Jaune": "02:57,05", "Vert": "02:49,54", "ChampLigue": "02:44,74", "ChallengeNat": "02:41,83", "FranceU18": "02:34,13", "OpenEte": "02:34,13", "FranceElite": "02:23,98"}, "400 4N": {"Jaune": "06:09,78", "Vert": "05:59,76", "ChampLigue": "05:49,29", "ChallengeNat": "05:43,70", "FranceU18": "05:27,34", "OpenEte": "05:27,34", "FranceElite": "05:05,32"}}, "U15": {"50 NL": {"Jaune": "00:31,76", "Vert": "00:30,85", "ChampLigue": "00:29,98", "ChallengeNat": "00:29,27", "FranceU18": "00:28,01", "OpenEte": "00:28,01", "FranceElite": "00:26,84"}, "100 NL": {"Jaune": "01:09,83", "Vert": "01:06,63", "ChampLigue": "01:04,59", "ChallengeNat": "01:03,25", "FranceU18": "01:00,53", "OpenEte": "01:00,53", "FranceElite": "00:58,10"}, "200 NL": {"Jaune": "02:32,29", "Vert": "02:25,55", "ChampLigue": "02:21,08", "ChallengeNat": "02:17,79", "FranceU18": "02:11,86", "OpenEte": "02:11,86", "FranceElite": "02:06,50"}, "400 NL": {"Jaune": "05:19,18", "Vert": "05:05,26", "ChampLigue": "04:56,06", "ChallengeNat": "04:49,32", "FranceU18": "04:36,87", "OpenEte": "04:36,87", "FranceElite": "04:26,55"}, "800 NL": {"Jaune": "10:55,56", "Vert": "10:34,23", "ChampLigue": "10:10,00", "ChallengeNat": "09:51,04", "FranceU18": "09:25,59", "OpenEte": "09:25,59", "FranceElite": "09:08,98"}, "1500 NL": {"Jaune": "20:39,25", "Vert": "20:13,47", "ChampLigue": "19:30,00", "ChallengeNat": "18:56,48", "FranceU18": "18:07,55", "OpenEte": "18:07,55", "FranceElite": "17:36,38"}, "50 Dos": {"Jaune": "00:37,22", "Vert": "00:35,16", "ChampLigue": "00:34,33", "ChallengeNat": "00:33,41", "FranceU18": "00:31,98", "OpenEte": "00:31,98", "FranceElite": "00:30,61"}, "100 Dos": {"Jaune": "01:19,66", "Vert": "01:16,19", "ChampLigue": "01:13,93", "ChallengeNat": "01:12,35", "FranceU18": "01:09,24", "OpenEte": "01:09,24", "FranceElite": "01:06,11"}, "200 Dos": {"Jaune": "02:50,93", "Vert": "02:43,65", "ChampLigue": "02:38,96", "ChallengeNat": "02:35,79", "FranceU18": "02:29,09", "OpenEte": "02:29,09", "FranceElite": "02:23,92"}, "50 Brasse": {"Jaune": "00:40,33", "Vert": "00:38,83", "ChampLigue": "00:37,93", "ChallengeNat": "00:36,94", "FranceU18": "00:35,35", "OpenEte": "00:35,35", "FranceElite": "00:33,94"}, "100 Brasse": {"Jaune": "01:30,03", "Vert": "01:26,26", "ChampLigue": "01:23,41", "ChallengeNat": "01:20,54", "FranceU18": "01:17,08", "OpenEte": "01:17,08", "FranceElite": "01:14,56"}, "200 Brasse": {"Jaune": "03:08,97", "Vert": "03:04,80", "ChampLigue": "02:59,20", "ChallengeNat": "02:54,23", "FranceU18": "02:46,73", "OpenEte": "02:46,73", "FranceElite": "02:41,64"}, "50 Pap": {"Jaune": "00:34,05", "Vert": "00:32,75", "ChampLigue": "00:31,92", "ChallengeNat": "00:30,91", "FranceU18": "00:29,58", "OpenEte": "00:29,58", "FranceElite": "00:28,36"}, "100 Pap": {"Jaune": "01:18,68", "Vert": "01:15,23", "ChampLigue": "01:12,52", "ChallengeNat": "01:09,53", "FranceU18": "01:06,54", "OpenEte": "01:06,54", "FranceElite": "01:03,48"}, "200 Pap": {"Jaune": "02:55,52", "Vert": "02:48,11", "ChampLigue": "02:42,80", "ChallengeNat": "02:37,96", "FranceU18": "02:31,16", "OpenEte": "02:31,16", "FranceElite": "02:23,28"}, "200 4N": {"Jaune": "02:53,53", "Vert": "02:46,16", "ChampLigue": "02:41,29", "ChallengeNat": "02:37,68", "FranceU18": "02:30,89", "OpenEte": "02:30,89", "FranceElite": "02:23,98"}, "400 4N": {"Jaune": "06:02,42", "Vert": "05:52,59", "ChampLigue": "05:40,54", "ChallengeNat": "05:29,19", "FranceU18": "05:15,02", "OpenEte": "05:15,02", "FranceElite": "05:05,32"}}, "U16": {"50 NL": {"Jaune": "00:31,66", "Vert": "00:30,77", "ChampLigue": "00:29,93", "ChallengeNat": "00:28,81", "FranceU18": "00:27,71", "OpenEte": "00:27,71", "FranceElite": "00:26,84"}, "100 NL": {"Jaune": "01:09,59", "Vert": "01:06,44", "ChampLigue": "01:04,19", "ChallengeNat": "01:02,30", "FranceU18": "00:59,91", "OpenEte": "00:59,91", "FranceElite": "00:58,10"}, "200 NL": {"Jaune": "02:31,77", "Vert": "02:25,12", "ChampLigue": "02:20,28", "ChallengeNat": "02:16,07", "FranceU18": "02:10,84", "OpenEte": "02:10,84", "FranceElite": "02:06,50"}, "400 NL": {"Jaune": "05:18,09", "Vert": "05:04,37", "ChampLigue": "04:53,85", "ChallengeNat": "04:43,52", "FranceU18": "04:32,62", "OpenEte": "04:32,62", "FranceElite": "04:26,55"}, "800 NL": {"Jaune": "10:53,34", "Vert": "10:32,39", "ChampLigue": "10:04,00", "ChallengeNat": "09:44,04", "FranceU18": "09:21,58", "OpenEte": "09:21,58", "FranceElite": "09:08,98"}, "1500 NL": {"Jaune": "20:35,05", "Vert": "20:09,95", "ChampLigue": "19:15,00", "ChallengeNat": "18:38,79", "FranceU18": "17:55,76", "OpenEte": "17:55,76", "FranceElite": "17:36,38"}, "50 Dos": {"Jaune": "00:37,10", "Vert": "00:35,05", "ChampLigue": "00:34,07", "ChallengeNat": "00:32,70", "FranceU18": "00:31,45", "OpenEte": "00:31,45", "FranceElite": "00:30,61"}, "100 Dos": {"Jaune": "01:19,39", "Vert": "01:15,96", "ChampLigue": "01:13,34", "ChallengeNat": "01:10,77", "FranceU18": "01:08,05", "OpenEte": "01:08,05", "FranceElite": "01:06,11"}, "200 Dos": {"Jaune": "02:50,35", "Vert": "02:43,18", "ChampLigue": "02:37,77", "ChallengeNat": "02:32,68", "FranceU18": "02:26,81", "OpenEte": "02:26,81", "FranceElite": "02:23,92"}, "50 Brasse": {"Jaune": "00:40,19", "Vert": "00:38,71", "ChampLigue": "00:37,62", "ChallengeNat": "00:36,10", "FranceU18": "00:34,72", "OpenEte": "00:34,72", "FranceElite": "00:33,94"}, "100 Brasse": {"Jaune": "01:29,73", "Vert": "01:26,01", "ChampLigue": "01:22,94", "ChallengeNat": "01:19,48", "FranceU18": "01:16,43", "OpenEte": "01:16,43", "FranceElite": "01:14,56"}, "200 Brasse": {"Jaune": "03:08,33", "Vert": "03:04,26", "ChampLigue": "02:58,23", "ChallengeNat": "02:52,23", "FranceU18": "02:45,61", "OpenEte": "02:45,61", "FranceElite": "02:41,64"}, "50 Pap": {"Jaune": "00:33,93", "Vert": "00:32,65", "ChampLigue": "00:31,69", "ChallengeNat": "00:30,33", "FranceU18": "00:29,17", "OpenEte": "00:29,17", "FranceElite": "00:28,36"}, "100 Pap": {"Jaune": "01:18,41", "Vert": "01:15,02", "ChampLigue": "01:11,95", "ChallengeNat": "01:07,97", "FranceU18": "01:05,36", "OpenEte": "01:05,36", "FranceElite": "01:03,48"}, "200 Pap": {"Jaune": "02:54,93", "Vert": "02:47,62", "ChampLigue": "02:41,47", "ChallengeNat": "02:34,34", "FranceU18": "02:28,41", "OpenEte": "02:28,41", "FranceElite": "02:23,28"}, "200 4N": {"Jaune": "02:52,94", "Vert": "02:45,68", "ChampLigue": "02:39,97", "ChallengeNat": "02:34,07", "FranceU18": "02:28,15", "OpenEte": "02:28,15", "FranceElite": "02:23,98"}, "400 4N": {"Jaune": "06:01,19", "Vert": "05:51,57", "ChampLigue": "05:38,69", "ChallengeNat": "05:25,26", "FranceU18": "05:12,75", "OpenEte": "05:12,75", "FranceElite": "05:05,32"}}, "U17": {"50 NL": {"Jaune": "00:31,13", "Vert": "00:30,26", "ChampLigue": "00:29,42", "ChallengeNat": "00:28,28", "FranceU18": "00:27,33", "OpenEte": "00:27,33", "FranceElite": "00:26,84"}, "100 NL": {"Jaune": "01:08,44", "Vert": "01:05,34", "ChampLigue": "01:03,13", "ChallengeNat": "01:01,26", "FranceU18": "00:59,19", "OpenEte": "00:59,19", "FranceElite": "00:58,10"}, "200 NL": {"Jaune": "02:29,27", "Vert": "02:22,73", "ChampLigue": "02:17,83", "ChallengeNat": "02:13,10", "FranceU18": "02:08,60", "OpenEte": "02:08,60", "FranceElite": "02:06,50"}, "400 NL": {"Jaune": "05:12,85", "Vert": "04:59,35", "ChampLigue": "04:48,74", "ChallengeNat": "04:37,78", "FranceU18": "04:28,39", "OpenEte": "04:28,39", "FranceElite": "04:26,55"}, "800 NL": {"Jaune": "10:42,56", "Vert": "10:21,97", "ChampLigue": "09:59,00", "ChallengeNat": "09:29,18", "FranceU18": "09:09,94", "OpenEte": "09:09,94", "FranceElite": "09:08,98"}
132, "1500 NL": {"Jaune": "20:14,68", "Vert": "19:50,00", "ChampLigue": "19:05,00", "ChallengeNat": "18:20,28", "FranceU18": "17:43,08", "OpenEte": "17:43,08", "FranceElite": "17:36,38"}, "50 Dos": {"Jaune": "00:36,49", "Vert": "00:34,48", "ChampLigue": "00:33,51", "ChallengeNat": "00:32,18", "FranceU18": "00:31,10", "OpenEte": "00:31,10", "FranceElite": "00:30,61"}, "100 Dos": {"Jaune": "01:18,08", "Vert": "01:14,71", "ChampLigue": "01:12,05", "ChallengeNat": "01:09,28", "FranceU18": "01:06,94", "OpenEte": "01:06,94", "FranceElite": "01:06,11"}, "200 Dos": {"Jaune": "02:47,54", "Vert": "02:40,49", "ChampLigue": "02:35,31", "ChallengeNat": "02:30,73", "FranceU18": "02:25,64", "OpenEte": "02:25,64", "FranceElite": "02:23,92"}, "50 Brasse": {"Jaune": "00:39,53", "Vert": "00:38,08", "ChampLigue": "00:37,01", "ChallengeNat": "00:35,53", "FranceU18": "00:34,33", "OpenEte": "00:34,33", "FranceElite": "00:33,94"}, "100 Brasse": {"Jaune": "01:28,25", "Vert": "01:24,59", "ChampLigue": "01:21,70", "ChallengeNat": "01:18,70", "FranceU18": "01:16,04", "OpenEte": "01:16,04", "FranceElite": "01:14,56"}, "200 Brasse": {"Jaune": "03:05,23", "Vert": "03:01,22", "ChampLigue": "02:55,29", "ChallengeNat": "02:49,39", "FranceU18": "02:43,67", "OpenEte": "02:43,67", "FranceElite": "02:41,64"}, "50 Pap": {"Jaune": "00:33,37", "Vert": "00:32,11", "ChampLigue": "00:31,16", "ChallengeNat": "00:29,79", "FranceU18": "00:28,79", "OpenEte": "00:28,79", "FranceElite": "00:28,36"}, "100 Pap": {"Jaune": "01:17,12", "Vert": "01:13,78", "ChampLigue": "01:10,76", "ChallengeNat": "01:06,85", "FranceU18": "01:04,59", "OpenEte": "01:04,59", "FranceElite": "01:03,48"}, "200 Pap": {"Jaune": "02:52,04", "Vert": "02:44,86", "ChampLigue": "02:38,17", "ChallengeNat": "02:29,24", "FranceU18": "02:24,20", "OpenEte": "02:24,20", "FranceElite": "02:23,28"}, "200 4N": {"Jaune": "02:50,09", "Vert": "02:42,95", "ChampLigue": "02:37,47", "ChallengeNat": "02:32,09", "FranceU18": "02:26,95", "OpenEte": "02:26,95", "FranceElite": "02:23,98"}, "400 4N": {"Jaune": "05:55,23", "Vert": "05:45,77", "ChampLigue": "05:33,01", "ChallengeNat": "05:19,52", "FranceU18": "05:08,72", "OpenEte": "05:08,72", "FranceElite": "05:05,32"}}, "U18": {"50 NL": {"Jaune": "00:30,92", "Vert": "00:30,05", "ChampLigue": "00:29,15", "ChallengeNat": "00:27,78", "FranceU18": "00:27,09", "OpenEte": "00:27,09", "FranceElite": "00:26,84"}, "100 NL": {"Jaune": "01:07,98", "Vert": "01:04,89", "ChampLigue": "01:02,53", "ChallengeNat": "01:00,14", "FranceU18": "00:58,65", "OpenEte": "00:58,65", "FranceElite": "00:58,10"}, "200 NL": {"Jaune": "02:28,27", "Vert": "02:21,74", "ChampLigue": "02:16,55", "ChallengeNat": "02:10,93", "FranceU18": "02:07,55", "OpenEte": "02:07,55", "FranceElite": "02:06,50"}, "400 NL": {"Jaune": "05:10,76", "Vert": "04:57,28", "ChampLigue": "04:46,80", "ChallengeNat": "04:35,88", "FranceU18": "04:27,47", "OpenEte": "04:27,47", "FranceElite": "04:26,55"}, "800 NL": {"Jaune": "10:38,28", "Vert": "10:17,67", "ChampLigue": "09:59,00", "ChallengeNat": "09:28,20", "FranceU18": "09:09,46", "OpenEte": "09:09,46", "FranceElite": "09:08,98"}, "1500 NL": {"Jaune": "20:06,59", "Vert": "19:41,78", "ChampLigue": "19:05,00", "ChallengeNat": "18:13,35", "FranceU18": "17:39,73", "OpenEte": "17:39,73", "FranceElite": "17:36,38"}, "50 Dos": {"Jaune": "00:36,24", "Vert": "00:34,24", "ChampLigue": "00:33,21", "ChallengeNat": "00:31,68", "FranceU18": "00:30,86", "OpenEte": "00:30,86", "FranceElite": "00:30,61"}, "100 Dos": {"Jaune": "01:17,56", "Vert": "01:14,19", "ChampLigue": "01:11,47", "ChallengeNat": "01:08,42", "FranceU18": "01:06,53", "OpenEte": "01:06,53", "FranceElite": "01:06,11"}, "200 Dos": {"Jaune": "02:46,42", "Vert": "02:39,28", "ChampLigue": "02:33,99", "ChallengeNat": "02:28,96", "FranceU18": "02:24,78", "OpenEte": "02:24,78", "FranceElite": "02:23,92"}, "50 Brasse": {"Jaune": "00:39,26", "Vert": "00:37,81", "ChampLigue": "00:36,72", "ChallengeNat": "00:35,12", "FranceU18": "00:34,14", "OpenEte": "00:34,14", "FranceElite": "00:33,94"}, "100 Brasse": {"Jaune": "01:27,66", "Vert": "01:24,00", "ChampLigue": "01:20,91", "ChallengeNat": "01:17,17", "FranceU18": "01:15,30", "OpenEte": "01:15,30", "FranceElite": "01:14,56"}, "200 Brasse": {"Jaune": "03:03,99", "Vert": "02:59,97", "ChampLigue": "02:53,88", "ChallengeNat": "02:47,30", "FranceU18": "02:42,66", "OpenEte": "02:42,66", "FranceElite": "02:41,64"}, "50 Pap": {"Jaune": "00:33,15", "Vert": "00:31,89", "ChampLigue": "00:30,90", "ChallengeNat": "00:29,36", "FranceU18": "00:28,58", "OpenEte": "00:28,58", "FranceElite": "00:28,36"}, "100 Pap": {"Jaune": "01:16,60", "Vert": "01:13,27", "ChampLigue": "01:10,11", "ChallengeNat": "01:05,70", "FranceU18": "01:04,04", "OpenEte": "01:04,04", "FranceElite": "01:03,48"}, "200 Pap": {"Jaune": "02:50,89", "Vert": "02:43,72", "ChampLigue": "02:37,26", "ChallengeNat": "02:28,29", "FranceU18": "02:23,74", "OpenEte": "02:23,74", "FranceElite": "02:23,28"}, "200 4N": {"Jaune": "02:48,95", "Vert": "02:41,82", "ChampLigue": "02:35,91", "ChallengeNat": "02:29,02", "FranceU18": "02:25,47", "OpenEte": "02:25,47", "FranceElite": "02:23,98"}, "400 4N": {"Jaune": "05:52,86", "Vert": "05:43,38", "ChampLigue": "05:30,44", "ChallengeNat": "05:16,00", "FranceU18": "05:07,02", "OpenEte": "05:07,02", "FranceElite": "05:05,32"}}, "19+": {"50 NL": {"Jaune": "00:30,72", "Vert": "00:29,84", "ChampLigue": "00:29,00", "ChallengeNat": "00:27,78", "FranceElite": "00:26,84"}, "100 NL": {"Jaune": "01:07,53", "Vert": "01:04,44", "ChampLigue": "01:02,21", "ChallengeNat": "01:00,14", "FranceElite": "00:58,10"}, "200 NL": {"Jaune": "02:27,28", "Vert": "02:20,76", "ChampLigue": "02:15,86", "ChallengeNat": "02:10,93", "FranceElite": "02:06,50"}, "400 NL": {"Jaune": "05:08,68", "Vert": "04:55,22", "ChampLigue": "04:45,35", "ChallengeNat": "04:35,88", "FranceElite": "04:26,55"}, "800 NL": {"Jaune": "10:34,00", "Vert": "10:13,38", "ChampLigue": "09:59,00", "ChallengeNat": "09:28,20", "FranceElite": "09:08,98"}
132, "1500 NL": {"Jaune": "19:58,50", "Vert": "19:33,57", "ChampLigue": "19:05,00", "ChallengeNat": "18:13,35", "FranceElite": "17:36,38"}, "50 Dos": {"Jaune": "00:36,00", "Vert": "00:34,00", "ChampLigue": "00:33,05", "ChallengeNat": "00:31,68", "FranceElite": "00:30,61"}, "100 Dos": {"Jaune": "01:17,04", "Vert": "01:13,68", "ChampLigue": "01:11,11", "ChallengeNat": "01:08,42", "FranceElite": "01:06,11"}, "200 Dos": {"Jaune": "02:45,31", "Vert": "02:38,27", "ChampLigue": "02:33,30", "ChallengeNat": "02:28,96", "FranceElite": "02:23,92"}, "50 Brasse": {"Jaune": "00:39,00", "Vert": "00:37,55", "ChampLigue": "00:36,53", "ChallengeNat": "00:35,12", "FranceElite": "00:33,94"}, "100 Brasse": {"Jaune": "01:27,07", "Vert": "01:23,42", "ChampLigue": "01:20,49", "ChallengeNat": "01:17,17", "FranceElite": "01:14,56"}, "200 Brasse": {"Jaune": "03:02,76", "Vert": "02:58,72", "ChampLigue": "02:53,00", "ChallengeNat": "02:47,30", "FranceElite": "02:41,64"}, "50 Pap": {"Jaune": "00:32,93", "Vert": "00:31,67", "ChampLigue": "00:30,74", "ChallengeNat": "00:29,36", "FranceElite": "00:28,36"}, "100 Pap": {"Jaune": "01:16,09", "Vert": "01:12,76", "ChampLigue": "01:09,75", "ChallengeNat": "01:05,70", "FranceElite": "01:03,48"}, "200 Pap": {"Jaune": "02:49,75", "Vert": "02:42,58", "ChampLigue": "02:36,32", "ChallengeNat": "02:28,29", "FranceElite": "02:23,28"}, "200 4N": {"Jaune": "02:47,82", "Vert": "02:40,70", "ChampLigue": "02:35,12", "ChallengeNat": "02:29,02", "FranceElite": "02:23,98"}, "400 4N": {"Jaune": "05:50,50", "Vert": "05:41,00", "ChampLigue": "05:28,75", "ChallengeNat": "05:16,00", "FranceElite": "05:05,32"}}}, "MESSIEURS": {"U14": {"50 NL": {"Jaune": "00:30,61", "Vert": "00:29,69", "ChampLigue": "00:28,93", "ChallengeNat": "00:28,02", "FranceU18": "00:26,69", "OpenEte": "00:26,69", "FranceElite": "00:23,62"}, "100 NL": {"Jaune": "01:07,43", "Vert": "01:05,41", "ChampLigue": "01:03,62", "ChallengeNat": "01:01,26", "FranceU18": "00:58,35", "OpenEte": "00:58,35", "FranceElite": "00:51,45"}, "200 NL": {"Jaune": "02:28,70", "Vert": "02:24,24", "ChampLigue": "02:20,06", "ChallengeNat": "02:14,21", "FranceU18": "02:07,82", "OpenEte": "02:07,82", "FranceElite": "01:53,42"}, "400 NL": {"Jaune": "05:15,19", "Vert": "05:05,73", "ChampLigue": "04:56,81", "ChallengeNat": "04:44,19", "FranceU18": "04:30,66", "OpenEte": "04:30,66", "FranceElite": "04:00,52"}, "800 NL": {"Jaune": "10:45,26", "Vert": "10:25,90", "ChampLigue": "10:16,22", "ChallengeNat": "09:48,60", "FranceU18": "09:20,58", "OpenEte": "09:20,58", "FranceElite": "08:19,70"}, "1500 NL": {"Jaune": "20:50,00", "Vert": "20:12,50", "ChampLigue": "19:50,00", "ChallengeNat": "18:51,63", "FranceU18": "17:57,75", "OpenEte": "17:57,75", "FranceElite": "15:59,20"}, "50 Dos": {"Jaune": "00:37,08", "Vert": "00:35,87", "ChampLigue": "00:34,64", "ChallengeNat": "00:32,56", "FranceU18": "00:31,01", "OpenEte": "00:31,01", "FranceElite": "00:27,01"}, "100 Dos": {"Jaune": "01:20,82", "Vert": "01:17,73", "ChampLigue": "01:14,66", "ChallengeNat": "01:10,88", "FranceU18": "01:07,51", "OpenEte": "01:07,51", "FranceElite": "00:58,30"}, "200 Dos": {"Jaune": "02:54,40", "Vert": "02:46,97", "ChampLigue": "02:41,06", "ChallengeNat": "02:34,72", "FranceU18": "02:27,36", "OpenEte": "02:27,36", "FranceElite": "02:08,28"}, "50 Brasse": {"Jaune": "00:40,30", "Vert": "00:39,09", "ChampLigue": "00:37,89", "ChallengeNat": "00:36,08", "FranceU18": "00:34,37", "OpenEte": "00:34,37", "FranceElite": "00:29,65"}, "100 Brasse": {"Jaune": "01:29,26", "Vert": "01:26,58", "ChampLigue": "01:23,75", "ChallengeNat": "01:19,26", "FranceU18": "01:15,49", "OpenEte": "01:15,49", "FranceElite": "01:05,27"}, "200 Brasse": {"Jaune": "03:12,81", "Vert": "03:08,55", "ChampLigue": "03:01,74", "ChallengeNat": "02:53,67", "FranceU18": "02:45,40", "OpenEte": "02:45,40", "FranceElite": "02:24,24"}, "50 Pap": {"Jaune": "00:34,40", "Vert": "00:33,37", "ChampLigue": "00:31,83", "ChallengeNat": "00:30,12", "FranceU18": "00:28,69", "OpenEte": "00:28,69", "FranceElite": "00:25,09"}, "100 Pap": {"Jaune": "01:18,91", "Vert": "01:16,54", "ChampLigue": "01:13,17", "ChallengeNat": "01:07,77", "FranceU18": "01:04,55", "OpenEte": "01:04,55", "FranceElite": "00:55,79"}, "200 Pap": {"Jaune": "02:59,09", "Vert": "02:51,52", "ChampLigue": "02:44,48", "ChallengeNat": "02:34,90", "FranceU18": "02:27,53", "OpenEte": "02:27,53", "FranceElite": "02:07,42"}, "200 4N": {"Jaune": "02:47,85", "Vert": "02:42,81", "ChampLigue": "02:38,67", "ChallengeNat": "02:33,78", "FranceU18": "02:26,46", "OpenEte": "02:26,46", "FranceElite": "02:08,65"}, "400 4N": {"Jaune": "06:03,22", "Vert": "05:52,32", "ChampLigue": "05:41,48", "ChallengeNat": "05:25,29", "FranceU18": "05:09,80", "OpenEte": "05:09,80", "FranceElite": "04:34,71"}}, "U15": {"50 NL": {"Jaune": "00:28,59", "Vert": "00:28,19", "ChampLigue": "00:27,17", "ChallengeNat": "00:27,00", "FranceU18": "00:25,84", "OpenEte": "00:25,84", "FranceElite": "00:23,62"}, "100 NL": {"Jaune": "01:03,48", "Vert": "01:01,26", "ChampLigue": "00:59,77", "ChallengeNat": "00:58,93", "FranceU18": "00:56,40", "OpenEte": "00:56,40", "FranceElite": "00:51,45"}, "200 NL": {"Jaune": "02:22,79", "Vert": "02:16,17", "ChampLigue": "02:11,09", "ChallengeNat": "02:08,86", "FranceU18": "02:03,32", "OpenEte": "02:03,32", "FranceElite": "01:53,42"}, "400 NL": {"Jaune": "05:06,51", "Vert": "04:48,08", "ChampLigue": "04:41,51", "ChallengeNat": "04:30,83", "FranceU18": "04:19,17", "OpenEte": "04:19,17", "FranceElite": "04:00,52"}, "800 NL": {"Jaune": "10:29,30", "Vert": "09:54,47", "ChampLigue": "09:38,00", "ChallengeNat": "09:20,25", "FranceU18": "08:56,13", "OpenEte": "08:56,13", "FranceElite": "08:19,70"}
132, "1500 NL": {"Jaune": "19:54,59", "Vert": "19:32,89", "ChampLigue": "18:25,00", "ChallengeNat": "17:53,12", "FranceU18": "17:06,91", "OpenEte": "17:06,91", "FranceElite": "15:59,20"}, "50 Dos": {"Jaune": "00:34,07", "Vert": "00:33,52", "ChampLigue": "00:32,10", "ChallengeNat": "00:31,08", "FranceU18": "00:29,75", "OpenEte": "00:29,75", "FranceElite": "00:27,01"}, "100 Dos": {"Jaune": "01:14,76", "Vert": "01:11,37", "ChampLigue": "01:08,50", "ChallengeNat": "01:06,67", "FranceU18": "01:03,80", "OpenEte": "01:03,80", "FranceElite": "00:58,30"}, "200 Dos": {"Jaune": "02:44,16", "Vert": "02:34,79", "ChampLigue": "02:30,50", "ChallengeNat": "02:25,31", "FranceU18": "02:19,06", "OpenEte": "02:19,06", "FranceElite": "02:08,28"}, "50 Brasse": {"Jaune": "00:36,88", "Vert": "00:36,31", "ChampLigue": "00:34,60", "ChallengeNat": "00:33,90", "FranceU18": "00:32,44", "OpenEte": "00:32,44", "FranceElite": "00:29,65"}, "100 Brasse": {"Jaune": "01:22,35", "Vert": "01:20,28", "ChampLigue": "01:17,76", "ChallengeNat": "01:15,06", "FranceU18": "01:11,83", "OpenEte": "01:11,83", "FranceElite": "01:05,27"}, "200 Brasse": {"Jaune": "03:03,26", "Vert": "02:57,05", "ChampLigue": "02:48,63", "ChallengeNat": "02:43,48", "FranceU18": "02:36,44", "OpenEte": "02:36,44", "FranceElite": "02:24,24"}, "50 Pap": {"Jaune": "00:31,19", "Vert": "00:31,03", "ChampLigue": "00:29,34", "ChallengeNat": "00:28,81", "FranceU18": "00:27,57", "OpenEte": "00:27,57", "FranceElite": "00:25,09"}, "100 Pap": {"Jaune": "01:11,44", "Vert": "01:09,34", "ChampLigue": "01:05,59", "ChallengeNat": "01:04,45", "FranceU18": "01:01,68", "OpenEte": "01:01,68", "FranceElite": "00:55,79"}, "200 Pap": {"Jaune": "02:44,38", "Vert": "02:37,74", "ChampLigue": "02:30,37", "ChallengeNat": "02:24,15", "FranceU18": "02:17,95", "OpenEte": "02:17,95", "FranceElite": "02:07,42"}, "200 4N": {"Jaune": "02:42,97", "Vert": "02:34,72", "ChampLigue": "02:29,74", "ChallengeNat": "02:25,89", "FranceU18": "02:19,61", "OpenEte": "02:19,61", "FranceElite": "02:08,65"}, "400 4N": {"Jaune": "05:46,82", "Vert": "05:29,46", "ChampLigue": "05:19,15", "ChallengeNat": "05:10,49", "FranceU18": "04:57,12", "OpenEte": "04:57,12", "FranceElite": "04:34,71"}}, "U16": {"50 NL": {"Jaune": "00:27,80", "Vert": "00:27,41", "ChampLigue": "00:26,39", "ChallengeNat": "00:26,12", "FranceU18": "00:25,12", "OpenEte": "00:25,12", "FranceElite": "00:23,62"}, "100 NL": {"Jaune": "01:01,72", "Vert": "00:59,57", "ChampLigue": "00:58,03", "ChallengeNat": "00:56,93", "FranceU18": "00:54,74", "OpenEte": "00:54,74", "FranceElite": "00:51,45"}, "200 NL": {"Jaune": "02:18,84", "Vert": "02:12,40", "ChampLigue": "02:07,12", "ChallengeNat": "02:03,93", "FranceU18": "01:59,17", "OpenEte": "01:59,17", "FranceElite": "01:53,42"}, "400 NL": {"Jaune": "04:58,04", "Vert": "04:40,11", "ChampLigue": "04:32,71", "ChallengeNat": "04:23,22", "FranceU18": "04:13,10", "OpenEte": "04:13,10", "FranceElite": "04:00,52"}, "800 NL": {"Jaune": "10:11,90", "Vert": "09:38,03", "ChampLigue": "09:25,00", "ChallengeNat": "09:04,18", "FranceU18": "08:43,25", "OpenEte": "08:43,25", "FranceElite": "08:19,70"}, "1500 NL": {"Jaune": "19:21,56", "Vert": "19:00,46", "ChampLigue": "18:10,00", "ChallengeNat": "17:17,49", "FranceU18": "16:37,59", "OpenEte": "16:37,59", "FranceElite": "15:59,20"}, "50 Dos": {"Jaune": "00:33,13", "Vert": "00:32,59", "ChampLigue": "00:31,15", "ChallengeNat": "00:29,97", "FranceU18": "00:28,82", "OpenEte": "00:28,82", "FranceElite": "00:27,01"}, "100 Dos": {"Jaune": "01:12,69", "Vert": "01:09,40", "ChampLigue": "01:06,56", "ChallengeNat": "01:04,64", "FranceU18": "01:02,16", "OpenEte": "01:02,16", "FranceElite": "00:58,30"}, "200 Dos": {"Jaune": "02:39,62", "Vert": "02:30,51", "ChampLigue": "02:26,14", "ChallengeNat": "02:20,52", "FranceU18": "02:15,12", "OpenEte": "02:15,12", "FranceElite": "02:08,28"}, "50 Brasse": {"Jaune": "00:35,86", "Vert": "00:35,31", "ChampLigue": "00:33,58", "ChallengeNat": "00:32,72", "FranceU18": "00:31,47", "OpenEte": "00:31,47", "FranceElite": "00:29,65"}, "100 Brasse": {"Jaune": "01:20,07", "Vert": "01:18,06", "ChampLigue": "01:15,31", "ChallengeNat": "01:11,75", "FranceU18": "01:08,99", "OpenEte": "01:08,99", "FranceElite": "01:05,27"}, "200 Brasse": {"Jaune": "02:58,19", "Vert": "02:52,15", "ChampLigue": "02:43,14", "ChallengeNat": "02:35,66", "FranceU18": "02:29,68", "OpenEte": "02:29,68", "FranceElite": "02:24,24"}, "50 Pap": {"Jaune": "00:30,33", "Vert": "00:30,17", "ChampLigue": "00:28,47", "ChallengeNat": "00:27,78", "FranceU18": "00:26,72", "OpenEte": "00:26,72", "FranceElite": "00:25,09"}, "100 Pap": {"Jaune": "01:09,46", "Vert": "01:07,43", "ChampLigue": "01:03,46", "ChallengeNat": "01:01,83", "FranceU18": "00:59,46", "OpenEte": "00:59,46", "FranceElite": "00:55,79"}, "200 Pap": {"Jaune": "02:39,83", "Vert": "02:33,38", "ChampLigue": "02:26,21", "ChallengeNat": "02:20,16", "FranceU18": "02:14,77", "OpenEte": "02:14,77", "FranceElite": "02:07,42"}, "200 4N": {"Jaune": "02:38,46", "Vert": "02:30,44", "ChampLigue": "02:25,49", "ChallengeNat": "02:21,36", "FranceU18": "02:15,93", "OpenEte": "02:15,93", "FranceElite": "02:08,65"}, "400 4N": {"Jaune": "05:37,23", "Vert": "05:20,35", "ChampLigue": "05:07,25", "ChallengeNat": "04:49,63", "FranceU18": "04:48,11", "OpenEte": "04:48,11", "FranceElite": "04:34,71"}}, "U17": {"50 NL": {"Jaune": "00:27,35", "Vert": "00:26,97", "ChampLigue": "00:25,91", "ChallengeNat": "00:25,48", "FranceU18": "00:24,62", "OpenEte": "00:24,62", "FranceElite": "00:23,62"}, "100 NL": {"Jaune": "01:00,72", "Vert": "00:58,61", "ChampLigue": "00:56,95", "ChallengeNat": "00:55,45", "FranceU18": "00:53,58", "OpenEte": "00:53,58", "FranceElite": "00:51,45"}, "200 NL": {"Jaune": "02:16,60", "Vert": "02:10,27", "ChampLigue": "02:04,91", "ChallengeNat": "02:01,26", "FranceU18": "01:57,16", "OpenEte": "01:57,16", "FranceElite": "01:53,42"}, "400 NL": {"Jaune": "04:53,24", "Vert": "04:35,60", "ChampLigue": "04:27,26", "ChallengeNat": "04:14,73", "FranceU18": "04:06,12", "OpenEte": "04:06,12", "FranceElite": "04:00,52"}, "800 NL": {"Jaune": "10:02,05", "Vert": "09:28,72", "ChampLigue": "09:15,00", "ChallengeNat": "08:48,92", "FranceU18": "08:31,04", "OpenEte": "08:31,04", "FranceElite": "08:19,70"}, "1500 NL": {"Jaune": "19:02,84", "Vert": "18:42,08", "ChampLigue": "17:55,00", "ChallengeNat": "16:47,06", "FranceU18": "16:13,01", "OpenEte": "16:13,01", "FranceElite": "15:59,20"}, "50 Dos": {"Jaune": "00:32,59", "Vert": "00:32,06", "ChampLigue": "00:30,55", "ChallengeNat": "00:29,06", "FranceU18": "00:28,08", "OpenEte": "00:28,08", "FranceElite": "00:27,01"}, "100 Dos": {"Jaune": "01:11,52", "Vert": "01:08,28", "ChampLigue": "01:05,30", "ChallengeNat": "01:02,82", "FranceU18": "01:00,70", "OpenEte": "01:00,70", "FranceElite": "00:58,30"}, "200 Dos": {"Jaune": "02:37,05", "Vert": "02:28,08", "ChampLigue": "02:23,29", "ChallengeNat": "02:16,29", "FranceU18": "02:11,69", "OpenEte": "02:11,69", "FranceElite": "02:08,28"}, "50 Brasse": {"Jaune": "00:35,28", "Vert": "00:34,74", "ChampLigue": "00:32,96", "ChallengeNat": "00:31,86", "FranceU18": "00:30,79", "OpenEte": "00:30,79", "FranceElite": "00:29,65"}, "100 Brasse": {"Jaune": "01:18,78", "Vert": "01:16,80", "ChampLigue": "01:13,85", "ChallengeNat": "01:09,62", "FranceU18": "01:07,27", "OpenEte": "01:07,27", "FranceElite": "01:05,27"}, "200 Brasse": {"Jaune": "02:55,32", "Vert": "02:49,38", "ChampLigue": "02:40,35", "ChallengeNat": "02:32,48", "FranceU18": "02:27,33", "OpenEte": "02:27,33", "FranceElite": "02:24,24"}, "50 Pap": {"Jaune": "00:29,84", "Vert": "00:29,69", "ChampLigue": "00:27,91", "ChallengeNat": "00:26,96", "FranceU18": "00:26,05", "OpenEte": "00:26,05", "FranceElite": "00:25,09"}, "100 Pap": {"Jaune": "01:08,34", "Vert": "01:06,34", "ChampLigue": "01:02,39", "ChallengeNat": "01:00,22", "FranceU18": "00:58,19", "OpenEte": "00:58,19", "FranceElite": "00:55,79"}, "200 Pap": {"Jaune": "02:37,26", "Vert": "02:30,90", "ChampLigue": "02:23,44", "ChallengeNat": "02:16,24", "FranceU18": "02:11,64", "OpenEte": "02:11,64", "FranceElite": "02:07,42"}, "200 4N": {"Jaune": "02:35,91", "Vert": "02:28,02", "ChampLigue": "02:22,68", "ChallengeNat": "02:17,25", "FranceU18": "02:12,61", "OpenEte": "02:12,61", "FranceElite": "02:08,65"}, "400 4N": {"Jaune": "05:31,80", "Vert": "05:15,19", "ChampLigue": "05:04,20", "ChallengeNat": "04:52,58", "FranceU18": "04:42,69", "OpenEte": "04:42,69", "FranceElite": "04:34,71"}}, "U18": {"50 NL": {"Jaune": "00:26,98", "Vert": "00:26,60", "ChampLigue": "00:25,48", "ChallengeNat": "00:24,84", "FranceU18": "00:24,12", "OpenEte": "00:24,12", "FranceElite": "00:23,62"}, "100 NL": {"Jaune": "00:59,90", "Vert": "00:57,82", "ChampLigue": "00:56,12", "ChallengeNat": "00:54,42", "FranceU18": "00:52,84", "OpenEte": "00:52,84", "FranceElite": "00:51,45"}, "200 NL": {"Jaune": "02:14,76", "Vert": "02:08,51", "ChampLigue": "02:03,05", "ChallengeNat": "01:58,94", "FranceU18": "01:55,48", "OpenEte": "01:55,48", "FranceElite": "01:53,42"}, "400 NL": {"Jaune": "04:49,28", "Vert": "04:31,88", "ChampLigue": "04:23,30", "ChallengeNat": "04:09,85", "FranceU18": "04:02,58", "OpenEte": "04:02,58", "FranceElite": "04:00,52"}, "800 NL": {"Jaune": "09:53,90", "Vert": "09:21,05", "ChampLigue": "09:10,00", "ChallengeNat": "08:40,26", "FranceU18": "08:25,11", "OpenEte": "08:25,11", "FranceElite": "08:19,70"}, "1500 NL": {"Jaune": "18:47,42", "Vert": "18:26,94", "ChampLigue": "17:45,00", "ChallengeNat": "16:30,90", "FranceU18": "16:02,04", "OpenEte": "16:02,04", "FranceElite": "15:59,20"}, "50 Dos": {"Jaune": "00:32,15", "Vert": "00:31,63", "ChampLigue": "00:30,10", "ChallengeNat": "00:28,52", "FranceU18": "00:27,69", "OpenEte": "00:27,69", "FranceElite": "00:27,01"}, "100 Dos": {"Jaune": "01:10,55", "Vert": "01:07,36", "ChampLigue": "01:04,30", "ChallengeNat": "01:01,49", "FranceU18": "00:59,70", "OpenEte": "00:59,70", "FranceElite": "00:58,30"}, "200 Dos": {"Jaune": "02:34,93", "Vert": "02:26,08", "ChampLigue": "02:21,39", "ChallengeNat": "02:14,55", "FranceU18": "02:10,64", "OpenEte": "02:10,64", "FranceElite": "02:08,28"}, "50 Brasse": {"Jaune": "00:34,81", "Vert": "00:34,27", "ChampLigue": "00:32,40", "ChallengeNat": "00:31,00", "FranceU18": "00:30,10", "OpenEte": "00:30,10", "FranceElite": "00:29,65"}, "100 Brasse": {"Jaune": "01:17,72", "Vert": "01:15,77", "ChampLigue": "01:12,76", "ChallengeNat": "01:08,33", "FranceU18": "01:06,34", "OpenEte": "01:06,34", "FranceElite": "01:05,27"}, "200 Brasse": {"Jaune": "02:52,95", "Vert": "02:47,10", "ChampLigue": "02:38,33", "ChallengeNat": "02:31,01", "FranceU18": "02:26,62", "OpenEte": "02:26,62", "FranceElite": "02:24,24"}, "50 Pap": {"Jaune": "00:29,44", "Vert": "00:29,29", "ChampLigue": "00:27,46", "ChallengeNat": "00:26,31", "FranceU18": "00:25,55", "OpenEte": "00:25,55", "FranceElite": "00:25,09"}, "100 Pap": {"Jaune": "01:07,42", "Vert": "01:05,44", "ChampLigue": "01:01,41", "ChallengeNat": "00:58,85", "FranceU18": "00:57,14", "OpenEte": "00:57,14", "FranceElite": "00:55,79"}, "200 Pap": {"Jaune": "02:35,14", "Vert": "02:28,87", "ChampLigue": "02:21,23", "ChallengeNat": "02:13,32", "FranceU18": "02:09,44", "OpenEte": "02:09,44", "FranceElite": "02:07,42"}, "200 4N": {"Jaune": "02:33,80", "Vert": "02:26,02", "ChampLigue": "02:20,51", "ChallengeNat": "02:14,41", "FranceU18": "02:10,50", "OpenEte": "02:10,50", "FranceElite": "02:08,65"}, "400 4N": {"Jaune": "05:27,32", "Vert": "05:10,94", "ChampLigue": "04:59,80", "ChallengeNat": "04:47,44", "FranceU18": "04:39,07", "OpenEte": "04:39,07", "FranceElite": "04:34,71"}}, "19+": {"50 NL": {"Jaune": "00:26,35", "Vert": "00:25,98", "ChampLigue": "00:24,77", "ChallengeNat": "00:24,44", "FranceElite": "00:23,62"}, "100 NL": {"Jaune": "00:58,50", "Vert": "00:56,46", "ChampLigue": "00:54,56", "ChallengeNat": "00:53,25", "FranceElite": "00:51,45"}, "200 NL": {"Jaune": "02:11,60", "Vert": "02:05,50", "ChampLigue": "02:00,47", "ChallengeNat": "01:57,39", "FranceElite": "01:53,42"}, "400 NL": {"Jaune": "04:42,50", "Vert": "04:25,51", "ChampLigue": "04:18,36", "ChallengeNat": "04:08,94", "FranceElite": "04:00,52"}, "800 NL": {"Jaune": "09:40,00", "Vert": "09:07,90", "ChampLigue": "08:55,00", "ChallengeNat": "08:37,19", "FranceElite": "08:19,70"}, "1500 NL": {"Jaune": "18:21,00", "Vert": "18:01,00", "ChampLigue": "17:35,00", "ChallengeNat": "16:32,77", "FranceElite": "15:59,20"}, "50 Dos": {"Jaune": "00:31,40", "Vert": "00:30,89", "ChampLigue": "00:29,17", "ChallengeNat": "00:27,96", "FranceElite": "00:27,01"}, "100 Dos": {"Jaune": "01:08,90", "Vert": "01:05,78", "ChampLigue": "01:02,86", "ChallengeNat": "01:00,34", "FranceElite": "00:58,30"}, "200 Dos": {"Jaune": "02:31,30", "Vert": "02:22,66", "ChampLigue": "02:18,42", "ChallengeNat": "02:12,77", "FranceElite": "02:08,28"}, "50 Brasse": {"Jaune": "00:33,99", "Vert": "00:33,47", "ChampLigue": "00:31,57", "ChallengeNat": "00:30,69", "FranceElite": "00:29,65"}, "100 Brasse": {"Jaune": "01:15,90", "Vert": "01:13,99", "ChampLigue": "01:11,26", "ChallengeNat": "01:07,56", "FranceElite": "01:05,27"}, "200 Brasse": {"Jaune": "02:48,90", "Vert": "02:43,18", "ChampLigue": "02:35,07", "ChallengeNat": "02:29,28", "FranceElite": "02:24,24"}, "50 Pap": {"Jaune": "00:28,75", "Vert": "00:28,60", "ChampLigue": "00:26,58", "ChallengeNat": "00:25,96", "FranceElite": "00:25,09"}, "100 Pap": {"Jaune": "01:05,84", "Vert": "01:03,91", "ChampLigue": "00:59,66", "ChallengeNat": "00:57,75", "FranceElite": "00:55,79"}, "200 Pap": {"Jaune": "02:31,50", "Vert": "02:25,38", "ChampLigue": "02:18,34", "ChallengeNat": "02:11,88", "FranceElite": "02:07,42"}, "200 4N": {"Jaune": "02:30,20", "Vert": "02:22,60", "ChampLigue": "02:17,69", "ChallengeNat": "02:13,15", "FranceElite": "02:08,65"}, "400 4N": {"Jaune": "05:19,65", "Vert": "05:03,65", "ChampLigue": "04:53,68", "ChallengeNat": "04:44,33", "FranceElite": "04:34,71"}}}}}}};
133QDB.grids.France_U13_2026={"cats": ["U12(2014)", "U13(2013)"], "events": ["50 NL", "100 NL", "200 NL", "400 NL", "800 NL", "1500 NL", "50 Dos", "100 Dos", "200 Dos", "50 Brasse", "100 Brasse", "200 Brasse", "50 Pap", "100 Pap", "200 Pap", "200 4N", "400 4N"], "source": "FFN France U13 25m (id338) — 26_VPUB_260907 p.41", "FILLES": {"50 NL": {"50m": ["x", "x"], "25m": ["00:30,54", "00:29,05"]}, "100 NL": {"50m": ["x", "x"], "25m": ["01:07,22", "01:04,18"]}, "200 NL": {"50m": ["x", "x"], "25m": ["02:27,99", "02:21,42"]}, "400 NL": {"50m": ["x", "x"], "25m": ["05:06,06", "04:55,76"]}, "800 NL": {"50m": ["x", "x"], "25m": ["x", "10:21,29"]}, "1500 NL": {"50m": ["x", "x"], "25m": ["x", "x"]}, "50 Dos": {"50m": ["x", "x"], "25m": ["00:35,56", "00:33,66"]}, "100 Dos": {"50m": ["x", "x"], "25m": ["01:18,11", "01:14,34"]}, "200 Dos": {"50m": ["x", "x"], "25m": ["02:44,48", "02:39,60"]}, "50 Brasse": {"50m": ["x", "x"], "25m": ["00:39,78", "00:38,29"]}, "100 Brasse": {"50m": ["x", "x"], "25m": ["01:27,49", "01:24,63"]}, "200 Brasse": {"50m": ["x", "x"], "25m": ["03:06,75", "02:58,78"]}, "50 Pap": {"50m": ["x", "x"], "25m": ["00:33,49", "00:31,38"]}, "100 Pap": {"50m": ["x", "x"], "25m": ["01:17,77", "01:13,61"]}, "200 Pap": {"50m": ["x", "x"], "25m": ["x", "02:53,49"]}, "200 4N": {"50m": ["x", "x"], "25m": ["02:48,12", "02:42,21"]}, "400 4N": {"50m": ["x", "x"], "25m": ["x", "05:42,55"]}}, "GARÇONS": {"50 NL": {"50m": ["x", "x"], "25m": ["00:29,36", "00:27,75"]}, "100 NL": {"50m": ["x", "x"], "25m": ["01:04,94", "01:01,79"]}, "200 NL": {"50m": ["x", "x"], "25m": ["02:23,69", "02:17,05"]}, "400 NL": {"50m": ["x", "x"], "25m": ["04:54,42", "04:44,83"]}, "800 NL": {"50m": ["x", "x"], "25m": ["x", "09:54,39"]}, "1500 NL": {"50m": ["x", "x"], "25m": ["x", "x"]}, "50 Dos": {"50m": ["x", "x"], "25m": ["00:34,10", "00:32,07"]}, "100 Dos": {"50m": ["x", "x"], "25m": ["01:14,26", "01:09,72"]}, "200 Dos": {"50m": ["x", "x"], "25m": ["02:39,84", "02:29,82"]}, "50 Brasse": {"50m": ["x", "x"], "25m": ["00:39,35", "00:35,86"]}, "100 Brasse": {"50m": ["x", "x"], "25m": ["01:26,28", "01:20,80"]}, "200 Brasse": {"50m": ["x", "x"], "25m": ["03:04,48", "02:52,94"]}, "50 Pap": {"50m": ["x", "x"], "25m": ["00:32,14", "00:30,48"]}, "100 Pap": {"50m": ["x", "x"], "25m": ["01:16,55", "01:10,84"]}, "200 Pap": {"50m": ["x", "x"], "25m": ["x", "02:47,58"]}, "200 4N": {"50m": ["x", "x"], "25m": ["02:42,39", "02:33,51"]}, "400 4N": {"50m": ["x", "x"], "25m": ["x", "05:25,72"]}}};
134const QEV=["50 NL","100 NL","200 
134NL","400 NL","800 NL","1500 NL","50 Dos","100 Dos","200 Dos","50 Brasse","100 Brasse","200 Brasse","50 Pap","100 Pap","200 Pap","200 4N","400 4N"];
135const QSX13={DAMES:"FILLES",MESSIEURS:"GARÇONS"};
136function qcat(y){y=+y;if(y>=2015)return{type:"avenir"};if(y===2014)return{type:"u13",idx:0};if(y===2013)return{type:"u13",idx:1};var m={2012:["U14",5],2011:["U15",4],2010:["U16",3],2009:["U17",2],2008:["U18",1]};if(m[y])return{type:"jun",cat:m[y][0],idx:m[y][1]};return{type:"jun",cat:"19+",idx:0};}
137function qsec(t){if(!t||t==='x')return null;var m=/^(?:(\d+):)?(\d{1,2})[.,](\d{1,2})$/.exec(String(t).trim());if(!m)return null;return (+(m[1]||0))*60 + +m[2] + (+((m[3]+'0').slice(0,2)))/100;}
138function qlevels(sx,c,ev,basin){
139 if(c.type==='u13'){var out=[];var g=QDB.grids.U13_WebConfrontation_2026[QSX13[sx]][ev];if(g&&g[basin])out.push({key:'u13',thr:qsec(g[basin][c.idx])});var GF=QDB.grids.France_U13_2026;var gf=GF&&GF[QSX13[sx]]&&GF[QSX13[sx]][ev];if(gf&&gf[basin])out.push({key:'fru13',thr:qsec(gf[basin][c.idx])});return out;}
140 if(c.type==='jun'){if(basin==='25m'){var L=[['Jaune','jaune'],['Vert','vert'],['Bleu_ChampLigue','bleu']];return L.map(function(p){var g=QDB.grids.Juniors_et_plus[sx][p[0]][ev];return{key:p[1],thr:g&&g['25m']?qsec(g['25m'][c.idx]):null};});}
141  var row=QDB.grids.Vers_Nationales.data[sx][c.cat][ev];if(!row)return[];var L=[['Jaune','jaune'],['Vert','vert'],['ChampLigue','bleu'],['ChallengeNat','chalnat'],['FranceU18','fru18'],['FranceElite','frelite']];return L.map(function(p){return{key:p[1],thr:qsec(row[p[0]])};});}
142 return[];}
143function qreached(sx,year,b25,b50){var c=qcat(year);var set={};if(c.type==='avenir')return{cat:c,set:set};
144 QEV.forEach(function(ev){['25m','50m'].forEach(function(basin){var t=basin==='25m'?(b25&&b25[ev]):(b50&&b50[ev]);var ts=qsec(t);if(ts==null)return;var lv=qlevels(sx,c,ev,basin);for(var i=0;i<lv.length;i++){if(lv[i].thr!=null&&ts<=lv[i].thr)set[lv[i].key]=1;}});});return{cat:c,set:set};}
145function qcompLevel(title){var t=(title||'').toLowerCase();
146 if(/coupe de france des départ/.test(t))return null;
147 if(/championnats? de france u12-?u13|championnats? de france u13/.test(t))return 'fru13';
148 if(/meeting d[ée]partemental u12 ?& ?u13/.test(t))return 'fru13';
149 if(/u12.?-.?u13|u12 ?& ?u13|finalité ligue.*u1[23]/.test(t))return 'u13';
150 if(/u18/.test(t))return 'fru18';
151 if(/open d.?été|open d.?ete/.test(t))return 'fru18';
152 if(/élite|elite/.test(t))return 'frelite';
153 if(/challenge national/.test(t))return 'chalnat';
154 if(/meeting.*jaune/.test(t))return 'jaune';
155 if(/meeting.*vert/.test(t))return 'vert';
156 if(/championnats? ligue|champ.*ligue|webconfrontation.*ligue|ligue aur?a (hiver|printemps|été|ete)/.test(t))return 'bleu';
157 return null;}
158var NL_SET=null, NL_NAME=null, NL_CAT=null, NL_SELS=[], NL_SELEVTS=[];
159function nlEsc(s){return (s||'').replace(/[&<>"]/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;'}[c];});}
160function nlBtn(){return document.getElementById('nlogin-btn');}
161function nlOpen(){renderModal();document.getElementById('nlogin-modal').classList.add('on');}
162function nlClose(){document.getElementById('nlogin-modal').classList.remove('on');}
163function renderModal(){var b=document.getElementById('nl-body');
164 if(NL_NAME){var _cc='';try{_cc=localStorage.getItem('cal_ncode')||'';}catch(e){}var _lnk='https://coachfrancois-espace-nageur.pages.dev/'+(_cc?'#c='+encodeURIComponent(_cc):'');var _hasQ=false;try{_hasQ=!!(window.NL_SET&&Object.keys(NL_SET).length);}catch(e){}var _hasT=false;try{_hasT=!!window.NL_HASTRAIN;}catch(e){}
165b.innerHTML='<h3>👤 '+nlEsc(NL_NAME)+'</h3><p>Ton calendrier est personnalisé : ta catégorie est affichée et tes qualifications sont marquées (indicatif).</p>'
166  +(window.inscrConvocPanel?window.inscrConvocPanel():'')
167  +(window.inscrStagesPanel?window.inscrStagesPanel():'')
168  +'<div class="nl-steps"><b>📝 S’inscrire à une compétition</b><ol>'
169    +'<li><b>Le plus simple</b> : dans <b>📣 Tes convocations</b> ci-dessus, clique sur la compétition → ta fiche d’inscription s’ouvre <b>directement</b>.</li>'
170    +'<li>Sinon, <b>consulte régulièrement le calendrier</b> pour voir les compétitions à venir : repère un évènement avec le bouton vert <b>📝 S’inscrire</b> et clique dessus.</li>'
171    +'<li>Remplis le formulaire : nageur(s), participation, transport, repas…</li>'
172    +'<li>Termine par <b>Envoyer l’inscription</b> — tu peux recevoir un reçu par e-mail.</li>'
173    +'<li>Une correction ? Renvoie simplement le formulaire, ton inscription est mise à jour.</li>'
174  +'</ol></div>'
175  +(_hasQ?('<a class="nl-lnk" href="'+_lnk+'" target="_blank" rel="noopener">Voir mes qualifications détaillées →</a>'):'')
176  +(_hasT?('<a class="nl-lnk" href="https://coachfrancois-mes-entrainements.pages.dev/'+(_cc?'#c='+encodeURIComponent(_cc):'')+'" target="_blank" rel="noopener">🏊 Mes entraînements →</a>'):'')
177  +'<div><button class="nl-btn nl-out" onclick="nlLogout()">Se déconnecter</button></div>';}
178 else{b.innerHTML='<h3>🏊 Espace nageur</h3><p>Saisis ton code d\'accès (remis par ton coach) pour personnaliser ton calendrier.</p>'
179  +'<input id="nl-code" placeholder="Ton code (ex : 1234567-Ab3xK9)" autocomplete="off">'
180  +'<div><button class="nl-btn" onclick="nlLogin()">Me connecter</button></div><div id="nl-status" class="nl-status"></div>';
181  setTimeout(function(){var i=document.getElementById('nl-code');if(i){i.focus();i.addEventListener('keydown',function(e){if(e.key==='Enter')nlLogin();});}},60);}}
182async function nlLogin(){var code=(document.getElementById('nl-code').value||'').trim();var st=document.getElementById('nl-status');
183 if(!code){st.textContent='Saisis ton code.';st.className='nl-status err';return;}
184 st.textContent='Connexion…';st.className='nl-status';
185 try{var r=await fetch(QWORKER+'/?code='+encodeURIComponent(code));var d=await r.json();
186  if(!d.ok){
187    try{var rc=await fetch(QWORKER+'/calendar?auth='+encodeURIComponent(code));var dc=await rc.json();
188      if(dc&&dc.ok&&dc.coach){CAL_COACH=code;try{localStorage.setItem('cal_coach',code);}catch(e){}coachOpen();return;}}catch(e){}
189    st.textContent=d.error||'Code invalide.';st.className='nl-status err';return;}
190  try{localStorage.setItem('cal_ncode',code);}catch(e){}applyNageur(d);nlClose();
191 }catch(e){st.textContent='Service indisponible, réessaie.';st.className='nl-status err';}}
192function nlLogout(){try{localStorage.removeItem('cal_ncode');}catch(e){}NL_SET=null;NL_NAME=null;clearMarks();NL_SELS=[];NL_SELEVTS=[];markSelections();if(nlBtn())nlBtn().textContent='🏊 Espace nageur — me connecter';var y=document.getElementById('year');if(y){y.value='';if(typeof fltYear==='function')fltYear('');}nlClose();}
193function applyNageur(d){NL_NAME=d.nom||'Nageur';if(nlBtn())nlBtn().textContent='👤 '+NL_NAME;
194 var rr=qreached(d.sexe,d.annee,d.b25,d.b50);NL_SET=rr.set;NL_CAT=rr.cat;
195 var y=document.getElementById('year');
196 if(d.annee&&y&&[].some.call(y.options,function(o){return +o.value===+d.annee;})){y.value=d.annee;if(typeof fltYear==='function')fltYear(String(d.annee));}
197 else{var ck=({avenir:'av',u13:'benj',jun:'jun'})[rr.cat.type]||'jun';if(typeof flt==='function')flt(ck);}
198 NL_SELS=d.selections||[];NL_SELEVTS=d.selEvents||[];try{window.NL_HASTRAIN=!!(d&&d.trainings&&d.trainings.length);}catch(e){}markComps();markSelections();}
199function clearMarks(){document.querySelectorAll('.qbadge').forEach(function(e){e.remove();});}
200function markComps(){if(!NL_SET||!NL_CAT)return;clearMarks();var REL=({avenir:[],u13:['u13','fru13'],jun:['jaune','vert','bleu','chalnat','fru18','frelite']})[NL_CAT.type]||[];document.querySelectorAll('tr.ev').forEach(function(tr){var lvl=qcompLevel(tr.getAttribute('data-title')||'');if(!lvl||REL.indexOf(lvl)<0)return;var cell=tr.querySelectorAll('td')[2];if(!cell)return;var ok=!!NL_SET[lvl];var s=document.createElement('span');s.className='qbadge '+(ok?'qok':'qaim');s.textContent=ok?'✓ Qualifié(e)':'sur qualification';cell.appendChild(s);});}
201function frDate(iso){if(!iso)return'';var p=iso.split('-');return p[2]+'/'+p[1]+'/'+p[0];}function markSelections(){document.querySelectorAll('.selbadge,.selno').forEach(function(e){e.remove();});var bn=document.getElementById('selbanner');if(bn){bn.classList.remove('on');bn.innerHTML='';}var sels=NL_SELS||[],evs=NL_SELEVTS||[];if(!sels.length&&!evs.length)return;var names=[];document.querySelectorAll('tr.ev').forEach(function(tr){var id=String(tr.dataset.id);var isSel=sels.indexOf(id)>=0;var isEv=evs.indexOf(id)>=0;if(!isSel&&!isEv)return;var cell=tr.querySelectorAll('td')[2];if(!cell)return;var s=document.createElement('span');if(isSel){s.className='selbadge';s.textContent='✓ sélectionné(e)';names.push((tr.dataset.title||'')+(tr.dataset.date?' ('+frDate(tr.dataset.date)+')':''));}else{s.className='selno';s.textContent='sur sélection';}cell.appendChild(s);});if(bn&&names.length){bn.innerHTML='✓ Tu es sélectionné(e) pour : '+names.map(nlEsc).join(' · ');
201bn.classList.add('on');}}(function(){var c='';try{c=localStorage.getItem('cal_ncode')||'';}catch(e){}if(c){fetch(QWORKER+'/?code='+encodeURIComponent(c)).then(function(r){return r.json();}).then(function(d){if(d&&d.ok)applyNageur(d);}).catch(function(){});}})();
202</script>
vendor: 1 bytes, line 202
202
203<script>
204/* CNBV calendrier en ligne — généré 2026-08-01 */
205var CAL_SEED=[{"type":"mois","label":"SEPTEMBRE 2026"},{"type":"ev","id":"1","cats":["club"],"club":1,"period":"2026","date":"2026-09-01","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Rentrée du CNBV","lieu":"BELLEGARDE (ValséO)","bassin":"","color":"#FCE4D6","dateText":"Mardi 01","program":""},{"type":"ev","id":"2","cats":["club"],"club":1,"period":"2026","date":"2026-09-02","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Journée de test entrée au CNBV","lieu":"BELLEGARDE","bassin":"","color":"#FCE4D6","dateText":"Mercredi 02","program":""},{"type":"ev","id":"3","cats":["club"],"club":1,"period":"2026","date":"2026-09-06","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Journée Portes Ouvertes (JPO) ValséO","lieu":"BELLEGARDE","bassin":"","color":"#FCE4D6","dateText":"Dimanche 06 (matin)","program":""},{"type":"ev","id":"4","cats":["club"],"club":1,"period":"2026","date":"2026-09-26","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Soirée Faluches Jéjé aux berges du Rhône","lieu":"BELLEGARDE","bassin":"","color":"#FCE4D6","dateText":"Samedi 26","program":""},{"type":"ev","id":"5","cats":["club"],"club":1,"period":"2026","date":"2026-09-30","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Journée de test entrée au CNBV","lieu":"BELLEGARDE","bassin":"","color":"#FCE4D6","dateText":"Mercredi 30","program":""},{"type":"mois","label":"OCTOBRE 2026"},{"type":"ev","id":"6","cats":["enf","av"],"club":0,"period":"2026","date":"2026-10-03","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Regroupement U11 et moins","lieu":"BELLEGARDE (ValséO)","bassin":"25m","color":"#ffffff","dateText":"Samedi 03 (matin)","program":""},{"type":"ev","id":"7","cats":["enf","av"],"club":0,"period":"2026","date":"2026-10-03","op":"14:00","dur":"3.75","comp":1,"handi":0,"home":1,"title":"Circuit Avenirs Plot 4","lieu":"BELLEGARDE (ValséO)","bassin":"25m","color":"#ffffff","dateText":"Samedi 03 (après-midi)","program":"<div class=\"progbox\"><b>Circuit Avenirs — Plot n°4 (U11 et moins)</b> · Bassin 25 m (8 lignes) · une réunion · échauffement 14h–15h.<br><u>Épreuves</u> (D &amp; M) : 100 4N · 200 4N · 50 Pap · 100 Pap · 50 NL · 100 NL · 50 Brasse · 100 Brasse · 50 Dos · 100 Dos · <b>Relais mixte 4×50 4 Nages</b> (2F+2G).<br><u>Règlement</u> : règle des deux départs · 4 courses max/nageur (hors relais) · toutes années d'âge confondues, D/M séparés · SNS obligatoire.<br><u>Récompenses</u> : médailles aux 3 premiers au cumul des 4 meilleures perfs — classements distincts Avenirs 1 (2015) / 2 (2016) / 3 (2017 &amp; après) ; 3 premiers relais.<br><u>Défis</u> : 1er 100 4N (Avenirs 2 &amp; 3) · 1er 200 4N (Avenirs 1).</div>"},{"type":"ev","id":"8","cats":["benj"],"club":0,"period":"2026","date":"2026-10-03","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Regroupement U12 & U13","lieu":"BELLEGARDE (ValséO)","bassin":"25m","color":"#ffffff","dateText":"Samedi 03","program":""},{"type":"ev","id":"9","cats":[],"club":0,"period":"2026","date":"2026-10-10","op":"","dur":"3.75","comp":0,"handi":0,"home":0,"title":"Assemblée générale de l'Ain","lieu":"BELLEY","bassin":"","color":"#ffffff","dateText":"Samedi 10","program":""},{"type":"ev","id":"10","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2026","date":"2026-10-10","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"Kilomètre nagé forum santé CNBV - entrée gratuite","lieu":"BELLEGARDE (ValséO)","bassin":"25m","color":"#FCE4D6","dateText":"Samedi 10 (matin)","program":""},{"type":"ev","id":"11","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2026","date":"2026-10-10","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"Forum santé 9h-18h Salle Etournelles - entrée gratuite","lieu":"VALSERHÔNE","bassin":"","color":"#FCE4D6","dateText":"Samedi 10","program":""},{"type": "ev", "id": "12", "cats": ["benj", "jun"], "club": 0, "period": "2026", "date": "2026-10-11", "op": "", "dur": "3.75", "comp": 1, "handi": 0, "home": 0, "title": "Meeting de rentrée (U12 et +)", "lieu": "OYONNAX", "bassin": "25m", "color": "#ffffff", "dateText": "Dimanche 11", "program": "<div class=\"progbox\"><b>Meeting de rentrée — U12 et +</b> · Oyonnax · Bassin 25 m (8 lignes) · deux réunions · engagements Extranat.<br><u>R1</u> (éch. 8h30) : Relais 4×50 NL · 800 NL · 100 Dos · 50 Brasse · 200 Pap · 400 4N · 50 Pap · 100 NL · 200 Brasse · 200 NL.<br><u>R2</u> (éch. 14h) : 1500 NL · 100 4N · 50 NL · 100 Brasse · 200 4N · 50 Dos · 400 NL · 100 Pap · 200 Dos · Relais 4×100 4N.<br>Qualificative meetings Ligue (grilles jaune/verte/bleue, 25 m). 1 seul départ par course.</div>"},{"type": "ev", "id": "75", "cats": ["benj", "jun"], "club": 0, "period": "2026", "date": "2026-10-11", "op": "", "dur": "3.75", "comp": 1, "handi": 0, "home": 0, "title": "Interclubs U15 (équipes de 4 · nés 2012 & 2011)", "lieu": "OYONNAX", "bassin": "25m", "color": "#ffffff", "dateText": "Dimanche 11", "program": "<div class=\"progbox\"><b>Interclubs U15</b> (équipes de 4 · nés 2012 &amp; 2011) · Oyonnax · Bassin 25 m (8 lignes) · deux réunions · engagements Extranat.<br><u>R1</u> (éch. 8h30) : Relais 4×50 NL · 50 Brasse · 50 Pap.<br><u>R2</u> (éch. 14h) : 50 NL · 50 Dos · Relais 4×100 4N.<br>Toutes catégories · équipes de 4 non mixtes · Règlement FFN p.85–87 · 4 épreuves indiv. + 2 relais · règle des deux départs.</div>"},{"type":"ev","id":"13","cats":[],"club":0,"period":"2026","date":"2026-10-17","op":"","dur":"3.75","comp":0,"handi":0,"home":0,"title":"Assemblée générale Ligue AuRa","lieu":"BELLEVILLE-EN-BEAUJOLAIS","bassin":"","color":"#ffffff","dateText":"Samedi 17","program":""},{"type":"ev","id":"14","cats":["handi"],"club":0,"period":"2026","date":"2026-10-18","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Plot 1 du C.N.C. Handisport","lieu":"VALENCE","bassin":"25m","color":"#ffffff","dateText":"Dimanche 18","program":""},{"type":"ev","id":"15","cats":["jun"],"club":0,"period":"2026","date":"2026-10-22","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"France Elite (petit bassin)","lieu":"ANGERS","bassin":"","color":"#ffffff","dateText":"Jeudi 22 au dimanche 25","program":"<div class=\"progbox\"><b>
205Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"ev","id":"16","cats":["enf","av","benj","jun","mai","handi"],"club":0,"period":"2026","date":"2026-10-17","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Vacances de la Toussaint 2026 : samedi 17 octobre au dimanche 01 novembre inclus","lieu":"Vacances de la Toussaint 2026 : samedi 17 octobre au dimanche 01 novembre inclus","bassin":"Vacances de la Toussaint 2026 : samedi 17 octobre au dimanche 01 novembre inclus","color":"#ffffff","dateText":"Vacances de la Toussaint 2026 : samedi 17 octobre au dimanche 01 novembre inclus","program":""},{"type":"ev","id":"17","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2026","date":"2026-10-17","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"Arrêt Technique Fermeture ValséO","lieu":"BELLEGARDE","bassin":"25m","color":"#FCE4D6","dateText":"Samedi 17 au dimanche 25","program":""},{"type":"ev","id":"18","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2026","date":"2026-10-26","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"STAGES CNBV","lieu":"BELLEGARDE","bassin":"25m","color":"#FCE4D6","dateText":"Lundi 26 au vendredi 30","program":""},{"type":"mois","label":"NOVEMBRE 2026"},{"type":"ev","id":"19","cats":["av","benj","jun","mai"],"club":0,"period":"2026","date":"2026-11-07","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Interclubs Finale TC Ligue AuRa","lieu":"VILLEFRANCHE-EN-BEAUJOLAIS","bassin":"25m","color":"#ffffff","dateText":"Samedi 07","program":"<div class=\"progbox\"><b>Interclubs Toutes Catégories</b>.<br><i>Programme et compo d'équipe : à venir.</i></div>"},{"type":"ev","id":"20","cats":["benj","jun","mai"],"club":0,"period":"2026","date":"2026-11-08","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Interclubs départementaux TC","lieu":"BOURG","bassin":"25m","color":"#ffffff","dateText":"Dimanche 08","program":"<div class=\"progbox\"><b>Interclubs départementaux TC (Toutes Catégories)</b> · Bassin 25 m (8 lignes) · deux réunions · engagements Extranat.<br><u>R1</u> (éch. 8h30) : 10×50 NL (D+M) · 100 Dos D / 200 Dos M · 100 Brasse D / 200 Brasse M · 100 NL D / 400 NL M · 100 Pap D / 200 Pap M · 100 4N D / 200 4N M · (pause) 4×200 NL Dames.<br><u>R2</u> (éch. 14h) : 4×200 NL M · 200 Dos D / 100 Dos M · 200 Brasse D / 100 Brasse M · 400 NL D / 100 NL M · 200 Pap D / 100 Pap M · 200 4N D / 100 4N M · (pause) 4×100 4N (D &amp; M).<br>Règlement FFN p.88–93 · toute l'équipe fait le programme pour être classée · avenirs : SNS + licence Nat. Course · classements Dames et Messieurs · qualificative meetings Ligue · règle des deux départs.</div>"},{"type":"ev","id":"21","cats":["benj"],"club":0,"period":"2026","date":"2026-11-22","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Meeting départemental U12 & U13","lieu":"FERNEY","bassin":"25m","color":"#ffffff","dateText":"Dimanche 22","program":"<div class=\"progbox\"><b>Meeting départemental U12 &amp; U13</b> · Ferney · Bassin 25 m (6 lignes) · deux réunions · engagements Extranat.<br><u>R1</u> (éch. 8h30) : 800 NL · 50 Pap · 100 Dos · 50 Brasse · 200 Pap · 400 4N · 100 NL · 200 Brasse · 200 NL.<br><u>R2</u> (éch. 14h) : 1500 NL · 50 Dos · 100 4N · 50 NL · 100 Brasse · 200 4N · 400 NL · 100 Pap · 200 Dos.<br>Qualificative aux Championnats de France U13 en 25 m (règlement FFN p.41). Amendes : 800/1500 NL &amp; 400 4N. 1 seul départ par course.</div>"},{"type":"ev","id":"22","cats":["benj","jun","mai","handi"],"club":0,"period":"2026","date":"2026-11-22","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Journée Multinage Handi-Valide","lieu":"SAINT-ETIENNE","bassin":"25m","color":"#ffffff","dateText":"Dimanche 22","program":""},{"type":"ev","id":"23","cats":["jun"],"club":0,"period":"2026","date":"2026-11-27","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnats Ligue AuRa Hiver (25m)","lieu":"ROMANS-SUR-ISERE","bassin":"25m","color":"#BDD7EE","dateText":"Vendredi 27 au dimanche 29","program":"<div class=\"progbox\"><b>
205Championnats Ligue AuRA Hiver (25 m)</b> — U18.<br><b>Sur qualification</b> (grille bleue). <b>Grille : à venir.</b></div>"},{"type":"mois","label":"DECEMBRE 2026"},{"type":"ev","id":"24","cats":["enf","av"],"club":0,"period":"2026","date":"2026-12-05","op":"14:00","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Finale Trophée de l'Ain (U11 et moins)","lieu":"AMBERIEU","bassin":"25m","color":"#ffffff","dateText":"Samedi 05 (après-midi)","program":"<div class=\"progbox\"><b>Finale Trophée de l'Ain (U11 et moins)</b> · Ambérieu · Bassin 25 m (8 lignes) · échauffement 14h–15h · engagements Extranat.<br>Le nageur choisit <b>un</b> des 3 Trophées et dispute toutes ses courses :<br>• <b>Nageur le plus complet</b> : 100 4N · 200 NL · 50 NL.<br>• <b>Sprint</b> : 50 Pap · 50 Dos · 50 Brasse · 50 NL.<br>• <b>100 m</b> : 100 Pap · 100 Dos · 100 Brasse · 100 NL.<br><u>Règlement</u> : règle des deux départs · toutes années d'âge confondues, D/M séparés · SNS obligatoire.<br><u>Récompenses</u> : médailles aux 3 premières/premiers de chaque Trophée — classements distincts Avenirs 1 (2015) / 2 (2016) / 3 (2017 &amp; après).</div>"},{"type":"ev","id":"25","cats":["handi"],"club":0,"period":"2026","date":"2026-12-05","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Championnat de France Hiver 25m Handisport (à confirmer)","lieu":"(à définir)","bassin":"25m","color":"#ffffff","dateText":"Samedi 05 et dimanche 06","program":"<div class=\"progbox\"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"ev","id":"26","cats":["benj","jun"],"club":0,"period":"2026","date":"2026-12-06","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Meeting départemental U12 +","lieu":"AMBERIEU","bassin":"25m","color":"#ffffff","dateText":"Dimanche 06","program":"<div class=\"progbox\"><b>Meeting départemental (U12 et +)</b> · Ambérieu · Bassin 25 m (8 lignes) · deux réunions · engagements Extranat.<br><u>R1</u> (éch. 8h30) : 200 4N · 50 Brasse · 100 Dos · 200 Pap · 100 NL · 50 Dos · 200 Brasse · 100 4N · Relais 4×50 4N Mixte.<br><u>R2</u> (éch. 14h) : 400 4N · 400 NL · 50 Pap · 100 Brasse · 200 NL · 50 NL · 100 Pap · 200 Dos.<br>Qualificative aux meetings Ligue (grilles jaune &amp; verte). 1 seul départ par course.</div>"},{"type":"ev","id":"27","cats":["jun"],"club":0,"period":"2026","date":"2026-12-08","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnats de France U18 (25m)","lieu":"(à définir)","bassin":"25m","color":"#ffffff","dateText":"Mardi 08 au samedi 12","program":"<div class=\"progbox\"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"ev","id":"28","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2026","date":"2026-12-17","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"Assemblée générale du club CNBV (à confirmer)","lieu":"BELLEGARDE","bassin":"","color":"#FCE4D6","dateText":"Jeudi 17","program":""},{"type":"ev","id":"29","cats":["benj"],"club":0,"period":"2026","date":"2026-12-17","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnats de France U12-U13","lieu":"CHOLET","bassin":"25m","color":"#ffffff","dateText":"Jeudi 17 au samedi 19","program":"<div class=\"progbox\"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"ev","id":"30","cats":["benj"],"club":0,"period":"2026","date":"2026-12-20","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Finale Coupe de France des départements","lieu":"CHOLET","bassin":"25m","color":"#ffffff","dateText":"Dimanche 20 et lundi 21","program":"<div class=\"progbox\"><b>Coupe de France des départements</b> · équipe départementale sélectionnée par le Comité de l'Ain.</div>"},{"type":"ev","id":"31","cats":["enf","av","benj","jun","mai","handi"],"club":0,"period":"2026","date":"2026-12-19","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Vacances de Noël 2026 : samedi 19 décembre 2026 au dimanche 03 janvier 2027 inclus","lieu":"Vacances de Noël 2026 : samedi 19 décembre 2026 au dimanche 03 janvier 2027 inclus","bassin":"Vacances de Noël 2026 : samedi 19 décembre 2026 au dimanche 03 janvier 2027 inclus","color":"#ffffff","dateText":"Vacances de Noël 2026 : samedi 19 décembre 2026 au dimanche 03 janvier 2027 inclus","program":""},{"type":"ev","id":"32","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2026","date":"2026-12-21","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"STAGES CNBV","lieu":"BELLEGARDE","bassin":"25m","color":"#FCE4D6","dateText":"Lundi 21-mardi 22 et lundi 28-mardi 29","program":""},{"type":"mois","label":"JANVIER 2027"},{"type":"janhdr","raw":"<tr class=\"janhdr\" data-keep=\"1\"><td class=\"l\" colspan=\"4\"><b>Changement de catégories au 1er janvier 2027 — nouvelles années ↓</b></td><td class=\"x\">
205(tous)</td><td class=\"x\">2016 &amp; +</td><td class=\"x\">2014-15</td><td class=\"x\">2013 &amp; -</td><td class=\"x\">2002 &amp; -</td><td class=\"x\">FFH</td></tr>"},{"type":"ev","id":"33","cats":["enf","av","benj","jun","handi"],"club":0,"period":"2027","date":"2027-01-16","op":"","dur":"3.75","comp":1,"handi":1,"home":1,"title":"Compétition interne CNBV","lieu":"BELLEGARDE (ValséO)","bassin":"25m","color":"#ffffff","dateText":"Samedi 16 (après-midi)","program":""},{"type":"ev","id":"34","cats":["mai"],"club":0,"period":"2027","date":"2027-01-16","op":"","dur":"3.75","comp":1,"handi":0,"home":1,"title":"Championnats de l'Ain Maîtres","lieu":"BELLEGARDE (ValséO)","bassin":"25m","color":"#ffffff","dateText":"Samedi 16 (OP : 17h)","program":""},{"type":"ev","id":"35","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2027","date":"2027-01-17","op":"","dur":"3.75","comp":0,"handi":1,"home":0,"title":"Thé Dansant CNBV","lieu":"CHATILLON","bassin":"","color":"#FCE4D6","dateText":"Dimanche 17","program":""},{"type":"ev","id":"36","cats":["jun"],"club":0,"period":"2027","date":"2027-01-23","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Meeting Ligue AuRa jaune","lieu":"LYON (VAISE)","bassin":"25m","color":"#FFE699","dateText":"Samedi 23 et dimanche 24","program":""},{"type":"ev","id":"37","cats":["enf","av"],"club":0,"period":"2027","date":"2027-01-30","op":"","dur":"3.75","comp":0,"handi":0,"home":0,"title":"Regroupement avenirs (U11 et -)","lieu":"BOURG","bassin":"25m","color":"#ffffff","dateText":"Samedi 30 (matin)","program":""},{"type":"ev","id":"38","cats":["enf","av"],"club":0,"period":"2027","date":"2027-01-30","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Circuit Avenirs Plot n°1 (U11 et -) (OP : 14h)","lieu":"BOURG","bassin":"25m","color":"#ffffff","dateText":"Samedi 30 (après-midi)","program":"<div class=\"progbox\"><b>Circuit Avenirs — Natathlon (Plot)</b> · Bassin 25 m · après-midi (OP 14h) · 4 courses max/nageur (hors relais).<br><u>Épreuves</u> : 100 4N · 50 Dos · 100 Dos · 50 Brasse · 100 Brasse · 50 NL · 100 NL · 50 Pap · 100 Pap (D &amp; M) — puis <b>Relais mixte 4×50 NL</b> (2F+2G).<br><u>Catégories</u> : Avenirs 1 = U11 (2015) · Avenirs 2 = U10 (2016) · Avenirs 3 = U9 (2017 &amp; après). SNS requis · règle des deux départs.</div>"},{"type":"ev","id":"39","cats":["benj","jun"],"club":0,"period":"2027","date":"2027-01-31","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Compétition 1/2 fond (50m) (U12 et +)","lieu":"OYONNAX","bassin":"50m","color":"#ffffff","dateText":"Dimanche 31 (matin)","program":""},{"type":"ev","id":"40","cats":["benj","jun"],"club":0,"period":"2027","date":"2027-01-31","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnat départemental sprint (50m) (U12 et +)","lieu":"OYONNAX","bassin":"50m","color":"#ffffff","dateText":"Dimanche 31 (après-midi)","program":""},{"type":"mois","label":"FEVRIER 2027"},{"type":"ev","id":"41","cats":["jun"],"club":0,"period":"2027","date":"2027-02-05","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Meeting Ligue AuRa vert","lieu":"(à définir)","bassin":"50m","color":"#C6E0B4","dateText":"Vendredi 05 au dimanche 07","program":""},{"type":"ev","id":"42","cats":["benj"],"club":0,"period":"2027","date":"2027-02-06","op":"","dur":"3.75","comp":0,"handi":0,"home":0,"title":"Regroupement Benjamins (U12 & U13)","lieu":"BELLEY","bassin":"","color":"#ffffff","dateText":"Samedi 06 ou dimanche 07","program":""},{"type":"ev","id":"43","cats":["handi"],"club":0,"period":"2027","date":"2027-02-07","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Plot 2 du C.N.C. Handisport","lieu":"BRON","bassin":"25m","color":"#ffffff","dateText":"Dimanche 07","program":""},{"type":"ev","id":"44","cats":["enf","av","benj","jun","mai","handi"],"club":0,"period":"2027","date":"2027-02-13","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Vacances d'hiver 2027 : samedi 13 février au dimanche 28 février inclus","lieu":"Vacances d'hiver 2027 : samedi 13 février au dimanche 28 février inclus","bassin":"Vacances d'hiver 2027 : samedi 13 février au dimanche 28 février inclus","color":"#ffffff","dateText":"Vacances d'hiver 2027 : samedi 13 février au dimanche 28 février inclus","program":""},{"type":"ev","id":"45","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2027","date":"2027-02-15","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"STAGES CNBV","lieu":"BELLEGARDE","bassin":"25m","color":"#FCE4D6","dateText":"Lundi 15 au vendredi 19","program":""},{"type":"ev","id":"46","cats":["handi"],"club":0,"period":"2027","date":"2027-02-15","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Stage régional Handisport AuRA","lieu":"VICHY","bassin":"","color":"#ffffff","dateText":"Mardi 15 au samedi 19","program":""},{"type":"mois","label":"MARS 2027"},{"type":"ev","id":"47","cats":["benj","jun","mai"],"club":0,"period":"2027","date":"2027-03-05","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Webconfrontation / Championnats Ligue AuRa Printemps (50m)","lieu":"(à définir)","bassin":"50m","color":"#BDD7EE","dateText":"Vendredi 05 au dimanche 07","program":""},{"type":"ev","id":"48","cats":["enf","av"],"club":0,"period":"2027","date":"2027-03-13","op":"","dur":"3.75","comp":0,"handi":0,"home":0,"title":"Regroupement avenirs (U11 et -)","lieu":"FERNEY","bassin":"25m","color":"#ffffff","dateText":"Samedi 13 (matin) ?","program":""},{"type":"ev","id":"49","cats":["enf","av"],"club":0,"period":"2027","date":"2027-03-13","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Circuit Avenirs Plot n°2 (U11 et -) (OP : 14h)","lieu":"FERNEY","bassin":"25m","color":"#ffffff","dateText":"Samedi 13 (après-midi) ?","program":"<div class=\"progbox\"><b>Circuit Avenirs — Natathlon (Plot)</b> · Bassin 25 m · après-midi (OP 14h) · 4 courses max/nageur (hors relais).<br><u>Épreuves</u> : 100 4N · 50 Dos · 100 Dos · 50 Brasse · 100 Brasse · 50 NL · 100 NL · 50 Pap · 100 Pap (D &amp; M) — puis <b>Relais mixte 4×50 NL</b> (2F+2G).<br><u>Catégories</u> : Avenirs 1 = U11 (2015) · Avenirs 2 = U10 (2016) · Avenirs 3 = U9 (2017 &amp; après). SNS requis · règle des deux départs.</div>"},{"type":"ev","id":"50","cats":["benj","jun","mai"],"club":0,"period":"2027","date":"2027-03-14","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnats départementaux (U12 et +)","lieu":"BOURG","bassin":"25m","color":"#ffffff","dateText":"Dimanche 14","program":""},{"type":"ev","id":"51","cats":["jun"],"club":0,"period":"2027","date":"2027-03-19","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Challenge national n°1","lieu":"(à définir)","bassin":"","color":"#ffffff","dateText":"Vendredi 19 au dimanche 21","program":"<div class=\"progbox\"><b>
205Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"ev","id":"52","cats":["handi"],"club":0,"period":"2027","date":"2027-03-27","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Championnat Interrégional Handisport","lieu":"AIX-EN-PROVENCE","bassin":"50m","color":"#ffffff","dateText":"Samedi 27 et dimanche 28","program":""},{"type":"mois","label":"AVRIL 2027"},{"type":"ev","id":"53","cats":["benj"],"club":0,"period":"2027","date":"2027-04-04","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Interclubs (U12-U13)","lieu":"BOURG","bassin":"25m","color":"#ffffff","dateText":"Dimanche 04","program":""},{"type":"ev","id":"54","cats":["enf","av","benj","jun","mai","handi"],"club":0,"period":"2027","date":"2027-04-10","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Vacances de printemps 2027 : samedi 10 avril au dimanche 25 avril inclus","lieu":"Vacances de printemps 2027 : samedi 10 avril au dimanche 25 avril inclus","bassin":"Vacances de printemps 2027 : samedi 10 avril au dimanche 25 avril inclus","color":"#ffffff","dateText":"Vacances de printemps 2027 : samedi 10 avril au dimanche 25 avril inclus","program":""},{"type":"ev","id":"55","cats":["benj","jun"],"club":0,"period":"2027","date":"2027-04-10","op":"","dur":"3.75","comp":0,"handi":0,"home":0,"title":"Grand Prix d'Oyonnax + / regroupement U12 & U13","lieu":"OYONNAX","bassin":"25m","color":"#ffffff","dateText":"Samedi 10 et dimanche 11","program":""},{"type":"ev","id":"56","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2027","date":"2027-04-12","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"STAGES CNBV","lieu":"BELLEGARDE","bassin":"25m","color":"#FCE4D6","dateText":"Lundi 12 au mercredi 14","program":""},{"type":"ev","id":"57","cats":["benj","jun","club"],"club":1,"period":"2027","date":"2027-04-18","op":"","dur":"3.75","comp":0,"handi":0,"home":0,"title":"STAGE SPORTIF BASSIN 50m","lieu":"Espagne","bassin":"50m","color":"#FCE4D6","dateText":"Dimanche 18 au samedi 24","program":""},{"type":"ev","id":"58","cats":["jun"],"club":0,"period":"2027","date":"2027-04-23","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Challenge national n°2","lieu":"(à définir)","bassin":"","color":"#ffffff","dateText":"Vendredi 23 au dimanche 25","program":"<div class=\"progbox\"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"ev","id":"59","cats":["jun"],"club":0,"period":"2027","date":"2027-04-26","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnat de France U18","lieu":"(à définir)","bassin":"","color":"#ffffff","dateText":"Lundi 26 au dimanche 02 (mai)","program":"<div class=\"progbox\"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"mois","label":"MAI 2027"},{"type":"ev","id":"60","cats":["enf","av"],"club":0,"period":"2027","date":"2027-05-02","op":"","dur":"3.75","comp":0,"handi":0,"home":0,"title":"Regroupement Avenirs (U11 et -)","lieu":"FERNEY","bassin":"25m","color":"#ffffff","dateText":"Dimanche 02","program":""},{"type":"ev","id":"61","cats":["enf","av"],"club":0,"period":"2027","date":"2027-05-02","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Interclubs U11 et moins","lieu":"FERNEY","bassin":"25m","color":"#ffffff","dateText":"Dimanche 02","program":""},{"type":"ev","id":"62","cats":["jun"],"club":0,"period":"2027","date":"2027-05-15","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Meeting Ligue AuRa jaune","lieu":"(à définir)","bassin":"50m","color":"#FFE699","dateText":"Samedi 15 et dimanche 16","program":""},{"type":"ev","id":"63","cats":["benj"],"club":0,"period":"2027","date":"2027-05-22","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Coupe de France des départements (U12 & U13)","lieu":"(à définir)","bassin":"","color":"#ffffff","dateText":"Samedi 22 et dimanche 23","program":""},{"type":"ev","id":"64","cats":["handi"],"club":0,"period":"2027","date":"2027-05-23","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Plot 3 du C.N.C. Handisport","lieu":"SAINT-ETIENNE","bassin":"25m","color":"#ffffff","dateText":"Dimanche 23","program":""},{"type":"ev","id":"65","cats":["benj","jun"],"club":0,"period":"2027","date":"2027-05-30","op":"","dur":"3.75","comp":1,"handi":0,"home":1,"title":"Meeting départemental (U12 et +)","lieu":"BELLEGARDE (ValséO)","bassin":"25m","color":"#ffffff","dateText":"Dimanche 30","program":"<div class=\"progbox\"><b>Meeting du Circuit Juniors &amp; + (U12 et +)</b>.<br>Qualificatif pour les Meetings/Championnats de Ligue.<br><i>Programme détaillé : à venir.</i></div>"},{"type":"ev","id":"66","cats":["jun"],"club":0,"period":"2027","date":"2027-05-29","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnats de France Elite (50m)","lieu":"(à définir)","bassin":"50m","color":"#ffffff","dateText":"Samedi 29 mai au jeudi 03 juin","program":"<div class=\"progbox\"><b>
205Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"mois","label":"JUIN 2027"},{"type":"ev","id":"67","cats":["enf","av"],"club":0,"period":"2027","date":"2027-06-05","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Coupe PLEWINSKI (U11 et -)","lieu":"(à définir)","bassin":"25m","color":"#ffffff","dateText":"Samedi 05 et dimanche 06","program":""},{"type":"ev","id":"68","cats":["jun"],"club":0,"period":"2027","date":"2027-06-11","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Meeting de Ligue AuRA vert","lieu":"(à définir)","bassin":"50m","color":"#C6E0B4","dateText":"Vendredi 11 au dimanche 13","program":""},{"type":"ev","id":"69","cats":["enf","av"],"club":0,"period":"2027","date":"2027-06-19","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Circuit Avenirs Plot n°3 (U11 et -) (OP : 14h)","lieu":"AMBERIEU","bassin":"25m","color":"#ffffff","dateText":"Samedi 19 (après-midi)","program":"<div class=\"progbox\"><b>Circuit Avenirs — Natathlon (Plot)</b> · Bassin 25 m · après-midi (OP 14h) · 4 courses max/nageur (hors relais).<br><u>Épreuves</u> : 100 4N · 50 Dos · 100 Dos · 50 Brasse · 100 Brasse · 50 NL · 100 NL · 50 Pap · 100 Pap (D &amp; M) — puis <b>Relais mixte 4×50 NL</b> (2F+2G).<br><u>Catégories</u> : Avenirs 1 = U11 (2015) · Avenirs 2 = U10 (2016) · Avenirs 3 = U9 (2017 &amp; après). SNS requis · règle des deux départs.</div>"},{"type":"ev","id":"70","cats":["benj","jun"],"club":0,"period":"2027","date":"2027-06-20","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Finale départementale (U12 et +) (50m)","lieu":"OYONNAX","bassin":"50m","color":"#ffffff","dateText":"Dimanche 20","program":""},{"type":"ev","id":"71","cats":["benj"],"club":0,"period":"2027","date":"2027-06-26","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Webconfrontation / Finalité Ligue AuRa (U12-U13)","lieu":"ANNEMASSE","bassin":"50m","color":"#ffffff","dateText":"Samedi 26 et dimanche 27","program":""},{"type":"ev","id":"72","cats":["handi"],"club":0,"period":"2027","date":"2027-06-01","op":"","dur":"3.75","comp":1,"handi":1,"home":0,"title":"Championnat de France Été 50m Handisport (date et lieu à définir)","lieu":"(à définir)","bassin":"50m","color":"#ffffff","dateText":"Samedi et dimanche (à définir)","program":"<div class=\"progbox\"><b>Championnat national</b> · sur qualification (minima FFN).<br><b>Grille / minima : à venir.</b></div>"},{"type":"mois","label":"JUILLET 2027"},{"type":"ev","id":"73","cats":["benj","jun"],"club":0,"period":"2027","date":"2027-07-02","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnats Ligue AuRA été (U13/14 et +)","lieu":"(à définir)","bassin":"","color":"#BDD7EE","dateText":"Vendredi 02 au dimanche 04","program":""},{"type":"ev","id":"74","cats":["club"],"club":1,"period":"2027","date":"2027-07-05","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Opération J'apprends à nager JAN","lieu":"BELLEGARDE (ValséO)","bassin":"","color":"#FCE4D6","dateText":"Lundi 05 au vendredi 16","program":""},{"type":"ev","id":"75","cats":["club"],"club":1,"period":"2027","date":"2027-07-19","op":"","dur":"3.75","comp":0,"handi":0,"home":1,"title":"Opération J'apprends à nager JAN","lieu":"BELLEGARDE (ValséO)","bassin":"","color":"#FCE4D6","dateText":"Lundi 19 au vendredi 30","program":""},{"type":"ev","id":"76","cats":["av","benj","jun","mai"],"club":0,"period":"2027","date":"2027-07-10","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Traversée du Lac de Nantua (organisation clubs de l'Ain)","lieu":"NANTUA","bassin":"","color":"#ffffff","dateText":"Samedi 10 (tôt matin)","program":""},{"type":"ev","id":"77","cats":["enf","av","benj","jun","mai","handi","club"],"club":1,"period":"2027","date":"2027-07-11","op":"","dur":"3.75","comp":0,"handi":1,"home":1,"title":"Fête du club CNBV","lieu":"BELLEGARDE (ValséO)","bassin":"","color":"#FCE4D6","dateText":"Dimanche 11","program":""},{"type":"ev","id":"78","cats":["benj","jun","mai"],"club":0,"period":"2027","date":"2027-07-23","op":"","dur":"3.75","comp":1,"handi":0,"home":0,"title":"Championnats Open d'été (50m)","lieu":"(à définir)","bassin":"50m","color":"#ffffff","dateText":"Vendredi 23 au mercredi 28","program":""}];
206/* ===== CNBV — moteur calendrier en ligne (rendu + import Excel) ===== */
207/* Rendu fidèle : rows JSON -> lignes du <tbody>. Réutilisé pour l'affichage en ligne
208   ET pour l'aperçu d'import. Règles validées 60/60 contre le calendrier existant. */
209
210var CAL_HDR='<tr class="hdr"><th>DATES</th><th>Bassin</th><th>DÉSIGNATION</th><th>LIEUX</th><th class="ct">E.N.F<br><small>tous âges</small></th><th class="ct">AVENIRS<br><small>11 ans et -<br>2015 &amp; +</small></th><th class="ct">BENJAMINS<br><small>12-13 ans<br>2013-2014</small></th><th class="ct">JUNIORS ET +<br><small>14 ans et +<br>2012 &amp; -</small></th><th class="ct">MAÎTRES<br><small>25 ans et +<br>2001 &amp; -</small></th><th class="ct">HANDI<br><small>cat. FFH</small></th></tr>';
211
212/* Picto Handisport (symbole fauteuil, générique — remplaçable par le logo FFH) */
213var CAL_HANDI_SVG='<img class="hlogo" alt="Handisport" title="Handisport" src="data:image/png;base64,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">';
214
215var CAL_CATLABEL={enf:'ENF',av:'Av',benj:'Benj',jun:'Jun+',mai:'Maî',handi:'Handi'};
216var CAL_CATORDER=['enf','av','benj','jun','mai','handi'];
217
218function calEsc(s){return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');}
219function calCatArr(c){return Array.isArray(c)?c.slice():String(c||'').split(/\s+/).filter(Boolean);}
220function calCatsum(cats){
221  var lab=CAL_CATORDER.filter(function(c){return cats.indexOf(c)>=0;}).map(function(c){return CAL_CATLABEL[c];});
222  if(lab.length) return lab.join(' · ');
223  if(cats.indexOf('club')>=0) return 'Club';
224  return '—';
225}
226function calCells(cats){
227  return CAL_CATORDER.map(function(c){return cats.indexOf(c)>=0?'<td class="x"><span class="on">X</span></td>':'<td class="x"></td>';}).join('');
228}
229function calBadge(e){
230  var t=calSA(e.title||''); var col=String(e.color||'').toUpperCase();
231  var comp=(String(e.comp)==='1'||e.comp===1);
232  if(/regroupement|coupe.*departement|plewinski/.test(t)) return ' <span class="badge bdep">🎯 Sélection</span>';
233  if(!comp) return '';
234  if(/france|national|interregional/.test(t)) return ' <span class="badge bnat">🎯 National</span>';
235  if(/ligue/.test(t) || col==='#BDD7EE' || col==='#FFE699' || col==='#C6E0B4') return ' <span class="badge blig">🎯 Ligue</span>';
236  return '';
237}
238function calEvRow(e){
239  var cats=calCatArr(e.cats);
240  var comp=String(e.comp)==='1'||e.comp===1;
241  var handi=e.handi==1||cats.indexOf('handi')>=0||/handi/i.test(e.title||'');
242  var prog=e.program||'';
243  var dep=!!prog;                          // dépliable seulement si programme présent
244  var color=e.color||'#ffffff';
245  var search=calEsc(((e.title||'')+' '+(e.lieu||'')).toLowerCase());
246  var attrs='data-id="'+calEsc(e.id)+'" data-cats="'+calEsc(cats.join(' '))+'" data-club="'+(e.club?1:0)
247    +'" data-period="'+calEsc(e.period||String(e.date||'').slice(0,4))+'" data-date="'+calEsc(e.date)
248    +'" data-op="'+calEsc(e.op||'')+'" data-dur="'+calEsc(e.dur||'3.75')+'" data-comp="'+(comp?1:0)
249    +'" data-home="'+(e.home?1:0)+'" data-title="'+calEsc(e.title)+'" data-lieu="'+calEsc(e.lieu)
250    +'" data-search="'+search+'"';
251  var style=(dep?'cursor:pointer;':'')+'background:'+color;
252  var onclick=dep?' onclick="tog(\''+calEsc(e.id)+'\')"':'';
253  var caret=dep?'<span class="car" id="car'+calEsc(e.id)+'">
253▸</span> ':'';
254  var home=e.home?' <span class="home" title="À Bellegarde / ValséO">🏠</span>':'';
255  var hlogo=handi?' '+CAL_HANDI_SVG:'';
256  var ics='<button class="ics noprint" title="Ajouter à mon agenda" onclick="event.stopPropagation();ics(this)">📅</button>';
257  var html='<tr class="ev" '+attrs+onclick+' style="'+style+'">'
258    +'<td class="l">'+calEsc(e.dateText||'')+' '+ics+'</td>'
259    +'<td class="c">'+calEsc(e.bassin||'')+'</td>'
260    +'<td class="l">'+caret+'<b>'+calEsc(e.title)+'</b>'+home+calBadge(e)+'<span class="catsum">'+calCatsum(cats)+'</span></td>'
261    +'<td class="l">'+(handi?CAL_HANDI_SVG+' ':'')+calEsc(e.lieu||'')+'</td>'
262    +calCells(cats)+'</tr>';
263  if(dep) html+='<tr class="prog" id="prog'+calEsc(e.id)+'" style="display:none"><td colspan="10">'+prog+'</td></tr>';
264  return html;
265}
266function calRenderRows(rows){
267  var html='';
268  for(var i=0;i<rows.length;i++){var r=rows[i];
269    if(r.type==='mois') html+='<tr class="mois"><td colspan="10">'+calEsc(r.label)+'</td></tr>';
270    else if(r.type==='vac' || (r.type==='ev' && /^vacances/.test(calSA(r.title||'')))){ var _vt=r.html||calEsc(r.title||r.label||''); var _vc=(r.color&&String(r.color).toUpperCase()!=='#FFFFFF')?r.color:'#FFF2CC'; html+='<tr class="vac" data-keep="1"><td colspan="10" style="background:'+_vc+';color:#5b4a12;font-weight:600">'+_vt+'</td></tr>'; }
271    else if(r.type==='janhdr') html+=(r.raw||'');
272    else if(r.type==='ev') html+=calEvRow(r);
273  }
274  return html;
275}
276
277/* ===== Import Excel -> rows (mêmes règles que la validation Python) ===== */
278var CAL_MONTHS={'JANVIER':1,'FEVRIER':2,'FÉVRIER':2,'MARS':3,'AVRIL':4,'MAI':5,'JUIN':6,'JUILLET':7,'AOUT':8,'AOÛT':8,'SEPTEMBRE':9,'OCTOBRE':10,'NOVEMBRE':11,'DECEMBRE':12,'DÉCEMBRE':12};
279function calSA(s){return String(s||'').normalize('NFD').replace(/[̀-ͯ]/g,'').toLowerCase();}
280function calArgb(cell){
281  try{var f=cell&&cell.fill; if(f&&f.type==='pattern'&&f.fgColor){var a=f.fgColor.argb; if(a) return '#'+String(a).slice(-6).toUpperCase();}}catch(e){}
282  return '';
283}
284function calCellVal(cell){var v=cell?cell.value:null; if(v&&typeof v==='object'){ if('text' in v)return v.text; if('result' in v)return v.result; if(v.richText)return v.richText.map(function(t){return t.text;}).join(''); } return v==null?'':String(v);}
285/* ws = worksheet ExcelJS. oldRows = calendrier en ligne actuel (pour conserver les programmes). */
286function calParseSheet(ws, oldRows){
287  var progByKey={}; (oldRows||[]).forEach(function(r){ if(r.type==='ev'&&r.program) progByKey[calSA(r.title)+'|'+(r.date||'')]=r.program; });
288  var rows=[]; var cm=null,cy=null; var nextId=1;
289  var maxR=ws.rowCount||ws.actualRowCount||103;
290  for(var r=3;r<=maxR;r++){
291    var A=String(calCellVal(ws.getCell(r,1))||'').trim();
292    var C=String(calCellVal(ws.getCell(r,3))||'').trim();
293    if(!A && !C) continue;
294    var up=A.toUpperCase();
295    if(up.indexOf('LEGENDE')===0||up.indexOf('LÉGENDE')===0) break;
296    var mm=/^([A-ZÉÛÔ]+)\s+(\d{4})$/.exec(up);
297    if(mm && CAL_MONTHS[mm[1]]){ cm=CAL_MONTHS[mm[1]]; cy=+mm[2]; rows.push({type:'mois',label:A}); continue; }
298    if(calSA(A).indexOf('changement de categor')===0){ rows.push({type:'janhdr',raw:CAL_JANHDR}); continue; }
299    if(calSA(A).indexOf('vacances')===0 || calSA(C).indexOf('vacances')===0){ var _va=(calSA(A).indexOf('vacances')===0?A:C); var _vcol=calArgb(ws.getCell(r,1))||'#FFF2CC'; rows.push({type:'vac',html:calEsc(_va),color:_vcol}); continue; }
300    if(!C) continue;
301    // événement
302    var cats=[]; for(var i=0;i<6;i++){ var cv=calCellVal(ws.getCell(r,5+i)); if(cv!==''&&cv!=null) cats.push(CAL_CATORDER[i]); }
303    var color=calArgb(ws.getCell(r,3))||calArgb(ws.getCell(r,5))||'#ffffff';
304    var club=color.toUpperCase()==='#FCE4D6'; if(club) cats.push('club');
305    var lieu=String(calCellVal(ws.getCell(r,4))||'').trim();
306    var bassin=String(calCellVal(ws.getCell(r,2))||'').trim();
307    var des=calSA(C);
308    var comp=(club||/\b(assemblee|regroupement|reunion)\b/.test(des))?0:1;
309    var handi=(cats.indexOf('handi')>=0||/handi/.test(des))?1:0;
310    var home=/bellegarde|valseo|valserh/.test(calSA(lieu))?1:0;
311    var dm=/\b(\d{1,2})\b/.exec(A); var day=dm?(+dm[1]):1;
312    var iso=cy?(cy+'-'+('0'+cm).slice(-2)+'-'+('0'+day).slice(-2)):'';
313    var key=calSA(C)+'|'+iso;
314    rows.push({type:'ev',id:String(nextId++),cats:cats,club:club?1:0,period:String(cy||''),date:iso,op:'',dur:'3.75',
315      comp:comp,handi:handi,home:home,title:C,lieu:lieu,bassin:bassin,color:color,
316      dateText:A.replace(/\s+/g,' ').trim(),program:progByKey[key]||''});
317  }
318  return rows;
319}
320
321var CAL_JANHDR='<tr class="janhdr" data-keep="1"><td class="l" colspan="4"><b>Changement de catégories au 1er janvier 2027 — nouvelles années ↓</b></td><td class="x">(tous)</td><td class="x">2016 &amp; +</td><td class="x">2014-15</td><td class="x">2013 &amp; -</td><td class="x">2002 &amp; -</td><td class="x">FFH</td></tr>';
322
323
324/* ===== Runtime : lecture en ligne + Mon espace coach ===== */
325var CAL_COACH=''; try{CAL_COACH=localStorage.getItem('cal_coach')||'';}catch(e){}
326var CAL_ONLINE=null, CAL_IMPORT=null;
327function calMarkToday(){var T=(typeof TODAY!=='undefined')?TODAY:'';document.querySelectorAll('#cal tr.ev').forEach(function(r){if(r.dataset.date===T)r.classList.add('today');});}
328function calReinit(){
329  calMarkToday();
330  try{setPrintHdr();}catch(e){}
331  try{if(typeof tagBW==='function')tagBW();}catch(e){}
332  try{var f=(typeof LS!=='undefined')?LS.get('cal_filter'):'',y=(typeof LS!=='undefined')?LS.get('cal_year'):'';
333    if(f==='year'&&y){document.getElementById('year').value=y;fltYear(y);}
334    else if(f&&f!=='home'&&f!=='year'){flt(f);} else {flt('all');}
335  }catch(e){try{flt('all');}catch(_){}}
336  try{if(typeof NL_NAME!=='undefined'&&NL_NAME){markComps();markSelections();}}catch(e){}
337}
338function calApplyOnline(rows){
339  if(!rows||!rows.length)return false;
340  var tb=document.querySelector('#cal tbody'); if(!tb)return false;
341  tb.innerHTML=calRenderRows(rows); CAL_ONLINE=rows; calReinit(); return true;
342}
343async function calOnlineLoad(){
344  try{var r=await fetch(QWORKER+'/calendar');var d=await r.json();
345    if(d&&d.ok&&d.rows&&d.rows.length){calApplyOnline(d.rows);}}catch(e){}
346}
347function coachStat(msg,cls){var s=document.getElementById('cb-stat'); if(s){s.textContent=msg;s.className='cbstat '+(cls||'');}}
348function coachHtml(){
349  return '<div class="coachbox">'
350    +'<h3>🧑‍🏫 Mon espace coach</h3>'
351    +'<div class="cbsec"><b>1) Activer la lecture en ligne</b>'
352      +'<div class="cbnote">Publie le calendrier actuel (avec ses programmes) une seule fois, pour que la lecture en ligne prenne le relais.</div>'
353      +'<button class="nl-btn" onclick="coachInit()">Publier le calendrier actuel en ligne</button></div>'
354    +'<div class="cbsec"><b>2) Mettre à jour depuis un Excel</b>'
355      +'<div class="cbnote">Dépose le fichier .xlsx. Couleurs, catégories et logo Handi sont repris automatiquement ; les programmes déjà en ligne sont conservés.</div>'
356      +'<input type="file" id="cb-file" accept=".xlsx,.xlsm">'
357      +'<div id="cb-prev" class="cbprev" style="display:none"></div>'
358      +'<button class="nl-btn" id="cb-pub" style="display:none" onclick="coachPublish()">Publier la mise à jour en ligne</button>'
359      +'<div class="amber">L’import remplace la liste des événements par celle de l’Excel. Les programmes détaillés (PDF/Word) et grilles de qualif viendront dans une prochaine étape.</div></div>'
360    +'<div id="cb-stat" class="cbstat"></div>'
361    +'<button class="nl-btn nl-out" onclick="coachLogout()">Se déconnecter</button>'
362    +'</div>';
363}
364function coachOpen(){ if(typeof nlOpen==='function')nlOpen(); var b=document.getElementById('nl-body'); if(!b)return;
365  b.innerHTML=coachHtml(); var fi=document.getElementById('cb-file'); if(fi)fi.addEventListener('change',coachFile); }
366function coachLogout(){CAL_COACH='';try{localStorage.removeItem('cal_coach');}catch(e){} var btn=document.getElementById('nlogin-btn'); if(btn){btn.textContent='🏊 Espace nageur — me connecter';btn.setAttribute('onclick','nlOpen()');} if(typeof nlClose==='function')nlClose(); }
367async function calLoadExcelJS(){ if(window.ExcelJS)return true;
368  return new Promise(function(res){var s=document.createElement('script');
369    s.src='https://cdn.jsdelivr.net/npm/[email protected]/dist/exceljs.min.js';
370    s.onload=function(){res(!!window.ExcelJS);}; s.onerror=function(){res(false);}; document.head.appendChild(s);}); }
371async function coachFile(ev){
372  var f=ev.target.files&&ev.target.files[0]; if(!f)return;
373  coachStat('Lecture du fichier…','');
374  var okjs=await calLoadExcelJS(); if(!okjs){coachStat('Impossible de charger le lecteur Excel (connexion ?).','err');return;}
375  try{
376    var buf=await f.arrayBuffer(); var wb=new ExcelJS.Workbook(); await wb.xlsx.load(buf);
377    var ws=wb.getWorksheet('Calendrier 2026-2027')||wb.worksheets[0];
378    var oldRows=CAL_ONLINE||CAL_SEED; var rows=calParseSheet(ws,oldRows); CAL_IMPORT=rows;
379    var evs=rows.filter(function(r){return r.type==='ev';});
380    var oldKeys={}; (oldRows||[]).forEach(function(r){if(r.type==='ev')oldKeys[calSA(r.title)]=1;});
381    var nNew=evs.filter(function(e){return !oldKeys[calSA(e.title)];}).length;
382    var nProg=evs.filter(function(e){return e.program;}).length;
383    var nHandi=evs.filter(function(e){return e.handi;}).length;
384    var prev=document.getElementById('cb-prev'); prev.style.display='block';
385    prev.innerHTML=evs.map(function(e){return '<div>'+(oldKeys[calSA(e.title)]?'':'<span class="cbnew">NOUVEAU </span>')+calEsc(e.dateText)+' — '+calEsc(e.title)+(e.handi?' ♿':'')+'</div>';}).join('');
386    coachStat(evs.length+' événements · '+nNew+' nouveaux · '+nProg+' programmes conservés · '+nHandi+' Handi','ok');
387    document.getElementById('cb-pub').style.display='block';
388  }catch(e){coachStat('Erreur de lecture : '+e,'err');}
389}
390async function calPublish(rows){
391  try{var r=await fetch(QWORKER+'/calendar?pw='+encodeURIComponent(CAL_COACH),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({rows:rows})});
392    var d=await r.json(); return !!(d&&d.ok);}catch(e){return false;} }
393async function coachInit(){ if(!CAL_COACH){coachStat('Reconnecte-toi.','err');return;}
394  coachStat('Publication du calendrier actuel…',''); var ok=await calPublish(CAL_SEED);
395  coachStat(ok?'Calendrier actuel publié en ligne ✔':'Échec de publication.',ok?'ok':'err'); if(ok)calApplyOnline(CAL_SEED); }
396async function coachPublish(){ if(!CAL_IMPORT){coachStat('Importe d’abord un fichier.','err');return;}
397  coachStat('Publication…',''); var ok=await calPublish(CAL_IMPORT);
398  if(ok){coachStat('Calendrier mis à jour en ligne ✔','ok');calApplyOnline(CAL_IMPORT);setTimeout(function(){if(typeof nlClose==='function')nlClose();},1000);}
399  else coachStat('Échec de publication (code coach ?).','err'); }
400(function(){ try{ if(CAL_COACH){var btn=document.getElementById('nlogin-btn'); if(btn){btn.textContent='🧑‍🏫 Mon espace coach';btn.setAttribute('onclick','coachOpen()');}} }catch(e){} })();
401calOnlineLoad();
402</script>
402
403
404<!-- ==== CALX : Export vers Calendrier Apple (.ics) — ajouté ==== -->
405<style>
406#calx-ov{display:none;position:fixed;inset:0;z-index:100000;background:rgba(12,34,51,.55);padding:16px;overflow:auto}
407#calx-ov.on{display:flex;align-items:flex-start;justify-content:center}
408#calx-card{background:#fff;color:#0d2233;border-radius:16px;max-width:720px;width:100%;margin:24px auto;box-shadow:0 20px 60px rgba(0,0,0,.35);display:flex;flex-direction:column;max-height:88vh;overflow:hidden}
409#calx-card h2{margin:0;font-size:18px}
410.calx-head{padding:16px 18px 12px;border-bottom:1px solid #e6eef5;background:linear-gradient(180deg,#f2f8fc,#fff)}
411.calx-sub{margin:6px 0 0;font-size:13px;color:#5a7285;line-height:1.45}
412.calx-scope{margin-top:9px;font-size:12.5px;font-weight:700;color:#0b6ba8;background:#eaf4fb;border:1px solid #c5e0f0;border-radius:8px;padding:6px 11px;display:inline-block}
413.calx-tools{display:flex;flex-wrap:wrap;gap:7px;margin-top:12px}
414.calx-tools button{border:1px solid #cdddea;background:#fff;color:#0b3d63;border-radius:999px;padding:5px 12px;font-size:12.5px;font-weight:600;cursor:pointer;transition:background .12s}
415.calx-tools button:hover{background:#eaf3fa}
416.calx-tools .calx-none{color:#8a3b3b;border-color:#e6cccc}
417.calx-list{overflow-y:auto;padding:6px 8px 4px;flex:1}
418.calx-month{position:sticky;top:0;background:#fff;font-size:11px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:#0b6ba8;padding:10px 10px 4px;border-bottom:1px solid #eef4f9}
419.calx-row{display:flex;align-items:flex-start;gap:10px;padding:9px 10px;border-bottom:1px solid #f2f6fa;cursor:pointer}
420.calx-row:hover{background:#f7fbfe}
421.calx-row input{margin-top:3px;width:17px;height:17px;flex:none;accent-color:#0b6ba8;cursor:pointer}
422.calx-main{flex:1;min-width:0}
423.calx-title{font-size:14px;font-weight:600;line-height:1.25}
424.calx-meta{font-size:12px;color:#607889;margin-top:2px;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
425.calx-hintrow{font-size:11px;font-weight:600;color:#a2531a;background:#fdefe0;border:1px solid #f2cba0;border-radius:6px;padding:1px 7px}
426.calx-when{font-family:'IBM Plex Mono',ui-monospace,Menlo,monospace;font-size:11.5px;font-weight:600;color:#0e7a5f;background:#e7f6ef;border:1px solid #b7e3cd;border-radius:6px;padding:1px 7px;white-space:nowrap}
427.calx-when.allday{color:#8a5a00;background:#fdf3dc;border-color:#f0d79a}
428.calx-tag{font-size:10.5px;font-weight:700;border-radius:5px;padding:1px 6px}
429.calx-tag.comp{background:#e7eefc;color:#2242a0}
430.calx-tag.club{background:#fdeadb;color:#a2531a}
431.calx-tag.handi{background:#efe7fb;color:#5a2ea0}
432.calx-foot{padding:12px 16px;border-top:1px solid #e6eef5;display:flex;gap:10px;align-items:center;justify-content:space-between;background:#fafcfe}
433.calx-x{background:none;border:none;font-size:24px;line-height:1;color:#9fb2c2;cursor:pointer;padding:0}
434#calx-dl{background:#0b6ba8;color:#fff;border:none;border-radius:10px;padding:11px 18px;font-size:14.5px;font-weight:700;cursor:pointer;box-shadow:0 2px 8px rgba(11,107,168,.35)}
435#calx-dl:hover{background:#095c90}
436#calx-dl:disabled{background:#b8c7d3;box-shadow:none;cursor:not-allowed}
437.calx-hint{font-size:11.5px;color:#7d93a4}
438@media(max-width:560px){#calx-card{margin:0}.calx-sub{font-size:12px}}
439</style>
440<div id="calx-ov" onclick="if(event.target===this)calxClose()">
441  <div id="calx-card" role="dialog" aria-label="Exporter vers Calendrier">
442    <div class="calx-head">
443      <div style="display:flex;align-items:flex-start;justify-content:space-between;gap:10px">
444        <h2>📅 Exporter vers Calendrier Apple</h2>
445        <button class="calx-x" onclick="calxClose()" title="Fermer">×</button>
446      </div>
447      <p class="calx-sub">La liste reprend l'<b>affichage en cours</b> du calendrier (filtre par année de naissance, catégorie, « à venir »…). Décochez ce que vous ne voulez pas, puis téléchargez le fichier <b>.ics</b> : il s'ouvre dans Calendrier (Mac, iPad, iPhone). Horaires : matin <b>8h30–12h</b>, après-midi <b>13h30–17h</b>, journée complète <b>8h30–17h</b> ; compétitions à leur départ officiel ; assemblées générales en soirée <b>18h30–20h30</b> (à préciser) ; plusieurs jours → « journée entière ». Le détail du programme est repris dans les notes. Vacances scolaires et arrêt technique ne sont pas inclus.</p>
448      <div class="calx-scope" id="calx-scope"></div>
449      <div class="calx-tools">
450        <button onclick="calxSet('all')">Tout cocher</button>
451        <button class="calx-none" onclick="calxSet('none')">Tout décocher</button>
452        <button onclick="calxSet('future')">À venir</button>
453        <button onclick="calxSet('comp')">🏆 Compétitions</button>
454        <button onclick="calxSet('club')">🏊 RDV CNBV</button>
455        <button onclick="calxSet('handi')">♿ Handi</button>
456      </div>
457    </div>
458    <div class="calx-list" id="calx-list"></div>
459    <div class="calx-foot">
460      <span class="calx-hint">Astuce : sur iPad, ouvrez le .ics puis « Ajouter tout » dans Calendrier.</span>
461      <button id="calx-dl" onclick="calxDownload()">⤓ Télécharger (0)</button>
462    </div>
463  </div>
464</div>
465<script>
466(function(){
467  var MONTHS={janvier:1,"février":2,fevrier:2,mars:3,avril:4,mai:5,juin:6,juillet:7,"août":8,aout:8,septembre:9,octobre:10,novembre:11,"décembre":12,decembre:12};
468  function pad(n){return (n<10?'0':'')+n;}
469  function dec(s){return String(s==null?'':s)
470      .replace(/&#x27;/gi,"'").replace(/&#39;/g,"'").replace(/&amp;/g,'&')
471      .replace(/&quot;/g,'"').replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&nbsp;/g,' ');}
472  function fmtH(hm){var p=hm.split(':');return (+p[0])+'h'+(p[1]==='00'?'':p[1]);}
473  function addDays(y,m,d,n){var t=new Date(y,m-1,d);t.setDate(t.getDate()+n);return {y:t.getFullYear(),m:t.getMonth()+1,d:t.getDate()};}
474  var CATLBL={club:'RDV CNBV',av:'Avenirs',benj:'Benjamins',jun:'Juniors et +',mai:'Maîtres',handi:'Handi',enf:'E.N.F'};
475  function stripHTML(s){ return dec(String(s||'')
476      .replace(/<\s*br\s*\/?\s*>/gi,'\n').replace(/<\/(div|p|li)>/gi,'\n')
477      .replace(/<li>/gi,'• ').replace(/<[^>]+>/g,''))
478      .replace(/[ \t]+\n/g,'\n').replace(/\n{3,}/g,'\n\n').replace(/[ \t]{2,}/g,' ').trim(); }
479  function isAG(e){ return /assembl[ée]e\s+g[ée]n[ée]rale/i.test(dec(e.title||'')); }
480  function isStage(e){ return /\bstage\b/i.test(dec(e.title||'')); }
481  function isExclu(e){ return e.type==='vac' || /arr[eê]t\s+technique|fermeture/i.test(dec(e.title||'')); }
482
483  // Résout dates + horaires d'un événement selon les règles CNBV
484  function resolve(e){
485    var iso=(e.date||'').split('-'); var sy=+iso[0],sm=+iso[1],sd=+iso[2];
486    var raw=e.dateText||''; var low=raw.toLowerCase();
487    var comp=(e.comp==1||e.comp==='1');
488    var isMatin=/matin/.test(low);
489    var isAprem=/apr[eè]s-?midi|aprem/.test(low);
490    var ambiguous=/\bou\b/.test(low);                 // "et/ou", "ou ?" => jour de départ seul
491    var clean=raw.replace(/\([^)]*\)/g,' ').replace(/\d{1,2}\s*h\s*\d{0,2}/gi,' ');
492    var isRange=(/\bau\b/.test(low) || (/\bet\b/.test(low) && !ambiguous) || /\d\s*[-–—]\s*[a-zàâéèêîïôûç]/i.test(raw));
493    var nums=(clean.match(/\b\d{1,2}\b/g)||[]).map(Number).filter(function(n){return n>=1&&n<=31;});
494    if(isRange && !ambiguous && nums.length>=2){
495      var endDay=nums[nums.length-1];
496      var mns=low.match(/janvier|février|fevrier|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|decembre/g);
497      var em=sm,ey=sy;
498      if(mns&&mns.length) em=MONTHS[mns[mns.length-1]]||sm;
499      if(em===sm && endDay<sd) em=sm+1;
500      if(em>12){em-=12;ey=sy+1;}
501      else if(em<sm) ey=sy+1;              // ex. décembre -> janvier
502      var end={y:ey,m:em,d:endDay};
503      var endT=new Date(end.y,end.m-1,end.d), startT=new Date(sy,sm-1,sd);
504      if(endT>startT){
505        return {allday:true,s:{y:sy,m:sm,d:sd},e2:end,
506          label:'Journée entière · '+pad(sd)+'/'+pad(sm)+' → '+pad(end.d)+'/'+pad(end.m),
507          hint:isStage(e)?'horaires par groupe à préciser':''};
508      }
509    }
510    if(isAG(e)) return {allday:false,s:{y:sy,m:sm,d:sd},start:'18:30',end:'20:30',label:'Soirée · 18h30–20h30',hint:'horaire à préciser'};
511    if(comp && e.op){var end=addHours(e.op,e.dur||1);return {allday:false,s:{y:sy,m:sm,d:sd},start:e.op,end:end,label:'Départ officiel · '+fmtH(e.op)+'–'+fmtH(end)};}
512    if(isMatin && !isAprem) return {allday:false,s:{y:sy,m:sm,d:sd},start:'08:30',end:'12:00',label:'Matin · 8h30–12h'};
513    if(isAprem && !isMatin) return {allday:false,s:{y:sy,m:sm,d:sd},start:'13:30',end:'17:00',label:'Après-midi · 13h30–17h'};
514    if(e.op){var end2=addHours(e.op,e.dur||1);return {allday:false,s:{y:sy,m:sm,d:sd},start:e.op,end:end2,label:'Départ · '+fmtH(e.op)+'–'+fmtH(end2)};}
515    return {allday:false,s:{y:sy,m:sm,d:sd},start:'08:30',end:'17:00',label:'Journée · 8h30–17h'};
516  }
517
518  // Construit la liste — préfère les données EN LIGNE si chargées, sinon la graine locale.
519  // Respecte le FILTRE affiché (année de naissance, catégorie, « à venir », recherche).
520  var LIST=[];
521  function calxVisibleIds(){
522    // Set des id d'événements actuellement visibles dans le tableau, selon le filtre actif.
523    var rows=document.querySelectorAll('#cal tbody tr.ev');
524    if(!rows.length) return null;                       // sécurité : pas de filtre applicable
525    var vis={};
526    rows.forEach(function(r){
527      var shown;
528      try{ shown=(typeof passFilters==='function')?passFilters(r):(r.style.display!=='none'); }
529      catch(e){ shown=(r.style.display!=='none'); }
530      if(shown && r.dataset && r.dataset.id) vis[String(r.dataset.id)]=1;
531    });
532    return vis;
533  }
534  function calxBuild(){
535    LIST=[]; var month='';
536    var src=(window.CAL_ONLINE&&window.CAL_ONLINE.length)?window.CAL_ONLINE:(window.CAL_SEED||[]);
537    var vis=calxVisibleIds();
538    src.forEach(function(x){
539      if(x.type==='mois'){month=x.label||'';}
540      else if(x.type==='ev' && !isExclu(x)){
541        if(vis && !vis[String(x.id)]) return;           // hors du filtre affiché → on n'inclut pas
542        LIST.push({e:x,month:month,res:resolve(x)});
543      }
544    });
545  }
546  function calxScope(){
547    // Rappel du filtre courant (réutilise le message du calendrier).
548    var t=''; try{ t=(document.getElementById('cnt')||{}).textContent||''; }catch(e){}
549    t=t.replace(/\s*—\s*\d+\s*RDV\s*$/,'').replace(/\s*\(\d+\)\s*$/,'').trim();
550    if(!t || /tous les/i.test(t)) return 'Affichage : tous les événements';
551    return 'Affichage suivi : '+t;
552  }
553
554  function esc(s){return String(s==null?'':s).replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;');}
555  function today(){var d=new Date();return new Date(d.getFullYear(),d.getMonth(),d.getDate());}
556
557  function render(){
558    var host=document.getElementById('calx-list'); if(!host)return;
559    var h='',lastM='';
560    LIST.forEach(function(it,i){
561      if(it.month!==lastM){ h+='<div class="calx-month">'+esc(it.month)+'</div>'; lastM=it.month; }
562      var e=it.e,r=it.res;
563      var tags='';
564      if(e.comp==1||e.comp==='1') tags+='<span class="calx-tag comp">🏆 Compét.</span>';
565      if(e.club==1||e.club==='1') tags+='<span class="calx-tag club">CNBV</span>';
566      if(e.handi==1||e.handi==='1') tags+='<span class="calx-tag handi">♿</span>';
567      h+='<label class="calx-row">'
568        +'<input type="checkbox" class="calx-cb" data-i="'+i+'" checked onchange="calxCount()">'
569        +'<span class="calx-main">'
570        +'<span class="calx-title">'+esc(dec(e.title))+'</span>'
571        +'<span class="calx-meta">'
572        +'<span class="calx-when'+(r.allday?' allday':'')+'">'+esc(r.label)+'</span>'
573        +(r.hint?'<span class="calx-hintrow">⚑ '+esc(r.hint)+'</span>':'')
574        +'<span>'+esc(dec(e.dateText||''))+(e.lieu?' · '+esc(dec(e.lieu)):'')+'</span>'
575        +tags+'</span></span></label>';
576    });
577    host.innerHTML=h; calxCount();
578  }
579
580  window.calxOpen=function(){ calxBuild(); render(); var sc=document.getElementById('calx-scope'); if(sc)sc.textContent='🎯 '+calxScope(); document.getElementById('calx-ov').classList.add('on'); document.body.style.overflow='hidden'; };
581  window.calxClose=function(){ document.getElementById('calx-ov').classList.remove('on'); document.body.style.overflow=''; };
582  window.calxCount=function(){
583    var n=document.querySelectorAll('.calx-cb:checked').length;
584    var b=document.getElementById('calx-dl'); b.textContent='⤓ Télécharger ('+n+')'; b.disabled=(n===0);
585  };
586  window.calxSet=function(mode){
587    var t=today();
588    document.querySelectorAll('.calx-cb').forEach(function(cb){
589      var it=LIST[+cb.dataset.i],e=it.e,r=it.res,on=false;
590      if(mode==='all')on=true;
591      else if(mode==='none')on=false;
592      else if(mode==='comp')on=(e.comp==1||e.comp==='1');
593      else if(mode==='club')on=(e.club==1||e.club==='1');
594      else if(mode==='handi')on=(e.handi==1||e.handi==='1');
595      else if(mode==='future'){var d=new Date(r.s.y,r.s.m-1,r.s.d);on=(d>=t);}
596      cb.checked=on;
597    });
598    calxCount();
599  };
600
601  function icsEscape(s){return dec(s).replace(/\\/g,'\\\\').replace(/;/g,'\\;').replace(/,/g,'\\,').replace(/\r?\n/g,'\\n');}
602  function stamp(){var d=new Date();return d.getUTCFullYear()+pad(d.getUTCMonth()+1)+pad(d.getUTCDate())+'T'+pad(d.getUTCHours())+pad(d.getUTCMinutes())+pad(d.getUTCSeconds())+'Z';}
603
604  window.calxDownload=function(){
605    var checked=[].slice.call(document.querySelectorAll('.calx-cb:checked'));
606    if(!checked.length)return;
607    var dstamp=stamp();
608    var out=['BEGIN:VCALENDAR','VERSION:2.0','PRODID:-//CNBV//Calendrier 2026-2027//FR','CALSCALE:GREGORIAN','METHOD:PUBLISH','X-WR-CALNAME:CNBV 2026-2027'];
609    checked.forEach(function(cb){
610      var it=LIST[+cb.dataset.i],e=it.e,r=it.res;
611      var sc=r.s.y+pad(r.s.m)+pad(r.s.d);
612      var uid=sc+'-'+(e.id||Math.random().toString(36).slice(2,7))+'@cnbv';
613      out.push('BEGIN:VEVENT','UID:'+uid,'DTSTAMP:'+dstamp);
614      if(r.allday){
615        var nd=addDays(r.e2.y,r.e2.m,r.e2.d,1);
616        out.push('DTSTART;VALUE=DATE:'+sc);
617        out.push('DTEND;VALUE=DATE:'+nd.y+pad(nd.m)+pad(nd.d));
618      }else{
619        out.push('DTSTART:'+sc+'T'+r.start.replace(':','')+'00');
620        out.push('DTEND:'+sc+'T'+r.end.replace(':','')+'00');
621      }
622      out.push('SUMMARY:'+icsEscape(e.title));
623      if(e.lieu) out.push('LOCATION:'+icsEscape(e.lieu));
624      // ---- Notes détaillées de l'événement ----
625      var nl=[];
626      var prog=stripHTML(e.program||'');
627      if(prog) nl.push(prog);
628      var infos=[];
629      if(e.bassin) infos.push('Bassin : '+dec(e.bassin));
630      if(e.lieu) infos.push('Lieu : '+dec(e.lieu));
631      infos.push((e.home==1||e.home==='1')?'À domicile (Bellegarde / ValséO)':'À l’extérieur');
632      if(e.comp==1||e.comp==='1') infos.push('Compétition');
633      var cl=(e.cats||[]).map(function(c){return CATLBL[c]||c;}).filter(Boolean);
634      if(cl.length) infos.push('Concernés : '+cl.join(', '));
635      if(infos.length) nl.push(infos.join(' · '));
636      if(r.hint) nl.push('⚑ '+r.hint.charAt(0).toUpperCase()+r.hint.slice(1)+'.');
637      nl.push('— Calendrier CNBV 2026-2027');
638      out.push('DESCRIPTION:'+icsEscape(nl.join('\n\n')));
639      out.push('END:VEVENT');
640    });
641    out.push('END:VCALENDAR');
642    function foldLine(l){ if(l.length<=72) return l; var o='',i=0; while(i<l.length){ o+=(i?'\r\n ':'')+l.substr(i,72); i+=72; } return o; }
643    var ical=out.map(foldLine).join('\r\n');
644    if(typeof dl==='function') dl('CNBV_calendrier_2026-2027.ics',ical);
645    else { var b=new Blob([ical],{type:'text/calendar'});var u=URL.createObjectURL(b);var a=document.createElement('a');a.href=u;a.download='CNBV_calendrier_2026-2027.ics';document.body.appendChild(a);a.click();document.body.removeChild(a);setTimeout(function(){URL.revokeObjectURL(u);},1500); }
646  };
647})();
648</script>
648
649<!-- ==== /CALX ==== -->
650
651
652<style id="inscr-style">
653.inscr-ov{position:fixed;inset:0;background:rgba(20,30,50,.55);z-index:9999;display:none;overflow:auto;padding:24px 12px;-webkit-overflow-scrolling:touch}
654.inscr-ov.on{display:block}
655.insc-modal{max-width:620px;margin:0 auto;background:#fff;border-radius:14px;padding:22px 20px 26px;box-shadow:0 18px 60px rgba(0,0,0,.3);position:relative;font-size:15px}
656.insc-modal.insc-wide{max-width:920px}
657.insc-modal h2{margin:0 6px 2px 0;font-size:1.2rem;color:#12385f;padding-right:28px}
658.insc-modal h3{margin:18px 0 8px;font-size:1rem;color:#0d6b3f;border-bottom:2px solid #e6f0ea;padding-bottom:4px}
659.insc-sub{color:#667;margin-bottom:8px;font-size:.9rem}
660.insc-x{position:absolute;top:12px;right:14px;border:none;background:#eef1f5;border-radius:8px;width:32px;height:32px;font-size:16px;cursor:pointer;color:#334}
661.insc-fld{margin:10px 0}
662.insc-fld label,.insc-grid label,.insc-grid2 label{display:block;font-size:.8rem;color:#556;margin-bottom:3px;font-weight:600}
663.insc-modal input,.insc-modal select,.insc-modal textarea{width:100%;box-sizing:border-box;padding:9px 10px;border:1px solid #cdd6e0;border-radius:9px;font-size:15px;font-family:inherit}
664.insc-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
665.insc-grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:6px}
666.insc-card{border:1px solid #dde5ee;border-radius:11px;padding:12px;margin:10px 0;background:#f8fafc}
667.insc-cardhd{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
668.insc-del{border:none;background:#fde8e8;color:#b3261e;border-radius:7px;padding:5px 10px;font-size:.8rem;cursor:pointer}
669.insc-add{border:1px dashed #7aa7c7;background:#eef6fc;color:#12557f;border-radius:9px;padding:9px 12px;cursor:pointer;font-size:.9rem;margin-top:2px}
670.insc-meal{margin-top:10px;padding-top:8px;border-top:1px dashed #d8e0ea}
671.insc-ck{display:flex;align-items:center;gap:8px;font-weight:600;color:#334;font-size:.9rem}
672.insc-ck input{width:auto!important}
673.insc-note{background:#fff7e6;border:1px solid #f2d99b;color:#7a5a12;border-radius:9px;padding:9px 11px;font-size:.85rem;margin:10px 0}
674.insc-status{min-height:20px;margin:10px 0;font-size:.9rem}
675.insc-status.err{color:#b3261e}.insc-status.ok{color:#0d7a3f;font-weight:600}
676.insc-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:14px}
677.insc-cancel{border:1px solid #cdd6e0;background:#fff;border-radius:9px;padding:10px 16px;cursor:pointer}
678.insc-submit{border:none;background:#0d6b3f;color:#fff;border-radius:9px;padding:10px 18px;cursor:pointer;font-weight:600}
679.insc-withdraw{border:1px solid #f0b9b3;background:#fff;color:#b3261e;border-radius:9px;padding:10px 14px;cursor:pointer;font-size:.85rem}
680.insc-tiny{color:#889;font-size:.75rem;margin-top:8px;text-align:right}
681.buv-list{margin-top:6px}
682.buv-row{display:flex;align-items:center;gap:10px;padding:5px 0;border-bottom:1px dashed #eef2f6}
683.buv-row .insc-ck{flex:1;font-weight:500}
684.buv-qty{width:66px!important;text-align:center}
685.buv-autre-lab{flex:0 0 auto;font-size:.85rem;color:#556;font-weight:600}
686.buv-autre{flex:1}
687.insc-btn{margin-left:8px;border:none;background:#0d6b3f;color:#fff;border-radius:7px;padding:3px 9px;font-size:.78rem;cursor:pointer;vertical-align:middle}
688.insc-btn:hover{background:#0a5732}
689/* coach manager */
690.insc-filter{margin:6px 0 10px}
691.ic-row{border:1px solid #e0e7ef;border-radius:10px;padding:10px 12px;margin:8px 0;background:#fff;transition:all .12s}
692/* Inscriptions ouvertes : cadre épais « en volume » (relief) */
693.ic-row.ic-on{border:3px solid #0d6b3f;border-radius:13px;background:linear-gradient(#f4fdf8,#e2f6ec);box-shadow:0 6px 0 #0a5732,0 12px 20px rgba(13,107,63,.28);transform:translateY(-1px);margin:16px 0}
694/* Date passée : fond rouge translucide */
695.ic-row.ic-past{background:rgba(200,30,30,.10);border-color:#e6b3b3}
696.ic-row.ic-past .ic-date{color:#a01414}
697.ic-row.ic-on.ic-past{background:linear-gradient(rgba(200,30,30,.12),rgba(200,30,30,.12)),linear-gradient(#f4fdf8,#e2f6ec)}
698.ic-pill{display:inline-block;border-radius:20px;padding:2px 10px;font-size:.72rem;font-weight:700;margin-left:8px;vertical-align:middle}
699.ic-pill.open{background:#0d6b3f;color:#fff}
700.ic-pill.past{background:#c81d1d;color:#fff}
701.ic-main{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:baseline;margin-bottom:8px}
702.ic-date{color:#667;font-size:.82rem}
703.ic-ctrls{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
704.ic-price input{width:66px!important;display:inline-block;padding:5px 7px}
705.ic-save{border:none;background:#12557f;color:#fff;border-radius:8px;padding:7px 13px;
705cursor:pointer;font-size:.85rem}
706.ic-stat{font-size:.85rem;min-width:16px}.ic-stat.ok{color:#0d7a3f;font-weight:700}.ic-stat.err{color:#b3261e}
707.ic-convoc{border:none;background:#eaf3ff;color:#12557f;border:1px solid #b9d4ee;border-radius:8px;padding:7px 11px;cursor:pointer;font-size:.85rem}
708/* picker convocations */
709.pk-filters{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-start;margin:8px 0}
710.pk-filters input{padding:8px 9px;border:1px solid #cdd6e0;border-radius:9px;font-size:14px}
711.pk-fgrp{display:flex;flex-direction:column;gap:4px}
712.pk-mslab{font-size:.8rem;color:#556;font-weight:600}
713.pk-multi{color:#8a97a4;font-weight:400;font-size:.72rem}
714/* menu déroulant à cocher (multi-sélection) */
715.pk-ms{position:relative;display:flex;flex-direction:column;gap:4px}
716.pk-ms-btn{display:flex;align-items:center;justify-content:space-between;gap:10px;min-width:160px;padding:8px 11px;border:1px solid #cdd6e0;border-radius:9px;background:#fff;cursor:pointer;font-size:14px;color:#22303f}
717.pk-ms-car{color:#8a97a4}
718.pk-ms-panel{display:none;position:absolute;top:100%;left:0;z-index:30;margin-top:4px;background:#fff;border:1px solid #cdd6e0;border-radius:10px;box-shadow:0 10px 28px rgba(0,0,0,.20);max-height:250px;overflow:auto;min-width:190px;padding:4px}
719.pk-ms-panel.on{display:block}
720.pk-ms-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:7px;cursor:pointer;font-size:.92rem;white-space:nowrap}
721.pk-ms-item:hover{background:#f2f7fb}
722.pk-ms-item input{appearance:none;-webkit-appearance:none;width:20px;height:20px;min-width:20px;border:2px solid #9fb3c4;border-radius:50%;position:relative;cursor:pointer;margin:0}
723.pk-ms-item input:checked{background:#0d6b3f;border-color:#0d6b3f}
724.pk-ms-item input:checked::after{content:'✓';color:#fff;position:absolute;left:2.5px;top:-1.5px;font-size:13px;font-weight:700}
725.pk-bulk{display:flex;gap:8px;margin:4px 0 8px;flex-wrap:wrap}
726.pk-bulk button{border:1px dashed #7aa7c7;background:#eef6fc;color:#12557f;border-radius:8px;padding:6px 10px;cursor:pointer;font-size:.82rem}
727.pk-bulk .pk-recap{border:1px solid #0d6b3f;background:#f2fbf6;color:#0d6b3f;border-style:solid}
728.pk-hint{color:#8a97a4;font-size:.72rem;margin-top:4px}
729.pk-rtable{border-collapse:collapse;width:100%;font-size:.85rem;margin:2px 0 6px}
730.pk-rtable th,.pk-rtable td{border:1px solid #e0e7ef;padding:5px 8px;text-align:left}
731.pk-rtable thead th{background:#eef3f8;color:#12385f}
732#pk-recap-body h3{margin:14px 0 6px;color:#0d6b3f;font-size:.95rem}
733.pk-list{max-height:46vh;overflow:auto;border:1px solid #e0e7ef;border-radius:10px;padding:4px}
734.pk-row{display:flex;align-items:center;gap:10px;padding:8px 10px;border-bottom:1px solid #eef2f6;cursor:pointer}
735.pk-row:last-child{border-bottom:none}
736.pk-row input{width:auto}
737.pk-nm{font-weight:600;color:#22303f}
738.pk-meta{color:#7a8794;font-size:.8rem;margin-left:auto;text-align:right}
739.pk-noiuf{opacity:.55}
740.pk-warn{background:#fdecec;border:1px solid #f3b4b4;color:#8a1c1c;border-radius:9px;padding:9px 12px;margin:8px 0;font-size:.85rem}
741.pk-oocb{display:inline-block;background:#fdecec;color:#b3261e;border:1px solid #f3b4b4;border-radius:6px;padding:1px 7px;font-size:.72rem;font-weight:600;margin-left:6px}
742.pk-row.pk-ooc{background:#fff6f6}
743.pk-mail{display:inline-block;background:#0d6b3f;color:#fff;border-radius:6px;padding:2px 8px;text-decoration:none;font-size:.8rem}
744.pk-rm{border:none;background:#fde8e8;color:#b3261e;border-radius:6px;padding:3px 9px;font-size:.85rem;font-weight:700;cursor:pointer}
745.pk-rm:hover{background:#f9d0d0}
746.insc-receipt{display:inline-block;margin-top:8px;background:#0d6b3f;color:#fff;border-radius:8px;padding:8px 12px;text-decoration:none;font-weight:600}
747.nl-steps{background:#f2f7fb;border:1px solid #dbe6f0;border-radius:10px;padding:10px 12px;margin:10px 0;font-size:.9rem;color:#22303f}
748.nl-steps ol{margin:6px 0 0;padding-left:20px}
749.nl-steps li{margin:4px 0}
750.nl-steps>b{color:#0b3d63}
751.nl-convoc{margin:10px 0}
752.nl-convoc>b{color:#0d6b3f;display:block;margin-bottom:6px}
753.nlc-row{border:2px solid #e0e7ef;border-radius:11px;padding:10px 12px;margin:8px 0;background:#fafcff}
754.nlc-row.nlc-open{border-color:#0d6b3f;background:linear-gradient(#f4fdf8,#e8f7ef);cursor:pointer;box-shadow:0 3px 0 #0a5732}
755.nlc-row.nlc-open:active{transform:translateY(1px);box-shadow:0 1px 0 #0a5732}
756.nlc-msg{color:#12385f;margin-bottom:6px;line-height:1.35}
757.nlc-cta{font-size:.9rem;font-weight:700}
758.nlc-open .nlc-cta{color:#0d6b3f}
759.nlc-row:not(.nlc-open) .nlc-cta{color:#a06a00}
760.pk-prov{display:inline-block;background:#fff3d6;color:#8a6100;border:1px solid #f0d79a;border-radius:6px;padding:1px 6px;font-size:.7rem;font-weight:600;margin-left:6px;vertical-align:middle}
761.inscr-prov-note{position:fixed;left:12px;right:12px;bottom:12px;z-index:9998;background:#eef7ff;border:1px solid #b9d4ee;color:#12557f;border-radius:10px;padding:10px 14px;font-size:.85rem;box-shadow:0 6px 24px rgba(0,0,0,.15);max-width:640px;margin:0 auto}
762@media(max-width:560px){.insc-grid{grid-template-columns:1fr}.ic-ctrls{gap:8px}.pk-meta{margin-left:0;flex-basis:100%}}
763.pk-ucat{display:inline-block;background:#e0ecff;color:#1e40af;border:1px solid #b9d0f3;border-radius:6px;padding:0 6px;font-size:.72rem;font-weight:700}
764</style>
765<script>
766/* ==== INSCRIPTIONS CNBV — calendrier (coach ouvre / parent inscrit) ==== v1 ==== */
767(function(){
768  var QW = (typeof QWORKER!=='undefined'&&QWORKER) || 'https://super-math-ffn-perfs.francois-debutnocode.workers.dev';
769  var CFG = {};       // config par eventId {open,meals,transport,mealPrice,seats,note,title,date,lieu}
770  var CONVOC = {};    // convocations par eventId : [iuf,...]
771  var ROSTER = null;  // liste des adhérents (coach) [{nom,prenom,iuf,groupes,annee,archive}]
772  var ME  = null;     // identité nageur connecté {nom,prenom,genre,annee}
773  var NCODE = '';     // code nageur (localStorage cal_ncode)
774  var COACHPW = '';   // code coach (localStorage cal_coach)
775
776  function esc(s){return String(s==null?'':s).replace(/[&<>"']/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c];});}
777  function readState(){ try{NCODE=localStorage.getItem('cal_ncode')||'';}catch(e){} try{COACHPW=localStorage.getItem('cal_coach')||'';}catch(e){} }
778  function splitName(full){ // "NOM Prenom" -> {nom, prenom, genre?}
779    var w=String(full||'').trim().split(/\s+/); if(!w.length) return {nom:'',prenom:''};
780    var nom=[],pre=[]; var seenLower=false;
781    for(var i=0;i<w.length;i++){ var isUp = w[i]===w[i].toUpperCase() && /[A-ZÀ-Þ]/.test(w[i]); if(isUp && !seenLower){nom.push(w[i]);} else {seenLower=true;pre.push(w[i]);} }
782    if(!pre.length && nom.length>1){ pre=[nom.pop()]; }
783    return {nom:nom.join(' '), prenom:pre.join(' ')};
784  }
785
786  // ---- chargement config publique (quels évènements sont ouverts) ----
787  function loadCfg(cb){
788    fetch(QW+'/inscriptions/config').then(function(r){return r.json();}).then(function(d){
789      if(d&&d.ok&&d.config) CFG=d.config; if(cb)cb();
790    }).catch(function(){ if(cb)cb(); });
791  }
792  // ---- convocations (coach) ----
793  function loadConvoc(cb){
794    readState();
795    fetch(QW+'/inscriptions/convoc?pw='+encodeURIComponent(COACHPW)).then(function(r){return r.json();}).then(function(d){
796      if(d&&d.ok&&d.convoc) CONVOC=d.convoc; if(cb)cb();
797    }).catch(function(){ if(cb)cb(); });
798  }
799  function loadRoster(cb){
800    readState();
801    if(ROSTER){ if(cb)cb(); return; }
802    fetch(QW+'/roster?pw='+encodeURIComponent(COACHPW)).then(function(r){return r.json();}).then(function(d){
803      ROSTER=(d&&d.ok&&d.adherents)?d.adherents:[]; if(cb)cb();
804    }).catch(function(){ ROSTER=[]; if(cb)cb(); });
805  }
806
807  // ---- identité du nageur connecté (préremplissage) ----
808  function loadMe(cb){
809    readState();
810    if(!NCODE){ ME=null; if(cb)cb(); return; }
811    if(ME){ if(cb)cb(); return; }
812    fetch(QW+'/?code='+encodeURIComponent(NCODE)).then(function(r){return r.json();}).then(function(d){
813      if(d&&d.ok!==false&&d.nom){ var sp=splitName(d.nom); ME={nom:sp.nom,prenom:sp.prenom,annee:d.annee||'',genre:(String(d.sexe||'').toUpperCase().indexOf('DAME')>=0?'D':(String(d.sexe||'').toUpperCase().indexOf('MESS')>=0?'M':''))}; }
814      if(cb)cb();
815    }).catch(function(){ if(cb)cb(); });
816  }
817
818  // ============ DÉCORATION DES ÉVÈNEMENTS (bouton S'inscrire) ============
819  function decorate(){
820    readState();
821    var rows = document.querySelectorAll('#cal tbody tr.ev[data-id]');
822    for(var i=0;i<rows.length;i++){
823      var tr=rows[i]; var id=String(tr.getAttribute('data-id')||'');
824      var titleCell = tr.querySelector('td.l:nth-child(3)') || tr.querySelectorAll('td.l')[1] || tr.querySelector('td.l');
825      if(!titleCell) continue;
826      var old = titleCell.querySelector('.inscr-btn'); if(old) old.remove();
827      var c = CFG[id];
828      if(!(c&&c.open)) continue;                       // seulement les évènements ouverts
829      if(!NCODE) continue;                             // bouton visible uniquement pour un nageur connecté
830      var b=document.createElement('button');
831      b.className='inscr-btn noprint';
832      b.textContent='📝 S’inscrire';
833      b.setAttribute('data-eid',id);
834      b.onclick=function(ev){ ev.stopPropagation(); openForm(this.getAttribute('data-eid')); };
835      titleCell.appendChild(b);
836    }
837  }
838
839  // ============ FORMULAIRE PARENT ============
840  function evMeta(id){
841    var c=CFG[id]||{};
842    var tr=document.querySelector('#cal tbody tr.ev[data-id="'+id+'"]');
843    return {
844      id:id,
845      title: c.title || (tr&&tr.getAttribute('data-title')) || 'Évènement',
846      date:  c.date  || (tr&&tr.getAttribute('data-date'))  || '',
847      lieu:  c.lieu  || (tr&&tr.getAttribute('data-lieu'))  || '',
848      meals: !!c.meals, transport: !!c.transport, buvette: !!c.buvette,
849      mealPrice: (c.mealPrice!=null?c.mealPrice:10)
850    };
851  }
852  var BUV_ITEMS=['Un gâteau','Des crêpes','Une tarte','Une quiche','Un flan','De la confiture','Du miel','De la pâte à tartiner','De la crème de marron','Rien pour cette fois'];
853  function frDate(iso){ if(!iso) return ''; var p=String(iso).split('-'); if(p.length!==3) return iso; return p[2]+'/'+p[1]+'/'+p[0]; }
854
855  var CUR=null; // {meta, swimmers:[], officials:[], volunteers:[], email, tel, contact2}
856  function loadProfile(){ try{ return JSON.parse(localStorage.getItem('cnbv_inscr_profile')||'null'); }catch(e){ return null; } }
857  function saveProfile(p){ try{ localStorage.setItem('cnbv_inscr_profile', JSON.stringify(p)); }catch(e){} }
858  function openForm(id){
859    loadMe(function(){
860      var meta=evMeta(id);
861      var prof=loadProfile()||{};
862      CUR={ meta:meta, officials:[], volunteers:[], email:prof.email||'', tel:prof.tel||'', contact2:prof.contact2||null };
863      // nageurs pré-remplis depuis le profil famille, sinon le nageur connecté
864      if(prof.swimmers && prof.swimmers.length){ CUR.swimmers=prof.swimmers.map(function(s){ return {nom:s.nom||'', prenom:s.prenom||'', genre:s.genre||'', participe:true, comment:''}; }); }
865      else { CUR.swimmers=[{nom:(ME&&ME.nom)||'', prenom:(ME&&ME.prenom)||'', genre:(ME&&ME.genre)||'', participe:true, comment:''}]; }
866      // garantir la présence du nageur connecté
867      if(ME&&ME.nom){ var has=CUR.swimmers.some(function(s){ return (s.nom||'').toUpperCase()===String(ME.nom).toUpperCase() && (s.prenom||'').toUpperCase()===String(ME.prenom||'').toUpperCase(); }); if(!has) CUR.swimmers.unshift({nom:ME.nom,prenom:ME.prenom,genre:ME.genre,participe:true,comment:''}); }
868      renderForm();
869      document.getElementById('inscr-ov').classList.add('on');
870    });
871  }
872  function closeForm(){ var o=document.getElementById('inscr-ov'); if(o)o.classList.remove('on'); }
873  window.inscrOpenForm=openForm;
874  window.inscrOpenFromPanel=function(id){ try{ if(typeof nlClose==='function')nlClose(); }catch(e){} openForm(id); };
875  // Panneau « Tes convocations » affiché dans l'espace nageur (clic sur le nom)
876  window.inscrConvocPanel=function(){
877    readState();
878    var ids=[]; try{ ids=(window.NL_SELS||[]).map(String); }catch(e){}
879    ids=ids.filter(function(v,i){ return v && ids.indexOf(v)===i; });
880    if(!ids.length) return '';
881    var h='<div class="nl-convoc"><b>📣 Tes convocations</b>';
882    ids.forEach(function(id){
883      var c=CFG[id]||{}; var meta=evMeta(id); var open=!!c.open;
884      h+='<div class="nlc-row'+(open?' nlc-open':'')+'"'+(open?(' onclick="inscrOpenFromPanel(\''+esc(id)+'\')"'):'')+'>'
885        +'<div class="nlc-msg">Tu es convoqué(e) à la compétition <b>'+esc(meta.title)+'</b> du <b>'+esc(frDate(meta.date))+'</b>'+(meta.lieu?' à <b>'+esc(meta.lieu)+'</b>':'')+'.</div>'
886        +'<div class="nlc-cta">'+(open?'👉 Clique ici pour t’inscrire →':'⏳ inscriptions bientôt ouvertes')+'</div>'
887        +'</div>';
888    });
889    h+='</div>';
890    return h;
891  };
892
893  function mealTypeOptions(v){
894    var opts=[['sportif','Menu Sportif'],['halal','Halal'],['vegetarien','Végétarien'],['allergie','Allergie (préciser)'],['autre','Autre (préciser)']];
895    return opts.map(function(o){return '<option value="'+o[0]+'"'+(v===o[0]?' selected':'')+'>'+o[1]+'</option>';}).join('');
896  }
897  function collect(){ // lit le DOM -> CUR
898    if(!CUR)return;
899    var em=document.getElementById('insc-email'); if(em)CUR.email=(em.value||'').trim();
900    var tl=document.getElementById('insc-tel'); if(tl)CUR.tel=(tl.value||'').trim();
901    var c2n=document.getElementById('insc-c2-nom');
902    if(c2n){ var n=(c2n.value||'').trim(), t=(document.getElementById('insc-c2-tel')||{}).value||'', m=(document.getElementById('insc-c2-mail')||{}).value||''; if(n||t||m) CUR.contact2={nom:n,tel:t.trim(),mail:m.trim()}; else CUR.contact2=null; }
903    var swEls=document.querySelectorAll('#insc-swimmers .insc-card');
904    CUR.swimmers=[].map.call(swEls,function(el){
905      return {
906        nom:(el.querySelector('.sw-nom').value||'').trim(),
907        prenom:(el.querySelector('.sw-prenom').value||'').trim(),
908        genre:(el.querySelector('.sw-genre').value||''),
909        participe:(el.querySelector('.sw-part').value==='oui'),
910        comment:(el.querySelector('.sw-com').value||'').trim(),
911        meal: CUR.meta.meals ? {
912          wants:(el.querySelector('.sw-meal-w')?el.querySelector('.sw-meal-w').checked:false),
913          type:(el.querySelector('.sw-meal-t')?el.querySelector('.sw-meal-t').value:'sportif'),
914          detail:(el.querySelector('.sw-meal-d')?(el.querySelector('.sw-meal-d').value||'').trim():'')
915        } : null
916      };
917    });
918    if(CUR.meta.buvette){
919      // bénévoles (liste)
920      var vEls=document.querySelectorAll('#insc-volunteers .insc-vol');
921      CUR.volunteers=[].map.call(vEls,function(el){
922        return {
923          name:(el.querySelector('.vl-name').value||'').trim(),
924          chambreAppel:(el.querySelector('.vl-ca')?el.querySelector('.vl-ca').checked:false),
925          installation:(el.querySelector('.vl-inst')?el.querySelector('.vl-inst').checked:false)
926        };
927      }).filter(function(v){ return v.name||v.chambreAppel||v.installation; });
928      // buvette avec quantités
929      var items=[];
930      BUV_ITEMS.forEach(function(lab,i){
931        var cb=document.getElementById('buv-'+i); if(cb&&cb.checked){ var q=document.getElementById('buvq-'+i); var qty=(q?parseInt(q.value,10):1); items.push({item:lab, qty:(qty>0?qty:1)}); }
932      });
933      var autre=(document.getElementById('buv-autre')?(document.getElementById('buv-autre').value||'').trim():'');
934      var autreQ=(document.getElementById('buvq-autre')?parseInt(document.getElementById('buvq-autre').value,10):0);
935      CUR.buvette={items:items, autre:autre, autreQty:(autreQ>0?autreQ:1)};
936    }
937    if(CUR.meta.transport){
938      var mode=(document.getElementById('insc-tmode')||{}).value||'propre';
939      var seats=parseInt((document.getElementById('insc-tseats')||{}).value,10)||0;
940      var wth=((document.getElementById('insc-twith')||{}).value||'').trim();
941      CUR.transport={mode:mode, seats:(mode==='minibus'?seats:0), with:(mode==='covoiturage'?wth:'')};
942    }
943    var ofEls=document.querySelectorAll('#insc-officials .insc-card');
944    CUR.officials=[].map.call(ofEls,function(el){
945      return {
946        nomPrenom:(el.querySelector('.of-np').value||'').trim(),
947        statut:(el.querySelector('.of-st').value||'titulaire'),
948        meal: CUR.meta.meals ? {
949          wants:(el.querySelector('.of-meal-w')?el.querySelector('.of-meal-w').checked:false),
950          type:(el.querySelector('.of-meal-t')?el.querySelector('.of-meal-t').value:'sportif'),
951          detail:(el.querySelector('.of-meal-d')?(el.querySelector('.of-meal-d').value||'').trim():'')
952        } : null
953      };
954    });
955  }
956  function addSwimmer(){ collect(); CUR.swimmers.push({nom:'',prenom:'',genre:'',participe:true,comment:'',meal:null}); renderForm(); }
957  function delSwimmer(i){ collect(); CUR.swimmers.splice(i,1); if(!CUR.swimmers.length)CUR.swimmers.push({nom:'',prenom:'',genre:'',participe:true,comment:''}); renderForm(); }
958  function addOfficial(){ collect(); CUR.officials.push({nomPrenom:'',statut:'titulaire',meal:null}); renderForm(); }
959  function delOfficial(i){ collect(); CUR.officials.splice(i,1); renderForm(); }
960  function addVolunteer(){ collect(); CUR.volunteers=CUR.volunteers||[]; CUR.volunteers.push({name:'',chambreAppel:false,installation:false}); renderForm(); }
961  function delVolunteer(i){ collect(); CUR.volunteers.splice(i,1); renderForm(); }
962  window.inscrAddSwimmer=addSwimmer; window.inscrDelSwimmer=delSwimmer;
963  window.inscrAddOfficial=addOfficial; window.inscrDelOfficial=delOfficial;
964  window.inscrAddVolunteer=addVolunteer; window.inscrDelVolunteer=delVolunteer;
965  window.inscrToggleContact2=function(){ collect(); CUR.contact2=CUR.contact2?null:{nom:'',tel:'',mail:''}; renderForm(); };
966  window.inscrOnOfficialChoice=function(){ collect(); renderForm(); };
967  window.inscrOnTransport=function(){ collect(); renderForm(); };
968
969  function renderForm(){
970    var m=CUR.meta;
971    var h='';
972    h+='<div class="insc-modal">';
973    h+='<button class="insc-x" onclick="inscrClose()">✕</button>';
974    h+='<h2>📝 Inscription — '+esc(m.title)+'</h2>';
975    h+='<div class="insc-sub">'+esc(frDate(m.date))+(m.lieu?' · '+esc(m.lieu):'')+'</div>';
976
977    // contact principal
978    h+='<h3>📇 Contact</h3>';
979    h+='<div class="insc-grid"><div><label>Adresse e-mail</label><input type="email" id="insc-email" value="'+esc(CUR.email||'')+'" placeholder="[email protected]"></div>'
980      +'<div><label>Téléphone</label><input type="tel" id="insc-tel" value="'+esc(CUR.tel||'')+'" placeholder="06 12 34 56 78"></div></div>';
981    if(CUR.contact2){
982      var c2=CUR.contact2;
983      h+='<div class="insc-card"><div class="insc-cardhd"><b>2ᵉ contact</b><button class="insc-del" onclick="inscrToggleContact2()">Retirer</button></div>'
984        +'<div class="insc-grid"><div><label>Nom</label><input id="insc-c2-nom" value="'+esc(c2.nom||'')+'"></div>'
985        +'<div><label>Téléphone</label><input type="tel" id="insc-c2-tel" value="'+esc(c2.tel||'')+'"></div>'
986        +'<div style="grid-column:span 2"><label>E-mail</label><input type="email" id="insc-c2-mail" value="'+esc(c2.mail||'')+'"></div></div></div>';
987    } else {
988      h+='<button class="insc-add" onclick="inscrToggleContact2()">+ Ajouter un 2ᵉ contact (facultatif)</button>';
989    }
990
991    // NAGEURS
992    h+='<h3>👦 Nageur(s)</h3><div id="insc-swimmers">';
993    CUR.swimmers.forEach(function(s,i){
994      h+='<div class="insc-card">';
995      h+='<div class="insc-cardhd"><b>Nageur '+(i+1)+'</b>'+(CUR.swimmers.length>1?'<button class="insc-del" onclick="inscrDelSwimmer('+i+')">Retirer</button>':'')+'</div>';
996      h+='<div class="insc-grid">';
997      h+='<div><label>Nom</label><input class="sw-nom" value="'+esc(s.nom)+'"></div>';
998      h+='<div><label>Prénom</label><input class="sw-prenom" value="'+esc(s.prenom)+'"></div>';
999      h+='<div><label>Genre</label><select class="sw-genre"><option value=""></option><option value="D"'+(s.genre==='D'?' selected':'')+'>Dame</option><option value="M"'+(s.genre==='M'?' selected':'')+'>Messieurs</option></select></div>';
1000      h+='<div><label>Participe ?</label><select class="sw-part" onchange="inscrPartChange()"><option value="oui"'+(s.participe?' selected':'')+'>Oui</option><option value="non"'+(!s.participe?' selected':'')+'>Non</option></select></div>';
1001      h+='</div>';
1002      h+='<div class="insc-fld"><label>Commentaires / observations</label><input class="sw-com" value="'+esc(s.comment)+'"></div>';
1003      if(m.meals){
1004        var mm=s.meal||{};
1005        h+='<div class="insc-meal"><label class="insc-ck"><input type="checkbox" class="sw-meal-w"'+(mm.wants?' checked':'')+'> Repas du nageur ('+esc(m.mealPrice)+' € )</label>'
1006          +'<div class="insc-grid2"><select class="sw-meal-t">'+mealTypeOptions(mm.type||'sportif')+'</select>'
1007          +'<input class="sw-meal-d" placeholder="Précision (allergie, autre…)" value="'+esc(mm.detail||'')+'"></div></div>';
1008      }
1009      h+='</div>';
1010    });
1011    h+='</div>';
1012    h+='<button class="insc-add" onclick="inscrAddSwimmer()">+ Ajouter un nageur</button>';
1013    // Message si "ne participe pas" : on peut valider directement, ou contribuer autrement
1014    var _contrib=(m.buvette)?'en tant qu’<b>Officiel</b> ou <b>Bénévole</b>, ou en apportant de quoi pour la <b>Buvette</b>':'en tant qu’<b>Officiel</b>';
1015    h+='<div id="insc-partmsg" class="insc-note" style="display:none">✅ Un nageur ne participe pas ? Vous pouvez <b>valider directement</b> le formulaire — rien d’autre n’est obligatoire. Si vous le souhaitez, vous pouvez tout de même <b>contribuer</b> à la compétition : '+_contrib+'.</div>';
1016
1017    // OFFICIELS
1018    h+='<h3>🧑‍⚖️ Officiel</h3>';
1019    var oc=(document.getElementById('insc-ofchoice')&&document.getElementById('insc-ofchoice').value)|| CUR.officialChoice ||'non';
1020    h+='<div class="insc-fld"><label>
1020Souhaitez-vous être officiel sur cette compétition ?</label>'
1021      +'<select id="insc-ofchoice" onchange="inscrOnOfficialChoice()">'
1022      +'<option value="non"'+(oc==='non'?' selected':'')+'>Non (pas cette fois)</option>'
1023      +'<option value="inscrit"'+(oc==='inscrit'?' selected':'')+'>Oui, je m’inscris comme officiel</option>'
1024      +'<option value="formation"'+(oc==='formation'?' selected':'')+'>Je suis en formation</option>'
1025      +'</select></div>';
1026    if(oc==='inscrit'||oc==='formation'){
1027      if(!CUR.officials.length) CUR.officials.push({nomPrenom:'',statut:(oc==='formation'?'formation':'titulaire'),meal:null});
1028      h+='<div id="insc-officials">';
1029      CUR.officials.forEach(function(o,i){
1030        h+='<div class="insc-card">';
1031        h+='<div class="insc-cardhd"><b>Officiel '+(i+1)+'</b><button class="insc-del" onclick="inscrDelOfficial('+i+')">Retirer</button></div>';
1032        h+='<div class="insc-grid">';
1033        h+='<div style="grid-column:span 2"><label>Nom &amp; Prénom</label><input class="of-np" value="'+esc(o.nomPrenom)+'"></div>';
1034        h+='<div><label>Statut</label><select class="of-st"><option value="titulaire"'+(o.statut==='titulaire'?' selected':'')+'>Titulaire</option><option value="formation"'+(o.statut==='formation'?' selected':'')+'>En formation</option></select></div>';
1035        h+='</div>';
1036        if(m.meals){
1037          var om=o.meal||{};
1038          h+='<div class="insc-meal"><label class="insc-ck"><input type="checkbox" class="of-meal-w"'+(om.wants?' checked':'')+'> Repas de l’officiel (gratuit)</label>'
1039            +'<div class="insc-grid2"><select class="of-meal-t">'+mealTypeOptions(om.type||'sportif')+'</select>'
1040            +'<input class="of-meal-d" placeholder="Précision (allergie, autre…)" value="'+esc(om.detail||'')+'"></div></div>';
1041        }
1042        h+='</div>';
1043      });
1044      h+='</div><button class="insc-add" onclick="inscrAddOfficial()">+ Ajouter un officiel</button>';
1045    } else { CUR.officials=[]; }
1046
1047    // TRANSPORT
1048    if(m.transport){
1049      var tm=CUR.transport||{};
1050      h+='<h3>🚐 Transport</h3>';
1051      h+='<div class="insc-note">Minibus 9 places (8 passagers). Priorité aux officiels et à leurs enfants.</div>';
1052      h+='<div class="insc-grid">';
1053      h+='<div><label>Comment venez-vous ?</label><select id="insc-tmode" onchange="inscrOnTransport()">'
1054        +'<option value="propre"'+(tm.mode==='propre'||!tm.mode?' selected':'')+'>Par mes propres moyens</option>'
1055        +'<option value="minibus"'+(tm.mode==='minibus'?' selected':'')+'>J’ai besoin du minibus</option>'
1056        +'<option value="covoiturage"'+(tm.mode==='covoiturage'?' selected':'')+'>Je covoiture avec…</option>'
1057        +'</select></div>';
1058      if(tm.mode==='minibus') h+='<div><label>Nb de places souhaitées</label><input type="number" min="0" max="8" id="insc-tseats" value="'+esc(tm.seats||'')+'"></div>';
1059      else if(tm.mode==='covoiturage') h+='<div><label>Je covoiture avec (préciser qui)</label><input id="insc-twith" value="'+esc(tm.with||'')+'" placeholder="ex : famille Dupont"></div>';
1060      else h+='<div></div>';
1061      h+='</div>';
1062    }
1063
1064    // REPAS (note prix)
1065    if(m.meals){
1066      h+='<div class="insc-note">Repas proposés (journée complète hors Bellegarde) : <b>gratuit pour les officiels</b>, <b>'+esc(m.mealPrice)+' € par nageur</b>. Cochez les repas ci-dessus et précisez le régime pour la réservation.</div>';
1067      h+='<div class="insc-fld"><label>Précisions pour le(s) repas particulier(s)</label><input id="insc-mealnote" value="'+esc(CUR.mealNote||'')+'"></div>';
1068    }
1069
1070    // BÉNÉVOLE + BUVETTE (compétitions à Bellegarde)
1071    if(m.buvette){
1072      h+='<h3>🙋 Bénévoles aidants</h3>';
1073      h+='<div class="insc-note">Un coup de main est précieux le jour de la compétition à Bellegarde. Vous pouvez proposer plusieurs bénévoles (parent, grand frère / grande sœur…). Un(e) aîné(e) peut aider à la chambre d’appel.</div>';
1074      if(!CUR.volunteers||!CUR.volunteers.length) CUR.volunteers=[{name:'',chambreAppel:false,installation:false}];
1075      h+='<div id="insc-volunteers">';
1076      CUR.volunteers.forEach(function(v,i){
1077        h+='<div class="insc-vol insc-card">';
1078        h+='<div class="insc-cardhd"><b>Bénévole '+(i+1)+'</b>'+(CUR.volunteers.length>1?'<button class="insc-del" onclick="inscrDelVolunteer('+i+')">Retirer</button>':'')+'</div>';
1079        h+='<div class="insc-fld"><label>Nom du bénévole</label><input class="vl-name" value="'+esc(v.name||'')+'" placeholder="Prénom Nom"></div>';
1080        h+='<label class="insc-ck"><input type="checkbox" class="vl-ca"'+(v.chambreAppel?' checked':'')+'> Chambre d’appel (navette des fiches vers l’informatique)</label>';
1081        h+='<label class="insc-ck" style="margin-top:6px"><input type="checkbox" class="vl-inst"'+(v.installation?' checked':'')+'> Installation du bassin</label>';
1082        h+='</div>';
1083      });
1084      h+='</div><button class="insc-add" onclick="inscrAddVolunteer()">+ Ajouter un bénévole</button>';
1085
1086      var bv=CUR.buvette||{items:[]};
1087      var chosen={}; (bv.items||[]).forEach(function(it){ chosen[it.item]=it.qty||1; });
1088      h+='<h3>🧁 Buvette</h3>';
1089      h+='<div class="insc-note">Pour les compétitions à Bellegarde, nous tenons une buvette : merci aux familles qui peuvent l’alimenter ! Coche ce que tu apporterais et indique la quantité.</div>';
1090      h+='<div class="buv-list">';
1091      BUV_ITEMS.forEach(function(lab,i){
1092        var isRien=/^Rien/i.test(lab); var on=chosen.hasOwnProperty(lab);
1093        h+='<div class="buv-row"><label class="insc-ck"><input type="checkbox" id="buv-'+i+'"'+(on?' checked':'')+' onchange="inscrBuvToggle('+i+')"> '+esc(lab)+'</label>'
1094          +(isRien?'':'<input type="number" min="1" id="buvq-'+i+'" class="buv-qty" value="'+esc(on?chosen[lab]:1)+'" placeholder="qté"'+(on?'':' style="visibility:hidden"')+'>')
1095          +'</div>';
1096      });
1097      h+='<div class="buv-row"><label class="buv-autre-lab">Autre (préciser)</label><input id="buv-autre" class="buv-autre" value="'+esc(bv.autre||'')+'" placeholder="ex : gâteaux salés"> <input type="number" min="1" id="buvq-autre" class="buv-qty" value="'+esc(bv.autreQty||1)+'" placeholder="qté"></div>';
1098      h+='</div>';
1099    }
1100
1101    // OBSERVATIONS
1102    h+='<div class="insc-fld"><label>Dernières observations, compléments d’information</label><textarea id="insc-obs" rows="2">'+esc(CUR.obs||'')+'</textarea></div>';
1103
1104    h+='<div id="insc-status" class="insc-status"></div>';
1105    h+='<div class="insc-actions"><button class="insc-cancel" onclick="inscrClose()">Fermer</button><button class="insc-submit" onclick="inscrSubmit()">Envoyer l’inscription</button></div>';
1106    h+='<div class="insc-tiny">Besoin de modifier ? Renvoyez ce formulaire : votre inscription est mise à jour. Pour toute annulation, contactez le coach.</div>';
1107    h+='</div>';
1108    document.getElementById('inscr-ov').innerHTML=h;
1109    var em=document.getElementById('insc-email'); if(em&&!em.value){ /* laissé vide */ }
1110    try{ inscrPartChange(); }catch(e){}
1111  }
1112  window.inscrClose=closeForm;
1113  window.inscrPartChange=function(){ var any=false; var ps=document.querySelectorAll('#insc-swimmers .sw-part'); for(var i=0;i<ps.length;i++){ if(ps[i].value==='non') any=true; } var msg=document.getElementById('insc-partmsg'); if(msg) msg.style.display=any?'':'none'; };
1114  window.inscrBuvToggle=function(i){ var cb=document.getElementById('buv-'+i); var q=document.getElementById('buvq-'+i); if(q) q.style.visibility=(cb&&cb.checked)?'visible':'hidden'; };
1115
1116  function receiptBody(p){
1117    var L=[]; L.push('Reçu d’inscription — CNBV'); L.push(p.eventTitle+' ('+frDate(p.eventDate)+(p.eventLieu?' · '+p.eventLieu:'')+')'); L.push('');
1118    L.push('Contact : '+p.email+(p.tel?' · '+p.tel:'')); if(p.contact2&&(p.contact2.nom||p.contact2.tel||p.contact2.mail)) L.push('2e contact : '+[p.contact2.nom,p.contact2.tel,p.contact2.mail].filter(Boolean).join(' · '));
1119    L.push(''); L.push('Nageur(s) :');
1120    (p.swimmers||[]).forEach(function(s){ L.push('  • '+(s.prenom||'')+' '+(s.nom||'')+' ('+(s.genre||'?')+') — '+(s.participe?'participe':'ne participe pas')+(s.comment?' — '+s.comment:'')); });
1121    if(p.officialChoice&&p.officialChoice!=='non'){ L.push(''); L.push('Officiel : '+(p.officialChoice==='formation'?'en formation':'inscrit'));
1121 (p.officials||[]).forEach(function(o){ L.push('  • '+o.nomPrenom+' ('+(o.statut==='formation'?'formation':'titulaire')+')'); }); }
1122    if(p.transport){ L.push(''); L.push('Transport : '+(p.transport.mode==='minibus'?('minibus ('+p.transport.seats+' place(s))'):(p.transport.mode==='covoiturage'?('covoiturage avec '+(p.transport.with||'?')):'moyens propres'))); }
1123    if(p.buvette&&(p.buvette.items||[]).length||(p.buvette&&p.buvette.autre)){ L.push(''); L.push('Buvette :'); (p.buvette.items||[]).forEach(function(it){ L.push('  • '+it.item+' ×'+(it.qty||1)); }); if(p.buvette.autre) L.push('  • Autre : '+p.buvette.autre+' ×'+(p.buvette.autreQty||1)); }
1124    if((p.volunteers||[]).length){ L.push(''); L.push('Bénévole(s) :'); p.volunteers.forEach(function(v){ var t=[]; if(v.chambreAppel)t.push('chambre d’appel'); if(v.installation)t.push('installation'); L.push('  • '+(v.name||'')+(t.length?' ('+t.join(', ')+')':'')); }); }
1125    if(p.mealNote) L.push('\nRepas — précisions : '+p.mealNote);
1126    if(p.obs) L.push('\nObservations : '+p.obs);
1127    L.push(''); L.push('Merci ! — CNBV');
1128    return L.join('\n');
1129  }
1130  function submit(){
1131    collect(); var m=CUR.meta; var st=document.getElementById('insc-status');
1132    var email=(CUR.email||'').trim();
1133    if(!email||email.indexOf('@')<0){ st.textContent='Merci d’indiquer une adresse e-mail valide.'; st.className='insc-status err'; return; }
1134    var nsw=CUR.swimmers.filter(function(s){return s.nom||s.prenom;});
1135    if(!nsw.length){ st.textContent='Indiquez au moins un nageur (nom / prénom).'; st.className='insc-status err'; return; }
1136    var oc=(document.getElementById('insc-ofchoice')&&document.getElementById('insc-ofchoice').value)||'non';
1137    var mealNote=(document.getElementById('insc-mealnote')&&document.getElementById('insc-mealnote').value||'').trim();
1138    var obs=(document.getElementById('insc-obs')&&document.getElementById('insc-obs').value||'').trim();
1139    var payload={
1140      eventId:m.id, eventTitle:m.title, eventDate:m.date, eventLieu:m.lieu,
1141      email:email, tel:(CUR.tel||''), contact2:(CUR.contact2||null),
1142      swimmers:CUR.swimmers,
1143      officialChoice:oc,
1144      officials:(oc==='non'?[]:CUR.officials.filter(function(o){return o.nomPrenom;})),
1145      transport:(m.transport?(CUR.transport||{mode:'propre',seats:0}):null),
1146      mealNote:mealNote,
1147      volunteers:(m.buvette?(CUR.volunteers||[]).filter(function(v){return v.name||v.chambreAppel||v.installation;}):[]),
1148      buvette:(m.buvette?(CUR.buvette||null):null),
1149      obs:obs
1150    };
1151    // mémoriser le profil famille pour le pré-remplissage futur
1152    saveProfile({ email:email, tel:(CUR.tel||''), contact2:(CUR.contact2||null), swimmers:CUR.swimmers.map(function(s){return {nom:s.nom,prenom:s.prenom,genre:s.genre};}) });
1153    st.textContent='Envoi…'; st.className='insc-status';
1154    readState();
1155    fetch(QW+'/inscriptions?code='+encodeURIComponent(NCODE),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(payload)})
1156      .then(function(r){return r.json();}).then(function(d){
1157        if(d&&d.ok){
1158          st.innerHTML='Inscription enregistrée ✔ Merci !<br><a class="insc-receipt" href="mailto:'+encodeURIComponent(email)+'?subject='+encodeURIComponent('Reçu inscription — '+m.title)+'&body='+encodeURIComponent(receiptBody(payload))+'">✉️ Recevoir le reçu détaillé par e-mail</a>';
1159          st.className='insc-status ok';
1160        }
1161        else { st.textContent=(d&&d.error)||'Échec de l’envoi.'; st.className='insc-status err'; }
1162      }).catch(function(){ st.textContent='Service indisponible, réessayez.'; st.className='insc-status err'; });
1163  }
1164  window.inscrSubmit=submit;
1165
1166  // ============ ESPACE COACH : gérer les ouvertures ============
1167  function coachManager(){
1168    readState();
1169    if(!COACHPW){ alert('Reconnecte-toi à ton espace coach.'); return; }
1170    var ov=document.getElementById('inscr-cov'); ov.classList.add('on');
1171    ov.innerHTML='<div class="insc-modal"><button class="insc-x" onclick="inscrCoachClose()">✕</button><h2>🎟️ Gérer les inscriptions</h2><div class="insc-sub">Chargement…</div></div>';
1172    // récupérer la liste des évènements (en ligne sinon seed) + la config + les convocations
1173    var rows = (typeof CAL_ONLINE!=='undefined'&&CAL_ONLINE&&CAL_ONLINE.length)?CAL_ONLINE:(typeof CAL_SEED!=='undefined'?CAL_SEED:[]);
1174    loadCfg(function(){ loadConvoc(function(){ coachRender(rows); }); });
1175  }
1176  function coachRender(rows){
1177    var evs=rows.filter(function(r){return r.type==='ev' && !/^vacances/i.test(String(r.title||''));});
1178    var today=new Date().toISOString().slice(0,10);
1179    // inscriptions ouvertes en tête, puis par date
1180    evs.sort(function(a,b){ var oa=((CFG[String(a.id)]||{}).open)?0:1, ob=((CFG[String(b.id)]||{}).open)?0:1; if(oa!==ob)return oa-ob; return String(a.date||'').localeCompare(String(b.date||'')); });
1181    var h='<div class="insc-modal insc-wide"><button class="insc-x" onclick="inscrCoachClose()">✕</button>';
1182    h+='<h2>🎟️ Gérer les inscriptions</h2>';
1183    h+='<div class="insc-note">Ouvre un évènement pour que les parents puissent inscrire leur
1183s enfants depuis l’espace nageur. Coche « Repas » pour une journée complète hors Bellegarde, « Transport » si le minibus est proposé.</div>';
1184    h+='<div class="insc-filter"><label class="insc-ck"><input type="checkbox" id="ic-futur" checked onchange="inscrCoachToggleFut()"> À venir seulement</label></div>';
1185    h+='<div id="ic-list">';
1186    evs.forEach(function(e){
1187      var id=String(e.id); var c=CFG[id]||{}; var fut=(String(e.date||'')>=today);
1188      h+='<div class="ic-row'+(c.open?' ic-on':'')+(fut?'':' ic-past')+'" data-fut="'+(fut?1:0)+'" data-id="'+esc(id)+'">';
1189      var pills=(c.open?'<span class="ic-pill open">🟢 Inscriptions ouvertes</span>':'')+(fut?'':'<span class="ic-pill past">⏳ date passée</span>');
1190      h+='<div class="ic-main"><b>'+esc(e.title||'')+'</b><span class="ic-date">'+esc(frDate(e.date))+(e.lieu?' · '+esc(e.lieu):'')+'</span>'+pills+'</div>';
1191      h+='<div class="ic-ctrls">';
1192      h+='<label class="insc-ck"><input type="checkbox" class="ic-open"'+(c.open?' checked':'')+'> Ouvrir</label>';
1193      h+='<label class="insc-ck"><input type="checkbox" class="ic-meals"'+(c.meals?' checked':'')+'> Repas</label>';
1194      h+='<label class="insc-ck"><input type="checkbox" class="ic-transport"'+(c.transport?' checked':'')+'> Transport</label>';
1195      h+='<label class="insc-ck"><input type="checkbox" class="ic-buvette"'+(c.buvette?' checked':'')+'> Buvette (Bellegarde)</label>';
1196      h+='<span class="ic-price">Repas nageur <input type="number" class="ic-mealprice" min="0" step="0.5" value="'+esc(c.mealPrice!=null?c.mealPrice:10)+'"> €</span>';
1197      h+='<button class="ic-save" onclick="inscrCoachSave(this)">Enregistrer</button>';
1198      var nconv=((CONVOC[id]||[]).length);
1199      h+='<button class="ic-convoc" onclick="inscrConvocOpen(\''+esc(id)+'\')">📣 Convoquer'+(nconv?(' ('+nconv+')'):'')+'</button>';
1200      h+='<span class="ic-stat"></span>';
1201      h+='</div></div>';
1202    });
1203    h+='</div></div>';
1204    document.getElementById('inscr-cov').innerHTML=h;
1205    inscrCoachToggleFut();
1206  }
1207  window.inscrCoachManager=coachManager;
1208  window.inscrCoachClose=function(){ var o=document.getElementById('inscr-cov'); if(o)o.classList.remove('on'); };
1209  window.inscrCoachToggleFut=function(){ var only=document.getElementById('ic-futur'); var on=only?only.checked:true; [].forEach.call(document.querySelectorAll('#ic-list .ic-row'),function(r){ r.style.display=(on&&r.getAttribute('data-fut')!=='1')?'none':''; }); };
1210  window.inscrCoachSave=function(btn){
1211    var row=btn.closest('.ic-row'); var id=row.getAttribute('data-id');
1212    var stat=row.querySelector('.ic-stat'); stat.textContent='…'; stat.className='ic-stat';
1213    var e=null; var rows=(typeof CAL_ONLINE!=='undefined'&&CAL_ONLINE&&CAL_ONLINE.length)?CAL_ONLINE:(typeof CAL_SEED!=='undefined'?CAL_SEED:[]);
1214    for(var i=0;i<rows.length;i++){ if(String(rows[i].id)===String(id)){e=rows[i];break;} }
1215    var body={ eventId:id,
1216      open:row.querySelector('.ic-open').checked,
1217      meals:row.querySelector('.ic-meals').checked,
1218      transport:row.querySelector('.ic-transport').checked,
1219      buvette:row.querySelector('.ic-buvette').checked,
1220      mealPrice:+row.querySelector('.ic-mealprice').value||0,
1221      title:(e&&e.title)||'', date:(e&&e.date)||'', lieu:(e&&e.lieu)||'' };
1222    readState();
1223    fetch(QW+'/inscriptions/config?pw='+encodeURIComponent(COACHPW),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify(body)})
1224      .then(function(r){return r.json();}).then(function(d){
1225        if(d&&d.ok){ CFG=d.config||CFG; stat.textContent='✔ enregistré'; stat.className='ic-stat ok'; row.classList.toggle('ic-on',body.open); decorate();
1226          var rows2=(typeof CAL_ONLINE!=='undefined'&&CAL_ONLINE&&CAL_ONLINE.length)?CAL_ONLINE:(typeof CAL_SEED!=='undefined'?CAL_SEED:[]);
1227          setTimeout(function(){ coachRender(rows2); },500); }
1228        else { stat.textContent=(d&&d.error)||'Échec'; stat.className='ic-stat err'; }
1229      }).catch(function(){ stat.textContent='Service indisponible'; stat.className='ic-stat err'; });
1230  };
1231
1232  // ============ ESPACE COACH : convocations (bandeau vert) ============
1233  var PICK=null; // {eventId,title,sel:{iuf:1},group,years:[],q}
1234  function convocOpen(id){
1235    readState();
1236    if(!COACHPW){ alert('Reconnecte-toi à ton espace coach.'); return; }
1237    var title='',evcats=[],evdate=''; var rows=(typeof CAL_ONLINE!=='undefined'&&CAL_ONLINE&&CAL_ONLINE.length)?CAL_ONLINE:(typeof CAL_SEED!=='undefined'?CAL_SEED:[]);
1238    for(var i=0;i<rows.length;i++){ if(String(rows[i].id)===String(id)){ title=rows[i].title||''; evcats=(rows[i].cats||[]).map(function(x){return String(x).toLowerCase();}); evdate=rows[i].date||''; break; } }
1239    var ov=document.getElementById('inscr-pov'); ov.classList.add('on');
1240    ov.innerHTML='<div class="insc-modal"><button class="insc-x" onclick="inscrConvocClose()">✕</button><h2>📣 Convocations</h2><div class="insc-sub">Chargement de la liste des nageurs…</div></div>';
1241    loadConvoc(function(){
1242      loadRoster(function(){
1243        // ré-alignement clé → licence : si un nageur convoqué par sa clé a désormais un IUF, on bascule sur l'IUF
1244        var k2i={};
1244 activeRoster().forEach(function(a){ if(a.iuf&&a.key) k2i[String(a.key)]=String(a.iuf); });
1245        var sel={}; (CONVOC[id]||[]).forEach(function(u){ u=String(u); sel[k2i[u]||u]=1; });
1246        PICK={eventId:String(id), title:title, evcats:evcats, evdate:evdate, sel:sel, groups:[], years:[], q:'', view:'pick'};
1247        convocRender();
1248      });
1249    });
1250  }
1251  function activeRoster(){ return (ROSTER||[]).filter(function(a){ return !a.archive; }); }
1252  var CATLBL={av:'Avenirs',benj:'Benjamins',jun:'Juniors et +',mai:'Maîtres',enf:'ENF',handi:'Handi'};
1253  function evAgeCats(){ return (PICK.evcats||[]).filter(function(c){return ['av','benj','jun','mai'].indexOf(c)>=0;}); }
1254  // Année civile de la compétition (la catégorie FFM « Uxx » = âge atteint dans cette année ; bascule au 1er janvier)
1255  function compYear(){ var d=(PICK&&PICK.evdate)?String(PICK.evdate):''; var y=parseInt(d.slice(0,4),10); return y||(new Date()).getFullYear(); }
1256  function ucatOf(a){ var y=+((a&&a.annee)||(a&&a.naissance?String(a.naissance).slice(0,4):0))||0; if(!y)return ''; var age=compYear()-y; if(age<=0)return ''; return (age>=19)?'Seniors':('U'+age); }
1257  function swBuckets(y){ y=+y||0; if(!y)return null; var age=compYear()-y; var b=[]; if(age<=11)b.push('av'); else if(age<=13)b.push('benj'); else b.push('jun'); if(age>=25)b.push('mai'); return b; }
1258  function isOutOfCat(a){ var ec=evAgeCats(); if(!ec.length)return false; var y=a.annee||(a.naissance?String(a.naissance).slice(0,4):0); var b=swBuckets(y); if(!b)return false; return !b.some(function(x){return ec.indexOf(x)>=0;}); }
1259  function evCatLabel(){ return evAgeCats().map(function(c){return CATLBL[c]||c;}).join(', '); }
1260  function pkFiltered(){
1261    var q=(PICK.q||'').toLowerCase();
1262    var list=activeRoster().filter(function(a){
1263      if(PICK.groups.length && !(a.groupes||[]).some(function(g){return PICK.groups.indexOf(g)>=0;})) return false;
1264      if(PICK.years.length && PICK.years.indexOf(String(a.annee))<0) return false;
1265      if(q){ var s=((a.nom||'')+' '+(a.prenom||'')).toLowerCase(); if(s.indexOf(q)<0) return false; }
1266      return true;
1267    });
1268    list.sort(function(a,b){ return ((a.nom||'')+(a.prenom||'')).localeCompare((b.nom||'')+(b.prenom||'')); });
1269    return list;
1270  }
1271  function pkRowHtml(a){
1272    var uid=String(a.iuf||a.key||''); var lic=!!a.iuf; var ck=PICK.sel[uid]?' checked':'';
1273    var grp=(a.groupes||[]).join(', ');
1274    var ooc=isOutOfCat(a);
1275    return '<label class="pk-row'+(ooc?' pk-ooc':'')+'">'
1276      +'<input type="checkbox"'+ck+' data-uid="'+esc(uid)+'" onchange="inscrConvocToggle(this)">'
1277      +'<span class="pk-nm">'+esc(a.nom||'')+' '+esc(a.prenom||'')+(lic?'':' <span class="pk-prov">provisoire</span>')+(ooc?' <span class="pk-oocb" title="Âge hors des catégories de la compétition">⚠️ hors catégorie</span>':'')+'</span>'
1278      +'<span class="pk-meta">'+(a.annee?a.annee:'')+(function(){var u=ucatOf(a);return u?' · <span class="pk-ucat">'+esc(u)+'</span>':'';})()+(grp?(' · '+esc(grp)):'')+(lic?'':(a.provCode?(' · code '+esc(a.provCode)):' · sans licence'))+(a.mail?'':' · <span style="color:#b3261e">sans e-mail</span>')+'</span>'
1279      +'</label>';
1280  }
1281  function pkBulkHtml(nvis){
1282    var n=Object.keys(PICK.sel).length;
1283    return '<button onclick="inscrConvocAll(1)">Cocher les '+nvis+' visibles</button>'
1284      +'<button onclick="inscrConvocAll(0)">Décocher les visibles</button>'
1285      +'<button onclick="inscrConvocClear()">✖ Tout décocher (<span class="pk-selcnt">'+n+'</span>)</button>'
1286      +'<button class="pk-recap" onclick="inscrConvocRecap()">📋 Récapitulatif des convoqués (<span class="pk-selcnt">'+n+'</span>)</button>';
1287  }
1288  function pkMs(id,label,items){
1289    var arr=(id==='groups')?PICK.groups:PICK.years;
1290    var sum=arr.length?(arr.length+' sélectionné'+(arr.length>1?'s':'')):'Tous';
1291    var opts=items.map(function(it){var v=String(it.v),on=arr.indexOf(v)>=0;
1292      return '<label class="pk-ms-item"><input type="checkbox"'+(on?' checked':'')+' onchange="inscrMsPick(\''+id+'\',\''+esc(v)+'\')"> '+esc(it.t)+'</label>';}).join('');
1293    return '<div class="pk-ms" id="pk-ms-'+id+'"><label class="pk-mslab">'+label+'</label>'
1294      +'<button type="button" class="pk-ms-btn" onclick="inscrMsToggle(\''+id+'\')"><span id="pk-ms-sum-'+id+'">
1294'+sum+'</span><span class="pk-ms-car">▾</span></button>'
1295      +'<div class="pk-ms-panel" id="pk-ms-panel-'+id+'">'+(opts||'<div class="pk-hint" style="padding:6px">aucun</div>')+'</div></div>';
1296  }
1297  function pkSum(id){ var arr=(id==='groups')?PICK.groups:PICK.years; var e=document.getElementById('pk-ms-sum-'+id); if(e)e.textContent=arr.length?(arr.length+' sélectionné'+(arr.length>1?'s':'')):'Tous'; }
1298  function pkWarn(){
1299    var el=document.getElementById('pk-warn'); if(!el)return;
1300    var ec=evAgeCats(); if(!ec.length){ el.style.display='none'; return; }
1301    var byUid={}; activeRoster().forEach(function(a){ if(a.iuf)byUid[String(a.iuf)]=a; if(a.key)byUid[String(a.key)]=a; });
1302    var bad=[]; Object.keys(PICK.sel).forEach(function(u){ var a=byUid[u]; if(a&&isOutOfCat(a)) bad.push(((a.prenom||'')+' '+(a.nom||'')).trim()); });
1303    if(bad.length){ el.style.display=''; el.innerHTML='⚠️ <b>'+bad.length+' convoqué(s) hors catégorie</b> (prévu : '+esc(evCatLabel())+') : '+bad.slice(0,15).map(esc).join(', ')+(bad.length>15?'…':''); }
1304    else el.style.display='none';
1305  }
1306  function pkCounts(){ var n=Object.keys(PICK.sel).length; var sub=document.querySelector('#inscr-pov .insc-sub b'); if(sub)sub.textContent=n; [].forEach.call(document.querySelectorAll('#inscr-pov .pk-selcnt'),function(e){e.textContent=n;}); pkWarn(); }
1307  function pkRenderList(){
1308    readPickFilters();
1309    var filtered=pkFiltered();
1310    var host=document.getElementById('pk-list'); if(host)host.innerHTML=filtered.length?filtered.map(pkRowHtml).join(''):'<div class="insc-note">Aucun nageur pour ces filtres.</div>';
1311    var bulk=document.getElementById('pk-bulk'); if(bulk)bulk.innerHTML=pkBulkHtml(filtered.length);
1312    pkSum('groups'); pkSum('years'); pkCounts(); pkWarn();
1313  }
1314  window.inscrMsToggle=function(id){
1315    var p=document.getElementById('pk-ms-panel-'+id); if(!p)return;
1316    var open=p.classList.contains('on');
1317    [].forEach.call(document.querySelectorAll('#inscr-pov .pk-ms-panel.on'),function(x){x.classList.remove('on');});
1318    if(!open)p.classList.add('on');
1319  };
1320  window.inscrMsPick=function(id,v){ var arr=(id==='groups')?PICK.groups:PICK.years; v=String(v); var i=arr.indexOf(v); if(i>=0)arr.splice(i,1); else arr.push(v); pkRenderList(); };
1321
1322  function convocRender(){
1323    if(PICK.view==='recap'){ recapRender(); return; }
1324    var list=activeRoster();
1325    var groups={},years={};
1326    list.forEach(function(a){ (a.groupes||[]).forEach(function(g){ if(g)groups[g]=1; }); if(a.annee)years[a.annee]=1; });
1327    var gItems=Object.keys(groups).sort().map(function(g){return {v:g,t:g};});
1328    var yItems=Object.keys(years).map(Number).sort(function(a,b){return b-a;}).map(function(y){return {v:y,t:y};});
1329    var nSel=Object.keys(PICK.sel).length;
1330    var h='<div class="insc-modal insc-wide"><button class="insc-x" onclick="inscrConvocClose()">✕</button>';
1331    h+='<h2>📣 Convocations — '+esc(PICK.title)+'</h2>';
1332    h+='<div class="insc-sub">Coche les nageurs convoqués : ils verront le bandeau vert « Tu es convoqué(e) ». <b>'+nSel+'</b> convoqué(s).</div>';
1333    var _ecl=evCatLabel();
1334    h+='<div class="insc-note">'+(_ecl?('Catégories prévues par la compétition : <b>'+esc(_ecl)+'</b>. '):'')+'Les nageurs <b>sans licence</b> sont convocables (code provisoire CNBV-…).</div>';
1335    h+='<div id="pk-warn" class="pk-warn" style="display:none"></div>';
1336    h+='<div class="pk-filters">';
1337    h+='<div class="pk-fgrp">'+pkMs('groups','Groupes',gItems)+'</div>';
1338    h+='<div class="pk-fgrp">'+pkMs('years','Années d’âge',yItems)+'</div>';
1339    h+='<div class="pk-fgrp" style="flex:1;min-width:150px"><label class="pk-mslab">Recherche</label><input id="pk-q" value="'+esc(PICK.q||'')+'" placeholder="nom / prénom" oninput="inscrConvocFilterSoft()"></div>';
1340    h+='</div>';
1341    h+='<div class="pk-bulk" id="pk-bulk">'+pkBulkHtml(pkFiltered().length)+'</div>';
1342    h+='<div class="pk-list" id="pk-list"></div>';
1343    h+='<div id="pk-status" class="insc-status"></div>';
1344    h+='<div class="insc-actions"><button class="insc-cancel" onclick="inscrConvocClose()">Fermer</button><button class="insc-submit" onclick="inscrConvocSave()">Enregistrer les convocations</button></div>';
1345    h+='</div>';
1346    document.getElementById('inscr-pov').innerHTML=h;
1347    pkRenderList();
1348  }
1349  function readPickFilters(){
1350    var q=document.getElementById('pk-q'); if(q)PICK.q=q.value;
1351  }
1352  window.inscrPickToggleGroup=function(g){ readPickFilters(); var i=PICK.groups.indexOf(g); if(i>=0)PICK.groups.splice(i,1); else PICK.groups.push(g); convocRender(); };
1353  window.inscrPickToggleYear=function(y){ readPickFilters(); y=String(y); var i=PICK.years.indexOf(y); if(i>=0)PICK.years.splice(i,1); else PICK.years.push(y); convocRender(); };
1354  function frNaiss(s){ if(!s)return''; var p=String(s).split('-'); return (p.length===3)?(p[2]+'/'+p[1]+'/'+p[0]):s; }
1355  function genreOf(a){ var s=String(a&&a.sexe||'').toUpperCase(); if(s.charAt(0)==='F'||s.indexOf('DAME')>=0)return 'D'; if(s.charAt(0)==='M'||s.charAt(0)==='H'||s.indexOf('MESS')>=0)return 'M'; return '?'; }
1356  function countDM(list){ var d=0,m=0; list.forEach(function(a){ var g=genreOf(a); if(g==='D')d++; else if(g==='M')m++; }); return {d:d,m:m}; }
1357  function mailConvoc(a){
1358    var subj='Convocation CNBV — '+PICK.title;
1359    var body='Bonjour,\n\n'+(a.prenom||'')+' '+(a.nom||'')+' est convoqué(e) pour : '+PICK.title+'.\n\n';
1360    if(a.code) body+='Code d’accès personnel pour l’espace nageur (perfs, convocations, inscription) : '+a.code+'\n'
1361      +'Ouvre le calendrier : https://coachfrancois-calendrier-cnbv.pages.dev puis « Espace nageur — me connecter ».\n\n';
1362    body+='Merci de confirmer l’inscription depuis l’espace nageur.\n\nSportivement,\nLe CNBV';
1363    return 'mailto:'+encodeURIComponent(a.mail||'')+'?subject='+encodeURIComponent(subj)+'&body='+encodeURIComponent(body);
1364  }
1365  window.inscrConvocMailAll=function(){
1366    var byUid={};
1366 activeRoster().forEach(function(x){ if(x.iuf)byUid[String(x.iuf)]=x; if(x.key)byUid[String(x.key)]=x; });
1367    var mails=Object.keys(PICK.sel).map(function(u){return (byUid[u]||{}).mail;}).filter(function(m){return m&&m.indexOf('@')>0;});
1368    if(!mails.length){ alert('Aucune adresse e-mail disponible pour les convoqués sélectionnés.'); return; }
1369    var subj='Convocation CNBV — '+PICK.title;
1370    var body='Bonjour,\n\nVous êtes convoqué(e) pour : '+PICK.title+'.\nMerci de confirmer l’inscription depuis l’espace nageur : https://coachfrancois-calendrier-cnbv.pages.dev\n\nSportivement,\nLe CNBV';
1371    // destinataires en Cci pour préserver les adresses
1372    window.location.href='mailto:?bcc='+encodeURIComponent(mails.join(','))+'&subject='+encodeURIComponent(subj)+'&body='+encodeURIComponent(body);
1373  };
1374  window.inscrConvocCopyTable=function(){
1375    var byUid={}; activeRoster().forEach(function(x){ if(x.iuf)byUid[String(x.iuf)]=x; if(x.key)byUid[String(x.key)]=x; });
1376    var lines=['Nom\tPrénom\tGenre\tAnnée\tCatégorie\tNaissance\tTéléphone\tE-mail\tCode'];
1377    Object.keys(PICK.sel).forEach(function(u){ var a=byUid[u]; if(!a)return; lines.push([a.nom||'',a.prenom||'',genreOf(a),a.annee||'',ucatOf(a)||'',frNaiss(a.naissance),a.tel||'',a.mail||'',a.code||''].join('\t')); });
1378    var t=document.createElement('textarea'); t.value=lines.join('\n'); document.body.appendChild(t); t.select(); try{document.execCommand('copy');}catch(e){} t.remove();
1379    alert('Tableau copié ('+(lines.length-1)+' nageurs) — colle-le dans Mail, Excel ou un publipostage.');
1380  };
1381  function recapRender(){
1382    var byUid={}; activeRoster().forEach(function(a){ if(a.iuf)byUid[String(a.iuf)]=a; if(a.key)byUid[String(a.key)]=a; });
1383    var sel=Object.keys(PICK.sel);
1384    var groups={};
1385    sel.forEach(function(uid){ var a=byUid[uid]; if(!a){ (groups['(hors base)']=groups['(hors base)']||[]).push({nom:uid,prenom:'',annee:'',naissance:'',uid:uid}); return; } var g=(a.groupes&&a.groupes[0])||'(sans groupe)'; (groups[g]=groups[g]||[]).push(a); });
1386    var gkeys=Object.keys(groups).sort();
1387    var noMail=sel.filter(function(u){var a=byUid[u];return !(a&&a.mail);}).length;
1388    var allSw=sel.map(function(u){return byUid[u];}).filter(Boolean);
1389    var dm=countDM(allSw); var unk=sel.length-dm.d-dm.m;
1390    var h='<div class="insc-modal insc-wide"><button class="insc-x" onclick="inscrConvocClose()">✕</button>';
1391    h+='<h2>📋 Convoqués — '+esc(PICK.title)+'</h2>';
1392    h+='<div class="insc-sub"><b>'+sel.length+'</b> convoqué(s) · <b>👩 '+dm.d+' Dames</b> · <b>👨 '+dm.m+' Messieurs</b>'+(unk?(' · '+unk+' n.c.'):'')+' · '+gkeys.length+' groupe(s).'+(noMail?(' <span style="color:#b3261e">'+noMail+' sans e-mail.</span>'):'')+'</div>';
1393    h+='<div class="pk-bulk"><button onclick="inscrConvocBack()">← Retour à la sélection</button>'
1394      +'<button class="pk-recap" onclick="inscrConvocSave()">💾 Enregistrer</button>'
1395      +'<button onclick="inscrConvocMailAll()">✉️ E-mail groupé (invitation)</button>'
1396      +'<button onclick="inscrConvocCopyTable()">📋 Copier le tableau</button>'
1397      +'<button onclick="inscrConvocPrint()">🖨️ Imprimer / PDF</button></div>';
1398    h+='<div class="insc-note">✕ <b>Retirer</b> enlève le nageur de la convocation (même s’il est masqué par un filtre) — clique ensuite <b>💾 Enregistrer</b>. Le bouton ✉️ par nageur ouvre un mail pré-rempli avec <b>son code personnel</b> ; « E-mail groupé » = invitation simple (adresses en Cci).</div>';
1399    h+='<div id="pk-status" class="insc-status"></div>';
1400    if(!sel.length) h+='<div class="insc-note">Aucun nageur convoqué pour l’instant.</div>';
1401    h+='<div id="pk-recap-body">';
1402    gkeys.forEach(function(g){
1403      var arr=groups[g].slice().sort(function(a,b){ return ((a.nom||'')+(a.prenom||'')).localeCompare((b.nom||'')+(b.prenom||'')); });
1404      var gdm=countDM(arr);
1405      h+='<h3>'+esc(g)+' <span style="color:#889;font-weight:400">('+arr.length+' · 👩 '+gdm.d+' / 👨 '+gdm.m+')</span></h3>';
1406      h+='<table class="pk-rtable"><thead><tr><th>
1406#</th><th>Nom</th><th>Prénom</th><th>Genre</th><th>Année</th><th>Cat.</th><th>Naiss.</th><th>Téléphone</th><th>E-mail</th><th>Code</th><th>✉️</th><th>Retirer</th></tr></thead><tbody>';
1407      arr.forEach(function(a,i){
1408        var mailBtn=(a.mail)?('<a class="pk-mail" href="'+mailConvoc(a)+'">✉️</a>'):'—';
1409        var g=genreOf(a); var gl=(g==='D'?'👩 D':(g==='M'?'👨 M':'—'));
1410        var _r1=String(a.iuf||a.uid||''), _r2=String(a.key||'');
1411        var rmBtn='<button class="pk-rm" title="Retirer de la convocation" onclick="inscrConvocRemove(\''+esc(_r1)+'\',\''+esc(_r2)+'\')">✕</button>';
1412        h+='<tr'+(isOutOfCat(a)?' style="background:#fff3f3"':'')+'><td>'+(i+1)+'</td><td>'+esc(a.nom||'')+'</td><td>'+esc(a.prenom||'')+(isOutOfCat(a)?' ⚠️':'')+'</td><td>'+gl+'</td><td>'+esc(a.annee||'')+'</td><td>'+esc(ucatOf(a)||'')+'</td><td>'+esc(frNaiss(a.naissance))+'</td><td>'+esc(a.tel||'')+'</td><td>'+esc(a.mail||'')+'</td><td>'+esc(a.code||'')+'</td><td>'+mailBtn+'</td><td>'+rmBtn+'</td></tr>';
1413      });
1414      h+='</tbody></table>';
1415    });
1416    h+='</div></div>';
1417    document.getElementById('inscr-pov').innerHTML=h;
1418  }
1419  window.inscrConvocRecap=function(){ readPickFilters(); PICK.view='recap'; convocRender(); };
1420  window.inscrConvocBack=function(){ PICK.view='pick'; convocRender(); };
1421  window.inscrConvocPrint=function(){
1422    var body=document.getElementById('pk-recap-body'); if(!body)return;
1423    var w=window.open('','_blank'); if(!w){ alert('Autorise les fenêtres pop-up pour imprimer.'); return; }
1424    w.document.write('<html><head><meta charset="utf-8"><title>Convoqués — '+esc(PICK.title)+'</title>'
1425      +'<style>body{font-family:Arial,sans-serif;margin:24px;color:#222}h1{font-size:18px}h3{margin:16px 0 6px;color:#0d6b3f}table{border-collapse:collapse;width:100%;font-size:13px;margin-bottom:10px}th,td{border:1px solid #ccc;padding:5px 8px;text-align:left}thead th{background:#eef3f8}</style></head><body>'
1426      +'<h1>Convoqués — '+esc(PICK.title)+'</h1>'+body.innerHTML+'</body></html>');
1427    w.document.close(); setTimeout(function(){ w.focus(); w.print(); },300);
1428  };
1429  window.inscrConvocOpen=convocOpen;
1430  window.inscrConvocClose=function(){ var o=document.getElementById('inscr-pov'); if(o)o.classList.remove('on'); };
1431  window.inscrConvocFilter=function(){ readPickFilters(); convocRender(); };
1432  window.inscrConvocFilterSoft=function(){ // recherche sans reconstruire les selects (garde le focus)
1433    var q=document.getElementById('pk-q'); PICK.q=q?q.value:''; readPickFilters(); convocRender();
1434    var nq=document.getElementById('pk-q'); if(nq){ nq.focus(); nq.setSelectionRange(nq.value.length,nq.value.length); }
1435  };
1436  window.inscrConvocToggle=function(el){ var uid=el.getAttribute('data-uid'); if(!uid)return; if(el.checked)PICK.sel[uid]=1; else delete PICK.sel[uid];
1437    var sub=document.querySelector('#inscr-pov .insc-sub b'); if(sub)sub.textContent=Object.keys(PICK.sel).length; };
1438  window.inscrConvocAll=function(on){ readPickFilters();
1439    [].forEach.call(document.querySelectorAll('#inscr-pov .pk-row input[type=checkbox]'),function(cb){ var uid=cb.getAttribute('data-uid'); cb.checked=!!on; if(on)PICK.sel[uid]=1; else delete PICK.sel[uid]; });
1440    var sub=document.querySelector('#inscr-pov .insc-sub b'); if(sub)sub.textContent=Object.keys(PICK.sel).length; };
1441  window.inscrConvocClear=function(){ if(!Object.keys(PICK.sel).length)return; if(!confirm('Retirer TOUS les convoqués de cet évènement ? (pense à Enregistrer ensuite)'))return; PICK.sel={}; convocRender(); };
1442  window.inscrConvocRemove=function(a,b){ if(a)delete PICK.sel[a]; if(b)delete PICK.sel[b]; recapRender(); };
1443  window.inscrConvocSave=function(){
1444    var st=document.getElementById('pk-status'); st.textContent='Enregistrement…'; st.className='insc-status'; readState();
1445    var iufs=Object.keys(PICK.sel);
1446    fetch(QW+'/inscriptions/convoc?pw='+encodeURIComponent(COACHPW),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({eventId:PICK.eventId,iufs:iufs})})
1447      .then(function(r){return r.json();}).then(function(d){
1448        if(d&&d.ok){ CONVOC=d.convoc||CONVOC; st.textContent='Convocations enregistrées ✔ ('+iufs.length+')'; st.className='insc-status ok';
1449          // rafraîchir le compteur dans le gestionnaire
1450          var rows=(typeof CAL_ONLINE!=='undefined'&&CAL_ONLINE&&CAL_ONLINE.length)?CAL_ONLINE:(typeof CAL_SEED!=='undefined'?CAL_SEED:[]);
1451          coachRender(rows);
1452          setTimeout(function(){ window.inscrConvocClose(); },1000);
1453        } else { st.textContent=(d&&d.error)||'Échec.'; st.className='insc-status err'; }
1454      }).catch(function(){ st.textContent='Service indisponible, réessayez.'; st.className='insc-status err'; });
1455  };
1456
1457  // ============ HOOKS ============
1458  function wrap(name, after){
1459    var orig=window[name];
1460    if(typeof orig!=='function') return;
1461    window[name]=function(){ var r=orig.apply(this,arguments); try{after.apply(this,arguments);}catch(e){} return r; };
1462  }
1463  function install(){
1464    // ré-décorer après chaque (re)rendu des lignes du calendrier
1465    wrap('calApplyOnline', function(){ setTimeout(decorate,0); });
1466    wrap('calReinit',      function(){ setTimeout(decorate,0); });
1467    wrap('render',         function(){ setTimeout(decorate,0); });
1468    // capter l'identité du nageur à la connexion + bandeau « compte provisoire »
1469    wrap('applyNageur',    function(d){ try{ if(d&&d.nom){ var sp=splitName(d.nom); ME={nom:sp.nom,prenom:sp.prenom,annee:d.annee||'',genre:(String(d.sexe||'').toUpperCase().indexOf('DAME')>=0?'D':(String(d.sexe||'').toUpperCase().indexOf('MESS')>=0?'M':''))}; }
1470      var pn=document.getElementById('inscr-prov-note');
1471      if(pn){ if(d&&d.prov){ pn.textContent='ℹ️ '+(d.note||'Compte provisoire — un nouveau code te sera remis dès ta première compétition (licence FFN).'); pn.style.display=''; } else { pn.style.display='none'; pn.textContent=''; } }
1472    }catch(e){} setTimeout(decorate,0); });
1473    // ajouter le bouton coach dans l'espace coach
1474    wrap('coachOpen', function(){ setTimeout(function(){
1475      var box=document.querySelector('#nl-body .coachbox'); if(!box||box.querySelector('.insc-coach-sec'))return;
1476      var div=document.createElement('div'); div.className='cbsec insc-coach-sec';
1477      div.innerHTML='<b>3) Inscriptions aux évènements</b><div class="cbnote">Ouvre les compétitions/RDV aux inscriptions des parents, avec repas et transport au cas par cas.</div>
1477<button class="nl-btn" onclick="inscrCoachManager()">🎟️ Gérer les inscriptions</button>';
1478      var out=box.querySelector('.nl-out'); if(out) box.insertBefore(div,out); else box.appendChild(div);
1479    },0); });
1480
1481    // reformuler le bandeau vert en « convoqué(e) »
1482    wrap('markSelections', function(){
1483      var bn=document.getElementById('selbanner');
1484      if(bn&&bn.innerHTML){ bn.innerHTML=bn.innerHTML.replace('Tu es sélectionné(e) pour','📣 Tu es convoqué(e) pour'); }
1485      [].forEach.call(document.querySelectorAll('.selbadge'),function(e){ e.textContent='✓ convoqué(e)'; });
1486      [].forEach.call(document.querySelectorAll('.selno'),function(e){ e.textContent='sur convocation'; });
1487    });
1488
1489    // overlays
1490    if(!document.getElementById('inscr-ov')){ var o=document.createElement('div'); o.id='inscr-ov'; o.className='inscr-ov'; document.body.appendChild(o); }
1491    if(!document.getElementById('inscr-cov')){ var c=document.createElement('div'); c.id='inscr-cov'; c.className='inscr-ov'; document.body.appendChild(c); }
1492    if(!document.getElementById('inscr-pov')){ var p=document.createElement('div'); p.id='inscr-pov'; p.className='inscr-ov'; p.style.zIndex='10000'; document.body.appendChild(p); }
1493    if(!document.getElementById('inscr-prov-note')){ var pn=document.createElement('div'); pn.id='inscr-prov-note'; pn.className='inscr-prov-note'; pn.style.display='none'; document.body.appendChild(pn); }
1494
1495    // fermer les menus déroulants à cocher au clic extérieur
1496    document.addEventListener('click',function(e){ if(e.target&&e.target.closest&&!e.target.closest('.pk-ms')){ [].forEach.call(document.querySelectorAll('.pk-ms-panel.on'),function(x){x.classList.remove('on');}); } });
1497
1498    loadCfg(function(){ decorate(); });
1499  }
1500  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',install); else install();
1501})();
1502</script>
1502
1503<style id="stages-style">
1504/* ---- Nageur : stages ---- */
1505.nl-stages{margin:10px 0}
1506.nls-h{margin:6px 0 6px;color:#c2410c;font-size:1rem}
1507.nls-card{border:2px solid #e0e7ef;border-radius:11px;padding:10px 12px;margin:8px 0;background:#fff}
1508.nls-t{font-weight:600;color:#12385f}
1509.nls-grp{display:inline-block;background:#fff0e6;color:#c2410c;border:1px solid #f2c9ad;border-radius:6px;padding:1px 7px;font-size:.72rem;font-weight:600;margin-left:6px}
1510.nls-d{font-size:.8rem;color:#5b6b7f;margin:2px 0 6px}
1511.nls-cre{display:flex;flex-wrap:wrap;gap:6px;margin:4px 0}
1512.nls-cbx{display:inline-flex;align-items:center;gap:7px;border:1px solid #cdd6e0;border-radius:9px;padding:6px 10px;font-size:.85rem;cursor:pointer;background:#fff}
1513.nls-cbx.on{background:#e9f6f1;border-color:#a7f3d0}
1514.nls-cbx input{width:16px;height:16px}
1515.nls-act{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:8px}
1516.nls-btn{border:none;background:#0d6b3f;color:#fff;border-radius:8px;padding:8px 13px;font-weight:600;cursor:pointer;font-size:.88rem}
1517.nls-btn.nls-out{background:#fff;color:#b3261e;border:1px solid #f0b9b3}
1518.nls-st{font-size:.85rem;color:#0d7a3f;font-weight:600}
1519.nls-cancel{background:#fdecec;color:#b3261e;border:1px solid #f3b4b4;border-radius:8px;padding:7px 10px;font-size:.85rem;font-weight:600}
1520.nls-closed{color:#8a97a4;font-size:.85rem}
1521.nls-mine{color:#0d7a3f;font-size:.82rem;margin-top:4px}
1522/* ---- Coach : gestion stages ---- */
1523.stg-row{border:1px solid #e0e7ef;border-radius:10px;padding:10px 12px;margin:8px 0;background:#fff;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;align-items:center}
1524.stg-badge{font-size:.75rem;font-weight:700}
1525.stg-sub{font-size:.82rem;color:#5b6b7f}
1526.stg-ctrls{display:flex;gap:6px;flex-wrap:wrap}
1527.btnx{border:1px solid #cdd6e0;background:#fff;color:#22303f;border-radius:8px;padding:6px 10px;font-size:.82rem;cursor:pointer}
1528.btnx-red{background:#fde8e8;color:#b3261e;border-color:#f0b9b3}
1529.se-lab{margin-top:14px;display:block}
1530.se-form{display:flex;flex-direction:column;gap:10px}
1531.se-f{display:flex;flex-direction:column;gap:3px;min-width:0}
1532.se-f label{font-size:.8rem;color:#5b6b7f;font-weight:600}
1533.se-f input{width:100%;padding:9px 10px;border:1px solid #cdd6e0;border-radius:8px;font-size:.95rem;background:#fff}
1534.se-f3{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
1535/* Groupes concernés : grille de cartes, la case NE chevauche PAS le libellé */
1536.se-groups{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px;margin:6px 0 4px}
1537.se-gchk{display:flex;align-items:center;gap:9px;font-size:.85rem;line-height:1.2;border:1px solid #e0e7ef;border-radius:9px;padding:9px 11px;background:#fff;cursor:pointer;min-width:0}
1538.se-gchk input{flex:0 0 auto;width:19px;height:19px;margin:0}
1539.se-gchk span{flex:1 1 auto;min-width:0}
1540/* Séances regroupées par groupe */
1541#se-cre{display:flex;flex-direction:column;gap:12px;margin:6px 0}
1542.se-grp{border:1px solid #dbe6f0;border-radius:12px;padding:10px 11px;background:#f6faff}
1543.se-ghead{display:flex;gap:8px;align-items:center;margin-bottom:8px}
1544.se-gname{flex:1 1 auto;min-width:0;padding:9px 11px;border:1px solid #b9cfe6;border-radius:8px;font-size:.95rem;font-weight:700;color:#12385f;background:#fff}
1545.se-gdel{flex:0 0 auto}
1546.se-rows{display:flex;flex-direction:column;gap:7px}
1547.se-crow{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr) auto auto auto;gap:8px;align-items:center;background:#fff;border:1px solid #e6edf4;border-radius:9px;padding:7px 8px}
1548.se-crow input{min-width:0;padding:8px 9px;border:1px solid #cdd6e0;border-radius:8px;font-size:.92rem;background:#fff}
1549.se-crow input.se-cj{width:100%}
1550.se-crow input.se-ch{width:100%}
1551.se-clw{display:inline-flex;align-items:center;gap:5px;font-size:.8rem;color:#5b6b7f;white-space:nowrap}
1552.se-clw .se-cl{width:44px;text-align:center}
1553.se-cc{display:inline-flex;align-items:center;gap:5px;font-size:.8rem;color:#5b6b7f;white-space:nowrap}
1554.se-cc input{width:18px;height:18px}
1555.se-cdel{flex:0 0 auto;justify-self:end}
1556.se-addrow{margin-top:8px;border:1px dashed #9ec3e8;background:#fff;color:#185FA5;border-radius:8px;padding:7px 11px;font-size:.85rem;font-weight:600;cursor:pointer}
1557@media(max-width:640px){
1558  .se-f3{grid-template-columns:1fr}
1559  .se-crow{grid-template-columns:1fr 1fr;row-gap:6px}
1560  .se-crow .se-cj{grid-column:1}.se-crow .se-ch{grid-column:2}
1561  .se-clw{grid-column:1}.se-cc{grid-column:2}
1562  .se-cdel{grid-column:1 / -1;justify-self:start}
1563}
1564/* Nageur : titre de groupe */
1565.nls-gt{font-weight:700;color:#12385f;font-size:.9rem;margin:8px 0 2px;padding-top:6px;border-top:1px dashed #e0e7ef}
1566.nls-gt:first-child{border-top:0;padding-top:0}
1567#stg-suivi-body .muted{color:#8a97a4;text-align:center}
1568</style>
1569<script>
1570/* ==== STAGES CNBV — inscription auto (nageur) + gestion (coach) ==== v1 ==== */
1571(function(){
1572  var QW=(typeof QWORKER!=='undefined'&&QWORKER)||'https://super-math-ffn-perfs.francois-debutnocode.workers.dev';
1573  var NCODE='',COACHPW='';
1574  var ST=[];          // stages (coach)
1575  var STINS={};       // inscriptions (coach)
1576  var SROSTER=null;   // adhérents (coach) pour groupes + noms
1577  var SEDIT=null;     // stage en édition
1578  function readState(){ try{NCODE=localStorage.getItem('cal_ncode')||'';}catch(e){} try{COACHPW=localStorage.getItem('cal_coach')||'';}catch(e){} }
1579  function esc(s){return String(s==null?'':s).replace(/[&<>"']/g,function(c){return {'&':'&amp;','<':'&lt;','>':'&gt;','"':'&quot;',"'":'&#39;'}[c];});}
1580  function frD(iso){ if(!iso)return''; var p=String(iso).split('-'); return (p.length===3)?(p[2]+'/'+p[1]+'/'+p[0]):iso; }
1581  function jourLbl(iso){ var d; try{d=new Date(iso+'T12:00:00');}catch(e){return frD(iso);} var J=['Dim','Lun','Mar','Mer','Jeu','Ven','Sam']; return J[d.getDay()]+'. '+frD(iso).slice(0,5); }
1582  function creLbl(cr){ if(!cr)return''; return jourLbl(cr.jour)+(cr.horaire?(' · '+cr.horaire):'')+(cr.de
1582signation?(' · '+cr.designation):'')+(cr.confirm?' (à confirmer)':''); }
1583  function creCol(cr){ if(!cr)return''; return jourLbl(cr.jour)+(cr.horaire?('\n'+cr.horaire):''); }
1584  function labelFromIds(cre,ids){ var m={}; (cre||[]).forEach(function(c){m[c.id]=c;}); return (ids||[]).map(function(x){ return m[x]?creLbl(m[x]):x; }); }
1585  function uid(){ return 'stage-'+Date.now().toString(36)+Math.random().toString(36).slice(2,6); }
1586
1587  /* ============================ NAGEUR ============================ */
1588  window.inscrStagesPanel=function(){ setTimeout(inscrStagesFill,60); return '<div id="nl-stages" class="nl-stages"></div>'; };
1589  function inscrStagesFill(){
1590    var host=document.getElementById('nl-stages'); if(!host)return; readState(); if(!NCODE){host.innerHTML='';return;}
1591    fetch(QW+'/stages?code='+encodeURIComponent(NCODE)).then(function(r){return r.json();}).then(function(d){
1592      if(!d||!d.ok||!d.stages||!d.stages.length){ host.innerHTML=''; return; }
1593      var mine=d.mine||{}; var h='<h3 class="nls-h">🏕️ Stages</h3>';
1594      d.stages.forEach(function(s){
1595        h+='<div class="nls-card" data-id="'+esc(s.id)+'">';
1596        h+='<div class="nls-t"><b>'+esc(s.label||'Stage')+'</b>'+(s.group?(' <span class="nls-grp">'+esc(s.group)+'</span>'):'')+'</div>';
1597        h+='<div class="nls-d">'+esc(frD(s.dates&&s.dates.from))+(s.dates&&s.dates.to?(' → '+esc(frD(s.dates.to))):'')+(s.deadline?(' · limite '+esc(frD(s.deadline))):'')+'</div>';
1598        if(s.statut==='annule'){ h+='<div class="nls-cancel">❌ Stage annulé'+(s.motifAnnulation?(' — '+esc(s.motifAnnulation)):'')+'</div></div>'; return; }
1599        if(s.statut!=='ouvert'){ h+='<div class="nls-closed">Inscriptions fermées.</div>'+(mine[s.id]?('<div class="nls-mine">Tu es inscrit(e) : '+labelFromIds(s.creneaux,mine[s.id]).map(esc).join(' · ')+'</div>'):'')+'</div>'; return; }
1600        var sel=mine[s.id]||[];
1601        groupCre(s.creneaux||[]).forEach(function(grp){
1602          if(grp.desig) h+='<div class="nls-gt">'+esc(grp.desig)+'</div>';
1603          h+='<div class="nls-cre">';
1604          grp.rows.forEach(function(cr){ var on=sel.indexOf(cr.id)>=0; h+='<label class="nls-cbx'+(on?' on':'')+'"><input type="checkbox" value="'+esc(cr.id)+'"'+(on?' checked':'')+' onchange="inscrStagesCbx(this)"> '+esc(jourLbl(cr.jour)+(cr.horaire?(' · '+cr.horaire):'')+(cr.confirm?' (à confirmer)':''))+'</label>'; });
1605          h+='</div>';
1606        });
1607        h+='<div class="nls-act"><button class="nls-btn" onclick="inscrStagesSubmit(\''+esc(s.id)+'\')">✅ Valider mon inscription</button>'+(sel.length?'<button class="nls-btn nls-out" onclick="inscrStagesUnsub(\''+esc(s.id)+'\')">Me désinscrire</button>':'')+'<span class="nls-st" id="nls-st-'+esc(s.id)+'">'+(sel.length?('✅ Inscrit(e) : '+sel.length+' séance(s)'):'')+'</span></div>';
1608        h+='</div>';
1609      });
1610      host.innerHTML=h;
1611    }).catch(function(){ host.innerHTML=''; });
1612  }
1613  window.inscrStagesCbx=function(el){ var l=el.closest('.nls-cbx'); if(l)l.classList.toggle('on',el.checked); };
1614  window.inscrStagesSubmit=function(id){
1615    readState(); var card=document.querySelector('#nl-stages .nls-card[data-id="'+id+'"]'); if(!card)return;
1616    var cre=[].map.call(card.querySelectorAll('.nls-cre input:checked'),function(c){return c.value;});
1617    var st=document.getElementById('nls-st-'+id); if(st){st.textContent='Envoi…';}
1618    fetch(QW+'/stages/inscription?code='+encodeURIComponent(NCODE),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({stageId:id,creneaux:cre})})
1619      .then(function(r){return r.json();}).then(function(d){ if(d&&d.ok){ if(st)st.textContent=cre.length?('✅ Inscription confirmée : '+cre.length+' séance(s)'):'Désinscrit(e).'; setTimeout(inscrStagesFill,700); } else if(st){st.textContent=(d&&d.error)||'Échec.';} })
1620      .catch(function(){ if(st)st.textContent='Service indisponible.'; });
1621  };
1622  window.inscrStagesUnsub=function(id){ if(!confirm('Te désinscrire de ce stage ?'))return; readState();
1623    fetch(QW+'/stages/inscription?code='+encodeURIComponent(NCODE),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({stageId:id,creneaux:[]})})
1624      .then(function(r){return r.json();}).then(function(){ inscrStagesFill(); }).catch(function(){}); };
1625
1626  /* ============================ COACH ============================ */
1627  function loadSRoster(cb){ if(SROSTER){cb();return;} readState(); fetch(QW+'/roster?pw='+encodeURIComponent(COACHPW)).then(function(r){return r.json();}).then(function(d){ SROSTER=(d&&d.ok&&d.adherents)?d.adherents:[]; cb(); }).catch(function(){ SROSTER=[]; cb(); }); }
1628  function allGroups(){ var g={}; (SROSTER||[]).forEach(function(a){ if(a.archive)return; (a.groupes||[]).forEach(function(x){ if(x)g[x]=1; }); }); return Object.keys(g).sort(); }
1629  function nbIns(id){ return Object.keys((STINS[id]||{})).length; }
1630  window.inscrStagesManager=function(){ readState(); if(!COACHPW){alert('Reconnecte-toi à ton espace coach.');return;} var ov=document.getElementById('inscr-sov'); ov.classList.add('on'); ov.innerHTML='<div class="insc-modal insc-wide"><button class="insc-x" onclick="inscrStagesClose()">✕</button><h2>🏕️ Gérer les stages</h2><div class="insc-sub">Chargement…</div></div>';
1631    fetch(QW+'/stages?pw='+encodeURIComponent(COACHPW)).then(function(r){return r.json();}).then(function(d){ ST=(d&&d.stages)||[]; STINS=(d&&d.inscriptions)||{}; loadSRoster(stgRenderList); }).catch(function(){ ST=[];STINS={}; loadSRoster(stgRenderList); }); };
1632  window.inscrStagesClose=function(){ var o=document.getElementById('inscr-sov'); if(o)o.classList.remove('on'); SEDIT=null; };
1633  function stgSaveAll(cb){ readState(); fetch(QW+'/stages?pw='+encodeURIComponent(COACHPW),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({stages:ST})}).then(function(r){return r.json();}).then(function(d){ if(cb)cb(d); }).catch(function(){ if(cb)cb({ok:false}); }); }
1634
1635  function stgRenderList(){
1636    var h='<div class="insc-modal insc-wide"><button class="insc-x" onclick="inscrStagesClose()">✕</button><h2>🏕️ Gérer les stages</h2>';
1637    h+='<div class="pk-bulk"><button class="pk-recap" onclick="inscrStageNew()">+ Nouveau stage</button></div>';
1638    if(!ST.length) h+='<div class="insc-note">Aucun stage. Clique « + Nouveau stage ».</div>';
1639    ST.slice().sort(function(a,b){return String((a.dates||{}).from).localeCompare(String((b.dates||{}).from));}
1639).forEach(function(s){
1640      var n=nbIns(s.id); var stc=s.statut==='ouvert'?'🟢 ouvert':(s.statut==='annule'?'❌ annulé':'🔴 fermé');
1641      h+='<div class="stg-row">';
1642      h+='<div class="stg-main"><b>'+esc(s.label||'Stage')+'</b> <span class="stg-badge">'+stc+'</span><br><span class="stg-sub">'+esc(frD((s.dates||{}).from))+(s.dates&&s.dates.to?(' → '+esc(frD(s.dates.to))):'')+' · '+esc((s.groups||[]).join(', ')||'tous groupes')+' · <b>'+n+'</b> inscrit(s)'+(s.deadline?(' · limite '+esc(frD(s.deadline))):'')+(s.motifAnnulation?(' · motif : '+esc(s.motifAnnulation)):'')+'</span></div>';
1643      h+='<div class="stg-ctrls">';
1644      h+=(s.statut==='ouvert'?'<button class="btnx" onclick="inscrStageSet(\''+esc(s.id)+'\',\'ferme\')">Fermer</button>':'<button class="btnx" onclick="inscrStageSet(\''+esc(s.id)+'\',\'ouvert\')">Ouvrir</button>');
1645      h+='<button class="btnx" onclick="inscrStageEdit(\''+esc(s.id)+'\')">Éditer</button>';
1646      h+='<button class="btnx" onclick="inscrStageSuivi(\''+esc(s.id)+'\')">👥 Suivi ('+n+')</button>';
1647      h+='<button class="btnx btnx-red" onclick="inscrStageCancel(\''+esc(s.id)+'\')">❌ Annuler</button>';
1648      h+='<button class="btnx" onclick="inscrStageDelete(\''+esc(s.id)+'\')">🗑</button>';
1649      h+='</div></div>';
1650    });
1651    h+='</div>';
1652    document.getElementById('inscr-sov').innerHTML=h;
1653  }
1654  window.inscrStageSet=function(id,st){ var s=ST.find(function(x){return x.id===id;}); if(!s)return; s.statut=st; if(st!=='annule')s.motifAnnulation=''; stgSaveAll(function(){ stgRenderList(); }); };
1655  window.inscrStageDelete=function(id){ if(!confirm('Supprimer définitivement ce stage et ses inscriptions ?'))return; ST=ST.filter(function(x){return x.id!==id;}); stgSaveAll(function(){ inscrStagesManager(); }); };
1656  window.inscrStageCancel=function(id){ var s=ST.find(function(x){return x.id===id;}); if(!s)return; var motif=prompt('Motif de l’annulation :','Trop peu d’inscrits'); if(motif===null)return; s.statut='annule'; s.motifAnnulation=motif||'Annulé'; stgSaveAll(function(){ stgRenderList();
1657    // proposer un mail groupé aux inscrits
1658    var ins=STINS[id]||{}; var mails=[]; Object.keys(ins).forEach(function(k){ var a=(SROSTER||[]).find(function(x){return x.key===k;}); if(a&&a.mail)mails.push(a.mail); });
1659    if(mails.length && confirm('Prévenir les '+mails.length+' inscrit(s) par e-mail ?')){ var subj='Annulation — '+(s.label||'stage'); var body='Bonjour,\n\nLe stage « '+(s.label||'')+' » est annulé.\nMotif : '+(s.motifAnnulation||'')+'\n\nSportivement,\nLe CNBV'; window.location.href='mailto:?bcc='+encodeURIComponent(mails.join(','))+'&subject='+encodeURIComponent(subj)+'&body='+encodeURIComponent(body); }
1660  }); };
1661
1662  /* ---- Édition / création ---- */
1663  function crId(){ return 'c'+Date.now().toString(36)+Math.random().toString(36).slice(2,5); }
1664  function normCre(list){ return (list||[]).map(function(c){ return {id:c.id||crId(),jour:c.jour||'',horaire:c.horaire||'',designation:c.designation||'',lignes:c.lignes||'',confirm:!!c.confirm}; }); }
1665  window.inscrStageNew=function(){ SEDIT={id:uid(),label:'',group:'',groups:[],dates:{from:'',to:''},deadline:'',statut:'ouvert',creneaux:[{id:crId(),jour:'',horaire:'15h30-17h00',designation:'',lignes:'2',confirm:false}],_new:true}; stgRenderEdit(); };
1666  window.inscrStageEdit=function(id){ var s=ST.find(function(x){return x.id===id;}); if(!s)return; SEDIT=JSON.parse(JSON.stringify(s)); SEDIT.creneaux=normCre(SEDIT.creneaux); if(!SEDIT.creneaux.length)SEDIT.creneaux=[{id:crId(),jour:'',horaire:'',designation:'',lignes:'',confirm:false}]; if(!SEDIT.groups)SEDIT.groups=[]; if(!SEDIT.dates)SEDIT.dates={from:'',to:''}; stgRenderEdit(); };
1667  function groupCre(list){ var order=[],map={}; (list||[]).forEach(function(c){ var d=c.designation||''; if(!(d in map)){map[d]=[];order.push(d);} map[d].push(c); }); return order.map(function(d){return {desig:d,rows:map[d]};}); }
1668  function readEdit(){ if(!SEDIT)return; var g=function(id){var e=document.getElementById(id);return e?e.value:'';};
1669    SEDIT.label=g('se-label'); SEDIT.group=g('se-group'); SEDIT.dates.from=g('se-from'); SEDIT.dates.to=g('se-to'); SEDIT.deadline=g('se-deadline');
1670    SEDIT.groups=[].map.call(document.querySelectorAll('#se-groups input:checked'),function(c){return c.value;});
1671    var out=[];
1672    [].forEach.call(document.querySelectorAll('#se-cre .se-grp'),function(blk){ var desig=(blk.querySelector('.se-gname')||{}).value||''; desig=desig.trim();
1673      [].forEach.call(blk.querySelectorAll('.se-crow'),function(row){ out.push({id:row.getAttribute('data-id')||crId(),jour:row.querySelector('.se-cj').value,horaire:(row.querySelector('.se-ch').value||'').trim(),designation:desig,lignes:(row.querySelector('.se-cl').value||'').trim(),confirm:row.querySelector('.se-cx').checked}); });
1674    });
1675    SEDIT.creneaux=out;
1676  }
1677  window.inscrStageAddRow=function(blockIdx){ var blk=document.querySelectorAll('#se-cre .se-grp')[blockIdx]; var desig=blk?((blk.querySelector('.se-gname')||{}).value||'').trim():''; readEdit(); SEDIT.creneaux.push({id:crId(),jour:'',horaire:'',designation:desig,lignes:'2',confirm:false}); stgRenderEdit(); };
1678  window.inscrStageAddGrp=function(){ readEdit(); SEDIT.creneaux.push({id:crId(),jour:'',horaire:'15h30-17h00',designation:'Nouveau groupe',lignes:'2',confirm:false}); stgRenderEdit(); };
1679  window.inscrStageDelCre=function(id){ readEdit(); SEDIT.creneaux=SEDIT.creneaux.filter(function(c){return c.id!==id;}); stgRenderEdit(); };
1680  window.inscrStageDelGrp=function(blockIdx){ var blk=document.querySelectorAll('#se-cre .se-grp')[blockIdx]; var desig=blk?((blk.querySelector('.se-gname')||{}).value||'').trim():''; if(!confirm('Supprimer tout le groupe « '+(desig||'sans nom')+' » et ses séances ?'))return; readEdit(); SEDIT.creneaux=SEDIT.creneaux.filter(function(c){return (c.designation||'')!==desig;}); stgRenderEdit(); };
1681  function stgRenderEdit(){
1682    var s=SEDIT; var groups=allGroups();
1683    var h='<div class="insc-modal insc-wide"><button class="insc-x" onclick="inscrStagesManager()">✕</button><h2>🏕️ '+(s._new?'Nouveau stage':'Éditer le stage')+'</h2>';
1684    h+='<div class="se-form">';
1685    h+='<div class="se-f"><label>Nom du stage</label><input id="se-label" value="'+esc(s.label)+'" placeholder="Stage Toussaint 2026"></div>'
1686      +'<div class="se-f"><label>Thème / groupe (libellé affiché)</label><input id="se-group" value="'+esc(s.group||'')+'" placeholder="ENF Rénové — Water-Polo"></div>'
1687      +'<div class="se-f3"><div class="se-f"><label>Du</label><input type="date" id="se-from" value="'+esc((s.dates||{}).from||'')+'"></div>'
1688      +'<div class="se-f"><label>Au</label><input type="date" id="se-to" value="'+esc((s.dates||{}).to||'')+'"></div>'
1689      +'<div class="se-f"><label>Date limite (option)</label><input type="date" id="se-deadline" value="'+esc(s.deadline||'')+'"></div></div>';
1690    h+='</div>';
1691    h+='<label class="pk-mslab se-lab">Groupes concernés <span class="pk-multi">(vide = tous)</span></label>';
1692    h+='<div id="se-groups" class="se-groups">'+groups.map(function(g){var on=(s.groups||[]).indexOf(g)>=0;return '<label class="se-gchk"><input type="checkbox" value="'+esc(g)+'"'+(on?' checked':'')+'><span>'+esc(g)+'</span></label>';}).join('')+'</div>';
1693    h+='<label class="pk-mslab se-lab">Séances <span class="pk-multi">(regroupées par groupe : nom du groupe, puis ses jours &amp; horaires)</span></label><div id="se-cre">';
1694    var grps=groupCre(s.creneaux||[]);
1695    if(!grps.length) grps=[{desig:'',rows:[]}];
1696    grps.forEach(function(grp,gi){
1697      h+='<div class="se-grp">';
1698      h+='<div class="se-ghead"><input type="text" class="se-gname" value="'+esc(grp.desig||'')+'" placeholder="Nom du groupe (ex : Stage ENF Water-Polo, CS / Avenirs, Masters…)"><button class="btnx btnx-red se-gdel" onclick="inscrStageDelGrp('+gi+')" title="Supprimer le groupe">🗑</button></div>';
1699      h+='<div class="se-rows">';
1700      grp.rows.forEach(function(cr){ h+='<div class="se-crow" data-id="'+esc(cr.id)+'">'
1701          +'<input type="date" class="se-cj" value="'+esc(cr.jour||'')+'">'
1702          +'<input type="text" class="se-ch" value="'+esc(cr.horaire||'')+'" placeholder="15h30-17h00">'
1703          +'<span class="se-clw"><input type="text" class="se-cl" value="'+esc(cr.lignes||'')+'" placeholder="—"> ligne(s)</span>'
1704          +'<label class="se-cc"><input type="checkbox" class="se-cx"'+(cr.confirm?' checked':'')+'> à confirmer</label>'
1705          +'<button class="btnx btnx-red se-cdel" onclick="inscrStageDelCre(\''+esc(cr.id)+'\')" title="Supprimer la séance">✕</button>'
1706          +'</div>'; });
1707      h+='</div>';
1708      h+='<button class="se-addrow" onclick="inscrStageAddRow('+gi+')">+ séance dans ce groupe</button>';
1709      h+='</div>';
1710    });
1711    h+='</div><button class="insc-add" onclick="inscrStageAddGrp()">+ Ajouter un groupe</button>';
1712    h+='<div id="se-status" class="insc-status"></div>';
1713    h+='<div class="insc-actions"><button class="insc-cancel" onclick="inscrStagesManager()">Annuler</button><button class="insc-submit" onclick="inscrStageSave()">💾 Enregistrer le stage</button></div></div>';
1714    document.getElementById('inscr-sov').innerHTML=h;
1715  }
1716  window.inscrStageSave=function(){ readEdit(); var st=document.getElementById('se-status');
1717    if(!SEDIT.label.trim()){ st.textContent='Indique un nom de stage.'; st.className='insc-status err'; return; }
1718    if(!(SEDIT.dates.from)){ st.textContent='Indique au moins la date de début.'; st.className='insc-status err'; return; }
1719    if(!SEDIT.creneaux.length){ st.textContent='Ajoute au moins une séance (avec une date).'; st.className='insc-status err'; return; }
1720    var idx=ST.findIndex(function(x){return x.id===SEDIT.id;}); var clean={id:SEDIT.id,label:SEDIT.label.trim(),group:SEDIT.group.trim(),groups:SEDIT.groups,dates:SEDIT.dates,deadline:SEDIT.deadline,statut:SEDIT.statut||'ouvert',motifAnnulation:SEDIT.motifAnnulation||'',creneaux:SEDIT.creneaux};
1721    if(idx>=0)ST[idx]=clean; else ST.push(clean);
1722    st.textContent='Enregistrement…';
1722 stgSaveAll(function(d){ if(d&&d.ok){ SEDIT=null; inscrStagesManager(); } else { st.textContent='Échec de l’enregistrement.'; st.className='insc-status err'; } });
1723  };
1724
1725  /* ---- Suivi d'un stage ---- */
1726  window.inscrStageSuivi=function(id){ var s=ST.find(function(x){return x.id===id;}); if(!s)return; var ins=STINS[id]||{};
1727    var byKey={}; (SROSTER||[]).forEach(function(a){ if(a.key)byKey[a.key]=a; });
1728    var keys=Object.keys(ins).sort();
1729    var cre=s.creneaux||[];
1730    var h='<div class="insc-modal insc-wide"><button class="insc-x" onclick="inscrStagesManager()">✕</button><h2>👥 Suivi — '+esc(s.label||'')+'</h2>';
1731    h+='<div class="insc-sub">'+keys.length+' inscrit(s)'+(s.deadline?(' · limite '+esc(frD(s.deadline))):'')+' · seuil conseillé : 8</div>';
1732    h+='<div class="pk-bulk"><button onclick="inscrStageExport(\''+esc(id)+'\')">⬇︎ Export Excel (CSV)</button><button onclick="inscrStagePrint(\''+esc(id)+'\')">🖨️ Imprimer les convocations</button></div>';
1733    h+='<div id="stg-suivi-body"><table class="pk-rtable"><thead><tr><th>Nageur</th>'+cre.map(function(c){return '<th title="'+esc(creLbl(c))+'">'+esc(creCol(c)).replace(/\n/g,'<br>')+'</th>';}).join('')+'<th>Inscrit le</th><th></th></tr></thead><tbody>';
1734    if(!keys.length) h+='<tr><td colspan="'+(cre.length+3)+'" class="muted">Aucun inscrit.</td></tr>';
1735    keys.forEach(function(k){ var a=byKey[k]||{}; var r=ins[k]||{}; var sel=r.creneaux||[];
1736      var nom=(a.nom||r.nom||k.split('|')[0])+' '+(a.prenom||r.prenom||'');
1737      h+='<tr><td>'+esc(nom)+'</td>'+cre.map(function(c){return '<td style="text-align:center">'+(sel.indexOf(c.id)>=0?'✓':'—')+'</td>';}).join('')+'<td>'+(r.maj?esc(frD(new Date(r.maj).toISOString().slice(0,10))):'')+'</td><td><button class="btnx btnx-red" onclick="inscrStageRemoveIns(\''+esc(id)+'\',\''+esc(k)+'\')">Retirer</button></td></tr>';
1738    });
1739    h+='</tbody></table></div>';
1740    h+='<div class="insc-actions"><button class="insc-cancel" onclick="inscrStagesManager()">← Retour</button></div></div>';
1741    document.getElementById('inscr-sov').innerHTML=h;
1742  };
1743  window.inscrStageRemoveIns=function(id,key){ if(!confirm('Retirer cette inscription ?'))return; readState();
1744    fetch(QW+'/stages/remove?pw='+encodeURIComponent(COACHPW),{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({stageId:id,key:key})})
1745      .then(function(r){return r.json();}).then(function(d){ if(d&&d.ok){ if(STINS[id])delete STINS[id][key]; inscrStageSuivi(id); } else alert((d&&d.error)||'Échec.'); }).catch(function(){ alert('Service indisponible.'); });
1746  };
1747  window.inscrStageExport=function(id){ var s=ST.find(function(x){return x.id===id;}); var ins=STINS[id]||{}; var cre=(s&&s.creneaux)||[]; var byKey={}; (SROSTER||[]).forEach(function(a){if(a.key)byKey[a.key]=a;});
1748    var rows=[['Nageur'].concat(cre.map(function(c){return creLbl(c);})).concat(['Inscrit le'])];
1749    Object.keys(ins).sort().forEach(function(k){ var a=byKey[k]||{}; var r=ins[k]||{}; var sel=r.creneaux||[]; rows.push([((a.nom||r.nom||'')+' '+(a.prenom||r.prenom||'')).trim()].concat(cre.map(function(c){return sel.indexOf(c.id)>=0?'X':'';})).concat([r.maj?frD(new Date(r.maj).toISOString().slice(0,10)):''])); });
1750    var csv=rows.map(function(r){return r.map(function(v){v=String(v==null?'':v); return /[;"\n]/.test(v)?('"'+v.replace(/"/g,'""')+'"'):v;}).join(';');}).join('\r\n');
1751    var b=new Blob([''+csv],{type:'text/csv;charset=utf-8'}); var u=URL.createObjectURL(b); var a=document.createElement('a'); a.href=u; a.download='Stage_'+String((s&&s.label)||id).replace(/[^A-Za-z0-9]+/g,'_')+'.csv'; document.body.appendChild(a); a.click(); a.remove(); setTimeout(function(){URL.revokeObjectURL(u);},800);
1752  };
1753  window.inscrStagePrint=function(id){ var s=ST.find(function(x){return x.id===id;}); var body=document.getElementById('stg-suivi-body'); if(!body)return; var w=window.open('','_blank'); if(!w){alert('Autorise les pop-up.');return;}
1754    w.document.write('<html><head><meta charset="utf-8"><title>Convocations — '+esc((s&&s.label)||'')+'</title><style>body{font-family:Arial;margin:24px}h1{font-size:18px}table{border-collapse:collapse;width:100%;font-size:13px}th,td{border:1px solid #ccc;padding:5px 8px;text-align:left}thead th{background:#eef3f8}</style></head><body><h1>Convocations — '+esc((s&&s.label)||'')+'</h1><p>'+esc(frD((s&&s.dates||{}).from))+((s&&s.dates&&s.dates.to)?(' → '+esc(frD(s.dates.to))):'')+' · '+esc((s&&s.group)||'')+'</p>'+body.innerHTML+'</body></html>'); w.document.close(); setTimeout(function(){w.focus();w.print();},300);
1755  };
1756
1757  /* ---- boutons dans l'espace coach ---- */
1758  function addCoachBtn(){ var box=document.querySelector('#nl-body .coachbox'); if(!box||box.querySelector('.stg-coach-sec'))return; var div=document.createElement('div'); div.className='cbsec stg-coach-sec'; div.innerHTML='<b>4) Stages</b><div class="cbnote">Crée et ouvre des stages à l’inscription (par groupe), suis les inscrits, exporte/imprime les convocations, annule si besoin.</div><button class="nl-btn" onclick="inscrStagesManager()">🏕️ Gérer les stages</button>'; var out=box.querySelector('.nl-out'); if(out)box.insertBefore(div,out); else box.appendChild(div); }
1759  function wrap(name,after){ var o=window[name]; if(typeof o!=='function')return; window[name]=function(){ var r=o.apply(this,arguments); try{after.apply(this,arguments);}catch(e){} return r; }; }
1760  function install(){
1761    wrap('coachOpen',function(){ setTimeout(addCoachBtn,30); });
1762    if(!document.getElementById('inscr-sov')){ var s=document.createElement('div'); s.id='inscr-sov'; s.className='inscr-ov'; document.body.appendChild(s); }
1763  }
1764  if(document.readyState==='loading') document.addEventListener('DOMContentLoaded',install); else install();
1765})();
1766</script>
1766
1767
1768</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.