{"id":234859,"date":"2024-11-25T11:18:43","date_gmt":"2024-11-25T11:18:43","guid":{"rendered":"https:\/\/wp-komm.slb.nu\/wordpress\/?page_id=234859"},"modified":"2026-09-18T10:30:16","modified_gmt":"2026-09-18T09:30:16","slug":"matdata","status":"publish","type":"page","link":"https:\/\/www.slb.nu\/slbanalys\/matdata\/","title":{"rendered":"M\u00e4tdata"},"content":{"rendered":"<p>[et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Hero&#8221; _builder_version=&#8221;4.27.2&#8243; max_width=&#8221;75%&#8221; max_width_tablet=&#8221;75%&#8221; max_width_phone=&#8221;100%&#8221; max_width_last_edited=&#8221;on|phone&#8221; module_alignment=&#8221;center&#8221; custom_margin=&#8221;100px||||false|false&#8221; custom_padding=&#8221;0px|0px|0px|0px&#8221; animation_style=&#8221;zoom&#8221; animation_intensity_zoom=&#8221;4%&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row use_custom_gutter=&#8221;on&#8221; gutter_width=&#8221;1&#8243; make_equal=&#8221;on&#8221; module_class=&#8221; et_pb_row_fullwidth&#8221; _builder_version=&#8221;4.27.6&#8243; background_enable_color=&#8221;off&#8221; use_background_color_gradient=&#8221;on&#8221; background_color_gradient_direction=&#8221;90deg&#8221; background_color_gradient_stops=&#8221;rgba(0,0,0,0.51) 30%|rgba(10,2,2,0) 100%&#8221; background_color_gradient_overlays_image=&#8221;on&#8221; background_image=&#8221;https:\/\/www.slb.nu\/slbanalys\/wp-content\/uploads\/2026\/04\/Matdata-AI-Enhance.png&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; width=&#8221;100%&#8221; width_tablet=&#8221;100%&#8221; width_phone=&#8221;100%&#8221; width_last_edited=&#8221;on|desktop&#8221; max_width=&#8221;100%&#8221; max_width_tablet=&#8221;100%&#8221; max_width_phone=&#8221;100%&#8221; max_width_last_edited=&#8221;on|desktop&#8221; max_height=&#8221;450px&#8221; custom_padding=&#8221;0px||0px|&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;top&#8221; animation_intensity_slide=&#8221;3%&#8221; make_fullwidth=&#8221;on&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.2&#8243; custom_padding=&#8221;10%|8%|10%|8%&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_text module_id=&#8221;mtrubrik&#8221; _builder_version=&#8221;4.27.6&#8243; text_font=&#8221;||||||||&#8221; header_font=&#8221;Montserrat|700||on|||||&#8221; header_text_color=&#8221;#EDEAE4&#8243; header_font_size=&#8221;60px&#8221; header_line_height=&#8221;1.3em&#8221; background_enable_color=&#8221;off&#8221; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; custom_margin=&#8221;||40px|&#8221; animation_style=&#8221;fade&#8221; header_font_size_tablet=&#8221;60px&#8221; header_font_size_phone=&#8221;30px&#8221; header_font_size_last_edited=&#8221;on|phone&#8221; locked=&#8221;off&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h1>M\u00e4tdata<\/h1>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Service Section&#8221; _builder_version=&#8221;4.27.6&#8243; max_width=&#8221;75%&#8221; max_width_tablet=&#8221;75%&#8221; max_width_phone=&#8221;100%&#8221; max_width_last_edited=&#8221;on|phone&#8221; module_alignment=&#8221;center&#8221; custom_margin=&#8221;|||&#8221; custom_padding=&#8221;25px||25px||false|false&#8221; animation_style=&#8221;fade&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row admin_label=&#8221;Quote&#8221; _builder_version=&#8221;4.27.2&#8243; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; max_width=&#8221;1440px&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.16&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_text admin_label=&#8221;Quote&#8221; _builder_version=&#8221;4.27.6&#8243; text_text_color=&#8221;#747d88&#8243; text_font_size=&#8221;18px&#8221; text_line_height=&#8221;1.8em&#8221; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; text_orientation=&#8221;center&#8221; module_alignment=&#8221;center&#8221; animation_direction=&#8221;top&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<p>Nedan visas aktuella halter av partiklar, (PM10 och PM2.5), kv\u00e4vedioxid (NO<sub>2<\/sub>) och ozon (O<sub>3<\/sub>) vid v\u00e5ra fasta m\u00e4tstationer. Ut\u00f6ver detta redovisar vi \u00e4ven m\u00e4tdata \u00e5t v\u00e5ra kommunpartners. Den realtidsdata som visas i figurerna \u00e4r prelimin\u00e4r och har inte genomg\u00e5tt ordinarie kvalitetsgranskning. Detta inneb\u00e4r att felaktiga v\u00e4rden kan f\u00f6rekomma.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Latest Work Section&#8221; _builder_version=&#8221;4.27.6&#8243; background_enable_color=&#8221;off&#8221; max_width=&#8221;75%&#8221; max_width_tablet=&#8221;100%&#8221; max_width_phone=&#8221;100%&#8221; max_width_last_edited=&#8221;on|tablet&#8221; module_alignment=&#8221;center&#8221; min_height=&#8221;557.6px&#8221; custom_margin=&#8221;||||false|false&#8221; custom_padding=&#8221;0px||60px||false|false&#8221; animation_style=&#8221;slide&#8221; animation_direction=&#8221;bottom&#8221; animation_intensity_slide=&#8221;2%&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; width=&#8221;100%&#8221; width_tablet=&#8221;&#8221; width_phone=&#8221;90%&#8221; width_last_edited=&#8221;on|phone&#8221; max_width=&#8221;1500px&#8221; min_height=&#8221;106.8px&#8221; custom_margin=&#8221;||||false|false&#8221; custom_padding=&#8221;0px|0px|0px|0px|false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_text _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; min_height=&#8221;108.8px&#8221; custom_margin=&#8221;||-15px|||&#8221; custom_padding=&#8221;0px||||false|false&#8221; text_font_size_tablet=&#8221;14px&#8221; text_font_size_phone=&#8221;12px&#8221; text_font_size_last_edited=&#8221;on|tablet&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h4>S\u00e5 anv\u00e4nder du m\u00e4tdata-f\u00f6nstret<\/h4>\n<ol>\n<li><strong>V\u00e4lj typ av m\u00e4tdata<\/strong><span> som du vill visa genom att navigera p\u00e5 rubrikerna<\/span> (Luftkvalitet, Milj\u00f6kvalitetsnormer och -m\u00e5l, Meteorologi, Buller, V\u00e5ra m\u00e4tstationer och H\u00e4mta data) ovanf\u00f6r diagrammen.<\/li>\n<li><strong>Anv\u00e4nd knapparna i respektive diagram<\/strong><span>\u00a0<\/span>(t.ex. \u201cPM10&#8243; f\u00f6r att se olika datam\u00e4ngder.)<\/li>\n<\/ol>\n<p>*Den realtidsdata som visas i figuren nedan \u00e4r prelimin\u00e4r och har inte genomg\u00e5tt ordinarie kvalitetsgranskning. Felaktiga v\u00e4rden kan d\u00e4rf\u00f6r visas emellan\u00e5t.<\/p>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; width=&#8221;100%&#8221; width_tablet=&#8221;100%&#8221; width_phone=&#8221;100%&#8221; width_last_edited=&#8221;on|tablet&#8221; max_width=&#8221;1500px&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_code _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; hover_enabled=&#8221;0&#8243; global_colors_info=&#8221;{}&#8221; sticky_enabled=&#8221;0&#8243;]<!DOCTYPE html><!-- [et_pb_line_break_holder] --><html lang=\"sv\"><!-- [et_pb_line_break_holder] --><head><!-- [et_pb_line_break_holder] --><meta charset=\"UTF-8\"><!-- [et_pb_line_break_holder] --><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"><!-- [et_pb_line_break_holder] --><meta name=\"description\" content=\"Luftkvalitet i \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund\"><!-- [et_pb_line_break_holder] --><title>Luftkvalitet Stockholm<\/title><!-- [et_pb_line_break_holder] --><link rel=\"preconnect\" href=\"https:\/\/cdn.plot.ly\"><!-- [et_pb_line_break_holder] --><link rel=\"preconnect\" href=\"https:\/\/cdn.jsdelivr.net\"><!-- [et_pb_line_break_holder] --><link rel=\"preconnect\" href=\"https:\/\/open.slb.nu\"><!-- [et_pb_line_break_holder] --><script src=\"https:\/\/cdn.plot.ly\/plotly-3.4.0.min.js\"><\/script><!-- [et_pb_line_break_holder] --><script src=\"https:\/\/cdn.jsdelivr.net\/npm\/xlsx\/dist\/xlsx.full.min.js\" defer><\/script><!-- [et_pb_line_break_holder] --><\/p>\n<style><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  * { box-sizing: border-box; margin: 0; padding: 0; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  body {<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->    line-height: 1.5;<!-- [et_pb_line_break_holder] -->    -webkit-font-smoothing: antialiased;<!-- [et_pb_line_break_holder] -->    -moz-osx-font-smoothing: grayscale;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-readmore-btn {<!-- [et_pb_line_break_holder] -->    background: none;<!-- [et_pb_line_break_holder] -->    border: 0;<!-- [et_pb_line_break_holder] -->    padding: 0;<!-- [et_pb_line_break_holder] -->    color: #007fc8;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    font-size: inherit;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-intro-more {<!-- [et_pb_line_break_holder] -->    margin-top: 0em;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 DIVI-LIKNANDE TABBAR \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-tabs-wrapper {<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    color: #222;<!-- [et_pb_line_break_holder] -->    width: 100%;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-nav {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->    border-bottom: 3px solid #009991;<!-- [et_pb_line_break_holder] -->    margin-bottom: 0;<!-- [et_pb_line_break_holder] -->    gap: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-btn {<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    padding: 12px 20px;<!-- [et_pb_line_break_holder] -->    min-height: 44px;<!-- [et_pb_line_break_holder] -->    border: none;<!-- [et_pb_line_break_holder] -->    background: #f5f5f5;<!-- [et_pb_line_break_holder] -->    color: #555;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    border-top: 3px solid transparent;<!-- [et_pb_line_break_holder] -->    border-left: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->    border-right: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->    margin-bottom: -3px;<!-- [et_pb_line_break_holder] -->    transition: background 0.15s, color 0.15s;<!-- [et_pb_line_break_holder] -->    user-select: none;<!-- [et_pb_line_break_holder] -->    position: relative;<!-- [et_pb_line_break_holder] -->    white-space: nowrap;<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    justify-content: center;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-btn:first-child { border-left: none; }<!-- [et_pb_line_break_holder] -->  .slb-tab-btn:hover { background: #e6f5f4; color: #009991; }<!-- [et_pb_line_break_holder] -->  .slb-tab-btn:focus { <!-- [et_pb_line_break_holder] -->    outline-offset: -2px;<!-- [et_pb_line_break_holder] -->    z-index: 1;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-btn.slb-active {<!-- [et_pb_line_break_holder] -->    background: #fff;<!-- [et_pb_line_break_holder] -->    color: #009991;<!-- [et_pb_line_break_holder] -->    border-top: 3px solid #009991;<!-- [et_pb_line_break_holder] -->    border-bottom: 3px solid #fff;<!-- [et_pb_line_break_holder] -->    border-left: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->    border-right: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-panel {<!-- [et_pb_line_break_holder] -->    display: none;<!-- [et_pb_line_break_holder] -->    border: 1px solid #ddd;<!-- [et_pb_line_break_holder] -->    border-top: none;<!-- [et_pb_line_break_holder] -->    background: #fff;<!-- [et_pb_line_break_holder] -->    padding: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-panel.slb-active { display: block; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-empty-panel {<!-- [et_pb_line_break_holder] -->    padding: 48px 32px;<!-- [et_pb_line_break_holder] -->    color: #aaa;<!-- [et_pb_line_break_holder] -->    font-style: italic;<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    text-align: center;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-main {<!-- [et_pb_line_break_holder] -->    padding: 24px 20px;<!-- [et_pb_line_break_holder] -->    max-width: 95%;<!-- [et_pb_line_break_holder] -->    margin: 0 auto;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 PARAMETER TABS \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-param-tabs {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->    margin-bottom: 16px;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-groups {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    gap: 32px;<!-- [et_pb_line_break_holder] -->    margin-bottom: 16px;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->    align-items: flex-start;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-group {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-direction: column;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-group-label {<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    font-weight: 700;<!-- [et_pb_line_break_holder] -->    color: #888;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.06em;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-tab-group-btns {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-param-tab {<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    padding: 8px 16px;<!-- [et_pb_line_break_holder] -->    min-height: 44px;<!-- [et_pb_line_break_holder] -->    min-width: 44px;<!-- [et_pb_line_break_holder] -->    border: 2px solid #009991;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    background: #fff;<!-- [et_pb_line_break_holder] -->    color: #009991;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    transition: background 0.15s, color 0.15s;<!-- [et_pb_line_break_holder] -->    user-select: none;<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->    display: inline-flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    justify-content: center;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-param-tab:hover { background: #e6f5f4; }<!-- [et_pb_line_break_holder] -->  .slb-param-tab:focus { <!-- [et_pb_line_break_holder] -->    outline: 2px solid #009991; <!-- [et_pb_line_break_holder] -->    outline-offset: 2px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-param-tab.slb-active { background: #009991; color: #fff; }<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  .slb-param-tab.slb-active:hover {<!-- [et_pb_line_break_holder] -->      background: #007f78;<!-- [et_pb_line_break_holder] -->      border: 2px solid #007f78;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* Gr\u00e5, oklickbar knapp f\u00f6r alternativ som inte finns f\u00f6r valt \u00e4mne\/gr\u00e4nsv\u00e4rde<!-- [et_pb_line_break_holder] -->     (ist\u00e4llet f\u00f6r att ta bort knappen helt) *\/<!-- [et_pb_line_break_holder] -->     .slb-param-tab.slb-unavailable {<!-- [et_pb_line_break_holder] -->    opacity: 0.35;<!-- [et_pb_line_break_holder] -->    cursor: not-allowed;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-param-tab.slb-unavailable:hover { background: #fff; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 KOMMUN INTROTEXT \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-kommun-intro {<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    line-height: 1.6;<!-- [et_pb_line_break_holder] -->    color: #333;<!-- [et_pb_line_break_holder] -->    background: #f5faf9;<!-- [et_pb_line_break_holder] -->    border: 1px solid #009991;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    overflow: hidden; \/* viktigt *\/<!-- [et_pb_line_break_holder] -->    padding: 0;       \/* flytta padding till inneh\u00e5llet *\/<!-- [et_pb_line_break_holder] -->    margin-bottom: 16px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-readmore-btn {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    width: 100%;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    justify-content: space-between;<!-- [et_pb_line_break_holder] -->    padding: 14px 18px;<!-- [et_pb_line_break_holder] -->    border: 0;<!-- [et_pb_line_break_holder] -->    border-bottom: 1px solid #00867f;<!-- [et_pb_line_break_holder] -->    background: #009991;<!-- [et_pb_line_break_holder] -->    color: #fff;<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    text-align: left;<!-- [et_pb_line_break_holder] -->    transition: background 0.15s;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-readmore-btn:hover {<!-- [et_pb_line_break_holder] -->    background: #007f78;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-readmore-btn::after {<!-- [et_pb_line_break_holder] -->    content: \"\u25be\";<!-- [et_pb_line_break_holder] -->    font-size: 18px;<!-- [et_pb_line_break_holder] -->    line-height: 1;<!-- [et_pb_line_break_holder] -->    transition: transform 0.5s ease;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-readmore-btn[aria-expanded=\"true\"]::after {<!-- [et_pb_line_break_holder] -->    transform: rotate(-180deg);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* Sj\u00e4lva textinneh\u00e5llet *\/<!-- [et_pb_line_break_holder] -->  .slb-intro-more {<!-- [et_pb_line_break_holder] -->    display: grid;<!-- [et_pb_line_break_holder] -->    grid-template-rows: 0fr;<!-- [et_pb_line_break_holder] -->    opacity: 0;<!-- [et_pb_line_break_holder] -->    transition:<!-- [et_pb_line_break_holder] -->      grid-template-rows 0.35s ease,<!-- [et_pb_line_break_holder] -->      opacity 0.25s ease;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-intro-more > div {<!-- [et_pb_line_break_holder] -->    overflow: hidden;<!-- [et_pb_line_break_holder] -->    padding: 0 18px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-intro-more.slb-open {<!-- [et_pb_line_break_holder] -->    grid-template-rows: 1fr;<!-- [et_pb_line_break_holder] -->    opacity: 1;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-intro-more.slb-open > div {<!-- [et_pb_line_break_holder] -->    padding: 16px 18px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 DRIFTINFORMATION \/ VARNINGSRUTA \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-station-notice {<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    line-height: 1.6;<!-- [et_pb_line_break_holder] -->    color: #663c00;<!-- [et_pb_line_break_holder] -->    background: #fff4e0;<!-- [et_pb_line_break_holder] -->    border: 1px solid #e8a33d;<!-- [et_pb_line_break_holder] -->    border-left: 4px solid #e8a33d;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    padding: 12px 16px;<!-- [et_pb_line_break_holder] -->    margin-bottom: 16px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 DATALUCKA \/ TEKNISKT FEL \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-notice-error {<!-- [et_pb_line_break_holder] -->    color: #7a1212;<!-- [et_pb_line_break_holder] -->    background: #fdeaea;<!-- [et_pb_line_break_holder] -->    border-color: #d64545;<!-- [et_pb_line_break_holder] -->    border-left-color: #d64545;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .station-list {<!-- [et_pb_line_break_holder] -->    list-style: none;<!-- [et_pb_line_break_holder] -->    padding-left: 0;<!-- [et_pb_line_break_holder] -->    margin: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .station-list li {<!-- [et_pb_line_break_holder] -->    display: grid;<!-- [et_pb_line_break_holder] -->    grid-template-columns: 1em 180px auto;<!-- [et_pb_line_break_holder] -->    margin-bottom: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .station-list li::before {<!-- [et_pb_line_break_holder] -->    content: \"\u2022\";<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 CHART AREA \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-chart-wrapper {<!-- [et_pb_line_break_holder] -->    background: #fff;<!-- [et_pb_line_break_holder] -->    padding: 8px 0 0 0;<!-- [et_pb_line_break_holder] -->    position: relative;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-chart-wrapper-min { min-height: 400px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-chart {<!-- [et_pb_line_break_holder] -->    width: 100%;<!-- [et_pb_line_break_holder] -->    height: 480px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 LOADING \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-loading-overlay {<!-- [et_pb_line_break_holder] -->    position: absolute;<!-- [et_pb_line_break_holder] -->    inset: 0;<!-- [et_pb_line_break_holder] -->    background: rgba(255,255,255,0.85);<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-direction: column;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    justify-content: center;<!-- [et_pb_line_break_holder] -->    gap: 14px;<!-- [et_pb_line_break_holder] -->    z-index: 10;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-spinner {<!-- [et_pb_line_break_holder] -->    width: 28px;<!-- [et_pb_line_break_holder] -->    height: 28px;<!-- [et_pb_line_break_holder] -->    border: 2px solid #ddd;<!-- [et_pb_line_break_holder] -->    border-top-color: #009991;<!-- [et_pb_line_break_holder] -->    border-radius: 50%;<!-- [et_pb_line_break_holder] -->    animation: slb-spin 0.7s linear infinite;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  @keyframes slb-spin { to { transform: rotate(360deg); } }<!-- [et_pb_line_break_holder] -->  .slb-loading-text { font-size: 14px; color: #888; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 STATION TYPE TOGGLES \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-station-controls {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    gap: 10px;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    margin-bottom: 20px;<!-- [et_pb_line_break_holder] -->    margin-top: 4px;<!-- [et_pb_line_break_holder] -->    border: none;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-controls-label { <!-- [et_pb_line_break_holder] -->    font-size: 12px; <!-- [et_pb_line_break_holder] -->    color: #888; <!-- [et_pb_line_break_holder] -->    margin-right: 4px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-station-toggle {<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    padding: 8px 14px;<!-- [et_pb_line_break_holder] -->    min-height: 44px;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    transition: all 0.15s;<!-- [et_pb_line_break_holder] -->    user-select: none;<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->    border: 2px solid #009991;<!-- [et_pb_line_break_holder] -->    background: #009991;<!-- [et_pb_line_break_holder] -->    color: #fff;<!-- [et_pb_line_break_holder] -->    font-weight: 500;<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-station-toggle:focus { <!-- [et_pb_line_break_holder] -->    outline: 2px solid #009991; <!-- [et_pb_line_break_holder] -->    outline-offset: 2px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-station-toggle .slb-dot {<!-- [et_pb_line_break_holder] -->    width: 8px; <!-- [et_pb_line_break_holder] -->    height: 8px;<!-- [et_pb_line_break_holder] -->    border-radius: 50%;<!-- [et_pb_line_break_holder] -->    background: #fff;<!-- [et_pb_line_break_holder] -->    flex-shrink: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-station-toggle.slb-inactive { background: #fff; border-color: #009991; color: #009991; }<!-- [et_pb_line_break_holder] -->  .slb-station-toggle.slb-inactive .slb-dot { background: #009991; }<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  .slb-station-toggle.slb-unavailable {<!-- [et_pb_line_break_holder] -->    opacity: 0.35;<!-- [et_pb_line_break_holder] -->    cursor: not-allowed;<!-- [et_pb_line_break_holder] -->    pointer-events: none;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 STATUS BAR \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  .slb-status-bar {<!-- [et_pb_line_break_holder] -->    margin-top: 12px;<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    color: #999;<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    gap: 20px;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-status-bar span { display: flex; align-items: center; gap: 6px; }<!-- [et_pb_line_break_holder] -->  .slb-status-dot { width: 6px; height: 6px; border-radius: 50%; background: #009991; }<!-- [et_pb_line_break_holder] -->  .slb-status-dot.slb-error { background: #E5006C; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->     H\u00c4MTA DATA \u2014 STILAR<!-- [et_pb_line_break_holder] -->     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-main {<!-- [et_pb_line_break_holder] -->    padding: 24px 20px;<!-- [et_pb_line_break_holder] -->    max-width: 75%;<!-- [et_pb_line_break_holder] -->    margin: 0 auto;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-main h2 {<!-- [et_pb_line_break_holder] -->    font-size: 20px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    color: #333;<!-- [et_pb_line_break_holder] -->    margin-bottom: 24px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-section {<!-- [et_pb_line_break_holder] -->    margin-bottom: 24px;<!-- [et_pb_line_break_holder] -->    border: none;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-section-label {<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    color: #888;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.06em;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase;<!-- [et_pb_line_break_holder] -->    margin-bottom: 10px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-select {<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    padding: 10px 12px;<!-- [et_pb_line_break_holder] -->    min-height: 44px;<!-- [et_pb_line_break_holder] -->    border: 1.5px solid #ccc;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    background: #fff;<!-- [et_pb_line_break_holder] -->    color: #222;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    outline: none;<!-- [et_pb_line_break_holder] -->    transition: border-color 0.15s;<!-- [et_pb_line_break_holder] -->    min-width: 220px;<!-- [et_pb_line_break_holder] -->    width: 100%;<!-- [et_pb_line_break_holder] -->    max-width: 400px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-select:focus { <!-- [et_pb_line_break_holder] -->    border-color: #009991;<!-- [et_pb_line_break_holder] -->    outline: 2px solid #009991;<!-- [et_pb_line_break_holder] -->    outline-offset: 2px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2500\u2500 KARTA: FLYTANDE KOMMUN-KONTROLL OVANP\u00c5 ARCGIS-IFRAMEN \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->  \/* Utformad som en Esri\/Calcite-widget (skarp kant, tunn ram, skugga)<!-- [et_pb_line_break_holder] -->     ist\u00e4llet f\u00f6r dashboardens vanliga runda teal-stil, s\u00e5 den sm\u00e4lter<!-- [et_pb_line_break_holder] -->     in ovanp\u00e5 kartan ist\u00e4llet f\u00f6r att se ut som en vit meny-rad. *\/<!-- [et_pb_line_break_holder] -->  .slb-karta-map-wrap {<!-- [et_pb_line_break_holder] -->    position: relative;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-karta-kommun-control {<!-- [et_pb_line_break_holder] -->    position: absolute;<!-- [et_pb_line_break_holder] -->    top: 12px;<!-- [et_pb_line_break_holder] -->    left: 12px;<!-- [et_pb_line_break_holder] -->    z-index: 5;<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-direction: column;<!-- [et_pb_line_break_holder] -->    gap: 4px;<!-- [et_pb_line_break_holder] -->    padding: 8px 10px;<!-- [et_pb_line_break_holder] -->    background: rgba(255, 255, 255, 0.97);<!-- [et_pb_line_break_holder] -->    border: 1px solid rgba(0, 0, 0, 0.12);<!-- [et_pb_line_break_holder] -->    border-radius: 3px;<!-- [et_pb_line_break_holder] -->    box-shadow: 0 1px 4px rgba(0, 0, 0, 0.35);<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-karta-kommun-control label {<!-- [et_pb_line_break_holder] -->    font-size: 11px;<!-- [et_pb_line_break_holder] -->    font-weight: 700;<!-- [et_pb_line_break_holder] -->    color: #6e6e6e;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.03em;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-karta-kommun-select {<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    padding: 6px 8px;<!-- [et_pb_line_break_holder] -->    min-height: 32px;<!-- [et_pb_line_break_holder] -->    min-width: 180px;<!-- [et_pb_line_break_holder] -->    border: 1px solid #b6b6b6;<!-- [et_pb_line_break_holder] -->    border-radius: 2px;<!-- [et_pb_line_break_holder] -->    background: #fff;<!-- [et_pb_line_break_holder] -->    color: #222;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    outline: none;<!-- [et_pb_line_break_holder] -->    transition: border-color 0.15s;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-karta-kommun-select:focus {<!-- [et_pb_line_break_holder] -->    border-color: #009991;<!-- [et_pb_line_break_holder] -->    outline: 2px solid #009991;<!-- [et_pb_line_break_holder] -->    outline-offset: 1px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-group {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn {<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    padding: 8px 16px;<!-- [et_pb_line_break_holder] -->    min-height: 44px;<!-- [et_pb_line_break_holder] -->    border: 2px solid #009991;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    background: #fff;<!-- [et_pb_line_break_holder] -->    color: #009991;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    transition: background 0.15s, color 0.15s;<!-- [et_pb_line_break_holder] -->    user-select: none;<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn:hover { background: #e6f5f4; }<!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn:focus { <!-- [et_pb_line_break_holder] -->    outline: 2px solid #009991; <!-- [et_pb_line_break_holder] -->    outline-offset: 2px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn.slb-dl-active { background: #009991; color: #fff; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn.slb-dl-disabled {<!-- [et_pb_line_break_holder] -->    border-color: #ddd;<!-- [et_pb_line_break_holder] -->    color: #bbb;<!-- [et_pb_line_break_holder] -->    cursor: not-allowed;<!-- [et_pb_line_break_holder] -->    background: #f9f9f9;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn.slb-dl-inactive {<!-- [et_pb_line_break_holder] -->    border: 2px solid #5e5e5e;<!-- [et_pb_line_break_holder] -->    color: #5e5e5e;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn.slb-dl-inactive.slb-dl-active {<!-- [et_pb_line_break_holder] -->    background: #5e5e5e;<!-- [et_pb_line_break_holder] -->    color: #fff;<!-- [et_pb_line_break_holder] -->    border-color: #5e5e5e;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn.slb-dl-inactive:hover {<!-- [et_pb_line_break_holder] -->    background: #e8e8e8;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  .slb-dl-toggle-btn.slb-dl-inactive.slb-dl-active:hover {<!-- [et_pb_line_break_holder] -->    background: #5e5e5e;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-legend {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    gap: 16px;<!-- [et_pb_line_break_holder] -->    margin-top: 6px;<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    color: #888;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-dl-legend-item {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    gap: 5px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-dl-legend-swatch {<!-- [et_pb_line_break_holder] -->    width: 14px;<!-- [et_pb_line_break_holder] -->    height: 14px;<!-- [et_pb_line_break_holder] -->    border-radius: 3px;<!-- [et_pb_line_break_holder] -->    display: inline-block;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-dl-legend-active   { border: 2px solid #009991; }<!-- [et_pb_line_break_holder] -->  .slb-dl-legend-inactive { border: 2px solid #5e5e5e; background: transparent; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-tooltip {<!-- [et_pb_line_break_holder] -->    position: fixed;<!-- [et_pb_line_break_holder] -->    background: #1e1e1e;<!-- [et_pb_line_break_holder] -->    color: #eee;<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    padding: 6px 10px;<!-- [et_pb_line_break_holder] -->    border-radius: 5px;<!-- [et_pb_line_break_holder] -->    white-space: pre;       \/* bevarar radbrytningarna fr\u00e5n \\n *\/<!-- [et_pb_line_break_holder] -->    pointer-events: none;<!-- [et_pb_line_break_holder] -->    opacity: 0;<!-- [et_pb_line_break_holder] -->    transition: opacity 0.15s ease;<!-- [et_pb_line_break_holder] -->    z-index: 9999;<!-- [et_pb_line_break_holder] -->    max-width: 280px;<!-- [et_pb_line_break_holder] -->    white-space: pre-wrap;<!-- [et_pb_line_break_holder] -->    box-shadow: 0 2px 8px rgba(0,0,0,0.35);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-dl-tooltip.slb-dl-tooltip-visible {<!-- [et_pb_line_break_holder] -->    opacity: 1;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-date-row {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    gap: 16px;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-date-field {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-direction: column;<!-- [et_pb_line_break_holder] -->    gap: 6px;<!-- [et_pb_line_break_holder] -->    flex: 1;<!-- [et_pb_line_break_holder] -->    min-width: 180px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-date-field label {<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    color: #888;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-date-input {<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    padding: 10px 12px;<!-- [et_pb_line_break_holder] -->    min-height: 44px;<!-- [et_pb_line_break_holder] -->    border: 1.5px solid #ccc;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    color: #222;<!-- [et_pb_line_break_holder] -->    outline: none;<!-- [et_pb_line_break_holder] -->    transition: border-color 0.15s;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-date-input:focus { <!-- [et_pb_line_break_holder] -->    border-color: #009991;<!-- [et_pb_line_break_holder] -->    outline: 2px solid #009991;<!-- [et_pb_line_break_holder] -->    outline-offset: 2px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-download-btn {<!-- [et_pb_line_break_holder] -->    display: inline-flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    justify-content: center;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    padding: 12px 28px;<!-- [et_pb_line_break_holder] -->    min-height: 44px;<!-- [et_pb_line_break_holder] -->    border: none;<!-- [et_pb_line_break_holder] -->    border-radius: 4px;<!-- [et_pb_line_break_holder] -->    background: #009991;<!-- [et_pb_line_break_holder] -->    color: #fff;<!-- [et_pb_line_break_holder] -->    cursor: pointer;<!-- [et_pb_line_break_holder] -->    transition: background 0.15s;<!-- [et_pb_line_break_holder] -->    margin-top: 8px;<!-- [et_pb_line_break_holder] -->    font-family: Arial, Helvetica, sans-serif;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-download-btn:hover { background: #007a73; }<!-- [et_pb_line_break_holder] -->  .slb-dl-download-btn:focus { <!-- [et_pb_line_break_holder] -->    outline: 2px solid #009991; <!-- [et_pb_line_break_holder] -->    outline-offset: 2px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  .slb-dl-download-btn:disabled { background: #ccc; cursor: not-allowed; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-status-bar {<!-- [et_pb_line_break_holder] -->    margin-top: 16px;<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    color: #999;<!-- [et_pb_line_break_holder] -->    min-height: 20px;<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    align-items: flex-start;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-spinner {<!-- [et_pb_line_break_holder] -->    width: 14px;<!-- [et_pb_line_break_holder] -->    height: 14px;<!-- [et_pb_line_break_holder] -->    border: 2px solid #ddd;<!-- [et_pb_line_break_holder] -->    border-top-color: #009991;<!-- [et_pb_line_break_holder] -->    border-radius: 50%;<!-- [et_pb_line_break_holder] -->    animation: slb-spin 0.7s linear infinite;<!-- [et_pb_line_break_holder] -->    flex-shrink: 0;<!-- [et_pb_line_break_holder] -->    display: none;<!-- [et_pb_line_break_holder] -->    margin-top: 2px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-spinner.slb-dl-visible { display: block; }<!-- [et_pb_line_break_holder] -->  .slb-dl-status-error { color: #E5006C; }<!-- [et_pb_line_break_holder] -->  .slb-dl-status-warn { color: #E29900; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-dl-divider {<!-- [et_pb_line_break_holder] -->    border: none;<!-- [et_pb_line_break_holder] -->    border-top: 1px solid #eee;<!-- [et_pb_line_break_holder] -->    margin: 28px 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->   MKN \u2014 FILTERRAD<!-- [et_pb_line_break_holder] -->   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->   .mkn-filter-row {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->    gap: 24px;<!-- [et_pb_line_break_holder] -->    margin-bottom: 20px;<!-- [et_pb_line_break_holder] -->    align-items: flex-end;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .mkn-filter-group {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-direction: column;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .mkn-filter-label {<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    font-weight: 700;<!-- [et_pb_line_break_holder] -->    color: #888;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.06em;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .mkn-filter-btns {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->    gap: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .mkn-filter-group.mkn-hidden {<!-- [et_pb_line_break_holder] -->    display: none;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  .mkn-filter-group.mkn-invisible {<!-- [et_pb_line_break_holder] -->    visibility: hidden;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->    LUFTKVALITET \u2014 SAMMANFATTNING<!-- [et_pb_line_break_holder] -->    \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->    .slb-summary-section {<!-- [et_pb_line_break_holder] -->    margin-top: 16px;<!-- [et_pb_line_break_holder] -->    margin-bottom: 8px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-summary-header {<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    font-weight: 700;<!-- [et_pb_line_break_holder] -->    color: #333;<!-- [et_pb_line_break_holder] -->    margin-bottom: 10px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-summary-grid {<!-- [et_pb_line_break_holder] -->    display: grid;<!-- [et_pb_line_break_holder] -->    grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));<!-- [et_pb_line_break_holder] -->    gap: 4px 24px;<!-- [et_pb_line_break_holder] -->    margin-bottom: 14px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-summary-item {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    gap: 7px;<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    color: #333;<!-- [et_pb_line_break_holder] -->    white-space: nowrap;<!-- [et_pb_line_break_holder] -->    overflow: hidden;<!-- [et_pb_line_break_holder] -->    text-overflow: ellipsis;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-summary-dot {<!-- [et_pb_line_break_holder] -->    width: 10px;<!-- [et_pb_line_break_holder] -->    height: 10px;<!-- [et_pb_line_break_holder] -->    border-radius: 50px;<!-- [et_pb_line_break_holder] -->    flex-shrink: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-summary-name {<!-- [et_pb_line_break_holder] -->    overflow: hidden;<!-- [et_pb_line_break_holder] -->    text-overflow: ellipsis;<!-- [et_pb_line_break_holder] -->    flex: 1;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-summary-value {<!-- [et_pb_line_break_holder] -->    font-weight: 600;<!-- [et_pb_line_break_holder] -->    flex-shrink: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-legend-row {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->    gap: 10px;<!-- [et_pb_line_break_holder] -->    margin-bottom: 16px;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-legend-item {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    gap: 5px;<!-- [et_pb_line_break_holder] -->    font-size: 13px;<!-- [et_pb_line_break_holder] -->    color: #555;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-legend-dot {<!-- [et_pb_line_break_holder] -->    width: 10px;<!-- [et_pb_line_break_holder] -->    height: 10px;<!-- [et_pb_line_break_holder] -->    border-radius: 50px;<!-- [et_pb_line_break_holder] -->    flex-shrink: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-section {<!-- [et_pb_line_break_holder] -->    border-top: 4px solid #dddddd;<!-- [et_pb_line_break_holder] -->    padding-top: 14px;<!-- [et_pb_line_break_holder] -->    margin-top: 40px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-section2 {<!-- [et_pb_line_break_holder] -->    border-top: 4px solid #dddddd;<!-- [et_pb_line_break_holder] -->    padding-top: 14px;<!-- [et_pb_line_break_holder] -->    margin-top: 40px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-header,<!-- [et_pb_line_break_holder] -->  .slb-prognos-header2 {<!-- [et_pb_line_break_holder] -->    font-size: 14px;<!-- [et_pb_line_break_holder] -->    font-weight: 700;<!-- [et_pb_line_break_holder] -->    color: #333;<!-- [et_pb_line_break_holder] -->    margin-bottom: 10px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-row {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    gap: 32px;<!-- [et_pb_line_break_holder] -->    flex-wrap: wrap;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-col {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    flex-direction: column;<!-- [et_pb_line_break_holder] -->    gap: 4px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-day-label {<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    font-weight: 700;<!-- [et_pb_line_break_holder] -->    color: #888;<!-- [et_pb_line_break_holder] -->    letter-spacing: 0.04em;<!-- [et_pb_line_break_holder] -->    text-transform: uppercase;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-value {<!-- [et_pb_line_break_holder] -->    display: flex;<!-- [et_pb_line_break_holder] -->    align-items: center;<!-- [et_pb_line_break_holder] -->    gap: 7px;<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    color: #333;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-dot {<!-- [et_pb_line_break_holder] -->    width: 10px;<!-- [et_pb_line_break_holder] -->    height: 10px;<!-- [et_pb_line_break_holder] -->    border-radius: 50%;<!-- [et_pb_line_break_holder] -->    flex-shrink: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-na {<!-- [et_pb_line_break_holder] -->    font-size: 12px;<!-- [et_pb_line_break_holder] -->    color: #bbb;<!-- [et_pb_line_break_holder] -->    font-style: italic;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->     Meteorologi<!-- [et_pb_line_break_holder] -->     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->  .slb-meteo-main {<!-- [et_pb_line_break_holder] -->    padding: 24px 20px;<!-- [et_pb_line_break_holder] -->    max-width: 95%;<!-- [et_pb_line_break_holder] -->    margin: 0 auto;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->     MOBILANPASSNING  \u2264600px<!-- [et_pb_line_break_holder] -->     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->  @media (max-width: 600px) {<!-- [et_pb_line_break_holder] -->    .slb-tabs-wrapper { font-size: 14px; }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-tab-btn { <!-- [et_pb_line_break_holder] -->      font-size: 14px; <!-- [et_pb_line_break_holder] -->      padding: 12px 10px; <!-- [et_pb_line_break_holder] -->      min-height: 44px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-main { padding: 16px 12px; }<!-- [et_pb_line_break_holder] -->    .slb-dl-main { padding: 16px 12px; }<!-- [et_pb_line_break_holder] -->    .slb-meteo-main { padding: 16px 12px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    .slb-tab-groups { gap: 16px; margin-bottom: 12px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    .slb-param-tab {<!-- [et_pb_line_break_holder] -->      font-size: 14px;<!-- [et_pb_line_break_holder] -->      padding: 10px 14px;<!-- [et_pb_line_break_holder] -->      min-height: 44px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    .slb-chart { height: 400px; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    .slb-station-toggle { <!-- [et_pb_line_break_holder] -->      font-size: 13px; <!-- [et_pb_line_break_holder] -->      padding: 10px 12px; <!-- [et_pb_line_break_holder] -->      min-height: 44px; <!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-controls-label { <!-- [et_pb_line_break_holder] -->      width: 100%; <!-- [et_pb_line_break_holder] -->      font-size: 13px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    .slb-dl-date-row { <!-- [et_pb_line_break_holder] -->      flex-direction: column; <!-- [et_pb_line_break_holder] -->      align-items: stretch; <!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-dl-date-field {<!-- [et_pb_line_break_holder] -->      min-width: 100%;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .mkn-filter-row { gap: 14px; }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-summary-grid {<!-- [et_pb_line_break_holder] -->      grid-template-columns: 1fr;<!-- [et_pb_line_break_holder] -->      gap: 6px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-summary-item {<!-- [et_pb_line_break_holder] -->      font-size: 13px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-summary-header,<!-- [et_pb_line_break_holder] -->    .slb-prognos-header,<!-- [et_pb_line_break_holder] -->    .slb-prognos-header2 {<!-- [et_pb_line_break_holder] -->      font-size: 15px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-dl-main h2 {<!-- [et_pb_line_break_holder] -->      font-size: 18px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-dl-select {<!-- [et_pb_line_break_holder] -->      max-width: 100%;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    .slb-dl-toggle-btn,<!-- [et_pb_line_break_holder] -->    .slb-dl-download-btn {<!-- [et_pb_line_break_holder] -->      font-size: 14px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    .slb-karta-kommun-control {<!-- [et_pb_line_break_holder] -->      top: 8px;<!-- [et_pb_line_break_holder] -->      left: 8px;<!-- [et_pb_line_break_holder] -->      right: 8px;<!-- [et_pb_line_break_holder] -->      padding: 6px 8px;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    .slb-karta-kommun-select {<!-- [et_pb_line_break_holder] -->      min-width: 0;<!-- [et_pb_line_break_holder] -->      width: 100%;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  @media (min-width: 601px) and (max-width: 900px) {<!-- [et_pb_line_break_holder] -->    .slb-main { padding: 20px 16px; }<!-- [et_pb_line_break_holder] -->    .slb-dl-main { padding: 20px 16px; }<!-- [et_pb_line_break_holder] -->    .slb-meteo-main { padding: 20px 16px; }<!-- [et_pb_line_break_holder] -->    .slb-chart { height: 450px; }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* Tablet landscape och desktop *\/<!-- [et_pb_line_break_holder] -->  @media (min-width: 901px) {<!-- [et_pb_line_break_holder] -->    .slb-summary-grid {<!-- [et_pb_line_break_holder] -->      grid-template-columns: repeat(3, 1fr);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/* Skip link f\u00f6r tangentbordsnavigation *\/<!-- [et_pb_line_break_holder] -->  .skip-link {<!-- [et_pb_line_break_holder] -->    position: absolute;<!-- [et_pb_line_break_holder] -->    top: -40px;<!-- [et_pb_line_break_holder] -->    left: 0;<!-- [et_pb_line_break_holder] -->    background: #009991;<!-- [et_pb_line_break_holder] -->    color: white;<!-- [et_pb_line_break_holder] -->    padding: 8px;<!-- [et_pb_line_break_holder] -->    text-decoration: none;<!-- [et_pb_line_break_holder] -->    z-index: 100;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  .skip-link:focus {<!-- [et_pb_line_break_holder] -->    top: 0;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><\/style>\n<p><!-- [et_pb_line_break_holder] --><\/head><!-- [et_pb_line_break_holder] --><body><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/p>\n<div class=\"slb-tabs-wrapper\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- \u2500\u2500 FLIKNAVIGATION \u2500\u2500 --><!-- [et_pb_line_break_holder] -->  <\/p>\n<nav class=\"slb-tab-nav\" role=\"tablist\" aria-label=\"Huvudnavigation\"><!-- [et_pb_line_break_holder] -->    <button class=\"slb-tab-btn slb-active\" data-tab=\"slb-panel-luft\" role=\"tab\" aria-selected=\"true\" aria-controls=\"slb-panel-luft\">Luftkvalitet<\/button><!-- [et_pb_line_break_holder] -->    <button class=\"slb-tab-btn\" data-tab=\"slb-panel-mkn\" role=\"tab\" aria-selected=\"false\" aria-controls=\"slb-panel-mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/button><!-- [et_pb_line_break_holder] -->    <button class=\"slb-tab-btn\" data-tab=\"slb-panel-meteo\" role=\"tab\" aria-selected=\"false\" aria-controls=\"slb-panel-meteo\">Meteorologi<\/button><!-- [et_pb_line_break_holder] -->    <button class=\"slb-tab-btn\" data-tab=\"slb-panel-envirosuite\" role=\"tab\" aria-selected=\"false\" aria-controls=\"slb-panel-envirosuite\">Buller<\/button><!-- [et_pb_line_break_holder] -->    <button class=\"slb-tab-btn\" data-tab=\"slb-panel-karta\" role=\"tab\" aria-selected=\"false\" aria-controls=\"slb-panel-karta\">V\u00e5ra m\u00e4tstationer<\/button><!-- [et_pb_line_break_holder] -->    <button class=\"slb-tab-btn\" data-tab=\"slb-panel-data\" role=\"tab\" aria-selected=\"false\" aria-controls=\"slb-panel-data\">H\u00e4mta data<\/button><!-- [et_pb_line_break_holder] -->  <\/nav>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->       PANEL 1 \u2014 LUFTKVALITET<!-- [et_pb_line_break_holder] -->       \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 &#8211;><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"slb-tab-panel slb-active\" id=\"slb-panel-luft\" role=\"tabpanel\" aria-labelledby=\"tab-luft\"><!-- [et_pb_line_break_holder] -->    <main class=\"slb-main\" id=\"main-content\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<h1 style=\"font-size: 20px;\"><!\u2013- [et_pb_br_holder] -\u2013>M\u00e4tv\u00e4rden<\/h1>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 KOMMUN-DROPDOWN \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-tab-groups\" style=\"margin-bottom:12px; padding-top:12px;\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-tab-group\"><!-- [et_pb_line_break_holder] -->          <label for=\"slb-luft-kommunSelect\" class=\"slb-tab-group-label\">Kommun<\/label><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-tab-group-btns\"><!-- [et_pb_line_break_holder] -->            <select class=\"slb-dl-select\" id=\"slb-luft-kommunSelect\" aria-label=\"V\u00e4lj kommun\"><!-- [et_pb_line_break_holder] --><option value=\"\">Alla kommuner<\/option><!-- [et_pb_line_break_holder] -->            <\/select><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 API-FEL \/ SERVICE UNAVAILABLE \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-station-notice slb-notice-error\" id=\"slb-luft-api-error-notice\" style=\"display:none;\" role=\"alert\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 DATALUCKA \/ TEKNISKT FEL (visas om ingen station har data senaste 6 timmarna) \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-station-notice slb-notice-error\" id=\"slb-luft-datagap-notice\" style=\"display:none;\" role=\"alert\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 DRIFTINFORMATION (visas endast om KOMMUN_NOTICE har text f\u00f6r vald kommun) \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-station-notice\" id=\"slb-luft-kommun-notice\" style=\"display:none;\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 KOMMUN-INTROTEXT \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-kommun-intro\" id=\"slb-luft-kommun-intro\" style=\"display:none;\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-param-tabs\" id=\"slb-luft-paramTabs\" role=\"group\" aria-label=\"V\u00e4lj \u00e4mne\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"mkn-filter-group\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-group\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"mkn-filter-label\">\u00c4mne<\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"mkn-filter-btns\" id=\"mkn-amne-btns\"><!-- [et_pb_line_break_holder] -->              <button class=\"slb-param-tab slb-active\" data-param=\"PM10\" aria-pressed=\"true\">PM10<\/button><!-- [et_pb_line_break_holder] -->              <button class=\"slb-param-tab\" data-param=\"PM2.5\" aria-pressed=\"false\">PM2.5<\/button><!-- [et_pb_line_break_holder] -->              <button class=\"slb-param-tab\" data-param=\"NO2\" aria-pressed=\"false\">NO\u2082<\/button><!-- [et_pb_line_break_holder] -->              <button class=\"slb-param-tab\" data-param=\"O3\" aria-pressed=\"false\">O\u2083<\/button><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"mkn-filter-btns\" id=\"slb-luft-view-toggle\" role=\"group\" aria-label=\"V\u00e4lj vy\" style=\"margin-bottom:12px;\"><!-- [et_pb_line_break_holder] -->        <button class=\"slb-param-tab slb-active\" data-view=\"realtid\" aria-pressed=\"true\">Luften idag<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"slb-param-tab\" data-view=\"14dagar\" aria-pressed=\"false\">Dygnsmedelv\u00e4rden (14 dagar)<\/button><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-chart-wrapper slb-chart-wrapper-min\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-chart\" id=\"slb-chart-luft\" role=\"img\" aria-label=\"Graf \u00f6ver luftkvalitet\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-loading-overlay\" id=\"slb-luft-loading\" aria-live=\"polite\" aria-busy=\"true\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-spinner\" role=\"status\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-loading-text\">H\u00e4mtar data&#8230;<\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<fieldset class=\"slb-station-controls\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<legend class=\"slb-controls-label\">STATIONSTYP<\/legend>\n<p><!-- [et_pb_line_break_holder] -->        <button class=\"slb-station-toggle slb-active\" data-panel=\"luft\" data-type=\"Gaturum\" aria-pressed=\"true\"><span class=\"slb-dot\" aria-hidden=\"true\"><\/span>Gaturum<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"slb-station-toggle slb-active\" data-panel=\"luft\" data-type=\"\u00d6ppen v\u00e4g\" aria-pressed=\"true\"><span class=\"slb-dot\" aria-hidden=\"true\"><\/span>\u00d6ppen v\u00e4g<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"slb-station-toggle slb-active\" data-panel=\"luft\" data-type=\"Regional bakgrund\" aria-pressed=\"true\"><span class=\"slb-dot\" aria-hidden=\"true\"><\/span>Regional bakgrund<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"slb-station-toggle slb-active\" data-panel=\"luft\" data-type=\"Urban bakgrund\" aria-pressed=\"true\"><span class=\"slb-dot\" aria-hidden=\"true\"><\/span>Urban bakgrund<\/button><!-- [et_pb_line_break_holder] -->      <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-status-bar\" id=\"slb-luft-status\" role=\"status\" aria-live=\"polite\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 SAMMANFATTNING & PROGNOS \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<section class=\"slb-summary-section\" id=\"slb-luft-summary\" style=\"display:none;\" aria-label=\"Sammanfattning av luftkvalitet\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-prognos-section2\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<h1 style=\"font-size: 20px;\"><!\u2013- [et_pb_br_holder] -\u2013>Medelv\u00e4rden<\/h1>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-btns\" id=\"slb-luft-dag-toggle\" role=\"group\" aria-label=\"V\u00e4lj dygn\" style=\"margin-bottom:12px;padding-top:12px;\"><!-- [et_pb_line_break_holder] -->            <button class=\"slb-param-tab slb-active\" data-dag=\"idag\" aria-pressed=\"true\">Idag (sedan midnatt)<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"slb-param-tab\" data-dag=\"ig\u00e5r\" aria-pressed=\"false\">Ig\u00e5r (dygnsmedelv\u00e4rde)<\/button><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<h2 class=\"slb-summary-header\" id=\"slb-luft-summary-header\"><!-- [et_pb_line_break_holder] -->            Medelv\u00e4rden idag sedan midnatt<!-- [et_pb_line_break_holder] -->          <\/h2>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->          <!-- Teckenf\u00f6rklaring (d\u00f6ljs f\u00f6r O3) --><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-legend-row\" id=\"slb-luft-legend\" role=\"list\" aria-label=\"Teckenf\u00f6rklaring\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->          <!-- Stationslista --><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-summary-grid\" id=\"slb-luft-summary-grid\" role=\"list\" aria-label=\"M\u00e4tningar per station\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        <!-- Prognos-skal --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-prognos-section\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<h1 class=\"slb-prognos-header\" style=\"font-size: 20px\"><!\u2013- [et_pb_br_holder] -\u2013>Prognos<\/h1>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<h2 class=\"slb-prognos-header2\" style=\"font-size: 15px\">Stockholms innerstadsgator<\/h2>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-prognos-row\" style=\"margin-bottom:12px;padding-top:12px;\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"slb-prognos-col\"><!-- [et_pb_line_break_holder] -->              <\/p>\n<div class=\"slb-prognos-day-label\">Idag<\/div>\n<p><!-- [et_pb_line_break_holder] -->              <\/p>\n<div class=\"slb-prognos-value\" id=\"slb-prognos-idag\"><!-- [et_pb_line_break_holder] -->                <span class=\"slb-prognos-na\">Ej tillg\u00e4nglig<\/span><!-- [et_pb_line_break_holder] -->              <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"slb-prognos-col\"><!-- [et_pb_line_break_holder] -->              <\/p>\n<div class=\"slb-prognos-day-label\">I morgon<\/div>\n<p><!-- [et_pb_line_break_holder] -->              <\/p>\n<div class=\"slb-prognos-value\" id=\"slb-prognos-imorgon\"><!-- [et_pb_line_break_holder] -->                <span class=\"slb-prognos-na\">Ej tillg\u00e4nglig<\/span><!-- [et_pb_line_break_holder] -->              <\/div>\n<p><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/section>\n<p><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->       PANEL 2 \u2014 MKN<!-- [et_pb_line_break_holder] -->       \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 &#8211;><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"slb-tab-panel\" id=\"slb-panel-mkn\" role=\"tabpanel\" aria-labelledby=\"tab-mkn\"><!-- [et_pb_line_break_holder] -->    <main class=\"slb-main\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-tab-groups\" style=\"margin-bottom:12px;\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-tab-group\"><!-- [et_pb_line_break_holder] -->          <label for=\"slb-mkn-kommunSelect\" class=\"slb-tab-group-label\">Kommun<\/label><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-tab-group-btns\"><!-- [et_pb_line_break_holder] -->            <select class=\"slb-dl-select\" id=\"slb-mkn-kommunSelect\" aria-label=\"V\u00e4lj kommun\"><!-- [et_pb_line_break_holder] --><option value=\"\">Alla kommuner<\/option><!-- [et_pb_line_break_holder] -->            <\/select><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 API-FEL \/ SERVICE UNAVAILABLE \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-station-notice slb-notice-error\" id=\"slb-mkn-api-error-notice\" style=\"display:none;\" role=\"alert\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 DRIFTINFORMATION (visas endast om KOMMUN_NOTICE har text f\u00f6r vald kommun) \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-station-notice\" id=\"slb-mkn-kommun-notice\" style=\"display:none;\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"mkn-filter-row\"><!-- [et_pb_line_break_holder] -->        <!-- 1. \u00c4mne --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"mkn-filter-group\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-label\">\u00c4mne<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-btns\" id=\"mkn-amne-btns\" role=\"group\" aria-label=\"V\u00e4lj \u00e4mne\"><!-- [et_pb_line_break_holder] -->            <button class=\"slb-param-tab slb-active\" data-amne=\"PM10\" aria-pressed=\"true\">PM10<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"slb-param-tab\" data-amne=\"PM2.5\" aria-pressed=\"false\">PM2.5<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"slb-param-tab\" data-amne=\"NO2\" aria-pressed=\"false\">NO\u2082<\/button><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"mkn-filter-row\"><!-- [et_pb_line_break_holder] -->        <!-- 2. Gr\u00e4nsv\u00e4rde --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"mkn-filter-group\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-label\">Gr\u00e4nsv\u00e4rde<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-btns\" id=\"mkn-gransvarde-btns\" role=\"group\" aria-label=\"V\u00e4lj gr\u00e4nsv\u00e4rde\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <!-- [et_pb_line_break_holder] -->        <!-- 3. Tidsuppl\u00f6sning (visas bara f\u00f6r NO2 + Befintlig MKN) --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"mkn-filter-group\" id=\"mkn-uppl\u00f6sning-group\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-label\">Tidsuppl\u00f6sning<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-btns\" id=\"mkn-uppl\u00f6sning-btns\" role=\"group\" aria-label=\"V\u00e4lj tidsuppl\u00f6sning\"><!-- [et_pb_line_break_holder] -->            <button class=\"slb-param-tab slb-active\" data-res=\"dygn\" aria-pressed=\"true\">Dygn<\/button><!-- [et_pb_line_break_holder] -->            <button class=\"slb-param-tab\" data-res=\"timmar\" aria-pressed=\"false\">Timmar<\/button><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-dl-tooltip\" id=\"slb-mkn-tooltip\" role=\"tooltip\" aria-hidden=\"true\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"mkn-filter-row\"><!-- [et_pb_line_break_holder] -->        <!-- 4. \u00c5r --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"mkn-filter-group\" id=\"mkn-ar-group\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-label\" id=\"mkn-ar-label\">\u00c5r<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"mkn-filter-btns\" id=\"mkn-ar-btns\" role=\"group\" aria-label=\"V\u00e4lj \u00e5r\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-chart-wrapper\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-chart\" id=\"slb-chart-mkn\" role=\"img\" aria-label=\"Graf \u00f6ver milj\u00f6kvalitetsnormer\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-loading-overlay\" id=\"slb-mkn-loading\" aria-live=\"polite\" aria-busy=\"true\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-spinner\" role=\"status\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-loading-text\">H\u00e4mtar data&#8230;<\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<fieldset class=\"slb-station-controls\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<legend class=\"slb-controls-label\">STATIONSTYP<\/legend>\n<p><!-- [et_pb_line_break_holder] -->        <button class=\"slb-station-toggle slb-active\" data-panel=\"mkn\" data-type=\"Gaturum\" aria-pressed=\"true\"><span class=\"slb-dot\" aria-hidden=\"true\"><\/span>Gaturum<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"slb-station-toggle slb-active\" data-panel=\"mkn\" data-type=\"\u00d6ppen v\u00e4g\" aria-pressed=\"true\"><span class=\"slb-dot\" aria-hidden=\"true\"><\/span>\u00d6ppen v\u00e4g<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"slb-station-toggle slb-active\" data-panel=\"mkn\" data-type=\"Regional bakgrund\" aria-pressed=\"true\"><span class=\"slb-dot\" aria-hidden=\"true\"><\/span>Regional bakgrund<\/button><!-- [et_pb_line_break_holder] -->        <button class=\"slb-station-toggle slb-active\" data-panel=\"mkn\" data-type=\"Urban bakgrund\" aria-pressed=\"true\"><span class=\"slb-dot\" aria-hidden=\"true\"><\/span>Urban bakgrund<\/button><!-- [et_pb_line_break_holder] -->      <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-status-bar\" id=\"slb-mkn-status\" role=\"status\" aria-live=\"polite\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->       PANEL 3 \u2014 METEOROLOGI<!-- [et_pb_line_break_holder] -->       \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 &#8211;><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"slb-tab-panel\" id=\"slb-panel-meteo\" role=\"tabpanel\" aria-labelledby=\"tab-meteo\"><!-- [et_pb_line_break_holder] -->    <main class=\"slb-meteo-main\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 API-FEL \/ SERVICE UNAVAILABLE \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-station-notice slb-notice-error\" id=\"slb-meteo-api-error-notice\" style=\"display:none;\" role=\"alert\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 DATALUCKA \/ TEKNISKT FEL (visas om ingen m\u00e4tpunkt finns senaste tr\u00f6skeltiden) \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-station-notice slb-notice-error\" id=\"slb-meteo-datagap-notice\" style=\"display:none;\" role=\"alert\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- Station-v\u00e4ljare --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-tab-groups\" style=\"margin-bottom:12px;\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-tab-group\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-tab-group-label\">Station<\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-tab-group-btns\"><!-- [et_pb_line_break_holder] -->            <\/p>\n<div class=\"slb-param-tabs\" id=\"slb-meteo-stationTabs\" role=\"group\" aria-label=\"V\u00e4lj m\u00e4tstation\"><!-- [et_pb_line_break_holder] -->              <button class=\"slb-param-tab slb-active\" data-station=\"Torkel Knutssongatan\" aria-pressed=\"true\">S\u00f6dermalm<\/button><!-- [et_pb_line_break_holder] -->              <button class=\"slb-param-tab\" data-station=\"H\u00f6gdalen meteorologimast\" aria-pressed=\"false\">H\u00f6gdalen<\/button><!-- [et_pb_line_break_holder] -->              <button class=\"slb-param-tab\" data-station=\"Marsta meteorologimast\" aria-pressed=\"false\">Marsta<\/button><!-- [et_pb_line_break_holder] -->              <button class=\"slb-param-tab\" data-station=\"Norr Malma\" aria-pressed=\"false\">Norr Malma<\/button><!-- [et_pb_line_break_holder] -->            <\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->      <!-- Graf 1: Temperatur, RH, Nederb\u00f6rd --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-chart-wrapper slb-chart-wrapper-min\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-chart\" id=\"slb-meteo-chart-temprhprec\" role=\"img\" aria-label=\"Graf \u00f6ver temperatur, luftfuktighet och nederb\u00f6rd\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-loading-overlay\" id=\"slb-meteo-loading\" aria-live=\"polite\" aria-busy=\"true\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-spinner\" role=\"status\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-loading-text\">H\u00e4mtar data&#8230;<\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->      <!-- Graf 2: Vind --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-chart-wrapper\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-chart\" id=\"slb-meteo-chart-wind\" role=\"img\" aria-label=\"Graf \u00f6ver vindhastighet och vindriktning\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->      <!-- Graf 3: Solinstr\u00e5lning --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-chart-wrapper\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-chart\" id=\"slb-meteo-chart-solar\" role=\"img\" aria-label=\"Graf \u00f6ver solinstr\u00e5lning\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-status-bar\" id=\"slb-meteo-status\" role=\"status\" aria-live=\"polite\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->       PANEL 4 \u2014 H\u00c4MTA DATA<!-- [et_pb_line_break_holder] -->       \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 &#8211;><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"slb-tab-panel\" id=\"slb-panel-data\" role=\"tabpanel\" aria-labelledby=\"tab-data\"><!-- [et_pb_line_break_holder] -->    <main class=\"slb-dl-main\"><!-- [et_pb_line_break_holder] -->      <\/p>\n<h2>Ladda ner historiska m\u00e4tdata<\/h2>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- \u2500\u2500 API-FEL \/ SERVICE UNAVAILABLE \u2500\u2500 --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-station-notice slb-notice-error\" id=\"slb-dl-api-error-notice\" style=\"display:none;\" role=\"alert\"><\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- 1. Kommun --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-dl-section\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-dl-section-label\">Kommun<\/div>\n<p><!-- [et_pb_line_break_holder] -->        <select class=\"slb-dl-select\" id=\"slb-dl-kommunSelect\"><!-- [et_pb_line_break_holder] --><option value=\"\">Laddar kommuner&#8230;<\/option><!-- [et_pb_line_break_holder] -->        <\/select><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- 2. M\u00e4tstationer --><!-- [et_pb_line_break_holder] -->      <\/p>\n<fieldset class=\"slb-dl-section\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<legend class=\"slb-dl-section-label\">M\u00e4tstationer<\/legend>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-dl-toggle-group\" id=\"slb-dl-stationGroup\" role=\"group\" aria-label=\"V\u00e4lj m\u00e4tstationer\"><!-- [et_pb_line_break_holder] -->          <span style=\"color:#bbb;font-size:13px\">V\u00e4lj en kommun f\u00f6rst<\/span><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-dl-legend\"><!-- [et_pb_line_break_holder] -->          <span class=\"slb-dl-legend-item\"><!-- [et_pb_line_break_holder] -->            <span class=\"slb-dl-legend-swatch slb-dl-legend-active\"><\/span>Aktiv station<!-- [et_pb_line_break_holder] -->          <\/span><!-- [et_pb_line_break_holder] -->          <span class=\"slb-dl-legend-item\"><!-- [et_pb_line_break_holder] -->            <span class=\"slb-dl-legend-swatch slb-dl-legend-inactive\"><\/span>Ej aktiv station<!-- [et_pb_line_break_holder] -->          <\/span><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<hr class=\"slb-dl-divider\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- 3. Parametrar --><!-- [et_pb_line_break_holder] -->      <\/p>\n<fieldset class=\"slb-dl-section\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<legend class=\"slb-dl-section-label\">Parametrar<\/legend>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-dl-toggle-group\" id=\"slb-dl-paramGroup\" role=\"group\" aria-label=\"V\u00e4lj parametrar\"><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"PM10\" aria-pressed=\"false\">PM10<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"PM2.5\" aria-pressed=\"false\">PM2.5<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"NO2\" aria-pressed=\"false\">NO\u2082<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"O3\" aria-pressed=\"false\">O\u2083<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-dl-toggle-group\" id=\"slb-dl-paramGroup\" role=\"group\" aria-label=\"V\u00e4lj parametrar\"><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"RH\" aria-pressed=\"false\">Relativ fuktighet<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"Nederb\u00f6rd\" aria-pressed=\"false\">Nederb\u00f6rd<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"Vindhastighet\" aria-pressed=\"false\">Vindhastighet<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"Vindriktning\" aria-pressed=\"false\">Vindriktning<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"Byvind\" aria-pressed=\"false\">Byvind<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"Tryck\" aria-pressed=\"false\">Tryck<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"GLOB\" aria-pressed=\"false\">Solinstr\u00e5lning<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-param=\"Temp\" aria-pressed=\"false\">Temperatur<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- 4. Tidsuppl\u00f6sning --><!-- [et_pb_line_break_holder] -->      <\/p>\n<fieldset class=\"slb-dl-section\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<legend class=\"slb-dl-section-label\">Tidsuppl\u00f6sning<\/legend>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-dl-toggle-group\" id=\"slb-dl-resolutionGroup\" role=\"group\" aria-label=\"V\u00e4lj tidsuppl\u00f6sning\"><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn slb-dl-active\" data-res=\"hourly\" aria-pressed=\"true\">Timmedelv\u00e4rde<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-res=\"daily\" aria-pressed=\"false\">Dygnsmedelv\u00e4rde<\/button><!-- [et_pb_line_break_holder] -->          <button class=\"slb-dl-toggle-btn\" data-res=\"yearly\" aria-pressed=\"false\">\u00c5rsmedelv\u00e4rde<\/button><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <!-- 5. Datum --><!-- [et_pb_line_break_holder] -->      <\/p>\n<fieldset class=\"slb-dl-section\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<legend class=\"slb-dl-section-label\">Tidsperiod<\/legend>\n<p><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-dl-date-row\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-dl-date-field\"><!-- [et_pb_line_break_holder] -->            <label for=\"slb-dl-dateFrom\">Fr\u00e5n<\/label><!-- [et_pb_line_break_holder] -->            <input type=\"date\" class=\"slb-dl-date-input\" id=\"slb-dl-dateFrom\" aria-label=\"Startdatum\"><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-dl-date-field\"><!-- [et_pb_line_break_holder] -->            <label for=\"slb-dl-dateTo\">Till<\/label><!-- [et_pb_line_break_holder] -->            <input type=\"date\" class=\"slb-dl-date-input\" id=\"slb-dl-dateTo\" aria-label=\"Slutdatum\"><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/fieldset>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<hr class=\"slb-dl-divider\"><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <button class=\"slb-dl-download-btn\" id=\"slb-dl-downloadBtn\" disabled aria-label=\"Ladda ner Excel-fil med valda data\"><!-- [et_pb_line_break_holder] -->        \u2b07 Ladda ner Excel<!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-dl-status-bar\" role=\"status\" aria-live=\"polite\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-dl-spinner\" id=\"slb-dl-spinner\" role=\"status\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <span id=\"slb-dl-statusText\"><\/span><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-dl-tooltip\" id=\"slb-dl-tooltip\" role=\"tooltip\" aria-hidden=\"true\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->    <\/main><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->     PANEL 5 \u2014 V\u00c5RA M\u00c4TSTATIONER<!-- [et_pb_line_break_holder] -->     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 &#8211;><!-- [et_pb_line_break_holder] -->     <\/p>\n<div class=\"slb-tab-panel\" id=\"slb-panel-karta\" role=\"tabpanel\" aria-labelledby=\"tab-karta\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-karta-map-wrap\"><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->          <!-- \u2500\u2500 KOMMUN-KONTROLL, flytande ovanp\u00e5 kartan likt en Esri-widget \u2500\u2500 --><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-karta-kommun-control\"><!-- [et_pb_line_break_holder] -->            <label for=\"slb-karta-kommunSelect\">Kommun<\/label><!-- [et_pb_line_break_holder] -->            <select class=\"slb-karta-kommun-select\" id=\"slb-karta-kommunSelect\" aria-label=\"V\u00e4lj kommun\"><!-- [et_pb_line_break_holder] --><option value=\"\">Alla kommuner<\/option><!-- [et_pb_line_break_holder] -->            <\/select><!-- [et_pb_line_break_holder] -->          <\/div>\n<p><!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->          <iframe<!-- [et_pb_line_break_holder] -->            src=&#8221;https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/&#8221;<!-- [et_pb_line_break_holder] -->            style=&#8221;width:100%;height:700px;border:none;display:block;&#8221;<!-- [et_pb_line_break_holder] -->            allowfullscreen<!-- [et_pb_line_break_holder] -->            loading=&#8221;lazy&#8221;<!-- [et_pb_line_break_holder] -->            title=&#8221;Karta \u00f6ver v\u00e5ra m\u00e4tstationer i Stockholms l\u00e4n&#8221;><!-- [et_pb_line_break_holder] -->          <\/iframe><!-- [et_pb_line_break_holder] -->        <\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->     PANEL 6 \u2014 ENVIROSUITE<!-- [et_pb_line_break_holder] -->     \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 &#8211;><!-- [et_pb_line_break_holder] -->  <\/p>\n<div class=\"slb-tab-panel\" id=\"slb-panel-envirosuite\" role=\"tabpanel\" aria-labelledby=\"tab-envirosuite\"><!-- [et_pb_line_break_holder] -->    <iframe<!-- [et_pb_line_break_holder] -->      src=&#8221;https:\/\/omnis-community.envirosuite.com\/stockholms-stad\/stockholms-stad\/monitoring\/real-time&#8221;<!-- [et_pb_line_break_holder] -->      style=&#8221;width:100%;height:700px;border:none;display:block;&#8221;<!-- [et_pb_line_break_holder] -->      allowfullscreen<!-- [et_pb_line_break_holder] -->      loading=&#8221;lazy&#8221;<!-- [et_pb_line_break_holder] -->      title=&#8221;Realtids\u00f6vervakning via Envirosuite&#8221;><!-- [et_pb_line_break_holder] -->    <\/iframe><!-- [et_pb_line_break_holder] -->  <\/div>\n<p><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><\/div>\n<p><!-- \/slb-tabs-wrapper --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><script><!-- [et_pb_line_break_holder] -->const SlbKommunState = (() => {<!-- [et_pb_line_break_holder] -->  const raw = new URLSearchParams(window.location.search).get(\"kommun\");<!-- [et_pb_line_break_holder] -->  let current = raw ? (raw.toLowerCase() === \"gotland\" ? \"Visby\" : raw) : null;<!-- [et_pb_line_break_holder] -->  const listeners = [];<!-- [et_pb_line_break_holder] -->  return {<!-- [et_pb_line_break_holder] -->    getRaw: () => current,<!-- [et_pb_line_break_holder] -->    set(kommun, source) {<!-- [et_pb_line_break_holder] -->      if (current === kommun) return;<!-- [et_pb_line_break_holder] -->      current = kommun;<!-- [et_pb_line_break_holder] -->      listeners.forEach(fn => fn(kommun, source));<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    onChange(fn) { listeners.push(fn); },<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] -->const SLB_INITIAL_KOMMUN_RAW = SlbKommunState.getRaw();<!-- [et_pb_line_break_holder] -->const _slbHadExplicitKommun = !!new URLSearchParams(window.location.search).get(\"kommun\");<!-- [et_pb_line_break_holder] -->let _slbFirstKommunEvent = true;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->SlbKommunState.onChange((kommun) => {<!-- [et_pb_line_break_holder] -->  const isInitialDefault = _slbFirstKommunEvent && !_slbHadExplicitKommun;<!-- [et_pb_line_break_holder] -->  _slbFirstKommunEvent = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const url = new URL(window.location.href);<!-- [et_pb_line_break_holder] -->  if (kommun) {<!-- [et_pb_line_break_holder] -->    url.searchParams.set(\"kommun\", kommun);<!-- [et_pb_line_break_holder] -->  } else {<!-- [et_pb_line_break_holder] -->    url.searchParams.set(\"kommun\", \"Alla\");<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  window.history.replaceState({}, \"\", url);<!-- [et_pb_line_break_holder] -->  window.parent.postMessage(<!-- [et_pb_line_break_holder] -->    { type: \"slbKommunChange\", kommun: kommun || \"\", initial: isInitialDefault },<!-- [et_pb_line_break_holder] -->    \"*\"<!-- [et_pb_line_break_holder] -->  );<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->   TAB-NAVIGATION<!-- [et_pb_line_break_holder] -->   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->const SLB_TAB_MAP = {<!-- [et_pb_line_break_holder] -->  \"luft\":   \"slb-panel-luft\",<!-- [et_pb_line_break_holder] -->  \"mkn\":    \"slb-panel-mkn\",<!-- [et_pb_line_break_holder] -->  \"meteo\":  \"slb-panel-meteo\",<!-- [et_pb_line_break_holder] -->  \"buller\": \"slb-panel-envirosuite\",<!-- [et_pb_line_break_holder] -->  \"karta\":  \"slb-panel-karta\",<!-- [et_pb_line_break_holder] -->  \"data\":   \"slb-panel-data\",<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] -->const SLB_TAB_MAP_REVERSE = Object.fromEntries(<!-- [et_pb_line_break_holder] -->  Object.entries(SLB_TAB_MAP).map(([key, id]) => [id, key])<!-- [et_pb_line_break_holder] -->);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->(function() {<!-- [et_pb_line_break_holder] -->  const btns   = document.querySelectorAll(\".slb-tab-btn\");<!-- [et_pb_line_break_holder] -->  const panels = document.querySelectorAll(\".slb-tab-panel\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  btns.forEach(btn => {<!-- [et_pb_line_break_holder] -->    btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->      btns.forEach(b => {<!-- [et_pb_line_break_holder] -->        b.classList.remove(\"slb-active\");<!-- [et_pb_line_break_holder] -->        b.setAttribute(\"aria-selected\", \"false\");<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      panels.forEach(p => p.classList.remove(\"slb-active\"));<!-- [et_pb_line_break_holder] -->      <!-- [et_pb_line_break_holder] -->      btn.classList.add(\"slb-active\");<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-selected\", \"true\");<!-- [et_pb_line_break_holder] -->      <!-- [et_pb_line_break_holder] -->      const panel = document.getElementById(btn.dataset.tab);<!-- [et_pb_line_break_holder] -->      panel.classList.add(\"slb-active\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      \/\/ Uppdatera URL:ens ?tab=-parameter, utan sidladdning<!-- [et_pb_line_break_holder] -->      const tabKey = SLB_TAB_MAP_REVERSE[btn.dataset.tab];<!-- [et_pb_line_break_holder] -->      if (tabKey) {<!-- [et_pb_line_break_holder] -->        const url = new URL(window.location.href);<!-- [et_pb_line_break_holder] -->        url.searchParams.set(\"tab\", tabKey);<!-- [et_pb_line_break_holder] -->        window.history.replaceState({}, \"\", url);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        \/\/ Meddela ev. f\u00f6r\u00e4lderf\u00f6nster (om sidan ligger i en iframe p\u00e5 t.ex. WordPress)<!-- [et_pb_line_break_holder] -->        window.parent.postMessage({ type: \"slbTabChange\", tab: tabKey }, \"*\");<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      setTimeout(() => {<!-- [et_pb_line_break_holder] -->        if (btn.dataset.tab === \"slb-panel-luft\" && window._slbLuftReady)<!-- [et_pb_line_break_holder] -->          Plotly.Plots.resize(document.getElementById(\"slb-chart-luft\"));<!-- [et_pb_line_break_holder] -->        if (btn.dataset.tab === \"slb-panel-mkn\" && window._slbMknReady)<!-- [et_pb_line_break_holder] -->          Plotly.Plots.resize(document.getElementById(\"slb-chart-mkn\"));<!-- [et_pb_line_break_holder] -->      }, 50);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Lyssna p\u00e5 ev. instruktion utifr\u00e5n (t.ex. fr\u00e5n f\u00f6r\u00e4lderf\u00f6nstret) om vilken flik som ska visas<!-- [et_pb_line_break_holder] -->window.addEventListener(\"message\", (event) => {<!-- [et_pb_line_break_holder] -->  if (event.data && event.data.type === \"slbSetTab\") {<!-- [et_pb_line_break_holder] -->    const targetId = SLB_TAB_MAP[event.data.tab];<!-- [et_pb_line_break_holder] -->    if (targetId) {<!-- [et_pb_line_break_holder] -->      const targetBtn = document.querySelector(`[data-tab=\"${targetId}\"]`);<!-- [et_pb_line_break_holder] -->      if (targetBtn) targetBtn.click();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const urlParams = new URLSearchParams(window.location.search);<!-- [et_pb_line_break_holder] -->const tabParam = urlParams.get(\"tab\");<!-- [et_pb_line_break_holder] -->if (tabParam) {<!-- [et_pb_line_break_holder] -->  const targetId = SLB_TAB_MAP[tabParam];<!-- [et_pb_line_break_holder] -->  if (targetId) {<!-- [et_pb_line_break_holder] -->    const targetBtn = document.querySelector(`[data-tab=\"${targetId}\"]`);<!-- [et_pb_line_break_holder] -->    if (targetBtn) targetBtn.click();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->} else {<!-- [et_pb_line_break_holder] -->  \/\/ Ingen ?tab= i URL:en \u2014 spegla start-fliken (redan aktiv i HTML:en) i URL:en<!-- [et_pb_line_break_holder] -->  const activeBtn = document.querySelector(\".slb-tab-btn.slb-active\");<!-- [et_pb_line_break_holder] -->  const startTabKey = activeBtn && SLB_TAB_MAP_REVERSE[activeBtn.dataset.tab];<!-- [et_pb_line_break_holder] -->  if (startTabKey) {<!-- [et_pb_line_break_holder] -->    const url = new URL(window.location.href);<!-- [et_pb_line_break_holder] -->    url.searchParams.set(\"tab\", startTabKey);<!-- [et_pb_line_break_holder] -->    window.history.replaceState({}, \"\", url);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const KOMMUN_KARTA = {<!-- [et_pb_line_break_holder] -->  \"Norrk\u00f6ping\":  \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Norrk\u00f6ping%27#widget_8=center:1800653%2C8091935%2C102100,scale:115000\",<!-- [et_pb_line_break_holder] -->  \"Link\u00f6ping\":   \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Link\u00f6ping%27#widget_8=center:1739264%2C8054123%2C102100,scale:115000\",<!-- [et_pb_line_break_holder] -->  \"Visby\":       \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Gotland%27#widget_8=center:2037208%2C7890833%2C102100,scale:125000\",<!-- [et_pb_line_break_holder] -->  \"S\u00f6dert\u00e4lje\":  \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27S\u00f6dert\u00e4lje%27#widget_8=center:1960207%2C8222242%2C102100,scale:125000\",<!-- [et_pb_line_break_holder] -->  \"Botkyrka\":    \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Botkyrka%27#widget_8=center:1985189%2C8232633%2C102100,scale:45000\",<!-- [et_pb_line_break_holder] -->  \"Stockholm\":   \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Stockholm%27#widget_8=center:2008428%2C8251271%2C102100,scale:270000\",<!-- [et_pb_line_break_holder] -->  \"Sundbyberg\":  \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Sundbyberg%27#widget_8=center:2000439%2C8259422%2C102100,scale:58000\",<!-- [et_pb_line_break_holder] -->  \"Solna\":       \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Solna%27#widget_8=center:2003914%2C8262352%2C102100,scale:58000\",<!-- [et_pb_line_break_holder] -->  \"Sollentuna\":  \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Sollentuna%27#widget_8=center:1995378%2C8279112%2C102100,scale:140000\",<!-- [et_pb_line_break_holder] -->  \"Norrt\u00e4lje\":   \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Norrt\u00e4lje%27#widget_8=center:2072591%2C8355815%2C102100,scale:220000\",<!-- [et_pb_line_break_holder] -->  \"Uppsala\":     \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Uppsala%27#widget_8=center:1963369%2C8368247%2C102100,scale:50000\",<!-- [et_pb_line_break_holder] -->  \"G\u00e4vle\":       \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27G\u00e4vle%27#widget_8=center:1907192%2C8551445%2C102100,scale:50000\",<!-- [et_pb_line_break_holder] -->  \"Sigtuna\":       \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/?data_filter=dataSource_1-19dd836dd2d-layer-3:Kommun%3D%27Sigtuna%27#widget_8=center:1987817%2C8317284%2C102100,scale:50000\",<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const KOMMUN_INTRO_LUFT = {<!-- [et_pb_line_break_holder] -->  \"Stockholm\": `<!-- [et_pb_line_break_holder] -->  <pee>I Stockholm m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <\/p>\n<ul style=\"padding-bottom:0\">\n<li><b>Hornsgatan 110<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Stockholm stad utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5), kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx), koldioxid (CO<SUB>2<\/SUB>), sot, samt antal partiklar i gatuniv\u00e5 vid Hornsgatan 110. M\u00e4tningarna startade \u00e5r 1990.<!\u2013- [et_pb_br_holder] -\u2013><\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>Sveav\u00e4gen 59<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Stockholm stad utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5), kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx), kolmonoxid (CO), antal partiklar samt buller i gatuniv\u00e5 vid Sveav\u00e4gen 59. M\u00e4tningarna startade \u00e5r 1989.<!\u2013- [et_pb_br_holder] -\u2013><\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>St Eriksgatan 83<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Stockholm stad utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5), kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx), i gatuniv\u00e5 vid St Eriksgatan 83. M\u00e4tningarna startade \u00e5r 2018.<!\u2013- [et_pb_br_holder] -\u2013><\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>Norrlandsgatan 21<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Stockholm stad utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5), kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) i gatuniv\u00e5 vid Norrlandsgatan 21. M\u00e4tningarna startade i oktober \u00e5r 2024.<!\u2013- [et_pb_br_holder] -\u2013><\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>Lilla Essingen<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Trafikverket utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5), kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) invid Essingeleden vid Lilla Essingen. M\u00e4tningarna startade \u00e5r 2005.<!\u2013- [et_pb_br_holder] -\u2013><\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>Torkel Knutssonsgatan<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5), kv\u00e4vedioxid (NO<SUB>2<\/SUB>), kv\u00e4veoxider (NOx), koldioxid (CO<SUB>2<\/SUB>), sot, ozon, svaveldioxid (SO<SUB>2<\/SUB>) samt antal partiklar i urban bakgrundsluft vid Torkel Knutssonsgatan. M\u00e4tningarna startade \u00e5r 1981.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/ul>\n<p><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Stockholm&#038;tab=karta\">Mer information om m\u00e4tstationerna i Stockholm<\/a>.<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Graferna nedan visar det senaste dygnets uppm\u00e4tta timmedelv\u00e4rden f\u00f6r partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och ozon (O<SUB>3<\/SUB>).<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Som j\u00e4mf\u00f6relse visas \u00e4ven m\u00e4tresultat fr\u00e5n regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Stockholm&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"G\u00e4vle\": `<!-- [et_pb_line_break_holder] -->    <pee>I G\u00e4vle m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <pee><b>Staketgatan 22<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av G\u00e4vle kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) i gatuniv\u00e5 vid Staketgatan 22. M\u00e4tningarna startade i december \u00e5r 2021.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=G\u00e4vle&#038;tab=karta\">Mer information om m\u00e4tstationen i G\u00e4vle<\/a>.<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet.<!-- [et_pb_line_break_holder] -->    Som j\u00e4mf\u00f6relse visas \u00e4ven m\u00e4tresultat fr\u00e5n regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=G\u00e4vle&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Botkyrka\": `<!-- [et_pb_line_break_holder] -->    <pee>I Botkyrka m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <pee><b>Kumla g\u00e5rdsv\u00e4g i trafikmilj\u00f6<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Botkyrka kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) i gatuniv\u00e5 vid Kumla g\u00e5rdsv\u00e4g. M\u00e4tningarna startade i mars \u00e5r 2023. Under sommaren 2025 flyttades m\u00e4tplatsen fr\u00e5n s\u00f6dra sidan till norra sidan av Kumla g\u00e5rdsv\u00e4g.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Botkyrka&#038;tab=karta\">Mer information om m\u00e4tstationen i Botkyrka<\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas m\u00e4tningar dels fr\u00e5n urban bakgrundsmilj\u00f6 i takniv\u00e5 vid Torkel Knutssonsgatan p\u00e5 S\u00f6dermalm i Stockholm, och regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Botkyrka&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Visby\": `<!-- [et_pb_line_break_holder] -->    <pee>P\u00e5 Gotland m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <\/p>\n<ul style=\"padding-bottom:0\">\n<li><b>\u00d6sterv\u00e4g 17 i Visby<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Region Gotland utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) i gatuniv\u00e5 vid \u00d6sterv\u00e4g 17 i Visby. M\u00e4tningarna startade i mars \u00e5r 2020.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>Br\u00f6msebrov\u00e4g 8 i Visby<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund utf\u00f6r SLB-analys m\u00e4tningar av urbana bakgrundshalter av partiklar (PM10 och PM2.5) i Visby ovan takniv\u00e5 vid Br\u00f6msebrov\u00e4g 8. M\u00e4tningarna startade i mars \u00e5r 2021.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>R\u00e4vhagen i Visby<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Trafikverket utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) i gatuniv\u00e5 invid Visbyleden V\u00e4g 148. M\u00e4tningarna startade i december \u00e5r 2023.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/ul>\n<p><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Gotland&#038;tab=karta\">Mer information om m\u00e4tstationerna p\u00e5 Gotland<\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar det senaste dygnet.<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Gotland&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Link\u00f6ping\": `<!-- [et_pb_line_break_holder] -->    <pee>I Link\u00f6ping m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <b>Hamngatan 10<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Link\u00f6pings kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) i gatuniv\u00e5 vid Hamngatan 10. M\u00e4tningarna startade i december \u00e5r 2021.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Link\u00f6ping&#038;tab=karta\">Mer information om m\u00e4tstationen i Link\u00f6ping<\/a>.<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas m\u00e4tningar fr\u00e5n urban bakgrundsmilj\u00f6 i takniv\u00e5 vid Tr\u00e4dg\u00e5rdsgatan 21 i Norrk\u00f6ping.<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Link\u00f6ping&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Norrk\u00f6ping\": `<!-- [et_pb_line_break_holder] -->    <pee>I Norrk\u00f6ping m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <\/p>\n<ul style=\"padding-bottom:0\">\n<li><b>Kungsgatan 32<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Norrk\u00f6pings kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) i gatuniv\u00e5 vid Kungsgatan 32. M\u00e4tningarna startade i november \u00e5r 2020.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>Tr\u00e4dg\u00e5rdsgatan 21<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund utf\u00f6r SLB-analys m\u00e4tningar av urbana bakgrundshalter av partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) ovan takniv\u00e5 vid Tr\u00e4dg\u00e5rdsgatan 21. M\u00e4tningarna startade i november \u00e5r 2020.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/ul>\n<p><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Norrk\u00f6ping&#038;tab=karta\">Mer information om m\u00e4tstationerna i Norrk\u00f6ping<\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet.<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Norrk\u00f6ping&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Norrt\u00e4lje\": `<!-- [et_pb_line_break_holder] -->    <pee>I Norrt\u00e4lje m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <b>Norr Malma<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund utf\u00f6r SLB-analys m\u00e4tningar av regionala bakgrundshalter av partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) och markn\u00e4ra ozon (O<SUB>3<\/SUB>). M\u00e4tningarna startade \u00e5r 1994.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Norrt\u00e4lje&#038;tab=karta\">Mer information om m\u00e4tstationen i Norrt\u00e4lje<\/a>.<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas m\u00e4tningar fr\u00e5n urban bakgrundsmilj\u00f6 i takniv\u00e5 vid Torkel Knutssonsgatan p\u00e5 S\u00f6dermalm i Stockholm.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Norrt\u00e4lje&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Sollentuna\": `<!-- [et_pb_line_break_holder] -->    <pee>P\u00e5 uppdrag av Sollentuna kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) vid fyra m\u00e4tplatser. P\u00e5 uppdrag av Trafikkontoret utf\u00f6r SLB-analys m\u00e4tningar av kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) vid en av m\u00e4tplatserna.<!-- [et_pb_line_break_holder] -->    <\/p>\n<ul style=\"padding-bottom:0\"><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>M\u00e4tplats Ekmans v\u00e4g<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    M\u00e4tning av partiklar (PM10 och PM2.5) invid bebyggelse n\u00e4ra E4:an. M\u00e4tningarna startade \u00e5r 2014.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>M\u00e4tplats Sollentunav\u00e4gen 192<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    M\u00e4tning av partiklar (PM10 och PM2.5) i gatuniv\u00e5 vid Sollentunav\u00e4gen 192. M\u00e4tningarna startade i december \u00e5r 2020.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>M\u00e4tplats Edsberg-Danderydsv\u00e4gen<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    M\u00e4tning av halter partiklar (PM10 och PM2.5) i gatuniv\u00e5 vid Edsberg-Danderydsv\u00e4gen. M\u00e4tningarna startade i februari \u00e5r 2018.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>M\u00e4tplats E4-H\u00e4ggvik<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    M\u00e4tning av partiklar (PM10 och PM2.5) samt halter kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) invid E4:an. M\u00e4tningarna av PM10 och PM2.5 startade \u00e5r 2014 medan m\u00e4tningarna av NO<SUB>2<\/SUB> och NOx startade \u00e5r 2015. <\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/ul>\n<p><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Sollentuna&#038;tab=karta\">Mer information om m\u00e4tstationerna i Sollentuna<\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas m\u00e4tningar dels fr\u00e5n urban bakgrundsmilj\u00f6 i takniv\u00e5 vid Torkel Knutssonsgatan p\u00e5 S\u00f6dermalm i Stockholm, och regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Sollentuna&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Solna\": `<!-- [et_pb_line_break_holder] -->    <pee>I Solna m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <b>Enk\u00f6pingsv\u00e4gen<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Solna kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5), samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) invid Enk\u00f6pingsv\u00e4gen. M\u00e4tningarna startade i juni \u00e5r 2024. Den tidigare m\u00e4tplatsen l\u00e5g vid R\u00e5sundav\u00e4gen 107 d\u00e4r m\u00e4tningarna p\u00e5gick fr\u00e5n \u00e5r 2018.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Solna&#038;tab=karta\">Mer information om m\u00e4tstationen i Solna <\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas m\u00e4tningar dels fr\u00e5n urban bakgrundsmilj\u00f6 i takniv\u00e5 vid Torkel Knutssonsgatan p\u00e5 S\u00f6dermalm i Stockholm, och regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Solna&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Sundbyberg\": `<!-- [et_pb_line_break_holder] -->    <pee>I Sundbyberg m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <b>Tulegatan 9<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Sundbybergs kommun utf\u00f6r SLB-analys m\u00e4tningar av halter partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) i gatuniv\u00e5 vid Tulegatan 9. M\u00e4tningarna startade i februari \u00e5r 2021.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Sundbyberg&#038;tab=karta\">Mer information om m\u00e4tstationen i Sundbyberg<\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas m\u00e4tningar dels fr\u00e5n urban bakgrundsmilj\u00f6 i takniv\u00e5 vid Torkel Knutssonsgatan p\u00e5 S\u00f6dermalm i Stockholm, och regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Sundbyberg&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"S\u00f6dert\u00e4lje\": `<!-- [et_pb_line_break_holder] -->    <pee>I S\u00f6dert\u00e4lje m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <b>M\u00e4tplats Turingegatan 26<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av S\u00f6dert\u00e4lje kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och (kv\u00e4veoxider NOx) i gatuniv\u00e5 vid Turingegatan 26. M\u00e4tningarna av halter partiklar startade \u00e5r 2014 medan m\u00e4tningarna av halter kv\u00e4vedioxid NO<SUB>2<\/SUB> och kv\u00e4veoxider NOx startade \u00e5r 2017.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=S\u00f6dert\u00e4lje&#038;tab=karta\">Mer information om m\u00e4tstationen i S\u00f6dert\u00e4lje<\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas m\u00e4tningar dels fr\u00e5n urban bakgrundsmilj\u00f6 i takniv\u00e5 vid Torkel Knutssonsgatan p\u00e5 S\u00f6dermalm i Stockholm, och regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=S\u00f6dert\u00e4lje&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Uppsala\": `<!-- [et_pb_line_break_holder] -->    <pee>I Uppsala m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <\/p>\n<ul style=\"padding-bottom:0\">\n<li><b>M\u00e4tplats Kungsgatan 67<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Uppsala kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5), samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och kv\u00e4veoxider (NOx) i gatuniv\u00e5 vid Kungsgatan 67. M\u00e4tningarna startade \u00e5r 2017.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/p>\n<li><b>M\u00e4tplats Dragarbrunnsgatan 23<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund utf\u00f6r SLB-analys m\u00e4tningar av urbana bakgrundshalter av PM10 och PM2.5 samt kv\u00e4vedioxid NO<SUB>2<\/SUB> och kv\u00e4veoxider NOx ovan takniv\u00e5 vid Dragarbrunnsgatan 23. M\u00e4tningarna startade \u00e5r 2018.<\/li>\n<p><!-- [et_pb_line_break_holder] -->    <\/ul>\n<p><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Uppsala&#038;tab=karta\">Mer information om m\u00e4tstationerna i Uppsala<\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas \u00e4ven m\u00e4tresultat fr\u00e5n regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<!-- [et_pb_line_break_holder] -->    <!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    I fliken <a href=\"?kommun=Uppsala&#038;tab=mkn\">Milj\u00f6kvalitetsnormer och -m\u00e5l<\/a> visas antalet dygn som dygnsmedelhalterna har varit h\u00f6gre \u00e4n respektive normv\u00e4rde hittills i \u00e5r.<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->  \"Sigtuna\": `<!-- [et_pb_line_break_holder] -->    <pee>I Sigtuna m\u00e4ts luftf\u00f6roreningar vid:<\/pee><!-- [et_pb_line_break_holder] -->    <b>M\u00e4tplats Stationsgatan 5b<\/b><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    P\u00e5 uppdrag av Sigtuna kommun utf\u00f6r SLB-analys m\u00e4tningar av partiklar (PM10 och PM2.5) samt kv\u00e4vedioxid (NO<SUB>2<\/SUB>) och (kv\u00e4veoxider NOx) invid Stationsgatan 5b. M\u00e4tningarna startade i september \u00e5r 2026 och ska p\u00e5g\u00e5 till tills vidare.<!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    <a href=\"?kommun=Sigtuna&#038;tab=karta\">Mer information om m\u00e4tstationen i Sigtuna<\/a>.<!\u2013- [et_pb_br_holder] -\u2013><!\u2013- [et_pb_br_holder] -\u2013><!-- [et_pb_line_break_holder] -->    Nedan visas grafer \u00f6ver uppm\u00e4tta timmedelv\u00e4rden av partiklar och kv\u00e4vedioxid det senaste dygnet, som j\u00e4mf\u00f6relse visas m\u00e4tningar dels fr\u00e5n urban bakgrundsmilj\u00f6 i takniv\u00e5 vid Torkel Knutssonsgatan p\u00e5 S\u00f6dermalm i Stockholm, och regional bakgrundsmilj\u00f6 i Norr Malma utanf\u00f6r Norrt\u00e4lje (landsbygd).<\/pee><!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Driftinformation\/varningstexter per kommun. Visas i b\u00e5de \"Luftkvalitet\"<!-- [et_pb_line_break_holder] -->\/\/ och \"Milj\u00f6kvalitetsnormer och -m\u00e5l\" n\u00e4r kommunen matchar. L\u00e4gg till fler<!-- [et_pb_line_break_holder] -->\/\/ nycklar h\u00e4r f\u00f6r att visa motsvarande notiser i andra kommuner.<!-- [et_pb_line_break_holder] -->const KOMMUN_NOTICE = {<!-- [et_pb_line_break_holder] -->  \"Link\u00f6ping\": `<!-- [et_pb_line_break_holder] -->    <b>Driftinformation:<\/b> Den 14 september 2026 p\u00e5b\u00f6rjas ett gr\u00e4varbete vid m\u00e4tplatsen Hamngatan 10 i Link\u00f6ping, som ber\u00e4knas p\u00e5g\u00e5 till februari 2027. Under arbetet kommer gatan att vara helt avst\u00e4ngd f\u00f6r s\u00f6derg\u00e5ende trafik. M\u00e4tv\u00e4rden under denna period kommer d\u00e4rf\u00f6r att skilja sig fr\u00e5n det normala.<!-- [et_pb_line_break_holder] -->  `,<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function updateKommunNotice(elId, kommun) {<!-- [et_pb_line_break_holder] -->  const el = document.getElementById(elId);<!-- [et_pb_line_break_holder] -->  if (!el) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const html = kommun && KOMMUN_NOTICE[kommun];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (html) {<!-- [et_pb_line_break_holder] -->    el.innerHTML = html;<!-- [et_pb_line_break_holder] -->    el.style.display = \"\";<!-- [et_pb_line_break_holder] -->  } else {<!-- [et_pb_line_break_holder] -->    el.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->    el.style.display = \"none\";<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const SHOW_KOMMUN_INTRO = true;<!-- [et_pb_line_break_holder] -->function updateLuftKommunIntro(kommun) {<!-- [et_pb_line_break_holder] -->  const el = document.getElementById(\"slb-luft-kommun-intro\");<!-- [et_pb_line_break_holder] -->  if (!el) return;<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  if (!SHOW_KOMMUN_INTRO) {<!-- [et_pb_line_break_holder] -->    el.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->    el.style.display = \"none\";<!-- [et_pb_line_break_holder] -->    return;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const html = kommun && KOMMUN_INTRO_LUFT[kommun];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (html) {<!-- [et_pb_line_break_holder] -->    const PREPOSITION = { \"Visby\": \"p\u00e5 Gotland\" };<!-- [et_pb_line_break_holder] -->    const alias = { \"Visby\": \"Gotland\" };<!-- [et_pb_line_break_holder] -->    const locationText = PREPOSITION[kommun] || `i ${alias[kommun] || kommun}`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    el.innerHTML = `<!-- [et_pb_line_break_holder] -->      <button class=\"slb-readmore-btn\" type=\"button\" aria-expanded=\"false\"><!-- [et_pb_line_break_holder] -->        L\u00e4s om m\u00e4tningarna ${locationText}<!-- [et_pb_line_break_holder] -->      <\/button><!-- [et_pb_line_break_holder] -->      <\/p>\n<div class=\"slb-intro-more\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div>${html}<\/div>\n<p><!-- [et_pb_line_break_holder] -->      <\/div>\n<p><!-- [et_pb_line_break_holder] -->    `;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    el.style.display = \"\";   \/\/ <-- denna saknades<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const btn = el.querySelector(\".slb-readmore-btn\");<!-- [et_pb_line_break_holder] -->    const more = el.querySelector(\".slb-intro-more\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->      const open = btn.getAttribute(\"aria-expanded\") === \"true\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-expanded\", String(!open));<!-- [et_pb_line_break_holder] -->      more.classList.toggle(\"slb-open\", !open);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      btn.textContent = `L\u00e4s om m\u00e4tningarna ${locationText}`;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  } else {<!-- [et_pb_line_break_holder] -->    el.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->    el.style.display = \"none\";<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function applyKartaKommun(rawKommun) {<!-- [et_pb_line_break_holder] -->  const kartaKommun = rawKommun<!-- [et_pb_line_break_holder] -->    ? Object.keys(KOMMUN_KARTA).find(k => k.toLowerCase() === rawKommun.toLowerCase())<!-- [et_pb_line_break_holder] -->    : null;<!-- [et_pb_line_break_holder] -->  document.querySelector(\"#slb-panel-karta iframe\").src =<!-- [et_pb_line_break_holder] -->    (kartaKommun && KOMMUN_KARTA[kartaKommun]) || \"https:\/\/experience.arcgis.com\/experience\/57de95daca87460285e719252cc5b563\/\";<!-- [et_pb_line_break_holder] -->  updateKartaTabLabel(kartaKommun);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->applyKartaKommun(SlbKommunState.getRaw());<!-- [et_pb_line_break_holder] -->SlbKommunState.onChange((kommun, source) => {<!-- [et_pb_line_break_holder] -->  if (source === \"karta\") return;<!-- [et_pb_line_break_holder] -->  applyKartaKommun(kommun);<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function updateKartaTabLabel(kommun) {<!-- [et_pb_line_break_holder] -->    const kartaBtn = document.querySelector('[data-tab=\"slb-panel-karta\"]');<!-- [et_pb_line_break_holder] -->    if (!kartaBtn) return;<!-- [et_pb_line_break_holder] -->    if (kommun && KOMMUN_KARTA[kommun]) {<!-- [et_pb_line_break_holder] -->      const FULL_TEXT = {<!-- [et_pb_line_break_holder] -->        \"Link\u00f6ping\": \"M\u00e4tstationen i Link\u00f6ping\",<!-- [et_pb_line_break_holder] -->        \"Botkyrka\": \"M\u00e4tstationen i Botkyrka\",<!-- [et_pb_line_break_holder] -->        \"G\u00e4vle\": \"M\u00e4tstationen i G\u00e4vle\",<!-- [et_pb_line_break_holder] -->        \"Norrt\u00e4lje\": \"M\u00e4tstationen i Norrt\u00e4lje\",<!-- [et_pb_line_break_holder] -->        \"Solna\": \"M\u00e4tstationen i Solna\",<!-- [et_pb_line_break_holder] -->        \"Sundbyberg\": \"M\u00e4tstationen i Sundbyberg\",<!-- [et_pb_line_break_holder] -->        \"S\u00f6dert\u00e4lje\": \"M\u00e4tstationen i S\u00f6dert\u00e4lje\",<!-- [et_pb_line_break_holder] -->        \"Sigtuna\": \"M\u00e4tstationen i Sigtuna\",<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->      const PREPOSITION = { \"Visby\": \"p\u00e5 Gotland\" };<!-- [et_pb_line_break_holder] -->      const alias = { \"Visby\": \"Gotland\" };<!-- [et_pb_line_break_holder] -->      const text = PREPOSITION[kommun] || `i ${alias[kommun] || kommun}`;<!-- [et_pb_line_break_holder] -->      kartaBtn.textContent = FULL_TEXT[kommun] || `M\u00e4tstationerna ${text}`;<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      kartaBtn.textContent = \"V\u00e5ra m\u00e4tstationer\";<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* \u2500\u2500 KARTA-PANELEN: KOMMUN-DROPDOWN \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->function populateKartaKommunSelect() {<!-- [et_pb_line_break_holder] -->  const KOMMUN_ALIAS = { \"Visby\": \"Gotland\" };<!-- [et_pb_line_break_holder] -->  const kommuner = Object.keys(KOMMUN_KARTA)<!-- [et_pb_line_break_holder] -->    .sort((a, b) => (KOMMUN_ALIAS[a] || a).localeCompare(KOMMUN_ALIAS[b] || b, \"sv\", { sensitivity: \"base\" }));<!-- [et_pb_line_break_holder] -->  const sel = document.getElementById(\"slb-karta-kommunSelect\");<!-- [et_pb_line_break_holder] -->  sel.innerHTML = `<option value=\"\">Alla kommuner<\/option>` +<!-- [et_pb_line_break_holder] -->    kommuner.map(k => `<option value=\"${k}\">${KOMMUN_ALIAS[k] || k}<\/option>`).join(\"\");<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->populateKartaKommunSelect();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function syncKartaKommunSelect(rawKommun) {<!-- [et_pb_line_break_holder] -->  const sel = document.getElementById(\"slb-karta-kommunSelect\");<!-- [et_pb_line_break_holder] -->  const kartaKommun = rawKommun<!-- [et_pb_line_break_holder] -->    ? Object.keys(KOMMUN_KARTA).find(k => k.toLowerCase() === rawKommun.toLowerCase())<!-- [et_pb_line_break_holder] -->    : null;<!-- [et_pb_line_break_holder] -->  sel.value = kartaKommun || \"\";<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->syncKartaKommunSelect(SlbKommunState.getRaw());<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->document.getElementById(\"slb-karta-kommunSelect\").addEventListener(\"change\", e => {<!-- [et_pb_line_break_holder] -->  const kommun = e.target.value;<!-- [et_pb_line_break_holder] -->  applyKartaKommun(kommun);<!-- [et_pb_line_break_holder] -->  SlbKommunState.set(kommun, \"karta\");<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->SlbKommunState.onChange((kommun, source) => {<!-- [et_pb_line_break_holder] -->  if (source === \"karta\") return;<!-- [et_pb_line_break_holder] -->  syncKartaKommunSelect(kommun);<!-- [et_pb_line_break_holder] -->});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->   DELADE HJ\u00c4LPFUNKTIONER<!-- [et_pb_line_break_holder] -->   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->const SLB_PALETTE = [<!-- [et_pb_line_break_holder] -->  \"#E5006C\",\"#009991\",\"#E9500E\",\"#007FC8\",\"#76368C\",<!-- [et_pb_line_break_holder] -->  \"#890C58\",\"#00594F\",\"#B92F00\",\"#004976\",\"#470A68\",\"#E29900\",<!-- [et_pb_line_break_holder] -->  \"#F3A0BA\",\"#AAD9D6\",\"#F9BF9C\",\"#A3C9EC\",\"#C5B4D9\",<!-- [et_pb_line_break_holder] -->  \"#FCE3EB\",\"#E1F1EF\",\"#FDE6D8\",\"#DDE9F8\",\"#E8DFF0\",<!-- [et_pb_line_break_holder] -->];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const EXCLUDED_STATIONS = new Set([<!-- [et_pb_line_break_holder] -->  \"E4\/E20 Hallunda\",<!-- [et_pb_line_break_holder] -->  \"Sveav\u00e4gen 88\",<!-- [et_pb_line_break_holder] -->  \/\/\"Kumla g\u00e5rdsv\u00e4g syd\",<!-- [et_pb_line_break_holder] -->]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function slbDarken(hex, f) {<!-- [et_pb_line_break_holder] -->  const n = parseInt(hex.replace(\"#\",\"\"), 16);<!-- [et_pb_line_break_holder] -->  let r=(n>>16)&255, g=(n>>8)&255, b=n&255;<!-- [et_pb_line_break_holder] -->  r=Math.round(r*(1-f)); g=Math.round(g*(1-f)); b=Math.round(b*(1-f));<!-- [et_pb_line_break_holder] -->  return `#${r.toString(16).padStart(2,\"0\")}${g.toString(16).padStart(2,\"0\")}${b.toString(16).padStart(2,\"0\")}`;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function normalizeTyp(typ) {<!-- [et_pb_line_break_holder] -->  if (typ === \"Landsbygd\") return \"Regional bakgrund\";<!-- [et_pb_line_break_holder] -->  if (typ === \"Tak\")       return \"Urban bakgrund\";<!-- [et_pb_line_break_holder] -->  return typ;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function slbIsMobile() { return window.innerWidth <= 600; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function slbBuildColorMap(allStations) {<!-- [et_pb_line_break_holder] -->  const relevant = [\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\",\"Landsbygd\",\"Tak\",\"\u00d6ppen v\u00e4g\"];<!-- [et_pb_line_break_holder] -->  const names = allStations<!-- [et_pb_line_break_holder] -->    .filter(s => s.typ && relevant.includes(s.typ.trim()))<!-- [et_pb_line_break_holder] -->    .map(s => s.Stationsnamn).sort();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const p = SLB_PALETTE;<!-- [et_pb_line_break_holder] -->  const step = Math.ceil(p.length \/ 11);<!-- [et_pb_line_break_holder] -->  const interleaved = [];<!-- [et_pb_line_break_holder] -->  for (let i = 0; i < step; i++)<!-- [et_pb_line_break_holder] -->    for (let j = i; j < p.length; j += step)<!-- [et_pb_line_break_holder] -->      interleaved.push(p[j]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const map = {};<!-- [et_pb_line_break_holder] -->  names.forEach((n, i) => { map[n] = interleaved[i % interleaved.length]; });<!-- [et_pb_line_break_holder] -->  return map;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function slbBuildShortNameMap(allStations) {<!-- [et_pb_line_break_holder] -->  const map = {};<!-- [et_pb_line_break_holder] -->  for (const s of allStations) {<!-- [et_pb_line_break_holder] -->    if (s.Stationsnamn && s.kortnamn) {<!-- [et_pb_line_break_holder] -->      map[s.Stationsnamn] = s.kortnamn;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  return map;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->async function slbFetchJSON(url) {<!-- [et_pb_line_break_holder] -->  const r = await fetch(url);<!-- [et_pb_line_break_holder] -->  if (!r.ok) throw new Error(`HTTP ${r.status}`);<!-- [et_pb_line_break_holder] -->  return r.json();<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Visas n\u00e4r ett kritiskt API-anrop misslyckas (t.ex. vid 503 Service Unavailable,<!-- [et_pb_line_break_holder] -->\/\/ eller ett n\u00e4tverksfel som uppst\u00e5r av samma anledning, t.ex. om en felsida utan<!-- [et_pb_line_break_holder] -->\/\/ CORS-headers serveras under underh\u00e5ll)<!-- [et_pb_line_break_holder] -->const SLB_MAINTENANCE_NOTICE_HTML =<!-- [et_pb_line_break_holder] -->  `\u26a0\ufe0f <strong>Tekniskt fel:<\/strong> Underh\u00e5llsarbete p\u00e5g\u00e5r. Tj\u00e4nsten \u00e4r tillf\u00e4lligt otillg\u00e4nglig (503 Service Unavailable). F\u00f6rs\u00f6k igen om en stund.`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function slbShowErrorNotice(noticeId) {<!-- [et_pb_line_break_holder] -->  const el = document.getElementById(noticeId);<!-- [et_pb_line_break_holder] -->  if (!el) return;<!-- [et_pb_line_break_holder] -->  el.innerHTML = SLB_MAINTENANCE_NOTICE_HTML;<!-- [et_pb_line_break_holder] -->  el.style.display = \"block\";<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function slbHideErrorNotice(noticeId) {<!-- [et_pb_line_break_holder] -->  const el = document.getElementById(noticeId);<!-- [et_pb_line_break_holder] -->  if (!el) return;<!-- [et_pb_line_break_holder] -->  el.style.display = \"none\";<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function slbSetLoading(id, on) {<!-- [et_pb_line_break_holder] -->  const el = document.getElementById(id);<!-- [et_pb_line_break_holder] -->  el.style.display = on ? \"flex\" : \"none\";<!-- [et_pb_line_break_holder] -->  el.setAttribute(\"aria-busy\", on ? \"true\" : \"false\");<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function slbSetStatus(id, msg, error=false) {<!-- [et_pb_line_break_holder] -->  document.getElementById(id).innerHTML =<!-- [et_pb_line_break_holder] -->    `<span><span class=\"slb-status-dot ${error?\"slb-error\":\"\"}\"><\/span>${msg}<\/span>`;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ \u2500\u2500 DATALUCKA \/ TEKNISKT FEL: varnar om ingen station levererat data p\u00e5 6h+ \u2500\u2500<!-- [et_pb_line_break_holder] -->const SLB_DATAGAP_THRESHOLD_HOURS = 5;<!-- [et_pb_line_break_holder] -->function slbCheckDataGap(dataset, noticeId, datetimeKey = \"Datetime\") {<!-- [et_pb_line_break_holder] -->  const notice = document.getElementById(noticeId);<!-- [et_pb_line_break_holder] -->  if (!notice) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (!dataset || !dataset.length) {<!-- [et_pb_line_break_holder] -->    notice.style.display = \"none\";<!-- [et_pb_line_break_holder] -->    return;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let maxTime = -Infinity;<!-- [et_pb_line_break_holder] -->  for (const d of dataset) {<!-- [et_pb_line_break_holder] -->    const t = new Date(d[datetimeKey]).getTime();<!-- [et_pb_line_break_holder] -->    if (!isNaN(t) && t > maxTime) maxTime = t;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  if (maxTime === -Infinity) { notice.style.display = \"none\"; return; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const hoursSince = (Date.now() - maxTime) \/ 3600000;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (hoursSince >= SLB_DATAGAP_THRESHOLD_HOURS) {<!-- [et_pb_line_break_holder] -->    const p = n => String(n).padStart(2, \"0\");<!-- [et_pb_line_break_holder] -->    const d = new Date(maxTime);<!-- [et_pb_line_break_holder] -->    const lastStr = `${d.getFullYear()}-${p(d.getMonth()+1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`;<!-- [et_pb_line_break_holder] -->    notice.innerHTML =<!-- [et_pb_line_break_holder] -->      `\u26a0\ufe0f <strong>Tekniskt fel:<\/strong> Det saknas data i grafen nedan. Vi \u00e4r medvetna om problemet och arbetar p\u00e5 att \u00e5tg\u00e4rda det.`;<!-- [et_pb_line_break_holder] -->    notice.style.display = \"block\";<!-- [et_pb_line_break_holder] -->  } else {<!-- [et_pb_line_break_holder] -->    notice.style.display = \"none\";<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function isSwedishDST(date = new Date()) {<!-- [et_pb_line_break_holder] -->  const parts = new Intl.DateTimeFormat(\"sv-SE\", {<!-- [et_pb_line_break_holder] -->      timeZone: \"Europe\/Stockholm\",<!-- [et_pb_line_break_holder] -->      timeZoneName: \"longOffset\"<!-- [et_pb_line_break_holder] -->  }).formatToParts(date);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const offset = parts.find(p => p.type === \"timeZoneName\").value;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  return offset === \"GMT+02:00\";<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function adjustForSummerTime(datetime) {<!-- [et_pb_line_break_holder] -->    const d = new Date(datetime);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (isSwedishDST(d)) {<!-- [et_pb_line_break_holder] -->        d.setHours(d.getHours() + 1);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    return d;<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->console.log(isSwedishDST() === true ? \"Sommartid\" : \"Vintertid\")<!-- [et_pb_line_break_holder] -->\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->   PANEL 1 \u2014 LUFTKVALITET<!-- [et_pb_line_break_holder] -->   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->const NORR_MALMA_KOMMUNER = new Set([<!-- [et_pb_line_break_holder] -->  \"Stockholm\", \"Botkyrka\", \"Norrt\u00e4lje\", \"Sollentuna\",<!-- [et_pb_line_break_holder] -->  \"Solna\", \"Sundbyberg\", \"S\u00f6dert\u00e4lje\", \"Uppsala\", \"G\u00e4vle\", \"Sigtuna\"<!-- [et_pb_line_break_holder] -->]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function isAlwaysShown(station, kommun) {<!-- [et_pb_line_break_holder] -->  return station === \"Norr Malma\" && NORR_MALMA_KOMMUNER.has(kommun);<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->const URBAN_BACKGROUND_BY_KOMMUN = {<!-- [et_pb_line_break_holder] -->  \"Stockholm\": \"Torkel Knutssongatan\",<!-- [et_pb_line_break_holder] -->  \"Botkyrka\": \"Torkel Knutssongatan\",<!-- [et_pb_line_break_holder] -->  \"Norrt\u00e4lje\": \"Torkel Knutssongatan\",<!-- [et_pb_line_break_holder] -->  \"Sollentuna\": \"Torkel Knutssongatan\",<!-- [et_pb_line_break_holder] -->  \"Solna\": \"Torkel Knutssongatan\",<!-- [et_pb_line_break_holder] -->  \"Sundbyberg\": \"Torkel Knutssongatan\",<!-- [et_pb_line_break_holder] -->  \"S\u00f6dert\u00e4lje\": \"Torkel Knutssongatan\",<!-- [et_pb_line_break_holder] -->  \"Sigtuna\": \"Torkel Knutssongatan\",<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \"Norrk\u00f6ping\": \"Tr\u00e4dg\u00e5rdsgatan 21\",<!-- [et_pb_line_break_holder] -->  \"Link\u00f6ping\": \"Tr\u00e4dg\u00e5rdsgatan 21\",<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \"Uppsala\": \"Dragarbrunnsgatan 23\",<!-- [et_pb_line_break_holder] -->  \/\/\"G\u00e4vle\": \"Dragarbrunnsgatan 23\",<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \"Visby\": \"Br\u00f6msebrov\u00e4g 8\",<!-- [et_pb_line_break_holder] -->  \"Gotland\": \"Br\u00f6msebrov\u00e4g 8\"<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] -->const CUSTOM_STATION_NAMES = {<!-- [et_pb_line_break_holder] -->  \"Norr Malma\": \"Regional bakgrund (Norr Malma, Norrt\u00e4lje)\",<!-- [et_pb_line_break_holder] -->  \"Torkel Knutssongatan\": \"Urban bakgrund (Torkel Knutssongatan, Stockholm)\",<!-- [et_pb_line_break_holder] -->  \"Tr\u00e4dg\u00e5rdsgatan 21\": \"Urban bakgrund (Tr\u00e4dg\u00e5rdsgatan, Norrk\u00f6ping)\",<!-- [et_pb_line_break_holder] -->  \"Dragarbrunnsgatan 23\": \"Urban bakgrund (Dragarbrunnsgatan, Uppsala)\",<!-- [et_pb_line_break_holder] -->  \"Br\u00f6msebrov\u00e4g 8\": \"Urban bakgrund (Br\u00f6msebrov\u00e4g, Gotland)\"<!-- [et_pb_line_break_holder] -->};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->function resolveActiveKommun(stations) {<!-- [et_pb_line_break_holder] -->  const raw = SLB_INITIAL_KOMMUN_RAW;<!-- [et_pb_line_break_holder] -->  if (!raw) return \"Stockholm\";<!-- [et_pb_line_break_holder] -->  if (raw.toLowerCase() === \"alla\") return \"\";<!-- [et_pb_line_break_holder] -->  const kommunValues = [...new Set(stations.map(s => s.kommun))];<!-- [et_pb_line_break_holder] -->  return kommunValues.find(k => k.toLowerCase() === raw.toLowerCase()) || \"Stockholm\";<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/\/ Signal som mkn-panelen v\u00e4ntar p\u00e5: l\u00f6ses ut n\u00e4r m\u00e4tv\u00e4rden f\u00f6r de senaste tv\u00e5 dygnen \u00e4r klar OCH dygnsmedelv\u00e4rdes-anropet \u00e4r ig\u00e5ngsatt (inte n\u00f6dv\u00e4ndigtvis klart). L\u00f6ses ut oavsett om luft-laddningen lyckas eller inte, s\u00e5 att mkn-panelen aldrig blockeras permanent av ett fel i luft-panelen.<!-- [et_pb_line_break_holder] -->let _slbResolveRealtimeReady;<!-- [et_pb_line_break_holder] -->window._slbLuftRealtimeReady = new Promise(res => { _slbResolveRealtimeReady = res; });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->(function() {<!-- [et_pb_line_break_holder] -->  const BASE = \"https:\/\/open.slb.nu\/api\/timeseries\/v1.1b\/\";<!-- [et_pb_line_break_holder] -->  const KEY  = \"lvl1\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const PARAM_LABELS = {<!-- [et_pb_line_break_holder] -->    \"PM10\":\"Partikelhalter, PM10\",\"PM2.5\":\"Partikelhalter, PM2.5\",<!-- [et_pb_line_break_holder] -->    \"NO2\":\"Kv\u00e4vedioxidhalter\",\"O3\":\"Ozonhalter\"<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let allStations=[], allTimeseries=[], allData=[];<!-- [et_pb_line_break_holder] -->  let colorMap={}, shortNameMap={};<!-- [et_pb_line_break_holder] -->  let activeParam=\"PM10\";<!-- [et_pb_line_break_holder] -->  let activeTypes = new Set([\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\",\"Landsbygd\",\"Tak\",\"\u00d6ppen v\u00e4g\"]);<!-- [et_pb_line_break_holder] -->  let activeKommun=\"\";<!-- [et_pb_line_break_holder] -->  let activeDag = \"idag\";<!-- [et_pb_line_break_holder] -->  let activeView = \"realtid\";<!-- [et_pb_line_break_holder] -->  let dailyAllData = [];<!-- [et_pb_line_break_holder] -->  let dailyDataLoaded = false;<!-- [et_pb_line_break_holder] -->  let dailyDayRange = [];<!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  const PARAM_THRESHOLDS = {<!-- [et_pb_line_break_holder] -->    \"NO2\":   [<!-- [et_pb_line_break_holder] -->      { label:\"H\u00f6ga\",        min:60,  max:Infinity, color:\"#CC0000\" },<!-- [et_pb_line_break_holder] -->      { label:\"Ganska h\u00f6ga\", min:48,  max:60,       color:\"#E29900\" },<!-- [et_pb_line_break_holder] -->      { label:\"M\u00e5ttliga\",    min:36,  max:48,       color:\"#E8D44D\" },<!-- [et_pb_line_break_holder] -->      { label:\"L\u00e5ga\",        min:0,   max:36,       color:\"#5BAD6F\" },<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    \"PM10\":  [<!-- [et_pb_line_break_holder] -->      { label:\"H\u00f6ga\",        min:50,  max:Infinity, color:\"#CC0000\" },<!-- [et_pb_line_break_holder] -->      { label:\"Ganska h\u00f6ga\", min:35,  max:50,       color:\"#E29900\" },<!-- [et_pb_line_break_holder] -->      { label:\"M\u00e5ttliga\",    min:25,  max:35,       color:\"#E8D44D\" },<!-- [et_pb_line_break_holder] -->      { label:\"L\u00e5ga\",        min:0,   max:25,       color:\"#5BAD6F\" },<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->    \"PM2.5\": [<!-- [et_pb_line_break_holder] -->      { label:\"H\u00f6ga\",        min:25,  max:Infinity, color:\"#CC0000\" },<!-- [et_pb_line_break_holder] -->      { label:\"Ganska h\u00f6ga\", min:17,  max:25,       color:\"#E29900\" },<!-- [et_pb_line_break_holder] -->      { label:\"M\u00e5ttliga\",    min:9,   max:17,       color:\"#E8D44D\" },<!-- [et_pb_line_break_holder] -->      { label:\"L\u00e5ga\",        min:0,   max:9,        color:\"#5BAD6F\" },<!-- [et_pb_line_break_holder] -->    ],<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function slbGetClass(param, value) {<!-- [et_pb_line_break_holder] -->    const thresholds = PARAM_THRESHOLDS[param];<!-- [et_pb_line_break_holder] -->    if (!thresholds || value === null || value === undefined) return null;<!-- [et_pb_line_break_holder] -->    const v = parseFloat(value);<!-- [et_pb_line_break_holder] -->    if (isNaN(v)) return null;<!-- [et_pb_line_break_holder] -->    return thresholds.find(t => v >= t.min && v < t.max) || null;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const PROGNOS_LEVELS = {<!-- [et_pb_line_break_holder] -->    1: { label: \"L\u00e5ga\",        color: \"#5BAD6F\" },<!-- [et_pb_line_break_holder] -->    2: { label: \"M\u00e5ttliga\",    color: \"#E8D44D\" },<!-- [et_pb_line_break_holder] -->    3: { label: \"Ganska h\u00f6ga\", color: \"#E29900\" },<!-- [et_pb_line_break_holder] -->    4: { label: \"H\u00f6ga\",        color: \"#CC0000\" },<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function loadPrognos() {<!-- [et_pb_line_break_holder] -->    const prognosSection = document.querySelector(\".slb-prognos-section\");<!-- [et_pb_line_break_holder] -->    const showPrognos = (activeKommun === \"\" || activeKommun === \"Stockholm\")<!-- [et_pb_line_break_holder] -->                        && (activeParam === \"PM10\" || activeParam === \"NO2\");<!-- [et_pb_line_break_holder] -->    prognosSection.style.display = showPrognos ? \"block\" : \"none\";<!-- [et_pb_line_break_holder] -->    if (!showPrognos) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const setEl = (id, val) => {<!-- [et_pb_line_break_holder] -->      const el = document.getElementById(id);<!-- [et_pb_line_break_holder] -->      const level = val !== null ? PROGNOS_LEVELS[val] : null;<!-- [et_pb_line_break_holder] -->      el.innerHTML = level<!-- [et_pb_line_break_holder] -->        ? `<span class=\"slb-prognos-dot\" style=\"background:${level.color}\" aria-hidden=\"true\"><\/span><span>${level.label}<\/span>`<!-- [et_pb_line_break_holder] -->        : `<span class=\"slb-prognos-na\">Kommer ca kl. 14<\/span>`;<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    setEl(\"slb-prognos-idag\", null);<!-- [et_pb_line_break_holder] -->    setEl(\"slb-prognos-imorgon\", null);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const resp = await fetch(\"..\/prognos.php\");<!-- [et_pb_line_break_holder] -->      if (!resp.ok) throw new Error(`HTTP ${resp.status}`);<!-- [et_pb_line_break_holder] -->      const data = await resp.json();<!-- [et_pb_line_break_holder] -->      const key = activeParam === \"NO2\" ? \"NO2\" : \"PM10\";<!-- [et_pb_line_break_holder] -->      const parse = v => { const n = parseInt(v); return (n >= 1 && n <= 4) ? n : null; };<!-- [et_pb_line_break_holder] -->      setEl(\"slb-prognos-idag\",    parse(data[0]?.[key]));<!-- [et_pb_line_break_holder] -->      setEl(\"slb-prognos-imorgon\", parse(data[1]?.[key]));<!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      console.warn(\"Prognos-fel:\", e);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderSummary() {<!-- [et_pb_line_break_holder] -->    const section = document.getElementById(\"slb-luft-summary\");<!-- [et_pb_line_break_holder] -->    const grid    = document.getElementById(\"slb-luft-summary-grid\");<!-- [et_pb_line_break_holder] -->    const legend  = document.getElementById(\"slb-luft-legend\");<!-- [et_pb_line_break_holder] -->    const header  = document.getElementById(\"slb-luft-summary-header\");<!-- [et_pb_line_break_holder] -->    const prognosSection = document.querySelector(\".slb-prognos-section\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (!allData.length) { section.style.display = \"none\"; return; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const today = new Date();<!-- [et_pb_line_break_holder] -->    const yesterday = new Date(today);<!-- [et_pb_line_break_holder] -->    yesterday.setDate(today.getDate() - 1);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const pad = n => String(n).padStart(2, \"0\");<!-- [et_pb_line_break_holder] -->    const fmtDate = d => `${d.getFullYear()}-${pad(d.getMonth()+1)}-${pad(d.getDate())}`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const targetDate = activeDag === \"idag\" ? fmtDate(today) : fmtDate(yesterday);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const relevant = allData.filter(d => {<!-- [et_pb_line_break_holder] -->      if (d.parameter !== activeParam) return false;<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === d.station);<!-- [et_pb_line_break_holder] -->      if (!info) return false;<!-- [et_pb_line_break_holder] -->      if (!activeTypes.has(normalizeTyp(info.typ?.trim()))) return false;<!-- [et_pb_line_break_holder] -->      if (<!-- [et_pb_line_break_holder] -->        activeKommun &&<!-- [et_pb_line_break_holder] -->        info.kommun !== activeKommun &&<!-- [et_pb_line_break_holder] -->        !isAlwaysShown(d.station, activeKommun) &&<!-- [et_pb_line_break_holder] -->        d.station !== URBAN_BACKGROUND_BY_KOMMUN[activeKommun]<!-- [et_pb_line_break_holder] -->      ) return false;<!-- [et_pb_line_break_holder] -->      const dt = new Date(d.Datetime);<!-- [et_pb_line_break_holder] -->      dt.setSeconds(dt.getSeconds() - 1);<!-- [et_pb_line_break_holder] -->      const adjustedDate = `${dt.getFullYear()}-${pad(dt.getMonth()+1)}-${pad(dt.getDate())}`;<!-- [et_pb_line_break_holder] -->      return adjustedDate === targetDate;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    \/*if (activeParam === \"PM2.5\" || activeParam === \"O3\") {<!-- [et_pb_line_break_holder] -->      prognosSection.style.display = \"none\";<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      prognosSection.style.display = \"block\";<!-- [et_pb_line_break_holder] -->    }*\/<!-- [et_pb_line_break_holder] -->    document.querySelector(\".slb-prognos-header\").innerHTML =<!-- [et_pb_line_break_holder] -->        `<!\u2013- [et_pb_br_holder] -\u2013>Prognos ${activeParam === \"NO2\" ? \"NO\u2082\" : activeParam}`;<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    if (activeParam === \"O3\") {<!-- [et_pb_line_break_holder] -->      section.style.display = \"none\";<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const byStation = {};<!-- [et_pb_line_break_holder] -->    for (const d of relevant) {<!-- [et_pb_line_break_holder] -->      if (!byStation[d.station]) byStation[d.station] = { sum:0, count:0 };<!-- [et_pb_line_break_holder] -->      const v = parseFloat(d.value);<!-- [et_pb_line_break_holder] -->      if (!isNaN(v)) { byStation[d.station].sum += v; byStation[d.station].count++; }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const means = Object.entries(byStation)<!-- [et_pb_line_break_holder] -->      .map(([name, acc]) => {<!-- [et_pb_line_break_holder] -->        const info      = allStations.find(st => st.Stationsnamn === name);<!-- [et_pb_line_break_holder] -->        const kommun    = info?.kommun || \"\u00d6\";<!-- [et_pb_line_break_holder] -->        const shortName = shortNameMap[name] || name;<!-- [et_pb_line_break_holder] -->        return {<!-- [et_pb_line_break_holder] -->          name,<!-- [et_pb_line_break_holder] -->          value: acc.count > 0 ? acc.sum \/ acc.count : null,<!-- [et_pb_line_break_holder] -->          kommun,<!-- [et_pb_line_break_holder] -->          shortName,<!-- [et_pb_line_break_holder] -->        };<!-- [et_pb_line_break_holder] -->      })<!-- [et_pb_line_break_holder] -->      .filter(s => s.value !== null)<!-- [et_pb_line_break_holder] -->      .sort((a, b) => {<!-- [et_pb_line_break_holder] -->        const aIsSthlm = a.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] -->        const bIsSthlm = b.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] -->        if (aIsSthlm && !bIsSthlm) return -1;<!-- [et_pb_line_break_holder] -->        if (!aIsSthlm && bIsSthlm) return 1;<!-- [et_pb_line_break_holder] -->        const kommunCmp = a.kommun.localeCompare(b.kommun, \"sv\");<!-- [et_pb_line_break_holder] -->        if (kommunCmp !== 0) return kommunCmp;<!-- [et_pb_line_break_holder] -->        return a.shortName.localeCompare(b.shortName, \"sv\");<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const h = String(today.getHours()).padStart(2,\"0\");<!-- [et_pb_line_break_holder] -->    if (activeDag === \"idag\") {<!-- [et_pb_line_break_holder] -->      const h = String(today.getHours()).padStart(2, \"0\");<!-- [et_pb_line_break_holder] -->      header.textContent = `Medelv\u00e4rden av ${activeParam === \"NO2\" ? \"NO\u2082\" : activeParam} idag sedan midnatt (${pad(today.getDate())}\/${pad(today.getMonth()+1)} kl. 00:00 \u2014 ${h}:00)`;<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      header.textContent = `Dygnsmedelv\u00e4rden av ${activeParam === \"NO2\" ? \"NO\u2082\" : activeParam} ig\u00e5r (${pad(yesterday.getDate())}\/${pad(yesterday.getMonth()+1)})`;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const thresholds = PARAM_THRESHOLDS[activeParam];<!-- [et_pb_line_break_holder] -->    if (thresholds) {<!-- [et_pb_line_break_holder] -->      legend.innerHTML = thresholds.map(t =><!-- [et_pb_line_break_holder] -->        `<\/p>\n<div class=\"slb-legend-item\" role=\"listitem\"><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-legend-dot\" style=\"background:${t.color}\" aria-hidden=\"true\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->          <span>${t.label}${t.min === 0 ? ` (< ${PARAM_THRESHOLDS[activeParam][PARAM_THRESHOLDS[activeParam].indexOf(t)-1]?.min ?? \"?\"} \u00b5g\/m\u00b3)` : t.max === Infinity ? ` (> ${t.min} \u00b5g\/m\u00b3)` : ` (${t.min}\u2013${t.max} \u00b5g\/m\u00b3)`}<\/span><!-- [et_pb_line_break_holder] -->        <\/div>\n<p>`<!-- [et_pb_line_break_holder] -->      ).join(\"\");<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      legend.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    grid.innerHTML = means.map(s => {<!-- [et_pb_line_break_holder] -->      const cls      = slbGetClass(activeParam, s.value);<!-- [et_pb_line_break_holder] -->      const dotClr   = cls ? cls.color : \"#aaa\";<!-- [et_pb_line_break_holder] -->      const shortName = shortNameMap[s.name] || s.name;<!-- [et_pb_line_break_holder] -->      const info     = allStations.find(st => st.Stationsnamn === s.name);<!-- [et_pb_line_break_holder] -->      const kommun   = info?.kommun || \"\";<!-- [et_pb_line_break_holder] -->      const label    = kommun ? `${shortName}, ${kommun}` : shortName;<!-- [et_pb_line_break_holder] -->      const displayVal = s.value != null ? s.value.toFixed(1) + \" \u00b5g\/m\u00b3\" : \"\u2013\";<!-- [et_pb_line_break_holder] -->      return `<\/p>\n<div class=\"slb-summary-item\" title=\"${s.name}\" role=\"listitem\"><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"slb-summary-dot\" style=\"background:${dotClr}\" aria-hidden=\"true\"><\/div>\n<p><!-- [et_pb_line_break_holder] -->        <span class=\"slb-summary-name\">${label}<\/span><!-- [et_pb_line_break_holder] -->        <span class=\"slb-summary-value\">${displayVal}<\/span><!-- [et_pb_line_break_holder] -->      <\/div>\n<p>`;<!-- [et_pb_line_break_holder] -->    }).join(\"\");<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    const cols = slbIsMobile() ? 1 : 3;<!-- [et_pb_line_break_holder] -->    const rows = Math.ceil(means.length \/ cols);<!-- [et_pb_line_break_holder] -->    grid.style.maxHeight = `${rows * 28}px`;<!-- [et_pb_line_break_holder] -->    grid.style.display = \"flex\";<!-- [et_pb_line_break_holder] -->    grid.style.flexDirection = \"column\";<!-- [et_pb_line_break_holder] -->    grid.style.flexWrap = \"wrap\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    section.style.display = \"block\";<!-- [et_pb_line_break_holder] -->    loadPrognos();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function fmtDatetime(d) {<!-- [et_pb_line_break_holder] -->    const p = n => String(n).padStart(2,\"0\");<!-- [et_pb_line_break_holder] -->    return `${d.getFullYear()}-${p(d.getMonth()+1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function getAvailableParamsForKommun(kommun) {<!-- [et_pb_line_break_holder] -->    if (!kommun) return new Set(Object.keys(PARAM_LABELS));<!-- [et_pb_line_break_holder] -->    const available = new Set();<!-- [et_pb_line_break_holder] -->    for (const d of allData) {<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === d.station);<!-- [et_pb_line_break_holder] -->      if (!info || info.kommun !== kommun) continue;<!-- [et_pb_line_break_holder] -->      available.add(d.parameter);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    return available;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function updateParamTabsVisibility() {<!-- [et_pb_line_break_holder] -->    const available = getAvailableParamsForKommun(activeKommun);<!-- [et_pb_line_break_holder] -->    const tabs = [...document.querySelectorAll(\"#slb-luft-paramTabs .slb-param-tab\")];<!-- [et_pb_line_break_holder] -->    let firstVisible = null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    tabs.forEach(tab => {<!-- [et_pb_line_break_holder] -->      const show = available.has(tab.dataset.param);<!-- [et_pb_line_break_holder] -->      tab.style.display = show ? \"\" : \"none\";<!-- [et_pb_line_break_holder] -->      if (show && !firstVisible) firstVisible = tab;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const activeTab = tabs.find(t => t.classList.contains(\"slb-active\"));<!-- [et_pb_line_break_holder] -->    if (activeTab && activeTab.style.display === \"none\" && firstVisible) {<!-- [et_pb_line_break_holder] -->      firstVisible.click();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function loadAll() {<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-luft-loading\", true);<!-- [et_pb_line_break_holder] -->    slbHideErrorNotice(\"slb-luft-api-error-notice\");<!-- [et_pb_line_break_holder] -->    let priorityStations = [], restStations = [];<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      allStations   = await slbFetchJSON(`${BASE}\/list-stations\/?key=${KEY}`);<!-- [et_pb_line_break_holder] -->      allTimeseries = await slbFetchJSON(`${BASE}\/list-timeseries\/?key=${KEY}`);<!-- [et_pb_line_break_holder] -->      colorMap     = slbBuildColorMap(allStations);<!-- [et_pb_line_break_holder] -->      shortNameMap = slbBuildShortNameMap(allStations);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      activeKommun = resolveActiveKommun(allStations);<!-- [et_pb_line_break_holder] -->      SlbKommunState.set(activeKommun, \"luft\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const relevant = allStations.filter(s =><!-- [et_pb_line_break_holder] -->        [\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\",\"Landsbygd\",\"Tak\",\"\u00d6ppen v\u00e4g\"].includes(s.typ?.trim())<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const priorityNames = new Set(<!-- [et_pb_line_break_holder] -->        relevant.filter(s =><!-- [et_pb_line_break_holder] -->          !activeKommun ||<!-- [et_pb_line_break_holder] -->          s.kommun === activeKommun ||<!-- [et_pb_line_break_holder] -->          isAlwaysShown(s.Stationsnamn, activeKommun) ||<!-- [et_pb_line_break_holder] -->          s.Stationsnamn === URBAN_BACKGROUND_BY_KOMMUN[activeKommun]<!-- [et_pb_line_break_holder] -->        ).map(s => s.Stationsnamn)<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      priorityStations = relevant.filter(s => priorityNames.has(s.Stationsnamn));<!-- [et_pb_line_break_holder] -->      restStations     = relevant.filter(s => !priorityNames.has(s.Stationsnamn));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      allData = await fetchTimeseriesFor(priorityStations);<!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      slbShowErrorNotice(\"slb-luft-api-error-notice\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (allData.errors && allData.errors.length) {<!-- [et_pb_line_break_holder] -->      slbShowErrorNotice(\"slb-luft-api-error-notice\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    allData = allData.filter(d => !EXCLUDED_STATIONS.has(d.station));<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-luft-loading\", false);<!-- [et_pb_line_break_holder] -->    renderLuft();<!-- [et_pb_line_break_holder] -->    window._slbLuftReady = true;<!-- [et_pb_line_break_holder] -->    renderSummary();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    populateKommunSelect();<!-- [et_pb_line_break_holder] -->    updateLuftKommunIntro(activeKommun);<!-- [et_pb_line_break_holder] -->    updateKommunNotice(\"slb-luft-kommun-notice\", activeKommun);<!-- [et_pb_line_break_holder] -->    updateParamTabsVisibility();<!-- [et_pb_line_break_holder] -->    slbCheckDataGap(allData, \"slb-luft-datagap-notice\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    loadDailyAverages(); \/\/ ig\u00e5ngs\u00e4tts direkt efter realtidsdatan, v\u00e4ntas inte in h\u00e4r<!-- [et_pb_line_break_holder] -->    _slbResolveRealtimeReady(); \/\/ ger mkn-panelen klartecken att b\u00f6rja ladda<!-- [et_pb_line_break_holder] -->    loadRestInBackground(restStations);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let rt;<!-- [et_pb_line_break_holder] -->    window.addEventListener(\"resize\", () => { clearTimeout(rt); rt=setTimeout(renderActiveView, 150); });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Kontrollera datalucka l\u00f6pande, \u00e4ven utan ny h\u00e4mtning (klockan g\u00e5r vidare)<!-- [et_pb_line_break_holder] -->    setInterval(() => slbCheckDataGap(allData, \"slb-luft-datagap-notice\"), 5 * 60 * 1000);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function fetchTimeseriesFor(stationList) {<!-- [et_pb_line_break_holder] -->    const data = [];<!-- [et_pb_line_break_holder] -->    const errors = [];<!-- [et_pb_line_break_holder] -->    const results = await Promise.all(Object.keys(PARAM_LABELS).map(param => {<!-- [et_pb_line_break_holder] -->      const stns = stationList<!-- [et_pb_line_break_holder] -->        .filter(s => allTimeseries.some(t => t.Stationsnamn===s.Stationsnamn && t.Parameter===param))<!-- [et_pb_line_break_holder] -->        .map(s => s.Stationsnamn);<!-- [et_pb_line_break_holder] -->      if (!stns.length) return Promise.resolve([]);<!-- [et_pb_line_break_holder] -->      const url = `${BASE}\/get-timeseries\/?key=${KEY}`<!-- [et_pb_line_break_holder] -->        +`&stations=${encodeURIComponent(stns.join(\",\"))}`<!-- [et_pb_line_break_holder] -->        +`&parameters=${param}&date_range=2&format=fast`;<!-- [et_pb_line_break_holder] -->      return slbFetchJSON(url).catch(e => { errors.push(e); return []; });<!-- [et_pb_line_break_holder] -->    }));<!-- [et_pb_line_break_holder] -->    results.forEach((d, i) => {<!-- [et_pb_line_break_holder] -->      const param = Object.keys(PARAM_LABELS)[i];<!-- [et_pb_line_break_holder] -->      if (!d || !d.Datetime) return;<!-- [et_pb_line_break_holder] -->      Object.entries(d).forEach(([key, values]) => {<!-- [et_pb_line_break_holder] -->        if (key === \"Datetime\") return;<!-- [et_pb_line_break_holder] -->        const station = key.replace(\/^[^:]+:\\s*\/, \"\").trim();<!-- [et_pb_line_break_holder] -->        d.Datetime.forEach((dt, idx) => data.push({ Datetime: dt, parameter: param, station, value: values[idx] }));<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    data.errors = errors;<!-- [et_pb_line_break_holder] -->    return data;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function loadRestInBackground(restStations) {<!-- [et_pb_line_break_holder] -->    if (!restStations.length) return;<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const extra = await fetchTimeseriesFor(restStations);<!-- [et_pb_line_break_holder] -->      if (extra.errors && extra.errors.length) {<!-- [et_pb_line_break_holder] -->        slbShowErrorNotice(\"slb-luft-api-error-notice\");<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      allData = allData.concat(extra.filter(d => !EXCLUDED_STATIONS.has(d.station)));<!-- [et_pb_line_break_holder] -->      populateKommunSelect();<!-- [et_pb_line_break_holder] -->      renderActiveView();<!-- [et_pb_line_break_holder] -->      renderSummary();<!-- [et_pb_line_break_holder] -->      slbCheckDataGap(allData, \"slb-luft-datagap-notice\");<!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      console.warn(\"Bakgrundsladdning misslyckades:\", e);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function populateKommunSelect() {<!-- [et_pb_line_break_holder] -->    const KOMMUN_ALIAS = { \"Visby\": \"Gotland\" };<!-- [et_pb_line_break_holder] -->    const kommuner = [...new Set(<!-- [et_pb_line_break_holder] -->      allStations<!-- [et_pb_line_break_holder] -->        .filter(s => [\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\",\"Landsbygd\",\"Tak\",\"\u00d6ppen v\u00e4g\"].includes(s.typ?.trim()))<!-- [et_pb_line_break_holder] -->        .map(s => s.kommun)<!-- [et_pb_line_break_holder] -->        .filter(Boolean)<!-- [et_pb_line_break_holder] -->    )].sort((a, b) => (KOMMUN_ALIAS[a] || a).localeCompare(KOMMUN_ALIAS[b] || b, \"sv\", { sensitivity: \"base\" }));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const kommunSel = document.getElementById(\"slb-luft-kommunSelect\");<!-- [et_pb_line_break_holder] -->    const current = activeKommun;<!-- [et_pb_line_break_holder] -->    kommunSel.innerHTML = `<option value=\"\">Alla kommuner<\/option>` +<!-- [et_pb_line_break_holder] -->      kommuner.map(k => `<option value=\"${k}\">${KOMMUN_ALIAS[k] || k}<\/option>`).join(\"\");<!-- [et_pb_line_break_holder] -->    kommunSel.value = current;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function updateStationTypeButtons() {<!-- [et_pb_line_break_holder] -->    const typesInData = new Set();<!-- [et_pb_line_break_holder] -->    for (const d of allData) {<!-- [et_pb_line_break_holder] -->      if (d.parameter !== activeParam) continue;<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === d.station);<!-- [et_pb_line_break_holder] -->      if (!info) continue;<!-- [et_pb_line_break_holder] -->      if (<!-- [et_pb_line_break_holder] -->        activeKommun &&<!-- [et_pb_line_break_holder] -->        info.kommun !== activeKommun &&<!-- [et_pb_line_break_holder] -->        !isAlwaysShown(d.station, activeKommun) &&<!-- [et_pb_line_break_holder] -->        d.station !== URBAN_BACKGROUND_BY_KOMMUN[activeKommun]<!-- [et_pb_line_break_holder] -->      ) continue;<!-- [et_pb_line_break_holder] -->      typesInData.add(normalizeTyp(info.typ?.trim()));<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    document.querySelectorAll(\".slb-station-toggle[data-panel='luft']\").forEach(btn => {<!-- [et_pb_line_break_holder] -->      const hasType = typesInData.has(btn.dataset.type);<!-- [et_pb_line_break_holder] -->      btn.style.display = hasType ? \"\" : \"none\";<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  \/\/ Delad sortering s\u00e5 att legendordningen blir identisk i realtids- och 14-dagarsvyn<!-- [et_pb_line_break_holder] -->  function slbStationSortComparator(a, b) {<!-- [et_pb_line_break_holder] -->    \/\/ Vid \"Alla kommuner\": endast kommunalfabetiskt med Stockholm f\u00f6rst<!-- [et_pb_line_break_holder] -->    if (!activeKommun) {<!-- [et_pb_line_break_holder] -->      const aIsSthlm = a.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] -->      const bIsSthlm = b.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (aIsSthlm && !bIsSthlm) return -1;<!-- [et_pb_line_break_holder] -->      if (!aIsSthlm && bIsSthlm) return 1;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const kommunCmp = a.kommun.localeCompare(b.kommun, \"sv\");<!-- [et_pb_line_break_holder] -->      if (kommunCmp !== 0) return kommunCmp;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      return a.shortName.localeCompare(b.shortName, \"sv\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Vid vald kommun: prioritera stationstyper<!-- [et_pb_line_break_holder] -->    const aInfo = allStations.find(s => s.Stationsnamn === a.station);<!-- [et_pb_line_break_holder] -->    const bInfo = allStations.find(s => s.Stationsnamn === b.station);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const aTyp = normalizeTyp(aInfo?.typ?.trim());<!-- [et_pb_line_break_holder] -->    const bTyp = normalizeTyp(bInfo?.typ?.trim());<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const typeRank = {<!-- [et_pb_line_break_holder] -->      \"Gaturum\": 0,<!-- [et_pb_line_break_holder] -->      \"\u00d6ppen v\u00e4g\": 0,<!-- [et_pb_line_break_holder] -->      \"Urban bakgrund\": 1,<!-- [et_pb_line_break_holder] -->      \"Regional bakgrund\": 2<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const aRank = typeRank[aTyp] ?? 0;<!-- [et_pb_line_break_holder] -->    const bRank = typeRank[bTyp] ?? 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (aRank !== bRank) return aRank - bRank;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Inom samma typ: Stockholm f\u00f6rst<!-- [et_pb_line_break_holder] -->    const aIsSthlm = a.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] -->    const bIsSthlm = b.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (aIsSthlm && !bIsSthlm) return -1;<!-- [et_pb_line_break_holder] -->    if (!aIsSthlm && bIsSthlm) return 1;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const kommunCmp = a.kommun.localeCompare(b.kommun, \"sv\");<!-- [et_pb_line_break_holder] -->    if (kommunCmp !== 0) return kommunCmp;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    return a.shortName.localeCompare(b.shortName, \"sv\");<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderLuft() {<!-- [et_pb_line_break_holder] -->    const container = document.getElementById(\"slb-chart-luft\");<!-- [et_pb_line_break_holder] -->    const mobile = slbIsMobile();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const filtered = allData.filter(d => {<!-- [et_pb_line_break_holder] -->      if (d.parameter !== activeParam) return false;<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn===d.station);<!-- [et_pb_line_break_holder] -->      if (!info) return false;<!-- [et_pb_line_break_holder] -->      if (!activeTypes.has(normalizeTyp(info.typ?.trim()))) return false;<!-- [et_pb_line_break_holder] -->      if (<!-- [et_pb_line_break_holder] -->        activeKommun &&<!-- [et_pb_line_break_holder] -->        info.kommun !== activeKommun &&<!-- [et_pb_line_break_holder] -->        !isAlwaysShown(d.station, activeKommun) &&<!-- [et_pb_line_break_holder] -->        d.station !== URBAN_BACKGROUND_BY_KOMMUN[activeKommun]<!-- [et_pb_line_break_holder] -->      ) return false;<!-- [et_pb_line_break_holder] -->      return true;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    const now = new Date();<!-- [et_pb_line_break_holder] -->    const ago = new Date();<!-- [et_pb_line_break_holder] -->    ago.setHours(now.getHours() - 24);<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    if (!filtered.length) {<!-- [et_pb_line_break_holder] -->      Plotly.react(container, [], {<!-- [et_pb_line_break_holder] -->        paper_bgcolor:\"#fff\", plot_bgcolor:\"#fff\",<!-- [et_pb_line_break_holder] -->        annotations:[{text:\"Ingen data f\u00f6r valt urval\",xref:\"paper\",yref:\"paper\",<!-- [et_pb_line_break_holder] -->          x:0.5,y:0.5,showarrow:false,font:{family:\"Arial\",size:14,color:\"#999\"}}],<!-- [et_pb_line_break_holder] -->        xaxis:{visible:false},yaxis:{visible:false}<!-- [et_pb_line_break_holder] -->      }, {responsive:true,displayModeBar:false});<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const byStation = {};<!-- [et_pb_line_break_holder] -->    for (const d of filtered) {<!-- [et_pb_line_break_holder] -->      if (!byStation[d.station]) byStation[d.station]={x:[],y:[]};<!-- [et_pb_line_break_holder] -->      byStation[d.station].x.push(new Date(d.Datetime));<!-- [et_pb_line_break_holder] -->      byStation[d.station].y.push(d.value !== null && d.value < 0 ? 0.1 : d.value); \/\/byStation[d.station].y.push(d.value);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const stationEntries = Object.entries(byStation).map(([station, pts]) => {<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === station);<!-- [et_pb_line_break_holder] -->      const kommun = info?.kommun || \"\u00d6\";<!-- [et_pb_line_break_holder] -->      const shortName = shortNameMap[station] || station;<!-- [et_pb_line_break_holder] -->      return { station, pts, kommun, shortName };<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    stationEntries.sort(slbStationSortComparator);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const traces = stationEntries.map(({ station, pts, shortName, kommun }) => {<!-- [et_pb_line_break_holder] -->      const base = colorMap[station] || SLB_PALETTE[0];<!-- [et_pb_line_break_holder] -->      const darker = slbDarken(base, 0.35);<!-- [et_pb_line_break_holder] -->      return {<!-- [et_pb_line_break_holder] -->        type: \"scatter\", mode: \"lines+markers\", name: (activeKommun && CUSTOM_STATION_NAMES[station]) ? CUSTOM_STATION_NAMES[station] : `${shortName}, ${kommun}`,<!-- [et_pb_line_break_holder] -->        x: pts.x, y: pts.y,<!-- [et_pb_line_break_holder] -->        line: { color: darker, width: 1.2 },<!-- [et_pb_line_break_holder] -->        marker: { color: base, size: mobile ? 6 : 10, line: { color: darker, width: 0.5 } },<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>%{fullData.name}<\/b><!\u2013- [et_pb_br_holder] -\u2013>kl: %{x|%H:%M}<!\u2013- [et_pb_br_holder] -\u2013>Halt: %{y:.1f} \u03bcg\/m\u00b3<extra><\/extra>\",<!-- [et_pb_line_break_holder] -->        connectgaps: false<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const visCount = Object.keys(byStation).length;<!-- [et_pb_line_break_holder] -->    const lCols = Math.max(1, Math.floor(window.innerWidth\/120));<!-- [et_pb_line_break_holder] -->    const lRows = Math.ceil(visCount\/lCols);<!-- [et_pb_line_break_holder] -->    const lH = 50+lRows*5;<!-- [et_pb_line_break_holder] -->    const cH = container.offsetHeight||420;<!-- [et_pb_line_break_holder] -->    const lY = -(lH\/cH)-0.05;<!-- [et_pb_line_break_holder] -->    const titleFull = `${PARAM_LABELS[activeParam]||activeParam} (mikrogram per kubikmeter)`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let plotAgo = new Date(ago);<!-- [et_pb_line_break_holder] -->    let plotNow = new Date(now);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (isSwedishDST()) {<!-- [et_pb_line_break_holder] -->        plotAgo.setHours(plotAgo.getHours() + 1);<!-- [et_pb_line_break_holder] -->        plotNow.setHours(plotNow.getHours() + 1);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    Plotly.react(container, traces, {<!-- [et_pb_line_break_holder] -->      paper_bgcolor:\"#fff\", plot_bgcolor:\"#fff\",<!-- [et_pb_line_break_holder] -->      font:{family:\"Arial, Helvetica, sans-serif\",color:\"#444\",size:mobile?11:12},<!-- [et_pb_line_break_holder] -->      title:{text:mobile?titleFull.replace(\" (\",\"\\n(\"):titleFull,<!-- [et_pb_line_break_holder] -->        font:{size:mobile?14:15,color:\"#333\"},x:0.5,xanchor:\"center\"},<!-- [et_pb_line_break_holder] -->      margin:mobile?{t:32,r:12,b:lH+30,l:44}:{t:50,r:160,b:70,l:60},<!-- [et_pb_line_break_holder] -->      xaxis:{gridcolor:\"#e8e8e8\",linecolor:\"#ccc\",tickcolor:\"#ccc\",<!-- [et_pb_line_break_holder] -->        tickfont:{color:\"#555\",size:mobile?10:11},tickangle:-45,<!-- [et_pb_line_break_holder] -->        dtick:3600000*(mobile?4:2),tickformat:\"%H:%M\",showline:true,range: [plotAgo.getTime() - 2 * 3600000, plotNow]},<!-- [et_pb_line_break_holder] -->      yaxis:{gridcolor:\"#e8e8e8\",linecolor:\"#ccc\",tickcolor:\"#ccc\",<!-- [et_pb_line_break_holder] -->        tickfont:{color:\"#555\",size:mobile?10:11},rangemode:\"tozero\",showline:true,<!-- [et_pb_line_break_holder] -->        title:{text:\"\u03bcg\/m\u00b3\",font:{color:\"#555\",size:mobile?11:12}}},<!-- [et_pb_line_break_holder] -->      showlegend:true,<!-- [et_pb_line_break_holder] -->      legend:mobile<!-- [et_pb_line_break_holder] -->        ?{bgcolor:\"rgba(255,255,255,0)\",borderwidth:0,font:{color:\"#333\",size:10,family:\"Arial\"},<!-- [et_pb_line_break_holder] -->          orientation:\"h\",x:0,xanchor:\"left\",y:lY,yanchor:\"top\",tracegroupgap:4}<!-- [et_pb_line_break_holder] -->        :{title:{text:\"M\u00e4tstation\",font:{size:12,color:\"#333\"}},<!-- [et_pb_line_break_holder] -->          bgcolor:\"rgba(255,255,255,0.9)\",bordercolor:\"#FFFFFF\",borderwidth:1,<!-- [et_pb_line_break_holder] -->          font:{color:\"#333\",size:11,family:\"Arial\"},x:1.01,xanchor:\"left\",y:1,yanchor:\"top\"},<!-- [et_pb_line_break_holder] -->      hovermode:\"closest\",<!-- [et_pb_line_break_holder] -->    }, {responsive:true,displayModeBar:false});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    new ResizeObserver(()=>Plotly.Plots.resize(container)).observe(container);<!-- [et_pb_line_break_holder] -->    updateStationTypeButtons();<!-- [et_pb_line_break_holder] -->    renderSummary();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function loadDailyAverages() {<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const relevant = allStations.filter(s =><!-- [et_pb_line_break_holder] -->        [\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\",\"Landsbygd\",\"Tak\",\"\u00d6ppen v\u00e4g\"].includes(s.typ?.trim())<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const results = await Promise.all(Object.keys(PARAM_LABELS).map(param => {<!-- [et_pb_line_break_holder] -->        const stns = relevant<!-- [et_pb_line_break_holder] -->          .filter(s => allTimeseries.some(t => t.Stationsnamn===s.Stationsnamn && t.Parameter===param))<!-- [et_pb_line_break_holder] -->          .map(s => s.Stationsnamn);<!-- [et_pb_line_break_holder] -->        if (!stns.length) return Promise.resolve(null);<!-- [et_pb_line_break_holder] -->        const url = `${BASE}\/get-timeseries\/?key=${KEY}`<!-- [et_pb_line_break_holder] -->          + `&stations=${encodeURIComponent(stns.join(\",\"))}`<!-- [et_pb_line_break_holder] -->          + `&parameters=${param}&format=fast&resolution=d&date_range=15`;<!-- [et_pb_line_break_holder] -->        return slbFetchJSON(url).catch(e => { console.warn(\"14-dagarsanrop misslyckades:\", param, e); return null; });<!-- [et_pb_line_break_holder] -->      }));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const raw = [];<!-- [et_pb_line_break_holder] -->      const daySet = new Set();<!-- [et_pb_line_break_holder] -->      results.forEach((d, i) => {<!-- [et_pb_line_break_holder] -->        const param = Object.keys(PARAM_LABELS)[i];<!-- [et_pb_line_break_holder] -->        if (!d || !d.Datetime) return;<!-- [et_pb_line_break_holder] -->        d.Datetime.forEach(dt => daySet.add(String(dt).slice(0, 10)));<!-- [et_pb_line_break_holder] -->        Object.entries(d).forEach(([key, values]) => {<!-- [et_pb_line_break_holder] -->          if (key === \"Datetime\") return;<!-- [et_pb_line_break_holder] -->          const station = key.replace(\/^[^:]+:\\s*\/, \"\").trim();<!-- [et_pb_line_break_holder] -->          d.Datetime.forEach((dt, idx) => {<!-- [et_pb_line_break_holder] -->            const value = values[idx];<!-- [et_pb_line_break_holder] -->            if (value === null || value === undefined) return;<!-- [et_pb_line_break_holder] -->            raw.push({ station, parameter: param, day: String(dt).slice(0, 10), value });<!-- [et_pb_line_break_holder] -->          });<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      \/\/ Dagsintervallet h\u00e4rleds ur svaret (ist\u00e4llet f\u00f6r att r\u00e4knas fram lokalt), s\u00e5 det alltid matchar exakt det som date_range=15 faktiskt gav tillbaka.<!-- [et_pb_line_break_holder] -->      dailyDayRange = Array.from(daySet).sort();<!-- [et_pb_line_break_holder] -->      dailyAllData = raw.filter(d => !EXCLUDED_STATIONS.has(d.station));<!-- [et_pb_line_break_holder] -->      dailyDataLoaded = true;<!-- [et_pb_line_break_holder] -->      if (activeView === \"14dagar\") renderLuftDaily();<!-- [et_pb_line_break_holder] -->    } catch (e) {<!-- [et_pb_line_break_holder] -->      dailyDataLoaded = true; \/\/ datan finns inte men laddningsf\u00f6rs\u00f6ket \u00e4r klart \u2014 sluta visa \"laddar\"<!-- [et_pb_line_break_holder] -->      console.warn(\"Kunde inte ladda dygnsmedelv\u00e4rden (14 dagar):\", e);<!-- [et_pb_line_break_holder] -->      if (activeView === \"14dagar\") renderLuftDaily();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderLuftDaily() {<!-- [et_pb_line_break_holder] -->    const container = document.getElementById(\"slb-chart-luft\");<!-- [et_pb_line_break_holder] -->    const mobile = slbIsMobile();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const filtered = dailyAllData.filter(d => {<!-- [et_pb_line_break_holder] -->      if (d.parameter !== activeParam) return false;<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === d.station);<!-- [et_pb_line_break_holder] -->      if (!info) return false;<!-- [et_pb_line_break_holder] -->      if (!activeTypes.has(normalizeTyp(info.typ?.trim()))) return false;<!-- [et_pb_line_break_holder] -->      if (<!-- [et_pb_line_break_holder] -->        activeKommun &&<!-- [et_pb_line_break_holder] -->        info.kommun !== activeKommun &&<!-- [et_pb_line_break_holder] -->        !isAlwaysShown(d.station, activeKommun) &&<!-- [et_pb_line_break_holder] -->        d.station !== URBAN_BACKGROUND_BY_KOMMUN[activeKommun]<!-- [et_pb_line_break_holder] -->      ) return false;<!-- [et_pb_line_break_holder] -->      return true;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (!filtered.length) {<!-- [et_pb_line_break_holder] -->      const text = dailyDataLoaded ? \"Ingen data f\u00f6r valt urval\" : \"Laddar dygnsmedelv\u00e4rden \u2026\";<!-- [et_pb_line_break_holder] -->      Plotly.react(container, [], {<!-- [et_pb_line_break_holder] -->        paper_bgcolor:\"#fff\", plot_bgcolor:\"#fff\",<!-- [et_pb_line_break_holder] -->        annotations:[{text,xref:\"paper\",yref:\"paper\",<!-- [et_pb_line_break_holder] -->          x:0.5,y:0.5,showarrow:false,font:{family:\"Arial\",size:14,color:\"#999\"}}],<!-- [et_pb_line_break_holder] -->        xaxis:{visible:false},yaxis:{visible:false}<!-- [et_pb_line_break_holder] -->      }, {responsive:true,displayModeBar:false});<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const byStationValues = {};<!-- [et_pb_line_break_holder] -->    for (const d of filtered) {<!-- [et_pb_line_break_holder] -->      if (!byStationValues[d.station]) byStationValues[d.station] = {};<!-- [et_pb_line_break_holder] -->      byStationValues[d.station][d.day] = d.value < 0 ? 0.1 : d.value;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const daysWithData = new Set(filtered.map(d => d.day));<!-- [et_pb_line_break_holder] -->    const firstIdx = dailyDayRange.findIndex(day => daysWithData.has(day));<!-- [et_pb_line_break_holder] -->    const lastIdx = dailyDayRange.length - 1 - [...dailyDayRange].reverse().findIndex(day => daysWithData.has(day));<!-- [et_pb_line_break_holder] -->    const dayRange = (firstIdx === -1)<!-- [et_pb_line_break_holder] -->      ? filtered.map(d => d.day)<!-- [et_pb_line_break_holder] -->      : dailyDayRange.slice(firstIdx, lastIdx + 1);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const byStation = {};<!-- [et_pb_line_break_holder] -->    Object.entries(byStationValues).forEach(([station, dayValues]) => {<!-- [et_pb_line_break_holder] -->      byStation[station] = {<!-- [et_pb_line_break_holder] -->        x: dayRange,<!-- [et_pb_line_break_holder] -->        y: dayRange.map(day => (day in dayValues) ? dayValues[day] : null)<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const stationEntries = Object.entries(byStation).map(([station, pts]) => {<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === station);<!-- [et_pb_line_break_holder] -->      const kommun = info?.kommun || \"\u00d6\";<!-- [et_pb_line_break_holder] -->      const shortName = shortNameMap[station] || station;<!-- [et_pb_line_break_holder] -->      return { station, pts, kommun, shortName };<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    stationEntries.sort(slbStationSortComparator);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const traces = stationEntries.map(({ station, pts, shortName, kommun }) => {<!-- [et_pb_line_break_holder] -->      const base = colorMap[station] || SLB_PALETTE[0];<!-- [et_pb_line_break_holder] -->      const darker = slbDarken(base, 0.35);<!-- [et_pb_line_break_holder] -->      return {<!-- [et_pb_line_break_holder] -->        type: \"scatter\", mode: \"lines+markers\",<!-- [et_pb_line_break_holder] -->        name: (activeKommun && CUSTOM_STATION_NAMES[station]) ? CUSTOM_STATION_NAMES[station] : `${shortName}, ${kommun}`,<!-- [et_pb_line_break_holder] -->        x: pts.x, y: pts.y,<!-- [et_pb_line_break_holder] -->        connectgaps: false,<!-- [et_pb_line_break_holder] -->        line: { color: darker, width: 1.2 },<!-- [et_pb_line_break_holder] -->        marker: { color: base, size: mobile ? 6 : 10, line: { color: darker, width: 0.5 } },<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>%{fullData.name}<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x}<!\u2013- [et_pb_br_holder] -\u2013>Dygnsmedel: %{y:.1f} \u03bcg\/m\u00b3<extra><\/extra>\",<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const titleFull = `${PARAM_LABELS[activeParam]||activeParam} \u2014 dygnsmedelv\u00e4rden, 14 dagar (mikrogram per kubikmeter)`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    Plotly.react(container, traces, {<!-- [et_pb_line_break_holder] -->      paper_bgcolor:\"#fff\", plot_bgcolor:\"#fff\",<!-- [et_pb_line_break_holder] -->      font:{family:\"Arial, Helvetica, sans-serif\",color:\"#444\",size:mobile?11:12},<!-- [et_pb_line_break_holder] -->      title:{text:mobile?titleFull.replace(\" (\",\"\\n(\"):titleFull,<!-- [et_pb_line_break_holder] -->        font:{size:mobile?14:15,color:\"#333\"},x:0.5,xanchor:\"center\"},<!-- [et_pb_line_break_holder] -->      margin:mobile?{t:40,r:12,b:110,l:44}:{t:50,r:160,b:90,l:60},<!-- [et_pb_line_break_holder] -->      xaxis:{gridcolor:\"#e8e8e8\",linecolor:\"#ccc\",tickcolor:\"#ccc\",<!-- [et_pb_line_break_holder] -->        tickfont:{color:\"#555\",size:mobile?10:11},tickangle:-45,type:\"category\"},<!-- [et_pb_line_break_holder] -->      yaxis:{gridcolor:\"#e8e8e8\",linecolor:\"#ccc\",tickcolor:\"#ccc\",<!-- [et_pb_line_break_holder] -->        tickfont:{color:\"#555\",size:mobile?10:11},rangemode:\"tozero\",showline:true,<!-- [et_pb_line_break_holder] -->        title:{text:\"\u03bcg\/m\u00b3\",font:{color:\"#555\",size:mobile?11:12}}},<!-- [et_pb_line_break_holder] -->      showlegend:true,<!-- [et_pb_line_break_holder] -->      legend:mobile<!-- [et_pb_line_break_holder] -->        ?{bgcolor:\"rgba(255,255,255,0)\",borderwidth:0,font:{color:\"#333\",size:10,family:\"Arial\"},<!-- [et_pb_line_break_holder] -->          orientation:\"h\",x:0,xanchor:\"left\",y:-0.5,yanchor:\"top\",tracegroupgap:4}<!-- [et_pb_line_break_holder] -->        :{title:{text:\"M\u00e4tstation\",font:{size:12,color:\"#333\"}},<!-- [et_pb_line_break_holder] -->          bgcolor:\"rgba(255,255,255,0.9)\",bordercolor:\"#FFFFFF\",borderwidth:1,<!-- [et_pb_line_break_holder] -->          font:{color:\"#333\",size:11,family:\"Arial\"},x:1.01,xanchor:\"left\",y:1,yanchor:\"top\"},<!-- [et_pb_line_break_holder] -->      hovermode:\"closest\",<!-- [et_pb_line_break_holder] -->    }, {responsive:true,displayModeBar:false});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    new ResizeObserver(()=>Plotly.Plots.resize(container)).observe(container);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderActiveView() {<!-- [et_pb_line_break_holder] -->    if (activeView === \"14dagar\") renderLuftDaily(); else renderLuft();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-luft-paramTabs\").addEventListener(\"click\", e => {<!-- [et_pb_line_break_holder] -->    const tab = e.target.closest(\".slb-param-tab\"); <!-- [et_pb_line_break_holder] -->    if(!tab) return;<!-- [et_pb_line_break_holder] -->    document.querySelectorAll(\"#slb-luft-paramTabs .slb-param-tab\").forEach(t => {<!-- [et_pb_line_break_holder] -->      t.classList.remove(\"slb-active\");<!-- [et_pb_line_break_holder] -->      t.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    tab.classList.add(\"slb-active\");<!-- [et_pb_line_break_holder] -->    tab.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->    activeParam = tab.dataset.param;<!-- [et_pb_line_break_holder] -->    renderActiveView();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.querySelectorAll(\".slb-station-toggle[data-panel='luft']\").forEach(btn => {<!-- [et_pb_line_break_holder] -->    btn.addEventListener(\"click\", ()=>{<!-- [et_pb_line_break_holder] -->      const typ=btn.dataset.type;<!-- [et_pb_line_break_holder] -->      if(activeTypes.has(typ)){<!-- [et_pb_line_break_holder] -->        activeTypes.delete(typ);<!-- [et_pb_line_break_holder] -->        btn.classList.add(\"slb-inactive\");<!-- [et_pb_line_break_holder] -->        btn.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->      } else{<!-- [et_pb_line_break_holder] -->        activeTypes.add(typ);<!-- [et_pb_line_break_holder] -->        btn.classList.remove(\"slb-inactive\");<!-- [et_pb_line_break_holder] -->        btn.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      renderActiveView();<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-luft-kommunSelect\").addEventListener(\"change\", e => {<!-- [et_pb_line_break_holder] -->    activeKommun = e.target.value;<!-- [et_pb_line_break_holder] -->    updateLuftKommunIntro(activeKommun);<!-- [et_pb_line_break_holder] -->    updateKommunNotice(\"slb-luft-kommun-notice\", activeKommun);<!-- [et_pb_line_break_holder] -->    updateParamTabsVisibility();<!-- [et_pb_line_break_holder] -->    renderActiveView();<!-- [et_pb_line_break_holder] -->    loadPrognos();<!-- [et_pb_line_break_holder] -->    SlbKommunState.set(activeKommun, \"luft\");<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  SlbKommunState.onChange((kommun, source) => {<!-- [et_pb_line_break_holder] -->    if (source === \"luft\") return;<!-- [et_pb_line_break_holder] -->    activeKommun = kommun;<!-- [et_pb_line_break_holder] -->    document.getElementById(\"slb-luft-kommunSelect\").value = kommun;<!-- [et_pb_line_break_holder] -->    updateLuftKommunIntro(activeKommun);<!-- [et_pb_line_break_holder] -->    updateKommunNotice(\"slb-luft-kommun-notice\", activeKommun);<!-- [et_pb_line_break_holder] -->    updateParamTabsVisibility();<!-- [et_pb_line_break_holder] -->    renderActiveView();<!-- [et_pb_line_break_holder] -->    loadPrognos();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-luft-dag-toggle\").addEventListener(\"click\", e => {<!-- [et_pb_line_break_holder] -->    const btn = e.target.closest(\".slb-param-tab\");<!-- [et_pb_line_break_holder] -->    if (!btn) return;<!-- [et_pb_line_break_holder] -->    document.querySelectorAll(\"#slb-luft-dag-toggle .slb-param-tab\").forEach(b => {<!-- [et_pb_line_break_holder] -->      b.classList.remove(\"slb-active\");<!-- [et_pb_line_break_holder] -->      b.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    btn.classList.add(\"slb-active\");<!-- [et_pb_line_break_holder] -->    btn.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->    activeDag = btn.dataset.dag;<!-- [et_pb_line_break_holder] -->    renderSummary();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-luft-view-toggle\").addEventListener(\"click\", e => {<!-- [et_pb_line_break_holder] -->    const btn = e.target.closest(\"[data-view]\");<!-- [et_pb_line_break_holder] -->    if (!btn || btn.disabled) return;<!-- [et_pb_line_break_holder] -->    document.querySelectorAll(\"#slb-luft-view-toggle .slb-param-tab\").forEach(b => {<!-- [et_pb_line_break_holder] -->      b.classList.toggle(\"slb-active\", b === btn);<!-- [et_pb_line_break_holder] -->      b.setAttribute(\"aria-pressed\", b === btn ? \"true\" : \"false\");<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    activeView = btn.dataset.view;<!-- [et_pb_line_break_holder] -->    renderActiveView();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  loadAll();<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->   PANEL 2 \u2014 MKN<!-- [et_pb_line_break_holder] -->   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->(function() {<!-- [et_pb_line_break_holder] -->  const BASE = \"https:\/\/open.slb.nu\/api\/timeseries\/v1.1b\/\";<!-- [et_pb_line_break_holder] -->  const KEY  = \"lvl1\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const CURRENT_YEAR = new Date().getFullYear();<!-- [et_pb_line_break_holder] -->  const YEARS = [CURRENT_YEAR-2, CURRENT_YEAR-1, CURRENT_YEAR];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ \u00c5rsmedelv\u00e4rde tittar fem hela \u00e5r bak\u00e5t, INNEVARANDE \u00e5r exkluderat<!-- [et_pb_line_break_holder] -->  const YEARS_ARSMEDEL = [CURRENT_YEAR-5, CURRENT_YEAR-4, CURRENT_YEAR-3, CURRENT_YEAR-2, CURRENT_YEAR-1];<!-- [et_pb_line_break_holder] -->  const ARSMEDEL_NORMS = new Set([\"no2_arsmedel_mkn\", \"pm10_arsmedel_mkn\", \"pm25_arsmedel_mkn\"]);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Statiska gr\u00e4nsv\u00e4rden (\u00b5g\/m\u00b3) som referenslinjer i \u00e5rsmedel-grafen<!-- [et_pb_line_break_holder] -->  const ARSMEDEL_LIMITS = {<!-- [et_pb_line_break_holder] -->    NO2:     { befintlig: 40, eu: 20, miljomal: 20 },<!-- [et_pb_line_break_holder] -->    PM10:    { befintlig: 40, eu: 20, miljomal: 15 },<!-- [et_pb_line_break_holder] -->    \"PM2.5\": { befintlig: 25, eu: 10, miljomal: 10 },<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const NORM_CONFIGS = {<!-- [et_pb_line_break_holder] -->    pm10_mkn_dygn:      {title:\"PM10 \u2014 Antal dygn med halter mer \u00e4n 50 \u00b5g\/m\u00b3\",  limitLabel:\"Gr\u00e4nsv\u00e4rde: max 35 dygn > 50 \u00b5g\/m\u00b3\",    param:\"PM10\",  threshold:50, maxAllowed:35,  resolution:\"daily\"},<!-- [et_pb_line_break_holder] -->    pm10_mkn_dygn_2030: {title:\"PM10 \u2014 Antal dygn med halter mer \u00e4n 45 \u00b5g\/m\u00b3\",  limitLabel:\"Gr\u00e4nsv\u00e4rde 2030: max 18 dygn > 45 \u00b5g\/m\u00b3\", param:\"PM10\",  threshold:45, maxAllowed:18,  resolution:\"daily\"},<!-- [et_pb_line_break_holder] -->    pm10_miljmal_dygn:  {title:\"PM10 \u2014 Antal dygn med halter mer \u00e4n 30 \u00b5g\/m\u00b3\",  limitLabel:\"Milj\u00f6m\u00e5l: max 35 dygn > 30 \u00b5g\/m\u00b3\",        param:\"PM10\",  threshold:30, maxAllowed:35,  resolution:\"daily\"},<!-- [et_pb_line_break_holder] -->    pm25_mkn_dygn_2030: {title:\"PM2.5 \u2014 Antal dygn med halter mer \u00e4n 25 \u00b5g\/m\u00b3\", limitLabel:\"Gr\u00e4nsv\u00e4rde 2030: max 18 dygn > 25 \u00b5g\/m\u00b3\", param:\"PM2.5\", threshold:25, maxAllowed:18,  resolution:\"daily\"},<!-- [et_pb_line_break_holder] -->    no2_mkn_dygn:       {title:\"NO\u2082 \u2014 Antal dygn med halter mer \u00e4n 60 \u00b5g\/m\u00b3\",   limitLabel:\"Gr\u00e4nsv\u00e4rde: max 7 dygn > 60 \u00b5g\/m\u00b3\",      param:\"NO2\",   threshold:60, maxAllowed:7,   resolution:\"daily\"},<!-- [et_pb_line_break_holder] -->    no2_mkn_dygn_2026:  {title:\"NO\u2082 \u2014 Antal dygn med halter mer \u00e4n 50 \u00b5g\/m\u00b3\",   limitLabel:\"Gr\u00e4nsv\u00e4rde 2026: max 18 dygn > 50 \u00b5g\/m\u00b3\", param:\"NO2\",   threshold:50, maxAllowed:18,  resolution:\"daily\"},<!-- [et_pb_line_break_holder] -->    no2_mkn_timmar:     {title:\"NO\u2082 \u2014 Antal timmar med halter mer \u00e4n 90 \u00b5g\/m\u00b3\",  limitLabel:\"Gr\u00e4nsv\u00e4rde: max 175 timmar > 90 \u00b5g\/m\u00b3\",  param:\"NO2\",   threshold:90, maxAllowed:175, resolution:\"hourly\"},<!-- [et_pb_line_break_holder] -->    no2_miljmal_timmar: {title:\"NO\u2082 \u2014 Antal timmar med halter mer \u00e4n 60 \u00b5g\/m\u00b3\",  limitLabel:\"Milj\u00f6m\u00e5l: max 175 timmar > 60 \u00b5g\/m\u00b3\",    param:\"NO2\",   threshold:60, maxAllowed:175, resolution:\"hourly\"},<!-- [et_pb_line_break_holder] -->    no2_arsmedel_mkn:   {title:\"NO\u2082 \u2014 \u00c5rsmedelv\u00e4rde\",  param:\"NO2\",   resolution:\"yearly\"},<!-- [et_pb_line_break_holder] -->    pm10_arsmedel_mkn:  {title:\"PM10 \u2014 \u00c5rsmedelv\u00e4rde\", param:\"PM10\",  resolution:\"yearly\"},<!-- [et_pb_line_break_holder] -->    pm25_arsmedel_mkn:  {title:\"PM2.5 \u2014 \u00c5rsmedelv\u00e4rde\", param:\"PM2.5\", resolution:\"yearly\"},<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const FILTER_TREE = {<!-- [et_pb_line_break_holder] -->    PM10: {<!-- [et_pb_line_break_holder] -->      befintlig: { norm: \"pm10_mkn_dygn\"      },<!-- [et_pb_line_break_holder] -->      eu:        { norm: \"pm10_mkn_dygn_2030\"  },<!-- [et_pb_line_break_holder] -->      miljomal:  { norm: \"pm10_miljmal_dygn\"   },<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    \"PM2.5\": {<!-- [et_pb_line_break_holder] -->      eu:        { norm: \"pm25_mkn_dygn_2030\"  },<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->    NO2: {<!-- [et_pb_line_break_holder] -->      befintlig: { dygn: \"no2_mkn_dygn\", timmar: \"no2_mkn_timmar\" },<!-- [et_pb_line_break_holder] -->      eu:        { norm: \"no2_mkn_dygn_2026\"   },<!-- [et_pb_line_break_holder] -->      miljomal:  { norm: \"no2_miljmal_timmar\"  },<!-- [et_pb_line_break_holder] -->    },<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const ARSMEDEL_NORM_BY_PARAM = {<!-- [et_pb_line_break_holder] -->    NO2: \"no2_arsmedel_mkn\",<!-- [et_pb_line_break_holder] -->    PM10: \"pm10_arsmedel_mkn\",<!-- [et_pb_line_break_holder] -->    \"PM2.5\": \"pm25_arsmedel_mkn\",<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const GRANSVARDE_LABELS = {<!-- [et_pb_line_break_holder] -->    befintlig: \"Befintlig MKN\",<!-- [et_pb_line_break_holder] -->    eu:        \"EU-gr\u00e4nsv\u00e4rde\",<!-- [et_pb_line_break_holder] -->    miljomal:  \"Milj\u00f6kvalitetsm\u00e5l\",<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let state = {<!-- [et_pb_line_break_holder] -->    amne:        \"PM10\",<!-- [et_pb_line_break_holder] -->    gransvarde:  \"befintlig\",<!-- [et_pb_line_break_holder] -->    res:         \"dygn\",<!-- [et_pb_line_break_holder] -->    ar:          CURRENT_YEAR,<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let allStations = [];<!-- [et_pb_line_break_holder] -->  let apiCache    = {};<!-- [et_pb_line_break_holder] -->  let colorMap    = {}, shortNameMap = {};<!-- [et_pb_line_break_holder] -->  let activeTypes = new Set([\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\",\"Landsbygd\",\"Tak\",\"\u00d6ppen v\u00e4g\"]);<!-- [et_pb_line_break_holder] -->  let activeKommun = \"\";<!-- [et_pb_line_break_holder] -->  let stationInfoByShortName = {};<!-- [et_pb_line_break_holder] -->  let activeStationNames = [];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function shortStationInfoName(full) {<!-- [et_pb_line_break_holder] -->    if (!full) return \"\";<!-- [et_pb_line_break_holder] -->    const i = full.indexOf(\",\");<!-- [et_pb_line_break_holder] -->    return (i === -1 ? full : full.slice(0, i)).trim();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function loadStationInfo() {<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const info = await slbFetchJSON(`${BASE}\/get-station-info\/?key=${KEY}`);<!-- [et_pb_line_break_holder] -->      stationInfoByShortName = {};<!-- [et_pb_line_break_holder] -->      (info || []).forEach(si => {<!-- [et_pb_line_break_holder] -->        const key = shortStationInfoName(si.Station);<!-- [et_pb_line_break_holder] -->        if (key) stationInfoByShortName[key] = si;<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    } catch (e) {<!-- [et_pb_line_break_holder] -->      \/\/ Kan inte h\u00e4mta stationsinfo \u2014 visa allt annat<!-- [et_pb_line_break_holder] -->      console.warn(\"Kunde inte h\u00e4mta get-station-info:\", e.message);<!-- [et_pb_line_break_holder] -->      stationInfoByShortName = null;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Station som inte hittas i get-station-info r\u00e4knas som inaktiv<!-- [et_pb_line_break_holder] -->  function isStationActive(stationsnamn) {<!-- [et_pb_line_break_holder] -->    if (stationInfoByShortName === null) return true;<!-- [et_pb_line_break_holder] -->    const info = stationInfoByShortName[stationsnamn];<!-- [et_pb_line_break_holder] -->    if (!info) return true;<!-- [et_pb_line_break_holder] -->    return info.Aktiv !== false;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function resolveNorm() {<!-- [et_pb_line_break_holder] -->    if (state.res === \"arsmedel\") {<!-- [et_pb_line_break_holder] -->      return ARSMEDEL_NORM_BY_PARAM[state.amne] || null;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    const branch = FILTER_TREE[state.amne]?.[state.gransvarde];<!-- [et_pb_line_break_holder] -->    if (!branch) return null;<!-- [et_pb_line_break_holder] -->    if (branch.norm) return branch.norm;<!-- [et_pb_line_break_holder] -->    return state.res === \"timmar\" ? branch.timmar : branch.dygn;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  const mknTooltipEl = document.getElementById(\"slb-mkn-tooltip\");<!-- [et_pb_line_break_holder] -->  function slbShowMknTooltip(e, text) {<!-- [et_pb_line_break_holder] -->    if (!mknTooltipEl || !text) return;<!-- [et_pb_line_break_holder] -->    mknTooltipEl.textContent = text;<!-- [et_pb_line_break_holder] -->    mknTooltipEl.classList.add(\"slb-dl-tooltip-visible\");<!-- [et_pb_line_break_holder] -->    mknTooltipEl.setAttribute(\"aria-hidden\", \"false\");<!-- [et_pb_line_break_holder] -->    slbMoveMknTooltip(e);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function slbMoveMknTooltip(e) {<!-- [et_pb_line_break_holder] -->    if (!mknTooltipEl) return;<!-- [et_pb_line_break_holder] -->    mknTooltipEl.style.left = (e.clientX + 12) + \"px\";<!-- [et_pb_line_break_holder] -->    mknTooltipEl.style.top  = (e.clientY + 12) + \"px\";<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function slbHideMknTooltip() {<!-- [et_pb_line_break_holder] -->    if (!mknTooltipEl) return;<!-- [et_pb_line_break_holder] -->    mknTooltipEl.classList.remove(\"slb-dl-tooltip-visible\");<!-- [et_pb_line_break_holder] -->    mknTooltipEl.setAttribute(\"aria-hidden\", \"true\");<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ F\u00f6rklarande hovertext f\u00f6r utgr\u00e5ade Gr\u00e4nsv\u00e4rde-knappar<!-- [et_pb_line_break_holder] -->  const GRANSVARDE_UNAVAILABLE_MSG = {<!-- [et_pb_line_break_holder] -->    befintlig: amne => `Det finns ingen Befintlig MKN-norm f\u00f6r ${amne}.`,<!-- [et_pb_line_break_holder] -->    eu:        amne => `Det finns inget EU-gr\u00e4nsv\u00e4rde f\u00f6r ${amne}.`,<!-- [et_pb_line_break_holder] -->    miljomal:  amne => `Det finns inget milj\u00f6kvalitetsm\u00e5l f\u00f6r ${amne}.`,<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderGransvardebtns() {<!-- [et_pb_line_break_holder] -->    const container = document.getElementById(\"mkn-gransvarde-btns\");<!-- [et_pb_line_break_holder] -->    container.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->    const tree = FILTER_TREE[state.amne] || {};<!-- [et_pb_line_break_holder] -->    Object.keys(GRANSVARDE_LABELS).forEach(gid => {<!-- [et_pb_line_break_holder] -->      const hasDygnTimmar   = !!tree[gid];<!-- [et_pb_line_break_holder] -->      const hasArsmedelLimit = ARSMEDEL_LIMITS[state.amne]?.[gid] !== undefined;<!-- [et_pb_line_break_holder] -->      const enabled = state.res === \"arsmedel\" ? hasArsmedelLimit : hasDygnTimmar;<!-- [et_pb_line_break_holder] -->      const looksActive = enabled && (state.res === \"arsmedel\" || gid === state.gransvarde);<!-- [et_pb_line_break_holder] -->      const btn = document.createElement(\"button\");<!-- [et_pb_line_break_holder] -->      btn.className = \"slb-param-tab\" + (looksActive ? \" slb-active\" : \"\") + (enabled ? \"\" : \" slb-unavailable\");<!-- [et_pb_line_break_holder] -->      btn.dataset.gransvarde = gid;<!-- [et_pb_line_break_holder] -->      btn.textContent = GRANSVARDE_LABELS[gid];<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-pressed\", looksActive ? \"true\" : \"false\");<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-disabled\", enabled ? \"false\" : \"true\");<!-- [et_pb_line_break_holder] -->      if (enabled) {<!-- [et_pb_line_break_holder] -->        btn.addEventListener(\"click\", () => pickGransvarde(gid));<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        const msgFn = GRANSVARDE_UNAVAILABLE_MSG[gid];<!-- [et_pb_line_break_holder] -->        const msg = msgFn ? msgFn(state.amne) : `Det finns inget \"${GRANSVARDE_LABELS[gid]}\" f\u00f6r ${state.amne}.`;<!-- [et_pb_line_break_holder] -->        btn.addEventListener(\"mouseenter\", e => slbShowMknTooltip(e, msg));<!-- [et_pb_line_break_holder] -->        btn.addEventListener(\"mousemove\",  e => slbMoveMknTooltip(e));<!-- [et_pb_line_break_holder] -->        btn.addEventListener(\"mouseleave\", slbHideMknTooltip);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      container.appendChild(btn);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const RES_OPTIONS_FIXED = [<!-- [et_pb_line_break_holder] -->    { res:\"dygn\",     label:\"Dygn\"          },<!-- [et_pb_line_break_holder] -->    { res:\"timmar\",   label:\"Timmar\"        },<!-- [et_pb_line_break_holder] -->    { res:\"arsmedel\", label:\"\u00c5rsmedelv\u00e4rde\" },<!-- [et_pb_line_break_holder] -->  ];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const RES_LABEL_LC = { dygn: \"dygnsuppl\u00f6sning\", timmar: \"timuppl\u00f6sning\", arsmedel: \"\u00e5rsmedelv\u00e4rde\" };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function getValidResSet(branch) {<!-- [et_pb_line_break_holder] -->    const valid = new Set();<!-- [et_pb_line_break_holder] -->    if (branch?.dygn)   valid.add(\"dygn\");<!-- [et_pb_line_break_holder] -->    if (branch?.timmar) valid.add(\"timmar\");<!-- [et_pb_line_break_holder] -->    if (branch?.norm) {<!-- [et_pb_line_break_holder] -->      const cfg = NORM_CONFIGS[branch.norm];<!-- [et_pb_line_break_holder] -->      valid.add(cfg?.resolution === \"hourly\" ? \"timmar\" : \"dygn\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    if (ARSMEDEL_NORM_BY_PARAM[state.amne]) valid.add(\"arsmedel\");<!-- [et_pb_line_break_holder] -->    return valid;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function getUnionValidResSet(tree) {<!-- [et_pb_line_break_holder] -->    const valid = new Set();<!-- [et_pb_line_break_holder] -->    Object.values(tree).forEach(b => {<!-- [et_pb_line_break_holder] -->      getValidResSet(b).forEach(r => valid.add(r));<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    if (ARSMEDEL_NORM_BY_PARAM[state.amne]) valid.add(\"arsmedel\");<!-- [et_pb_line_break_holder] -->    return valid;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function findGransvardeSupporting(tree, res) {<!-- [et_pb_line_break_holder] -->    return Object.keys(tree).find(gid => getValidResSet(tree[gid]).has(res));<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderUppl\u00f6sningBtns() {<!-- [et_pb_line_break_holder] -->    const group     = document.getElementById(\"mkn-uppl\u00f6sning-group\");<!-- [et_pb_line_break_holder] -->    const container = document.getElementById(\"mkn-uppl\u00f6sning-btns\");<!-- [et_pb_line_break_holder] -->    container.innerHTML = \"\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const tree = FILTER_TREE[state.amne] || {};<!-- [et_pb_line_break_holder] -->    const branch = tree[state.gransvarde];<!-- [et_pb_line_break_holder] -->    const validRes = state.res === \"arsmedel\" ? getUnionValidResSet(tree) : getValidResSet(branch);<!-- [et_pb_line_break_holder] -->    const gLabel = GRANSVARDE_LABELS[state.gransvarde] || state.gransvarde;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (!validRes.has(state.res)) {<!-- [et_pb_line_break_holder] -->      state.res = RES_OPTIONS_FIXED.find(o => validRes.has(o.res))?.res || \"dygn\";<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    RES_OPTIONS_FIXED.forEach(o => {<!-- [et_pb_line_break_holder] -->      const enabled = validRes.has(o.res);<!-- [et_pb_line_break_holder] -->      const btn = document.createElement(\"button\");<!-- [et_pb_line_break_holder] -->      btn.className = \"slb-param-tab\" + (o.res === state.res ? \" slb-active\" : \"\") + (enabled ? \"\" : \" slb-unavailable\");<!-- [et_pb_line_break_holder] -->      btn.dataset.res = o.res;<!-- [et_pb_line_break_holder] -->      btn.textContent = o.label;<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-pressed\", o.res === state.res ? \"true\" : \"false\");<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-disabled\", enabled ? \"false\" : \"true\");<!-- [et_pb_line_break_holder] -->      if (enabled) {<!-- [et_pb_line_break_holder] -->        btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->          state.res = o.res;<!-- [et_pb_line_break_holder] -->          if (o.res !== \"arsmedel\" && !getValidResSet(tree[state.gransvarde]).has(o.res)) {<!-- [et_pb_line_break_holder] -->            const fallbackGid = findGransvardeSupporting(tree, o.res);<!-- [et_pb_line_break_holder] -->            if (fallbackGid) state.gransvarde = fallbackGid;<!-- [et_pb_line_break_holder] -->          }<!-- [et_pb_line_break_holder] -->          renderGransvardebtns();<!-- [et_pb_line_break_holder] -->          renderUppl\u00f6sningBtns();<!-- [et_pb_line_break_holder] -->          updateArGroupVisibility();<!-- [et_pb_line_break_holder] -->          switchNorm();<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        const msg = `Det finns ingen ${RES_LABEL_LC[o.res] || o.res} f\u00f6r ${state.amne} \u2014 ${gLabel}.`;<!-- [et_pb_line_break_holder] -->        btn.addEventListener(\"mouseenter\", e => slbShowMknTooltip(e, msg));<!-- [et_pb_line_break_holder] -->        btn.addEventListener(\"mousemove\",  e => slbMoveMknTooltip(e));<!-- [et_pb_line_break_holder] -->        btn.addEventListener(\"mouseleave\", slbHideMknTooltip);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      container.appendChild(btn);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    group.classList.remove(\"mkn-hidden\");<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function updateArGroupVisibility() {<!-- [et_pb_line_break_holder] -->    const group = document.getElementById(\"mkn-ar-group\");<!-- [et_pb_line_break_holder] -->    if (group) group.classList.toggle(\"mkn-invisible\", state.res === \"arsmedel\");<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderArbtnss() {<!-- [et_pb_line_break_holder] -->    const container = document.getElementById(\"mkn-ar-btns\");<!-- [et_pb_line_break_holder] -->    container.innerHTML = \"\";<!-- [et_pb_line_break_holder] -->    YEARS.forEach(y => {<!-- [et_pb_line_break_holder] -->      const btn = document.createElement(\"button\");<!-- [et_pb_line_break_holder] -->      btn.className = \"slb-param-tab\" + (y === state.ar ? \" slb-active\" : \"\");<!-- [et_pb_line_break_holder] -->      btn.dataset.ar = y;<!-- [et_pb_line_break_holder] -->      btn.textContent = y;<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-pressed\", y === state.ar ? \"true\" : \"false\");<!-- [et_pb_line_break_holder] -->      btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->        state.ar = y;<!-- [et_pb_line_break_holder] -->        document.querySelectorAll(\"#mkn-ar-btns .slb-param-tab\").forEach(b => {<!-- [et_pb_line_break_holder] -->          const active = parseInt(b.dataset.ar) === state.ar;<!-- [et_pb_line_break_holder] -->          b.classList.toggle(\"slb-active\", active);<!-- [et_pb_line_break_holder] -->          b.setAttribute(\"aria-pressed\", active ? \"true\" : \"false\");<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->        renderMkn();<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      container.appendChild(btn);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function pickAmne(amne) {<!-- [et_pb_line_break_holder] -->    state.amne = amne;<!-- [et_pb_line_break_holder] -->    const tree = FILTER_TREE[amne] || {};<!-- [et_pb_line_break_holder] -->    if (!tree[state.gransvarde]) {<!-- [et_pb_line_break_holder] -->      state.gransvarde = Object.keys(tree)[0] || null;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    document.querySelectorAll(\"#mkn-amne-btns .slb-param-tab\").forEach(b => {<!-- [et_pb_line_break_holder] -->      const active = b.dataset.amne === state.amne;<!-- [et_pb_line_break_holder] -->      b.classList.toggle(\"slb-active\", active);<!-- [et_pb_line_break_holder] -->      b.setAttribute(\"aria-pressed\", active ? \"true\" : \"false\");<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    renderGransvardebtns();<!-- [et_pb_line_break_holder] -->    renderUppl\u00f6sningBtns();<!-- [et_pb_line_break_holder] -->    updateArGroupVisibility();<!-- [et_pb_line_break_holder] -->    switchNorm();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function pickGransvarde(gid) {<!-- [et_pb_line_break_holder] -->    state.gransvarde = gid;<!-- [et_pb_line_break_holder] -->    renderGransvardebtns();<!-- [et_pb_line_break_holder] -->    renderUppl\u00f6sningBtns();<!-- [et_pb_line_break_holder] -->    updateArGroupVisibility();<!-- [et_pb_line_break_holder] -->    switchNorm();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.querySelectorAll(\"#mkn-amne-btns .slb-param-tab\").forEach(btn => {<!-- [et_pb_line_break_holder] -->    btn.addEventListener(\"click\", () => pickAmne(btn.dataset.amne));<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function fetchExceedances(normKey) {<!-- [et_pb_line_break_holder] -->    if (apiCache[normKey]) return apiCache[normKey];<!-- [et_pb_line_break_holder] -->    const yearsParam = ARSMEDEL_NORMS.has(normKey) ? YEARS_ARSMEDEL : YEARS;<!-- [et_pb_line_break_holder] -->    const isArsmedel = ARSMEDEL_NORMS.has(normKey);<!-- [et_pb_line_break_holder] -->    let url = `${BASE}\/get-exceedances\/?key=${KEY}&norm=${normKey}&years=${yearsParam.join(\",\")}`;<!-- [et_pb_line_break_holder] -->    \/\/ \u00c5rsmedel-normerna: skicka med endast aktiva stationer s\u00e5 att backend inte kraschar p\u00e5 avvecklade stationer med trasig metadata (t.ex. Birkakorset)<!-- [et_pb_line_break_holder] -->    if (isArsmedel && activeStationNames.length) {<!-- [et_pb_line_break_holder] -->      url += `&stations=${activeStationNames.map(encodeURIComponent).join(\",\")}`;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      apiCache[normKey] = await slbFetchJSON(url);<!-- [et_pb_line_break_holder] -->      return apiCache[normKey];<!-- [et_pb_line_break_holder] -->    } catch (e) {<!-- [et_pb_line_break_holder] -->      if (!isArsmedel || !activeStationNames.length) throw e;<!-- [et_pb_line_break_holder] -->      console.warn(`[${normKey}] Batch-anrop misslyckades (${e.message}), f\u00f6rs\u00f6ker station f\u00f6r station...`);<!-- [et_pb_line_break_holder] -->      apiCache[normKey] = await fetchExceedancesPerStation(normKey, yearsParam);<!-- [et_pb_line_break_holder] -->      return apiCache[normKey];<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function fetchExceedancesPerStation(normKey, yearsParam) {<!-- [et_pb_line_break_holder] -->    const results = await Promise.allSettled(<!-- [et_pb_line_break_holder] -->      activeStationNames.map(stationName => {<!-- [et_pb_line_break_holder] -->        const url = `${BASE}\/get-exceedances\/?key=${KEY}&norm=${normKey}&years=${yearsParam.join(\",\")}&stations=${encodeURIComponent(stationName)}`;<!-- [et_pb_line_break_holder] -->        return slbFetchJSON(url);<!-- [et_pb_line_break_holder] -->      })<!-- [et_pb_line_break_holder] -->    );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let merged = null;<!-- [et_pb_line_break_holder] -->    results.forEach((r, i) => {<!-- [et_pb_line_break_holder] -->      if (r.status === \"fulfilled\") {<!-- [et_pb_line_break_holder] -->        if (!merged) merged = { ...r.value, data: {} };<!-- [et_pb_line_break_holder] -->        Object.assign(merged.data, r.value.data || {});<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        console.warn(`[${normKey}] Kunde inte h\u00e4mta data f\u00f6r \"${activeStationNames[i]}\", utesluter station:`, r.reason?.message);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    return merged || { norm: normKey, label: normKey, data: {} };<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function recomputeExceedances(normData, threshold) {<!-- [et_pb_line_break_holder] -->    for (const stationData of Object.values(normData.data)) {<!-- [et_pb_line_break_holder] -->      const byYear = {};<!-- [et_pb_line_break_holder] -->      for (const p of stationData.cumulative) {<!-- [et_pb_line_break_holder] -->        const yr = p.date.slice(0, 4);<!-- [et_pb_line_break_holder] -->        if (!byYear[yr]) byYear[yr] = [];<!-- [et_pb_line_break_holder] -->        byYear[yr].push(p);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      for (const pts of Object.values(byYear)) {<!-- [et_pb_line_break_holder] -->        let count = 0;<!-- [et_pb_line_break_holder] -->        for (const p of pts) {<!-- [et_pb_line_break_holder] -->          const exc = p.value !== null && p.value > threshold;<!-- [et_pb_line_break_holder] -->          if (exc) count++;<!-- [et_pb_line_break_holder] -->          p.exceeded = exc;<!-- [et_pb_line_break_holder] -->          p.cumulative_count = count;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      for (const [yr, pts] of Object.entries(byYear)) {<!-- [et_pb_line_break_holder] -->        stationData.total_by_year[yr] = pts[pts.length - 1]?.cumulative_count ?? 0;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function switchNorm() {<!-- [et_pb_line_break_holder] -->    const normKey = resolveNorm();<!-- [et_pb_line_break_holder] -->    if (!normKey) return;<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-mkn-loading\", true);<!-- [et_pb_line_break_holder] -->    slbHideErrorNotice(\"slb-mkn-api-error-notice\");<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      if (!apiCache[normKey]) await fetchExceedances(normKey);<!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      slbShowErrorNotice(\"slb-mkn-api-error-notice\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-mkn-loading\", false);<!-- [et_pb_line_break_holder] -->    renderMkn();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function loadAll() {<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-mkn-loading\", true);<!-- [et_pb_line_break_holder] -->    slbHideErrorNotice(\"slb-mkn-api-error-notice\");<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      allStations = await slbFetchJSON(`${BASE}\/list-stations\/?key=${KEY}`);<!-- [et_pb_line_break_holder] -->      colorMap    = slbBuildColorMap(allStations);<!-- [et_pb_line_break_holder] -->      shortNameMap = slbBuildShortNameMap(allStations);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      await loadStationInfo();<!-- [et_pb_line_break_holder] -->      activeStationNames = allStations<!-- [et_pb_line_break_holder] -->        .map(s => s.Stationsnamn)<!-- [et_pb_line_break_holder] -->        .filter(Boolean)<!-- [et_pb_line_break_holder] -->        .filter(isStationActive);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      renderArbtnss();<!-- [et_pb_line_break_holder] -->      renderGransvardebtns();<!-- [et_pb_line_break_holder] -->      renderUppl\u00f6sningBtns();<!-- [et_pb_line_break_holder] -->      updateArGroupVisibility();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const KOMMUN_ALIAS = { \"Visby\": \"Gotland\" };<!-- [et_pb_line_break_holder] -->      const mknKommuner = [...new Set(<!-- [et_pb_line_break_holder] -->        allStations<!-- [et_pb_line_break_holder] -->          .filter(s => [\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\",\"Landsbygd\",\"Tak\",\"\u00d6ppen v\u00e4g\"].includes(s.typ?.trim()))<!-- [et_pb_line_break_holder] -->          .map(s => s.kommun)<!-- [et_pb_line_break_holder] -->          .filter(Boolean)<!-- [et_pb_line_break_holder] -->      )].sort((a, b) => (KOMMUN_ALIAS[a] || a).localeCompare(KOMMUN_ALIAS[b] || b, \"sv\", { sensitivity: \"base\" }));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const mknKommunSel = document.getElementById(\"slb-mkn-kommunSelect\");<!-- [et_pb_line_break_holder] -->      mknKommunSel.innerHTML = `<!-- [et_pb_line_break_holder] --><option value=\"\">Alla kommuner<\/option><!-- [et_pb_line_break_holder] --><option value=\"Stockholm\" selected>Stockholm<\/option><!-- [et_pb_line_break_holder] -->      `;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      mknKommuner<!-- [et_pb_line_break_holder] -->        .filter(k => k !== \"Stockholm\")<!-- [et_pb_line_break_holder] -->        .forEach(k => {<!-- [et_pb_line_break_holder] -->          const opt = document.createElement(\"option\");<!-- [et_pb_line_break_holder] -->          opt.value = k;<!-- [et_pb_line_break_holder] -->          opt.textContent = KOMMUN_ALIAS[k] || k;<!-- [et_pb_line_break_holder] -->          mknKommunSel.appendChild(opt);<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->      activeKommun = \"Stockholm\";<!-- [et_pb_line_break_holder] -->      const raw = SLB_INITIAL_KOMMUN_RAW;<!-- [et_pb_line_break_holder] -->      if (raw) {<!-- [et_pb_line_break_holder] -->        if (raw.toLowerCase() === \"alla\") {<!-- [et_pb_line_break_holder] -->          mknKommunSel.value = \"\";<!-- [et_pb_line_break_holder] -->          activeKommun = \"\";<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->          const match = [...mknKommunSel.options].find(o =><!-- [et_pb_line_break_holder] -->            o.value.toLowerCase() === raw.toLowerCase()<!-- [et_pb_line_break_holder] -->          );<!-- [et_pb_line_break_holder] -->          if (match) {<!-- [et_pb_line_break_holder] -->            mknKommunSel.value = match.value;<!-- [et_pb_line_break_holder] -->            activeKommun = match.value;<!-- [et_pb_line_break_holder] -->          }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      SlbKommunState.set(activeKommun, \"mkn\");<!-- [et_pb_line_break_holder] -->      updateKommunNotice(\"slb-mkn-kommun-notice\", activeKommun);<!-- [et_pb_line_break_holder] -->      const startNorm = resolveNorm();<!-- [et_pb_line_break_holder] -->      if (startNorm) await fetchExceedances(startNorm);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const cnt = allStations.filter(s =><!-- [et_pb_line_break_holder] -->        [\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\",\"Landsbygd\",\"Tak\",\"\u00d6ppen v\u00e4g\"].includes(s.typ?.trim())).length;<!-- [et_pb_line_break_holder] -->      \/\/slbSetStatus(\"slb-mkn-status\", `Laddade ${cnt} stationer`);<!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      slbShowErrorNotice(\"slb-mkn-api-error-notice\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-mkn-loading\", false);<!-- [et_pb_line_break_holder] -->    renderMkn();<!-- [et_pb_line_break_holder] -->    window._slbMknReady = true;<!-- [et_pb_line_break_holder] -->    prefetchAll();<!-- [et_pb_line_break_holder] -->    let rt;<!-- [et_pb_line_break_holder] -->    window.addEventListener(\"resize\", () => { clearTimeout(rt); rt=setTimeout(renderMkn, 150); });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function prefetchAll() {<!-- [et_pb_line_break_holder] -->    for (const normKey of Object.keys(NORM_CONFIGS)) {<!-- [et_pb_line_break_holder] -->      try { await fetchExceedances(normKey); } catch(e) {}<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function updateMknStationTypeButtons(normData) {<!-- [et_pb_line_break_holder] -->    const typesInData = new Set();<!-- [et_pb_line_break_holder] -->    if (normData && normData.data) {<!-- [et_pb_line_break_holder] -->      for (const stationName of Object.keys(normData.data)) {<!-- [et_pb_line_break_holder] -->        if (EXCLUDED_STATIONS.has(stationName)) continue;<!-- [et_pb_line_break_holder] -->        if (!isStationActive(stationName)) continue;<!-- [et_pb_line_break_holder] -->        const info = allStations.find(s => s.Stationsnamn === stationName);<!-- [et_pb_line_break_holder] -->        if (!info || !info.typ) continue;<!-- [et_pb_line_break_holder] -->        if (activeKommun && info.kommun !== activeKommun) continue;<!-- [et_pb_line_break_holder] -->        typesInData.add(normalizeTyp(info.typ.trim()));<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    document.querySelectorAll(\".slb-station-toggle[data-panel='mkn']\").forEach(btn => {<!-- [et_pb_line_break_holder] -->      const hasType = typesInData.has(btn.dataset.type);<!-- [et_pb_line_break_holder] -->      btn.style.display = hasType ? \"\" : \"none\";<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderMkn() {<!-- [et_pb_line_break_holder] -->    const normKey  = resolveNorm();<!-- [et_pb_line_break_holder] -->    const container = document.getElementById(\"slb-chart-mkn\");<!-- [et_pb_line_break_holder] -->    if (!normKey) {<!-- [et_pb_line_break_holder] -->      Plotly.react(container,[],{<!-- [et_pb_line_break_holder] -->        paper_bgcolor:\"#fff\",plot_bgcolor:\"#fff\",<!-- [et_pb_line_break_holder] -->        annotations:[{text:\"Ogiltigt urval\",xref:\"paper\",yref:\"paper\",<!-- [et_pb_line_break_holder] -->          x:0.5,y:0.5,showarrow:false,font:{size:14,color:\"#999\",family:\"Arial\"}}],<!-- [et_pb_line_break_holder] -->        xaxis:{visible:false},yaxis:{visible:false}<!-- [et_pb_line_break_holder] -->      },{responsive:true,displayModeBar:false});<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const config   = NORM_CONFIGS[normKey];<!-- [et_pb_line_break_holder] -->    const mobile   = slbIsMobile();<!-- [et_pb_line_break_holder] -->    const normData = apiCache[normKey] || null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (!normData || !normData.data || !Object.keys(normData.data).length) {<!-- [et_pb_line_break_holder] -->      Plotly.react(container,[],{<!-- [et_pb_line_break_holder] -->        paper_bgcolor:\"#fff\",plot_bgcolor:\"#fff\",<!-- [et_pb_line_break_holder] -->        annotations:[{text:\"Ingen data\",xref:\"paper\",yref:\"paper\",<!-- [et_pb_line_break_holder] -->          x:0.5,y:0.5,showarrow:false,font:{size:14,color:\"#999\",family:\"Arial\"}}],<!-- [et_pb_line_break_holder] -->          xaxis:{visible:false},yaxis:{visible:false}<!-- [et_pb_line_break_holder] -->      },{responsive:true,displayModeBar:false});<!-- [et_pb_line_break_holder] -->      updateMknStationTypeButtons(null);<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    updateMknStationTypeButtons(normData);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (config.resolution === \"yearly\") {<!-- [et_pb_line_break_holder] -->      renderMknArsmedel(normData, config);<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    recomputeExceedances(normData, config.threshold);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const {resolution, max_allowed: maxAllowed} = normData;<!-- [et_pb_line_break_holder] -->    const traces = [];<!-- [et_pb_line_break_holder] -->    const visibleStations = Object.keys(normData.data).filter(n => {<!-- [et_pb_line_break_holder] -->      if (EXCLUDED_STATIONS.has(n)) return false;<!-- [et_pb_line_break_holder] -->      if (!isStationActive(n)) return false;<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === n);<!-- [et_pb_line_break_holder] -->      if (!info || !info.typ || !activeTypes.has(normalizeTyp(info.typ.trim()))) return false;<!-- [et_pb_line_break_holder] -->      if (activeKommun && info.kommun !== activeKommun) return false;<!-- [et_pb_line_break_holder] -->      return true;<!-- [et_pb_line_break_holder] -->    }).map(n => {<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === n);<!-- [et_pb_line_break_holder] -->      return {<!-- [et_pb_line_break_holder] -->        name: n,<!-- [et_pb_line_break_holder] -->        kommun: info?.kommun || \"\u00d6\",<!-- [et_pb_line_break_holder] -->        shortName: shortNameMap[n] || n,<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->    }).sort((a, b) => {<!-- [et_pb_line_break_holder] -->      const aIsSthlm = a.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] -->      const bIsSthlm = b.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] -->      if (aIsSthlm && !bIsSthlm) return -1;<!-- [et_pb_line_break_holder] -->      if (!aIsSthlm && bIsSthlm) return 1;<!-- [et_pb_line_break_holder] -->      const kommunCmp = a.kommun.localeCompare(b.kommun, \"sv\");<!-- [et_pb_line_break_holder] -->      if (kommunCmp !== 0) return kommunCmp;<!-- [et_pb_line_break_holder] -->      return a.shortName.localeCompare(b.shortName, \"sv\");<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const actualMax = Math.max(0, ...visibleStations.flatMap(({ name: n }) =><!-- [et_pb_line_break_holder] -->      (normData.data[n]?.cumulative || [])<!-- [et_pb_line_break_holder] -->        .filter(p => parseInt(p.date.slice(0,4)) === state.ar)<!-- [et_pb_line_break_holder] -->        .map(p => p.cumulative_count)<!-- [et_pb_line_break_holder] -->    ));<!-- [et_pb_line_break_holder] -->    const yMax = actualMax > config.maxAllowed \/ 0.8<!-- [et_pb_line_break_holder] -->      ? actualMax \/ 0.9<!-- [et_pb_line_break_holder] -->      : config.maxAllowed \/ 0.8;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    traces.push({<!-- [et_pb_line_break_holder] -->      type:\"scatter\", mode:\"lines\", name:config.limitLabel, legendgroup:\"__limit__\",<!-- [et_pb_line_break_holder] -->      x:[new Date(`${state.ar}-01-01`), new Date(`${state.ar+1}-01-01`)],<!-- [et_pb_line_break_holder] -->      y:[config.maxAllowed, config.maxAllowed],<!-- [et_pb_line_break_holder] -->      line:{color:\"#333\",width:2,dash:\"dash\"},<!-- [et_pb_line_break_holder] -->      hovertemplate:`<b>${config.limitLabel}<\/b><extra><\/extra>`,<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    for (const { name: stationName, kommun, shortName: sName } of visibleStations) {<!-- [et_pb_line_break_holder] -->      const stationData = normData.data[stationName];<!-- [et_pb_line_break_holder] -->      const base   = colorMap[stationName] || SLB_PALETTE[0];<!-- [et_pb_line_break_holder] -->      const darker = slbDarken(base, 0.2);<!-- [et_pb_line_break_holder] -->      const points = stationData.cumulative.filter(p =><!-- [et_pb_line_break_holder] -->        parseInt(p.date.slice(0,4)) === state.ar);<!-- [et_pb_line_break_holder] -->      if (!points.length) continue;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const legendName = `${sName}, ${kommun}`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      traces.push({<!-- [et_pb_line_break_holder] -->        type:\"scatter\", mode:\"lines\",<!-- [et_pb_line_break_holder] -->        x: points.map(p => new Date(p.date)),<!-- [et_pb_line_break_holder] -->        y: points.map(p => p.cumulative_count),<!-- [et_pb_line_break_holder] -->        line:{ color:darker, width:3, shape:\"hv\" },<!-- [et_pb_line_break_holder] -->        hoverinfo:\"skip\", showlegend:false, legendgroup:stationName<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      traces.push({<!-- [et_pb_line_break_holder] -->        type:\"scatter\", mode:\"lines\",<!-- [et_pb_line_break_holder] -->        name: legendName,<!-- [et_pb_line_break_holder] -->        legendgroup: stationName, showlegend:true,<!-- [et_pb_line_break_holder] -->        x: points.map(p => new Date(p.date)),<!-- [et_pb_line_break_holder] -->        y: points.map(p => p.cumulative_count),<!-- [et_pb_line_break_holder] -->        line:{ color:base, width:2, shape:\"hv\" },<!-- [et_pb_line_break_holder] -->        hovertemplate:<!-- [et_pb_line_break_holder] -->          `<b>${legendName}<\/b> (${state.ar})<!\u2013- [et_pb_br_holder] -\u2013>`<!-- [et_pb_line_break_holder] -->          + (resolution===\"daily\" ? \"Datum: %{x|%Y-%m-%d}\" : \"Tidpunkt: %{x|%Y-%m-%d %H:%M}\")<!-- [et_pb_line_break_holder] -->          + \"<!\u2013- [et_pb_br_holder] -\u2013>\u00d6verskridanden: %{y}<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const exceeded = points.filter(p => p.exceeded);<!-- [et_pb_line_break_holder] -->      if (exceeded.length) {<!-- [et_pb_line_break_holder] -->        traces.push({<!-- [et_pb_line_break_holder] -->          type:\"scatter\", mode:\"markers\",<!-- [et_pb_line_break_holder] -->          name: legendName,<!-- [et_pb_line_break_holder] -->          legendgroup:stationName, showlegend:false,<!-- [et_pb_line_break_holder] -->          x: exceeded.map(p => new Date(p.date)),<!-- [et_pb_line_break_holder] -->          y: exceeded.map(p => p.cumulative_count),<!-- [et_pb_line_break_holder] -->          marker:{ size:1, color:base },<!-- [et_pb_line_break_holder] -->          hovertemplate:<!-- [et_pb_line_break_holder] -->            `<b>${legendName}<\/b> (${state.ar})<!\u2013- [et_pb_br_holder] -\u2013>`<!-- [et_pb_line_break_holder] -->            + \"Datum: %{x|%Y-%m-%d}<!\u2013- [et_pb_br_holder] -\u2013>\u00d6verskridande nr: %{y}<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const visCount = visibleStations.length + 1;<!-- [et_pb_line_break_holder] -->    const lCols = Math.max(1, Math.floor(window.innerWidth\/120));<!-- [et_pb_line_break_holder] -->    const lRows = Math.ceil(visCount\/lCols);<!-- [et_pb_line_break_holder] -->    const lH    = 50 + lRows * 5;<!-- [et_pb_line_break_holder] -->    const cH    = container.offsetHeight || 420;<!-- [et_pb_line_break_holder] -->    const lY    = -(lH\/cH) - 0.05;<!-- [et_pb_line_break_holder] -->    const titleText = mobile ? config.title.replace(\" \u2014 \",\"<!\u2013- [et_pb_br_holder] -\u2013>\") : config.title;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    Plotly.react(container, traces, {<!-- [et_pb_line_break_holder] -->      paper_bgcolor:\"#fff\", plot_bgcolor:\"#fff\",<!-- [et_pb_line_break_holder] -->      font:{family:\"Arial, Helvetica, sans-serif\",color:\"#444\",size:mobile?11:12},<!-- [et_pb_line_break_holder] -->      title:{text:titleText, font:{size:mobile?14:15,color:\"#333\"}, x:0.5, xanchor:\"center\"},<!-- [et_pb_line_break_holder] -->      margin:mobile?{t:32,r:12,b:lH+30,l:44}:{t:50,r:160,b:70,l:60},<!-- [et_pb_line_break_holder] -->      xaxis:{<!-- [et_pb_line_break_holder] -->        gridcolor:\"#e8e8e8\", linecolor:\"#ccc\", tickcolor:\"#ccc\",<!-- [et_pb_line_break_holder] -->        tickfont:{color:\"#555\",size:mobile?10:11}, tickangle:-45,<!-- [et_pb_line_break_holder] -->        range:[`${state.ar}-01-01`,`${state.ar+1}-01-01`], showline:true,<!-- [et_pb_line_break_holder] -->        nticks:mobile?6:undefined<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis:{<!-- [et_pb_line_break_holder] -->        gridcolor:\"#e8e8e8\", linecolor:\"#ccc\", tickcolor:\"#ccc\",<!-- [et_pb_line_break_holder] -->        tickfont:{color:\"#555\",size:mobile?10:11},<!-- [et_pb_line_break_holder] -->        range:[0, yMax], fixedrange:true, showline:true,<!-- [et_pb_line_break_holder] -->        title:{<!-- [et_pb_line_break_holder] -->          text: resolution===\"daily\" ? \"Antal dygn\" : \"Antal timmar\",<!-- [et_pb_line_break_holder] -->          font:{color:\"#555\",size:mobile?11:12}<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      showlegend:true,<!-- [et_pb_line_break_holder] -->      legend:mobile<!-- [et_pb_line_break_holder] -->        ?{title:{text:\"\",font:{size:11,color:\"#333\"}},bgcolor:\"rgba(255,255,255,0)\",borderwidth:0,<!-- [et_pb_line_break_holder] -->          font:{color:\"#333\",size:10,family:\"Arial\"},orientation:\"h\",<!-- [et_pb_line_break_holder] -->          x:0,xanchor:\"left\",y:lY,yanchor:\"top\",tracegroupgap:4}<!-- [et_pb_line_break_holder] -->        :{title:{text:\"M\u00e4tstation\",font:{size:12,color:\"#333\"}},bgcolor:\"rgba(255,255,255,0)\",borderwidth:0,<!-- [et_pb_line_break_holder] -->          font:{color:\"#333\",size:11,family:\"Arial\"},<!-- [et_pb_line_break_holder] -->          x:1.01,xanchor:\"left\",y:1,yanchor:\"top\",tracegroupgap:0},<!-- [et_pb_line_break_holder] -->      hovermode:\"closest\",<!-- [et_pb_line_break_holder] -->    },{responsive:true,displayModeBar:false});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    new ResizeObserver(()=>Plotly.Plots.resize(container)).observe(container);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const ARSMEDEL_LIMIT_STYLES = {<!-- [et_pb_line_break_holder] -->    befintlig: { color: \"#333333\", dash: \"dash\"    },<!-- [et_pb_line_break_holder] -->    eu:        { color: \"#c0392b\", dash: \"dot\"     },<!-- [et_pb_line_break_holder] -->    miljomal:  { color: \"#1e8449\", dash: \"dashdot\" },<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderMknArsmedel(normData, config) {<!-- [et_pb_line_break_holder] -->    const container = document.getElementById(\"slb-chart-mkn\");<!-- [et_pb_line_break_holder] -->    const mobile     = slbIsMobile();<!-- [et_pb_line_break_holder] -->    const limits     = ARSMEDEL_LIMITS[config.param] || {};<!-- [et_pb_line_break_holder] -->    const years      = YEARS_ARSMEDEL;<!-- [et_pb_line_break_holder] -->    const xRange     = [years[0] - 0.5, years[years.length - 1] + 0.5];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const visibleStations = Object.keys(normData.data).filter(n => {<!-- [et_pb_line_break_holder] -->      if (EXCLUDED_STATIONS.has(n)) return false;<!-- [et_pb_line_break_holder] -->      if (!isStationActive(n)) return false;<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === n);<!-- [et_pb_line_break_holder] -->      if (!info || !info.typ || !activeTypes.has(normalizeTyp(info.typ.trim()))) return false;<!-- [et_pb_line_break_holder] -->      if (activeKommun && info.kommun !== activeKommun) return false;<!-- [et_pb_line_break_holder] -->      return true;<!-- [et_pb_line_break_holder] -->    }).map(n => {<!-- [et_pb_line_break_holder] -->      const info = allStations.find(s => s.Stationsnamn === n);<!-- [et_pb_line_break_holder] -->      return { name: n, kommun: info?.kommun || \"\u00d6\", shortName: shortNameMap[n] || n };<!-- [et_pb_line_break_holder] -->    }).sort((a, b) => {<!-- [et_pb_line_break_holder] -->      const aIsSthlm = a.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] -->      const bIsSthlm = b.kommun === \"Stockholm\";<!-- [et_pb_line_break_holder] -->      if (aIsSthlm && !bIsSthlm) return -1;<!-- [et_pb_line_break_holder] -->      if (!aIsSthlm && bIsSthlm) return 1;<!-- [et_pb_line_break_holder] -->      const kommunCmp = a.kommun.localeCompare(b.kommun, \"sv\");<!-- [et_pb_line_break_holder] -->      if (kommunCmp !== 0) return kommunCmp;<!-- [et_pb_line_break_holder] -->      return a.shortName.localeCompare(b.shortName, \"sv\");<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const traces = [];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    [\"befintlig\", \"eu\", \"miljomal\"].forEach(gid => {<!-- [et_pb_line_break_holder] -->      const limitValue = limits[gid];<!-- [et_pb_line_break_holder] -->      if (limitValue === undefined) return;<!-- [et_pb_line_break_holder] -->      const style = ARSMEDEL_LIMIT_STYLES[gid];<!-- [et_pb_line_break_holder] -->      const label = `${GRANSVARDE_LABELS[gid] || gid} (${limitValue} \u00b5g\/m\u00b3)`;<!-- [et_pb_line_break_holder] -->      traces.push({<!-- [et_pb_line_break_holder] -->        type:\"scatter\", mode:\"lines\", name:label, legendgroup:`__limit_${gid}__`,<!-- [et_pb_line_break_holder] -->        x:[xRange[0], xRange[1]], y:[limitValue, limitValue],<!-- [et_pb_line_break_holder] -->        line:{color:style.color, width:2, dash:style.dash},<!-- [et_pb_line_break_holder] -->        hovertemplate:`<b>${label}<\/b><extra><\/extra>`,<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let dataMax = 0;<!-- [et_pb_line_break_holder] -->    for (const { name: stationName, kommun, shortName: sName } of visibleStations) {<!-- [et_pb_line_break_holder] -->      const stationData = normData.data[stationName];<!-- [et_pb_line_break_holder] -->      \/\/ Stationer\/\u00e5r med valid:false eller mean:null utel\u00e4mnas helt<!-- [et_pb_line_break_holder] -->      const pts = (stationData?.annual || [])<!-- [et_pb_line_break_holder] -->        .filter(p => p.valid && p.mean !== null)<!-- [et_pb_line_break_holder] -->        .sort((a, b) => a.year - b.year);<!-- [et_pb_line_break_holder] -->      if (!pts.length) continue;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const base   = colorMap[stationName] || SLB_PALETTE[0];<!-- [et_pb_line_break_holder] -->      const darker = slbDarken(base, 0.2);<!-- [et_pb_line_break_holder] -->      const legendName = `${sName}, ${kommun}`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      dataMax = Math.max(dataMax, ...pts.map(p => p.mean));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      traces.push({<!-- [et_pb_line_break_holder] -->        type:\"scatter\", mode:\"lines\",<!-- [et_pb_line_break_holder] -->        x: pts.map(p => p.year), y: pts.map(p => p.mean),<!-- [et_pb_line_break_holder] -->        line:{ color:darker, width:3 },<!-- [et_pb_line_break_holder] -->        hoverinfo:\"skip\", showlegend:false, legendgroup:stationName, connectgaps:false<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      traces.push({<!-- [et_pb_line_break_holder] -->        type:\"scatter\", mode:\"lines\",<!-- [et_pb_line_break_holder] -->        name: legendName,<!-- [et_pb_line_break_holder] -->        legendgroup: stationName, showlegend:true,<!-- [et_pb_line_break_holder] -->        x: pts.map(p => p.year), y: pts.map(p => p.mean),<!-- [et_pb_line_break_holder] -->        line:{ color:base, width:2 },<!-- [et_pb_line_break_holder] -->        connectgaps:false,<!-- [et_pb_line_break_holder] -->        hovertemplate:`<b>${legendName}<\/b><!\u2013- [et_pb_br_holder] -\u2013>\u00c5r: %{x}<!\u2013- [et_pb_br_holder] -\u2013>\u00c5rsmedel: %{y:.1f} \u00b5g\/m\u00b3<extra><\/extra>`<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const visCount = visibleStations.length + 3;<!-- [et_pb_line_break_holder] -->    const lCols = Math.max(1, Math.floor(window.innerWidth\/120));<!-- [et_pb_line_break_holder] -->    const lRows = Math.ceil(visCount\/lCols);<!-- [et_pb_line_break_holder] -->    const lH    = 50 + lRows * 5;<!-- [et_pb_line_break_holder] -->    const cH    = container.offsetHeight || 420;<!-- [et_pb_line_break_holder] -->    const lY    = -(lH\/cH) - 0.05;<!-- [et_pb_line_break_holder] -->    const titleText = mobile ? config.title.replace(\" \u2014 \",\"<!\u2013- [et_pb_br_holder] -\u2013>\") : config.title;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const axisAnchor = limits.befintlig ?? 0;<!-- [et_pb_line_break_holder] -->    const yMax = Math.max(axisAnchor, dataMax) * 1.15;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    Plotly.react(container, traces, {<!-- [et_pb_line_break_holder] -->      paper_bgcolor:\"#fff\", plot_bgcolor:\"#fff\",<!-- [et_pb_line_break_holder] -->      font:{family:\"Arial, Helvetica, sans-serif\",color:\"#444\",size:mobile?11:12},<!-- [et_pb_line_break_holder] -->      title:{text:titleText, font:{size:mobile?14:15,color:\"#333\"}, x:0.5, xanchor:\"center\"},<!-- [et_pb_line_break_holder] -->      margin:mobile?{t:32,r:12,b:lH+30,l:44}:{t:50,r:160,b:70,l:60},<!-- [et_pb_line_break_holder] -->      xaxis:{<!-- [et_pb_line_break_holder] -->        gridcolor:\"#e8e8e8\", linecolor:\"#ccc\", tickcolor:\"#ccc\",<!-- [et_pb_line_break_holder] -->        tickfont:{color:\"#555\",size:mobile?10:11},<!-- [et_pb_line_break_holder] -->        tickmode:\"array\", tickvals:years, ticktext:years.map(String),<!-- [et_pb_line_break_holder] -->        range:xRange, showline:true,<!-- [et_pb_line_break_holder] -->        title:{text:\"\u00c5r\", font:{color:\"#555\",size:mobile?11:12}}<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis:{<!-- [et_pb_line_break_holder] -->        gridcolor:\"#e8e8e8\", linecolor:\"#ccc\", tickcolor:\"#ccc\",<!-- [et_pb_line_break_holder] -->        tickfont:{color:\"#555\",size:mobile?10:11},<!-- [et_pb_line_break_holder] -->        range:[0, yMax], fixedrange:true, showline:true,<!-- [et_pb_line_break_holder] -->        title:{text:\"\u00b5g\/m\u00b3\", font:{color:\"#555\",size:mobile?11:12}}<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      showlegend:true,<!-- [et_pb_line_break_holder] -->      legend:mobile<!-- [et_pb_line_break_holder] -->        ?{title:{text:\"\",font:{size:11,color:\"#333\"}},bgcolor:\"rgba(255,255,255,0)\",borderwidth:0,<!-- [et_pb_line_break_holder] -->          font:{color:\"#333\",size:10,family:\"Arial\"},orientation:\"h\",<!-- [et_pb_line_break_holder] -->          x:0,xanchor:\"left\",y:lY,yanchor:\"top\",tracegroupgap:4}<!-- [et_pb_line_break_holder] -->        :{title:{text:\"M\u00e4tstation\",font:{size:12,color:\"#333\"}},bgcolor:\"rgba(255,255,255,0)\",borderwidth:0,<!-- [et_pb_line_break_holder] -->          font:{color:\"#333\",size:11,family:\"Arial\"},<!-- [et_pb_line_break_holder] -->          x:1.01,xanchor:\"left\",y:1,yanchor:\"top\",tracegroupgap:0},<!-- [et_pb_line_break_holder] -->      hovermode:\"closest\",<!-- [et_pb_line_break_holder] -->    },{responsive:true,displayModeBar:false});<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    new ResizeObserver(()=>Plotly.Plots.resize(container)).observe(container);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.querySelectorAll(\".slb-station-toggle[data-panel='mkn']\").forEach(btn => {<!-- [et_pb_line_break_holder] -->    btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->      const typ = btn.dataset.type;<!-- [et_pb_line_break_holder] -->      if (activeTypes.has(typ)) { <!-- [et_pb_line_break_holder] -->        activeTypes.delete(typ); <!-- [et_pb_line_break_holder] -->        btn.classList.add(\"slb-inactive\");<!-- [et_pb_line_break_holder] -->        btn.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->      } else { <!-- [et_pb_line_break_holder] -->        activeTypes.add(typ); <!-- [et_pb_line_break_holder] -->        btn.classList.remove(\"slb-inactive\");<!-- [et_pb_line_break_holder] -->        btn.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      renderMkn();<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-mkn-kommunSelect\").addEventListener(\"change\", e => {<!-- [et_pb_line_break_holder] -->    activeKommun = e.target.value;<!-- [et_pb_line_break_holder] -->    updateKommunNotice(\"slb-mkn-kommun-notice\", activeKommun);<!-- [et_pb_line_break_holder] -->    renderMkn();<!-- [et_pb_line_break_holder] -->    SlbKommunState.set(activeKommun, \"mkn\");<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  SlbKommunState.onChange((kommun, source) => {<!-- [et_pb_line_break_holder] -->    if (source === \"mkn\") return;<!-- [et_pb_line_break_holder] -->    activeKommun = kommun;<!-- [et_pb_line_break_holder] -->    document.getElementById(\"slb-mkn-kommunSelect\").value = kommun;<!-- [et_pb_line_break_holder] -->    updateKommunNotice(\"slb-mkn-kommun-notice\", activeKommun);<!-- [et_pb_line_break_holder] -->    renderMkn();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  window._slbLuftRealtimeReady.then(loadAll);<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->   PANEL 3 \u2014 METEOROLOGI<!-- [et_pb_line_break_holder] -->   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->(function() {<!-- [et_pb_line_break_holder] -->  const BASE = \"https:\/\/open.slb.nu\/api\/timeseries\/v1.1b\/\";<!-- [et_pb_line_break_holder] -->  const KEY = \"lvl1\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let activeMeteoStation = \"Torkel Knutssongatan\";<!-- [et_pb_line_break_holder] -->  let lastMeteoData = [];<!-- [et_pb_line_break_holder] -->  const METEO_PARAMS = [\"Temp\", \"RH\", \"Nederb\u00f6rd\", \"Byvind\", \"Vindhastighet\", \"Vindriktning\", \"GLOB\", \"Tryck\"];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function fmtMeteoDate(d) {<!-- [et_pb_line_break_holder] -->    const p = n => String(n).padStart(2, \"0\");<!-- [et_pb_line_break_holder] -->    return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function loadMeteo() {<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-meteo-loading\", true);<!-- [et_pb_line_break_holder] -->    slbHideErrorNotice(\"slb-meteo-api-error-notice\");<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const url = `${BASE}\/get-timeseries\/?key=${KEY}`<!-- [et_pb_line_break_holder] -->        + `&stations=${encodeURIComponent(activeMeteoStation)}`<!-- [et_pb_line_break_holder] -->        + `&parameters=${METEO_PARAMS.join(\",\")}`<!-- [et_pb_line_break_holder] -->        + `&date_range=1`<!-- [et_pb_line_break_holder] -->        + `&format=fast`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const raw = await slbFetchJSON(url);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const data = [];<!-- [et_pb_line_break_holder] -->      if (raw && raw.Datetime) {<!-- [et_pb_line_break_holder] -->        const datetimes = raw.Datetime;<!-- [et_pb_line_break_holder] -->        Object.entries(raw).forEach(([key, values]) => {<!-- [et_pb_line_break_holder] -->          if (key === \"Datetime\") return;<!-- [et_pb_line_break_holder] -->          const param = key.split(\":\")[0].trim();<!-- [et_pb_line_break_holder] -->          values.forEach((val, idx) => {<!-- [et_pb_line_break_holder] -->            data.push({<!-- [et_pb_line_break_holder] -->              \"Datetime local\": datetimes[idx],<!-- [et_pb_line_break_holder] -->              parameter: param,<!-- [et_pb_line_break_holder] -->              value: val<!-- [et_pb_line_break_holder] -->            });<!-- [et_pb_line_break_holder] -->          });<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      renderMeteoCharts(data);<!-- [et_pb_line_break_holder] -->      lastMeteoData = data;<!-- [et_pb_line_break_holder] -->      slbCheckDataGap(lastMeteoData, \"slb-meteo-datagap-notice\", \"Datetime local\");<!-- [et_pb_line_break_holder] -->      \/\/slbSetStatus(\"slb-meteo-status\", `Visar meteorologi f\u00f6r ${activeMeteoStation} (${data.length} m\u00e4tpunkter)`);<!-- [et_pb_line_break_holder] -->    } catch (e) {<!-- [et_pb_line_break_holder] -->      console.error(\"Meteorologi-fel:\", e);<!-- [et_pb_line_break_holder] -->      slbShowErrorNotice(\"slb-meteo-api-error-notice\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-meteo-loading\", false);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  \/\/ Kontrollera datalucka l\u00f6pande, \u00e4ven utan ny h\u00e4mtning (klockan g\u00e5r vidare)<!-- [et_pb_line_break_holder] -->  setInterval(() => slbCheckDataGap(lastMeteoData, \"slb-meteo-datagap-notice\", \"Datetime local\"), 5 * 60 * 1000);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function renderMeteoCharts(data) {<!-- [et_pb_line_break_holder] -->    const mobile = slbIsMobile();<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    const commonLayout = {<!-- [et_pb_line_break_holder] -->      paper_bgcolor: \"#fff\", plot_bgcolor: \"#fff\",<!-- [et_pb_line_break_holder] -->      font: { family: \"Arial, sans-serif\", size: mobile ? 10 : 11, color: \"#444\" },<!-- [et_pb_line_break_holder] -->      margin: mobile ? { t: 40, r: 35, b: 50, l: 45 } : { t: 50, r: 80, b: 60, l: 60 },<!-- [et_pb_line_break_holder] -->      xaxis: { <!-- [et_pb_line_break_holder] -->        gridcolor: \"#e8e8e8\", <!-- [et_pb_line_break_holder] -->        showline: true, <!-- [et_pb_line_break_holder] -->        linecolor: \"#ccc\",<!-- [et_pb_line_break_holder] -->        tickcolor: \"#ccc\",<!-- [et_pb_line_break_holder] -->        tickangle: 0,<!-- [et_pb_line_break_holder] -->        tickfont: { size: mobile ? 10 : 11 }<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      hovermode: \"x unified\"<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const byParam = {};<!-- [et_pb_line_break_holder] -->    for (const d of data) {<!-- [et_pb_line_break_holder] -->      if (!byParam[d.parameter]) byParam[d.parameter] = [];<!-- [et_pb_line_break_holder] -->      byParam[d.parameter].push(d);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const tempData = byParam[\"Temp\"] || [];<!-- [et_pb_line_break_holder] -->    const rhData = byParam[\"RH\"] || [];<!-- [et_pb_line_break_holder] -->    const precData = byParam[\"Nederb\u00f6rd\"] || [];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const traces1 = [];<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    if (tempData.length > 0) {<!-- [et_pb_line_break_holder] -->      traces1.push({<!-- [et_pb_line_break_holder] -->        x: tempData.map(d => adjustForSummerTime(d['Datetime local'])),<!-- [et_pb_line_break_holder] -->        y: tempData.map(d => d.value),<!-- [et_pb_line_break_holder] -->        name: \"Temperatur (\u00b0C)\", <!-- [et_pb_line_break_holder] -->        type: \"scatter\", <!-- [et_pb_line_break_holder] -->        mode: \"lines+markers\", <!-- [et_pb_line_break_holder] -->        line: { color: \"#E5006C\", width: 2 },<!-- [et_pb_line_break_holder] -->        marker: { size: mobile ? 3 : 4, color: \"#E5006C\" },<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>Temp<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x|%Y-%m-%d %H:%M}<!\u2013- [et_pb_br_holder] -\u2013>%{y:.1f} \u00b0C<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    if (rhData.length > 0) {<!-- [et_pb_line_break_holder] -->      traces1.push({<!-- [et_pb_line_break_holder] -->        x: rhData.map(d => adjustForSummerTime(d['Datetime local'])),<!-- [et_pb_line_break_holder] -->        y: rhData.map(d => d.value),<!-- [et_pb_line_break_holder] -->        name: \"Luftfuktighet (%)\", <!-- [et_pb_line_break_holder] -->        type: \"scatter\", <!-- [et_pb_line_break_holder] -->        mode: \"lines\", <!-- [et_pb_line_break_holder] -->        line: { color: \"#009991\", width: 1.5 }, <!-- [et_pb_line_break_holder] -->        yaxis: \"y2\",<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>RH<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x|%Y-%m-%d %H:%M}<!\u2013- [et_pb_br_holder] -\u2013>%{y:.0f} %<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    if (precData.length > 0) {<!-- [et_pb_line_break_holder] -->      traces1.push({<!-- [et_pb_line_break_holder] -->        x: precData.map(d => adjustForSummerTime(d['Datetime local'])),<!-- [et_pb_line_break_holder] -->        y: precData.map(d => d.value),<!-- [et_pb_line_break_holder] -->        name: \"Nederb\u00f6rd (mm)\", <!-- [et_pb_line_break_holder] -->        type: \"bar\", <!-- [et_pb_line_break_holder] -->        marker: { color: \"#007FC8\", opacity: 0.6 }, <!-- [et_pb_line_break_holder] -->        yaxis: \"y3\",<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>Nederb\u00f6rd<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x|%Y-%m-%d %H:%M}<!\u2013- [et_pb_br_holder] -\u2013>%{y:.1f} mm<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    const precValues = precData.map(d => d.value);<!-- [et_pb_line_break_holder] -->    const maxPrec = precValues.length ? Math.max(...precValues) : 0;<!-- [et_pb_line_break_holder] -->    const precMax = Math.max(10, maxPrec);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    Plotly.react(\"slb-meteo-chart-temprhprec\", traces1.length > 0 ? traces1 : [], {<!-- [et_pb_line_break_holder] -->      ...commonLayout,<!-- [et_pb_line_break_holder] -->      title: { <!-- [et_pb_line_break_holder] -->        text: mobile ? \"Temp, RH & Nederb\u00f6rd\" : \"Temperatur, Luftfuktighet & Nederb\u00f6rd\",<!-- [et_pb_line_break_holder] -->        font: { size: mobile ? 14 : 15, color: \"#333\" }<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis: { <!-- [et_pb_line_break_holder] -->        title: {text: \"Temperatur \u00b0C\"}, <!-- [et_pb_line_break_holder] -->        titlefont: { color: \"#E5006C\" },<!-- [et_pb_line_break_holder] -->        gridcolor: \"#e8e8e8\",<!-- [et_pb_line_break_holder] -->        linecolor: \"#ccc\",<!-- [et_pb_line_break_holder] -->        tickcolor: \"#ccc\"<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis2: { <!-- [et_pb_line_break_holder] -->        title: {text: \"Relativ fuktighet %\"}, <!-- [et_pb_line_break_holder] -->        overlaying: \"y\", <!-- [et_pb_line_break_holder] -->        side: \"right\", <!-- [et_pb_line_break_holder] -->        range: [0, 100], <!-- [et_pb_line_break_holder] -->        titlefont: { color: \"#009991\" },<!-- [et_pb_line_break_holder] -->        showgrid: false<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis3: { <!-- [et_pb_line_break_holder] -->        title: \"\", <!-- [et_pb_line_break_holder] -->        overlaying: \"y\", <!-- [et_pb_line_break_holder] -->        side: \"right\", <!-- [et_pb_line_break_holder] -->        anchor: \"free\",<!-- [et_pb_line_break_holder] -->        position: mobile ? 0.92 : 0.95,<!-- [et_pb_line_break_holder] -->        showgrid: false, <!-- [et_pb_line_break_holder] -->        titlefont: { color: \"#007FC8\" },<!-- [et_pb_line_break_holder] -->        range: [0, precMax],<!-- [et_pb_line_break_holder] -->        showticklabels: false<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      showlegend: !mobile,<!-- [et_pb_line_break_holder] -->      legend: mobile ? {} : {<!-- [et_pb_line_break_holder] -->        x: 0.01,<!-- [et_pb_line_break_holder] -->        y: 0.99,<!-- [et_pb_line_break_holder] -->        bgcolor: \"rgba(255,255,255,0.9)\",<!-- [et_pb_line_break_holder] -->        bordercolor: \"#ddd\",<!-- [et_pb_line_break_holder] -->        borderwidth: 1<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }, { responsive: true, displayModeBar: false });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const windSpeed = byParam[\"Vindhastighet\"] || [];<!-- [et_pb_line_break_holder] -->    const gustSpeed = byParam[\"Byvind\"] || [];<!-- [et_pb_line_break_holder] -->    const windDir = byParam[\"Vindriktning\"] || [];<!-- [et_pb_line_break_holder] -->    const traces2 = [];<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    if (gustSpeed.length > 0) {<!-- [et_pb_line_break_holder] -->      traces2.push({<!-- [et_pb_line_break_holder] -->        x: gustSpeed.map(d => adjustForSummerTime(d['Datetime local'])),<!-- [et_pb_line_break_holder] -->        y: gustSpeed.map(d => d.value),<!-- [et_pb_line_break_holder] -->        name: \"Byvind (m\/s)\", <!-- [et_pb_line_break_holder] -->        type: \"scatter\", <!-- [et_pb_line_break_holder] -->        mode: \"lines\",<!-- [et_pb_line_break_holder] -->        fill: \"tozeroy\", <!-- [et_pb_line_break_holder] -->        line: { color: \"#BB9BC6\", width: 2 },<!-- [et_pb_line_break_holder] -->        fillcolor: \"#EEE6F1\",<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>Byvind<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x|%Y-%m-%d %H:%M}<!\u2013- [et_pb_br_holder] -\u2013>%{y:.1f} m\/s<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (windSpeed.length > 0) {<!-- [et_pb_line_break_holder] -->      traces2.push({<!-- [et_pb_line_break_holder] -->        x: windSpeed.map(d => adjustForSummerTime(d['Datetime local'])),<!-- [et_pb_line_break_holder] -->        y: windSpeed.map(d => d.value),<!-- [et_pb_line_break_holder] -->        name: \"Vindhastighet (m\/s)\", <!-- [et_pb_line_break_holder] -->        type: \"scatter\", <!-- [et_pb_line_break_holder] -->        mode: \"lines\",<!-- [et_pb_line_break_holder] -->        fill: \"tozeroy\", <!-- [et_pb_line_break_holder] -->        line: { color: \"#9969A9\", width: 2 },<!-- [et_pb_line_break_holder] -->        fillcolor: \"#DDCDE3\",<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>Vindhastighet<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x|%Y-%m-%d %H:%M}<!\u2013- [et_pb_br_holder] -\u2013>%{y:.1f} m\/s<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (windDir.length > 0) {<!-- [et_pb_line_break_holder] -->      traces2.push({<!-- [et_pb_line_break_holder] -->        x: windDir.map(d => adjustForSummerTime(d['Datetime local'])),<!-- [et_pb_line_break_holder] -->        y: windDir.map(d => d.value),<!-- [et_pb_line_break_holder] -->        name: \"Vindriktning (\u00b0)\", <!-- [et_pb_line_break_holder] -->        type: \"scatter\", <!-- [et_pb_line_break_holder] -->        mode: \"markers\",<!-- [et_pb_line_break_holder] -->        marker: { <!-- [et_pb_line_break_holder] -->          size: 6, <!-- [et_pb_line_break_holder] -->          color: \"#E29900\",<!-- [et_pb_line_break_holder] -->          symbol: \"circle\",<!-- [et_pb_line_break_holder] -->          angleref: \"previous\"<!-- [et_pb_line_break_holder] -->        },<!-- [et_pb_line_break_holder] -->        yaxis: \"y2\",<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>Riktning<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x|%Y-%m-%d %H:%M}<!\u2013- [et_pb_br_holder] -\u2013>%{y:.0f}\u00b0<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    Plotly.react(\"slb-meteo-chart-wind\", traces2.length > 0 ? traces2 : [], {<!-- [et_pb_line_break_holder] -->      ...commonLayout,<!-- [et_pb_line_break_holder] -->      title: { <!-- [et_pb_line_break_holder] -->        text: \"Vind (hastighet & riktning)\", <!-- [et_pb_line_break_holder] -->        font: { size: mobile ? 14 : 15, color: \"#333\" }<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis: { <!-- [et_pb_line_break_holder] -->        title: \"m\/s\", <!-- [et_pb_line_break_holder] -->        rangemode: \"tozero\",<!-- [et_pb_line_break_holder] -->        gridcolor: \"#e8e8e8\",<!-- [et_pb_line_break_holder] -->        linecolor: \"#ccc\",<!-- [et_pb_line_break_holder] -->        tickcolor: \"#ccc\",<!-- [et_pb_line_break_holder] -->        titlefont: { color: \"#76368C\" }<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis2: {<!-- [et_pb_line_break_holder] -->        title: {text: \"Grader (\u00b0)\"},<!-- [et_pb_line_break_holder] -->        overlaying: \"y\",<!-- [et_pb_line_break_holder] -->        side: \"right\",<!-- [et_pb_line_break_holder] -->        range: [0, 370],<!-- [et_pb_line_break_holder] -->        titlefont: { color: \"#E29900\" },<!-- [et_pb_line_break_holder] -->        showgrid: false,<!-- [et_pb_line_break_holder] -->        tickvals: [0, 90, 180, 270, 360],<!-- [et_pb_line_break_holder] -->        ticktext: [<!-- [et_pb_line_break_holder] -->          \"360\u00b0 (N)\",<!-- [et_pb_line_break_holder] -->          \"90\u00b0 (O)\",<!-- [et_pb_line_break_holder] -->          \"180\u00b0 (S)\",<!-- [et_pb_line_break_holder] -->          \"270\u00b0 (V)\",<!-- [et_pb_line_break_holder] -->          \"360\u00b0 (N)\"<!-- [et_pb_line_break_holder] -->        ]<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      xaxis: { <!-- [et_pb_line_break_holder] -->        gridcolor: \"#e8e8e8\", <!-- [et_pb_line_break_holder] -->        showline: true, <!-- [et_pb_line_break_holder] -->        linecolor: \"#ccc\",<!-- [et_pb_line_break_holder] -->        tickcolor: \"#ccc\",<!-- [et_pb_line_break_holder] -->        tickangle: 0,<!-- [et_pb_line_break_holder] -->        tickfont: { size: mobile ? 10 : 11 }<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      showlegend: !mobile,<!-- [et_pb_line_break_holder] -->      legend: mobile ? {} : {<!-- [et_pb_line_break_holder] -->        x: 0.01,<!-- [et_pb_line_break_holder] -->        y: 0.99,<!-- [et_pb_line_break_holder] -->        bgcolor: \"rgba(255,255,255,0.9)\",<!-- [et_pb_line_break_holder] -->        bordercolor: \"#ddd\",<!-- [et_pb_line_break_holder] -->        borderwidth: 1<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }, { responsive: true, displayModeBar: false });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const solar = byParam[\"GLOB\"] || [];<!-- [et_pb_line_break_holder] -->    const pressure = byParam[\"Tryck\"] || [];<!-- [et_pb_line_break_holder] -->    const traces3 = [];<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    if (solar.length > 0) {<!-- [et_pb_line_break_holder] -->      traces3.push({<!-- [et_pb_line_break_holder] -->        x: solar.map(d => adjustForSummerTime(d['Datetime local'])),<!-- [et_pb_line_break_holder] -->        y: solar.map(d => d.value),<!-- [et_pb_line_break_holder] -->        name: \"Solstr\u00e5lning\", <!-- [et_pb_line_break_holder] -->        type: \"scatter\", <!-- [et_pb_line_break_holder] -->        mode: \"lines\",<!-- [et_pb_line_break_holder] -->        line: { color: \"#E29900\", width: 2 }, <!-- [et_pb_line_break_holder] -->        fill: \"tozeroy\",<!-- [et_pb_line_break_holder] -->        fillcolor: \"rgba(226, 153, 0, 0.2)\",<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>Solstr\u00e5lning<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x|%Y-%m-%d %H:%M}<!\u2013- [et_pb_br_holder] -\u2013>%{y:.0f} W\/m\u00b2<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    if (pressure.length > 0) {<!-- [et_pb_line_break_holder] -->      traces3.push({<!-- [et_pb_line_break_holder] -->        x: pressure.map(d => adjustForSummerTime(d['Datetime local'])),<!-- [et_pb_line_break_holder] -->        y: pressure.map(d => d.value),<!-- [et_pb_line_break_holder] -->        name: \"Lufttryck (hPa)\", <!-- [et_pb_line_break_holder] -->        type: \"scatter\", <!-- [et_pb_line_break_holder] -->        mode: \"lines\",<!-- [et_pb_line_break_holder] -->        line: { color: \"#444\", width: 2, dash: \"dot\" },<!-- [et_pb_line_break_holder] -->        yaxis: \"y2\",<!-- [et_pb_line_break_holder] -->        hovertemplate: \"<b>Tryck<\/b><!\u2013- [et_pb_br_holder] -\u2013>%{x|%Y-%m-%d %H:%M}<!\u2013- [et_pb_br_holder] -\u2013>%{y:.0f} hPa<extra><\/extra>\"<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    Plotly.react(\"slb-meteo-chart-solar\", traces3.length > 0 ? traces3 : [], {<!-- [et_pb_line_break_holder] -->      ...commonLayout,<!-- [et_pb_line_break_holder] -->      title: { <!-- [et_pb_line_break_holder] -->        text: \"Global solinstr\u00e5lning\", <!-- [et_pb_line_break_holder] -->        font: { size: mobile ? 14 : 15, color: \"#333\" }<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis: { <!-- [et_pb_line_break_holder] -->        title: {text: \"Solinstr\u00e5lning W\/m\u00b2\"}, <!-- [et_pb_line_break_holder] -->        rangemode: \"tozero\",<!-- [et_pb_line_break_holder] -->        gridcolor: \"#e8e8e8\",<!-- [et_pb_line_break_holder] -->        linecolor: \"#ccc\",<!-- [et_pb_line_break_holder] -->        tickcolor: \"#ccc\"<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      yaxis2: { <!-- [et_pb_line_break_holder] -->        title: {text: \"Tryck hPa\"},<!-- [et_pb_line_break_holder] -->        overlaying: \"y\",<!-- [et_pb_line_break_holder] -->        side: \"right\",<!-- [et_pb_line_break_holder] -->        showgrid: false,<!-- [et_pb_line_break_holder] -->        titlefont: { color: \"#444\" },<!-- [et_pb_line_break_holder] -->        range: pressure.length > 0 ? [<!-- [et_pb_line_break_holder] -->          Math.min(...pressure.map(d => d.value)) - 5,<!-- [et_pb_line_break_holder] -->          Math.max(...pressure.map(d => d.value)) + 5<!-- [et_pb_line_break_holder] -->        ] : [990, 1030],<!-- [et_pb_line_break_holder] -->      },<!-- [et_pb_line_break_holder] -->      showlegend: false<!-- [et_pb_line_break_holder] -->    }, { responsive: true, displayModeBar: false });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-meteo-stationTabs\").addEventListener(\"click\", e => {<!-- [et_pb_line_break_holder] -->    const tab = e.target.closest(\".slb-param-tab\");<!-- [et_pb_line_break_holder] -->    if (!tab) return;<!-- [et_pb_line_break_holder] -->    document.querySelectorAll(\"#slb-meteo-stationTabs .slb-param-tab\").forEach(t => {<!-- [et_pb_line_break_holder] -->      t.classList.remove(\"slb-active\");<!-- [et_pb_line_break_holder] -->      t.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    tab.classList.add(\"slb-active\");<!-- [et_pb_line_break_holder] -->    tab.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->    activeMeteoStation = tab.dataset.station;<!-- [et_pb_line_break_holder] -->    loadMeteo();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const meteoTabBtn = document.querySelector('[data-tab=\"slb-panel-meteo\"]');<!-- [et_pb_line_break_holder] -->  if (meteoTabBtn) {<!-- [et_pb_line_break_holder] -->    meteoTabBtn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->      if (!window._meteoLoaded) {<!-- [et_pb_line_break_holder] -->        setTimeout(() => loadMeteo(), 100);<!-- [et_pb_line_break_holder] -->        window._meteoLoaded = true;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  if (document.getElementById(\"slb-panel-meteo\").classList.contains(\"slb-active\")) {<!-- [et_pb_line_break_holder] -->    setTimeout(() => loadMeteo(), 500);<!-- [et_pb_line_break_holder] -->    window._meteoLoaded = true;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550<!-- [et_pb_line_break_holder] -->   PANEL 4 \u2014 H\u00c4MTA DATA<!-- [et_pb_line_break_holder] -->   \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550 *\/<!-- [et_pb_line_break_holder] -->(function() {<!-- [et_pb_line_break_holder] -->  const BASE     = \"https:\/\/open.slb.nu\/api\/timeseries\/v1.1b\/\";<!-- [et_pb_line_break_holder] -->  const KEY      = \"lvl1\";<!-- [et_pb_line_break_holder] -->  const ALL_PARAMS = [\"PM10\", \"PM2.5\", \"NO2\", \"O3\", \"RH\", \"Nederb\u00f6rd\", \"Vindhastighet\", \"Vindriktning\", \"Byvind\", \"Tryck\", \"GLOB\", \"Temp\"];<!-- [et_pb_line_break_holder] -->  const DATA_CUTOFF = \"2026-01-01\"<!-- [et_pb_line_break_holder] -->  const DATA_START  = \"2016-01-01\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  let allStations   = [];<!-- [et_pb_line_break_holder] -->  let allTimeseries = [];<!-- [et_pb_line_break_holder] -->  let selectedKommun   = null;<!-- [et_pb_line_break_holder] -->  let selectedStations = new Set();<!-- [et_pb_line_break_holder] -->  let selectedParams   = new Set();<!-- [et_pb_line_break_holder] -->  let selectedRes      = \"hourly\";<!-- [et_pb_line_break_holder] -->  let dateFromManual   = false;<!-- [et_pb_line_break_holder] -->  let dateToManual     = false;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function fmtDatetime(dateStr, time) { return `${dateStr} ${time}`; }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function dlSetStatus(msg, mode=\"normal\") {<!-- [et_pb_line_break_holder] -->    const el = document.getElementById(\"slb-dl-statusText\");<!-- [et_pb_line_break_holder] -->    el.textContent = msg;<!-- [et_pb_line_break_holder] -->    el.className = mode === \"error\" ? \"slb-dl-status-error\"<!-- [et_pb_line_break_holder] -->                 : mode === \"warn\"  ? \"slb-dl-status-warn\"<!-- [et_pb_line_break_holder] -->                 : \"\";<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function dlSetLoading(on) {<!-- [et_pb_line_break_holder] -->    document.getElementById(\"slb-dl-spinner\").className = \"slb-dl-spinner\" + (on ? \" slb-dl-visible\" : \"\");<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function getStationDateRange(stationName) {<!-- [et_pb_line_break_holder] -->    const timeseries = allTimeseries.filter(t =><!-- [et_pb_line_break_holder] -->      t.Stationsnamn === stationName && ALL_PARAMS.includes(t.Parameter)<!-- [et_pb_line_break_holder] -->    );<!-- [et_pb_line_break_holder] -->    if (!timeseries.length) return null;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const starts = timeseries.map(t => t.Start ? t.Start.slice(0, 10) : null).filter(Boolean);<!-- [et_pb_line_break_holder] -->    const stops  = timeseries.map(t => t.Stop  ? t.Stop.slice(0, 10)  : DATA_CUTOFF);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    return {<!-- [et_pb_line_break_holder] -->      start: starts.reduce((a, b) => a < b ? a : b),   \/\/ tidigaste start<!-- [et_pb_line_break_holder] -->      stop:  stops.reduce((a, b) => a < b ? a : b),    \/\/ tidigaste stop = s\u00e4ker slutpunkt<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function updateDateRangeForSelection() {<!-- [et_pb_line_break_holder] -->    if (selectedStations.size === 0) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const ranges = [...selectedStations].map(getStationDateRange).filter(Boolean);<!-- [et_pb_line_break_holder] -->    if (!ranges.length) return;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ F\u00f6rs\u00f6k hitta \u00f6verlapp \u2014 alla stationer har data<!-- [et_pb_line_break_holder] -->    const overlapFrom = ranges.reduce((a, b) => a.start > b.start ? a : b).start;<!-- [et_pb_line_break_holder] -->    const overlapTo   = ranges.reduce((a, b) => a.stop  < b.stop  ? a : b).stop;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let finalFrom, finalTo;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (overlapFrom <= overlapTo) {<!-- [et_pb_line_break_holder] -->      \/\/ \u00d6verlapp finns<!-- [et_pb_line_break_holder] -->      finalFrom = overlapFrom;<!-- [et_pb_line_break_holder] -->      finalTo   = overlapTo;<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      \/\/ Inget \u00f6verlapp \u2014 hitta intervall med flest stationer<!-- [et_pb_line_break_holder] -->      \/\/ Kandidater: alla unika start\/stop-datum<!-- [et_pb_line_break_holder] -->      const candidates = ranges.flatMap(r => [r.start, r.stop]);<!-- [et_pb_line_break_holder] -->      const uniqueDates = [...new Set(candidates)].sort();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      let bestFrom = ranges[0].start, bestTo = ranges[0].stop, bestCount = 0;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      for (let i = 0; i < uniqueDates.length - 1; i++) {<!-- [et_pb_line_break_holder] -->        const candidateFrom = uniqueDates[i];<!-- [et_pb_line_break_holder] -->        const candidateTo   = uniqueDates[i + 1];<!-- [et_pb_line_break_holder] -->        const count = ranges.filter(r => r.start <= candidateFrom &#038;&#038; r.stop >= candidateTo).length;<!-- [et_pb_line_break_holder] -->        if (count > bestCount) {<!-- [et_pb_line_break_holder] -->          bestCount = count;<!-- [et_pb_line_break_holder] -->          bestFrom  = candidateFrom;<!-- [et_pb_line_break_holder] -->          bestTo    = candidateTo;<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      finalFrom = bestFrom;<!-- [et_pb_line_break_holder] -->      finalTo   = bestTo;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Klipp mot DATA_CUTOFF<!-- [et_pb_line_break_holder] -->    if (finalTo > DATA_CUTOFF) finalTo = DATA_CUTOFF;<!-- [et_pb_line_break_holder] -->    if (DATA_START && finalFrom < DATA_START) finalFrom = DATA_START;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (!dateFromManual) {<!-- [et_pb_line_break_holder] -->      document.getElementById(\"slb-dl-dateFrom\").value = finalFrom;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    if (!dateToManual) {<!-- [et_pb_line_break_holder] -->      document.getElementById(\"slb-dl-dateTo\").value = finalTo;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    updateDownloadBtn();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  <!-- [et_pb_line_break_holder] -->  function normalizeFastFormat(raw) {<!-- [et_pb_line_break_holder] -->    const rows = [];<!-- [et_pb_line_break_holder] -->    if (!raw || !raw.Datetime) return rows;<!-- [et_pb_line_break_holder] -->    const datetimes = raw.Datetime;<!-- [et_pb_line_break_holder] -->    Object.entries(raw).forEach(([key, values]) => {<!-- [et_pb_line_break_holder] -->      if (key === \"Datetime\") return;<!-- [et_pb_line_break_holder] -->      const parts   = key.split(\":\");<!-- [et_pb_line_break_holder] -->      const param   = parts[0].trim();<!-- [et_pb_line_break_holder] -->      const station = parts.slice(1).join(\":\").trim();<!-- [et_pb_line_break_holder] -->      datetimes.forEach((dt, idx) => {<!-- [et_pb_line_break_holder] -->        const v = values[idx];<!-- [et_pb_line_break_holder] -->        if (v !== null && v !== undefined && !isNaN(parseFloat(v))) {<!-- [et_pb_line_break_holder] -->          rows.push({ Datetime: dt, station, parameter: param, value: parseFloat(v) });<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    return rows;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  async function init() {<!-- [et_pb_line_break_holder] -->    dlSetStatus(\"H\u00e4mtar stationer...\");<!-- [et_pb_line_break_holder] -->    dlSetLoading(true);<!-- [et_pb_line_break_holder] -->    slbHideErrorNotice(\"slb-dl-api-error-notice\");<!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      allStations   = await slbFetchJSON(`${BASE}\/list-stations\/?key=${KEY}`);<!-- [et_pb_line_break_holder] -->      allTimeseries = await slbFetchJSON(`${BASE}\/list-timeseries\/?key=${KEY}`);<!-- [et_pb_line_break_holder] -->      shortNameMap  = slbBuildShortNameMap(allStations);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const KOMMUN_ALIAS = { \"Visby\": \"Gotland\" };<!-- [et_pb_line_break_holder] -->      const kommuner = [...new Set(allStations.map(s => s.kommun))].sort((a, b) => (KOMMUN_ALIAS[a] || a).localeCompare(KOMMUN_ALIAS[b] || b, \"sv\", { sensitivity: \"base\" }));<!-- [et_pb_line_break_holder] -->      const sel = document.getElementById(\"slb-dl-kommunSelect\");<!-- [et_pb_line_break_holder] -->      sel.innerHTML = `<option value=\"\">\u2014 V\u00e4lj kommun \u2014<\/option>`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const sorted = [\"Stockholm\", ...kommuner.filter(k => k !== \"Stockholm\")];<!-- [et_pb_line_break_holder] -->      sorted.forEach(k => {<!-- [et_pb_line_break_holder] -->        const opt = document.createElement(\"option\");<!-- [et_pb_line_break_holder] -->        opt.value = k;<!-- [et_pb_line_break_holder] -->        opt.textContent = KOMMUN_ALIAS[k] || k;<!-- [et_pb_line_break_holder] -->        sel.appendChild(opt);<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      sel.value = \"Stockholm\";<!-- [et_pb_line_break_holder] -->      selectedKommun = \"Stockholm\";<!-- [et_pb_line_break_holder] -->      updateStations();<!-- [et_pb_line_break_holder] -->      dlSetStatus(\"\");<!-- [et_pb_line_break_holder] -->      const raw = SLB_INITIAL_KOMMUN_RAW;<!-- [et_pb_line_break_holder] -->      if (raw) {<!-- [et_pb_line_break_holder] -->        if (raw.toLowerCase() === \"alla\") {<!-- [et_pb_line_break_holder] -->          sel.value = \"\";<!-- [et_pb_line_break_holder] -->          selectedKommun = \"\";<!-- [et_pb_line_break_holder] -->          updateStations();<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->          const match = [...sel.options].find(o =><!-- [et_pb_line_break_holder] -->            o.value.toLowerCase() === raw.toLowerCase()<!-- [et_pb_line_break_holder] -->          );<!-- [et_pb_line_break_holder] -->          if (match) {<!-- [et_pb_line_break_holder] -->            sel.value = match.value;<!-- [et_pb_line_break_holder] -->            selectedKommun = match.value;<!-- [et_pb_line_break_holder] -->            updateStations();<!-- [et_pb_line_break_holder] -->          }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      SlbKommunState.set(selectedKommun, \"data\");<!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      slbShowErrorNotice(\"slb-dl-api-error-notice\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const toInput   = document.getElementById(\"slb-dl-dateTo\");<!-- [et_pb_line_break_holder] -->    const fromInput = document.getElementById(\"slb-dl-dateFrom\");<!-- [et_pb_line_break_holder] -->    toInput.max   = DATA_CUTOFF;<!-- [et_pb_line_break_holder] -->    fromInput.max = DATA_CUTOFF;<!-- [et_pb_line_break_holder] -->    fromInput.min = DATA_START || \"\";<!-- [et_pb_line_break_holder] -->    toInput.min   = DATA_START || \"\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    dlSetLoading(false);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  const slbTooltipEl = document.getElementById(\"slb-dl-tooltip\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function slbShowTooltip(e, text) {<!-- [et_pb_line_break_holder] -->    slbTooltipEl.textContent = text;<!-- [et_pb_line_break_holder] -->    slbTooltipEl.classList.add(\"slb-dl-tooltip-visible\");<!-- [et_pb_line_break_holder] -->    slbTooltipEl.setAttribute(\"aria-hidden\", \"false\");<!-- [et_pb_line_break_holder] -->    slbMoveTooltip(e);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function slbMoveTooltip(e) {<!-- [et_pb_line_break_holder] -->    const x = e.clientX + 12;<!-- [et_pb_line_break_holder] -->    const y = e.clientY + 12;<!-- [et_pb_line_break_holder] -->    slbTooltipEl.style.left = x + \"px\";<!-- [et_pb_line_break_holder] -->    slbTooltipEl.style.top  = y + \"px\";<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] -->  function slbHideTooltip() {<!-- [et_pb_line_break_holder] -->    slbTooltipEl.classList.remove(\"slb-dl-tooltip-visible\");<!-- [et_pb_line_break_holder] -->    slbTooltipEl.setAttribute(\"aria-hidden\", \"true\");<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function updateStations() {<!-- [et_pb_line_break_holder] -->    const group = document.getElementById(\"slb-dl-stationGroup\");<!-- [et_pb_line_break_holder] -->    selectedStations.clear();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (!selectedKommun) {<!-- [et_pb_line_break_holder] -->      group.innerHTML = `<span style=\"color:#bbb;font-size:13px\">V\u00e4lj en kommun f\u00f6rst<\/span>`;<!-- [et_pb_line_break_holder] -->      updateDownloadBtn();<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const stations = allStations.filter(s => {<!-- [et_pb_line_break_holder] -->      if (s.kommun !== selectedKommun) return false;<!-- [et_pb_line_break_holder] -->      return allTimeseries.some(t =><!-- [et_pb_line_break_holder] -->        t.Stationsnamn === s.Stationsnamn && ALL_PARAMS.includes(t.Parameter)<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    group.innerHTML = \"\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    stations.forEach(s => {<!-- [et_pb_line_break_holder] -->      const stationTimeseries = allTimeseries<!-- [et_pb_line_break_holder] -->        .filter(t => t.Stationsnamn === s.Stationsnamn && ALL_PARAMS.includes(t.Parameter));<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const stationParams = stationTimeseries.map(t => t.Parameter);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const isActive = stationTimeseries.some(t =><!-- [et_pb_line_break_holder] -->        t.Stop === null || t.Stop >= DATA_CUTOFF<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      \/\/ Tooltip f\u00f6r alla stationer \u2014 period per parameter<!-- [et_pb_line_break_holder] -->      const paramPeriods = stationTimeseries.map(t => {<!-- [et_pb_line_break_holder] -->        const start = t.Start ? t.Start.slice(0, 10) : \"?\";<!-- [et_pb_line_break_holder] -->        const stop  = t.Stop  ? t.Stop.slice(0, 10)  : \"p\u00e5g\u00e5ende\";<!-- [et_pb_line_break_holder] -->        return `${t.Parameter}: ${start} \u2013 ${stop}`;<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      const tooltipText = (isActive ? \"\" : \"\u26a0 Ej aktiv\" + \"\\n\")<!-- [et_pb_line_break_holder] -->        + paramPeriods.join(\"\\n\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const btn = document.createElement(\"button\");<!-- [et_pb_line_break_holder] -->      btn.className = \"slb-dl-toggle-btn\" + (isActive ? \"\" : \" slb-dl-inactive\");<!-- [et_pb_line_break_holder] -->      btn.dataset.station = s.Stationsnamn;<!-- [et_pb_line_break_holder] -->      btn.addEventListener(\"mouseenter\", e => slbShowTooltip(e, tooltipText));<!-- [et_pb_line_break_holder] -->      btn.addEventListener(\"mousemove\",  e => slbMoveTooltip(e));<!-- [et_pb_line_break_holder] -->      btn.addEventListener(\"mouseleave\", slbHideTooltip);<!-- [et_pb_line_break_holder] -->      btn.textContent = s.Stationsnamn;<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->        if (selectedStations.has(s.Stationsnamn)) {<!-- [et_pb_line_break_holder] -->          selectedStations.delete(s.Stationsnamn);<!-- [et_pb_line_break_holder] -->          btn.classList.remove(\"slb-dl-active\");<!-- [et_pb_line_break_holder] -->          btn.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->        } else {<!-- [et_pb_line_break_holder] -->          selectedStations.add(s.Stationsnamn);<!-- [et_pb_line_break_holder] -->          btn.classList.add(\"slb-dl-active\");<!-- [et_pb_line_break_holder] -->          btn.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        updateDateRangeForSelection();<!-- [et_pb_line_break_holder] -->        updateDownloadBtn();<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->      group.appendChild(btn);<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->    updateDownloadBtn();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function updateParamAvailability() {<!-- [et_pb_line_break_holder] -->    const available = new Set();<!-- [et_pb_line_break_holder] -->    for (const stationName of selectedStations) {<!-- [et_pb_line_break_holder] -->      allTimeseries<!-- [et_pb_line_break_holder] -->        .filter(t => t.Stationsnamn === stationName && ALL_PARAMS.includes(t.Parameter))<!-- [et_pb_line_break_holder] -->        .forEach(t => available.add(t.Parameter));<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    document.querySelectorAll(\"#slb-dl-paramGroup .slb-dl-toggle-btn\").forEach(btn => {<!-- [et_pb_line_break_holder] -->      const p = btn.dataset.param;<!-- [et_pb_line_break_holder] -->      if (available.has(p)) {<!-- [et_pb_line_break_holder] -->        btn.classList.remove(\"slb-dl-disabled\");<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        btn.classList.add(\"slb-dl-disabled\");<!-- [et_pb_line_break_holder] -->        btn.classList.remove(\"slb-dl-active\");<!-- [et_pb_line_break_holder] -->        btn.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->        selectedParams.delete(p);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Om inga parametrar \u00e4r valda men det finns tillg\u00e4ngliga \u2014 v\u00e4lj alla tillg\u00e4ngliga<!-- [et_pb_line_break_holder] -->    if (selectedParams.size === 0 && available.size > 0) {<!-- [et_pb_line_break_holder] -->      available.forEach(p => {<!-- [et_pb_line_break_holder] -->        selectedParams.add(p);<!-- [et_pb_line_break_holder] -->        const btn = document.querySelector(`#slb-dl-paramGroup [data-param=\"${p}\"]`);<!-- [et_pb_line_break_holder] -->        if (btn) {<!-- [et_pb_line_break_holder] -->          btn.classList.add(\"slb-dl-active\");<!-- [et_pb_line_break_holder] -->          btn.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function updateDownloadBtn() {<!-- [et_pb_line_break_holder] -->    updateParamAvailability();<!-- [et_pb_line_break_holder] -->    const from = document.getElementById(\"slb-dl-dateFrom\").value;<!-- [et_pb_line_break_holder] -->    const to   = document.getElementById(\"slb-dl-dateTo\").value;<!-- [et_pb_line_break_holder] -->    const ok = selectedStations.size > 0 && selectedParams.size > 0 && from && to && from <= to;<!-- [et_pb_line_break_holder] -->    document.getElementById(\"slb-dl-downloadBtn\").disabled = !ok;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function isLeapYear(year) {<!-- [et_pb_line_break_holder] -->    return (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function aggregateToDaily(rawData) {<!-- [et_pb_line_break_holder] -->    const byKey = {};<!-- [et_pb_line_break_holder] -->    for (const d of rawData) {<!-- [et_pb_line_break_holder] -->      const dt = new Date(d.Datetime);<!-- [et_pb_line_break_holder] -->      dt.setSeconds(dt.getSeconds() - 1);<!-- [et_pb_line_break_holder] -->      const bucket = `${dt.getFullYear()}-${String(dt.getMonth()+1).padStart(2,\"0\")}-${String(dt.getDate()).padStart(2,\"0\")}`;<!-- [et_pb_line_break_holder] -->      const key = `${d.station}__${d.parameter}__${bucket}`;<!-- [et_pb_line_break_holder] -->      if (!byKey[key]) byKey[key] = { sum: 0, count: 0, station: d.station, parameter: d.parameter, bucket };<!-- [et_pb_line_break_holder] -->      if (d.value !== null && d.value !== undefined && !isNaN(d.value)) {<!-- [et_pb_line_break_holder] -->        byKey[key].sum   += parseFloat(d.value);<!-- [et_pb_line_break_holder] -->        byKey[key].count += 1;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    return Object.values(byKey).map(v => {<!-- [et_pb_line_break_holder] -->      const coverage = v.count \/ 24;<!-- [et_pb_line_break_holder] -->      const ok = coverage >= 0.75;<!-- [et_pb_line_break_holder] -->      return {<!-- [et_pb_line_break_holder] -->        Datetime:        v.bucket,<!-- [et_pb_line_break_holder] -->        station:         v.station,<!-- [et_pb_line_break_holder] -->        parameter:       v.parameter,<!-- [et_pb_line_break_holder] -->        value:           ok ? v.sum \/ v.count : null,<!-- [et_pb_line_break_holder] -->        kvalitet:        ok ? \"OK\" : \"Otillr\u00e4cklig datat\u00e4ckning\",<!-- [et_pb_line_break_holder] -->        kvalitet_detalj: ok ? \"\" : `${v.count}\/24 h (${Math.round(coverage*100)}%)`,<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->    }).sort((a, b) => a.Datetime.localeCompare(b.Datetime));<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function aggregateToYearly(dailyRows) {<!-- [et_pb_line_break_holder] -->    const currentYear = new Date().getFullYear();<!-- [et_pb_line_break_holder] -->    const byKey = {};<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    for (const d of dailyRows) {<!-- [et_pb_line_break_holder] -->      const year = parseInt(d.Datetime.slice(0, 4));<!-- [et_pb_line_break_holder] -->      if (year === currentYear) continue;<!-- [et_pb_line_break_holder] -->      const key = `${d.station}__${d.parameter}__${year}`;<!-- [et_pb_line_break_holder] -->      if (!byKey[key]) byKey[key] = {<!-- [et_pb_line_break_holder] -->        sumOk: 0, countOk: 0,<!-- [et_pb_line_break_holder] -->        station: d.station, parameter: d.parameter, bucket: String(year)<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->      if (d.kvalitet === \"OK\" && d.value !== null) {<!-- [et_pb_line_break_holder] -->        byKey[key].sumOk   += d.value;<!-- [et_pb_line_break_holder] -->        byKey[key].countOk += 1;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    return Object.values(byKey).map(v => {<!-- [et_pb_line_break_holder] -->      const year         = parseInt(v.bucket);<!-- [et_pb_line_break_holder] -->      const isLeap       = (year % 4 === 0 && year % 100 !== 0) || (year % 400 === 0);<!-- [et_pb_line_break_holder] -->      const expectedDays = isLeap ? 366 : 365;<!-- [et_pb_line_break_holder] -->      const coverage     = v.countOk \/ expectedDays;<!-- [et_pb_line_break_holder] -->      const ok           = coverage >= 0.75;<!-- [et_pb_line_break_holder] -->      return {<!-- [et_pb_line_break_holder] -->        Datetime:        v.bucket,<!-- [et_pb_line_break_holder] -->        station:         v.station,<!-- [et_pb_line_break_holder] -->        parameter:       v.parameter,<!-- [et_pb_line_break_holder] -->        value:           ok ? v.sumOk \/ v.countOk : null,<!-- [et_pb_line_break_holder] -->        kvalitet:        ok ? \"OK\" : \"Otillr\u00e4cklig datat\u00e4ckning\",<!-- [et_pb_line_break_holder] -->        kvalitet_detalj: `${v.countOk}\/${expectedDays} dygn (${Math.round(coverage * 100)}%)`,<!-- [et_pb_line_break_holder] -->      };<!-- [et_pb_line_break_holder] -->    }).sort((a, b) => a.Datetime.localeCompare(b.Datetime));<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function aggregateData(rawData, resolution) {<!-- [et_pb_line_break_holder] -->    if (resolution === \"hourly\") {<!-- [et_pb_line_break_holder] -->      return rawData.map(d => ({ ...d, kvalitet: \"OK\", kvalitet_detalj: \"\" }));<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    const daily = aggregateToDaily(rawData);<!-- [et_pb_line_break_holder] -->    if (resolution === \"daily\")  return daily;<!-- [et_pb_line_break_holder] -->    if (resolution === \"yearly\") return aggregateToYearly(daily);<!-- [et_pb_line_break_holder] -->    return daily;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  function generateExcel(aggregated, resolution) {<!-- [et_pb_line_break_holder] -->    const wb = XLSX.utils.book_new();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const PARAM_UNITS = {<!-- [et_pb_line_break_holder] -->      \"PM10\": \"\u00b5g\/m\u00b3\", \"PM2.5\": \"\u00b5g\/m\u00b3\", \"NO2\": \"\u00b5g\/m\u00b3\", \"O3\": \"\u00b5g\/m\u00b3\",<!-- [et_pb_line_break_holder] -->      \"Temp\": \"\u00b0C\", \"RH\": \"%\", \"Nederb\u00f6rd\": \"mm\",<!-- [et_pb_line_break_holder] -->      \"Vindhastighet\": \"m\/s\", \"Vindriktning\": \"\u00b0\", \"Byvind\": \"m\/s\",<!-- [et_pb_line_break_holder] -->      \"GLOB\": \"W\/m\u00b2\", \"Tryck\": \"hPa\"<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const PARAM_LABELS_XL = {<!-- [et_pb_line_break_holder] -->      \"PM10\": \"PM10\", \"PM2.5\": \"PM2.5\", \"NO2\": \"NO\u2082\", \"O3\": \"O\u2083\",<!-- [et_pb_line_break_holder] -->      \"Temp\": \"Temperatur\", \"RH\": \"Rel. fuktighet\", \"Nederb\u00f6rd\": \"Nederb\u00f6rd\",<!-- [et_pb_line_break_holder] -->      \"Vindhastighet\": \"Vindhastighet\", \"Vindriktning\": \"Vindriktning\",<!-- [et_pb_line_break_holder] -->      \"Byvind\": \"Byvind\", \"GLOB\": \"Solinstr\u00e5lning\", \"Tryck\": \"Lufttryck\"<!-- [et_pb_line_break_holder] -->    };<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const timeLabel = resolution === \"hourly\" ? \"Tidpunkt\"<!-- [et_pb_line_break_holder] -->                    : resolution === \"daily\"   ? \"Datum\"<!-- [et_pb_line_break_holder] -->                    : \"\u00c5r\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const byStation = {};<!-- [et_pb_line_break_holder] -->    for (const d of aggregated) {<!-- [et_pb_line_break_holder] -->      if (!byStation[d.station]) byStation[d.station] = [];<!-- [et_pb_line_break_holder] -->      byStation[d.station].push(d);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    for (const [station, rows] of Object.entries(byStation)) {<!-- [et_pb_line_break_holder] -->      const params = [...new Set(rows.map(r => r.parameter))].sort();<!-- [et_pb_line_break_holder] -->      const times  = [...new Set(rows.map(r => r.Datetime))].sort();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const lookup = {};<!-- [et_pb_line_break_holder] -->      for (const r of rows)<!-- [et_pb_line_break_holder] -->        lookup[`${r.Datetime}__${r.parameter}`] = r;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const header = [timeLabel, ...params.flatMap(p => {<!-- [et_pb_line_break_holder] -->          const label = PARAM_LABELS_XL[p] || p;<!-- [et_pb_line_break_holder] -->          const unit  = PARAM_UNITS[p];<!-- [et_pb_line_break_holder] -->          const full  = unit ? `${label} (${unit})` : label;<!-- [et_pb_line_break_holder] -->          return resolution !== \"hourly\" ? [full, `${full} \u2014 datakvalitet`] : [full];<!-- [et_pb_line_break_holder] -->        })];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->        const sheetData = [header];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      for (const t of times) {<!-- [et_pb_line_break_holder] -->        const row = [t];<!-- [et_pb_line_break_holder] -->        for (const p of params) {<!-- [et_pb_line_break_holder] -->          const entry = lookup[`${t}__${p}`];<!-- [et_pb_line_break_holder] -->          if (!entry) {<!-- [et_pb_line_break_holder] -->            row.push(\"\");<!-- [et_pb_line_break_holder] -->            if (resolution !== \"hourly\") row.push(\"\");<!-- [et_pb_line_break_holder] -->          } else {<!-- [et_pb_line_break_holder] -->            row.push(entry.value !== null ? Math.round(entry.value * 10) \/ 10 : \"\");<!-- [et_pb_line_break_holder] -->            if (resolution !== \"hourly\") {<!-- [et_pb_line_break_holder] -->              row.push(entry.kvalitet === \"OK\"<!-- [et_pb_line_break_holder] -->                ? \"OK\"<!-- [et_pb_line_break_holder] -->                : `Ofullst\u00e4ndigt (${entry.kvalitet_detalj})`);<!-- [et_pb_line_break_holder] -->            }<!-- [et_pb_line_break_holder] -->          }<!-- [et_pb_line_break_holder] -->        }<!-- [et_pb_line_break_holder] -->        sheetData.push(row);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const ws = XLSX.utils.aoa_to_sheet(sheetData);<!-- [et_pb_line_break_holder] -->      ws[\"!cols\"] = [<!-- [et_pb_line_break_holder] -->        { wch: 18 },<!-- [et_pb_line_break_holder] -->        ...params.flatMap(() =><!-- [et_pb_line_break_holder] -->          resolution === \"hourly\" ? [{ wch: 14 }] : [{ wch: 14 }, { wch: 28 }]<!-- [et_pb_line_break_holder] -->        )<!-- [et_pb_line_break_holder] -->      ];<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      \/\/ Fliknamn: stationsnamnet, trimmat till 31 tecken<!-- [et_pb_line_break_holder] -->      \/\/ Ogiltiga Excel-tecken ers\u00e4tts<!-- [et_pb_line_break_holder] -->      const sheetName = (station || shortNameMap[station])<!-- [et_pb_line_break_holder] -->        .replace(\/[\\\/\\\\?\\*\\[\\]:]\/g, \"-\")<!-- [et_pb_line_break_holder] -->        .slice(0, 31);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      XLSX.utils.book_append_sheet(wb, ws, sheetName);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    \/\/ Datakvalitets-flik (bara om dygn\/\u00e5r)<!-- [et_pb_line_break_holder] -->    const incomplete = aggregated.filter(d => d.kvalitet !== \"OK\");<!-- [et_pb_line_break_holder] -->    if (incomplete.length > 0) {<!-- [et_pb_line_break_holder] -->      const qHeader = [timeLabel, \"Station\", \"Parameter\", \"Datakvalitet\"];<!-- [et_pb_line_break_holder] -->      const qRows = incomplete.map(d => [<!-- [et_pb_line_break_holder] -->        d.Datetime, d.station, d.parameter,<!-- [et_pb_line_break_holder] -->        `Ofullst\u00e4ndigt (${d.kvalitet_detalj})`<!-- [et_pb_line_break_holder] -->      ]);<!-- [et_pb_line_break_holder] -->      const qws = XLSX.utils.aoa_to_sheet([qHeader, ...qRows]);<!-- [et_pb_line_break_holder] -->      qws[\"!cols\"] = [{ wch: 18 }, { wch: 24 }, { wch: 16 }, { wch: 32 }];<!-- [et_pb_line_break_holder] -->      XLSX.utils.book_append_sheet(wb, qws, \"Datakvalitet\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    return wb;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-dl-downloadBtn\").addEventListener(\"click\", async () => {<!-- [et_pb_line_break_holder] -->    const from = document.getElementById(\"slb-dl-dateFrom\").value;<!-- [et_pb_line_break_holder] -->    const to   = document.getElementById(\"slb-dl-dateTo\").value;<!-- [et_pb_line_break_holder] -->    const btn  = document.getElementById(\"slb-dl-downloadBtn\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (to > DATA_CUTOFF) {<!-- [et_pb_line_break_holder] -->      dlSetStatus(`Slutdatumet f\u00e5r inte vara senare \u00e4n ${DATA_CUTOFF} \u2014 data efter detta datum kan vara prelimin\u00e4rt.`, \"error\");<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    if (DATA_START && from < DATA_START) {<!-- [et_pb_line_break_holder] -->      dlSetStatus(`Startdatumet f\u00e5r inte vara tidigare \u00e4n ${DATA_START}.`, \"error\");<!-- [et_pb_line_break_holder] -->      return;<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    btn.disabled = true;<!-- [et_pb_line_break_holder] -->    dlSetStatus(\"H\u00e4mtar data...\");<!-- [et_pb_line_break_holder] -->    dlSetLoading(true);<!-- [et_pb_line_break_holder] -->    slbHideErrorNotice(\"slb-dl-api-error-notice\");<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    try {<!-- [et_pb_line_break_holder] -->      const stationsArr = [...selectedStations];<!-- [et_pb_line_break_holder] -->      const paramsArr   = [...selectedParams].filter(p =><!-- [et_pb_line_break_holder] -->        stationsArr.some(s => allTimeseries.some(t => t.Stationsnamn === s && t.Parameter === p))<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const url = `${BASE}\/get-timeseries\/?key=${KEY}`<!-- [et_pb_line_break_holder] -->        + `&stations=${encodeURIComponent(stationsArr.join(\",\"))}`<!-- [et_pb_line_break_holder] -->        + `&parameters=${paramsArr.join(\",\")}`<!-- [et_pb_line_break_holder] -->        + `&format=fast`<!-- [et_pb_line_break_holder] -->        + `&from_datetime=${encodeURIComponent(fmtDatetime(from, \"00:00\"))}`<!-- [et_pb_line_break_holder] -->        + `&to_datetime=${encodeURIComponent(fmtDatetime(to, \"23:59\"))}`;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const rawJson = await slbFetchJSON(url);<!-- [et_pb_line_break_holder] -->      const rawData = normalizeFastFormat(rawJson);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (!rawData.length) {<!-- [et_pb_line_break_holder] -->        dlSetStatus(\"Ingen data hittades. Kontrollera att valda stationer m\u00e4ter valda parametrar under angiven period.\", \"error\");<!-- [et_pb_line_break_holder] -->        dlSetLoading(false);<!-- [et_pb_line_break_holder] -->        btn.disabled = false;<!-- [et_pb_line_break_holder] -->        return;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      dlSetStatus(\"Aggregerar och kvalitetss\u00e4krar data...\");<!-- [et_pb_line_break_holder] -->      const aggregated = aggregateData(rawData, selectedRes);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (selectedRes === \"yearly\" && aggregated.length === 0) {<!-- [et_pb_line_break_holder] -->        dlSetStatus(\"Inga kompletta \u00e5r i valt intervall. \u00c5rsmedelv\u00e4rden ber\u00e4knas bara f\u00f6r avslutade kalender\u00e5r.\", \"warn\");<!-- [et_pb_line_break_holder] -->        dlSetLoading(false);<!-- [et_pb_line_break_holder] -->        btn.disabled = false;<!-- [et_pb_line_break_holder] -->        return;<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      dlSetStatus(\"Skapar Excel-fil...\");<!-- [et_pb_line_break_holder] -->      const incompleteCount = aggregated.filter(d => d.kvalitet !== \"OK\").length;<!-- [et_pb_line_break_holder] -->      const wb = generateExcel(aggregated, selectedRes);<!-- [et_pb_line_break_holder] -->      const resLabel = { hourly:\"timmedel\", daily:\"dygnsmedel\", yearly:\"\u00e5rsmedel\" }[selectedRes];<!-- [et_pb_line_break_holder] -->      const filename = `matdata_${selectedKommun}_${from}_${to}_${resLabel}.xlsx`;<!-- [et_pb_line_break_holder] -->      XLSX.writeFile(wb, filename);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      if (incompleteCount > 0) {<!-- [et_pb_line_break_holder] -->        const unit = selectedRes === \"yearly\" ? \"\u00e5r\" : \"dygn\";<!-- [et_pb_line_break_holder] -->        dlSetStatus(<!-- [et_pb_line_break_holder] -->          `\u2713 ${filename} nedladdad. OBS: ${incompleteCount} ${unit} med otillr\u00e4cklig datat\u00e4ckning (<75%) \u2014 se fliken \"Datakvalitet\".`,<!-- [et_pb_line_break_holder] -->          \"warn\"<!-- [et_pb_line_break_holder] -->        );<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        dlSetStatus(`\u2713 ${filename} nedladdad.`);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      slbShowErrorNotice(\"slb-dl-api-error-notice\");<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    dlSetLoading(false);<!-- [et_pb_line_break_holder] -->    btn.disabled = false;<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-dl-kommunSelect\").addEventListener(\"change\", e => {<!-- [et_pb_line_break_holder] -->    selectedKommun = e.target.value || null;<!-- [et_pb_line_break_holder] -->    dateFromManual = false;<!-- [et_pb_line_break_holder] -->    dateToManual   = false;<!-- [et_pb_line_break_holder] -->    updateStations();<!-- [et_pb_line_break_holder] -->    SlbKommunState.set(selectedKommun, \"data\");<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  SlbKommunState.onChange((kommun, source) => {<!-- [et_pb_line_break_holder] -->    if (source === \"data\") return;<!-- [et_pb_line_break_holder] -->    const sel = document.getElementById(\"slb-dl-kommunSelect\");<!-- [et_pb_line_break_holder] -->    const match = [...sel.options].find(o => o.value === kommun);<!-- [et_pb_line_break_holder] -->    if (match) {<!-- [et_pb_line_break_holder] -->      sel.value = kommun;<!-- [et_pb_line_break_holder] -->      selectedKommun = kommun;<!-- [et_pb_line_break_holder] -->      updateStations();<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.querySelectorAll(\"#slb-dl-paramGroup .slb-dl-toggle-btn\").forEach(btn => {<!-- [et_pb_line_break_holder] -->    btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->      if (btn.classList.contains(\"slb-dl-disabled\")) return;<!-- [et_pb_line_break_holder] -->      const p = btn.dataset.param;<!-- [et_pb_line_break_holder] -->      if (selectedParams.has(p)) {<!-- [et_pb_line_break_holder] -->        selectedParams.delete(p); <!-- [et_pb_line_break_holder] -->        btn.classList.remove(\"slb-dl-active\");<!-- [et_pb_line_break_holder] -->        btn.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->      } else {<!-- [et_pb_line_break_holder] -->        selectedParams.add(p); <!-- [et_pb_line_break_holder] -->        btn.classList.add(\"slb-dl-active\");<!-- [et_pb_line_break_holder] -->        btn.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->      updateDownloadBtn();<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.querySelectorAll(\"#slb-dl-resolutionGroup .slb-dl-toggle-btn\").forEach(btn => {<!-- [et_pb_line_break_holder] -->    btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->      document.querySelectorAll(\"#slb-dl-resolutionGroup .slb-dl-toggle-btn\")<!-- [et_pb_line_break_holder] -->        .forEach(b => {<!-- [et_pb_line_break_holder] -->          b.classList.remove(\"slb-dl-active\");<!-- [et_pb_line_break_holder] -->          b.setAttribute(\"aria-pressed\", \"false\");<!-- [et_pb_line_break_holder] -->        });<!-- [et_pb_line_break_holder] -->      btn.classList.add(\"slb-dl-active\");<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-pressed\", \"true\");<!-- [et_pb_line_break_holder] -->      selectedRes = btn.dataset.res;<!-- [et_pb_line_break_holder] -->    });<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-dl-dateFrom\").addEventListener(\"change\", () => {<!-- [et_pb_line_break_holder] -->    dateFromManual = true;<!-- [et_pb_line_break_holder] -->    updateDownloadBtn();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-dl-dateTo\").addEventListener(\"change\", () => {<!-- [et_pb_line_break_holder] -->    dateToManual = true;<!-- [et_pb_line_break_holder] -->    updateDownloadBtn();<!-- [et_pb_line_break_holder] -->  });<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  const today = new Date();<!-- [et_pb_line_break_holder] -->  const yesterday = new Date(today); yesterday.setDate(today.getDate()-1);<!-- [et_pb_line_break_holder] -->  const pad = n => String(n).padStart(2,\"0\");<!-- [et_pb_line_break_holder] -->  const yesterdayStr = `${yesterday.getFullYear()}-${pad(yesterday.getMonth()+1)}-${pad(yesterday.getDate())}`;<!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-dl-dateFrom\").value = `${today.getFullYear()-1}-01-01`;<!-- [et_pb_line_break_holder] -->  document.getElementById(\"slb-dl-dateTo\").value   = yesterdayStr <= DATA_CUTOFF ? yesterdayStr : DATA_CUTOFF;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  init();<!-- [et_pb_line_break_holder] -->})();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->\/* \u2500\u2500 postMessage: rapportera h\u00f6jd till WordPress \u2500\u2500 *\/<!-- [et_pb_line_break_holder] -->function slbReportHeight() {<!-- [et_pb_line_break_holder] -->  window.parent.postMessage({<!-- [et_pb_line_break_holder] -->    type:\"iframeHeight\",<!-- [et_pb_line_break_holder] -->    height:Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)<!-- [et_pb_line_break_holder] -->  },\"*\");<!-- [et_pb_line_break_holder] -->}<!-- [et_pb_line_break_holder] -->window.addEventListener(\"resize\", ()=>setTimeout(slbReportHeight,200));<!-- [et_pb_line_break_holder] -->window.addEventListener(\"load\",   ()=>setTimeout(slbReportHeight,600));<!-- [et_pb_line_break_holder] --><\/script><!-- [et_pb_line_break_holder] --><\/body><!-- [et_pb_line_break_holder] --><\/html>[\/et_pb_code][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; admin_label=&#8221;Latest Work Section&#8221; _builder_version=&#8221;4.27.6&#8243; background_color=&#8221;#f7f7f7&#8243; max_width=&#8221;75%&#8221; max_width_tablet=&#8221;75%&#8221; max_width_phone=&#8221;100%&#8221; max_width_last_edited=&#8221;on|phone&#8221; module_alignment=&#8221;center&#8221; custom_margin=&#8221;||||false|false&#8221; custom_padding=&#8221;60px||60px||false|false&#8221; animation_style=&#8221;fade&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row admin_label=&#8221;Service Section Title&#8221; _builder_version=&#8221;4.27.6&#8243; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; custom_margin=&#8221;||20px||false|false&#8221; animation_direction=&#8221;top&#8221; saved_tabs=&#8221;all&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.16&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_text content_tablet=&#8221;<\/p>\n<h2>Samarbete med \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund<\/h2>\n<p>&#8221; content_phone=&#8221;<\/p>\n<h2>Samarbete med \u00d6stra Sveriges Luftv\u00e5rds- f\u00f6rbund<\/h2>\n<p>&#8221; content_last_edited=&#8221;on|phone&#8221; admin_label=&#8221;Title&#8221; _builder_version=&#8221;4.27.6&#8243; text_font=&#8221;Montserrat||||||||&#8221; text_text_color=&#8221;#747d88&#8243; text_font_size=&#8221;16px&#8221; text_line_height=&#8221;1.9em&#8221; header_font=&#8221;||||||||&#8221; header_2_font=&#8221;Montserrat|700||on|||||&#8221; header_2_font_size=&#8221;42px&#8221; header_2_line_height=&#8221;1.3em&#8221; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; text_orientation=&#8221;center&#8221; module_alignment=&#8221;center&#8221; animation_direction=&#8221;bottom&#8221; header_2_font_size_tablet=&#8221;42px&#8221; header_2_font_size_phone=&#8221;30px&#8221; header_2_font_size_last_edited=&#8221;on|phone&#8221; global_colors_info=&#8221;{}&#8221;]<\/p>\n<h2>Samarbete med \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund<\/h2>\n<p>[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row admin_label=&#8221;Service Section Title&#8221; _builder_version=&#8221;4.27.6&#8243; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; custom_margin=&#8221;||||false|false&#8221; custom_padding=&#8221;0px||||false|false&#8221; animation_direction=&#8221;top&#8221; saved_tabs=&#8221;all&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;4_4&#8243; _builder_version=&#8221;4.16&#8243; custom_padding=&#8221;|||&#8221; global_colors_info=&#8221;{}&#8221; custom_padding__hover=&#8221;|||&#8221;][et_pb_text admin_label=&#8221;Title&#8221; _builder_version=&#8221;4.27.6&#8243; text_font=&#8221;Montserrat||||||||&#8221; text_text_color=&#8221;#747d88&#8243; text_font_size=&#8221;16px&#8221; text_line_height=&#8221;1.9em&#8221; header_font=&#8221;||||||||&#8221; header_2_font=&#8221;Montserrat|700||on|||||&#8221; header_2_font_size=&#8221;42px&#8221; header_2_line_height=&#8221;1.3em&#8221; background_size=&#8221;initial&#8221; background_position=&#8221;top_left&#8221; background_repeat=&#8221;repeat&#8221; text_orientation=&#8221;center&#8221; module_alignment=&#8221;center&#8221; animation_direction=&#8221;bottom&#8221; global_colors_info=&#8221;{}&#8221;]Vi hanterar \u00e4ven drift och \u00f6vervakning f\u00f6r \u00d6stra Sveriges Luftv\u00e5rdsf\u00f6rbund, som ansvarar f\u00f6r luftkvaliteten i sex l\u00e4n i syd\u00f6stra Sverige. F\u00f6rbundet, som best\u00e5r av 71 medlemsorganisationer, inklusive kommuner, regioner och f\u00f6retag, arbetar f\u00f6r att s\u00e4kerst\u00e4lla ren luft i regionen.[\/et_pb_text][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=&#8221;1&#8243; _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#FCBF0A&#8221; max_width=&#8221;75%&#8221; max_width_tablet=&#8221;75%&#8221; max_width_phone=&#8221;100%&#8221; max_width_last_edited=&#8221;on|phone&#8221; module_alignment=&#8221;center&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_row column_structure=&#8221;1_2,1_2&#8243; use_custom_gutter=&#8221;on&#8221; gutter_width=&#8221;1&#8243; make_equal=&#8221;on&#8221; _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; background_color=&#8221;#ffeaad&#8221; background_enable_image=&#8221;off&#8221; width=&#8221;100%&#8221; max_width=&#8221;none&#8221; custom_padding=&#8221;0px||0px||false|false&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; background_enable_color=&#8221;off&#8221; custom_css_main_element=&#8221;margin: auto;&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_cta title=&#8221;Kontakta oss&#8221; button_url=&#8221;@ET-DC@eyJkeW5hbWljIjp0cnVlLCJjb250ZW50IjoicG9zdF9saW5rX3VybF9wYWdlIiwic2V0dGluZ3MiOnsicG9zdF9pZCI6IjIzNDk5NSJ9fQ==@&#8221; button_text=&#8221;KONTAKTA OSS&#8221; _builder_version=&#8221;4.27.6&#8243; _dynamic_attributes=&#8221;button_url&#8221; _module_preset=&#8221;default&#8221; header_level=&#8221;h3&#8243; header_font=&#8221;Montserrat|800||on|||||&#8221; header_text_color=&#8221;#000000&#8243; header_font_size=&#8221;30px&#8221; body_text_color=&#8221;#000000&#8243; background_color=&#8221;#ffeaad&#8221; custom_button=&#8221;on&#8221; button_text_size=&#8221;17px&#8221; button_text_color=&#8221;#FFFFFF&#8221; button_bg_color=&#8221;#000000&#8243; button_border_width=&#8221;4px&#8221; button_border_color=&#8221;#000000&#8243; button_border_radius=&#8221;10px&#8221; button_font=&#8221;Montserrat|700|||||||&#8221; button_use_icon=&#8221;off&#8221; text_orientation=&#8221;left&#8221; background_layout=&#8221;light&#8221; width=&#8221;75%&#8221; max_width=&#8221;100%&#8221; custom_margin=&#8221;|||5%|false|false&#8221; global_colors_info=&#8221;{}&#8221; button_text_color__hover_enabled=&#8221;on|desktop&#8221; button_text_color__hover=&#8221;#000000&#8243; button_bg_color__hover_enabled=&#8221;on|desktop&#8221; button_bg_color__hover=&#8221;#FFFFFF&#8221; button_bg_enable_color__hover=&#8221;on&#8221; button_border_color__hover_enabled=&#8221;on|hover&#8221; button_border_color__hover=&#8221;#000000&#8243;]<\/p>\n<p><strong>Beh\u00f6ver du r\u00e5dgivning eller tj\u00e4nster inom luft?<\/strong><\/p>\n<p>Vill du anlita SLB-analys f\u00f6r n\u00e5got av dina uppdrag? Beskriv ditt uppdrag och verksamhetsbehov s\u00e5 \u00e5terkommer vi till dig!<\/p>\n<p>[\/et_pb_cta][\/et_pb_column][et_pb_column type=&#8221;1_2&#8243; _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; background_enable_color=&#8221;off&#8221; background_enable_image=&#8221;off&#8221; background_size=&#8221;contain&#8221; background_position=&#8221;center_right&#8221; background_horizontal_offset=&#8221;0%&#8221; global_colors_info=&#8221;{}&#8221;][et_pb_image src=&#8221;https:\/\/www.slb.nu\/slbanalys\/wp-content\/uploads\/2024\/12\/Contact-2-16.7-scaled.jpg&#8221; title_text=&#8221;Contact #2 16.7&#8243; disabled_on=&#8221;on|off|off&#8221; _builder_version=&#8221;4.27.6&#8243; _module_preset=&#8221;default&#8221; global_colors_info=&#8221;{}&#8221;][\/et_pb_image][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>M\u00e4tdataNedan visas aktuella halter av partiklar, (PM10 och PM2.5), kv\u00e4vedioxid (NO2) och ozon (O3) vid v\u00e5ra fasta m\u00e4tstationer. Ut\u00f6ver detta redovisar vi \u00e4ven m\u00e4tdata \u00e5t v\u00e5ra kommunpartners. Den realtidsdata som visas i figurerna \u00e4r prelimin\u00e4r och har inte genomg\u00e5tt ordinarie kvalitetsgranskning. Detta inneb\u00e4r att felaktiga v\u00e4rden kan f\u00f6rekomma.S\u00e5 anv\u00e4nder du m\u00e4tdata-f\u00f6nstret V\u00e4lj typ av m\u00e4tdata [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"class_list":["post-234859","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/pages\/234859","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/comments?post=234859"}],"version-history":[{"count":113,"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/pages\/234859\/revisions"}],"predecessor-version":[{"id":237022,"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/pages\/234859\/revisions\/237022"}],"wp:attachment":[{"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/media?parent=234859"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}