{"id":19032,"date":"2022-11-18T12:33:40","date_gmt":"2022-11-18T11:33:40","guid":{"rendered":"https:\/\/cmm.imgw.pl\/?page_id=19032"},"modified":"2026-07-15T11:46:06","modified_gmt":"2026-07-15T09:46:06","slug":"prognoza-synoptyczna","status":"publish","type":"page","link":"https:\/\/cmm.imgw.pl\/?page_id=19032","title":{"rendered":"PROGNOZA SYNOPTYCZNA"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"19032\" class=\"elementor elementor-19032\">\n\t\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-8bc5c72 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"8bc5c72\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-106ed96\" data-id=\"106ed96\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6177ad8 elementor-widget elementor-widget-html\" data-id=\"6177ad8\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t<div id=\"synop-forecast-app\" class=\"forecast-app\">\n\t<div class=\"layout-container\">\n\t\t<div class=\"left-column\">\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"model-group-title\">Prognoza szczeg\u00f3\u0142owa<\/div>\n\t\t\t\t<div id=\"synopDailyButtons\" class=\"buttons type-buttons\"><\/div>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"section\">\n\t\t\t\t<div class=\"model-group-title\">Zestawienia<\/div>\n\t\t\t\t<div id=\"synopSummaryButtons\" class=\"buttons type-buttons\"><\/div>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"keyboard-info\">\n\t\t\t\t<strong>\ud83d\udca1 Skr\u00f3ty klawiszowe:<\/strong><br>\n\t\t\t\t\u2191 \u2193 | Poprzednia \/ nast\u0119pna mapa\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<div class=\"right-column\">\n\t\t\t<div class=\"section images\">\n\t\t\t\t<div id=\"synopStatus\" class=\"date-warning\"><\/div>\n\t\t\t\t<div id=\"synopLoader\" class=\"loader-container\" style=\"display: none;\">\n\t\t\t\t\t<div class=\"loader\"><\/div>\n\t\t\t\t\t<p>\u0141adowanie mapy...<\/p>\n\t\t\t\t<\/div>\n\t\t\t\t<div id=\"synopImages\" class=\"images\"><\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n\n<div class=\"lightbox\" id=\"synopLightbox\">\n\t<span class=\"lightbox-close\" id=\"synopLightboxClose\">&times;<\/span>\n\t<img id=\"synopLightboxImg\" src=\"\" alt=\"Powi\u0119kszona prognoza synoptyczna\">\n<\/div>\n\n<style>\n\t.forecast-app {\n\t\tfont-family: Arial, sans-serif;\n\t\tmax-width: 1200px;\n\t\tmargin: 0 auto;\n\t}\n\n\t.layout-container {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 10px;\n\t}\n\n\t.left-column {\n\t\tflex: 1;\n\t\tmin-width: 250px;\n\t\tmax-width: 280px;\n\t}\n\n\t.right-column {\n\t\tflex: 2;\n\t\tmin-width: 400px;\n\t}\n\n\t.section {\n\t\tmargin-bottom: 12px;\n\t\tbackground: #f9f9f9;\n\t\tpadding: 10px;\n\t\tborder-radius: 8px;\n\t\tbox-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n\t}\n\n\t.model-group-title {\n\t\twidth: 100%;\n\t\tfont-size: 0.78em;\n\t\tfont-weight: 700;\n\t\ttext-transform: uppercase;\n\t\tletter-spacing: 0.04em;\n\t\tcolor: #5d5d5d;\n\t\tpadding: 3px 4px;\n\t\tmargin-top: 0;\n\t\tmargin-bottom: 6px;\n\t\tborder-bottom: 1px dashed #c9c9c9;\n\t}\n\n\t.buttons {\n\t\tdisplay: flex;\n\t\tflex-wrap: wrap;\n\t\tgap: 5px;\n\t\tmargin-top: 3px;\n\t}\n\n\t.buttons button {\n\t\tpadding: 8px 10px;\n\t\twidth: 100%;\n\t\tborder: 1px solid #666;\n\t\tborder-radius: 6px;\n\t\tbackground: #f5f5f5;\n\t\tcursor: pointer;\n\t\ttransition: all 0.2s;\n\t\tfont-size: 0.9em;\n\t\tline-height: 1.3;\n\t\ttext-align: center;\n\t}\n\n\t.buttons button:hover {\n\t\tbackground: #ddd;\n\t}\n\n\t.buttons button.active {\n\t\tbackground-color: rgba(86, 221, 208, 1);\n\t\tcolor: #fff;\n\t\tborder-color: #2e7d32;\n\t}\n\n\t.type-buttons {\n\t\tflex-direction: column;\n\t\talign-items: stretch;\n\t}\n\n\t.type-buttons button.preload-pending:not(.active) {\n\t\tbackground: #ececec;\n\t\tborder-color: #b8b8b8;\n\t\tcolor: #7a7a7a;\n\t}\n\n\t.type-buttons button.preload-loaded:not(.active) {\n\t\tbackground: linear-gradient(135deg, #d8d8d8 0%, #c9c9c9 100%);\n\t\tborder-color: #b1b1b1;\n\t\tcolor: #4f4f4f;\n\t}\n\n\t.type-buttons button.preload-loading:not(.active) {\n\t\tbackground-image: repeating-linear-gradient(\n\t\t\t-45deg,\n\t\t\t#e8e8e8 0,\n\t\t\t#e8e8e8 8px,\n\t\t\t#dfdfdf 8px,\n\t\t\t#dfdfdf 16px\n\t\t);\n\t}\n\n\t.keyboard-info {\n\t\tfont-size: 11px;\n\t\tcolor: #555;\n\t\tmargin-top: 20px;\n\t\tpadding: 10px;\n\t\tline-height: 1.6;\n\t\tbackground-color: #f0f8ff;\n\t\tborder-left: 3px solid rgba(86, 221, 208, 1);\n\t\tborder-radius: 4px;\n\t}\n\n\t.keyboard-info strong {\n\t\tcolor: rgba(86, 221, 208, 1);\n\t\tfont-size: 12px;\n\t}\n\n\t.section.images {\n\t\tmin-height: 620px;\n\t}\n\n\t.images {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\tmin-height: 540px;\n\t}\n\n\t.images .synop-map-img {\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\tright: 0;\n\t\tmax-width: 100%;\n\t\tmargin: 5px auto;\n\t\tborder: 1px solid #ccc;\n\t\tbox-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);\n\t\tcursor: zoom-in;\n\t\topacity: 0;\n\t\tvisibility: hidden;\n\t\tpointer-events: none;\n\t\tz-index: 1;\n\t}\n\n\t.images .synop-map-img.active {\n\t\topacity: 1;\n\t\tvisibility: visible;\n\t\tpointer-events: auto;\n\t\tz-index: 2;\n\t}\n\n\t.loader-container {\n\t\tdisplay: flex;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tflex-direction: column;\n\t\twidth: 100%;\n\t\theight: 280px;\n\t\tposition: relative;\n\t\tbackground-color: rgba(245, 245, 245, 0.7);\n\t}\n\n\t.loader {\n\t\tborder: 12px solid #f3f3f3;\n\t\tborder-radius: 50%;\n\t\tborder-top: 12px solid rgba(86, 221, 208, 1);\n\t\twidth: 90px;\n\t\theight: 90px;\n\t\tanimation: synop-spin 0.8s linear infinite;\n\t\tbox-shadow: 0 0 20px rgba(86, 221, 208, 0.7);\n\t}\n\n\t@keyframes synop-spin {\n\t\t0% { transform: rotate(0deg); }\n\t\t100% { transform: rotate(360deg); }\n\t}\n\n\t.images img {\n\t\tmax-width: 100%;\n\t}\n\n\t.date-warning {\n\t\tdisplay: none;\n\t\ttext-align: center;\n\t\tpadding: 8px 15px;\n\t\tbackground: rgba(255, 152, 0, 0.1);\n\t\tborder: 1px solid rgba(255, 152, 0, 0.3);\n\t\tborder-radius: 6px;\n\t\tfont-size: 13px;\n\t\tcolor: #e65100;\n\t\tmargin: 10px 0;\n\t\tfont-weight: 500;\n\t}\n\n\t.lightbox {\n\t\tdisplay: none;\n\t\tposition: fixed;\n\t\ttop: 0;\n\t\tleft: 0;\n\t\twidth: 100%;\n\t\theight: 100%;\n\t\tbackground: rgba(0, 0, 0, 0.9);\n\t\tz-index: 1000;\n\t\tjustify-content: center;\n\t\talign-items: center;\n\t\tcursor: pointer;\n\t}\n\n\t.lightbox.active {\n\t\tdisplay: flex;\n\t}\n\n\t.lightbox img {\n\t\tmax-width: 95%;\n\t\tmax-height: 95%;\n\t\tobject-fit: contain;\n\t}\n\n\t.lightbox-close {\n\t\tposition: absolute;\n\t\ttop: 20px;\n\t\tright: 30px;\n\t\tcolor: #fff;\n\t\tfont-size: 40px;\n\t\tcursor: pointer;\n\t\tline-height: 1;\n\t}\n\n\t@media (max-width: 768px) {\n\t\t.layout-container {\n\t\t\tflex-direction: column;\n\t\t}\n\n\t\t.left-column,\n\t\t.right-column {\n\t\t\tmax-width: 100%;\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.keyboard-info {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n<\/style>\n\n<script>\n(function() {\n\tvar DETAIL_BASE_PATH = (function() {\n\t\tvar path = window.location && window.location.pathname ? window.location.pathname : \"\";\n\t\tif (path.indexOf(\"\/cmm\/\") === 0 || path.indexOf(\"\/cmm\") !== -1) {\n\t\t\treturn \"\/cmm\/wp-content\/uploads\/production\/prognoza_synoptyczna\/strona_meteo\";\n\t\t}\n\t\treturn \"\/wp-content\/uploads\/production\/prognoza_synoptyczna\/strona_meteo\";\n\t})();\n\n\tvar SUMMARY_BASE_PATH = (function() {\n\t\tvar path = window.location && window.location.pathname ? window.location.pathname : \"\";\n\t\tif (path.indexOf(\"\/cmm\/\") === 0 || path.indexOf(\"\/cmm\") !== -1) {\n\t\t\treturn \"\/cmm\/wp-content\/uploads\/production\/prognoza_synoptyczna\";\n\t\t}\n\t\treturn \"\/wp-content\/uploads\/production\/prognoza_synoptyczna\";\n\t})();\n\n\tvar FORECAST_RUN_CHECK_MS = 60000;\n\n\tfunction createDailyMap(id, file, periodLabel, periodNum, dayOffset) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\tgroup: \"daily\",\n\t\t\tbasePath: DETAIL_BASE_PATH,\n\t\t\tfile: file,\n\t\t\tgetLabel: function() {\n\t\t\t\treturn periodLabel + \" \" + periodNum + \" (\" + formatDateLabel(dayOffset) + \")\";\n\t\t\t},\n\t\t\talt: \"Prognoza synoptyczna \u2013 \" + periodLabel.toLowerCase() + \" \" + periodNum\n\t\t};\n\t}\n\n\tfunction createSummaryMap(id, file, label, alt) {\n\t\treturn {\n\t\t\tid: id,\n\t\t\tgroup: \"summary\",\n\t\t\tbasePath: SUMMARY_BASE_PATH,\n\t\t\tfile: file,\n\t\t\tlabel: label,\n\t\t\talt: alt\n\t\t};\n\t}\n\n\tvar maps = [\n\t\tcreateDailyMap(\"DAY_1\", \"SYNOP_PPROG_K_1.png\", \"Dzie\u0144\", 1, 0),\n\t\tcreateDailyMap(\"NIGHT_1\", \"SYNOP_PPROG_K_2.png\", \"Noc\", 1, 0),\n\t\tcreateDailyMap(\"DAY_2\", \"SYNOP_PPROG_K_3.png\", \"Dzie\u0144\", 2, 1),\n\t\tcreateDailyMap(\"NIGHT_2\", \"SYNOP_PPROG_K_4.png\", \"Noc\", 2, 1),\n\t\tcreateDailyMap(\"DAY_3\", \"SYNOP_PPROG_K_5.png\", \"Dzie\u0144\", 3, 2),\n\t\t\n\t\tcreateDailyMap(\"DAY_4\", \"SYNOP_PPROG_S_1.png\", \"Dzie\u0144\", 4, 3),\n\t\tcreateDailyMap(\"DAY_5\", \"SYNOP_PPROG_S_2.png\", \"Dzie\u0144\", 5, 4),\n\t\tcreateDailyMap(\"DAY_6\", \"SYNOP_PPROG_S_3.png\", \"Dzie\u0144\", 6, 5),\n\t\tcreateDailyMap(\"DAY_7\", \"SYNOP_PPROG_S_4.png\", \"Dzie\u0144\", 7, 6),\n\t\tcreateSummaryMap(\n\t\t\t\"SUMMARY_2D\",\n\t\t\t\"SYNOP_PROG_K_ALL.png\",\n\t\t\t\"Zestawienie 2 dni\",\n\t\t\t\"Zestawienie prognozy synoptycznej na 2 dni\"\n\t\t),\n\t\tcreateSummaryMap(\n\t\t\t\"SUMMARY_6D\",\n\t\t\t\"SYNOP_PROG_S.png\",\n\t\t\t\"Zestawienie 6 dni\",\n\t\t\t\"Zestawienie prognozy synoptycznej na 6 dni\"\n\t\t)\n\t];\n\n\tvar state = {\n\t\tselectedId: maps[0].id,\n\t\timageCache: {},\n\t\timageLoadPromises: {},\n\t\timageToken: 0,\n\t\tforecastRunVersion: \"\",\n\t\trequestVersion: \"\",\n\t\timageSlots: {},\n\t\tallPreloaded: false,\n\t\tproductionBaseDate: null\n\t};\n\n\tfunction pad2(value) {\n\t\treturn String(value).padStart(2, \"0\");\n\t}\n\n\tfunction formatDateLabel(dayOffset) {\n\t\tvar date = getBaseForecastDate();\n\t\tdate.setDate(date.getDate() + dayOffset);\n\t\treturn pad2(date.getDate()) + \".\" + pad2(date.getMonth() + 1) + \".\" + date.getFullYear();\n\t}\n\n\tfunction getBaseForecastDate() {\n\t\tif (state.productionBaseDate instanceof Date) {\n\t\t\treturn new Date(state.productionBaseDate.getTime());\n\t\t}\n\t\tvar fallback = new Date();\n\t\tfallback.setHours(0, 0, 0, 0);\n\t\treturn fallback;\n\t}\n\n\tfunction toLocalMidnight(dateObj) {\n\t\tvar date = new Date(dateObj.getTime());\n\t\tdate.setHours(0, 0, 0, 0);\n\t\treturn date;\n\t}\n\n\tfunction getMapConfig(id) {\n\t\tfor (var i = 0; i < maps.length; i += 1) {\n\t\t\tif (maps[i].id === id) {\n\t\t\t\treturn maps[i];\n\t\t\t}\n\t\t}\n\t\treturn maps[0];\n\t}\n\n\tfunction getMapLabel(mapCfg) {\n\t\treturn mapCfg.getLabel ? mapCfg.getLabel() : mapCfg.label;\n\t}\n\n\tfunction getMapUrl(mapCfg) {\n\t\tvar basePath = mapCfg.basePath || DETAIL_BASE_PATH;\n\t\treturn basePath + \"\/\" + mapCfg.file;\n\t}\n\n\tfunction parseLastModifiedDate(headerValue) {\n\t\tif (!headerValue) {\n\t\t\treturn null;\n\t\t}\n\t\tvar parsed = new Date(headerValue);\n\t\tif (isNaN(parsed.getTime())) {\n\t\t\treturn null;\n\t\t}\n\t\treturn toLocalMidnight(parsed);\n\t}\n\n\tfunction updateProductionBaseDate(nextDate) {\n\t\tif (!(nextDate instanceof Date)) {\n\t\t\treturn false;\n\t\t}\n\t\tvar nextTs = nextDate.getTime();\n\t\tvar currentTs = state.productionBaseDate instanceof Date ? state.productionBaseDate.getTime() : null;\n\t\tif (currentTs === nextTs) {\n\t\t\treturn false;\n\t\t}\n\t\tstate.productionBaseDate = nextDate;\n\t\treturn true;\n\t}\n\n\tfunction fetchProductionBaseDate() {\n\t\tvar referenceUrl = getMapUrl(maps[0]);\n\t\treturn fetch(referenceUrl, { method: \"HEAD\", cache: \"no-store\" })\n\t\t\t.then(function(response) {\n\t\t\t\tif (!response || !response.ok) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t\treturn parseLastModifiedDate(response.headers.get(\"Last-Modified\"));\n\t\t\t})\n\t\t\t.catch(function() {\n\t\t\t\treturn null;\n\t\t\t});\n\t}\n\n\tfunction syncProductionBaseDate() {\n\t\treturn fetchProductionBaseDate().then(function(dateFromHeader) {\n\t\t\tif (!dateFromHeader) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn updateProductionBaseDate(dateFromHeader);\n\t\t});\n\t}\n\n\tfunction getForecastRunVersion() {\n\t\tvar now = new Date();\n\t\tvar y = now.getUTCFullYear();\n\t\tvar m = pad2(now.getUTCMonth() + 1);\n\t\tvar d = pad2(now.getUTCDate());\n\t\tvar h = now.getUTCHours();\n\t\tvar runHour = 0;\n\n\t\tif (h >= 18) {\n\t\t\trunHour = 18;\n\t\t} else if (h >= 12) {\n\t\t\trunHour = 12;\n\t\t} else if (h >= 6) {\n\t\t\trunHour = 6;\n\t\t}\n\n\t\treturn String(y) + m + d + \"T\" + pad2(runHour);\n\t}\n\n\tfunction syncForecastCacheVersion() {\n\t\tvar runVersion = getForecastRunVersion();\n\t\tif (state.forecastRunVersion === runVersion) {\n\t\t\treturn false;\n\t\t}\n\t\tstate.forecastRunVersion = runVersion;\n\t\tstate.requestVersion = runVersion;\n\t\tstate.imageCache = {};\n\t\tstate.imageLoadPromises = {};\n\t\tstate.imageToken += 1;\n\t\treturn true;\n\t}\n\n\tfunction getRequestUrl(url) {\n\t\tvar separator = url.indexOf(\"?\") === -1 ? \"?\" : \"&\";\n\t\treturn url + separator + \"v=\" + state.requestVersion;\n\t}\n\n\tfunction isImageLoaded(url) {\n\t\tvar cached = state.imageCache[url];\n\t\treturn !!(cached && cached.complete && cached.naturalWidth > 0);\n\t}\n\n\tfunction getImageLoadState(url) {\n\t\tif (isImageLoaded(url)) {\n\t\t\treturn \"loaded\";\n\t\t}\n\t\tif (state.imageLoadPromises[url]) {\n\t\t\treturn \"loading\";\n\t\t}\n\t\treturn \"pending\";\n\t}\n\n\tfunction ensureImage(url) {\n\t\tif (!url) {\n\t\t\treturn Promise.reject(new Error(\"Brak URL obrazu\"));\n\t\t}\n\t\tsyncForecastCacheVersion();\n\t\tif (isImageLoaded(url)) {\n\t\t\treturn Promise.resolve(state.imageCache[url]);\n\t\t}\n\t\tif (state.imageLoadPromises[url]) {\n\t\t\treturn state.imageLoadPromises[url];\n\t\t}\n\n\t\tstate.imageLoadPromises[url] = new Promise(function(resolve, reject) {\n\t\t\tvar loadVersion = state.requestVersion;\n\t\t\tvar img = new Image();\n\t\t\timg.onload = function() {\n\t\t\t\tif (loadVersion !== state.requestVersion) {\n\t\t\t\t\tdelete state.imageLoadPromises[url];\n\t\t\t\t\treject(new Error(\"Nieaktualny przebieg prognozy\"));\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tstate.imageCache[url] = img;\n\t\t\t\tdelete state.imageLoadPromises[url];\n\t\t\t\tresolve(img);\n\t\t\t};\n\t\t\timg.onerror = function() {\n\t\t\t\tdelete state.imageLoadPromises[url];\n\t\t\t\tdelete state.imageCache[url];\n\t\t\t\treject(new Error(\"Nie uda\u0142o si\u0119 za\u0142adowa\u0107 obrazu\"));\n\t\t\t};\n\t\t\timg.src = getRequestUrl(url);\n\t\t});\n\n\t\treturn state.imageLoadPromises[url];\n\t}\n\n\tfunction showStatus(msg) {\n\t\tvar el = document.getElementById(\"synopStatus\");\n\t\tif (!msg) {\n\t\t\tel.style.display = \"none\";\n\t\t\tel.textContent = \"\";\n\t\t\treturn;\n\t\t}\n\t\tel.style.display = \"block\";\n\t\tel.textContent = msg;\n\t}\n\n\tfunction showLoader(show) {\n\t\tvar loader = document.getElementById(\"synopLoader\");\n\t\tif (loader) {\n\t\t\tloader.style.display = show ? \"flex\" : \"none\";\n\t\t}\n\t}\n\n\tfunction createMapButton(mapCfg) {\n\t\tvar btn = document.createElement(\"button\");\n\t\tbtn.type = \"button\";\n\t\tbtn.textContent = getMapLabel(mapCfg);\n\t\tbtn.dataset.id = mapCfg.id;\n\t\tif (mapCfg.id === state.selectedId) {\n\t\t\tbtn.classList.add(\"active\");\n\t\t}\n\t\tvar loadState = getImageLoadState(getMapUrl(mapCfg));\n\t\tif (loadState === \"pending\" || loadState === \"loading\") {\n\t\t\tbtn.classList.add(\"preload-pending\");\n\t\t}\n\t\tif (loadState === \"loading\") {\n\t\t\tbtn.classList.add(\"preload-loading\");\n\t\t}\n\t\tif (loadState === \"loaded\") {\n\t\t\tbtn.classList.add(\"preload-loaded\");\n\t\t}\n\t\tbtn.addEventListener(\"click\", function() {\n\t\t\tselectMap(mapCfg.id);\n\t\t});\n\t\treturn btn;\n\t}\n\n\tfunction renderButtons() {\n\t\tvar dailyWrap = document.getElementById(\"synopDailyButtons\");\n\t\tvar summaryWrap = document.getElementById(\"synopSummaryButtons\");\n\t\tdailyWrap.innerHTML = \"\";\n\t\tsummaryWrap.innerHTML = \"\";\n\n\t\tmaps.forEach(function(mapCfg) {\n\t\t\tvar btn = createMapButton(mapCfg);\n\t\t\tif (mapCfg.group === \"daily\") {\n\t\t\t\tdailyWrap.appendChild(btn);\n\t\t\t} else {\n\t\t\t\tsummaryWrap.appendChild(btn);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction updateButtonsActiveState() {\n\t\tdocument.querySelectorAll(\"#synop-forecast-app .type-buttons button\").forEach(function(btn) {\n\t\t\tbtn.classList.toggle(\"active\", btn.dataset.id === state.selectedId);\n\t\t});\n\t}\n\n\tfunction openLightbox(src) {\n\t\tdocument.getElementById(\"synopLightboxImg\").src = src;\n\t\tdocument.getElementById(\"synopLightbox\").classList.add(\"active\");\n\t}\n\n\tfunction closeLightbox() {\n\t\tdocument.getElementById(\"synopLightbox\").classList.remove(\"active\");\n\t\tdocument.getElementById(\"synopLightboxImg\").src = \"\";\n\t}\n\n\tfunction buildImageSlots() {\n\t\tvar container = document.getElementById(\"synopImages\");\n\t\tcontainer.innerHTML = \"\";\n\t\tstate.imageSlots = {};\n\n\t\tmaps.forEach(function(mapCfg) {\n\t\t\tvar img = document.createElement(\"img\");\n\t\t\timg.className = \"synop-map-img\";\n\t\t\timg.dataset.id = mapCfg.id;\n\t\t\timg.alt = mapCfg.alt;\n\t\t\timg.addEventListener(\"click\", function() {\n\t\t\t\tif (mapCfg.id === state.selectedId) {\n\t\t\t\t\topenLightbox(img.currentSrc || img.src);\n\t\t\t\t}\n\t\t\t});\n\t\t\tcontainer.appendChild(img);\n\t\t\tstate.imageSlots[mapCfg.id] = img;\n\t\t});\n\t}\n\n\tfunction assignCachedImage(mapCfg, loaded) {\n\t\tvar img = state.imageSlots[mapCfg.id];\n\t\tif (!img || !loaded) {\n\t\t\treturn;\n\t\t}\n\t\timg.src = loaded.currentSrc || loaded.src;\n\t}\n\n\tfunction showMapById(id) {\n\t\tstate.selectedId = id;\n\t\tmaps.forEach(function(mapCfg) {\n\t\t\tvar img = state.imageSlots[mapCfg.id];\n\t\t\tif (!img) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar isActive = mapCfg.id === id;\n\t\t\timg.classList.toggle(\"active\", isActive);\n\t\t});\n\t\tupdateButtonsActiveState();\n\t\tshowLoader(false);\n\t\tshowStatus(\"\");\n\t}\n\n\tfunction updateImagesContainerHeight() {\n\t\tvar container = document.getElementById(\"synopImages\");\n\t\tvar maxHeight = 0;\n\t\tvar containerWidth = container.clientWidth || container.offsetWidth;\n\n\t\tmaps.forEach(function(mapCfg) {\n\t\t\tvar img = state.imageSlots[mapCfg.id];\n\t\t\tif (!img || !img.naturalWidth || !img.naturalHeight) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar scaledHeight = img.offsetHeight;\n\t\t\tif (!scaledHeight && containerWidth > 0) {\n\t\t\t\tscaledHeight = Math.round(img.naturalHeight * Math.min(1, containerWidth \/ img.naturalWidth));\n\t\t\t}\n\t\t\tmaxHeight = Math.max(maxHeight, scaledHeight);\n\t\t});\n\n\t\tif (maxHeight > 0) {\n\t\t\tcontainer.style.minHeight = Math.ceil(maxHeight + 10) + \"px\";\n\t\t}\n\t}\n\n\tfunction preloadAllMaps() {\n\t\treturn Promise.all(maps.map(function(mapCfg) {\n\t\t\tvar url = getMapUrl(mapCfg);\n\t\t\treturn ensureImage(url).then(function(loaded) {\n\t\t\t\tassignCachedImage(mapCfg, loaded);\n\t\t\t\treturn loaded;\n\t\t\t}).catch(function() {\n\t\t\t\treturn null;\n\t\t\t});\n\t\t})).then(function() {\n\t\t\tstate.allPreloaded = true;\n\t\t\tupdateImagesContainerHeight();\n\t\t\trenderButtons();\n\t\t});\n\t}\n\n\tfunction resetImageSlots() {\n\t\tmaps.forEach(function(mapCfg) {\n\t\t\tvar img = state.imageSlots[mapCfg.id];\n\t\t\tif (img) {\n\t\t\t\timg.removeAttribute(\"src\");\n\t\t\t\timg.classList.remove(\"active\");\n\t\t\t}\n\t\t});\n\t\tstate.allPreloaded = false;\n\t}\n\n\tfunction renderImage() {\n\t\tvar mapCfg = getMapConfig(state.selectedId);\n\t\tvar url = getMapUrl(mapCfg);\n\t\tvar token = ++state.imageToken;\n\n\t\tif (isImageLoaded(url)) {\n\t\t\tassignCachedImage(mapCfg, state.imageCache[url]);\n\t\t\tshowMapById(state.selectedId);\n\t\t\tif (!state.allPreloaded) {\n\t\t\t\tpreloadAllMaps();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tshowLoader(true);\n\t\tshowStatus(\"\");\n\t\tensureImage(url)\n\t\t\t.then(function(loaded) {\n\t\t\t\tif (token !== state.imageToken) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tassignCachedImage(mapCfg, loaded);\n\t\t\t\tshowMapById(state.selectedId);\n\t\t\t\tif (!state.allPreloaded) {\n\t\t\t\t\treturn preloadAllMaps();\n\t\t\t\t}\n\t\t\t})\n\t\t\t.catch(function() {\n\t\t\t\tif (token !== state.imageToken) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tshowLoader(false);\n\t\t\t\tshowStatus(\"Nie uda\u0142o si\u0119 wczyta\u0107 mapy: \" + getMapLabel(mapCfg));\n\t\t\t\trenderButtons();\n\t\t\t});\n\t}\n\n\tfunction selectMap(id) {\n\t\tif (state.selectedId === id) {\n\t\t\treturn;\n\t\t}\n\t\tif (state.allPreloaded && isImageLoaded(getMapUrl(getMapConfig(id)))) {\n\t\t\tshowMapById(id);\n\t\t\treturn;\n\t\t}\n\t\tstate.selectedId = id;\n\t\trenderImage();\n\t}\n\n\tfunction shiftSelection(delta) {\n\t\tvar currentIndex = 0;\n\t\tvar i;\n\t\tfor (i = 0; i < maps.length; i += 1) {\n\t\t\tif (maps[i].id === state.selectedId) {\n\t\t\t\tcurrentIndex = i;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar next = (currentIndex + delta + maps.length) % maps.length;\n\t\tselectMap(maps[next].id);\n\t}\n\n\tfunction setupEvents() {\n\t\tdocument.getElementById(\"synopLightbox\").addEventListener(\"click\", function(e) {\n\t\t\tif (e.target.id === \"synopLightbox\" || e.target.id === \"synopLightboxClose\") {\n\t\t\t\tcloseLightbox();\n\t\t\t}\n\t\t});\n\n\t\tdocument.addEventListener(\"keydown\", function(event) {\n\t\t\tvar tag = event.target && event.target.tagName ? event.target.tagName.toUpperCase() : \"\";\n\t\t\tif (tag === \"INPUT\" || tag === \"TEXTAREA\" || tag === \"SELECT\") {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"Escape\") {\n\t\t\t\tcloseLightbox();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowUp\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tshiftSelection(-1);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (event.key === \"ArrowDown\") {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tshiftSelection(1);\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction onForecastRunCheck() {\n\t\tif (syncForecastCacheVersion()) {\n\t\t\tresetImageSlots();\n\t\t\trenderButtons();\n\t\t\tshowLoader(true);\n\t\t\tpreloadAllMaps().then(function() {\n\t\t\t\tshowMapById(state.selectedId);\n\t\t\t});\n\t\t}\n\t\tsyncProductionBaseDate().then(function(changed) {\n\t\t\tif (changed) {\n\t\t\t\trenderButtons();\n\t\t\t}\n\t\t});\n\t}\n\n\tfunction init() {\n\t\tsyncForecastCacheVersion();\n\t\tsetupEvents();\n\t\tbuildImageSlots();\n\t\trenderButtons();\n\t\tshowLoader(true);\n\t\tPromise.all([syncProductionBaseDate(), preloadAllMaps()]).then(function(results) {\n\t\t\tif (results[0]) {\n\t\t\t\trenderButtons();\n\t\t\t}\n\t\t\tshowMapById(state.selectedId);\n\t\t});\n\t\tsetInterval(onForecastRunCheck, FORECAST_RUN_CHECK_MS);\n\t}\n\n\tif (document.readyState === \"loading\") {\n\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\n\t} else {\n\t\tinit();\n\t}\n})();\nconsole.log(\"Autor Bart\u0142omiej Sobczyk 2026\");\n<\/script>\n\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Prognoza szczeg\u00f3\u0142owa Zestawienia \ud83d\udca1 Skr\u00f3ty klawiszowe: \u2191 \u2193 | Poprzednia \/ nast\u0119pna mapa \u0141adowanie mapy&#8230; \u00d7<\/p>\n","protected":false},"author":11,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"0","ocean_second_sidebar":"0","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"off","ocean_display_header":"off","ocean_header_style":"custom","ocean_center_header_left_menu":"0","ocean_custom_header_template":"2993","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"0","ocean_menu_typo_font_family":"0","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"0"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.5.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PROGNOZA SYNOPTYCZNA - Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB<\/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:\/\/cmm.imgw.pl\/?page_id=19032\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PROGNOZA SYNOPTYCZNA - Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB\" \/>\n<meta property=\"og:description\" content=\"Prognoza szczeg\u00f3\u0142owa Zestawienia \ud83d\udca1 Skr\u00f3ty klawiszowe: \u2191 \u2193 | Poprzednia \/ nast\u0119pna mapa \u0141adowanie mapy&#8230; \u00d7\" \/>\n<meta property=\"og:url\" content=\"https:\/\/cmm.imgw.pl\/?page_id=19032\" \/>\n<meta property=\"og:site_name\" content=\"Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Meteoimgw\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-15T09:46:06+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cmm.imgw.pl\/wp-content\/uploads\/2025\/10\/MODELE_LOGO_UNIFIKACJA_v2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1356\" \/>\n\t<meta property=\"og:image:height\" content=\"365\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@IMGW_CMM\" \/>\n<meta name=\"twitter:label1\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data1\" content=\"2 minuty\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/cmm.imgw.pl\/?page_id=19032\",\"url\":\"https:\/\/cmm.imgw.pl\/?page_id=19032\",\"name\":\"PROGNOZA SYNOPTYCZNA - Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB\",\"isPartOf\":{\"@id\":\"https:\/\/cmm.imgw.pl\/#website\"},\"datePublished\":\"2022-11-18T11:33:40+00:00\",\"dateModified\":\"2026-07-15T09:46:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/cmm.imgw.pl\/?page_id=19032#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/cmm.imgw.pl\/?page_id=19032\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/cmm.imgw.pl\/?page_id=19032#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/cmm.imgw.pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PROGNOZA SYNOPTYCZNA\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/cmm.imgw.pl\/#website\",\"url\":\"https:\/\/cmm.imgw.pl\/\",\"name\":\"Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB\",\"description\":\"CMOK-LMM Laboratorium pe\u0142ni pa\u0144stwow\u0105 s\u0142u\u017cb\u0119 hydrologiczno-meteorologiczn\u0105 w zakresie numerycznych prognoz pogody, kt\u00f3rego zadaniem jest konsolidacja kompetencji w obszarze modelowania zjawisk pogodowych oraz dalszego rozwoju numerycznych modeli pogody (NMP).\",\"publisher\":{\"@id\":\"https:\/\/cmm.imgw.pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/cmm.imgw.pl\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/cmm.imgw.pl\/#organization\",\"name\":\"Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB\",\"url\":\"https:\/\/cmm.imgw.pl\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/Meteoimgw\/\",\"https:\/\/twitter.com\/IMGW_CMM\"],\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/cmm.imgw.pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/cmm.imgw.pl\/wp-content\/uploads\/2025\/10\/MODELE_LOGO_UNIFIKACJA_v2.png\",\"contentUrl\":\"https:\/\/cmm.imgw.pl\/wp-content\/uploads\/2025\/10\/MODELE_LOGO_UNIFIKACJA_v2.png\",\"width\":1356,\"height\":365,\"caption\":\"Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB\"},\"image\":{\"@id\":\"https:\/\/cmm.imgw.pl\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PROGNOZA SYNOPTYCZNA - Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB","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:\/\/cmm.imgw.pl\/?page_id=19032","og_locale":"pl_PL","og_type":"article","og_title":"PROGNOZA SYNOPTYCZNA - Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB","og_description":"Prognoza szczeg\u00f3\u0142owa Zestawienia \ud83d\udca1 Skr\u00f3ty klawiszowe: \u2191 \u2193 | Poprzednia \/ nast\u0119pna mapa \u0141adowanie mapy&#8230; \u00d7","og_url":"https:\/\/cmm.imgw.pl\/?page_id=19032","og_site_name":"Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB","article_publisher":"https:\/\/www.facebook.com\/Meteoimgw\/","article_modified_time":"2026-07-15T09:46:06+00:00","og_image":[{"width":1356,"height":365,"url":"https:\/\/cmm.imgw.pl\/wp-content\/uploads\/2025\/10\/MODELE_LOGO_UNIFIKACJA_v2.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_site":"@IMGW_CMM","twitter_misc":{"Szacowany czas czytania":"2 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/cmm.imgw.pl\/?page_id=19032","url":"https:\/\/cmm.imgw.pl\/?page_id=19032","name":"PROGNOZA SYNOPTYCZNA - Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB","isPartOf":{"@id":"https:\/\/cmm.imgw.pl\/#website"},"datePublished":"2022-11-18T11:33:40+00:00","dateModified":"2026-07-15T09:46:06+00:00","breadcrumb":{"@id":"https:\/\/cmm.imgw.pl\/?page_id=19032#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/cmm.imgw.pl\/?page_id=19032"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/cmm.imgw.pl\/?page_id=19032#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/cmm.imgw.pl\/"},{"@type":"ListItem","position":2,"name":"PROGNOZA SYNOPTYCZNA"}]},{"@type":"WebSite","@id":"https:\/\/cmm.imgw.pl\/#website","url":"https:\/\/cmm.imgw.pl\/","name":"Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB","description":"CMOK-LMM Laboratorium pe\u0142ni pa\u0144stwow\u0105 s\u0142u\u017cb\u0119 hydrologiczno-meteorologiczn\u0105 w zakresie numerycznych prognoz pogody, kt\u00f3rego zadaniem jest konsolidacja kompetencji w obszarze modelowania zjawisk pogodowych oraz dalszego rozwoju numerycznych modeli pogody (NMP).","publisher":{"@id":"https:\/\/cmm.imgw.pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/cmm.imgw.pl\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/cmm.imgw.pl\/#organization","name":"Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB","url":"https:\/\/cmm.imgw.pl\/","sameAs":["https:\/\/www.facebook.com\/Meteoimgw\/","https:\/\/twitter.com\/IMGW_CMM"],"logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/cmm.imgw.pl\/#\/schema\/logo\/image\/","url":"https:\/\/cmm.imgw.pl\/wp-content\/uploads\/2025\/10\/MODELE_LOGO_UNIFIKACJA_v2.png","contentUrl":"https:\/\/cmm.imgw.pl\/wp-content\/uploads\/2025\/10\/MODELE_LOGO_UNIFIKACJA_v2.png","width":1356,"height":365,"caption":"Laboratorium Modelowania Meteorologicznego CMOK IMGW-PIB"},"image":{"@id":"https:\/\/cmm.imgw.pl\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/cmm.imgw.pl\/index.php?rest_route=\/wp\/v2\/pages\/19032"}],"collection":[{"href":"https:\/\/cmm.imgw.pl\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cmm.imgw.pl\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cmm.imgw.pl\/index.php?rest_route=\/wp\/v2\/users\/11"}],"replies":[{"embeddable":true,"href":"https:\/\/cmm.imgw.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19032"}],"version-history":[{"count":9,"href":"https:\/\/cmm.imgw.pl\/index.php?rest_route=\/wp\/v2\/pages\/19032\/revisions"}],"predecessor-version":[{"id":50800,"href":"https:\/\/cmm.imgw.pl\/index.php?rest_route=\/wp\/v2\/pages\/19032\/revisions\/50800"}],"wp:attachment":[{"href":"https:\/\/cmm.imgw.pl\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}