{"id":2031,"date":"2026-09-29T19:33:13","date_gmt":"2026-09-29T17:33:13","guid":{"rendered":"https:\/\/goranjuric-design.hr\/?page_id=2031"},"modified":"2026-09-29T19:33:13","modified_gmt":"2026-09-29T17:33:13","slug":"lekenik-meteo","status":"publish","type":"page","link":"https:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/","title":{"rendered":"Lekenik Meteo"},"content":{"rendered":"<p><div\n    id=\"lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb\"\n    class=\"lkmeteo\"\n    data-boundary=\"https:\/\/goranjuric-design.hr\/wp-content\/plugins\/lekenik-meteo\/assets\/lekenik-boundary.geojson\"\n    data-endpoint=\"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/lk-meteo\/v1\/snapshot\"\n    data-water-range=\"24h\"\n>\n    <style>\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb {\n            --lk-blue:#0b3d78;\n            --lk-blue-2:#145aa5;\n            --lk-blue-3:#2b67b0;\n            --lk-text:#111827;\n            --lk-muted:#6B7280;\n            --lk-line:#E5E7EB;\n            --lk-card:#ffffff;\n            --lk-bg:#F3F4F6;\n            --lk-shadow:0 10px 30px rgba(0,0,0,0.04);\n            --lk-good:#23a565;\n            --lk-warn:#ee9b19;\n            --lk-danger:#d83838;\n            font-family:\"Roboto\", \"Inter\", -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n            color:var(--lk-text);\n            background:var(--lk-bg);\n            border-radius:0;\n            overflow:hidden;\n            font-kerning:normal;\n            font-variant-numeric:tabular-nums lining-nums;\n            font-feature-settings:\"tnum\" 1, \"kern\" 1;\n            text-rendering:optimizeLegibility;\n            -webkit-font-smoothing:antialiased;\n            -moz-osx-font-smoothing:grayscale;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb * { box-sizing:border-box; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb a { color:inherit; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-play {\n            border:0;\n            cursor:pointer;\n            color:#fff;\n            font-family:\"Roboto\", \"Inter\", sans-serif;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-play:disabled {\n            cursor:wait;\n            opacity:.55;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-source {\n            margin-top:4px;\n            font-size:10px;\n            color:rgba(255,255,255,.74);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-place-weather {\n            display:inline-flex;\n            align-items:center;\n            justify-content:center;\n            gap:5px;\n            margin-top:4px;\n            min-height:24px;\n            padding:4px 8px;\n            background:rgba(17,24,39,0.85);\n            backdrop-filter: blur(4px);\n            border:1px solid rgba(255,255,255,.2);\n            border-radius:12px;\n            color:#fff;\n            font-size:12px;\n            font-weight:600;\n            text-shadow:none;\n            white-space:nowrap;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-weather-symbol {\n            display:inline-flex;\n            align-items:center;\n            justify-content:center;\n            min-width:18px;\n            font-size:16px;\n            line-height:1;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-weather-symbol svg {\n            width:1.2em; height:1.2em;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wind-arrow {\n            display:inline-flex;\n            align-items:center;\n            justify-content:center;\n            width:16px;\n            height:16px;\n        }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wind-arrow svg {\n            width:100%;\n            height:100%;\n            fill:currentColor;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-head {\n            display:flex;\n            align-items:center;\n            justify-content:space-between;\n            gap:16px;\n            padding:14px 24px;\n            background:#ffffff;\n            border-bottom:1px solid var(--lk-line);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-brand {\n            display:flex;\n            align-items:center;\n            gap:16px;\n            min-width:0;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-crest {\n            width:56px;\n            height:auto;\n            max-height:72px;\n            object-fit:contain;\n            display:block;\n            flex:0 0 auto;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-title {\n            margin:0;\n            color:#0d4f91;\n            font-size:38px;\n            line-height:1.12;\n            font-weight:600;\n            letter-spacing:0;\n            text-transform:none;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-subtitle {\n            margin-top:6px;\n            color:#2e74bd;\n            font-size:20px;\n            line-height:1.2;\n            font-weight:400;\n            letter-spacing:0;\n            text-transform:uppercase;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-updated {\n            color:#7a8898;\n            font-size:12px;\n            font-weight:600;\n            white-space:nowrap;\n            text-align:right;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-updated strong {\n            color:#0d3974;\n            font-size:13px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-wrap {\n            position:relative;\n            padding:14px 14px 0;\n            background:var(--lk-bg);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-frame {\n            position:relative;\n            height:clamp(460px, calc(100vh - 170px), 820px);\n            height:clamp(460px, calc(100svh - 170px), 820px);\n            background:#dfe8ef;\n            border-radius:24px;\n            overflow:hidden;\n            box-shadow:var(--lk-shadow);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map {\n            position:absolute;\n            inset:0;\n            width:100%;\n            height:100%;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-menu-wrap {\n            padding:0 14px;\n            background:var(--lk-bg);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-menu {\n            display:grid;\n            grid-template-columns:repeat(4,minmax(0,1fr));\n            background:#ffffff;\n            border:1px solid var(--lk-line);\n            border-radius:20px;\n            box-shadow:0 1px 0 rgba(13,79,145,.06);\n            overflow: hidden;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-btn,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-link {\n            appearance:none;\n            display:flex;\n            align-items:center;\n            justify-content:center;\n            gap:7px;\n            min-width:0;\n            min-height:48px;\n            padding:8px 9px;\n            border:0;\n            border-right:1px solid var(--lk-line);\n            background:#ffffff;\n            color:#16385f;\n            text-decoration:none;\n            font-family:inherit;\n            font-size:12px;\n            font-weight:600;\n            line-height:1.15;\n            text-align:center;\n            cursor:pointer;\n            transition:background .14s ease,color .14s ease;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-menu > :last-child {\n            border-right:0;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-btn:hover,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-link:hover {\n            background:#f1f6fb;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-btn.is-active {\n            background:var(--lk-blue-2);\n            color:#fff;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-icon {\n            display:flex;\n            align-items:center;\n            font-size:16px;\n            line-height:1;\n            flex:0 0 auto;\n        }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-icon svg { width:1.2em; height:1.2em; }\n\n        \/* Floating Radar Controls *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-controls {\n            display:none;\n            position:absolute;\n            bottom:24px;\n            left:50%;\n            transform:translateX(-50%);\n            z-index:999;\n            width:90%;\n            max-width:540px;\n            margin:0;\n            padding:12px 20px 14px;\n            background:rgba(13, 79, 145, 0.85);\n            backdrop-filter:blur(12px);\n            -webkit-backdrop-filter:blur(12px);\n            border-radius:100px;\n            color:#fff;\n            border:1px solid rgba(255,255,255,0.15);\n            box-shadow:0 8px 32px rgba(0,0,0,0.25);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-controls.is-visible {\n            display:block;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-row {\n            display:grid;\n            grid-template-columns:36px 48px minmax(0,1fr) 48px 58px;\n            gap:12px;\n            align-items:center;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-play {\n            width:36px;\n            height:36px;\n            display:flex;\n            align-items:center;\n            justify-content:center;\n            border:none;\n            border-radius:50%;\n            background:rgba(255,255,255,0.2);\n            color:#fff;\n            font-family:inherit;\n            font-size:14px;\n            cursor:pointer;\n            transition:background 0.2s;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-play:hover:not(:disabled) {\n            background:rgba(255,255,255,0.3);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-play:disabled {\n            cursor:wait;\n            opacity:.45;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-time,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-current {\n            font-size:11px;\n            font-weight:600;\n            color:rgba(255,255,255,.82);\n            text-align:center;\n            white-space:nowrap;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-current {\n            color:#fff;\n            font-size:12px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-range {\n            width:100%;\n            min-width:0;\n            height:36px;\n            margin:0;\n            accent-color:#66a9ff;\n            cursor:pointer;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-source {\n            margin-top:6px;\n            font-size:10px;\n            color:rgba(255,255,255,.68);\n            text-align:center;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-grid {\n            display:grid;\n            grid-template-columns:repeat(12, minmax(0, 1fr));\n            gap:24px;\n            padding:24px 14px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-3 { grid-column:span 3; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-4 { grid-column:span 4; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-5 { grid-column:span 5; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-12 { grid-column:span 12; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card {\n            background:var(--lk-card);\n            border:1px solid var(--lk-line);\n            border-radius:24px;\n            padding:24px;\n            min-width:0;\n            box-shadow:var(--lk-shadow);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-title {\n            margin:0 0 16px;\n            color:#164782;\n            font-size:14px;\n            font-weight:600;\n            letter-spacing:.02em;\n            text-transform:uppercase;\n            display:flex;\n            align-items:center;\n            gap:8px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now {\n            display:flex;\n            align-items:center;\n            gap:20px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-icon {\n            font-size:72px;\n            line-height:1;\n            display:flex;\n            align-items:center;\n            justify-content:center;\n        }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-icon svg { width:1em; height:1em; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-temp {\n            font-size:64px;\n            line-height:1;\n            font-weight:600;\n            color:#093b7a;\n            letter-spacing:-.04em;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-muted {\n            color:var(--lk-muted);\n            font-size:13px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-kv {\n            display:flex;\n            justify-content:space-between;\n            gap:10px;\n            padding:10px 0;\n            border-bottom:1px solid #edf2f6;\n            font-size:14px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-kv:last-child { border-bottom:0; }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-kv-label {\n            display:flex; align-items:center; gap:6px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-days {\n            display:grid;\n            grid-template-columns:repeat(7, minmax(72px, 1fr));\n            gap:8px;\n            overflow-x:auto;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-day {\n            padding:12px 8px;\n            background:#f6f8fa;\n            border-radius:16px;\n            text-align:center;\n            min-width:72px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-day.is-today { background:#fffaf4; box-shadow:inset 0 4px 0 #ef7d22; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-day-top { font-weight:600; color:#16385f; font-size:12px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-day-date { font-size:11px; color:#8493a2; margin-top:2px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-day-icon { font-size:36px; margin:12px 0; display:flex; justify-content:center; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-day-icon svg { width:1em; height:1em; }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-max { color:#e23d38; font-size:18px; font-weight:600; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-min { color:#205ba2; font-size:18px; font-weight:600; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-precip-small { color:#2560a8; font-size:12px; margin-top:8px; display:block; }\n\n        \/* =========================================================\n         *  VODOSTAJI \u2013 zajedni\u010dki raspored kartice (Kupa + Odra)\n         *  Jedan sustav: naziv \u2192 svje\u017eina \u2192 razina \u2192 promjena \u2192\n         *  traka pragova \u2192 status \u2192 graf.\n         *  Podloga kartice = rang rasta (naran\u010dasta\u2192crvena za najve\u0107i rast);\n         *  traka pragova i oznaka stanja = slu\u017ebeno stanje obrane od poplava.\n         * ========================================================= *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap {\n            display:grid;\n            grid-template-columns:repeat(5,minmax(0,1fr));\n            gap:16px;\n            align-items:stretch;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap.lk-water-secondary {\n            grid-template-columns:repeat(2,minmax(0,1fr));\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-group-head {\n            display:flex;\n            align-items:center;\n            justify-content:space-between;\n            gap:10px 14px;\n            flex-wrap:wrap;\n            margin:0 0 16px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-group-head .lk-card-title { margin:0; }\n\n        \/* Ozbiljan, ravni segmentirani prekida\u010d (bez oslanjanja na zaobljene rubove, jer ih\n           globalno pravilo #lkmeteo... border-radius:0 !important ionako uklanja). Razdjelnici\n           izme\u0111u tipki i puna tamnoplava pozadina aktivne tipke daju jasan, \"kontrolni\" izgled\n           umjesto dojma nedovr\u0161enog elementa. *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-range-wrap { display:inline-flex; flex-direction:column; gap:6px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-range-label {\n            color:#6f8398;\n            font-size:11px;\n            line-height:1.2;\n            font-weight:700;\n            letter-spacing:.06em;\n            text-transform:uppercase;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-range {\n            display:inline-flex;\n            border:1px solid #cfd9e3;\n            background:#f7f9fb;\n            overflow:hidden;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-range button {\n            appearance:none;\n            border:0;\n            border-right:1px solid #cfd9e3;\n            background:transparent;\n            min-height:34px;\n            padding:7px 12px;\n            font:inherit;\n            font-size:12px;\n            font-weight:700;\n            color:#4d6178;\n            cursor:pointer;\n            white-space:nowrap;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-range button:last-child { border-right:0; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-range button:hover:not(.is-active) { background:#eef3f8; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-range button.is-active {\n            background:#0b3d78;\n            color:#fff;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-range button:focus-visible,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-node:focus-visible,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-link:focus-visible,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help summary:focus-visible {\n            outline:2px solid #145aa5;\n            outline-offset:2px;\n        }\n\n        \/* ---- Pregled toka rijeke (uzvodno \u2192 nizvodno) ---- *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river {\n            margin:0 0 16px;\n            padding:14px 14px 12px;\n            border:1px solid #e7edf4;\n            border-radius:22px;\n            background:#fff;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dir {\n            display:flex;\n            justify-content:space-between;\n            gap:8px;\n            margin-bottom:10px;\n            color:#6f8398;\n            font-size:10.5px;\n            line-height:1.2;\n            font-weight:700;\n            letter-spacing:.09em;\n            text-transform:uppercase;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dir-mid { color:#9aabbb; font-weight:600; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-nodes {\n            position:relative;\n            display:grid;\n            grid-template-columns:repeat(5,minmax(0,1fr));\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-nodes::before {\n            content:'';\n            position:absolute;\n            left:0;\n            right:6px;\n            top:9px;\n            height:3px;\n            border-radius:3px;\n            background:linear-gradient(90deg,#d2e3f4 0%,#7fa9d4 100%);\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-nodes::after {\n            content:'';\n            position:absolute;\n            right:0;\n            top:4px;\n            border-left:9px solid #7fa9d4;\n            border-top:6.5px solid transparent;\n            border-bottom:6.5px solid transparent;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-node {\n            appearance:none;\n            position:relative;\n            display:flex;\n            flex-direction:column;\n            align-items:center;\n            gap:2px;\n            min-width:0;\n            padding:0 1px;\n            border:0;\n            background:none;\n            font:inherit;\n            color:inherit;\n            text-align:center;\n            cursor:pointer;\n            border-radius:12px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dot {\n            position:relative;\n            z-index:1;\n            width:21px;\n            height:21px;\n            box-sizing:border-box;\n            border-radius:50%;\n            background:#fff;\n            border:5px solid #7fa9d4;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dot.is-info { border-color:#a9b8c7; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dot.is-preparation { border-color:#e2b619; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dot.is-regular { border-color:#ee8a2b; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dot.is-extraordinary,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dot.is-emergency { border-color:#d24545; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dot.is-unavailable { border:4px dashed #c3ced9; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-name {\n            margin-top:7px;\n            max-width:100%;\n            color:#4d6178;\n            font-size:11.5px;\n            line-height:1.2;\n            font-weight:600;\n            overflow-wrap:anywhere;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-level {\n            color:#0b3d78;\n            font-size:20px;\n            line-height:1.1;\n            font-weight:800;\n            letter-spacing:-.03em;\n            white-space:nowrap;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-level small {\n            margin-left:2px;\n            color:#6b7f93;\n            font-size:10.5px;\n            font-weight:600;\n            letter-spacing:0;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-chg {\n            min-height:15px;\n            color:#5b6f82;\n            font-size:11.5px;\n            line-height:1.3;\n            font-weight:700;\n            white-space:nowrap;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-chg.is-up { color:#d96e16; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-chg.is-down { color:#2678ad; }\n\n        \/* ---- Kartica postaje ---- *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box {\n            position:relative;\n            display:flex;\n            flex-direction:column;\n            border:1px solid #e7edf4;\n            border-radius:28px;\n            padding:22px;\n            background:linear-gradient(180deg,#ffffff 0%,#f8fafc 100%);\n            box-shadow:0 8px 24px rgba(17,24,39,0.04);\n            scroll-margin-top:72px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box:focus { outline:none; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box:focus-visible { outline:2px solid #145aa5; outline-offset:3px; }\n\n        \/* Rang rasta (dinami\u010dki): 1. mjesto = naran\u010dasta koja s ja\u010dinom porasta prelazi u crvenu\n           (boje ra\u010duna JS preko --lk-rise-*), 2. = be\u017e, 3. = svjetloplava. *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-1 {\n            background:linear-gradient(180deg,var(--lk-rise-bg-1,#fff8ef) 0%,var(--lk-rise-bg-2,#fff1e2) 100%);\n            border-color:var(--lk-rise-border,#efbd8d);\n            box-shadow:0 10px 28px var(--lk-rise-shadow,rgba(239,125,34,0.10));\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-2 {\n            background:linear-gradient(180deg,#fffdf8 0%,#f7efe4 100%);\n            border-color:#ead8c2;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-3 {\n            background:linear-gradient(180deg,#f8fbff 0%,#edf5fc 100%);\n            border-color:#cfe1f1;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-1 .lk-water-history-area { fill:var(--lk-rise-accent,#ef7d22); }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-1 .lk-water-history-band { fill:var(--lk-rise-accent,#ef7d22); opacity:.18; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-1 .lk-water-history-line { stroke:var(--lk-rise-accent,#ef7d22); }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-1 .lk-water-history-dot { fill:var(--lk-rise-accent,#ef7d22); }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-2 .lk-water-history-area { fill:#b78b5c; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-2 .lk-water-history-band { fill:#b78b5c; opacity:.18; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-2 .lk-water-history-line { stroke:#b78b5c; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-2 .lk-water-history-dot { fill:#b78b5c; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-3 .lk-water-history-area { fill:#5f93c5; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-3 .lk-water-history-band { fill:#5f93c5; opacity:.18; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-3 .lk-water-history-line { stroke:#5f93c5; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-3 .lk-water-history-dot { fill:#5f93c5; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-top {\n            display:flex;\n            align-items:center;\n            justify-content:space-between;\n            flex-wrap:wrap;\n            gap:6px 10px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-name {\n            font-size:17px;\n            line-height:1.2;\n            font-weight:600;\n            letter-spacing:-0.01em;\n            color:#16385f;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-pos {\n            padding:3px 9px;\n            border-radius:999px;\n            background:#eef3f8;\n            color:#5f748a;\n            font-size:10.5px;\n            line-height:1.3;\n            font-weight:700;\n            letter-spacing:.06em;\n            text-transform:uppercase;\n            white-space:nowrap;\n        }\n\n        \/* Svje\u017eina mjerenja *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-fresh {\n            display:flex;\n            align-items:flex-start;\n            gap:7px;\n            margin-top:7px;\n            color:#5b6f82;\n            font-size:12.5px;\n            line-height:1.4;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-fresh-dot {\n            flex:0 0 8px;\n            width:8px;\n            height:8px;\n            margin-top:5px;\n            border-radius:50%;\n            background:#2ea34a;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-fresh.is-latest .lk-fresh-dot { background:#e2a419; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-fresh.is-stale .lk-fresh-dot { background:#a9b8c7; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-fresh.is-stale { color:#8a5a12; }\n\n        \/* 1. Glavni vodostaj + strelica smjera *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-levelrow {\n            display:flex;\n            align-items:flex-end;\n            justify-content:space-between;\n            gap:10px;\n            margin-top:14px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-level {\n            display:flex;\n            align-items:flex-end;\n            gap:8px;\n            line-height:1;\n            white-space:nowrap;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-level-value {\n            display:inline-block;\n            font-size:48px;\n            line-height:.88;\n            font-weight:800;\n            letter-spacing:-0.055em;\n            color:#0b3d78;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-level-unit {\n            display:inline-block;\n            padding-bottom:6px;\n            font-size:18px;\n            line-height:1;\n            font-weight:600;\n            color:#536b82;\n            letter-spacing:0;\n            text-transform:lowercase;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-level-unavailable {\n            font-size:17px;\n            line-height:1.3;\n            font-weight:600;\n            color:#7d8d9c;\n        }\n\n        \/* Oznaka ranga rasta (plava\/be\u017e\/naran\u010dasta-crvena boja prati podlogu kartice) *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-rank {\n            display:none;\n            align-self:flex-start;\n            margin-top:12px;\n            padding:5px 11px;\n            border-radius:999px;\n            font-size:11.5px;\n            line-height:1.25;\n            font-weight:700;\n            letter-spacing:.02em;\n            white-space:nowrap;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-rank.is-visible { display:inline-flex; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-1 .lk-water-rank { background:var(--lk-rise-accent,#ef7d22); color:#fff; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-2 .lk-water-rank { background:#f0e2cf; color:#7a5730; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-rise-3 .lk-water-rank { background:#dfeaf6; color:#2d5f93; }\n\n        \/* 2. Promjena \u2013 uvijek s vremenskom osnovom *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-changes {\n            margin-top:16px;\n            border-top:1px solid #e7edf4;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change {\n            display:flex;\n            align-items:center;\n            justify-content:space-between;\n            gap:10px;\n            padding:8px 0;\n            border-bottom:1px solid #eef2f6;\n            color:#5b6f82;\n            font-size:12.5px;\n            line-height:1.3;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change strong {\n            color:#0b3d78;\n            font-size:14px;\n            font-weight:700;\n            white-space:nowrap;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change strong {\n            display:inline-flex;\n            align-items:center;\n            gap:6px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change strong b { font-weight:700; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change strong svg { flex:0 0 17px; }\n        \/* Boje smjera: rast = naran\u010dasta, pad = plava, stagnacija = siva (kao u detaljnom bloku postaje). *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change strong.is-up { color:#d96e16; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change strong.is-down { color:#2678ad; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change strong.is-flat { color:#71849a; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change strong.is-none { color:#94a3b8; font-weight:600; }\n\n        \/* 3. Traka pragova obrane od poplava *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge { margin-top:16px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-track {\n            position:relative;\n            height:10px;\n            border-radius:999px;\n            background:#d6e6f5;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-tick {\n            position:absolute;\n            top:0;\n            bottom:0;\n            width:2px;\n            margin-left:-1px;\n            background:#fff;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-marker {\n            position:absolute;\n            top:50%;\n            width:18px;\n            height:18px;\n            box-sizing:border-box;\n            margin:-9px 0 0 -9px;\n            border-radius:50%;\n            background:#fff;\n            border:3px solid #0b3d78;\n            box-shadow:0 2px 6px rgba(11,61,120,.35);\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-caption {\n            display:flex;\n            align-items:baseline;\n            justify-content:space-between;\n            gap:8px;\n            margin-top:10px;\n            color:#5b6f82;\n            font-size:12.5px;\n            line-height:1.3;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-caption strong {\n            color:#0b3d78;\n            font-size:13.5px;\n            font-weight:700;\n            white-space:nowrap;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-none {\n            margin-top:16px;\n            color:#7d8e9f;\n            font-size:12.5px;\n            line-height:1.4;\n        }\n\n        \/* 5. Dodatni podaci: DHMZ \/ protok \/ temperatura vode *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-extra {\n            margin-top:12px;\n            color:#50677e;\n            font-size:12.5px;\n            line-height:1.45;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-extra:empty { display:none; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-link {\n            appearance:none;\n            align-self:flex-start;\n            margin-top:12px;\n            padding:0;\n            border:0;\n            background:none;\n            font:inherit;\n            font-size:12.5px;\n            font-weight:700;\n            color:#145aa5;\n            text-decoration:underline;\n            text-underline-offset:3px;\n            cursor:pointer;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-changes:empty { display:none; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change.is-selected { background:#eef4fa; margin:0 -8px; padding-left:8px; padding-right:8px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-change.is-selected > span { color:#16385f; font-weight:600; }\n\n        \/* Velika strelica uz glavni broj: smjer i ja\u010dina promjene od zadnjeg mjerenja. *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-arrow {\n            display:none;\n            flex:0 0 44px;\n            align-items:center;\n            justify-content:center;\n            width:44px;\n            height:44px;\n            background:#eef2f6;\n            color:#71849a;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-arrow.is-visible { display:inline-flex; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-arrow.is-up { background:#fdeedf; color:#d96e16; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-arrow.is-down { background:#e3eff8; color:#2678ad; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-arrow svg { width:26px; height:26px; }\n\n        \/* Najve\u0107i brojevi: Bahnschrift Condensed 500 (Windows). Na sustavima bez Bahnschrifta\n           koristi se najbli\u017ei uski sistemski font. *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-level-value,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-level,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-temp,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-number,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-uv-number,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpi-value.is-main,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-value {\n            font-family:\"Bahnschrift Condensed\",\"Bahnschrift\",\"Roboto Condensed\",\"Arial Narrow\",\"Helvetica Neue\",sans-serif !important;\n            font-stretch:condensed;\n            font-weight:500 !important;\n            letter-spacing:-0.005em !important;\n            font-variant-numeric:tabular-nums;\n        }\n\n\/* 5. STATUS JE UVIJEK POSLJEDNJA INFORMACIJA *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-status-wrap {\n    margin-top:16px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-status {\n    display:inline-flex;\n    align-items:center;\n    gap:8px;\n    margin:0;\n    padding:9px 13px;\n    border:1px solid #dbe5ee;\n    border-radius:999px;\n    background:#f4f8fb;\n    color:#385a73;\n    font-size:11px;\n    line-height:1.15;\n    font-weight:700;\n    letter-spacing:.035em;\n    text-transform:uppercase;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-status-icon {\n    display:inline-flex;\n    align-items:center;\n    justify-content:center;\n    width:19px;\n    height:19px;\n    border-radius:50%;\n    background:#fff;\n    border:1px solid #dbe5ee;\n    flex:0 0 19px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-status-text {\n    line-height:1.15;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-status.is-warn {\n    background:#fff8eb;\n    border-color:#f3ddb4;\n    color:#9b6b10;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-status.is-danger {\n    background:#fff2f2;\n    border-color:#efcaca;\n    color:#b54747;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-measure-time {\n    margin-top:14px;\n    color:#94a3b8;\n    font-size:11px;\n    line-height:1.35;\n}\n\n\n\/* 6. MINI GRAFOVI VODOSTAJA \u2013 prekida\u010d 24 h \/ 30 dana (jedan graf po kartici) *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history {\n    margin-top:auto;\n    padding-top:16px;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb[data-water-range=\"24h\"] .lk-water-history-block.is-daily { display:none; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb[data-water-range=\"30d\"] .lk-water-history-block.is-hourly { display:none; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-block {\n    padding-top:14px;\n    border-top:1px solid #e7edf4;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-head {\n    display:flex;\n    flex-direction:column;\n    align-items:flex-start;\n    gap:3px;\n    margin-bottom:8px;\n    color:#6f8398;\n    font-size:11px;\n    line-height:1.25;\n    font-weight:700;\n    letter-spacing:.03em;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-stats {\n    display:block;\n    width:100%;\n    color:#5b6f82;\n    font-size:12px;\n    font-weight:500;\n    letter-spacing:0;\n    line-height:1.35;\n    white-space:normal;\n    overflow-wrap:anywhere;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-chart {\n    display:block;\n    width:100%;\n    height:64px;\n    overflow:visible;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-block.is-hourly .lk-water-history-chart { height:64px; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-grid {\n    stroke:#e6edf4;\n    stroke-width:1;\n    vector-effect:non-scaling-stroke;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-area { fill:#2e74bd; opacity:.08; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-band { fill:#2e74bd; opacity:.16; stroke:none; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-line {\n    fill:none;\n    stroke:#2e74bd;\n    stroke-width:2;\n    stroke-linecap:round;\n    stroke-linejoin:round;\n    vector-effect:non-scaling-stroke;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-dot { fill:#2e74bd; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-threshold-line {\n    stroke:#d4a017;\n    stroke-width:1;\n    stroke-dasharray:3 3;\n    opacity:.85;\n    vector-effect:non-scaling-stroke;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-threshold {\n    margin-top:6px;\n    color:#6f8398;\n    font-size:11.5px;\n    line-height:1.3;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-threshold strong { color:#4d6178; font-weight:700; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-dates {\n    display:flex;\n    justify-content:space-between;\n    gap:8px;\n    margin-top:3px;\n    color:#8595a5;\n    font-size:11px;\n    line-height:1.2;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-history-empty {\n    min-height:64px;\n    display:flex;\n    align-items:center;\n    color:#8595a5;\n    font-size:12px;\n    line-height:1.4;\n}\n\n\/* Legenda pragova + \u201eKako \u010ditati prikaz\u201d *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-legend {\n    display:flex;\n    flex-wrap:wrap;\n    align-items:center;\n    gap:6px 14px;\n    margin-top:18px;\n    color:#5b6f82;\n    font-size:12px;\n    line-height:1.3;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-legend-title { color:#4d6178; font-weight:700; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-gauge-legend .lk-swatch {\n    display:inline-block;\n    width:16px;\n    height:8px;\n    margin-right:6px;\n    border-radius:4px;\n    vertical-align:middle;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help {\n    margin-top:14px;\n    padding-top:12px;\n    border-top:1px solid #e7edf4;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help summary {\n    display:inline-flex;\n    align-items:center;\n    gap:8px;\n    color:#164782;\n    font-size:13px;\n    font-weight:700;\n    cursor:pointer;\n    list-style:none;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help summary::-webkit-details-marker { display:none; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help summary::before {\n    content:'i';\n    display:inline-flex;\n    align-items:center;\n    justify-content:center;\n    width:18px;\n    height:18px;\n    border-radius:50%;\n    border:1.5px solid #164782;\n    border-radius:0;\n    font-size:11px;\n    font-weight:800;\n    font-style:normal;\n    line-height:1;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help[open] summary::before { background:#164782; color:#fff; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help ul {\n    margin:10px 0 0;\n    padding-left:18px;\n    color:#50677e;\n    font-size:12.5px;\n    line-height:1.55;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help li + li { margin-top:5px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help .lk-source-note { margin-top:10px; }\n\n\/* Kad je barem jedna postaja rangirana, red s oznakom zauzima mjesto na svim karticama u mre\u017ei (poravnanje razina). *\/\n@media (min-width:701px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-river.has-rank .lk-water-rank { display:inline-flex; align-items:center; min-height:27px; visibility:hidden; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-river.has-rank .lk-water-rank.is-visible { visibility:visible; }\n}\n@media (min-width:701px) and (max-width:1100px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap.lk-water-river { grid-template-columns:repeat(6,minmax(0,1fr)); }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap.lk-water-river .lk-water-box { grid-column:span 2; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap.lk-water-river .lk-water-box:nth-child(n+4) { grid-column:span 3; }\n}\n\n\/* \u0160iroki zaslon: pregled toka postaje traka to\u010daka to\u010dno iznad kartica *\/\n@media (min-width:1101px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river { padding:0; border:0; border-radius:0; background:transparent; margin-bottom:10px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-nodes { gap:16px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-name,\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-level,\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-chg { display:none; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dir { margin-bottom:8px; }\n}\n\n@media (max-width:650px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river { padding:12px 8px 10px; border-radius:20px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-dir { padding:0 6px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-name { font-size:10.5px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-level { font-size:17px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-level small { display:none; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-river-chg { font-size:11px; }\n}\n\n\/* 7. DETALJNA POSTAJA \u2013 detaljni hidrolo\u0161ki prikaz *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail {\n    padding:24px;\n    overflow:hidden;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail-charts {\n    padding:24px;\n    overflow:hidden;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail-charts .lk-det-section {\n    margin-top:0;\n    padding-top:0;\n    border-top:0;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-detail-head {\n    display:flex;\n    justify-content:space-between;\n    align-items:flex-start;\n    gap:20px;\n    margin-bottom:18px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-detail-title {\n    margin:0;\n    color:#173f73;\n    font-size:18px;\n    line-height:1.2;\n    font-weight:750;\n    letter-spacing:.01em;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-detail-subtitle {\n    margin-top:5px;\n    color:#7c8e9f;\n    font-size:11px;\n    line-height:1.4;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-detail-status {\n    margin-top:9px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-detail-status .lk-water-status {\n    padding:6px 10px;\n    font-size:9px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-detail-status .lk-water-status-icon {\n    width:17px;\n    height:17px;\n    flex-basis:17px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-clockbox {\n    flex:0 0 auto;\n    min-width:154px;\n    padding:10px 13px;\n    border:1px solid #dfe8f0;\n    border-radius:13px;\n    background:#f8fbfd;\n    text-align:right;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-clockbox span {\n    display:block;\n    color:#8b9aaa;\n    font-size:9px;\n    line-height:1.2;\n    font-weight:700;\n    letter-spacing:.08em;\n    text-transform:uppercase;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-clockbox strong {\n    display:block;\n    margin-top:2px;\n    color:#173f73;\n    font-variant-numeric:tabular-nums;\n    font-size:22px;\n    line-height:1.1;\n    font-weight:700;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpis {\n    display:grid;\n    grid-template-columns:1.15fr .9fr .9fr 1.35fr;\n    gap:10px;\n    margin-bottom:18px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpi {\n    min-width:0;\n    padding:13px 14px;\n    border:1px solid #e2e9f0;\n    border-radius:14px;\n    background:#fff;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpi-label {\n    display:block;\n    color:#8a9aaa;\n    font-size:9px;\n    line-height:1.2;\n    font-weight:700;\n    letter-spacing:.06em;\n    text-transform:uppercase;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpi-value {\n    display:block;\n    margin-top:5px;\n    color:#173f73;\n    font-size:21px;\n    line-height:1.15;\n    font-weight:700;\n    font-variant-numeric:tabular-nums;\n    white-space:normal;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpi-value.is-main {\n    font-size:31px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rates {\n    display:grid;\n    grid-template-columns:repeat(3,minmax(0,1fr));\n    gap:10px;\n    margin:-6px 0 18px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate {\n    min-width:0;\n    padding:12px 14px;\n    border:1px solid #dfe8f0;\n    border-radius:14px;\n    background:#f8fbfd;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate-label {\n    display:block;\n    color:#7f90a1;\n    font-size:9px;\n    line-height:1.25;\n    font-weight:750;\n    letter-spacing:.055em;\n    text-transform:uppercase;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate-value {\n    display:block;\n    margin-top:5px;\n    color:#173f73;\n    font-size:22px;\n    line-height:1.1;\n    font-weight:750;\n    font-variant-numeric:tabular-nums;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate-note {\n    grid-column:1 \/ -1;\n    margin:-2px 2px 0;\n    color:#92a0ad;\n    font-size:9.5px;\n    line-height:1.4;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-section {\n    margin-top:18px;\n    padding-top:17px;\n    border-top:1px solid #e8eef4;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-section-head {\n    display:flex;\n    justify-content:space-between;\n    align-items:flex-end;\n    gap:14px;\n    margin-bottom:10px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-section-title {\n    color:#415a72;\n    font-size:11px;\n    line-height:1.3;\n    font-weight:750;\n    letter-spacing:.06em;\n    text-transform:uppercase;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-section-note {\n    color:#98a6b4;\n    font-size:10px;\n    line-height:1.35;\n    text-align:right;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-cross-wrap {\n    position:relative;\n    border:1px solid #e1e9f0;\n    border-radius:16px;\n    background:linear-gradient(180deg,#f8fbfe 0%,#ffffff 100%);\n    overflow:hidden;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-cross-svg {\n    display:block;\n    width:100%;\n    height:auto;\n    min-height:280px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-cross-legend {\n    display:flex;\n    flex-wrap:wrap;\n    gap:8px 14px;\n    padding:10px 14px 12px;\n    border-top:1px solid #edf2f6;\n    color:#667b8f;\n    font-size:10px;\n    line-height:1.3;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-cross-legend span {\n    display:inline-flex;\n    align-items:center;\n    gap:5px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-legend-line {\n    width:18px;\n    height:2px;\n    border-radius:2px;\n    background:#2e74bd;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-legend-line.prep { background:#d4a017; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-legend-line.regular { background:#ef8b2c; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-legend-line.extra { background:#dd5a32; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-legend-line.emergency { background:#c62f38; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-charts {\n    display:grid;\n    grid-template-columns:1fr;\n    gap:14px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary {\n    display:grid;\n    grid-template-columns:repeat(3,minmax(0,1fr));\n    gap:10px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-item {\n    border:1px solid #e1e9f0;\n    border-radius:14px;\n    background:#f8fbfd;\n    padding:12px 14px;\n    min-width:0;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-label {\n    display:block;\n    color:#7b8e9f;\n    font-size:9px;\n    line-height:1.25;\n    font-weight:800;\n    letter-spacing:.05em;\n    text-transform:uppercase;\n    margin-bottom:4px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-value {\n    display:block;\n    color:#173f73;\n    font-size:22px;\n    line-height:1.05;\n    font-weight:800;\n    font-variant-numeric:tabular-nums;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-time {\n    display:block;\n    margin-top:4px;\n    color:#8b9aaa;\n    font-size:9px;\n    line-height:1.25;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-item.is-change .lk-det-24h-summary-value.is-up { color:#d96e16; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-item.is-change .lk-det-24h-summary-value.is-down { color:#2678ad; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-card {\n    border:1px solid #e1e9f0;\n    border-radius:16px;\n    background:#fff;\n    padding:14px 14px 10px;\n    overflow:hidden;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-head {\n    display:flex;\n    justify-content:space-between;\n    align-items:flex-start;\n    gap:12px;\n    margin-bottom:7px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-title {\n    color:#173f73;\n    font-size:12px;\n    line-height:1.25;\n    font-weight:750;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-stats {\n    color:#7f8e9c;\n    font-size:10px;\n    line-height:1.3;\n    text-align:right;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-svg {\n    display:block;\n    width:100%;\n    height:auto;\n    min-height:170px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-empty {\n    min-height:150px;\n    display:flex;\n    align-items:center;\n    justify-content:center;\n    text-align:center;\n    color:#98a6b4;\n    font-size:11px;\n    line-height:1.45;\n    padding:20px;\n}\n\n\/* =========================================================\n   DETALJNA POSTAJA \u00b7 DETALJNI VODOSTAJ \u2013 uredni\u010dki raspored (v0.15.0)\n   Jedna jasna hijerarhija: postaja \u2192 trenutna razina (heroj) \u2192 udaljenost do praga\n   \u2192 sekundarni pokazatelji u mre\u017ei s tankim razdjelnicima (bez kutija) \u2192 presjek.\n   ========================================================= *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-head { display:flex; justify-content:space-between; align-items:flex-end; gap:16px 24px; flex-wrap:wrap; padding-bottom:18px; border-bottom:2px solid #0b3d78; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-eyebrow { color:#6f8398; font-size:11px; font-weight:700; letter-spacing:.14em; text-transform:uppercase; margin-bottom:6px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-title { margin:0; color:#0b3d78; font-size:34px; line-height:1; font-weight:800; letter-spacing:-.02em; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-title span { display:inline-block; margin-left:10px; color:#6f8398; font-size:17px; font-weight:500; letter-spacing:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-headside { display:flex; align-items:center; gap:18px; flex-wrap:wrap; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-status .lk-water-status { margin:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-clock { display:flex; flex-direction:column; align-items:flex-end; gap:2px; padding-left:18px; border-left:1px solid #dfe7ef; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-clock span { color:#8293a3; font-size:10.5px; font-weight:700; letter-spacing:.1em; text-transform:uppercase; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-clock strong { color:#0b3d78; font-size:22px; font-weight:600; font-variant-numeric:tabular-nums; font-family:\"Bahnschrift Condensed\",\"Bahnschrift\",\"Roboto Condensed\",\"Arial Narrow\",sans-serif; font-stretch:condensed; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-hero { display:grid; grid-template-columns:minmax(0,5fr) minmax(0,7fr); gap:0; margin-top:4px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-main { padding:24px 32px 24px 0; border-right:1px solid #e3eaf1; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-label { color:#6f8398; font-size:11px; font-weight:700; letter-spacing:.12em; text-transform:uppercase; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-levelrow { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-top:8px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-level { color:#0b3d78; font-size:92px; line-height:.86; font-weight:500; letter-spacing:-.01em; font-family:\"Bahnschrift Condensed\",\"Bahnschrift\",\"Roboto Condensed\",\"Arial Narrow\",sans-serif; font-stretch:condensed; font-variant-numeric:tabular-nums; white-space:nowrap; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-level small { margin-left:6px; font-size:26px; color:#5b6f82; font-weight:500; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-arrow { display:none; flex:0 0 60px; width:60px; height:60px; align-items:center; justify-content:center; background:#eef2f6; color:#71849a; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-arrow.is-visible { display:inline-flex; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-arrow.is-up { background:#fdeedf; color:#d96e16; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-arrow.is-down { background:#e3eff8; color:#2678ad; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-arrow svg { width:34px; height:34px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-trend { display:flex; align-items:baseline; gap:8px; margin-top:14px; color:#5b6f82; font-size:13px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-trend strong { color:#0b3d78; font-size:18px; font-weight:700; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-trend strong.is-up { color:#d96e16; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-trend strong.is-down { color:#2678ad; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-gauge { margin-top:18px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-gauge .lk-gauge { margin-top:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-meta { display:flex; justify-content:space-between; align-items:baseline; gap:12px; margin-top:18px; padding-top:14px; border-top:1px solid #e7edf4; color:#6f8398; font-size:12px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-meta strong { color:#16385f; font-size:13px; font-weight:700; text-align:right; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metrics { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); align-content:center; padding-left:32px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric { display:flex; flex-direction:column; gap:8px; padding:22px 18px 22px 0; border-bottom:1px solid #e7edf4; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric:nth-child(n+4) { border-bottom:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric:not(:nth-child(3n+1)) { padding-left:18px; border-left:1px solid #e7edf4; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric > span { color:#6f8398; font-size:11px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric > strong { color:#0b3d78; font-size:34px; line-height:1; font-weight:500; font-family:\"Bahnschrift Condensed\",\"Bahnschrift\",\"Roboto Condensed\",\"Arial Narrow\",sans-serif; font-stretch:condensed; font-variant-numeric:tabular-nums; white-space:nowrap; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric > strong.is-up { color:#d96e16; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric > strong.is-down { color:#2678ad; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric-note p { margin:0; color:#6f8398; font-size:12px; line-height:1.45; }\n\n@media (max-width:1100px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-hero { grid-template-columns:1fr; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-main { padding:22px 0; border-right:0; border-bottom:1px solid #e3eaf1; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metrics { padding-left:0; }\n}\n@media (max-width:650px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-title { font-size:28px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-title span { display:block; margin:6px 0 0; font-size:15px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-headside { width:100%; justify-content:space-between; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-clock { padding-left:0; border-left:0; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-level { font-size:76px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-arrow { flex-basis:52px; width:52px; height:52px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metrics { grid-template-columns:repeat(2,minmax(0,1fr)); }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric { padding:16px 12px 16px 0; border-bottom:1px solid #e7edf4 !important; border-left:0 !important; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric:nth-child(2n) { padding-left:14px !important; border-left:1px solid #e7edf4 !important; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric:nth-child(2n+1) { padding-left:0 !important; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric:nth-last-child(-n+2) { border-bottom:0 !important; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-detx-metric > strong { font-size:24px; white-space:normal; overflow-wrap:anywhere; }\n}\n\n\/* Detaljni grafikoni postaje: pragovi obrane od poplava (isprekidano, boja po stanju \u2013\n   iste boje kao legenda presjeka korita) i dnevni raspon (sjena) na 30-dnevnom grafu. *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-charts > .lk-range-wrap { justify-self:start; max-width:100%; }\n@media (max-width:650px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-charts > .lk-range-wrap { justify-self:stretch; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-charts .lk-range { display:flex; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-charts .lk-range button { flex:1 1 0; padding:7px 4px; font-size:11.5px; }\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-threshold {\n    stroke-width:1.4;\n    stroke-dasharray:5 4;\n    opacity:.85;\n    vector-effect:non-scaling-stroke;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-band {\n    fill:#2e74bd;\n    opacity:.14;\n    stroke:none;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-help {\n    margin-top:14px;\n    padding-top:13px;\n    border-top:1px solid #e8eef4;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-help summary {\n    display:inline-flex;\n    align-items:center;\n    gap:8px;\n    color:#164782;\n    font-size:13px;\n    font-weight:700;\n    cursor:pointer;\n    list-style:none;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-help summary::-webkit-details-marker { display:none; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-help summary::before {\n    content:'i';\n    display:inline-flex;\n    align-items:center;\n    justify-content:center;\n    width:18px;\n    height:18px;\n    border:1.5px solid #164782;\n    font-size:11px;\n    font-weight:800;\n    font-style:normal;\n    line-height:1;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-help[open] summary::before { background:#164782; color:#fff; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-help ul {\n    margin:10px 0 0;\n    padding-left:18px;\n    color:#50677e;\n    font-size:12.5px;\n    line-height:1.55;\n}\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-help li + li { margin-top:5px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-help .lk-source-note { margin-top:10px; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-detail-footer {\n    margin-top:12px;\n    color:#8293a3;\n    font-size:10px;\n    line-height:1.5;\n}\n\n@media (max-width:900px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpis {\n        grid-template-columns:repeat(2,minmax(0,1fr));\n    }\n}\n\n@media (max-width:650px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail,\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail-charts {\n        padding:18px 14px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-detail-head {\n        flex-direction:column;\n        align-items:stretch;\n        gap:12px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-clockbox {\n        min-width:0;\n        text-align:left;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpis {\n        grid-template-columns:1fr 1fr;\n        gap:8px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rates {\n        grid-template-columns:repeat(2,minmax(0,1fr));\n        gap:6px;\n        margin-top:-8px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate {\n        padding:10px 8px;\n        text-align:center;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate-label {\n        min-height:24px;\n        font-size:8px;\n        letter-spacing:.025em;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate-value {\n        font-size:17px;\n        white-space:nowrap;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate-note {\n        text-align:left;\n        font-size:9px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpi {\n        padding:11px 12px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpi-value,\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-kpi-value.is-main {\n        font-size:19px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-section-head {\n        align-items:flex-start;\n        flex-direction:column;\n        gap:3px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-section-note {\n        text-align:left;\n    }\n    \/* Mobile: 50% ve\u0107i tekst u shematskom presjeku korita. *\/\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-section-title {\n        font-size:16.5px;\n        line-height:1.25;\n    }\n    \/* Veli\u010dine teksta presjeka na mobitelu sada postavlja crta\u010d (crossFs) u SVG jedinicama;\n       fiksni min-height je uklonjen jer je ispod presjeka ostavljao praznu plohu. *\/\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-cross-svg {\n        min-height:0;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-chart-svg {\n        min-height:150px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary {\n        gap:6px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-item {\n        padding:9px 7px;\n        text-align:center;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-label {\n        font-size:7.5px;\n        letter-spacing:.025em;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-value {\n        font-size:17px;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-24h-summary-time {\n        font-size:7.5px;\n    }\n}\n\n@media (max-width:380px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rates {\n        grid-template-columns:1fr;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate {\n        display:flex;\n        align-items:center;\n        justify-content:space-between;\n        gap:10px;\n        text-align:left;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate-label {\n        min-height:0;\n    }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-det-rate-value {\n        margin-top:0;\n    }\n}\n\n@media (max-width:650px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-level-value {\n        font-size:54px;\n    }\n\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-level-unit {\n        font-size:16px;\n        padding-bottom:5px;\n    }\n}\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-list { display:grid; gap:12px; width:100%; margin-top:16px;}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-item { width:100%; border:1px solid #e4eaf0; padding:16px; text-align:left; background:#fff; border-radius:16px; box-shadow:0 2px 8px rgba(0,0,0,0.02);}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-item.yellow { border-left:6px solid #e4b600; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-item.orange { border-left:6px solid #ef7d00; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-item.red { border-left:6px solid #cf2027; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-head { display:flex; justify-content:space-between; gap:12px; align-items:flex-start; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-level { font-size:12px; font-weight:700; letter-spacing:.02em; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-event { font-size:16px; font-weight:600; color:#173f73; margin-top:3px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-time { font-size:12px; color:#667b8f; margin-top:6px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-desc { font-size:13px; color:#405970; margin-top:8px; line-height:1.5; }\n\n        \/* Slu\u017ebena preporuka iz DHMZ CAP polja <instruction> *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-advice {\n            width:100%;\n            margin-top:18px;\n            padding:16px 18px;\n            background:#f3f7fb;\n            border:1px solid #dbe7f2;\n            border-radius:16px;\n            text-align:left;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-advice[hidden] { display:none !important; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-advice-title {\n            margin-bottom:7px;\n            color:#0d4f91;\n            font-size:11px;\n            font-weight:700;\n            letter-spacing:.10em;\n            text-transform:uppercase;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-advice-text {\n            color:#405970;\n            font-size:13px;\n            line-height:1.55;\n        }\n\n\n        \/* WMO \/ MeteoAlarm stil upozorenja: univerzalni trokut + boja ozbiljnosti. *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-symbol {\n            width:104px;\n            height:92px;\n            display:flex;\n            align-items:center;\n            justify-content:center;\n            color:#94a3b8;\n            --lk-warning-mark:#ffffff;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-symbol svg { width:100%; height:100%; display:block; overflow:visible; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-symbol.is-yellow { color:#f2c500; --lk-warning-mark:#1f2937; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-symbol.is-orange { color:#f28c00; --lk-warning-mark:#1f2937; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-symbol.is-red { color:#d32f2f; --lk-warning-mark:#ffffff; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-symbol.is-unavailable { color:#94a3b8; --lk-warning-mark:#ffffff; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-symbol.is-clear {\n            width:96px;\n            height:96px;\n            border-radius:50%;\n            border:4px solid #58be7b;\n            background:#f1fbf5;\n            color:#2eab60;\n            --lk-warning-mark:#2eab60;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warning-symbol.is-clear svg { width:56%; height:56%; }\n\n        \/* DHMZ radar ispod upozorenja *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar {\n            width:100%;\n            margin-top:26px;\n            padding-top:22px;\n            border-top:1px solid #e5edf4;\n            text-align:left;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-head {\n            display:flex;\n            align-items:flex-end;\n            justify-content:space-between;\n            gap:12px;\n            margin-bottom:10px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-title {\n            color:#0d4f91;\n            font-size:12px;\n            font-weight:700;\n            letter-spacing:.09em;\n            text-transform:uppercase;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-meta {\n            color:#8aa0b6;\n            font-size:10px;\n            line-height:1.35;\n            text-align:right;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-frame {\n            position:relative;\n            width:100%;\n            aspect-ratio:1\/1;\n            overflow:hidden;\n            border:1px solid #dce6ef;\n            border-radius:16px;\n            background:#eef3f7;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-frame img {\n            display:block;\n            width:100%;\n            height:100%;\n            object-fit:contain;\n            background:#eef3f7;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-badge {\n            position:absolute;\n            left:10px;\n            bottom:10px;\n            z-index:2;\n            padding:5px 8px;\n            border-radius:999px;\n            background:rgba(15,23,42,.78);\n            color:#fff;\n            font-size:10px;\n            font-weight:600;\n            backdrop-filter:blur(6px);\n            -webkit-backdrop-filter:blur(6px);\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-controls {\n            display:flex;\n            align-items:center;\n            justify-content:space-between;\n            gap:12px;\n            margin-top:9px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-play {\n            appearance:none;\n            border:1px solid #d5e1ec;\n            border-radius:999px;\n            padding:7px 11px;\n            background:#fff;\n            color:#0d4f91;\n            font:600 11px\/1 inherit;\n            cursor:pointer;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-link {\n            color:#2563eb;\n            font-size:11px;\n            font-weight:600;\n            text-decoration:none;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-note {\n            margin-top:7px;\n            color:#8aa0b6;\n            font-size:10px;\n            line-height:1.4;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pill {\n            display:inline-flex;\n            align-items:center;\n            gap:6px;\n            min-height:28px;\n            padding:0 12px;\n            border-radius:999px;\n            background:#e6f5ec;\n            color:#187248;\n            font-size:12px;\n            font-weight:600;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pill.warn { background:#fff1d9; color:#8d5b00; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pill.danger { background:#fee2e2; color:#9f1c1c; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pill.neutral { background:#edf3f8; color:#46657f; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pill.good { background:#e3f5e8; color:#1f7a3d; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pill.severe { background:#9f1c1c; color:#fff; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pill.best { background:#0f6b3a; color:#fff; }\n\n        \/* Generi\u010dka traka razina (dijeli izgled s trakom pragova vodostaja i peludi): kru\u017ei\u0107\/marker\n           na trenuta\u010dnoj vrijednosti, obojene zone, kva\u010dice na granicama zona. Koristi je i\n           Kvaliteta zraka (po one\u010di\u0161\u0107iva\u010du) i Vjetar (Beaufortova ljestvica). *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-scale-gauge { margin-top:8px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-scale-gauge-track { position:relative; height:8px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-scale-gauge-tick { position:absolute; top:0; bottom:0; width:2px; margin-left:-1px; background:#fff; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-scale-gauge-marker { position:absolute; top:50%; width:12px; height:12px; box-sizing:border-box; margin:-6px 0 0 -6px; background:#fff; border:3px solid #16385f; box-shadow:0 1px 3px rgba(0,0,0,.3); }\n\n        \/* Kvaliteta zraka: redak po one\u010di\u0161\u0107iva\u010du (isti jezik kao redak peludi). *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row { padding:9px 0; border-bottom:1px solid #edf2f6; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row:last-child { border-bottom:0; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; flex-wrap:wrap; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row-name { font-size:13px; font-weight:600; color:#33475a; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row-value { font-size:13.5px; font-weight:700; color:#16385f; white-space:nowrap; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row-name em { font-style:normal; font-weight:400; color:#6f8398; margin-left:4px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row-hint { margin-top:3px; font-size:12px; line-height:1.4; color:#6f8398; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-help .lk-aqi-help-h { margin:14px 0 4px; font-size:12px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:#16385f; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row-scale { display:flex; align-items:center; gap:10px; margin-top:6px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row-scale .lk-scale-gauge { flex:1 1 auto; min-width:0; margin-top:0; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-row-scale .lk-pill { flex:0 0 auto; }\n\n        \/* Vjetar: traka ja\u010dine 0\u201312 Bf s naslovom trenuta\u010dne kategorije. *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-beaufort-scale { margin-top:16px; padding-top:14px; border-top:1px solid #e7edf4; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-beaufort-caption { display:flex; align-items:baseline; justify-content:space-between; gap:8px; margin-top:9px; color:#5b6f82; font-size:12.5px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-beaufort-caption strong { color:#16385f; font-size:13.5px; }\n\n        \/* Oborine: legenda razreda dijeli izgled s legendom pragova vodostaja\/peludi. *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-rain .lk-gauge-legend { margin-top:14px; }\n\n        \/* Pelud: sa\u017eetak, redak po vrsti i mini traka razine (isti vizualni jezik kao traka pragova vodostaja). *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-summary { margin:0 0 14px; font-size:13px; line-height:1.4; color:#4d6178; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-summary strong { color:#16385f; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-row { padding:10px 0; border-bottom:1px solid #edf2f6; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-row:last-child { border-bottom:0; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-head { display:flex; align-items:baseline; justify-content:space-between; gap:8px; flex-wrap:wrap; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-name { display:flex; align-items:center; gap:7px; font-size:13.5px; font-weight:600; color:#33475a; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-value { font-size:14px; font-weight:700; color:#16385f; white-space:nowrap; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-value small { font-weight:600; color:#6b7f93; font-size:11px; margin-left:2px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-scale { display:flex; align-items:center; gap:10px; margin-top:9px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-gauge { flex:1 1 auto; min-width:0; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-gauge-track { position:relative; height:8px; background:#eef1f4; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-gauge-tick { position:absolute; top:0; bottom:0; width:2px; margin-left:-1px; background:#fff; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-gauge-marker { position:absolute; top:50%; width:12px; height:12px; box-sizing:border-box; margin:-6px 0 0 -6px; background:#fff; border:3px solid #16385f; box-shadow:0 1px 3px rgba(0,0,0,.3); }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-pollen-scale .lk-pill { flex:0 0 auto; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi {\n            display:flex;\n            align-items:center;\n            gap:16px;\n            margin-bottom:16px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-face {\n            width:80px;\n            height:80px;\n            border-radius:50%;\n            display:flex;\n            align-items:center;\n            justify-content:center;\n            border:4px solid #29a75b;\n            color:#29a75b;\n            font-size:42px;\n            background:#f0fbf5;\n        }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-face svg { width:1em; height:1em; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-number {\n            font-size:48px;\n            line-height:1;\n            font-weight:600;\n            color:#173f73;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-aqi-label {\n            margin-top:8px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dot {\n            width:12px;\n            height:12px;\n            border-radius:50%;\n            display:inline-block;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-uv-wrap {\n            display:grid;\n            grid-template-columns:auto 1fr;\n            gap:16px;\n            align-items:center;\n            margin-bottom:16px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-uv-number {\n            font-size:64px;\n            line-height:1;\n            font-weight:600;\n            color:#ee8a00;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-uv-scale {\n            margin-top:16px;\n            display:grid;\n            grid-template-columns:repeat(11, 1fr) auto;\n            gap:4px;\n            align-items:end;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-uv-bar {\n            height:10px;\n            border-radius:4px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-uv-labels {\n            display:grid;\n            grid-template-columns:repeat(11, 1fr) auto;\n            gap:4px;\n            margin-top:6px;\n            font-size:11px;\n            color:#1d3252;\n            text-align:center;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-head { display:flex; align-items:center; justify-content:space-between; gap:10px 14px; flex-wrap:wrap; margin-bottom:10px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-head .lk-card-title { margin:0; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-sub { font-weight:inherit; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-range button { padding:6px 11px; font-size:12px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-svg { padding-top:6px; border-bottom:1px solid #edf2f6; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-svg svg { display:block; width:100%; height:auto; overflow:visible; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-svg[hidden], #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-chart[hidden] { display:none; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-note { margin:6px 0 2px; font-size:12px; line-height:1.4; color:#6f8398; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-delta.is-wet { color:#1f5c96; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-rain-delta.is-dry { color:#b45309; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-chart {\n            height:170px;\n            display:flex;\n            align-items:flex-end;\n            gap:18px;\n            padding:10px 4px 0;\n            border-bottom:1px solid #edf2f6;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-bar-col {\n            flex:1 1 0;\n            min-width:0;\n            text-align:center;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-bar-value {\n            font-size:12px;\n            color:#1b4b87;\n            font-weight:600;\n            margin-bottom:6px;\n            min-height:18px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-bar {\n            width:100%;\n            max-width:34px;\n            margin:0 auto;\n            border-radius:8px 8px 0 0;\n            background:linear-gradient(180deg, #2c8cff 0%, #5ba8ff 100%);\n            min-height:4px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-bar-label {\n            font-size:12px;\n            color:#53697f;\n            margin-top:8px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wind-wrap {\n            display:grid;\n            grid-template-columns:170px 1fr;\n            gap:24px;\n            align-items:center;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wind-svg {\n            width:160px;\n            height:160px;\n            display:block;\n            margin:auto;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-ok-box {\n            display:grid;\n            justify-items:center;\n            gap:12px;\n            padding-top:10px;\n            text-align:center;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-ok-circle {\n            width:104px;\n            height:104px;\n            border-radius:50%;\n            display:flex;\n            align-items:center;\n            justify-content:center;\n            border:4px solid #6fd28f;\n            color:#2eab60;\n            font-size:54px;\n            background:#f1fbf5;\n        }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-ok-circle svg { width:1em; height:1em; }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-climate-grid {\n            display:grid;\n            grid-template-columns:repeat(2, minmax(0, 1fr));\n            gap:16px 24px;\n            font-size:14px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-climate-item {\n            display:flex;\n            justify-content:space-between;\n            gap:12px;\n            padding:6px 0;\n            border-bottom: 1px solid #f1f5f9;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-source-note {\n            margin-top:16px;\n            color:#94a3b8;\n            font-size:11px;\n            line-height:1.4;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref {\n            display:none;\n            margin:10px 0 16px;\n            padding:15px 18px;\n            border:1px solid #d9e4ee;\n            border-radius:16px;\n            background:#f7fafc;\n            color:#405970;\n            font-size:15px;\n            line-height:1.4;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref.is-visible {\n            display:block;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref strong {\n            color:#0b3d78;\n            font-size:17px;\n            font-weight:700;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-meta {\n            margin-top:4px;\n            color:#7d8d9c;\n            font-size:12px;\n            line-height:1.4;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-grid {\n            display:grid;\n            grid-template-columns:repeat(2,minmax(0,1fr));\n            gap:0 18px;\n            margin-top:12px;\n            border-top:1px solid #e3ebf2;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-row {\n            display:none;\n            align-items:center;\n            justify-content:space-between;\n            gap:10px;\n            min-width:0;\n            padding:9px 0;\n            border-bottom:1px solid #e8eef4;\n            color:#4b6277;\n            font-size:13px;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-row.is-visible { display:flex; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-row span:last-child {\n            color:#0b3d78;\n            font-weight:700;\n            white-space:nowrap;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-note {\n            display:none;\n            margin-top:7px;\n            color:#8b99a7;\n            font-size:10.5px;\n            line-height:1.35;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-note.is-visible { display:block; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-temp { color:#0b3d78; font-weight:700; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-at {\n            display:inline-block;\n            margin-left:4px;\n            padding:1px 7px;\n            border:1px solid #cfdbe6;\n            background:#fff;\n            color:#405970;\n            font-size:12px;\n            font-weight:700;\n            font-variant-numeric:tabular-nums;\n            letter-spacing:.02em;\n            vertical-align:2px;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-at:empty { display:none; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-meta b { color:#405970; font-weight:700; font-variant-numeric:tabular-nums; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-stale {\n            display:none;\n            margin-top:6px;\n            padding-left:8px;\n            border-left:2px solid #e8a33d;\n            color:#8a5a14;\n            font-size:12px;\n            line-height:1.4;\n        }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref.is-stale .lk-dhmz-ref-stale { display:block; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref.is-stale .lk-dhmz-ref-temp,\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref.is-stale .lk-dhmz-ref-row span:last-child { color:#7d8d9c; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref.is-stale .lk-dhmz-ref-at { border-color:#e8a33d; color:#8a5a14; background:#fff8ec; }\n\n        @media (max-width:650px) {\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-ref-grid { grid-template-columns:1fr; }\n        }\n\n        @media (max-width:1100px) {\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap { grid-template-columns:repeat(3,minmax(0,1fr)); }\n        }\n        @media (max-width:700px) {\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap.lk-water-secondary { grid-template-columns:1fr; }\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-footer {\n            margin:0 14px 24px;\n            padding:16px 24px;\n            border-radius:24px;\n            background:#ffffff;\n            color:#64748b;\n            display:flex;\n            gap:16px;\n            justify-content:space-between;\n            flex-wrap:wrap;\n            font-size:13px;\n            border:1px solid var(--lk-line);\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-place-label {\n            background:transparent;\n            border:0;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-place-label-inner {\n            --lk-dx:0px;\n            --lk-dy:0px;\n            transform:translate(calc(-50% + var(--lk-dx)), calc(-50% + var(--lk-dy)));\n            color:#fff;\n            font-size:13px;\n            font-weight:600;\n            white-space:nowrap;\n            text-shadow:0 2px 4px rgba(0,0,0,.8), 0 0 10px rgba(0,0,0,.6);\n            pointer-events:none;\n            text-align:center;\n        }\n\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-leaflet-attribution {\n            background:rgba(255,255,255,.85);\n            border-radius:12px;\n            padding:4px 8px;\n            margin-bottom:8px !important;\n            margin-right:8px !important;\n        }\n\n        @media (max-width:1100px) {\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-3,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-4,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-5 { grid-column:span 6; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-frame { height:500px; }\n        }\n\n        @media (max-width:820px) {\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-head { padding:16px 20px; align-items:flex-start; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-updated { display:none; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-frame { height:580px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wind-wrap { grid-template-columns:1fr; }\n        }\n\n        @media (max-width:620px) {\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-crest { width:44px; max-height:56px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-wrap { padding:14px 14px 0; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-frame { height:640px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-side-btn,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-side-link { min-height:44px; font-size:12px; padding:0 12px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-grid { grid-template-columns:1fr; gap:16px; padding:16px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-3,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-4,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-5,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-span-12 { grid-column:1; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-temp { font-size:52px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-climate-grid { grid-template-columns:1fr; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-chart { gap:10px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-controls { width:calc(100% - 32px); padding:10px 14px; bottom: 16px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-row { grid-template-columns: 36px 1fr 54px; gap:8px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-time.start,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-radar-time.end { display:none; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-menu { grid-template-columns:repeat(4,minmax(0,1fr)); }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-btn,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-link { flex-direction:column; min-height:54px; font-size:10px; gap:6px; }\n        }\n\n        \/* Clean v2 styling overrides adjusted for rounded corners *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-head { align-items:flex-end; padding:4px 0 24px; border-bottom:0; background:transparent; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-crest { display:none; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-eyebrow { margin:0 0 12px; color:#111827; font-size:12px; letter-spacing:.15em; font-weight:600; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-title { color:#111827; font-size:clamp(34px,4vw,48px); font-weight:700; letter-spacing:-.03em; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-subtitle { max-width:760px; margin-top:12px; color:#4B5563; font-size:16px; line-height:1.5; font-weight:400; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-updated { color:#6B7280; font-size:12px; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-updated strong { color:#111827; font-size:13px; }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-layer-menu-wrap { padding:0; margin:0 0 16px; background:transparent; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-wrap { padding:0; background:transparent; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-grid { gap:24px; padding:24px 0 0; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-footer { margin:24px 0 0; }\n        \n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-current { order:10; grid-column:span 6; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings { order:11; grid-column:span 6; position:relative; overflow:hidden; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-nowcast { order:12; grid-column:span 12; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-forecast { order:13; grid-column:span 12; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail { order:14; grid-column:span 12; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-river { order:20; grid-column:span 12; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-odra { order:30; grid-column:span 6; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-air { order:31; grid-column:span 6; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail-charts { order:32; grid-column:span 12; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-pollen { order:50; grid-column:span 4; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-soil { order:51; grid-column:span 4; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-uv { order:52; grid-column:span 4; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-rain { order:60; grid-column:span 6; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-wind { order:61; grid-column:span 6; }\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-climate { order:62; grid-column:span 12; }\n\n        @media (max-width:900px) {\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-current,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-odra,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-air { grid-column:span 12; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-pollen,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-soil,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-uv,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-rain,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-wind { grid-column:span 6; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-climate { grid-column:span 12; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-frame { height:500px; }\n        }\n        @media (max-width:650px) {\n            \/* Mobilni prikaz zadr\u017eava isti redoslijed blokova kao PC. *\/\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-current { order:10; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings { order:11; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-nowcast { order:12; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-forecast { order:13; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail { order:14; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-river { order:20; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-odra { order:30; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-air { order:31; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-detail-charts { order:32; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-pollen { order:50; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-soil { order:51; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-uv { order:52; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-rain { order:60; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-wind { order:61; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-climate { order:62; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-head { align-items:flex-start; flex-direction:column; gap:12px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-updated { text-align:left; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-pollen,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-soil,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-uv,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-rain,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-wind,\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-climate { grid-column:span 12; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-frame { height:440px; }\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card { padding:20px; }\n        }\n        \n        \/* Sljede\u0107a 3 sata \u00b7 15-minutna vremenska crta *\/\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-head{display:flex;align-items:flex-end;justify-content:space-between;gap:14px;margin-bottom:14px}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-sub{color:#6b7280;font-size:12px;line-height:1.4;text-align:right}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-scroll{overflow-x:auto;overscroll-behavior-inline:contain;scroll-snap-type:x proximity;padding:2px 2px 10px;-webkit-overflow-scrolling:touch;scrollbar-width:thin}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-track{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(112px,1fr);gap:8px;min-width:max-content}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-item{scroll-snap-align:start;min-width:112px;padding:12px 10px;border:1px solid #e5e7eb;border-radius:14px;background:#f8fafc;text-align:center}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-item.is-first{border-color:#bfd7ea;background:#f3f9fd;box-shadow:inset 0 0 0 1px rgba(23,105,170,.06)}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-time{font-size:12px;font-weight:800;color:#475569;font-variant-numeric:tabular-nums}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-icon{height:34px;margin:7px 0 4px;display:flex;align-items:center;justify-content:center;font-size:29px}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-temp{display:block;font-size:21px;line-height:1.1;font-weight:800;color:#123b5d}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-rain{margin-top:7px;font-size:12px;font-weight:700;color:#2678ad;white-space:nowrap}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-wind{margin-top:4px;font-size:11px;color:#64748b;white-space:nowrap}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-empty{padding:18px;border:1px dashed #d7e0e6;border-radius:14px;color:#738796;font-size:13px;text-align:center}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-legend{display:flex;flex-wrap:wrap;gap:10px 16px;margin-top:2px;color:#6b7280;font-size:11px}\n        #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-legend strong{color:#475569}\n        @media (max-width:650px){\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-head{align-items:flex-start;flex-direction:column;gap:4px}\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-sub{text-align:left}\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-track{grid-auto-columns:104px;gap:7px}\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-item{min-width:104px;padding:11px 8px}\n            #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-nowcast-temp{font-size:20px}\n        }\n\n        \/* Fotografija u bloku Trenuta\u010dno vrijeme *\/\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-current {\n    display:flex;\n    flex-direction:column;\n    overflow:hidden;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-current-photo {\n    margin-top:auto;\n    margin-left:-24px;\n    margin-right:-24px;\n    margin-bottom:-24px;\n    min-height:420px;\n    overflow:hidden;\n    border-radius:0 0 24px 24px;\n}\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-current-photo img {\n    display:block;\n    width:100%;\n    height:100%;\n    min-height:420px;\n    object-fit:cover;\n    object-position:center center;\n}\n\n@media (max-width:650px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-current-photo {\n        margin-left:-20px;\n        margin-right:-20px;\n        margin-bottom:-20px;\n        min-height:0;\n        aspect-ratio:16 \/ 9;\n        border-radius:0 0 24px 24px;\n    }\n\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-current-photo img {\n        min-height:0;\n        height:100%;\n    }\n}\n\n\/* Desktop: fotografija odmah ispod podataka, bez velike prazne plohe.\n   Mobilni prikaz ostaje nepromijenjen. *\/\n@media (min-width:901px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-current {\n        align-self:start;\n    }\n\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-current-photo {\n        margin-top:24px;\n    }\n}\n\n\/* =========================================================\n   VODOSTAJI \u2013 uredni\u010dki raspored (v0.16.0), FT \/ \u0161vicarska tipografija:\n   jedan heroj (broj), sve ostalo podre\u0111eno; tanke linije umjesto kutija.\n   Mre\u017ea kartica crta razdjelnike kroz gap:1px na obojenoj podlozi.\n   ========================================================= *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-river .lk-group-head,\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-odra .lk-group-head { align-items:flex-end; padding-bottom:12px; margin-bottom:14px; border-bottom:2px solid #0b3d78; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-group-head-note { color:#6f8398; font-size:12px; }\n\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap,\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap.lk-water-secondary { gap:14px !important; background:none; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box { border:1px solid #e3eaf1 !important; border-radius:0 !important; box-shadow:none !important; background:#fff; padding:20px 20px 22px; min-width:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box.is-rise-1 { background:var(--lk-rise-bg-1,#fff8ef); border-color:var(--lk-rise-border,#efbd8d) !important; box-shadow:inset 0 4px 0 var(--lk-rise-accent,#ef7d22) !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box.is-rise-2 { background:#fbf6ef; border-color:#e8d8c4 !important; box-shadow:inset 0 4px 0 #c9a57c !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box.is-rise-3 { background:#f6f7f8; border-color:#dde2e7 !important; box-shadow:inset 0 4px 0 #a9b3bd !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box.is-rise-3 .lk-water-rank { background:#e9ecef; color:#4d5a66; border:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box.is-rise-3 .lk-water-history-line { stroke:#6f7f8f; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box.is-rise-3 .lk-water-history-area,\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box.is-rise-3 .lk-water-history-band,\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box.is-rise-3 .lk-water-history-dot { fill:#6f7f8f; }\n\n\/* Zaglavlje kartice: naziv + oznaka ranga u istom retku (bez rezerviranog praznog reda). *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-top { flex-direction:column; align-items:flex-start; gap:6px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-name { font-size:17px; font-weight:700; color:#0b3d78; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-rank { margin:0 !important; padding:3px 8px; font-size:10.5px; letter-spacing:.04em; text-transform:uppercase; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-rank { display:inline-flex !important; min-height:20px; align-items:center; margin-top:10px !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-rank:not(.is-visible) { visibility:hidden; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-fresh { margin-top:4px; font-size:12px; }\n\n\/* Heroj: broj + strelica bez podloge + promjena od zadnjeg mjerenja. *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-levelrow { margin-top:14px; align-items:center; }\n\/* Broj se mjeri prema \u0161irini kartice (container query), pa uvijek ostavlja mjesto\n   za stupac sa strelicom (gore) i jedinicom \"cm\" (dolje). *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box { container-type:inline-size; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-levelrow { display:flex; align-items:center; justify-content:space-between; gap:10px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-level { min-width:0; flex:1 1 auto; overflow:hidden; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-level { display:flex; align-items:baseline; gap:5px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-level-value { font-size:clamp(36px, 4.5vw, 80px) !important; font-size:clamp(36px, calc((100cqw - 84px) \/ (var(--lk-chars, 3) * 0.6)), 96px) !important; line-height:.9 !important; white-space:nowrap; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-level-unit { padding:0 !important; font-size:15px !important; font-weight:600; color:#5b6f82; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-box.is-unavailable .lk-water-arrow { display:none !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-arrow { display:inline-flex !important; flex-shrink:0 !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-arrow:not(.is-visible) { visibility:hidden; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-level-unit { font-size:17px; padding-bottom:4px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-arrow { background:none !important; flex:0 0 34px; width:34px; height:34px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-arrow svg { width:32px; height:32px; stroke-width:2.6; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-last { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-top:12px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-last:empty { display:none; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-last > span { color:#6f8398; font-size:12px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-last > strong { display:inline-flex; align-items:center; gap:4px; flex:0 0 auto; font-size:14px; font-weight:700; white-space:nowrap; color:#71849a; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-last > strong svg { width:13px; height:13px; flex:0 0 13px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-last > strong.is-up { color:#d96e16; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-last > strong.is-down { color:#2678ad; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-last > strong.is-none { color:#a9b5c1; }\n\n\/* Promjene: 24 h u punom retku, 3\/7\/30 dana u tri stupca; svaki je ujedno izbornik grafa. *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-changes { margin-top:16px; border-top:1px solid #0b3d78; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell { appearance:none; border:0; background:none; font:inherit; color:inherit; cursor:pointer; text-align:left; width:100%; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:10px 0; border-bottom:1px solid #e3eaf1; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main > span { color:#4d6178; font-size:13px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); border-bottom:1px solid #e3eaf1; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell { display:flex; flex-direction:column; gap:4px; padding:9px 0 10px 10px; border-left:1px solid #e3eaf1; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell:first-child { padding-left:0; border-left:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > span { color:#6f8398; font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main > strong, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > strong { display:inline-flex; align-items:center; gap:4px; font-weight:700; white-space:nowrap; color:#71849a; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main > strong { font-size:15px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > strong { font-size:13.5px; gap:2px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > strong small { margin-left:2px; font-size:10px; font-weight:600; opacity:.8; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > strong svg { width:12px !important; height:12px !important; flex-basis:12px !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main > strong svg, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > strong svg { width:14px; height:14px; flex:0 0 14px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main > strong.is-up, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > strong.is-up { color:#d96e16; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main > strong.is-down, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > strong.is-down { color:#2678ad; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main > strong.is-none, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell > strong.is-none { color:#a9b5c1; font-weight:600; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main.is-selected, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell.is-selected { box-shadow:inset 0 -2px 0 #0b3d78; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main.is-selected > span, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell.is-selected > span { color:#0b3d78; font-weight:700; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main:hover > span, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell:hover > span { color:#0b3d78; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-main:focus-visible, #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-wc-cell:focus-visible { outline:2px solid #145aa5; outline-offset:-2px; }\n\n\/* Stanje: oznaka bez kutije (kvadrati\u0107 boje + tekst); informativni izvor kao obi\u010dan tekst. *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-status-wrap { margin-top:12px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-status { padding:0; border:0; background:none !important; font-size:11px; letter-spacing:.06em; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-status-icon { width:12px; height:12px; flex:0 0 12px; border:0; background:#8fb3d2; color:transparent; font-size:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-status.is-warn .lk-water-status-icon { background:#e2b619; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-status.is-danger .lk-water-status-icon { background:#d24545; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-info { color:#6f8398; font-size:12px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-gauge-none { margin-top:14px; font-size:12px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-extra { font-size:12px; margin-top:8px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-history-block { border-top:1px solid #e3eaf1; }\n\n@media (max-width:1100px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-river .lk-river { border:0; padding:4px 0 14px; margin-bottom:0; background:none; }\n}\n@media (max-width:700px) {\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-box { padding:20px 4px 24px; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-water-wrap .lk-water-rank:not(.is-visible) { display:none !important; }\n    #lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-group-head-note { width:100%; }\n}\n\n\/* Su\u010delje nikad ne smije pro\u0161iriti stranicu (na iOS-u \u0161iroki sadr\u017eaj pomi\u010de cijelu\n   stranicu ulijevo). Stavke mre\u017ee smiju se suziti, karta je zatvorena u svoj okvir. *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb { max-width:100%; overflow-x:hidden; overflow-x:clip; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-grid > *,\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-grid .lk-card > * { min-width:0; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-frame { contain:layout paint; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lkmeteo-map-frame .leaflet-container { overflow:hidden !important; max-width:100%; }\n\n\/* ===== Trenuta\u010dno vrijeme (v0.18.0) ===== *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-icon { font-size:76px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-unit { margin-left:4px; font-size:.45em; font-weight:600; color:#5b6f82; vertical-align:top; position:relative; top:.25em; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-desc { margin:6px 0 2px; color:#16385f; font-size:15px; font-weight:600; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-now-desc:empty { display:none; }\n\n\/* ===== Upozorenja DHMZ (v0.18.0): zaglavlje u jednom retku, bez praznog prostora ===== *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings { display:flex; flex-direction:column; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-ok-box { flex:1 1 auto; display:flex; flex-direction:column; align-items:stretch; text-align:left !important; padding:0 !important; min-height:0 !important; background:none !important; border:0 !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warn-head { display:flex; align-items:center; gap:16px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warn-head .lk-warning-symbol { flex:0 0 52px; width:52px !important; height:52px !important; margin:0 !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warn-headtext { min-width:0; }\n\/* Radar ispunjava preostalu visinu kartice (nema praznog prostora ispod). *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-dhmz-radar { flex:1 1 auto; display:flex; flex-direction:column; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-dhmz-radar-frame { flex:1 1 auto; min-height:240px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warn-title { font-size:18px; font-weight:800; letter-spacing:.01em; line-height:1.2; color:#1e293b; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warn-text { margin-top:3px; color:#5b6f82; font-size:13px; line-height:1.4; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-warning-list:not(:empty) { margin-top:16px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-warning-list:empty { display:none; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-warning-item { border:0 !important; border-left:4px solid #f2c500 !important; border-radius:0 !important; background:#fffbea !important; padding:10px 12px !important; margin:0 0 8px !important; text-align:left; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-warning-item.orange { border-left-color:#f28c00 !important; background:#fff4e8 !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-warning-item.red { border-left-color:#d32f2f !important; background:#fdecec !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-warning-advice:not([hidden]) { margin-top:8px; padding:10px 12px; border-left:4px solid #94a3b8; background:#f6f8fa; text-align:left; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warn-meta { display:flex; justify-content:space-between; align-items:baseline; gap:12px; flex-wrap:wrap; margin-top:14px; padding-top:12px; border-top:1px solid #e7edf4; color:#8293a3; font-size:12px; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-warn-meta a { color:#145aa5; font-weight:700; text-decoration:none; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-dhmz-radar { margin-top:18px !important; padding-top:16px !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-card-warnings .lk-dhmz-radar-frame { aspect-ratio:9 \/ 7; border-radius:0 !important; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-layer { position:absolute; inset:0; width:100% !important; height:100% !important; object-fit:contain; opacity:0; transition:opacity .28s ease; }\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb .lk-dhmz-radar-layer.is-on { opacity:1; }\n\n\/* Ravni rubovi samo na HTML plohama Meteo su\u010delja. SVG shematskog\n   presjeka korita, uklju\u010duju\u0107i zaobljenu plavu plohu, ostaje netaknut. *\/\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb,\n#lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb :is(div, section, article, button, a, span, img, input, label, li, ul, ol, p, header, footer) {\n    border-radius:0 !important;\n}\n        \n    <\/style>\n\n    <div class=\"lkmeteo-head\">\n        <div class=\"lkmeteo-brand\">\n                        <div>\n                <div class=\"lkmeteo-eyebrow\">OP\u0106INA LEKENIK<\/div>\n                <h2 class=\"lkmeteo-title\">Meteo Lekenik<\/h2>\n                <div class=\"lkmeteo-subtitle\">Vrijeme, kvaliteta zraka, vodostaji i slu\u017ebena DHMZ upozorenja na jednom mjestu.<\/div>\n            <\/div>\n        <\/div>\n\n        <div class=\"lkmeteo-updated\">\n            A\u017dURIRANO: <strong data-role=\"updated\">\u2014<\/strong> \u27f3\n        <\/div>\n    <\/div>\n\n    <div class=\"lkmeteo-layer-menu-wrap\">\n        <nav class=\"lkmeteo-layer-menu\" aria-label=\"Meteorolo\u0161ki slojevi i izvori\">\n            <button type=\"button\" class=\"lkmeteo-layer-btn is-active\" data-mapmode=\"temperature\">\n                <span class=\"lkmeteo-layer-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z\"><\/path><\/svg><\/span><span>Temperatura<\/span>\n            <\/button>\n            <button type=\"button\" class=\"lkmeteo-layer-btn\" data-mapmode=\"wind\">\n                <span class=\"lkmeteo-layer-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\"><\/path><\/svg><\/span><span>Vjetar<\/span>\n            <\/button>\n            <button type=\"button\" class=\"lkmeteo-layer-btn\" data-mapmode=\"rain\">\n                <span class=\"lkmeteo-layer-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M16 13v8\"><\/path><path d=\"M8 13v8\"><\/path><path d=\"M12 15v8\"><\/path><path d=\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"><\/path><\/svg><\/span><span>Oborine<\/span>\n            <\/button>\n            <a class=\"lkmeteo-layer-link\" href=\"https:\/\/www.sat24.com\/en-gb\/country\/hr\" target=\"_blank\" rel=\"noopener noreferrer\">\n                <span class=\"lkmeteo-layer-icon\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M12 2a10 10 0 1 0 10 10H12V2Z\"><\/path><path d=\"M21.18 8.02c-1-2.3-2.85-4.17-5.16-5.18\"><\/path><\/svg><\/span><span>Satelit<\/span>\n            <\/a>\n        <\/nav>\n    <\/div>\n\n    <div class=\"lkmeteo-map-wrap\">\n        <div class=\"lkmeteo-map-frame\">\n            <div class=\"lkmeteo-map\" data-role=\"map\" aria-label=\"Meteorolo\u0161ka karta Op\u0107ine Lekenik\"><\/div>\n            \n        <\/div>\n    <\/div>\n\n    <div class=\"lkmeteo-grid\">\n\n        <section class=\"lk-card lk-span-3 lk-card-current\">\n            <h3 class=\"lk-card-title\">Trenuta\u010dno vrijeme<\/h3>\n            <div class=\"lk-now\">\n                <div class=\"lk-now-icon\" data-role=\"now-icon\"><svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#f59e0b\"><circle cx=\"12\" cy=\"12\" r=\"5\"><\/circle><\/svg><\/div>\n                <div>\n                    <div class=\"lk-now-temp\"><span data-role=\"temp\">\u2014<\/span><span class=\"lk-now-unit\">\u00b0C<\/span><\/div>\n                    <div class=\"lk-now-desc\" data-role=\"now-desc\"><\/div>\n                    <div class=\"lk-muted\">Osje\u0107a se kao <strong data-role=\"feels\">\u2014<\/strong>\u00b0C<\/div>\n                <\/div>\n            <\/div>\n\n            <div style=\"margin-top:14px\">\n                <div class=\"lk-kv\"><span class=\"lk-kv-label\"><svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#64748b\"><path d=\"M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z\"><\/path><\/svg> Vlaga<\/span><strong data-role=\"humidity\">\u2014<\/strong><\/div>\n                <div class=\"lk-kv\"><span class=\"lk-kv-label\"><svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#64748b\"><path d=\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\"><\/path><\/svg> Vjetar<\/span><strong data-role=\"wind\">\u2014<\/strong><\/div>\n                <div class=\"lk-kv\"><span class=\"lk-kv-label\"><svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#64748b\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><circle cx=\"12\" cy=\"12\" r=\"4\"><\/circle><\/svg> Tlak zraka<\/span><strong data-role=\"pressure\">\u2014<\/strong><\/div>\n                <div class=\"lk-kv\"><span class=\"lk-kv-label\"><svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"color:#64748b\"><path d=\"M16 13v8\"><\/path><path d=\"M8 13v8\"><\/path><path d=\"M12 15v8\"><\/path><path d=\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\"><\/path><\/svg> Oborine danas<\/span><strong data-role=\"rain\">\u2014<\/strong><\/div>\n            <\/div>\n\n<div class=\"lk-measure-time\" data-role=\"weather-time\">\u2014<\/div>\n\n            <div class=\"lk-dhmz-ref\" data-role=\"dhmz-sisak-ref\" aria-live=\"polite\">\n                <div><strong>Meteorolo\u0161ka postaja DHMZ \u00b7 Sisak:<\/strong> <span class=\"lk-dhmz-ref-temp\" data-role=\"dhmz-sisak-temp\">\u2014<\/span> <span class=\"lk-dhmz-ref-at\" data-role=\"dhmz-sisak-at\"><\/span><\/div>\n                <div class=\"lk-dhmz-ref-grid\">\n                    <div class=\"lk-dhmz-ref-row\" data-role=\"dhmz-sisak-humidity-row\"><span>Vlaga<\/span><span data-role=\"dhmz-sisak-humidity\">\u2014<\/span><\/div>\n                    <div class=\"lk-dhmz-ref-row\" data-role=\"dhmz-sisak-wind-row\"><span>Vjetar<\/span><span data-role=\"dhmz-sisak-wind\">\u2014<\/span><\/div>\n                    <div class=\"lk-dhmz-ref-row\" data-role=\"dhmz-sisak-pressure-row\"><span>Tlak zraka<\/span><span data-role=\"dhmz-sisak-pressure\">\u2014<\/span><\/div>\n                    <div class=\"lk-dhmz-ref-row\" data-role=\"dhmz-sisak-rain-row\"><span>Oborina 24 h<\/span><span data-role=\"dhmz-sisak-rain\">\u2014<\/span><\/div>\n                <\/div>\n                <div class=\"lk-dhmz-ref-meta\" data-role=\"dhmz-sisak-time\">Slu\u017ebeno referentno mjerenje<\/div>\n                <div class=\"lk-dhmz-ref-stale\" data-role=\"dhmz-sisak-stale\">DHMZ jo\u0161 nije objavio novije mjerenje \u2014 ovo nije trenuta\u010dna temperatura.<\/div>\n                <div class=\"lk-dhmz-ref-note\" data-role=\"dhmz-sisak-rain-note\">Oborina: slu\u017ebeno 24-satno mjerenje DHMZ-a, nije isto \u0161to i Open-Meteo \u201eoborine danas\u201d.<\/div>\n            <\/div>\n\n<div class=\"lk-source-note\">Izvor: Open-Meteo \u00b7 Lekenik<\/div>\n\n\n<\/section>\n\n        <section class=\"lk-card lk-span-12 lk-card-nowcast\">\n            <div class=\"lk-nowcast-head\">\n                <h3 class=\"lk-card-title\" style=\"margin-bottom:0\">Sljede\u0107a 3 sata<\/h3>\n                <div class=\"lk-nowcast-sub\">15-minutna modelska prognoza za Lekenik<\/div>\n            <\/div>\n            <div class=\"lk-nowcast-scroll\" aria-label=\"Prognoza za sljede\u0107a tri sata\">\n                <div class=\"lk-nowcast-track\" data-role=\"nowcast-track\">\n                    <div class=\"lk-nowcast-empty\">U\u010ditavanje kratkoro\u010dne prognoze\u2026<\/div>\n                <\/div>\n            <\/div>\n            <div class=\"lk-nowcast-legend\"><span><strong>Ki\u0161a<\/strong> = mm \/ 15 min<\/span><span><strong>Vjetar<\/strong> = brzina \/ udar km\/h<\/span><\/div>\n            <div class=\"lk-measure-time\" data-role=\"nowcast-time\">\u2014<\/div>\n            <div class=\"lk-source-note\">Izvor: Open-Meteo \u00b7 15-minutna modelska prognoza<\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-5 lk-card-forecast\">\n            <h3 class=\"lk-card-title\">Prognoza 7 dana<\/h3>\n            <div class=\"lk-days\" data-role=\"days\"><\/div>\n            <div class=\"lk-measure-time\" data-role=\"forecast-time\">\u2014<\/div>\n            <div class=\"lk-source-note\">Izvor: Open-Meteo \/ modelska prognoza<\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-12 lk-card-detail\">\n            <header class=\"lk-detx-head\">\n                <div class=\"lk-detx-titles\">\n                    <div class=\"lk-detx-eyebrow\">Mjerna postaja \u00b7 Kupa<\/div>\n                    <h3 class=\"lk-detx-title\">Farka\u0161i\u0107 <span>detaljni vodostaj<\/span><\/h3>\n                <\/div>\n                <div class=\"lk-detx-headside\">\n                    <div class=\"lk-detx-status\" data-role=\"det-detail-status\"><\/div>\n                    <div class=\"lk-detx-clock\"><span>Lokalno vrijeme<\/span><strong data-role=\"det-live-clock\">--:--:--<\/strong><\/div>\n                <\/div>\n            <\/header>\n\n            <div class=\"lk-detx-hero\">\n                <div class=\"lk-detx-main\">\n                    <div class=\"lk-detx-label\">Trenutni vodostaj<\/div>\n                    <div class=\"lk-detx-levelrow\">\n                        <strong class=\"lk-detx-level\" data-role=\"det-detail-level\">\u2014<\/strong>\n                        <span class=\"lk-detx-arrow\" data-role=\"det-detail-arrow\" aria-hidden=\"true\"><\/span>\n                    <\/div>\n                    <div class=\"lk-detx-trend\"><strong data-role=\"det-detail-trend\">\u2014<\/strong><span>od zadnjeg mjerenja<\/span><\/div>\n                    <div class=\"lk-detx-gauge\" data-role=\"det-detail-gauge\"><\/div>\n                    <div class=\"lk-detx-meta\">\n                        <span>Slu\u017ebeno mjerenje<\/span>\n                        <strong data-role=\"det-detail-time\">\u2014<\/strong>\n                    <\/div>\n                <\/div>\n\n                <div class=\"lk-detx-metrics\" aria-label=\"Promjene vodostaja Farka\u0161i\u0107\">\n                    <div class=\"lk-detx-metric\">\n                        <span data-role=\"det-rate-hour-label\">Promjena u 1 h<\/span>\n                        <strong data-role=\"det-rate-hour\">\u2014<\/strong>\n                    <\/div>\n                    <div class=\"lk-detx-metric\">\n                        <span data-role=\"det-rate-day-label\">Promjena u 24 h<\/span>\n                        <strong data-role=\"det-rate-day\">\u2014<\/strong>\n                    <\/div>\n                    <div class=\"lk-detx-metric\">\n                        <span data-role=\"det-rate-minute-label\">Prosje\u010dna brzina<\/span>\n                        <strong data-role=\"det-rate-minute\">\u2014<\/strong>\n                    <\/div>\n                    <div class=\"lk-detx-metric\">\n                        <span>Do pripremnog stanja<\/span>\n                        <strong data-role=\"det-rate-preparation\">\u2014<\/strong>\n                    <\/div>\n                    <div class=\"lk-detx-metric\">\n                        <span>Temperatura zraka<\/span>\n                        <strong data-role=\"det-detail-air\">\u2014<\/strong>\n                    <\/div>\n                    <div class=\"lk-detx-metric lk-detx-metric-note\">\n                        <span>Napomena<\/span>\n                        <p>Promjene su izra\u010dunate iz slu\u017ebeno objavljenih mjerenja i nisu prognoza.<\/p>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"lk-det-section\">\n                <div class=\"lk-det-section-head\">\n                    <div class=\"lk-det-section-title\">Shematski presjek rije\u010dnog korita<\/div>\n                    <div class=\"lk-det-section-note\">Polo\u017eaj linija prati vodomjernu skalu u cm; presjek korita nije geodetski.<\/div>\n                <\/div>\n                <div class=\"lk-det-cross-wrap\" data-role=\"det-cross-section\">\n                    <div class=\"lk-det-chart-empty\">U\u010ditavanje presjeka i slu\u017ebenih pragova\u2026<\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"lk-det-detail-footer\">\n                Izvori: slu\u017ebeni vodostaj Hrvatske vode \u00b7 mVodostaji; temperatura zraka Open-Meteo \u00b7 Stari Farka\u0161i\u0107.<br>\n                Temperatura vode nije prikazana jer u kori\u0161tenom slu\u017ebenom javnom izvoru za ovu postaju nije potvr\u0111en podatak temperature vode.\n            <\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-12 lk-card-river\">\n            <div class=\"lk-group-head\">\n                <h3 class=\"lk-card-title\">Vodostaj Kupe \u2013 najnovija objavljena mjerenja<\/h3>\n                <div class=\"lk-group-head-note\">Uzvodno \u2192 nizvodno \u00b7 dodirnite razdoblje u kartici za graf<\/div>\n            <\/div>\n\n            <div class=\"lk-river\" role=\"group\" aria-label=\"Pregled toka Kupe, od uzvodne prema nizvodnoj postaji\">\n                <div class=\"lk-river-dir\"><span>Uzvodno<\/span><span class=\"lk-river-dir-mid\">smjer toka Kupe<\/span><span>Nizvodno<\/span><\/div>\n                <div class=\"lk-river-nodes\" data-role=\"river-strip-nodes\">\n                                        <button type=\"button\" class=\"lk-river-node\" data-river-jump=\"karlovac\">\n                        <span class=\"lk-river-dot\"><\/span>\n                        <span class=\"lk-river-name\">Karlovac<\/span>\n                        <span class=\"lk-river-level\">\u2014<\/span>\n                        <span class=\"lk-river-chg\"><\/span>\n                    <\/button>\n                                        <button type=\"button\" class=\"lk-river-node\" data-river-jump=\"recica\">\n                        <span class=\"lk-river-dot\"><\/span>\n                        <span class=\"lk-river-name\">Re\u010dica<\/span>\n                        <span class=\"lk-river-level\">\u2014<\/span>\n                        <span class=\"lk-river-chg\"><\/span>\n                    <\/button>\n                                        <button type=\"button\" class=\"lk-river-node\" data-river-jump=\"jamnicka\">\n                        <span class=\"lk-river-dot\"><\/span>\n                        <span class=\"lk-river-name\">J. Kiselica<\/span>\n                        <span class=\"lk-river-level\">\u2014<\/span>\n                        <span class=\"lk-river-chg\"><\/span>\n                    <\/button>\n                                        <button type=\"button\" class=\"lk-river-node\" data-river-jump=\"sisinec\">\n                        <span class=\"lk-river-dot\"><\/span>\n                        <span class=\"lk-river-name\">\u0160i\u0161inec<\/span>\n                        <span class=\"lk-river-level\">\u2014<\/span>\n                        <span class=\"lk-river-chg\"><\/span>\n                    <\/button>\n                                        <button type=\"button\" class=\"lk-river-node\" data-river-jump=\"farkasic\">\n                        <span class=\"lk-river-dot\"><\/span>\n                        <span class=\"lk-river-name\">Farka\u0161i\u0107<\/span>\n                        <span class=\"lk-river-level\">\u2014<\/span>\n                        <span class=\"lk-river-chg\"><\/span>\n                    <\/button>\n                                    <\/div>\n            <\/div>\n\n            <div class=\"lk-water-wrap lk-water-river\">\n                                <div class=\"lk-water-box\" data-role=\"water-karlovac\" tabindex=\"-1\">\n                    <div class=\"lk-water-top\">\n                        <div class=\"lk-water-name\">Karlovac<\/div>\n                                            <\/div>\n                    <div class=\"lk-water-fresh\" data-role=\"water-karlovac-time\">\u2014<\/div>\n\n                    <div class=\"lk-water-levelrow\">\n                        <div class=\"lk-water-level\">\u2014<\/div>\n                        <span class=\"lk-water-arrow\" data-role=\"water-karlovac-arrow\" aria-hidden=\"true\"><\/span>\n                    <\/div>\n                    <div class=\"lk-water-rank\" data-role=\"water-karlovac-rank\"><\/div>                    <div class=\"lk-water-last\" data-role=\"water-karlovac-last\"><\/div>\n\n                    <div class=\"lk-water-changes\" data-role=\"water-karlovac-trend\"><\/div>\n                    <div data-role=\"water-karlovac-gauge\"><\/div>\n                    <div class=\"lk-water-status-wrap\" data-role=\"water-karlovac-status\"><\/div>\n                    <div class=\"lk-water-extra\" data-role=\"water-karlovac-extra\"><\/div>\n                                        <div class=\"lk-water-history\" data-role=\"water-karlovac-history\"><\/div>\n                <\/div>\n                    <div class=\"lk-water-box\" data-role=\"water-recica\" tabindex=\"-1\">\n                    <div class=\"lk-water-top\">\n                        <div class=\"lk-water-name\">Re\u010dica<\/div>\n                                            <\/div>\n                    <div class=\"lk-water-fresh\" data-role=\"water-recica-time\">\u2014<\/div>\n\n                    <div class=\"lk-water-levelrow\">\n                        <div class=\"lk-water-level\">\u2014<\/div>\n                        <span class=\"lk-water-arrow\" data-role=\"water-recica-arrow\" aria-hidden=\"true\"><\/span>\n                    <\/div>\n                    <div class=\"lk-water-rank\" data-role=\"water-recica-rank\"><\/div>                    <div class=\"lk-water-last\" data-role=\"water-recica-last\"><\/div>\n\n                    <div class=\"lk-water-changes\" data-role=\"water-recica-trend\"><\/div>\n                    <div data-role=\"water-recica-gauge\"><\/div>\n                    <div class=\"lk-water-status-wrap\" data-role=\"water-recica-status\"><\/div>\n                    <div class=\"lk-water-extra\" data-role=\"water-recica-extra\"><\/div>\n                                        <div class=\"lk-water-history\" data-role=\"water-recica-history\"><\/div>\n                <\/div>\n                    <div class=\"lk-water-box\" data-role=\"water-jamnicka\" tabindex=\"-1\">\n                    <div class=\"lk-water-top\">\n                        <div class=\"lk-water-name\">Jamni\u010dka Kiselica<\/div>\n                                            <\/div>\n                    <div class=\"lk-water-fresh\" data-role=\"water-jamnicka-time\">\u2014<\/div>\n\n                    <div class=\"lk-water-levelrow\">\n                        <div class=\"lk-water-level\">\u2014<\/div>\n                        <span class=\"lk-water-arrow\" data-role=\"water-jamnicka-arrow\" aria-hidden=\"true\"><\/span>\n                    <\/div>\n                    <div class=\"lk-water-rank\" data-role=\"water-jamnicka-rank\"><\/div>                    <div class=\"lk-water-last\" data-role=\"water-jamnicka-last\"><\/div>\n\n                    <div class=\"lk-water-changes\" data-role=\"water-jamnicka-trend\"><\/div>\n                    <div data-role=\"water-jamnicka-gauge\"><\/div>\n                    <div class=\"lk-water-status-wrap\" data-role=\"water-jamnicka-status\"><\/div>\n                    <div class=\"lk-water-extra\" data-role=\"water-jamnicka-extra\"><\/div>\n                                        <div class=\"lk-water-history\" data-role=\"water-jamnicka-history\"><\/div>\n                <\/div>\n                    <div class=\"lk-water-box\" data-role=\"water-sisinec\" tabindex=\"-1\">\n                    <div class=\"lk-water-top\">\n                        <div class=\"lk-water-name\">\u0160i\u0161inec<\/div>\n                                            <\/div>\n                    <div class=\"lk-water-fresh\" data-role=\"water-sisinec-time\">\u2014<\/div>\n\n                    <div class=\"lk-water-levelrow\">\n                        <div class=\"lk-water-level\">\u2014<\/div>\n                        <span class=\"lk-water-arrow\" data-role=\"water-sisinec-arrow\" aria-hidden=\"true\"><\/span>\n                    <\/div>\n                    <div class=\"lk-water-rank\" data-role=\"water-sisinec-rank\"><\/div>                    <div class=\"lk-water-last\" data-role=\"water-sisinec-last\"><\/div>\n\n                    <div class=\"lk-water-changes\" data-role=\"water-sisinec-trend\"><\/div>\n                    <div data-role=\"water-sisinec-gauge\"><\/div>\n                    <div class=\"lk-water-status-wrap\" data-role=\"water-sisinec-status\"><\/div>\n                    <div class=\"lk-water-extra\" data-role=\"water-sisinec-extra\"><\/div>\n                                        <div class=\"lk-water-history\" data-role=\"water-sisinec-history\"><\/div>\n                <\/div>\n                    <div class=\"lk-water-box\" data-role=\"water-farkasic\" tabindex=\"-1\">\n                    <div class=\"lk-water-top\">\n                        <div class=\"lk-water-name\">Farka\u0161i\u0107<\/div>\n                                            <\/div>\n                    <div class=\"lk-water-fresh\" data-role=\"water-farkasic-time\">\u2014<\/div>\n\n                    <div class=\"lk-water-levelrow\">\n                        <div class=\"lk-water-level\">\u2014<\/div>\n                        <span class=\"lk-water-arrow\" data-role=\"water-farkasic-arrow\" aria-hidden=\"true\"><\/span>\n                    <\/div>\n                    <div class=\"lk-water-rank\" data-role=\"water-farkasic-rank\"><\/div>                    <div class=\"lk-water-last\" data-role=\"water-farkasic-last\"><\/div>\n\n                    <div class=\"lk-water-changes\" data-role=\"water-farkasic-trend\"><\/div>\n                    <div data-role=\"water-farkasic-gauge\"><\/div>\n                    <div class=\"lk-water-status-wrap\" data-role=\"water-farkasic-status\"><\/div>\n                    <div class=\"lk-water-extra\" data-role=\"water-farkasic-extra\"><\/div>\n                    <button type=\"button\" class=\"lk-water-link\" data-jump-detail>Detaljni prikaz i presjek korita \u2191<\/button>                    <div class=\"lk-water-history\" data-role=\"water-farkasic-history\"><\/div>\n                <\/div>\n                <\/div>\n\n                        <div class=\"lk-gauge-legend\" aria-label=\"Legenda traka pragova obrane od poplava\">\n                <span class=\"lk-gauge-legend-title\">Trake pragova:<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#d6e6f5\"><\/span>ispod pripremnog<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#f1dc8a\"><\/span>pripremno stanje<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#f4b46d\"><\/span>redovne mjere<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#ea8467\"><\/span>izvanredne mjere<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#c94848\"><\/span>izvanredno stanje<\/span>\n            <\/div>\n                            <details class=\"lk-water-help\">\n                <summary>Kako \u010ditati prikaz<\/summary>\n                <ul>\n                                                            <li><strong>Redoslijed:<\/strong> postaje idu niz rijeku \u2013 od uzvodnog Karlovca preko Re\u010dice i Jamni\u010dke Kiselice do \u0160i\u0161inca i Farka\u0161i\u0107a na podru\u010dju Op\u0107ine Lekenik. Vodni val putuje niz rijeku, pa se promjena na uzvodnoj postaji s vremenskim odmakom obi\u010dno vidi i nizvodno. To nije prognoza.<\/li>\n                                        <li><strong>Veliki broj<\/strong> je najnovije objavljeno slu\u017ebeno mjerenje (ne procjena). Uz njega pi\u0161e kada je izmjereno i koliko je staro.<\/li>\n                    <li><strong>Uz veliki broj<\/strong> strelica i vrijednost pokazuju promjenu od zadnjeg objavljenog mjerenja. <strong>U zadnja 24 h<\/strong> te <strong>3, 7 i 30 dana<\/strong> su razlike prema mjerenju otprilike toliko unatrag. Ra\u010duna se iz slu\u017ebenih mjerenja i nije prognoza.<\/li>\n                    <li><strong>Dodir na razdoblje<\/strong> (24 h, 3, 7 ili 30 dana) prebacuje graf te kartice na to razdoblje; odabrano razdoblje je podcrtano.<\/li>\n                    <li><strong>Traka pragova:<\/strong> kru\u017ei\u0107 pokazuje trenuta\u010dnu razinu, a boje su slu\u017ebeni pragovi obrane od poplava. Pragovi su za svaku postaju druk\u010diji, zato sama brojka ne govori koliko je stanje ozbiljno. Ispod trake pi\u0161e koliko je centimetara do sljede\u0107eg praga.<\/li>\n                                        <li><strong>Boja podloge kartice<\/strong> ozna\u010dava do tri postaje s najve\u0107im porastom u zadnja 24 h (isti\u010de se tek porast od najmanje 5 cm; manje promjene su uobi\u010dajeno kolebanje). Najve\u0107i rast je naran\u010dast i s ja\u010dinom porasta prelazi prema crvenoj (oznaka \u201eJak porast\u201d); drugi je be\u017e, tre\u0107i siv. Slu\u017ebeno stanje obrane vidi se na traci pragova i u oznaci stanja.<\/li>\n                    <li><strong>Strelice:<\/strong> naran\u010dasta = rast, plava = pad, siva = stagnacija. Vodoravna strelica zna\u010di bez promjene, kosa manju promjenu (manje od 2 cm), a okomita ve\u0107u.<\/li>\n                                        <li><strong>Grafovi:<\/strong> \u201e24 sata\u201d, \u201e3 dana\u201d i \u201e7 dana\u201d prikazuju svako pojedina\u010dno slu\u017ebeno mjerenje u tom razdoblju. \u201e14 dana\u201d i \u201e30 dana\u201d prikazuju dnevni raspon: sjena je najni\u017ea i najvi\u0161a izmjerena razina toga dana, a linija je zadnje mjerenje toga dana. Nulta linija se ne forsira; isprekidana \u017euta linija je prag pripremnog stanja i vidi se kada je blizu opa\u017eenog raspona.<\/li>\n                    <li><strong>Traka toka<\/strong> na vrhu pokazuje razinu i promjenu u zadnja 24 h za sve postaje na Kupi; dodir vodi na karticu postaje.<\/li>\n                <\/ul>\n                                <div class=\"lk-source-note\">Izvor: Hrvatske vode \u00b7 mVodostaji. Pragovi obrane od poplava prema provedbenom planu Hrvatskih voda; postaja bez unesenih pragova prikazuje se kao informativno mjerenje.<\/div>\n                            <\/details>\n            <\/section>\n\n\n        <section class=\"lk-card lk-span-12 lk-card-odra\">\n            <div class=\"lk-group-head\">\n                <h3 class=\"lk-card-title\">Odra i Sava kod u\u0161\u0107a<\/h3>\n                <div class=\"lk-group-head-note\">Dodirnite razdoblje u kartici za graf<\/div>\n            <\/div>\n            <div class=\"lk-water-wrap lk-water-secondary\">\n                                <div class=\"lk-water-box\" data-role=\"water-odra\" tabindex=\"-1\">\n                    <div class=\"lk-water-top\">\n                        <div class=\"lk-water-name\">Odra \u00b7 Odra<\/div>\n                                            <\/div>\n                    <div class=\"lk-water-fresh\" data-role=\"water-odra-time\">\u2014<\/div>\n\n                    <div class=\"lk-water-levelrow\">\n                        <div class=\"lk-water-level\">\u2014<\/div>\n                        <span class=\"lk-water-arrow\" data-role=\"water-odra-arrow\" aria-hidden=\"true\"><\/span>\n                    <\/div>\n                                        <div class=\"lk-water-last\" data-role=\"water-odra-last\"><\/div>\n\n                    <div class=\"lk-water-changes\" data-role=\"water-odra-trend\"><\/div>\n                    <div data-role=\"water-odra-gauge\"><\/div>\n                    <div class=\"lk-water-status-wrap\" data-role=\"water-odra-status\"><\/div>\n                    <div class=\"lk-water-extra\" data-role=\"water-odra-extra\"><\/div>\n                                        <div class=\"lk-water-history\" data-role=\"water-odra-history\"><\/div>\n                <\/div>\n                    <div class=\"lk-water-box\" data-role=\"water-crnac\" tabindex=\"-1\">\n                    <div class=\"lk-water-top\">\n                        <div class=\"lk-water-name\">Sava \u00b7 Crnac<\/div>\n                                            <\/div>\n                    <div class=\"lk-water-fresh\" data-role=\"water-crnac-time\">\u2014<\/div>\n\n                    <div class=\"lk-water-levelrow\">\n                        <div class=\"lk-water-level\">\u2014<\/div>\n                        <span class=\"lk-water-arrow\" data-role=\"water-crnac-arrow\" aria-hidden=\"true\"><\/span>\n                    <\/div>\n                                        <div class=\"lk-water-last\" data-role=\"water-crnac-last\"><\/div>\n\n                    <div class=\"lk-water-changes\" data-role=\"water-crnac-trend\"><\/div>\n                    <div data-role=\"water-crnac-gauge\"><\/div>\n                    <div class=\"lk-water-status-wrap\" data-role=\"water-crnac-status\"><\/div>\n                    <div class=\"lk-water-extra\" data-role=\"water-crnac-extra\"><\/div>\n                                        <div class=\"lk-water-history\" data-role=\"water-crnac-history\"><\/div>\n                <\/div>\n                <\/div>\n                        <div class=\"lk-gauge-legend\" aria-label=\"Legenda traka pragova obrane od poplava\">\n                <span class=\"lk-gauge-legend-title\">Trake pragova:<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#d6e6f5\"><\/span>ispod pripremnog<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#f1dc8a\"><\/span>pripremno stanje<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#f4b46d\"><\/span>redovne mjere<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#ea8467\"><\/span>izvanredne mjere<\/span>\n                <span><span class=\"lk-swatch\" style=\"background:#c94848\"><\/span>izvanredno stanje<\/span>\n            <\/div>\n                            <details class=\"lk-water-help\">\n                <summary>Kako \u010ditati prikaz<\/summary>\n                <ul>\n                                        <li><strong>Odra \u2013 Odra<\/strong> (kod u\u0161\u0107a Odre u Kupu) je mjerodavni vodomjer za nasipe u Lekeniku i oko Trebarjeva Desnog, koji brane od visokih voda iz Odranskog polja. <strong>Sava \u2013 Crnac<\/strong> pokazuje razinu Save kod Siska: visoka Sava usporava otjecanje Odre i Kupe, pa njezin porast najavljuje i rast vode na u\u0161\u0107u.<\/li>\n                                                            <li><strong>Veliki broj<\/strong> je najnovije objavljeno slu\u017ebeno mjerenje (ne procjena). Uz njega pi\u0161e kada je izmjereno i koliko je staro.<\/li>\n                    <li><strong>Uz veliki broj<\/strong> strelica i vrijednost pokazuju promjenu od zadnjeg objavljenog mjerenja. <strong>U zadnja 24 h<\/strong> te <strong>3, 7 i 30 dana<\/strong> su razlike prema mjerenju otprilike toliko unatrag. Ra\u010duna se iz slu\u017ebenih mjerenja i nije prognoza.<\/li>\n                    <li><strong>Dodir na razdoblje<\/strong> (24 h, 3, 7 ili 30 dana) prebacuje graf te kartice na to razdoblje; odabrano razdoblje je podcrtano.<\/li>\n                    <li><strong>Traka pragova:<\/strong> kru\u017ei\u0107 pokazuje trenuta\u010dnu razinu, a boje su slu\u017ebeni pragovi obrane od poplava. Pragovi su za svaku postaju druk\u010diji, zato sama brojka ne govori koliko je stanje ozbiljno. Ispod trake pi\u0161e koliko je centimetara do sljede\u0107eg praga.<\/li>\n                                        <li><strong>Grafovi:<\/strong> \u201e24 sata\u201d, \u201e3 dana\u201d i \u201e7 dana\u201d prikazuju svako pojedina\u010dno slu\u017ebeno mjerenje u tom razdoblju. \u201e14 dana\u201d i \u201e30 dana\u201d prikazuju dnevni raspon: sjena je najni\u017ea i najvi\u0161a izmjerena razina toga dana, a linija je zadnje mjerenje toga dana. Nulta linija se ne forsira; isprekidana \u017euta linija je prag pripremnog stanja i vidi se kada je blizu opa\u017eenog raspona.<\/li>\n                    <li><strong>Traka toka<\/strong> na vrhu pokazuje razinu i promjenu u zadnja 24 h za sve postaje na Kupi; dodir vodi na karticu postaje.<\/li>\n                <\/ul>\n                                <div class=\"lk-source-note\">Izvor: Hrvatske vode \u00b7 mVodostaji. Prikazuje se zadnje raspolo\u017eivo slu\u017ebeno mjerenje s vremenom.<\/div>\n                            <\/details>\n            <\/section>\n\n        <section class=\"lk-card lk-span-3 lk-card-air\">\n            <h3 class=\"lk-card-title\">Kvaliteta zraka<\/h3>\n\n            <div class=\"lk-aqi\">\n                <div class=\"lk-face\" data-role=\"face\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"8\" y1=\"15\" x2=\"16\" y2=\"15\"><\/line><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"><\/line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"><\/line><\/svg><\/div>\n                <div>\n                    <div class=\"lk-aqi-number\" data-role=\"aqi\">\u2014<\/div>\n                    <div class=\"lk-muted\">Europski AQI<\/div>\n                    <div class=\"lk-aqi-label\"><span class=\"lk-pill\" data-role=\"aqi-pill\">DOBRA<\/span><\/div>\n                <\/div>\n            <\/div>\n\n            <div data-role=\"aqi-rows\"><\/div>\n\n            <details class=\"lk-water-help\"><summary>Kako \u010ditati prikaz i \u0161to su ove tvari<\/summary><div class=\"lk-aqi-help-h\">\u0160to pokazuje broj na vrhu<\/div><ul><li><strong>Europski AQI<\/strong> je zbirna ocjena zraka od 0 navi\u0161e \u2013 \u0161to manji broj, to \u010di\u0161\u0107i zrak. Odre\u0111uje ga ona tvar koja je trenuta\u010dno najlo\u0161ija, a ra\u010duna se po metodologiji Europske agencije za okoli\u0161 (EEA).<\/li><li><strong>Redovi ispod<\/strong> pokazuju svaku tvar zasebno: koliko je ima u zraku (mikrograma u kubnom metru, \u00b5g\/m\u00b3) i gdje je ta koli\u010dina na ljestvici od \u201eVrlo dobro\u201d do \u201eVrlo lo\u0161e\u201d. Kvadrati\u0107 na traci je trenuta\u010dna vrijednost.<\/li><\/ul><div class=\"lk-aqi-help-h\">\u0160to su te tvari i odakle dolaze<\/div><ul><li><strong>Lebde\u0107e \u010destice (PM10 i PM2.5)<\/strong> su sitni komadi\u0107i \u010da\u0111e, dima, pra\u0161ine i pepela koji lebde u zraku. Oznaka govori o veli\u010dini: PM10 su \u010destice manje od 10 mikrometara (oko 7 puta tanje od vlasi kose), a PM2.5 manje od 2,5 mikrometra (oko 30 puta tanje). Krupnije se zadr\u017ee u nosu i grlu, a najsitnije dopiru duboko u plu\u0107a i mogu u\u0107i u krvotok \u2013 zato su PM2.5 zdravstveno najva\u017enije.<\/li><li><strong>Odakle \u010destice:<\/strong> u Hrvatskoj ih zimi najvi\u0161e stvara <strong>lo\u017eenje drva i ugljena u ku\u0107anstvima<\/strong>, osobito u starim pe\u0107ima i s vla\u017enim drvom. Tu su i promet, industrija, spaljivanje li\u0161\u0107a, granja i otpada, pra\u0161ina s makadama i oranica te povremeno pijesak iz Sahare. Najvi\u0161e ih je u hladnim, mirnim ve\u010derima i jutrima bez vjetra, kad se dim zadr\u017eava pri tlu (magla i temperaturna inverzija).<\/li><li><strong>Du\u0161ikov dioksid (NO\u2082)<\/strong> je plin koji nastaje izgaranjem goriva \u2013 ponajvi\u0161e iz ispuha automobila i kamiona, osobito dizelskih. Najvi\u0161e ga je uz prometne ceste u jutarnjoj i popodnevnoj gu\u017evi. Nadra\u017euje di\u0161ne putove i pogor\u0161ava astmu.<\/li><li><strong>Prizemni ozon (O\u2083)<\/strong> je isti plin koji visoko u atmosferi \u0161titi od UV zra\u010denja, ali pri tlu je \u0161tetan. Ne izlazi ni iz jednog dimnjaka: nastaje kad sun\u010deva svjetlost \u201eskuha\u201d ispu\u0161ne plinove i isparavanja. Zato ga je najvi\u0161e ljeti, u vru\u0107im i sun\u010danim poslijepodnevima, i to \u010desto izvan gradova, kamo ga vjetar odnese. Mo\u017ee izazvati ka\u0161alj, pe\u010denje o\u010diju i ote\u017eano disanje pri naporu.<\/li><\/ul><div class=\"lk-aqi-help-h\">\u0160to razine zna\u010de<\/div><ul><li><strong>Vrlo dobro \/ Dobro:<\/strong> nema o\u010dekivanih zdravstvenih u\u010dinaka \u2013 u\u017eivajte vani.<\/li><li><strong>Umjereno:<\/strong> za ve\u0107inu bez u\u010dinaka; osjetljive osobe (astmati\u010dari, sr\u010dani bolesnici, starije osobe, mala djeca) mogu primijetiti blage tegobe.<\/li><li><strong>Lo\u0161e:<\/strong> osjetljive osobe trebaju izbjegavati napornu aktivnost na otvorenom; prozore je bolje otvarati kratko.<\/li><li><strong>Vrlo lo\u0161e:<\/strong> mogu\u0107i u\u010dinci i za zdrave osobe \u2013 ograni\u010dite boravak i napor vani.<\/li><\/ul><div class=\"lk-aqi-help-h\">\u0160to svatko mo\u017ee u\u010diniti<\/div><ul><li>Lo\u017eite suho drvo (su\u0161eno barem godinu dana) u ispravnoj pe\u0107i i ne lo\u017eite otpad, plastiku ni lakirano drvo.<\/li><li>Ne spaljujte li\u0161\u0107e, granje i otpad na otvorenom \u2013 kompostiranje je bolji izbor.<\/li><li>Kad je zrak lo\u0161, prozra\u010dujte kratko i u doba dana kad je zrak bolji, a tr\u010danje i napornu aktivnost preselite na drugi dan ili dalje od prometnih cesta.<\/li><\/ul><ul><li>Vrijednosti su modelska procjena za podru\u010dje op\u0107ine (ne mjerenje na postaji u Lekeniku) i op\u0107a su informacija, ne osobni medicinski savjet.<\/li><\/ul><div class=\"lk-source-note\">Koncentracije: Open-Meteo \/ CAMS (europska slu\u017eba Copernicus za atmosferu). Zbirni indeks: EEA. Pragovi razina po tvari: Njema\u010dki savezni ured za okoli\u0161 (Umweltbundesamt).<\/div><\/details>\n            <div class=\"lk-measure-time\" data-role=\"air-time\">\u2014<\/div>\n            <div class=\"lk-source-note\">Izvor: Open-Meteo \/ CAMS \u00b7 pragovi po one\u010di\u0161\u0107iva\u010du: UBA<\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-12 lk-card-detail-charts\">\n            <div class=\"lk-det-section\">\n                <div class=\"lk-det-section-head\">\n                    <div class=\"lk-det-section-title\">Detaljni grafikoni mjernog mjesta Farka\u0161i\u0107<\/div>\n                    <div class=\"lk-det-section-note\">Graf se dopunjava \u010dim izvor objavi novo slu\u017ebeno mjerenje.<\/div>\n                <\/div>\n\n                <div class=\"lk-det-charts\">\n                    <div class=\"lk-det-24h-summary\" data-role=\"det-24h-summary\"><\/div>\n\n                    <div class=\"lk-range-wrap\"><div class=\"lk-range-label\">Razdoblje prikaza<\/div><div class=\"lk-range\" role=\"group\" aria-label=\"Razdoblje prikaza\"><button type=\"button\" class=\"is-active\" data-det-range-btn=\"24h\" aria-pressed=\"true\">24 sata<\/button><button type=\"button\" data-det-range-btn=\"3d\" aria-pressed=\"false\">3 dana<\/button><button type=\"button\" data-det-range-btn=\"7d\" aria-pressed=\"false\">7 dana<\/button><button type=\"button\" data-det-range-btn=\"14d\" aria-pressed=\"false\">14 dana<\/button><button type=\"button\" data-det-range-btn=\"30d\" aria-pressed=\"false\">30 dana<\/button><\/div><\/div>\n                    <div class=\"lk-det-chart-card\" data-role=\"det-chart-main\"><\/div>\n                    <div class=\"lk-det-chart-card lk-det-chart-secondary\" data-role=\"det-chart-bars\"><\/div>\n                <\/div>\n\n                <details class=\"lk-det-help\"><summary>Kako \u010ditati prikaz<\/summary><ul><li><strong>Razdoblje prikaza<\/strong> (24 sata \/ 3 \/ 7 \/ 14 \/ 30 dana) mijenja sa\u017eetak na vrhu, graf vodostaja i stup\u010dasti graf promjene zajedno.<\/li><li><strong>Linija<\/strong> za 24 sata, 3 i 7 dana prati svako pojedina\u010dno slu\u017ebeno mjerenje (nije prognoza). Za 14 i 30 dana <strong>sjena<\/strong> je dnevni raspon (najni\u017ea i najvi\u0161a razina toga dana), a linija zadnje mjerenje dana.<\/li><li><strong>Isprekidane vodoravne linije<\/strong> ozna\u010duju slu\u017ebene pragove obrane od poplava i prikazuju se kad su blizu prikazanog raspona.<\/li><li><strong>Stup\u010dani graf<\/strong> pokazuje promjenu (naran\u010dasto porast, plavo pad): za 24 sata po svakom mjerenju, za 3 dana po 3 sata, za 7 dana po 6 sati, a za 14 i 30 dana po danu \u2013 kako bi stupci ostali \u010ditljivi.<\/li><\/ul><div class=\"lk-source-note\">Izvor: Hrvatske vode \u00b7 mVodostaji (isto slu\u017ebeno mjerenje kao u pregledu iznad).<\/div><\/details>            <\/div>\n\n        <\/section>\n\n        <section class=\"lk-card lk-span-3 lk-card-pollen\">\n            <h3 class=\"lk-card-title\">Pelud \u2013 koncentracija<\/h3>\n            <div class=\"lk-pollen-summary\" data-role=\"pollen-summary\">\u2014<\/div>\n\n            <div data-role=\"pollen-rows\"><\/div>\n\n            <div class=\"lk-gauge-legend\" aria-label=\"Legenda razina peludi\"><span class=\"lk-gauge-legend-title\">Razine:<\/span><span><span class=\"lk-swatch\" style=\"background:#dcefe1\"><\/span>nisko<\/span><span><span class=\"lk-swatch\" style=\"background:#f6e6a8\"><\/span>umjereno<\/span><span><span class=\"lk-swatch\" style=\"background:#f3c08a\"><\/span>visoko<\/span><span><span class=\"lk-swatch\" style=\"background:#e08a8a\"><\/span>vrlo visoko<\/span><\/div>            <details class=\"lk-water-help\"><summary>Kako \u010ditati prikaz<\/summary><ul><li><strong>Pragovi ovise o vrsti peludi<\/strong> \u2013 ambrozija i pelin izazivaju simptome ve\u0107 pri puno ni\u017eim koncentracijama nego trave ili breza, pa \"visoko\" za ambroziju nije ista brojka kao \"visoko\" za travu.<\/li><li><strong>Nisko:<\/strong> simptome osjete uglavnom samo vrlo osjetljive osobe. <strong>Umjereno<\/strong> i <strong>visoko:<\/strong> raste broj oboljelih i ja\u010dina simptoma. <strong>Vrlo visoko:<\/strong> izra\u017eena izlo\u017eenost za ve\u0107inu alergi\u010dnih osoba.<\/li><li>Prikazana koncentracija je trenuta\u010dno (satno) o\u010ditanje, a ne slu\u017ebeni dnevni prosjek na koji su pragovi izvorno kalibrirani \u2013 razina je procjena unutar tog okvira.<\/li><li>Ovo je op\u0107a informacija o izlo\u017eenosti, ne osobni medicinski savjet.<\/li><\/ul><div class=\"lk-source-note\">Koncentracije: CAMS\/Copernicus (Open-Meteo). Pragovi razina: MeteoSwiss, prema klini\u010dkim smjernicama EAACI (Pfaar i dr., 2017; 2020).<\/div><\/details>\n            <div class=\"lk-measure-time\" data-role=\"pollen-time\">\u2014<\/div>\n            <div class=\"lk-source-note\">Koncentracije: CAMS\/Copernicus (Open-Meteo) \u00b7 pragovi razina: MeteoSwiss<\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-3 lk-card-soil\">\n            <h3 class=\"lk-card-title\">Stanje tla<\/h3>\n\n            <div class=\"lk-kv\"><span>\ud83c\udf21 Temp. tla \u00b7 6 cm<\/span><strong data-role=\"soil-temp-6\">\u2014<\/strong><\/div>\n            <div class=\"lk-kv\"><span>\ud83c\udf21 Temp. tla \u00b7 18 cm<\/span><strong data-role=\"soil-temp-18\">\u2014<\/strong><\/div>\n            <div class=\"lk-kv\"><span>\ud83c\udf21 Temp. tla \u00b7 54 cm<\/span><strong data-role=\"soil-temp-54\">\u2014<\/strong><\/div>\n            <div class=\"lk-kv\"><span>\ud83d\udca7 Vla\u017enost \u00b7 9\u201327 cm<\/span><strong data-role=\"soil-moisture-27\">\u2014<\/strong><\/div>\n            <div class=\"lk-kv\"><span>\ud83d\udca7 Vla\u017enost \u00b7 27\u201381 cm<\/span><strong data-role=\"soil-moisture-81\">\u2014<\/strong><\/div>\n            <div class=\"lk-kv\"><span>\ud83d\udca6 ET\u2080 danas<\/span><strong data-role=\"evapo\">\u2014<\/strong><\/div>\n            \n            <div class=\"lk-measure-time\" data-role=\"soil-time\">\u2014<\/div>\n            <div class=\"lk-source-note\">Izvor: Open-Meteo \u00b7 model tla<\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-3 lk-card-uv\">\n            <h3 class=\"lk-card-title\">UV indeks<\/h3>\n\n            <div class=\"lk-uv-wrap\">\n                <div>\n                    <div class=\"lk-uv-number\" data-role=\"uv\">\u2014<\/div>\n                    <div class=\"lk-pill warn\" style=\"margin-top:8px\" data-role=\"uv-label\">UMJEREN<\/div>\n                <\/div>\n\n                <div class=\"lk-muted\" style=\"font-size:12px; line-height:1.4\">\n                    Za\u0161titite se: koristite kremu, \u0161e\u0161ir i izbjegavajte sunce 10\u201317 h.\n                <\/div>\n            <\/div>\n\n            <div class=\"lk-uv-scale\" data-role=\"uv-scale\"><\/div>\n            <div class=\"lk-uv-labels\" data-role=\"uv-labels\"><\/div>\n\n            <div class=\"lk-measure-time\" data-role=\"uv-time\">\u2014<\/div>\n            <div class=\"lk-source-note\">Izvor: Open-Meteo \u00b7 dnevni max<\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-6 lk-card-rain\">\n            <div class=\"lk-rain-head\">\n                <h3 class=\"lk-card-title\">Oborine <span class=\"lk-rain-sub\" data-role=\"rain-sub\">\u2013 zadnjih 7 dana<\/span><\/h3>\n                <div class=\"lk-range lk-rain-range\" role=\"group\" aria-label=\"Razdoblje prikaza oborina\">\n                    <button type=\"button\" class=\"is-active\" data-rain-range=\"7d\" aria-pressed=\"true\">7 dana<\/button>\n                    <button type=\"button\" data-rain-range=\"30d\" aria-pressed=\"false\">30 dana<\/button>\n                    <button type=\"button\" data-rain-range=\"12m\" aria-pressed=\"false\">12 mjeseci<\/button>\n                <\/div>\n            <\/div>\n            <div class=\"lk-chart\" data-role=\"rain-chart\"><\/div>\n            <div class=\"lk-rain-svg\" data-role=\"rain-svg\" hidden><\/div>\n\n            <div data-role=\"rain-legend\"><div class=\"lk-gauge-legend\" aria-label=\"Legenda razreda oborina\"><span class=\"lk-gauge-legend-title\">Razredi:<\/span><span><span class=\"lk-swatch\" style=\"background:#e2e8f0\"><\/span>suho<\/span><span><span class=\"lk-swatch\" style=\"background:#a8d0f0\"><\/span>ki\u0161ni dan<\/span><span><span class=\"lk-swatch\" style=\"background:#4f93d1\"><\/span>obilna ki\u0161a<\/span><span><span class=\"lk-swatch\" style=\"background:#1f5c96\"><\/span>vrlo obilna ki\u0161a<\/span><\/div><\/div>\n\n            <div data-role=\"rain-stats\">\n                <div class=\"lk-kv\" style=\"border-bottom:0;padding-top:6px\"><span>Ukupno<\/span><strong data-role=\"rain-total\">\u2014<\/strong><\/div>\n                <div class=\"lk-kv\"><span>Ki\u0161nih dana (\u22651 mm)<\/span><strong data-role=\"rain-wetdays\">\u2014<\/strong><\/div>\n            <\/div>\n\n            <details class=\"lk-water-help\"><summary>Kako \u010ditati prikaz<\/summary><ul><li><strong>7 dana<\/strong> i <strong>30 dana<\/strong> prikazuju dnevnu koli\u010dinu oborina (uklju\u010duju\u0107i danas), a boja stupca je razred dana. To su izmjerene\/procijenjene vrijednosti, ne prognoza.<\/li><li><strong>12 mjeseci<\/strong> prikazuje ukupnu oborinu po mjesecima. Tamna crtica na svakom stupcu je <strong>vi\u0161egodi\u0161nji prosjek<\/strong> za taj mjesec (DHMZ Sisak, 1949.\u20132024.) \u2013 stupac iznad crtice zna\u010di ki\u0161niji mjesec od prosjeka, ispod crtice su\u0161niji. Teku\u0107i mjesec je svjetliji jer jo\u0161 traje.<\/li><li>Mjese\u010dne vrijednosti su modelska procjena za podru\u010dje op\u0107ine (reanaliza ERA5 preko Open-Meteo), a ne mjerenje ki\u0161omjera u Lekeniku; mogu se razlikovati od slu\u017ebenih mjerenja za nekoliko postotaka.<\/li><li><strong>Razredi dnevne koli\u010dine oborina<\/strong> (suho \/ ki\u0161ni dan \/ obilna ki\u0161a \/ vrlo obilna ki\u0161a) prate granice koje koriste me\u0111unarodni klimatolo\u0161ki indeksi ETCCDI\/CLIMDEX, pod pokroviteljstvom Svjetske meteorolo\u0161ke organizacije (WMO): ki\u0161ni dan \u2265 1 mm, obilna ki\u0161a \u2265 10 mm, vrlo obilna ki\u0161a \u2265 20 mm.<\/li><li><strong>Ki\u0161nih dana<\/strong> broji dane s barem 1 mm oborine \u2013 standardna definicija \"mokrog dana\" u klimatologiji.<\/li><\/ul><div class=\"lk-source-note\">Izvor podataka: Open-Meteo (dnevno) i Open-Meteo arhiv \/ ERA5 (mjese\u010dno). Prosjek: DHMZ Sisak 1949.\u20132024. Razredi: ETCCDI\/CLIMDEX (WMO).<\/div><\/details>\n            <div class=\"lk-measure-time\" data-role=\"rain-history-time\">\u2014<\/div>\n            <div class=\"lk-source-note\">Izvor: Open-Meteo \u00b7 razredi oborina: WMO\/ETCCDI (CLIMDEX)<\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-6 lk-card-wind\">\n            <h3 class=\"lk-card-title\">Vjetar<\/h3>\n            <div class=\"lk-wind-wrap\">\n                <div data-role=\"wind-rose\"><\/div>\n                <div>\n                    <div class=\"lk-kv\"><span>Smjer<\/span><strong data-role=\"wind-dir\">\u2014<\/strong><\/div>\n                    <div class=\"lk-kv\"><span>Brzina<\/span><strong data-role=\"wind-speed\">\u2014<\/strong><\/div>\n                    <div class=\"lk-kv\"><span>Udari<\/span><strong data-role=\"wind-gust\">\u2014<\/strong><\/div>\n                    <div class=\"lk-kv\"><span>Ja\u010dina<\/span><strong data-role=\"wind-desc\">\u2014<\/strong><\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"lk-beaufort-scale\" data-role=\"wind-beaufort\"><\/div>\n\n            <details class=\"lk-water-help\"><summary>Kako \u010ditati prikaz<\/summary><ul><li><strong>Beaufortova ljestvica<\/strong> je me\u0111unarodni standard (Svjetska meteorolo\u0161ka organizacija) za opisivanje ja\u010dine vjetra brojem od 0 (ti\u0161ina) do 12 (orkan), prema u\u010dincima na okolinu, ne samo brzinom.<\/li><li>Traka ispod pokazuje gdje se trenuta\u010dna brzina vjetra nalazi na toj ljestvici; broj i naziv (npr. \"4 Bf \u00b7 Umjeren vjetar\") zamjenjuju golu brzinu u km\/h opisom koji se odmah razumije.<\/li><li>Udari (poryv) mogu biti znatno ja\u010di od prosje\u010dne brzine \u2013 to je uobi\u010dajeno i ne zna\u010di gre\u0161ku u o\u010ditanju.<\/li><\/ul><div class=\"lk-source-note\">Brzina i smjer: Open-Meteo. Klasifikacija: Beaufortova ljestvica ja\u010dine vjetra (WMO, me\u0111unarodno standardizirana 1946.).<\/div><\/details>\n            <div class=\"lk-measure-time\" data-role=\"wind-time\">\u2014<\/div>\n            <div class=\"lk-source-note\">Izvor: Open-Meteo \u00b7 ja\u010dina prema Beaufortovoj ljestvici (WMO)<\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-4 lk-card-warnings\">\n            <h3 class=\"lk-card-title\">Upozorenja DHMZ<\/h3>\n            <div class=\"lk-ok-box\" data-role=\"warnings-box\">\n                <div class=\"lk-warn-head\">\n                <div class=\"lk-warning-symbol is-unavailable\" data-role=\"warning-icon\" aria-hidden=\"true\"><svg viewBox=\"0 0 64 56\"><path d=\"M32 3 L61 53 H3 Z\" fill=\"currentColor\" stroke=\"rgba(15,23,42,.18)\" stroke-width=\"2\"><\/path><rect x=\"29.5\" y=\"17\" width=\"5\" height=\"20\" rx=\"2.5\" fill=\"var(--lk-warning-mark)\"><\/rect><circle cx=\"32\" cy=\"44\" r=\"3\" fill=\"var(--lk-warning-mark)\"><\/circle><\/svg><\/div>\n                <div class=\"lk-warn-headtext\">\n                    <div class=\"lk-warn-title\" data-role=\"warning-title\">PROVJERA...<\/div>\n                    <div class=\"lk-warn-text\" data-role=\"warning-text\">Dohva\u0107am slu\u017ebeni DHMZ CAP zapis.<\/div>\n                <\/div>\n                <\/div>\n                <div class=\"lk-warning-list\" data-role=\"warning-list\"><\/div>\n                <div class=\"lk-warning-advice\" data-role=\"warning-advice\" hidden>\n                    <div class=\"lk-warning-advice-title\">Preporuka DHMZ<\/div>\n                    <div class=\"lk-warning-advice-text\" data-role=\"warning-advice-text\"><\/div>\n                <\/div>\n                <div class=\"lk-warn-meta\">\n                    <span data-role=\"warning-time\">\u2014<\/span>\n                    <a href=\"https:\/\/meteo.hr\/naslovnica-upozorenja.php\" target=\"_blank\" rel=\"noopener noreferrer\">Vi\u0161e na meteo.hr \u2192<\/a>\n                <\/div>\n\n                <div class=\"lk-dhmz-radar\" data-role=\"dhmz-radar\">\n                    <div class=\"lk-dhmz-radar-head\">\n                        <div class=\"lk-dhmz-radar-title\">DHMZ radar \u00b7 kompozit<\/div>\n                        <div class=\"lk-dhmz-radar-meta\">slu\u017ebena radarska mjerenja \u00b7 5 min<\/div>\n                    <\/div>\n                    <div class=\"lk-dhmz-radar-frame\">\n                        <img data-role=\"dhmz-radar-img\"\n                             src=\"https:\/\/vrijeme.hr\/kompozit-stat.png\"\n                             alt=\"DHMZ radarska slika \u2013 kompozit\"\n                             loading=\"lazy\"\n                             decoding=\"async\">\n                        <div class=\"lk-dhmz-radar-badge\" data-role=\"dhmz-radar-badge\">DHMZ \u00b7 aktualno<\/div>\n                    <\/div>\n                    <div class=\"lk-dhmz-radar-controls\">\n                        <button type=\"button\" class=\"lk-dhmz-radar-play\" data-role=\"dhmz-radar-play\" disabled>\u25b6 Animacija<\/button>\n                        <a class=\"lk-dhmz-radar-link\"\n                           href=\"https:\/\/meteo.hr\/podaci.php?acto=anim&amp;el=kompozit&amp;param=radari&amp;section=podaci_mjerenja\"\n                           target=\"_blank\" rel=\"noopener noreferrer\">Otvori na DHMZ<\/a>\n                    <\/div>\n                    <div class=\"lk-dhmz-radar-note\" data-role=\"dhmz-radar-note\">U\u010ditavam slu\u017ebene DHMZ radarske frameove\u2026<\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <section class=\"lk-card lk-span-12 lk-card-climate\">\n            <h3 class=\"lk-card-title\">Klimatolo\u0161ke srednje vrijednosti<\/h3>\n            <div class=\"lk-muted\" style=\"margin-top:-8px;margin-bottom:20px\" data-role=\"climate-subtitle\">\u2014<\/div>\n            <div class=\"lk-climate-grid\">\n                <div class=\"lk-climate-item\"><span>Srednja temp. (<span data-role=\"climate-month-a\">\u2014<\/span>)<\/span><strong data-role=\"climate-mean-temp\">\u2014<\/strong><\/div>\n                <div class=\"lk-climate-item\"><span>Apsolutni maksimum (<span data-role=\"climate-month-b\">\u2014<\/span>)<\/span><strong data-role=\"climate-max-temp\">\u2014<\/strong><\/div>\n                <div class=\"lk-climate-item\"><span>Apsolutni minimum (<span data-role=\"climate-month-c\">\u2014<\/span>)<\/span><strong data-role=\"climate-min-temp\">\u2014<\/strong><\/div>\n                <div class=\"lk-climate-item\"><span>Srednja oborina (<span data-role=\"climate-month-d\">\u2014<\/span>)<\/span><strong data-role=\"climate-mean-precip\">\u2014<\/strong><\/div>\n                <div class=\"lk-climate-item\"><span>Sun\u010dani sati (<span data-role=\"climate-month-e\">\u2014<\/span>)<\/span><strong data-role=\"climate-sun-hours\">\u2014<\/strong><\/div>\n                <div class=\"lk-climate-item\"><span>Razdoblje<\/span><strong data-role=\"climate-period\">\u2014<\/strong><\/div>\n            <\/div>\n            <div class=\"lk-source-note\">Izvor: DHMZ \u00b7 postaja Sisak. Povijesna referenca, nije mjerenje.<\/div>\n        <\/section>\n\n    <\/div>\n\n    <div class=\"lk-footer\">\n        <span>Podaci su informativnog karaktera. Za slu\u017ebene informacije obratite se nadle\u017enim institucijama.<\/span>\n        <span>Izvori: DHMZ, Hrvatske vode, Open-Meteo, CAMS.<\/span>\n    <\/div>\n\n    <script>\n    (function () {\n        const root = document.getElementById(\"lkmeteo-393e8a49-23e4-4298-b5b4-262ffb79d4cb\");\n        if (!root || root.dataset.initialized === '1') return;\n        root.dataset.initialized = '1';\n\n        const endpoint = root.dataset.endpoint;\n        const boundaryUrl = root.dataset.boundary;\n        let places = [];\n\n        let map = null;\n        let boundaryLayer = null;\n        let outsideMaskLayer = null;\n        let placeLayer = null;\n        let infoMode = 'temperature';\n        let snapshotData = null;\n        \/* Odabrani raspon za \"Detaljni grafikoni mjernog mjesta\" (zaseban od\n           root.dataset.waterRange koji koristi glavna kartica vodostaja). *\/\n        let detRange = '24h';\n\n        let radarFrames = [];\n        let radarLayers = [];\n        let radarIndex = -1;\n        let radarTimer = null;\n        let radarReady = false;\n        let radarRefreshTimer = null;\n        let radarWasActive = false;\n        let muniBounds = null;\n        let mapUserMoved = false;\n\n        function qs(role) {\n            return root.querySelector('[data-role=\"' + role + '\"]');\n        }\n\n        function escapeHtml(value) {\n            return String(value ?? '')\n                .replace(\/&\/g, '&amp;')\n                .replace(\/<\/g, '&lt;')\n                .replace(\/>\/g, '&gt;')\n                .replace(\/\"\/g, '&quot;')\n                .replace(\/'\/g, '&#039;');\n        }\n\n        function fmt(value, decimals = 0) {\n            const n = Number(value);\n            if (!Number.isFinite(n)) return '\u2014';\n            return n.toLocaleString('hr-HR', {\n                minimumFractionDigits: decimals,\n                maximumFractionDigits: decimals\n            });\n        }\n\n        \/* Ikone vremena (\u010diste linijske ikone, Lucide stil). isDay: 1 dan, 0 no\u0107\n           (Open-Meteo \"is_day\"); bez podatka se pretpostavlja dan. *\/\n        function weatherIcon(code, isDay) {\n            code = Number(code);\n            const night = Number(isDay) === 0;\n            const svg = (inner) => '<svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" fill=\"none\" stroke-width=\"1.9\" stroke-linecap=\"round\" stroke-linejoin=\"round\">' + inner + '<\/svg>';\n            const SUN = '#f59e0b', MOON = '#7c8db5', CLOUD = '#7b8ea3', RAIN = '#3b82f6', SNOW = '#60a5fa', STORM = '#8b5cf6';\n            const sun = svg('<g stroke=\"' + SUN + '\"><circle cx=\"12\" cy=\"12\" r=\"4.5\"\/><path d=\"M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41\"\/><\/g>');\n            const moon = svg('<path stroke=\"' + MOON + '\" d=\"M20.5 14.1A8.5 8.5 0 1 1 9.9 3.5a6.6 6.6 0 0 0 10.6 10.6z\"\/>');\n            const cloudPath = '<path stroke=\"' + CLOUD + '\" d=\"M17.5 19H8a6 6 0 1 1 5.66-8h1.34a4 4 0 0 1 2.5 8z\"\/>';\n            const partlyDay = svg('<g stroke=\"' + SUN + '\"><path d=\"M8 2v1.5M2.8 4.8l1 1M1 10h1.5M13.2 4.8l-1 1\"\/><path d=\"M5.2 11.2A4 4 0 0 1 11 6.4\"\/><\/g><path stroke=\"' + CLOUD + '\" d=\"M18 20H9.5a4.5 4.5 0 1 1 3.9-6.8h.6a3.4 3.4 0 0 1 4 3.4 3.4 3.4 0 0 1 0 3.4z\"\/>');\n            const partlyNight = svg('<path stroke=\"' + MOON + '\" d=\"M11.6 8.6A5 5 0 0 1 5.4 3a5 5 0 1 0 6.9 6.3\"\/><path stroke=\"' + CLOUD + '\" d=\"M18 20H9.5a4.5 4.5 0 1 1 3.9-6.8h.6a3.4 3.4 0 0 1 4 3.4 3.4 3.4 0 0 1 0 3.4z\"\/>');\n            const cloud = svg(cloudPath);\n            const fog = svg('<path stroke=\"' + CLOUD + '\" d=\"M5 13.5A5.5 5.5 0 1 1 15.3 9h1.2a3.5 3.5 0 0 1 1.5 6.7\"\/><path stroke=\"' + CLOUD + '\" d=\"M4 18h12M7 21.5h12\"\/>');\n            const drizzle = svg('<path stroke=\"' + CLOUD + '\" d=\"M5 14.5A5.5 5.5 0 1 1 15.3 10h1.2a3.5 3.5 0 0 1 1.5 6.7\"\/><path stroke=\"' + RAIN + '\" d=\"M8 19v1M8 14v1M12 21v1M12 16v1M16 19v1M16 14v1\"\/>');\n            const rain = svg('<path stroke=\"' + CLOUD + '\" d=\"M5 14.5A5.5 5.5 0 1 1 15.3 10h1.2a3.5 3.5 0 0 1 1.5 6.7\"\/><path stroke=\"' + RAIN + '\" d=\"M8 15l-1.5 5M12 16l-1.5 5M16 15l-1.5 5\"\/>');\n            const snow = svg('<path stroke=\"' + CLOUD + '\" d=\"M5 14.5A5.5 5.5 0 1 1 15.3 10h1.2a3.5 3.5 0 0 1 1.5 6.7\"\/><path stroke=\"' + SNOW + '\" d=\"M8 16h.01M8 20h.01M12 18h.01M12 22h.01M16 16h.01M16 20h.01\" stroke-width=\"3\"\/>');\n            const storm = svg('<path stroke=\"' + CLOUD + '\" d=\"M5 14.5A5.5 5.5 0 1 1 15.3 10h1.2a3.5 3.5 0 0 1 1.5 6.7\"\/><path stroke=\"' + STORM + '\" d=\"M13 12l-3 5h4l-3 5\"\/>');\n\n            if (code === 0) return night ? moon : sun;\n            if (code === 1 || code === 2) return night ? partlyNight : partlyDay;\n            if (code === 3) return cloud;\n            if (code === 45 || code === 48) return fog;\n            if ([51,53,55,56,57].includes(code)) return drizzle;\n            if ([61,63,65,66,67,80,81,82].includes(code)) return rain;\n            if ([71,73,75,77,85,86].includes(code)) return snow;\n            if ([95,96,99].includes(code)) return storm;\n            return cloud;\n        }\n\n        function weatherDescription(code) {\n            code = Number(code);\n            if (code === 0) return 'Vedro';\n            if (code === 1) return 'Prete\u017eno vedro';\n            if (code === 2) return 'Djelomice obla\u010dno';\n            if (code === 3) return 'Obla\u010dno';\n            if (code === 45) return 'Magla';\n            if (code === 48) return 'Magla s injem';\n            if ([51,53,55].includes(code)) return 'Rosulja';\n            if ([56,57].includes(code)) return 'Ledena rosulja';\n            if ([61,63,65].includes(code)) return 'Ki\u0161a';\n            if ([66,67].includes(code)) return 'Ledena ki\u0161a';\n            if ([71,73,75,77].includes(code)) return 'Snijeg';\n            if ([80,81,82].includes(code)) return 'Pljuskovi';\n            if ([85,86].includes(code)) return 'Snje\u017eni pljuskovi';\n            if (code === 95) return 'Grmljavina';\n            if ([96,99].includes(code)) return 'Grmljavina s tu\u010dom';\n            return 'Promjenjivo';\n        }\n\n        function windDirection(deg) {\n            const dirs = ['N','NE','E','SE','S','SW','W','NW'];\n            const n = Number(deg);\n            if (!Number.isFinite(n)) return '\u2014';\n            return dirs[Math.round(n \/ 45) % 8];\n        }\n\n        \/* Beaufortova ljestvica ja\u010dine vjetra (WMO, me\u0111unarodni standard). max je gornja\n           granica raspona u km\/h; zadnja stavka (12) nema gornju granicu. *\/\n        const BEAUFORT_SCALE = [\n            {force:0,  max:1,        name:'Ti\u0161ina'},\n            {force:1,  max:5,        name:'Lahor'},\n            {force:2,  max:11,       name:'Povjetarac'},\n            {force:3,  max:19,       name:'Slab vjetar'},\n            {force:4,  max:28,       name:'Umjeren vjetar'},\n            {force:5,  max:38,       name:'Umjereno jak vjetar'},\n            {force:6,  max:49,       name:'Jak vjetar'},\n            {force:7,  max:61,       name:'\u017destok vjetar'},\n            {force:8,  max:74,       name:'Olujni vjetar'},\n            {force:9,  max:88,       name:'Jak olujni vjetar'},\n            {force:10, max:102,      name:'Oluja'},\n            {force:11, max:117,      name:'\u017destoka oluja'},\n            {force:12, max:Infinity, name:'Orkan'}\n        ];\n        \/* Boja po ja\u010dini: smireno plavo-zeleno \u2192 \u017euto \u2192 naran\u010dasto \u2192 crveno pri orkanskoj sili. *\/\n        const BEAUFORT_COLOR_STOPS = ['#8fb9d6','#7fc4a8','#f6e6a8','#f3ae72','#d9605f','#9f1c1c'];\n\n        function beaufortFor(speedKmh) {\n            const n = Number(speedKmh);\n            if (!Number.isFinite(n)) return null;\n            return BEAUFORT_SCALE.find(b => n <= b.max) || BEAUFORT_SCALE[BEAUFORT_SCALE.length - 1];\n        }\n\n        function beaufortColor(force) {\n            const idx = Math.min(BEAUFORT_COLOR_STOPS.length - 1, Math.round((force \/ 12) * (BEAUFORT_COLOR_STOPS.length - 1)));\n            return BEAUFORT_COLOR_STOPS[idx];\n        }\n\n        \/* Traka 0\u201312 Bf s markerom na trenuta\u010dnoj sili (isti generi\u010dki crta\u010d kao Kvaliteta zraka). *\/\n        function beaufortGaugeHtml(speedKmh) {\n            const b = beaufortFor(speedKmh);\n            const cutpoints = BEAUFORT_SCALE.slice(0, -1).map(x => x.max + 0.001);\n            const colors = BEAUFORT_SCALE.map(x => beaufortColor(x.force));\n            const gauge = segmentedGaugeHtml(speedKmh, cutpoints, colors);\n            const caption = b\n                ? '<div class=\"lk-beaufort-caption\"><span>Ja\u010dina vjetra<\/span><strong>' + escapeHtml(b.force + ' Bf \u00b7 ' + b.name) + '<\/strong><\/div>'\n                : '';\n            return gauge + caption;\n        }\n\n        function pollenLabel(value) {\n            const n = Number(value);\n            if (!Number.isFinite(n)) return '\u2014';\n            return fmt(n, n < 10 ? 1 : 0) + ' zrn\/m\u00b3';\n        }\n\n        \/* Pragovi razina optere\u0107enja peludi (zrn\/m\u00b3) \u2013 vidi PHP komentar uz\n           lkmeteo_pollen_legend_html() za izvor i napomenu o dnevnom prosjeku. *\/\n        const POLLEN_SPECIES = [\n            {role:'ragweed', label:'Ambrozija', color:'#e4392b', th:{moderate:6,  high:11, veryHigh:40}},\n            {role:'grass',   label:'Trave',     color:'#f39c1d', th:{moderate:20, high:50, veryHigh:150}},\n            {role:'mugwort', label:'Pelin',     color:'#f2c018', th:{moderate:6,  high:15, veryHigh:50}},\n            {role:'birch',   label:'Breza',     color:'#2ea34a', th:{moderate:11, high:70, veryHigh:300}},\n            {role:'alder',   label:'Joha',      color:'#1f7a8c', th:{moderate:11, high:70, veryHigh:250}}\n        ];\n        const POLLEN_RANK = {none:0, low:1, moderate:2, high:3, veryHigh:4};\n\n        function pollenLevel(value, th) {\n            const n = Number(value);\n            if (!Number.isFinite(n) || n < 1) return {tier:'none', label:'Izvan sezone', cls:'neutral'};\n            if (n < th.moderate) return {tier:'low', label:'Nisko', cls:'good'};\n            if (n < th.high) return {tier:'moderate', label:'Umjereno', cls:'warn'};\n            if (n < th.veryHigh) return {tier:'high', label:'Visoko', cls:'danger'};\n            return {tier:'veryHigh', label:'Vrlo visoko', cls:'severe'};\n        }\n\n        function pollenGaugeHtml(value, th) {\n            const n = Number(value);\n            const max = th.veryHigh * 1.15;\n            const pct = v => Math.max(0, Math.min(100, (v \/ max) * 100));\n            const stops = [\n                '#dcefe1 0%',\n                '#dcefe1 ' + pct(th.moderate).toFixed(2) + '%',\n                '#f6e6a8 ' + pct(th.moderate).toFixed(2) + '%',\n                '#f6e6a8 ' + pct(th.high).toFixed(2) + '%',\n                '#f3c08a ' + pct(th.high).toFixed(2) + '%',\n                '#f3c08a ' + pct(th.veryHigh).toFixed(2) + '%',\n                '#e08a8a ' + pct(th.veryHigh).toFixed(2) + '%',\n                '#e08a8a 100%'\n            ].join(',');\n            const markerLeft = pct(Number.isFinite(n) ? Math.max(n, 0) : 0);\n            return '<div class=\"lk-pollen-gauge\"><div class=\"lk-pollen-gauge-track\" style=\"background:linear-gradient(90deg,' + stops + ')\">' +\n                '<span class=\"lk-pollen-gauge-tick\" style=\"left:' + pct(th.moderate).toFixed(2) + '%\"><\/span>' +\n                '<span class=\"lk-pollen-gauge-tick\" style=\"left:' + pct(th.high).toFixed(2) + '%\"><\/span>' +\n                '<span class=\"lk-pollen-gauge-tick\" style=\"left:' + pct(th.veryHigh).toFixed(2) + '%\"><\/span>' +\n                '<span class=\"lk-pollen-gauge-marker\" style=\"left:' + markerLeft.toFixed(2) + '%\"><\/span>' +\n            '<\/div><\/div>';\n        }\n\n        function pollenRowHtml(sp, value) {\n            const lvl = pollenLevel(value, sp.th);\n            const n = Number(value);\n            const valueHtml = Number.isFinite(n)\n                ? escapeHtml(fmt(n, n < 10 ? 1 : 0)) + ' <small>zrn\/m\u00b3<\/small>'\n                : '\u2014';\n            return '<div class=\"lk-pollen-row\">' +\n                '<div class=\"lk-pollen-head\">' +\n                    '<span class=\"lk-pollen-name\"><span class=\"lk-dot\" style=\"background:' + sp.color + '\"><\/span>' + escapeHtml(sp.label) + '<\/span>' +\n                    '<span class=\"lk-pollen-value\">' + valueHtml + '<\/span>' +\n                '<\/div>' +\n                '<div class=\"lk-pollen-scale\">' + pollenGaugeHtml(value, sp.th) + '<span class=\"lk-pill ' + lvl.cls + '\">' + escapeHtml(lvl.label) + '<\/span><\/div>' +\n            '<\/div>';\n        }\n\n        \/* Redak po redak + naslovni sa\u017eetak (najozbiljnija vrsta trenuta\u010dno u sezoni). *\/\n        function renderPollenCard(aq) {\n            const rows = POLLEN_SPECIES.map(sp => {\n                const value = aq ? aq[sp.role + '_pollen'] : null;\n                return {sp: sp, value: value, lvl: pollenLevel(value, sp.th)};\n            });\n\n            const rowsEl = qs('pollen-rows');\n            if (rowsEl) rowsEl.innerHTML = rows.map(r => pollenRowHtml(r.sp, r.value)).join('');\n\n            const summaryEl = qs('pollen-summary');\n            if (summaryEl) {\n                const active = rows.filter(r => r.lvl.tier !== 'none')\n                    .sort((a, b) => POLLEN_RANK[b.lvl.tier] - POLLEN_RANK[a.lvl.tier] || Number(b.value) - Number(a.value));\n                if (!active.length) {\n                    summaryEl.innerHTML = '<span class=\"lk-pill neutral\">Izvan peludne sezone<\/span>';\n                } else {\n                    const top = active[0];\n                    summaryEl.innerHTML = 'Trenuta\u010dno najvi\u0161e: <strong>' + escapeHtml(top.sp.label) + '<\/strong> <span class=\"lk-pill ' + top.lvl.cls + '\">' + escapeHtml(top.lvl.label) + '<\/span>';\n                }\n            }\n        }\n\n        function aqiLabel(value) {\n            const n = Number(value);\n            const svgSmile = '<svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><path d=\"M8 14s1.5 2 4 2 4-2 4-2\"><\/path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"><\/line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"><\/line><\/svg>';\n            const svgNeutral = '<svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><line x1=\"8\" y1=\"15\" x2=\"16\" y2=\"15\"><\/line><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"><\/line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"><\/line><\/svg>';\n            const svgSad = '<svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><circle cx=\"12\" cy=\"12\" r=\"10\"><\/circle><path d=\"M16 16s-1.5-2-4-2-4 2-4 2\"><\/path><line x1=\"9\" y1=\"9\" x2=\"9.01\" y2=\"9\"><\/line><line x1=\"15\" y1=\"9\" x2=\"15.01\" y2=\"9\"><\/line><\/svg>';\n\n            if (!Number.isFinite(n)) return {label:'NEDOSTUPNO', cls:'warn', face:svgNeutral};\n            if (n <= 20) return {label:'DOBRA', cls:'', face:svgSmile};\n            if (n <= 40) return {label:'ZADOVOLJAVAJU\u0106A', cls:'', face:svgSmile};\n            if (n <= 60) return {label:'UMJERENA', cls:'warn', face:svgNeutral};\n            if (n <= 80) return {label:'LO\u0160A', cls:'danger', face:svgSad};\n            if (n <= 100) return {label:'VRLO LO\u0160A', cls:'danger', face:svgSad};\n            return {label:'IZNIMNO LO\u0160A', cls:'danger', face:svgSad};\n        }\n\n        \/* Generi\u010dka segmentirana traka (dijeli vizualni jezik s trakom pragova vodostaja i peludi):\n           cutpoints su rastu\u0107e granice zona, colors ima jedan element vi\u0161e od cutpoints. *\/\n        function segmentedGaugeHtml(value, cutpoints, colors) {\n            const n = Number(value);\n            const top = cutpoints[cutpoints.length - 1];\n            const max = top * 1.15;\n            const pct = v => Math.max(0, Math.min(100, (v \/ max) * 100));\n            const stops = [];\n            let from = 0;\n            cutpoints.forEach((cp, i) => {\n                stops.push(colors[i] + ' ' + from.toFixed(2) + '%');\n                stops.push(colors[i] + ' ' + pct(cp).toFixed(2) + '%');\n                from = pct(cp);\n            });\n            stops.push(colors[colors.length - 1] + ' ' + from.toFixed(2) + '%');\n            stops.push(colors[colors.length - 1] + ' 100%');\n            const marker = pct(Number.isFinite(n) ? Math.max(n, 0) : 0);\n            const ticks = cutpoints.map(cp => '<span class=\"lk-scale-gauge-tick\" style=\"left:' + pct(cp).toFixed(2) + '%\"><\/span>').join('');\n            return '<div class=\"lk-scale-gauge\"><div class=\"lk-scale-gauge-track\" style=\"background:linear-gradient(90deg,' + stops.join(',') + ')\">' +\n                ticks + '<span class=\"lk-scale-gauge-marker\" style=\"left:' + marker.toFixed(2) + '%\"><\/span><\/div><\/div>';\n        }\n\n        \/* Pragovi po one\u010di\u0161\u0107iva\u010du (\u00b5g\/m\u00b3) \u2013 Njema\u010dki savezni ured za okoli\u0161 (UBA), ista\n           zdravstveno utemeljena metodologija kao europski AQI. Vrijednost svakog th je\n           PRVA vrijednost sljede\u0107e razine (isklju\u010divo ve\u0107e ili jednako), pa je \"good\" prag\n           gornja granica \"vrlo dobro\" + 1 itd. Vidi PHP komentar uz lkmeteo_aqi_help_html(). *\/\n        const AQI_POLLUTANTS = [\n            {role:'pm2_5',            key:'pm25', label:'PM2.5', name:'sitne lebde\u0107e \u010destice',  hint:'Oko 30 puta tanje od vlasi kose \u2013 ulaze duboko u plu\u0107a. Najvi\u0161e od lo\u017eenja drva i ugljena, prometa i spaljivanja.', th:{good:11,  moderate:21,  poor:26,  veryPoor:51}},\n            {role:'pm10',             key:'pm10', label:'PM10',  name:'lebde\u0107e \u010destice',        hint:'Pra\u0161ina, \u010da\u0111a i dim koje udi\u0161emo \u2013 zadr\u017eavaju se u nosu, grlu i di\u0161nim putovima. Lo\u017eenje, promet, pra\u0161ina s cesta i polja.', th:{good:21,  moderate:36,  poor:51,  veryPoor:101}},\n            {role:'nitrogen_dioxide', key:'no2',  label:'NO\u2082',   name:'du\u0161ikov dioksid',        hint:'Plin iz ispu\u0161nih cijevi (osobito dizela\u0161a) i izgaranja goriva \u2013 najvi\u0161e uz prometne ceste u jutarnjoj i popodnevnoj gu\u017evi.', th:{good:21,  moderate:41,  poor:101, veryPoor:201}},\n            {role:'ozone',            key:'o3',   label:'O\u2083',    name:'prizemni ozon',          hint:'Ne ispu\u0161ta ga nijedan dimnjak \u2013 nastaje na suncu iz ispu\u0161nih plinova. Najvi\u0161i je ljeti u toplim, sun\u010danim poslijepodnevima.', th:{good:61,  moderate:121, poor:181, veryPoor:241}}\n        ];\n        const AQI_GAUGE_COLORS = ['#0f6b3a', '#8bc48a', '#f6e6a8', '#f3ae72', '#d9605f'];\n\n        function aqiPollutantLevel(value, th) {\n            const n = Number(value);\n            if (!Number.isFinite(n)) return {label:'\u2014', cls:'neutral'};\n            if (n < th.good) return {label:'Vrlo dobro', cls:'best'};\n            if (n < th.moderate) return {label:'Dobro', cls:'good'};\n            if (n < th.poor) return {label:'Umjereno', cls:'warn'};\n            if (n < th.veryPoor) return {label:'Lo\u0161e', cls:'danger'};\n            return {label:'Vrlo lo\u0161e', cls:'severe'};\n        }\n\n        function aqiRowHtml(p, value) {\n            const lvl = aqiPollutantLevel(value, p.th);\n            const n = Number(value);\n            const valueHtml = Number.isFinite(n) ? escapeHtml(fmt(n, 1)) + ' <small>\u00b5g\/m\u00b3<\/small>' : '\u2014';\n            const cutpoints = [p.th.good, p.th.moderate, p.th.poor, p.th.veryPoor];\n            return '<div class=\"lk-aqi-row\">' +\n                '<div class=\"lk-aqi-row-head\">' +\n                    '<span class=\"lk-aqi-row-name\">' + escapeHtml(p.label) + (p.name ? ' <em>' + escapeHtml(p.name) + '<\/em>' : '') + '<\/span>' +\n                    '<span class=\"lk-aqi-row-value\">' + valueHtml + '<\/span>' +\n                '<\/div>' +\n                (p.hint ? '<div class=\"lk-aqi-row-hint\">' + escapeHtml(p.hint) + '<\/div>' : '') +\n                '<div class=\"lk-aqi-row-scale\">' + segmentedGaugeHtml(value, cutpoints, AQI_GAUGE_COLORS) + '<span class=\"lk-pill ' + lvl.cls + '\">' + escapeHtml(lvl.label) + '<\/span><\/div>' +\n            '<\/div>';\n        }\n\n        function uvLabel(value) {\n            const n = Number(value);\n            if (!Number.isFinite(n)) return {label:'\u2014', cls:'warn'};\n            if (n <= 2) return {label:'NIZAK', cls:''};\n            if (n <= 5) return {label:'UMJEREN', cls:'warn'};\n            if (n <= 7) return {label:'VISOK', cls:'warn'};\n            if (n <= 10) return {label:'VRLO VISOK', cls:'danger'};\n            return {label:'EKSTREMAN', cls:'danger'};\n        }\n\n        function timeOnly(str) {\n            if (!str) return '\u2014';\n            const d = new Date(str);\n            if (isNaN(d.getTime())) return '\u2014';\n            return d.toLocaleTimeString('hr-HR', {hour:'2-digit', minute:'2-digit'});\n        }\n\n        function dateShort(str) {\n            if (!str) return '';\n            const d = new Date(str + 'T12:00:00');\n            if (isNaN(d.getTime())) return '';\n            return d.toLocaleDateString('hr-HR', {day:'2-digit', month:'2-digit'});\n        }\n\n        function dayName(str) {\n            if (!str) return '';\n            const d = new Date(str + 'T12:00:00');\n            if (isNaN(d.getTime())) return '';\n            return ['NED','PON','UTO','SRI','\u010cET','PET','SUB'][d.getDay()];\n        }\n\n        function makeWaterStatus(text, mode) {\n            const cls = mode === 'danger' ? 'lk-water-status is-danger'\n                     : mode === 'warn' ? 'lk-water-status is-warn'\n                     : 'lk-water-status';\n            const icon = mode === 'danger' ? '!' : mode === 'warn' ? '!' : '\u2713';\n            return '<span class=\"' + cls + '\"><span class=\"lk-water-status-icon\">' + icon + '<\/span><span class=\"lk-water-status-text\">' + text + '<\/span><\/span>';\n        }\n\n        \/* =========================================================\n           VODOSTAJI \u2013 pomo\u0107ne funkcije prikaza (v0.9.7)\n           ========================================================= *\/\n        \/* Redoslijed prati tok rijeke: uzvodno \u2192 nizvodno. *\/\n        const LK_CONFIG = {\"river_order\":[\"karlovac\",\"recica\",\"jamnicka\",\"sisinec\",\"farkasic\"],\"river_short\":{\"karlovac\":\"Karlovac\",\"recica\":\"Re\\u010dica\",\"jamnicka\":\"J. Kiselica\",\"sisinec\":\"\\u0160i\\u0161inec\",\"farkasic\":\"Farka\\u0161i\\u0107\"},\"odra_order\":[\"odra\",\"crnac\"],\"detail_key\":\"farkasic\",\"detail_air_place\":\"Stari Farka\\u0161i\\u0107\"};\n        const RIVER_ORDER = LK_CONFIG.river_order || [];\n        const RIVER_SHORT = LK_CONFIG.river_short || {};\n        const ODRA_ORDER = LK_CONFIG.odra_order || [];\n        const DETAIL_KEY = LK_CONFIG.detail_key || RIVER_ORDER[RIVER_ORDER.length - 1];\n        \/* Boje moraju odgovarati lkmeteo_water_threshold_colors() u PHP-u. *\/\n        const WATER_SAFE_COLOR = '#d6e6f5';\n        const WATER_THRESHOLDS = [\n            {key:'preparation',   name:'pripremnog stanja',  color:'#f1dc8a'},\n            {key:'regular',       name:'redovnih mjera',     color:'#f4b46d'},\n            {key:'extraordinary', name:'izvanrednih mjera',  color:'#ea8467'},\n            {key:'emergency',     name:'izvanrednog stanja', color:'#c94848'}\n        ];\n\n        \/* Number(null) je 0, a to bi la\u017eno pokazalo \u201e0 cm\u201d; zato null\/prazno tretiramo kao nepoznato. *\/\n        function toNum(value) {\n            if (value === null || value === undefined || value === '') return NaN;\n            return Number(value);\n        }\n\n        function signedCm(value) {\n            const n = toNum(value);\n            if (!Number.isFinite(n)) return '\u2014';\n            if (Math.abs(n) < 0.5) return '0 cm';\n            return (n > 0 ? '+' : '\u2212') + fmt(Math.abs(n), 0) + ' cm';\n        }\n\n        function waterDirection(value) {\n            const n = toNum(value);\n            if (!Number.isFinite(n)) return '';\n            if (n >= 0.5) return 'up';\n            if (n <= -0.5) return 'down';\n            return 'flat';\n        }\n\n        \/* Strelica prati smjer i ja\u010dinu promjene: vodoravna = stagnacija, kosa = manja promjena (< 2 cm), okomita = ve\u0107a. *\/\n        function waterArrowSvg(value) {\n            const n = toNum(value);\n            const head = '<svg viewBox=\"0 0 24 24\" width=\"17\" height=\"17\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">';\n            if (!Number.isFinite(n) || Math.abs(n) < 0.5) return head + '<line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"><\/line><polyline points=\"12 5 19 12 12 19\"><\/polyline><\/svg>';\n            if (n >= 2) return head + '<line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"5\"><\/line><polyline points=\"5 12 12 5 19 12\"><\/polyline><\/svg>';\n            if (n > 0) return head + '<line x1=\"7\" y1=\"17\" x2=\"17\" y2=\"7\"><\/line><polyline points=\"7 7 17 7 17 17\"><\/polyline><\/svg>';\n            if (n <= -2) return head + '<line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"><\/line><polyline points=\"19 12 12 19 5 12\"><\/polyline><\/svg>';\n            return head + '<line x1=\"7\" y1=\"7\" x2=\"17\" y2=\"17\"><\/line><polyline points=\"17 7 17 17 7 17\"><\/polyline><\/svg>';\n        }\n\n        \/* Vrijeme mjerenja + koliko je staro (ra\u010duna se u pregledniku pri svakom osvje\u017eavanju). *\/\n        function waterFreshness(station) {\n            const measured = station && station.measured_at ? new Date(station.measured_at) : null;\n            if (!measured || Number.isNaN(measured.getTime())) {\n                return {cls:'', html: escapeHtml(station && station.display_time ? station.display_time : 'Vrijeme mjerenja nije potvr\u0111eno')};\n            }\n            const ageMin = Math.max(0, Math.round((Date.now() - measured.getTime()) \/ 60000));\n            let ageText;\n            if (ageMin < 1) ageText = 'upravo objavljeno';\n            else if (ageMin < 60) ageText = 'prije ' + ageMin + ' min';\n            else if (ageMin < 1440) {\n                const h = Math.floor(ageMin \/ 60), m = ageMin % 60;\n                ageText = 'prije ' + h + ' h' + (m ? ' ' + m + ' min' : '');\n            } else ageText = 'prije ' + Math.floor(ageMin \/ 1440) + ' d';\n\n            const clock = measured.toLocaleTimeString('hr-HR', {hour:'2-digit', minute:'2-digit'});\n            const sameDay = measured.toDateString() === new Date().toDateString();\n            const when = sameDay\n                ? 'danas ' + clock\n                : measured.toLocaleDateString('hr-HR', {day:'2-digit', month:'2-digit'}) + ' ' + clock;\n\n            let cls = 'is-fresh', suffix = '';\n            if (ageMin > 360) { cls = 'is-stale'; suffix = ' \u00b7 zadnji dostupan podatak'; }\n            else if (ageMin > 120) { cls = 'is-latest'; suffix = ' \u00b7 zadnje mjerenje'; }\n            return {cls: cls, html: escapeHtml(when + ' \u00b7 ' + ageText + suffix)};\n        }\n\n        \/* Tra\u017ei promjenu preko SVIH raspolo\u017eivih pojedina\u010dnih mjerenja (satni 24h zapis +\n           gusti do-8-dana zapis), spojenih i bez duplikata po to\u010dnom vremenu. Ni jedan izvor\n           sam za sebe ne mora pokrivati cijeli prozor: history_24h pokriva zadnjih ~24-30 h,\n           history_7d raste postupno kako radi cron, pa spajanje daje najbolju mogu\u0107u pokrivenost\n           umjesto da jedan rijedak izvor \"sakrije\" drugi, potpuniji. *\/\n        function waterHistoryPoints(station) {\n            const byTs = new Map();\n            const add = (rows) => {\n                (Array.isArray(rows) ? rows : []).forEach(row => {\n                    const ts = Number(row && row.timestamp || 0) * 1000;\n                    const level = toNum(row && row.level_cm);\n                    if (Number.isFinite(ts) && ts > 0 && Number.isFinite(level)) byTs.set(ts, level);\n                });\n            };\n            add(station && station.history_24h);\n            add(station && station.history_7d);\n            add(station && station.history_30d); \/* dnevni zapis kao krajnji fallback za du\u017ee prozore *\/\n            return Array.from(byTs, ([ts, level]) => ({ts, level})).sort((a, b) => a.ts - b.ts);\n        }\n\n        \/* Promjena prema najbli\u017eem slu\u017ebenom mjerenju otprilike prije `hours` sati. Nije prognoza. *\/\n        function waterChangeOver(station, hours, toleranceHours) {\n            const points = waterHistoryPoints(station);\n            const level = toNum(station && station.level_cm);\n            if (!points.length || !Number.isFinite(level)) return null;\n            const measured = station && station.measured_at ? new Date(station.measured_at).getTime() : NaN;\n            const latestTs = Number.isFinite(measured) ? measured : points[points.length - 1].ts;\n            const target = latestTs - hours * 3600000;\n            let best = null, bestDiff = Infinity;\n            points.forEach(p => {\n                if (p.ts >= latestTs - 600000) return; \/* osnovica mora biti jasno starija od zadnjeg mjerenja *\/\n                const diff = Math.abs(p.ts - target);\n                if (diff < bestDiff) { best = p; bestDiff = diff; }\n            });\n            if (!best || bestDiff > toleranceHours * 3600000) return null;\n            return level - best.level;\n        }\n\n        function waterChangeRow(label, value) {\n            const n = toNum(value);\n            const dir = waterDirection(n);\n            const cls = dir === 'up' ? 'is-up' : dir === 'down' ? 'is-down' : (Number.isFinite(n) ? 'is-flat' : 'is-none');\n            return '<div class=\"lk-water-change\"><span>' + escapeHtml(label) + '<\/span>' +\n                '<strong class=\"' + cls + '\">' + (Number.isFinite(n) ? waterArrowSvg(n) + '<b>' + escapeHtml(signedCm(n)) + '<\/b>' : '\u2014') + '<\/strong><\/div>';\n        }\n\n        \/* Traka pragova: kru\u017ei\u0107 = razina, boje = slu\u017ebeni pragovi, tekst = koliko je do sljede\u0107eg praga. *\/\n        function waterGaugeHtml(station) {\n            const limits = station && station.limits ? station.limits : {};\n            const level = toNum(station && station.level_cm);\n            const steps = WATER_THRESHOLDS\n                .map(s => Object.assign({}, s, {value: toNum(limits[s.key])}))\n                .filter(s => Number.isFinite(s.value))\n                .sort((a, b) => a.value - b.value);\n\n            if (!steps.length || !Number.isFinite(level)) {\n                if (!Number.isFinite(level)) return '';\n                return '<div class=\"lk-gauge-none\">' + escapeHtml(station && station.gauge_note ? station.gauge_note : 'Razina bez prikaza pragova obrane od poplava') + '<\/div>';\n            }\n\n            const top = steps[steps.length - 1].value;\n            const max = top * 1.08;\n            const pct = v => Math.max(0, Math.min(100, (v \/ max) * 100));\n\n            const stops = [];\n            let from = 0;\n            let color = WATER_SAFE_COLOR;\n            steps.forEach(s => {\n                stops.push(color + ' ' + from.toFixed(2) + '% ' + pct(s.value).toFixed(2) + '%');\n                from = pct(s.value);\n                color = s.color;\n            });\n            stops.push(color + ' ' + from.toFixed(2) + '% 100%');\n\n            const next = steps.find(s => s.value > level);\n            const captionLabel = next ? 'Do ' + next.name : 'Iznad praga izvanrednog stanja';\n            const captionValue = next ? fmt(next.value - level, 0) + ' cm' : '+' + fmt(level - top, 0) + ' cm';\n\n            return '<div class=\"lk-gauge\" role=\"img\" aria-label=\"' + escapeHtml('Vodostaj ' + fmt(level, 0) + ' cm. ' + captionLabel + ': ' + captionValue + '.') + '\">' +\n                '<div class=\"lk-gauge-track\" style=\"background:linear-gradient(90deg,' + stops.join(',') + ')\">' +\n                    steps.map(s => '<span class=\"lk-gauge-tick\" style=\"left:' + pct(s.value).toFixed(2) + '%\"><\/span>').join('') +\n                    '<span class=\"lk-gauge-marker\" style=\"left:' + pct(level).toFixed(2) + '%\"><\/span>' +\n                '<\/div>' +\n                '<div class=\"lk-gauge-caption\"><span>' + escapeHtml(captionLabel) + '<\/span><strong>' + escapeHtml(captionValue) + '<\/strong><\/div>' +\n            '<\/div>';\n        }\n\n        function waterStatusClass(station) {\n            if (!station || !station.ok) return 'is-unavailable';\n            if (station.status === 'preparation') return 'is-preparation';\n            if (station.status === 'regular') return 'is-regular';\n            if (station.status === 'extraordinary') return 'is-extraordinary';\n            if (station.status === 'emergency') return 'is-emergency';\n            if (station.status === 'information') return 'is-info';\n            return '';\n        }\n\n        \/* Tolerancija raste s duljinom prozora jer du\u017ei prozori sve vi\u0161e ovise o dnevnom\n           (a ne satnom) zapisu, gdje se vrijeme mjerenja unutar dana mo\u017ee razlikovati. *\/\n        function waterRangeTolerance(range) {\n            if (range === '14d' || range === '30d') return 30;\n            if (range === '7d') return 9;\n            if (range === '3d') return 6;\n            return 3;\n        }\n\n        \/* Vrijednost promjene za odabrani raspon: 24h koristi isti temelj kao dosad\n           (najbli\u017ee mjerenje ~24 h unatrag), a dulji rasponi tra\u017ee mjerenje ~N dana unatrag\n           iz iste povijesti (gusta do 8 dana, dnevna dalje). Nije prognoza. *\/\n        function waterRangeChange(station, range) {\n            const cfg = WATER_RANGES[range] || WATER_RANGES['24h'];\n            return waterChangeOver(station, cfg.hours, waterRangeTolerance(range));\n        }\n\n        \/* Pregled toka rijeke: to\u010dka = stanje obrane, broj = razina, strelica = promjena za odabrani raspon. *\/\n        function renderRiverStrip(river, range) {\n            const holder = qs('river-strip-nodes');\n            if (!holder) return;\n            holder.innerHTML = RIVER_ORDER.map(key => {\n                const st = river && river[key] ? river[key] : null;\n                const ok = !!(st && st.ok);\n                const chg = ok ? waterRangeChange(st, range) : NaN;\n                const dir = waterDirection(chg);\n                const chgHtml = Number.isFinite(chg)\n                    ? (dir === 'up' ? '\u2191 ' : dir === 'down' ? '\u2193 ' : '\u2192 ') + escapeHtml(fmt(Math.abs(chg), 0))\n                    : (ok ? '\u2014' : '');\n                const label = RIVER_SHORT[key] + (ok ? ': ' + fmt(st.level_cm, 0) + ' cm' : ': podatak nije dostupan');\n                return '<button type=\"button\" class=\"lk-river-node\" data-river-jump=\"' + key + '\" aria-label=\"' + escapeHtml(label + '. Prika\u017ei karticu postaje.') + '\">' +\n                    '<span class=\"lk-river-dot ' + waterStatusClass(st) + '\"><\/span>' +\n                    '<span class=\"lk-river-name\">' + escapeHtml(RIVER_SHORT[key]) + '<\/span>' +\n                    '<span class=\"lk-river-level\">' + (ok ? escapeHtml(fmt(st.level_cm, 0)) + '<small>cm<\/small>' : '\u2014') + '<\/span>' +\n                    '<span class=\"lk-river-chg ' + (dir === 'up' ? 'is-up' : dir === 'down' ? 'is-down' : '') + '\">' + chgHtml + '<\/span>' +\n                '<\/button>';\n            }).join('');\n        }\n\n        function scrollToWaterTarget(el) {\n            if (!el) return;\n            const reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n            el.scrollIntoView({behavior: reduce ? 'auto' : 'smooth', block: 'start'});\n            if (typeof el.focus === 'function') {\n                try { el.focus({preventScroll: true}); } catch (e) { \/* bez fokusa *\/ }\n            }\n        }\n\n        function radarTimeLabel(unixTime) {\n            const d = new Date(Number(unixTime) * 1000);\n            if (isNaN(d.getTime())) return '\u2014';\n            return d.toLocaleTimeString('hr-HR', {hour:'2-digit', minute:'2-digit'});\n        }\n\n        function updateRadarControls() {\n            const range = qs('radar-range');\n            const startEl = qs('radar-start');\n            const endEl = qs('radar-end');\n            const currentEl = qs('radar-current');\n\n            if (!range) return;\n\n            if (!radarFrames.length) {\n                range.min = 0; range.max = 0; range.value = 0; range.disabled = true;\n                if (startEl) startEl.textContent = '\u2014';\n                if (endEl) endEl.textContent = '\u2014';\n                if (currentEl) currentEl.textContent = '\u2014';\n                return;\n            }\n\n            range.min = 0;\n            range.max = Math.max(0, radarFrames.length - 1);\n            range.value = Math.max(0, radarIndex);\n            range.disabled = !radarReady;\n\n            if (startEl) startEl.textContent = radarTimeLabel(radarFrames[0].time);\n            if (endEl) endEl.textContent = radarTimeLabel(radarFrames[radarFrames.length - 1].time);\n            if (currentEl) {\n                const idx = Math.max(0, radarIndex);\n                currentEl.textContent = radarTimeLabel(radarFrames[idx].time);\n            }\n        }\n\n        \/* Svi kadrovi se dodaju odmah (prozirni), pa se plo\u010dice u\u010ditaju unaprijed;\n           animacija samo mijenja prozirnost \u2013 nema praznih bljeskova izme\u0111u kadrova. *\/\n        function showRadarFrame(index) {\n            if (!map || !radarReady || !radarLayers.length) return;\n            index = Math.max(0, Math.min(index, radarLayers.length - 1));\n            radarLayers.forEach(layer => { if (!map.hasLayer(layer)) layer.addTo(map); });\n            radarLayers.forEach((layer, i) => layer.setOpacity(i === index ? 0.7 : 0));\n            radarIndex = index;\n            if (outsideMaskLayer?.bringToFront) outsideMaskLayer.bringToFront();\n            if (boundaryLayer?.bringToFront) boundaryLayer.bringToFront();\n            if (placeLayer?.bringToFront) placeLayer.bringToFront();\n            updateRadarControls();\n        }\n\n        function stopRadarAnimation() {\n            if (radarTimer) {\n                clearInterval(radarTimer);\n                radarTimer = null;\n            }\n            const btn = root.querySelector('[data-action=\"radar-play\"]');\n            if (btn) {\n                btn.innerHTML = '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M8 5v14l11-7z\"><\/path><\/svg>';\n                btn.setAttribute('aria-label', 'Pokreni radarsku animaciju');\n            }\n        }\n\n        function toggleRadarAnimation() {\n            if (!radarReady || !radarFrames.length) return;\n            const btn = root.querySelector('[data-action=\"radar-play\"]');\n            if (radarTimer) { stopRadarAnimation(); return; }\n            if (btn) {\n                btn.innerHTML = '<svg viewBox=\"0 0 24 24\" width=\"16\" height=\"16\" fill=\"currentColor\"><path d=\"M6 19h4V5H6v14zm8-14v14h4V5h-4z\"><\/path><\/svg>';\n                btn.setAttribute('aria-label', 'Zaustavi radarsku animaciju');\n            }\n            radarTimer = setInterval(function () {\n                const next = radarIndex >= radarLayers.length - 1 ? 0 : radarIndex + 1;\n                showRadarFrame(next);\n            }, 850);\n        }\n\n        function loadRadarFrames() { \/* RainViewer uklonjen \u2013 vidi initMap(). *\/ }\n\n        function hideRadarLayer() {\n            stopRadarAnimation();\n            radarLayers.forEach(layer => { if (map && map.hasLayer(layer)) map.removeLayer(layer); });\n        }\n\n        function setMapMode(mode) {\n            infoMode = mode;\n            root.querySelectorAll('[data-mapmode]').forEach(btn => {\n                btn.classList.toggle('is-active', btn.getAttribute('data-mapmode') === mode);\n            });\n            const controls = qs('radar-controls');\n            if (mode === 'radar') {\n                if (controls) controls.classList.add('is-visible');\n                \/* Radar je grube rezolucije (izvor daje najvi\u0161e zoom 7), pa se prikazuje\n                   regionalno: vidi se oborina koja dolazi prema op\u0107ini, a ne mutni blokovi. *\/\n                if (map) map.setView(muniBounds ? muniBounds.getCenter() : map.getCenter(), map.getSize().x < 520 ? 8.5 : 9.25, {animate:true});\n                if (radarReady && radarFrames.length) {\n                    radarIndex = radarFrames.length - 1;\n                    showRadarFrame(radarIndex);\n                }\n                if (!radarRefreshTimer) radarRefreshTimer = setInterval(loadRadarFrames, 10 * 60 * 1000);\n            } else {\n                if (controls) controls.classList.remove('is-visible');\n                hideRadarLayer();\n                if (radarRefreshTimer) { clearInterval(radarRefreshTimer); radarRefreshTimer = null; }\n                if (map && muniBounds && !mapUserMoved) fitMunicipality(true);\n                else if (map && muniBounds && radarWasActive) fitMunicipality(true);\n            }\n            radarWasActive = (mode === 'radar');\n            renderPlaceLabels();\n        }\n\n        function renderPlaceLabels() {\n            if (!window.L || !map) return;\n            if (placeLayer) placeLayer.clearLayers();\n            else placeLayer = L.layerGroup([], {pane:'lkLabelsPane'}).addTo(map);\n\n            const fallback = snapshotData?.forecast?.current || {};\n            const narrowMap = map.getSize().x < 520;\n\n            places.forEach(place => {\n                if (narrowMap && place.mobile === false) return;\n                const current = place.current || fallback;\n                let metric = '';\n\n                if (infoMode === 'temperature') {\n                    metric = '<span class=\"lk-weather-symbol\" aria-hidden=\"true\">' + weatherIcon(current.weather_code, current.is_day ?? fallback.is_day) + '<\/span>' +\n                             '<span>' + fmt(current.temperature_2m, 0) + '\u00b0C<\/span>';\n                } else if (infoMode === 'wind') {\n                    const deg = Number(current.wind_direction_10m) || 0;\n                    metric = '<span class=\"lk-wind-arrow\" style=\"transform:rotate(' + deg + 'deg)\" aria-hidden=\"true\"><svg viewBox=\"0 0 24 24\"><path d=\"M12 2L19 21L12 17L5 21L12 2Z\"><\/path><\/svg><\/span>' +\n                             '<span>' + fmt(current.wind_speed_10m, 0) + ' km\/h<\/span>';\n                } else if (infoMode === 'rain') {\n                    const p = Number(current.precipitation) || 0;\n                    const symbol = p > 0.05 ? '<svg viewBox=\"0 0 24 24\" width=\"1em\" height=\"1em\" stroke=\"currentColor\" stroke-width=\"2\" fill=\"none\"><path d=\"M12 15v8\"><\/path><\/svg>' : '';\n                    metric = '<span class=\"lk-weather-symbol\" aria-hidden=\"true\">' + symbol + '<\/span>' +\n                             '<span>' + fmt(p, 1) + ' mm<\/span>';\n                }\n\n                const dx = Number(place.dx) || 0;\n                const dy = Number(place.dy) || 0;\n                const metricHtml = metric ? '<div class=\"lk-place-weather\">' + metric + '<\/div>' : '';\n                const html = '<div class=\"lk-place-label-inner\" style=\"--lk-dx:' + dx + 'px;--lk-dy:' + dy + 'px\">' +\n                             '<div>' + place.name + '<\/div>' + metricHtml + '<\/div>';\n\n                const icon = L.divIcon({ className:'lk-place-label', html:html, iconSize:[1,1], iconAnchor:[0,0] });\n                L.marker([place.lat, place.lng], { pane:'lkLabelsPane', icon:icon, interactive:false }).addTo(placeLayer);\n            });\n            if (placeLayer.bringToFront) placeLayer.bringToFront();\n        }\n\n        \/* Op\u0107ina \u0161to ve\u0107a, ali uvijek cijela: visina okvira prilago\u0111ava se obliku op\u0107ine\n           (koliko dopu\u0161ta prozor), a zoom je kontinuiran pa granica dodiruje rub okvira\n           uz mali odmak. *\/\n        const FIT_PAD = { side: 10, top: 14, bottom: 14 };\n        function sizeMapFrameToMunicipality() {\n            const frame = root.querySelector('.lkmeteo-map-frame');\n            if (!frame || !map || !muniBounds) return false;\n            const width = frame.clientWidth;\n            if (!width) return false;\n            \/* Omjer visina\/\u0161irina op\u0107ine u projekciji karte (neovisno o zoomu). *\/\n            const z = 12;\n            const nw = map.project(muniBounds.getNorthWest(), z);\n            const se = map.project(muniBounds.getSouthEast(), z);\n            const ratio = Math.abs(se.y - nw.y) \/ Math.max(1, Math.abs(se.x - nw.x));\n            const viewportH = window.innerHeight || document.documentElement.clientHeight || 800;\n            const maxH = Math.max(360, Math.min(900, Math.round(viewportH - 110)));\n            const ideal = Math.round((width - 2 * FIT_PAD.side) * ratio + FIT_PAD.top + FIT_PAD.bottom);\n            const target = Math.max(360, Math.min(maxH, ideal));\n            if (Math.abs(frame.clientHeight - target) > 2) {\n                frame.style.height = target + 'px';\n                map.invalidateSize(false);\n                return true;\n            }\n            return false;\n        }\n\n        function fitMunicipality(animate) {\n            if (!map || !muniBounds) return;\n            sizeMapFrameToMunicipality();\n            map.fitBounds(muniBounds, {\n                paddingTopLeft: [FIT_PAD.side, FIT_PAD.top],\n                paddingBottomRight: [FIT_PAD.side, FIT_PAD.bottom],\n                animate: !!animate\n            });\n        }\n\n        function initMap() {\n            if (!window.L) return;\n            \/* zoomSnap 0: kontinuirani zoom \u2013 op\u0107ina to\u010dno ispunjava okvir (bez skokova po 0,25). *\/\n            map = L.map(qs('map'), { zoomControl:true, attributionControl:true, zoomSnap:0, zoomDelta:0.5 }).setView([45.5337, 16.1782], 11);\n            map.on('dragstart', () => { mapUserMoved = true; });\n            map.getContainer().addEventListener('wheel', () => { mapUserMoved = true; }, {passive:true});\n            map.on('zoomstart', e => { if (e && e.originalEvent) mapUserMoved = true; });\n            let fitTimer = null;\n            window.addEventListener('resize', () => {\n                clearTimeout(fitTimer);\n                fitTimer = setTimeout(() => { map.invalidateSize(); if (!mapUserMoved && infoMode !== 'radar') fitMunicipality(false); renderPlaceLabels(); }, 200);\n            });\n\n            map.createPane('lkRadarPane'); map.getPane('lkRadarPane').style.zIndex = 430; map.getPane('lkRadarPane').style.pointerEvents = 'none';\n            map.createPane('lkMaskPane'); map.getPane('lkMaskPane').style.zIndex = 450; map.getPane('lkMaskPane').style.pointerEvents = 'none';\n            map.createPane('lkBoundaryPane'); map.getPane('lkBoundaryPane').style.zIndex = 470; map.getPane('lkBoundaryPane').style.pointerEvents = 'none';\n            map.createPane('lkLabelsPane'); map.getPane('lkLabelsPane').style.zIndex = 510; map.getPane('lkLabelsPane').style.pointerEvents = 'none';\n            map.createPane('lkFallbackPane'); map.getPane('lkFallbackPane').style.zIndex = 180;\n            map.createPane('lkBasePane'); map.getPane('lkBasePane').style.zIndex = 200;\n\n            const osmFallback = L.tileLayer('https:\/\/tile.openstreetmap.org\/{z}\/{x}\/{y}.png', { maxZoom:19, pane:'lkFallbackPane', opacity:1, attribution:'&copy; OpenStreetMap contributors' }).addTo(map);\n            const esri = L.tileLayer('https:\/\/{s}.basemaps.cartocdn.com\/rastertiles\/voyager\/{z}\/{x}\/{y}.png?key=cb1_43rb_1_8d6d89a98429932d13bfb98d', { maxZoom:20, subdomains:'abcd', pane:'lkBasePane', opacity:1, attribution:'&copy; CARTO' });\n            \n            let cartoTileErrors = 0;\n            esri.on('tileerror', function () { cartoTileErrors++; if (cartoTileErrors >= 3 && map.hasLayer(esri)) map.removeLayer(esri); });\n            esri.on('tileload', function () { cartoTileErrors = 0; });\n            \/* CARTO od 2026. tra\u017ei klju\u010d (bez njega vra\u0107a plo\u010dice s natpisom \"API KEY REQUIRED\").\n               Bez upisanog klju\u010da karta koristi samo OpenStreetMap podlogu. *\/\n            if (true) esri.addTo(map);\n\n            if (boundaryUrl) {\n                fetch(boundaryUrl, {cache:'no-store'})\n                    .then(r => r.ok ? r.json() : null)\n                    .then(geojson => {\n                        if (!geojson) { renderPlaceLabels(); return; }\n                        const geometry = geojson?.features?.[0]?.geometry;\n                        if (geometry?.type === 'Polygon' && Array.isArray(geometry.coordinates?.[0])) {\n                            const hole = geometry.coordinates[0].map(c => [c[1], c[0]]);\n                            const world = [[90,-180],[90,180],[-90,180],[-90,-180]];\n                            outsideMaskLayer = L.polygon([world, hole], { pane:'lkMaskPane', stroke:false, fillColor:'#d9e7f2', fillOpacity:.25, fillRule:'evenodd', interactive:false }).addTo(map);\n                        }\n                        boundaryLayer = L.geoJSON(geojson, { pane:'lkBoundaryPane', style:{ color:'#2e74bd', weight:3.2, opacity:1, fill:false, lineCap:'square', lineJoin:'miter' } }).addTo(map);\n                        const bounds = boundaryLayer.getBounds();\n                        if (bounds.isValid()) { muniBounds = bounds; fitMunicipality(false); }\n                        if (outsideMaskLayer?.bringToFront) outsideMaskLayer.bringToFront();\n                        if (boundaryLayer?.bringToFront) boundaryLayer.bringToFront();\n                        renderPlaceLabels();\n                    }).catch(() => renderPlaceLabels());\n            } else {\n                renderPlaceLabels();\n            }\n\n            const attr = map.attributionControl.getContainer();\n            if (attr) attr.classList.add('lk-leaflet-attribution');\n            \/* RainViewer uklonjen (v0.17.1): besplatni API od 2026. je samo za osobnu i\n               obrazovnu upotrebu. Radar se prikazuje iz slu\u017ebenog DHMZ kompozita. *\/\n        }\n\n        function formatStamp(value) {\n            if (!value) return '\u2014';\n            const d = new Date(value);\n            if (Number.isNaN(d.getTime())) return String(value);\n            return d.toLocaleString('hr-HR', {day:'2-digit',month:'2-digit',year:'numeric',hour:'2-digit',minute:'2-digit'});\n        }\n\n        function waterHistoryDateLabel(value) {\n            if (!value) return '';\n            const parts = String(value).split('-');\n            return parts.length === 3 ? parts[2] + '.' + parts[1] + '.' : String(value);\n        }\n\n        function waterHourlyTimeLabel(row) {\n            if (!row) return '';\n            if (row.time) return String(row.time);\n            if (row.measured_at) {\n                const d = new Date(row.measured_at);\n                if (!Number.isNaN(d.getTime())) return d.toLocaleTimeString('hr-HR', {hour:'2-digit', minute:'2-digit'});\n            }\n            return '';\n        }\n\n        function waterHourlyDateTimeLabel(row) {\n            if (!row) return '';\n            const ts = Number(row.timestamp) * 1000;\n            const d = Number.isFinite(ts) && ts > 0 ? new Date(ts) : (row.measured_at ? new Date(row.measured_at) : null);\n            if (!d || Number.isNaN(d.getTime())) return waterHourlyTimeLabel(row);\n            return d.toLocaleDateString('hr-HR', {day:'2-digit', month:'2-digit'}) + ' ' + d.toLocaleTimeString('hr-HR', {hour:'2-digit', minute:'2-digit'});\n        }\n\n        \/* Jedan crta\u010d za sve raspone: 'hourly' i 'dense' crtaju niz pojedina\u010dnih slu\u017ebenih\n           mjerenja (linija), 'band' crta dnevni raspon (sjena min\u2013maks + linija zadnjeg\n           mjerenja dana) iz akumuliranih dnevnih podataka. *\/\n        function waterMiniGraphHtml(rows, options) {\n            const opts = options || {};\n            const title = opts.title || '';\n            const mode = opts.mode || 'band'; \/* 'hourly' | 'dense' | 'band' *\/\n            const pointMode = mode !== 'band';\n            const limits = opts.limits || {};\n            const cleanRows = Array.isArray(rows)\n                ? rows.filter(row => row && Number.isFinite(Number(row.level_cm)))\n                : [];\n\n            const preparation = Number(limits && limits.preparation);\n            const hasPreparation = mode !== 'hourly' && Number.isFinite(preparation);\n            const thresholdHtml = hasPreparation\n                ? '<div class=\"lk-water-history-threshold\">Pripremno stanje: <strong>' + escapeHtml(fmt(preparation, 0)) + ' cm<\/strong><\/div>'\n                : '';\n\n            if (!cleanRows.length) {\n                return '<div class=\"lk-water-history-block is-' + mode + '\">' +\n                    '<div class=\"lk-water-history-head\"><span>' + escapeHtml(title) + '<\/span><\/div>' +\n                    '<div class=\"lk-water-history-empty\">Povijest se automatski prikuplja iz slu\u017ebenog izvora.<\/div>' +\n                    thresholdHtml + '<\/div>';\n            }\n\n            if (pointMode) {\n                cleanRows.sort((a, b) => Number(a.timestamp || 0) - Number(b.timestamp || 0));\n            }\n\n            const highs = cleanRows.map(row => mode === 'band' && Number.isFinite(Number(row.max_cm)) ? Number(row.max_cm) : Number(row.level_cm));\n            const lows  = cleanRows.map(row => mode === 'band' && Number.isFinite(Number(row.min_cm)) ? Number(row.min_cm) : Number(row.level_cm));\n            const observedMin = Math.min.apply(null, lows);\n            const observedMax = Math.max.apply(null, highs);\n            let min = observedMin;\n            let max = observedMax;\n            if (min === max) { min -= 1; max += 1; }\n\n            const observedSpan = Math.max(1, observedMax - observedMin);\n            const thresholdNearDistance = Math.max(40, observedSpan * 1.25);\n            const showPreparationLine = hasPreparation &&\n                preparation >= (observedMin - thresholdNearDistance) &&\n                preparation <= (observedMax + thresholdNearDistance);\n\n            if (showPreparationLine) {\n                min = Math.min(min, preparation);\n                max = Math.max(max, preparation);\n            }\n\n            const rawSpan = Math.max(1, max - min);\n            const pad = Math.max(2, rawSpan * 0.08);\n            min -= pad;\n            max += pad;\n\n            const W = 220, H = mode === 'band' ? 58 : 50, PX = 4, PY = 5;\n            const spanX = Math.max(1, W - PX * 2);\n            const spanY = Math.max(1, H - PY * 2);\n            const xForIndex = (i) => cleanRows.length === 1 ? W \/ 2 : PX + (i \/ (cleanRows.length - 1)) * spanX;\n            const yForValue = (value) => PY + ((max - Number(value)) \/ (max - min)) * spanY;\n\n            const points = cleanRows.map((row, i) => [xForIndex(i), yForValue(row.level_cm)]);\n            const linePoints = points.map(p => p[0].toFixed(1) + ',' + p[1].toFixed(1)).join(' ');\n            const last = points[points.length - 1];\n\n            let bandPolygon = '', areaPolygon = '';\n            if (mode === 'band') {\n                const topPts = cleanRows.map((row, i) => [xForIndex(i), yForValue(Number.isFinite(Number(row.max_cm)) ? row.max_cm : row.level_cm)]);\n                const botPts = cleanRows.map((row, i) => [xForIndex(i), yForValue(Number.isFinite(Number(row.min_cm)) ? row.min_cm : row.level_cm)]).reverse();\n                const bandPts = topPts.concat(botPts).map(p => p[0].toFixed(1) + ',' + p[1].toFixed(1)).join(' ');\n                bandPolygon = '<polygon class=\"lk-water-history-band\" points=\"' + bandPts + '\"><\/polygon>';\n            } else {\n                const areaPoints = PX + ',' + (H - PY) + ' ' + linePoints + ' ' + (W - PX) + ',' + (H - PY);\n                areaPolygon = '<polygon class=\"lk-water-history-area\" points=\"' + areaPoints + '\"><\/polygon>';\n            }\n\n            const firstLabel = mode === 'hourly' ? waterHourlyTimeLabel(cleanRows[0])\n                : mode === 'dense' ? waterHourlyDateTimeLabel(cleanRows[0])\n                : waterHistoryDateLabel(cleanRows[0].date);\n            const lastLabel = mode === 'hourly' ? waterHourlyTimeLabel(cleanRows[cleanRows.length - 1])\n                : mode === 'dense' ? waterHourlyDateTimeLabel(cleanRows[cleanRows.length - 1])\n                : waterHistoryDateLabel(cleanRows[cleanRows.length - 1].date);\n            const countLabel = mode === 'band'\n                ? (cleanRows.length >= 30 ? '30 dana' : cleanRows.length + (cleanRows.length === 1 ? ' dan' : ' dana'))\n                : cleanRows.length + (cleanRows.length === 1 ? ' mjerenje' : ' mjerenja');\n            const statsLabel = mode === 'band'\n                ? countLabel + ' \u00b7 raspon ' + escapeHtml(fmt(observedMin, 0)) + '\u2013' + escapeHtml(fmt(observedMax, 0)) + ' cm'\n                : countLabel + ' \u00b7 min ' + escapeHtml(fmt(observedMin, 0)) + ' \/ max ' + escapeHtml(fmt(observedMax, 0)) + ' cm';\n            const preparationLine = showPreparationLine\n                ? '<line class=\"lk-water-history-threshold-line\" x1=\"' + PX + '\" y1=\"' + yForValue(preparation).toFixed(1) + '\" x2=\"' + (W-PX) + '\" y2=\"' + yForValue(preparation).toFixed(1) + '\"><\/line>'\n                : '';\n\n            return '<div class=\"lk-water-history-block is-' + mode + '\">' +\n                '<div class=\"lk-water-history-head\"><span>' + escapeHtml(title) + '<\/span>' +\n                '<span class=\"lk-water-history-stats\">' + statsLabel + '<\/span><\/div>' +\n                '<svg class=\"lk-water-history-chart\" viewBox=\"0 0 ' + W + ' ' + H + '\" preserveAspectRatio=\"none\" aria-label=\"Kretanje vodostaja\">' +\n                '<line class=\"lk-water-history-grid\" x1=\"' + PX + '\" y1=\"' + (H\/2) + '\" x2=\"' + (W-PX) + '\" y2=\"' + (H\/2) + '\"><\/line>' +\n                preparationLine +\n                bandPolygon + areaPolygon +\n                '<polyline class=\"lk-water-history-line\" points=\"' + linePoints + '\"><\/polyline>' +\n                '<circle class=\"lk-water-history-dot\" cx=\"' + last[0].toFixed(1) + '\" cy=\"' + last[1].toFixed(1) + '\" r=\"2.8\"><\/circle>' +\n                '<\/svg>' +\n                '<div class=\"lk-water-history-dates\"><span>' + escapeHtml(firstLabel) + '<\/span><span>' + escapeHtml(lastLabel) + '<\/span><\/div>' +\n                thresholdHtml + '<\/div>';\n        }\n\n        \/* Isje\u010dak niza za odabrani raspon. 24h\/3d\/7d prednost daju gustoj povijesti (history_7d,\n           svako slu\u017ebeno mjerenje do 8 dana); 14d\/30d koriste dnevni raspon (history_30d, band).\n           Ako gusta povijest jo\u0161 nije prikupljena (netom nakon nadogradnje), 3d\/7d se oslanjaju\n           na dnevni prikaz kako graf ne bi ostao prazan. *\/\n        const WATER_RANGES = {\n            '24h': {days: 1,  hours: 24,   label: '24 SATA',    trendLabel: 'U zadnja 24 h',      graphTitle: 'GRAF \u00b7 24 SATA',   shortLabel: '24 sata',   agoLabel: 'Prije 24 h'},\n            '3d':  {days: 3,  hours: 72,   label: '3 DANA',     trendLabel: 'U zadnja 3 dana',    graphTitle: 'GRAF \u00b7 3 DANA',    shortLabel: '3 dana',    agoLabel: 'Prije 3 dana'},\n            '7d':  {days: 7,  hours: 168,  label: '7 DANA',     trendLabel: 'U zadnjih 7 dana',   graphTitle: 'GRAF \u00b7 7 DANA',   shortLabel: '7 dana',    agoLabel: 'Prije 7 dana'},\n            '14d': {days: 14, hours: 336,  label: '14 DANA',    trendLabel: 'U zadnjih 14 dana',  graphTitle: 'GRAF \u00b7 14 DANA \u00b7 DNEVNI RASPON',     shortLabel: '14 dana',   agoLabel: 'Prije 14 dana'},\n            '30d': {days: 30, hours: 720,  label: '30 DANA',    trendLabel: 'U zadnjih 30 dana',  graphTitle: 'GRAF \u00b7 30 DANA \u00b7 DNEVNI RASPON',     shortLabel: '30 dana',   agoLabel: 'Prije 30 dana'}\n        };\n\n        const WATER_CHANGE_ROWS = ['24h','3d','7d','30d'];\n\n        function waterGraphForRange(station, range) {\n            const cfg = WATER_RANGES[range] || WATER_RANGES['24h'];\n            if (range === '24h') {\n                return {mode:'hourly', rows: station && station.history_24h, title: cfg.graphTitle};\n            }\n            const dense = Array.isArray(station && station.history_7d) ? station.history_7d : [];\n            if (range === '3d' || range === '7d') {\n                const cutoff = Date.now() \/ 1000 - cfg.hours * 3600;\n                const rows = dense.filter(r => Number(r && r.timestamp) >= cutoff);\n                if (rows.length >= 4) return {mode:'dense', rows, title: cfg.graphTitle};\n                \/* Nema jo\u0161 dovoljno guste povijesti \u2013 graf privremeno pada natrag na dnevni raspon. *\/\n                const daily = (Array.isArray(station && station.history_30d) ? station.history_30d : []).slice(-cfg.days);\n                return {mode:'band', rows: daily, title: cfg.graphTitle + ' \u00b7 DNEVNI RASPON'};\n            }\n            const daily = (Array.isArray(station && station.history_30d) ? station.history_30d : []).slice(-cfg.days);\n            return {mode:'band', rows: daily, title: cfg.graphTitle};\n        }\n\n        function renderWaterHistory(stationKey, station, range) {\n            const el = qs('water-' + stationKey + '-history');\n            if (!el) return;\n            const graph = waterGraphForRange(station, range);\n            el.innerHTML = waterMiniGraphHtml(graph.rows, {title: graph.title, mode: graph.mode, limits: (station && station.limits) || {}});\n        }\n\n\n\n        function formatClock(value) {\n            const d = value ? new Date(value) : new Date();\n            if (Number.isNaN(d.getTime())) return '\u2014';\n            return d.toLocaleTimeString('hr-HR', {hour:'2-digit', minute:'2-digit', second:'2-digit'});\n        }\n\n        function updateDetailClock() {\n            const el = qs('det-live-clock');\n            if (el) el.textContent = formatClock(new Date());\n        }\n\n        function detailAirTemperature(data) {\n            const list = Array.isArray(data?.places) ? data.places : [];\n            const wanted = String(LK_CONFIG.detail_air_place || '').toLowerCase();\n            const place = wanted ? list.find(item => String(item?.name || '').toLowerCase() === wanted) : null;\n            const value = Number(place?.current?.temperature_2m);\n            if (Number.isFinite(value)) return value;\n            const fallback = Number(data?.forecast?.current?.temperature_2m);\n            return Number.isFinite(fallback) ? fallback : null;\n        }\n\n        \/* Pragovi obrane od poplava koji upadaju u (pro\u0161ireni) vidljivi raspon grafa \u2013 isti\n           test blizine kao kod trake pragova na glavnim karticama vodostaja, samo ovdje mogu biti\n           prikazana i vi\u0161e od jednog praga odjednom (ovo je \"detaljni\" prikaz). *\/\n        function detailedWaterVisibleThresholds(limits, min, max) {\n            const stages = [\n                {key:'preparation',   label:'Pripremno stanje',   color:'#d4a017'},\n                {key:'regular',       label:'Redovne mjere',      color:'#ef8b2c'},\n                {key:'extraordinary', label:'Izvanredne mjere',   color:'#dd5a32'},\n                {key:'emergency',     label:'Izvanredno stanje',  color:'#c62f38'}\n            ];\n            const span = Math.max(1, max - min);\n            const nearDistance = Math.max(40, span * 1.5);\n            return stages\n                .map(s => Object.assign({}, s, {value: Number(limits && limits[s.key])}))\n                .filter(s => Number.isFinite(s.value) && s.value >= (min - nearDistance) && s.value <= (max + nearDistance));\n        }\n\n        function detailedWaterChartHtml(rows, options) {\n            const opts = options || {};\n            const title = opts.title || '';\n            const subtitle = opts.subtitle || '';\n            const mode = opts.mode || 'time';\n            const band = !!opts.band;\n            const limits = opts.limits || {};\n            \/* Na uskom zaslonu SVG se smanjuje razmjerno \u0161irini kartice, pa bi tekst u istim\n               \"viewBox\" jedinicama postao sitan i ne\u010ditljiv (isti fiksni viewBox koristi se na\n               svim \u0161irinama). fs() kompenzira tu razliku umjesto da tekst bude \u010ditljiv samo na\n               desktopu. *\/\n            const isNarrow = typeof window !== 'undefined' && window.innerWidth <= 650;\n            const fs = base => isNarrow ? Math.round(base * 3) : base;\n            const clean = (Array.isArray(rows) ? rows : [])\n                .filter(row => row && Number.isFinite(Number(row.level_cm)))\n                .map(row => Object.assign({}, row, {\n                    level_cm:Number(row.level_cm),\n                    min_cm:Number.isFinite(Number(row.min_cm)) ? Number(row.min_cm) : Number(row.level_cm),\n                    max_cm:Number.isFinite(Number(row.max_cm)) ? Number(row.max_cm) : Number(row.level_cm),\n                    timestamp:Number(row.timestamp || 0)\n                }))\n                .sort((a,b) => a.timestamp - b.timestamp);\n\n            if (!clean.length) {\n                return '<div class=\"lk-det-chart-head\"><div><div class=\"lk-det-chart-title\">' + escapeHtml(title) + '<\/div><\/div><\/div>' +\n                    '<div class=\"lk-det-chart-empty\">Podaci \u0107e se pojaviti \u010dim se prikupi prvo slu\u017ebeno mjerenje za ovo razdoblje.<\/div>';\n            }\n\n            const lows = clean.map(row => band ? row.min_cm : row.level_cm);\n            const highs = clean.map(row => band ? row.max_cm : row.level_cm);\n            const observedMin = Math.min.apply(null, lows);\n            const observedMax = Math.max.apply(null, highs);\n            let min = observedMin, max = observedMax;\n            if (min === max) { min -= 1; max += 1; }\n            const pad = Math.max(1.5, (max - min) * 0.12);\n            min -= pad; max += pad;\n\n            const thresholds = detailedWaterVisibleThresholds(limits, min, max);\n            thresholds.forEach(t => { min = Math.min(min, t.value); max = Math.max(max, t.value); });\n            if (thresholds.length) { const p2 = (max-min)*0.06; min -= p2; max += p2; }\n\n            const W = 1000, H = isNarrow ? 520 : 230;\n            const L = isNarrow ? 110 : 62, R = 18, T = 22, B = isNarrow ? 70 : 36;\n            const plotW = W - L - R, plotH = H - T - B;\n            const firstTs = clean[0].timestamp || 0;\n            const lastTs = clean[clean.length - 1].timestamp || firstTs;\n            const spanTs = Math.max(1, lastTs - firstTs);\n\n            const xFor = (row, i) => {\n                if (clean.length === 1 || !row.timestamp) return L + (clean.length === 1 ? plotW\/2 : (i\/(clean.length-1))*plotW);\n                return L + ((row.timestamp - firstTs) \/ spanTs) * plotW;\n            };\n            const yFor = value => T + ((max - Number(value)) \/ (max - min)) * plotH;\n\n            const pts = clean.map((row,i) => [xFor(row,i), yFor(row.level_cm)]);\n            const poly = pts.map(p => p[0].toFixed(1)+','+p[1].toFixed(1)).join(' ');\n            const area = L+','+(H-B)+' '+poly+' '+(W-R)+','+(H-B);\n\n            let bandPolygon = '';\n            if (band) {\n                const topPts = clean.map((row,i) => [xFor(row,i), yFor(row.max_cm)]);\n                const botPts = clean.map((row,i) => [xFor(row,i), yFor(row.min_cm)]).reverse();\n                const bandPts = topPts.concat(botPts).map(p => p[0].toFixed(1)+','+p[1].toFixed(1)).join(' ');\n                bandPolygon = '<polygon class=\"lk-det-chart-band\" points=\"'+bandPts+'\"><\/polygon>';\n            }\n\n            let grid = '';\n            for (let i=0; i<5; i++) {\n                const ratio = i\/4;\n                const y = T + ratio*plotH;\n                const val = max - ratio*(max-min);\n                grid += '<line x1=\"'+L+'\" y1=\"'+y.toFixed(1)+'\" x2=\"'+(W-R)+'\" y2=\"'+y.toFixed(1)+'\" stroke=\"#e8eef4\" stroke-width=\"1\"><\/line>';\n                grid += '<text x=\"'+(L-9)+'\" y=\"'+(y+4).toFixed(1)+'\" text-anchor=\"end\" font-size=\"'+fs(11)+'\" fill=\"#8191a1\">'+escapeHtml(fmt(val,0))+'<\/text>';\n            }\n\n            let thresholdLines = '', thresholdLabels = '';\n            thresholds.forEach(t => {\n                const y = yFor(t.value).toFixed(1);\n                thresholdLines += '<line class=\"lk-det-chart-threshold\" x1=\"'+L+'\" y1=\"'+y+'\" x2=\"'+(W-R)+'\" y2=\"'+y+'\" stroke=\"'+t.color+'\"><\/line>';\n                thresholdLabels += '<text x=\"'+(W-R-4)+'\" y=\"'+(Number(y)-4-(isNarrow?6:0)).toFixed(1)+'\" text-anchor=\"end\" font-size=\"'+fs(10)+'\" font-weight=\"700\" fill=\"'+t.color+'\" stroke=\"#fff\" stroke-width=\"4\" paint-order=\"stroke\">'+escapeHtml((isNarrow ? t.label.replace('stanje','st.').replace('mjere','mj.') : t.label)+' '+fmt(t.value,0)+' cm')+'<\/text>';\n            });\n\n            let xlabels = '';\n            const ticks = Math.min(5, clean.length);\n            for (let i=0; i<ticks; i++) {\n                const idx = ticks === 1 ? 0 : Math.round((i\/(ticks-1))*(clean.length-1));\n                const row = clean[idx];\n                const x = xFor(row, idx);\n                let label = '';\n                if (mode === 'day') {\n                    label = waterHistoryDateLabel(row.date || '');\n                } else if (row.timestamp) {\n                    const d = new Date(row.timestamp * 1000);\n                    label = mode === 'week'\n                        ? d.toLocaleString('hr-HR',{day:'2-digit',month:'2-digit',hour:'2-digit'})\n                        : d.toLocaleTimeString('hr-HR',{hour:'2-digit',minute:'2-digit'});\n                }\n                xlabels += '<text x=\"'+x.toFixed(1)+'\" y=\"'+(H-10)+'\" text-anchor=\"'+(i===0?'start':(i===ticks-1?'end':'middle'))+'\" font-size=\"'+fs(10)+'\" fill=\"#8b9aaa\">'+escapeHtml(label)+'<\/text>';\n            }\n\n            const first = pts[0];\n            const last = pts[pts.length-1];\n            let endpointMarks = '';\n            if (opts.showEndpoints && clean.length >= 2) {\n                const firstY = Math.max(T + 12, first[1] - 9);\n                const lastY = Math.max(T + 12, last[1] - 9);\n                endpointMarks =\n                    '<circle cx=\"'+first[0].toFixed(1)+'\" cy=\"'+first[1].toFixed(1)+'\" r=\"4\" fill=\"#2e74bd\"><\/circle>' +\n                    '<text x=\"'+(first[0]+7).toFixed(1)+'\" y=\"'+firstY.toFixed(1)+'\" text-anchor=\"start\" font-size=\"'+fs(11)+'\" font-weight=\"700\" fill=\"#173f73\">'+escapeHtml(fmt(clean[0].level_cm,0))+' cm<\/text>' +\n                    '<text x=\"'+(last[0]-7).toFixed(1)+'\" y=\"'+lastY.toFixed(1)+'\" text-anchor=\"end\" font-size=\"'+fs(11)+'\" font-weight=\"700\" fill=\"#173f73\">'+escapeHtml(fmt(clean[clean.length-1].level_cm,0))+' cm<\/text>';\n            }\n            const countText = clean.length + (clean.length === 1 ? ' mjerenje' : ' mjerenja');\n            const stats = band\n                ? countText + ' \u00b7 dnevni raspon ' + fmt(observedMin,0) + '\u2013' + fmt(observedMax,0) + ' cm'\n                : countText + ' \u00b7 min ' + fmt(observedMin,0) + ' \/ max ' + fmt(observedMax,0) + ' cm';\n\n            return '<div class=\"lk-det-chart-head\">' +\n                    '<div><div class=\"lk-det-chart-title\">'+escapeHtml(title)+'<\/div>' +\n                    (subtitle ? '<div class=\"lk-det-detail-subtitle\">'+escapeHtml(subtitle)+'<\/div>' : '') +\n                    '<\/div><div class=\"lk-det-chart-stats\">'+escapeHtml(stats)+'<\/div><\/div>' +\n                '<svg class=\"lk-det-chart-svg\" viewBox=\"0 0 '+W+' '+H+'\" role=\"img\" aria-label=\"'+escapeHtml(title)+'\">' +\n                    grid +\n                    thresholdLines +\n                    bandPolygon +\n                    (band ? '' : '<polygon points=\"'+area+'\" fill=\"#2e74bd\" opacity=\".07\"><\/polygon>') +\n                    '<polyline points=\"'+poly+'\" fill=\"none\" stroke=\"#2e74bd\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" vector-effect=\"non-scaling-stroke\"><\/polyline>' +\n                    thresholdLabels +\n                    endpointMarks +\n                    '<circle cx=\"'+last[0].toFixed(1)+'\" cy=\"'+last[1].toFixed(1)+'\" r=\"4.2\" fill=\"#2e74bd\"><\/circle>' +\n                    xlabels +\n                    '<text x=\"18\" y=\"'+(T+plotH\/2).toFixed(1)+'\" transform=\"rotate(-90 18 '+(T+plotH\/2).toFixed(1)+')\" text-anchor=\"middle\" font-size=\"'+fs(10)+'\" fill=\"#8b9aaa\">cm<\/text>' +\n                '<\/svg>';\n        }\n\n        function detailHistoryRows(station) {\n            const primary = Array.isArray(station?.history_7d) && station.history_7d.length\n                ? station.history_7d\n                : (Array.isArray(station?.history_24h) ? station.history_24h : []);\n            return primary.filter(row => row && Number.isFinite(Number(row.level_cm)) && Number(row.timestamp || 0) > 0)\n                .map(row => Object.assign({}, row, {level_cm:Number(row.level_cm),timestamp:Number(row.timestamp)}))\n                .sort((a,b) => a.timestamp - b.timestamp);\n        }\n\n        function detailPointNear(rows, targetTs, toleranceSeconds) {\n            let best = null, bestDiff = Infinity;\n            (Array.isArray(rows) ? rows : []).forEach(row => {\n                const ts = Number(row?.timestamp || 0);\n                if (!ts) return;\n                const diff = Math.abs(ts - targetTs);\n                if (diff < bestDiff) { best = row; bestDiff = diff; }\n            });\n            return best && bestDiff <= toleranceSeconds ? best : null;\n        }\n\n        function detail24hSummaryHtml(station, range) {\n            const cfg = WATER_RANGES[range] || WATER_RANGES['24h'];\n            \/* Svi izvori (satni, gusti do 8 dana, dnevni do 30 dana) \u2013 isto kao retci promjene\n               na glavnim karticama, pa i \"Prije 30 dana\" ima podatak. *\/\n            const rows = waterHistoryPoints(station).map(p => ({timestamp: p.ts\/1000, level_cm: p.level}));\n            if (!rows.length) return '';\n            const latest = rows[rows.length - 1];\n            const previous = detailPointNear(rows.filter(r => r.timestamp < latest.timestamp - 600), latest.timestamp - cfg.hours*3600, waterRangeTolerance(range)*3600);\n            const change = previous ? latest.level_cm - previous.level_cm : null;\n            const changeClass = Number.isFinite(change) ? (change > 0 ? 'is-up' : change < 0 ? 'is-down' : '') : '';\n            const changeArrow = Number.isFinite(change) ? (change > 0 ? '\u2191 ' : change < 0 ? '\u2193 ' : '\u2192 ') : '';\n            const dtLabel = row => {\n                if (!row || !row.timestamp) return '\u2014';\n                return new Date(row.timestamp*1000).toLocaleString('hr-HR',{day:'2-digit',month:'2-digit',hour:'2-digit',minute:'2-digit'});\n            };\n            return '<div class=\"lk-det-24h-summary-item\">' +\n                    '<span class=\"lk-det-24h-summary-label\">'+escapeHtml(cfg.agoLabel)+'<\/span>' +\n                    '<strong class=\"lk-det-24h-summary-value\">'+(previous ? escapeHtml(fmt(previous.level_cm,0))+' cm' : '\u2014')+'<\/strong>' +\n                    '<span class=\"lk-det-24h-summary-time\">'+escapeHtml(dtLabel(previous))+'<\/span>' +\n                '<\/div>' +\n                '<div class=\"lk-det-24h-summary-item\">' +\n                    '<span class=\"lk-det-24h-summary-label\">Sada<\/span>' +\n                    '<strong class=\"lk-det-24h-summary-value\">'+escapeHtml(fmt(latest.level_cm,0))+' cm<\/strong>' +\n                    '<span class=\"lk-det-24h-summary-time\">'+escapeHtml(dtLabel(latest))+'<\/span>' +\n                '<\/div>' +\n                '<div class=\"lk-det-24h-summary-item is-change\">' +\n                    '<span class=\"lk-det-24h-summary-label\">'+escapeHtml(cfg.trendLabel)+'<\/span>' +\n                    '<strong class=\"lk-det-24h-summary-value '+changeClass+'\">'+(Number.isFinite(change) ? changeArrow + (change > 0 ? '+' : '') + escapeHtml(fmt(change,0)) + ' cm' : '\u2014')+'<\/strong>' +\n                    '<span class=\"lk-det-24h-summary-time\">stvarna mjerenja \u00b7 nije prognoza<\/span>' +\n                '<\/div>';\n        }\n\n        function detailedWaterBarChartHtml(rows, options) {\n            const opts = options || {};\n            const title = opts.title || 'Promjena vodostaja';\n            const subtitle = opts.subtitle || '';\n            const isNarrow = typeof window !== 'undefined' && window.innerWidth <= 650;\n            const fs = base => isNarrow ? Math.round(base * 3) : base;\n            const clean = (Array.isArray(rows) ? rows : [])\n                .filter(row => row && Number.isFinite(Number(row.level_cm)) && Number(row.timestamp || 0) > 0)\n                .map(row => Object.assign({}, row, {level_cm:Number(row.level_cm),timestamp:Number(row.timestamp)}))\n                .sort((a,b) => a.timestamp - b.timestamp);\n\n            if (clean.length < 2) {\n                return '<div class=\"lk-det-chart-head\"><div><div class=\"lk-det-chart-title\">'+escapeHtml(title)+'<\/div><\/div><\/div>' +\n                    '<div class=\"lk-det-chart-empty\">Za stup\u010dasti prikaz potrebna su najmanje dva slu\u017ebena mjerenja.<\/div>';\n            }\n\n            const spanH = (clean[clean.length-1].timestamp - clean[0].timestamp) \/ 3600;\n            const tLabel = ts => {\n                const d = new Date(ts*1000);\n                if (spanH > 180) return d.toLocaleDateString('hr-HR',{day:'2-digit',month:'2-digit'});\n                if (spanH > 36) return d.toLocaleString('hr-HR',{day:'2-digit',month:'2-digit',hour:'2-digit'});\n                return d.toLocaleTimeString('hr-HR',{hour:'2-digit',minute:'2-digit'});\n            };\n            const changes = [];\n            for (let i=1; i<clean.length; i++) {\n                const delta = clean[i].level_cm - clean[i-1].level_cm;\n                changes.push({\n                    timestamp:clean[i].timestamp,\n                    delta,\n                    from:clean[i-1].level_cm,\n                    to:clean[i].level_cm,\n                    dt:clean[i].timestamp-clean[i-1].timestamp\n                });\n            }\n\n            const values = changes.map(r => r.delta);\n            let min = Math.min(0, ...values), max = Math.max(0, ...values);\n            if (min === max) { min -= 1; max += 1; }\n            const pad = Math.max(1, (max-min)*0.10);\n            if (min < 0) min -= pad;\n            if (max > 0) max += pad;\n\n            const W=1000,H=isNarrow?460:230,L=isNarrow?110:62,R=18,T=22,B=isNarrow?70:36;\n            const plotW=W-L-R, plotH=H-T-B;\n            const yFor = v => T + ((max-Number(v))\/(max-min))*plotH;\n            const zeroY = yFor(0);\n            const step = plotW \/ Math.max(1,changes.length);\n            const barW = Math.max(5,Math.min(30,step*0.62));\n\n            let grid = '<line x1=\"'+L+'\" y1=\"'+zeroY.toFixed(1)+'\" x2=\"'+(W-R)+'\" y2=\"'+zeroY.toFixed(1)+'\" stroke=\"#aebdca\" stroke-width=\"1.3\"><\/line>' +\n                '<text x=\"'+(L-9)+'\" y=\"'+(zeroY+4).toFixed(1)+'\" text-anchor=\"end\" font-size=\"'+fs(11)+'\" fill=\"#8191a1\">0<\/text>';\n            [min,max].forEach(v => {\n                if (Math.abs(v) < 0.001) return;\n                const y=yFor(v);\n                grid += '<line x1=\"'+L+'\" y1=\"'+y.toFixed(1)+'\" x2=\"'+(W-R)+'\" y2=\"'+y.toFixed(1)+'\" stroke=\"#e8eef4\" stroke-width=\"1\"><\/line>' +\n                    '<text x=\"'+(L-9)+'\" y=\"'+(y+4).toFixed(1)+'\" text-anchor=\"end\" font-size=\"'+fs(11)+'\" fill=\"#8191a1\">'+escapeHtml(fmt(v,0))+'<\/text>';\n            });\n\n            let bars='';\n            changes.forEach((row,i) => {\n                const x=L+i*step+(step-barW)\/2;\n                const y=yFor(row.delta);\n                const top=Math.min(y,zeroY), height=Math.max(1,Math.abs(zeroY-y));\n                const fill=row.delta>0?'#d96e16':row.delta<0?'#2678ad':'#9aaab7';\n                const time=tLabel(row.timestamp);\n                const sign=row.delta>0?'+':'';\n                bars += '<rect x=\"'+x.toFixed(1)+'\" y=\"'+top.toFixed(1)+'\" width=\"'+barW.toFixed(1)+'\" height=\"'+height.toFixed(1)+'\" rx=\"2\" fill=\"'+fill+'\" opacity=\".88\">' +\n                    '<title>'+escapeHtml(time+' \u00b7 '+sign+fmt(row.delta,0)+' cm \u00b7 '+fmt(row.from,0)+' \u2192 '+fmt(row.to,0)+' cm')+'<\/title><\/rect>';\n            });\n\n            let xlabels='';\n            const ticks=Math.min(5,changes.length);\n            for(let i=0;i<ticks;i++){\n                const idx=ticks===1?0:Math.round((i\/(ticks-1))*(changes.length-1));\n                const row=changes[idx];\n                const x=L+idx*step+step\/2;\n                const label=tLabel(row.timestamp);\n                xlabels += '<text x=\"'+x.toFixed(1)+'\" y=\"'+(H-10)+'\" text-anchor=\"'+(i===0?'start':(i===ticks-1?'end':'middle'))+'\" font-size=\"'+fs(10)+'\" fill=\"#8b9aaa\">'+escapeHtml(label)+'<\/text>';\n            }\n\n            const maxRise=Math.max(...values), maxFall=Math.min(...values);\n            const stats='najve\u0107i rast '+(maxRise>0?'+':'')+fmt(maxRise,0)+' cm \u00b7 najve\u0107i pad '+fmt(maxFall,0)+' cm';\n            return '<div class=\"lk-det-chart-head\">' +\n                    '<div><div class=\"lk-det-chart-title\">'+escapeHtml(title)+'<\/div>' +\n                    (subtitle?'<div class=\"lk-det-detail-subtitle\">'+escapeHtml(subtitle)+'<\/div>':'') +\n                    '<\/div><div class=\"lk-det-chart-stats\">'+escapeHtml(stats)+'<\/div><\/div>' +\n                '<svg class=\"lk-det-chart-svg\" viewBox=\"0 0 '+W+' '+H+'\" role=\"img\" aria-label=\"'+escapeHtml(title)+'\">' +\n                    grid+bars+xlabels+\n                    '<text x=\"18\" y=\"'+(T+plotH\/2).toFixed(1)+'\" transform=\"rotate(-90 18 '+(T+plotH\/2).toFixed(1)+')\" text-anchor=\"middle\" font-size=\"'+fs(10)+'\" fill=\"#8b9aaa\">cm<\/text>' +\n                '<\/svg>';\n        }\n\n        function detailCrossSectionHtml(station) {\n            if (!station || !station.ok || !Number.isFinite(Number(station.level_cm))) {\n                return '<div class=\"lk-det-chart-empty\">Slu\u017ebeni vodostaj trenuta\u010dno nije dostupan.<\/div>';\n            }\n\n            const level = Number(station.level_cm);\n            const limits = station.limits || {};\n            const prep = Number(limits.preparation);\n            const regular = Number(limits.regular);\n            const extraordinary = Number(limits.extraordinary);\n            const emergency = Number(limits.emergency);\n            const limitValues = [prep,regular,extraordinary,emergency].filter(Number.isFinite);\n            const maxLimit = limitValues.length ? Math.max.apply(null, limitValues) : level + 500;\n            const minScale = Math.min(level - 120, 0);\n            const maxScale = Math.max(maxLimit + 70, level + 120);\n            const W = 1000, H = 360, top = 24, bottom = 326;\n            const plotH = bottom - top;\n            const yFor = value => top + ((maxScale - Number(value)) \/ (maxScale - minScale)) * plotH;\n            const currentY = yFor(level);\n            const isMobileCross = (typeof window !== 'undefined' && window.innerWidth <= 650);\n            const badgeX = isMobileCross ? 24 : 105;\n            const badgeWidth = isMobileCross ? 390 : 195;\n            const badgeHeight = isMobileCross ? 86 : 38;\n            \/* Na mobitelu se SVG smanjuje na ~1\/3 \u0161irine, pa tekst u presjeku mora biti\n               razmjerno ve\u0107i da ostane \u010ditljiv. *\/\n            const crossFs = base => isMobileCross ? Math.round(base * 2.4) : base;\n            const badgeRadius = badgeHeight \/ 2;\n            const badgeCenterX = badgeX + badgeWidth \/ 2;\n            const badgeTop = currentY - badgeHeight \/ 2;\n            const currentTextY = currentY - (isMobileCross ? 6 : 4);\n            const currentSubtextY = currentY + (isMobileCross ? 26 : 10);\n            const thresholdRectX = isMobileCross ? 628 : 650;\n            const thresholdRectWidth = isMobileCross ? 284 : 258;\n            const thresholdRectHeight = isMobileCross ? 30 : 26;\n            const thresholdRectRadius = thresholdRectHeight \/ 2;\n\n            const lines = [\n                {v:prep, label:'Pripremno stanje', cls:'#d4a017'},\n                {v:regular, label:'Redovne mjere', cls:'#ef8b2c'},\n                {v:extraordinary, label:'Izvanredne mjere', cls:'#dd5a32'},\n                {v:emergency, label:'Izvanredno stanje', cls:'#c62f38'}\n            ].filter(item => Number.isFinite(item.v));\n\n            let thresholds = '';\n            lines.forEach(item => {\n                const y = yFor(item.v);\n                thresholds += '<line x1=\"40\" y1=\"'+y.toFixed(1)+'\" x2=\"960\" y2=\"'+y.toFixed(1)+'\" stroke=\"'+item.cls+'\" stroke-width=\"1.6\" stroke-dasharray=\"6 5\" opacity=\".9\"><\/line>' +\n                    '<text class=\"lk-det-cross-threshold-text\" x=\"960\" y=\"'+(y-(isMobileCross?9:7)).toFixed(1)+'\" text-anchor=\"end\" font-size=\"'+crossFs(11)+'\" font-weight=\"700\" fill=\"'+item.cls+'\" stroke=\"#f9fcfe\" stroke-width=\"'+(isMobileCross?8:5)+'\" paint-order=\"stroke\">'+escapeHtml(isMobileCross ? item.label.replace('stanje','st.').replace('mjere','mj.') : item.label)+' \u00b7 '+escapeHtml(fmt(item.v,0))+' cm<\/text>';\n            });\n\n            const secondary = station.secondary && station.secondary.ok && Number.isFinite(Number(station.secondary.level_cm))\n                ? Number(station.secondary.level_cm) : null;\n            let secondaryLine = '';\n            if (secondary !== null && Math.abs(secondary - level) > 0.01) {\n                const y2 = yFor(secondary);\n                secondaryLine = '<line x1=\"120\" y1=\"'+y2.toFixed(1)+'\" x2=\"690\" y2=\"'+y2.toFixed(1)+'\" stroke=\"#6e7f90\" stroke-width=\"1.5\" stroke-dasharray=\"4 4\"><\/line>' +\n                    '<text x=\"128\" y=\"'+(y2-7).toFixed(1)+'\" font-size=\"'+crossFs(11)+'\" fill=\"#5f7182\">DHMZ '+escapeHtml(fmt(secondary,0))+' cm<\/text>';\n            }\n\n            const waterTop = Math.min(bottom-5, Math.max(top+5, currentY));\n            const prepGap = Number.isFinite(prep) ? prep - level : null;\n            const prepContext = prepGap === null ? ''\n                : prepGap > 0 ? fmt(prepGap,0) + ' cm ispod pripremnog stanja'\n                : prepGap < 0 ? fmt(Math.abs(prepGap),0) + ' cm iznad pripremnog stanja'\n                : 'Na pragu pripremnog stanja';\n            return '<svg class=\"lk-det-cross-svg\" viewBox=\"0 0 '+W+' '+H+'\" role=\"img\" aria-label=\"Shematski presjek rije\u010dnog korita kod vodomjerne postaje\">' +\n                '<defs>' +\n                    '<clipPath id=\"lkDetChannel\"><path d=\"M0 0 L0 88 C145 102 215 142 298 235 C356 300 410 325 500 329 C590 325 644 300 702 235 C785 142 855 102 1000 88 L1000 0 Z\"><\/path><\/clipPath>' +\n                    '<linearGradient id=\"lkDetWater\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"#7fb8e3\"><\/stop><stop offset=\"1\" stop-color=\"#2f78b5\"><\/stop><\/linearGradient>' +\n                    '<linearGradient id=\"lkDetBank\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\"><stop offset=\"0\" stop-color=\"#ece4d8\"><\/stop><stop offset=\"1\" stop-color=\"#d9ccb9\"><\/stop><\/linearGradient>' +\n                '<\/defs>' +\n                '<rect width=\"'+W+'\" height=\"'+H+'\" fill=\"#f9fcfe\"><\/rect>' +\n                '<path d=\"M0 88 C145 102 215 142 298 235 C356 300 410 325 500 329 C590 325 644 300 702 235 C785 142 855 102 1000 88 L1000 360 L0 360 Z\" fill=\"url(#lkDetBank)\"><\/path>' +\n                '<path d=\"M0 88 C145 102 215 142 298 235 C356 300 410 325 500 329 L0 360 Z\" fill=\"url(#lkDetBank)\"><\/path>' +\n                '<path d=\"M1000 88 C855 102 785 142 702 235 C644 300 590 325 500 329 L1000 360 Z\" fill=\"url(#lkDetBank)\"><\/path>' +\n                '<path d=\"M0 88 C145 102 215 142 298 235 C356 300 410 325 500 329 C590 325 644 300 702 235 C785 142 855 102 1000 88\" fill=\"none\" stroke=\"#b8a995\" stroke-width=\"3\"><\/path>' +\n                '<rect x=\"0\" y=\"'+waterTop.toFixed(1)+'\" width=\"'+W+'\" height=\"'+(H-waterTop).toFixed(1)+'\" fill=\"url(#lkDetWater)\" opacity=\".85\" clip-path=\"url(#lkDetChannel)\"><\/rect>' +\n                thresholds +\n                secondaryLine +\n                '<line x1=\"0\" y1=\"'+currentY.toFixed(1)+'\" x2=\"'+W+'\" y2=\"'+currentY.toFixed(1)+'\" stroke=\"#0b3d78\" stroke-width=\"3\" clip-path=\"url(#lkDetChannel)\"><\/line>' +\n                '<circle cx=\"500\" cy=\"'+currentY.toFixed(1)+'\" r=\"6\" fill=\"#0b3d78\"><\/circle>' +\n                '<rect x=\"'+badgeX+'\" y=\"'+badgeTop.toFixed(1)+'\" width=\"'+badgeWidth+'\" height=\"'+badgeHeight+'\" rx=\"'+badgeRadius+'\" fill=\"#0b3d78\"><\/rect>' +\n                '<text class=\"lk-det-cross-current-text\" x=\"'+badgeCenterX+'\" y=\"'+currentTextY.toFixed(1)+'\" text-anchor=\"middle\" font-size=\"'+crossFs(12.5)+'\" font-weight=\"700\" fill=\"#fff\">Trenutno '+escapeHtml(fmt(level,0))+' cm<\/text>' +\n                (prepContext ? '<text class=\"lk-det-cross-current-subtext\" x=\"'+badgeCenterX+'\" y=\"'+currentSubtextY.toFixed(1)+'\" text-anchor=\"middle\" font-size=\"'+(isMobileCross?19:8.5)+'\" font-weight=\"600\" fill=\"#dbeeff\">'+escapeHtml(prepContext)+'<\/text>' : '') +\n                '<text x=\"500\" y=\"350\" text-anchor=\"middle\" font-size=\"'+crossFs(10)+'\" fill=\"#8c7c66\">SHEMATSKI PRIKAZ \u00b7 NIJE GEODETSKI PRESJEK<\/text>' +\n                '<\/svg>' +\n                '<div class=\"lk-det-cross-legend\">' +\n                    '<span><i class=\"lk-det-legend-line\"><\/i>Trenutni vodostaj<\/span>' +\n                    '<span><i class=\"lk-det-legend-line prep\"><\/i>Pripremno<\/span>' +\n                    '<span><i class=\"lk-det-legend-line regular\"><\/i>Redovne mjere<\/span>' +\n                    '<span><i class=\"lk-det-legend-line extra\"><\/i>Izvanredne mjere<\/span>' +\n                    '<span><i class=\"lk-det-legend-line emergency\"><\/i>Izvanredno stanje<\/span>' +\n                '<\/div>';\n        }\n\n        function detailRateStats(station) {\n            const source = Array.isArray(station?.history_7d) && station.history_7d.length >= 2\n                ? station.history_7d\n                : (Array.isArray(station?.history_24h) ? station.history_24h : []);\n\n            const points = source.map(row => ({\n                ts: Number(row?.timestamp || 0) * 1000,\n                level: Number(row?.level_cm)\n            })).filter(p => Number.isFinite(p.ts) && p.ts > 0 && Number.isFinite(p.level))\n              .sort((a,b) => a.ts - b.ts);\n\n            if (points.length < 2) {\n                return {prefix:'Trend', minute:null, hour:null, day:null};\n            }\n\n            const latest = points[points.length - 1];\n            const previous = points[points.length - 2];\n            const dtMinutes = (latest.ts - previous.ts) \/ 60000;\n            const minute = dtMinutes > 0 ? (latest.level - previous.level) \/ dtMinutes : null;\n\n            function deltaNear(seconds, toleranceSeconds) {\n                const target = latest.ts - seconds * 1000;\n                let best = null;\n                let bestDiff = Infinity;\n                for (let i = 0; i < points.length - 1; i++) {\n                    const diff = Math.abs(points[i].ts - target);\n                    if (diff < bestDiff) {\n                        best = points[i];\n                        bestDiff = diff;\n                    }\n                }\n                if (!best || bestDiff > toleranceSeconds * 1000) return null;\n                return latest.level - best.level;\n            }\n\n            const hour = deltaNear(3600, 45 * 60);\n            const day = deltaNear(24 * 3600, 3 * 3600);\n\n            let lastRiseTs = null;\n            for (let i = points.length - 1; i >= 1; i--) {\n                if (points[i].level > points[i-1].level) {\n                    lastRiseTs = points[i].ts;\n                    break;\n                }\n            }\n            \/* \u201eRast\u201d koristimo samo dok je zadnji potvr\u0111eni pozitivni pomak mla\u0111i od 60 min.\n               Nakon toga prikaz prelazi na neutralniji naziv \u201eTrend\u201d. *\/\n            const hasRecentRise = lastRiseTs !== null && (Date.now() - lastRiseTs) <= 3600 * 1000;\n\n            return {prefix: hasRecentRise ? 'Rast' : 'Trend', minute, hour, day};\n        }\n\n        function formatDetailRate(value, decimals) {\n            if (!Number.isFinite(Number(value))) return '\u2014';\n            const n = Number(value);\n            const sign = n > 0 ? '+' : '';\n            return sign + fmt(n, decimals) + ' cm';\n        }\n\n        function renderDetailRates(station) {\n            const stats = detailRateStats(station);\n            const minuteLabel = qs('det-rate-minute-label');\n            const hourLabel = qs('det-rate-hour-label');\n            const dayLabel = qs('det-rate-day-label');\n            const minuteEl = qs('det-rate-minute');\n            const hourEl = qs('det-rate-hour');\n            const dayEl = qs('det-rate-day');\n            const prepEl = qs('det-rate-preparation');\n\n            if (minuteLabel) minuteLabel.textContent = 'Prosje\u010dna brzina';\n            if (hourLabel) hourLabel.textContent = 'Promjena u 1 h';\n            if (dayLabel) dayLabel.textContent = 'Promjena u 24 h';\n            if (minuteEl) minuteEl.textContent = Number.isFinite(Number(stats.minute)) ? formatDetailRate(stats.minute, 2) + '\/min' : '\u2014';\n            if (hourEl) hourEl.textContent = formatDetailRate(stats.hour, 1);\n            if (dayEl) dayEl.textContent = formatDetailRate(stats.day, 0);\n            [[minuteEl, stats.minute], [hourEl, stats.hour], [dayEl, stats.day]].forEach(([el, v]) => {\n                if (!el) return;\n                const d = waterDirection(v);\n                el.classList.toggle('is-up', d === 'up');\n                el.classList.toggle('is-down', d === 'down');\n            });\n            if (prepEl) {\n                const level = Number(station?.level_cm);\n                const prep = Number(station?.limits?.preparation);\n                if (Number.isFinite(level) && Number.isFinite(prep)) {\n                    const gap = prep - level;\n                    prepEl.textContent = gap > 0 ? fmt(gap,0) + ' cm' : (gap === 0 ? '0 cm' : 'Prag prije\u0111en');\n                } else {\n                    prepEl.textContent = '\u2014';\n                }\n            }\n        }\n\n        \/* Za du\u017ee raspone stupci po svakom mjerenju postaju pretanki i ne\u010ditljivi (stotine\n           stupaca). Kao kod hidrolo\u0161kih agencija, promjena se tada zbraja po intervalu:\n           3 dana \u2192 po 3 sata, 7 dana \u2192 po 6 sati, 14\/30 dana \u2192 po danu. *\/\n        const DUB_BAR_BUCKET_HOURS = {'24h':0, '3d':3, '7d':6, '14d':24, '30d':24};\n\n        function detailBucketRows(rows, bucketHours) {\n            const clean = (Array.isArray(rows) ? rows : [])\n                .filter(r => r && Number.isFinite(Number(r.level_cm)) && Number(r.timestamp||0) > 0)\n                .sort((a,b) => Number(a.timestamp) - Number(b.timestamp));\n            if (!bucketHours) return clean;\n            const size = bucketHours * 3600;\n            const byBucket = new Map();\n            clean.forEach(r => {\n                const d = new Date(Number(r.timestamp)*1000);\n                \/* granice intervala po lokalnom vremenu (npr. 00\u201306, 06\u201312 ...) *\/\n                const localMidnight = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime()\/1000;\n                const key = localMidnight + Math.floor((Number(r.timestamp) - localMidnight) \/ size) * size;\n                byBucket.set(key, r); \/* zadnje mjerenje u intervalu *\/\n            });\n            return Array.from(byBucket.values());\n        }\n\n        function renderDetailStation(data) {\n            const station = data?.water?.kupa?.[DETAIL_KEY] || data?.water?.odra?.[DETAIL_KEY] || null;\n            const levelEl = qs('det-detail-level');\n            const trendEl = qs('det-detail-trend');\n            const airEl = qs('det-detail-air');\n            const timeEl = qs('det-detail-time');\n            const statusEl = qs('det-detail-status');\n            const crossEl = qs('det-cross-section');\n            const summary24 = qs('det-24h-summary');\n            const graphMain = qs('det-chart-main');\n            const graphBars = qs('det-chart-bars');\n\n            if (!levelEl) return;\n            if (!station || !station.ok) {\n                levelEl.textContent = '\u2014';\n                if (trendEl) trendEl.textContent = '\u2014';\n                if (airEl) airEl.textContent = '\u2014';\n                if (timeEl) timeEl.textContent = 'Podatak nije dostupan';\n                if (statusEl) statusEl.innerHTML = makeWaterStatus('NEDOSTUPNO', 'warn');\n                const arrowX = qs('det-detail-arrow'); if (arrowX) { arrowX.className = 'lk-detx-arrow'; arrowX.innerHTML = ''; }\n                const gaugeX = qs('det-detail-gauge'); if (gaugeX) gaugeX.innerHTML = '';\n                renderDetailRates(null);\n                if (summary24) summary24.innerHTML = '';\n                if (graphMain) graphMain.innerHTML = '';\n                if (graphBars) graphBars.innerHTML = '';\n                if (crossEl) crossEl.innerHTML = '<div class=\"lk-det-chart-empty\">Slu\u017ebeni vodostaj trenuta\u010dno nije dostupan.<\/div>';\n                return;\n            }\n\n            levelEl.innerHTML = escapeHtml(fmt(station.level_cm,0)) + '<small>cm<\/small>';\n            const arrowD = qs('det-detail-arrow');\n            const trD = toNum(station.trend);\n            if (arrowD) {\n                const dirD = waterDirection(trD);\n                arrowD.className = 'lk-detx-arrow' + (dirD ? ' is-visible is-' + dirD : '');\n                arrowD.innerHTML = dirD ? waterArrowSvg(trD) : '';\n            }\n            const gaugeD = qs('det-detail-gauge');\n            if (gaugeD) gaugeD.innerHTML = waterGaugeHtml(station);\n            if (statusEl) {\n                let mode = '';\n                if (['regular','preparation'].includes(station.status)) mode = 'warn';\n                if (['extraordinary','emergency'].includes(station.status)) mode = 'danger';\n                statusEl.innerHTML = makeWaterStatus(station.label || 'INFORMATIVNO', mode);\n            }\n            const tr = Number(station.trend);\n            if (trendEl) {\n                trendEl.textContent = Number.isFinite(tr) ? signedCm(tr) : '\u2014';\n                trendEl.className = waterDirection(tr) === 'up' ? 'is-up' : waterDirection(tr) === 'down' ? 'is-down' : '';\n            }\n\n            const air = detailAirTemperature(data);\n            if (airEl) airEl.textContent = Number.isFinite(air) ? fmt(air,1) + ' \u00b0C' : '\u2014';\n\n            const official = station.display_time || formatStamp(station.measured_at);\n            const checked = formatClock(data?.generated_at || new Date());\n            if (timeEl) timeEl.innerHTML = escapeHtml(official) + '<br><span style=\"font-size:11px;color:#8293a3;font-weight:500\">provjereno '+escapeHtml(checked)+'<\/span>';\n\n            renderDetailRates(station);\n            if (crossEl) crossEl.innerHTML = detailCrossSectionHtml(station);\n\n            \/* Jedan graf + jedan raspon (24 sata\/3\/7\/14\/30 dana), isti kontrolni mehanizam kao\n               glavna kartica vodostaja (waterGraphForRange) \u2013 umjesto tri odvojena, djelomi\u010dno\n               preklopljena grafa (24h\/48h\/30d) koja su prije stajala jedan ispod drugog. *\/\n            const cfg = WATER_RANGES[detRange] || WATER_RANGES['24h'];\n            if (summary24) summary24.innerHTML = detail24hSummaryHtml(station, detRange);\n\n            let graph = waterGraphForRange(station, detRange);\n            if (detRange === '24h') {\n                \/* Isti niz mjerenja kao sa\u017eetak iznad (gusta povijest), da se brojke poklapaju. *\/\n                const dense = detailHistoryRows(station);\n                if (dense.length >= 2) {\n                    const cut = dense[dense.length - 1].timestamp - 24*3600;\n                    graph = {mode:'hourly', rows: dense.filter(r => r.timestamp >= cut)};\n                }\n            }\n            const bandMode = graph.mode === 'band';\n            if (graphMain) graphMain.innerHTML = detailedWaterChartHtml(graph.rows, {\n                title: 'Vodostaj \u00b7 ' + cfg.shortLabel,\n                subtitle: bandMode ? 'Dnevni raspon (sjena) i zadnje mjerenje dana (linija)' : 'Stvarni slu\u017ebeni vodostaj kroz vrijeme',\n                mode: bandMode ? 'day' : (detRange === '24h' ? 'time' : 'week'),\n                band: bandMode,\n                showEndpoints: !bandMode,\n                limits: station.limits\n            });\n            const bucketH = DUB_BAR_BUCKET_HOURS[detRange] || 0;\n            const barTitle = bucketH === 0 ? 'Promjena po mjerenju' : (bucketH === 24 ? 'Dnevna promjena' : 'Promjena po ' + bucketH + ' sata');\n            const barSub = bucketH === 0\n                ? 'Stupac pokazuje promjenu od prethodnog slu\u017ebenog mjerenja'\n                : (bucketH === 24 ? 'Stupac pokazuje promjenu zadnjeg mjerenja dana prema prethodnom danu'\n                                  : 'Stupac pokazuje promjenu zadnjeg mjerenja u intervalu prema prethodnom intervalu');\n            if (graphBars) graphBars.innerHTML = detailedWaterBarChartHtml(detailBucketRows(graph.rows, bucketH), {\n                title: barTitle + ' \u00b7 ' + cfg.shortLabel,\n                subtitle: barSub\n            });\n\n            root.querySelectorAll('[data-det-range-btn]').forEach(btn => {\n                const active = btn.getAttribute('data-det-range-btn') === detRange;\n                btn.classList.toggle('is-active', active);\n                btn.setAttribute('aria-pressed', active ? 'true' : 'false');\n            });\n        }\n\n        \/* Rang rasta: tri postaje s najve\u0107im pozitivnim porastom od zadnjeg mjerenja.\n           1. mjesto je dinami\u010dno: naran\u010dasta (blagi porast) \u2192 crvena (jak porast).\n           Skala (promjena u 24 h): RISE_MILD_CM = po\u010detak (naran\u010dasta), RISE_STRONG_CM = puna crvena. *\/\n        const RISE_MILD_CM = 2;\n        \/* Kupa se stalno mijenja za 1\u20133 cm dnevno; isticanje kartice tek od stvarnog porasta. *\/\n        const RISE_RANK_MIN_CM = 5;\n        const RISE_STRONG_CM = 60;\n        const RISE_VARS = ['--lk-rise-bg-1','--lk-rise-bg-2','--lk-rise-border','--lk-rise-shadow','--lk-rise-accent'];\n\n        function riseIntensity(trend) {\n            return Math.max(0, Math.min(1, (trend - RISE_MILD_CM) \/ (RISE_STRONG_CM - RISE_MILD_CM)));\n        }\n\n        function applyRiverRiseRanking(river) {\n            const rankLabels = ['Najbr\u017ei rast \u00b7 24 h', '2. rast \u00b7 24 h', '3. rast \u00b7 24 h'];\n            RIVER_ORDER.forEach(key => {\n                const box = qs('water-' + key);\n                if (box) {\n                    box.classList.remove('is-rise-1','is-rise-2','is-rise-3');\n                    RISE_VARS.forEach(v => box.style.removeProperty(v));\n                }\n                const rank = qs('water-' + key + '-rank');\n                if (rank) { rank.classList.remove('is-visible'); rank.textContent = ''; }\n            });\n\n            const ranked = RIVER_ORDER.map((key, order) => {\n                const station = river && river[key] ? river[key] : null;\n                \/* Rang po promjeni u zadnja 24 h (stabilnije od jednog mjerenja, koje mo\u017ee\n                   biti \u0161um i proturje\u010diti grafu). *\/\n                const trend = station && station.ok ? toNum(waterRangeChange(station, '24h')) : NaN;\n                return {key, order, trend};\n            }).filter(item => Number.isFinite(item.trend) && item.trend >= RISE_RANK_MIN_CM)\n              .sort((a, b) => (b.trend - a.trend) || (a.order - b.order));\n\n            const wrap = root.querySelector('.lk-water-river');\n            if (wrap) wrap.classList.toggle('has-rank', ranked.length > 0);\n\n            ranked.slice(0, 3).forEach((item, index) => {\n                const box = qs('water-' + item.key);\n                if (box) {\n                    box.classList.add('is-rise-' + (index + 1));\n                    if (index === 0) {\n                        const t = riseIntensity(item.trend);\n                        const hue = Math.round(28 - 28 * t);            \/* 28\u00b0 naran\u010dasta \u2192 0\u00b0 crvena *\/\n                        box.style.setProperty('--lk-rise-bg-1', 'hsl(' + hue + ',100%,' + Math.round(97 - 2 * t) + '%)');\n                        box.style.setProperty('--lk-rise-bg-2', 'hsl(' + hue + ',100%,' + Math.round(93 - 4 * t) + '%)');\n                        box.style.setProperty('--lk-rise-border', 'hsl(' + hue + ',' + Math.round(78 + 6 * t) + '%,' + Math.round(72 - 8 * t) + '%)');\n                        box.style.setProperty('--lk-rise-shadow', 'hsla(' + hue + ',88%,52%,' + (0.10 + 0.10 * t).toFixed(2) + ')');\n                        box.style.setProperty('--lk-rise-accent', 'hsl(' + hue + ',' + Math.round(84 + 4 * t) + '%,' + Math.round(50 - 6 * t) + '%)');\n                    }\n                }\n                const rank = qs('water-' + item.key + '-rank');\n                if (rank) {\n                    const strong = index === 0 && riseIntensity(item.trend) >= 0.66;\n                    rank.textContent = strong ? 'Jak porast \u00b7 24 h' : rankLabels[index];\n                    rank.classList.add('is-visible');\n                }\n            });\n        }\n\n        \/* Retci promjene su ujedno kontrola grafa kartice (nema zasebnog izbornika raspona). *\/\n        const WATER_CARD_PERIODS = [\n            {key:'3d',  label:'3 dana'},\n            {key:'7d',  label:'7 dana'},\n            {key:'30d', label:'30 dana'}\n        ];\n\n        function waterChangeValueHtml(v, compact) {\n            const n = toNum(v);\n            if (!Number.isFinite(n)) return '<strong class=\"is-none\">\u2014<\/strong>';\n            const dir = waterDirection(n);\n            const cls = dir === 'up' ? 'is-up' : dir === 'down' ? 'is-down' : 'is-flat';\n            const txt = compact ? signedCm(n).replace(' cm', '') + '<small>cm<\/small>' : escapeHtml(signedCm(n));\n            return '<strong class=\"' + cls + '\">' + waterArrowSvg(n) + '<b>' + txt + '<\/b><\/strong>';\n        }\n\n        \/* Svako razdoblje u svom punom retku (24 h, 3, 7, 30 dana) \u2013 \u010ditljivije od stupaca.\n           Redak je ujedno kontrola grafa kartice. *\/\n        function waterChangesHtml(station, range) {\n            return ['24h','3d','7d','30d'].map(key =>\n                '<button type=\"button\" class=\"lk-wc-main' + (range === key ? ' is-selected' : '') + '\" data-card-range=\"' + key + '\" aria-pressed=\"' + (range === key) + '\">' +\n                    '<span>' + escapeHtml(WATER_RANGES[key].trendLabel) + '<\/span>' + waterChangeValueHtml(waterRangeChange(station, key)) +\n                '<\/button>').join('');\n        }\n\n        function waterStationByKey(key) {\n            const w = snapshotData && snapshotData.water ? snapshotData.water : {};\n            return (w.kupa && w.kupa[key]) || (w.odra && w.odra[key]) || null;\n        }\n\n        function renderWater(stationKey, station, range) {\n            const box = qs('water-' + stationKey);\n            if (!box) return;\n            range = range || box.dataset.range || '24h';\n            box.dataset.range = range;\n            const lastEl = qs('water-' + stationKey + '-last');\n            const statusEl  = qs('water-' + stationKey + '-status');\n            const changesEl = qs('water-' + stationKey + '-trend');\n            const freshEl   = qs('water-' + stationKey + '-time');\n            const extraEl   = qs('water-' + stationKey + '-extra');\n            const gaugeEl   = qs('water-' + stationKey + '-gauge');\n            const levelEl   = box.querySelector('.lk-water-level');\n\n            const arrowEl = qs('water-' + stationKey + '-arrow');\n            if (!station || !station.ok) {\n                if (arrowEl) { arrowEl.className = 'lk-water-arrow'; arrowEl.innerHTML = ''; }\n                if (lastEl) lastEl.innerHTML = '';\n                levelEl.innerHTML = '<span class=\"lk-water-level-unavailable\">Podatak nije dostupan<\/span>';\n                box.classList.add('is-unavailable');\n                if (statusEl) statusEl.innerHTML = makeWaterStatus('NEDOSTUPNO', 'warn');\n                if (changesEl) changesEl.innerHTML = '';\n                if (gaugeEl) gaugeEl.innerHTML = '';\n                if (freshEl) { freshEl.className = 'lk-water-fresh'; freshEl.title = ''; freshEl.textContent = 'Izvor trenuta\u010dno nije vratio valjano mjerenje.'; }\n                if (extraEl) extraEl.textContent = '';\n                renderWaterHistory(stationKey, station, range);\n                return;\n            }\n\n            const levelTxt = fmt(station.level_cm, 0);\n            levelEl.dataset.chars = String(levelTxt).length;\n            levelEl.innerHTML = '<span class=\"lk-water-level-value\">' + escapeHtml(levelTxt) + '<\/span><span class=\"lk-water-level-unit\">cm<\/span>';\n            box.classList.remove('is-unavailable');\n\n            const trend = toNum(station.trend);\n            if (arrowEl) {\n                const dir = waterDirection(trend);\n                arrowEl.className = 'lk-water-arrow' + (dir ? ' is-visible is-' + dir : '');\n                arrowEl.innerHTML = dir ? waterArrowSvg(trend) : '';\n                arrowEl.title = dir ? 'Od zadnjeg mjerenja: ' + signedCm(trend) : '';\n            }\n            if (lastEl) {\n                lastEl.innerHTML = '<span>Od zadnjeg mjerenja<\/span>' + waterChangeValueHtml(trend);\n            }\n\n            if (freshEl) {\n                const fresh = waterFreshness(station);\n                freshEl.className = 'lk-water-fresh ' + fresh.cls;\n                freshEl.title = station.display_time ? 'Slu\u017ebeno mjerenje: ' + station.display_time : '';\n                freshEl.innerHTML = '<span class=\"lk-fresh-dot\"><\/span><span>' + fresh.html + '<\/span>';\n            }\n\n            if (changesEl) changesEl.innerHTML = waterChangesHtml(station, range);\n\n            if (gaugeEl) gaugeEl.innerHTML = waterGaugeHtml(station);\n\n            let mode = '';\n            if (['no_measures','information'].includes(station.status)) mode = 'neutral';\n            if (['regular','preparation'].includes(station.status)) mode = 'warn';\n            if (['extraordinary','emergency'].includes(station.status)) mode = 'danger';\n            if (statusEl) {\n                \/* \"Informativno\" (postaja bez pragova) je podatak o izvoru, ne stanje \u2013\n                   prikazuje se kao obi\u010dan tekst, a ne kao oznaka stanja. *\/\n                \/* Postaja bez unesenih pragova: nema oznake stanja (podatak je samo razina). *\/\n                statusEl.innerHTML = station.status === 'information'\n                    ? ''\n                    : makeWaterStatus(station.label || 'INFORMATIVNO', mode);\n                statusEl.style.display = station.status === 'information' ? 'none' : '';\n            }\n\n            if (extraEl) {\n                const extras = [];\n                if (station.card_note) extras.push(String(station.card_note));\n                if (station.secondary && station.secondary.ok) {\n                    let secondaryLine = 'DHMZ: ' + fmt(station.secondary.level_cm, 0) + ' cm';\n                    if (station.secondary.display_time) secondaryLine += ' \u00b7 ' + station.secondary.display_time;\n                    extras.push(secondaryLine);\n                }\n                if (Number.isFinite(Number(station.flow_m3s))) extras.push('Protok ' + fmt(station.flow_m3s, 1) + ' m\u00b3\/s');\n                if (Number.isFinite(Number(station.water_temp))) extras.push('Voda ' + fmt(station.water_temp, 1) + ' \u00b0C');\n                extraEl.textContent = extras.join(' \u00b7 ');\n            }\n\n            renderWaterHistory(stationKey, station, range);\n        }\n\n        function renderWarnings(payload) {\n            const title = qs('warning-title');\n            const textEl = qs('warning-text');\n            const list = qs('warning-list');\n            const icon = qs('warning-icon');\n            const time = qs('warning-time');\n            const advice = qs('warning-advice');\n            const adviceText = qs('warning-advice-text');\n            if (!title || !list) return;\n\n            list.innerHTML = '';\n            if (advice) advice.hidden = true;\n            if (adviceText) adviceText.textContent = '';\n            if (time) time.textContent = 'Provjera: ' + formatStamp(payload?.checked_at);\n\n            const iconCheck = '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.3\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M20 6 9 17l-5-5\"><\/path><\/svg>';\n            const iconAlert = '<svg viewBox=\"0 0 64 56\"><path d=\"M32 3 L61 53 H3 Z\" fill=\"currentColor\" stroke=\"rgba(15,23,42,.18)\" stroke-width=\"2\"><\/path><rect x=\"29.5\" y=\"17\" width=\"5\" height=\"20\" rx=\"2.5\" fill=\"var(--lk-warning-mark)\"><\/rect><circle cx=\"32\" cy=\"44\" r=\"3\" fill=\"var(--lk-warning-mark)\"><\/circle><\/svg>';\n\n            if (!payload || payload.ok !== true) {\n                title.textContent = 'PROVJERA NIJE DOSTUPNA';\n                title.style.color = '#9a6500';\n                if (textEl) textEl.textContent = payload?.message || 'DHMZ CAP trenuta\u010dno nije mogu\u0107e provjeriti.';\n                if (icon) { icon.innerHTML = iconAlert; icon.className = 'lk-warning-symbol is-unavailable'; }\n                return;\n            }\n\n            const warnings = Array.isArray(payload.warnings) ? payload.warnings : [];\n            if (!warnings.length) {\n                title.textContent = 'NEMA IZDANIH UPOZORENJA';\n                title.style.color = '#2eab60';\n                if (textEl) textEl.textContent = 'DHMZ CAP trenuta\u010dno ne sadr\u017ei \u017euto, naran\u010dasto ni crveno upozorenje.';\n                if (icon) { icon.innerHTML = iconCheck; icon.className = 'lk-warning-symbol is-clear'; }\n                return;\n            }\n\n            const top = warnings[0];\n            title.textContent = top.level_label + ' UPOZORENJE';\n            title.style.color = top.level === 'red' ? '#b71921' : top.level === 'orange' ? '#c65f00' : '#9a7900';\n            if (textEl) textEl.textContent = 'Slu\u017ebeno DHMZ upozorenje za ' + (payload.region || 'Zagreba\u010dku regiju') + '.';\n            if (icon) {\n                icon.innerHTML = iconAlert;\n                const severityClass = top.level === 'red' ? 'is-red' : top.level === 'orange' ? 'is-orange' : 'is-yellow';\n                icon.className = 'lk-warning-symbol ' + severityClass;\n            }\n\n            warnings.forEach(w => {\n                const item = document.createElement('div');\n                item.className = 'lk-warning-item ' + (w.level || 'yellow');\n                const from = w.onset?.display || '';\n                const to = w.expires?.display || '';\n                const period = from || to ? ('Vrijedi: ' + (from || '\u2014') + (to ? ' \u2013 ' + to : '')) : '';\n                const desc = w.headline || w.description || '';\n                item.innerHTML =\n                    '<div class=\"lk-warning-head\"><div><div class=\"lk-warning-level\">' + (w.level_label || '') + '<\/div>' +\n                    '<div class=\"lk-warning-event\">' + escapeHtml(w.event || w.headline || 'DHMZ upozorenje') + '<\/div><\/div><\/div>' +\n                    (period ? '<div class=\"lk-warning-time\">' + escapeHtml(period) + '<\/div>' : '') +\n                    (desc ? '<div class=\"lk-warning-desc\">' + escapeHtml(desc) + '<\/div>' : '');\n                list.appendChild(item);\n            });\n\n            const warningWithAdvice = warnings.find(w =>\n                String(w.instruction || '').trim() !== ''\n            );\n\n            if (warningWithAdvice && advice && adviceText) {\n                adviceText.textContent = String(warningWithAdvice.instruction).trim();\n                advice.hidden = false;\n            }\n        }\n\n\n        let dhmzRadarTimer = null;\n        let dhmzRadarFrames = [];\n        let dhmzRadarIndex = 0;\n        let dhmzRadarPlaying = false;\n\n        function stopDhmzRadarAnimation() {\n            if (dhmzRadarTimer) clearInterval(dhmzRadarTimer);\n            dhmzRadarTimer = null;\n            dhmzRadarPlaying = false;\n            const btn = qs('dhmz-radar-play');\n            if (btn && dhmzRadarFrames.length > 1) btn.textContent = '\u25b6 Animacija';\n        }\n\n        \/* Svi kadrovi se u\u010ditavaju jednom (jedan cache-bust po osvje\u017eavanju podataka) i\n           sla\u017eu jedan na drugi; animacija samo pretapa prozirnost. Ranije se svaki kadar\n           iznova preuzimao pri svakom prikazu (?_lk=Date.now()), pa je slika treperila i trzala. *\/\n        let dhmzRadarLayers = [];\n\n        function showDhmzRadarFrame(index) {\n            const badge = qs('dhmz-radar-badge');\n            if (!dhmzRadarLayers.length) return;\n            dhmzRadarIndex = ((index % dhmzRadarLayers.length) + dhmzRadarLayers.length) % dhmzRadarLayers.length;\n            dhmzRadarLayers.forEach((img, i) => img.classList.toggle('is-on', i === dhmzRadarIndex));\n            if (badge) badge.textContent = 'DHMZ \u00b7 ' + (dhmzRadarLayers.length > 1 ? (dhmzRadarIndex + 1) + '\/' + dhmzRadarLayers.length : 'aktualno');\n        }\n\n        function buildDhmzRadarLayers(frames, stamp, onReady) {\n            const baseImg = qs('dhmz-radar-img');\n            const frame = baseImg ? baseImg.parentElement : null;\n            if (!frame) return;\n            frame.querySelectorAll('.lk-dhmz-radar-layer').forEach(el => el.remove());\n            if (baseImg) baseImg.style.display = 'none';\n            let loaded = 0, done = false;\n            const finish = () => { if (!done) { done = true; onReady(); } };\n            dhmzRadarLayers = frames.map((url, i) => {\n                const img = new Image();\n                img.className = 'lk-dhmz-radar-layer';\n                img.alt = i === frames.length - 1 ? 'DHMZ radarska slika \u2013 kompozit' : '';\n                img.decoding = 'async';\n                img.onload = img.onerror = function () {\n                    if (i === frames.length - 1 && img.naturalWidth && img.naturalHeight) {\n                        frame.style.aspectRatio = img.naturalWidth + ' \/ ' + img.naturalHeight;\n                    }\n                    loaded++;\n                    if (loaded >= frames.length) finish();\n                };\n                img.src = url + (url.includes('?') ? '&' : '?') + '_lk=' + encodeURIComponent(stamp);\n                frame.insertBefore(img, frame.firstChild);\n                return img;\n            });\n            setTimeout(finish, 8000); \/* animacija krene i ako neki kadar kasni *\/\n        }\n\n        function startDhmzRadarAnimation() {\n            if (dhmzRadarFrames.length < 2) return;\n            stopDhmzRadarAnimation();\n            dhmzRadarPlaying = true;\n            const btn = qs('dhmz-radar-play');\n            if (btn) btn.textContent = '\u275a\u275a Pauza';\n            dhmzRadarTimer = setInterval(function () {\n                showDhmzRadarFrame(dhmzRadarIndex + 1);\n            }, 700);\n        }\n\n        function renderDhmzRadar(payload) {\n            const img = qs('dhmz-radar-img');\n            const btn = qs('dhmz-radar-play');\n            const note = qs('dhmz-radar-note');\n            if (!img) return;\n\n            stopDhmzRadarAnimation();\n            const frames = Array.isArray(payload?.frames) ? payload.frames.filter(Boolean) : [];\n            dhmzRadarFrames = frames.length ? frames : ['https:\/\/vrijeme.hr\/kompozit-stat.png'];\n            dhmzRadarIndex = Math.max(0, dhmzRadarFrames.length - 1);\n            const stamp = String(snapshotData?.generated_at || Date.now());\n            const autoPlay = !(window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches);\n            buildDhmzRadarLayers(dhmzRadarFrames, stamp, function () {\n                showDhmzRadarFrame(dhmzRadarIndex);\n                if (dhmzRadarFrames.length > 1 && autoPlay) startDhmzRadarAnimation();\n            });\n            showDhmzRadarFrame(dhmzRadarIndex);\n\n            if (btn) {\n                btn.disabled = dhmzRadarFrames.length < 2;\n                btn.textContent = dhmzRadarFrames.length > 1 ? '\u25b6 Animacija' : 'Aktualna slika';\n                if (!btn.dataset.bound) {\n                    btn.addEventListener('click', function () {\n                        if (dhmzRadarPlaying) stopDhmzRadarAnimation();\n                        else startDhmzRadarAnimation();\n                    });\n                    btn.dataset.bound = '1';\n                }\n            }\n\n            if (note) {\n                note.textContent = dhmzRadarFrames.length > 1\n                    ? 'Slu\u017ebeni DHMZ kompozit \u00b7 ' + dhmzRadarFrames.length + ' frameova \u00b7 radarska mjerenja svakih 5 min.'\n                    : 'Slu\u017ebena aktualna DHMZ radarska slika. Ako DHMZ trenuta\u010dno ne izla\u017ee frameove animacije, koristite \u201eOtvori na DHMZ\u201d.';\n            }\n\n        }\n\n        function renderNext3Hours(minutely) {\n            const holder = qs('nowcast-track');\n            if (!holder) return;\n\n            const times = Array.isArray(minutely?.time) ? minutely.time : [];\n            if (!times.length) {\n                holder.innerHTML = '<div class=\"lk-nowcast-empty\">15-minutna prognoza trenuta\u010dno nije dostupna.<\/div>';\n                return;\n            }\n\n            const nowMs = Date.now();\n            let start = times.findIndex(t => {\n                const ms = new Date(t).getTime();\n                return Number.isFinite(ms) && ms >= nowMs - 5 * 60 * 1000;\n            });\n            if (start < 0) start = 0;\n\n            const end = Math.min(times.length, start + 13); \/\/ sada + pribli\u017eno 3 sata\n            let html = '';\n            for (let i = start; i < end; i++) {\n                const dt = new Date(times[i]);\n                const timeLabel = Number.isFinite(dt.getTime())\n                    ? dt.toLocaleTimeString('hr-HR', {hour:'2-digit', minute:'2-digit'})\n                    : '\u2014';\n                const temp = Number(minutely.temperature_2m?.[i]);\n                const rain = Number(minutely.precipitation?.[i]);\n                const speed = Number(minutely.wind_speed_10m?.[i]);\n                const gust = Number(minutely.wind_gusts_10m?.[i]);\n                const dir = Number(minutely.wind_direction_10m?.[i]);\n                const code = minutely.weather_code?.[i];\n                const dirLabel = Number.isFinite(dir) ? windDirection(dir) + ' ' : '';\n\n                html += '<div class=\"lk-nowcast-item' + (i === start ? ' is-first' : '') + '\">' +\n                    '<div class=\"lk-nowcast-time\">' + escapeHtml(timeLabel) + '<\/div>' +\n                    '<div class=\"lk-nowcast-icon\" title=\"' + escapeHtml(weatherDescription(code)) + '\">' + weatherIcon(code, minutely.is_day?.[i]) + '<\/div>' +\n                    '<strong class=\"lk-nowcast-temp\">' + fmt(temp, 1) + '\u00b0<\/strong>' +\n                    '<div class=\"lk-nowcast-rain\">\ud83d\udca7 ' + fmt(rain, 1) + ' mm<\/div>' +\n                    '<div class=\"lk-nowcast-wind\">' + escapeHtml(dirLabel) + fmt(speed, 0) + ' \/ ' + fmt(gust, 0) + ' km\/h<\/div>' +\n                '<\/div>';\n            }\n            holder.innerHTML = html || '<div class=\"lk-nowcast-empty\">Kratkoro\u010dna prognoza trenuta\u010dno nije dostupna.<\/div>';\n        }\n\n        function renderDays(daily) {\n            const holder = qs('days');\n            if (!holder) return;\n            holder.innerHTML = '';\n\n            const times = Array.isArray(daily.time) ? daily.time.slice(0, 7) : [];\n            times.forEach((t, i) => {\n                const div = document.createElement('div');\n                div.className = 'lk-day';\n\n                const code = daily.weather_code?.[i];\n                const rainAmount = daily.precipitation_sum?.[i];\n\n                div.innerHTML =\n                    '<div class=\"lk-day-top\">' + dayName(t) + '<\/div>' +\n                    '<div class=\"lk-day-date\">' + dateShort(t) + '<\/div>' +\n                    '<div class=\"lk-day-icon\">' + weatherIcon(code) + '<\/div>' +\n                    '<strong class=\"lk-max\">' + fmt(daily.temperature_2m_max?.[i], 0) + '\u00b0<\/strong>' +\n                    '<strong class=\"lk-min\">' + fmt(daily.temperature_2m_min?.[i], 0) + '\u00b0<\/strong>' +\n                    '<span class=\"lk-precip-small\">' + fmt(rainAmount, 1) + ' mm<\/span>';\n\n                holder.appendChild(div);\n            });\n        }\n\n        function renderAQI(aq) {\n            const info = aqiLabel(aq.european_aqi);\n            qs('aqi').textContent = fmt(aq.european_aqi, 0);\n            qs('face').innerHTML = info.face;\n\n            const pill = qs('aqi-pill');\n            pill.textContent = info.label;\n            pill.className = info.cls === 'danger' ? 'lk-pill danger' : info.cls === 'warn' ? 'lk-pill warn' : 'lk-pill';\n\n            const rowsEl = qs('aqi-rows');\n            if (rowsEl) rowsEl.innerHTML = AQI_POLLUTANTS.map(p => aqiRowHtml(p, aq ? aq[p.role] : null)).join('');\n        }\n\n        function renderUV(value) {\n            qs('uv').textContent = fmt(value, 0);\n            const info = uvLabel(value);\n            const pill = qs('uv-label');\n            pill.textContent = info.label;\n            pill.className = info.cls === 'danger' ? 'lk-pill danger' : info.cls === 'warn' ? 'lk-pill warn' : 'lk-pill neutral';\n\n            const colors = ['#34a853','#45b458','#63c356','#88cf4e','#c3d64c','#f0d34f','#f7b54b','#f79b43','#ef6e3f','#dd5040','#c43c43'];\n            const scale = qs('uv-scale');\n            const labels = qs('uv-labels');\n            scale.innerHTML = ''; labels.innerHTML = '';\n            colors.forEach((c, i) => {\n                const bar = document.createElement('div'); bar.className = 'lk-uv-bar'; bar.style.background = c; scale.appendChild(bar);\n                const lbl = document.createElement('div'); lbl.textContent = i + 1; labels.appendChild(lbl);\n            });\n            const last = document.createElement('div'); last.textContent = '11+'; labels.appendChild(last);\n            const lastBar = document.createElement('div'); lastBar.className = 'lk-uv-bar'; lastBar.style.background = '#8f2f7a'; scale.appendChild(lastBar);\n        }\n\n        \/* Razredi dnevne koli\u010dine oborina prema ETCCDI\/CLIMDEX (WMO): ki\u0161ni dan >= 1 mm,\n           obilna ki\u0161a >= 10 mm, vrlo obilna ki\u0161a >= 20 mm. Vidi lkmeteo_rain_help_html(). *\/\n        function precipClass(mm) {\n            const v = Number(mm) || 0;\n            if (v >= 20) return {cls:'very-heavy', color:'#1f5c96'};\n            if (v >= 10) return {cls:'heavy', color:'#4f93d1'};\n            if (v >= 1)  return {cls:'wet', color:'#a8d0f0'};\n            return {cls:'dry', color:'#e2e8f0'};\n        }\n\n        let rainRange = '7d';\n        let rainResizeTimer = null;\n        window.addEventListener('resize', function () {\n            clearTimeout(rainResizeTimer);\n            rainResizeTimer = setTimeout(function () { if (snapshotData && rainRange !== '7d') renderRain(snapshotData); }, 200);\n        });\n        const RAIN_MONTHS_FULL = ['sije\u010danj','velja\u010da','o\u017eujak','travanj','svibanj','lipanj','srpanj','kolovoz','rujan','listopad','studeni','prosinac'];\n\n        function rainDailyRows(history) {\n            const times = history?.daily?.time || [];\n            const vals = history?.daily?.precipitation_sum || [];\n            return times.map((t, i) => ({date: t, mm: Number(vals[i]) || 0, ok: vals[i] !== null && vals[i] !== undefined}));\n        }\n\n        function rainLegendDailyHtml() {\n            return '<div class=\"lk-gauge-legend\" aria-label=\"Legenda razreda oborina\"><span class=\"lk-gauge-legend-title\">Razredi:<\/span>' +\n                '<span><span class=\"lk-swatch\" style=\"background:#e2e8f0\"><\/span>suho<\/span>' +\n                '<span><span class=\"lk-swatch\" style=\"background:#a8d0f0\"><\/span>ki\u0161ni dan<\/span>' +\n                '<span><span class=\"lk-swatch\" style=\"background:#4f93d1\"><\/span>obilna ki\u0161a<\/span>' +\n                '<span><span class=\"lk-swatch\" style=\"background:#1f5c96\"><\/span>vrlo obilna ki\u0161a<\/span><\/div>';\n        }\n\n        function rainLegendMonthlyHtml() {\n            return '<div class=\"lk-gauge-legend\" aria-label=\"Legenda mjese\u010dnih oborina\"><span class=\"lk-gauge-legend-title\">Legenda:<\/span>' +\n                '<span><span class=\"lk-swatch\" style=\"background:#4f93d1\"><\/span>mjese\u010dna oborina<\/span>' +\n                '<span><span class=\"lk-swatch\" style=\"background:#b7d3ee\"><\/span>teku\u0107i mjesec<\/span>' +\n                '<span><span class=\"lk-swatch\" style=\"background:#16385f;height:3px;margin-top:5px\"><\/span>prosjek (Sisak 1949.\u20132024.)<\/span><\/div>';\n        }\n\n        function rainKv(label, valueHtml, first) {\n            return '<div class=\"lk-kv\"' + (first ? ' style=\"border-bottom:0;padding-top:6px\"' : '') + '><span>' + escapeHtml(label) + '<\/span><strong>' + valueHtml + '<\/strong><\/div>';\n        }\n\n        function rainDaysWord(n) { return n === 1 ? ' dan' : ' dana'; }\n\n        function renderRain7(rows) {\n            const holder = qs('rain-chart');\n            holder.innerHTML = '';\n            const last = rows.slice(-7);\n            let max = 0; last.forEach(r => { max = Math.max(max, r.mm); });\n            let total = 0, wet = 0;\n            last.forEach(r => {\n                total += r.mm; if (r.mm >= 1) wet++;\n                const pc = precipClass(r.mm);\n                const col = document.createElement('div'); col.className = 'lk-bar-col';\n                const height = max > 0 ? Math.max(4, (r.mm \/ max) * 120) : 4;\n                col.innerHTML = '<div class=\"lk-bar-value\">' + fmt(r.mm, 1) + '<\/div><div class=\"lk-bar\" style=\"height:' + height + 'px;background:' + pc.color + '\"><\/div><div class=\"lk-bar-label\">' + dateShort(r.date) + '<\/div>';\n                holder.appendChild(col);\n            });\n            return rainKv('Ukupno', escapeHtml(fmt(total, 1)) + ' mm', true) +\n                   rainKv('Ki\u0161nih dana (\u22651 mm)', wet + rainDaysWord(wet) + ' od ' + last.length);\n        }\n\n        \/* SVG se crta u stvarnoj \u0161irini okvira, da tekst na mobitelu ostane \u010ditljiv. *\/\n        function rainSvgWidth(holder) {\n            const w = Math.round((holder && holder.clientWidth) || (holder && holder.parentElement && holder.parentElement.clientWidth) || 640);\n            return Math.max(280, Math.min(900, w));\n        }\n\n        function niceMax(v) {\n            if (!(v > 0)) return 10;\n            const steps = [5, 10, 20, 25, 40, 50, 60, 80, 100, 120, 150, 200, 250, 300, 400, 500];\n            for (const st of steps) if (v <= st) return st;\n            return Math.ceil(v \/ 100) * 100;\n        }\n\n        function renderRain30(rows, monthly) {\n            const holder = qs('rain-svg');\n            const last = rows.slice(-30);\n            const W = rainSvgWidth(holder), H = 210, L = 34, R = 8, T = 22, B = 34;\n            const cw = (W - L - R) \/ Math.max(1, last.length);\n            const maxV = niceMax(Math.max(...last.map(r => r.mm), 0));\n            const y = v => T + (H - T - B) * (1 - v \/ maxV);\n            let grid = '';\n            [0, maxV \/ 2, maxV].forEach(g => {\n                grid += '<line x1=\"' + L + '\" x2=\"' + (W - R) + '\" y1=\"' + y(g).toFixed(1) + '\" y2=\"' + y(g).toFixed(1) + '\" stroke=\"#e8eef4\"><\/line>' +\n                        '<text x=\"' + (L - 6) + '\" y=\"' + (y(g) + 4).toFixed(1) + '\" text-anchor=\"end\" font-size=\"11\" fill=\"#6f8398\">' + fmt(g, 0) + '<\/text>';\n            });\n            let bars = '', labels = '';\n            let total = 0, wet = 0, maxDay = null;\n            last.forEach((r, i) => {\n                total += r.mm; if (r.mm >= 1) wet++;\n                if (!maxDay || r.mm > maxDay.mm) maxDay = r;\n                const x = L + i * cw + cw * 0.15, w = cw * 0.7;\n                const top = r.mm > 0 ? Math.min(y(r.mm), H - B - 2) : H - B - 2;\n                const pc = precipClass(r.mm);\n                bars += '<rect x=\"' + x.toFixed(1) + '\" y=\"' + top.toFixed(1) + '\" width=\"' + w.toFixed(1) + '\" height=\"' + (H - B - top).toFixed(1) + '\" fill=\"' + pc.color + '\"><title>' + escapeHtml(dateShort(r.date) + ': ' + fmt(r.mm, 1) + ' mm') + '<\/title><\/rect>';\n                const step = W < 480 ? 7 : 5;\n                if ((i % step === 0 && i <= last.length - 1 - Math.ceil(step \/ 2)) || i === last.length - 1) {\n                    labels += '<text x=\"' + (x + w \/ 2).toFixed(1) + '\" y=\"' + (H - B + 16) + '\" text-anchor=\"middle\" font-size=\"11\" fill=\"#53697f\">' + escapeHtml(dateShort(r.date)) + '<\/text>';\n                }\n            });\n            holder.innerHTML = '<svg viewBox=\"0 0 ' + W + ' ' + H + '\" width=\"' + W + '\" height=\"' + H + '\" role=\"img\" aria-label=\"Dnevne oborine u zadnjih 30 dana\">' +\n                grid + bars + '<line x1=\"' + L + '\" x2=\"' + (W - R) + '\" y1=\"' + (H - B) + '\" y2=\"' + (H - B) + '\" stroke=\"#c9d6e2\"><\/line>' + labels +\n                '<text x=\"' + (L - 6) + '\" y=\"10\" text-anchor=\"end\" font-size=\"10\" fill=\"#8a9bab\">mm<\/text><\/svg>';\n\n            let html = rainKv('Ukupno (30 dana)', escapeHtml(fmt(total, 1)) + ' mm', true) +\n                       rainKv('Ki\u0161nih dana (\u22651 mm)', wet + rainDaysWord(wet) + ' od ' + last.length);\n            if (maxDay && maxDay.mm >= 0.1) html += rainKv('Najki\u0161niji dan', escapeHtml(fmt(maxDay.mm, 1) + ' mm \u00b7 ' + dateShort(maxDay.date)));\n            const cur = monthly && monthly.ok ? (monthly.months || []).find(m => m.current) : null;\n            if (cur && Number.isFinite(Number(cur.sum)) && Number.isFinite(Number(cur.normal))) {\n                const monthName = RAIN_MONTHS_FULL[Number(String(cur.ym).slice(5)) - 1] || cur.label;\n                html += rainKv('Ovaj mjesec do sada', escapeHtml(fmt(cur.sum, 1) + ' mm') + ' <small style=\"font-weight:400;color:#6f8398\">od prosje\u010dnih ' + escapeHtml(fmt(cur.normal, 0)) + ' mm za ' + escapeHtml(monthName) + '<\/small>');\n            }\n            return html;\n        }\n\n        function renderRain12(monthly) {\n            const holder = qs('rain-svg');\n            const months = monthly && monthly.ok ? (monthly.months || []) : [];\n            if (!months.length) {\n                holder.innerHTML = '<div class=\"lk-rain-note\">Mjese\u010dni podaci trenuta\u010dno nisu dostupni.<\/div>';\n                return '';\n            }\n            const W = rainSvgWidth(holder), narrow = W < 480, H = 220, L = 38, R = 8, T = 22, B = 40;\n            const cw = (W - L - R) \/ months.length;\n            const maxV = niceMax(Math.max(...months.map(m => Math.max(Number(m.sum) || 0, Number(m.normal) || 0))));\n            const y = v => T + (H - T - B) * (1 - v \/ maxV);\n            let grid = '';\n            [0, maxV \/ 2, maxV].forEach(g => {\n                grid += '<line x1=\"' + L + '\" x2=\"' + (W - R) + '\" y1=\"' + y(g).toFixed(1) + '\" y2=\"' + y(g).toFixed(1) + '\" stroke=\"#e8eef4\"><\/line>' +\n                        '<text x=\"' + (L - 6) + '\" y=\"' + (y(g) + 4).toFixed(1) + '\" text-anchor=\"end\" font-size=\"11\" fill=\"#6f8398\">' + fmt(g, 0) + '<\/text>';\n            });\n            let bars = '', norms = '', labels = '', values = '';\n            let prevYear = null;\n            months.forEach((m, i) => {\n                const x = L + i * cw + cw * 0.18, w = cw * 0.64, cx = x + w \/ 2;\n                const v = Number(m.sum);\n                if (Number.isFinite(v)) {\n                    const top = Math.min(y(v), H - B - 2);\n                    bars += '<rect x=\"' + x.toFixed(1) + '\" y=\"' + top.toFixed(1) + '\" width=\"' + w.toFixed(1) + '\" height=\"' + (H - B - top).toFixed(1) + '\" fill=\"' + (m.current ? '#b7d3ee' : '#4f93d1') + '\"><title>' +\n                        escapeHtml(m.label + ' ' + m.year + ': ' + fmt(v, 1) + ' mm' + (m.current ? ' (u tijeku)' : '') + (Number.isFinite(Number(m.normal)) ? ' \u00b7 prosjek ' + fmt(m.normal, 0) + ' mm' : '')) + '<\/title><\/rect>';\n                    values += '<text x=\"' + cx.toFixed(1) + '\" y=\"' + (top - 5).toFixed(1) + '\" text-anchor=\"middle\" font-size=\"' + (narrow ? 9.5 : 10.5) + '\" font-weight=\"600\" fill=\"#1b4b87\">' + fmt(v, 0) + '<\/text>';\n                }\n                const n = Number(m.normal);\n                if (Number.isFinite(n)) {\n                    norms += '<line x1=\"' + (x - 2).toFixed(1) + '\" x2=\"' + (x + w + 2).toFixed(1) + '\" y1=\"' + y(n).toFixed(1) + '\" y2=\"' + y(n).toFixed(1) + '\" stroke=\"#16385f\" stroke-width=\"2.5\"><\/line>';\n                }\n                labels += '<text x=\"' + cx.toFixed(1) + '\" y=\"' + (H - B + 15) + '\" text-anchor=\"middle\" font-size=\"11\" fill=\"#53697f\">' + escapeHtml(m.label) + '<\/text>';\n                if (m.year !== prevYear) {\n                    labels += '<text x=\"' + cx.toFixed(1) + '\" y=\"' + (H - B + 29) + '\" text-anchor=\"middle\" font-size=\"10\" fill=\"#8a9bab\">' + m.year + '<\/text>';\n                    prevYear = m.year;\n                }\n            });\n            holder.innerHTML = '<svg viewBox=\"0 0 ' + W + ' ' + H + '\" width=\"' + W + '\" height=\"' + H + '\" role=\"img\" aria-label=\"Oborine po mjesecima za zadnjih 12 mjeseci, s vi\u0161egodi\u0161njim prosjekom\">' +\n                grid + bars + norms + values + '<line x1=\"' + L + '\" x2=\"' + (W - R) + '\" y1=\"' + (H - B) + '\" y2=\"' + (H - B) + '\" stroke=\"#c9d6e2\"><\/line>' + labels +\n                '<text x=\"' + (L - 6) + '\" y=\"10\" text-anchor=\"end\" font-size=\"10\" fill=\"#8a9bab\">mm<\/text><\/svg>';\n\n            const complete = months.filter(m => m.complete && Number.isFinite(Number(m.sum)));\n            const sum12 = months.reduce((a, m) => a + (Number(m.sum) || 0), 0);\n            const norm12 = months.reduce((a, m) => {\n                const n = Number(m.normal) || 0;\n                return a + (m.current ? n * (Number(m.days_expected) || 0) \/ (Number(m.days_in_month) || 30) : n);\n            }, 0);\n            let html = rainKv('Ukupno (12 mjeseci)', escapeHtml(fmt(sum12, 0)) + ' mm', true);\n            if (norm12 > 0) {\n                const pct = Math.round((sum12 \/ norm12 - 1) * 100);\n                const cls = pct >= 0 ? 'is-wet' : 'is-dry';\n                const word = pct === 0 ? 'u prosjeku' : (pct > 0 ? 'vi\u0161e od prosjeka' : 'manje od prosjeka');\n                html += rainKv('Prosjek za isto razdoblje', escapeHtml(fmt(norm12, 0)) + ' mm \u00b7 <span class=\"lk-rain-delta ' + cls + '\">' + (pct > 0 ? '+' : '') + pct + ' % ' + word + '<\/span>');\n            }\n            if (complete.length) {\n                const wettest = complete.reduce((a, b) => (Number(b.sum) > Number(a.sum) ? b : a));\n                const driest = complete.reduce((a, b) => (Number(b.sum) < Number(a.sum) ? b : a));\n                html += rainKv('Najki\u0161niji mjesec', escapeHtml(RAIN_MONTHS_FULL[Number(String(wettest.ym).slice(5)) - 1] + ' ' + wettest.year + ' \u00b7 ' + fmt(wettest.sum, 0) + ' mm'));\n                html += rainKv('Najsu\u0161niji mjesec', escapeHtml(RAIN_MONTHS_FULL[Number(String(driest.ym).slice(5)) - 1] + ' ' + driest.year + ' \u00b7 ' + fmt(driest.sum, 0) + ' mm'));\n            }\n            return html;\n        }\n\n        function renderRain(data) {\n            const chart = qs('rain-chart'), svg = qs('rain-svg'), stats = qs('rain-stats'), legend = qs('rain-legend'), sub = qs('rain-sub');\n            if (!chart || !svg || !stats) return;\n            const rows = rainDailyRows(data?.precip_history || {});\n            const monthly = data?.precip_monthly || null;\n            chart.hidden = rainRange !== '7d';\n            svg.hidden = rainRange === '7d';\n            \/* \u0161irina se mjeri tek kad je okvir vidljiv *\/\n            let html = '';\n            if (rainRange === '7d') html = renderRain7(rows);\n            else if (rainRange === '30d') html = renderRain30(rows, monthly);\n            else html = renderRain12(monthly);\n            stats.innerHTML = html;\n            if (legend) legend.innerHTML = rainRange === '12m' ? rainLegendMonthlyHtml() : rainLegendDailyHtml();\n            if (sub) sub.textContent = rainRange === '7d' ? '\u2013 zadnjih 7 dana' : (rainRange === '30d' ? '\u2013 zadnjih 30 dana' : '\u2013 zadnjih 12 mjeseci');\n            root.querySelectorAll('[data-rain-range]').forEach(btn => {\n                const active = btn.getAttribute('data-rain-range') === rainRange;\n                btn.classList.toggle('is-active', active);\n                btn.setAttribute('aria-pressed', active ? 'true' : 'false');\n            });\n        }\n\n        function renderWindRose(directionDeg, speedKmh) {\n            const holder = qs('wind-rose');\n            if (!holder) return;\n            const deg = Number(directionDeg) || 0;\n            const b = beaufortFor(speedKmh);\n            const color = b ? beaufortColor(b.force) : '#3b82f6';\n            \/* 8 glavnih smjerova (ne samo N\/S\/E\/W), radijus 68 tako da label ne sije\u010de prsten. *\/\n            const compass = [['N',80,14],['NE',134,32],['E',146,80],['SE',134,128],['S',80,146],['SW',26,128],['W',14,80],['NW',26,32]];\n            const labels = compass.map(c => '<text x=\"' + c[1] + '\" y=\"' + c[2] + '\" text-anchor=\"middle\" dominant-baseline=\"middle\" font-size=\"12\" fill=\"#64748b\" font-weight=\"700\">' + c[0] + '<\/text>').join('');\n            holder.innerHTML =\n                '<svg class=\"lk-wind-svg\" viewBox=\"0 0 160 160\" aria-hidden=\"true\">' +\n                    '<circle cx=\"80\" cy=\"80\" r=\"54\" fill=\"none\" stroke=\"#e2e8f0\" stroke-width=\"2\"><\/circle>' +\n                    '<line x1=\"80\" y1=\"26\" x2=\"80\" y2=\"134\" stroke=\"#e2e8f0\"><\/line>' +\n                    '<line x1=\"26\" y1=\"80\" x2=\"134\" y2=\"80\" stroke=\"#e2e8f0\"><\/line>' +\n                    labels +\n                    '<g transform=\"rotate(' + deg + ' 80 80)\">' +\n                        '<line x1=\"80\" y1=\"80\" x2=\"80\" y2=\"30\" stroke=\"' + color + '\" stroke-width=\"6\" stroke-linecap=\"round\"><\/line>' +\n                        '<polygon points=\"80,16 70,36 90,36\" fill=\"' + color + '\"><\/polygon>' +\n                    '<\/g>' +\n                    '<circle cx=\"80\" cy=\"80\" r=\"6\" fill=\"' + color + '\"><\/circle>' +\n                '<\/svg>';\n        }\n\n        function renderClimate(c) {\n            qs('climate-subtitle').textContent = (c.location_label || 'Lekenik') + ' (' + (c.period || '') + ')';\n            qs('climate-month-a').textContent = c.month_label || '';\n            qs('climate-month-b').textContent = c.month_label || '';\n            qs('climate-month-c').textContent = c.month_label || '';\n            qs('climate-month-d').textContent = c.month_label || '';\n            qs('climate-month-e').textContent = c.month_label || '';\n            qs('climate-mean-temp').textContent = fmt(c.mean_temp, 1) + ' \u00b0C';\n            qs('climate-max-temp').textContent = fmt(c.max_temp, 1) + ' \u00b0C';\n            qs('climate-min-temp').textContent = fmt(c.min_temp, 1) + ' \u00b0C';\n            qs('climate-mean-precip').textContent = fmt(c.mean_precip_mm, 1) + ' mm';\n            qs('climate-sun-hours').textContent = fmt(c.sun_hours, 0) + ' h';\n            qs('climate-period').textContent = c.period || '\u2014';\n        }\n\n        \/* Sve postaje Kupe i Odre u jednom pozivu, za odabrani raspon. Koristi se i pri\n           prvom crtanju i pri promjeni raspona (klik na 24 sata\/3\/7\/14\/30 dana). *\/\n        function renderAllWater(data) {\n            RIVER_ORDER.forEach(key => renderWater(key, data.water?.kupa?.[key]));\n            applyRiverRiseRanking(data.water?.kupa || {});\n            renderRiverStrip(data.water?.kupa || {}, '24h');\n            ODRA_ORDER.forEach(key => renderWater(key, data.water?.odra?.[key]));\n            \/* Jednaka veli\u010dina velikog broja u svim karticama bloka: mjeri se prema\n               najduljem broju (s minusom), da \"cm\" i strelica uvijek stanu. *\/\n            root.querySelectorAll('.lk-water-wrap').forEach(wrap => {\n                let maxChars = 2;\n                wrap.querySelectorAll('.lk-water-level').forEach(el => { maxChars = Math.max(maxChars, Number(el.dataset.chars || 0)); });\n                wrap.style.setProperty('--lk-chars', maxChars);\n            });\n        }\n\n        function parseDhmzMeasured(st) {\n            if (!st) return null;\n            if (st.measured_at) { const d = new Date(st.measured_at); if (!isNaN(d.getTime())) return d; }\n            const m = String(st.display_time || '').match(\/(\\d{1,2})\\.\\s*(\\d{1,2})\\.\\s*(\\d{4})\\.?\\s*[\u00b7,\\s]\\s*(\\d{1,2})(?:\\s*[:.h]\\s*(\\d{2}))?\/);\n            if (!m) return null;\n            const d = new Date(Number(m[3]), Number(m[2]) - 1, Number(m[1]), Number(m[4]), m[5] ? Number(m[5]) : 0, 0);\n            return isNaN(d.getTime()) ? null : d;\n        }\n        function hhmm(d) { return String(d.getHours()).padStart(2, '0') + ':' + String(d.getMinutes()).padStart(2, '0'); }\n        function dhmzDayWord(d) {\n            const a = new Date(); a.setHours(0,0,0,0);\n            const b = new Date(d.getTime()); b.setHours(0,0,0,0);\n            const diff = Math.round((a - b) \/ 86400000);\n            if (diff === 0) return 'danas';\n            if (diff === 1) return 'ju\u010der';\n            return d.getDate() + '. ' + (d.getMonth() + 1) + '.';\n        }\n        function dhmzAgeText(min) {\n            if (min === null || !Number.isFinite(min)) return '';\n            if (min < 1) return 'manje od minute';\n            if (min < 60) return min + ' min';\n            const h = Math.floor(min \/ 60), r = min % 60;\n            return h + ' h' + (r ? ' ' + r + ' min' : '');\n        }\n\n        function renderAll(data) {\n            snapshotData = data;\n            places = Array.isArray(data.places) ? data.places : [];\n\n            const forecast = data.forecast || {};\n            const current = forecast.current || {};\n            const daily = forecast.daily || {};\n            const hourly = forecast.hourly || {};\n            const minutely15 = forecast.minutely_15 || {};\n            const aq = (data.air_quality || {}).current || {};\n\n            const updated = new Date(data.generated_at || Date.now());\n            qs('updated').textContent = updated.toLocaleString('hr-HR');\n\n            qs('now-icon').innerHTML = weatherIcon(current.weather_code, current.is_day);\n            const nowDesc = qs('now-desc');\n            if (nowDesc) nowDesc.textContent = Number.isFinite(Number(current.weather_code)) ? weatherDescription(current.weather_code) : '';\n            qs('temp').textContent = fmt(current.temperature_2m, 1);\n            qs('feels').textContent = fmt(current.apparent_temperature, 1);\n            qs('humidity').textContent = fmt(current.relative_humidity_2m, 0) + ' %';\n            qs('wind').textContent = windDirection(current.wind_direction_10m) + ' ' + fmt(current.wind_speed_10m, 0) + ' km\/h';\n            qs('pressure').textContent = fmt(current.pressure_msl, 0) + ' hPa';\n            qs('rain').textContent = fmt(daily.precipitation_sum?.[0], 1) + ' mm';\n\n            const dhmzSisak = data.dhmz_sisak || {};\n            const dhmzRef = qs('dhmz-sisak-ref');\n            const dhmzTemp = qs('dhmz-sisak-temp');\n            const dhmzTime = qs('dhmz-sisak-time');\n\n            function setDhmzRow(rowRole, valueRole, value) {\n                const row = qs(rowRole);\n                const valueEl = qs(valueRole);\n                const show = value !== null && value !== undefined && value !== '' && value !== '\u2014';\n                if (row) row.classList.toggle('is-visible', !!show);\n                if (valueEl && show) valueEl.textContent = value;\n                return !!show;\n            }\n\n            const dhmzHasTemp = Number.isFinite(Number(dhmzSisak.temperature_c));\n            const dhmzHasHumidity = Number.isFinite(Number(dhmzSisak.humidity_pct));\n            const dhmzHasPressure = Number.isFinite(Number(dhmzSisak.pressure_hpa));\n            const dhmzHasWind = Number.isFinite(Number(dhmzSisak.wind_speed_kmh));\n            const dhmzHasRain = Number.isFinite(Number(dhmzSisak.precip_24h_mm));\n            const dhmzHasAnyData = dhmzHasTemp || dhmzHasHumidity || dhmzHasPressure || dhmzHasWind || dhmzHasRain;\n\n            if (dhmzTemp) dhmzTemp.textContent = dhmzHasTemp ? fmt(Number(dhmzSisak.temperature_c), 1) + ' \u00b0C' : '\u2014';\n\n            setDhmzRow(\n                'dhmz-sisak-humidity-row',\n                'dhmz-sisak-humidity',\n                dhmzHasHumidity ? fmt(Number(dhmzSisak.humidity_pct), 0) + ' %' : null\n            );\n\n            const dhmzWind = dhmzHasWind\n                ? ((dhmzSisak.wind_direction || '').trim() ? String(dhmzSisak.wind_direction).trim() + ' ' : '') + fmt(Number(dhmzSisak.wind_speed_kmh), 0) + ' km\/h'\n                : null;\n            setDhmzRow('dhmz-sisak-wind-row', 'dhmz-sisak-wind', dhmzWind);\n\n            setDhmzRow(\n                'dhmz-sisak-pressure-row',\n                'dhmz-sisak-pressure',\n                dhmzHasPressure ? fmt(Number(dhmzSisak.pressure_hpa), 0) + ' hPa' : null\n            );\n\n            const hasRain24 = setDhmzRow(\n                'dhmz-sisak-rain-row',\n                'dhmz-sisak-rain',\n                dhmzHasRain ? fmt(Number(dhmzSisak.precip_24h_mm), 1) + ' mm' : null\n            );\n            const rainNote = qs('dhmz-sisak-rain-note');\n            if (rainNote) rainNote.classList.toggle('is-visible', hasRain24);\n\n            const dhmzAtEl = qs('dhmz-sisak-at');\n            const dhmzMeasured = parseDhmzMeasured(dhmzSisak);\n            const dhmzAgeMin = dhmzMeasured ? Math.max(0, Math.round((Date.now() - dhmzMeasured.getTime()) \/ 60000)) : null;\n            const dhmzStale = dhmzHasAnyData && (dhmzAgeMin !== null ? dhmzAgeMin >= 100 : !!dhmzSisak.fallback);\n            if (dhmzRef) dhmzRef.classList.toggle('is-stale', dhmzStale);\n            if (dhmzAtEl) dhmzAtEl.textContent = (dhmzHasTemp && dhmzMeasured) ? 'u ' + hhmm(dhmzMeasured) : '';\n            if (dhmzTime) {\n                if (dhmzHasAnyData) {\n                    if (dhmzMeasured) {\n                        const dayWord = dhmzDayWord(dhmzMeasured);\n                        dhmzTime.innerHTML = (dhmzStale ? 'Zadnje slu\u017ebeno mjerenje: ' : 'Slu\u017ebeno mjerenje: ')\n                            + escapeHtml(dayWord) + ' u <b>' + hhmm(dhmzMeasured) + '<\/b>'\n                            + ' \u00b7 prije ' + escapeHtml(dhmzAgeText(dhmzAgeMin))\n                            + ' \u00b7 DHMZ objavljuje jednom na sat';\n                    } else {\n                        const prefix = dhmzSisak.fallback ? 'Zadnje dostupno slu\u017ebeno mjerenje \u00b7 ' : 'Slu\u017ebeno mjerenje \u00b7 ';\n                        dhmzTime.textContent = dhmzSisak.display_time\n                            ? prefix + dhmzSisak.display_time\n                            : (dhmzSisak.fallback ? 'Zadnje dostupno slu\u017ebeno mjerenje' : 'Slu\u017ebeno referentno mjerenje');\n                    }\n                } else {\n                    dhmzTime.textContent = 'DHMZ Sisak \u00b7 podatak trenuta\u010dno nije dostupan';\n                }\n            }\n            if (dhmzRef) dhmzRef.classList.add('is-visible');\n\n            renderNext3Hours(minutely15);\n            renderDays(daily);\n            renderAllWater(data);\n            renderDetailStation(data);\n            renderWarnings(data.warnings || {});\n            renderDhmzRadar(data.radar_dhmz || {});\n            renderAQI(aq);\n\n            renderPollenCard(aq);\n\n            let idx = 0;\n            if (Array.isArray(hourly.time) && current.time) {\n                const found = hourly.time.findIndex(t => t >= current.time);\n                idx = found >= 0 ? found : 0;\n            }\n            qs('soil-temp-6').textContent = fmt(Number(hourly.soil_temperature_6cm?.[idx]), 1) + ' \u00b0C';\n            qs('soil-temp-18').textContent = fmt(Number(hourly.soil_temperature_18cm?.[idx]), 1) + ' \u00b0C';\n            qs('soil-temp-54').textContent = fmt(Number(hourly.soil_temperature_54cm?.[idx]), 1) + ' \u00b0C';\n            qs('soil-moisture-27').textContent = fmt(Number(hourly.soil_moisture_9_to_27cm?.[idx]) * 100, 0) + ' % vol.';\n            qs('soil-moisture-81').textContent = fmt(Number(hourly.soil_moisture_27_to_81cm?.[idx]) * 100, 0) + ' % vol.';\n            qs('evapo').textContent = fmt(Number(daily.et0_fao_evapotranspiration?.[0]), 1) + ' mm';\n\n            renderUV(daily.uv_index_max?.[0]);\n            renderRain(data);\n            renderWindRose(current.wind_direction_10m, current.wind_speed_10m);\n\n            qs('wind-dir').textContent = windDirection(current.wind_direction_10m) + ' (' + fmt(current.wind_direction_10m, 0) + '\u00b0)';\n            qs('wind-speed').textContent = fmt(current.wind_speed_10m, 0) + ' km\/h';\n            qs('wind-gust').textContent = fmt(current.wind_gusts_10m, 0) + ' km\/h';\n            const windB = beaufortFor(current.wind_speed_10m);\n            qs('wind-desc').textContent = windB ? windB.force + ' Bf \u00b7 ' + windB.name : '\u2014';\n            const beaufortEl = qs('wind-beaufort');\n            if (beaufortEl) beaufortEl.innerHTML = beaufortGaugeHtml(current.wind_speed_10m);\n\n            const currentStamp = current.time ? 'Vrijeme podatka: ' + formatStamp(current.time) : 'Dohva\u0107eno: ' + formatStamp(data.generated_at);\n            const airStamp = aq.time ? 'Vrijeme podatka: ' + formatStamp(aq.time) : 'Dohva\u0107eno: ' + formatStamp(data.generated_at);\n            const soilStamp = hourly.time?.[idx] ? 'Vrijeme modela: ' + formatStamp(hourly.time[idx]) : 'Dohva\u0107eno: ' + formatStamp(data.generated_at);\n            const todayDate = daily.time?.[0] ? new Date(daily.time[0] + 'T12:00:00') : null;\n            const lastRainDate = data.precip_history?.daily?.time?.slice(-1)?.[0];\n\n            if (qs('weather-time')) qs('weather-time').textContent = currentStamp;\n            if (qs('nowcast-time')) qs('nowcast-time').textContent = 'Dohva\u0107eno: ' + formatStamp(data.generated_at);\n            if (qs('forecast-time')) qs('forecast-time').textContent = 'Dohva\u0107eno: ' + formatStamp(data.generated_at);\n            if (qs('air-time')) qs('air-time').textContent = airStamp;\n            if (qs('pollen-time')) qs('pollen-time').textContent = airStamp;\n            if (qs('soil-time')) qs('soil-time').textContent = soilStamp;\n            if (qs('uv-time')) qs('uv-time').textContent = 'Dnevni maksimum za ' + (daily.time?.[0] ? dateShort(daily.time[0]) : 'danas');\n            if (qs('rain-history-time')) qs('rain-history-time').textContent = lastRainDate ? 'Zaklju\u010dno s ' + dateShort(lastRainDate) : '\u2014';\n            if (qs('wind-time')) qs('wind-time').textContent = currentStamp;\n\n            renderClimate(data.climate_reference || {});\n            renderPlaceLabels();\n        }\n\n        let dataLoadInFlight = false;\n        function loadData() {\n            if (dataLoadInFlight) return;\n            dataLoadInFlight = true;\n\n            const separator = endpoint.includes('?') ? '&' : '?';\n            const freshEndpoint = endpoint + separator + '_lk=' + Date.now();\n\n            fetch(freshEndpoint, {\n                method:'GET',\n                cache:'no-store',\n                credentials:'same-origin',\n                headers:{\n                    'Accept':'application\/json',\n                    'Cache-Control':'no-cache',\n                    'Pragma':'no-cache'\n                }\n            })\n            .then(r => r.ok ? r.json() : null)\n            .then(renderAll)\n            .catch(err => {\n                console.error('Lekenik Meteo', err);\n                qs('updated').textContent = 'Podaci trenuta\u010dno nisu dostupni';\n            })\n            .finally(() => { dataLoadInFlight = false; });\n        }\n\n        \/* Vodostaji: prekida\u010d raspona (24 sata\/3\/7\/14\/30 dana) i skokovi na kartice \u2013 delegirano,\n           pa radi i nakon ponovnog crtanja. Promjena raspona stvarno prera\u010dunava traku toka,\n           retke promjene i graf u svakoj kartici (varijanta A), ne samo graf. *\/\n        root.addEventListener('click', function (event) {\n            const rangeBtn = event.target.closest('[data-water-range-btn]');\n            if (rangeBtn && root.contains(rangeBtn)) {\n                const range = WATER_RANGES[rangeBtn.getAttribute('data-water-range-btn')] ? rangeBtn.getAttribute('data-water-range-btn') : '24h';\n                if (root.dataset.waterRange === range) return;\n                root.dataset.waterRange = range;\n                root.querySelectorAll('[data-water-range-btn]').forEach(btn => {\n                    const active = btn.getAttribute('data-water-range-btn') === range;\n                    btn.classList.toggle('is-active', active);\n                    btn.setAttribute('aria-pressed', active ? 'true' : 'false');\n                });\n                if (snapshotData) renderAllWater(snapshotData, range);\n                return;\n            }\n            const dhmzJump = event.target.closest('[data-jump-dhmz-radar]');\n            if (dhmzJump && root.contains(dhmzJump)) {\n                const block = root.querySelector('[data-role=\"dhmz-radar\"]');\n                if (block) {\n                    scrollToWaterTarget(block);\n                    const playBtn = qs('dhmz-radar-play');\n                    if (playBtn && !playBtn.disabled && !dhmzRadarPlaying) startDhmzRadarAnimation();\n                }\n                return;\n            }\n            const cardRange = event.target.closest('[data-card-range]');\n            if (cardRange && root.contains(cardRange)) {\n                const box = cardRange.closest('.lk-water-box');\n                const r = cardRange.getAttribute('data-card-range');\n                if (!box || !WATER_RANGES[r]) return;\n                const key = String(box.getAttribute('data-role') || '').replace(\/^water-\/, '');\n                renderWater(key, waterStationByKey(key), r);\n                return;\n            }\n            const rainBtn = event.target.closest('[data-rain-range]');\n            if (rainBtn && root.contains(rainBtn)) {\n                const r = rainBtn.getAttribute('data-rain-range');\n                if (r === rainRange || !['7d','30d','12m'].includes(r)) return;\n                rainRange = r;\n                if (snapshotData) renderRain(snapshotData);\n                return;\n            }\n            const detBtn = event.target.closest('[data-det-range-btn]');\n            if (detBtn && root.contains(detBtn)) {\n                const r = detBtn.getAttribute('data-det-range-btn');\n                if (!WATER_RANGES[r] || r === detRange) return;\n                detRange = r;\n                if (snapshotData) renderDetailStation(snapshotData);\n                return;\n            }\n            const jump = event.target.closest('[data-river-jump]');\n            if (jump && root.contains(jump)) {\n                scrollToWaterTarget(qs('water-' + jump.getAttribute('data-river-jump')));\n                return;\n            }\n            const detail = event.target.closest('[data-jump-detail]');\n            if (detail && root.contains(detail)) {\n                scrollToWaterTarget(root.querySelector('.lk-card-detail'));\n            }\n        });\n\n        const radarPlay = root.querySelector('[data-action=\"radar-play\"]');\n        if (radarPlay) radarPlay.addEventListener('click', toggleRadarAnimation);\n\n        const radarRange = qs('radar-range');\n        if (radarRange) radarRange.addEventListener('input', function () {\n            stopRadarAnimation();\n            if (!radarReady) return;\n            showRadarFrame(Number(radarRange.value));\n        });\n\n        root.querySelectorAll('[data-mapmode]').forEach(btn => {\n            btn.addEventListener('click', function () {\n                setMapMode(btn.getAttribute('data-mapmode') || 'temperature');\n            });\n        });\n\n        let attempts = 0;\n        const boot = setInterval(function () {\n            attempts++;\n            if (window.L) {\n                clearInterval(boot);\n                initMap();\n               loadData();\n\n\/* Provjera novih podataka svake minute, i to samo dok je kartica vidljiva.\n   (Izvori se osvje\u017eavaju svakih 15 min \u2013 1 h; odgovor ima ~100\u2013150 kB pa bi provjera\n   svakih 10 s na mobitelu tro\u0161ila desetke MB na sat bez koristi.) *\/\nsetInterval(function () { if (document.visibilityState !== 'hidden') loadData(); }, 60 * 1000);\n\n\/* Lokalni sat u detaljnom bloku postaje ide svake sekunde.\n   To NIJE vrijeme slu\u017ebenog hidrolo\u0161kog mjerenja. *\/\nupdateDetailClock();\nsetInterval(updateDetailClock, 1000);\n\n\/* Kad se korisnik vrati na stranicu na mobitelu *\/\ndocument.addEventListener('visibilitychange', function () {\n    if (document.visibilityState === 'visible') {\n        loadData();\n    }\n});\n\n\/* Dodatno osvje\u017ei pri povratku fokusa *\/\nwindow.addEventListener('focus', function () {\n    loadData();\n});\n            }\n            if (attempts > 50) {\n                clearInterval(boot);\n                qs('updated').textContent = 'Leaflet se nije u\u010ditao';\n            }\n        }, 100);\n    })();\n    <\/script>\n<\/div>\n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-2031","page","type-page","status-publish"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Lekenik Meteo - Goran Juric DESIGN<\/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:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/\" \/>\n<meta property=\"og:locale\" content=\"hr_HR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Lekenik Meteo - Goran Juric DESIGN\" \/>\n<meta property=\"og:description\" content=\".\" \/>\n<meta property=\"og:url\" content=\"https:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/\" \/>\n<meta property=\"og:site_name\" content=\"Goran Juric DESIGN\" \/>\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:\\\/\\\/goranjuric-design.hr\\\/index.php\\\/lekenik-meteo\\\/\",\"url\":\"https:\\\/\\\/goranjuric-design.hr\\\/index.php\\\/lekenik-meteo\\\/\",\"name\":\"Lekenik Meteo - Goran Juric DESIGN\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/goranjuric-design.hr\\\/#website\"},\"datePublished\":\"2026-09-29T17:33:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/goranjuric-design.hr\\\/index.php\\\/lekenik-meteo\\\/#breadcrumb\"},\"inLanguage\":\"hr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/goranjuric-design.hr\\\/index.php\\\/lekenik-meteo\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/goranjuric-design.hr\\\/index.php\\\/lekenik-meteo\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Po\u010detna stranica\",\"item\":\"https:\\\/\\\/goranjuric-design.hr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Lekenik Meteo\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/goranjuric-design.hr\\\/#website\",\"url\":\"https:\\\/\\\/goranjuric-design.hr\\\/\",\"name\":\"Goran Juric DESIGN\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/goranjuric-design.hr\\\/#\\\/schema\\\/person\\\/f81c47c460cf76c96eb123628d099d18\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/goranjuric-design.hr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"hr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/goranjuric-design.hr\\\/#\\\/schema\\\/person\\\/f81c47c460cf76c96eb123628d099d18\",\"name\":\"Goran Juric\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"hr\",\"@id\":\"https:\\\/\\\/goranjuric-design.hr\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/Goran-Juric-design-Chair-W1c.png\",\"url\":\"https:\\\/\\\/goranjuric-design.hr\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/Goran-Juric-design-Chair-W1c.png\",\"contentUrl\":\"https:\\\/\\\/goranjuric-design.hr\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/Goran-Juric-design-Chair-W1c.png\",\"width\":1687,\"height\":1685,\"caption\":\"Goran Juric\"},\"logo\":{\"@id\":\"https:\\\/\\\/goranjuric-design.hr\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/Goran-Juric-design-Chair-W1c.png\"},\"sameAs\":[\"https:\\\/\\\/goranjuric-design.hr\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Lekenik Meteo - Goran Juric DESIGN","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:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/","og_locale":"hr_HR","og_type":"article","og_title":"Lekenik Meteo - Goran Juric DESIGN","og_description":".","og_url":"https:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/","og_site_name":"Goran Juric DESIGN","twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/","url":"https:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/","name":"Lekenik Meteo - Goran Juric DESIGN","isPartOf":{"@id":"https:\/\/goranjuric-design.hr\/#website"},"datePublished":"2026-09-29T17:33:13+00:00","breadcrumb":{"@id":"https:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/#breadcrumb"},"inLanguage":"hr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/goranjuric-design.hr\/index.php\/lekenik-meteo\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Po\u010detna stranica","item":"https:\/\/goranjuric-design.hr\/"},{"@type":"ListItem","position":2,"name":"Lekenik Meteo"}]},{"@type":"WebSite","@id":"https:\/\/goranjuric-design.hr\/#website","url":"https:\/\/goranjuric-design.hr\/","name":"Goran Juric DESIGN","description":"","publisher":{"@id":"https:\/\/goranjuric-design.hr\/#\/schema\/person\/f81c47c460cf76c96eb123628d099d18"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/goranjuric-design.hr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"hr"},{"@type":["Person","Organization"],"@id":"https:\/\/goranjuric-design.hr\/#\/schema\/person\/f81c47c460cf76c96eb123628d099d18","name":"Goran Juric","image":{"@type":"ImageObject","inLanguage":"hr","@id":"https:\/\/goranjuric-design.hr\/wp-content\/uploads\/2025\/11\/Goran-Juric-design-Chair-W1c.png","url":"https:\/\/goranjuric-design.hr\/wp-content\/uploads\/2025\/11\/Goran-Juric-design-Chair-W1c.png","contentUrl":"https:\/\/goranjuric-design.hr\/wp-content\/uploads\/2025\/11\/Goran-Juric-design-Chair-W1c.png","width":1687,"height":1685,"caption":"Goran Juric"},"logo":{"@id":"https:\/\/goranjuric-design.hr\/wp-content\/uploads\/2025\/11\/Goran-Juric-design-Chair-W1c.png"},"sameAs":["https:\/\/goranjuric-design.hr"]}]}},"_links":{"self":[{"href":"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/wp\/v2\/pages\/2031","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/wp\/v2\/comments?post=2031"}],"version-history":[{"count":1,"href":"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/wp\/v2\/pages\/2031\/revisions"}],"predecessor-version":[{"id":2033,"href":"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/wp\/v2\/pages\/2031\/revisions\/2033"}],"wp:attachment":[{"href":"https:\/\/goranjuric-design.hr\/index.php\/wp-json\/wp\/v2\/media?parent=2031"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}