PageSourceSearch

https://okfn.gr/el

html okfn.gr collected 2026-10-02 07:19:05 UTC 31,013 bytes, 521 lines download raw bytes

1<!DOCTYPE html>
2<html lang="el">
3
4<head>
5    <meta charset="utf-8">
6    <meta name="viewport" content="width=device-width, initial-scale=1">
7    <title>Open Knowledge Greece</title>
8    <link rel="preconnect" href="https://fonts.googleapis.com">
9    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10    <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700;900&display=swap" rel="stylesheet">
11    <link rel="stylesheet" href="https://okfn.gr/css/welcome.css">
12    <link rel="icon" href="https://okfn.gr/img/favicon.ico" type="image/x-icon">
13    <link rel="canonical" href="https://okfn.gr/el">
14    <meta property="og:image:alt" content="Open Knowledge Greece">
15
16    
17    <meta property="og:type" content="website">
18    <meta property="og:title" content="Open Knowledge Greece">
19    <!-- <meta property="og:description" content="home.hero_subtitle"> -->
20    <meta property="og:url" content="https://okfn.gr/el">
21    <meta property="og:image" content="https://okfn.gr/img/og-images/mainpage.png">
22    <meta property="og:image:width" content="1200">
23    <meta property="og:image:height" content="630">
24    <meta property="og:site_name" content="Open Knowledge Greece">
25    <meta property="og:locale" content="el_GR">
26
27    
28    <meta name="twitter:card" content="summary_large_image">
29    <meta name="twitter:title" content="Open Knowledge Greece">
30    <meta name="twitter:image" content="https://okfn.gr/img/og-images/mainpage.png">
31    
32    <meta name="description" content="Οραματιζόμαστε έναν κόσμο όπου η γνώση δεν είναι προνόμιο των λίγων, αλλά δύναμη στα χέρια των πολλών. Όπου τα δεδομένα δεν μας περιορίζουν αλλά μας απελευθερώνουν.">
33</head>
34
35<body>
36    <header>
37        <div class="header-container">
38            <a href="./el" class="logo">
39                <img src="https://okfn.gr/img/OKGR-landscape-full-rgb.svg" alt="Open Knowledge Greece" class="logo-img">
40            </a>
41            <button class="mobile-menu-toggle">☰</button>
42            <nav>
43                <div class="nav-item has-dropdown">
44                    <a href="#" class="nav-link">Σχετικά <span class="dropdown-arrow">▼</span></a>
45                    <div class="dropdown-menu">
46                        <a href="https://okfn.gr/el/about"
47                            class="dropdown-item">Η Αποστολή μας</a>
48                        <a href="https://okfn.gr/el/vision-and-values"
49                            class="dropdown-item">Το όραμα και οι αξίες μας</a>
50                    </div>
51                </div>
52                <div class="nav-item has-dropdown">
53                    <a href="#" class="nav-link">Ποιοι Είμαστε <span
54                            class="dropdown-arrow">▼</span></a>
55                    <div class="dropdown-menu">
56                        <a href="https://okfn.gr/el/our-team"
57                            class="dropdown-item">Ομάδα</a>
58                        <a href="https://okfn.gr/el/board-of-directors"
59                            class="dropdown-item">Διοικητικό Συμβούλιο</a>
60                        <a href="https://okfn.gr/el/governance"
61                            class="dropdown-item">Λειτουργία</a>
62                        <a href="https://okfn.gr/el/our-impact"
63                            class="dropdown-item">Η Επίδρασή μας</a>
64                        <a href="https://okfn.gr/el/gallery"
65                            class="dropdown-item">Φωτογραφικό Αρχείο</a>
66                    </div>
67                </div>
68                <div class="nav-item has-dropdown">
69                    <a href="#" class="nav-link">Τι Κάνουμε <span
70                            class="dropdown-arrow">▼</span></a>
71                    <div class="dropdown-menu">
72                        <a href="https://okfn.gr/el/research-projects"
73                            class="dropdown-item">Ερευνητικά Έργα</a>
74                        <a href="https://okfn.gr/el/applications"
75                            class="dropdown-item">Εφαρμογές</a>
76                        <a href="https://okfn.gr/el/old-projects"
77                            class="dropdown-item">Παλιά Έργα</a>
78                        <a href="https://okfn.gr/el/media"
79                            class="dropdown-item">Σημαντικές Στιγμές</a>
80                        <a href="https://okfn.gr/el/editions"
81                            class="dropdown-item">Εκδόσεις</a>
82                    </div>
83                </div>
84                <div class="nav-item has-dropdown">
85                    <a href="#" class="nav-link">
85Ανοικτά Δεδομένα <span
86                            class="dropdown-arrow">▼</span></a>
87                    <div class="dropdown-menu">
88                        <a href="https://okfn.gr/el/open-data"
89                            class="dropdown-item">Ανοικτά Δεδομένα</a>
90                        <a href="https://okfn.gr/el/how-to"
91                            class="dropdown-item">Πως μπορείτε να ανοίξετε τα δεδομένα;</a>
92                        <a href="https://okfn.gr/el/why-open"
93                            class="dropdown-item">Γιατί ανοικτά δεδομένα;</a>
94                    </div>
95                </div>
96            </nav>
97            <div class="nav-actions">
98                <a href="https://okfn.gr/el/blog" class="blog-btn">
99                    <span>Blog</span>
100                </a>
101                <div class="lang-switcher">
102                    <a href="./en" class="lang-link ">
103                        <img src="https://okfn.gr/img/uk-flag.png" alt="English" class="flag-icon">
104                        EN
105                    </a>
106
107                    <a href="./el" class="lang-link active">
108                        <img src="https://okfn.gr/img/gr-flag.png" alt="Ελληνικά" class="flag-icon">
109                        EL
110                    </a>
111                </div>
112            </div>
113        </div>
114    </header>
115
116    
117    <div class="global-search-bar">
118        <div class="global-search" id="globalSearch">
119            <div class="search-input-wrap">
120                <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
121                    <circle cx="11" cy="11" r="8" />
122                    <path d="M21 21l-4.35-4.35" />
123                </svg>
124                <input type="text" id="globalSearchInput" placeholder="Αναζήτηση..."
125                    autocomplete="off" spellcheck="false">
126                <button id="searchClear" onclick="clearSearch()" style="display:none;">✕</button>
127            </div>
128            <div class="search-dropdown" id="searchDropdown" style="display:none;">
129                <div id="searchResults"></div>
130            </div>
131        </div>
132    </div>
133    <div style="height: 57px;"></div>
134
135    <section class="hero">
136        <div class="hero-content">
137            <h1>ΤΑ ΔΕΔΟΜΕΝΑ ΜΠΟΡΟΥΝ ΝΑ ΑΛΛΑΞΟΥΝ ΤΟΝ ΚΟΣΜΟ</h1>
138            <div class="mission-statements">
139                <p class="mission-item bold">Οραματιζόμαστε έναν κόσμο όπου η γνώση δεν είναι προνόμιο των λίγων, αλλά δύναμη στα χέρια των πολλών. Όπου τα δεδομένα δεν μας περιορίζουν αλλά μας απελευθερώνουν.</p>
140                <p class="mission-item">Διεκδικούμε έναν κόσμο που μας δίνει τη δυνατότητα να παίρνουμε τεκμηριωμένες αποφάσεις για το πώς θέλουμε να ζούμε, τι επιλέγουμε να αγοράζουμε και ποιον εμπιστευόμαστε με την ψήφο μας.</p>
141                <p class="mission-item bold">Έναν κόσμο όπου η πληροφορία είναι ανοικτή, προσβάσιμη και διαφανής για όλες και όλους.</p>
142                <!-- <p class="mission-item bold">Έναν κόσμο που οι πληροφορίες και τα δεδομένα είναι προσβάσιμα και διαφανή στον καθένα.</p> -->
143            </div>
144        </div>
145        <div class="hero-slider">
146            <div class="slider-wrapper">
147                <div class="slide">
148                    <img src="https://okfn.gr/img/slides/frontpage_img_one.png" alt="Slide 1" class="slide-image">
149                    <div class="slide-overlay">
150                        <h3>Openbudgets.eu</h3>
151                        <p>Ανοικτοί προϋπολογισμοί! Διαδικτυακή πλατφόρμα υποστήριξης των οργανισμών τοπικής αυτοδιοίκησης.</p>
152                    </div>
153                </div>
154                <div class="slide">
155                    <img src="https://okfn.gr/img/slides/frontpage_img_two.png" alt="Slide 1" class="slide-image">
156                    <div class="slide-overlay">
157                        <h3>Open Governance</h3>
158                        <p>Διεθνής Συνεργασία για την Ανοικτή Διακυβέρνηση: Δημοκρατία, Συμμετοχική διακυβέρνηση, Διαφάνεια, Λογοδοσία.</p>
159                    </div>
160                </div>
161                <div class="slide">
162                    <img src="https://okfn.gr/img/slides/frontpage_img_three.png" alt="Slide 1" class="slide-image">
163                    <div class="slide-overlay">
164                        <h3>DBpedia</h3>
165                        <p>Στοχεύοντας προς μία δημόσια υποδομή για ένα μεγάλο, πολύγλωσσο, σημασιολογικό γνωσιακό γράφο!</p>
166                    </div>
167                </div>
168                <div class="slide active">
169                    <img src="https://okfn.gr/img/slides/frontpage_img_four.png" alt="Slide 1" class="slide-image">
170                    <div class="slide-overlay">
171                        <h3>
171Σχολεία δεδομένων</h3>
172                        <p>Τα αποδεικτικά στοιχεία είναι δύναμη! Τα Σχολεία Δεδομένων στοχεύουν στην ενδυνάμωση οργανισμών, δημοσιογράφων και πολιτών, με νέες απαραίτητες δεξιότητες για την αποτελεσματική χρήση δεδομένων.</p>
173                    </div>
174                </div>
175
176            </div>
177            <div class="slider-dots">
178                <span class="dot active" onclick="currentSlide(0)"></span>
179                <span class="dot" onclick="currentSlide(1)"></span>
180                <span class="dot" onclick="currentSlide(2)"></span>
181                <span class="dot" onclick="currentSlide(3)"></span>
182            </div>
183        </div>
184    </section>
185
186    <section class="open-section">
187
188        
189        <h2>Open Knowledge Foundation</h2>
190
191    </section>
192
193    <section class="info-cards">
194        <div class="info-card">
195            <div class="info-card-icon">👥</div>
196            <h3>Η ΟΜΑΔΑ ΜΑΣ</h3>
197            <p>Πιστεύει στη σημασία της ανοικτότητας. Αξιοποιεί την τεχνολογία που ξεκλειδώνει τη δύναμη της πληροφορίας και μετατρέπει τα δεδομένα σε γνώση. Στηρίζει την εκπαίδευση των ανθρώπων ώστε να αποκτήσουν τα απαραίτητα προσόντα διαμοιρασμού και εξέλιξης αυτής της γνώσης.</p>
198            <a href="https://okfn.gr/el/our-team"
199                class="info-card-btn">Εξερεύνησε</a>
200        </div>
201        <div class="info-card">
202            <div class="info-card-icon">🌍</div>
203            <h3>ΔΙΕΘΝΕΣ ΔΙΚΤΥΟ</h3>
204            <p>Το Ίδρυμα Ανοικτής Γνώσης Ελλάδος είναι έÎ
204½Î± από τα μέλη του Ιδρύματος Ανοικτής Γνώσης, ενός παγκόσμιου δικτύου που προωθεί την ανοικτή γνώση και τα ανοικτά δεδομένα σε περισσότερες από 40 χώρες μέσα από συναντήσεις, προωθητικές καμπάνιες, καινοτόμες δράσεις και εκπαιδευτικά εργαστήρια.</p>
205            <a href="https://okfn.org/en/network/" class="info-card-btn">Εξερεύνησε</a>
206        </div>
207        <div class="info-card">
208            <div class="info-card-icon">🔬</div>
209            <h3>ΕΡΓΑ</h3>
210            <p>Αναλαμβάνουμε την υλοποίηση έργων σε εξειδικευμένα αντικείμενα εςργασίας που αφορούν την αξιοποίηση των Ανοικτών Δεδομένων, παράγοντας υψηλής ποιότητας αποτελέσματα.</p>
211            <a href="https://okfn.gr/el/research-projects"
212                class="info-card-btn">Εξερεύνησε</a>
213        </div>
214    </section>
215
216    <section class="recent-posts">
217        <div class="posts-container">
218            <h2>ΠΡΟΣΦΑΤΑ ΑΡΘΡΑ</h2>
219            <div class="posts-grid">
220                                    <div class="post-card">
221                                                    <div class="post-card-image">
222                                <a href="https://okfn.gr/el/posts/390">
223                                    <img src="https://okfn.gr/storage/posts/PXlWgJVyayTuNbsaiZH3JCwnIurpqWPo1us7ZAZ0.jpg" alt="Bridge the Gap 2026 | Ενδυναμώνοντας τους μαθητές με γνώσεις, δεξιότητες, αξίες και ταυτότητα στην εποχή της τεχνητής νοημοσύνης.">
224                                </a>
225                            </div>
226                                                <div class="post-card-content">
227                            <div class="post-date">30 September 2026</div>
228                            <h3><a
229                                    href="https://okfn.gr/el/posts/390">Bridge the Gap 2026 | Ενδυναμώνοντας τους μαθητές με γνώσεις, δεξιότητες, αξίες και ταυτότητα στην εποχή της τεχνητής νοημοσύνης.</a>
230                            </h3>
231                            <p class="post-excerpt">Το Ίδρυμα Ανοικτής Γνώσης Ελλάδος συμμετέχει στο Bridge the Gap 2026, την κορυφαία ετήσια σύνοδο του...</p>
232                            <a href="https://okfn.gr/el/posts/390"
233                                class="read-more">Διαβάστε Περισσότερα →</a>
234                        </div>
235                    </div>
236                                    <div class="post-card">
237                                                    <div class="post-card-image">
238                                <a href="https://okfn.gr/el/posts/389">
239                                    <img src="https://okfn.gr/storage/posts/B7rUYpozLzLhXal7wH5HkL8Vy1H6y9eaXF8aGwqR.png" alt="AI Learning Labs | Συνδέοντας την ΤΝ με δεδομένα του κράτους">
240                                </a>
241                            </div>
242                                                <div class="post-card-content">
243                            <div class="post-date">23 September 2026</div>
244                            <h3><a
245                                    href="https://okfn.gr/el/posts/389">AI Learning Labs | Συνδέοντας την ΤΝ με δεδομένα του κράτους</a>
246                            </h3>
247                            <p class="post-excerpt">Το Ίδρυμα Ανοικτής Γνώσης, για περισσότερες από δυο δεκαετίες υπερασπίζετε τις ανοικτές τεχνολογίες...</p>
248                            <a href="https://okfn.gr/el/posts/389"
249                                class="read-more">Διαβάστε Περισσότερα →</a>
250                        </div>
251                    </div>
252                                    <div class="post-card">
253                                                    <div class="post-card-image">
254                                <a href="https://okfn.gr/el/posts/388">
255                                    <img src="https://okfn.gr/storage/posts/j2GzEVAsxlOyCXIQ1MNudxhAtQMf4ejJmwi444FY.jpg" alt="AI Learning Labs | Σεμινάριο για την χρήση ΤΝ σε δημόσια δεδομέÎ
255½Î±">
256                                </a>
257                            </div>
258                                                <div class="post-card-content">
259                            <div class="post-date">11 September 2026</div>
260                            <h3><a
261                                    href="https://okfn.gr/el/posts/388">AI Learning Labs | Σεμινάριο για την χρήση ΤΝ σε δημόσια δεδομένα</a>
262                            </h3>
263                            <p class="post-excerpt">Το Ίδρυμα Ανοικτής Γνώσης, στο πλαίσιο της πρωτοβουλίας AI Learning Labs και πιο συγκεκριμένα του πι...</p>
264                            <a href="https://okfn.gr/el/posts/388"
265                                class="read-more">Διαβάστε Περισσότερα →</a>
266                        </div>
267                    </div>
268                                    <div class="post-card">
269                                                    <div class="post-card-image">
270                                <a href="https://okfn.gr/el/posts/387">
271                                    <img src="https://okfn.gr/storage/posts/F1g0TUEpMpFcrgtfGRe1QFSEhdtoszbSTaIzzpNH.jpg" alt="AI Learning Labs | Η πρωτοβουλία του Ιδρύματος Ανοικτής Γνώσης για ανοικτή, υπεύθυνη και προσβάσιμη ΤΝ">
272                                </a>
273                            </div>
274                                                <div class="post-card-content">
275                            <div class="post-date">04 September 2026</div>
276                            <h3><a
277                                    href="https://okfn.gr/el/posts/387">AI Learning Labs | Η πρωτοβουλία του Ιδρύματος Ανοικτής Γνώσης για ανοικτή, υπεύθυνη και προσβάσιμη ΤΝ</a>
278                            </h3>
279                            <p class="post-excerpt">Το πρόγραμμα AI Learning Labs αποτελεί μια πρωτοβουλία του Ιδρύματος Ανοικτής Γνώσης (OKFN) που στοχ...</p>
280                            <a href="https://okfn.gr/el/posts/387"
281                                class="read-more">Διαβάστε Περισσότερα →</a>
282                        </div>
283                    </div>
284                                    <div class="post-card">
285                                                    <div class="post-card-image">
286                                <a href="https://okfn.gr/el/posts/386">
287                                    <img src="https://okfn.gr/storage/posts/UEqmNnzQYh8IevJckf7QrxG3hsiBvsjdeqbOKWRR.jpg" alt="EU PROJECT | ARXIVE: Το Ίδρυμα Ανοικτής Γνώσης Ελλάδος στο ετήσιο συνέδριο του ECHOES">
288                                </a>
289                            </div>
290                                                <div class="post-card-content">
291                            <div class="post-date">28 May 2026</div>
292                            <h3><a
293                                    href="https://okfn.gr/el/posts/386">EU PROJECT | ARXIVE: Το Ίδρυμα Ανοικτής Γνώσης Ελλάδος στο ετήσιο συνέδριο του ECHOES</a>
294                            </h3>
295                            <p class="post-excerpt">Το ARXIVE εκπροσωπήθηκε στην εκδήλωση από τον Λάζαρο Ιωαννίδη, ερευνητή του Ιδρύματος Ανοικτής Γνώση...</p>
296                            <a href="https://okfn.gr/el/posts/386"
297                                class="read-more">Διαβάστε Περισσότερα →</a>
298                        </div>
299                    </div>
300                                    <div class="post-card">
301                                                    <div class="post-card-image">
302                                <a href="https://okfn.gr/el/posts/385">
303                                    <img src="https://okfn.gr/storage/posts/zfgaOi1ed7oY4VMo4P1u0RonCyH5vNCsnkaLRc4h.jpg" alt="OpenDataDay 2026 | Απολογισμός Ημερίδας">
304                                </a>
305                            </div>
306                                                <div class="post-card-content">
307                            <div class="post-date">10 March 2026</div>
308                            <h3><a
309                                    href="https://okfn.gr/el/posts/385">OpenDataDay 2026 | Απολογισμός Ημερίδας</a>
310                            </h3>
311                            <p class="post-excerpt">Η ημερίδα ανέδειξε τη σημασία της συνεργασίας μεταξύ ακαδημαϊκής κοινότητας, δημόσιων φορέων, πολιτι...</p>
312                            <a href="https://okfn.gr/el/posts/385"
313                                class="read-more">Διαβάστε Περισσότερα →</a>
314                        </div>
315                    </div>
316                            </div>
317        </div>
318    </section>
319
320    <footer>
321        <div class="footer-container">
322            <div class="footer-logos">
323                <img src="https://okfn.gr/img/OKGR-landscape-full-rgb.svg" alt="OKFN Greece" class="footer-logo">
324            </div>
325            <div class="footer-social">
326                <!-- Facebook -->
327                <a href="https://facebook.com/okfngreece" class="social-link" target="_blank" rel="noopener">
328                    <img src="https://okfn.gr/img/social/facebook.png" alt="Facebook" class="social-icon">
329                </a>
330
331                <!-- Twitter -->
332                <a href="https://twitter.com/okfngr" class="social-link" target="_blank" rel="noopener">
333                    <img src="https://okfn.gr/img/social/twitter.png" alt="Twitter" class="social-icon">
334                </a>
335
336                <!-- GitHub -->
337                <a href="https://github.com/okgreece" class="social-link" target="_blank" rel="noopener">
338                    <img src="https://okfn.gr/img/social/github.png" alt="GitHub" class="social-icon">
339                </a>
340
341                <!-- Instagram -->
342                <a href="https://instagram.com/okfngreece" class="social-link" target="_blank" rel="noopener">
343                    <img src="https://okfn.gr/img/social/instagram.png" alt="Instagram" class="social-icon">
344                </a>
345            </div>
346
347            <div class="footer-text">
348                <p>Content on this site, made by <a href="https://okfn.gr/">Open Knowledge Greece</a> and <a href="https://okfn.org/">Open Knowledge International</a>, is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/">
348Creative Commons Attribution 4.0 International License</a>.
349                </p>
350                <p style="margin-top: 1rem;">© 2026 Open Knowledge - Greek Chapter</p>
351            </div>
352        </div>
353    </footer>
354
355    
355<script>
356        let currentSlideIndex = 0;
357        const slides = document.querySelectorAll('.slide');
358        const dots = document.querySelectorAll('.dot');
359
360        function showSlide(index) {
361            slides.forEach(slide => slide.classList.remove('active'));
362            dots.forEach(dot => dot.classList.remove('active'));
363            currentSlideIndex = index;
364            if (currentSlideIndex >= slides.length) currentSlideIndex = 0;
365            if (currentSlideIndex < 0) currentSlideIndex = slides.length - 1;
366            slides[currentSlideIndex].classList.add('active');
367            dots[currentSlideIndex].classList.add('active');
368        }
369
370        function currentSlide(index) {
371            showSlide(index);
372        }
373
374        function nextSlide() {
375            showSlide(currentSlideIndex + 1);
376        }
377        setInterval(nextSlide, 5000);
378
379        function switchLanguage(locale) {
380            fetch(`/language/${locale}`, {
381                method: 'POST',
382                headers: {
383                    'Content-Type': 'application/json',
384                    'X-CSRF-TOKEN': '0RacWbNiwitDYcWB26817Wv1LGOAB6oYZ5rCeNsX'
385                }
386            }).then(response => response.json()).then(data => {
387                if (data.success) window.location.reload();
388            }).catch(error => console.error('Error switching language:', error));
389        }
390
391        document.addEventListener('DOMContentLoaded', function () {
392            const mobileMenuToggle = document.querySelector('.mobile-menu-toggle');
393            const nav = document.querySelector('nav');
394
395            if (mobileMenuToggle) {
396                mobileMenuToggle.addEventListener('click', function () {
397                    nav.classList.toggle('active');
398                });
399            }
400
401            // Mobile dropdown toggle
402            const navItems = document.querySelectorAll('.nav-item.has-dropdown > .nav-link');
403
404            navItems.forEach(item => {
405                item.addEventListener('click', function (e) {
406                    if (window.innerWidth <= 768) {
407                        e.preventDefault();
408                        const parent = this.parentElement;
409
410                        // Close other dropdowns
411                        document.querySelectorAll('.nav-item.has-dropdown').forEach(otherItem => {
412                            if (otherItem !== parent) {
413                                otherItem.classList.remove('active');
414                            }
415                        });
416
417                        // Toggle current dropdown
418                        parent.classList.toggle('active');
419                    }
420                });
421            });
422        });
423
424        // ── Global Search ─────────────────────────────────────
425        const searchInput = document.getElementById('globalSearchInput');
426        const searchDropdown = document.getElementById('searchDropdown');
427        const searchResults = document.getElementById('searchResults');
428        const searchClear = document.getElementById('searchClear');
429        const SEARCH_URL = 'https://okfn.gr/el/search';
430        const NO_RESULTS = 'Δεν βρέθηκαν αποτελέσματα';
431
432        let searchTimer = null;
433
434        searchInput?.addEventListener('input', function () {
435            const q = this.value.trim();
436            searchClear.style.display = q ? 'block' : 'none';
437            clearTimeout(searchTimer);
438
439            if (q.length < 2) {
440                searchDropdown.style.display = 'none';
441                return;
442            }
443
444            searchTimer = setTimeout(() => doSearch(q), 300);
445        });
446
447        async function doSearch(q) {
448            try {
449                const res = await fetch(`${SEARCH_URL}?q=${encodeURIComponent(q)}`);
450                const data = await res.json();
451                renderResults(data, q);
452            } catch (e) {
453                console.error('Search error:', e);
454            }
455        }
456
457        function renderResults(data, q) {
458            if (!data.length) {
459                searchResults.innerHTML = `<div class="search-no-results">${NO_RESULTS} "<strong>${q}</strong>
459"</div>`;
460                searchDropdown.style.display = 'block';
461                return;
462            }
463
464            const icons = {
465                post: '📄',
466                event: '📅',
467                page: '🔗',
468            };
469
470            let html = '';
471            data.forEach(item => {
472                const img = item.image
473                    ? `<img src="${item.image}" class="sri-img" alt="" onerror="this.style.display='none'">`
474                    : `<div class="sri-icon ${item.icon}">${icons[item.icon] || '📄'}</div>`;
475
476                html += `
477            <a href="${item.url}" class="search-result-item">
478                ${img}
479                <div class="sri-body">
480                    <div class="sri-label">${item.label}</div>
481                    <div class="sri-title">${highlightMatch(item.title, q)}</div>
482                    ${item.excerpt ? `<div class="sri-excerpt">${item.excerpt}</div>` : ''}
483                </div>
484            </a>`;
485            });
486
487            searchResults.innerHTML = html;
488            searchDropdown.style.display = 'block';
489        }
490
491        function highlightMatch(text, q) {
492            const regex = new RegExp(`(${q.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'gi');
493            return text.replace(regex, '<mark style="background:rgba(0,209,255,0.2);border-radius:2px;padding:0 2px;">$1</mark>');
494        }
495
496        function clearSearch() {
497            searchInput.value = '';
498            searchClear.style.display = 'none';
499            searchDropdown.style.display = 'none';
500        }
501
502        // Close on outside click
503        document.addEventListener('click', e => {
504            if (!document.getElementById('globalSearch')?.contains(e.target)) {
505                searchDropdown.style.display = 'none';
506            }
507        });
508
509        // Navigate with keyboard
510        searchInput?.addEventListener('keydown', e => {
511            if (e.key === 'Escape') clearSearch();
512            if (e.key === 'Enter') {
513                const first = searchResults.querySelector('.search-result-item');
514                if (first) window.location.href = first.href;
515            }
516        }); 
517    </script>
vendor: 1 bytes, line 517
517
518<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"e54ac2297bca450593bdddea9b354619","r":1,"spa":2}' crossorigin="anonymous"></script>
518
519</body>
520
521</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.