{"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-05-11T12:36:42","modified_gmt":"2026-05-11T11:36:42","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 _builder_version=&#8221;4.27.2&#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.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;|||&#8221; custom_padding=&#8221;60px||60px||false|false&#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.2&#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_style=&#8221;flip&#8221; animation_direction=&#8221;top&#8221; animation_intensity_flip=&#8221;20%&#8221; global_colors_info=&#8221;{}&#8221;]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.[\/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.2&#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; global_colors_info=&#8221;{}&#8221;][et_pb_row _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; width_tablet=&#8221;&#8221; width_phone=&#8221;90%&#8221; width_last_edited=&#8221;on|phone&#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> (Luften idag, Milj\u00f6kvalitetsnormer och m\u00e5l, Meteorologi 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.[\/et_pb_text][\/et_pb_column][\/et_pb_row][et_pb_row _builder_version=&#8221;4.27.2&#8243; _module_preset=&#8221;default&#8221; width_tablet=&#8221;100%&#8221; width_phone=&#8221;100%&#8221; width_last_edited=&#8221;on|tablet&#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 Stockholm - Realtidsdata om PM10, PM2.5, NO2 och O3 fr\u00e5n m\u00e4tstationer i Stockholms l\u00e4n\"><!-- [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\" defer><\/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] --><!-- [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: 1100px;<!-- [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] -->  \/* \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 16px 0;<!-- [et_pb_line_break_holder] -->    margin-bottom: 20px;<!-- [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: 520px;<!-- [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: 860px;<!-- [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] -->  .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] -->  \/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\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] -->    LUFTEN IDAG \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: 1px solid #eee;<!-- [et_pb_line_break_holder] -->    padding-top: 14px;<!-- [et_pb_line_break_holder] -->    margin-top: 4px;<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  .slb-prognos-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-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: 1100px;<!-- [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] -->      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] --><!-- [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] --><!-- [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\">Luften idag<\/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 LUFTEN IDAG<!-- [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] --><!-- [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;\"><!-- [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] -->      <\/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=\"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<h1 style=\"font-size: 15px;\"><!\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:10px;\"><!-- [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\">F\u00f6reg\u00e5ende dygn<\/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] --><!-- [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<h3 class=\"slb-prognos-header\">Prognos f\u00f6r Stockholms innerstadsgator<\/h3>\n<p><!-- [et_pb_line_break_holder] -->          <\/p>\n<div class=\"slb-prognos-row\"><!-- [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] -->      <\/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 mkn-hidden\" 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=\"mkn-filter-row\"><!-- [et_pb_line_break_holder] -->        <!-- 4. \u00c5r --><!-- [et_pb_line_break_holder] -->        <\/p>\n<div class=\"mkn-filter-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] -->      <!-- 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] -->      <!-- 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] -->      <\/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] -->    <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] --><!-- [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] -->\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\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] -->(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] -->      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] -->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 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] -->    \"karta\":  \"slb-panel-karta\",<!-- [et_pb_line_break_holder] -->    \"data\":   \"slb-panel-data\",<!-- [et_pb_line_break_holder] -->  };<!-- [et_pb_line_break_holder] -->  const targetId = 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] -->}<!-- [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] -->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 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] -->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] -->\/* \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\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 LUFTEN IDAG<!-- [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 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] -->  <!-- [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 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 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 (activeKommun && info.kommun !== activeKommun) 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\").textContent =<!-- [et_pb_line_break_holder] -->      `Prognos f\u00f6r Stockholms innerstadsgator \u2014 ${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 idag sedan midnatt (${pad(today.getDate())}\/${pad(today.getMonth()+1)} kl. ${h}:00) \u2014 ${activeParam === \"NO2\" ? \"NO\u2082\" : activeParam}`;<!-- [et_pb_line_break_holder] -->    } else {<!-- [et_pb_line_break_holder] -->      header.textContent = `Dygnsmedelv\u00e4rden f\u00f6reg\u00e5ende dygn (${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] -->  async function loadAll() {<!-- [et_pb_line_break_holder] -->    slbSetLoading(\"slb-luft-loading\", true);<!-- [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] -->      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] -->      allData = [];<!-- [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([]);<!-- [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}`<!-- [et_pb_line_break_holder] -->          +`&date_range=2`<!-- [et_pb_line_break_holder] -->          +`&format=fast`;<!-- [et_pb_line_break_holder] -->        return slbFetchJSON(url).catch(()=>[]);<!-- [et_pb_line_break_holder] -->      }));<!-- [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] -->        const datetimes = d.Datetime;<!-- [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] -->          datetimes.forEach((dt, idx) => {<!-- [et_pb_line_break_holder] -->            allData.push({<!-- [et_pb_line_break_holder] -->              Datetime: dt,<!-- [et_pb_line_break_holder] -->              parameter: param,<!-- [et_pb_line_break_holder] -->              station:   station,<!-- [et_pb_line_break_holder] -->              value:     values[idx]<!-- [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] -->      slbSetStatus(\"slb-luft-status\", `Laddade ${relevant.length} stationer \u2014 ${allData.length} m\u00e4tpunkter`);<!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      slbSetStatus(\"slb-luft-status\", `Kunde inte ansluta: ${e.message}`, true);<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] -->    <!-- [et_pb_line_break_holder] -->    activeKommun = \"Stockholm\";<!-- [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] -->    const stationsWithData = new Set(allData.map(d => d.station));<!-- [et_pb_line_break_holder] -->    const kommuner = [...new Set(<!-- [et_pb_line_break_holder] -->      allStations<!-- [et_pb_line_break_holder] -->        .filter(s =><!-- [et_pb_line_break_holder] -->          stationsWithData.has(s.Stationsnamn) &&<!-- [et_pb_line_break_holder] -->          [\"Gaturum\",\"Regional bakgrund\",\"Urban bakgrund\"].includes(s.typ?.trim())<!-- [et_pb_line_break_holder] -->        )<!-- [et_pb_line_break_holder] -->        .map(s => s.kommun)<!-- [et_pb_line_break_holder] -->        .filter(Boolean)<!-- [et_pb_line_break_holder] -->    )].sort();<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const kommunSel = document.getElementById(\"slb-luft-kommunSelect\");<!-- [et_pb_line_break_holder] -->    kommunSel.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] -->    const KOMMUN_ALIAS = { \"Visby\": \"Gotland\" };<!-- [et_pb_line_break_holder] -->    kommuner<!-- [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] -->        kommunSel.appendChild(opt);<!-- [et_pb_line_break_holder] -->      });<!-- [et_pb_line_break_holder] -->    activeKommun = \"Stockholm\";<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    const urlParams = new URLSearchParams(window.location.search);<!-- [et_pb_line_break_holder] -->    const kommunParam = urlParams.get(\"kommun\");<!-- [et_pb_line_break_holder] -->    if (kommunParam) {<!-- [et_pb_line_break_holder] -->      const normalized = kommunParam.toLowerCase() === \"gotland\" ? \"Visby\" : kommunParam;<!-- [et_pb_line_break_holder] -->      const match = [...kommunSel.options].find(o => <!-- [et_pb_line_break_holder] -->        o.value.toLowerCase() === normalized.toLowerCase()<!-- [et_pb_line_break_holder] -->      );<!-- [et_pb_line_break_holder] -->      if (match) {<!-- [et_pb_line_break_holder] -->        kommunSel.value = match.value;<!-- [et_pb_line_break_holder] -->        activeKommun = match.value;<!-- [et_pb_line_break_holder] -->        renderLuft();<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    let rt;<!-- [et_pb_line_break_holder] -->    window.addEventListener(\"resize\", () => { clearTimeout(rt); rt=setTimeout(renderLuft, 150); });<!-- [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 (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] -->    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.classList.toggle(\"slb-unavailable\", !hasType);<!-- [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 (activeKommun && info.kommun !== activeKommun) 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(d.Datetime);<!-- [et_pb_line_break_holder] -->      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((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 = 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: `${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] -->    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: [ago- 2*3600000, now]},<!-- [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] -->  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] -->    renderLuft();<!-- [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] -->      renderLuft();<!-- [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] -->    renderLuft();<!-- [et_pb_line_break_holder] -->    loadPrognos();<!-- [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] -->  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] -->  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] -->  };<!-- [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 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] --><!-- [et_pb_line_break_holder] -->  function resolveNorm() {<!-- [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] --><!-- [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(tree).forEach(gid => {<!-- [et_pb_line_break_holder] -->      const btn = document.createElement(\"button\");<!-- [et_pb_line_break_holder] -->      btn.className = \"slb-param-tab\" + (gid === state.gransvarde ? \" slb-active\" : \"\");<!-- [et_pb_line_break_holder] -->      btn.dataset.gransvarde = gid;<!-- [et_pb_line_break_holder] -->      btn.textContent = GRANSVARDE_LABELS[gid] || gid;<!-- [et_pb_line_break_holder] -->      btn.setAttribute(\"aria-pressed\", gid === state.gransvarde ? \"true\" : \"false\");<!-- [et_pb_line_break_holder] -->      btn.addEventListener(\"click\", () => pickGransvarde(gid));<!-- [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 updateUppl\u00f6sning() {<!-- [et_pb_line_break_holder] -->    const branch = FILTER_TREE[state.amne]?.[state.gransvarde];<!-- [et_pb_line_break_holder] -->    const hasBoth = branch && branch.dygn && branch.timmar;<!-- [et_pb_line_break_holder] -->    const group = document.getElementById(\"mkn-uppl\u00f6sning-group\");<!-- [et_pb_line_break_holder] -->    group.classList.toggle(\"mkn-hidden\", !hasBoth);<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->    if (hasBoth) {<!-- [et_pb_line_break_holder] -->      document.querySelectorAll(\"#mkn-uppl\u00f6sning-btns [data-res]\").forEach(b => {<!-- [et_pb_line_break_holder] -->        const active = b.dataset.res === state.res;<!-- [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] -->    } else if (branch) {<!-- [et_pb_line_break_holder] -->      state.res = branch.timmar ? \"timmar\" : \"dygn\";<!-- [et_pb_line_break_holder] -->    }<!-- [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] -->    updateUppl\u00f6sning();<!-- [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] -->    document.querySelectorAll(\"#mkn-gransvarde-btns .slb-param-tab\").forEach(b => {<!-- [et_pb_line_break_holder] -->      const active = b.dataset.gransvarde === gid;<!-- [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] -->    updateUppl\u00f6sning();<!-- [et_pb_line_break_holder] -->    switchNorm();<!-- [et_pb_line_break_holder] -->  }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->  document.querySelectorAll(\"#mkn-uppl\u00f6sning-btns [data-res]\").forEach(btn => {<!-- [et_pb_line_break_holder] -->    btn.addEventListener(\"click\", () => {<!-- [et_pb_line_break_holder] -->      state.res = btn.dataset.res;<!-- [et_pb_line_break_holder] -->      document.querySelectorAll(\"#mkn-uppl\u00f6sning-btns [data-res]\").forEach(b => {<!-- [et_pb_line_break_holder] -->        const active = b.dataset.res === state.res;<!-- [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] -->      switchNorm();<!-- [et_pb_line_break_holder] -->    });<!-- [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 url = `${BASE}\/get-exceedances\/?key=${KEY}&norm=${normKey}&years=${YEARS.join(\",\")}`;<!-- [et_pb_line_break_holder] -->    apiCache[normKey] = await slbFetchJSON(url);<!-- [et_pb_line_break_holder] -->    return apiCache[normKey];<!-- [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] -->    try {<!-- [et_pb_line_break_holder] -->      if (!apiCache[normKey]) await fetchExceedances(normKey);<!-- [et_pb_line_break_holder] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      slbSetStatus(\"slb-mkn-status\", `Fel: ${e.message}`, true);<!-- [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] -->    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] -->      renderArbtnss();<!-- [et_pb_line_break_holder] -->      renderGransvardebtns();<!-- [et_pb_line_break_holder] -->      updateUppl\u00f6sning();<!-- [et_pb_line_break_holder] --><!-- [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\"].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();<!-- [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] -->      const KOMMUN_ALIAS = { \"Visby\": \"Gotland\" };<!-- [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 urlParams = new URLSearchParams(window.location.search);<!-- [et_pb_line_break_holder] -->      const kommunParam = urlParams.get(\"kommun\");<!-- [et_pb_line_break_holder] -->      if (kommunParam) {<!-- [et_pb_line_break_holder] -->        const normalized = kommunParam.toLowerCase() === \"gotland\" ? \"Visby\" : kommunParam;<!-- [et_pb_line_break_holder] -->        const match = [...mknKommunSel.options].find(o =><!-- [et_pb_line_break_holder] -->          o.value.toLowerCase() === normalized.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] -->      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\"].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] -->      slbSetStatus(\"slb-mkn-status\", `Kunde inte ansluta: ${e.message}`, true);<!-- [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 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] -->      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] -->      const info = allStations.find(s => s.Stationsnamn === n);<!-- [et_pb_line_break_holder] -->      if (!info || !info.typ || !activeTypes.has(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] -->  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] -->    renderMkn();<!-- [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 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] -->  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] -->    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] -->      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] -->      slbSetStatus(\"slb-meteo-status\", `Kunde inte h\u00e4mta v\u00e4derdata: ${e.message}`, true);<!-- [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] -->  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 => 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 => 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 => 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 => 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 => 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 => 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 => 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 => 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\"];<!-- [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] -->    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] --><!-- [et_pb_line_break_holder] -->      const kommuner = [...new Set(allStations.map(s => s.kommun))].sort();<!-- [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] -->      const KOMMUN_ALIAS = { \"Visby\": \"Gotland\" };<!-- [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 urlParams = new URLSearchParams(window.location.search);<!-- [et_pb_line_break_holder] -->      const kommunParam = urlParams.get(\"kommun\");<!-- [et_pb_line_break_holder] -->      if (kommunParam) {<!-- [et_pb_line_break_holder] -->        const normalized = kommunParam.toLowerCase() === \"gotland\" ? \"Visby\" : kommunParam;<!-- [et_pb_line_break_holder] -->        const match = [...sel.options].find(o =><!-- [et_pb_line_break_holder] -->          o.value.toLowerCase() === normalized.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] -->    } catch(e) {<!-- [et_pb_line_break_holder] -->      dlSetStatus(\"Kunde inte ansluta till proxy: \" + e.message, \"error\");<!-- [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 byParam = {};<!-- [et_pb_line_break_holder] -->    for (const d of aggregated) {<!-- [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 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] -->    for (const [param, rows] of Object.entries(byParam)) {<!-- [et_pb_line_break_holder] -->      const stations = [...new Set(rows.map(r => r.station))].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.station}`] = r;<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const header = [timeLabel];<!-- [et_pb_line_break_holder] -->      for (const s of stations) {<!-- [et_pb_line_break_holder] -->        header.push(s);<!-- [et_pb_line_break_holder] -->        if (resolution !== \"hourly\") header.push(`${s} \u2014 datakvalitet`);<!-- [et_pb_line_break_holder] -->      }<!-- [et_pb_line_break_holder] --><!-- [et_pb_line_break_holder] -->      const sheetData = [header];<!-- [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 s of stations) {<!-- [et_pb_line_break_holder] -->          const entry = lookup[`${t}__${s}`];<!-- [et_pb_line_break_holder] -->          if (!entry) {<!-- [et_pb_line_break_holder] -->            row.push(\"\"); 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] -->              const flag = entry.kvalitet === \"OK\"<!-- [et_pb_line_break_holder] -->                ? \"OK\"<!-- [et_pb_line_break_holder] -->                : `Ofullst\u00e4ndigt (${entry.kvalitet_detalj})`;<!-- [et_pb_line_break_holder] -->              row.push(flag);<!-- [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\"] = [{ wch: 18 }, ...stations.flatMap(() =><!-- [et_pb_line_break_holder] -->        resolution === \"hourly\" ? [{ wch: 20 }] : [{ wch: 20 }, { wch: 28 }]<!-- [et_pb_line_break_holder] -->      )];<!-- [et_pb_line_break_holder] -->      XLSX.utils.book_append_sheet(wb, ws, param.slice(0, 31));<!-- [et_pb_line_break_holder] -->    }<!-- [et_pb_line_break_holder] --><!-- [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:12},{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] --><!-- [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] -->      dlSetStatus(\"Fel vid h\u00e4mtning: \" + e.message, \"error\");<!-- [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] -->  });<!-- [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.2&#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; global_colors_info=&#8221;{}&#8221;][et_pb_row admin_label=&#8221;Service Section Title&#8221; _builder_version=&#8221;4.27.2&#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_style=&#8221;fade&#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.2&#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_style=&#8221;slide&#8221; animation_direction=&#8221;bottom&#8221; animation_intensity_slide=&#8221;4%&#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.2&#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_style=&#8221;fade&#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.2&#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_style=&#8221;slide&#8221; animation_direction=&#8221;bottom&#8221; animation_intensity_slide=&#8221;4%&#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;Ta in offert&#8221; button_url=&#8221;http:\/\/Text&#8221; button_text=&#8221;KONTAKTA OSS&#8221; _builder_version=&#8221;4.27.2&#8243; _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 [&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":51,"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/pages\/234859\/revisions"}],"predecessor-version":[{"id":236235,"href":"https:\/\/www.slb.nu\/slbanalys\/wp-json\/wp\/v2\/pages\/234859\/revisions\/236235"}],"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}]}}