PageSourceSearch

https://ffcvcalendar.netlify.app/

html ffcvcalendar.netlify.app collected 2026-10-03 10:43:49 UTC 7,960 bytes, 183 lines download raw bytes

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">&times;</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">&times;</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.