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>AI Learning Labs | Î£Ï Î½Î´ÎονÏÎ±Ï Ïην ΤΠμε δεδομÎνα ÏÎ¿Ï ÎºÏάÏÎ¿Ï Ï - Open Knowledge Greece</title> 8 <meta name="description" content="Το ÎδÏÏ Î¼Î± ÎνοικÏÎ®Ï ÎνÏÏηÏ, για ÏεÏιÏÏÏÏεÏÎµÏ Î±ÏÏ Î´Ï Î¿ δεκαεÏÎ¯ÎµÏ Ï ÏεÏαÏÏίζεÏε ÏÎ¹Ï Î±Î½Î¿Î¹ÎºÏÎÏ ÏεÏÎ½Î¿Î»Î¿Î³Î¯ÎµÏ ÏÏÎ¿Ï ÏÏÎµÎ»Î¿Ï ÏÎ¿Ï Î´Î·Î¼Î¿ÏÎ¯Î¿Ï ÏÏ Î¼ÏÎÏονÏοÏ. Î Ïιο ÏÏÏÏÏαÏη δÏάÏη Ï..."> 9 <link rel="preconnect" href="https://fonts.googleapis.com"> 10 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 11 <link href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700;900&display=swap" rel="stylesheet"> 12
12<script src="https://cdn.tailwindcss.com"></script>
12 13
13<script> 14 tailwind.config = { 15 theme: { 16 extend: { 17 colors: { 18 'cyan-brand': '#00d1ff', 19 'mint': '#adffed', 20 'purple-brand': '#7b2fff', 21 'text-primary': '#1a1a2e', 22 'text-secondary': '#6b7280', 23 'lighter': '#f9fafb', 24 'light': '#f3f4f6', 25 'border-color': '#e5e7eb', 26 }, 27 fontFamily: { 28 'roboto': ['Roboto', 'sans-serif'], 29 }, 30 backgroundImage: { 31 'gradient-cyber': 'linear-gradient(135deg, #00d1ff, #adffed)', 32 }, 33 } 34 } 35 } 36 </script>
36 37 <link rel="icon" href="https://okfn.gr/img/favicon.ico" type="image/x-icon"> 38 <style> 39 body { 40 font-family: 'Roboto', sans-serif; 41 } 42 43 /* Gradient cyber button */ 44 .btn-cyber { 45 background: linear-gradient(135deg, #00d1ff, #adffed); 46 } 47 48 /* Post content prose styles */ 49 .post-content p { 50 margin-bottom: 1.5rem; 51 line-height: 1.8; 52 text-align: justify; 53 text-justify: inter-word; 54 } 55 56 .post-content h1, 57 .post-content h2, 58 .post-content h3, 59 .post-content h4, 60 .post-content h5, 61 .post-content h6 { 62 font-weight: 700; 63 color: #1a1a2e; 64 line-height: 1.3; 65 margin-top: 2.5rem; 66 margin-bottom: 1.25rem; 67 word-wrap: break-word; 68 overflow-wrap: break-word; 69 text-align: left; 70 } 71 72 .post-content h1 { 73 font-size: clamp(1.75rem, 4vw, 2.5rem); 74 } 75 76 .post-content h2 { 77 font-size: clamp(1.5rem, 3.5vw, 2rem); 78 } 79 80 .post-content h3 { 81 font-size: clamp(1.25rem, 3vw, 1.5rem); 82 } 83 84 .post-content h4 { 85 font-size: clamp(1.125rem, 2.5vw, 1.25rem); 86 } 87 88 .post-content h5, 89 .post-content h6 { 90 font-size: clamp(1rem, 2vw, 1.125rem); 91 } 92 93 .post-content strong, 94 .post-content b { 95 font-weight: 700; 96 color: #1a1a2e; 97 } 98 99 .post-content em, 100 .post-content i { 101 font-style: italic; 102 } 103 104 .post-content ul { 105 list-style-type: disc; 106 margin: 1.5rem 0; 107 padding-left: 2rem; 108 text-align: left; 109 } 110 111 .post-content ol { 112 list-style-type: decimal; 113 margin: 1.5rem 0; 114 padding-left: 2rem; 115 text-align: left; 116 } 117 118 .post-content li { 119 margin-bottom: 0.75rem; 120 line-height: 1.7; 121 text-align: justify; 122 } 123 124 .post-content li>ul, 125 .post-content li>ol { 126 margin-top: 0.75rem; 127 } 128 129 .post-content a { 130 color: #00d1ff; 131 text-decoration: underline; 132 word-wrap: break-word; 133 overflow-wrap: break-word; 134 transition: color 0.3s; 135 } 136 137 .post-content a:hover { 138 color: #7b2fff; 139 } 140 141 .post-content img { 142 max-width: 100%; 143 height: auto; 144 border-radius: 12px; 145 margin: 2rem auto; 146 display: block; 147 box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); 148 } 149 150 .post-content figure { 151 margin: 2rem 0; 152 text-align: center; 153 } 154 155 .post-content figure img { 156 margin: 0 auto; 157 } 158 159 .post-content figcaption { 160 margin-top: 0.75rem; 161 font-size: 0.9em; 162 color: #6b7280; 163 font-style: italic; 164 text-align: center; 165 } 166 167 .post-content blockquote { 168 border-left: 4px solid #00d1ff; 169 padding-left: 2rem; 170 margin: 2rem 0; 171 font-style: italic; 172 color: #6b7280; 173 font-size: clamp(1rem, 1.8vw, 1.1rem); 174 text-align: left; 175 } 176 177 .post-content pre { 178 background: #f3f4f6; 179 padding: 1.5rem; 180 border-radius: 8px; 181 overflow-x: auto; 182 margin: 1.5rem 0; 183 text-align: left; 184 } 185 186 .post-content code { 187 background: #f3f4f6; 188 padding: 0.2rem 0.4rem; 189 border-radius: 4px; 190 font-size: 0.9em; 191 font-family: "Courier New", monospace; 192 } 193 194 .post-content pre code { 195 background: none; 196 padding: 0; 197 } 198 199 .post-content table { 200 width: 100%; 201 border-collapse: collapse; 202 margin: 1.5rem 0; 203 overflow-x: auto; 204 display: block; 205 } 206 207 .post-content table th, 208 .post-content table td { 209 border: 1px solid #e5e7eb; 210 padding: 0.75rem; 211 text-align: left; 212 } 213 214 .post-content table th { 215 background: #f3f4f6; 216 font-weight: 700; 217 } 218 219 .post-content::after { 220 content: ""; 221 display: table; 222 clear: both; 223 } 224 225 .post-content .alignleft { 226 float: left; 227 margin: 0.5rem 1.5rem 1rem 0; 228 max-width: 50%; 229 } 230 231 .post-content .alignright { 232 float: right; 233 margin: 0.5rem 0 1rem 1.5rem; 234 max-width: 50%; 235 } 236 237 .post-content .aligncenter { 238 display: block; 239 margin-left: auto; 240 margin-right: auto; 241 text-align: center; 242 } 243 244 .post-content .size-full { 245 width: 100%; 246 height: auto; 247 } 248 249 .post-content .size-large { 250 max-width: 100%; 251 height: auto; 252 } 253 254 .post-content .size-medium { 255 max-width: 75%; 256 height: auto; 257 } 258 259 .post-content .size-thumbnail { 260 max-width: 150px; 261 height: auto; 262 } 263 264 @media (max-width: 640px) { 265 266 .post-content p, 267 .post-content li { 268 text-align: left; 269 } 270 271 .post-content .alignleft, 272 .post-content .alignright { 273 float: none; 274 max-width: 100%; 275 margin: 1rem 0; 276 } 277 } 278 279 /* Nav dropdown */ 280 .nav-item:hover .dropdown-menu { 281 display: block; 282 } 283 284 .dropdown-menu { 285 display: none; 286 } 287 288 /* Mobile nav */ 289 @media (max-width: 768px) { 290 .desktop-nav { 291 display: none; 292 } 293 294 .desktop-nav.open { 295 display: flex; 296 } 297 } 298 299 @keyframes spin { 300 from { 301 transform: rotate(0deg); 302 } 303 304 to { 305 transform: rotate(360deg); 306 } 307 } 308 309 /* ââ Post Carousel ââ */ 310 .post-carousel { 311 border-radius: 16px; 312 overflow: hidden; 313 box-shadow: 0 8px 30px rgba(0, 0, 0, 0.12); 314 } 315 316 .carousel-main { 317 position: relative; 318 background: #000; 319 aspect-ratio: 16/9; 320 overflow: hidden; 321 } 322 323 .carousel-main-img { 324 width: 100%; 325 height: 100%; 326 object-fit: cover; 327 display: block; 328 transition: opacity 0.4s ease; 329 } 330 331 .carousel-main-img.fade { 332 opacity: 0; 333 } 334 335 .carousel-arrow { 336 position: absolute; 337 top: 50%; 338 transform: translateY(-50%); 339 width: 42px; 340 height: 42px; 341 border-radius: 50%; 342 background: rgba(255, 255, 255, 0.9); 343 border: none; 344 cursor: pointer; 345 display: flex; 346 align-items: center; 347 justify-content: center; 348 color: #1a1a1a; 349 transition: all 0.2s ease; 350 z-index: 10; 351 box-shadow: 0 2px 12px rgba(0, 0, 0, 0.2); 352 } 353 354 .carousel-arrow:hover { 355 background: white; 356 transform: translateY(-50%) scale(1.1); 357 } 358 359 .carousel-prev { 360 left: 14px; 361 } 362 363 .carousel-next { 364 right: 14px; 365 } 366 367 .carousel-counter { 368 position: absolute; 369 bottom: 14px; 370 right: 14px; 371 background: rgba(0, 0, 0, 0.6); 372 color: white; 373 padding: 4px 12px; 374 border-radius: 20px; 375 font-size: 0.78rem; 376 font-weight: 600; 377 backdrop-filter: blur(4px); 378 } 379 380 .carousel-thumbs { 381 display: flex; 382 gap: 6px; 383 padding: 8px; 384 background: #1a1a1a; 385 overflow-x: auto; 386 scrollbar-width: thin; 387 scrollbar-color: #444 #1a1a1a; 388 } 389 390 .carousel-thumbs::-webkit-scrollbar {
391 height: 4px; 392 } 393 394 .carousel-thumbs::-webkit-scrollbar-track { 395 background: #1a1a1a; 396 } 397 398 .carousel-thumbs::-webkit-scrollbar-thumb { 399 background: #444; 400 border-radius: 2px; 401 } 402 403 .carousel-thumb { 404 flex-shrink: 0; 405 width: 72px; 406 height: 52px; 407 border-radius: 6px; 408 overflow: hidden; 409 cursor: pointer; 410 border: 2px solid transparent; 411 transition: all 0.2s ease; 412 opacity: 0.6; 413 } 414 415 .carousel-thumb:hover { 416 opacity: 0.85; 417 } 418 419 .carousel-thumb.active { 420 border-color: #00D1FF; 421 opacity: 1; 422 } 423 424 .carousel-thumb img { 425 width: 100%; 426 height: 100%; 427 object-fit: cover; 428 display: block; 429 } 430 431 @media (max-width: 640px) { 432 .carousel-thumb { 433 width: 56px; 434 height: 42px; 435 } 436 437 .carousel-arrow { 438 width: 34px; 439 height: 34px; 440 } 441 } 442 </style> 443</head> 444 445<body class="bg-lighter text-text-primary"> 446 447 <!-- Header --> 448 <header class="bg-white shadow-sm sticky top-0 z-50"> 449 <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> 450 <div class="flex items-center justify-between h-16 lg:h-20"> 451 <!-- Logo --> 452 <a href="../" class="flex-shrink-0"> 453 <img src="https://okfn.gr/img/OKGR-landscape-full-rgb.svg" alt="Open Knowledge Greece" class="h-8 lg:h-10 w-auto"> 454 </a> 455 456 <!-- Mobile toggle --> 457 <button class="md:hidden text-2xl text-gray-600 hover:text-cyan-brand transition-colors" 458 id="mobileMenuToggle">â°</button> 459 460 <!-- Navigation --> 461 <!-- Navigation --> 462 <nav class="hidden md:flex items-center gap-1 desktop-nav" id="desktopNav"> 463 464 <!-- About --> 465 <div class="nav-item relative group"> 466 <a href="#" 467 class="flex items-center gap-1 px-3 py-2 text-sm font-500 text-text-secondary hover:text-cyan-brand transition-colors"> 468 ΣÏεÏικά <span class="text-xs opacity-60">â¼</span> 469 </a> 470 <div 471 class="dropdown-menu absolute top-full left-0 mt-1 w-48 bg-white rounded-xl shadow-lg border border-gray-100 py-2 z-50"> 472 <a href="https://okfn.gr/el/about" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">Î ÎÏοÏÏολή μαÏ</a> 473 <a href="https://okfn.gr/el/vision-and-values" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">Το ÏÏαμα και οι Î±Î¾Î¯ÎµÏ Î¼Î±Ï</a> 474 </div> 475 </div> 476 477 <!-- Who We Are --> 478 <div class="nav-item relative group"> 479 <a href="#" 480 class="flex items-center gap-1 px-3 py-2 text-sm font-500 text-text-secondary hover:text-cyan-brand transition-colors"> 481 Ποιοι ÎίμαÏÏε <span class="text-xs opacity-60">â¼</span> 482 </a> 483 <div 484 class="dropdown-menu absolute top-full left-0 mt-1 w-52 bg-white rounded-xl shadow-lg border border-gray-100 py-2 z-50"> 485 <a href="https://okfn.gr/el/our-team" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">Îμάδα</a> 486 <a href="https://okfn.gr/el/board-of-directors" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ÎιοικηÏÎ¹ÎºÏ Î£Ï Î¼Î²Î¿Ïλιο</a> 487 <a href="https://okfn.gr/el/governance" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ÎειÏÎ¿Ï Ïγία</a> 488 <a href="https://okfn.gr/el/our-impact" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">Î ÎÏίδÏαÏή μαÏ</a> 489 <a href="https://okfn.gr/el/gallery" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ΦÏÏογÏαÏÎ¹ÎºÏ ÎÏÏείο</a> 490 </div> 491 </div> 492 493 <!-- What We Do --> 494 <div class="nav-item relative group"> 495 <a href="#" 496 class="flex items-center gap-1 px-3 py-2 text-sm font-500 text-text-secondary hover:text-cyan-brand transition-colors"> 497 Τι ÎÎ¬Î½Î¿Ï Î¼Îµ <span class="text-xs opacity-60">â¼</span> 498 </a> 499 <div 500 class="dropdown-menu absolute top-full left-0 mt-1 w-56 bg-white rounded-xl shadow-lg border border-gray-100 py-2 z-50"> 501 <a href="https://okfn.gr/el/research-projects" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ÎÏÎµÏ Î½Î·Ïικά ÎÏγα</a> 502 <a href="https://okfn.gr/el/applications" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ÎÏαÏμογÎÏ</a> 503 <a href="https://okfn.gr/el/old-projects" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">Παλιά ÎÏγα</a> 504 <a href="https://okfn.gr/el/media" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ΣημανÏικÎÏ Î£ÏιγμÎÏ</a> 505 <a href="https://okfn.gr/el/editions" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ÎκδÏÏειÏ</a> 506 </div> 507 </div> 508 509 <!-- Open Data --> 510 <div class="nav-item relative group"> 511 <a href="#" 512 class="flex items-center gap-1 px-3 py-2 text-sm font-500 text-text-secondary hover:text-cyan-brand transition-colors">
513 ÎνοικÏά ÎεδομÎνα <span class="text-xs opacity-60">â¼</span> 514 </a> 515 <div 516 class="dropdown-menu absolute top-full left-0 mt-1 w-48 bg-white rounded-xl shadow-lg border border-gray-100 py-2 z-50"> 517 <a href="https://okfn.gr/el/open-data" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ÎνοικÏά ÎεδομÎνα</a> 518 <a href="https://okfn.gr/el/how-to" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">Î ÏÏ Î¼ÏοÏείÏε να ανοίξεÏε Ïα δεδομÎνα;</a> 519 <a href="https://okfn.gr/el/why-open" class="block px-4 py-2 text-sm text-text-secondary hover:text-cyan-brand hover:bg-gray-50 transition-colors">ÎιαÏί ανοικÏά δεδομÎνα;</a> 520 </div> 521 </div> 522 523 </nav> 524 525 <!-- Right actions --> 526 <div class="hidden md:flex items-center gap-3"> 527 <a href="https://okfn.gr/el/blog" class="px-4 py-2 rounded-full text-sm font-700 text-white btn-cyber hover:-translate-y-0.5 transition-transform shadow-sm"> 528 Blog 529 </a> 530 531 <div class="flex items-center gap-2 ml-2"> 532 <a href="https://okfn.gr/en/posts/389" class="flex items-center gap-1 px-2 py-1 rounded-lg text-xs font-600 transition-colors text-text-secondary hover:text-cyan-brand"> 533 <img src="https://okfn.gr/img/uk-flag.png" alt="English" class="w-4 h-4 rounded-sm object-cover"> 534 EN 535 </a> 536 <a href="https://okfn.gr/el/posts/389" class="flex items-center gap-1 px-2 py-1 rounded-lg text-xs font-600 transition-colors text-cyan-brand bg-cyan-50"> 537 <img src="https://okfn.gr/img/gr-flag.png" alt="Îλληνικά" class="w-4 h-4 rounded-sm object-cover"> 538 EL 539 </a> 540 </div> 541 </div> 542 </div> 543 </div> 544 </header> 545 546 <!-- Post Article --> 547 <article class="bg-lighter"> 548 <div class="max-w-[900px] mx-auto px-4 sm:px-8 lg:px-12 py-10 lg:py-16"> 549 550 <!-- Back Button --> 551 <div class="mb-8"> 552 <a href="https://okfn.gr/el/blog" class="inline-flex items-center gap-2 text-text-secondary font-600 text-sm hover:text-cyan-brand transition-all hover:gap-3 group"> 553 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" class="flex-shrink-0"> 554 <path d="M12.5 15L7.5 10L12.5 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" 555 stroke-linejoin="round" /> 556 </svg> 557 ÎÏιÏÏÏοÏή ÏÏα ÎÏθÏα 558 </a> 559 </div> 560 561 <!-- Post Header: Categories â Title â Meta --> 562 <header class="mb-10"> 563 564 565 <div class="flex flex-wrap gap-2 mb-6"> 566 <a href="https://okfn.gr/el/blog?category=ekpaidefsi" class="px-4 py-1.5 bg-white text-cyan-brand border-2 border-cyan-brand/30 rounded-lg text-xs font-600 uppercase tracking-wide no-underline transition-all hover:-translate-y-0.5 hover:bg-cyan-brand hover:text-white hover:border-cyan-brand shadow-sm whitespace-nowrap"> 567 ÎκÏÎ±Î¯Î´ÎµÏ Ïη 568 </a> 569 <a href="https://okfn.gr/el/blog?category=nea" class="px-4 py-1.5 bg-white text-cyan-brand border-2 border-cyan-brand/30 rounded-lg text-xs font-600 uppercase tracking-wide no-underline transition-all hover:-translate-y-0.5 hover:bg-cyan-brand hover:text-white hover:border-cyan-brand shadow-sm whitespace-nowrap"> 570 ÎÎα 571 </a> 572 </div> 573 574 575 <h1 class="text-4xl lg:text-5xl font-black leading-tight text-text-primary mb-6 tracking-tight break-words text-left" 576 style="font-size: clamp(1.75rem, 5vw, 3rem);"> 577 AI Learning Labs | Î£Ï Î½Î´ÎονÏÎ±Ï Ïην ΤΠμε δεδομÎÎ
577½Î± ÏÎ¿Ï ÎºÏάÏÎ¿Ï Ï 578 </h1> 579 580 581 <div class="flex flex-wrap items-center gap-4 sm:gap-6"> 582 <div class="flex items-center gap-2 text-text-secondary text-sm"> 583 <svg width="18" height="18" viewBox="0 0 20 20" fill="none" 584 class="text-cyan-brand flex-shrink-0"> 585 <path 586 d="M15.8333 3.33334H4.16667C3.24619 3.33334 2.5 4.07954 2.5 5.00001V16.6667C2.5 17.5871 3.24619 18.3333 4.16667 18.3333H15.8333C16.7538 18.3333 17.5 17.5871 17.5 16.6667V5.00001C17.5 4.07954 16.7538 3.33334 15.8333 3.33334Z" 587 stroke="currentColor" stroke-width="1.5" stroke-linecap="round" 588 stroke-linejoin="round" /> 589 <path d="M13.3333 1.66666V5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" 590 stroke-linejoin="round" /> 591 <path d="M6.66666 1.66666V5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" 592 stroke-linejoin="round" /> 593 <path d="M2.5 8.33334H17.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" 594 stroke-linejoin="round" /> 595 </svg> 596 <span>23 ΣεÏÏεμβÏÎ¯Î¿Ï 2026</span> 597 </div> 598 <div class="flex items-center gap-2 text-text-secondary text-sm"> 599 <svg width="18" height="18" viewBox="0 0 20 20" fill="none" 600 class="text-cyan-brand flex-shrink-0"> 601 <path 602 d="M16.6667 17.5V15.8333C16.6667 14.9493 16.3155 14.1014 15.6904 13.4763C15.0652 12.8512 14.2174 12.5 13.3333 12.5H6.66667C5.78261 12.5 4.93476 12.8512 4.30964 13.4763C3.68452 14.1014 3.33333 14.9493 3.33333 15.8333V17.5" 603 stroke="currentColor" stroke-width="1.5" stroke-linecap="round" 604 stroke-linejoin="round" /> 605 <path 606 d="M10 9.16667C11.8409 9.16667 13.3333 7.67428 13.3333 5.83333C13.3333 3.99238 11.8409 2.5 10 2.5C8.15905 2.5 6.66667 3.99238 6.66667 5.83333C6.66667 7.67428 8.15905 9.16667 10 9.16667Z" 607 stroke="currentColor" stroke-width="1.5" stroke-linecap="round" 608 stroke-linejoin="round" /> 609 </svg> 610 <span>kosmapanagiookfn2025</span> 611 </div> 612 <div class="flex items-center gap-2 text-text-secondary text-sm"> 613 <svg width="18" height="18" viewBox="0 0 20 20" fill="none" 614 class="text-cyan-brand flex-shrink-0"> 615 <path 616 d="M10 18.3333C14.6024 18.3333 18.3333 14.6024 18.3333 10C18.3333 5.39763 14.6024 1.66667 10 1.66667C5.39763 1.66667 1.66667 5.39763 1.66667 10C1.66667 14.6024 5.39763 18.3333 10 18.3333Z" 617 stroke="currentColor" stroke-width="1.5" stroke-linecap="round" 618 stroke-linejoin="round" /> 619 <path d="M10 5V10L13.3333 11.6667" stroke="currentColor" stroke-width="1.5" 620 stroke-linecap="round" stroke-linejoin="round" /> 621 </svg> 622 <span>30 ÏÏοβολÎÏ</span> 623 </div> 624 625 <button id="translateBtn" onclick="toggleTranslate()" 626 class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full text-xs font-600 border-2 transition-all hover:-translate-y-0.5 ml-auto" 627 style="border-color: #4285f4; color: #4285f4; background: white;"> 628 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" 629 stroke-width="2"> 630 <path d="M5 8l6 6M4 14l6-6 2-3M2 5h7M7 2v3M22 22l-5-10-5 10M14 18h6" /> 631 </svg>
632 <span id="translateBtnText"> 633 EN 634 </span> 635 <span id="translateLoader" style="display:none;"> 636 <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" 637 stroke-width="2.5" style="animation: spin 1s linear infinite;"> 638 <path d="M21 12a9 9 0 11-6.219-8.56" /> 639 </svg> 640 </span> 641 </button> 642 <span id="translateNote" style="display:none; font-size:0.72rem; color:#aaa; margin-left:-8px;"> 643 via Google 644 </span> 645 </div> 646 </header> 647 648 <!-- Image Carousel --> 649 650 <div class="post-carousel mb-10" id="postCarousel"> 651 652 653 <div class="carousel-main"> 654 <img id="carouselMainImg" src="https://okfn.gr/storage/posts/B7rUYpozLzLhXal7wH5HkL8Vy1H6y9eaXF8aGwqR.png" alt="AI Learning Labs | Î£Ï Î½Î´ÎονÏÎ±Ï Ïην ΤΠμε δεδομÎνα ÏÎ¿Ï ÎºÏάÏÎ¿Ï Ï" class="carousel-main-img" onclick="openLightbox()" style="cursor:zoom-in;" onerror="this.parentElement.style.display='none'"> 655 656 <button class="carousel-arrow carousel-prev" onclick="carouselMove(-1)"> 657 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" 658 stroke-width="2.5"> 659 <polyline points="15 18 9 12 15 6" /> 660 </svg> 661 </button> 662 <button class="carousel-arrow carousel-next" onclick="carouselMove(1)"> 663 <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" 664 stroke-width="2.5"> 665 <polyline points="9 18 15 12 9 6" /> 666 </svg> 667 </button> 668 <div class="carousel-counter"> 669 <span id="carouselCurrent">1</span> / 2 670 </div> 671 </div> 672 673 674 <div class="carousel-thumbs" id="carouselThumbs"> 675 <div class="carousel-thumb active" onclick="carouselGoTo(0)" 676 data-index="0"> 677 <img src="https://okfn.gr/storage/posts/B7rUYpozLzLhXal7wH5HkL8Vy1H6y9eaXF8aGwqR.png" alt="AI Learning Labs | Î£Ï Î½Î´ÎονÏÎ±Ï Ïην ΤΠμε δεδομÎνα ÏÎ¿Ï ÎºÏάÏÎ¿Ï Ï" onerror="this.parentElement.style.display='none'"> 678 </div> 679 <div class="carousel-thumb " onclick="carouselGoTo(1)" 680 data-index="1"> 681 <img src="https://i0.wp.com/blog.okfn.org/wp-content/uploads/2026/09/TTWW-AI-GovernmentData-pages.png?resize=1024%2C576&amp;ssl=1" alt="AI Learning Labs | Î£Ï Î½Î´ÎονÏÎ±Ï Ïην ΤΠμε δεδομÎνα ÏÎ¿Ï ÎºÏάÏÎ¿Ï Ï" 682 onerror="this.parentElement.style.display='none'"> 683 </div> 684 </div> 685 686 </div> 687 688 <!-- Post Content (text only, no images) --> 689 <div 690 class="post-content text-base lg:text-[1.05rem] leading-relaxed text-text-primary mb-10 word-break overflow-hidden"> 691 <p dir="ltr" style="text-align: justify;">Το Îδρυμα Ανοικτής ΓνÏσης, για περισσÏτερες απÏ δÏο δεκαετίες υπερασπίζετ
691αι τις ανοικτÎς τεχνολογίες προς Ïφελος του δημοσίου συμφÎροντος. Η πιο πρÏσφατη δράση του οργανισμοÏ, που πραγματοποιήθηκε στο πλαίσιο της πρωτοβουλίας <a href="https://okfn.org/en/projects/ai-learning-labs/">AI Learning Labs</a>, θÎτει Îνα επίκαιρο ερÏτημα: ΠÏς μποροÏμε να αξιοποιήσουμε την ΤΝ, Ïστε τα δημÏσια δεδομÎνα να γίνουν πιο προσβάσιμα;</p> 692<p dir="ltr" style="text-align: justify;">Τα δημÏσια δεδομÎνα είναι απαραίτητα για τη λογοδοσία, τη συμμετοχή και την τεκμηριωμÎνη λήψη αποφάσεων. ΩστÏσο, πολÏ συχνά, πολίτες, ερευνητÎς και δημοσιογράφοι αναγκάζονται να πλοηγηθοÏν σε πολÏπλοκες πÏλες δεδομÎνων και να εξοικειωθοÏν με εξειδικευμÎνες τεχνικÎς αναζήτησης απλÏς για να βρουν μια απάντηση. Η λÏση σε αυτÏ τον προβληματισμÏ Îρχεται απÏ <strong>το Îδρυμα Ανοικτής ΓνÏσης, μÎσω ενÏς οδηγοÏ </strong>για την υπεÏθυνη σÏνδεση της ΤΝ με τα κυβερνητικά δεδομÎνα. Ο οδηγÏς αποτελεί μÏνο Îνα μÎρος της σειράς δημοσιεÏσεων "<a href="https://okfn.org/en/projects/the-tech-we-want/">The Tech We Want"</a>, μιας ανοικτής συζήτησης για τη δημιουργία απλÏν, διαχρονικÏν και χρήσιμων ψηφιακÏν εργαλείων στον αντίποδα των υπερβολικά περίπλοκων τεχνολογικÏν υποδομÏν των μεγάλων ετ
692αιρειÏν τεχνολογίας. Συνοπτικά ο οδηγÏς περιλαμβάνει:</p> 693<ul> 694<li dir="ltr" style="text-align: justify;">Συστάσεις υλοποίησης πιλοτικÏν προγραμμάτων αναπαραγωγής της μεθοδολογίας που χρησιμοποιεί το Îδρυμα Ανοικτής ΓνÏσης για τη δημιουργία εργαλείων
694, απÏ τον καθορισμÏ στÏχων Îως τη δοκιμή και τον αναστοχασμÏ (π.χ σÏσταση ομάδας, απαραίτητη υποδομή, χρονοδιάγραμμα κ.α.).</li> 695<li dir="ltr" style="text-align: justify;">6 βήματα δημιουργίας ενÏς κανονιστικοÏ πλαισίου για την προÎλευση των δεδομÎνων που χρησιμοποιοÏν οι πράκτορες τεχνητής νοημοσÏνης και την διασφάλιση Ïτι κάθε απάντηση συνδÎεται άμεσα με την αρχική πηγή των δεδομÎνων.</li> 696<li dir="ltr" style="text-align: justify;">ΠρακτικÎς διαχωρισμοÏ και ερμηνείας γεγονÏτων για ανθρÏπους και μηχανÎς.</li> 697<li dir="ltr" style="text-align: justify;">Αναστοχασμοί για τα Ïρια του πειραματισμοÏ. </li> 698</ul> 699<p dir="ltr" style="text-align: justify;">Το κεντρικÏ μήνυμα της πρωτοβουλίας συμπυκνÏνεται, στη παραδοχή Ïτι, <strong>η σαφής ιχνηλάτηση της προÎλευσης των δεδομÎνων βελτιÏνει την πρÏσβαση στα δημÏσια δεδομÎνα, που πραγματοποιείται με τη βοήθεια της ΤΝ.</strong> Γι' αυτÏ τον λÏγο τα εργαλεία που χρησιμοποιεί το Îδρυμα Ανοικτής ΓνÏσης για τη δημοσίευση και την αναζήτηση ΑνοικτÏν ΔεδομÎνων πρÎπει να εξελίσσοντ
699αι, Ïστε να ανταποκρίνονται στον τρÏπο με τον οποίο οι άνθρωποι και τα συστήματα θÎτουν σήμερα τα ερωτήματά τους. </p> 700<p dir="ltr"></p> 701<p dir="ltr" style="text-align: center;"><a href="https://blog.okfn.org/wp-content/uploads/2026/09/TTWW-AI.pdf"><strong>Διαβάστε τον οδηγÏ εδÏ </strong></a></p> 702<p dir="ltr" style="text-align: justify;"><strong>ΠΗΓΗ: <a href="https://blog.okfn.org/2026/09/16/new-field-guide-connecting-ai-to-government-data/">Open Knowledge Foundation Greece</a></strong></p> 703 </div> 704 705 <!-- Tags --> 706 <div class="mb-10 rounded-2xl border-2 p-6 lg:p-8" 707 style="background: linear-gradient(135deg, rgba(0,209,255,0.05), rgba(173,255,237,0.05)); border-color: rgba(0,209,255,0.15);"> 708 <div class="flex items-center gap-3 mb-5 pb-4 border-b" style="border-color: rgba(0,209,255,0.2);"> 709 <svg width="20" height="20" viewBox="0 0 20 20" fill="none" class="text-cyan-brand flex-shrink-0"> 710 <path d="M17.5 10.4167L10.4167 17.5L2.5 9.58333V2.5H9.58333L17.5 10.4167Z" stroke="currentColor" 711 stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" /> 712 <path d="M6.25 6.25H6.25833" stroke="currentColor" stroke-width="2" stroke-linecap="round" 713 stroke-linejoin="round" /> 714 </svg> 715 <span 716 class="text-sm font-700 text-text-primary uppercase tracking-widest">ÎÏικÎÏεÏ</span> 717 </div> 718 <div class="flex flex-wrap gap-2"> 719 <a href="https://okfn.gr/el/blog?tag=anoichta-dedomena" class="inline-flex items-center px-5 py-2 bg-white border-2 border-cyan-brand/30 rounded-full text-cyan-brand text-sm font-600 no-underline transition-all hover:bg-cyan-brand hover:text-white hover:border-cyan-brand hover:-translate-y-0.5 shadow-sm whitespace-nowrap"> 720 #ÎνοιÏÏά ÎεδομÎνα 721 </a> 722 <a href="https://okfn.gr/el/blog?tag=open-data" class="inline-flex items-center px-5 py-2 bg-white border-2 border-cyan-brand/30 rounded-full text-cyan-brand text-sm font-600 no-underline transition-all hover:bg-cyan-brand hover:text-white hover:border-cyan-brand hover:-translate-y-0.5 shadow-sm whitespace-nowrap"> 723 #Open Data 724 </a> 725 </div> 726 </div> 727 728 <!-- Share Buttons --> 729 <div class="mb-10 lg:mb-16"> 730 <h3 class="text-lg font-700 mb-4 text-text-primary">ÎοιÏαÏÏείÏε Î±Ï ÏÏ Ïο άÏθÏο</h3> 731 <div class="flex flex-wrap gap-3"> 732 <a href="https://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fokfn.gr%2Fel%2Fposts%2F389" 733 target="_blank" 734 class="inline-flex items-center gap-3 px-5 py-2.5 rounded-full text-white font-600 text-sm no-underline transition-all hover:-translate-y-0.5 hover:shadow-lg whitespace-nowrap sm:w-auto w-full justify-center" 735 style="background:#1877f2;"> 736 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" class="flex-shrink-0"> 737 <path 738 d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z" /> 739 </svg> 740 Facebook 741 </a> 742 <a href="https://twitter.com/intent/tweet?url=http%3A%2F%2Fokfn.gr%2Fel%2Fposts%2F389&text=AI+Learning+Labs+%7C+%CE%A3%CF%85%CE%BD%CE%B4%CE%AD%CE%BF%CE%BD%C
742F%84%CE%B1%CF%82+%CF%84%CE%B7%CE%BD+%CE%A4%CE%9D+%CE%BC%CE%B5+%CE%B4%CE%B5%CE%B4%CE%BF%CE%BC%CE%AD%CE%BD%CE%B1+%CF%84%CE%BF%CF%85+%CE%BA%CF%81%CE%AC%CF%84%CE%BF%CF%85%CF%82" 743 target="_blank" 744 class="inline-flex items-center gap-3 px-5 py-2.5 rounded-full text-white font-600 text-sm no-underline transition-all hover:-translate-y-0.5 hover:shadow-lg whitespace-nowrap sm:w-auto w-full justify-center" 745 style="background:#000000;"> 746 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" class="flex-shrink-0"> 747 <path 748 d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-4.714-6.231-5.401 6.231H2.746l7.73-8.835L1.254 2.25H8.08l4.253 5.622 5.911-5.622zm-1.161 17.52h1.833L7.084 4.126H5.117z" /> 749 </svg> 750 </a> 751 <a href="https://www.linkedin.com/shareArticle?mini=true&url=http%3A%2F%2Fokfn.gr%2Fel%2Fposts%2F389&title=AI+Learning+Labs+%7C+%CE%A3%CF%85%CE%BD%CE%B4%CE%AD%CE%BF%CE%BD%CF%84%CE%B1%CF%82+%CF%84%CE%B7%CE%BD+%CE%A4%CE%9D+%CE%BC%CE%B5+%CE%B4%CE%B5%CE%B4%CE%BF%CE%BC%CE%AD%CE%BD%CE%B1+%CF%84%CE%BF%CF%85+%CE%BA%CF%81%CE%AC%CF%84%CE%BF%CF%85%CF%82" 752 target="_blank" 753 class="inline-flex items-center gap-3 px-5 py-2.5 rounded-full text-white font-600 text-sm no-underline transition-all hover:-translate-y-0.5 hover:shadow-lg whitespace-nowrap sm:w-auto w-full justify-center" 754 style="background:#0a66c2;"> 755 <svg width="20" height="20" viewBox="0 0 24 24" fill="currentColor" class="flex-shrink-0"> 756 <path 757 d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z" /> 758 </svg> 759 LinkedIn 760 </a> 761 </div> 762 </div> 763 </div> 764 765 <!-- Lightbox --> 766 <div id="carouselLightbox" onclick="closeLightbox()" style="display:none; position:fixed; inset:0; background:rgba(0,0,0,0.92); 767 z-index:9999; cursor:zoom-out; align-items:center; justify-content:center;"> 768 <img id="lightboxImg" src="" alt="" style="max-width:92vw; max-height:92vh; object-fit:contain; border-radius:8px; 769 box-shadow:0 20px 60px rgba(0,0,0,0.5); transition:opacity 0.3s ease;"> 770 <button onclick="closeLightbox()" style="position:fixed; top:20px; right:24px; background:rgba(255,255,255,0.15); 771 border:none; color:white; width:44px; height:44px; border-radius:50%; 772 font-size:1.4rem; cursor:pointer; display:flex; align-items:center; 773 justify-content:center; transition:background 0.2s;">â</button> 774 <button onclick="event.stopPropagation(); carouselMove(-1); updateLightboxImg()" style="position:fixed; left:20px; top:50%; transform:translateY(-50%); 775 background:rgba(255,255,255,0.15); border:none; color:white; 776 width:48px; height:48px; border-radius:50%; font-size:1.5rem; 777 cursor:pointer; display:flex; align-items:center; justify-content:center;">â¹</button> 778 <button onclick="event.stopPropagation(); carouselMove(1); updateLightboxImg()" style="position:fixed; right:20px; top:50%; transform:translateY(-50%); 779 background:rgba(255,255,255,0.15); border:none; color:white; 780 width:48px; height:48px; border-radius:50%; font-size:1.5rem; 781 cursor:pointer; display:flex; align-items:center; justify-content:center;">âº</button> 782 </div> 783 784 <!-- Comments Section --> 785 <!-- <section class="py-10 lg:py-16 bg-lighter border-t border-gray-100"> 786 <div class="max-w-[900px] mx-auto px-4 sm:px-8 lg:px-12"> 787 <h2 class="text-2xl lg:text-3xl font-700 mb-8 text-text-primary"> 788 ΣÏÏλια (0) 789 </h2> 790 791 <div class="bg-light rounded-2xl p-6 lg:p-10 mb-10 shadow-sm"> 792 <h3 class="text-xl font-700 mb-6 text-text-primary">ÎÏήÏÏε Îνα ΣÏÏλιο</h3> 793 794 795 <form 796 action="http://okfn.gr/el/posts/389/comments" 797 method="POST"> 798 <input type="hidden" name="_token" value="7h7TxbwuePkrurVBwtzBhlvOGrTkIQPOIkgmSkta" autocomplete="off"> <div class="grid grid-cols-1 sm:grid-cols-2 gap-4 lg:gap-6 mb-4"> 799 <div> 800 <label for="author_name" class="block text-sm font-600 text-text-primary mb-2"> 801 Το Îνομά ÏÎ±Ï <span class="text-red-500">*</span> 802 </label> 803 <input type="text" id="author_name" name="author_name" value="" 804 required 805 class="w-full px-4 py-2.5 border-2 rounded-lg text-sm font-400 transition-colors focus:outline-none focus:border-cyan-brand border-border-color"> 806 </div> 807 <div> 808 <label for="author_email" class="block text-sm font-600 text-text-primary mb-2"> 809 Το Email ÏÎ±Ï <span class="text-red-500">*</span> 810 </label> 811 <input type="email" id="author_email" name="author_email" 812 value="" required 813 class="w-full px-4 py-2.5 border-2 rounded-lg text-sm font-400 transition-colors focus:outline-none focus:border-cyan-brand border-border-color"> 814 </div> 815 </div> 816 <div class="mb-6">
817 <label for="content" class="block text-sm font-600 text-text-primary mb-2"> 818 Το ΣÏÏÎ»Î¹Ï ÏÎ±Ï <span class="text-red-500">*</span> 819 </label> 820 <textarea id="content" name="content" rows="5" required 821 class="w-full px-4 py-2.5 border-2 rounded-lg text-sm font-400 transition-colors focus:outline-none focus:border-cyan-brand resize-none border-border-color"></textarea> 822 </div> 823 <button type="submit" 824 class="px-10 py-3 btn-cyber text-white rounded-full text-sm font-700 border-0 cursor-pointer transition-all hover:-translate-y-0.5 hover:shadow-lg"> 825 Î¥Ïοβολή ΣÏÎ¿Î»Î¯Î¿Ï 826 </button> 827 </form> 828 </div> 829 830 <p class="text-center text-text-secondary py-8 text-sm">Îεν Ï ÏάÏÏÎ¿Ï Î½ ακÏμα ÏÏÏλια. ÎίνεÏε ο ÏÏÏÏÎ¿Ï ÏÎ¿Ï Î¸Î± ÏÏολιάÏει!</p> 831 </div> 832 </section> --> 833 </article> 834 835 <!-- Footer --> 836 <footer class="bg-white border-t border-gray-100 py-10"> 837 <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8"> 838 <div class="flex flex-col items-center gap-6"> 839 <img src="https://okfn.gr/img/OKGR-landscape-full-rgb.svg" alt="OKFN Greece" class="h-10 w-auto"> 840 841 <div class="flex items-center gap-5"> 842 <a href="https://facebook.com/okfngreece" class="opacity-70 hover:opacity-100 transition-opacity" 843 target="_blank" rel="noopener"> 844 <img src="https://okfn.gr/img/social/facebook.png" alt="Facebook" class="w-6 h-6 object-contain"> 845 </a> 846 <a href="https://twitter.com/okfngr" class="opacity-70 hover:opacity-100 transition-opacity" 847 target="_blank" rel="noopener"> 848 <img src="https://okfn.gr/img/social/twitter.png" alt="Twitter" class="w-6 h-6 object-contain"> 849 </a> 850 <a href="https://github.com/okgreece" class="opacity-70 hover:opacity-100 transition-opacity" 851 target="_blank" rel="noopener"> 852 <img src="https://okfn.gr/img/social/github.png" alt="GitHub" class="w-6 h-6 object-contain"> 853 </a> 854 <a href="https://instagram.com/okfngreece" class="opacity-70 hover:opacity-100 transition-opacity" 855 target="_blank" rel="noopener"> 856 <img src="https://okfn.gr/img/social/instagram.png" alt="Instagram" class="w-6 h-6 object-contain"> 857 </a> 858 </div> 859 860 <div class="text-center text-sm text-text-secondary max-w-2xl leading-relaxed"> 861 <p>Content on this site, made by <a href="https://okfn.gr/" class="text-cyan-brand hover:underline">Open Knowledge Greece</a> and <a href="https://okfn.org/" class="text-cyan-brand hover:underline">Open Knowledge International</a>, is licensed under a <a href="https://creativecommons.org/licenses/by/4.0/" class="text-cyan-brand hover:underline">Creative Commons Attribution 4.0 International License</a>. 862 </p> 863 <p class="mt-3">© 2026 Open Knowledge - Greek Chapter</p> 864 </div> 865 </div> 866 </div> 867 </footer> 868 869
869<script> 870 // Mobile menu toggle 871 const toggle = document.getElementById('mobileMenuToggle'); 872 const nav = document.getElementById('desktopNav'); 873 if (toggle && nav) { 874 toggle.addEventListener('click', () => { 875 nav.classList.toggle('hidden'); 876 nav.classList.toggle('flex'); 877 nav.classList.toggle('flex-col'); 878 nav.classList.toggle('absolute'); 879 nav.classList.toggle('top-16'); 880 nav.classList.toggle('left-0'); 881 nav.classList.toggle('right-0'); 882 nav.classList.toggle('bg-white'); 883 nav.classList.toggle('shadow-lg'); 884 nav.classList.toggle('px-4'); 885 nav.classList.toggle('py-4'); 886 nav.classList.toggle('z-50'); 887 }); 888 } 889 890 // Language switcher (kept from original) 891 function switchLanguage(locale) { 892 fetch(`/language/${locale}`, { 893 method: 'POST', 894 headers: { 895 'Content-Type': 'application/json', 896 'X-CSRF-TOKEN': '7h7TxbwuePkrurVBwtzBhlvOGrTkIQPOIkgmSkta' 897 } 898 }).then(r => r.json()).then(d => { 899 if (d.success) window.location.reload(); 900 }).catch(e => console.error('Error:', e)); 901 } 902 </script>
902 903
903<script> 904 const LOCALE = 'el'; 905 const TARGET_LANG = LOCALE === 'el' ? 'en' : 'el'; 906 const SOURCE_LANG = LOCALE; 907 const LABEL_TO = LOCALE === 'el' ? 'EN' : 'ÎÎ'; 908 const LABEL_BACK = LOCALE === 'el' ? 'ÎÎ' : 'EN'; 909 const PROXY_URL = 'http://okfn.gr/el/translate-proxy'; 910 911 let isTranslated = false; 912 let originalContent = null; 913 let originalTitle = null; 914 915 async function toggleTranslate() { 916 const btn = document.getElementById('translateBtn'); 917 const btnText = document.getElementById('translateBtnText'); 918 const loader = document.getElementById('translateLoader'); 919 const note = document.getElementById('translateNote'); 920 const content = document.querySelector('.post-content'); 921 const title = document.querySelector('header h1'); 922 923 if (isTranslated) { 924 content.innerHTML = originalContent; 925 title.textContent = originalTitle; 926 btnText.textContent = LABEL_TO; 927 btn.style.borderColor = '#4285f4'; 928 btn.style.color = '#4285f4'; 929 btn.style.background = 'white'; 930 note.style.display = 'none'; 931 isTranslated = false; 932 return; 933 } 934 935 originalContent = content.innerHTML; 936 originalTitle = title.textContent; 937 938 btnText.style.display = 'none'; 939 loader.style.display = 'inline-flex'; 940 btn.disabled = true; 941 942 try { 943 // Collect all text nodes 944 const textNodes = []; 945 const walker = document.createTreeWalker( 946 content, 947 NodeFilter.SHOW_TEXT, 948 { acceptNode: n => n.textContent.trim() ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT } 949 ); 950 let node; 951 while ((node = walker.nextNode())) textNodes.push(node); 952 953 // Translate title 954 const translatedTitle = await translateOne(title.textContent.trim()); 955 title.textContent = translatedTitle; 956 957 // Translate text nodes one by one (safe, no CORS) 958 for (const n of textNodes) { 959 const tr = await translateOne(n.textContent.trim()); 960 n.textContent = tr; 961 } 962 963 isTranslated = true; 964 btnText.textContent = LABEL_BACK; 965 btn.style.borderColor = '#28a745'; 966 btn.style.color = '#28a745'; 967 btn.style.background = 'rgba(40,167,69,0.06)'; 968 note.style.display = 'inline'; 969 970 } catch (err) { 971 console.error('Translation failed:', err); 972 content.innerHTML = originalContent; 973 title.textContent = originalTitle; 974 alert('ΠμεÏάÏÏαÏη αÏÎÏÏ Ïε. ÎοκιμάÏÏε ξανά.'); 975 } finally { 976 btnText.style.display = 'inline'; 977 loader.style.display = 'none'; 978 btn.disabled = false; 979 } 980 } 981 982 async function translateOne(text) { 983 if (!text.trim()) return text; 984 985 const res = await fetch(PROXY_URL, { 986 method: 'POST', 987 headers: { 988 'Content-Type': 'application/json', 989 'X-CSRF-TOKEN': '7h7TxbwuePkrurVBwtzBhlvOGrTkIQPOIkgmSkta' 990 }, 991 body: JSON.stringify({ 992 q: text, 993 sl: SOURCE_LANG, 994 tl: TARGET_LANG 995 }) 996 }); 997 998 if (!res.ok) throw new Error('Proxy error ' + res.status); 999 const data = await res.json(); 1000 return data[0].map(s => s[0]).join(''); 1001 } 1002 1003 const CAROUSEL_IMAGES = [{"src":"http:\/\/okfn.gr\/storage\/posts\/B7rUYpozLzLhXal7wH5HkL8Vy1H6y9eaXF8aGwqR.png","alt":"AI Learning Labs | \u03a3\u03c5\u03bd\u03b4\u03ad\u03bf\u03bd\u03c4\u03b1\u03c2 \u03c4\u03b7\u03bd \u03a4\u039d \u03bc\u03b5 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c4\u03bf\u03c5 \u03ba\u03c1\u03ac\u03c4\u03bf\u03c5\u03c2"},{"src":"https:\/\/i0.wp.com\/blog.okfn.org\/wp-content\/uploads\/2026\/09\/TTWW-AI-GovernmentData-pages.png?resize=1024%2C576\u0026amp;ssl=1","alt":"AI Learning Labs | \u03a3\u03c5\u03bd\u03b4\u03ad\u03bf\u03bd\u03c4\u03b1\u03c2 \u03c4\u03b7\u03bd \u03a4\u039d \u03bc\u03b5 \u03b4\u03b5\u03b4\u03bf\u03bc\u03ad\u03bd\u03b1 \u03c4\u03bf\u03c5 \u03ba\u03c1\u03ac\u03c4\u03bf\u03c5\u03c2"}]; 1004 let carouselIndex = 0; 1005 1006 function carouselGoTo(index) { 1007 const img = document.getElementById('carouselMainImg'); 1008 const counter = document.getElementById('carouselCurrent'); 1009 const thumbs = document.querySelectorAll('.carousel-thumb'); 1010 1011 img.classList.add('fade'); 1012 1013 setTimeout(() => { 1014 carouselIndex = index; 1015 img.src = CAROUSEL_IMAGES[index].src; 1016 img.classList.remove('fade'); 1017 if (counter) counter.textContent = index + 1; 1018
1019 thumbs.forEach((t, i) => { 1020 t.classList.toggle('active', i === index); 1021 }); 1022 1023 if (thumbs[index]) { 1024 thumbs[index].scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'center' }); 1025 } 1026 }, 200); 1027 } 1028 1029 function carouselMove(dir) { 1030 const total = CAROUSEL_IMAGES.length; 1031 carouselGoTo((carouselIndex + dir + total) % total); 1032 } 1033 1034 document.addEventListener('keydown', e => { 1035 if (document.getElementById('postCarousel')) { 1036 if (e.key === 'ArrowLeft') carouselMove(-1); 1037 if (e.key === 'ArrowRight') carouselMove(1); 1038 } 1039 }); 1040 1041 // Lightbox 1042 function openLightbox() { 1043 const lb = document.getElementById('carouselLightbox'); 1044 const img = document.getElementById('lightboxImg'); 1045 img.src = CAROUSEL_IMAGES[carouselIndex].src; 1046 lb.style.display = 'flex'; 1047 document.body.style.overflow = 'hidden'; 1048 } 1049 1050 function closeLightbox() { 1051 document.getElementById('carouselLightbox').style.display = 'none'; 1052 document.body.style.overflow = ''; 1053 } 1054 1055 function updateLightboxImg() { 1056 // Keep lightbox in sync when navigating with arrows inside it 1057 const lb = document.getElementById('carouselLightbox'); 1058 if (lb.style.display === 'flex') { 1059 document.getElementById('lightboxImg').src = CAROUSEL_IMAGES[carouselIndex].src; 1060 } 1061 } 1062 1063 document.addEventListener('keydown', e => { 1064 if (e.key === 'Escape') closeLightbox(); 1065 if (document.getElementById('postCarousel')) { 1066 if (e.key === 'ArrowLeft') { carouselMove(-1); updateLightboxImg(); } 1067 if (e.key === 'ArrowRight') { carouselMove(1); updateLightboxImg(); } 1068 } 1069 }); 1070 </script>
vendor: 1 bytes, line 1070
1070
1071<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>
1071 1072</body> 1073 1074</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.