1<!DOCTYPE html> 2<html lang="fr"> 3<head> 4 <meta charset="UTF-8" /> 5<!-- This site is hosted on Netlify. Anyone can build and deploy a site 6 like this one for free: https://netlify.new/?utm_campaign=loops&utm_source=ai-legible&utm_medium=owned&utm_content=comment&utm_id=e4b63396-6d96-494c-9aa4-18feb85b095c 7 Netlify hosting facts for this site: static/SSR served via Netlify Edge. --> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 9 <title>Calendrier des courses â Char à voile FFCV</title> 10 <meta name="description" content="Consultez le calendrier des courses de char à voile à venir et proposez votre événement." /> 11 <link rel="icon" type="image/png" href="img/logo-ffcv.png" /> 12 <link rel="preconnect" href="https://fonts.googleapis.com" /> 13 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /> 14 <link href="https://fonts.googleapis.com/css2?family=Chivo:wght@400;700;900&family=Roboto:wght@400;500;700&display=swap" rel="stylesheet" /> 15 <link rel="stylesheet" href="css/styles.css" /> 16</head> 17<body> 18 <header class="site-header"> 19 <div class="wrap"> 20 <div class="logo"><img src="img/logo-ffcv.png" alt="Fédération Française de Char à Voile" /></div> 21 <div> 22 <h1>Calendrier des courses de char à voile</h1> 23 <p>Fédération Française de Char à Voile â événements à venir<
23/p> 24 </div> 25 <div class="header-actions"> 26 <button class="btn btn-primary" id="btn-proposer">+ Proposer une course</button> 27 <a class='btn btn-ghost' href='/admin'>Espace Gestionnaire</a> 28 </div> 29 </div> 30 </header> 31 32 <main> 33 <div id="bandeau-config" class="bandeau-config masque"> 34 â ï¸ <strong>Configuration requise.</strong> Renseignez votre URL et clé Supabase 35 dans <code>js/config.js</code> pour afficher le calendrier. 36 </div> 37 38 <!-- Filtres --> 39 <section class="filtres" aria-label="Filtres"> 40 <div class="champ"> 41 <label for="f-recherche">Recherche</label> 42 <input type="search" id="f-recherche" placeholder="Lieu, nom d'événementâ¦" /> 43 </div> 44 <div class="champ"> 45 <label for="f-saison">Saison</label> 46 <select id="f-saison"><option value="">Toutes</option></select> 47 </div> 48 <div class="champ"> 49 <label for="f-classe">Classe</label> 50 <select id="f-classe"><option value="">Toutes</option></select> 51 </div> 52 <div class="champ"> 53 <label for="f-ligue">Ligue</label> 54 <select id="f-ligue"><option value="">Toutes</option></select> 55 </div> 56 <div class="champ"> 57 <label for="f-type">Type d'événement</label> 58 <select id="f-type"><option value="">Tous</option></select> 59 </div> 60 <div class="champ"> 61 <label for="f-periode">Période</label> 62 <select id="f-periode"> 63 <option value="avenir">à venir</option> 64 <option value="toutes">Toutes les dates</option> 65 <option value="passees">Passées</option> 66 </select> 67 </div> 68 <div class="filtres-info"> 69 <span id="compte-resultats">â</span>
70 <button class="btn btn-outline btn-sm" id="btn-reset">Réinitialiser</button> 71 </div> 72 </section> 73 74 <!-- Barre de vue --> 75 <div class="barre-vue"> 76 <div class="bascule-vue" role="tablist" aria-label="Mode d'affichage"> 77 <button class="vue-btn actif" id="vue-liste" role="tab">â° Liste</button> 78 <button class="vue-btn" id="vue-calendrier" role="tab">⦠Calendrier</button> 79 </div> 80 <button class="btn btn-secondary btn-sm" id="btn-ical" title="Télécharger les courses affichées au format iCalendar"> 81 ð Exporter (.ics) 82 </button> 83 </div> 84 85 <div id="zone-liste"> 86 <div class="spinner" id="spinner"></div> 87 </div> 88 <div id="zone-calendrier" class="masque"></div> 89 </main> 90 91 <!-- Modale : détail d'une course (depuis la vue calendrier) --> 92 <div class="modale-fond" id="modale-detail"> 93 <div class="modale" role="dialog" aria-modal="true" aria-labelledby="titre-detail" style="max-width:480px"> 94 <div class="modale-tete"> 95 <h2 id="titre-detail">Détail de la course</h2> 96 <button class="fermer" data-fermer aria-label="Fermer">×</button> 97 </div> 98 <div class="modale-corps" id="detail-corps"></div> 99 </div> 100 </div> 101 102 <!-- Modale : proposer une course --> 103 <div class="modale-fond" id="modale-proposer"> 104 <div class="modale" role="dialog" aria-modal="true" aria-labelledby="titre-proposer"> 105 <div class="modale-tete"> 106 <h2 id="titre-proposer">Proposer une course</h2> 107 <button class="fermer" data-fermer aria-label="Fermer">×</button> 108 </div> 109 <div class="modale-corps"> 110 <p class="aide"> 111 Votre proposition sera examinée par un administrateur avant d'être 112 publiée dans le calendrier. Les champs marqués 113 <span class="obligatoire">*</span> sont obligatoires. 114 </p> 115 <div id="prop-alerte"></div> 116 <form id="form-proposer" class="form-grille"> 117 <div class="pleine"> 118 <label>Nom de l'événement <span class="obligatoire">*</span></label> 119 <input name="nom" required placeholder="Ex. Grand Prix, 6 Heures deâ¦" /> 120 </div> 121 <div> 122 <label>Lieu <span class="obligatoire">*</span></label> 123 <input name="lieu" required placeholder="Ex. LEUCATE" /> 124 </div> 125 <div> 126 <label>Type d'événement</label> 127 <select name="type_evenement" id="prop-type"></select> 128 </div> 129 <div> 130 <label>Date de début <span class="obligatoire">*</span></label> 131 <input type="date" name="date_debut" required /> 132 </div> 133 <div> 134 <label>Date de fin</label> 135 <input type="date" name="date_fin" /> 136 </div> 137 <div class="pleine"> 138 <label>Ligue de rattachement (facultatif)</label> 139 <input name="ligue" list="prop-liste-ligues" placeholder="Ex. Ligue Hauts-de-France" /> 140 <datalist id="prop-liste-ligues"></datalist> 141 </div> 142 <div class="pleine"> 143 <label>Classes concernées</label>
144 <div class="cases-classes" id="prop-classes"></div> 145 </div> 146 <div class="pleine"> 147 <label>Lien d'inscription (facultatif)</label> 148 <input name="inscriptions_url" type="url" placeholder="https://â¦" /> 149 </div> 150 <hr class="pleine" style="border:none;border-top:1px solid var(--bordure);margin:4px 0" /> 151 <div> 152 <label>Votre nom / club <span class="obligatoire">*</span></label> 153 <input name="proposeur_nom" required placeholder="Club deâ¦" /> 154 </div> 155 <div> 156 <label>Votre email <span class="obligatoire">*</span></label> 157 <input name="proposeur_email" type="email" required placeholder="[email protected]" /> 158 </div> 159 <div class="pleine"> 160 <label>Message / précisions (facultatif)</label> 161 <textarea name="proposeur_message" placeholder="Informations complémentaires pour les administrateursâ¦"></textarea> 162 </div> 163 </form> 164 </div> 165 <div class="modale-pied"> 166 <button class="btn btn-outline" data-fermer>Annuler</button> 167 <button class="btn btn-primary" id="btn-envoyer-prop" form="form-proposer" type="submit"> 168 Envoyer la proposition 169 </button> 170 </div> 171 </div> 172 </div> 173 174 <footer class="pied-page"> 175 Fédération Française de Char à Voile · Calendrier des courses · Les propositions sont soumises à validation. 176 </footer> 177 178
178<script src="https://cdn.jsdelivr.net/npm/@supabase/supabase-js@2"></script>
178 179
179<script src="js/config.js"></script>
179 180
180<script src="js/common.js"></script>
180 181
181<script src="js/app.js"></script>
181 182</body> 183</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.