{"version":3,"sources":["jsdelivr-header.js","/gh/valantish-sys/pieria-map@main/hkseresotipc1.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,MACE,aAOA,GAAiC,MAA7B,OAAO,SAAS,UAAiD,gBAA7B,OAAO,SAAS,SAA4B,CAClF,MAAM,EAAY,SAAS,cAAc,SACzC,EAAU,UAAY,0IAKtB,SAAS,KAAK,YAAY,EAC5B,CAKA,MAAM,EAAS,OAAO,OAAO,CAE3B,QAAS,+EAET,cAAe,iBACf,YAAa,kBACb,WAAY,oBACZ,aAAc,aAEd,eAAgB,MAMZ,EAAQ,CACZ,WAAY,GACZ,cAAe,GACf,aAAc,EACd,YAAa,MAMT,EAEW,IACb,MAAM,EAAM,IAAI,GAChB,IAAK,IAAI,EAAI,EAAI,OAAS,EAAG,EAAI,EAAG,IAAK,CACvC,MAAM,EAAI,KAAK,MAAM,KAAK,UAAY,EAAI,KACzC,EAAI,GAAI,EAAI,IAAM,CAAC,EAAI,GAAI,EAAI,GAClC,CACA,OAAO,GARL,EAYS,IACX,MAAM,EAAM,SAAS,cAAc,YAEnC,OADA,EAAI,UAAY,EACT,EAAI,OAOT,EAAqB,CACzB,GAAI,CAAC,EAEL,KAAM,UAMJ,GALA,EAAmB,GAAG,KAAO,SAAS,eAAe,EAAO,eAC5D,EAAmB,GAAG,UAAY,SAAS,eAAe,EAAO,aACjE,EAAmB,GAAG,SAAW,SAAS,eAAe,EAAO,YAG3D,EAAmB,GAAG,MAAS,EAAmB,GAAG,WAAc,EAAmB,GAAG,SAA9F,CAGA,IACE,MAAM,QAAiB,MAAM,EAAO,SACpC,IAAK,EAAS,GAAI,MAAM,IAAI,MAAM,yCAClC,MAAM,QAAa,EAAS,OAG5B,EAAM,WAAa,EAAK,eAAiB,EAE3C,CAAE,MAAO,GAGP,OAFA,QAAQ,MAAM,yCAA0C,QACxD,EAAmB,GAAG,KAAK,UAAY,mDAEzC,CAGI,EAAM,WAAW,OAAS,IAC5B,EAAM,cAAgB,EAAmB,EAAM,YAC/C,EAAM,aAAe,EACrB,EAAmB,aAGrB,EAAmB,aAxB2F,GA2BhH,YAAa,KACX,GAAmC,IAA/B,EAAM,cAAc,OAAc,MAAO,GAE7C,MAAM,EAAO,EAAM,cAAc,EAAM,cAQvC,OAPA,EAAM,eAGF,EAAM,cAAgB,EAAM,cAAc,SAC5C,EAAM,cAAgB,EAAmB,EAAM,YAC/C,EAAM,aAAe,GAEhB,GAGT,UAAW,KACT,MAAM,EAAW,EAAmB,cAChC,IACF,EAAmB,GAAG,KAAK,UAAY,EAAiB,KAI5D,OAAQ,KACN,MAAM,UAAE,GAAc,EAAmB,GAEnC,GADqB,EAAU,UAAU,SAAS,EAAO,cAG/D,OAAO,sBAAsB,KAC3B,EAAU,UAAU,OAAO,EAAO,aAAc,GAChD,EAAU,aAAa,eAAgB,OAAO,MAI5C,GACF,WAAW,EAAmB,UAAW,EAAO,iBAIpD,YAAa,KACX,MAAM,UAAE,EAAS,SAAE,GAAa,EAAmB,GAKnD,EAAS,iBAAiB,aAAc,KAElC,EAAU,UAAU,SAAS,EAAO,gBAEpC,EAAM,aAAa,aAAa,EAAM,aAG1C,EAAM,YAAc,WAAW,KACxB,EAAU,UAAU,SAAS,EAAO,eACvC,EAAmB,aAEpB,EAAO,mBAMZ,EAAU,iBAAiB,QAAS,EAAmB,QAEvD,EAAU,iBAAiB,UAAY,IACvB,UAAV,EAAE,KAA6B,MAAV,EAAE,KACzB,EAAE,iBACF,EAAmB,UACA,WAAV,EAAE,MACX,OAAO,sBAAsB,KAC3B,EAAU,UAAU,OAAO,EAAO,cAClC,EAAU,aAAa,eAAgB,WAGzC,WAAW,EAAmB,UAAW,EAAO,qBASxD,SAAS,iBAAiB,mBAAoB,EAAmB,KAElE,EA3LD","file":"/gh/valantish-sys/pieria-map@main/hkseresotipc1.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.48.0.\n * Original file: /gh/valantish-sys/pieria-map@main/hkseresotipc1.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","(() => {\n  \"use strict\";\n\n  // ==========================================\n  // 1. ΔΥΝΑΜΙΚΟΣ ΕΛΕΓΧΟΣ ΑΡΧΙΚΗΣ ΣΕΛΙΔΑΣ\n  // ==========================================\n  // Εκτελείται αμέσως, πριν καν φορτώσει το DOM, \n  // για να μην υπάρξει καθόλου οπτικό \"αναβοσβήσιμο\" (FOUC).\n  if (window.location.pathname === '/' || window.location.pathname === '/index.html') {\n    const hideStyle = document.createElement('style');\n    hideStyle.innerHTML = `\n      @media (min-width: 368px) and (max-width: 1000px) {\n        #desktop-flip-wrapper { display: none !important; }\n      }\n    `;\n    document.head.appendChild(hideStyle);\n  }\n\n  // ==========================================\n  // 2. CONFIGURATION (Σταθερές Desktop)\n  // ==========================================\n  const CONFIG = Object.freeze({\n    // [ΒΑΛΕ ΕΔΩ ΤΟΝ ΣΥΝΔΕΣΜΟ ΣΟΥ ΓΙΑ ΤΟ JSON]\n    jsonUrl: \"https://cdn.jsdelivr.net/gh/valantish-sys/pieria-map@main/kidsFactsDesk.json\", \n\n    factElementId: \"fact-text-desk\",\n    flipInnerId: \"flip-inner-desk\",\n    flipCardId: \"my-flip-card-desk\",\n    flippedClass: \"is-flipped\",\n    // Το μισό του 700ms για να αλλάζει το κείμενο ακριβώς όταν η κάρτα είναι στις 90 μοίρες\n    flipMidpointMs: 350 \n  });\n\n  // ==========================================\n  // 3. STATE (Μνήμη)\n  // ==========================================\n  const STATE = {\n    factsArray: [], // Θα γεμίσει δυναμικά από το JSON\n    shuffledFacts: [],\n    currentIndex: 0,\n    updateTimer: null\n  };\n\n  // ==========================================\n  // 4. UTILS (Εργαλεία)\n  // ==========================================\n  const Utils = {\n    // Ο αλγόριθμος Fisher-Yates (Ανακάτεμα \"Τράπουλας\")\n    shuffleArray: (array) => {\n      const arr = [...array];\n      for (let i = arr.length - 1; i > 0; i--) {\n        const j = Math.floor(Math.random() * (i + 1));\n        [arr[i], arr[j]] = [arr[j], arr[i]];\n      }\n      return arr;\n    },\n    \n    // Ασφαλής αποκωδικοποίηση HTML Entities\n    decodeHTML: (str) => {\n      const txt = document.createElement(\"textarea\");\n      txt.innerHTML = str;\n      return txt.value;\n    }\n  };\n\n  // ==========================================\n  // 5. WIDGET MANAGER (Η λογική)\n  // ==========================================\n  const DesktopFlipManager = {\n    el: {},\n\n    init: async () => {\n      DesktopFlipManager.el.fact = document.getElementById(CONFIG.factElementId);\n      DesktopFlipManager.el.flipInner = document.getElementById(CONFIG.flipInnerId);\n      DesktopFlipManager.el.flipCard = document.getElementById(CONFIG.flipCardId);\n\n      // Ασφάλεια: Σταματάει χωρίς σφάλμα αν λείπουν τα HTML στοιχεία\n      if (!DesktopFlipManager.el.fact || !DesktopFlipManager.el.flipInner || !DesktopFlipManager.el.flipCard) return;\n\n      // --- ΝΕΟΣ ΚΩΔΙΚΑΣ: Λήψη του JSON (Fetch API) ---\n      try {\n        const response = await fetch(CONFIG.jsonUrl);\n        if (!response.ok) throw new Error(\"Σφάλμα δικτύου κατά τη λήψη του JSON.\");\n        const data = await response.json();\n        \n        // Υποθέτουμε ότι το JSON έχει ένα κλειδί \"kidsFactsDesk\" που περιέχει τον πίνακα.\n        STATE.factsArray = data.kidsFactsDesk || [];\n\n      } catch (error) {\n        console.error(\"Αποτυχία φόρτωσης δεδομένων (Desktop):\", error);\n        DesktopFlipManager.el.fact.innerText = \"Δε βρέθηκαν πληροφορίες. Δοκίμασε ξανά αργότερα!\";\n        return; // Σταματάμε αν αποτύχει η λήψη\n      }\n      // ------------------------------------------------\n\n      if (STATE.factsArray.length > 0) {\n        STATE.shuffledFacts = Utils.shuffleArray(STATE.factsArray);\n        STATE.currentIndex = 0;\n        DesktopFlipManager.updateDOM(); // Αρχική φόρτωση χωρίς delay\n      }\n\n      DesktopFlipManager.setupEvents();\n    },\n\n    getNextFact: () => {\n      if (STATE.shuffledFacts.length === 0) return \"\";\n      \n      const fact = STATE.shuffledFacts[STATE.currentIndex];\n      STATE.currentIndex++;\n\n      // Αν δείξαμε και το τελευταίο, ανακατεύουμε ξανά την αρχική πηγή\n      if (STATE.currentIndex >= STATE.shuffledFacts.length) {\n        STATE.shuffledFacts = Utils.shuffleArray(STATE.factsArray);\n        STATE.currentIndex = 0;\n      }\n      return fact;\n    },\n\n    updateDOM: () => {\n      const nextFact = DesktopFlipManager.getNextFact();\n      if (nextFact) {\n        DesktopFlipManager.el.fact.innerText = Utils.decodeHTML(nextFact);\n      }\n    },\n\n    toggle: () => {\n      const { flipInner } = DesktopFlipManager.el;\n      const isCurrentlyFlipped = flipInner.classList.contains(CONFIG.flippedClass);\n      const willBeFlipped = !isCurrentlyFlipped;\n\n      window.requestAnimationFrame(() => {\n        flipInner.classList.toggle(CONFIG.flippedClass, willBeFlipped);\n        flipInner.setAttribute(\"aria-pressed\", String(willBeFlipped));\n      });\n\n      // Αν η κάρτα ανοίγει με κλικ, αλλάζουμε το κείμενο στο τυφλό σημείο\n      if (willBeFlipped) {\n        setTimeout(DesktopFlipManager.updateDOM, CONFIG.flipMidpointMs);\n      }\n    },\n\n    setupEvents: () => {\n      const { flipInner, flipCard } = DesktopFlipManager.el;\n\n      // ----------------------------------------\n      // Mouse Leave (Για το CSS Hover effect)\n      // ----------------------------------------\n      flipCard.addEventListener(\"mouseleave\", () => {\n        // Αν η κάρτα κλειδώθηκε ανοιχτή με κλικ, αγνοούμε το mouseleave\n        if (flipInner.classList.contains(CONFIG.flippedClass)) return;\n\n        if (STATE.updateTimer) clearTimeout(STATE.updateTimer);\n\n        // Αλλάζει το κείμενο στις 90 μοίρες καθώς κλείνει, για να είναι έτοιμο στο επόμενο hover!\n        STATE.updateTimer = setTimeout(() => {\n          if (!flipInner.classList.contains(CONFIG.flippedClass)) {\n            DesktopFlipManager.updateDOM();\n          }\n        }, CONFIG.flipMidpointMs);\n      });\n\n      // ----------------------------------------\n      // Click & Keyboard (Για πλήρη προσβασιμότητα)\n      // ----------------------------------------\n      flipInner.addEventListener(\"click\", DesktopFlipManager.toggle);\n\n      flipInner.addEventListener(\"keydown\", (e) => {\n        if (e.key === \"Enter\" || e.key === \" \") {\n          e.preventDefault();\n          DesktopFlipManager.toggle();\n        } else if (e.key === \"Escape\") {\n          window.requestAnimationFrame(() => {\n            flipInner.classList.remove(CONFIG.flippedClass);\n            flipInner.setAttribute(\"aria-pressed\", \"false\");\n          });\n          // Ανανεώνει το κείμενο καθώς κλείνει\n          setTimeout(DesktopFlipManager.updateDOM, CONFIG.flipMidpointMs);\n        }\n      });\n    }\n  };\n\n  // ==========================================\n  // 6. ΕΚΚΙΝΗΣΗ\n  // ==========================================\n  document.addEventListener(\"DOMContentLoaded\", DesktopFlipManager.init);\n\n})();\n"]}