{"id":310,"date":"2026-08-05T13:41:21","date_gmt":"2026-08-05T13:41:21","guid":{"rendered":"https:\/\/mykosmos.ro\/digital-resources\/"},"modified":"2026-08-20T18:01:27","modified_gmt":"2026-08-20T18:01:27","slug":"digital-resources","status":"publish","type":"page","link":"https:\/\/mykosmos.ro\/en\/digital-resources\/","title":{"rendered":"Written materials"},"content":{"rendered":"<div class=\"et_pb_section_0 et_pb_section et_section_regular et_flex_section\">\n<div class=\"et_pb_row_0 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_0 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_heading_0 et_pb_heading et_pb_module et_flex_module preset--group--divi-heading--divi-font--hp5h6dj--w9xcpji5mv\"><div class=\"et_pb_heading_container\"><h1 class=\"et_pb_module_header\">Written materials<\/h1><\/div><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div class=\"et_pb_section_1 et_pb_section et_section_regular et_flex_section\">\n<div class=\"et_pb_row_1 et_pb_row et_flex_row\">\n<div class=\"et_pb_column_1 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\">\n<div class=\"et_pb_code_0 et_pb_code et_pb_module\"><div class=\"et_pb_code_inner\"><!--\n  ============================================================\n  CATALOGUE-STYLE PDF VIEWER \u2014 page by page, red arrows, zoom\n  No download \/ no right-click save\n  ============================================================\n  Paste this whole block into a Divi 5 \"Code\" module.\n  Edit PDF_LIST below with your PDF URLs \/ titles.\n\n  - White background\n  - Big red (#d11f2f) left\/right arrows\n  - Zoom in \/ out buttons (bottom-right of each viewer)\n  - When zoomed in, drag with the mouse (or scroll on touch) to pan\n  - No download button, right-click disabled, Ctrl+S \/ Ctrl+P blocked\n-->\n\n<style>\n  .pdfw-wrapper {\n    max-width: 900px;\n    margin: 0 auto 50px auto;\n    font-family: inherit;\n  }\n  .pdfw-title {\n    font-size: 1.2rem;\n    font-weight: 600;\n    margin-bottom: 10px;\n  }\n  .pdfw-row {\n    display: flex;\n    align-items: center;\n    gap: 18px;\n  }\n  .pdfw-viewer {\n    position: relative;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    flex: 1;\n    min-width: 0;\n    height: 700px;\n    border: 1px solid #eee;\n    border-radius: 6px;\n    background: #ffffff;\n    overflow: hidden;             \/* becomes scrollable only while zoomed *\/\n    cursor: grab;                 \/* hints that you can drag\/swipe *\/\n  }\n\n  \/* Smaller default height on phones while the document loads;\n     JS then fine-tunes it to match the actual page proportions. *\/\n  @media (max-width: 767px) {\n    .pdfw-viewer {\n      height: 420px;\n    }\n    .pdfw-row {\n      gap: 0;\n    }\n    .pdfw-arrow {\n      display: none !important;  \/* wins over the inline display:block the JS sets after loading *\/\n    }\n    .pdfw-wrapper {\n      margin: 0 auto 30px auto;\n    }\n  }\n  .pdfw-viewer.pdfw-zoomed {\n    overflow: auto;\n    align-items: flex-start;\n    justify-content: flex-start;\n    cursor: grab;\n  }\n  .pdfw-viewer.pdfw-panning {\n    cursor: grabbing;\n  }\n  .pdfw-viewer canvas {\n    max-width: 90%;\n    max-height: 96%;\n    width: auto;\n    height: auto;\n    box-shadow: 0 2px 12px rgba(0,0,0,0.12);\n    background: #fff;\n    user-select: none;\n    -webkit-user-drag: none;\n  }\n  .pdfw-viewer.pdfw-zoomed canvas {\n    max-width: none;\n    max-height: none;\n    margin: auto;\n  }\n\n  \/* Arrows \u2014 plain red chevrons, sit outside the document box *\/\n  .pdfw-arrow {\n    flex: 0 0 auto;\n    width: 44px;\n    height: 44px;\n    border: none;\n    background: transparent;\n    color: #d11f2f;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    padding: 0;\n    transition: transform 0.15s, opacity 0.2s;\n  }\n  .pdfw-arrow svg {\n    width: 40px;\n    height: 40px;\n    display: block;\n  }\n  .pdfw-arrow:hover { transform: scale(1.12); }\n  .pdfw-arrow:active { transform: scale(0.96); }\n  .pdfw-arrow:disabled { opacity: 0.25; cursor: default; transform: none; }\n\n  \/* Zoom controls *\/\n  .pdfw-zoom-controls {\n    position: absolute;\n    bottom: 14px;\n    right: 14px;\n    display: flex;\n    gap: 6px;\n    z-index: 6;\n  }\n  .pdfw-zoom-btn {\n    width: 36px;\n    height: 36px;\n    border-radius: 50%;\n    border: none;\n    background: #d11f2f;\n    color: #fff;\n    cursor: pointer;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n  }\n  .pdfw-zoom-btn svg {\n    width: 18px;\n    height: 18px;\n    display: block;\n  }\n  .pdfw-zoom-btn:hover { background: #a8121f; }\n  .pdfw-zoom-btn:disabled { opacity: 0.35; cursor: default; }\n\n  .pdfw-pagecount {\n    text-align: center;\n    margin-top: 8px;\n    font-size: 0.9rem;\n    color: #666;\n  }\n  .pdfw-loading {\n    color: #888;\n    font-size: 0.95rem;\n  }\n\n  \/* Expand-to-fullscreen button, top-right of each viewer *\/\n  .pdfw-expand-btn {\n    position: absolute;\n    top: 10px;\n    right: 10px;\n    width: 36px;\n    height: 36px;\n    border-radius: 50%;\n    border: none;\n    background: #d11f2f;\n    color: #fff;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n    z-index: 6;\n  }\n  .pdfw-expand-btn svg { width: 18px; height: 18px; display: block; }\n  .pdfw-expand-btn:hover { background: #a8121f; }\n\n  \/* Fullscreen continuous-scroll reading mode *\/\n  .pdfw-fullscreen-overlay {\n    position: fixed;\n    inset: 0;\n    background: #ffffff;\n    z-index: 999999;\n    overflow-y: auto;\n    -webkit-overflow-scrolling: touch;\n  }\n  .pdfw-fullscreen-topbar {\n    position: sticky;\n    top: 0;\n    display: flex;\n    justify-content: space-between;\n    align-items: center;\n    padding: 10px 14px;\n    background: rgba(255,255,255,0.97);\n    border-bottom: 1px solid #eee;\n    z-index: 2;\n  }\n  .pdfw-fullscreen-title {\n    font-size: 0.95rem;\n    font-weight: 600;\n    color: #333;\n  }\n  .pdfw-fullscreen-close {\n    width: 34px;\n    height: 34px;\n    border-radius: 50%;\n    border: none;\n    background: transparent;\n    color: #d11f2f;\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    cursor: pointer;\n  }\n  .pdfw-fullscreen-close svg { width: 22px; height: 22px; }\n  .pdfw-fullscreen-pages {\n    padding: 10px 0 60px 0;\n  }\n  .pdfw-fullscreen-pages canvas {\n    display: block;\n    width: 100%;\n    height: auto;\n    margin-bottom: 10px;\n    user-select: none;\n    -webkit-user-drag: none;\n  }\n  .pdfw-arrow,\n  .pdfw-zoom-btn,\n  .pdfw-expand-btn,\n  .pdfw-fullscreen-close {\n    touch-action: manipulation;\n  }\n<\/style>\n\n<div id=\"pdfw-container\"><\/div>\n\n<script src=\"https:\/\/mykosmos.ro\/wp-content\/uploads\/pdfjs\/pdf.min.js\"><\/script>\n<script>\n(function () {\n  \/\/ ------------------------------------------------------------\n  \/\/ EDIT THIS LIST \u2014 one entry per PDF\n  \/\/ ------------------------------------------------------------\n  const PDF_LIST = [\n    { url: \"https:\/\/mykosmos.ro\/wp-content\/uploads\/2026\/08\/Metodologie-Final_light.pdf\" },\n    { url: \"https:\/\/mykosmos.ro\/wp-content\/uploads\/2026\/08\/Ghid-Final_light.pdf\" }\n  ];\n  \/\/ ------------------------------------------------------------\n\n  const MIN_ZOOM = 1;    \/\/ 1 = fit to box\n  const MAX_ZOOM = 3;    \/\/ 3x the fit-to-box size\n  const ZOOM_STEP = 0.5;\n\n  \/\/ Icons are built as SVG (not text entities) so WordPress's content\n  \/\/ filters can't mangle them into random characters. Defined once here\n  \/\/ at the top level so every function in this file can use them.\n  const ICON_CHEVRON_LEFT =\n    '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 18 9 12 15 6\"><\/polyline><\/svg>';\n  const ICON_CHEVRON_RIGHT =\n    '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"9 18 15 12 9 6\"><\/polyline><\/svg>';\n  const ICON_PLUS =\n    '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"><line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line><\/svg>';\n  const ICON_MINUS =\n    '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"><line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line><\/svg>';\n  const ICON_EXPAND =\n    '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><polyline points=\"15 3 21 3 21 9\"><\/polyline><polyline points=\"9 21 3 21 3 15\"><\/polyline><line x1=\"21\" y1=\"3\" x2=\"14\" y2=\"10\"><\/line><line x1=\"3\" y1=\"21\" x2=\"10\" y2=\"14\"><\/line><\/svg>';\n  const ICON_CLOSE =\n    '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\" stroke-linecap=\"round\"><line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"><\/line><line x1=\"6\" y1=\"18\" x2=\"18\" y2=\"6\"><\/line><\/svg>';\n\n  pdfjsLib.GlobalWorkerOptions.workerSrc =\n    \"https:\/\/mykosmos.ro\/wp-content\/uploads\/pdfjs\/pdf.worker.min.js\";\n\n  const root = document.getElementById(\"pdfw-container\");\n\n  PDF_LIST.forEach((item, idx) => {\n    const wrapper = document.createElement(\"div\");\n    wrapper.className = \"pdfw-wrapper\";\n\n    const titleEl = document.createElement(\"div\");\n    titleEl.className = \"pdfw-title\";\n    titleEl.textContent = item.title;\n    wrapper.appendChild(titleEl);\n\n    const viewer = document.createElement(\"div\");\n    viewer.className = \"pdfw-viewer\";\n    viewer.id = \"pdfw-viewer-\" + idx;\n\n    const loading = document.createElement(\"div\");\n    loading.className = \"pdfw-loading\";\n    loading.textContent = \"Loading document\u2026\";\n    viewer.appendChild(loading);\n\n    const leftBtn = document.createElement(\"button\");\n    leftBtn.className = \"pdfw-arrow pdfw-arrow-left\";\n    leftBtn.innerHTML = ICON_CHEVRON_LEFT;\n    leftBtn.setAttribute(\"aria-label\", \"Previous page\");\n    leftBtn.style.display = \"none\";\n\n    const rightBtn = document.createElement(\"button\");\n    rightBtn.className = \"pdfw-arrow pdfw-arrow-right\";\n    rightBtn.innerHTML = ICON_CHEVRON_RIGHT;\n    rightBtn.setAttribute(\"aria-label\", \"Next page\");\n    rightBtn.style.display = \"none\";\n\n    const zoomControls = document.createElement(\"div\");\n    zoomControls.className = \"pdfw-zoom-controls\";\n    zoomControls.style.display = \"none\";\n\n    const zoomOutBtn = document.createElement(\"button\");\n    zoomOutBtn.className = \"pdfw-zoom-btn\";\n    zoomOutBtn.innerHTML = ICON_MINUS;\n    zoomOutBtn.setAttribute(\"aria-label\", \"Zoom out\");\n\n    const zoomInBtn = document.createElement(\"button\");\n    zoomInBtn.className = \"pdfw-zoom-btn\";\n    zoomInBtn.innerHTML = ICON_PLUS;\n    zoomInBtn.setAttribute(\"aria-label\", \"Zoom in\");\n\n    zoomControls.appendChild(zoomOutBtn);\n    zoomControls.appendChild(zoomInBtn);\n\n    viewer.appendChild(zoomControls);\n\n    const expandBtn = document.createElement(\"button\");\n    expandBtn.className = \"pdfw-expand-btn\";\n    expandBtn.innerHTML = ICON_EXPAND;\n    expandBtn.setAttribute(\"aria-label\", \"Open full-screen reading view\");\n    expandBtn.style.display = \"none\";\n    viewer.appendChild(expandBtn);\n\n    const row = document.createElement(\"div\");\n    row.className = \"pdfw-row\";\n    row.appendChild(leftBtn);\n    row.appendChild(viewer);\n    row.appendChild(rightBtn);\n    wrapper.appendChild(row);\n\n    const pageCount = document.createElement(\"div\");\n    pageCount.className = \"pdfw-pagecount\";\n    wrapper.appendChild(pageCount);\n\n    root.appendChild(wrapper);\n\n    viewer.addEventListener(\"contextmenu\", (e) => e.preventDefault());\n\n    loadPdf(item.url, item.title, viewer, loading, leftBtn, rightBtn, zoomInBtn, zoomOutBtn, expandBtn, pageCount);\n  });\n\n  document.addEventListener(\"keydown\", function (e) {\n    const key = e.key ? e.key.toLowerCase() : \"\";\n    if ((e.ctrlKey || e.metaKey) && (key === \"s\" || key === \"p\")) {\n      e.preventDefault();\n    }\n  });\n\n  async function loadPdf(url, title, viewer, loadingEl, leftBtn, rightBtn, zoomInBtn, zoomOutBtn, expandBtn, pageCountEl) {\n    try {\n      const pdf = await pdfjsLib.getDocument({\n        url: url,\n        disableStream: true,\n        disableRange: true\n      }).promise;\n\n      loadingEl.remove();\n      leftBtn.style.display = \"block\";\n      rightBtn.style.display = \"block\";\n      viewer.querySelector(\".pdfw-zoom-controls\").style.display = \"flex\";\n      expandBtn.style.display = \"flex\";\n\n      let currentPage = 1;\n      let zoomLevel = MIN_ZOOM;\n      const totalPages = pdf.numPages;\n      let renderTask = null;\n\n      function updateZoomState() {\n        if (zoomLevel > MIN_ZOOM) {\n          viewer.classList.add(\"pdfw-zoomed\");\n        } else {\n          viewer.classList.remove(\"pdfw-zoomed\");\n          viewer.scrollTop = 0;\n          viewer.scrollLeft = 0;\n        }\n        zoomOutBtn.disabled = zoomLevel <= MIN_ZOOM;\n        zoomInBtn.disabled = zoomLevel >= MAX_ZOOM;\n      }\n\n      async function renderCurrentPage() {\n        if (renderTask) {\n          try { renderTask.cancel(); } catch (e) {}\n        }\n\n        const page = await pdf.getPage(currentPage);\n        const baseViewport = page.getViewport({ scale: 1 });\n        const isMobile = window.matchMedia(\"(max-width: 767px)\").matches;\n\n        \/\/ On phones, shrink\/grow the box to match the document's own\n        \/\/ proportions instead of using the fixed desktop height \u2014 avoids\n        \/\/ a tall box with lots of empty space above\/below the page.\n        if (isMobile) {\n          const aspectRatio = baseViewport.height \/ baseViewport.width;\n          const availableWidth = viewer.clientWidth;\n          let targetHeight = availableWidth * aspectRatio;\n          const maxHeight = window.innerHeight * 0.75;\n          if (targetHeight > maxHeight) targetHeight = maxHeight;\n          if (targetHeight < 250) targetHeight = 250;\n          viewer.style.height = targetHeight + \"px\";\n        } else {\n          viewer.style.height = \"\"; \/\/ use the default desktop height from CSS\n        }\n\n        \/\/ Phones use almost the full box width\/height (arrows are hidden\n        \/\/ there); desktop keeps a bit of breathing room around the page.\n        const containerHeight = viewer.clientHeight * (isMobile ? 0.99 : 0.96);\n        const containerWidth = viewer.clientWidth * (isMobile ? 0.99 : 0.90);\n        const fitScale = Math.min(\n          containerWidth \/ baseViewport.width,\n          containerHeight \/ baseViewport.height\n        );\n        const viewport = page.getViewport({ scale: fitScale * zoomLevel });\n\n        const oldCanvas = viewer.querySelector(\"canvas\");\n        if (oldCanvas) oldCanvas.remove();\n\n        const canvas = document.createElement(\"canvas\");\n        canvas.width = viewport.width;\n        canvas.height = viewport.height;\n        viewer.appendChild(canvas);\n\n        const ctx = canvas.getContext(\"2d\");\n        renderTask = page.render({ canvasContext: ctx, viewport: viewport });\n        try {\n          await renderTask.promise;\n        } catch (e) {}\n\n        pageCountEl.textContent = currentPage + \" \/ \" + totalPages;\n        leftBtn.disabled = currentPage <= 1;\n        rightBtn.disabled = currentPage >= totalPages;\n        updateZoomState();\n      }\n\n      leftBtn.addEventListener(\"click\", () => {\n        if (currentPage > 1) {\n          currentPage--;\n          zoomLevel = MIN_ZOOM;\n          renderCurrentPage();\n        }\n      });\n\n      rightBtn.addEventListener(\"click\", () => {\n        if (currentPage < totalPages) {\n          currentPage++;\n          zoomLevel = MIN_ZOOM;\n          renderCurrentPage();\n        }\n      });\n\n      zoomInBtn.addEventListener(\"click\", () => {\n        zoomLevel = Math.min(MAX_ZOOM, zoomLevel + ZOOM_STEP);\n        renderCurrentPage();\n      });\n\n      zoomOutBtn.addEventListener(\"click\", () => {\n        zoomLevel = Math.max(MIN_ZOOM, zoomLevel - ZOOM_STEP);\n        renderCurrentPage();\n      });\n\n      \/\/ Mouse drag: pan the page when zoomed in, or swipe left\/right to\n      \/\/ turn the page when at normal (fit-to-box) zoom.\n      const SWIPE_THRESHOLD = 60; \/\/ pixels of horizontal movement to count as a swipe\n      let isDragging = false;\n      let startX, startY, scrollLeftStart, scrollTopStart;\n\n      viewer.addEventListener(\"mousedown\", (e) => {\n        if (e.target.closest(\"button\")) return; \/\/ don't hijack taps on buttons\n        isDragging = true;\n        viewer.classList.add(\"pdfw-panning\");\n        startX = e.pageX;\n        startY = e.pageY;\n        scrollLeftStart = viewer.scrollLeft;\n        scrollTopStart = viewer.scrollTop;\n      });\n\n      window.addEventListener(\"mousemove\", (e) => {\n        if (!isDragging) return;\n        if (viewer.classList.contains(\"pdfw-zoomed\")) {\n          e.preventDefault();\n          viewer.scrollLeft = scrollLeftStart - (e.pageX - startX);\n          viewer.scrollTop = scrollTopStart - (e.pageY - startY);\n        }\n      });\n\n      window.addEventListener(\"mouseup\", (e) => {\n        if (!isDragging) return;\n        isDragging = false;\n        viewer.classList.remove(\"pdfw-panning\");\n\n        if (!viewer.classList.contains(\"pdfw-zoomed\")) {\n          const deltaX = e.pageX - startX;\n          if (Math.abs(deltaX) > SWIPE_THRESHOLD) {\n            if (deltaX < 0) {\n              rightBtn.click(); \/\/ swiped left -> next page\n            } else {\n              leftBtn.click(); \/\/ swiped right -> previous page\n            }\n          }\n        }\n      });\n\n      \/\/ Touch swipe (phones\/tablets) \u2014 same left\/right page turn\n      let touchStartX = null;\n      viewer.addEventListener(\"touchstart\", (e) => {\n        if (e.target.closest(\"button\")) return; \/\/ don't hijack taps on buttons\n        if (viewer.classList.contains(\"pdfw-zoomed\")) return;\n        touchStartX = e.touches[0].pageX;\n      });\n      viewer.addEventListener(\"touchend\", (e) => {\n        if (touchStartX === null || viewer.classList.contains(\"pdfw-zoomed\")) return;\n        const deltaX = e.changedTouches[0].pageX - touchStartX;\n        if (Math.abs(deltaX) > SWIPE_THRESHOLD) {\n          if (deltaX < 0) rightBtn.click();\n          else leftBtn.click();\n        }\n        touchStartX = null;\n      });\n\n      \/\/ Keyboard navigation\n      viewer.setAttribute(\"tabindex\", \"0\");\n      viewer.addEventListener(\"keydown\", (e) => {\n        if (e.key === \"ArrowLeft\" && !viewer.classList.contains(\"pdfw-zoomed\")) leftBtn.click();\n        if (e.key === \"ArrowRight\" && !viewer.classList.contains(\"pdfw-zoomed\")) rightBtn.click();\n      });\n\n      \/\/ Re-fit the box if the window is resized or the phone is rotated\n      let resizeTimer;\n      window.addEventListener(\"resize\", () => {\n        clearTimeout(resizeTimer);\n        resizeTimer = setTimeout(() => renderCurrentPage(), 200);\n      });\n\n      expandBtn.addEventListener(\"click\", () => {\n        openFullscreenReader(pdf, title, currentPage);\n      });\n\n      renderCurrentPage();\n    } catch (err) {\n      loadingEl.textContent = \"Could not load document.\";\n      console.error(\"PDF load error:\", err);\n    }\n  }\n\n  \/\/ ------------------------------------------------------------\n  \/\/ Full-screen reading mode: full device width, continuous\n  \/\/ vertical scroll (no per-page height squeeze), for maximum\n  \/\/ text readability \u2014 mainly useful on phones.\n  \/\/ ------------------------------------------------------------\n  function openFullscreenReader(pdf, title, startPage) {\n    const overlay = document.createElement(\"div\");\n    overlay.className = \"pdfw-fullscreen-overlay\";\n    overlay.addEventListener(\"contextmenu\", (e) => e.preventDefault());\n\n    const topbar = document.createElement(\"div\");\n    topbar.className = \"pdfw-fullscreen-topbar\";\n\n    const titleEl = document.createElement(\"div\");\n    titleEl.className = \"pdfw-fullscreen-title\";\n    titleEl.textContent = title;\n\n    const closeBtn = document.createElement(\"button\");\n    closeBtn.className = \"pdfw-fullscreen-close\";\n    closeBtn.innerHTML = ICON_CLOSE;\n    closeBtn.setAttribute(\"aria-label\", \"Close\");\n\n    topbar.appendChild(titleEl);\n    topbar.appendChild(closeBtn);\n    overlay.appendChild(topbar);\n\n    const pagesWrap = document.createElement(\"div\");\n    pagesWrap.className = \"pdfw-fullscreen-pages\";\n    overlay.appendChild(pagesWrap);\n\n    document.body.appendChild(overlay);\n    document.body.style.overflow = \"hidden\";\n\n    function closeOverlay() {\n      overlay.remove();\n      document.body.style.overflow = \"\";\n      document.removeEventListener(\"keydown\", escHandler);\n    }\n    function escHandler(e) {\n      if (e.key === \"Escape\") closeOverlay();\n    }\n    closeBtn.addEventListener(\"click\", closeOverlay);\n    document.addEventListener(\"keydown\", escHandler);\n\n    const holders = [];\n    for (let n = 1; n <= pdf.numPages; n++) {\n      const holder = document.createElement(\"div\");\n      holder.dataset.pageNum = n;\n      pagesWrap.appendChild(holder);\n      holders.push(holder);\n    }\n\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting) {\n            const holder = entry.target;\n            const n = parseInt(holder.dataset.pageNum, 10);\n            if (!holder.dataset.rendered) {\n              holder.dataset.rendered = \"true\";\n              renderFullscreenPage(pdf, n, holder);\n            }\n          }\n        });\n      },\n      { root: overlay, rootMargin: \"1000px 0px 1000px 0px\" }\n    );\n    holders.forEach((h) => observer.observe(h));\n\n    \/\/ Jump straight to the page the visitor was already reading\n    const target = holders[startPage - 1];\n    if (target) target.scrollIntoView();\n  }\n\n  async function renderFullscreenPage(pdf, pageNum, holder) {\n    const page = await pdf.getPage(pageNum);\n    const baseViewport = page.getViewport({ scale: 1 });\n    const scale = window.innerWidth \/ baseViewport.width;\n    const viewport = page.getViewport({ scale });\n\n    const canvas = document.createElement(\"canvas\");\n    canvas.width = viewport.width;\n    canvas.height = viewport.height;\n    holder.appendChild(canvas);\n\n    const ctx = canvas.getContext(\"2d\");\n    try {\n      await page.render({ canvasContext: ctx, viewport: viewport }).promise;\n    } catch (e) {}\n  }\n})();\n<\/script><\/div><\/div>\n<\/div>\n<\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-310","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Written materials - My Kosmos<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/mykosmos.ro\/en\/digital-resources\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Written materials - My Kosmos\" \/>\n<meta property=\"og:url\" content=\"https:\/\/mykosmos.ro\/en\/digital-resources\/\" \/>\n<meta property=\"og:site_name\" content=\"My Kosmos\" \/>\n<meta property=\"article:modified_time\" content=\"2026-08-20T18:01:27+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/digital-resources\\\/\",\"url\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/digital-resources\\\/\",\"name\":\"Written materials - My Kosmos\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/#website\"},\"datePublished\":\"2026-08-05T13:41:21+00:00\",\"dateModified\":\"2026-08-20T18:01:27+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/digital-resources\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/mykosmos.ro\\\/en\\\/digital-resources\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/digital-resources\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Prima pagin\u0103\",\"item\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/erasmus-project\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Written materials\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/#website\",\"url\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/\",\"name\":\"My Kosmos\",\"description\":\"Inchiriere partituri\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/mykosmos.ro\\\/en\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Written materials - My Kosmos","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/mykosmos.ro\/en\/digital-resources\/","og_locale":"en_US","og_type":"article","og_title":"Written materials - My Kosmos","og_url":"https:\/\/mykosmos.ro\/en\/digital-resources\/","og_site_name":"My Kosmos","article_modified_time":"2026-08-20T18:01:27+00:00","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/mykosmos.ro\/en\/digital-resources\/","url":"https:\/\/mykosmos.ro\/en\/digital-resources\/","name":"Written materials - My Kosmos","isPartOf":{"@id":"https:\/\/mykosmos.ro\/en\/#website"},"datePublished":"2026-08-05T13:41:21+00:00","dateModified":"2026-08-20T18:01:27+00:00","breadcrumb":{"@id":"https:\/\/mykosmos.ro\/en\/digital-resources\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/mykosmos.ro\/en\/digital-resources\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/mykosmos.ro\/en\/digital-resources\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Prima pagin\u0103","item":"https:\/\/mykosmos.ro\/en\/erasmus-project\/"},{"@type":"ListItem","position":2,"name":"Written materials"}]},{"@type":"WebSite","@id":"https:\/\/mykosmos.ro\/en\/#website","url":"https:\/\/mykosmos.ro\/en\/","name":"My Kosmos","description":"Inchiriere partituri","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/mykosmos.ro\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/mykosmos.ro\/en\/wp-json\/wp\/v2\/pages\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mykosmos.ro\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mykosmos.ro\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mykosmos.ro\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mykosmos.ro\/en\/wp-json\/wp\/v2\/comments?post=310"}],"version-history":[{"count":8,"href":"https:\/\/mykosmos.ro\/en\/wp-json\/wp\/v2\/pages\/310\/revisions"}],"predecessor-version":[{"id":371,"href":"https:\/\/mykosmos.ro\/en\/wp-json\/wp\/v2\/pages\/310\/revisions\/371"}],"wp:attachment":[{"href":"https:\/\/mykosmos.ro\/en\/wp-json\/wp\/v2\/media?parent=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}