{"id":17,"date":"2026-06-21T16:20:37","date_gmt":"2026-06-21T16:20:37","guid":{"rendered":"https:\/\/chill-lab.eu\/home\/"},"modified":"2026-07-05T10:20:02","modified_gmt":"2026-07-05T10:20:02","slug":"home","status":"publish","type":"page","link":"https:\/\/chill-lab.eu\/it\/","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"17\" class=\"elementor elementor-17\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bdb01a4 e-flex e-con-boxed e-con e-parent\" data-id=\"bdb01a4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3abc6d9 elementor-widget elementor-widget-html\" data-id=\"3abc6d9\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"chill-page chill-bridge\" aria-labelledby=\"chill-bridge-title\">\n  <div class=\"chill-hero chill-bridge-hero\">\n    <p class=\"chill-kicker\">From mapping to measurement<\/p>\n\n    <h2 id=\"chill-bridge-title\" class=\"chill-title\">\n      Two ways to read the chilling effect\n      <span class=\"chill-subtitle\">Atlas maps cases. Barometer measures pressure.<\/span>\n    <\/h2>\n\n    <p class=\"chill-lead\">\n      CHILL Lab combines qualitative case-mapping with a structured assessment of chilling pressure.\n      The Atlas helps locate and contextualise cases; the Barometer translates selected indicators into\n      an interpretable score.\n    <\/p>\n\n    <div class=\"chill-grid chill-bridge-grid\">\n      <article class=\"chill-card chill-bridge-card chill-theme-atlas\">\n        <span class=\"chill-tag\">01 \u00b7 Mapping<\/span>\n\n        <h3>CHILL Atlas<\/h3>\n\n        <p>\n          A case-based map of restrictive measures, judicial decisions, actors, rights involved,\n          and affected subjects across countries and thematic areas.\n        <\/p>\n\n        <a class=\"chill-card-link primary\" href=\"#chill-atlas-map\">Explore the map<\/a>\n      <\/article>\n\n      <article class=\"chill-card chill-bridge-card chill-theme-barometer\">\n        <span class=\"chill-tag\">02 \u00b7 Measurement<\/span>\n\n        <h3>CHILL Barometer<\/h3>\n\n        <p>\n          An analytical tool that aggregates case indicators to estimate the intensity, direction,\n          and distribution of chilling pressure.\n        <\/p>\n\n        <a class=\"chill-card-link primary\" href=\"#chill-barometer-app\">Read the score<\/a>\n      <\/article>\n    <\/div>\n  <\/div>\n<\/section>\n\n<style>\n  .chill-bridge {\n    margin-top: clamp( px, 5vw, 58px);\n    margin-bottom: clamp(30px, 5vw, px);\n  }\n\n  .chill-bridge-hero {\n    --chill-accent: var(--chill-barometer);\n    --chill-accent-soft: var(--chill-barometer-soft);\n\n    background:\n      radial-gradient(circle at 0% 0%, rgba(249, 115, 22, 0.18), transparent 34%),\n      radial-gradient(circle at 100% 100%, rgba(56, 189, 248, 0.18), transparent 38%),\n      linear-gradient(135deg, #07111f 0%, #102542 52%, #0b1422 100%);\n  }\n\n  .chill-bridge .chill-title {\n    max-width: 900px;\n    font-size: clamp(38px, 5.4vw, 66px);\n  }\n\n  .chill-bridge-grid {\n    grid-template-columns: repeat(2, minmax(0, 1fr));\n    margin-top: 32px;\n  }\n\n  .chill-bridge-card {\n    min-height: 300px;\n    display: flex;\n    flex-direction: column;\n    align-items: flex-start;\n  }\n\n  .chill-bridge-card p {\n    flex: 1;\n  }\n\n  .chill-bridge-card.chill-theme-atlas {\n    --chill-accent: var(--chill-atlas);\n    --chill-accent-soft: var(--chill-atlas-soft);\n  }\n\n  .chill-bridge-card.chill-theme-barometer {\n    --chill-accent: var(--chill-barometer);\n    --chill-accent-soft: var(--chill-barometer-soft);\n  }\n\n  @media (max-width: 820px) {\n    .chill-bridge-grid {\n      grid-template-columns: 1fr;\n    }\n\n    .chill-bridge-card {\n      min-height: auto;\n    }\n  }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f4466f3 e-flex e-con-boxed e-con e-parent\" data-id=\"f4466f3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ae2be5d elementor-widget elementor-widget-html\" data-id=\"ae2be5d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section class=\"chill-atlas-map-section\">\n  <div class=\"chill-atlas-map-header\">\n    <p class=\"chill-atlas-kicker\">CHILL Atlas<\/p>\n    <h2>CHILL Atlas <span>Global Case Map<\/span><\/h2>\n    <p>\n      An interactive map of CHILL Atlas records.\n    <\/p>\n  <\/div>\n\n  <div class=\"chill-atlas-filters\">\n    <select id=\"chill-filter-geo\"><option value=\"\">Whole world<\/option><\/select>\n    <select id=\"chill-filter-area\"><option value=\"\">All thematic areas<\/option><\/select>\n    <select id=\"chill-filter-right\"><option value=\"\">All rights involved<\/option><\/select>\n  <\/div>\n\n  <div class=\"chill-atlas-layout\">\n    <div class=\"chill-map-card\">\n      <div id=\"chill-atlas-map\"><p class=\"chill-loading\">Loading cases from the website...<\/p><\/div>\n    <\/div>\n\n    <aside id=\"chill-atlas-panel\" class=\"chill-atlas-panel\">\n      <span class=\"chill-panel-label\">CHILL Atlas<\/span>\n      <h3>Select a country<\/h3>\n      <p>Click a highlighted country to see the related cases. You can zoom and drag the map.<\/p>\n    <\/aside>\n  <\/div>\n<\/section>\n\n<style>\n  html, body { max-width: 100%; overflow-x: hidden; }\n\n  .chill-atlas-map-section {\n    width: 100%; max-width: 100%; padding: 56px 24px;\n    background: radial-gradient(circle at top left, rgba(249, 115, 22, 0.28), transparent 34%),\n                radial-gradient(circle at bottom right, rgba(56, 189, 248, 0.12), transparent 34%),\n                #07111f;\n    border: 1px solid rgba(148, 163, 184, 0.18); border-radius: 30px;\n    box-sizing: border-box; color: #e5edf8; overflow: hidden;\n  }\n\n  .chill-atlas-map-header { max-width: 940px; margin: 0 auto 30px auto; text-align: center; }\n  .chill-atlas-kicker { margin: 0 0 8px 0; font-size: 13px; letter-spacing: 0.16em; text-transform: uppercase; font-weight: 800; color: #FDBA74; }\n  .chill-atlas-map-header h2 { margin: 0 0 14px 0; font-family: \"Playfair Display\", Georgia, serif !important; font-size: clamp(42px, 6vw, 78px); line-height: 0.94; color: #f8fafc; letter-spacing: -0.04em; }\n  .chill-atlas-map-header h2 span { display: block; margin-top: 8px; font-family: \"Inter\", system-ui, sans-serif; font-size: clamp(14px, 1.5vw, 18px); font-weight: 850; letter-spacing: 0.08em; line-height: 1.25; color: #F97316; text-transform: uppercase; }\n  .chill-atlas-map-header p { margin: 0; font-size: 17px; line-height: 1.65; color: #b7c4d8; }\n\n  .chill-atlas-filters { max-width: 1120px; margin: 0 auto 22px auto; display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }\n  .chill-atlas-filters select {\n    flex: 1 1 260px; min-width: 220px; max-width: 360px; padding: 13px 15px;\n    border-radius: 14px; border: 1px solid rgba(148, 163, 184, 0.34);\n    background: #0e1a2b; color: #e5edf8; font-size: 14px; outline: none;\n    box-shadow: 0 10px 28px rgba(0, 0, 0, 0.18);\n  }\n  .chill-atlas-filters select:focus { border-color: #F97316; box-shadow: 0 0 0 3px rgba(249, 115, 22, 0.18); }\n\n  .chill-atlas-layout { max-width: 1200px; margin: 0 auto; display: grid; grid-template-columns: minmax(0, 2fr) minmax(280px, 0.85fr); gap: 22px; align-items: stretch; }\n  .chill-map-card, .chill-atlas-panel { background: rgba(10, 20, 34, 0.94); border: 1px solid rgba(148, 163, 184, 0.18); border-radius: 24px; box-shadow: 0 24px 70px rgba(0, 0, 0, 0.36); backdrop-filter: blur(10px); }\n  .chill-map-card { padding: 18px; min-height: 520px; overflow: hidden; }\n\n  #chill-atlas-map {\n    width: 100%; height: 540px; min-height: 540px; border-radius: 18px;\n    background: radial-gradient(circle at center, rgba(249, 115, 22, 0.16) 0%, rgba(249, 115, 22, 0.08) 28%, transparent 58%), #091525;\n    overflow: hidden; touch-action: none;\n  }\n  #chill-atlas-map svg { max-width: none !important; }\n\n  .chill-loading { padding: 24px; color: #94a3b8; line-height: 1.6; }\n  .chill-atlas-panel { padding: 24px; max-height: 540px; overflow-y: auto; }\n  .chill-panel-label, .chill-country-label { display: inline-flex; margin-bottom: 12px; padding: 6px 10px; border-radius: 999px; font-size: 12px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.08em; }\n  .chill-panel-label { background: rgba(249, 115, 22, 0.16); color: #FDBA74; border: 1px solid rgba(249, 115, 22, 0.28); }\n  .chill-country-label { background: rgba(249, 115, 22, 0.16); color: #FDBA74; border: 1px solid rgba(249, 115, 22, 0.32); }\n  .chill-atlas-panel h3 { margin: 0 0 12px 0; color: #f8fafc; font-size: 24px; line-height: 1.2; }\n  .chill-atlas-panel p { color: #b7c4d8; line-height: 1.6; }\n\n  .chill-country-list { margin: 14px 0 0 0; padding: 0; list-style: none; }\n  .chill-country-list li { padding: 14px 0; border-top: 1px solid rgba(148, 163, 184, 0.16); }\n  .chill-country-list li:first-child { border-top: 0; }\n  .chill-country-list a { display: block; color: #f8fafc; font-size: 15px; font-weight: 800; line-height: 1.35; text-decoration: none; }\n  .chill-country-list a:hover { color: #F97316; }\n  .chill-country-list span { display: inline-flex; max-width: 100%; margin-top: 7px; padding: 5px 9px; border-radius: 999px; background: rgba(56, 189, 248, 0.12); color: #7DD3FC; font-size: 10px; line-height: 1.35; font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase; white-space: normal; }\n  .chill-country-list small { display: block; margin-top: 7px; color: #94a3b8; font-size: 12px; line-height: 1.4; }\n\n  .jvm-tooltip { border-radius: 12px !important; padding: 8px 10px !important; background: #020617 !important; color: #ffffff !important; border: 1px solid rgba(249, 115, 22, 0.42) !important; box-shadow: 0 12px 28px rgba(0, 0, 0, 0.38) !important; font-size: 13px !important; pointer-events: none !important; }\n  .jvm-zoom-btn { background: #111c2f !important; color: #f8fafc !important; border: 1px solid rgba(148, 163, 184, 0.24) !important; border-radius: 10px !important; box-shadow: 0 10px 24px rgba(0, 0, 0, 0.28) !important; }\n\n  @media (max-width: 900px) {\n    .chill-atlas-map-section { width: 100% !important; max-width: 100vw !important; padding: 34px 14px; border-radius: 22px; overflow: hidden !important; }\n    .chill-atlas-map-header { margin-bottom: 22px; }\n    .chill-atlas-map-header h2 { font-size: clamp(30px, 10vw, 42px); }\n    .chill-atlas-map-header p { font-size: 15px; line-height: 1.55; }\n    .chill-atlas-filters { display: grid; grid-template-columns: 1fr; gap: 10px; margin-bottom: 16px; }\n    .chill-atlas-filters select { width: 100%; max-width: none; min-width: 0; font-size: 15px; }\n    .chill-atlas-layout { grid-template-columns: 1fr; gap: 16px; width: 100% !important; max-width: 100% !important; overflow: hidden !important; }\n    .chill-map-card { padding: 10px; min-height: auto; border-radius: 20px; width: 100% !important; max-width: 100% !important; overflow: hidden !important; }\n    #chill-atlas-map { height: 390px; min-height: 390px; border-radius: 16px; width: 100% !important; max-width: 100% !important; overflow: hidden !important; }\n    .chill-atlas-panel { max-height: none; padding: 20px; border-radius: 20px; width: 100% !important; max-width: 100% !important; }\n    .jvm-tooltip { display: none !important; }\n  }\n\n  @media (max-width: 520px) {\n    .chill-atlas-map-section { padding: 28px 10px; border-radius: 18px; }\n    .chill-atlas-map-header h2 { font-size: 32px; }\n    .chill-atlas-map-header p { font-size: 14px; }\n    #chill-atlas-map { height: 340px; min-height: 340px; }\n    .chill-atlas-panel h3 { font-size: 21px; }\n    .chill-country-list a { font-size: 14px; }\n    .chill-country-list span { font-size: 10px; }\n  }\n\n  #chill-atlas-map .jvm-region.jvm-selected,\n  #chill-atlas-map path.jvm-selected {\n    fill: #F97316 !important;\n    stroke: #FDBA74 !important;\n    stroke-width: 3px !important;\n    stroke-opacity: 1 !important;\n  }\n<\/style>\n\n<script>\n(function () {\n  const CDN_CSS = \"https:\/\/cdn.jsdelivr.net\/npm\/jsvectormap\/dist\/jsvectormap.min.css\";\n  const CDN_CORE = \"https:\/\/cdn.jsdelivr.net\/npm\/jsvectormap\";\n  const CDN_WORLD = \"https:\/\/cdn.jsdelivr.net\/npm\/jsvectormap\/dist\/maps\/world.js\";\n  const API_ROOT = window.location.origin + \"\/wp-json\/wp\/v2\/\";\n\n  const MAP_COLORS = {\n    base: \"#182A46\",\n    baseStroke: \"#22395B\",\n    active: \"#38BDF8\",\n    activeHover: \"#8BD3FF\",\n    selected: \"#F97316\",\n    selectedHover: \"#FB923C\",\n    selectedStroke: \"#FDBA74\",\n    selectedStrokeHover: \"#FED7AA\"\n  };\n\n  const THEMATIC_FIELD_ALIASES = [\"thematic_area\", \"thematica_area\", \"thematic_areas\", \"area_tematica\", \"topic_area\"];\n  const THEMATIC_TAXONOMY_ALIASES = [\"thematic_area\", \"thematica_area\", \"thematic_areas\", \"area_tematica\", \"topic_area\"];\n  const RIGHTS_FIELD_ALIASES = [\"rights_involved\", \"righst_involved\", \"right_involved\", \"rights\", \"diritti_coinvolti\"];\n  const RIGHTS_TAXONOMY_ALIASES = [\"rights_involved\", \"righst_involved\", \"right_involved\", \"rights\", \"diritti_coinvolti\"];\n\n  const REST_BASE_CANDIDATES = [\n    \"chill-atlas\", \"chill-atlas-records\", \"atlas-records\", \"atlas-record\",\n    \"chill-records\", \"chill-record\", \"chill_records\", \"chill_record\",\n    \"case-records\", \"case-record\", \"cases\", \"case\", \"records\", \"record\",\n    \"caso-chill\", \"casi-chill\", \"caso_chill\", \"casi_chill\",\n    \"chill-case\", \"chill-cases\", \"chill_case\", \"chill_cases\", \"posts\"\n  ];\n\n  const COUNTRY_ALIASES = {\n    \"it\": \"IT\", \"italia\": \"IT\", \"italy\": \"IT\",\n    \"de\": \"DE\", \"germania\": \"DE\", \"germany\": \"DE\",\n    \"fr\": \"FR\", \"francia\": \"FR\", \"france\": \"FR\",\n    \"es\": \"ES\", \"spagna\": \"ES\", \"spain\": \"ES\",\n    \"gb\": \"GB\", \"uk\": \"GB\", \"regno unito\": \"GB\", \"united kingdom\": \"GB\", \"great britain\": \"GB\",\n    \"us\": \"US\", \"usa\": \"US\", \"stati uniti\": \"US\", \"united states\": \"US\", \"united states of america\": \"US\",\n    \"ca\": \"CA\", \"canada\": \"CA\",\n    \"br\": \"BR\", \"brasile\": \"BR\", \"brazil\": \"BR\",\n    \"ar\": \"AR\", \"argentina\": \"AR\",\n    \"mx\": \"MX\", \"messico\": \"MX\", \"mexico\": \"MX\",\n    \"in\": \"IN\", \"india\": \"IN\",\n    \"cn\": \"CN\", \"cina\": \"CN\", \"china\": \"CN\",\n    \"jp\": \"JP\", \"giappone\": \"JP\", \"japan\": \"JP\",\n    \"kr\": \"KR\", \"corea del sud\": \"KR\", \"south korea\": \"KR\",\n    \"au\": \"AU\", \"australia\": \"AU\",\n    \"za\": \"ZA\", \"sudafrica\": \"ZA\", \"south africa\": \"ZA\",\n    \"tr\": \"TR\", \"turchia\": \"TR\", \"turkey\": \"TR\",\n    \"pl\": \"PL\", \"polonia\": \"PL\", \"poland\": \"PL\",\n    \"nl\": \"NL\", \"paesi bassi\": \"NL\", \"olanda\": \"NL\", \"netherlands\": \"NL\",\n    \"be\": \"BE\", \"belgio\": \"BE\", \"belgium\": \"BE\",\n    \"ch\": \"CH\", \"svizzera\": \"CH\", \"switzerland\": \"CH\",\n    \"se\": \"SE\", \"svezia\": \"SE\", \"sweden\": \"SE\",\n    \"no\": \"NO\", \"norvegia\": \"NO\", \"norway\": \"NO\",\n    \"ua\": \"UA\", \"ucraina\": \"UA\", \"ukraine\": \"UA\",\n    \"ru\": \"RU\", \"russia\": \"RU\",\n    \"il\": \"IL\", \"israele\": \"IL\", \"israel\": \"IL\",\n    \"ke\": \"KE\", \"kenya\": \"KE\",\n    \"ng\": \"NG\", \"nigeria\": \"NG\",\n    \"eg\": \"EG\", \"egitto\": \"EG\", \"egypt\": \"EG\",\n    \"gr\": \"GR\", \"grecia\": \"GR\", \"greece\": \"GR\",\n    \"pt\": \"PT\", \"portogallo\": \"PT\", \"portugal\": \"PT\",\n    \"ie\": \"IE\", \"irlanda\": \"IE\", \"ireland\": \"IE\",\n    \"at\": \"AT\", \"austria\": \"AT\",\n    \"dk\": \"DK\", \"danimarca\": \"DK\", \"denmark\": \"DK\",\n    \"fi\": \"FI\", \"finlandia\": \"FI\", \"finland\": \"FI\",\n    \"cz\": \"CZ\", \"cechia\": \"CZ\", \"czechia\": \"CZ\", \"repubblica ceca\": \"CZ\",\n    \"sk\": \"SK\", \"slovacchia\": \"SK\", \"slovakia\": \"SK\",\n    \"si\": \"SI\", \"slovenia\": \"SI\",\n    \"hr\": \"HR\", \"croazia\": \"HR\", \"croatia\": \"HR\",\n    \"hu\": \"HU\", \"ungheria\": \"HU\", \"hungary\": \"HU\",\n    \"ro\": \"RO\", \"romania\": \"RO\",\n    \"bg\": \"BG\", \"bulgaria\": \"BG\",\n    \"rs\": \"RS\", \"serbia\": \"RS\",\n    \"ba\": \"BA\", \"bosnia\": \"BA\", \"bosnia and herzegovina\": \"BA\",\n    \"al\": \"AL\", \"albania\": \"AL\",\n    \"mk\": \"MK\", \"north macedonia\": \"MK\", \"macedonia del nord\": \"MK\",\n    \"me\": \"ME\", \"montenegro\": \"ME\",\n    \"md\": \"MD\", \"moldavia\": \"MD\", \"moldova\": \"MD\",\n    \"ee\": \"EE\", \"estonia\": \"EE\",\n    \"lv\": \"LV\", \"lettonia\": \"LV\", \"latvia\": \"LV\",\n    \"lt\": \"LT\", \"lituania\": \"LT\", \"lithuania\": \"LT\",\n    \"lu\": \"LU\", \"lussemburgo\": \"LU\", \"luxembourg\": \"LU\",\n    \"mt\": \"MT\", \"malta\": \"MT\",\n    \"cy\": \"CY\", \"cipro\": \"CY\", \"cyprus\": \"CY\",\n    \"european union\": \"EU\", \"unione europea\": \"EU\", \"eu\": \"EU\"\n  };\n\n  const COUNTRY_NAMES = {\n    \"IT\": \"Italy\", \"DE\": \"Germany\", \"FR\": \"France\", \"ES\": \"Spain\",\n    \"GB\": \"United Kingdom\", \"US\": \"United States\", \"CA\": \"Canada\",\n    \"BR\": \"Brazil\", \"AR\": \"Argentina\", \"MX\": \"Mexico\", \"IN\": \"India\",\n    \"CN\": \"China\", \"JP\": \"Japan\", \"KR\": \"South Korea\", \"AU\": \"Australia\",\n    \"ZA\": \"South Africa\", \"TR\": \"Turkey\", \"PL\": \"Poland\", \"NL\": \"Netherlands\",\n    \"BE\": \"Belgium\", \"CH\": \"Switzerland\", \"SE\": \"Sweden\", \"NO\": \"Norway\",\n    \"UA\": \"Ukraine\", \"RU\": \"Russia\", \"IL\": \"Israel\", \"KE\": \"Kenya\",\n    \"NG\": \"Nigeria\", \"EG\": \"Egypt\", \"GR\": \"Greece\", \"PT\": \"Portugal\",\n    \"IE\": \"Ireland\", \"AT\": \"Austria\", \"DK\": \"Denmark\", \"FI\": \"Finland\",\n    \"CZ\": \"Czechia\", \"SK\": \"Slovakia\", \"SI\": \"Slovenia\", \"HR\": \"Croatia\",\n    \"HU\": \"Hungary\", \"RO\": \"Romania\", \"BG\": \"Bulgaria\", \"RS\": \"Serbia\",\n    \"BA\": \"Bosnia and Herzegovina\", \"AL\": \"Albania\", \"MK\": \"North Macedonia\",\n    \"ME\": \"Montenegro\", \"MD\": \"Moldova\", \"EE\": \"Estonia\", \"LV\": \"Latvia\",\n    \"LT\": \"Lithuania\", \"LU\": \"Luxembourg\", \"MT\": \"Malta\", \"CY\": \"Cyprus\",\n    \"EU\": \"European Union\"\n  };\n\n  const GEO_AREAS = {\n    europe: { label: \"Europe\", regions: [\"AL\",\"AT\",\"BE\",\"BA\",\"BG\",\"HR\",\"CY\",\"CZ\",\"DK\",\"EE\",\"FI\",\"FR\",\"DE\",\"GR\",\"HU\",\"IS\",\"IE\",\"IT\",\"LV\",\"LT\",\"LU\",\"MT\",\"MD\",\"ME\",\"NL\",\"MK\",\"NO\",\"PL\",\"PT\",\"RO\",\"RS\",\"SK\",\"SI\",\"ES\",\"SE\",\"CH\",\"UA\",\"GB\",\"RU\"] },\n    europeanUnion: { label: \"European Union\", regions: [\"AT\",\"BE\",\"BG\",\"HR\",\"CY\",\"CZ\",\"DK\",\"EE\",\"FI\",\"FR\",\"DE\",\"GR\",\"HU\",\"IE\",\"IT\",\"LV\",\"LT\",\"LU\",\"MT\",\"NL\",\"PL\",\"PT\",\"RO\",\"SK\",\"SI\",\"ES\",\"SE\"] },\n    councilOfEurope: { label: \"Council of Europe Area\", regions: [\"AL\",\"AD\",\"AM\",\"AT\",\"AZ\",\"BE\",\"BA\",\"BG\",\"HR\",\"CY\",\"CZ\",\"DK\",\"EE\",\"FI\",\"FR\",\"GE\",\"DE\",\"GR\",\"HU\",\"IS\",\"IE\",\"IT\",\"LV\",\"LI\",\"LT\",\"LU\",\"MT\",\"MD\",\"MC\",\"ME\",\"NL\",\"MK\",\"NO\",\"PL\",\"PT\",\"RO\",\"SM\",\"RS\",\"SK\",\"SI\",\"ES\",\"SE\",\"CH\",\"TR\",\"UA\",\"GB\"] },\n    northAmerica: { label: \"North America\", regions: [\"CA\",\"US\",\"MX\"] },\n    latinAmerica: { label: \"Latin America\", regions: [\"MX\",\"GT\",\"HN\",\"SV\",\"NI\",\"CR\",\"PA\",\"CU\",\"HT\",\"DO\",\"JM\",\"CO\",\"VE\",\"EC\",\"PE\",\"BO\",\"BR\",\"PY\",\"CL\",\"AR\",\"UY\"] },\n    africa: { label: \"Africa\", regions: [\"DZ\",\"AO\",\"BJ\",\"BW\",\"BF\",\"BI\",\"CM\",\"CF\",\"TD\",\"CG\",\"CD\",\"CI\",\"DJ\",\"EG\",\"ER\",\"ET\",\"GA\",\"GM\",\"GH\",\"GN\",\"KE\",\"LS\",\"LR\",\"LY\",\"MG\",\"MW\",\"ML\",\"MR\",\"MA\",\"MZ\",\"NA\",\"NE\",\"NG\",\"RW\",\"SN\",\"SL\",\"SO\",\"ZA\",\"SD\",\"TZ\",\"TG\",\"TN\",\"UG\",\"ZM\",\"ZW\"] },\n    mena: { label: \"Middle East and North Africa\", regions: [\"MA\",\"DZ\",\"TN\",\"LY\",\"EG\",\"SD\",\"SA\",\"YE\",\"OM\",\"AE\",\"QA\",\"BH\",\"KW\",\"IQ\",\"IR\",\"SY\",\"JO\",\"LB\",\"IL\",\"TR\"] },\n    asiaPacific: { label: \"Asia Pacific\", regions: [\"CN\",\"JP\",\"KR\",\"KP\",\"MN\",\"TW\",\"IN\",\"PK\",\"BD\",\"LK\",\"NP\",\"MM\",\"TH\",\"LA\",\"KH\",\"VN\",\"MY\",\"SG\",\"ID\",\"PH\",\"BN\",\"AU\",\"NZ\",\"PG\",\"FJ\"] },\n    globalTransnational: { label: \"Global \/ Transnational\", regions: [] }\n  };\n\n  const GEOGRAPHIC_AREA_TO_FILTER = {\n    \"europe\": \"europe\",\n    \"european union\": \"europeanUnion\",\n    \"council of europe area\": \"councilOfEurope\",\n    \"north america\": \"northAmerica\",\n    \"latin america\": \"latinAmerica\",\n    \"africa\": \"africa\",\n    \"middle east and north africa\": \"mena\",\n    \"asia pacific\": \"asiaPacific\",\n    \"global transnational\": \"globalTransnational\"\n  };\n\n  let allCases = [];\n  let visibleCases = [];\n  let mapInstance = null;\n  let selectedRegionCode = null;\n  let selectionLock = false;\n\n  function loadCSS(href) {\n    if (document.querySelector('link[href=\"' + href + '\"]')) return;\n    const link = document.createElement(\"link\");\n    link.rel = \"stylesheet\";\n    link.href = href;\n    document.head.appendChild(link);\n  }\n\n  function loadScript(src) {\n    return new Promise(function (resolve, reject) {\n      const existing = document.querySelector('script[src=\"' + src + '\"]');\n      if (existing) {\n        existing.addEventListener(\"load\", resolve);\n        existing.addEventListener(\"error\", reject);\n        setTimeout(resolve, 800);\n        return;\n      }\n      const script = document.createElement(\"script\");\n      script.src = src;\n      script.async = false;\n      script.onload = resolve;\n      script.onerror = reject;\n      document.head.appendChild(script);\n    });\n  }\n\n  function stripHTML(value) {\n    const div = document.createElement(\"div\");\n    div.innerHTML = String(value || \"\");\n    return div.textContent || div.innerText || \"\";\n  }\n\n  function escapeHTML(value) {\n    return String(value || \"\").replace(\/[&<>\"']\/g, function (char) {\n      return { \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#039;\" }[char];\n    });\n  }\n\n  function normalizeKey(value) {\n    return String(value || \"\")\n      .trim()\n      .toLowerCase()\n      .normalize(\"NFD\")\n      .replace(\/[\\u0300-\\u036f]\/g, \"\")\n      .replace(\/[_-]+\/g, \" \")\n      .replace(\/\\s+\/g, \" \");\n  }\n\n  function toArray(value) {\n    if (!value) return [];\n    if (Array.isArray(value)) return value;\n    return [value];\n  }\n\n  function valueLabel(value) {\n    if (!value) return \"\";\n    if (typeof value === \"string\" || typeof value === \"number\") return String(value);\n    if (typeof value === \"object\") return value.name || value.label || value.title || value.value || value.slug || \"\";\n    return String(value);\n  }\n\n  function fieldLabels(value) {\n    return toArray(value).map(valueLabel).filter(Boolean);\n  }\n\n  function firstAvailableField(acf, fieldNames) {\n    for (const name of fieldNames) {\n      if (Object.prototype.hasOwnProperty.call(acf, name) && acf[name]) {\n        return acf[name];\n      }\n    }\n    return null;\n  }\n\n  function splitLabelText(value) {\n    return String(value || \"\")\n      .split(\",\")\n      .map(function (part) { return part.trim(); })\n      .filter(Boolean);\n  }\n\n  function uniqueLabels(values) {\n    const seen = {};\n    const output = [];\n\n    values.forEach(function (value) {\n      splitLabelText(value).forEach(function (label) {\n        const key = normalizeKey(label);\n        if (!key || seen[key]) return;\n        seen[key] = true;\n        output.push(label);\n      });\n    });\n\n    return output;\n  }\n\n  function taxonomyMatches(taxonomy, allowedTaxonomies) {\n    if (!taxonomy) return false;\n    const taxKey = normalizeKey(taxonomy);\n\n    return toArray(allowedTaxonomies)\n      .map(normalizeKey)\n      .some(function (allowed) {\n        return taxKey === allowed || taxKey.includes(allowed) || allowed.includes(taxKey);\n      });\n  }\n\n  function taxonomyLabels(value, post, taxonomySlugs) {\n    const values = toArray(value);\n    const allowedTaxonomies = toArray(taxonomySlugs).filter(Boolean);\n    const termById = {};\n\n    getEmbeddedTerms(post).forEach(function (term) {\n      const allowed = !allowedTaxonomies.length || taxonomyMatches(term.taxonomy, allowedTaxonomies);\n\n      if (term && term.id && allowed) {\n        termById[String(term.id)] = term.name || term.label || term.slug || \"\";\n      }\n    });\n\n    const labels = values.map(function (item) {\n      if (!item) return \"\";\n\n      if (typeof item === \"object\") {\n        return item.name || item.label || item.title || item.value || item.slug || \"\";\n      }\n\n      const raw = String(item).trim();\n\n      if (termById[raw]) return termById[raw];\n      if (\/^\\d+$\/.test(raw)) return \"\";\n\n      return raw;\n    });\n\n    return uniqueLabels(labels);\n  }\n\n  function embeddedTaxonomyLabels(post, taxonomySlugs) {\n    const allowedTaxonomies = toArray(taxonomySlugs).filter(Boolean);\n\n    const labels = getEmbeddedTerms(post)\n      .filter(function (term) {\n        return term && term.name && (!allowedTaxonomies.length || taxonomyMatches(term.taxonomy, allowedTaxonomies));\n      })\n      .map(function (term) { return term.name; });\n\n    return uniqueLabels(labels);\n  }\n\n  function taxonomyLabelsFromFieldOrTerms(post, acf, fieldNames, taxonomySlugs) {\n    const rawValue = firstAvailableField(acf, fieldNames);\n    const fromField = taxonomyLabels(rawValue, post, taxonomySlugs);\n\n    if (fromField.length) {\n      return fromField;\n    }\n\n    return embeddedTaxonomyLabels(post, taxonomySlugs);\n  }\n\n  function safeURL(value) {\n    const url = String(value || \"#\");\n    if (url.startsWith(\"\/\") || url.startsWith(\"https:\/\/\") || url.startsWith(\"http:\/\/\")) return url;\n    return \"#\";\n  }\n\n  function getEmbeddedTerms(post) {\n    const embedded = post && post._embedded ? post._embedded[\"wp:term\"] : null;\n    if (!embedded) return [];\n    return embedded.reduce(function (acc, group) { return acc.concat(group || []); }, []);\n  }\n\n  function resolveCountryFromValue(value) {\n    const label = valueLabel(value);\n    const slug = typeof value === \"object\" ? value.slug : \"\";\n    const candidates = [slug, label];\n\n    for (const candidate of candidates) {\n      const normalized = normalizeKey(candidate);\n      if (COUNTRY_ALIASES[normalized]) {\n        const code = COUNTRY_ALIASES[normalized];\n        return { code: code, name: label || COUNTRY_NAMES[code] || code };\n      }\n      if (\/^[a-z]{2}$\/i.test(String(candidate || \"\").trim())) {\n        const code = String(candidate).trim().toUpperCase();\n        return { code: code, name: label || COUNTRY_NAMES[code] || code };\n      }\n    }\n\n    return null;\n  }\n\n  function resolveCountry(post) {\n    const acf = post.acf || {};\n    const fieldValues = toArray(acf.country);\n\n    for (const item of fieldValues) {\n      const resolved = resolveCountryFromValue(item);\n      if (resolved) return resolved;\n    }\n\n    const embeddedTerms = getEmbeddedTerms(post);\n    for (const term of embeddedTerms) {\n      const resolved = resolveCountryFromValue(term);\n      if (resolved) return resolved;\n    }\n\n    return null;\n  }\n\n  function resolveGeographicArea(acf) {\n    const raw = valueLabel(acf.geographic_area);\n    const key = normalizeKey(raw);\n    return { label: raw || \"\", filterKey: GEOGRAPHIC_AREA_TO_FILTER[key] || \"\" };\n  }\n\n  function postHasChillFields(post) {\n    const acf = post.acf || {};\n    const rightsField = firstAvailableField(acf, RIGHTS_FIELD_ALIASES);\n    const thematicField = firstAvailableField(acf, THEMATIC_FIELD_ALIASES);\n\n    return Boolean(\n      acf.country ||\n      acf.geographic_area ||\n      thematicField ||\n      acf.measure_type ||\n      rightsField ||\n      acf.overview\n    );\n  }\n\n  function normalizePostToCase(post) {\n    const acf = post.acf || {};\n    const country = resolveCountry(post);\n    const geographicArea = resolveGeographicArea(acf);\n\n    const thematicAreaLabels = taxonomyLabelsFromFieldOrTerms(post, acf, THEMATIC_FIELD_ALIASES, THEMATIC_TAXONOMY_ALIASES);\n    const rightsLabels = taxonomyLabelsFromFieldOrTerms(post, acf, RIGHTS_FIELD_ALIASES, RIGHTS_TAXONOMY_ALIASES);\n    const measureTypeLabels = fieldLabels(acf.measure_type);\n\n    const areaList = thematicAreaLabels.length ? thematicAreaLabels : [\"Unspecified thematic area\"];\n    const rightsList = rightsLabels.length ? rightsLabels : [];\n\n    return {\n      id: post.id,\n      title: stripHTML(post.title && post.title.rendered ? post.title.rendered : \"Caso senza titolo\"),\n      url: post.link || \"#\",\n      country: country ? country.name : \"Unrecognized country\",\n      countryCode: country ? country.code : null,\n      geographicArea: geographicArea.label,\n      geographicAreaFilterKey: geographicArea.filterKey,\n      area: areaList.join(\", \"),\n      areaList: areaList,\n      areaKeys: areaList.map(normalizeKey),\n      rights: rightsList,\n      rightsKeys: rightsList.map(normalizeKey),\n      measureType: measureTypeLabels,\n      year: acf.year || \"\",\n      recordStatus: valueLabel(acf.record_status),\n      caseOutcome: valueLabel(acf.case_outcome)\n    };\n  }\n\n  async function discoverRestBases() {\n    const bases = [].concat(REST_BASE_CANDIDATES);\n    try {\n      const response = await fetch(API_ROOT + \"types\");\n      if (response.ok) {\n        const types = await response.json();\n        Object.keys(types).forEach(function (key) {\n          const item = types[key];\n          const haystack = normalizeKey([key, item.slug, item.name, item.rest_base].join(\" \"));\n          if (haystack.includes(\"chill\") || haystack.includes(\"atlas\") || haystack.includes(\"record\") || haystack.includes(\"case\") || haystack.includes(\"caso\")) {\n            bases.unshift(item.rest_base || item.slug || key);\n          }\n        });\n      }\n    } catch (error) {}\n    return Array.from(new Set(bases.filter(Boolean)));\n  }\n\n  async function fetchFromRestBase(restBase) {\n    let page = 1;\n    let results = [];\n    while (page <= 5) {\n      const url = API_ROOT + restBase + \"?per_page=100&page=\" + page + \"&acf_format=standard&_embed=1\";\n      const response = await fetch(url);\n      if (!response.ok) break;\n      const items = await response.json();\n      if (!Array.isArray(items) || !items.length) break;\n      results = results.concat(items);\n      const totalPages = Number(response.headers.get(\"X-WP-TotalPages\") || \"1\");\n      if (page >= totalPages) break;\n      page++;\n    }\n    return results;\n  }\n\n  async function loadCasesFromWordPress() {\n    const bases = await discoverRestBases();\n    let collected = [];\n\n    for (const base of bases) {\n      try {\n        const posts = await fetchFromRestBase(base);\n        collected = collected.concat(posts);\n      } catch (error) {}\n    }\n\n    const unique = {};\n    collected.forEach(function (post) {\n      if (post && post.id) unique[(post.type || \"post\") + \"-\" + post.id] = post;\n    });\n\n    return Object.values(unique)\n      .filter(postHasChillFields)\n      .map(normalizePostToCase)\n      .filter(function (item) { return item.title && item.countryCode && item.countryCode !== \"EU\"; });\n  }\n\n  function getRegionValuesFromCases(cases) {\n    const values = {};\n    cases.forEach(function (item) {\n      if (item.countryCode) values[item.countryCode] = 1;\n    });\n    return values;\n  }\n\n  function getRegionName(code) {\n    const found = allCases.find(function (item) { return item.countryCode === code; });\n    return found ? found.country : COUNTRY_NAMES[code] || code;\n  }\n\n  function populateFilters() {\n    const geoSelect = document.getElementById(\"chill-filter-geo\");\n    const areaSelect = document.getElementById(\"chill-filter-area\");\n    const rightSelect = document.getElementById(\"chill-filter-right\");\n    if (!geoSelect || !areaSelect || !rightSelect) return;\n\n    geoSelect.removeAttribute(\"multiple\");\n    areaSelect.removeAttribute(\"multiple\");\n    rightSelect.removeAttribute(\"multiple\");\n    geoSelect.size = 1;\n    areaSelect.size = 1;\n    rightSelect.size = 1;\n\n    geoSelect.innerHTML = '<option value=\"\">Whole world<\/option>';\n    areaSelect.innerHTML = '<option value=\"\">All thematic areas<\/option>';\n    rightSelect.innerHTML = '<option value=\"\">All rights involved<\/option>';\n\n    Object.keys(GEO_AREAS).forEach(function (key) {\n      const option = document.createElement(\"option\");\n      option.value = key;\n      option.textContent = GEO_AREAS[key].label;\n      geoSelect.appendChild(option);\n    });\n\n    const allAreaLabels = [];\n    allCases.forEach(function (item) { (item.areaList || []).forEach(function (label) { allAreaLabels.push(label); }); });\n\n    const allRightLabels = [];\n    allCases.forEach(function (item) { (item.rights || []).forEach(function (label) { allRightLabels.push(label); }); });\n\n    const areas = uniqueLabels(allAreaLabels)\n      .filter(function (area) { return normalizeKey(area) !== normalizeKey(\"Unspecified thematic area\"); })\n      .sort();\n\n    const rights = uniqueLabels(allRightLabels).sort();\n\n    areas.forEach(function (area) {\n      const option = document.createElement(\"option\");\n      option.value = normalizeKey(area);\n      option.textContent = area;\n      areaSelect.appendChild(option);\n    });\n\n    rights.forEach(function (right) {\n      const option = document.createElement(\"option\");\n      option.value = normalizeKey(right);\n      option.textContent = right;\n      rightSelect.appendChild(option);\n    });\n\n    geoSelect.onchange = function () {\n      const selectedGeo = geoSelect.value;\n      selectedRegionCode = null;\n      if (selectedGeo && GEO_AREAS[selectedGeo] && GEO_AREAS[selectedGeo].regions.length) focusOnRegions(GEO_AREAS[selectedGeo].regions, true);\n      else resetMapFocus();\n    };\n\n    areaSelect.onchange = applyFilters;\n    rightSelect.onchange = applyFilters;\n  }\n\n  function applyFilters() {\n    const areaSelect = document.getElementById(\"chill-filter-area\");\n    const rightSelect = document.getElementById(\"chill-filter-right\");\n    const selectedAreaKey = areaSelect ? normalizeKey(areaSelect.value) : \"\";\n    const selectedRightKey = rightSelect ? normalizeKey(rightSelect.value) : \"\";\n\n    visibleCases = allCases.filter(function (item) {\n      const itemAreaKeys = item.areaKeys || (item.areaList || []).map(normalizeKey);\n      const itemRightKeys = item.rightsKeys || (item.rights || []).map(normalizeKey);\n      const areaMatch = !selectedAreaKey || itemAreaKeys.includes(selectedAreaKey);\n      const rightMatch = !selectedRightKey || itemRightKeys.includes(selectedRightKey);\n      return areaMatch && rightMatch;\n    });\n\n    selectedRegionCode = null;\n    renderMap();\n\n    const panel = document.getElementById(\"chill-atlas-panel\");\n    if (panel) {\n      panel.innerHTML = `<span class=\"chill-panel-label\">Filtered results<\/span><h3>${visibleCases.length} cases shown<\/h3><p>Countries with matching records are highlighted in blue. Select one country to see the related cases.<\/p>`;\n    }\n  }\n\n  function renderCountryPanel(countryCode) {\n    const panel = document.getElementById(\"chill-atlas-panel\");\n    if (!panel) return;\n\n    const casesInCountry = visibleCases.filter(function (item) { return item.countryCode === countryCode; });\n    const countryName = casesInCountry.length ? casesInCountry[0].country : getRegionName(countryCode);\n\n    if (!casesInCountry.length) {\n      panel.innerHTML = `<span class=\"chill-country-label\">Selected country<\/span><h3>${escapeHTML(countryName)}<\/h3><p>No cases are linked to this country with the current filters.<\/p>`;\n      return;\n    }\n\n    const list = casesInCountry.map(function (item) {\n      const extraMeta = [item.year ? escapeHTML(item.year) : \"\", item.recordStatus ? escapeHTML(item.recordStatus) : \"\", item.caseOutcome ? escapeHTML(item.caseOutcome) : \"\"].filter(Boolean).join(\" \u00b7 \");\n      const areaChip = item.area ? `<span>${escapeHTML(item.area)}<\/span>` : \"\";\n      return `<li><a href=\"${safeURL(item.url)}\">${escapeHTML(item.title)}<\/a>${areaChip}${extraMeta ? `<small>${extraMeta}<\/small>` : \"\"}<\/li>`;\n    }).join(\"\");\n\n    panel.innerHTML = `<span class=\"chill-country-label\">Selected country<\/span><h3>${escapeHTML(countryName)}<\/h3><ul class=\"chill-country-list\">${list}<\/ul>`;\n  }\n\n  function clearSelectedRegionVisuals() {\n    document.querySelectorAll('#chill-atlas-map [data-code]').forEach(function (region) {\n      region.classList.remove('jvm-selected');\n      region.style.fill = \"\";\n      region.style.stroke = \"\";\n      region.style.strokeWidth = \"\";\n      region.style.strokeOpacity = \"\";\n    });\n  }\n\n  function forceSelectedRegionColour() {\n    window.setTimeout(function () {\n      if (!selectedRegionCode) return;\n      const region = document.querySelector('#chill-atlas-map [data-code=\"' + selectedRegionCode + '\"]');\n      if (region) {\n        region.classList.add('jvm-selected');\n        region.style.fill = MAP_COLORS.selected;\n        region.style.stroke = MAP_COLORS.selectedStroke;\n        region.style.strokeWidth = \"3px\";\n        region.style.strokeOpacity = \"1\";\n      }\n    }, 80);\n  }\n\n  function selectRegion(code, shouldZoom) {\n    if (!code || !mapInstance || selectionLock) return;\n    selectionLock = true;\n    selectedRegionCode = code;\n\n    try {\n      if (typeof mapInstance.clearSelectedRegions === \"function\") mapInstance.clearSelectedRegions();\n      clearSelectedRegionVisuals();\n      if (typeof mapInstance.setSelectedRegions === \"function\") mapInstance.setSelectedRegions([code]);\n    } catch (error) {\n      clearSelectedRegionVisuals();\n    }\n\n    renderCountryPanel(code);\n    forceSelectedRegionColour();\n    if (shouldZoom) focusOnRegion(code, true);\n\n    window.setTimeout(function () { selectionLock = false; }, 120);\n  }\n\n  function focusOnRegion(code, animate) {\n    if (!mapInstance || !code) return;\n    try {\n      if (typeof mapInstance.setFocus === \"function\") {\n        mapInstance.setFocus({ region: code, animate: Boolean(animate) });\n        return;\n      }\n    } catch (error) {}\n    try {\n      if (typeof mapInstance.setFocus === \"function\") mapInstance.setFocus({ regions: [code], animate: Boolean(animate) });\n    } catch (error) {}\n  }\n\n  function focusOnRegions(regions, animate) {\n    if (!mapInstance || !regions || !regions.length) return;\n    try {\n      if (typeof mapInstance.setFocus === \"function\") mapInstance.setFocus({ regions: regions, animate: Boolean(animate) });\n    } catch (error) {}\n  }\n\n  function resetMapFocus() {\n    if (!mapInstance) return;\n    try {\n      if (typeof mapInstance.setFocus === \"function\") mapInstance.setFocus({ scale: 1, x: 0.5, y: 0.5, animate: true });\n    } catch (error) {}\n  }\n\n  function renderMap() {\n    const mapElement = document.getElementById(\"chill-atlas-map\");\n    if (!mapElement || typeof jsVectorMap === \"undefined\") return;\n\n    mapElement.innerHTML = \"\";\n    if (mapInstance && typeof mapInstance.destroy === \"function\") mapInstance.destroy();\n\n    const selectedGeo = document.getElementById(\"chill-filter-geo\") ? document.getElementById(\"chill-filter-geo\").value : \"\";\n    const focusConfig = selectedGeo && GEO_AREAS[selectedGeo] && GEO_AREAS[selectedGeo].regions.length ? { regions: GEO_AREAS[selectedGeo].regions, animate: false } : null;\n\n    const mapConfig = {\n      selector: \"#chill-atlas-map\",\n      map: \"world\",\n      backgroundColor: \"transparent\",\n      zoomOnScroll: true,\n      zoomButtons: true,\n      draggable: true,\n      bindTouchEvents: true,\n      showTooltip: true,\n      regionsSelectable: true,\n      regionsSelectableOne: true,\n      selectedRegions: selectedRegionCode ? [selectedRegionCode] : [],\n      regionStyle: {\n        initial: {\n          fill: MAP_COLORS.base,\n          fillOpacity: 1,\n          stroke: MAP_COLORS.baseStroke,\n          strokeWidth: 1.1,\n          strokeOpacity: 0.88\n        },\n        hover: {\n          fill: MAP_COLORS.activeHover,\n          fillOpacity: 1,\n          stroke: \"#BFE6FF\",\n          strokeWidth: 1.7,\n          cursor: \"pointer\"\n        },\n        selected: {\n          fill: MAP_COLORS.selected,\n          fillOpacity: 1,\n          stroke: MAP_COLORS.selectedStroke,\n          strokeWidth: 3,\n          strokeOpacity: 1\n        },\n        selectedHover: {\n          fill: MAP_COLORS.selectedHover,\n          fillOpacity: 1,\n          stroke: MAP_COLORS.selectedStrokeHover,\n          strokeWidth: 3.2,\n          strokeOpacity: 1\n        }\n      },\n      series: {\n        regions: [{\n          attribute: \"fill\",\n          scale: { 1: MAP_COLORS.active },\n          values: getRegionValuesFromCases(visibleCases)\n        }]\n      },\n      onRegionTooltipShow: function (event, tooltip, code) {\n        const countryCases = visibleCases.filter(function (item) { return item.countryCode === code; });\n        tooltip.text(countryCases.length ? getRegionName(code) + \" \u2014 \" + countryCases.length + \" case(s)\" : getRegionName(code));\n      },\n      onRegionClick: function (event, code) { selectRegion(code, true); },\n      onRegionSelected: function (code, isSelected) {\n        if (selectionLock) return;\n        if (isSelected) selectRegion(code, true);\n      }\n    };\n\n    if (focusConfig) mapConfig.focusOn = focusConfig;\n    mapInstance = new jsVectorMap(mapConfig);\n    forceSelectedRegionColour();\n  }\n\n  function showMapMessage(message) {\n    const mapElement = document.getElementById(\"chill-atlas-map\");\n    if (!mapElement) return;\n    mapElement.innerHTML = `<p class=\"chill-loading\">${escapeHTML(message)}<\/p>`;\n  }\n\n  async function initChillAtlasMap() {\n    if (typeof jsVectorMap === \"undefined\") {\n      showMapMessage(\"The map library could not be loaded.\");\n      return;\n    }\n\n    showMapMessage(\"Loading cases from the website...\");\n\n    try {\n      allCases = await loadCasesFromWordPress();\n      visibleCases = [].concat(allCases);\n\n      if (!allCases.length) {\n        showMapMessage(\"No cases found. Check that records are published, ACF is visible in the REST API, and the Country field returns the term object.\");\n        const panel = document.getElementById(\"chill-atlas-panel\");\n        if (panel) {\n          panel.innerHTML = `<span class=\"chill-panel-label\">Configuration required<\/span><h3>No cases found<\/h3><p>Check that CHILL fields are exposed in the REST API and that the Country field returns the term object.<\/p>`;\n        }\n        return;\n      }\n\n      populateFilters();\n      renderMap();\n\n      const panel = document.getElementById(\"chill-atlas-panel\");\n      if (panel) {\n        panel.innerHTML = `<span class=\"chill-panel-label\">CHILL Atlas<\/span><h3>${allCases.length} cases loaded<\/h3><p>Click a highlighted country to see the list of cases. You can zoom and drag the map.<\/p>`;\n      }\n    } catch (error) {\n      console.error(\"CHILL Atlas map error:\", error);\n      showMapMessage(\"Error while loading cases from the website. Open the browser console to see the technical error.\");\n    }\n  }\n\n  function boot() {\n    loadCSS(CDN_CSS);\n    loadScript(CDN_CORE)\n      .then(function () { return loadScript(CDN_WORLD); })\n      .then(function () { initChillAtlasMap(); })\n      .catch(function () { showMapMessage(\"Unable to load the map from the CDN. Check cache, script blocking, or connection.\"); });\n  }\n\n  if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", boot);\n  else boot();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7e1cbc4 e-con e-atomic-element e-flexbox-base e-c14879c \" data-id=\"7e1cbc4\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"7e1cbc4\" data-e-type=\"e-flexbox\" data-id=\"7e1cbc4\">\n    \t\t<div class=\"elementor-element elementor-element-9c3ea86 elementor-widget elementor-widget-html\" data-id=\"9c3ea86\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"chill-barometer-app\" class=\"chill-page chill-barometer chill-theme-barometer\">\n  <section class=\"chill-hero cb-hero\">\n    <div class=\"cb-hero-copy\">\n      <p class=\"chill-kicker\">CHILL Barometer<\/p>\n\n      <h1 class=\"chill-title\">\n        CHILL Barometer\n        <span class=\"chill-subtitle\">Measuring chilling pressure<\/span>\n      <\/h1>\n\n      <p class=\"chill-lead\">\n        Explore the intensity of chilling pressure across thematic areas, countries,\n        geographic areas, and rights involved.\n      <\/p>\n    <\/div>\n\n    <div class=\"cb-hero-badge\">\n      <span>Interactive<\/span>\n      <strong>Atlas-based assessment<\/strong>\n    <\/div>\n  <\/section>\n\n  <div id=\"cb-loading\" class=\"cb-loading\">Loading CHILL Atlas records\u2026<\/div>\n\n  <div class=\"cb-shell\" hidden>\n    <section class=\"cb-controls\" aria-label=\"CHILL Barometer filters\">\n      <div class=\"cb-search-wrap\">\n        <label class=\"cb-filter-label\" for=\"cb-search\">Search<\/label>\n        <input id=\"cb-search\" class=\"cb-search\" type=\"search\" placeholder=\"Title, country, theme, right\u2026\" \/>\n      <\/div>\n\n      <div id=\"cb-filter-panels\" class=\"cb-filter-grid\"><\/div>\n\n      <button type=\"button\" class=\"cb-reset\" id=\"cb-reset\">Reset<\/button>\n    <\/section>\n\n    <main class=\"cb-main\">\n      <section class=\"cb-kpis\" id=\"cb-kpis\"><\/section>\n\n      <section class=\"cb-card cb-score-card\">\n        <div class=\"cb-gauge-wrap\">\n          <div class=\"cb-gauge\" id=\"cb-gauge\">\n            <div class=\"cb-gauge-inner\">\n              <span id=\"cb-gauge-score\">0<\/span>\n              <small>\/100<\/small>\n            <\/div>\n          <\/div>\n        <\/div>\n\n        <div class=\"cb-score-text\">\n          <p class=\"cb-eyebrow\">Average intensity<\/p>\n          <h3 id=\"cb-score-title\">No data selected<\/h3>\n          <p id=\"cb-score-description\">\n            The score aggregates the filtered records. For restrictive measures, it indicates chilling pressure.\n            For protective measures, it indicates corrective or preventive impact.\n          <\/p>\n          <div class=\"cb-effect-strip\" id=\"cb-effect-strip\"><\/div>\n        <\/div>\n      <\/section>\n\n      <section class=\"cb-grid-two\">\n        <section class=\"cb-card\">\n          <div class=\"cb-section-head\">\n            <div>\n              <p class=\"cb-eyebrow\">Distribution<\/p>\n              <h3>Chilling effect level<\/h3>\n            <\/div>\n          <\/div>\n          <div id=\"cb-level-distribution\" class=\"cb-levels\"><\/div>\n        <\/section>\n\n        <section class=\"cb-card cb-mini-insight\">\n          <div>\n            <p class=\"cb-eyebrow\">Reading guide<\/p>\n            <h3>How to read the score<\/h3>\n            <p>\n              The direction of the effect matters: the same numerical score may indicate either chilling pressure or\n              protective impact, depending on the selected record type.\n            <\/p>\n          <\/div>\n\n          <div class=\"cb-legend\">\n            <span><i class=\"pressure\"><\/i>Pressure<\/span>\n            <span><i class=\"protective\"><\/i>Protective<\/span>\n            <span><i class=\"mixed\"><\/i>Mixed<\/span>\n          <\/div>\n        <\/section>\n      <\/section>\n\n      <section class=\"cb-card\">\n        <div class=\"cb-section-head cb-section-head-responsive\">\n          <div>\n            <p class=\"cb-eyebrow\">Aggregated view<\/p>\n            <h3 id=\"cb-group-title\">By thematic area<\/h3>\n          <\/div>\n\n          <div class=\"cb-tabs\" role=\"tablist\">\n            <button type=\"button\" class=\"cb-tab active\" data-group=\"thematic_area\">Thematic area<\/button>\n            <button type=\"button\" class=\"cb-tab\" data-group=\"country\">Country<\/button>\n            <button type=\"button\" class=\"cb-tab\" data-group=\"geographic_area\">Geographic area<\/button>\n            <button type=\"button\" class=\"cb-tab\" data-group=\"righst_involved\">Rights<\/button>\n          <\/div>\n        <\/div>\n\n        <div id=\"cb-group-chart\" class=\"cb-bars\"><\/div>\n      <\/section>\n\n      <section class=\"cb-card\">\n        <div class=\"cb-section-head\">\n          <div>\n            <p class=\"cb-eyebrow\">Filtered records<\/p>\n            <h3 id=\"cb-results-title\">Records<\/h3>\n          <\/div>\n        <\/div>\n        <div id=\"cb-results\" class=\"cb-results\"><\/div>\n      <\/section>\n    <\/main>\n  <\/div>\n<\/div>\n\n<style>\n  .chill-barometer {\n    max-width: 1180px;\n    background: var(--chill-bg);\n    color: var(--chill-text);\n    font-family: var(--chill-body-font);\n  }\n\n  .cb-hero {\n    display: grid;\n    grid-template-columns: minmax(0, 1fr) auto;\n    align-items: end;\n    gap: 24px;\n    margin-bottom: 18px;\n    background:\n      radial-gradient(circle at 8% 0%, rgba(56, 189, 248, 0.20), transparent 34%),\n      radial-gradient(circle at 100% 100%, rgba(125, 211, 252, 0.12), transparent 38%),\n      linear-gradient(135deg, #07111f 0%, #102542 52%, #0b1422 100%);\n  }\n\n  .cb-hero-badge {\n    position: relative;\n    z-index: 1;\n    min-width: 220px;\n    padding: 18px;\n    border: 1px solid var(--chill-border);\n    border-radius: 22px;\n    background: rgba(8, 19, 34, 0.72);\n    backdrop-filter: blur(14px);\n  }\n\n  .cb-hero-badge span,\n  .cb-hero-badge strong {\n    display: block;\n  }\n\n  .cb-hero-badge span {\n    margin-bottom: 6px;\n    color: var(--chill-barometer);\n    font-size: 12px;\n    font-weight: 900;\n    letter-spacing: 0.12em;\n    text-transform: uppercase;\n  }\n\n  .cb-hero-badge strong {\n    color: var(--chill-text);\n    font-size: 16px;\n    line-height: 1.25;\n  }\n\n  .cb-loading {\n    margin-top: 18px;\n    padding: 20px;\n    border: 1px solid var(--chill-border);\n    border-radius: var(--chill-radius-lg);\n    background: var(--chill-panel);\n    color: var(--chill-muted);\n  }\n\n  .cb-shell,\n  .cb-main {\n    display: grid;\n    gap: 18px;\n  }\n\n  .cb-controls {\n    position: sticky;\n    top: 14px;\n    z-index: 30;\n    display: grid;\n    grid-template-columns: minmax(220px, 1.2fr) minmax(0, 4fr) auto;\n    align-items: end;\n    gap: 12px;\n    padding: 14px;\n    border: 1px solid var(--chill-border);\n    border-radius: var(--chill-radius-xl);\n    background: rgba(11, 20, 34, 0.90);\n    backdrop-filter: blur(18px);\n    box-shadow: 0 18px 50px rgba(0, 0, 0, 0.24);\n  }\n\n  .cb-filter-grid {\n    display: grid;\n    grid-template-columns: repeat(6, minmax(0, 1fr));\n    gap: 10px;\n  }\n\n  .cb-search-wrap,\n  .cb-select {\n    min-width: 0;\n  }\n\n  .cb-filter-label {\n    display: block;\n    margin: 0 0 7px;\n    color: var(--chill-muted-2);\n    font-size: 11px;\n    font-weight: 850;\n    letter-spacing: 0.11em;\n    text-transform: uppercase;\n  }\n\n  .cb-search,\n  .cb-select-button,\n  .cb-reset {\n    width: 100%;\n    min-height: 48px;\n    border: 1px solid var(--chill-border);\n    border-radius: 15px;\n    outline: none;\n    background: rgba(16, 31, 51, 0.96);\n    color: var(--chill-text);\n    font: inherit;\n  }\n\n  .cb-search {\n    padding: 0 15px;\n  }\n\n  .cb-search::placeholder {\n    color: rgba(244, 247, 250, 0.42);\n  }\n\n  .cb-select {\n    position: relative;\n  }\n\n  .cb-select-button {\n    display: grid;\n    grid-template-columns: 1fr auto;\n    align-items: center;\n    gap: 8px;\n    padding: 8px 12px;\n    cursor: pointer;\n    text-align: left;\n    transition: border-color 0.2s ease, background 0.2s ease;\n  }\n\n  .cb-select-button:hover,\n  .cb-select.open .cb-select-button {\n    border-color: rgba(56, 189, 248, 0.44);\n    background: rgba(21, 44, 71, 0.96);\n  }\n\n  .cb-select-button strong {\n    display: block;\n    overflow: hidden;\n    color: var(--chill-text);\n    font-size: 13px;\n    line-height: 1.2;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n\n  .cb-select-button small {\n    color: var(--chill-muted-2);\n    font-size: 10px;\n    font-weight: 850;\n    letter-spacing: 0.08em;\n    text-transform: uppercase;\n  }\n\n  .cb-caret {\n    width: 9px;\n    height: 9px;\n    border-right: 2px solid var(--chill-muted);\n    border-bottom: 2px solid var(--chill-muted);\n    transform: rotate(45deg) translateY(-2px);\n    transition: transform 0.2s ease;\n  }\n\n  .cb-select.open .cb-caret {\n    transform: rotate(225deg) translateY(-2px);\n  }\n\n  .cb-menu {\n    position: absolute;\n    top: calc(100% + 9px);\n    left: 0;\n    right: 0;\n    z-index: 60;\n    display: none;\n    min-width: 260px;\n    max-height: 320px;\n    overflow: hidden;\n    border: 1px solid rgba(56, 189, 248, 0.28);\n    border-radius: 18px;\n    background: #091828;\n    box-shadow: 0 24px 70px rgba(0, 0, 0, 0.45);\n  }\n\n  .cb-select.open .cb-menu {\n    display: block;\n  }\n\n  .cb-menu-scroll {\n    max-height: 260px;\n    overflow: auto;\n    padding: 8px;\n  }\n\n  .cb-option {\n    display: grid;\n    grid-template-columns: auto 1fr;\n    gap: 9px;\n    align-items: start;\n    padding: 9px;\n    border-radius: 12px;\n    cursor: pointer;\n    color: var(--chill-muted);\n    font-size: 13px;\n    line-height: 1.3;\n  }\n\n  .cb-option:hover {\n    background: rgba(255, 255, 255, 0.06);\n    color: var(--chill-text);\n  }\n\n  .cb-option input {\n    margin-top: 1px;\n    accent-color: var(--chill-barometer);\n  }\n\n  .cb-menu-actions {\n    display: flex;\n    justify-content: space-between;\n    gap: 8px;\n    padding: 10px;\n    border-top: 1px solid var(--chill-border);\n    background: rgba(255, 255, 255, 0.035);\n  }\n\n  .cb-menu-actions button,\n  .cb-reset {\n    cursor: pointer;\n    font-weight: 850;\n  }\n\n  .cb-menu-actions button {\n    padding: 8px 10px;\n    border: 1px solid var(--chill-border);\n    border-radius: 999px;\n    background: rgba(255, 255, 255, 0.05);\n    color: var(--chill-text);\n    font-size: 12px;\n  }\n\n  .cb-reset {\n    padding: 0 18px;\n    border-color: transparent;\n    background: linear-gradient(135deg, var(--chill-barometer), #7dd3fc);\n    color: #06111e;\n    white-space: nowrap;\n  }\n\n  .cb-kpis {\n    display: grid;\n    grid-template-columns: repeat(4, minmax(0, 1fr));\n    gap: 14px;\n  }\n\n  .cb-kpi,\n  .cb-card {\n    border: 1px solid var(--chill-border);\n    border-radius: var(--chill-radius-xl);\n    background:\n      radial-gradient(circle at 100% 0%, rgba(56, 189, 248, 0.08), transparent 34%),\n      linear-gradient(180deg, rgba(18, 39, 62, 0.96), rgba(11, 24, 41, 0.96));\n    box-shadow: 0 24px 60px rgba(0, 0, 0, 0.23);\n  }\n\n  .cb-kpi {\n    min-height: 128px;\n    padding: 22px;\n    overflow: hidden;\n  }\n\n  .cb-kpi strong {\n    display: block;\n    margin-bottom: 9px;\n    color: var(--chill-text);\n    font-size: clamp(30px, 4vw, 44px);\n    line-height: 0.96;\n    letter-spacing: -0.06em;\n  }\n\n  .cb-kpi span {\n    display: block;\n    color: var(--chill-muted);\n    font-size: 13px;\n    line-height: 1.35;\n  }\n\n  .cb-card {\n    padding: clamp(20px, 3vw, 30px);\n  }\n\n  .cb-score-card {\n    display: grid;\n    grid-template-columns: minmax(190px, 250px) 1fr;\n    align-items: center;\n    gap: clamp(20px, 4vw, 40px);\n  }\n\n  .cb-gauge-wrap {\n    display: grid;\n    place-items: center;\n  }\n\n  .cb-gauge {\n    --cb-score-deg: 0deg;\n    --cb-gauge-color: var(--chill-barometer);\n    display: grid;\n    place-items: center;\n    width: min(230px, 56vw);\n    aspect-ratio: 1;\n    border-radius: 50%;\n    background:\n      conic-gradient(var(--cb-gauge-color) 0deg var(--cb-score-deg), rgba(255, 255, 255, 0.10) var(--cb-score-deg) 360deg);\n    box-shadow:\n      inset 0 0 0 1px rgba(255, 255, 255, 0.10),\n      0 20px 50px rgba(0, 0, 0, 0.30);\n  }\n\n  .cb-gauge-inner {\n    display: grid;\n    place-items: center;\n    align-content: center;\n    width: 72%;\n    aspect-ratio: 1;\n    border: 1px solid var(--chill-border);\n    border-radius: 50%;\n    background: #06111c;\n  }\n\n  .cb-gauge-inner span {\n    color: var(--chill-text);\n    font-size: clamp(44px, 7vw, 58px);\n    font-weight: 950;\n    line-height: 0.9;\n    letter-spacing: -0.08em;\n  }\n\n  .cb-gauge-inner small {\n    color: var(--chill-muted);\n    font-weight: 850;\n  }\n\n  .cb-eyebrow {\n    margin: 0 0 9px !important;\n    color: var(--chill-barometer);\n    font-size: 12px !important;\n    font-weight: 900;\n    letter-spacing: 0.16em;\n    text-transform: uppercase;\n  }\n\n  .cb-score-text h3,\n  .cb-section-head h3,\n  .cb-mini-insight h3 {\n    margin: 0;\n    color: var(--chill-text);\n    font-size: clamp(26px, 3.4vw, 38px);\n    line-height: 1.05;\n    font-weight: 800;\n    letter-spacing: -0.035em;\n  }\n\n  .cb-score-text p,\n  .cb-mini-insight p {\n    color: var(--chill-muted);\n    line-height: 1.6;\n  }\n\n  .cb-effect-strip,\n  .cb-legend {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 9px;\n    margin-top: 18px;\n  }\n\n  .cb-pill,\n  .cb-legend span {\n    display: inline-flex;\n    align-items: center;\n    gap: 8px;\n    padding: 8px 11px;\n    border: 1px solid var(--chill-border);\n    border-radius: 999px;\n    background: rgba(255, 255, 255, 0.055);\n    color: var(--chill-muted);\n    font-size: 12px;\n    font-weight: 850;\n  }\n\n  .cb-dot,\n  .cb-legend i {\n    flex: 0 0 auto;\n    width: 8px;\n    height: 8px;\n    border-radius: 50%;\n    background: var(--chill-barometer);\n  }\n\n  .cb-dot.pressure,\n  .cb-legend i.pressure {\n    background: #ff5d6c;\n  }\n\n  .cb-dot.protective,\n  .cb-legend i.protective {\n    background: #6ee7b7;\n  }\n\n  .cb-dot.mixed,\n  .cb-legend i.mixed {\n    background: #ffd84d;\n  }\n\n  .cb-dot.neutral {\n    background: rgba(255, 255, 255, 0.45);\n  }\n\n  .cb-grid-two {\n    display: grid;\n    grid-template-columns: minmax(0, 1.55fr) minmax(280px, 0.8fr);\n    gap: 18px;\n  }\n\n  .cb-mini-insight {\n    display: grid;\n    align-content: space-between;\n  }\n\n  .cb-section-head {\n    display: flex;\n    justify-content: space-between;\n    align-items: flex-start;\n    gap: 16px;\n    margin-bottom: 22px;\n  }\n\n  .cb-tabs {\n    display: flex;\n    flex-wrap: wrap;\n    justify-content: flex-end;\n    gap: 8px;\n  }\n\n  .cb-tab {\n    padding: 10px 13px;\n    border: 1px solid var(--chill-border);\n    border-radius: 999px;\n    background: rgba(255, 255, 255, 0.055);\n    color: var(--chill-muted);\n    cursor: pointer;\n    font-size: 12px;\n    font-weight: 850;\n    white-space: nowrap;\n  }\n\n  .cb-tab.active,\n  .cb-tab:hover {\n    border-color: transparent;\n    background: linear-gradient(135deg, var(--chill-barometer), #7dd3fc);\n    color: #071120;\n  }\n\n  .cb-levels,\n  .cb-bars,\n  .cb-results {\n    display: grid;\n    gap: 12px;\n  }\n\n  .cb-level-row,\n  .cb-bar-row {\n    display: grid;\n    grid-template-columns: minmax(130px, 250px) 1fr auto;\n    align-items: center;\n    gap: 12px;\n  }\n\n  .cb-level-label,\n  .cb-bar-label {\n    color: var(--chill-text);\n    font-size: 13px;\n    font-weight: 850;\n    line-height: 1.28;\n  }\n\n  .cb-track {\n    height: 13px;\n    overflow: hidden;\n    border: 1px solid rgba(255, 255, 255, 0.08);\n    border-radius: 999px;\n    background: rgba(255, 255, 255, 0.08);\n  }\n\n  .cb-fill {\n    width: 0%;\n    height: 100%;\n    border-radius: 999px;\n    background: linear-gradient(90deg, #38bdf8, #6ee7b7);\n    transition: width 0.35s ease;\n  }\n\n  .cb-fill.low {\n    background: linear-gradient(90deg, #38bdf8, #6ee7b7);\n  }\n\n  .cb-fill.medium {\n    background: linear-gradient(90deg, #6ee7b7, #ffd84d);\n  }\n\n  .cb-fill.high {\n    background: linear-gradient(90deg, #ffd84d, #ff9b52);\n  }\n\n  .cb-fill.critical {\n    background: linear-gradient(90deg, #ff9b52, #ff5d6c);\n  }\n\n  .cb-count {\n    color: var(--chill-muted);\n    font-size: 12px;\n    font-weight: 850;\n    white-space: nowrap;\n  }\n\n  .cb-result {\n    display: grid;\n    grid-template-columns: 1fr auto;\n    gap: 14px;\n    padding: 16px;\n    border: 1px solid var(--chill-border);\n    border-radius: 18px;\n    background: rgba(255, 255, 255, 0.045);\n  }\n\n  .cb-result h4 {\n    margin: 0 0 9px;\n    color: var(--chill-text);\n    font-size: 17px;\n    letter-spacing: -0.02em;\n  }\n\n  .cb-result h4 a {\n    color: var(--chill-text);\n    text-decoration: none;\n  }\n\n  .cb-result h4 a:hover {\n    color: var(--chill-barometer);\n  }\n\n  .cb-meta {\n    display: flex;\n    flex-wrap: wrap;\n    gap: 7px;\n  }\n\n  .cb-meta span {\n    padding: 6px 8px;\n    border-radius: 999px;\n    background: rgba(255, 255, 255, 0.07);\n    color: var(--chill-muted);\n    font-size: 12px;\n    font-weight: 750;\n  }\n\n  .cb-result-score {\n    display: grid;\n    place-items: center;\n    align-content: center;\n    min-width: 74px;\n    height: 74px;\n    border: 1px solid rgba(56, 189, 248, 0.30);\n    border-radius: 18px;\n    background: rgba(56, 189, 248, 0.12);\n  }\n\n  .cb-result-score strong {\n    color: var(--chill-text);\n    font-size: 28px;\n    line-height: 1;\n    letter-spacing: -0.06em;\n  }\n\n  .cb-result-score small {\n    color: var(--chill-muted);\n    font-weight: 850;\n  }\n\n  .cb-empty {\n    padding: 16px;\n    border: 1px dashed var(--chill-border);\n    border-radius: 18px;\n    color: var(--chill-muted);\n    text-align: center;\n  }\n\n  @media (max-width: 1120px) {\n    .cb-controls {\n      position: relative;\n      top: auto;\n      grid-template-columns: 1fr;\n    }\n\n    .cb-filter-grid {\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n    }\n  }\n\n  @media (max-width: 860px) {\n    .cb-hero,\n    .cb-filter-grid,\n    .cb-kpis,\n    .cb-grid-two,\n    .cb-score-card {\n      grid-template-columns: 1fr;\n    }\n\n    .cb-hero-badge {\n      min-width: 0;\n    }\n\n    .cb-section-head-responsive {\n      display: grid;\n    }\n\n    .cb-tabs {\n      justify-content: flex-start;\n    }\n\n    .cb-menu {\n      position: static;\n      min-width: 0;\n      margin-top: 9px;\n    }\n  }\n\n  @media (max-width: 560px) {\n    .cb-level-row,\n    .cb-bar-row,\n    .cb-result {\n      grid-template-columns: 1fr;\n      gap: 8px;\n    }\n\n    .cb-tabs {\n      display: grid;\n      grid-template-columns: 1fr 1fr;\n      width: 100%;\n    }\n\n    .cb-tab {\n      width: 100%;\n    }\n\n    .cb-effect-strip,\n    .cb-legend {\n      display: grid;\n    }\n    \n  }\n\n\n  \/* CHILL Barometer \u2014 leading thematic area KPI *\/\n  #chill-barometer-app .cb-kpi.cb-kpi-theme strong {\n    font-size: clamp(24px, 2.35vw, 34px) !important;\n    line-height: 1.08 !important;\n    letter-spacing: -0.035em !important;\n    max-width: 100% !important;\n    display: block !important;\n    overflow-wrap: normal !important;\n    word-break: normal !important;\n  }\n\n  @media (max-width: 560px) {\n    #chill-barometer-app .cb-kpi.cb-kpi-theme strong {\n      font-size: 28px !important;\n    }\n  }\n\n<\/style>\n\n<script>\n(function () {\n  const CONFIG = {\n    restEndpoint: window.location.origin + \"\/wp-json\/wp\/v2\/posts\",\n    perPage: 100,\n    taxonomies: {\n      thematic_area: [\"thematic_area\"],\n      country: [\"country\"],\n      righst_involved: [\"righst_involved\", \"rights_involved\"]\n    }\n  };\n\n  const STATIC_OPTIONS = {\n    thematic_area: [\n      \"Environmental Rights and Climate Protest\",\n      \"AI Surveillance and Digital Rights\",\n      \"Freedom of Expression and Media\",\n      \"Right to Protest and Civil Disobedience\",\n      \"Academic Freedom\",\n      \"Civil Society and NGOs\",\n      \"Migration Borders and Humanitarian Assistance\",\n      \"SLAPPs Defamation and Abusive Litigation\",\n      \"Security Public Order and Counter Terrorism\",\n      \"Labour Trade Unions and Social Mobilisation\",\n      \"Gender Vulnerability and Discrimination\",\n      \"Corporate Accountability and Business\"\n    ],\n    geographic_area: [\n      \"Europe\",\n      \"European Union\",\n      \"Council of Europe Area\",\n      \"North America\",\n      \"Latin America\",\n      \"Africa\",\n      \"Middle East and North Africa\",\n      \"Asia Pacific\",\n      \"Global Transnational\"\n    ],\n    righst_involved: [\n      \"Freedom of Expression\",\n      \"Freedom of Assembly\",\n      \"Freedom of Association\",\n      \"Privacy and Data Protection\",\n      \"Academic Freedom\",\n      \"Access to Justice Defence Rights\",\n      \"Fair Trial\",\n      \"Personal Liberty\",\n      \"Non Discrimination\",\n      \"Environmental Rights\",\n      \"Labour Rights\",\n      \"Property Economic Resources\",\n      \"Dignity Reputation\",\n      \"Democratic Participation\"\n    ],\n    effect_on_chilling_pressure: [\n      \"Increases Pressure\",\n      \"Reduces Pressure\",\n      \"Mixed or Ambiguous Effect\",\n      \"Neutral or No Clear Effect\",\n      \"Prevents Future Pressure\",\n      \"Removes Existing Pressure\",\n      \"Not Assessed\"\n    ],\n    chilling_effect_level: [\n      \"Low\",\n      \"Medium\",\n      \"High\",\n      \"Very High\",\n      \"Systemic\",\n      \"Not Assessed\"\n    ]\n  };\n\n  const FILTERS = [\n    { key: \"thematic_area\", label: \"Thematic area\", short: \"Theme\" },\n    { key: \"country\", label: \"Country\", short: \"Country\" },\n    { key: \"geographic_area\", label: \"Geographic area\", short: \"Area\" },\n    { key: \"righst_involved\", label: \"Rights involved\", short: \"Rights\" },\n    { key: \"effect_on_chilling_pressure\", label: \"Effect on chilling pressure\", short: \"Effect\" },\n    { key: \"chilling_effect_level\", label: \"Chilling effect level\", short: \"Level\" }\n  ];\n\n  const GROUP_LABELS = {\n    thematic_area: \"By thematic area\",\n    country: \"By country\",\n    geographic_area: \"By geographic area\",\n    righst_involved: \"By rights involved\"\n  };\n\n  const FIELD_ALIASES = {\n    righst_involved: [\"righst_involved\", \"rights_involved\"],\n    correct_or_mitigating_effect: [\"correct_or_mitigating_effect\", \"corrective_or_mitigating_effect\"],\n    barometer_source_reiliability: [\"barometer_source_reiliability\", \"barometer_source_reliability\"]\n  };\n\n  const root = document.getElementById(\"chill-barometer-app\");\n  const loading = document.getElementById(\"cb-loading\");\n  const shell = root.querySelector(\".cb-shell\");\n\n  const state = {\n    records: [],\n    filtered: [],\n    termsById: {},\n    filters: {},\n    groupBy: \"thematic_area\"\n  };\n\n  FILTERS.forEach(f => state.filters[f.key] = new Set());\n\n  const $ = (selector, base = document) => base.querySelector(selector);\n  const $$ = (selector, base = document) => Array.from(base.querySelectorAll(selector));\n\n  function escapeHtml(value) {\n    return String(value || \"\")\n      .replaceAll(\"&\", \"&amp;\")\n      .replaceAll(\"<\", \"&lt;\")\n      .replaceAll(\">\", \"&gt;\")\n      .replaceAll('\"', \"&quot;\")\n      .replaceAll(\"'\", \"&#039;\");\n  }\n\n  function stripHtml(value) {\n    const temp = document.createElement(\"div\");\n    temp.innerHTML = value || \"\";\n    return temp.textContent || temp.innerText || \"\";\n  }\n\n  function norm(value) {\n    return String(value || \"\").trim().toLowerCase();\n  }\n\n  function unique(values) {\n    return Array.from(new Set(values.filter(Boolean).map(v => String(v).trim()).filter(Boolean)));\n  }\n\n  function clamp(num, min, max) {\n    return Math.max(min, Math.min(max, num));\n  }\n\n  function numberField(acf, key) {\n    const raw = getAcfValue(acf, key);\n    if (raw === null || raw === undefined || raw === \"\") return null;\n    const n = Number(String(raw).replace(\",\", \".\"));\n    return Number.isFinite(n) ? n : null;\n  }\n\n  function getAcfValue(acf, key) {\n    const aliases = FIELD_ALIASES[key] || [key];\n    for (const candidate of aliases) {\n      if (acf && Object.prototype.hasOwnProperty.call(acf, candidate)) return acf[candidate];\n    }\n    return null;\n  }\n\n  function normalizeValue(value) {\n    if (value === null || value === undefined || value === \"\") return [];\n\n    if (Array.isArray(value)) return unique(value.flatMap(normalizeValue));\n\n    if (typeof value === \"object\") {\n      if (value.name) return [String(value.name)];\n      if (value.label) return [String(value.label)];\n      if (value.title && value.title.rendered) return [stripHtml(value.title.rendered)];\n      if (value.post_title) return [String(value.post_title)];\n      if (value.term_id && state.termsById[value.term_id]) return [state.termsById[value.term_id]];\n      if (value.id && state.termsById[value.id]) return [state.termsById[value.id]];\n      if (value.ID && state.termsById[value.ID]) return [state.termsById[value.ID]];\n      if (value.value && typeof value.value !== \"object\") return [String(value.value)];\n      return unique(Object.values(value).flatMap(normalizeValue));\n    }\n\n    if (typeof value === \"number\") return [state.termsById[value] || String(value)];\n\n    const str = String(value).trim();\n    if (!str) return [];\n\n    if (str.startsWith(\"[\") || str.startsWith(\"{\")) {\n      try { return normalizeValue(JSON.parse(str)); } catch (e) {}\n    }\n\n    return unique(str.split(\";\").map(v => v.trim()));\n  }\n\n  function getFieldArray(post, key) {\n    const acf = post.acf || {};\n    let values = normalizeValue(getAcfValue(acf, key));\n\n    if (!values.length) {\n      const aliases = FIELD_ALIASES[key] || [key];\n      for (const alias of aliases) {\n        if (post[alias]) {\n          values = normalizeValue(post[alias]);\n          break;\n        }\n      }\n    }\n\n    return values;\n  }\n\n  function getFieldSingle(post, key) {\n    return getFieldArray(post, key)[0] || \"\";\n  }\n\n  function scoreFromIndicators(acf, effect) {\n    const restrictiveKeys = [\n      \"measure_intensity\",\n      \"legal_uncertainty\",\n      \"sanctioning_risk\",\n      \"breadth_of_affected_subjects\",\n      \"vulnerability_of_affected_subjects\",\n      \"documented_deterrent_effect\",\n      \"public_visibility_exemplary_effect\",\n      \"replicability_of_the_measure\",\n      \"surveillance_or_data_collection\"\n    ];\n\n    const protectiveKeys = [\n      \"procedural_safeguards\",\n      \"protective_judicial_response\",\n      \"correct_or_mitigating_effect\"\n    ];\n\n    const restrictive = restrictiveKeys.map(k => numberField(acf, k)).filter(n => n !== null);\n    const protective = protectiveKeys.map(k => numberField(acf, k)).filter(n => n !== null);\n\n    const isProtective = [\"Reduces Pressure\", \"Prevents Future Pressure\", \"Removes Existing Pressure\"].includes(effect);\n\n    if (isProtective && protective.length) return Math.round((avg(protective) \/ 5) * 100);\n\n    if (restrictive.length) {\n      const base = avg(restrictive);\n      const reduction = protective.length ? avg(protective) * 0.35 : 0;\n      return Math.round((clamp(base - reduction, 0, 5) \/ 5) * 100);\n    }\n\n    return 0;\n  }\n\n  function levelFromScore(score) {\n    if (!score) return \"Not Assessed\";\n    if (score <= 25) return \"Low\";\n    if (score <= 50) return \"Medium\";\n    if (score <= 75) return \"High\";\n    if (score <= 90) return \"Very High\";\n    return \"Systemic\";\n  }\n\n  function avg(values) {\n    const valid = values.filter(n => Number.isFinite(n));\n    if (!valid.length) return 0;\n    return valid.reduce((a, b) => a + b, 0) \/ valid.length;\n  }\n\n  function effectType(effect) {\n    if (effect === \"Increases Pressure\") return \"pressure\";\n    if ([\"Reduces Pressure\", \"Prevents Future Pressure\", \"Removes Existing Pressure\"].includes(effect)) return \"protective\";\n    if (effect === \"Mixed or Ambiguous Effect\") return \"mixed\";\n    return \"neutral\";\n  }\n\n  function colorForScore(score) {\n    if (score <= 25) return \"#42c8ff\";\n    if (score <= 50) return \"#b7ff5b\";\n    if (score <= 75) return \"#ffd84d\";\n    if (score <= 90) return \"#ff9b52\";\n    return \"#ff5d6c\";\n  }\n\n  function fillClass(score) {\n    if (score <= 25) return \"low\";\n    if (score <= 50) return \"medium\";\n    if (score <= 75) return \"high\";\n    return \"critical\";\n  }\n\n  async function fetchJson(url) {\n    const response = await fetch(url, { credentials: \"same-origin\" });\n    if (!response.ok) throw new Error(\"REST error: \" + response.status + \" \" + url);\n    return {\n      data: await response.json(),\n      totalPages: Number(response.headers.get(\"X-WP-TotalPages\") || 1)\n    };\n  }\n\n  async function fetchAllPosts() {\n    const all = [];\n    let page = 1;\n    let totalPages = 1;\n\n    do {\n      const separator = CONFIG.restEndpoint.includes(\"?\") ? \"&\" : \"?\";\n      const url = CONFIG.restEndpoint + separator + \"per_page=\" + CONFIG.perPage + \"&page=\" + page + \"&acf_format=standard&_embed=1\";\n      const result = await fetchJson(url);\n      all.push(...result.data);\n      totalPages = result.totalPages || 1;\n      page++;\n    } while (page <= totalPages);\n\n    return all;\n  }\n\n  async function fetchTaxonomy(slugs) {\n    for (const slug of slugs) {\n      try {\n        const url = window.location.origin + \"\/wp-json\/wp\/v2\/\" + slug + \"?per_page=100\";\n        const result = await fetchJson(url);\n        result.data.forEach(term => {\n          if (term.id && term.name) state.termsById[term.id] = stripHtml(term.name);\n        });\n        return result.data.map(term => stripHtml(term.name));\n      } catch (e) {\n        continue;\n      }\n    }\n    return [];\n  }\n\n  async function fetchAllTaxonomies() {\n    const out = {};\n    for (const [key, slugs] of Object.entries(CONFIG.taxonomies)) out[key] = await fetchTaxonomy(slugs);\n    return out;\n  }\n\n  function normalizePost(post) {\n    const acf = post.acf || {};\n    const effect = getFieldSingle(post, \"effect_on_chilling_pressure\") || \"Not Assessed\";\n\n    let score = numberField(acf, \"total_barometer_score\");\n    if (score === null) score = scoreFromIndicators(acf, effect);\n    score = clamp(Math.round(score || 0), 0, 100);\n\n    const level = getFieldSingle(post, \"chilling_effect_level\") || levelFromScore(score);\n    const title = stripHtml(post.title && post.title.rendered ? post.title.rendered : post.title || \"Untitled record\");\n\n    return {\n      id: post.id,\n      title,\n      link: post.link || \"\",\n      year: getFieldSingle(post, \"year\"),\n      country: getFieldArray(post, \"country\"),\n      geographic_area: getFieldArray(post, \"geographic_area\"),\n      thematic_area: getFieldArray(post, \"thematic_area\"),\n      righst_involved: getFieldArray(post, \"righst_involved\"),\n      effect_on_chilling_pressure: effect,\n      chilling_effect_level: level,\n      barometer_status: getFieldSingle(post, \"barometer_status\") || \"Not Assessed\",\n      score,\n      searchText: [\n        title,\n        getFieldArray(post, \"country\").join(\" \"),\n        getFieldArray(post, \"geographic_area\").join(\" \"),\n        getFieldArray(post, \"thematic_area\").join(\" \"),\n        getFieldArray(post, \"righst_involved\").join(\" \"),\n        effect,\n        level\n      ].join(\" \").toLowerCase()\n    };\n  }\n\n  function buildFilterOptions(dynamicTaxOptions) {\n    const dynamicFromRecords = {};\n\n    FILTERS.forEach(filter => {\n      dynamicFromRecords[filter.key] = unique(\n        state.records.flatMap(record => {\n          const value = record[filter.key];\n          return Array.isArray(value) ? value : [value];\n        })\n      );\n    });\n\n    const options = {\n      thematic_area: unique([...(STATIC_OPTIONS.thematic_area || []), ...(dynamicTaxOptions.thematic_area || []), ...(dynamicFromRecords.thematic_area || [])]),\n      country: unique([...(dynamicTaxOptions.country || []), ...(dynamicFromRecords.country || [])]),\n      geographic_area: unique([...(STATIC_OPTIONS.geographic_area || []), ...(dynamicFromRecords.geographic_area || [])]),\n      righst_involved: unique([...(STATIC_OPTIONS.righst_involved || []), ...(dynamicTaxOptions.righst_involved || []), ...(dynamicFromRecords.righst_involved || [])]),\n      effect_on_chilling_pressure: unique([...(STATIC_OPTIONS.effect_on_chilling_pressure || []), ...(dynamicFromRecords.effect_on_chilling_pressure || [])]),\n      chilling_effect_level: unique([...(STATIC_OPTIONS.chilling_effect_level || []), ...(dynamicFromRecords.chilling_effect_level || [])])\n    };\n\n    renderFilterPanels(options);\n  }\n\n  function renderFilterPanels(options) {\n    const container = $(\"#cb-filter-panels\");\n    container.innerHTML = FILTERS.map(filter => {\n      const values = options[filter.key] || [];\n      const safeKey = escapeHtml(filter.key);\n\n      return `\n        <div class=\"cb-select\" data-select=\"${safeKey}\">\n          <button type=\"button\" class=\"cb-select-button\" aria-expanded=\"false\">\n            <span>\n              <small>${escapeHtml(filter.short)}<\/small>\n              <strong data-select-label=\"${safeKey}\">All ${escapeHtml(filter.short.toLowerCase())}<\/strong>\n            <\/span>\n            <i class=\"cb-caret\" aria-hidden=\"true\"><\/i>\n          <\/button>\n\n          <div class=\"cb-menu\">\n            <div class=\"cb-menu-scroll\">\n              ${values.length ? values.map(value => `\n                <label class=\"cb-option\">\n                  <input type=\"checkbox\" data-filter=\"${safeKey}\" value=\"${escapeHtml(value)}\">\n                  <span>${escapeHtml(value)}<\/span>\n                <\/label>\n              `).join(\"\") : `<div class=\"cb-empty\">No options available.<\/div>`}\n            <\/div>\n            <div class=\"cb-menu-actions\">\n              <button type=\"button\" data-clear=\"${safeKey}\">Clear<\/button>\n              <button type=\"button\" data-close-select>Done<\/button>\n            <\/div>\n          <\/div>\n        <\/div>\n      `;\n    }).join(\"\");\n\n    $$(\".cb-select-button\", container).forEach(button => {\n      button.addEventListener(\"click\", event => {\n        event.stopPropagation();\n        const current = button.closest(\".cb-select\");\n        $$(\".cb-select\", container).forEach(select => {\n          if (select !== current) {\n            select.classList.remove(\"open\");\n            const btn = select.querySelector(\".cb-select-button\");\n            if (btn) btn.setAttribute(\"aria-expanded\", \"false\");\n          }\n        });\n        current.classList.toggle(\"open\");\n        button.setAttribute(\"aria-expanded\", current.classList.contains(\"open\") ? \"true\" : \"false\");\n      });\n    });\n\n    $$(\"input[data-filter]\", container).forEach(input => {\n      input.addEventListener(\"change\", () => {\n        const key = input.dataset.filter;\n        if (input.checked) state.filters[key].add(input.value);\n        else state.filters[key].delete(input.value);\n        updateDropdownLabels();\n        applyFilters();\n      });\n    });\n\n    $$('[data-clear]', container).forEach(button => {\n      button.addEventListener(\"click\", event => {\n        event.stopPropagation();\n        const key = button.dataset.clear;\n        state.filters[key].clear();\n        $$(`input[data-filter=\"${key}\"]`, container).forEach(input => input.checked = false);\n        updateDropdownLabels();\n        applyFilters();\n      });\n    });\n\n    $$('[data-close-select]', container).forEach(button => {\n      button.addEventListener(\"click\", event => {\n        event.stopPropagation();\n        const select = button.closest(\".cb-select\");\n        select.classList.remove(\"open\");\n        const btn = select.querySelector(\".cb-select-button\");\n        if (btn) btn.setAttribute(\"aria-expanded\", \"false\");\n      });\n    });\n\n    document.addEventListener(\"click\", () => {\n      $$(\".cb-select\", container).forEach(select => {\n        select.classList.remove(\"open\");\n        const btn = select.querySelector(\".cb-select-button\");\n        if (btn) btn.setAttribute(\"aria-expanded\", \"false\");\n      });\n    });\n\n    updateDropdownLabels();\n  }\n\n  function updateDropdownLabels() {\n    FILTERS.forEach(filter => {\n      const label = $(`[data-select-label=\"${filter.key}\"]`);\n      if (!label) return;\n      const selected = Array.from(state.filters[filter.key] || []);\n      if (!selected.length) {\n        label.textContent = \"All \" + filter.short.toLowerCase();\n      } else if (selected.length === 1) {\n        label.textContent = selected[0];\n      } else {\n        label.textContent = selected.length + \" selected\";\n      }\n    });\n  }\n\n  function recordMatches(record) {\n    const search = norm($(\"#cb-search\").value);\n    if (search && !record.searchText.includes(search)) return false;\n\n    return FILTERS.every(filter => {\n      const selected = Array.from(state.filters[filter.key] || []);\n      if (!selected.length) return true;\n\n      const recordValue = record[filter.key];\n      const values = Array.isArray(recordValue) ? recordValue : [recordValue];\n\n      return selected.some(sel => values.some(v => norm(v) === norm(sel)));\n    });\n  }\n\n  function applyFilters() {\n    state.filtered = state.records.filter(recordMatches);\n    renderAll();\n  }\n\n  function renderAll() {\n    renderKpis();\n    renderGauge();\n    renderLevelDistribution();\n    renderGroupChart();\n    renderResults();\n  }\n\n  function getStats(records) {\n    const count = records.length;\n    const scores = records.map(r => r.score).filter(n => n > 0);\n    const average = Math.round(avg(scores));\n    const highCount = records.filter(r => r.score >= 51 || [\"High\", \"Very High\", \"Systemic\"].includes(r.chilling_effect_level)).length;\n\n    const pressure = records.filter(r => effectType(r.effect_on_chilling_pressure) === \"pressure\").length;\n    const protective = records.filter(r => effectType(r.effect_on_chilling_pressure) === \"protective\").length;\n    const mixed = records.filter(r => effectType(r.effect_on_chilling_pressure) === \"mixed\").length;\n    const neutral = records.filter(r => effectType(r.effect_on_chilling_pressure) === \"neutral\").length;\n\n    return { count, average, highCount, pressure, protective, mixed, neutral };\n  }\n\n  function mostFrequent(records, key) {\n    const map = new Map();\n    records.forEach(record => {\n      const values = Array.isArray(record[key]) ? record[key] : [record[key]];\n      values.filter(Boolean).forEach(value => map.set(value, (map.get(value) || 0) + 1));\n    });\n    const top = Array.from(map.entries()).sort((a, b) => b[1] - a[1])[0];\n    return top ? top[0] : \"\u2014\";\n  }\n\n  function renderKpis() {\n    const stats = getStats(state.filtered);\n    $(\"#cb-kpis\").innerHTML = `\n      <div class=\"cb-kpi\"><strong>${stats.count}<\/strong><span>filtered records<\/span><\/div>\n      <div class=\"cb-kpi\"><strong>${stats.average || 0}<\/strong><span>average score<\/span><\/div>\n      <div class=\"cb-kpi\"><strong>${stats.highCount}<\/strong><span>high \/ very high \/ systemic records<\/span><\/div>\n      <div class=\"cb-kpi cb-kpi-theme\"><strong>${escapeHtml(shortThemeLabel(mostFrequent(state.filtered, \"thematic_area\")))}<\/strong><span>leading thematic area<\/span><\/div>\n    `;\n  }\n\n  function renderGauge() {\n    const stats = getStats(state.filtered);\n    const score = stats.average || 0;\n    const gauge = $(\"#cb-gauge\");\n\n    gauge.style.setProperty(\"--cb-score-deg\", (score * 3.6) + \"deg\");\n    gauge.style.setProperty(\"--cb-gauge-color\", colorForScore(score));\n\n    $(\"#cb-gauge-score\").textContent = score;\n    $(\"#cb-score-title\").textContent = score ? labelForScore(score) : \"No data selected\";\n\n    $(\"#cb-effect-strip\").innerHTML = `\n      <span class=\"cb-pill\"><span class=\"cb-dot pressure\"><\/span>Pressure: ${stats.pressure}<\/span>\n      <span class=\"cb-pill\"><span class=\"cb-dot protective\"><\/span>Protective \/ corrective: ${stats.protective}<\/span>\n      <span class=\"cb-pill\"><span class=\"cb-dot mixed\"><\/span>Mixed \/ ambiguous: ${stats.mixed}<\/span>\n      <span class=\"cb-pill\"><span class=\"cb-dot neutral\"><\/span>Neutral \/ not assessed: ${stats.neutral}<\/span>\n    `;\n  }\n\n  function labelForScore(score) {\n    if (score <= 25) return \"Low intensity\";\n    if (score <= 50) return \"Medium intensity\";\n    if (score <= 75) return \"High intensity\";\n    if (score <= 90) return \"Very high intensity\";\n    return \"Systemic or exceptional intensity\";\n  }\n\n  function renderLevelDistribution() {\n    const levels = [\"Low\", \"Medium\", \"High\", \"Very High\", \"Systemic\", \"Not Assessed\"];\n    const total = state.filtered.length || 1;\n\n    $(\"#cb-level-distribution\").innerHTML = levels.map(level => {\n      const count = state.filtered.filter(r => r.chilling_effect_level === level).length;\n      const percentage = Math.round((count \/ total) * 100);\n      const scoreForClass = level === \"Low\" ? 20 : level === \"Medium\" ? 45 : level === \"High\" ? 70 : level === \"Very High\" ? 85 : level === \"Systemic\" ? 100 : 0;\n\n      return `\n        <div class=\"cb-level-row\">\n          <div class=\"cb-level-label\">${escapeHtml(level)}<\/div>\n          <div class=\"cb-track\"><div class=\"cb-fill ${fillClass(scoreForClass)}\" style=\"width:${percentage}%\"><\/div><\/div>\n          <div class=\"cb-count\">${count} \u00b7 ${percentage}%<\/div>\n        <\/div>\n      `;\n    }).join(\"\");\n  }\n\n  function renderGroupChart() {\n    const key = state.groupBy;\n    $(\"#cb-group-title\").textContent = GROUP_LABELS[key] || \"Aggregated view\";\n\n    const groups = new Map();\n    state.filtered.forEach(record => {\n      let values = record[key];\n      if (!Array.isArray(values)) values = [values];\n      if (!values.length || !values.some(Boolean)) values = [\"Unclassified\"];\n\n      values.filter(Boolean).forEach(value => {\n        if (!groups.has(value)) groups.set(value, []);\n        groups.get(value).push(record);\n      });\n    });\n\n    const rows = Array.from(groups.entries())\n      .map(([label, records]) => ({\n        label,\n        count: records.length,\n        average: Math.round(avg(records.map(r => r.score).filter(n => n > 0)))\n      }))\n      .sort((a, b) => b.average - a.average || b.count - a.count)\n      .slice(0, 18);\n\n    if (!rows.length) {\n      $(\"#cb-group-chart\").innerHTML = `<div class=\"cb-empty\">No records match the selected filters.<\/div>`;\n      return;\n    }\n\n    $(\"#cb-group-chart\").innerHTML = rows.map(row => `\n      <div class=\"cb-bar-row\">\n        <div class=\"cb-bar-label\">${escapeHtml(row.label)}<\/div>\n        <div class=\"cb-track\"><div class=\"cb-fill ${fillClass(row.average)}\" style=\"width:${row.average}%\"><\/div><\/div>\n        <div class=\"cb-count\">${row.average || 0}\/100 \u00b7 ${row.count} records<\/div>\n      <\/div>\n    `).join(\"\");\n  }\n\n  function renderResults() {\n    const records = [...state.filtered].sort((a, b) => b.score - a.score);\n    $(\"#cb-results-title\").textContent = records.length + \" records\";\n\n    if (!records.length) {\n      $(\"#cb-results\").innerHTML = `<div class=\"cb-empty\">No records found. Reduce the filters or check that ACF fields and taxonomies are exposed in the WordPress REST API.<\/div>`;\n      return;\n    }\n\n    $(\"#cb-results\").innerHTML = records.slice(0, 24).map(record => {\n      const title = escapeHtml(record.title);\n      const titleHtml = record.link ? `<a href=\"${escapeHtml(record.link)}\">${title}<\/a>` : title;\n      const meta = [\n        ...(record.country || []).slice(0, 2),\n        ...(record.geographic_area || []).slice(0, 1),\n        ...(record.thematic_area || []).slice(0, 2),\n        ...(record.righst_involved || []).slice(0, 2),\n        record.effect_on_chilling_pressure,\n        record.chilling_effect_level\n      ].filter(Boolean);\n\n      return `\n        <article class=\"cb-result\">\n          <div>\n            <h4>${titleHtml}<\/h4>\n            <div class=\"cb-meta\">${meta.map(item => `<span>${escapeHtml(item)}<\/span>`).join(\"\")}<\/div>\n          <\/div>\n          <div class=\"cb-result-score\"><strong>${record.score || 0}<\/strong><small>\/100<\/small><\/div>\n        <\/article>\n      `;\n    }).join(\"\");\n\n    if (records.length > 24) {\n      $(\"#cb-results\").insertAdjacentHTML(\"beforeend\", `<div class=\"cb-empty\">Showing the first 24 records ordered by score. Use the filters to narrow the results.<\/div>`);\n    }\n  }\n\n  function shorten(value, max) {\n    const str = String(value || \"\");\n    return str.length > max ? str.slice(0, max - 1) + \"\u2026\" : str;\n  }\n\n\n\n  function shortThemeLabel(value) {\n    const label = String(value || \"\");\n\n    const labels = {\n      \"AI Surveillance and Digital Rights\": \"AI & Digital Rights\",\n      \"Environmental Rights and Climate Protest\": \"Climate Protest\",\n      \"Freedom of Expression and Media\": \"Expression & Media\",\n      \"Right to Protest and Civil Disobedience\": \"Protest & Disobedience\",\n      \"Migration Borders and Humanitarian Assistance\": \"Migration & Borders\",\n      \"SLAPPs Defamation and Abusive Litigation\": \"SLAPPs & Litigation\",\n      \"Security Public Order and Counter Terrorism\": \"Security & Public Order\",\n      \"Labour Trade Unions and Social Mobilisation\": \"Labour & Unions\",\n      \"Gender Vulnerability and Discrimination\": \"Gender & Equality\",\n      \"Corporate Accountability and Business\": \"Corporate Accountability\",\n      \"Civil Society and NGOs\": \"Civil Society\",\n      \"Academic Freedom\": \"Academic Freedom\"\n    };\n\n    return labels[label] || shorten(label, 24);\n  }\n\n  function bindEvents() {\n    $(\"#cb-search\").addEventListener(\"input\", applyFilters);\n\n    $(\"#cb-reset\").addEventListener(\"click\", () => {\n      $(\"#cb-search\").value = \"\";\n      FILTERS.forEach(filter => state.filters[filter.key].clear());\n      $$(\"input[data-filter]\").forEach(input => input.checked = false);\n      updateDropdownLabels();\n      applyFilters();\n    });\n\n    $$(\".cb-tab\").forEach(button => {\n      button.addEventListener(\"click\", () => {\n        $$(\".cb-tab\").forEach(btn => btn.classList.remove(\"active\"));\n        button.classList.add(\"active\");\n        state.groupBy = button.dataset.group;\n        renderGroupChart();\n      });\n    });\n  }\n\n  async function init() {\n    try {\n      const dynamicTaxOptions = await fetchAllTaxonomies();\n      const posts = await fetchAllPosts();\n\n      state.records = posts\n        .map(normalizePost)\n        .filter(record => {\n          return (\n            record.score > 0 ||\n            record.barometer_status !== \"Not Assessed\" ||\n            record.thematic_area.length ||\n            record.righst_involved.length\n          );\n        });\n\n      buildFilterOptions(dynamicTaxOptions);\n      bindEvents();\n\n      loading.hidden = true;\n      shell.hidden = false;\n      applyFilters();\n    } catch (error) {\n      console.error(error);\n      loading.innerHTML = `<strong>Unable to load the Barometer.<\/strong><br>Check that the post type, ACF fields, and taxonomies are exposed in the WordPress REST API.`;\n    }\n  }\n\n  init();\n})();\n<\/script>\t\t\t\t<\/div>\n\t\t\n<\/div>\n<div class=\"elementor-element elementor-element-a517360 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile e-flex e-con-boxed e-con e-parent\" data-id=\"a517360\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-e19bb1d e-con-full e-flex e-con e-child\" data-id=\"e19bb1d\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-f7799f4 e-con-full e-flex e-con e-child\" data-id=\"f7799f4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-38b773d elementor-widget__width-inherit elementor-widget elementor-widget-heading\" data-id=\"38b773d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Latest entries<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-416ef4b e-con-full e-flex e-con e-child\" data-id=\"416ef4b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d06ac19 elementor-widget__width-auto elementor-hidden-mobile elementor-widget elementor-widget-search\" data-id=\"d06ac19\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;live_results&quot;:&quot;yes&quot;,&quot;submit_trigger&quot;:&quot;click_submit&quot;,&quot;pagination_type_options&quot;:&quot;none&quot;,&quot;results_is_dropdown_width&quot;:&quot;search_field&quot;}\" data-widget_type=\"search.default\">\n\t\t\t\t\t\t\t<search class=\"e-search hidden\" role=\"search\">\n\t\t\t<form class=\"e-search-form\" action=\"https:\/\/chill-lab.eu\/it\" method=\"get\">\n\n\t\t\t\t\n\t\t\t\t<label class=\"e-search-label\" for=\"search-d06ac19\">\n\t\t\t\t\t<span class=\"elementor-screen-only\">\n\t\t\t\t\t\tCerca\t\t\t\t\t<\/span>\n\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-search\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"><\/path><\/svg>\t\t\t\t<\/label>\n\n\t\t\t\t<div class=\"e-search-input-wrapper\">\n\t\t\t\t\t<input id=\"search-d06ac19\" placeholder=\"Write to start the research...\" class=\"e-search-input\" type=\"search\" name=\"s\" value=\"\" autocomplete=\"on\" role=\"combobox\" aria-autocomplete=\"list\" aria-expanded=\"false\" aria-controls=\"results-d06ac19\" aria-haspopup=\"listbox\">\n\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-times\" viewBox=\"0 0 352 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z\"><\/path><\/svg>\t\t\t\t\t\t\t\t\t\t<output id=\"results-d06ac19\" class=\"e-search-results-container hide-loader\" aria-live=\"polite\" aria-atomic=\"true\" aria-label=\"Risultati della ricerca\" tabindex=\"0\">\n\t\t\t\t\t\t<div class=\"e-search-results\"><\/div>\n\t\t\t\t\t\t\t\t\t\t\t<\/output>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<button class=\"e-search-submit  \" type=\"submit\">\n\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t<span class=\"\">\n\t\t\t\t\t\tCerca\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/button>\n\t\t\t\t<input type=\"hidden\" name=\"e_search_props\" value=\"d06ac19-17\">\n\t\t\t<\/form>\n\t\t<\/search>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fbar001 e-con-full e-flex e-con e-child\" data-id=\"fbar001\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-chfilt1 elementor-widget elementor-widget-shortcode\" data-id=\"chfilt1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><style>\n\t.chill-filtri{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-end;margin:0;}\n\t.chill-filtri .chill-f-item{display:flex;flex-direction:column;gap:6px;flex:1 1 220px;min-width:200px;max-width:360px;}\n\t.chill-filtri .chill-f-label{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:#7e8ca3;font-weight:600;}\n\t.chill-filtri .chill-f-select{appearance:none;-webkit-appearance:none;-moz-appearance:none;color:#e7eef9;border:1px solid #26334a;border-radius:8px;padding:11px 40px 11px 14px;font-size:15px;cursor:pointer;width:100%;background-color:#0f1a2b;background-image:url(\"data:image\/svg+xml,%3Csvg xmlns=%27http:\/\/www.w3.org\/2000\/svg%27 width=%2712%27 height=%278%27 viewBox=%270 0 12 8%27%3E%3Cpath fill=%27%2338bdf8%27 d=%27M0 0l6 8 6-8z%27\/%3E%3C\/svg%3E\");background-repeat:no-repeat;background-position:right 14px center;}\n\t.chill-filtri .chill-f-select:hover{border-color:#38bdf8;}\n\t.chill-filtri .chill-f-select:focus{outline:none;border-color:#38bdf8;box-shadow:0 0 0 2px rgba(56,189,248,.25);}\n\t.chill-filtri .chill-f-select option{background:#fff;color:#111;}\n\t<\/style><div class=\"chill-filtri\"><\/div><script>function chillFiltri(){var p=new URLSearchParams(window.location.search);document.querySelectorAll(\".chill-filtri .chill-f-select\").forEach(function(s){var k=s.getAttribute(\"data-param\");if(s.value){p.set(k,s.value);}else{p.delete(k);}});var q=p.toString();window.location.href=window.location.pathname+(q?(\"?\"+q):\"\");}<\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4b84091 elementor-grid-3 elementor-grid-tablet-2 elementor-grid-mobile-1 elementor-widget elementor-widget-loop-grid\" data-id=\"4b84091\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;template_id&quot;:168,&quot;row_gap&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;_skin&quot;:&quot;post&quot;,&quot;columns&quot;:&quot;3&quot;,&quot;columns_tablet&quot;:&quot;2&quot;,&quot;columns_mobile&quot;:&quot;1&quot;,&quot;edit_handle_selector&quot;:&quot;[data-elementor-type=\\&quot;loop-item\\&quot;]&quot;,&quot;row_gap_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;row_gap_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\" data-widget_type=\"loop-grid.post\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-loop-container elementor-grid\" role=\"list\">\n\t\t<style id=\"loop-168\">.elementor-168 .elementor-element.elementor-element-c287f7c{--display:flex;}.elementor-widget-theme-post-title .elementor-heading-title{font-family:var( --e-global-typography-primary-font-family ), Sans-serif;font-size:var( --e-global-typography-primary-font-size );font-weight:var( --e-global-typography-primary-font-weight );line-height:var( --e-global-typography-primary-line-height );letter-spacing:var( --e-global-typography-primary-letter-spacing );word-spacing:var( --e-global-typography-primary-word-spacing );color:var( --e-global-color-primary );}.elementor-168 .elementor-element.elementor-element-8a7be7a .elementor-heading-title{font-family:\"Playfair Display\", Sans-serif;font-size:18px;font-weight:700;}.elementor-widget-text-editor{font-family:var( --e-global-typography-text-font-family ), Sans-serif;font-size:var( --e-global-typography-text-font-size );font-weight:var( --e-global-typography-text-font-weight );line-height:var( --e-global-typography-text-line-height );letter-spacing:var( --e-global-typography-text-letter-spacing );word-spacing:var( --e-global-typography-text-word-spacing );color:var( --e-global-color-text );}.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:var( --e-global-color-primary );}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap, .elementor-widget-text-editor.elementor-drop-cap-view-default .elementor-drop-cap{color:var( --e-global-color-primary );border-color:var( --e-global-color-primary );}@media(max-width:1024px){.elementor-widget-theme-post-title .elementor-heading-title{font-size:var( --e-global-typography-primary-font-size );line-height:var( --e-global-typography-primary-line-height );letter-spacing:var( --e-global-typography-primary-letter-spacing );word-spacing:var( --e-global-typography-primary-word-spacing );}.elementor-widget-text-editor{font-size:var( --e-global-typography-text-font-size );line-height:var( --e-global-typography-text-line-height );letter-spacing:var( --e-global-typography-text-letter-spacing );word-spacing:var( --e-global-typography-text-word-spacing );}}@media(max-width:767px){.elementor-widget-theme-post-title .elementor-heading-title{font-size:var( --e-global-typography-primary-font-size );line-height:var( --e-global-typography-primary-line-height );letter-spacing:var( --e-global-typography-primary-letter-spacing );word-spacing:var( --e-global-typography-primary-word-spacing );}.elementor-widget-text-editor{font-size:var( --e-global-typography-text-font-size );line-height:var( --e-global-typography-text-line-height );letter-spacing:var( --e-global-typography-text-letter-spacing );word-spacing:var( --e-global-typography-text-word-spacing );}}<\/style>\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"168\" class=\"elementor elementor-168 e-loop-item e-loop-item-450 post-450 post type-post status-publish format-standard hentry category-uncategorized affected_subject-digital-users-online-communities affected_subject-general-public country-the-netherlands judicial_forum-ordinary-court relevant_legal_instruments_artic-article-7-respect-for-private-and-family-life-secondary relevant_legal_instruments_artic-article-8-protection-of-personal-data-secondary relevant_legal_instruments_artic-article-8-right-to-respect-for-private-life-central thematica_area-ai_surveillance_digital_rights thematica_area-civil_society_ngos thematica_area-gender_vulnerability_discrimination\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-c287f7c e-flex e-con-boxed e-con e-parent\" data-id=\"c287f7c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a7be7a elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading\" data-id=\"8a7be7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-post-title.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/chill-lab.eu\/it\/netherlands-systeem-risico-indicatie\/\">Netherlands \u2014 Systeem Risico Indicatie<\/a><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd0ad96 elementor-widget elementor-widget-text-editor\" data-id=\"fd0ad96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t2014\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-rdmore7 elementor-widget elementor-widget-shortcode\" data-id=\"rdmore7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><a class=\"chill-leggi\" href=\"https:\/\/chill-lab.eu\/it\/netherlands-systeem-risico-indicatie\/\">Leggi tutto &rarr;<\/a><style>.chill-leggi{display:inline-block;margin-top:8px;color:#38bdf8;font-weight:600;font-size:14px;text-decoration:none;}.chill-leggi:hover{color:#fff;}<\/style><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"168\" class=\"elementor elementor-168 e-loop-item e-loop-item-448 post-448 post type-post status-publish format-standard hentry category-uncategorized affected_subject-activists affected_subject-digital-users-online-communities affected_subject-general-public country-united-kingdom judicial_forum-court-of-appeal-civil-division-uk judicial_forum-ordinary-court relevant_legal_instruments_artic-article-8-protection-of-personal-data-central relevant_legal_instruments_artic-article-8-echr-as-incorporated-central relevant_legal_instruments_artic-articles-10-and-11-expression-and-assembly-contextual relevant_legal_instruments_artic-uk-human-rights-act-1998 rights_involved-democratic-participation rights_involved-freedom-of-assembly rights_involved-freedom-of-expression rights_involved-non-discrimination rights_involved-privacy-and-data-protection thematica_area-ai_surveillance_digital_rights thematica_area-gender_vulnerability_discrimination thematica_area-right_to_protest_civil_disobedience thematica_area-security_public_order_counter_terrorism\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-c287f7c e-flex e-con-boxed e-con e-parent\" data-id=\"c287f7c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a7be7a elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading\" data-id=\"8a7be7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-post-title.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/chill-lab.eu\/it\/bridges-v-chief-constable-of-south-wales-police\/\">Bridges v. Chief Constable of South Wales Police<\/a><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd0ad96 elementor-widget elementor-widget-text-editor\" data-id=\"fd0ad96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t2020\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-rdmore7 elementor-widget elementor-widget-shortcode\" data-id=\"rdmore7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><a class=\"chill-leggi\" href=\"https:\/\/chill-lab.eu\/it\/bridges-v-chief-constable-of-south-wales-police\/\">Leggi tutto &rarr;<\/a><style>.chill-leggi{display:inline-block;margin-top:8px;color:#38bdf8;font-weight:600;font-size:14px;text-decoration:none;}.chill-leggi:hover{color:#fff;}<\/style><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"168\" class=\"elementor elementor-168 e-loop-item e-loop-item-446 post-446 post type-post status-publish format-standard hentry category-uncategorized affected_subject-activists affected_subject-digital-users-online-communities affected_subject-general-public country-russia judicial_forum-european-court-of-human-rights relevant_legal_instruments_artic-article-10-freedom-of-expression-central relevant_legal_instruments_artic-article-11-freedom-of-assembly-and-association-central relevant_legal_instruments_artic-article-17-privacy-secondary relevant_legal_instruments_artic-article-19-freedom-of-expression-secondary relevant_legal_instruments_artic-article-6-fair-trial-contextual relevant_legal_instruments_artic-article-8-right-to-respect-for-private-life-central thematica_area-ai_surveillance_digital_rights thematica_area-freedom_of_expression_media thematica_area-right_to_protest_civil_disobedience thematica_area-security_public_order_counter_terrorism\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-c287f7c e-flex e-con-boxed e-con e-parent\" data-id=\"c287f7c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a7be7a elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading\" data-id=\"8a7be7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-post-title.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/chill-lab.eu\/it\/glukhin-v-russia\/\">Glukhin v. Russia<\/a><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd0ad96 elementor-widget elementor-widget-text-editor\" data-id=\"fd0ad96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t2023\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-rdmore7 elementor-widget elementor-widget-shortcode\" data-id=\"rdmore7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><a class=\"chill-leggi\" href=\"https:\/\/chill-lab.eu\/it\/glukhin-v-russia\/\">Leggi tutto &rarr;<\/a><style>.chill-leggi{display:inline-block;margin-top:8px;color:#38bdf8;font-weight:600;font-size:14px;text-decoration:none;}.chill-leggi:hover{color:#fff;}<\/style><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"168\" class=\"elementor elementor-168 e-loop-item e-loop-item-444 post-444 post type-post status-publish format-standard hentry category-uncategorized affected_subject-digital-users-online-communities affected_subject-general-public country-germany judicial_forum-court-of-justice-of-the-european-union relevant_legal_instruments_artic-article-151h-meaningful-information-about-automated-decision-making-secondary relevant_legal_instruments_artic-article-22-automated-individual-decision-making-including-profiling-central relevant_legal_instruments_artic-article-47-effective-remedy-secondary relevant_legal_instruments_artic-article-5-data-protection-principles-secondary relevant_legal_instruments_artic-article-6-lawfulness-of-processing-secondary relevant_legal_instruments_artic-article-6-and-annex-iii-high-risk-ai-systems-for-creditworthiness-and-credit-scoring-contextual relevant_legal_instruments_artic-article-8-protection-of-personal-data-central thematica_area-ai_surveillance_digital_rights\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-c287f7c e-flex e-con-boxed e-con e-parent\" data-id=\"c287f7c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a7be7a elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading\" data-id=\"8a7be7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-post-title.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/chill-lab.eu\/it\/schufa-holding-cjeu-judgment-on-automated-credit-scoring\/\">SCHUFA Holding \u2014 CJEU Judgment on automated credit scoring<\/a><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd0ad96 elementor-widget elementor-widget-text-editor\" data-id=\"fd0ad96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t2023\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-rdmore7 elementor-widget elementor-widget-shortcode\" data-id=\"rdmore7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><a class=\"chill-leggi\" href=\"https:\/\/chill-lab.eu\/it\/schufa-holding-cjeu-judgment-on-automated-credit-scoring\/\">Leggi tutto &rarr;<\/a><style>.chill-leggi{display:inline-block;margin-top:8px;color:#38bdf8;font-weight:600;font-size:14px;text-decoration:none;}.chill-leggi:hover{color:#fff;}<\/style><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"168\" class=\"elementor elementor-168 e-loop-item e-loop-item-442 post-442 post type-post status-publish format-standard hentry category-uncategorized affected_subject-digital-users-online-communities affected_subject-general-public country-germany judicial_forum-court-of-justice-of-the-european-union relevant_legal_instruments_artic-article-151h-meaningful-information-about-automated-decision-making-secondary relevant_legal_instruments_artic-article-22-automated-individual-decision-making-including-profiling-central relevant_legal_instruments_artic-article-47-effective-remedy-secondary relevant_legal_instruments_artic-article-5-data-protection-principles-secondary relevant_legal_instruments_artic-article-6-lawfulness-of-processing-secondary relevant_legal_instruments_artic-article-6-and-annex-iii-high-risk-ai-systems-for-creditworthiness-and-credit-scoring-contextual relevant_legal_instruments_artic-article-8-protection-of-personal-data-central thematica_area-ai_surveillance_digital_rights thematica_area-corporate_accountability_business\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-c287f7c e-flex e-con-boxed e-con e-parent\" data-id=\"c287f7c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a7be7a elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading\" data-id=\"8a7be7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-post-title.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/chill-lab.eu\/it\/germany-automated-credit-scoring-by-schufa-holding\/\">Germany \u2014 Automated credit scoring by SCHUFA Holding<\/a><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd0ad96 elementor-widget elementor-widget-text-editor\" data-id=\"fd0ad96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t2021\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-rdmore7 elementor-widget elementor-widget-shortcode\" data-id=\"rdmore7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><a class=\"chill-leggi\" href=\"https:\/\/chill-lab.eu\/it\/germany-automated-credit-scoring-by-schufa-holding\/\">Leggi tutto &rarr;<\/a><style>.chill-leggi{display:inline-block;margin-top:8px;color:#38bdf8;font-weight:600;font-size:14px;text-decoration:none;}.chill-leggi:hover{color:#fff;}<\/style><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div data-elementor-type=\"loop-item\" data-elementor-id=\"168\" class=\"elementor elementor-168 e-loop-item e-loop-item-440 post-440 post type-post status-publish format-standard hentry category-uncategorized affected_subject-digital-users-online-communities affected_subject-general-public country-austria judicial_forum-court-of-justice-of-the-european-union relevant_legal_instruments_artic-article-121-transparent-and-intelligible-information-secondary relevant_legal_instruments_artic-article-151h-meaningful-information-about-automated-decision-making-central relevant_legal_instruments_artic-article-22-automated-individual-decision-making-including-profiling-central relevant_legal_instruments_artic-article-47-effective-remedy-secondary relevant_legal_instruments_artic-article-8-protection-of-personal-data-central thematica_area-ai_surveillance_digital_rights thematica_area-corporate_accountability_business\" data-elementor-post-type=\"elementor_library\" data-custom-edit-handle=\"1\">\n\t\t\t<div class=\"elementor-element elementor-element-c287f7c e-flex e-con-boxed e-con e-parent\" data-id=\"c287f7c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8a7be7a elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading\" data-id=\"8a7be7a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"theme-post-title.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\"><a href=\"https:\/\/chill-lab.eu\/it\/austria-opaque-automated-creditworthiness-assessment-by-dun-bradstree\/\">Austria \u2014 Opaque automated creditworthiness assessment by Dun &amp; Bradstree<\/a><\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fd0ad96 elementor-widget elementor-widget-text-editor\" data-id=\"fd0ad96\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t2019\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-rdmore7 elementor-widget elementor-widget-shortcode\" data-id=\"rdmore7\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><a class=\"chill-leggi\" href=\"https:\/\/chill-lab.eu\/it\/austria-opaque-automated-creditworthiness-assessment-by-dun-bradstree\/\">Leggi tutto &rarr;<\/a><style>.chill-leggi{display:inline-block;margin-top:8px;color:#38bdf8;font-weight:600;font-size:14px;text-decoration:none;}.chill-leggi:hover{color:#fff;}<\/style><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>From mapping to measurement Two ways to read the chilling effect Atlas maps cases. Barometer measures pressure. CHILL Lab combines qualitative case-mapping with a structured assessment of chilling pressure. The Atlas helps locate and contextualise cases; the Barometer translates selected indicators into an interpretable score. 01 \u00b7 Mapping CHILL Atlas A case-based map of restrictive [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_theme","meta":{"_acf_changed":false,"ai_generated_summary":"","wpai_meta_description":"","footnotes":""},"class_list":["post-17","page","type-page","status-publish","hentry"],"acf":[],"_hostinger_reach_plugin_has_subscription_block":false,"_hostinger_reach_plugin_is_elementor":false,"_links":{"self":[{"href":"https:\/\/chill-lab.eu\/it\/wp-json\/wp\/v2\/pages\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/chill-lab.eu\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/chill-lab.eu\/it\/wp-json\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/chill-lab.eu\/it\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":144,"href":"https:\/\/chill-lab.eu\/it\/wp-json\/wp\/v2\/pages\/17\/revisions"}],"predecessor-version":[{"id":573,"href":"https:\/\/chill-lab.eu\/it\/wp-json\/wp\/v2\/pages\/17\/revisions\/573"}],"wp:attachment":[{"href":"https:\/\/chill-lab.eu\/it\/wp-json\/wp\/v2\/media?parent=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}