diff --git a/composer.json b/composer.json index 7af1d7e2e..4891860fd 100644 --- a/composer.json +++ b/composer.json @@ -11,17 +11,11 @@ "repositories": [ { "type": "composer", - "url": "https://packages.drupal.org/8", - "exclude": [ - "drupal/phpexcel" - ] + "url": "https://packages.drupal.org/8" }, { "type": "composer", - "url": "https://asset-packagist.org", - "exclude": [ - "drupal/phpexcel" - ] + "url": "https://asset-packagist.org" }, { "type": "package", @@ -35,10 +29,6 @@ } } }, - { - "type": "git", - "url": "https://git.drupalcode.org/issue/phpexcel-3148435.git" - }, { "type": "package", "package": { @@ -68,14 +58,15 @@ "require": { "composer/installers": "^1.9", "cweagans/composer-patches": "^1.7", - "drupal/admin_denied": "^1.1", + "drupal/admin_denied": "^2.0.0", "drupal/admin_toolbar": "^3.0", - "drupal/allowed_formats": "^1.3", + "drupal/allowed_formats": "^2.0", "drupal/auto_entitylabel": "^3.0@beta", "drupal/autologout": "^1.4", + "drupal/bert": "^2.0", "drupal/big_pipe_sessionless": "^2.0", - "drupal/bigint": "^1.1", - "drupal/cer": "^4.0@alpha", + "drupal/bigint": "^2.0", + "drupal/cer": "^5.0.0", "drupal/coder": "^8.3", "drupal/config_default_image": "^2", "drupal/config_ignore": "^2.3", @@ -85,9 +76,9 @@ "drupal/core-project-message": "^9.1", "drupal/core-recommended": "^9.1", "drupal/ctools": "^3.7", - "drupal/editor_advanced_link": "^1.8", + "drupal/editor_advanced_link": "^2.2", "drupal/field_group": "^3.1", - "drupal/fpa": "^3.0", + "drupal/fpa": "^4.0.0", "drupal/gin": "^3.0-beta5", "drupal/gin_lb": "^1.0@beta", "drupal/gin_toolbar": "^1.0", @@ -98,32 +89,33 @@ "drupal/layout_builder_ipe": "^1.0.x-dev", "drupal/layout_builder_lock": "^1.1", "drupal/layout_builder_modal": "^1.1", - "drupal/layout_builder_operation_link": "^1.0", + "drupal/layout_builder_operation_link": "^2.1", "drupal/layout_builder_restrictions": "^2.8", - "drupal/maintenance200": "^1.1", + "drupal/maintenance200": "^2.1", "drupal/memcache": "^2.4", "drupal/menu_item_extras": "^2.16", "drupal/metatag": "^1.16", "drupal/migrate_plus": "^6.0", "drupal/migrate_tools": "^6.0", - "drupal/multiple_fields_remove_button": "^1.0@alpha", + "drupal/multiple_fields_remove_button": "^2.2", "drupal/page_manager": "^4.0@beta", "drupal/pathauto": "^1.8", - "drupal/phpexcel": "dev-3148435-automated-drupal-9", + "drupal/phpexcel": "^4.0", "drupal/publishcontent": "^1.6", "drupal/queue_ui": "^3.1", "drupal/rabbit_hole": "^1.0@beta", "drupal/redirect": "^1.6", "drupal/redis": "^1.5", "drupal/seckit": "^2.0", - "drupal/smugmug_api": "1.x-dev", - "drupal/social_auth_hid": "^2.6", + "drupal/smugmug_api": "^2.0", + "drupal/social_auth_hid": "^3.2", "drupal/stage_file_proxy": "^2.0", "drupal/tippy": "^1.0", + "drupal/upgrade_status": "^4.0", "drupal/username_enumeration_prevention": "^1.3", "drupal/view_unpublished": "^1.0", "drupal/views_autocomplete_filters": "^1.3", - "drupal/viewsreference": "^1.7", + "drupal/viewsreference": "^2.0", "drupal/warmer": "^2.0", "drupal/webp": "^1.0-beta7", "drush/drush": "^11", @@ -137,7 +129,7 @@ "npm-asset/swiper": "^8.1", "oomphinc/composer-installers-extender": "^2.0", "phpoffice/phpspreadsheet": "^1.19", - "unocha/common_design": "^7.4", + "unocha/common_design": "^9", "unocha/d3-sparkline": "^2.1", "unocha/ocha_snap": "^8.3", "wieni/wmbert": "^1.11" @@ -145,7 +137,7 @@ "require-dev": { "dealerdirect/phpcodesniffer-composer-installer": "^0.7.1", "drupal/core-dev": "^9.3", - "drupal/devel": "^4.1", + "drupal/devel": "^5.0", "drupal/xhprof": "^1.0@beta", "drupal/yaml_content": "^1.0@alpha", "phpcompatibility/php-compatibility": "^9.3", diff --git a/composer.lock b/composer.lock index f3290e90c..8d92c1efc 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "611a0fa86e2d545d45eef0ba8820c129", + "content-hash": "3df88c61422aa1adf334ee3d0b012f1e", "packages": [ { "name": "alchemy/zippy", @@ -1633,26 +1633,26 @@ }, { "name": "drupal/admin_denied", - "version": "1.3.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/admin_denied.git", - "reference": "8.x-1.3" + "reference": "2.0.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/admin_denied-8.x-1.3.zip", - "reference": "8.x-1.3", - "shasum": "133400906d43a55e8f14ac428b106271e9f19b24" + "url": "https://ftp.drupal.org/files/projects/admin_denied-2.0.0.zip", + "reference": "2.0.0", + "shasum": "6a66e40a4249351a89afba529910e1e5e2f667aa" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^9.1 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.3", - "datestamp": "1667786705", + "version": "2.0.0", + "datestamp": "1674008376", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -1758,26 +1758,26 @@ }, { "name": "drupal/allowed_formats", - "version": "1.5.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/allowed_formats.git", - "reference": "8.x-1.5" + "reference": "2.0.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/allowed_formats-8.x-1.5.zip", - "reference": "8.x-1.5", - "shasum": "dbf61bee7aec87beaa2cf307c1d0d9d5b896328c" + "url": "https://ftp.drupal.org/files/projects/allowed_formats-2.0.0.zip", + "reference": "2.0.0", + "shasum": "ac6c6d398f303608ced7e9cd9d4556a728dc41f0" }, "require": { - "drupal/core": "^8.8 || ^9" + "drupal/core": "^9.2 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.5", - "datestamp": "1648060331", + "version": "2.0.0", + "datestamp": "1669170410", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -1981,6 +1981,54 @@ "source": "https://git.drupalcode.org/project/autologout" } }, + { + "name": "drupal/bert", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/bert.git", + "reference": "2.0.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/bert-2.0.1.zip", + "reference": "2.0.1", + "shasum": "e6a7eb31af93a9000377cbbb483267427a717314" + }, + "require": { + "drupal/core": "^8.6 || ^9.0 || ^10", + "php": ">=7.1.0" + }, + "require-dev": { + "composer-runtime-api": "^2.0" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "2.0.1", + "datestamp": "1671802157", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "DieterHolvoet", + "homepage": "https://www.drupal.org/user/3567222" + } + ], + "description": "A user friendly and customizable entity reference list field widget.", + "homepage": "https://www.drupal.org/project/bert", + "support": { + "source": "https://git.drupalcode.org/project/bert" + } + }, { "name": "drupal/big_pipe_sessionless", "version": "2.1.0", @@ -2027,26 +2075,26 @@ }, { "name": "drupal/bigint", - "version": "1.1.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/bigint.git", - "reference": "8.x-1.1" + "reference": "2.0.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/bigint-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "7f688cbab5ce8e3cf5270c61d762106dc584d2d6" + "url": "https://ftp.drupal.org/files/projects/bigint-2.0.0.zip", + "reference": "2.0.0", + "shasum": "f00cd070ee648f723244d6776378161d30b4642e" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^9 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.1", - "datestamp": "1598544615", + "version": "2.0.0", + "datestamp": "1691746300", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -2079,26 +2127,26 @@ }, { "name": "drupal/cer", - "version": "4.0.0-alpha3", + "version": "5.0.0-beta3", "source": { "type": "git", "url": "https://git.drupalcode.org/project/cer.git", - "reference": "8.x-4.0-alpha3" + "reference": "5.0.0-beta3" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/cer-8.x-4.0-alpha3.zip", - "reference": "8.x-4.0-alpha3", - "shasum": "3c508e842a2c17235e4c9909ab64ef1aeb9d3ebe" + "url": "https://ftp.drupal.org/files/projects/cer-5.0.0-beta3.zip", + "reference": "5.0.0-beta3", + "shasum": "732e95528a8aa0771f38785a5db49861612da150" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^9.5 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-4.0-alpha3", - "datestamp": "1620240213", + "version": "5.0.0-beta3", + "datestamp": "1679926745", "security-coverage": { "status": "not-covered", "message": "Project has not opted into security advisory coverage!" @@ -3185,26 +3233,30 @@ }, { "name": "drupal/editor_advanced_link", - "version": "1.9.0", + "version": "2.2.4", "source": { "type": "git", "url": "https://git.drupalcode.org/project/editor_advanced_link.git", - "reference": "8.x-1.9" + "reference": "2.2.4" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/editor_advanced_link-8.x-1.9.zip", - "reference": "8.x-1.9", - "shasum": "ee40ec8c8c7b14c69de3de6a5275959dc32455c4" + "url": "https://ftp.drupal.org/files/projects/editor_advanced_link-2.2.4.zip", + "reference": "2.2.4", + "shasum": "cd0db397827f2e21ec8a68211e8a153463a6c89b" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^9.2 || ^10" + }, + "require-dev": { + "drupal/ckeditor": "*", + "phpro/grumphp": "^2.0" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.9", - "datestamp": "1624032562", + "version": "2.2.4", + "datestamp": "1688040059", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3221,7 +3273,7 @@ "homepage": "https://www.drupal.org/user/931394" } ], - "description": "Add title, target etc. attributes to Text Editor's link dialog if the text format allows them.", + "description": "Editor Advanced link", "homepage": "https://www.drupal.org/project/editor_advanced_link", "support": { "source": "https://git.drupalcode.org/project/editor_advanced_link" @@ -3344,26 +3396,26 @@ }, { "name": "drupal/fpa", - "version": "3.0.3", + "version": "4.0.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/fpa.git", - "reference": "3.0.3" + "reference": "4.0.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/fpa-3.0.3.zip", - "reference": "3.0.3", - "shasum": "f6a31f2a375fc640c89d08db8a8e43fc8e798f50" + "url": "https://ftp.drupal.org/files/projects/fpa-4.0.0.zip", + "reference": "4.0.0", + "shasum": "889bc7a4c65fa435da61c6583e1aa4d29b1802e1" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^9.4 || ^10.0" }, "type": "drupal-module", "extra": { "drupal": { - "version": "3.0.3", - "datestamp": "1672325784", + "version": "4.0.0", + "datestamp": "1672325749", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -3980,26 +4032,29 @@ }, { "name": "drupal/layout_builder_operation_link", - "version": "1.0.1", + "version": "2.1.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/layout_builder_operation_link.git", - "reference": "1.0.1" + "reference": "2.1.0" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/layout_builder_operation_link-1.0.1.zip", - "reference": "1.0.1", - "shasum": "d12911acc73d0c0e2f8dbca08874141a9f98a869" + "url": "https://ftp.drupal.org/files/projects/layout_builder_operation_link-2.1.0.zip", + "reference": "2.1.0", + "shasum": "a4365738225d6f01293646db97e2aed525a69694" }, "require": { - "drupal/core": "^8.8.4 || ^9" + "drupal/core": "^9 || ^10" + }, + "require-dev": { + "drupal/layout_builder_at": "^2.12" }, "type": "drupal-module", "extra": { "drupal": { - "version": "1.0.1", - "datestamp": "1625239612", + "version": "2.1.0", + "datestamp": "1663176795", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -4139,26 +4194,26 @@ }, { "name": "drupal/maintenance200", - "version": "1.1.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/maintenance200.git", - "reference": "8.x-1.1" + "reference": "8.x-2.1" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/maintenance200-8.x-1.1.zip", - "reference": "8.x-1.1", - "shasum": "b01ed2dd4371c9ff24dbbbe235bedfe44f0e008e" + "url": "https://ftp.drupal.org/files/projects/maintenance200-8.x-2.1.zip", + "reference": "8.x-2.1", + "shasum": "fc8ea60619b6b4682bade340e13fb4565d3a7e0c" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^9.1 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.1", - "datestamp": "1597142482", + "version": "8.x-2.1", + "datestamp": "1697195734", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -4178,6 +4233,10 @@ "name": "ben.bunk", "homepage": "https://www.drupal.org/user/764808" }, + { + "name": "kemsnake", + "homepage": "https://www.drupal.org/user/914800" + }, { "name": "runeasgar", "homepage": "https://www.drupal.org/user/1105258" @@ -4543,29 +4602,29 @@ }, { "name": "drupal/multiple_fields_remove_button", - "version": "1.0.0-alpha13", + "version": "2.2.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/multiple_fields_remove_button.git", - "reference": "8.x-1.0-alpha13" + "reference": "8.x-2.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/multiple_fields_remove_button-8.x-1.0-alpha13.zip", - "reference": "8.x-1.0-alpha13", - "shasum": "d7171a7c1cba940320c271432f8e7c432a539989" + "url": "https://ftp.drupal.org/files/projects/multiple_fields_remove_button-8.x-2.2.zip", + "reference": "8.x-2.2", + "shasum": "c62d790c436b67c1316cbf2f289e6420e53d83e5" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^9.2 || ^10" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.0-alpha13", - "datestamp": "1590964821", + "version": "8.x-2.2", + "datestamp": "1676661177", "security-coverage": { - "status": "not-covered", - "message": "Alpha releases are not covered by Drupal security advisories." + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, @@ -4734,21 +4793,65 @@ }, { "name": "drupal/phpexcel", - "version": "dev-3148435-automated-drupal-9", + "version": "4.0.0-beta3", "source": { "type": "git", - "url": "https://git.drupalcode.org/issue/phpexcel-3148435.git", - "reference": "e22e3f91f8e1b04e27928835e0465422700f98aa" + "url": "https://git.drupalcode.org/project/phpexcel.git", + "reference": "4.0.0-beta3" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/phpexcel-4.0.0-beta3.zip", + "reference": "4.0.0-beta3", + "shasum": "71b82d4910f76028dbfbe56e0f02ceefb344db95" }, "require": { - "phpoffice/phpspreadsheet": "^1.18" + "drupal/core": "^9.4 || ^10", + "phpoffice/phpspreadsheet": "^1" }, "type": "drupal-module", + "extra": { + "drupal": { + "version": "4.0.0-beta3", + "datestamp": "1689083178", + "security-coverage": { + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", "license": [ "GPL-2.0-or-later" ], + "authors": [ + { + "name": "arunkumark", + "homepage": "https://www.drupal.org/user/2994023" + }, + { + "name": "axelm", + "homepage": "https://www.drupal.org/user/1065700" + }, + { + "name": "dravenk", + "homepage": "https://www.drupal.org/user/3452417" + }, + { + "name": "Jamesap", + "homepage": "https://www.drupal.org/user/2547544" + }, + { + "name": "wadmiraal", + "homepage": "https://www.drupal.org/user/440510" + } + ], "description": "Provides a simple API for using the PhpSpreadsheet library", - "time": "2021-07-30T11:08:53+00:00" + "homepage": "https://www.drupal.org/project/phpexcel", + "support": { + "source": "https://git.drupalcode.org/project/phpexcel", + "issues": "https://www.drupal.org/project/issues/phpexcel" + } }, { "name": "drupal/publishcontent", @@ -5157,26 +5260,29 @@ }, { "name": "drupal/smugmug_api", - "version": "dev-1.x", + "version": "2.0.1", "source": { "type": "git", "url": "https://git.drupalcode.org/project/smugmug_api.git", - "reference": "9f4f554b46e9b5bbe519a19520b7087c4b2b132b" + "reference": "2.0.1" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/smugmug_api-2.0.1.zip", + "reference": "2.0.1", + "shasum": "f108e35077cdfe402c38e644ae8db893a321db8d" }, "require": { - "drupal/core": "^8 || ^9" + "drupal/core": "^8 || ^9 || ^10" }, "type": "drupal-module", "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - }, "drupal": { - "version": "8.x-1.0-alpha2+3-dev", - "datestamp": "1632737970", + "version": "2.0.1", + "datestamp": "1695112545", "security-coverage": { - "status": "not-covered", - "message": "Dev releases are not covered by Drupal security advisories." + "status": "covered", + "message": "Covered by Drupal's security advisory policy" } } }, @@ -5350,28 +5456,28 @@ }, { "name": "drupal/social_auth_hid", - "version": "2.8.0", + "version": "3.2.0", "source": { "type": "git", "url": "https://git.drupalcode.org/project/social_auth_hid.git", - "reference": "8.x-2.8" + "reference": "8.x-3.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/social_auth_hid-8.x-2.8.zip", - "reference": "8.x-2.8", - "shasum": "37d6689d98cd97d9f914e09d3434d5286555185a" + "url": "https://ftp.drupal.org/files/projects/social_auth_hid-8.x-3.2.zip", + "reference": "8.x-3.2", + "shasum": "6506fb35d8cc4a9abad88217c32af8ff12ad4b11" }, "require": { - "drupal/core": "^8.8 || ^9", + "drupal/core": "^9 || ^10", "drupal/social_auth": "^3.0", "un-ocha/oauth2-hid": "^1.0.2" }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-2.8", - "datestamp": "1641290555", + "version": "8.x-3.2", + "datestamp": "1653898962", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -5453,6 +5559,58 @@ "source": "https://git.drupalcode.org/project/sophron" } }, + { + "name": "drupal/stable", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/stable.git", + "reference": "2.0.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/stable-2.0.0.zip", + "reference": "2.0.0", + "shasum": "1d1ba799280bd6b9a3c46a158e6026663e080f3f" + }, + "require": { + "drupal/core": "^9 || ^10" + }, + "type": "drupal-theme", + "extra": { + "drupal": { + "version": "2.0.0", + "datestamp": "1663102967", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "bnjmnm", + "homepage": "https://www.drupal.org/user/2369194" + }, + { + "name": "Cottser", + "homepage": "https://www.drupal.org/user/1167326" + }, + { + "name": "lauriii", + "homepage": "https://www.drupal.org/user/1078742" + } + ], + "description": "A base theme using Drupal 8.0.0's core markup and CSS.", + "homepage": "https://www.drupal.org/project/stable", + "support": { + "source": "https://git.drupalcode.org/project/stable" + } + }, { "name": "drupal/stage_file_proxy", "version": "2.1.1", @@ -5629,6 +5787,81 @@ "source": "https://git.drupalcode.org/project/token" } }, + { + "name": "drupal/upgrade_status", + "version": "4.0.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/upgrade_status.git", + "reference": "4.0.0" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/upgrade_status-4.0.0.zip", + "reference": "4.0.0", + "shasum": "013afdb46a03c9db0119cb1ce60ca49631d64368" + }, + "require": { + "drupal/core": "^9 || ^10", + "mathieuviossat/arraytotexttable": "~1.0.0", + "mglaman/phpstan-drupal": "^1.0.0", + "nikic/php-parser": "^4.0.0", + "phpstan/phpstan-deprecation-rules": "^1.0.0", + "symfony/process": "^3.4|^4.0|^5.0|^6.0", + "webflo/drupal-finder": "^1.2" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "4.0.0", + "datestamp": "1678815090", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + }, + "drush": { + "services": { + "drush.services.yml": "^9 || ^10" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "colan", + "homepage": "https://www.drupal.org/user/58704" + }, + { + "name": "Gábor Hojtsy", + "homepage": "https://www.drupal.org/user/4166" + }, + { + "name": "herczogzoltan", + "homepage": "https://www.drupal.org/user/3528391" + }, + { + "name": "sun", + "homepage": "https://www.drupal.org/user/54136" + }, + { + "name": "webchick", + "homepage": "https://www.drupal.org/user/24967" + }, + { + "name": "xjm", + "homepage": "https://www.drupal.org/user/65776" + } + ], + "description": "Review Drupal major upgrade readiness of the environment and components of the site.", + "homepage": "http://drupal.org/project/upgrade_status", + "support": { + "source": "https://git.drupalcode.org/project/upgrade_status" + } + }, { "name": "drupal/username_enumeration_prevention", "version": "1.3.0", @@ -5801,57 +6034,38 @@ }, { "name": "drupal/viewsreference", - "version": "1.8.0", + "version": "2.0.0-beta6", "source": { "type": "git", "url": "https://git.drupalcode.org/project/viewsreference.git", - "reference": "8.x-1.8" + "reference": "8.x-2.0-beta6" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/viewsreference-8.x-1.8.zip", - "reference": "8.x-1.8", - "shasum": "8dd6b3828d40f4da413f73f956da528941e2ef52" + "url": "https://ftp.drupal.org/files/projects/viewsreference-8.x-2.0-beta6.zip", + "reference": "8.x-2.0-beta6", + "shasum": "1b094ccb10f4adc0b968a51650c0e2612ee184dd" }, "require": { - "drupal/core": "^8.6|^9.0", - "php": "^7.0|^8.0", - "squizlabs/php_codesniffer": "*" + "drupal/core": "^9.3 || ^10" }, "conflict": { "drupal/viewsreferennce": "*" }, - "require-dev": { - "composer/installers": "^1.2", - "drupal/coder": "^8.2", - "drupal/core-composer-scaffold": "*", - "webflo/drupal-core-require-dev": "~8.5" - }, "type": "drupal-module", "extra": { "drupal": { - "version": "8.x-1.8", - "datestamp": "1652694596", + "version": "8.x-2.0-beta6", + "datestamp": "1691400463", "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" + "status": "not-covered", + "message": "Beta releases are not covered by Drupal security advisories." } - }, - "installer-paths": { - "../build/core": [ - "type:drupal-core" - ], - "../build/modules/contrib/{$name}": [ - "type:drupal-module" - ], - "../build/themes/contrib/{$name}": [ - "type:drupal-theme" - ] } }, "notification-url": "https://packages.drupal.org/8/downloads", "license": [ - "GPL-2.0+" + "GPL-2.0-or-later" ], "authors": [ { @@ -5871,14 +6085,14 @@ "homepage": "https://www.drupal.org/user/545912" } ], - "description": "Views Reference", + "description": "Views reference", "homepage": "http://drupal.org/project/viewsreference", "keywords": [ "Drupal" ], "support": { - "source": "http://cgit.drupalcode.org/viewsreference", - "issues": "http://drupal.org/project/issues/viewsreference" + "source": "https://git.drupalcode.org/project/viewsreference", + "issues": "https://www.drupal.org/project/issues/viewsreference" } }, { @@ -6950,6 +7164,96 @@ ], "time": "2023-10-11T20:16:37+00:00" }, + { + "name": "laminas/laminas-servicemanager", + "version": "3.22.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-servicemanager.git", + "reference": "b4f547078af2ac3173cbe4a64e8fdfbd626c77ae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-servicemanager/zipball/b4f547078af2ac3173cbe4a64e8fdfbd626c77ae", + "reference": "b4f547078af2ac3173cbe4a64e8fdfbd626c77ae", + "shasum": "" + }, + "require": { + "laminas/laminas-stdlib": "^3.17", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0", + "psr/container": "^1.0" + }, + "conflict": { + "ext-psr": "*", + "laminas/laminas-code": "<4.10.0", + "zendframework/zend-code": "<3.3.1", + "zendframework/zend-servicemanager": "*" + }, + "provide": { + "psr/container-implementation": "^1.0" + }, + "replace": { + "container-interop/container-interop": "^1.2.0" + }, + "require-dev": { + "composer/package-versions-deprecated": "^1.11.99.5", + "friendsofphp/proxy-manager-lts": "^1.0.14", + "laminas/laminas-code": "^4.10.0", + "laminas/laminas-coding-standard": "~2.5.0", + "laminas/laminas-container-config-test": "^0.8", + "mikey179/vfsstream": "^1.6.11", + "phpbench/phpbench": "^1.2.9", + "phpunit/phpunit": "^10.4", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.8.0" + }, + "suggest": { + "friendsofphp/proxy-manager-lts": "ProxyManager ^2.1.1 to handle lazy initialization of services" + }, + "bin": [ + "bin/generate-deps-for-config-factory", + "bin/generate-factory-for-class" + ], + "type": "library", + "autoload": { + "files": [ + "src/autoload.php" + ], + "psr-4": { + "Laminas\\ServiceManager\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Factory-Driven Dependency Injection Container", + "homepage": "https://laminas.dev", + "keywords": [ + "PSR-11", + "dependency-injection", + "di", + "dic", + "laminas", + "service-manager", + "servicemanager" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-servicemanager/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-servicemanager/issues", + "rss": "https://github.com/laminas/laminas-servicemanager/releases.atom", + "source": "https://github.com/laminas/laminas-servicemanager" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2023-10-10T21:23:36+00:00" + }, { "name": "laminas/laminas-stdlib", "version": "3.18.0", @@ -7009,6 +7313,66 @@ ], "time": "2023-09-19T10:15:21+00:00" }, + { + "name": "laminas/laminas-text", + "version": "2.10.0", + "source": { + "type": "git", + "url": "https://github.com/laminas/laminas-text.git", + "reference": "40f7acdb284d41553d32db811e704d6e15e415b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laminas/laminas-text/zipball/40f7acdb284d41553d32db811e704d6e15e415b4", + "reference": "40f7acdb284d41553d32db811e704d6e15e415b4", + "shasum": "" + }, + "require": { + "laminas/laminas-servicemanager": "^3.19.0", + "laminas/laminas-stdlib": "^3.7.1", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + }, + "conflict": { + "zendframework/zend-text": "*" + }, + "require-dev": { + "laminas/laminas-coding-standard": "~2.4.0", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.4", + "vimeo/psalm": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Laminas\\Text\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "Create FIGlets and text-based tables", + "homepage": "https://laminas.dev", + "keywords": [ + "laminas", + "text" + ], + "support": { + "chat": "https://laminas.dev/chat", + "docs": "https://docs.laminas.dev/laminas-text/", + "forum": "https://discourse.laminas.dev", + "issues": "https://github.com/laminas/laminas-text/issues", + "rss": "https://github.com/laminas/laminas-text/releases.atom", + "source": "https://github.com/laminas/laminas-text" + }, + "funding": [ + { + "url": "https://funding.communitybridge.org/projects/laminas-project", + "type": "community_bridge" + } + ], + "time": "2022-12-11T15:36:27+00:00" + }, { "name": "league/container", "version": "4.2.0", @@ -7514,6 +7878,161 @@ }, "time": "2022-08-18T16:18:26+00:00" }, + { + "name": "mathieuviossat/arraytotexttable", + "version": "v1.0.10", + "source": { + "type": "git", + "url": "https://github.com/viossat/arraytotexttable.git", + "reference": "dddaf50d2c1d655b985e63337c421b298f7854be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/viossat/arraytotexttable/zipball/dddaf50d2c1d655b985e63337c421b298f7854be", + "reference": "dddaf50d2c1d655b985e63337c421b298f7854be", + "shasum": "" + }, + "require": { + "laminas/laminas-text": "^2.10", + "php": "~8.0.0 || ~8.1.0 || ~8.2.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "MathieuViossat\\Util\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mathieu Viossat", + "email": "mathieu@viossat.fr", + "homepage": "https://viossat.fr" + } + ], + "description": "Display arrays in terminal", + "homepage": "https://github.com/viossat/arraytotexttable", + "keywords": [ + "array", + "ascii", + "table", + "terminal", + "text", + "unicode" + ], + "support": { + "issues": "https://github.com/viossat/arraytotexttable/issues", + "source": "https://github.com/viossat/arraytotexttable/tree/v1.0.10" + }, + "time": "2023-09-21T16:42:23+00:00" + }, + { + "name": "mglaman/phpstan-drupal", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/mglaman/phpstan-drupal.git", + "reference": "d721420086f146640acecebb7a678661a66e97d5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mglaman/phpstan-drupal/zipball/d721420086f146640acecebb7a678661a66e97d5", + "reference": "d721420086f146640acecebb7a678661a66e97d5", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "phpstan/phpstan": "^1.10.1", + "phpstan/phpstan-deprecation-rules": "^1.1.4", + "symfony/finder": "~3.4.5 ||^4.2 || ^5.0 || ^6.0", + "symfony/yaml": "~3.4.5 || ^4.2|| ^5.0 || ^6.0", + "webflo/drupal-finder": "^1.2" + }, + "require-dev": { + "behat/mink": "^1.8", + "composer/installers": "^1.9", + "drupal/core-recommended": "^8.8@alpha || ^9.0", + "drush/drush": "^9.6 || ^10.0 || ^11", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^6.5 || ^7.5 || ^8.0 || ^9", + "slevomat/coding-standard": "^7.1", + "squizlabs/php_codesniffer": "^3.3", + "symfony/phpunit-bridge": "^3.4.3 || ^4.4 || ^5.4 || ^6.0" + }, + "suggest": { + "jangregor/phpstan-prophecy": "Provides a prophecy/prophecy extension for phpstan/phpstan.", + "phpstan/phpstan-deprecation-rules": "For catching deprecations, especially in Drupal core.", + "phpstan/phpstan-phpunit": "PHPUnit extensions and rules for PHPStan." + }, + "type": "phpstan-extension", + "extra": { + "branch-alias": { + "dev-main": "1.0-dev" + }, + "installer-paths": { + "tests/fixtures/drupal/core": [ + "type:drupal-core" + ], + "tests/fixtures/drupal/libraries/{$name}": [ + "type:drupal-library" + ], + "tests/fixtures/drupal/modules/contrib/{$name}": [ + "type:drupal-module" + ], + "tests/fixtures/drupal/profiles/contrib/{$name}": [ + "type:drupal-profile" + ], + "tests/fixtures/drupal/themes/contrib/{$name}": [ + "type:drupal-theme" + ] + }, + "phpstan": { + "includes": [ + "extension.neon", + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "mglaman\\PHPStanDrupal\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Matt Glaman", + "email": "nmd.matt@gmail.com" + } + ], + "description": "Drupal extension and rules for PHPStan", + "support": { + "issues": "https://github.com/mglaman/phpstan-drupal/issues", + "source": "https://github.com/mglaman/phpstan-drupal/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/mglaman", + "type": "github" + }, + { + "url": "https://opencollective.com/phpstan-drupal", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/mglaman/phpstan-drupal", + "type": "tidelift" + } + ], + "time": "2023-08-24T20:32:56+00:00" + }, { "name": "nikic/php-parser", "version": "v4.17.1", @@ -8802,6 +9321,116 @@ }, "time": "2023-09-26T12:28:12+00:00" }, + { + "name": "phpstan/phpstan", + "version": "1.10.38", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan.git", + "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/5302bb402c57f00fb3c2c015bac86e0827e4b691", + "reference": "5302bb402c57f00fb3c2c015bac86e0827e4b691", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "type": "tidelift" + } + ], + "time": "2023-10-06T14:19:14+00:00" + }, + { + "name": "phpstan/phpstan-deprecation-rules", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/phpstan/phpstan-deprecation-rules.git", + "reference": "089d8a8258ed0aeefdc7b68b6c3d25572ebfdbaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/089d8a8258ed0aeefdc7b68b6c3d25572ebfdbaa", + "reference": "089d8a8258ed0aeefdc7b68b6c3d25572ebfdbaa", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0", + "phpstan/phpstan": "^1.10.3" + }, + "require-dev": { + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/phpstan-php-parser": "^1.1", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^9.5" + }, + "type": "phpstan-extension", + "extra": { + "phpstan": { + "includes": [ + "rules.neon" + ] + } + }, + "autoload": { + "psr-4": { + "PHPStan\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.", + "support": { + "issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues", + "source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/1.1.4" + }, + "time": "2023-08-05T09:02:04+00:00" + }, { "name": "psr/cache", "version": "1.0.1", @@ -13109,32 +13738,33 @@ }, { "name": "unocha/common_design", - "version": "v7.4.1", + "version": "v9.2.1", "source": { "type": "git", "url": "https://github.com/UN-OCHA/common_design.git", - "reference": "b803f6b303bfcc2a46b5d2d531189832679d820a" + "reference": "c52613835d3e10baf03783d3601c030483057684" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/UN-OCHA/common_design/zipball/b803f6b303bfcc2a46b5d2d531189832679d820a", - "reference": "b803f6b303bfcc2a46b5d2d531189832679d820a", + "url": "https://api.github.com/repos/UN-OCHA/common_design/zipball/c52613835d3e10baf03783d3601c030483057684", + "reference": "c52613835d3e10baf03783d3601c030483057684", "shasum": "" }, "require": { - "composer/installers": "^1.2" + "composer/installers": "^1.2", + "drupal/stable": "^2.0" }, "type": "drupal-theme", "notification-url": "https://packagist.org/downloads/", "license": [ "GPL-2.0-only" ], - "description": "OCHA Common Design base theme for Drupal 8", + "description": "OCHA Common Design base theme for Drupal 9+", "support": { "issues": "https://github.com/UN-OCHA/common_design/issues", - "source": "https://github.com/UN-OCHA/common_design/tree/v7.4.1" + "source": "https://github.com/UN-OCHA/common_design/tree/v9.2.1" }, - "time": "2023-01-10T14:13:58+00:00" + "time": "2023-10-11T12:36:16+00:00" }, { "name": "unocha/d3-sparkline", @@ -13147,21 +13777,21 @@ }, { "name": "unocha/ocha_snap", - "version": "v8.5.0", + "version": "v8.7.0", "source": { "type": "git", "url": "https://github.com/UN-OCHA/ocha_snap.git", - "reference": "de3941cb88ae1393b53502e29417899627aa0793" + "reference": "6ac6bd523ea648808b0642525ea8244b9d38b58f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/UN-OCHA/ocha_snap/zipball/de3941cb88ae1393b53502e29417899627aa0793", - "reference": "de3941cb88ae1393b53502e29417899627aa0793", + "url": "https://api.github.com/repos/UN-OCHA/ocha_snap/zipball/6ac6bd523ea648808b0642525ea8244b9d38b58f", + "reference": "6ac6bd523ea648808b0642525ea8244b9d38b58f", "shasum": "" }, "require": { "composer/installers": "^1.2", - "drupal/core": "^8 || ^9" + "drupal/core": "^8 || ^9 || ^10" }, "conflict": { "drupal/drupal": "*" @@ -13177,9 +13807,9 @@ ], "support": { "issues": "https://github.com/UN-OCHA/ocha_snap/issues", - "source": "https://github.com/UN-OCHA/ocha_snap/tree/v8.5.0" + "source": "https://github.com/UN-OCHA/ocha_snap/tree/v8.7.0" }, - "time": "2022-09-07T08:46:54+00:00" + "time": "2023-08-21T14:26:24+00:00" }, { "name": "vipnytt/sitemapparser", @@ -14703,28 +15333,29 @@ }, { "name": "drupal/devel", - "version": "4.2.1", + "version": "5.1.2", "source": { "type": "git", "url": "https://git.drupalcode.org/project/devel.git", - "reference": "4.2.1" + "reference": "5.1.2" }, "dist": { "type": "zip", - "url": "https://ftp.drupal.org/files/projects/devel-4.2.1.zip", - "reference": "4.2.1", - "shasum": "aa08379bad81cb2e604ee9a0b9e2aabd86fae13f" + "url": "https://ftp.drupal.org/files/projects/devel-5.1.2.zip", + "reference": "5.1.2", + "shasum": "9b35e38bf2043bf87f88585b3d9100f38da8f07f" }, "require": { - "doctrine/common": "^2.7", - "drupal/core": "^8.8 || ^9", - "symfony/var-dumper": "^4 || ^5" + "doctrine/common": "^2.7 || ^3.4", + "drupal/core": "^9 || ^10", + "php": ">=7.4", + "symfony/var-dumper": "^4 || ^5 || ^6" }, "conflict": { "kint-php/kint": "<3" }, "require-dev": { - "drush/drush": "^10" + "drush/drush": "^11" }, "suggest": { "kint-php/kint": "Kint provides an informative display of arrays/objects. Useful for debugging and developing." @@ -14732,8 +15363,8 @@ "type": "drupal-module", "extra": { "drupal": { - "version": "4.2.1", - "datestamp": "1664317444", + "version": "5.1.2", + "datestamp": "1686161028", "security-coverage": { "status": "covered", "message": "Covered by Drupal's security advisory policy" @@ -14741,7 +15372,7 @@ }, "drush": { "services": { - "drush.services.yml": "^9 || ^10" + "drush.services.yml": "^9 || ^10 || ^11" } } }, @@ -17869,14 +18500,10 @@ "minimum-stability": "dev", "stability-flags": { "drupal/auto_entitylabel": 10, - "drupal/cer": 15, "drupal/gin_lb": 10, "drupal/layout_builder_ipe": 20, - "drupal/multiple_fields_remove_button": 15, "drupal/page_manager": 10, - "drupal/phpexcel": 20, "drupal/rabbit_hole": 10, - "drupal/smugmug_api": 20, "drupal/xhprof": 10, "drupal/yaml_content": 15 }, diff --git a/composer.patches.json b/composer.patches.json index 5223f0524..b1a57f167 100644 --- a/composer.patches.json +++ b/composer.patches.json @@ -11,10 +11,6 @@ "Issue #3001188: Make it possible to add relationships to layout builder": "./patches/3001188-make-it-possible-to-add-relationships-to-layout-builder.patch", "Issue #?? (maybe #2837833): 'Required contexts without a value": "./patches/missing-context-value-in-layout-builder-admin.patch" }, - "drupal/phpexcel": { - "Issue #3086234: PhpSpreadsheet support (PHPOffice/PHPExcel deprecated)": "https://www.drupal.org/files/issues/2019-10-07/3086234-phpspreadsheet-support-3.patch", - "Issue #2839576: Add additional alter hook": "https://www.drupal.org/files/issues/2839576-php-excel-new-hook-1-7.x-3.11.patch" - }, "drupal/autologout": { "Issue #3214958: Autologout triggered in background tab, no indication in other open tabs": "https://git.drupalcode.org/project/autologout/-/merge_requests/6.diff" }, @@ -40,7 +36,7 @@ "Issue #2857247: Support for export filtering via Drush": "https://www.drupal.org/files/issues/2021-08-18/config_ignore_2857247-75.patch" }, "drupal/config_default_image": { - "Issue #2921908: Provide a 2nd formatter \"Responsive image or default image\"": "https://www.drupal.org/files/issues/2020-06-11/config_default_image-responsive-2921908-5.patch" + "Issue #2921908: Provide a 2nd formatter \"Responsive image or default image\"": "https://www.drupal.org/files/issues/2022-11-21/config_default_image-2921908-7.patch" }, "drupal/smugmug_api": { "Issue #3285444: Add support for image search": "https://www.drupal.org/files/issues/2022-06-13/3285444-2.patch" diff --git a/config/core.entity_form_display.node.article.default.yml b/config/core.entity_form_display.node.article.default.yml index 22b62cd42..9168fcb92 100644 --- a/config/core.entity_form_display.node.article.default.yml +++ b/config/core.entity_form_display.node.article.default.yml @@ -16,12 +16,12 @@ dependencies: - image.style.thumbnail - node.type.article module: + - bert - field_group - ghi_content - image - path - text - - wmbert third_party_settings: field_group: group_tabs: @@ -103,8 +103,8 @@ content: settings: { } third_party_settings: { } field_base_objects: - type: wmbert - weight: 26 + type: bert + weight: 51 region: content settings: list: title_bundle diff --git a/config/core.entity_form_display.node.document.default.yml b/config/core.entity_form_display.node.document.default.yml index 8d479464a..c1d69c24d 100644 --- a/config/core.entity_form_display.node.document.default.yml +++ b/config/core.entity_form_display.node.document.default.yml @@ -18,12 +18,12 @@ dependencies: - image.style.thumbnail - node.type.document module: + - bert - field_group - ghi_content - image - path - text - - wmbert third_party_settings: field_group: group_tabs: @@ -104,8 +104,8 @@ content: settings: { } third_party_settings: { } field_base_objects: - type: wmbert - weight: 26 + type: bert + weight: 27 region: content settings: list: title_bundle diff --git a/config/core.extension.yml b/config/core.extension.yml index 53f9e9f3e..3ea763402 100644 --- a/config/core.extension.yml +++ b/config/core.extension.yml @@ -7,13 +7,13 @@ module: admin_toolbar_tools: 0 auto_entitylabel: 0 autologout: 0 + bert: 0 big_pipe: 0 big_pipe_sessionless: 0 block: 0 block_content: 0 breakpoint: 0 cer: 0 - ckeditor: 0 ckeditor5: 0 config: 0 config_default_image: 0 @@ -114,10 +114,10 @@ module: system: 0 taxonomy: 0 text: 0 - tippy: 0 token: 0 toolbar: 0 update: 0 + upgrade_status: 0 user: 0 username_enumeration_prevention: 0 view_unpublished: 0 @@ -126,7 +126,6 @@ module: warmer: 0 warmer_cdn: 0 webp: 0 - wmbert: 0 pathauto: 1 content_translation: 10 views: 10 diff --git a/config/field.field.node.article.field_base_objects.yml b/config/field.field.node.article.field_base_objects.yml index aeaaaad73..5387c178c 100644 --- a/config/field.field.node.article.field_base_objects.yml +++ b/config/field.field.node.article.field_base_objects.yml @@ -17,7 +17,7 @@ translatable: false default_value: { } default_value_callback: '' settings: - handler: 'wmbert:base_object' + handler: 'bert:base_object' handler_settings: target_bundles: plan: plan diff --git a/config/field.field.node.document.field_base_objects.yml b/config/field.field.node.document.field_base_objects.yml index d5c0b8e8a..92b24d9a6 100644 --- a/config/field.field.node.document.field_base_objects.yml +++ b/config/field.field.node.document.field_base_objects.yml @@ -17,7 +17,7 @@ translatable: true default_value: { } default_value_callback: '' settings: - handler: 'wmbert:base_object' + handler: 'bert:base_object' handler_settings: target_bundles: plan: plan diff --git a/config/language/fr/block.block.stark_admin.yml b/config/language/fr/block.block.stark_admin.yml new file mode 100644 index 000000000..908710d63 --- /dev/null +++ b/config/language/fr/block.block.stark_admin.yml @@ -0,0 +1,2 @@ +settings: + label: Administration diff --git a/config/language/fr/system.menu.admin.yml b/config/language/fr/system.menu.admin.yml index 80570e855..87b5cc2c0 100644 --- a/config/language/fr/system.menu.admin.yml +++ b/config/language/fr/system.menu.admin.yml @@ -1 +1,2 @@ +label: Administration description: 'Liens des tâches d''administration' diff --git a/config/language/fr/views.view.archive.yml b/config/language/fr/views.view.archive.yml index 309dc9ea0..b2156f9af 100644 --- a/config/language/fr/views.view.archive.yml +++ b/config/language/fr/views.view.archive.yml @@ -16,5 +16,9 @@ display: submit_button: Appliquer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc block_1: display_title: Bloc + page_1: + display_title: Page diff --git a/config/language/fr/views.view.block_content.yml b/config/language/fr/views.view.block_content.yml index 831a1162c..07bf5da4e 100644 --- a/config/language/fr/views.view.block_content.yml +++ b/config/language/fr/views.view.block_content.yml @@ -28,6 +28,8 @@ display: submit_button: Appliquer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc empty: area_text_custom: content: 'Il n''y a pas de bloc personnalisé disponible.' @@ -39,6 +41,7 @@ display: expose: label: 'Type de bloc' page_1: + display_title: Page display_options: menu: title: 'Bibliothèque de blocs personnalisés' diff --git a/config/language/fr/views.view.content.yml b/config/language/fr/views.view.content.yml index cf4bf9826..1a8ff4fe2 100644 --- a/config/language/fr/views.view.content.yml +++ b/config/language/fr/views.view.content.yml @@ -33,6 +33,8 @@ display: submit_button: Filtrer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc empty: area_text_custom: content: 'Aucun contenu disponible.' diff --git a/config/language/fr/views.view.files.yml b/config/language/fr/views.view.files.yml index 6d5219113..291c7957f 100644 --- a/config/language/fr/views.view.files.yml +++ b/config/language/fr/views.view.files.yml @@ -38,6 +38,8 @@ display: submit_button: Filtrer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc empty: area_text_custom: content: 'Aucun fichier disponible.' diff --git a/config/language/fr/views.view.frontpage.yml b/config/language/fr/views.view.frontpage.yml index 662e30b7e..78e1e979b 100644 --- a/config/language/fr/views.view.frontpage.yml +++ b/config/language/fr/views.view.frontpage.yml @@ -20,6 +20,8 @@ display: submit_button: Appliquer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc empty: area_text_custom: content: 'Aucun contenu de page d''accueil n''a été créé pour l''instant. Suivre le Guide utilisateur pour démarrer la construction de votre site.' @@ -27,3 +29,5 @@ display: title: 'Welcome to [site:name]' feed_1: display_title: Flux + page_1: + display_title: Page diff --git a/config/language/fr/views.view.glossary.yml b/config/language/fr/views.view.glossary.yml index fb85025e9..956dda774 100644 --- a/config/language/fr/views.view.glossary.yml +++ b/config/language/fr/views.view.glossary.yml @@ -21,5 +21,9 @@ display: submit_button: Appliquer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc attachment_1: display_title: 'Fichier attaché' + page_1: + display_title: Page diff --git a/config/language/fr/views.view.media.yml b/config/language/fr/views.view.media.yml index 47a3f9492..bd07a6471 100644 --- a/config/language/fr/views.view.media.yml +++ b/config/language/fr/views.view.media.yml @@ -10,6 +10,8 @@ display: label: Vignette name: label: 'Nom du média' + bundle: + label: Type uid: label: Auteur status: @@ -37,6 +39,8 @@ display: submit_button: Filtrer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc empty: area_text_custom: content: 'Aucun média disponible.' @@ -44,6 +48,9 @@ display: name: expose: label: 'Nom du média' + bundle: + expose: + label: Type status: expose: label: Vrai diff --git a/config/language/fr/views.view.media_library.yml b/config/language/fr/views.view.media_library.yml index 45f2b8c81..767211e91 100644 --- a/config/language/fr/views.view.media_library.yml +++ b/config/language/fr/views.view.media_library.yml @@ -15,6 +15,8 @@ display: submit_button: 'Appliquer les filtres' reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc empty: area_text_custom: content: 'Aucun média disponible.' @@ -51,6 +53,7 @@ display: expose: label: Langue page: + display_title: Page display_options: fields: edit_media: diff --git a/config/language/fr/views.view.redirect.yml b/config/language/fr/views.view.redirect.yml index 49d256c52..8ac9ee3fb 100644 --- a/config/language/fr/views.view.redirect.yml +++ b/config/language/fr/views.view.redirect.yml @@ -9,6 +9,8 @@ display: submit_button: Filtrer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc pager: options: tags: @@ -61,3 +63,5 @@ display: empty: area_text_custom: content: 'Il n''y a pas encore de redirection.' + page_1: + display_title: Page diff --git a/config/language/fr/views.view.taxonomy_term.yml b/config/language/fr/views.view.taxonomy_term.yml index 0b12e23de..d5c879c73 100644 --- a/config/language/fr/views.view.taxonomy_term.yml +++ b/config/language/fr/views.view.taxonomy_term.yml @@ -15,9 +15,13 @@ display: submit_button: Appliquer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc arguments: tid: exception: title: Tout feed_1: display_title: Flux + page_1: + display_title: Page diff --git a/config/language/fr/views.view.user_admin_people.yml b/config/language/fr/views.view.user_admin_people.yml index 96b9ada28..c60f6c808 100644 --- a/config/language/fr/views.view.user_admin_people.yml +++ b/config/language/fr/views.view.user_admin_people.yml @@ -39,6 +39,8 @@ display: submit_button: Filtrer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc empty: area_text_custom: content: 'Personne n''est disponible.' @@ -59,6 +61,7 @@ display: label: Rôle use_more_text: plus page_1: + display_title: Page display_options: menu: title: Lister diff --git a/config/tippy.settings.yml b/config/tippy.settings.yml deleted file mode 100644 index 309dca005..000000000 --- a/config/tippy.settings.yml +++ /dev/null @@ -1,5 +0,0 @@ -_core: - default_config_hash: qjNd-m-sJaRQWc4oLBdMmAVw7Lic2tiG0aAkIPI4HxM -use_cdn: true -auto_init: false -external_location: 'https://unpkg.com/tippy.js@6' diff --git a/config/upgrade_status.settings.yml b/config/upgrade_status.settings.yml new file mode 100644 index 000000000..c5e874415 --- /dev/null +++ b/config/upgrade_status.settings.yml @@ -0,0 +1,3 @@ +_core: + default_config_hash: BqkUHiXXGvu2L7NR_nblxtP6f03MdD16XSMWwVM0QEc +paths_per_scan: 30 diff --git a/config_dev/language/fr/views.view.watchdog.yml b/config_dev/language/fr/views.view.watchdog.yml index 1c741dc93..8831e02b3 100644 --- a/config_dev/language/fr/views.view.watchdog.yml +++ b/config_dev/language/fr/views.view.watchdog.yml @@ -3,6 +3,10 @@ display: display_title: Maître display_options: fields: + type: + label: Type + timestamp: + label: Date name: label: Utilisateur link: @@ -18,3 +22,11 @@ display: submit_button: Filtrer reset_button_label: Réinitialiser exposed_sorts_label: 'Trier par' + sort_asc_label: Asc + sort_desc_label: Desc + filters: + type: + expose: + label: Type + page: + display_title: Page diff --git a/html/modules/custom/ghi_base_objects/ghi_base_objects.info.yml b/html/modules/custom/ghi_base_objects/ghi_base_objects.info.yml index ae255b6ff..befa1d902 100644 --- a/html/modules/custom/ghi_base_objects/ghi_base_objects.info.yml +++ b/html/modules/custom/ghi_base_objects/ghi_base_objects.info.yml @@ -1,7 +1,7 @@ name: 'GHI Base Objects' type: module description: 'Provides logic and data migration handling for API base objects' -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 package: 'GHI' dependencies: - hpc_common:hpc_common diff --git a/html/modules/custom/ghi_base_objects/templates/base-object-content-add-list.html.twig b/html/modules/custom/ghi_base_objects/templates/base-object-content-add-list.html.twig index ed4975a59..6c039523d 100644 --- a/html/modules/custom/ghi_base_objects/templates/base-object-content-add-list.html.twig +++ b/html/modules/custom/ghi_base_objects/templates/base-object-content-add-list.html.twig @@ -14,10 +14,10 @@ * @ingroup themeable */ #} -{% spaceless %} +{% apply spaceless %}
{% for type in types %}
{{ type.link }}
{% endfor %}
-{% endspaceless %} +{% endapply %} diff --git a/html/modules/custom/ghi_blocks/ghi_blocks.info.yml b/html/modules/custom/ghi_blocks/ghi_blocks.info.yml index 67695b0b2..7a47930ff 100644 --- a/html/modules/custom/ghi_blocks/ghi_blocks.info.yml +++ b/html/modules/custom/ghi_blocks/ghi_blocks.info.yml @@ -3,7 +3,7 @@ description: Provide blocks for GHI representing data from the HPC API. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - drupal:layout_builder diff --git a/html/modules/custom/ghi_blocks/src/Controller/BaseObjectReferenceController.php b/html/modules/custom/ghi_blocks/src/Controller/BaseObjectReferenceController.php index 85307701f..8f333991f 100644 --- a/html/modules/custom/ghi_blocks/src/Controller/BaseObjectReferenceController.php +++ b/html/modules/custom/ghi_blocks/src/Controller/BaseObjectReferenceController.php @@ -25,7 +25,7 @@ class BaseObjectReferenceController extends ControllerBase implements ContainerI * * This assumes that the node type in question uses a multi-value entity * reference field called 'field_base_objects' with the form widget from - * wmbert. + * bert (better entity reference table). * * @param array $form * The form array. diff --git a/html/modules/custom/ghi_blocks/src/Plugin/Block/Generic/ExternalWidget.php b/html/modules/custom/ghi_blocks/src/Plugin/Block/Generic/ExternalWidget.php index 1e628c5e0..4b94f0d74 100644 --- a/html/modules/custom/ghi_blocks/src/Plugin/Block/Generic/ExternalWidget.php +++ b/html/modules/custom/ghi_blocks/src/Plugin/Block/Generic/ExternalWidget.php @@ -7,6 +7,7 @@ use Drupal\Core\Url; use Drupal\ghi_blocks\Plugin\Block\GHIBlockBase; use Drupal\ghi_form_elements\Helpers\FormElementHelper; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Provides an 'External Widget' block. @@ -33,6 +34,23 @@ class ExternalWidget extends GHIBlockBase { const MAX_YEAR_RANGE = 10; const GOOGLE_SHEET = '1MArQSVdbLXLaQ8ixUKo9jIjifTCVDDxTJYbGoRuw3Vw'; + /** + * The extension path resolver. + * + * @var \Drupal\Core\Extension\ExtensionPathResolver + */ + protected $extensionPathResolver; + + /** + * {@inheritdoc} + */ + public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { + /** @var \Drupal\ghi_blocks\Plugin\Block\Generic\ExternalWidget $instance */ + $instance = parent::create($container, $configuration, $plugin_id, $plugin_definition); + $instance->extensionPathResolver = $container->get('extension.path.resolver'); + return $instance; + } + /** * {@inheritdoc} */ @@ -342,7 +360,7 @@ private function processWidget(array $widget_conf) { * Whether the url should be processed. */ private function processParams(array &$params, $process_url = TRUE) { - $base_url = $this->requestStack->getMasterRequest()->getBaseUrl(); + $base_url = $this->requestStack->getMainRequest()->getBaseUrl(); // First we deactivate some controls and set the widget into single mode, // which removes the embed title. @@ -353,7 +371,7 @@ private function processParams(array &$params, $process_url = TRUE) { // Then we add an additional CSS reference, which will be included by HDX, // so that we have some control over the styling. - $css_url = Url::fromUserInput('/' . drupal_get_path('module', 'ghi_blocks') . '/css/quickcharts.css', [ + $css_url = Url::fromUserInput('/' . $this->extensionPathResolver->getPath('module', 'ghi_blocks') . '/css/quickcharts.css', [ 'absolute' => TRUE, ])->toString(); if (strpos($css_url, 'docksal') || strpos($css_url, 'ahconu.org')) { diff --git a/html/modules/custom/ghi_blocks/src/Plugin/Block/Plan/PlanEntityLogframe.php b/html/modules/custom/ghi_blocks/src/Plugin/Block/Plan/PlanEntityLogframe.php index 90bdb8c4a..197f4c6dd 100644 --- a/html/modules/custom/ghi_blocks/src/Plugin/Block/Plan/PlanEntityLogframe.php +++ b/html/modules/custom/ghi_blocks/src/Plugin/Block/Plan/PlanEntityLogframe.php @@ -167,7 +167,7 @@ public function buildContent() { else { $tables = [ '#lazy_builder' => [ - $this::class . '::lazyBuildTables', + static::class . '::lazyBuildTables', [ $this->getPluginId(), $this->getUuid(), diff --git a/html/modules/custom/ghi_blocks/tests/src/Unit/BaseObjectReferenceControllerTest.php b/html/modules/custom/ghi_blocks/tests/src/Unit/BaseObjectReferenceControllerTest.php index 10f0b6b73..5f0953dbc 100644 --- a/html/modules/custom/ghi_blocks/tests/src/Unit/BaseObjectReferenceControllerTest.php +++ b/html/modules/custom/ghi_blocks/tests/src/Unit/BaseObjectReferenceControllerTest.php @@ -11,6 +11,7 @@ use Drupal\layout_builder\SectionStorageInterface; use Drupal\Tests\UnitTestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * @coversDefaultClass \Drupal\layout_builder\SectionComponent @@ -18,6 +19,8 @@ */ class BaseObjectReferenceControllerTest extends UnitTestCase { + use ProphecyTrait; + /** * Tests that base object components can be retrieved from sections. */ diff --git a/html/modules/custom/ghi_content/css/admin/remote_content_edit.css b/html/modules/custom/ghi_content/css/admin/remote_content_edit.css index 9aab58ac6..d52e7ca3e 100644 --- a/html/modules/custom/ghi_content/css/admin/remote_content_edit.css +++ b/html/modules/custom/ghi_content/css/admin/remote_content_edit.css @@ -1,4 +1,4 @@ -.node-form .form-type--wmbert .form-type--entity-autocomplete .claro-autocomplete { +.node-form .form-type--bert .form-type--entity-autocomplete .claro-autocomplete { margin: 1rem 0; width: 100%; } diff --git a/html/modules/custom/ghi_content/ghi_content.info.yml b/html/modules/custom/ghi_content/ghi_content.info.yml index d26782ae6..b6b1bc3f8 100644 --- a/html/modules/custom/ghi_content/ghi_content.info.yml +++ b/html/modules/custom/ghi_content/ghi_content.info.yml @@ -3,7 +3,7 @@ description: Provides API integration and blocks for GHI representing content fr package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - drupal:file diff --git a/html/modules/custom/ghi_content/modules/gho_footnotes/gho_footnotes.info.yml b/html/modules/custom/ghi_content/modules/gho_footnotes/gho_footnotes.info.yml index 48b6e18da..557fcc76a 100644 --- a/html/modules/custom/ghi_content/modules/gho_footnotes/gho_footnotes.info.yml +++ b/html/modules/custom/ghi_content/modules/gho_footnotes/gho_footnotes.info.yml @@ -2,4 +2,4 @@ type: module name: GHO Footnotes description: 'Provides text footnotes handling for the GHO site.' package: gho -core_version_requirement: ^8.9 || ^9 +core_version_requirement: ^9 || ^10 diff --git a/html/modules/custom/ghi_content/modules/gho_footnotes/templates/gho-footnote-backlink.html.twig b/html/modules/custom/ghi_content/modules/gho_footnotes/templates/gho-footnote-backlink.html.twig index 072ef3e1e..48a465c03 100644 --- a/html/modules/custom/ghi_content/modules/gho_footnotes/templates/gho-footnote-backlink.html.twig +++ b/html/modules/custom/ghi_content/modules/gho_footnotes/templates/gho-footnote-backlink.html.twig @@ -8,7 +8,7 @@ 2 or 3. #} {% set label = 'Jump to reference @index'|t({'@index': index}) %} -{% spaceless %} +{% apply spaceless %} {# The following markup has the following purpose: - allow the display of `title` tooltip without having the text repeated @@ -24,4 +24,4 @@ {{ label }} -{% endspaceless %} +{% endapply %} diff --git a/html/modules/custom/ghi_content/modules/gho_footnotes/templates/gho-footnote-reference.html.twig b/html/modules/custom/ghi_content/modules/gho_footnotes/templates/gho-footnote-reference.html.twig index 0a3dca908..360c16f10 100644 --- a/html/modules/custom/ghi_content/modules/gho_footnotes/templates/gho-footnote-reference.html.twig +++ b/html/modules/custom/ghi_content/modules/gho_footnotes/templates/gho-footnote-reference.html.twig @@ -7,7 +7,7 @@ - index: Index of the footnote #} {% set label = 'Jump to footnote @index'|t({'@index': index}) %} -{% spaceless %} +{% apply spaceless %} {# The use of `` to be closer to standards (of course that depends on the languages. The text is also a simple number for the same standard reason @@ -21,4 +21,4 @@ -{% endspaceless %} +{% endapply %} diff --git a/html/modules/custom/ghi_content/src/ContentManager/BaseContentManager.php b/html/modules/custom/ghi_content/src/ContentManager/BaseContentManager.php index 37c4d1d47..dc9e07b66 100644 --- a/html/modules/custom/ghi_content/src/ContentManager/BaseContentManager.php +++ b/html/modules/custom/ghi_content/src/ContentManager/BaseContentManager.php @@ -194,9 +194,9 @@ public function loadNodesForTags(array $tags = NULL, NodeInterface $node = NULL, // Setup the base query. $query = $this->entityTypeManager->getStorage('node')->getQuery(); + $query->accessCheck($published); if ($published) { $query->condition('status', NodeInterface::PUBLISHED); - $query->accessCheck(); } $query->condition('type', $this->getNodeBundle()); if ($limit !== NULL) { diff --git a/html/modules/custom/ghi_content/tests/modules/ghi_content_test/ghi_content_test.info.yml b/html/modules/custom/ghi_content/tests/modules/ghi_content_test/ghi_content_test.info.yml index f366ee4cc..1e9ebeac2 100644 --- a/html/modules/custom/ghi_content/tests/modules/ghi_content_test/ghi_content_test.info.yml +++ b/html/modules/custom/ghi_content/tests/modules/ghi_content_test/ghi_content_test.info.yml @@ -3,7 +3,7 @@ description: 'Support module for the GHI Content module tests.' package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - ghi_content:ghi_content \ No newline at end of file diff --git a/html/modules/custom/ghi_documents/ghi_documents.info.yml b/html/modules/custom/ghi_documents/ghi_documents.info.yml deleted file mode 100644 index 1f016c596..000000000 --- a/html/modules/custom/ghi_documents/ghi_documents.info.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: GHI Documents -description: Provide logic around documents (obsolete). -package: GHI - -type: module -core_version_requirement: ^8 || ^9 - -dependencies: - - ghi_sections:ghi_sections - - ghi_content:ghi_content \ No newline at end of file diff --git a/html/modules/custom/ghi_documents/ghi_documents.module b/html/modules/custom/ghi_documents/ghi_documents.module deleted file mode 100644 index 00c5741ae..000000000 --- a/html/modules/custom/ghi_documents/ghi_documents.module +++ /dev/null @@ -1,6 +0,0 @@ -@url successful.', [ - '@url' => $sync_manager->getSyncSourceUrl(), - ]); - try { - $connection_status = $sync_manager->checkConnection(TRUE); - if (!$connection_status) { - $status_label = t('Connection to @url failed', [ - '@url' => $sync_manager->getSyncSourceUrl(), - ]); - } - } - catch (SyncException $e) { - $connection_status = FALSE; - $status_label = t('Connection to @url failed: @message', [ - '@url' => $sync_manager->getSyncSourceUrl(), - '@message' => $e->getMessage(), - ]); - } - $requirements[''] = [ - 'title' => t('Hum Insight element sync'), - 'severity' => $connection_status ? REQUIREMENT_OK : REQUIREMENT_ERROR, - 'value' => $connection_status ? t('Success') : t('Failed'), - 'description' => $status_label, - ]; - } - return $requirements; -} diff --git a/html/modules/custom/ghi_element_sync/ghi_element_sync.libraries.yml b/html/modules/custom/ghi_element_sync/ghi_element_sync.libraries.yml deleted file mode 100644 index e7f9a4230..000000000 --- a/html/modules/custom/ghi_element_sync/ghi_element_sync.libraries.yml +++ /dev/null @@ -1,4 +0,0 @@ -sync_metadata_form: - css: - component: - css/sync_metadata_form.css: {} \ No newline at end of file diff --git a/html/modules/custom/ghi_element_sync/ghi_element_sync.links.menu.yml b/html/modules/custom/ghi_element_sync/ghi_element_sync.links.menu.yml deleted file mode 100644 index 016daf42f..000000000 --- a/html/modules/custom/ghi_element_sync/ghi_element_sync.links.menu.yml +++ /dev/null @@ -1,5 +0,0 @@ -ghi_element_sync.config: - title: Plan element sync - description: 'Configure synchronisation settings for plan elements.' - route_name: ghi_element_sync.config - parent: system.admin_config_services \ No newline at end of file diff --git a/html/modules/custom/ghi_element_sync/ghi_element_sync.links.task.yml b/html/modules/custom/ghi_element_sync/ghi_element_sync.links.task.yml deleted file mode 100644 index a21777420..000000000 --- a/html/modules/custom/ghi_element_sync/ghi_element_sync.links.task.yml +++ /dev/null @@ -1,10 +0,0 @@ -entity.node.sync_metadata: - route_name: ghi_element_sync.node.sync_metadata - base_route: entity.node.canonical - title: Sync page metadata - weight: 199 -entity.node.sync_elements: - route_name: ghi_element_sync.node.sync - base_route: entity.node.canonical - title: Sync page elements - weight: 200 \ No newline at end of file diff --git a/html/modules/custom/ghi_element_sync/ghi_element_sync.module b/html/modules/custom/ghi_element_sync/ghi_element_sync.module deleted file mode 100644 index 6f5da529c..000000000 --- a/html/modules/custom/ghi_element_sync/ghi_element_sync.module +++ /dev/null @@ -1,6 +0,0 @@ -condition('type', ['section', 'plan_cluster'], 'IN'); - - $result = $query->execute(); - $sandbox['node_ids'] = array_values($result); - - $sandbox['total'] = count($sandbox['node_ids']); - $sandbox['results']['processed'] = 0; - $sandbox['results']['skipped'] = 0; - $sandbox['results']['total'] = $sandbox['total']; - } - - /** @var \Drupal\ghi_element_sync\SyncManager $sync_manager */ - $sync_manager = $sandbox['sync_manager']; - $node = Node::load(array_shift($sandbox['node_ids'])); - - $messenger = \Drupal::messenger(); - - try { - if ($sync_manager->syncNode($node, NULL, $messenger, TRUE, TRUE, TRUE, TRUE)) { - $sandbox['results']['processed']++; - } - else { - $sandbox['results']['skipped']++; - } - $messenger->deleteAll(); - } - catch (SyncException $e) { - $sandbox['results']['skipped']++; - } - - $sandbox['#finished'] = ($sandbox['total'] - count($sandbox['node_ids'])) / $sandbox['total']; - if ($sandbox['#finished'] === 1) { - $run = TRUE; - return t('Processed @processed nodes, skipped @skipped of a total of @total nodes.', [ - '@processed' => $sandbox['results']['processed'], - '@skipped' => $sandbox['results']['skipped'], - '@total' => $sandbox['results']['total'], - ]); - } -} - -/** - * Update all pages after data structure changes to data points. - */ -function ghi_element_sync_post_update_sync_elements_0001(&$sandbox) { - return ghi_element_sync_update_page_elements($sandbox); -} - -/** - * Update all pages after config map update for plan headline figures. - */ -function ghi_element_sync_post_update_sync_elements_0002(&$sandbox) { - return ghi_element_sync_update_page_elements($sandbox); -} diff --git a/html/modules/custom/ghi_element_sync/ghi_element_sync.routing.yml b/html/modules/custom/ghi_element_sync/ghi_element_sync.routing.yml deleted file mode 100644 index 8ceddf458..000000000 --- a/html/modules/custom/ghi_element_sync/ghi_element_sync.routing.yml +++ /dev/null @@ -1,42 +0,0 @@ -ghi_element_sync.node.sync: - path: '/node/{node}/hpc/sync' - defaults: - _form: '\Drupal\ghi_element_sync\Form\SyncNodeForm' - _title_callback: '\Drupal\ghi_element_sync\SyncController::syncElementsFormTitle' - options: - parameters: - node: - type: entity:node - _admin_route: TRUE - requirements: - _custom_access: '\Drupal\ghi_element_sync\SyncController::accessElementSyncForm' - _permission: 'access element sync' -ghi_element_sync.node.sync_metadata: - path: '/node/{node}/hpc/sync-metadata' - defaults: - _form: '\Drupal\ghi_element_sync\Form\SyncMetadataNodeForm' - _title_callback: '\Drupal\ghi_element_sync\SyncController::syncMetadataFormTitle' - options: - parameters: - node: - type: entity:node - _admin_route: TRUE - requirements: - _custom_access: '\Drupal\ghi_element_sync\SyncController::accessElementSyncForm' - _permission: 'access element sync' -ghi_element_sync.sync: - path: '/admin/content/sync-elements' - defaults: - _form: '\Drupal\ghi_element_sync\Form\SyncForm' - _title: 'Sync plan elements for all nodes' - requirements: - _permission: 'administer element sync' -ghi_element_sync.config: - path: '/admin/config/services/element-sync' - defaults: - _form: '\Drupal\ghi_element_sync\Form\ConfigForm' - _title: 'Plan element sync' - options: - _admin_route: TRUE - requirements: - _permission: 'administer element sync' \ No newline at end of file diff --git a/html/modules/custom/ghi_element_sync/ghi_element_sync.services.yml b/html/modules/custom/ghi_element_sync/ghi_element_sync.services.yml deleted file mode 100644 index 49035b8c7..000000000 --- a/html/modules/custom/ghi_element_sync/ghi_element_sync.services.yml +++ /dev/null @@ -1,4 +0,0 @@ -services: - ghi_element_sync.sync_elements: - class: Drupal\ghi_element_sync\SyncManager - arguments: ['@config.factory', '@plugin.manager.block', '@http_client', '@uuid', '@datetime.time', '@current_user', '@context.handler', '@layout_builder.tempstore_repository', '@plugin.manager.endpoint_query_manager'] \ No newline at end of file diff --git a/html/modules/custom/ghi_element_sync/src/Form/ConfigForm.php b/html/modules/custom/ghi_element_sync/src/Form/ConfigForm.php deleted file mode 100644 index 74f9bfafd..000000000 --- a/html/modules/custom/ghi_element_sync/src/Form/ConfigForm.php +++ /dev/null @@ -1,131 +0,0 @@ -entityTypeManager = $entity_type_manager; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('entity_type.manager'), - ); - } - - /** - * {@inheritdoc} - */ - public function getFormId() { - return 'ghi_element_sync_config_form'; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state) { - - $form = parent::buildForm($form, $form_state); - $config = $this->config('ghi_element_sync.settings'); - - $form['sync_source'] = [ - '#type' => 'url', - '#title' => $this->t('Sync source URL'), - '#description' => $this->t('Enter the url for this sync source'), - '#default_value' => $config->get('sync_source') ?? NULL, - ]; - - $form['access_key'] = [ - '#type' => 'password', - '#title' => $this->t('Access key'), - '#description' => $this->t('Enter the access key for this remote source'), - '#default_value' => $config->get('access_key') ?? NULL, - ]; - - $basic_auth = $config->get('basic_auth') ?? [ - 'user' => NULL, - 'pass' => NULL, - ]; - - $form['basic_auth'] = [ - '#type' => 'details', - '#title' => $this->t('Basic auth'), - '#open' => !empty($basic_auth), - '#tree' => TRUE, - ]; - $form['basic_auth']['user'] = [ - '#type' => 'textfield', - '#title' => $this->t('Username'), - '#description' => $this->t('Enter the basic auth username'), - '#default_value' => $basic_auth['user'] ?? NULL, - ]; - $form['basic_auth']['pass'] = [ - '#type' => 'textfield', - '#title' => $this->t('Password'), - '#description' => $this->t('Enter the basic auth password'), - '#default_value' => $basic_auth['pass'] ?? NULL, - ]; - - $available_node_types = array_merge(['section'], SubpageHelper::getSubpageTypes()); - $form['node_types'] = [ - '#type' => 'checkboxes', - '#title' => $this->t('Node types'), - '#description' => $this->t('Select all node types that should allow to import plan elements from the defined source.'), - '#options' => array_map(function ($item) { - return $this->entityTypeManager->getStorage('node_type')->load($item)->get('name'); - }, array_combine($available_node_types, $available_node_types)), - '#default_value' => $config->get('node_types') ?? [], - ]; - - return $form; - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - $config = $this->config('ghi_element_sync.settings'); - $config->set('sync_source', $form_state->getValue('sync_source')); - $config->set('access_key', $form_state->getValue('access_key')); - $config->set('basic_auth', [ - 'user' => $form_state->getValue(['basic_auth', 'user']), - 'pass' => $form_state->getValue(['basic_auth', 'pass']), - ]); - $config->set('node_types', array_values(array_filter($form_state->getValue('node_types')))); - $config->save(); - return parent::submitForm($form, $form_state); - } - - /** - * {@inheritdoc} - */ - protected function getEditableConfigNames() { - return [ - 'ghi_element_sync.settings', - ]; - } - -} diff --git a/html/modules/custom/ghi_element_sync/src/Form/SyncForm.php b/html/modules/custom/ghi_element_sync/src/Form/SyncForm.php deleted file mode 100644 index 4bdc097f2..000000000 --- a/html/modules/custom/ghi_element_sync/src/Form/SyncForm.php +++ /dev/null @@ -1,199 +0,0 @@ -syncManager = $sync_manager; - $this->entityTypeManager = $entity_type_manager; - - $this->bundles = $this->syncManager->getAvailableNodeTypes(); - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('ghi_element_sync.sync_elements'), - $container->get('entity_type.manager'), - ); - } - - /** - * {@inheritdoc} - */ - public function getFormId() { - return 'ghi_element_sync_form'; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state, NodeInterface $node = NULL) { - $form['#node'] = $node; - - $bundle_labels = array_map(function ($bundle) { - return $this->entityTypeManager->getStorage('node_type')->load($bundle)->label(); - }, $this->bundles); - - $form['limit'] = [ - '#type' => 'select', - '#title' => $this->t('Limit'), - '#description' => $this->t('Optionally limit the element sync process. By default the following node types will be processed: @types. If none is selected, nodes of all bundles will be processed.', [ - '@types' => implode(', ', $bundle_labels), - ]), - '#options' => [ - 'none' => $this->t('No limit'), - 'bundle' => $this->t('Bundle'), - 'id' => $this->t('ID'), - ], - ]; - - $form['bundle'] = [ - '#type' => 'checkboxes', - '#title' => $this->t('Bundle'), - '#description' => $this->t('Select a bundle to limit the synching to specific pages.'), - '#options' => array_combine($this->bundles, $bundle_labels), - '#multiple' => TRUE, - '#states' => [ - 'visible' => [ - ':input[name="limit"]' => ['value' => 'bundle'], - ], - ], - ]; - - $form['id'] = [ - '#type' => 'textfield', - '#title' => $this->t('Limit to ids'), - '#description' => $this->t('Enter a comma separated list of node ids to limit the synching to specific pages.'), - '#states' => [ - 'visible' => [ - ':input[name="limit"]' => ['value' => 'id'], - ], - ], - ]; - - $form['sync_elements'] = [ - '#type' => 'checkbox', - '#title' => $this->t('Sync elements'), - '#description' => $this->t('Sync all page elements.'), - '#default_value' => TRUE, - ]; - - $form['cleanup'] = [ - '#type' => 'checkbox', - '#title' => $this->t('Cleanup any existing elements'), - '#description' => $this->t('Check this if existing elements should be removed before synching from remote.'), - '#default_value' => FALSE, - '#states' => [ - 'visible' => [ - ':input[name="sync_elements"]' => ['checked' => TRUE], - ], - ], - ]; - - $form['sync_metadata'] = [ - '#type' => 'checkbox', - '#title' => $this->t('Sync metadata'), - '#description' => $this->t('Sync additional metadata for qualified base objects, e.g. plan status, shortname, etc... Only plan base objects are currently supported.'), - '#default_value' => TRUE, - ]; - - $form['revisions'] = [ - '#type' => 'checkbox', - '#title' => $this->t('Create new revisions'), - '#description' => $this->t('Check this if new revisions should be created.'), - '#default_value' => FALSE, - ]; - - $form['submit'] = [ - '#type' => 'submit', - '#value' => $this->t('Start sync process'), - ]; - return $form; - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - - $batch_builder = new BatchBuilder(); - $batch_builder - ->setFinishCallback([SyncBatch::class, 'finish']) - ->setTitle($this->t('Synching elements')) - ->setInitMessage($this->t('Starting element sync.')) - ->setErrorMessage($this->t('Element sync has encountered an error.')); - - $limit = $form_state->getValue('limit'); - $bundle = $this->bundles; - $id = NULL; - $sync_elements = $form_state->getValue('sync_elements'); - $sync_metadata = $form_state->getValue('sync_metadata'); - $revisions = $form_state->getValue('revisions'); - $cleanup = $form_state->getValue('cleanup'); - - if ($limit == 'bundle') { - $bundle = array_keys(array_filter($form_state->getValue('bundle'))); - if (empty($bundle)) { - $bundle = $this->bundles; - } - } - elseif ($limit == 'id') { - $id = array_filter(array_map(function ($item) { - return (int) trim($item); - }, explode(',', $form_state->getValue('id')))); - } - - $batch_builder->addOperation([SyncBatch::class, 'process'], [ - $this->syncManager, - $bundle, - (array) $id, - $sync_elements, - $sync_metadata, - $revisions, - $cleanup, - ]); - batch_set($batch_builder->toArray()); - - } - -} diff --git a/html/modules/custom/ghi_element_sync/src/Form/SyncMetadataNodeForm.php b/html/modules/custom/ghi_element_sync/src/Form/SyncMetadataNodeForm.php deleted file mode 100644 index 771e56ab1..000000000 --- a/html/modules/custom/ghi_element_sync/src/Form/SyncMetadataNodeForm.php +++ /dev/null @@ -1,191 +0,0 @@ -syncManager = $sync_manager; - $this->entityTypeManager = $entity_type_manager; - $this->entityFieldManager = $entity_field_manager; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('ghi_element_sync.sync_elements'), - $container->get('entity_type.manager'), - $container->get('entity_field.manager'), - ); - } - - /** - * {@inheritdoc} - */ - public function getFormId() { - return 'ghi_element_sync_node_form'; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state, NodeInterface $node = NULL) { - $form['#node'] = $node; - $form['#attached']['library'] = ['ghi_element_sync/sync_metadata_form']; - - $remote_hero_image_url = NULL; - $hero_image_sync_state = NULL; - try { - $remote_data = $this->syncManager->getRemoteConfigurations($node); - $remote_hero_image_url = $this->syncManager->getRemoteHeroImageUrl($node); - $hero_image_sync_state = $this->syncManager->isHeroImageSynced($node); - } - catch (SyncException $e) { - $this->messenger()->addError($this->t('There was a problem accessing the sync source:
@error', [ - '@error' => $e->getMessage(), - ])); - $form['sync_elements']['#disabled'] = TRUE; - } - - $base_object = BaseObjectHelper::getBaseObjectFromNode($node); - $base_object_fields = $this->entityFieldManager->getFieldDefinitions($base_object->getEntityTypeId(), $base_object->bundle()); - $metadata = $remote_data->metadata ?? (object) []; - $header = [ - 'property' => $this->t('Property'), - 'remote_value' => $this->t('Remote'), - 'local_value' => $this->t('Local'), - 'status' => $this->t('Status'), - ]; - - $form['properties'] = [ - '#type' => 'table', - '#header' => $header, - '#options' => [], - ]; - - $remote_status = $metadata->status ?? NULL; - $form['properties']['#rows'][] = [ - 'property' => $this->t('Status'), - 'remote_value' => $remote_status === NULL ? $this->t('Unknown') : ($remote_status == 1 ? $this->t('Published') : $this->t('Unpublished')), - 'local_value' => $node->isPublished() ? $this->t('Published') : $this->t('Unpublished'), - 'status' => (bool) $remote_status == $node->isPublished() ? $this->t('In sync') : $this->t('Changed'), - ]; - - $form['properties']['#rows'][] = [ - 'property' => $this->t('Hero image'), - 'remote_value' => $remote_hero_image_url ? [ - 'data' => [ - '#theme' => 'ghi_image', - '#url' => $remote_hero_image_url, - '#responsive_image_style' => $this->entityTypeManager->getStorage('responsive_image_style')->load('hero'), - '#attributes' => [ - 'style' => 'width: 100%', - ], - ], - ] : NULL, - 'local_value' => [ - 'data' => $node->get('field_hero_image')->view(['label' => 'hidden']), - ], - 'status' => $hero_image_sync_state === NULL ? $this->t('Unclear') : ($hero_image_sync_state ? $this->t('In sync') : $this->t('Changed')), - ]; - - if ($base_object instanceof Plan) { - $field_map = $this->syncManager->getMetadataFieldMap($metadata); - foreach ($field_map as $remote_property => $local_def) { - if ($remote_property == 'footnotes') { - foreach ($local_def['properties'] as $footnote_property) { - $remote_value = $metadata->{$remote_property}->{$footnote_property} ?? NULL; - $local_value = $this->getFootnoteFromItemList($base_object->{$local_def['field']} ?? NULL, $footnote_property); - $form['properties']['#rows'][] = [ - 'property' => $base_object_fields[$local_def['field']]->getLabel() . ':' . $footnote_property, - 'remote_value' => $remote_value, - 'local_value' => $local_value, - 'status' => $remote_value == $local_value ? $this->t('In sync') : $this->t('Changed'), - ]; - } - } - else { - $remote_value = $metadata->{$remote_property} ?? NULL; - if ($remote_value !== NULL && !empty($local_def['callback'])) { - $remote_value = $local_def['callback']($remote_value); - } - $local_value = $base_object->{$local_def['field']}->{$local_def['property']} ?? NULL; - - $field = $base_object_fields[$local_def['field']]; - $is_boolean = $field->getItemDefinition()->getDataType() == 'field_item:boolean'; - $field_settings = $field->getSettings(); - - $form['properties']['#rows'][] = [ - 'property' => $base_object_fields[$local_def['field']]->getLabel(), - 'remote_value' => $is_boolean ? ($remote_value ? $field_settings['on_label'] : $field_settings['off_label']) : $remote_value, - 'local_value' => $is_boolean ? ($local_value ? $field_settings['on_label'] : $field_settings['off_label']) : $local_value, - 'status' => $remote_value == $local_value ? $this->t('In sync') : $this->t('Changed'), - ]; - } - } - } - - $form['actions'] = ['#type' => 'actions']; - $form['actions']['sync'] = [ - '#type' => 'submit', - '#value' => $this->t('Sync metadata'), - ]; - - return $form; - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - $node = $form['#node']; - $action = end($form_state->getTriggeringElement()['#parents']); - if ($action == 'sync') { - $this->syncManager->syncNode($node, NULL, NULL, FALSE, TRUE); - } - } - -} diff --git a/html/modules/custom/ghi_element_sync/src/Form/SyncNodeForm.php b/html/modules/custom/ghi_element_sync/src/Form/SyncNodeForm.php deleted file mode 100644 index 091d35095..000000000 --- a/html/modules/custom/ghi_element_sync/src/Form/SyncNodeForm.php +++ /dev/null @@ -1,130 +0,0 @@ -syncManager = $sync_manager; - $this->entityFieldManager = $entity_field_manager; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('ghi_element_sync.sync_elements'), - $container->get('entity_field.manager'), - ); - } - - /** - * {@inheritdoc} - */ - public function getFormId() { - return 'ghi_element_sync_node_form'; - } - - /** - * {@inheritdoc} - */ - public function buildForm(array $form, FormStateInterface $form_state, NodeInterface $node = NULL) { - $form['#node'] = $node; - - try { - $remote_data = $this->syncManager->getRemoteConfigurations($node); - } - catch (SyncException $e) { - $this->messenger()->addError($this->t('There was a problem accessing the sync source:
@error', [ - '@error' => $e->getMessage(), - ])); - $form['sync_elements']['#disabled'] = TRUE; - } - - $header = [ - 'source_type' => $this->t('Source type'), - 'plugin' => $this->t('Plugin'), - 'syncable' => $this->t('Syncable'), - 'status' => $this->t('Status'), - ]; - - $form['sync_element_select'] = [ - '#type' => 'tableselect', - '#header' => $header, - '#options' => [], - ]; - - foreach ($remote_data->elements ?? [] as $element) { - $is_syncable = $this->syncManager->isSyncable($element); - $has_valid_source = $this->syncManager->hasValidSource($element, $node); - $row = []; - $row['source_type'] = $element->type; - $definition = $this->syncManager->getCorrespondingPluginDefintionForElement($element); - $row['plugin'] = $definition ? $definition['admin_label'] : $this->t('Unknown'); - $row['syncable'] = $is_syncable && $has_valid_source ? $this->t('Syncable') : $this->t('Not syncable'); - $row['status'] = $this->syncManager->getSyncStatus($element, $node); - - $form['sync_element_select']['#options'][$element->uuid] = $row; - $form['sync_element_select'][$element->uuid] = !$is_syncable || !$has_valid_source ? ['#disabled' => TRUE] : NULL; - } - - $form['actions'] = ['#type' => 'actions']; - $form['actions']['sync_selected'] = [ - '#type' => 'submit', - '#value' => $this->t('Sync selected elements'), - '#disabled' => !empty($form['sync_elements']['#disabled']), - ]; - $form['actions']['remove_synced'] = [ - '#type' => 'submit', - '#value' => $this->t('Remove all sync elements'), - '#disabled' => !empty($form['sync_elements']['#disabled']), - ]; - - return $form; - } - - /** - * {@inheritdoc} - */ - public function submitForm(array &$form, FormStateInterface $form_state) { - $node = $form['#node']; - $selected_source_uuids = array_filter($form_state->getValue('sync_element_select')); - $action = end($form_state->getTriggeringElement()['#parents']); - if ($action == 'remove_synced') { - $this->syncManager->resetNode($node); - } - else { - $this->syncManager->syncNode($node, $action == 'sync_selected' ? $selected_source_uuids : NULL, NULL, TRUE, FALSE); - } - } - -} diff --git a/html/modules/custom/ghi_element_sync/src/IncompleteElementConfigurationException.php b/html/modules/custom/ghi_element_sync/src/IncompleteElementConfigurationException.php deleted file mode 100644 index b11000a10..000000000 --- a/html/modules/custom/ghi_element_sync/src/IncompleteElementConfigurationException.php +++ /dev/null @@ -1,10 +0,0 @@ -condition('type', $bundle, 'IN'); - - // Optionally restricted by specific ids. - if (!empty($ids)) { - $query->condition('id', $ids, 'IN'); - } - - $result = $query->execute(); - $context['sandbox']['node_ids'] = array_values($result); - - $context['sandbox']['total'] = count($context['sandbox']['node_ids']); - $context['results']['processed'] = 0; - $context['results']['skipped'] = 0; - $context['results']['total'] = $context['sandbox']['total']; - $context['results']['errors'] = []; - } - - /** @var \Drupal\ghi_element_sync\SyncManager $sync_manager */ - $sync_manager = $context['sandbox']['sync_manager']; - $node = Node::load(array_shift($context['sandbox']['node_ids'])); - - $messenger = \Drupal::messenger(); - - try { - if ($sync_manager->syncNode($node, NULL, $messenger, $sync_elements, $sync_metadata, $revisions, $cleanup)) { - $context['results']['processed']++; - } - else { - $context['results']['skipped']++; - } - } - catch (SyncException $e) { - $context['results']['errors'][] = t('@bundle @original_id (@node_id): @message', [ - '@bundle' => $node->type->entity->label(), - '@original_id' => $node->field_original_id->value, - '@node_id' => $node->id(), - '@message' => $e->getMessage(), - ]); - $context['results']['skipped']++; - } - - $messenger->deleteAll(); - - // Set progress. - $context['finished'] = ($context['sandbox']['total'] - count($context['sandbox']['node_ids'])) / $context['sandbox']['total']; - } - - /** - * Finish batch. - * - * @param bool $success - * Indicate that the batch API tasks were all completed successfully. - * @param array $results - * An array of all the results that were updated in update_do_one(). - * @param array $operations - * A list of the operations that had not been completed by the batch API. - */ - public static function finish($success, array $results, array $operations) { - $messenger = \Drupal::messenger(); - if ($success) { - if (!empty($results['errors'])) { - foreach ($results['errors'] as $error) { - $messenger->addError($error); - } - $messenger->addWarning(t('The element sync had errors.')); - } - $messenger->addStatus(t('Successfully processed @processed nodes, skipped @skipped of a total of @total nodes.', [ - '@processed' => $results['processed'], - '@skipped' => $results['skipped'], - '@total' => $results['total'], - ])); - } - else { - // An error occurred. - $message = t('An error occurred. Please check the logs.'); - $messenger->addError($message); - } - } - -} diff --git a/html/modules/custom/ghi_element_sync/src/SyncController.php b/html/modules/custom/ghi_element_sync/src/SyncController.php deleted file mode 100644 index 81b107585..000000000 --- a/html/modules/custom/ghi_element_sync/src/SyncController.php +++ /dev/null @@ -1,94 +0,0 @@ -syncManager = $sync_manager; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('ghi_element_sync.sync_elements'), - ); - } - - /** - * Access callback for the element sync form. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return \Drupal\Core\Access\AccessResultInterface - * The access result. - */ - public function accessElementSyncForm(NodeInterface $node) { - if (empty($this->syncManager->getSyncSourceUrl())) { - return AccessResult::forbidden(); - } - if (!in_array($node->bundle(), $this->syncManager->getAvailableNodeTypes())) { - return AccessResult::forbidden(); - } - if (!$node->access('update')) { - return AccessResult::forbidden(); - } - $base_object = BaseObjectHelper::getBaseObjectFromNode($node); - return AccessResult::allowedIf($base_object && in_array($base_object->bundle(), SyncManager::BASE_OBJECT_TYPES_SUPPORTED)); - } - - /** - * Title callback for the sync node form. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return string - * The page title. - */ - public function syncElementsFormTitle(NodeInterface $node) { - return $this->t('Sync elements for @title: @type page', [ - '@title' => $node->label(), - '@type' => $node->type->entity->label(), - ]); - } - - /** - * Title callback for the sync node form. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return string - * The page title. - */ - public function syncMetadataFormTitle(NodeInterface $node) { - return $this->t('Sync metadata for @title: @type page', [ - '@title' => $node->label(), - '@type' => $node->type->entity->label(), - ]); - } - -} diff --git a/html/modules/custom/ghi_element_sync/src/SyncException.php b/html/modules/custom/ghi_element_sync/src/SyncException.php deleted file mode 100644 index 7d8f9812e..000000000 --- a/html/modules/custom/ghi_element_sync/src/SyncException.php +++ /dev/null @@ -1,8 +0,0 @@ -config = $config_factory; - $this->blockManager = $block_manager; - $this->httpClient = $http_client; - $this->uuidGenerator = $uuid; - $this->time = $time; - $this->currentUser = $user; - $this->contextHandler = $context_handler; - $this->layoutTempstoreRepository = $layout_tempstore_repository; - $this->endpointQueryManager = $endpoint_query_manager; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('config.factory'), - $container->get('plugin.manager.block'), - $container->get('http_client'), - $container->get('uuid'), - $container->get('datetime.time'), - $container->get('current_user'), - $container->get('context.handler'), - $container->get('layout_builder.tempstore_repository'), - $container->get('plugin.manager.endpoint_query_manager'), - ); - } - - /** - * Get a map that relates remote metadata with local field information. - * - * @return array - * A map array for metadata fields. - */ - public function getMetadataFieldMap($metadata) { - $map = [ - 'shortname' => [ - 'field' => 'field_short_name', - 'property' => 'value', - ], - 'default_caseload' => [ - 'field' => 'field_plan_caseload', - 'property' => 'attachment_id', - ], - 'document_link' => [ - 'field' => 'field_plan_document_link', - 'property' => 'uri', - ], - 'max_admin_level' => [ - 'field' => 'field_max_admin_level', - 'property' => 'value', - ], - 'decimal_format' => [ - 'field' => 'field_decimal_format', - 'property' => 'value', - ], - 'plan_version' => [ - 'field' => 'field_plan_version_argument', - 'property' => 'value', - ], - 'status_string' => [ - 'field' => 'field_plan_status', - 'property' => 'value', - 'callback' => [Plan::class, 'mapPlanStatus'], - ], - 'prevent_fts_link' => [ - 'field' => 'field_link_to_fts', - 'property' => 'value', - 'callback' => [Plan::class, 'mapFtsLink'], - ], - 'visible_on_homepage' => [ - 'field' => 'field_visible_on_global_pages', - 'property' => 'value', - ], - ]; - $map['footnotes'] = [ - 'field' => 'field_footnotes', - 'properties' => [], - ]; - foreach (array_keys((array) ($metadata->footnotes ?? [])) as $property) { - $map['footnotes']['properties'][] = $property; - } - return $map; - } - - /** - * Sync a node form a remote source. - * - * @param \Drupal\node\NodeInterface $node - * The node for which elements should be synced. - * @param array $source_uuids - * Optionally limit to specific source uuids. - * @param \Drupal\Core\Messenger\MessengerInterface $messenger - * An optional messenger to use for result messages. - * @param bool $sync_elements - * Whether elements should be synced. - * @param bool $sync_metadata - * Whether metadata should be synced. - * @param bool $revisions - * Whether new revisions should be created. - * @param bool $cleanup - * Whether existing elements should be cleaned up first. - * - * @return bool - * Indicating whether the node has been sucessfully processed or not. - * - * @throws SyncException - * When an error occurs. - */ - public function syncNode(NodeInterface $node, array $source_uuids = NULL, MessengerInterface $messenger = NULL, $sync_elements = TRUE, $sync_metadata = TRUE, $revisions = FALSE, $cleanup = FALSE) { - if ($messenger === NULL) { - $messenger = $this->messenger(); - } - - $base_object = BaseObjectHelper::getBaseObjectFromNode($node); - if (!in_array($base_object->bundle(), self::BASE_OBJECT_TYPES_SUPPORTED)) { - return FALSE; - } - - $remote_data = $this->getRemoteConfigurations($node); - $sections = $this->getNodeSections($node); - $delta = 0; - - if ($cleanup && $sections[$delta]->getComponents()) { - foreach ($sections[$delta]->getComponents() as $component) { - $sections[$delta]->removeComponent($component->getUuid()); - } - } - - // For base objects of type plan or governing_entity, we also support the - // syncing of metadata. - if (($base_object instanceof Plan || $base_object instanceof GoverningEntity) && $sync_metadata) { - $metadata = $remote_data->metadata ?? (object) []; - if ($metadata->status) { - $node->setPublished(); - } - else { - $node->setUnpublished(); - } - - // Handle the image. Only act if we have something configured on the - // remote. Otherwise leave the local setup untouched as we risk to - // override local customizations. - $remote_hero_image_attachment_id = $this->getRemoteHeroImageAttachmentId($node); - if ($remote_hero_image_attachment_id) { - $node->get('field_hero_image')->setValue([ - 'source' => 'hpc_webcontent_file_attachment', - 'settings' => [ - 'hpc_webcontent_file_attachment' => [ - 'attachment_id' => $remote_hero_image_attachment_id, - ], - ], - ]); - } - - // GVE only sync the publication status, plans also a couple of - // additional fields. - if ($base_object instanceof Plan) { - $field_map = $this->getMetadataFieldMap($metadata); - foreach ($field_map as $remote_property => $local_def) { - if ($remote_property == 'footnotes') { - $base_object->field_footnotes = []; - foreach ($local_def['properties'] as $footnote_property) { - $base_object->field_footnotes[] = [ - 'property' => $footnote_property, - 'footnote' => $metadata->{$remote_property}->{$footnote_property} ?? NULL, - ]; - } - } - else { - $value = $metadata->{$remote_property} ?? NULL; - if ($value !== NULL && !empty($local_def['callback'])) { - $value = $local_def['callback']($value); - } - $base_object->{$local_def['field']}->{$local_def['property']} = $value; - if ($local_def['property'] == 'uri') { - $base_object->{$local_def['field']}->options = []; - } - } - } - } - - // @codingStandardsIgnoreStart - // $base_object->?? = $metadata->plan_version; - // $base_object->?? = $metadata->prevent_fts_link; - // @codingStandardsIgnoreEnd - $base_object->save(); - } - - if ($sync_elements) { - foreach ($remote_data->elements ?? [] as $element) { - if (!$this->isSyncable($element)) { - continue; - } - if ($source_uuids !== NULL && !in_array($element->uuid, $source_uuids)) { - continue; - } - // Setup the context mapping. - $definition = $this->getCorrespondingPluginDefintionForElement($element); - $context_mapping = [ - 'context_mapping' => array_intersect_key([ - 'node' => 'layout_builder.entity', - ], $definition['context_definitions']), - ]; - // And make sure that base objects are mapped too. - $base_objects = BaseObjectHelper::getBaseObjectsFromNode($node); - foreach ($base_objects as $_base_object) { - $contexts = [ - EntityContext::fromEntity($_base_object), - ]; - foreach ($definition['context_definitions'] as $context_key => $context_definition) { - $matching_contexts = $this->contextHandler->getMatchingContexts($contexts, $context_definition); - if (empty($matching_contexts)) { - continue; - } - $context_mapping['context_mapping'][$context_key] = $_base_object->getUniqueIdentifier(); - } - } - - try { - $mapped_config = $this->getMappedConfig($element, $node); - } - catch (IncompleteElementConfigurationException $e) { - continue; - } - $existing_component = $this->getExistingSyncedComponent($node, $element); - if ($existing_component) { - // Update an existing component. - $configuration = $mapped_config + $context_mapping + $existing_component->get('configuration'); - $existing_component->setConfiguration($configuration); - $messenger->addMessage($this->t('Updated %plugin_title', [ - '%plugin_title' => $definition['admin_label'], - ]), $messenger::TYPE_STATUS, TRUE); - } - else { - // Append a new component. - $messenger->addMessage($this->t('Added %plugin_title', [ - '%plugin_title' => $definition['admin_label'], - ]), $messenger::TYPE_STATUS, TRUE); - $config = array_filter([ - 'id' => $definition['id'], - 'provider' => $definition['provider'], - 'data_sources' => $definition['data_sources'] ?? NULL, - 'sync' => [ - 'source_uuid' => $element->uuid, - ], - ]) + $context_mapping; - $config += $mapped_config; - - $component = new SectionComponent($this->uuidGenerator->generate(), 'content', $config); - $sections[$delta]->appendComponent($component); - } - - } - } - - $node->get(OverridesSectionStorage::FIELD_NAME)->setValue($sections); - if ($revisions) { - $node->setNewRevision(TRUE); - $node->revision_log = $this->t('Synced page elements from @source_url', ['@source_url' => $this->getSyncSourceUrl()]); - $node->setRevisionCreationTime($this->time->getRequestTime()); - $node->setRevisionUserId($this->currentUser->id()); - } - $node->save(); - - $this->layoutManagerDiscardChanges($node, $messenger); - - return TRUE; - } - - /** - * Remove previously synched elements from a node. - * - * @param \Drupal\node\NodeInterface $node - * The node for which elements should be synced. - * - * @return bool - * Indicating whether the node has been sucessfully reset or not. - * - * @throws SyncException - * When an error occurs. - */ - public function resetNode(NodeInterface $node) { - $base_object = BaseObjectHelper::getBaseObjectFromNode($node); - if (!in_array($base_object->bundle(), self::BASE_OBJECT_TYPES_SUPPORTED)) { - return FALSE; - } - - $remote_data = $this->getRemoteConfigurations($node); - $sections = $this->getNodeSections($node); - $delta = 0; - - foreach ($remote_data->elements ?? [] as $element) { - if (!$this->isSyncable($element)) { - continue; - } - $existing_component = $this->getExistingSyncedComponent($node, $element); - if ($existing_component) { - $sections[$delta]->removeComponent($existing_component->getUuid()); - } - } - - $this->layoutManagerDiscardChanges($node, $this->messenger()); - - $node->get(OverridesSectionStorage::FIELD_NAME)->setValue($sections); - $node->setNewRevision(TRUE); - $node->revision_log = $this->t('Removed previously synced page elements from @source_url', ['@source_url' => $this->getSyncSourceUrl()]); - $node->setRevisionCreationTime($this->time->getRequestTime()); - $node->setRevisionUserId($this->currentUser->id()); - $node->save(); - - return TRUE; - } - - /** - * Send a query to the remote instance. - * - * @param array|string $args - * An array of arguments that will be added to the base url. - * - * @return mixed - * The data received from the remote. - * - * @see self::getRequestUrl() - */ - public function sendRemoteQuery($args) { - $settings = $this->getSettings(); - if (empty($settings->get('sync_source'))) { - throw new SyncException('Error: Source is not configured'); - } - - try { - $args = (array) $args; - $response = $this->httpClient->request('GET', $this->getRequestUrl($args), $this->getRequestOptions()); - } - catch (\Exception $e) { - throw new SyncException($e->getMessage()); - } - - $code = $response->getStatusCode(); - if ($code != 200) { - throw new SyncException('Error: Invalid response'); - } - - $body = $response->getBody()->getContents(); - if (empty($body)) { - throw new SyncException('Error: Empty response'); - } - - $data = json_decode($body); - if (empty($data->status)) { - throw new SyncException('Error: Access key misconfigured or object not valid'); - } - return $data; - } - - /** - * Check the connection to the configured source for plan element sync. - * - * @return bool - * TRUE if a connection can be established, FALSE otherwise. - */ - public function checkConnection($bubble_exception = FALSE) { - try { - $this->sendRemoteQuery('status'); - } - catch (SyncException $e) { - if ($bubble_exception) { - throw $e; - } - return FALSE; - } - return TRUE; - } - - /** - * Get all element configurations from the remote. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return object - * A configuration objects from the remote. - * - * @throws \Drupal\ghi_element_sync\SyncException - * Thrown when the remote source can't be reached or does not respond - * correctly. - */ - public function getRemoteConfigurations(NodeInterface $node) { - $base_object = BaseObjectHelper::getBaseObjectFromNode($node); - $original_id = $base_object->field_original_id->value; - $bundle = $base_object->bundle(); - $data = $this->sendRemoteQuery([$original_id, $bundle]); - if (empty($data)) { - // No error, but nothing to do either. - return []; - } - return $data; - } - - /** - * Get the plugin that corresponds to the element from the remote system. - * - * @param object $element - * The element object from the remote. - * - * @return mixed - * A plugin definition, or NULL if the element type is invalid. - */ - public function getCorrespondingPluginDefintionForElement($element) { - $definitions = $this->blockManager->getDefinitions(); - if (!property_exists($element, 'type')) { - return NULL; - } - if (isset($definitions[$element->type])) { - return $definitions[$element->type]; - } - // If there is no direct match, see if we can find a plugin that wants to - // handle this element type. - $definitions = array_filter($definitions, function ($definition) use ($element) { - return array_key_exists('valid_source_elements', $definition) && in_array($element->type, $definition['valid_source_elements']); - }); - return !empty($definitions) && count($definitions) == 1 ? reset($definitions) : NULL; - } - - /** - * Checks if the given element is syncable. - * - * @param object $element - * The element object from the remote. - * - * @return bool - * Whether the element is syncable. - */ - public function isSyncable($element) { - $definition = $this->getCorrespondingPluginDefintionForElement($element); - if (!$definition) { - return FALSE; - } - $class = $definition['class']; - return in_array('Drupal\ghi_element_sync\SyncableBlockInterface', class_implements($class)); - } - - /** - * Checks if the given element has a valid source that allows synching. - * - * @param object $element - * The element object from the remote. - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return bool - * Whether the element has a valid source. - */ - public function hasValidSource($element, NodeInterface $node) { - if (!$this->isSyncable($element)) { - return FALSE; - } - try { - $mapped_config = $this->getMappedConfig($element, $node, TRUE); - } - catch (IncompleteElementConfigurationException $e) { - return FALSE; - } - return !empty($mapped_config); - } - - /** - * Get the current sync status. - * - * @param object $element - * The element object from the remote. - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return string - * A string representing the sync status. - */ - public function getSyncStatus($element, NodeInterface $node) { - if (!$this->isSyncable($element)) { - return ''; - } - $existing_component = $this->getExistingSyncedComponent($node, $element); - if (!$existing_component) { - return $this->t('Not synced'); - } - try { - $mapped_config = $this->getMappedConfig($element, $node, TRUE); - } - catch (IncompleteElementConfigurationException $e) { - $mapped_config = NULL; - } - if ($mapped_config === NULL) { - return $this->t('Invalid source'); - } - $remote_hash = md5(serialize($mapped_config['hpc'])); - $local_hash = md5(serialize($existing_component->get('configuration')['hpc'])); - return $remote_hash == $local_hash ? $this->t('In sync') : $this->t('Changed'); - } - - /** - * Get the mapped config for the given element. - * - * @param object $element - * The source element. - * @param \Drupal\node\NodeInterface $node - * The node object that is the sync target. - * @param bool $dry_run - * Whether this is a test or a real mapping. - * - * @return array - * A mapped config array. - * - * @throws \Drupal\ghi_element_sync\IncompleteElementConfigurationException; - */ - private function getMappedConfig($element, NodeInterface $node, $dry_run = FALSE) { - $definition = $this->getCorrespondingPluginDefintionForElement($element); - if (!$definition) { - return NULL; - } - $class = $definition['class']; - $config = json_decode(json_encode($element->configuration)); - - $common_config = []; - $widget_options = $config->widget_options ?? NULL; - $widget_visibility = $widget_options ? ($widget_options->widget_visibility ?? NULL) : NULL; - if (!empty($widget_visibility) && $widget_visibility != 'public') { - $common_config['visibility_status'] = 'hidden'; - } - return $class::mapConfig($config, $node, $element->type, $dry_run) + $common_config; - } - - /** - * Find a section component corresponding to the given source element. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * @param object $element - * The configuration object from the sync source. - * - * @return \Drupal\layout_builder\SectionComponent|null - * Either a matching component, or NULL. - */ - private function getExistingSyncedComponent(NodeInterface $node, $element) { - $section_storage = $this->getSectionStorageForEntity($node); - $sections = $section_storage->getSections(); - foreach ($sections[0]->getComponents() as $component) { - $configuration = $component->get('configuration'); - if (!empty($configuration['sync']) && !empty($configuration['sync']['source_uuid']) && $configuration['sync']['source_uuid'] == $element->uuid) { - return $component; - } - } - return NULL; - } - - /** - * Get sections for the given node. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return \Drupal\layout_builder\Section[] - * An array of layout builder sections. - */ - private function getNodeSections(NodeInterface $node) { - $section_storage = $this->getSectionStorageForEntity($node); - if (!$section_storage) { - return NULL; - } - $sections = $section_storage->getSections(); - return $sections; - } - - /** - * Get the hero image attachment id on the remote if available. - * - * Beause their is no dedicated field on the remote pages that designates a - * hero image, we "guess", by looking at the configued page elements on the - * remote. If the first element is of type plan_webcontent_file, then we - * assume that this is the hero image. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return int|null - * An attachment id or NULL. - */ - public function getRemoteHeroImageAttachmentId(NodeInterface $node) { - $remote_data = $this->getRemoteConfigurations($node); - $elements = $remote_data->elements ?? []; - $first_element = reset($elements); - if (!$first_element || $first_element->type != 'plan_webcontent_file') { - return NULL; - } - return $first_element->configuration?->attachment_id; - } - - /** - * Get the urr of the hero image on the remote if available. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return string|null - * A url string or NULL. - */ - public function getRemoteHeroImageUrl(NodeInterface $node) { - $attachment_id = $this->getRemoteHeroImageAttachmentId($node); - if (!$attachment_id) { - return NULL; - } - /** @var \Drupal\ghi_plans\Plugin\EndpointQuery\AttachmentQuery $attachment_query */ - $attachment_query = $this->endpointQueryManager->createInstance('attachment_query'); - $attachment = $attachment_query->getAttachment($attachment_id); - return $attachment instanceof FileAttachment ? $attachment->getUrl() : NULL; - } - - /** - * Check if the hero image is in sync. - * - * @param \Drupal\node\NodeInterface $node - * The node object. - * - * @return bool - * TRUE if in sync, FALSE otherwise. - */ - public function isHeroImageSynced(NodeInterface $node) { - $remote_attachment_id = $this->getRemoteHeroImageAttachmentId($node); - $local_hero_image_conf = $node->get('field_hero_image')->get(0)->getValue(); - $local_source = !empty($local_hero_image_conf['source']) ? $local_hero_image_conf['source'] : NULL; - if ($remote_attachment_id && (!$local_source || $local_source != 'hpc_webcontent_file_attachment')) { - // If we have a remote id and no local file attachment is configured, - // it's out of sync. - return FALSE; - } - if (empty($local_hero_image_conf['settings']['hpc_webcontent_file_attachment'])) { - // No settings for the local hero image means it's using default - // fallbacks, so there probably is an image visible, but not sure. - return NULL; - } - $local_attachment_id = $local_hero_image_conf['settings']['hpc_webcontent_file_attachment']['attachment_id'] ?? NULL; - return $remote_attachment_id == $local_attachment_id; - } - - /** - * Clear layout builders shared temp store. - * - * @param \Drupal\node\NodeInterface $node - * The node for which elements should be synced. - * @param \Drupal\Core\Messenger\MessengerInterface $messenger - * A messenger to use for result messages. - */ - private function layoutManagerDiscardChanges(NodeInterface $node, MessengerInterface $messenger) { - $section_storage = $this->getSectionStorageForEntity($node); - // @todo See if the view mode can be retrieved somehow. - $section_storage->setContextValue('view_mode', 'default'); - $this->layoutTempstoreRepository->delete($section_storage); - $messenger->addMessage($this->t('Cleared layout builder temporary storage')); - } - - /** - * Get the sync settings. - * - * @return \Drupal\Core\Config\ImmutableConfig - * A settings object. - */ - private function getSettings() { - return $this->config->get('ghi_element_sync.settings'); - } - - /** - * Get the sync source URL. - * - * @return string - * The sync source url. - */ - public function getSyncSourceUrl() { - return $this->getSettings()->get('sync_source'); - } - - /** - * Get the request url for a remote query. - * - * @param array $args - * The args that will be added to the plan elements export endpoint. - * - * @return string - * The request url as a string. - */ - public function getRequestUrl(array $args) { - $source_url = rtrim($this->getSyncSourceUrl(), '/'); - return $source_url . '/admin/hpc/plan-elements/export/' . implode('/', $args) . '?time=' . microtime(TRUE); - } - - /** - * Get the request options. - * - * This includes authentication headers and an secret cookie for additional - * authentication. - * - * @return array - * An array of headers. - */ - public function getRequestOptions() { - $headers = []; - $settings = $this->getSettings(); - $basic_auth = $settings->get('basic_auth'); - if ($basic_auth && !empty($basic_auth['user']) && !empty($basic_auth['pass'])) { - $headers['Authorization'] = 'Basic ' . base64_encode($basic_auth['user'] . ':' . $basic_auth['pass']); - } - - $cookies = [ - 'access_key' => $settings->get('access_key'), - ]; - $jar = CookieJar::fromArray($cookies, parse_url($settings->get('sync_source'), PHP_URL_HOST)); - return [ - 'headers' => $headers, - 'cookies' => $jar, - ]; - } - - /** - * Get the available node types for syncing. - * - * @return array - * An array of node type names. - */ - public function getAvailableNodeTypes() { - return $this->getSettings()->get('node_types') ?? []; - } - -} diff --git a/html/modules/custom/ghi_element_sync/src/SyncableBlockInterface.php b/html/modules/custom/ghi_element_sync/src/SyncableBlockInterface.php deleted file mode 100644 index 0ae55969c..000000000 --- a/html/modules/custom/ghi_element_sync/src/SyncableBlockInterface.php +++ /dev/null @@ -1,32 +0,0 @@ -getMasterRequest(); + $request = $request_stack->getMainRequest(); /** @var \Drupal\node\Entity\Node $node */ $node = $request->attributes->has('node') ? $request->attributes->get('node') : NULL; if (!$node instanceof NodeInterface || !$node->getFieldDefinitions() || !$node->access()) { diff --git a/html/modules/custom/ghi_local_tasks/ghi_local_tasks.info.yml b/html/modules/custom/ghi_local_tasks/ghi_local_tasks.info.yml index 5cb8b485c..3bf15d97d 100644 --- a/html/modules/custom/ghi_local_tasks/ghi_local_tasks.info.yml +++ b/html/modules/custom/ghi_local_tasks/ghi_local_tasks.info.yml @@ -3,7 +3,7 @@ description: Provide improved local tasks in the admin toolbar. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - gin_toolbar:gin_toolbar diff --git a/html/modules/custom/ghi_menu/ghi_menu.info.yml b/html/modules/custom/ghi_menu/ghi_menu.info.yml index c59395858..8163fe191 100644 --- a/html/modules/custom/ghi_menu/ghi_menu.info.yml +++ b/html/modules/custom/ghi_menu/ghi_menu.info.yml @@ -3,7 +3,7 @@ description: Provide logic around menus. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - ghi_sections:ghi_sections \ No newline at end of file diff --git a/html/modules/custom/ghi_plan_clusters/ghi_plan_clusters.info.yml b/html/modules/custom/ghi_plan_clusters/ghi_plan_clusters.info.yml index 587876ca1..931bc8a46 100644 --- a/html/modules/custom/ghi_plan_clusters/ghi_plan_clusters.info.yml +++ b/html/modules/custom/ghi_plan_clusters/ghi_plan_clusters.info.yml @@ -3,7 +3,7 @@ description: Provide logic around plan clusters. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - ghi_subpages:ghi_subpages diff --git a/html/modules/custom/ghi_plan_clusters/ghi_plan_clusters.post_update.php b/html/modules/custom/ghi_plan_clusters/ghi_plan_clusters.post_update.php index 0ba109e39..7be76671b 100644 --- a/html/modules/custom/ghi_plan_clusters/ghi_plan_clusters.post_update.php +++ b/html/modules/custom/ghi_plan_clusters/ghi_plan_clusters.post_update.php @@ -16,6 +16,7 @@ function ghi_plan_clusters_post_update_assure_section_reference() { ->getQuery() ->condition('type', 'plan_cluster') ->notExists('field_entity_reference') + ->accessCheck(FALSE) ->execute(); if (empty($nids)) { return; diff --git a/html/modules/custom/ghi_plans/ghi_plans.info.yml b/html/modules/custom/ghi_plans/ghi_plans.info.yml index 25c63ea1c..2d6c88b04 100644 --- a/html/modules/custom/ghi_plans/ghi_plans.info.yml +++ b/html/modules/custom/ghi_plans/ghi_plans.info.yml @@ -3,7 +3,7 @@ description: Provide logic around plans and related objects. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - hpc_api:hpc_api diff --git a/html/modules/custom/ghi_sections/ghi_sections.info.yml b/html/modules/custom/ghi_sections/ghi_sections.info.yml index 59a5ff88e..ddf73a204 100644 --- a/html/modules/custom/ghi_sections/ghi_sections.info.yml +++ b/html/modules/custom/ghi_sections/ghi_sections.info.yml @@ -3,7 +3,7 @@ description: Provide logic around page sections based on API base objects. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - drupal:layout_builder diff --git a/html/modules/custom/ghi_subpages/ghi_subpages.deploy.php b/html/modules/custom/ghi_subpages/ghi_subpages.deploy.php index 3373aa816..e67f1b00a 100644 --- a/html/modules/custom/ghi_subpages/ghi_subpages.deploy.php +++ b/html/modules/custom/ghi_subpages/ghi_subpages.deploy.php @@ -13,7 +13,7 @@ function ghi_subpages_deploy_create_standard_subpages(&$sandbox) { if (!isset($sandbox['sections'])) { // Get existing content of type "section". - $sections = \Drupal::entityQuery('node')->condition('type', 'section')->execute(); + $sections = \Drupal::entityQuery('node')->condition('type', 'section')->accessCheck(FALSE)->execute(); $sandbox['sections'] = $sections; } @@ -31,7 +31,7 @@ function ghi_subpages_deploy_create_standard_subpages(&$sandbox) { function ghi_subpages_deploy_queue_logframes(&$sandbox) { // Queue all logframes for rebuilding. /** @var \Drupal\node\NodeInterface[] $nodes */ - $node_ids = \Drupal::entityQuery('node')->condition('type', 'logframe')->execute(); + $node_ids = \Drupal::entityQuery('node')->condition('type', 'logframe')->accessCheck(FALSE)->execute(); foreach ($node_ids as $node_id) { \Drupal::queue('ghi_subpages_logframe_rebuild_queue')->createItem((object) [ 'entity_id' => $node_id, @@ -48,7 +48,7 @@ function ghi_subpages_deploy_queue_logframes(&$sandbox) { */ function ghi_subpages_deploy_update_subpage_url_aliases(&$sandbox) { if (!isset($sandbox['nodes'])) { - $sandbox['nodes'] = \Drupal::entityQuery('node')->condition('type', SubpageManager::SUPPORTED_SUBPAGE_TYPES, 'IN')->execute(); + $sandbox['nodes'] = \Drupal::entityQuery('node')->condition('type', SubpageManager::SUPPORTED_SUBPAGE_TYPES, 'IN')->accessCheck(FALSE)->execute(); drupal_flush_all_caches(); \Drupal::service('pathauto.generator')->resetCaches(); } diff --git a/html/modules/custom/ghi_subpages/ghi_subpages.info.yml b/html/modules/custom/ghi_subpages/ghi_subpages.info.yml index 135dee2ab..b1390c943 100644 --- a/html/modules/custom/ghi_subpages/ghi_subpages.info.yml +++ b/html/modules/custom/ghi_subpages/ghi_subpages.info.yml @@ -3,7 +3,7 @@ description: Provide logic around subpages for sections and global sections. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - ghi_sections:ghi_sections diff --git a/html/modules/custom/ghi_subpages/src/Controller/SubpagesAdminController.php b/html/modules/custom/ghi_subpages/src/Controller/SubpagesAdminController.php index 7220eec9d..623867eb4 100644 --- a/html/modules/custom/ghi_subpages/src/Controller/SubpagesAdminController.php +++ b/html/modules/custom/ghi_subpages/src/Controller/SubpagesAdminController.php @@ -5,10 +5,8 @@ use Drupal\Core\Access\AccessResult; use Drupal\Core\Controller\ControllerBase; use Drupal\ghi_subpages\SubpageTrait; -use Drupal\node\Access\NodeAddAccessCheck; use Drupal\node\NodeInterface; use Drupal\node\NodeTypeInterface; -use Symfony\Component\DependencyInjection\ContainerInterface; /** * Controller for autocomplete plan loading. @@ -17,29 +15,6 @@ class SubpagesAdminController extends ControllerBase { use SubpageTrait; - /** - * The node add access check service. - * - * @var \Drupal\node\Access\NodeAddAccessCheck - */ - private $nodeAddAccessCheck; - - /** - * Public constructor. - */ - public function __construct(NodeAddAccessCheck $node_add_access_check) { - $this->nodeAddAccessCheck = $node_add_access_check; - } - - /** - * {@inheritdoc} - */ - public static function create(ContainerInterface $container) { - return new static( - $container->get('access_check.node.add') - ); - } - /** * Access callback for the subpages page. * @@ -79,7 +54,7 @@ public function nodeCreateAccess(NodeTypeInterface $node_type) { return AccessResult::forbidden(); } // Fall back to node type access check. - return $this->nodeAddAccessCheck->access($this->currentUser(), $node_type); + return $this->entityTypeManager()->getAccessControlHandler('node')->createAccess($node_type->id(), $this->currentUser(), [], TRUE); } /** diff --git a/html/modules/custom/ghi_subpages/src/LogframeRebuildBatch.php b/html/modules/custom/ghi_subpages/src/LogframeRebuildBatch.php index 2c5bf201a..88583f415 100644 --- a/html/modules/custom/ghi_subpages/src/LogframeRebuildBatch.php +++ b/html/modules/custom/ghi_subpages/src/LogframeRebuildBatch.php @@ -27,7 +27,7 @@ public static function process(LogframeManager $logframe_manager, &$context) { $query = \Drupal::entityQuery('node') ->condition('type', 'logframe'); - $result = $query->execute(); + $result = $query->accessCheck(FALSE)->execute(); $context['sandbox']['node_ids'] = array_values($result); $context['sandbox']['total'] = count($context['sandbox']['node_ids']); diff --git a/html/modules/custom/ghi_subpages_custom/ghi_subpages_custom.info.yml b/html/modules/custom/ghi_subpages_custom/ghi_subpages_custom.info.yml index e7165ed29..76c11f932 100644 --- a/html/modules/custom/ghi_subpages_custom/ghi_subpages_custom.info.yml +++ b/html/modules/custom/ghi_subpages_custom/ghi_subpages_custom.info.yml @@ -3,7 +3,7 @@ description: Provide logic around custom subpages. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - ghi_sections:ghi_sections diff --git a/html/modules/custom/ghi_teams/ghi_teams.info.yml b/html/modules/custom/ghi_teams/ghi_teams.info.yml index e3809f79b..6ed48a2f4 100644 --- a/html/modules/custom/ghi_teams/ghi_teams.info.yml +++ b/html/modules/custom/ghi_teams/ghi_teams.info.yml @@ -3,7 +3,7 @@ description: Provide logic teams and content access based on team association. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - drupal:taxonomy diff --git a/html/modules/custom/ghi_teams/ghi_teams.post_update.php b/html/modules/custom/ghi_teams/ghi_teams.post_update.php index 8f28c74f3..0d900a293 100644 --- a/html/modules/custom/ghi_teams/ghi_teams.post_update.php +++ b/html/modules/custom/ghi_teams/ghi_teams.post_update.php @@ -15,6 +15,7 @@ function ghi_teams_post_update_set_new_roles() { ->getStorage('user') ->getQuery() ->condition('roles', 'editor') + ->accessCheck(FALSE) ->execute(); if (empty($uids_editor)) { return; diff --git a/html/modules/custom/ghi_templates/ghi_templates.info.yml b/html/modules/custom/ghi_templates/ghi_templates.info.yml index 7a6fecb59..3fe34ba79 100644 --- a/html/modules/custom/ghi_templates/ghi_templates.info.yml +++ b/html/modules/custom/ghi_templates/ghi_templates.info.yml @@ -3,7 +3,7 @@ description: Provide templating for GHI layout builder pages. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - drupal:layout_builder diff --git a/html/modules/custom/ghi_user/ghi_user.info.yml b/html/modules/custom/ghi_user/ghi_user.info.yml index 666719d3b..4cda4aa1d 100644 --- a/html/modules/custom/ghi_user/ghi_user.info.yml +++ b/html/modules/custom/ghi_user/ghi_user.info.yml @@ -3,7 +3,7 @@ description: Provide user logic specific to GHI. package: GHI type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - ghi_subpages:ghi_subpages \ No newline at end of file diff --git a/html/modules/custom/hpc_api/hpc_api.info.yml b/html/modules/custom/hpc_api/hpc_api.info.yml index c59f1e239..06d0453ab 100644 --- a/html/modules/custom/hpc_api/hpc_api.info.yml +++ b/html/modules/custom/hpc_api/hpc_api.info.yml @@ -4,7 +4,7 @@ package: HPC configure: hpc_api.config type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - migrate_plus:migrate_plus \ No newline at end of file diff --git a/html/modules/custom/hpc_api/src/GeoJsonService.php b/html/modules/custom/hpc_api/src/GeoJsonService.php index 57cf257df..aa6e36280 100644 --- a/html/modules/custom/hpc_api/src/GeoJsonService.php +++ b/html/modules/custom/hpc_api/src/GeoJsonService.php @@ -31,7 +31,7 @@ public function getGeoJson($filepath, $refresh = FALSE) { // First see if we have a local copy already. $local_path = self::GEO_JSON_DIR . '/' . basename($filepath); if (file_exists($local_path) && !$refresh) { - if (filemtime($local_path) < REQUEST_TIME - self::GEO_JSON_LIFETIME) { + if (filemtime($local_path) < \Drupal::time()->getRequestTime() - self::GEO_JSON_LIFETIME) { $this->getGeoJson($filepath_remote, TRUE); } else { diff --git a/html/modules/custom/hpc_api/tests/src/Unit/EndpointQueryTest.php b/html/modules/custom/hpc_api/tests/src/Unit/EndpointQueryTest.php index 0db64d41f..fce00cce5 100644 --- a/html/modules/custom/hpc_api/tests/src/Unit/EndpointQueryTest.php +++ b/html/modules/custom/hpc_api/tests/src/Unit/EndpointQueryTest.php @@ -13,6 +13,7 @@ use Drupal\Tests\UnitTestCase; use GuzzleHttp\Psr7\Response; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * @covers Drupal\hpc_api\Query\EndpointQuery @@ -21,6 +22,8 @@ */ class EndpointQueryTest extends UnitTestCase { + use ProphecyTrait; + /** * The endpoint query instance. * diff --git a/html/modules/custom/hpc_common/hpc_common.info.yml b/html/modules/custom/hpc_common/hpc_common.info.yml index accfb2cd7..54f09caf5 100644 --- a/html/modules/custom/hpc_common/hpc_common.info.yml +++ b/html/modules/custom/hpc_common/hpc_common.info.yml @@ -1,9 +1,8 @@ name: 'HPC Common' type: module description: 'Common base definitions for HPC features in Drupal 8' -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 package: 'HPC' dependencies: - drupal:node - - hpc_api:hpc_api - - tippy:tippy \ No newline at end of file + - hpc_api:hpc_api \ No newline at end of file diff --git a/html/modules/custom/hpc_common/hpc_common.libraries.yml b/html/modules/custom/hpc_common/hpc_common.libraries.yml index e1f7ff58b..bfc3ec17f 100644 --- a/html/modules/custom/hpc_common/hpc_common.libraries.yml +++ b/html/modules/custom/hpc_common/hpc_common.libraries.yml @@ -6,11 +6,25 @@ icon: css: theme: css/icon.css: {} + +# atomiks.github.io/tippyjs +tippy.js: + remote: https://github.com/atomiks/tippyjs + license: &tippy_license + name: MIT + url: https://github.com/atomiks/tippyjs/blob/master/LICENSE + gpl-compatible: true + version: 6 + js: + https://unpkg.com/tippy.js@6: { type: external, minified: true, attributes: { defer: false, async: false } } + dependencies: + - core/popperjs + tooltip: js: js/tooltip.js: {} dependencies: - - tippy/tippy.js + - hpc_common/tippy.js popover: css: theme: @@ -26,4 +40,4 @@ sparkline: js/sparkline.js: {} dependencies: - hpc_common/d3 - - tippy/tippy.js \ No newline at end of file + - hpc_common/tippy.js \ No newline at end of file diff --git a/html/modules/custom/hpc_common/src/Helpers/NodeHelper.php b/html/modules/custom/hpc_common/src/Helpers/NodeHelper.php index ad5ad4f21..4144741e0 100644 --- a/html/modules/custom/hpc_common/src/Helpers/NodeHelper.php +++ b/html/modules/custom/hpc_common/src/Helpers/NodeHelper.php @@ -117,6 +117,7 @@ public static function getNodesFromTitle($title, $bundle, $operator = 'CONTAINS' ->condition('title', $title, $operator) ->condition('type', $bundle) ->sort('nid', 'DESC') + ->accessCheck() ->execute(); $nodes = Node::loadMultiple($nids); $nodes = array_filter($nodes, function ($node) { @@ -193,6 +194,7 @@ public static function getTitleFromOriginalId($original_id, $bundle) { public static function getOriginalIdFromTitle($title, $bundle) { $query = \Drupal::entityQuery('node'); $query->condition('title', $title)->condition('type', $bundle); + $query->accessCheck(); $result = $query->execute(); if (empty($result)) { return NULL; diff --git a/html/modules/custom/hpc_common/src/Helpers/TaxonomyHelper.php b/html/modules/custom/hpc_common/src/Helpers/TaxonomyHelper.php index cb3137911..406c16973 100644 --- a/html/modules/custom/hpc_common/src/Helpers/TaxonomyHelper.php +++ b/html/modules/custom/hpc_common/src/Helpers/TaxonomyHelper.php @@ -321,6 +321,7 @@ public static function getTermIdsByFieldValue($field_name, $value, $vid) { $result = $query ->condition($field_name, $value) ->condition('vid', $vid) + ->accessCheck() ->execute(); if (empty($result)) { diff --git a/html/modules/custom/hpc_common/src/Helpers/ThemeHelper.php b/html/modules/custom/hpc_common/src/Helpers/ThemeHelper.php index f33be2aa1..8e402a912 100644 --- a/html/modules/custom/hpc_common/src/Helpers/ThemeHelper.php +++ b/html/modules/custom/hpc_common/src/Helpers/ThemeHelper.php @@ -141,7 +141,9 @@ public static function getNumberSuffix($scale, $abbreviation = TRUE) { * Get the URI to the FTS icon. */ public static function getUriToFtsIcon() { - return '/' . drupal_get_path('module', 'hpc_common') . '/assets/fts-logo-mobile.png'; + /** @var \Drupal\Core\Extension\ExtensionPathResolver $path_resolver */ + $path_resolver = \Drupal::service('extension.path.resolver'); + return '/' . $path_resolver->getPath('module', 'hpc_common') . '/assets/fts-logo-mobile.png'; } /** diff --git a/html/modules/custom/hpc_common/src/Plugin/HPCBlockBase.php b/html/modules/custom/hpc_common/src/Plugin/HPCBlockBase.php index 4334d0cfd..1c5d8eaf8 100644 --- a/html/modules/custom/hpc_common/src/Plugin/HPCBlockBase.php +++ b/html/modules/custom/hpc_common/src/Plugin/HPCBlockBase.php @@ -77,7 +77,7 @@ abstract class HPCBlockBase extends BlockBase implements HPCPluginInterface, Con /** * The request stack. * - * @var \Symfony\Component\HttpFoundation\RequestStack + * @var \Drupal\Core\Http\RequestStack */ protected $requestStack; diff --git a/html/modules/custom/hpc_common/templates/hpc-markup-wrapper.html.twig b/html/modules/custom/hpc_common/templates/hpc-markup-wrapper.html.twig index 89494a5ec..bcdbff80f 100644 --- a/html/modules/custom/hpc_common/templates/hpc-markup-wrapper.html.twig +++ b/html/modules/custom/hpc_common/templates/hpc-markup-wrapper.html.twig @@ -1,7 +1,7 @@ -{% spaceless %} +{% apply spaceless %} {% if markup_element is not empty %} <{{ markup_element }} class="{{ class }}">{{ output }} {% else %} {{ output }} {% endif %} -{% endspaceless %} \ No newline at end of file +{% endapply %} \ No newline at end of file diff --git a/html/modules/custom/hpc_common/tests/src/Unit/BlockHelperTest.php b/html/modules/custom/hpc_common/tests/src/Unit/BlockHelperTest.php index 9f92b1869..ed4d16d84 100644 --- a/html/modules/custom/hpc_common/tests/src/Unit/BlockHelperTest.php +++ b/html/modules/custom/hpc_common/tests/src/Unit/BlockHelperTest.php @@ -7,12 +7,15 @@ use Drupal\hpc_common\Helpers\BlockHelper; use Drupal\hpc_common\Plugin\HPCBlockBase; use Drupal\Tests\UnitTestCase; +use Prophecy\PhpUnit\ProphecyTrait; /** * @covers Drupal\hpc_common\Helpers\BlockHelper */ class BlockHelperTest extends UnitTestCase { + use ProphecyTrait; + /** * The block helper class. * diff --git a/html/modules/custom/hpc_common/tests/src/Unit/ContextHelperTest.php b/html/modules/custom/hpc_common/tests/src/Unit/ContextHelperTest.php index 1d072e1ee..17dae98c9 100644 --- a/html/modules/custom/hpc_common/tests/src/Unit/ContextHelperTest.php +++ b/html/modules/custom/hpc_common/tests/src/Unit/ContextHelperTest.php @@ -6,12 +6,15 @@ use Drupal\hpc_common\Helpers\ContextHelper; use Drupal\node\Entity\Node; use Drupal\Tests\UnitTestCase; +use Prophecy\PhpUnit\ProphecyTrait; /** * @covers Drupal\hpc_common\Helpers\ContextHelper */ class ContextHelperTest extends UnitTestCase { + use ProphecyTrait; + /** * The context helper class. * diff --git a/html/modules/custom/hpc_common/tests/src/Unit/NodeHelperTest.php b/html/modules/custom/hpc_common/tests/src/Unit/NodeHelperTest.php index 42e1e4a55..97e5dadbc 100644 --- a/html/modules/custom/hpc_common/tests/src/Unit/NodeHelperTest.php +++ b/html/modules/custom/hpc_common/tests/src/Unit/NodeHelperTest.php @@ -13,12 +13,15 @@ use Drupal\node\NodeStorageInterface; use Drupal\Tests\UnitTestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * @covers Drupal\hpc_common\Helpers\NodeHelper */ class NodeHelperTest extends UnitTestCase { + use ProphecyTrait; + /** * The node helper class. * @@ -392,6 +395,7 @@ public function testGetOriginalIdFromTitle($title, $bundle, $original_id, $nid, // Mock entityQuery methods. $this->entityQuery->condition(Argument::any(), Argument::any())->willReturn($this->entityQuery); + $this->entityQuery->accessCheck()->willReturn($this->entityQuery); $this->entityQuery->execute()->willReturn($query_result); // Get the nodeStorage in entityTypeManager. @@ -454,6 +458,7 @@ public function testGetNodesFromTitle() { // Mock entityQuery methods. $this->entityQuery->condition(Argument::any(), Argument::any(), Argument::any())->willReturn($this->entityQuery); $this->entityQuery->sort(Argument::any(), Argument::any())->willReturn($this->entityQuery); + $this->entityQuery->accessCheck()->willReturn($this->entityQuery); $this->entityQuery->execute()->willReturn(['1', '2', '3']); // Get the nodeStorage in entityTypeManager. diff --git a/html/modules/custom/hpc_common/tests/src/Unit/RequestHelperTest.php b/html/modules/custom/hpc_common/tests/src/Unit/RequestHelperTest.php index b8cb3f557..5edc96a24 100644 --- a/html/modules/custom/hpc_common/tests/src/Unit/RequestHelperTest.php +++ b/html/modules/custom/hpc_common/tests/src/Unit/RequestHelperTest.php @@ -6,6 +6,7 @@ use Drupal\Core\Routing\RouteMatchInterface; use Drupal\hpc_common\Helpers\RequestHelper; use Drupal\Tests\UnitTestCase; +use Prophecy\PhpUnit\ProphecyTrait; use Symfony\Component\HttpFoundation\ParameterBag; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RequestStack; @@ -15,6 +16,8 @@ */ class RequestHelperTest extends UnitTestCase { + use ProphecyTrait; + /** * The request helper class. * diff --git a/html/modules/custom/hpc_common/tests/src/Unit/TaxonomyHelperTest.php b/html/modules/custom/hpc_common/tests/src/Unit/TaxonomyHelperTest.php index f70ee0bce..5fc24bb9e 100644 --- a/html/modules/custom/hpc_common/tests/src/Unit/TaxonomyHelperTest.php +++ b/html/modules/custom/hpc_common/tests/src/Unit/TaxonomyHelperTest.php @@ -10,12 +10,15 @@ use Drupal\taxonomy\Entity\Term; use Drupal\taxonomy\TermStorageInterface; use Drupal\Tests\UnitTestCase; +use Prophecy\PhpUnit\ProphecyTrait; /** * @covers Drupal\hpc_common\Helpers\TaxonomyHelper */ class TaxonomyHelperTest extends UnitTestCase { + use ProphecyTrait; + /** * The taxonomy helper class. * @@ -303,6 +306,7 @@ public function testGetTermIdsByFieldValue($field_name, $value, $vid, $query_res // Mock entityQuery methods. $this->entityQuery->condition($field_name, $value)->willReturn($this->entityQuery); $this->entityQuery->condition('vid', $vid)->willReturn($this->entityQuery); + $this->entityQuery->accessCheck()->willReturn($this->entityQuery); $this->entityQuery->execute()->willReturn($query_result); // Mock getQuery. diff --git a/html/modules/custom/hpc_common/tests/src/Unit/ThemeHelperTest.php b/html/modules/custom/hpc_common/tests/src/Unit/ThemeHelperTest.php index f18e06278..843d3025d 100644 --- a/html/modules/custom/hpc_common/tests/src/Unit/ThemeHelperTest.php +++ b/html/modules/custom/hpc_common/tests/src/Unit/ThemeHelperTest.php @@ -6,6 +6,7 @@ use Drupal\Core\Render\RendererInterface; use Drupal\hpc_common\Helpers\ThemeHelper; use Drupal\Tests\UnitTestCase; +use Prophecy\PhpUnit\ProphecyTrait; use Twig\Environment; /** @@ -13,6 +14,8 @@ */ class ThemeHelperTest extends UnitTestCase { + use ProphecyTrait; + /** * The theme helper class. * diff --git a/html/modules/custom/hpc_common/tests/src/Unit/UserHelperTest.php b/html/modules/custom/hpc_common/tests/src/Unit/UserHelperTest.php index fbb755df1..389553ad9 100644 --- a/html/modules/custom/hpc_common/tests/src/Unit/UserHelperTest.php +++ b/html/modules/custom/hpc_common/tests/src/Unit/UserHelperTest.php @@ -7,12 +7,15 @@ use Drupal\hpc_common\Helpers\UserHelper; use Drupal\Tests\UnitTestCase; use Prophecy\Argument; +use Prophecy\PhpUnit\ProphecyTrait; /** * @covers Drupal\hpc_common\Helpers\UserHelper */ class UserHelperTest extends UnitTestCase { + use ProphecyTrait; + /** * The user helper class. * diff --git a/html/modules/custom/hpc_downloads/hpc_downloads.info.yml b/html/modules/custom/hpc_downloads/hpc_downloads.info.yml index 79db156e5..c5af9820c 100644 --- a/html/modules/custom/hpc_downloads/hpc_downloads.info.yml +++ b/html/modules/custom/hpc_downloads/hpc_downloads.info.yml @@ -1,7 +1,7 @@ name: 'HPC Downloads' type: module description: 'Downloads for HPC blocks in Drupal 8' -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 package: 'HPC' configure: hpc_downloads.config diff --git a/html/modules/custom/hpc_downloads/src/Controller/DownloadReportController.php b/html/modules/custom/hpc_downloads/src/Controller/DownloadReportController.php index ba1133e3d..01fc1de77 100644 --- a/html/modules/custom/hpc_downloads/src/Controller/DownloadReportController.php +++ b/html/modules/custom/hpc_downloads/src/Controller/DownloadReportController.php @@ -6,6 +6,7 @@ use Drupal\Component\Utility\Unicode; use Drupal\Core\Controller\ControllerBase; use Drupal\Core\File\FileSystemInterface; +use Drupal\Core\File\FileUrlGeneratorInterface; use Drupal\Core\Link; use Drupal\Core\Render\Markup; use Drupal\Core\Url; @@ -28,11 +29,19 @@ class DownloadReportController extends ControllerBase { */ private $fileSystem; + /** + * The file url generator service. + * + * @var \Drupal\Core\File\FileUrlGenerator + */ + private $fileUrlGenerator; + /** * Public constructor. */ - public function __construct(FileSystemInterface $file_system) { + public function __construct(FileSystemInterface $file_system, FileUrlGeneratorInterface $file_url_generator) { $this->fileSystem = $file_system; + $this->fileUrlGenerator = $file_url_generator; } @@ -42,6 +51,7 @@ public function __construct(FileSystemInterface $file_system) { public static function create(ContainerInterface $container) { return new static( $container->get('file_system'), + $container->get('file_url_generator'), ); } @@ -69,7 +79,7 @@ public function buildFileListPage() { $download_record = DownloadRecord::loadRecord(['file_path' => $file->uri]); $row = []; - $row[] = Link::fromTextAndUrl($filename, Url::fromUri(file_create_url($file->uri))); + $row[] = Link::fromTextAndUrl($filename, Url::fromUri($this->fileUrlGenerator->generate($file->uri))); $row[] = date('d.m.Y H:i:s', filectime($filepath)); $row[] = format_size(filesize($filepath)); $row[] = $download_record ? $this->t('Yes') : $this->t('No'); @@ -112,7 +122,7 @@ public function buildRecordListPage() { $row = []; $row[] = Link::fromTextAndUrl($record->id, Url::fromRoute('hpc_downloads.reports.download_records.view', ['id' => $record->id])); - $row[] = $file_exists ? Link::fromTextAndUrl($filename, Url::fromUri(file_create_url($record->file_path))) : $record->file_path; + $row[] = $file_exists ? Link::fromTextAndUrl($filename, Url::fromUri($this->fileUrlGenerator->generate($record->file_path))) : $record->file_path; $row[] = $this->getSourceLink($record->url); $row[] = $this->getUserName($record->uid); $row[] = $this->getStatusLabel($record->status); diff --git a/html/modules/custom/hpc_downloads/src/DownloadMethods/Excel.php b/html/modules/custom/hpc_downloads/src/DownloadMethods/Excel.php index 06a541451..a297c9c77 100644 --- a/html/modules/custom/hpc_downloads/src/DownloadMethods/Excel.php +++ b/html/modules/custom/hpc_downloads/src/DownloadMethods/Excel.php @@ -8,6 +8,7 @@ use Drupal\hpc_downloads\DownloadRecord; use Drupal\hpc_downloads\Helpers\FileHelper; +use Drupal\phpexcel\PHPExcel; /** * Create Excel files. @@ -437,15 +438,16 @@ public static function writeFile(array $download_record, array $data, array $opt // For huge data sets, e.g. in custom search, PHP Excel might get problems // processing all the data. To prevent this, we disable timeouts here. set_time_limit(0); - module_load_include('inc', 'phpexcel'); + /** @var \Drupal\phpexcel\PHPExcel $phpexcel */ + $phpexcel = \Drupal::service('phpexcel'); // This is very slow for larger documents, or for documents with a lot of // columns, like in data search. ini_set('memory_limit', '512M'); - $status = phpexcel_export($data['header'], $data['rows'], \Drupal::service('file_system')->realpath($options['temp_name']), $options); + $status = $phpexcel->export($data['header'], $data['rows'], \Drupal::service('file_system')->realpath($options['temp_name']), $options); set_time_limit(30); - return self::finaliseFileGeneration($status == PHPEXCEL_SUCCESS, $options, $download_record); + return self::finaliseFileGeneration($status == PHPExcel::PHPEXCEL_SUCCESS, $options, $download_record); } /** diff --git a/html/modules/custom/hpc_downloads/src/DownloadSource/ViewsQueryBatchedSource.php b/html/modules/custom/hpc_downloads/src/DownloadSource/ViewsQueryBatchedSource.php index 0884c9a8f..48bb73452 100644 --- a/html/modules/custom/hpc_downloads/src/DownloadSource/ViewsQueryBatchedSource.php +++ b/html/modules/custom/hpc_downloads/src/DownloadSource/ViewsQueryBatchedSource.php @@ -408,7 +408,8 @@ public static function prepareDataBatch(HPCBatchedDownloadExcelInterface $handle * The batch contexts. */ public static function segmentBatch(HPCBatchedDownloadExcelInterface $handler, array $download_record, array &$context) { - module_load_include('inc', 'phpexcel'); + /** @var \Drupal\phpexcel\PHPExcel $phpexcel */ + $phpexcel = \Drupal::service('phpexcel'); // Prepare the rows. $limit = \Drupal::config('hpc_downloads.settings')->get('excel_segment_size'); @@ -437,7 +438,7 @@ public static function segmentBatch(HPCBatchedDownloadExcelInterface $handler, a $initial_data[$sheet_key] = $sheet_key == 'Meta data' ? $sheet_data : []; } ini_set('memory_limit', '512M'); - phpexcel_export($build['header'], $initial_data, $temp_file, $options); + $phpexcel->export($build['header'], $initial_data, $temp_file, $options); // Remove the meta data sheet. array_shift($build['rows']); @@ -526,7 +527,8 @@ public static function segmentBatch(HPCBatchedDownloadExcelInterface $handler, a * The batch contexts. */ public static function writeBatch(HPCBatchedDownloadExcelInterface $handler, array $download_record, array &$context) { - module_load_include('inc', 'phpexcel'); + /** @var \Drupal\phpexcel\PHPExcel $phpexcel */ + $phpexcel = \Drupal::service('phpexcel'); $options = $context['results']['options']; $temp_file = $context['results']['temp_file']; @@ -554,7 +556,7 @@ public static function writeBatch(HPCBatchedDownloadExcelInterface $handler, arr // Write the current data to the file. ini_set('memory_limit', '512M'); - phpexcel_export($options['header'], $sheets, $temp_file, $options); + $phpexcel->export($options['header'], $sheets, $temp_file, $options); // Inform the batch engine that we are not finished, // and provide an estimation of the completion level we reached. diff --git a/html/modules/custom/hpc_security/hpc_security.info.yml b/html/modules/custom/hpc_security/hpc_security.info.yml index 4de9718cc..d6eaa52cb 100644 --- a/html/modules/custom/hpc_security/hpc_security.info.yml +++ b/html/modules/custom/hpc_security/hpc_security.info.yml @@ -1,7 +1,7 @@ name: 'HPC Security' type: module description: 'Security features for HPC Drupal sites' -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 package: 'HPC' dependencies: diff --git a/html/modules/custom/page_manager_publishable_variants/page_manager_publishable_variants.info.yml b/html/modules/custom/page_manager_publishable_variants/page_manager_publishable_variants.info.yml index ca4b44ed5..b0cbf8f71 100644 --- a/html/modules/custom/page_manager_publishable_variants/page_manager_publishable_variants.info.yml +++ b/html/modules/custom/page_manager_publishable_variants/page_manager_publishable_variants.info.yml @@ -3,7 +3,7 @@ description: Provides a "published" feature for page manager variants. package: Layout type: module -core_version_requirement: ^8 || ^9 +core_version_requirement: ^9 || ^10 dependencies: - page_manager:page_manager \ No newline at end of file diff --git a/html/themes/custom/common_design_subtheme/common_design_subtheme.info.yml b/html/themes/custom/common_design_subtheme/common_design_subtheme.info.yml index fc3baa7b2..3b828dab1 100644 --- a/html/themes/custom/common_design_subtheme/common_design_subtheme.info.yml +++ b/html/themes/custom/common_design_subtheme/common_design_subtheme.info.yml @@ -1,7 +1,7 @@ name: OCHA Common Design sub theme type: theme description: OCHA Common Design sub theme -core_version_requirement: ^8.8 || ^9 +core_version_requirement: ^9 || ^10 base theme: common_design logo: 'img/logos/logo-humanitarian-action.svg' diff --git a/html/themes/custom/common_design_subtheme/common_design_subtheme.libraries.yml b/html/themes/custom/common_design_subtheme/common_design_subtheme.libraries.yml index 227d5bbbb..da6330203 100644 --- a/html/themes/custom/common_design_subtheme/common_design_subtheme.libraries.yml +++ b/html/themes/custom/common_design_subtheme/common_design_subtheme.libraries.yml @@ -41,8 +41,8 @@ ghi-table-search: css: theme: components/ghi-table-search/ghi-table-search.css: {} - dependencies: - - core/jquery.ui + # dependencies: + # - core/jquery.ui ghi-table-progress-indicator: css: @@ -110,8 +110,8 @@ ghi-scrollable-table: components/ghi-scrollable-table/ghi-scrollable-table.css: {} js: components/ghi-scrollable-table/ghi-scrollable-table.js: {} - dependencies: - - core/jquery.ui + # dependencies: + # - core/jquery.ui # Copy libraries from GHO datawrapper-responsive-iframe: diff --git a/html/themes/custom/common_design_subtheme/components/gho-page-node/gho-page-node.css b/html/themes/custom/common_design_subtheme/components/gho-page-node/gho-page-node.css index c6f915246..0107a89a0 100644 --- a/html/themes/custom/common_design_subtheme/components/gho-page-node/gho-page-node.css +++ b/html/themes/custom/common_design_subtheme/components/gho-page-node/gho-page-node.css @@ -1,7 +1,7 @@ /* Reset the max-width and paddings of the main content area so that it uses the * full width allowing elements like hero images to also use the full width. */ -.path-frontpage .cd-layout-container main.cd-container, -.path-node .cd-layout-container main.cd-container { +.path-frontpage .cd-page-layout-container main.cd-container, +.path-node .cd-page-layout-container main.cd-container { max-width: var(--cd-max-body-width); padding-right: 0; padding-left: 0; diff --git a/html/themes/custom/common_design_subtheme/css/styles.css b/html/themes/custom/common_design_subtheme/css/styles.css index 8a17e2d9e..71a360c22 100644 --- a/html/themes/custom/common_design_subtheme/css/styles.css +++ b/html/themes/custom/common_design_subtheme/css/styles.css @@ -1 +1 @@ -@import"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400%3B500%3B700&display=swap";@import"https://fonts.googleapis.com/css?family=Roboto:ital,wght@0,300%3B0,400%3B0,500%3B0,700%3B0,900%3B1,400%3B1,700&display=swap";@import"https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@400%3B700&display=swap";@import"https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400%3B700&display=swap";@import"https://fonts.googleapis.com/icon?family=Material+Icons&display=swap";:root{--cd-ocha-blue: #1f69b3;--cd-blue--dark: #144372;--cd-blue--bright: #82b5e9;--cd-blue--light: #d4e5f7;--cd-highlight-red: #e56a54;--cd-contrast-red: #e00000;--cd-white: #fff;--cd-grey--lighter: #f5f5f5;--cd-grey--light: #eee;--cd-grey--mid: #595959;--cd-grey--dark: #4d4d4d;--cd-default-text-color: var(--cd-grey--dark);--cd-default-border-color: #dfdede;--cd-default-background-color: var(--cd-grey--lighter);--cd-black: #000;--cd-blue-grey: #e6ecf1;--cd-blue-grey--dark: #d3dde5;--cd-blue-grey--light: #ebf0f4;--cd-rgb-ocha-blue: 2, 108, 182;--cd-rgb-grey--mid: 89, 89, 89;--cd-rgb-grey--dark: 74, 74, 74;--cd-rgb-highlight-red: 229, 106, 84;--cd-rgb-blue-grey--dark: 211, 221, 229;--cd-max-page-width: 1400px;--cd-max-body-width: 1300px;--cd-max-width: 1220px;--cd-max-content-width: 820px;--cd-container-padding: 0.75rem;--cd-container-padding-tablet: 1.5rem;--cd-container-padding-xlarge: 3rem;--cd-flow-space: 1rem;--cd-bumper-space: 1rem;--cd-footer-row-number: 5;--cd-red: #cd3a1f;--cd-red--light: #f8d8d3;--cd-orange: #db7b18;--cd-orange--light: #fae6d1;--cd-yellow: #d5de26;--cd-yellow--light: #f7f8d3;--cd-green: #7fb92f;--cd-green--light: #e8f5d6;--cd-font-size--tiny: 0.75rem;--cd-font-size--small: 0.875rem;--cd-font-size--default: 1rem;--cd-font-size--base: 1.125rem;--cd-font-size--medium: 1.375rem;--cd-font-size--large: 1.625rem;--cd-font-size--2xbase: 1.875rem;--cd-font-size--2xmedium: 2.375rem;--cd-font-size--2xlarge: 2.875rem;--cd-font: helvetica, arial, sans-serif;--cd-font--system: system-ui;--cd-font--noto: "Noto Sans", sans-serif;--cd-font--noto-kufi: "Noto Kufi Arabic", sans-serif;--cd-font--roboto: "Roboto", helvetica, arial, sans-serif;--cd-font--roboto-condensed: "Roboto Condensed", helvetica, arial, sans-serif;--cd-font--roboto-slab: "Roboto Slab", helvetica, arial, sans-serif}@supports(display: grid){@media(min-width: 768px){.cd-layout-container{grid-template-rows:115px auto 1fr auto;grid-auto-rows:auto}}}@media(min-width: 1024px){.cd-layout-with-sidebar-first .cd-layout-sidebar-first,.cd-layout-with-sidebar-second .cd-layout-sidebar-second{flex-basis:200px}}.cd-layout-with-sidebar-both .cd-layout-sidebar-first{margin-bottom:1rem}@media(min-width: 768px){.cd-layout-with-sidebar-both .cd-layout-sidebar-first{flex-basis:200px}}@media(min-width: 1024px){.cd-layout-with-sidebar-both .cd-layout-sidebar-first{margin-bottom:0}}@media(min-width: 1024px){.cd-layout-two-col .cd-layout-sidebar-first{flex-basis:200px;margin-top:0}}.cd-global-header__dropdown{z-index:1002;background:var(--cd-grey--light)}.cd-global-header button[aria-expanded=true]::before{border-color:rgba(0,0,0,0) rgba(0,0,0,0) var(--cd-grey--light)}.cd-header button:focus{outline:none}.cd-global-header{background:var(--cd-grey--lighter);background-image:linear-gradient(-180deg, var(--cd-grey--lighter) 67%, var(--cd-grey--light) 97%)}.cd-global-header .cd-global-header__actions,.cd-global-header .cd-global-header__actions>*{background:rgba(0,0,0,0)}.cd-global-header svg{fill:var(--ghi-default-text-color) !important}.cd-global-header a,.cd-global-header *{color:var(--ghi-default-text-color)}.cd-global-header .menu>li:last-child{padding-right:0}.cd-global-header .menu>li a{color:var(--ghi-default-text-color)}.cd-global-header .menu>li a::after{background:var(--cd-default-border-color)}.cd-global-header .menu>li:last-child a{padding-right:0}.cd-global-header .menu>li:last-child a::after{display:none}.cd-site-header{border-bottom:0}.cd-site-header .cd-nav>.menu>li:last-child{padding-right:0}.cd-site-header__inner{height:80px}@supports(display: grid){.cd-site-header__inner{grid-template-rows:80px;grid-template-columns:2fr 1fr}@media(min-width: 768px){.cd-site-header__inner{grid-template-columns:260px 1fr}}}.cd-language-switcher__btn:focus{outline:none}.cd-user-menu__dropdown li a:focus{outline:none}.region-header-logo{display:flex}.region-header-logo .cd-site-logo{width:100%;height:auto;margin:0 0 0 -1.5rem;padding-left:.5rem;text-decoration:none;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--base);font-weight:bold;line-height:1.3rem}.region-header-logo .cd-site-logo:focus{outline:none}@supports(display: flex){.region-header-logo .cd-site-logo{display:flex;flex-direction:column;align-items:flex-start;justify-content:center}}@media(max-width: 767px){.region-header-logo .cd-site-logo{margin:1.2rem 0;background:url("../../../custom/common_design_subtheme/img/logos/logo-humanitarian-action.svg") center no-repeat;background:linear-gradient(transparent, transparent),url("../../../custom/common_design_subtheme/img/logos/logo-humanitarian-action.svg") center no-repeat;background-position:0 center}}@media(min-width: 768px){.region-header-logo .cd-site-logo img{width:auto;height:40px}}.region-header-logo .cd-site-slogan{margin:.7rem 0 0 2rem;line-height:.8rem}.menu--main button[aria-expanded] .cd-icon--arrow-down{fill:#fed83d}.cd-nav__btn{height:80px;white-space:nowrap}.cd-nav__btn[aria-expanded] .cd-icon--arrow-down{fill:#fed83d}.cd-nav__btn[aria-expanded=true]::before{bottom:0;height:4px;background:#fed83d}.cd-site-header__nav-holder .cd-nav a,.cd-site-header__nav-holder .cd-nav span,.cd-site-header__nav-holder .cd-nav button{display:block;padding:15px 30px;text-align:left;text-decoration:none;color:var(--ghi-default-text-color)}.cd-site-header__nav-holder .cd-nav a>span,.cd-site-header__nav-holder .cd-nav span>span,.cd-site-header__nav-holder .cd-nav button>span{padding:0}html[dir=rtl] .cd-site-header__nav-holder .cd-nav a,html[dir=rtl] .cd-site-header__nav-holder .cd-nav span,html[dir=rtl] .cd-site-header__nav-holder .cd-nav button{text-align:right}.cd-site-header__nav-holder .cd-nav a:hover,.cd-site-header__nav-holder .cd-nav a:focus,.cd-site-header__nav-holder .cd-nav span:hover,.cd-site-header__nav-holder .cd-nav span:focus,.cd-site-header__nav-holder .cd-nav button:hover,.cd-site-header__nav-holder .cd-nav button:focus{color:var(--ghi-default-text-color);outline:none;background:var(--ghi-primary-background-color)}@supports(display: flex){.cd-site-header__nav-holder .cd-nav a,.cd-site-header__nav-holder .cd-nav span,.cd-site-header__nav-holder .cd-nav button{display:flex}}.cd-site-header__nav-holder .cd-nav button{width:100%;white-space:nowrap;border:0 none;background:rgba(0,0,0,0)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>button{text-transform:none;font-weight:700}.cd-site-header__nav-holder .menu .menu a,.cd-site-header__nav-holder .menu .menu span,.cd-site-header__nav-holder .menu .menu button{font-weight:normal}.cd-site-header__nav-holder .menu .menu li:hover a,.cd-site-header__nav-holder .menu .menu li:hover a span,.cd-site-header__nav-holder .menu .menu a:hover,.cd-site-header__nav-holder .menu .menu a:hover span,.cd-site-header__nav-holder .menu .menu a:focus,.cd-site-header__nav-holder .menu .menu a:focus span{color:var(--cd-ocha-orange--dark);background:var(--ghi-primary-background-color) !important}@media(max-width: 1023px){.gin--horizontal-toolbar .cd-site-header__nav-holder .cd-nav[data-cd-hidden=false]{top:calc(var(--ginHorizontalToolbarOffset) + 35px + 80px)}}@media(max-width: 1023px){.cd-site-header__nav-holder .cd-nav>ul>li>a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li>button.is-active::before{background:#fed83d}.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--collapsed>a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--collapsed>button.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--expanded>a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--expanded>button.is-active::before{background:rgba(254,216,61,.2)}.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--active-trail a::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--active-trail button::before{background:rgba(254,216,61,.2)}.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--active-trail a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--active-trail button.is-active::before{background:#fed83d}.cd-site-header__nav-holder .cd-nav>ul>li>ul>li.menu-item--active-trail a::before,.cd-site-header__nav-holder .cd-nav>ul>li>ul>li.menu-item--active-trail button::before{background:rgba(254,216,61,.6)}.cd-site-header__nav-holder .cd-nav>ul>li>ul>li.menu-item--active-trail a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li>ul>li.menu-item--active-trail button.is-active::before{background:#fed83d}}@media(min-width: 1024px){.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button{position:relative;display:flex;align-items:center;height:80px;transition:background .3s ease;background:rgba(0,0,0,0)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button::before{position:absolute;right:-1px;bottom:0;left:-1px;width:calc(100% + 2px);height:4px;content:"";transition:background .3s ease;background:rgba(0,0,0,0)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a:hover,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a.is-active,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a:focus,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span:hover,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span.is-active,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span:focus,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button:hover,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button.is-active,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button:focus{background:var(--ghi-primary-background-color)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a:hover::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a.is-active::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a:focus::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span:hover::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span.is-active::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span:focus::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button:hover::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button.is-active::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button:focus::before{background:var(--cd-primary-color)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item.menu-item--active-trail a::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item.menu-item--active-trail button::before{background:var(--cd-primary-color)}.cd-site-header__nav-holder .cd-nav>.menu>li>.menu{top:80px}.cd-site-header__nav-holder .cd-nav>.menu>li>.menu>li.menu-item--active-trail{border-left:6px solid var(--cd-primary-color)}}.cd-ocha-dropdown__link a:hover{color:inherit !important}.cd-ocha-dropdown__link a:focus{outline:none}.cd-search__btn{color:var(--ghi-yellow)}.cd-search__btn svg{fill:var(--ghi-yellow)}.cd-search__btn:hover,.cd-search__btn:focus{color:var(--cd-primary-color)}.cd-search__btn:hover svg,.cd-search__btn:focus svg{fill:var(--cd-primary-color)}.cd-search__btn:focus{color:#fed83d}.cd-search__btn:focus svg{fill:#fed83d}.cd-search__btn[aria-expanded=true]{color:#fed83d}.cd-search__btn[aria-expanded=true] svg{fill:#fed83d}.cd-search__submit:focus{background-color:#fed83d}.cd-user-menu__item:focus,.cd-global-header .menu>li a:focus,.cd-global-header .menu>li button:focus{outline:none}.cd-footer{color:var(--ghi-default-text-color);background:var(--ghi-yellow)}.cd-footer svg{fill:var(--ghi-default-text-color)}.cd-footer a{color:var(--ghi-default-text-color)}.cd-footer a:focus{outline:3px solid var(--cd-blue--bright)}.cd-soft-footer{background:rgba(var(--cd-rgb-ocha-blue), 0.9)}.cd-soft-footer a:focus{outline:3px solid var(--cd-blue--bright)}.region-meta--frontend{z-index:100;display:none}.layout--twocol-section .layout__region--first{padding-right:1rem}.layout--twocol-section.has-second-region:not(.has-both-regions) .layout__region--second{margin-left:25%}.material-icons{display:inline-block;white-space:nowrap;letter-spacing:normal;text-transform:none;word-wrap:normal;direction:ltr;font-family:"Material Icons",sans-serif;font-size:24px;font-weight:normal;font-style:normal;line-height:1;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased}#main-content{position:relative;max-width:var(--cd-max-page-width);padding-top:0}#main-content .layout--onecol .layout__region>div:not(.content-width),#main-content .region-content>div:not(.content-width){max-width:var(--cd-max-page-width)}#main-content .layout--onecol .layout__region>.content-width,#main-content .region-content>.content-width{max-width:calc(var(--content-width) + 24px) !important;margin-right:auto !important;margin-left:auto !important;padding-right:var(--cd-container-padding) !important;padding-left:var(--cd-container-padding) !important}#main-content .layout--onecol .layout__region .content-width .content-width,#main-content .region-content .content-width .content-width{padding-right:0 !important;padding-left:0 !important}@media(min-width: 768px){#main-content .layout--onecol .layout__region .content-width,#main-content .region-content .content-width{max-width:calc(var(--content-width) + 48px) !important;padding-right:var(--cd-container-padding-xlarge) !important;padding-left:var(--cd-container-padding-xlarge) !important}}#main-content .region-content>form.confirmation.cd-container{margin-top:4rem;margin-bottom:4rem}.node--unpublished{background-color:unset}.user-logged-in main[class*="--unpublished"]{margin-top:4px;margin-bottom:4px;outline:4px dashed #ffc310}body.path-error main .cd-layout-content-wrapper{width:100%;max-width:var(--cd-max-width);margin-top:1rem;margin-right:auto;margin-left:auto;padding:4rem var(--cd-container-padding)}@media(min-width: 768px){body.path-error main .cd-layout-content-wrapper{padding:0 var(--cd-container-padding-tablet)}}@media(min-width: 1200px){body.path-error main .cd-layout-content-wrapper{padding:4rem 3rem}}:root{--content-width: 1220px;--reading-width: 820px}a{color:var(--ghi-default-text-color)}a:hover,a:focus{color:var(--ghi-default-text-color)}input::-moz-placeholder{font-size:80%;font-style:italic}input::placeholder{font-size:80%;font-style:italic}.cd-button,.btn--download,.ghi-download__btn{padding:.8rem 1.5rem;text-decoration:none;text-transform:uppercase;color:var(--ghi-default-text-color) !important;background-color:var(--ghi-primary-button-color);font-size:var(--cd-font-size--small);font-weight:bold}.cd-button.btn--centered,.btn--download.btn--centered,.ghi-download__btn.btn--centered{text-align:center}.cd-button:hover,.cd-button:focus,.btn--download:hover,.btn--download:focus,.ghi-download__btn:hover,.ghi-download__btn:focus{color:var(--ghi-default-text-color);background-color:var(--ghi-primary-button-color-hover)}.cd-button.expand-table,.cd-button.read-more,.cd-button.external,.btn--download.expand-table,.btn--download.read-more,.btn--download.external,.ghi-download__btn.expand-table,.ghi-download__btn.read-more,.ghi-download__btn.external{position:relative;max-width:-moz-fit-content;max-width:fit-content;padding-right:2.5rem;color:var(--ghi-default-text-color)}.cd-button.expand-table:before,.cd-button.read-more:before,.cd-button.external:before,.btn--download.expand-table:before,.btn--download.read-more:before,.btn--download.external:before,.ghi-download__btn.expand-table:before,.ghi-download__btn.read-more:before,.ghi-download__btn.external:before{position:absolute;top:calc(50% - 10px);right:1rem;padding:10px;content:"";background-repeat:no-repeat}.cd-button.expand-table,.btn--download.expand-table,.ghi-download__btn.expand-table{margin-bottom:2rem}.cd-button.expand-table:before,.btn--download.expand-table:before,.ghi-download__btn.expand-table:before{background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/arrow_downward/default/20px.svg")}.cd-button.read-more:before,.btn--download.read-more:before,.ghi-download__btn.read-more:before{background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/arrow_forward/default/20px.svg")}.cd-button.external:before,.btn--download.external:before,.ghi-download__btn.external:before{background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/open_in_new/default/20px.svg")}.ghi-dropdown__btn{color:inherit !important;border:0;background-color:rgba(0,0,0,0);font-size:inherit}.ghi-dropdown__btn+div.cd-dropdown{position:absolute;border:1px solid var(--cd-default-border-color);background-color:var(--cd-white)}.ghi-dropdown__btn+div.cd-dropdown>div.ghi-dropdown--content{display:flex;flex-direction:column}.ghi-dropdown__btn+div.cd-dropdown>div.ghi-dropdown--content a{color:var(--ghi-default-text-color)}button.ghi-download__btn,button.btn--download{transition:background-color .6s ease-out,color .6s ease-out;text-align:center;border:0;border:2px solid rgba(0,0,0,0);border-radius:3px;box-shadow:none;line-height:1.15;-webkit-appearance:none}button.ghi-download__btn svg.cd-icon,button.btn--download svg.cd-icon{fill:var(--ghi-default-text-color)}button.ghi-download__btn:before,button.btn--download:before{position:absolute;top:calc(50% - 10px);left:1rem;padding:10px;content:"";background-repeat:no-repeat}button.ghi-download__btn+.cd-dropdown,button.btn--download+.cd-dropdown,button.ghi-dropdown__btn+.cd-dropdown{position:absolute}button.ghi-download__btn+.cd-dropdown div,button.btn--download+.cd-dropdown div,button.ghi-dropdown__btn+.cd-dropdown div{display:inline-block;width:auto;padding:.2rem;border:1px solid var(--cd-default-border-color);border-radius:3px;background-color:var(--cd-white)}button.ghi-download__btn+.cd-dropdown div a,button.btn--download+.cd-dropdown div a,button.ghi-dropdown__btn+.cd-dropdown div a{display:block;padding:.1rem;text-decoration:none;font-size:var(--cd-font-size--tiny)}ul li:empty{display:none}.gin--horizontal-toolbar #toolbar-administration{z-index:201 !important}.fts-icon,.cd-figure-list--large .fts-icon{height:1rem}.download-icon{display:block;width:20px;height:20px;background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/download/default/20px.svg");background-repeat:no-repeat}tbody td[data-sort-type=numeric]{text-align:right}tbody td .fts-icon{height:1rem;vertical-align:middle}tbody td .cluster-icon{float:left;width:2rem;height:1rem}tbody td .cluster-icon svg{position:relative;top:10%;left:0;width:1.2rem;height:1.2rem}svg.ghi-icons-sprite{display:none;overflow:hidden}svg.icon{display:inline-block;width:1rem;height:1rem;pointer-events:none}.toggle svg.icon{width:.5rem;height:.5rem;cursor:pointer;pointer-events:all;fill:var(--ghi-default-text-color)}.toggle.open svg.icon{transform:rotate(180deg)}.js input.form-autocomplete{background-color:rgba(0,0,0,0) !important;background-image:url("data:image/svg+xml,%3csvg width='40' height='20' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 1C3.46.827-.188 5.787 1.313 10.068c1.176 4.384 6.993 6.417 10.637 3.7.326-.39.565.276.846.442l3.74 3.739 1.413-1.414-4.35-4.35c2.811-3.468 1.15-9.247-3.062-10.71A7.003 7.003 0 008 1zm0 2c3.242-.123 5.849 3.42 4.777 6.477-.842 3.132-4.994 4.58-7.6 2.65-2.745-1.73-2.9-6.125-.285-8.044A5.006 5.006 0 018 3z' fill='%23868686'/%3e%3c/svg%3e") !important;background-repeat:no-repeat !important;background-position:100% center !important}.js input.form-autocomplete.ui-autocomplete-loading{background-image:url("../img/misc/spinner-ltr.gif") !important}.has-layout-builder-ipe-actions .gho-footnote-list__wrapper{bottom:64px !important}body.toolbar-horizontal .gin-secondary-toolbar,.layout-builder-ipe-actions{z-index:1002 !important}body.toolbar-horizontal #toolbar-administration{z-index:1003 !important}body.layout-builder-ipe-editing .dialog-off-canvas-main-canvas{padding-top:3rem}.layout-builder--content-preview-disabled .layout-builder-block.content-width{margin-right:auto;margin-left:auto}#layout-builder-modal .cd-alert{margin-top:0;margin-right:21px;margin-bottom:1rem;margin-left:30px;padding:.5rem}#layout-builder-modal .cd-alert>div{align-items:center}.cd-site-header__nav-holder{z-index:199}.cd-site-header__nav-holder .block-sections-by-term.label-visible h2{position:static !important;display:block;clip:auto;width:auto;height:auto;font-size:var(--cd-font-size--base)}@media(max-width: 1023px){.cd-site-header__nav-holder .block-sections-by-term.label-visible h2{padding:15px 30px}}.cd-site-header__nav-holder nav[role=navigation]>ul>li>span{font-weight:bold}.cd-site-header__nav-holder nav[role=navigation]>ul>li>span:focus,.cd-site-header__nav-holder nav[role=navigation]>ul>li>span:hover{color:inherit;background:inherit}.cd-site-header__nav-holder nav[role=navigation]>ul>li>ul>li>span{opacity:.5}@media(max-width: 1023px){.cd-site-header__nav-holder nav[role=navigation]{margin:0;padding:0}}@media(min-width: 1024px){.cd-site-header__nav-holder nav[role=navigation].cd-nav{position:unset}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item:not(:last-child).right-border{border-right:1px solid var(--ghi-default-border-color)}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain{position:absolute;z-index:199;left:0;width:100%;background-color:var(--cd-default-background-color)}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul{flex-direction:column;max-height:450px;margin:2rem 0}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li{max-width:180px}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>span{padding:0}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul{margin:.5rem 0 2rem 0}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a,.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul span{display:inline-block;margin-bottom:3px}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a:focus,.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a:hover,.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul span:focus,.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul span:hover{color:inherit;background:inherit}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a:focus,.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a:hover{margin-bottom:2px;border-bottom:1px solid var(--cd-primary-color)}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain .block-sections-by-term.label-visible h2{margin-top:2rem}.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain .block-sections-by-term nav[role=navigation]>ul li span,.cd-site-header__nav-holder nav[role=navigation].cd-nav ul.menu li.menu-item .menu-link-contentmain .block-sections-by-term nav[role=navigation]>ul li a{padding:0}.cd-site-header__nav-holder nav[role=navigation] li.menu-item.menu-item--expanded{position:relative}}.toolbar-fixed .region-page-title a[name=page-title],.toolbar-fixed .region-page-subtitle a[name=page-title],.toolbar-fixed .region-page-navigation a[name=page-title]{position:relative;top:-80px;display:block;visibility:hidden}.region-page-title.region-page-navigation,.region-page-subtitle.region-page-navigation,.region-page-navigation.region-page-navigation{border-top:1px solid var(--cd-default-border-color);border-bottom:1px solid var(--cd-white)}.region-page-title.region-page-title .region-wrapper-inner,.region-page-title.region-page-subtitle .region-wrapper-inner,.region-page-title.region-page-navigation .block-wrapper__inner,.region-page-subtitle.region-page-title .region-wrapper-inner,.region-page-subtitle.region-page-subtitle .region-wrapper-inner,.region-page-subtitle.region-page-navigation .block-wrapper__inner,.region-page-navigation.region-page-title .region-wrapper-inner,.region-page-navigation.region-page-subtitle .region-wrapper-inner,.region-page-navigation.region-page-navigation .block-wrapper__inner{max-width:calc(var(--content-width) + 24px);margin-right:auto;margin-left:auto;padding-right:var(--cd-container-padding);padding-left:var(--cd-container-padding)}.region-page-title.region-page-title .region-wrapper-inner>.block-section-navigation,.region-page-title.region-page-subtitle .region-wrapper-inner>.block-section-navigation,.region-page-title.region-page-navigation .block-wrapper__inner>.block-section-navigation,.region-page-subtitle.region-page-title .region-wrapper-inner>.block-section-navigation,.region-page-subtitle.region-page-subtitle .region-wrapper-inner>.block-section-navigation,.region-page-subtitle.region-page-navigation .block-wrapper__inner>.block-section-navigation,.region-page-navigation.region-page-title .region-wrapper-inner>.block-section-navigation,.region-page-navigation.region-page-subtitle .region-wrapper-inner>.block-section-navigation,.region-page-navigation.region-page-navigation .block-wrapper__inner>.block-section-navigation{position:unset}@media(min-width: 768px){.region-page-title.region-page-title .region-wrapper-inner,.region-page-title.region-page-subtitle .region-wrapper-inner,.region-page-title.region-page-navigation .block-wrapper__inner,.region-page-subtitle.region-page-title .region-wrapper-inner,.region-page-subtitle.region-page-subtitle .region-wrapper-inner,.region-page-subtitle.region-page-navigation .block-wrapper__inner,.region-page-navigation.region-page-title .region-wrapper-inner,.region-page-navigation.region-page-subtitle .region-wrapper-inner,.region-page-navigation.region-page-navigation .block-wrapper__inner{max-width:calc(var(--content-width) + 48px);padding-right:var(--cd-container-padding-xlarge);padding-left:var(--cd-container-padding-xlarge)}}.region-page-title .block-wrapper--sectionnavigation,.region-page-subtitle .block-wrapper--sectionnavigation,.region-page-navigation .block-wrapper--sectionnavigation{position:relative}.region-page-title .region-wrapper-inner{display:flex;gap:1rem;margin:2rem 0 0}.region-page-title .region-wrapper-inner .block-wrapper--downloadbutton{margin-left:auto}.region-page-title .region-wrapper-inner .block-wrapper--downloadbutton a.link--download-dialog{white-space:nowrap}.region-page-title .region-wrapper-inner .cd-page-title,.region-page-title .region-wrapper-inner .block-section-switcher,.region-page-title .region-wrapper-inner .block-download-button{padding:0}.region-page-title .region-wrapper-inner .cd-page-title.block-download-button,.region-page-title .region-wrapper-inner .block-section-switcher.block-download-button,.region-page-title .region-wrapper-inner .block-download-button.block-download-button{margin-top:2.2rem}.region-page-title .region-wrapper-inner .cd-page-title.has-subtitle,.region-page-title .region-wrapper-inner .block-section-switcher.has-subtitle,.region-page-title .region-wrapper-inner .block-download-button.has-subtitle{margin-bottom:1rem}@media(max-width: 767px){.region-page-title{margin-top:2rem !important}.region-page-title .region-wrapper-inner{flex-direction:column-reverse}.region-page-title .region-wrapper-inner .block-wrapper--downloadbutton{margin:0}.region-page-title .region-wrapper-inner .block-wrapper--downloadbutton .block-download-button{margin:0}}.region-page-title+.region-page-subtitle{margin-top:-2rem}.region-page-title+.region-page-subtitle .region-wrapper-inner{display:flex;gap:1rem}.region-page-title+.region-page-subtitle .region-wrapper-inner #block-sectionmetadata,.region-page-title+.region-page-subtitle .region-wrapper-inner #block-documentmetadata{margin:.5rem 0 2rem 0;text-transform:uppercase;font-size:var(--cd-font-size--small)}body.force-letterbox main>.page-image img,body.force-letterbox main>.field--type-ghi-hero-image img{height:400px;-o-object-fit:cover;object-fit:cover}.tooltip{z-index:1004;cursor:pointer;vertical-align:middle}.tooltip svg{fill:var(--cd-primary-color)}.tippy-box .tippy-content>.content{padding:0 1rem}.tippy-box .tippy-content a.fts-link{display:inline-block;margin-bottom:.5rem}.tippy-box .tippy-content a.fts-link img{height:20px;vertical-align:middle}td.project-counter .tippy-box .tippy-content{min-width:20rem}.d3-sparkline-tooltip{pointer-events:none}.d3-sparkline-tooltip .tippy-box{top:-0.5rem}.d3-sparkline-tooltip .tippy-box .tippy-content{margin-bottom:-1rem}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .title{text-align:left}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .items{margin-top:.5rem}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .items .item-wrapper{display:flex}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .items .item-wrapper .label{width:50%;text-align:left;color:var(--cd-white);font-size:100%;line-height:inherit}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .items .item-wrapper .value{width:50%;text-align:right}.d3-sparkline-tooltip .tippy-box .tippy-arrow::before{left:45%}:root{--ghi-yellow: #fed83d;--ghi-grey--dark: #4d4d4d;--ghi-yellow--light: #fffbec;--ghi-yellow--light-chart: #f8ecb4;--ghi-grey: #dfdede;--ghi-grey--light: #eee;--ghi-grey--medium: #ccc;--ghi-grey--background: #f5f5f5;--ghi-orange-dark: #feba00;--cd-ocha-orange: #fecb00;--cd-ocha-orange--dark: var(--ghi-orange-dark);--cd-primary-color: var(--ghi-yellow);--cd-primary-color--dark: var(--cd-ocha-orange--dark);--cd-tag--color: #9e9e9e;--ghi-default-text-color: var(--ghi-grey--dark);--ghi-default-border-color: var(--ghi-grey--light);--ghi-default-border-color-background: var(--ghi-grey);--ghi-default-background-color: var(--ghi-grey--background);--ghi-primary-background-color: var(--ghi-yellow--light);--ghi-widget-color--light: var(--ghi-grey--light);--ghi-widget-color--dark: var(--ghi-orange-dark);--ghi-progress-color-fg: var(--ghi-yellow);--ghi-progress-color-bg: var(--ghi-yellow--light-chart);--ghi-status-color-unpublished: var(--cd-primary-color);--ghi-status-color-published: #abea3a;--ghi-primary-button-color: var(--ghi-yellow);--ghi-primary-button-color-hover: var(--ghi-orange-dark);--hpc-brown: #464646;--hpc-dark-brown: #2f2f2f;--hpc-orange: #ee7325;--hpc-orange-light: var(--cd-orange--light);--hpc-grey: #ebebeb;--hpc-blue-light: #e6ecf1;--green: #62b445;--hpc-border-color: #e1e1e1;--cd-font-size--extra-tiny: 0.625rem;--ghi-ui-dialog-border-radius: 1rem;--colorGinWarningLight: #efcf64;--colorGinWarningBackground: #605328;--colorGinDangerLight: #f39b9d;--colorGinDangerBackground: #583333;--colorGinGreenLight: #32cea4;--colorGinGreenBackground: #145242}.ghi-block-article-collection .block-content>a.external{margin-top:2rem}.ghi-block-article-collection .article-collection{margin-top:2rem}.ghi-block-article-collection .article-collection-cards .ghi-grid-item{padding:0}.ghi-block-article-collection .article-collection-cards .ghi-grid-item.featured{background-color:var(--cd-primary-color)}.ghi-block-article-collection .article-collection-cards .ghi-grid-item .field--type-image{width:100%}.block-article-title{background-color:var(--ghi-default-background-color)}.block-article-title .article-title-wrapper{margin:0 auto;padding-top:3.6rem;padding-bottom:3.6rem}.block-article-title .article-title-wrapper.has-title-prefix{padding-top:2.6rem;padding-bottom:3.3rem}.block-article-title .article-title-wrapper>*{margin:0}.block-article-title .article-title-wrapper p{font-size:var(--cd-font-size--small)}.block-article-title .article-title-wrapper p a{text-decoration:none}.block-article-title .article-title-wrapper p .chapter{font-weight:lighter}.ghi-block,.ghi-block.ui-state-drop,.block-layout-builder,.block-layout-builder.ui-state-drop{margin-top:4.5rem;padding-top:1rem;padding-bottom:1rem;line-height:1.5}.ghi-block.ghi-block-paragraph,.ghi-block.ui-state-drop.ghi-block-paragraph,.block-layout-builder.ghi-block-paragraph,.block-layout-builder.ui-state-drop.ghi-block-paragraph{margin-top:2.5rem}.ghi-block:not(.paragraph--gho-text),.ghi-block.ui-state-drop:not(.paragraph--gho-text),.block-layout-builder:not(.paragraph--gho-text),.block-layout-builder.ui-state-drop:not(.paragraph--gho-text){page-break-inside:avoid !important}.ghi-block.paragraph--gho-text .gho-text__text>p,.ghi-block.ui-state-drop.paragraph--gho-text .gho-text__text>p,.block-layout-builder.paragraph--gho-text .gho-text__text>p,.block-layout-builder.ui-state-drop.paragraph--gho-text .gho-text__text>p{page-break-inside:avoid !important}#main-content.has-subpage-title .layout__region .ghi-block:first-child:not(.block-plan-entity-logframe),body.page-node-type-global-section #main-content .layout__region .ghi-block:first-child,#main-content.has-subpage-title .layout__region .ghi-block.ui-state-drop:first-child:not(.block-plan-entity-logframe),body.page-node-type-global-section #main-content .layout__region .ghi-block.ui-state-drop:first-child,#main-content.has-subpage-title .layout__region .block-layout-builder:first-child:not(.block-plan-entity-logframe),body.page-node-type-global-section #main-content .layout__region .block-layout-builder:first-child,#main-content.has-subpage-title .layout__region .block-layout-builder.ui-state-drop:first-child:not(.block-plan-entity-logframe),body.page-node-type-global-section #main-content .layout__region .block-layout-builder.ui-state-drop:first-child{margin-top:0;padding-top:0}.ghi-block.ghi-block--hidden-preview>*:not(.contextual),.ghi-block.ui-state-drop.ghi-block--hidden-preview>*:not(.contextual),.block-layout-builder.ghi-block--hidden-preview>*:not(.contextual),.block-layout-builder.ui-state-drop.ghi-block--hidden-preview>*:not(.contextual){opacity:.5}.hpc-form-wrapper .ghi-block.ghi-block--hidden-preview>*:not(.contextual),.hpc-form-wrapper .ghi-block.ui-state-drop.ghi-block--hidden-preview>*:not(.contextual),.hpc-form-wrapper .block-layout-builder.ghi-block--hidden-preview>*:not(.contextual),.hpc-form-wrapper .block-layout-builder.ui-state-drop.ghi-block--hidden-preview>*:not(.contextual){opacity:1}body.page-node-type-article .layout__region--content>.ghi-block.block:first-child,body.page-node-type-article .layout__region--content>.ghi-block.ui-state-drop.block:first-child,body.page-node-type-article .layout__region--content>.block-layout-builder.block:first-child,body.page-node-type-article .layout__region--content>.block-layout-builder.ui-state-drop.block:first-child{margin-top:2.5rem}.layout__region--content>.ghi-block.block.block-highlighted:not(.content-width):first-child.block-highlighted:not(.content-width):not(.block-plan-entity-logframe),.layout__region--content>.ghi-block.ui-state-drop.block.block-highlighted:not(.content-width):first-child.block-highlighted:not(.content-width):not(.block-plan-entity-logframe),.layout__region--content>.block-layout-builder.block.block-highlighted:not(.content-width):first-child.block-highlighted:not(.content-width):not(.block-plan-entity-logframe),.layout__region--content>.block-layout-builder.ui-state-drop.block.block-highlighted:not(.content-width):first-child.block-highlighted:not(.content-width):not(.block-plan-entity-logframe){margin-top:0;padding-top:4.5rem;background-color:var(--ghi-default-background-color)}.ghi-block>div.block-content,.ghi-block.ui-state-drop>div.block-content,.block-layout-builder>div.block-content,.block-layout-builder.ui-state-drop>div.block-content{position:relative}.ghi-block>div.block-content:not(.content-width),.ghi-block.ui-state-drop>div.block-content:not(.content-width),.block-layout-builder>div.block-content:not(.content-width),.block-layout-builder.ui-state-drop>div.block-content:not(.content-width){margin-right:0 !important;margin-left:0 !important}.ghi-block>div.block-comment,.ghi-block.ui-state-drop>div.block-comment,.block-layout-builder>div.block-comment,.block-layout-builder.ui-state-drop>div.block-comment{padding:1rem 0;text-align:justify;font-size:var(--cd-font-size--small)}.ghi-block>div.block-links,.ghi-block.ui-state-drop>div.block-links,.block-layout-builder>div.block-links,.block-layout-builder.ui-state-drop>div.block-links{padding:.75rem 0;border-top:1px solid var(--cd-default-border-color);font-size:var(--cd-font-size--small)}.ghi-block>div.block-links>div.block-links--inner,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner,.block-layout-builder>div.block-links>div.block-links--inner,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner{display:flex;justify-content:space-between}.ghi-block>div.block-links>div.block-links--inner a,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner a,.block-layout-builder>div.block-links>div.block-links--inner a,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner a{text-decoration:none;line-height:1rem}.ghi-block>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog,.block-layout-builder>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog{position:relative;padding-left:1.5rem}.ghi-block>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog:before,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog:before,.block-layout-builder>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog:before,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog:before{position:absolute;top:calc(50% - 10px);left:0;padding:10px;content:"";background:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/download/default/20px.svg") no-repeat}.ghi-block>div.block-links>div.block-links--inner .block-download-links .download-item a:hover,.ghi-block>div.block-links>div.block-links--inner .block-download-links .download-item a:focus,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a:hover,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a:focus,.block-layout-builder>div.block-links>div.block-links--inner .block-download-links .download-item a:hover,.block-layout-builder>div.block-links>div.block-links--inner .block-download-links .download-item a:focus,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a:hover,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a:focus{color:var(--ghi-default-text-color)}.ghi-block>div.block-links>div.block-links--inner .block-admin-links,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links{display:flex;align-items:baseline;gap:.5rem}.ghi-block>div.block-links>div.block-links--inner .block-admin-links a,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links a,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links a,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links a{position:relative;top:2px;font-size:var(--cd-font-size--base)}.ghi-block>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover],.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover],.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover],.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]{position:relative;top:-1px;padding:0;transition:none;color:inherit;border:0;background-color:inherit}.ghi-block>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:hover,.ghi-block>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:focus,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:hover,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:focus,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:hover,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:focus,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:hover,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:focus{color:var(--cd-primary-color--dark);border:0;outline:0}.ghi-block>div.block-links>div.block-links--inner .block-admin-links .tippy-box .title,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links .tippy-box .title,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links .tippy-box .title,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links .tippy-box .title{padding-bottom:0}.ghi-block>div.block-links>div.block-links--inner .block-admin-links .tippy-box .block-configuration.content,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links .tippy-box .block-configuration.content,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links .tippy-box .block-configuration.content,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links .tippy-box .block-configuration.content{padding-top:0}.ghi-block-document-chapter{position:relative}.ghi-block-document-chapter .block-content .chapter-summary{margin:2rem 0}.block-generic-document-link-button button{padding:.8rem 1.5rem .8rem 2.5rem}.block-generic-document-link-button button:before{left:1rem;padding:10px;content:"";background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/download/default/20px.svg");background-repeat:no-repeat}.ghi-block-generic-document-links .block-content ul{display:flex;flex-direction:column;-webkit-padding-start:0;padding-inline-start:0;gap:.5rem}.ghi-block-generic-document-links .block-content ul li{display:flex;margin:0;padding:0;list-style-type:none;vertical-align:top}.ghi-block-generic-document-links .block-content ul li .document-link-box{position:relative;width:100%;padding:2rem;background-color:var(--ghi-default-background-color)}.ghi-block-generic-document-links .block-content ul li .document-link-box .title-wrapper .title{display:inline-block;width:100%;margin:0;padding:0;font-size:var(--cd-font-size--medium);font-weight:bold}.ghi-block-generic-document-links .block-content ul li .document-link-box .buttons{position:relative;z-index:1;width:100%;margin-bottom:2rem}.ghi-block-generic-document-links .block-content ul li .document-link-box .buttons button{padding:0;text-transform:none;color:var(--ghi-default-text-color);background-color:rgba(0,0,0,0);font-size:var(--cd-font-size--default)}.ghi-block-generic-document-links .block-content ul li .document-link-box .buttons .cd-dropdown div a{font-size:var(--cd-font-size--tiny)}.ghi-block-generic-document-links .block-content ul li .document-link-box .meta{margin-top:1rem;font-size:var(--cd-font-size--tiny)}.ghi-block-generic-document-links .block-content ul li .document-link-box .meta:before{display:block;width:15%;padding-top:1.5rem;content:" ";border-top:4px solid var(--ghi-yellow)}@media(min-width: 768px){.ghi-block-generic-document-links .block-content ul li{flex:0 1 calc(50% - .25rem)}}@media(min-width: 768px){.ghi-block-generic-document-links .block-content ul{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;gap:.5rem}}.ghi-block-document-subheading{position:relative}.ghi-block-document-subheading a[name]{position:absolute;top:0;left:0}.ghi-block-plan-entity-types .item-list--entity-types{display:flex;flex-direction:column;gap:.5rem}.ghi-block-plan-entity-types .item-list--entity-types>div{display:flex;gap:2rem;padding:2rem 1rem;background-color:var(--ghi-default-background-color)}.ghi-block-plan-entity-types .item-list--entity-types>div p{align-self:center;margin:0;padding:0}.ghi-block-plan-entity-types .item-list--entity-types>div .label{white-space:nowrap;font-size:var(--cd-font-size--2xlarge);font-weight:bold}.ghi-block-plan-entity-types .item-list--entity-types>div .description{font-size:var(--cd-font-size--default)}.ghi-block-generic-external-widget.up-2 .block-content{display:flex;flex-wrap:wrap;justify-content:space-between}.ghi-block-generic-external-widget.up-2 .block-content .iframe-wrapper{width:100% !important}@media(min-width: 768px){.ghi-block-generic-external-widget.up-2 .block-content{display:flex;justify-content:space-between}.ghi-block-generic-external-widget.up-2 .block-content .iframe-wrapper{width:49% !important}}.ghi-block ul.plan-headline-figures{-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;padding:0}.ghi-block ul.plan-headline-figures li{padding:1rem 1.5rem}.hid-session-information>div>div>p{-webkit-margin-before:.5rem;margin-block-start:.5rem}.hid-session-information .info{margin-bottom:1rem}.ghi-block-global-key-figures.has-year-switcher .cd-block-title,.ghi-block-plan-headline-figures.has-year-switcher .cd-block-title{display:flex;gap:1rem}.ghi-block-global-key-figures.has-year-switcher .cd-block-title .section-switcher-wrapper,.ghi-block-plan-headline-figures.has-year-switcher .cd-block-title .section-switcher-wrapper{top:-0.35rem}.ghi-block-global-key-figures .tab-container-wrapper,.ghi-block-plan-headline-figures .tab-container-wrapper{margin-top:-2rem;padding-top:1rem}.ghi-block-global-key-figures .tab-navigation-wrapper,.ghi-block-plan-headline-figures .tab-navigation-wrapper{margin-top:1rem}.ghi-block-global-key-figures .tab-details .key-figures,.ghi-block-plan-headline-figures .tab-details .key-figures{display:flex;flex-wrap:wrap;row-gap:1rem;margin-bottom:0;margin-left:-1.5rem;padding-top:1rem;padding-bottom:0;padding-left:0;list-style:none;-webkit-clip-path:inset(0 0 0 1.5rem);clip-path:inset(0 0 0 1.5rem)}.ghi-block-global-key-figures .tab-details .key-figures li,.ghi-block-plan-headline-figures .tab-details .key-figures li{position:relative;flex-basis:auto;flex-grow:0;padding:0 1.5rem;border:0}.ghi-block-global-key-figures .tab-details .key-figures li:first-child,.ghi-block-plan-headline-figures .tab-details .key-figures li:first-child{padding-left:1.5rem}.ghi-block-global-key-figures .tab-details .key-figures li::before,.ghi-block-plan-headline-figures .tab-details .key-figures li::before{position:absolute;left:0;width:1px;height:90%;content:" ";background-color:var(--ghi-default-border-color)}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__label,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__label{font-weight:normal}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value{color:var(--ghi-default-text-color)}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value>div,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value>div{display:flex;gap:.5rem}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value>div a,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value>div a{text-decoration:none}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value i[data-toggle=tooltip],.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value i[data-toggle=tooltip]{vertical-align:top}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value .material-icon,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value .material-icon{font-size:var(--cd-font-size--large);font-weight:normal}.ghi-block-global-key-figures .tab-details>a.external,.ghi-block-plan-headline-figures .tab-details>a.external{margin-top:2rem}.ghi-block-global-key-figures .block-comment .block-comment-inner,.ghi-block-plan-headline-figures .block-comment .block-comment-inner{margin-top:2rem;padding-top:2rem;border-top:1px solid var(--cd-default-border-color)}.ghi-block-paragraph{position:relative}.ghi-block-paragraph .block-content.gho-text,.ghi-block-paragraph .block-content.gho-aside{margin-top:0}.ghi-block-paragraph .block-content>div>a.read-more{margin-top:2rem}.ghi-block-paragraph .block-content.gho-paragraph-promoted{background-color:rgba(0,0,0,0)}.ghi-block-paragraph.block-highlighted{padding-top:3rem !important}.ghi-block-paragraph.gho-paragraph-promoted{padding-top:3rem !important;background-color:var(--ghi-default-background-color)}.ghi-block-paragraph.gho-paragraph-promoted .block-content{padding-top:0;padding-bottom:3rem}.ghi-block-paragraph.gho-paragraph-promoted::before{position:absolute;left:0;height:100%;content:"";border-left:4px solid var(--cd-primary-color)}.block-plan-attachment-map .form-type-select{margin:0}.block-plan-attachment-map .form-type-select .selectric-wrapper{display:inline-block}.block-plan-attachment-map .form-type-select .selectric{display:inline-block;overflow:visible;white-space:nowrap;border:none;background-color:rgba(0,0,0,0)}.block-plan-attachment-map .form-type-select .selectric .label{display:inline-block;height:auto !important;margin:0;padding-right:24px;white-space:nowrap;color:var(--hpc-orange);background-color:rgba(0,0,0,0);font-size:var(--cd-font-size--base);font-weight:bold}.block-plan-attachment-map .form-type-select .selectric .label:after{display:none}.block-plan-attachment-map .form-type-select .selectric .icon{position:absolute;top:13px;right:6px;width:12px;height:12px;fill:var(--hpc-orange)}.block-plan-attachment-map .form-type-select .selectric-items{position:absolute;z-index:1;top:0;left:-19px;width:auto !important;border-radius:3px;background-color:var(--cd-white)}.block-plan-attachment-map .form-type-select .selectric-items ul li{padding:8px 18px;white-space:nowrap;border-top:none;border-bottom:none;font-size:var(--cd-font-size--base);font-weight:bold}.block-plan-attachment-map .form-type-select .selectric-items ul li.selected{color:var(--hpc-orange);background-color:rgba(0,0,0,0)}.block-plan-attachment-map .form-type-select .selectric-items ul.selectric-group li{padding-left:2rem;font-weight:normal}.block-plan-attachment-map .form-type-select .selectric-items ul.selectric-group li.selectric-group-label{padding-left:18px;font-weight:bold}.block-plan-attachment-map div.block-links .download-link-wrapper{top:-2rem;margin-top:0}.block-plan-attachment-map:not(.has-comment) div.block-links{border-top:0}.block-plan-attachment-map .plan-attachment-map-wrapper .map-tabs--inner{padding-left:1rem}.block-plan-attachment-map .plan-attachment-map-wrapper .map-container .leaflet-container{width:100%;height:100%}.block-plan-attachment-map.has-attachment-switcher .map-tabs,.block-plan-attachment-map.has-attachment-switcher .download-link-wrapper{top:.3rem;margin-top:0}.block-plan-attachment-map .modal.right:not(.visible),.block-plan-attachment-map .leaflet-sidebar.right:not(.visible){right:-600px}.block-plan-attachment-map .modal .modal-inner,.block-plan-attachment-map .leaflet-sidebar .modal-inner{overflow-y:auto;max-height:350px}.block-plan-attachment-map .modal .modal-inner .title,.block-plan-attachment-map .leaflet-sidebar .modal-inner .title{color:var(--hpc-orange);font-size:1.4rem}.block-plan-attachment-map .modal table.plan-attachment-modal-table,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table{margin-bottom:.5rem}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody{border-top:none}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody tr,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody tr{margin-bottom:8px;vertical-align:top;border-bottom:1px solid var(--cd-default-border-color)}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody tr:last-child,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody tr:last-child{border-bottom:0}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody tr td,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody tr td{padding:0;text-align:right;color:var(--hpc-brown);border:none;background:none;font-size:var(--cd-font-size--small);font-weight:600}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody tr td:first-child,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody tr td:first-child{text-align:left;font-weight:400}.configuration-container .pane-plan-attachment-map .map-wrapper-outer{margin-top:4rem}.configuration-container .pane-plan-attachment-map .map-wrapper-outer .map-tabs{top:2rem;right:1rem;margin-right:0}.configuration-container .pane-plan-attachment-map .map-wrapper-outer.has-attachment-switcher{margin-top:0}.configuration-container .pane-plan-attachment-map .map-wrapper-outer.has-attachment-switcher .map-tabs{top:2.5rem}.ghi-block-plan-cluster-header .block-content{display:flex;justify-content:space-between}.ghi-block-plan-cluster-header .block-content .cluster-header-contacts{margin-top:-3rem;margin-bottom:2rem;margin-left:auto;padding:1rem 3rem}.ghi-block-plan-cluster-header .block-content .cluster-header-contacts h3{margin-top:0;font-size:var(--cd-font-size--medium)}.ghi-block-plan-cluster-header .block-content .cluster-header-contacts .cluster-header-contacts-item{font-size:var(--cd-font-size--default)}.block-plan-entity-attachments-table .select2-container{width:auto !important}.block-plan-entity-attachments-table td.group-name{font-weight:bold}.block-plan-operational-presence-map .pane-content{margin-top:.5rem}.block-plan-operational-presence-map .pane-content .pane-plan-operational-presence-map{display:flex;justify-content:space-between}.block-plan-operational-presence-map .pane-content .download-link-wrapper{top:-2rem;margin-top:0}.block-plan-operational-presence-map .pane-title{margin-bottom:0}.block-plan-operational-presence-map .pane-title .collapsed-text a.read-more{position:relative;top:-1rem}@media(min-width: 768px){.block-plan-operational-presence-map .pane-title{max-width:80%}}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container{position:relative;width:100%;min-height:400px;margin:0;padding:0;border:1px solid var(--hpc-border-color)}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend{position:absolute;z-index:90;top:10px;right:10px;font-size:var(--cd-font-size--small)}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend ul{display:flex;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;padding:5px;list-style-type:none;border:1px solid var(--hpc-border-color);border-radius:3px;background-color:#fff}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend ul li{margin-right:.5rem}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend ul li:last-child{margin-right:0}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend ul li .legend-marker{display:inline-block;width:10px;height:10px;margin-right:5px;border:1px solid var(--hpc-border-color);border-radius:50%}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .leaflet-container{width:100%;height:100%}.block-plan-operational-presence-map .leaflet-sidebar{width:350px !important}.block-plan-operational-presence-map .modal .modal-content,.block-plan-operational-presence-map .leaflet-sidebar .modal-content{max-width:350px}.block-plan-operational-presence-map .modal .modal-inner,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner{overflow-y:auto;max-height:350px}.block-plan-operational-presence-map .modal .modal-inner .title-heading,.block-plan-operational-presence-map .modal .map-plan-card-container .title-heading,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .title-heading,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .title-heading{text-transform:uppercase;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--tiny)}.block-plan-operational-presence-map .modal .modal-inner .title,.block-plan-operational-presence-map .modal .map-plan-card-container .title,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .title,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .title{color:var(--ghi-default-text-color);font-size:var(--cd-font-size--medium);font-weight:500}.block-plan-operational-presence-map .modal .modal-inner .content,.block-plan-operational-presence-map .modal .map-plan-card-container .content,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content{border-top:none !important}.block-plan-operational-presence-map .modal .modal-inner .content .title,.block-plan-operational-presence-map .modal .map-plan-card-container .content .title,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .title,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .title{text-transform:uppercase;font-size:var(--cd-font-size--small);font-weight:bold}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper{position:relative;margin-bottom:.5rem;font-size:var(--cd-font-size--small)}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .cluster-icon-wrapper,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .cluster-icon-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper{position:relative;top:3px;display:inline-block;width:26px;height:26px;margin-right:.5rem;border:1px solid #000;border-radius:50%}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon{display:inline-block;width:26px;height:26px}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon svg,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon svg,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon svg,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon svg{top:5%;left:20%;width:13px;height:13px}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper span.toggle,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper span.toggle,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper span.toggle,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper span.toggle{position:absolute;top:0;right:0;display:inline-block}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .organizations-wrapper,.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .projects-wrapper,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .organizations-wrapper,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .projects-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .organizations-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .projects-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .organizations-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .projects-wrapper{display:none;padding-top:1rem;padding-left:2.2rem}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .organizations-wrapper .title,.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .projects-wrapper .title,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .organizations-wrapper .title,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .projects-wrapper .title,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .organizations-wrapper .title,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .projects-wrapper .title,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .organizations-wrapper .title,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .projects-wrapper .title{text-transform:uppercase;font-size:var(--cd-font-size--tiny);font-weight:bold}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .organizations-wrapper ul,.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .projects-wrapper ul,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .organizations-wrapper ul,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .projects-wrapper ul,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .organizations-wrapper ul,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .projects-wrapper ul,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .organizations-wrapper ul,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .projects-wrapper ul{-webkit-padding-start:1rem;padding-inline-start:1rem;font-size:var(--cd-font-size--tiny)}.block-plan-operational-presence-map .modal .modal-inner .content a.fts-link,.block-plan-operational-presence-map .modal .map-plan-card-container .content a.fts-link,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content a.fts-link,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content a.fts-link{display:inline-block;margin-bottom:.5rem}.block-plan-operational-presence-map .modal .modal-inner .content a.fts-link img,.block-plan-operational-presence-map .modal .map-plan-card-container .content a.fts-link img,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content a.fts-link img,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content a.fts-link img{position:relative;top:.5rem;left:.2rem;height:20px}.configuration-container .pane-plan-operational-presence-map{position:relative}.configuration-container .pane-plan-operational-presence-map .map-wrapper-outer.has-view-switcher,.configuration-container .pane-plan-operational-presence-map .map-wrapper-outer.has-object-switcher{margin-top:5rem}.ghi-block-plan-organizations-table tbody td.entity-name{white-space:unset !important}@media(min-width: 768px){.ghi-block-plan-organizations-table thead th.cd-table--name{min-width:200px}}.ghi-block-global-key-figures+.ghi-block-global-plan-overview-map{margin-top:0}.ghi-block-global-plan-overview-map{position:relative;clear:both}.ghi-block-global-plan-overview-map .overlay{position:absolute;top:0;bottom:0;width:100%;opacity:.25}.ghi-block-global-plan-overview-map .map-container{margin-bottom:1rem;padding:0 .5rem}.ghi-block-global-plan-overview-map .map-container .leaflet-container{position:relative;min-height:400px;border-width:1px;border-style:solid;border-color:var(--hpc-border-color)}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .leaflet-bottom{width:100%}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .leaflet-control-attribution{float:none;width:100%;margin-right:auto;margin-left:auto;padding:.5rem;text-align:center}@media(max-width: 575px){.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .leaflet-control-attribution{padding-bottom:.3rem}}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-header .title{margin-bottom:0;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--base);font-weight:bold}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-header .title a{color:var(--ghi-default-text-color)}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .modal-inner{padding:1.2rem 1.6rem .5rem 1.4rem;cursor:default}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content strong{font-weight:bold}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper{margin-bottom:1rem;padding-top:1rem;border-top:1px solid var(--ghi-default-border-color)}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row{display:flex;justify-content:space-between;width:100%}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .label{position:relative;display:inline;margin-bottom:3px;text-align:left;font-size:var(--cd-font-size--small);font-weight:normal}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .value{display:flex;gap:.3rem;font-size:var(--cd-font-size--small);font-weight:bold}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .value i.tooltip.info{position:relative;top:3px}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .value i.tooltip.monitoring-period{position:relative;top:1px}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .value .hpc-percent-progress-bar-wrapper{margin-top:2px;cursor:default}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .note{font-size:var(--cd-font-size--tiny)}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row.section-row-plan-status{margin:4px 0 4px 4px}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row.section-row-plan-status .label{display:flex;gap:.5rem;font-weight:bold}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row.section-row-plan-status .value{text-transform:none}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row.section-row-plan-status .value>div{display:flex;gap:.5rem}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-overlay-pane svg svg g path:nth-of-type(1){fill:var(--ghi-grey--medium) !important}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-overlay-pane svg svg[plan-type=hrp] g path:nth-of-type(1){fill:var(--cd-primary-color) !important}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-overlay-pane svg svg[plan-type=fa] g path:nth-of-type(1){fill:var(--ghi-widget-color--dark) !important}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-overlay-pane text.donut-label{font-family:var(--cd-font--roboto);font-weight:500}@media(min-width: 768px){.ghi-block-global-plan-overview-map .map-container .leaflet-container{min-height:500px;border:0 none}}@media(min-width: 768px){.ghi-block-global-plan-overview-map .map-container{padding:0}}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend{top:unset;right:unset;bottom:3rem;left:1rem}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul{flex-direction:column;gap:.1rem}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item{margin:0;gap:.5rem}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon{width:1rem;height:1rem;margin-top:0}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon.legend-icon-hrp{background-color:var(--cd-primary-color) !important}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon.legend-icon-fa{background-color:var(--ghi-widget-color--dark) !important}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon.legend-icon-other{background-color:var(--ghi-grey--medium) !important}.ghi-block-global-plan-table .metadata{width:100%;margin-top:1.5rem;margin-bottom:-1.5rem;text-align:right;font-size:var(--cd-font-size--tiny)}.ghi-block-global-plan-table table tbody td[data-column=name]{display:flex;justify-content:space-between}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle]{width:auto !important;min-width:4rem;height:auto !important;max-height:1.5rem;text-align:center;color:var(--cd-white);background-color:#87cfad;font-size:var(--cd-font-size--small);font-weight:normal}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle].plan-type-hrp{background-color:#5090cd}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle].plan-type-fa{background-color:#8869ae}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle].plan-type-rrp{background-color:#e66751}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle].plan-type-non-hrp{padding:0 5px;background-color:#777}.ghi-block-global-plan-table table tbody td[data-column=status]>div{display:flex;justify-content:space-between}.ghi-block-global-plan-table table tbody td a{word-break:normal}.ghi-block-global-plan-table table tbody td a.fts-plan-link{text-decoration:none}.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table{position:relative;z-index:1;margin-top:-1rem;padding-bottom:0;background-color:var(--ghi-default-background-color)}.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-comment,.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-links{position:relative;z-index:1;border-top:0;border-bottom:0;background-color:var(--cd-white)}#layout-builder .ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-comment,#layout-builder .ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-links{background-color:inherit}.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-comment.block-comment,.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-links.block-comment{margin-top:2rem}.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-comment.block-comment:before,.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-links.block-comment:before{border-bottom:0}.ghi-block-plan-webcontent-text .block-content{padding-top:1rem}.ghi-block-section-collection .block-content>a.external{margin-top:2rem}.ghi-block-section-collection .section-collection{margin-top:2rem}.ghi-block-section-collection .section-collection .ghi-grid-item{padding:0}.ghi-block-section-collection .section-collection .ghi-grid-item .field--type-image{width:100%}.block-wrapper--sectionswitcher,.ghi-block.has-year-switcher{z-index:1}.block-wrapper--sectionswitcher .section-switcher-wrapper,.ghi-block.has-year-switcher .section-switcher-wrapper{position:relative;z-index:1}.block-wrapper--sectionswitcher .section-switcher-wrapper .section-switcher-single,.block-wrapper--sectionswitcher .section-switcher-wrapper button,.ghi-block.has-year-switcher .section-switcher-wrapper .section-switcher-single,.ghi-block.has-year-switcher .section-switcher-wrapper button{display:inline-block;padding:.5rem 1.2rem;text-transform:uppercase;color:var(--ghi-default-text-color);border:0;background-color:var(--ghi-primary-button-color);font-size:var(--cd-font-size--small);font-weight:bold}.block-wrapper--sectionswitcher .section-switcher-wrapper button,.ghi-block.has-year-switcher .section-switcher-wrapper button{transition:background-color .6s ease-out,color .6s ease-out}.block-wrapper--sectionswitcher .section-switcher-wrapper button:hover,.block-wrapper--sectionswitcher .section-switcher-wrapper button:focus,.ghi-block.has-year-switcher .section-switcher-wrapper button:hover,.ghi-block.has-year-switcher .section-switcher-wrapper button:focus{background-color:var(--ghi-primary-button-color-hover)}.block-wrapper--sectionswitcher .section-switcher-wrapper button svg,.ghi-block.has-year-switcher .section-switcher-wrapper button svg{fill:var(--ghi-default-text-color)}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown{position:absolute;left:0;min-width:5.25rem;background-color:var(--ghi-primary-background-color)}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul{margin:.5rem 0;padding:0}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li{padding:.5rem 1.2rem;list-style-type:none;white-space:nowrap;font-size:var(--cd-font-size--small);font-weight:bold}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li a,.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li a:hover,.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li a:focus,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li a,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li a:hover,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li a:focus{text-decoration:none;color:var(--ghi-default-text-color);font-weight:normal}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li a:hover,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li a:hover{color:var(--ghi-primary-button-color-hover)}@media(min-width: 1024px){.block-wrapper--sectionswitcher .section-switcher-wrapper,.ghi-block.has-year-switcher .section-switcher-wrapper{top:.25rem}}.block-subpage-title{background-color:var(--ghi-default-background-color)}.block-subpage-title h2{margin:0 auto;padding-top:3rem;padding-bottom:3rem}.cluster-icon svg{position:relative;top:20%;left:20%}.cluster-icon svg *{fill:var(--hpc-brown)}.cluster-item.active .cluster-icon svg *{fill:var(--cd-white)}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas){border:1px solid var(--cd-default-border-color) !important;border-radius:5px !important}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) .ui-dialog-titlebar{height:3rem !important;padding:1rem !important;border-top-left-radius:inherit !important;border-top-right-radius:inherit !important;background-color:var(--ghi-default-background-color) !important}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) .ui-dialog-titlebar .ui-dialog-title{color:var(--ghi-default-text-color) !important}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) .ui-dialog-titlebar button.ui-dialog-titlebar-close{top:.5rem;right:.5rem;margin:0;transform:none;opacity:.8;border:none;background:none}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) .ui-dialog-titlebar button.ui-dialog-titlebar-close span.ui-button-icon{top:0;left:0;width:100%;height:100%;margin:0;transform:none;background-color:var(--ghi-default-text-color) !important;-webkit-mask-image:url("../../../contrib/gin/dist/media/sprite.svg#close-view");mask-image:url("../../../contrib/gin/dist/media/sprite.svg#close-view");-webkit-mask-size:24px 24px;mask-size:24px 24px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center center;mask-position:center center}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal{padding:1rem !important;color:var(--ghi-default-text-color) !important;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit;background:var(--cd-white) !important}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal .hpc-download-dialog-wrapper{font-size:var(--cd-font-size--small)}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal .hpc-download-dialog-wrapper .hpc-download-dialog-content p{margin:0;line-height:1.2rem}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal .hpc-download-dialog-wrapper .hpc-download-dialog-content>div{display:flex;flex-direction:column;gap:1rem}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal .hpc-download-dialog-wrapper .hpc-download-dialog-footer{margin-top:1rem;padding-top:1rem;border-top:1px solid gray;line-height:1.2rem}ul.links--entity-navigation{display:flex;align-items:center;margin:0;padding:0;gap:2rem}ul.links--entity-navigation>li>.link-wrapper,ul.links--entity-navigation>li>button{position:relative;display:flex;align-items:center;height:3.5rem}ul.links--entity-navigation>li.active>.link-wrapper::before,ul.links--entity-navigation>li.active>button::before,ul.links--entity-navigation>li>button[aria-expanded=true]::before{position:absolute;right:-1px;bottom:-1px;left:-1px;width:calc(100% + 2px);height:4px;content:"";transition:background .3s ease;border-bottom:4px solid var(--ghi-yellow)}ul.links--entity-navigation li{list-style-type:none}ul.links--entity-navigation li a{text-decoration:none;color:var(--hpc-dark-brown)}ul.links--entity-navigation li a.header-link{border-bottom:1px solid var(--ghi-default-border-color-background)}ul.links--entity-navigation li a.active{font-weight:bold}ul.links--entity-navigation li.expandable.dropdown{position:relative}ul.links--entity-navigation li.expandable.active>button[data-cd-toggler]{font-weight:bold}ul.links--entity-navigation li.expandable>button[data-cd-toggler]{padding:0;text-transform:none;border:0;background-color:rgba(0,0,0,0)}ul.links--entity-navigation li.expandable>button[data-cd-toggler] svg.cd-dropdown__icon{fill:var(--ghi-primary-button-color)}ul.links--entity-navigation li.expandable a{padding:.5rem 0;white-space:nowrap;font-size:var(--cd-font-size--default)}ul.links--entity-navigation li.expandable a:hover{color:var(--ghi-primary-button-color-hover)}ul.links--entity-navigation li.expandable.dropdown>div[data-cd-hidden=false]{position:absolute;z-index:201;top:3.5rem;left:-1.5rem;display:flex;flex-direction:column;padding:.5rem 1.5rem;background-color:var(--ghi-primary-background-color)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]{position:absolute;z-index:201;top:3.5rem;right:0;left:0;padding-top:1rem;padding-bottom:1rem;background-color:var(--ghi-primary-background-color)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer{max-width:calc(var(--content-width) + 24px);margin-right:auto;margin-left:auto;padding-right:var(--cd-container-padding);padding-left:var(--cd-container-padding)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-header{margin-bottom:1rem;padding-top:1rem;padding-bottom:1rem;border-bottom:1px solid var(--ghi-default-border-color-background)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-header h3{margin-bottom:0}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-header h3 a{font-size:var(--cd-font-size--2xbase)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-header .metadata{font-size:var(--cd-font-size--small)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner{display:flex;gap:1rem;flex-direction:row}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper{display:inline-block;width:auto}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group{display:inline-block;width:auto}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group>p{display:inline-block;width:auto;font-weight:bold}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group ul{-webkit-padding-start:0;padding-inline-start:0}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group ul li{width:80%;padding:.5rem 0}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group ul li a{white-space:unset}@media(min-width: 768px){ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer{max-width:calc(var(--content-width) + 48px);padding-right:var(--cd-container-padding-xlarge);padding-left:var(--cd-container-padding-xlarge)}}.ghi-image-wrapper{position:relative}.ghi-image-wrapper div.image-caption-wrapper,.ghi-image-wrapper div.image-credit-wrapper{position:absolute;top:0;right:0;bottom:0;left:0;height:100%;text-align:right;opacity:.9}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper,.link-carousel-wrapper .ghi-image-wrapper div.image-credit-wrapper{max-height:568px}.ghi-image-wrapper div.image-caption-wrapper div.image-caption{position:absolute;right:1.9rem;bottom:2rem;display:inline-block;max-width:400px;padding:1rem 2rem;text-align:left;color:var(--ghi-default-text-color);background-color:var(--cd-white);font-size:var(--cd-font-size--tiny)}.ghi-image-wrapper div.image-caption-wrapper div.image-caption .location{margin:0 0 .5rem 0;font-size:var(--cd-font-size--tiny);font-weight:700}.ghi-image-wrapper div.image-caption-wrapper div.image-caption p{margin:0}.ghi-image-wrapper div.image-caption-wrapper div.image-caption .credits{font-style:italic}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption{position:absolute;right:calc(1.9rem + 2px);bottom:calc(2rem + 2px);display:inline-block;width:1.5rem;height:1.5rem;padding:0 !important;background-color:var(--cd-white);font-size:var(--cd-font-size--small);line-height:1.5rem}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption:focus,.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption:hover{background-color:var(--cd-primary-color)}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption:focus+.image-caption,.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption:hover+.image-caption{display:inline-block}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption::after{display:block;content:"i";text-align:center;font-weight:700}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper div.image-caption:hover{display:inline-block}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper div.image-caption{display:none}@media(max-width: 767px){.ghi-image-wrapper div.image-caption-wrapper a.expand-caption{position:absolute;right:calc(1.9rem + 2px);bottom:calc(2rem + 2px);display:inline-block;width:1.5rem;height:1.5rem;padding:0 !important;background-color:var(--cd-white);font-size:var(--cd-font-size--small);line-height:1.5rem}.ghi-image-wrapper div.image-caption-wrapper a.expand-caption:focus,.ghi-image-wrapper div.image-caption-wrapper a.expand-caption:hover{background-color:var(--cd-primary-color)}.ghi-image-wrapper div.image-caption-wrapper a.expand-caption:focus+.image-caption,.ghi-image-wrapper div.image-caption-wrapper a.expand-caption:hover+.image-caption{display:inline-block}.ghi-image-wrapper div.image-caption-wrapper a.expand-caption::after{display:block;content:"i";text-align:center;font-weight:700}.ghi-image-wrapper div.image-caption-wrapper div.image-caption:hover{display:inline-block}.ghi-image-wrapper div.image-caption-wrapper div.image-caption{display:none}}.ghi-image-wrapper div.image-credit-wrapper a.expand-caption{display:none}.ghi-image-wrapper div.image-credit-wrapper div.image-credit{position:absolute;right:1.9rem;bottom:2rem;display:inline-block;padding:.1rem .5rem;color:var(--cd-white);background-color:var(--cd-black);font-size:var(--cd-font-size--tiny)}.block-document-meta-data>ul,.block-section-meta-data>ul,article.node--type-article .node__meta .node__submitted>ul,article.node--type-document .node__meta .node__submitted>ul,.megamenu .megamenu-header>ul{display:flex;flex-wrap:wrap;row-gap:1rem;margin-top:0;margin-bottom:0;margin-left:-0.5rem;padding:0;list-style:none;-webkit-clip-path:inset(-3rem -3rem 0 0.5rem);clip-path:inset(-3rem -3rem 0 0.5rem)}.block-document-meta-data>ul>li,.block-section-meta-data>ul>li,article.node--type-article .node__meta .node__submitted>ul>li,article.node--type-document .node__meta .node__submitted>ul>li,.megamenu .megamenu-header>ul>li{position:relative;flex-basis:auto;flex-grow:0;padding:0 .5rem;border:0}.block-document-meta-data>ul>li:first-child,.block-section-meta-data>ul>li:first-child,article.node--type-article .node__meta .node__submitted>ul>li:first-child,article.node--type-document .node__meta .node__submitted>ul>li:first-child,.megamenu .megamenu-header>ul>li:first-child{padding-left:.5rem}.block-document-meta-data>ul>li::before,.block-section-meta-data>ul>li::before,article.node--type-article .node__meta .node__submitted>ul>li::before,article.node--type-document .node__meta .node__submitted>ul>li::before,.megamenu .megamenu-header>ul>li::before{position:absolute;left:0;width:1px;height:90%;content:" ";background-color:var(--ghi-default-border-color)}.modal-content table{width:100%}.leaflet-modal{z-index:10 !important}.leaflet-modal .overlay{background-color:rgba(0,0,0,0)}.leaflet-modal .modal{overflow:hidden;max-height:600px;padding:0 1.5rem}.leaflet-modal .modal-content{max-width:250px;padding:0;border:1px solid var(--hpc-border-color);border-radius:4px;background-color:var(--cd-white);font-size:var(--cd-font-size--base)}.leaflet-modal .modal-content .modal-inner{position:relative;padding:.5rem 1rem;line-height:24px}.leaflet-modal .modal-content .modal-inner i.close{position:absolute;top:-1rem;right:-1rem;opacity:1;color:var(--cd-primary-color);border-radius:50%;background-color:var(--cd-white);font-size:2rem}.leaflet-modal .modal-content .modal-inner div.title{margin-bottom:10px;font-weight:bold}.leaflet-modal .modal-content .modal-inner div.content{padding-top:.5rem;border-top:1px solid var(--hpc-border-color)}.leaflet-modal .modal-content .modal-inner div.monitoring-period{margin-top:5px;padding-top:5px;color:var(--ghi-default-text-color);border-top:1px solid var(--hpc-border-color);font-size:var(--cd-font-size--small)}.hpc-pie-chart-wrapper svg{width:20px;height:20px;transform:rotate(-90deg);border:1px solid var(--ghi-widget-color--dark);border-radius:50%;fill:var(--ghi-widget-color--light)}.hpc-pie-chart-wrapper svg circle{fill:var(--ghi-widget-color--light);stroke:var(--ghi-widget-color--dark);stroke-width:32;stroke-dasharray:100 100}.plan-entity-contribution-wrapper{display:flex;align-items:center;font-size:var(--cd-font-size--small)}.plan-entity-contribution-wrapper>span{font-weight:700}.plan-entity-contribution-wrapper ul{display:inline-flex;-webkit-padding-start:.5rem;padding-inline-start:.5rem;list-style-type:none;gap:.5rem}.plan-entity-contribution-wrapper ul li{display:flex;gap:3px}.plan-entity-contribution-wrapper ul li span.check-circle{color:var(--green)}.plan-status{width:1rem;height:1rem;border-radius:50%}.plan-status.plan-status-header-icon{background-color:var(--ghi-default-text-color)}.plan-status.unpublished{background-color:var(--ghi-status-color-unpublished)}.plan-status.published{background-color:var(--ghi-status-color-published)}.hpc-progress-bar-wrapper{display:inline-block;overflow:hidden;width:100%;height:14px;border:1px solid var(--ghi-widget-color--dark);background-color:var(--ghi-widget-color--light)}.hpc-progress-bar-wrapper .hpc-progress-bar-inner{height:100%;background-color:var(--ghi-widget-color--dark)}.project-data-popover table th{text-align:center}.project-data-popover table tr td{text-align:center}.project-data-popover table tr td:first-child{white-space:nowrap}.project-data-popover table tr td ul{-webkit-padding-start:unset;padding-inline-start:unset;list-style-type:none}.select-wrappers{position:absolute;top:-1.8rem;right:0;display:inline-block;margin:0}.select-wrappers>div.ajax-switcher-wrapper{display:inline-block}.select-wrappers>div.ajax-switcher-wrapper>form{display:inline-block;margin:0 0 0 1rem}div.ajax-switcher-wrapper>form{display:inline-block;margin:0 1rem 0 0}div.ajax-switcher-wrapper>form .form-item{display:inline-block}div.ajax-switcher-wrapper>form .select2,div.ajax-switcher-wrapper>form .select2-selection--single{display:inline-block;overflow:visible;width:auto !important;white-space:nowrap;border:none;background-color:rgba(0,0,0,0)}div.ajax-switcher-wrapper>form .select2 .select2-selection__rendered,div.ajax-switcher-wrapper>form .select2-selection--single .select2-selection__rendered{display:inline-block;height:auto !important;margin:0;padding-right:24px;padding-left:0;white-space:nowrap;color:var(--ghi-default-text-color);background-color:rgba(0,0,0,0);font-size:var(--cd-font-size--small);font-weight:bold}div.ajax-switcher-wrapper>form .select2 .select2-selection__rendered:after,div.ajax-switcher-wrapper>form .select2-selection--single .select2-selection__rendered:after{display:none}div.ajax-switcher-wrapper>form .select2 .icon,div.ajax-switcher-wrapper>form .select2-selection--single .icon{position:absolute;top:13px;right:6px;width:12px;height:12px;fill:var(--ghi-default-text-color)}.select2-dropdown.select2-dropdown--below{border-top:.5px solid}.select2-dropdown .select2-results{width:auto !important;border-radius:3px;background-color:var(--cd-white)}.select2-dropdown .select2-results ul li{padding:8px 18px;white-space:nowrap;border-top:none;border-bottom:none;font-size:var(--cd-font-size--small);font-weight:normal}.select2-dropdown .select2-results ul li.select2-results__option--highlighted{color:var(--cd-primary-color);background-color:rgba(0,0,0,0)}.select2-dropdown .select2-results ul.selectric-group li{padding-left:2rem;font-weight:normal}.select2-dropdown .select2-results ul.selectric-group li.selectric-group-label{padding-left:18px;font-weight:bold}#main-content .table-wrapper,.layout-builder-configure-block div[data-block-preview] .table-wrapper,.ghi-modal-dialog .table-wrapper{overflow-x:auto;max-width:calc(100vw - 1rem - 2*var(--cd-container-padding)) !important;margin-right:-5px}#main-content .table-wrapper table.ghi-table,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table,.ghi-modal-dialog .table-wrapper table.ghi-table{font-size:var(--cd-font-size--default)}#main-content .table-wrapper table.ghi-table.soft-limit,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.soft-limit,.ghi-modal-dialog .table-wrapper table.ghi-table.soft-limit{margin-bottom:2rem}#main-content .table-wrapper table.ghi-table.soft-limit+a.expand-table,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.soft-limit+a.expand-table,.ghi-modal-dialog .table-wrapper table.ghi-table.soft-limit+a.expand-table{display:block;margin-right:auto;margin-left:auto}.ghi-block #main-content .table-wrapper table.ghi-table,.ghi-block .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table,.ghi-block .ghi-modal-dialog .table-wrapper table.ghi-table{margin-bottom:0}#main-content .table-wrapper table.ghi-table th,#main-content .table-wrapper table.ghi-table td,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td,.ghi-modal-dialog .table-wrapper table.ghi-table th,.ghi-modal-dialog .table-wrapper table.ghi-table td{padding:1.5rem 2rem}body.path-frontpage #main-content .table-wrapper table.ghi-table th,body.path-overview #main-content .table-wrapper table.ghi-table th,body.path-frontpage #main-content .table-wrapper table.ghi-table td,body.path-overview #main-content .table-wrapper table.ghi-table td,body.path-frontpage .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th,body.path-overview .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th,body.path-frontpage .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td,body.path-overview .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td,body.path-frontpage .ghi-modal-dialog .table-wrapper table.ghi-table th,body.path-overview .ghi-modal-dialog .table-wrapper table.ghi-table th,body.path-frontpage .ghi-modal-dialog .table-wrapper table.ghi-table td,body.path-overview .ghi-modal-dialog .table-wrapper table.ghi-table td{padding:1.5rem 1rem}#main-content .table-wrapper table.ghi-table th.entity-name,#main-content .table-wrapper table.ghi-table th.cd-table--amount,#main-content .table-wrapper table.ghi-table th.cd-table--currency,#main-content .table-wrapper table.ghi-table th.cd-table--percentage,#main-content .table-wrapper table.ghi-table td.entity-name,#main-content .table-wrapper table.ghi-table td.cd-table--amount,#main-content .table-wrapper table.ghi-table td.cd-table--currency,#main-content .table-wrapper table.ghi-table td.cd-table--percentage,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.entity-name,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.cd-table--amount,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.cd-table--currency,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.cd-table--percentage,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.entity-name,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.cd-table--amount,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.cd-table--currency,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.cd-table--percentage,.ghi-modal-dialog .table-wrapper table.ghi-table th.entity-name,.ghi-modal-dialog .table-wrapper table.ghi-table th.cd-table--amount,.ghi-modal-dialog .table-wrapper table.ghi-table th.cd-table--currency,.ghi-modal-dialog .table-wrapper table.ghi-table th.cd-table--percentage,.ghi-modal-dialog .table-wrapper table.ghi-table td.entity-name,.ghi-modal-dialog .table-wrapper table.ghi-table td.cd-table--amount,.ghi-modal-dialog .table-wrapper table.ghi-table td.cd-table--currency,.ghi-modal-dialog .table-wrapper table.ghi-table td.cd-table--percentage{text-align:left;white-space:nowrap}#main-content .table-wrapper table.ghi-table th.cd-table--chart,#main-content .table-wrapper table.ghi-table td.cd-table--chart,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.cd-table--chart,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.cd-table--chart,.ghi-modal-dialog .table-wrapper table.ghi-table th.cd-table--chart,.ghi-modal-dialog .table-wrapper table.ghi-table td.cd-table--chart{text-align:center}#main-content .table-wrapper table.ghi-table th.not-available,#main-content .table-wrapper table.ghi-table td.not-available,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.not-available,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.not-available,.ghi-modal-dialog .table-wrapper table.ghi-table th.not-available,.ghi-modal-dialog .table-wrapper table.ghi-table td.not-available{font-style:italic}#main-content .table-wrapper table.ghi-table th[data-formatting=numeric-full],#main-content .table-wrapper table.ghi-table td[data-formatting=numeric-full],.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th[data-formatting=numeric-full],.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td[data-formatting=numeric-full],.ghi-modal-dialog .table-wrapper table.ghi-table th[data-formatting=numeric-full],.ghi-modal-dialog .table-wrapper table.ghi-table td[data-formatting=numeric-full]{text-align:right}#main-content .table-wrapper table.ghi-table th:first-child,#main-content .table-wrapper table.ghi-table td:first-child,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th:first-child,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td:first-child,.ghi-modal-dialog .table-wrapper table.ghi-table th:first-child,.ghi-modal-dialog .table-wrapper table.ghi-table td:first-child{padding-left:0}#main-content .table-wrapper table.ghi-table th:last-child:not(.cd-table--chart),#main-content .table-wrapper table.ghi-table td:last-child:not(.cd-table--chart),.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th:last-child:not(.cd-table--chart),.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td:last-child:not(.cd-table--chart),.ghi-modal-dialog .table-wrapper table.ghi-table th:last-child:not(.cd-table--chart),.ghi-modal-dialog .table-wrapper table.ghi-table td:last-child:not(.cd-table--chart){padding-right:0}#main-content .table-wrapper table.ghi-table.cd-table--responsive td:before,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.cd-table--responsive td:before,.ghi-modal-dialog .table-wrapper table.ghi-table.cd-table--responsive td:before{top:1.5rem;font-size:inherit}#main-content .table-wrapper table.ghi-table thead th,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table thead th,.ghi-modal-dialog .table-wrapper table.ghi-table thead th{white-space:nowrap;text-transform:uppercase;color:var(--ghi-default-text-color);border-bottom:1px solid var(--cd-default-border-color);background:rgba(0,0,0,0);font-size:var(--cd-font-size--small)}#main-content .table-wrapper table.ghi-table.sortable th,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th{cursor:pointer}#main-content .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort),#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort),.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort),.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse{padding-right:5px}#main-content .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)>span,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted>span,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse>span,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)>span,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted>span,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse>span,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)>span,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted>span,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse>span{display:inline-block;width:2rem;color:var(--cd-primary-color)}#main-content .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)::after,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted::after,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse::after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)::after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted::after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse::after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)::after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted::after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse::after{position:relative;top:4px;left:5px;display:inline-block;width:11px;height:19px;content:" ";background-size:contain}#main-content .table-wrapper table.ghi-table.sortable th:not(.sorttable-sorted):not(.sorttable-sorted-reverse):not(.sorttable-nosort):after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th:not(.sorttable-sorted):not(.sorttable-sorted-reverse):not(.sorttable-nosort):after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th:not(.sorttable-sorted):not(.sorttable-sorted-reverse):not(.sorttable-nosort):after{background-image:url("../img/table/ghi_sorting.svg")}#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted:after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted:after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted:after{background-image:url("../img/table/ghi_sorting_up.svg")}#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse:after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse:after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse:after{background-image:url("../img/table/ghi_sorting_down.svg")}#main-content .table-wrapper table.ghi-table.sortable th #sorttable-sortfwdind,#main-content .table-wrapper table.ghi-table.sortable th #sorttable-sortrevind,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th #sorttable-sortfwdind,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th #sorttable-sortrevind,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th #sorttable-sortfwdind,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th #sorttable-sortrevind{display:none}#main-content .table-wrapper table.ghi-table.sortable th.sorttable-nosort,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-nosort,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-nosort{cursor:initial}#main-content .table-wrapper table.ghi-table tbody tr,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody tr,.ghi-modal-dialog .table-wrapper table.ghi-table tbody tr{border-bottom:1px solid var(--cd-default-border-color)}#main-content .table-wrapper table.ghi-table tbody tr:last-child,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody tr:last-child,.ghi-modal-dialog .table-wrapper table.ghi-table tbody tr:last-child{border-bottom:0}#main-content .table-wrapper table.ghi-table tbody td:first-child.subrow,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td:first-child.subrow,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td:first-child.subrow{padding-left:2rem}#main-content .table-wrapper table.ghi-table tbody td .tooltip,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td .tooltip,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td .tooltip{margin-left:.3rem}#main-content .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart{white-space:nowrap}#main-content .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart .hpc-pie-chart-wrapper,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart .hpc-pie-chart-wrapper,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart .hpc-pie-chart-wrapper{display:inline-flex;width:auto;height:100%;margin-left:5px;aspect-ratio:1/1;vertical-align:middle}#main-content .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar{white-space:nowrap}#main-content .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar .hpc-progress-bar-wrapper,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar .hpc-progress-bar-wrapper,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar .hpc-progress-bar-wrapper{margin-left:5px}#main-content .table-wrapper table.ghi-table tbody td.spark-line-chart,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.spark-line-chart,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.spark-line-chart{width:10rem;padding:.5rem .75rem .5rem 0}#main-content .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline{display:inline-block;width:100%}#main-content .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline svg circle[r="2"],.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline svg circle[r="2"],.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline svg circle[r="2"]{r:4px;fill:#fed83d}#main-content .table-wrapper table.ghi-table tbody div.modal-link,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody div.modal-link,.ghi-modal-dialog .table-wrapper table.ghi-table tbody div.modal-link{display:inline-block;vertical-align:middle}#main-content .table-wrapper table.ghi-table tbody div.modal-link a,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody div.modal-link a,.ghi-modal-dialog .table-wrapper table.ghi-table tbody div.modal-link a{text-decoration:none}@media(min-width: 768px){#main-content .table-wrapper,.layout-builder-configure-block div[data-block-preview] .table-wrapper,.ghi-modal-dialog .table-wrapper{max-width:calc(100vw - 1rem - 2*var(--cd-container-padding-xlarge)) !important}}.ghi-modal-dialog .table-wrapper table.ghi-table{margin-bottom:0}.ghi-modal-dialog .table-wrapper table.ghi-table th{white-space:nowrap;color:var(--ghi-default-text-color);background-color:inherit}.ghi-modal-dialog .table-wrapper table.ghi-table.has-totals-row th{border-bottom:0}.ghi-modal-dialog .table-wrapper table.ghi-table th,.ghi-modal-dialog .table-wrapper table.ghi-table td,.ghi-modal-dialog .table-wrapper table.ghi-table td a{color:var(--ghi-default-text-color);font-size:var(--cd-font-size--small)}.ghi-modal-dialog .table-wrapper table.ghi-table th,.ghi-modal-dialog .table-wrapper table.ghi-table td{padding:1.5rem .5rem 1.5rem 2rem}.ghi-modal-dialog .table-wrapper table.ghi-table th:first-child,.ghi-modal-dialog .table-wrapper table.ghi-table td:first-child{padding-left:.5rem}.ghi-modal-dialog .table-wrapper table.ghi-table th:last-child,.ghi-modal-dialog .table-wrapper table.ghi-table td:last-child{padding-right:.5rem}.ghi-modal-dialog .table-wrapper table.ghi-table tr.totals-row,.ghi-modal-dialog .table-wrapper table.ghi-table tfoot tr{border-bottom:0;background-color:var(--cd-default-background-color)}.ghi-modal-dialog .table-wrapper table.ghi-table tr.totals-row td,.ghi-modal-dialog .table-wrapper table.ghi-table tfoot tr td{font-weight:700}.ajax-progress-fullscreen{z-index:1052;top:0;left:0;width:100%;height:100%;pointer-events:unset;opacity:.7;background-color:var(--cd-tag--color)}.ui-dialog{z-index:301}.ui-dialog .ui-dialog-title{margin-top:0 !important;margin-bottom:0 !important}.ui-dialog .ui-dialog-title .cluster-icon{display:inline-block;width:1rem;margin-right:.5rem;color:#fff}.ui-dialog .ui-dialog-title .cluster-icon svg *{fill:var(--cd-white)}.ui-dialog .ui-dialog-content{position:static !important;color:inherit !important}.ui-dialog.download-dialog .ui-dialog-content{overflow:inherit !important}.ui-dialog.ajax-block-error .ui-dialog-content{margin-top:2rem;margin-bottom:2rem}.ui-dialog.ghi-modal-dialog{max-width:1280px;margin:1rem;border:0 none !important;border-radius:var(--ghi-ui-dialog-border-radius);background:var(--ghi-grey--background) !important}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar{padding:24px;border:1px solid var(--cd-default-border-color);border-top-left-radius:var(--ghi-ui-dialog-border-radius);border-top-right-radius:var(--ghi-ui-dialog-border-radius);background:var(--cd-white) !important;line-height:1.2}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close{top:20px;right:18px;box-sizing:border-box;width:2em;margin:0;transform:none;white-space:nowrap;text-indent:-9999px;opacity:.8;border:none;background:none}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-button-icon{top:0;left:0;width:100%;height:100%;margin:0;transform:none;background-color:var(--cd-primary-color) !important;-webkit-mask-image:url("/themes/contrib/gin/dist/media/sprite.svg#close-view");mask-image:url("/themes/contrib/gin/dist/media/sprite.svg#close-view");-webkit-mask-size:24px 24px;mask-size:24px 24px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center center;mask-position:center center;background-image:none}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-title{color:var(--ghi-default-text-color) !important}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-title .cluster-icon{display:inline-block;width:1rem;margin-right:1rem;color:#fff}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-title .cluster-icon svg *{fill:var(--ghi-default-text-color)}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-title .title-additional-info{float:right;margin-right:3rem}.ui-dialog.ghi-modal-dialog .ui-dialog-content{border-right:1px solid var(--cd-default-border-color);border-bottom:1px solid var(--cd-default-border-color);border-left:1px solid var(--cd-default-border-color);border-bottom-right-radius:var(--ghi-ui-dialog-border-radius);border-bottom-left-radius:var(--ghi-ui-dialog-border-radius);background:var(--cd-white) !important}.ui-dialog.ghi-modal-dialog .ui-dialog-content a{color:var(--ghi-default-text-color)}.ui-dialog.ghi-modal-dialog .ui-dialog-content a.fts-link{display:inline-block;margin:1rem}.ui-dialog.ghi-modal-dialog .ui-dialog-content a.fts-link img{height:20px;vertical-align:middle}.ui-dialog.ghi-modal-dialog .ui-dialog-content ul,.ui-dialog.ghi-modal-dialog .ui-dialog-content ol{-webkit-padding-start:2rem;padding-inline-start:2rem}.ui-dialog.ghi-modal-dialog .ui-dialog-content ul li,.ui-dialog.ghi-modal-dialog .ui-dialog-content ol li{padding:.5rem 0}.ghi-modal-dialog+.ui-widget-overlay{z-index:300;opacity:.9;background:var(--ghi-grey--background) !important}article.node--view-mode-grid{display:flex;flex-direction:column;height:100%;border:1px solid var(--cd-default-border-color)}article.node--view-mode-grid .cd-teaser__image{max-width:unset;margin-top:0;margin-bottom:0}article.node--view-mode-grid .cd-teaser__container{display:flex;flex-direction:column;justify-content:space-between;padding:0 1rem}article.node--view-mode-grid .cd-teaser__container a{text-decoration:none}article.node--view-mode-grid .cd-teaser__container .cd-teaser__title--wrapper{font-size:var(--cd-font-size--default)}article.node--view-mode-grid .cd-teaser__container .cd-teaser__description{min-height:7rem;padding-top:1rem;padding-bottom:1rem;line-height:1.2rem}article.node--view-mode-grid .cd-teaser__container .cd-teaser__description:before{display:block;width:12%;padding-top:1rem;content:" ";border-top:3px solid var(--ghi-yellow)}article.node--view-mode-grid .cd-teaser__container .cd-teaser__description .cd-teaser__date{font-size:var(--cd-font-size--small)}body.page-node-type-article .region-page-title .title-prefix,body.page-node-type-document .region-page-title .title-prefix{display:inline-block;margin-top:1rem;padding:.5rem 1rem;text-transform:uppercase;background-color:var(--ghi-primary-button-color);font-size:var(--cd-font-size--small);font-weight:700}body.page-node-type-article article.node--view-mode-full .document-summary,body.page-node-type-document article.node--view-mode-full .document-summary{margin-bottom:4.5rem}body.page-node-type-article article.node--view-mode-full footer.node__meta,body.page-node-type-document article.node--view-mode-full footer.node__meta{padding:1rem 0;border-top:1px solid var(--ghi-default-border-color);border-bottom:1px solid var(--ghi-default-border-color)}body.page-node-type-article article.node--view-mode-full footer.node__meta .node__submitted,body.page-node-type-document article.node--view-mode-full footer.node__meta .node__submitted{display:flex;gap:1rem;font-size:var(--cd-font-size--small)}body.page-node-type-article article.node--view-mode-full .content-wrapper,body.page-node-type-document article.node--view-mode-full .content-wrapper{margin-top:4.5rem}body.page-node-type-article article.node--view-mode-full .paragraph--type--text .gho-text__text a>.media--view-mode-thumbnail-medium.align-right,body.page-node-type-document article.node--view-mode-full .paragraph--type--text .gho-text__text a>.media--view-mode-thumbnail-medium.align-right{margin-bottom:1rem;margin-left:2rem;text-align:center;line-height:.7rem}body.page-node-type-article article.node--view-mode-full .paragraph--type--text .gho-text__text a>.media--view-mode-thumbnail-medium .field--name-field-credits,body.page-node-type-document article.node--view-mode-full .paragraph--type--text .gho-text__text a>.media--view-mode-thumbnail-medium .field--name-field-credits{width:auto;padding:.9rem .9rem;word-wrap:break-word;background-color:var(--ghi-yellow);font-size:var(--cd-font-size--small);font-weight:bold}body.path-overview #main-content,body.path-frontpage #main-content{padding-right:0;padding-left:0}body.path-overview #main-content .ghi-block:first-child,body.path-frontpage #main-content .ghi-block:first-child{margin-top:0;padding-top:0}.ghi-block-global-homepages>.cd-block-title{margin-bottom:.5rem;font-size:var(--cd-font-size--2xbase);font-weight:700}.ghi-block-global-homepages .ghi-block:first-child{margin-top:0;padding-top:0}.ghi-block-global-homepages .ghi-block:first-child .cd-block-title{font-size:var(--cd-font-size--2xbase);font-weight:400}body.page-node-type-homepage .ghi-block:first-child{margin-top:2rem}.snap-png-header{display:none}html.snap--pdf #toolbar-administration,html.snap--pdf .cd-global-header,html.snap--pdf .cd-site-header__actions,html.snap--pdf .layout-builder-ipe-actions,html.snap--pdf .block-wrapper--downloadbutton,html.snap--pdf .block-links{display:none}html.snap--pdf .table-wrapper table.soft-limit+a.expand-table{display:none !important}html.snap--pdf .table-wrapper table.soft-limit tr{display:table-row !important}html.snap--pdf .table-wrapper .modal-link{display:none !important}html.snap--pdf .dialog-off-canvas-main-canvas>.cd-layout-container{grid-template-rows:80px auto 1fr auto}.snap-png-header{display:none}html.snap--png .snap-png-header{position:relative;display:block;width:100%;color:var(--ghi-default-text-color);background-color:var(--cd-white)}html.snap--png .snap-png-header:before{position:absolute;z-index:-1;top:-1rem;right:calc(-7rem - 2px);bottom:0;left:calc(-7rem - 2px);height:calc(100% + 1rem);content:"";border-top:1px solid var(--cd-default-border-color);border-bottom:1px solid var(--cd-default-border-color);background-color:inherit}html.snap--png .block-links,html.snap--png .table-search-input-wrapper.empty,html.snap--png .cd-block-title{display:none !important}html.snap--png .header{width:100%}html.snap--png .caption-wrapper{float:left;width:70%}html.snap--png .caption{margin-top:2rem;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--2xbase);line-height:1.4rem}html.snap--png .link{text-decoration:none;color:var(--ghi-default-text-color) !important;font-size:var(--cd-font-size--tiny)}html.snap--png .logo{float:right;width:30%;padding-top:2rem;text-align:right}html.snap--png .title-wrapper{width:100%;margin-bottom:1rem;border-bottom:1px solid var(--cd-default-border-color);font-size:18px}html.snap--png .title{float:left;width:80%}html.snap--png .date{float:right;width:20%;text-align:right}html.snap--png .ghi-block{background-color:#fff}.leaflet-container{font:inherit}.leaflet-container .leaflet-pane{z-index:0}.leaflet-container .leaflet-pane .leaflet-tile-container img{mix-blend-mode:unset}.leaflet-control-container .leaflet-sidebar,.leaflet-control-container .leaflet-top,.leaflet-control-container .leaflet-bottom{z-index:100}.leaflet-control-container .leaflet-sidebar{height:93%;padding:1px}.leaflet-control-container .leaflet-control-attribution{font-size:11px}.leaflet-control-container .leaflet-top.leaflet-left{width:50%}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control{z-index:101;color:var(--ghi-default-text-color);border:1px solid var(--cd-default-border-color);border-radius:0;box-shadow:none;font-size:var(--cd-font-size--default)}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-zoom a{font-size:var(--cd-font-size--default);line-height:26px}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search{position:absolute;left:2.5rem;width:17rem;padding:4px 0}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search input.search-input{display:block !important;width:75%;margin:4px 1rem 4px 1rem;padding:0;border:1px solid var(--cd-default-border-color);border:none;font-size:var(--cd-font-size--small)}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search input.search-input:focus{outline:none}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search a.search-button,.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search a.search-button:hover{position:absolute;top:2px;right:0;margin:3px 0;background-color:rgba(0,0,0,0);background-image:url("../img/icons/search.svg");background-position:center center;background-size:12px 12px}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search .search-alert{padding:.5rem 1rem;color:inherit;border-top:1px solid var(--cd-blue-grey);border-radius:0;font-weight:normal}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search ul.search-tooltip{position:relative;width:100%;max-height:250px;margin-bottom:0;padding-top:4px;border-top:1px solid var(--cd-blue-grey);border-bottom-right-radius:4px;border-bottom-left-radius:4px;background-color:rgba(0,0,0,0);box-shadow:none}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search ul.search-tooltip .search-tip{margin:0;padding:.5rem 1rem;border-radius:0;background:var(--cd-white);font-size:var(--cd-font-size--small)}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search ul.search-tooltip .search-tip .subline{color:var(--cd-grey--mid);font-size:var(--cd-font-size--tiny)}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search ul.search-tooltip .search-tip.hover{background-color:var(--cd-blue-grey--light)}.leaflet-bar-horizontal a{float:left;border-right:1px solid #ccc;border-bottom-width:0}.leaflet-bar-horizontal a:hover{border-bottom-width:0}.leaflet-bar-horizontal a:first-child{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-left-radius:4px}.leaflet-bar-horizontal a:last-child{border-right-width:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}.leaflet-bar-horizontal.admin-level-select a{background-color:var(--cd-grey--light)}.leaflet-bar-horizontal.admin-level-select a.active{background-color:var(--cd-white)}.map-wrapper-outer .leaflet-container.leaflet-map-disabled .leaflet-pane,.map-wrapper-outer .leaflet-container.leaflet-map-disabled .leaflet-top,.map-wrapper-outer .leaflet-container.leaflet-map-disabled .leaflet-bottom{opacity:.7}.map-wrapper-outer .leaflet-control-container .admin-level-select a.disabled{cursor:default;opacity:.2}.map-wrapper-outer .leaflet-control-container .leaflet-control.donut-control{top:.8rem;right:.1rem;border:none}.map-wrapper-outer .leaflet-control-container .leaflet-control.donut-control .donut-control-icon{cursor:pointer}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar{width:auto;font-size:var(--cd-font-size--base)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar a.close{z-index:800;width:auto;height:auto;margin:0;text-indent:0;opacity:1 !important;color:var(--cd-primary-color);background:none}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container{overflow:hidden;padding:0}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container{display:flex;flex-direction:column;height:100%;line-height:24px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .modal-header{height:auto;margin-bottom:.5rem;padding:1rem 1rem .5rem 1rem;color:var(--ghi-default-text-color);border:none;font:inherit}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.title,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .modal-header div.title{font-size:var(--cd-font-size--base);font-weight:bold;line-height:24px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .modal-content{overflow:auto;height:100%;padding:0 1rem;border:none;box-shadow:none;font-size:var(--cd-font-size--small)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container{width:375px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header .navigation{position:relative;left:-0.5rem;display:flex;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--tiny);line-height:24px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header .navigation .link{cursor:pointer;color:var(--cd-primary-color);font-weight:bold}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header .navigation .link.disabled{cursor:default;color:var(--hpc-grey)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.title,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.admin-area{line-height:24px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.title{font-size:var(--cd-font-size--base);font-weight:700}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.tag-line{font-size:var(--cd-font-size--tiny);font-weight:400}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.admin-area{padding-bottom:.5rem;text-transform:uppercase;border-bottom:1px solid #e1e1e1;font-size:var(--cd-font-size--extra-tiny);font-size:10px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content div.section-header{display:flex;gap:.5rem;align-items:center;margin-bottom:0;text-transform:uppercase;font-size:var(--cd-font-size--small);font-weight:700;line-height:16px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content div.section-header span{display:inline-block}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content div.monitoring-period{color:var(--ghi-default-text-color);font-size:var(--cd-font-size--small)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible{display:flex;justify-content:space-between}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper>div,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible>div{display:inline-block}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper .metric-color-code,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible .metric-color-code{position:relative;top:-0.1rem;display:inline-block;width:.5rem;height:.5rem;margin-top:0;margin-right:.4rem;border-radius:50%}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper .metric-label,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible .metric-label{margin-right:1rem}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper .metric-value,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible .metric-value{font-weight:bold}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .monitoring-period-wrapper{margin-top:1rem;padding:.5rem 0}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .monitoring-period-wrapper .measurement-bar-chart-container svg{pointer-events:all}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .monitoring-period-wrapper .measurement-bar-chart-container svg g{pointer-events:all}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container{width:400px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item{display:flex}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item label.form-label{width:40%;margin-bottom:0;padding-top:3px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item>div{width:60%}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric{display:block;overflow:visible;padding:0;white-space:nowrap;border:none;background-color:rgba(0,0,0,0)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric .label{height:auto !important;height:30px;margin:0;padding:0 24px 0 9px;white-space:nowrap;color:var(--cd-primary-color);border-bottom:1px solid var(--hpc-orange);border-radius:0;background-color:rgba(0,0,0,0);font-size:var(--cd-font-size--small);font-size:inherit;font-weight:bold;line-height:30px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric .label:after{display:none}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric .icon{position:absolute;top:12px;right:6px;width:10px;height:10px;fill:var(--hpc-orange)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric-items{position:absolute;z-index:1;top:0;border-radius:3px;background-color:var(--cd-white)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric-items ul li{padding:5px 8px;white-space:nowrap;border-top:none;border-bottom:none;font-size:var(--cd-font-size--small);font-weight:bold}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric-items ul li.selected{color:var(--cd-primary-color);background-color:rgba(0,0,0,0)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric-wrapper.selectric-open .label{border-bottom:none}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form button.apply-donut-settings{margin-top:0;margin-bottom:.5rem;padding:6px 8px;color:var(--cd-white);background-color:var(--cd-primary-color)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar.visible~.leaflet-right{right:0 !important}.map-wrapper-outer .map-tabs{height:auto;background-color:var(--ghi-default-text-color)}.map-wrapper-outer .map-tabs ul{display:flex;height:100%;margin:0;padding:0;gap:2rem;list-style-type:none}.map-wrapper-outer .map-tabs ul li{position:relative;height:2.5rem;padding:.5rem 0;color:var(--cd-white);font-size:var(--cd-font-size--small)}.map-wrapper-outer .map-tabs ul li a{cursor:pointer;text-decoration:none;color:var(--cd-white) !important;font-size:inherit}.map-wrapper-outer .map-tabs ul li .ghi-dropdown__btn+div.cd-dropdown{position:absolute;z-index:101;top:2.5rem;left:-0.3rem;border-top:0}.map-wrapper-outer .map-tabs ul li .ghi-dropdown__btn+div.cd-dropdown div.ghi-dropdown--content{display:flex;flex-direction:column;padding:0;border-top:0;border-top-left-radius:0;border-top-right-radius:0}.map-wrapper-outer .map-tabs ul li .ghi-dropdown__btn+div.cd-dropdown div.ghi-dropdown--content a{display:inline-block;padding:.3rem;white-space:nowrap;color:var(--ghi-default-text-color) !important}.map-wrapper-outer .map-tabs ul li .ghi-dropdown__btn+div.cd-dropdown div.ghi-dropdown--content a:hover{cursor:pointer;background-color:var(--ghi-yellow)}.map-wrapper-outer .map-tabs ul li.active{border-bottom:4px solid var(--ghi-yellow)}.map-wrapper-outer .donut{margin-top:.5rem}.map-wrapper-outer .donut .map-legend{position:absolute;z-index:90;top:1rem;right:1rem;padding:.5rem;background:var(--cd-white)}.map-wrapper-outer .donut .map-legend .legend-caption{margin:0 0 .5rem 0;font-size:var(--cd-font-size--tiny)}.map-wrapper-outer .donut .map-legend ul{display:flex;margin:0;padding:0;border-radius:3px}.map-wrapper-outer .donut .map-legend ul li.legend-item{display:flex;margin:0 1rem 0 0;padding:2px}.map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon{width:.5rem;height:.5rem;margin-top:.3rem;margin-right:.4rem;border-radius:50%}.map-wrapper-outer .donut .map-legend ul li.legend-item .legend-label{color:var(--ghi-default-text-color);font-size:var(--cd-font-size--tiny)}.map-wrapper-outer .donut .map-legend ul li.legend-item:last-child{margin-right:0}.map-wrapper-outer .donut .has-donut-control .map-legend{right:3rem}.map-wrapper-outer .donut svg.donut .empty path{display:none}@media(max-width: 575px){.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs{position:relative;top:-1rem;margin-right:.5rem}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul{margin:0}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li{padding:0;background-color:rgba(0,0,0,0)}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li a.desktop{display:none}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li a.mobile{display:inline-block;width:3rem;height:3rem}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li a.mobile .icon{width:3rem;height:3rem;padding:.5rem;border-radius:3px;background-color:var(--cd-grey--light);fill:var(--cd-grey--mid)}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li.active a.mobile .icon{background-color:var(--cd-primary-color);fill:var(--cd-white)}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .download-link-wrapper{margin-top:.7rem;margin-bottom:-0.7rem}}.map-wrapper-outer .map-container{position:relative;width:100%;min-height:500px;margin:0;padding:0;border:1px solid var(--hpc-border-color)}.map-wrapper-outer .map-container>.leaflet-container{min-height:500px}.map-wrapper-outer .map-container .download-link-wrapper{float:right;margin-left:1rem}@media(max-width: 575px){.map-wrapper-outer .map-container .download-link-wrapper{margin-left:.5rem}}.map-wrapper-outer .map-container .map-circle-tooltip,.map-wrapper-outer .map-container .measurement-bar-chart-tooltip{padding:5px 10px;color:var(--cd-white);border-radius:5px;background-color:var(--cd-black);font-size:12px;line-height:1.2rem}.map-wrapper-outer .map-container .map-circle-tooltip div,.map-wrapper-outer .map-container .measurement-bar-chart-tooltip div{display:flex;justify-content:space-between}.cd-page-title{border-bottom:0}.cd-tag{margin:0;padding:0;text-transform:unset;color:var(--ghi-default-text-color);background-color:unset;font-size:var(--cd-font-size--small)}@media(min-width: 1440px){.cd-teaser__image{max-width:100%}}footer.ghi-social-links--inline{width:auto;margin-top:2px}footer.ghi-social-links--fixed{position:fixed;top:50%;right:0;display:inline-block;width:auto}footer.ghi-social-links--fixed>.ghi-social-links__wrapper{display:inline-block;width:-moz-fit-content;width:fit-content;padding:0;background-color:var(--cd-black)}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul{display:inline-flex;flex-direction:column;gap:0;align-items:center}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li{margin-top:.3rem;margin-left:0 !important;padding:.3rem;border-bottom:1px solid var(--cd-white)}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a{display:inline-block;overflow:hidden;width:2rem;height:2rem;padding:0}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a svg{position:relative;display:block;width:100%;height:100%}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a svg path{fill:var(--cd-white);scale:2.3}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--twitter{position:relative;top:.6rem;left:.25rem}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--twitter svg path{scale:1.3}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--facebook svg{left:-4px}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--facebook svg,footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--linkedin svg{background-color:var(--cd-white)}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--facebook svg path,footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--linkedin svg path{fill:var(--cd-black)}#main-content .gho-footnote-list__wrapper[data-visible]{width:calc(100% + 68px);padding:1rem 0 1rem 114px;transform:translateX(-114px)}#main-content [dir=rtl] .gho-footnote-list__wrapper[data-visible]{padding:1rem 114px 1rem 0;transform:translateX(114px)}@media screen and (max-width: 768px){#main-content .gho-footnote-list__wrapper[data-visible]{width:calc(100% + 102px)}}.ghi-block .gho-related-articles{margin:0;padding:0;border-top:0}@media screen and (min-width: 768px){.gho-related-article .field--name-field-image{width:calc(40% - 2.25rem);min-width:320px}}.preview-content.ghi-grid .paragraph--type--bottom-figure-row>*>*{zoom:inherit}.preview-content .paragraph.gho-bottom-figure-row{margin-top:0}.paragraph--gho-needs-and-requirements-paragraph+.paragraph--gho-bottom-figure-row{margin-top:0}.paragraph--gho-needs-and-requirements-paragraph+.paragraph--gho-bottom-figure-row .gho-bottom-figure-row::before{content:none}#layout-builder .contextual-region.layout-builder-block,#layout-builder .contextual-region.layout-builder-block.focus{margin-top:4.5rem;padding:2rem !important;border-radius:2px;outline-width:1px !important;outline-style:solid !important;outline-color:var(--colorGinFormElementBorder);outline-offset:0}#layout-builder .contextual-region.layout-builder-block.content-width,#layout-builder .contextual-region.layout-builder-block.focus.content-width{padding-right:2rem !important;padding-left:2rem !important}#layout-builder .contextual-region.layout-builder-block .contextual>button{display:none !important;clip:unset !important}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links{top:-2.5rem !important;right:2rem;display:flex;flex-direction:row-reverse;padding:.5em 0;background:none;background-color:rgba(0,0,0,0) !important;box-shadow:none !important}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li{position:relative;display:block;margin-left:.5rem}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a{padding:0 .25em 0 .25em;padding-left:20px;color:var(--colorGinFormElementBorder) !important;background-color:rgba(0,0,0,0) !important;font-size:.75em !important;line-height:19px}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:focus,#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:hover{color:var(--colorGinPrimary) !important;box-shadow:none}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:focus:after,#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:hover:after{z-index:-1;content:"";background-color:var(--colorGinPrimary) !important;background-repeat:no-repeat;background-position:center;background-size:17px 17px}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:after{position:absolute;top:0;left:0;width:17px;height:17px;content:"&";background-color:var(--colorGinFormElementBorder);-webkit-mask-size:17px 17px;mask-size:17px 17px;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-update a:after{-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3ccircle fill='none' stroke='currentColor' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' cx='12' cy='12' r='3'/%3e%3cpath fill='none' stroke='currentColor' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' d='M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3ccircle fill='none' stroke='currentColor' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' cx='12' cy='12' r='3'/%3e%3cpath fill='none' stroke='currentColor' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' d='M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z'/%3e%3c/svg%3e")}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-remove a:after{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='17' viewBox='0 0 17 17' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.24996 13.4583C4.24996 14.2375 4.88746 14.875 5.66663 14.875H11.3333C12.1125 14.875 12.75 14.2375 12.75 13.4583V4.95833H4.24996V13.4583ZM5.66663 6.375H11.3333V13.4583H5.66663V6.375ZM10.9791 2.83333L10.2708 2.125H6.72913L6.02079 2.83333H3.54163V4.25H13.4583V2.83333H10.9791Z' fill='white'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='17' height='17' viewBox='0 0 17 17' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.24996 13.4583C4.24996 14.2375 4.88746 14.875 5.66663 14.875H11.3333C12.1125 14.875 12.75 14.2375 12.75 13.4583V4.95833H4.24996V13.4583ZM5.66663 6.375H11.3333V13.4583H5.66663V6.375ZM10.9791 2.83333L10.2708 2.125H6.72913L6.02079 2.83333H3.54163V4.25H13.4583V2.83333H10.9791Z' fill='white'/%3E%3C/svg%3E%0A")}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-show-config a:after{-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01'/%3e%3c/svg%3e")}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-hide a:after{-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24M1 1l22 22'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24M1 1l22 22'/%3e%3c/svg%3e")}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-unhide{display:none}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-unhide a:after{-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'/%3e%3ccircle fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' cx='12' cy='12' r='3'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'/%3e%3ccircle fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' cx='12' cy='12' r='3'/%3e%3c/svg%3e")}#layout-builder .contextual-region.ghi-block--hidden .layout-builder-block-hide{display:none !important}#layout-builder .contextual-region.ghi-block--hidden .layout-builder-block-unhide{display:block !important}#layout-builder .contextual-region.layout-builder-block:focus,#layout-builder .contextual-region.layout-builder-block:hover{outline-width:2px !important;outline-color:var(--colorGinPrimary)}#layout-builder .contextual-region.layout-builder-block:focus ul.contextual-links,#layout-builder .contextual-region.layout-builder-block:hover ul.contextual-links{display:flex}#layout-builder .contextual-region.layout-builder-block:focus ul.contextual-links li:hover a,#layout-builder .contextual-region.layout-builder-block:hover ul.contextual-links li:hover a{color:var(--colorGinPrimary) !important}.ui-widget-content .layout-builder-configure-block div[data-block-preview] a{color:var(--ghi-default-text-color)}.ui-widget-content .layout-builder-configure-block div[data-block-preview][data-block-preview=plan_webcontent_file]{padding:0} +@import"https://fonts.googleapis.com/css2?family=Noto+Sans:wght@400%3B500%3B700&display=swap";@import"https://fonts.googleapis.com/css?family=Roboto:ital,wght@0,300%3B0,400%3B0,500%3B0,700%3B0,900%3B1,400%3B1,700&display=swap";@import"https://fonts.googleapis.com/css2?family=Roboto+Condensed:wght@400%3B700&display=swap";@import"https://fonts.googleapis.com/css2?family=Roboto+Slab:wght@400%3B700&display=swap";@import"https://fonts.googleapis.com/icon?family=Material+Icons&display=swap";:root{--cd-ocha-blue: #1f69b3;--cd-blue--dark: #144372;--cd-blue--bright: #82b5e9;--cd-blue--light: #d4e5f7;--cd-highlight-red: #e56a54;--cd-contrast-red: #e00000;--cd-white: #fff;--cd-grey--lighter: #f5f5f5;--cd-grey--light: #eee;--cd-grey--mid: #595959;--cd-grey--dark: #4d4d4d;--cd-default-text-color: var(--cd-grey--dark);--cd-default-border-color: #dfdede;--cd-default-background-color: var(--cd-grey--lighter);--cd-black: #000;--cd-blue-grey: #e6ecf1;--cd-blue-grey--dark: #d3dde5;--cd-blue-grey--light: #ebf0f4;--cd-rgb-ocha-blue: 2, 108, 182;--cd-rgb-grey--mid: 89, 89, 89;--cd-rgb-grey--dark: 74, 74, 74;--cd-rgb-highlight-red: 229, 106, 84;--cd-rgb-blue-grey--dark: 211, 221, 229;--cd-max-page-width: 1400px;--cd-max-body-width: 1300px;--cd-max-width: 1220px;--cd-max-content-width: 820px;--cd-container-padding: 0.75rem;--cd-container-padding-tablet: 1.5rem;--cd-container-padding-xlarge: 3rem;--cd-flow-space: 1rem;--cd-bumper-space: 1rem;--cd-footer-row-number: 5;--cd-red: #cd3a1f;--cd-red--light: #f8d8d3;--cd-orange: #db7b18;--cd-orange--light: #fae6d1;--cd-yellow: #d5de26;--cd-yellow--light: #f7f8d3;--cd-green: #7fb92f;--cd-green--light: #e8f5d6;--cd-font-size--tiny: 0.75rem;--cd-font-size--small: 0.875rem;--cd-font-size--default: 1rem;--cd-font-size--base: 1.125rem;--cd-font-size--medium: 1.375rem;--cd-font-size--large: 1.625rem;--cd-font-size--2xbase: 1.875rem;--cd-font-size--2xmedium: 2.375rem;--cd-font-size--2xlarge: 2.875rem;--cd-font: helvetica, arial, sans-serif;--cd-font--system: system-ui;--cd-font--noto: "Noto Sans", sans-serif;--cd-font--noto-kufi: "Noto Kufi Arabic", sans-serif;--cd-font--roboto: "Roboto", helvetica, arial, sans-serif;--cd-font--roboto-condensed: "Roboto Condensed", helvetica, arial, sans-serif;--cd-font--roboto-slab: "Roboto Slab", helvetica, arial, sans-serif}.dialog-off-canvas-main-canvas{height:100%;min-height:100vh}.cd-page-layout-container{display:grid;grid-template-areas:"header" "highlighted" "main" "soft-footer" "footer"}@supports(display: grid){@media(min-width: 768px){.cd-page-layout-container{grid-template-rows:115px auto 1fr auto;grid-auto-rows:auto}}}@media(min-width: 1024px){.cd-layout-with-sidebar-first .cd-layout-sidebar-first,.cd-layout-with-sidebar-second .cd-layout-sidebar-second{flex-basis:200px}}.cd-layout-with-sidebar-both .cd-layout-sidebar-first{margin-bottom:1rem}@media(min-width: 768px){.cd-layout-with-sidebar-both .cd-layout-sidebar-first{flex-basis:200px}}@media(min-width: 1024px){.cd-layout-with-sidebar-both .cd-layout-sidebar-first{margin-bottom:0}}@media(min-width: 1024px){.cd-layout-two-col .cd-layout-sidebar-first{flex-basis:200px;margin-top:0}}.cd-global-header__dropdown{z-index:1002;background:var(--cd-grey--light)}.cd-global-header button[aria-expanded=true]::before{border-color:rgba(0,0,0,0) rgba(0,0,0,0) var(--cd-grey--light)}.cd-header button:focus{outline:none}.cd-global-header{background:var(--cd-grey--lighter);background-image:linear-gradient(-180deg, var(--cd-grey--lighter) 67%, var(--cd-grey--light) 97%)}.cd-global-header .cd-global-header__actions,.cd-global-header .cd-global-header__actions>*{background:rgba(0,0,0,0)}.cd-global-header svg{fill:var(--ghi-default-text-color) !important}.cd-global-header a,.cd-global-header *{color:var(--ghi-default-text-color)}.cd-global-header .menu>li:last-child{padding-right:0}.cd-global-header .menu>li a{color:var(--ghi-default-text-color)}.cd-global-header .menu>li a::after{background:var(--cd-default-border-color)}.cd-global-header .menu>li:last-child a{padding-right:0}.cd-global-header .menu>li:last-child a::after{display:none}.cd-site-header{border-bottom:0}.cd-site-header .cd-nav>.menu>li:last-child{padding-right:0}.cd-site-header__inner{display:grid;height:80px}@supports(display: grid){.cd-site-header__inner{grid-template-rows:80px;grid-template-columns:2fr 1fr}@media(min-width: 768px){.cd-site-header__inner{grid-template-columns:260px 1fr}}}.cd-language-switcher__btn:focus{outline:none}.cd-user-menu__dropdown li a:focus{outline:none}.region-header-logo{display:flex}.region-header-logo .cd-site-logo{width:100%;height:auto;margin:0 0 0 -1.5rem;padding-left:.5rem;text-decoration:none;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--base);font-weight:bold;line-height:1.3rem}.region-header-logo .cd-site-logo:focus{outline:none}@supports(display: flex){.region-header-logo .cd-site-logo{display:flex;flex-direction:column;align-items:flex-start;justify-content:center}}@media(max-width: 767px){.region-header-logo .cd-site-logo{margin:1.2rem 0;background:url("../../../custom/common_design_subtheme/img/logos/logo-humanitarian-action.svg") center no-repeat;background:linear-gradient(transparent, transparent),url("../../../custom/common_design_subtheme/img/logos/logo-humanitarian-action.svg") center no-repeat;background-position:0 center}}@media(min-width: 768px){.region-header-logo .cd-site-logo img{width:auto;height:40px}}.region-header-logo .cd-site-slogan{margin:.7rem 0 0 2rem;line-height:.8rem}.menu--main button[aria-expanded] .cd-icon--arrow-down{fill:#fed83d}.cd-nav-level-0__btn{height:80px;white-space:nowrap}.cd-nav-level-0__btn[aria-expanded] .cd-icon--arrow-down{fill:#fed83d}.cd-nav-level-0__btn[aria-expanded=true]::before{bottom:0;height:4px;background:#fed83d}.cd-site-header__nav-holder .cd-nav a,.cd-site-header__nav-holder .cd-nav span,.cd-site-header__nav-holder .cd-nav button{display:block;padding:15px 30px;text-align:left;text-decoration:none;color:var(--ghi-default-text-color)}.cd-site-header__nav-holder .cd-nav a>span,.cd-site-header__nav-holder .cd-nav span>span,.cd-site-header__nav-holder .cd-nav button>span{padding:0}html[dir=rtl] .cd-site-header__nav-holder .cd-nav a,html[dir=rtl] .cd-site-header__nav-holder .cd-nav span,html[dir=rtl] .cd-site-header__nav-holder .cd-nav button{text-align:right}.cd-site-header__nav-holder .cd-nav a:hover,.cd-site-header__nav-holder .cd-nav a:focus,.cd-site-header__nav-holder .cd-nav span:hover,.cd-site-header__nav-holder .cd-nav span:focus,.cd-site-header__nav-holder .cd-nav button:hover,.cd-site-header__nav-holder .cd-nav button:focus{color:var(--ghi-default-text-color);outline:none;background:var(--ghi-primary-background-color)}@supports(display: flex){.cd-site-header__nav-holder .cd-nav a,.cd-site-header__nav-holder .cd-nav span,.cd-site-header__nav-holder .cd-nav button{display:flex}}.cd-site-header__nav-holder .cd-nav button{width:100%;white-space:nowrap;border:0 none;background:rgba(0,0,0,0)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>button>a,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>button>span,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>button>button{text-transform:none;font-weight:700}.cd-site-header__nav-holder .menu .menu a,.cd-site-header__nav-holder .menu .menu span,.cd-site-header__nav-holder .menu .menu button{height:auto;white-space:normal;font-weight:normal}.cd-site-header__nav-holder .menu .menu li:hover a,.cd-site-header__nav-holder .menu .menu li:hover a span,.cd-site-header__nav-holder .menu .menu a:hover,.cd-site-header__nav-holder .menu .menu a:hover span,.cd-site-header__nav-holder .menu .menu a:focus,.cd-site-header__nav-holder .menu .menu a:focus span{color:var(--cd-ocha-orange--dark);background:var(--ghi-primary-background-color) !important}@media(max-width: 1023px){.gin--horizontal-toolbar .cd-site-header__nav-holder .cd-nav[data-cd-hidden=false]{top:calc(var(--ginHorizontalToolbarOffset) + 35px + 80px)}}@media(max-width: 1023px){.cd-site-header__nav-holder .cd-nav>ul>li>a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li>button.is-active::before{background:#fed83d}.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--collapsed>a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--collapsed>button.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--expanded>a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--expanded>button.is-active::before{background:rgba(254,216,61,.2)}.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--active-trail a::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--active-trail button::before{background:rgba(254,216,61,.2)}.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--active-trail a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li.menu-item--active-trail button.is-active::before{background:#fed83d}.cd-site-header__nav-holder .cd-nav>ul>li>ul>li.menu-item--active-trail a::before,.cd-site-header__nav-holder .cd-nav>ul>li>ul>li.menu-item--active-trail button::before{background:rgba(254,216,61,.6)}.cd-site-header__nav-holder .cd-nav>ul>li>ul>li.menu-item--active-trail a.is-active::before,.cd-site-header__nav-holder .cd-nav>ul>li>ul>li.menu-item--active-trail button.is-active::before{background:#fed83d}}@media(min-width: 1024px){.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button{position:relative;display:flex;align-items:center;height:80px;transition:background .3s ease;background:rgba(0,0,0,0)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button::before{position:absolute;right:-1px;bottom:0;left:-1px;width:calc(100% + 2px);height:4px;content:"";transition:background .3s ease;background:rgba(0,0,0,0)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a:hover,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a.is-active,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a:focus,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span:hover,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span.is-active,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span:focus,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button:hover,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button.is-active,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button:focus{background:var(--ghi-primary-background-color)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a:hover::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a.is-active::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>a:focus::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span:hover::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span.is-active::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item>span:focus::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button:hover::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button.is-active::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item button:focus::before{background:var(--cd-primary-color)}.cd-site-header__nav-holder .cd-nav>.menu>.menu-item.menu-item--active-trail a::before,.cd-site-header__nav-holder .cd-nav>.menu>.menu-item.menu-item--active-trail button::before{background:var(--cd-primary-color)}.cd-site-header__nav-holder .cd-nav>.menu>li>.menu{top:80px}.cd-site-header__nav-holder .cd-nav>.menu>li>.menu>li.menu-item--active-trail{border-left:6px solid var(--cd-primary-color)}}.cd-ocha-dropdown__link a:hover{color:inherit !important}.cd-ocha-dropdown__link a:focus{outline:none}.cd-search__btn{color:var(--ghi-yellow)}.cd-search__btn svg{fill:var(--ghi-yellow)}.cd-search__btn:hover,.cd-search__btn:focus{color:var(--cd-primary-color)}.cd-search__btn:hover svg,.cd-search__btn:focus svg{fill:var(--cd-primary-color)}.cd-search__btn:focus{color:#fed83d}.cd-search__btn:focus svg{fill:#fed83d}.cd-search__btn[aria-expanded=true]{color:#fed83d}.cd-search__btn[aria-expanded=true] svg{fill:#fed83d}.cd-search__submit:focus{background-color:#fed83d}.cd-user-menu__item:focus,.cd-global-header .menu>li a:focus,.cd-global-header .menu>li button:focus{outline:none}.cd-footer{color:var(--ghi-default-text-color);background:var(--ghi-yellow)}.cd-footer svg{fill:var(--ghi-default-text-color)}.cd-footer a{color:var(--ghi-default-text-color)}.cd-footer a:focus{outline:3px solid var(--cd-blue--bright)}.cd-soft-footer{background:rgba(var(--cd-rgb-ocha-blue), 0.9)}.cd-soft-footer a:focus{outline:3px solid var(--cd-blue--bright)}.region-meta--frontend{z-index:100;display:none}.layout--twocol-section .layout__region--first{padding-right:1rem}.layout--twocol-section.has-second-region:not(.has-both-regions) .layout__region--second{margin-left:25%}.material-icons{display:inline-block;white-space:nowrap;letter-spacing:normal;text-transform:none;word-wrap:normal;direction:ltr;font-family:"Material Icons",sans-serif;font-size:24px;font-weight:normal;font-style:normal;line-height:1;-webkit-font-feature-settings:"liga";-webkit-font-smoothing:antialiased}#main-content{position:relative;max-width:var(--cd-max-page-width);padding-top:0}#main-content .layout--onecol .layout__region>div:not(.content-width),#main-content .region-content>div:not(.content-width){max-width:var(--cd-max-page-width)}#main-content .layout--onecol .layout__region>.content-width,#main-content .region-content>.content-width{max-width:calc(var(--content-width) + 24px) !important;margin-right:auto !important;margin-left:auto !important;padding-right:var(--cd-container-padding) !important;padding-left:var(--cd-container-padding) !important}#main-content .layout--onecol .layout__region .content-width .content-width,#main-content .region-content .content-width .content-width{padding-right:0 !important;padding-left:0 !important}@media(min-width: 768px){#main-content .layout--onecol .layout__region .content-width,#main-content .region-content .content-width{max-width:calc(var(--content-width) + 48px) !important;padding-right:var(--cd-container-padding-xlarge) !important;padding-left:var(--cd-container-padding-xlarge) !important}}#main-content .region-content>form.confirmation.cd-container{margin-top:4rem;margin-bottom:4rem}.node--unpublished{background-color:unset}.user-logged-in main[class*="--unpublished"]{margin-top:4px;margin-bottom:4px;outline:4px dashed #ffc310}body.path-error main .cd-layout-content-wrapper{width:100%;max-width:var(--cd-max-width);margin-top:1rem;margin-right:auto;margin-left:auto;padding:4rem var(--cd-container-padding)}@media(min-width: 768px){body.path-error main .cd-layout-content-wrapper{padding:0 var(--cd-container-padding-tablet)}}@media(min-width: 1200px){body.path-error main .cd-layout-content-wrapper{padding:4rem 3rem}}:root{--content-width: 1220px;--reading-width: 820px}a{color:var(--ghi-default-text-color)}a:hover,a:focus{color:var(--ghi-default-text-color)}input::-moz-placeholder{font-size:80%;font-style:italic}input::placeholder{font-size:80%;font-style:italic}.cd-button,.btn--download,.ghi-download__btn{padding:.8rem 1.5rem;text-decoration:none;text-transform:uppercase;color:var(--ghi-default-text-color) !important;background-color:var(--ghi-primary-button-color);font-size:var(--cd-font-size--small);font-weight:bold}.cd-button.btn--centered,.btn--download.btn--centered,.ghi-download__btn.btn--centered{text-align:center}.cd-button:hover,.cd-button:focus,.btn--download:hover,.btn--download:focus,.ghi-download__btn:hover,.ghi-download__btn:focus{color:var(--ghi-default-text-color);background-color:var(--ghi-primary-button-color-hover)}.cd-button.expand-table,.cd-button.read-more,.cd-button.external,.btn--download.expand-table,.btn--download.read-more,.btn--download.external,.ghi-download__btn.expand-table,.ghi-download__btn.read-more,.ghi-download__btn.external{position:relative;max-width:-moz-fit-content;max-width:fit-content;padding-right:2.5rem;color:var(--ghi-default-text-color)}.cd-button.expand-table:before,.cd-button.read-more:before,.cd-button.external:before,.btn--download.expand-table:before,.btn--download.read-more:before,.btn--download.external:before,.ghi-download__btn.expand-table:before,.ghi-download__btn.read-more:before,.ghi-download__btn.external:before{position:absolute;top:calc(50% - 10px);right:1rem;padding:10px;content:"";background-repeat:no-repeat}.cd-button.expand-table,.btn--download.expand-table,.ghi-download__btn.expand-table{margin-bottom:2rem}.cd-button.expand-table:before,.btn--download.expand-table:before,.ghi-download__btn.expand-table:before{background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/arrow_downward/default/20px.svg")}.cd-button.read-more:before,.btn--download.read-more:before,.ghi-download__btn.read-more:before{background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/arrow_forward/default/20px.svg")}.cd-button.external:before,.btn--download.external:before,.ghi-download__btn.external:before{background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/open_in_new/default/20px.svg")}.ghi-dropdown__btn{color:inherit !important;border:0;background-color:rgba(0,0,0,0);font-size:inherit}.ghi-dropdown__btn+div.cd-dropdown{position:absolute;border:1px solid var(--cd-default-border-color);background-color:var(--cd-white)}.ghi-dropdown__btn+div.cd-dropdown>div.ghi-dropdown--content{display:flex;flex-direction:column}.ghi-dropdown__btn+div.cd-dropdown>div.ghi-dropdown--content a{color:var(--ghi-default-text-color)}button.ghi-download__btn,button.btn--download{transition:background-color .6s ease-out,color .6s ease-out;text-align:center;border:0;border:2px solid rgba(0,0,0,0);border-radius:3px;box-shadow:none;line-height:1.15;-webkit-appearance:none}button.ghi-download__btn svg.cd-icon,button.btn--download svg.cd-icon{fill:var(--ghi-default-text-color)}button.ghi-download__btn:before,button.btn--download:before{position:absolute;top:calc(50% - 10px);left:1rem;padding:10px;content:"";background-repeat:no-repeat}button.ghi-download__btn+.cd-dropdown,button.btn--download+.cd-dropdown,button.ghi-dropdown__btn+.cd-dropdown{position:absolute}button.ghi-download__btn+.cd-dropdown div,button.btn--download+.cd-dropdown div,button.ghi-dropdown__btn+.cd-dropdown div{display:inline-block;width:auto;padding:.2rem;border:1px solid var(--cd-default-border-color);border-radius:3px;background-color:var(--cd-white)}button.ghi-download__btn+.cd-dropdown div a,button.btn--download+.cd-dropdown div a,button.ghi-dropdown__btn+.cd-dropdown div a{display:block;padding:.1rem;text-decoration:none;font-size:var(--cd-font-size--tiny)}ul li:empty{display:none}.gin--horizontal-toolbar #toolbar-administration{z-index:201 !important}.fts-icon,.cd-figure-list--large .fts-icon{height:1rem}.download-icon{display:block;width:20px;height:20px;background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/download/default/20px.svg");background-repeat:no-repeat}tbody td[data-sort-type=numeric]{text-align:right}tbody td .fts-icon{height:1rem;vertical-align:middle}tbody td .cluster-icon{float:left;width:2rem;height:1rem}tbody td .cluster-icon svg{position:relative;top:10%;left:0;width:1.2rem;height:1.2rem}svg.ghi-icons-sprite{display:none;overflow:hidden}svg.icon{display:inline-block;width:1rem;height:1rem;pointer-events:none}.toggle svg.icon{width:.5rem;height:.5rem;cursor:pointer;pointer-events:all;fill:var(--ghi-default-text-color)}.toggle.open svg.icon{transform:rotate(180deg)}.js input.form-autocomplete{background-color:rgba(0,0,0,0) !important;background-image:url("data:image/svg+xml,%3csvg width='40' height='20' viewBox='0 0 20 20' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M8 1C3.46.827-.188 5.787 1.313 10.068c1.176 4.384 6.993 6.417 10.637 3.7.326-.39.565.276.846.442l3.74 3.739 1.413-1.414-4.35-4.35c2.811-3.468 1.15-9.247-3.062-10.71A7.003 7.003 0 008 1zm0 2c3.242-.123 5.849 3.42 4.777 6.477-.842 3.132-4.994 4.58-7.6 2.65-2.745-1.73-2.9-6.125-.285-8.044A5.006 5.006 0 018 3z' fill='%23868686'/%3e%3c/svg%3e") !important;background-repeat:no-repeat !important;background-position:100% center !important}.js input.form-autocomplete.ui-autocomplete-loading{background-image:url("../img/misc/spinner-ltr.gif") !important}.has-layout-builder-ipe-actions .gho-footnote-list__wrapper{bottom:64px !important}body.toolbar-horizontal .gin-secondary-toolbar,.layout-builder-ipe-actions{z-index:1002 !important}body.toolbar-horizontal #toolbar-administration{z-index:1003 !important}body.layout-builder-ipe-editing .dialog-off-canvas-main-canvas{padding-top:3rem}.layout-builder--content-preview-disabled .layout-builder-block.content-width{margin-right:auto;margin-left:auto}#layout-builder-modal .cd-alert{margin-top:0;margin-right:21px;margin-bottom:1rem;margin-left:30px;padding:.5rem}#layout-builder-modal .cd-alert>div{align-items:center}.cd-site-header__nav-holder{z-index:199}.cd-site-header__nav-holder .block-sections-by-term.label-visible h2{position:static !important;display:block;clip:auto;width:auto;height:auto;font-size:var(--cd-font-size--base)}@media(max-width: 1023px){.cd-site-header__nav-holder .block-sections-by-term.label-visible h2{padding:15px 30px}}.cd-site-header__nav-holder nav.cd-nav>ul>li>span{font-weight:bold}.cd-site-header__nav-holder nav.cd-nav>ul>li>span:focus,.cd-site-header__nav-holder nav.cd-nav>ul>li>span:hover{color:inherit;background:inherit}.cd-site-header__nav-holder nav.cd-nav>ul>li>ul>li>span{opacity:.5}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation] ul{padding:0;list-style:none}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation] ul li>span{font-weight:bold}@media(max-width: 1023px){.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]{margin:0;padding:0}}@media(max-width: 1023px){.cd-site-header__nav-holder nav.cd-nav{margin:0;padding:0}}@media(min-width: 1024px){.cd-site-header__nav-holder nav.cd-nav{position:unset}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item:not(:last-child).right-border{border-right:1px solid var(--ghi-default-border-color)}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain{position:absolute;z-index:199;left:0;width:100%;background-color:var(--cd-default-background-color)}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul{flex-direction:column;max-height:450px;margin:2rem 0}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li{max-width:180px}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>span{padding:0}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul{margin:.5rem 0 2rem 0}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a,.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul span{display:inline-block;margin-bottom:3px}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a:focus,.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a:hover,.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul span:focus,.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul span:hover{color:inherit;background:inherit}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a:focus,.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain nav[role=navigation]>ul>li>ul a:hover{margin-bottom:2px;border-bottom:1px solid var(--cd-primary-color)}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain .block-sections-by-term.label-visible h2{margin-top:2rem}.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain .block-sections-by-term nav[role=navigation]>ul li span,.cd-site-header__nav-holder nav.cd-nav ul.menu li.menu-item .menu-link-contentmain .block-sections-by-term nav[role=navigation]>ul li a{padding:0}.cd-site-header__nav-holder nav.cd-nav li.menu-item.menu-item--expanded{position:relative}}.toolbar-fixed .region-page-title a[name=page-title],.toolbar-fixed .region-page-subtitle a[name=page-title],.toolbar-fixed .region-page-navigation a[name=page-title]{position:relative;top:-80px;display:block;visibility:hidden}.region-page-title.region-page-navigation,.region-page-subtitle.region-page-navigation,.region-page-navigation.region-page-navigation{border-top:1px solid var(--cd-default-border-color);border-bottom:1px solid var(--cd-white)}.region-page-title.region-page-title .region-wrapper-inner,.region-page-title.region-page-subtitle .region-wrapper-inner,.region-page-title.region-page-navigation .block-wrapper__inner,.region-page-subtitle.region-page-title .region-wrapper-inner,.region-page-subtitle.region-page-subtitle .region-wrapper-inner,.region-page-subtitle.region-page-navigation .block-wrapper__inner,.region-page-navigation.region-page-title .region-wrapper-inner,.region-page-navigation.region-page-subtitle .region-wrapper-inner,.region-page-navigation.region-page-navigation .block-wrapper__inner{max-width:calc(var(--content-width) + 24px);margin-right:auto;margin-left:auto;padding-right:var(--cd-container-padding);padding-left:var(--cd-container-padding)}.region-page-title.region-page-title .region-wrapper-inner>.block-section-navigation,.region-page-title.region-page-subtitle .region-wrapper-inner>.block-section-navigation,.region-page-title.region-page-navigation .block-wrapper__inner>.block-section-navigation,.region-page-subtitle.region-page-title .region-wrapper-inner>.block-section-navigation,.region-page-subtitle.region-page-subtitle .region-wrapper-inner>.block-section-navigation,.region-page-subtitle.region-page-navigation .block-wrapper__inner>.block-section-navigation,.region-page-navigation.region-page-title .region-wrapper-inner>.block-section-navigation,.region-page-navigation.region-page-subtitle .region-wrapper-inner>.block-section-navigation,.region-page-navigation.region-page-navigation .block-wrapper__inner>.block-section-navigation{position:unset}@media(min-width: 768px){.region-page-title.region-page-title .region-wrapper-inner,.region-page-title.region-page-subtitle .region-wrapper-inner,.region-page-title.region-page-navigation .block-wrapper__inner,.region-page-subtitle.region-page-title .region-wrapper-inner,.region-page-subtitle.region-page-subtitle .region-wrapper-inner,.region-page-subtitle.region-page-navigation .block-wrapper__inner,.region-page-navigation.region-page-title .region-wrapper-inner,.region-page-navigation.region-page-subtitle .region-wrapper-inner,.region-page-navigation.region-page-navigation .block-wrapper__inner{max-width:calc(var(--content-width) + 48px);padding-right:var(--cd-container-padding-xlarge);padding-left:var(--cd-container-padding-xlarge)}}.region-page-title .block-wrapper--sectionnavigation,.region-page-subtitle .block-wrapper--sectionnavigation,.region-page-navigation .block-wrapper--sectionnavigation{position:relative}.region-page-title .region-wrapper-inner{display:flex;gap:1rem;margin:2rem 0 0}.region-page-title .region-wrapper-inner .block-wrapper--downloadbutton{margin-left:auto}.region-page-title .region-wrapper-inner .block-wrapper--downloadbutton a.link--download-dialog{white-space:nowrap}.region-page-title .region-wrapper-inner .cd-page-title,.region-page-title .region-wrapper-inner .block-section-switcher,.region-page-title .region-wrapper-inner .block-download-button{padding:0}.region-page-title .region-wrapper-inner .cd-page-title.block-download-button,.region-page-title .region-wrapper-inner .block-section-switcher.block-download-button,.region-page-title .region-wrapper-inner .block-download-button.block-download-button{margin-top:2.2rem}.region-page-title .region-wrapper-inner .cd-page-title.has-subtitle,.region-page-title .region-wrapper-inner .block-section-switcher.has-subtitle,.region-page-title .region-wrapper-inner .block-download-button.has-subtitle{margin-bottom:1rem}@media(max-width: 767px){.region-page-title{margin-top:2rem !important}.region-page-title .region-wrapper-inner{flex-direction:column-reverse}.region-page-title .region-wrapper-inner .block-wrapper--downloadbutton{margin:0}.region-page-title .region-wrapper-inner .block-wrapper--downloadbutton .block-download-button{margin:0}}.region-page-title+.region-page-subtitle{margin-top:-2rem}.region-page-title+.region-page-subtitle .region-wrapper-inner{display:flex;gap:1rem}.region-page-title+.region-page-subtitle .region-wrapper-inner #block-sectionmetadata,.region-page-title+.region-page-subtitle .region-wrapper-inner #block-documentmetadata{margin:.5rem 0 2rem 0;text-transform:uppercase;font-size:var(--cd-font-size--small)}body.force-letterbox main>.page-image img,body.force-letterbox main>.field--type-ghi-hero-image img{height:400px;-o-object-fit:cover;object-fit:cover}.tooltip{z-index:1004;cursor:pointer;vertical-align:middle}.tooltip svg{fill:var(--cd-primary-color)}.tippy-box .tippy-content>.content{padding:0 1rem}.tippy-box .tippy-content a.fts-link{display:inline-block;margin-bottom:.5rem}.tippy-box .tippy-content a.fts-link img{height:20px;vertical-align:middle}td.project-counter .tippy-box .tippy-content{min-width:20rem}.d3-sparkline-tooltip{pointer-events:none}.d3-sparkline-tooltip .tippy-box{top:-0.5rem}.d3-sparkline-tooltip .tippy-box .tippy-content{margin-bottom:-1rem}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .title{text-align:left}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .items{margin-top:.5rem}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .items .item-wrapper{display:flex}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .items .item-wrapper .label{width:50%;text-align:left;color:var(--cd-white);font-size:100%;line-height:inherit}.d3-sparkline-tooltip .tippy-box .tippy-content .hpc-sparkline-tooltip .items .item-wrapper .value{width:50%;text-align:right}.d3-sparkline-tooltip .tippy-box .tippy-arrow::before{left:45%}:root{--ghi-yellow: #fed83d;--ghi-grey--dark: #4d4d4d;--ghi-yellow--light: #fffbec;--ghi-yellow--light-chart: #f8ecb4;--ghi-grey: #dfdede;--ghi-grey--light: #eee;--ghi-grey--medium: #ccc;--ghi-grey--background: #f5f5f5;--ghi-orange-dark: #feba00;--cd-ocha-orange: #fecb00;--cd-ocha-orange--dark: var(--ghi-orange-dark);--cd-primary-color: var(--ghi-yellow);--cd-primary-color--dark: var(--cd-ocha-orange--dark);--cd-tag--color: #9e9e9e;--ghi-default-text-color: var(--ghi-grey--dark);--ghi-default-border-color: var(--ghi-grey--light);--ghi-default-border-color-background: var(--ghi-grey);--ghi-default-background-color: var(--ghi-grey--background);--ghi-primary-background-color: var(--ghi-yellow--light);--ghi-widget-color--light: var(--ghi-grey--light);--ghi-widget-color--dark: var(--ghi-orange-dark);--ghi-progress-color-fg: var(--ghi-yellow);--ghi-progress-color-bg: var(--ghi-yellow--light-chart);--ghi-status-color-unpublished: var(--cd-primary-color);--ghi-status-color-published: #abea3a;--ghi-primary-button-color: var(--ghi-yellow);--ghi-primary-button-color-hover: var(--ghi-orange-dark);--hpc-brown: #464646;--hpc-dark-brown: #2f2f2f;--hpc-orange: #ee7325;--hpc-orange-light: var(--cd-orange--light);--hpc-grey: #ebebeb;--hpc-blue-light: #e6ecf1;--green: #62b445;--hpc-border-color: #e1e1e1;--cd-font-size--extra-tiny: 0.625rem;--ghi-ui-dialog-border-radius: 1rem;--colorGinWarningLight: #efcf64;--colorGinWarningBackground: #605328;--colorGinDangerLight: #f39b9d;--colorGinDangerBackground: #583333;--colorGinGreenLight: #32cea4;--colorGinGreenBackground: #145242}.ghi-block-article-collection .block-content>a.external{margin-top:2rem}.ghi-block-article-collection .article-collection{margin-top:2rem}.ghi-block-article-collection .article-collection-cards .ghi-grid-item{padding:0}.ghi-block-article-collection .article-collection-cards .ghi-grid-item.featured{background-color:var(--cd-primary-color)}.ghi-block-article-collection .article-collection-cards .ghi-grid-item .field--type-image{width:100%}.block-article-title{background-color:var(--ghi-default-background-color)}.block-article-title .article-title-wrapper{margin:0 auto;padding-top:3.6rem;padding-bottom:3.6rem}.block-article-title .article-title-wrapper.has-title-prefix{padding-top:2.6rem;padding-bottom:3.3rem}.block-article-title .article-title-wrapper>*{margin:0}.block-article-title .article-title-wrapper p{font-size:var(--cd-font-size--small)}.block-article-title .article-title-wrapper p a{text-decoration:none}.block-article-title .article-title-wrapper p .chapter{font-weight:lighter}.ghi-block,.ghi-block.ui-state-drop,.block-layout-builder,.block-layout-builder.ui-state-drop{margin-top:4.5rem;padding-top:1rem;padding-bottom:1rem;line-height:1.5}.ghi-block.ghi-block-paragraph,.ghi-block.ui-state-drop.ghi-block-paragraph,.block-layout-builder.ghi-block-paragraph,.block-layout-builder.ui-state-drop.ghi-block-paragraph{margin-top:2.5rem}.ghi-block:not(.paragraph--gho-text),.ghi-block.ui-state-drop:not(.paragraph--gho-text),.block-layout-builder:not(.paragraph--gho-text),.block-layout-builder.ui-state-drop:not(.paragraph--gho-text){page-break-inside:avoid !important}.ghi-block.paragraph--gho-text .gho-text__text>p,.ghi-block.ui-state-drop.paragraph--gho-text .gho-text__text>p,.block-layout-builder.paragraph--gho-text .gho-text__text>p,.block-layout-builder.ui-state-drop.paragraph--gho-text .gho-text__text>p{page-break-inside:avoid !important}#main-content.has-subpage-title .layout__region .ghi-block:first-child:not(.block-plan-entity-logframe),body.page-node-type-global-section #main-content .layout__region .ghi-block:first-child,#main-content.has-subpage-title .layout__region .ghi-block.ui-state-drop:first-child:not(.block-plan-entity-logframe),body.page-node-type-global-section #main-content .layout__region .ghi-block.ui-state-drop:first-child,#main-content.has-subpage-title .layout__region .block-layout-builder:first-child:not(.block-plan-entity-logframe),body.page-node-type-global-section #main-content .layout__region .block-layout-builder:first-child,#main-content.has-subpage-title .layout__region .block-layout-builder.ui-state-drop:first-child:not(.block-plan-entity-logframe),body.page-node-type-global-section #main-content .layout__region .block-layout-builder.ui-state-drop:first-child{margin-top:0;padding-top:0}.ghi-block.ghi-block--hidden-preview>*:not(.contextual),.ghi-block.ui-state-drop.ghi-block--hidden-preview>*:not(.contextual),.block-layout-builder.ghi-block--hidden-preview>*:not(.contextual),.block-layout-builder.ui-state-drop.ghi-block--hidden-preview>*:not(.contextual){opacity:.5}.hpc-form-wrapper .ghi-block.ghi-block--hidden-preview>*:not(.contextual),.hpc-form-wrapper .ghi-block.ui-state-drop.ghi-block--hidden-preview>*:not(.contextual),.hpc-form-wrapper .block-layout-builder.ghi-block--hidden-preview>*:not(.contextual),.hpc-form-wrapper .block-layout-builder.ui-state-drop.ghi-block--hidden-preview>*:not(.contextual){opacity:1}body.page-node-type-article .layout__region--content>.ghi-block.block:first-child,body.page-node-type-article .layout__region--content>.ghi-block.ui-state-drop.block:first-child,body.page-node-type-article .layout__region--content>.block-layout-builder.block:first-child,body.page-node-type-article .layout__region--content>.block-layout-builder.ui-state-drop.block:first-child{margin-top:2.5rem}.layout__region--content>.ghi-block.block.block-highlighted:not(.content-width):first-child.block-highlighted:not(.content-width):not(.block-plan-entity-logframe),.layout__region--content>.ghi-block.ui-state-drop.block.block-highlighted:not(.content-width):first-child.block-highlighted:not(.content-width):not(.block-plan-entity-logframe),.layout__region--content>.block-layout-builder.block.block-highlighted:not(.content-width):first-child.block-highlighted:not(.content-width):not(.block-plan-entity-logframe),.layout__region--content>.block-layout-builder.ui-state-drop.block.block-highlighted:not(.content-width):first-child.block-highlighted:not(.content-width):not(.block-plan-entity-logframe){margin-top:0;padding-top:4.5rem;background-color:var(--ghi-default-background-color)}.ghi-block>div.block-content,.ghi-block.ui-state-drop>div.block-content,.block-layout-builder>div.block-content,.block-layout-builder.ui-state-drop>div.block-content{position:relative}.ghi-block>div.block-content:not(.content-width),.ghi-block.ui-state-drop>div.block-content:not(.content-width),.block-layout-builder>div.block-content:not(.content-width),.block-layout-builder.ui-state-drop>div.block-content:not(.content-width){margin-right:0 !important;margin-left:0 !important}.ghi-block>div.block-comment,.ghi-block.ui-state-drop>div.block-comment,.block-layout-builder>div.block-comment,.block-layout-builder.ui-state-drop>div.block-comment{padding:1rem 0;text-align:justify;font-size:var(--cd-font-size--small)}.ghi-block>div.block-links,.ghi-block.ui-state-drop>div.block-links,.block-layout-builder>div.block-links,.block-layout-builder.ui-state-drop>div.block-links{padding:.75rem 0;border-top:1px solid var(--cd-default-border-color);font-size:var(--cd-font-size--small)}.ghi-block>div.block-links>div.block-links--inner,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner,.block-layout-builder>div.block-links>div.block-links--inner,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner{display:flex;justify-content:space-between}.ghi-block>div.block-links>div.block-links--inner a,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner a,.block-layout-builder>div.block-links>div.block-links--inner a,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner a{text-decoration:none;line-height:1rem}.ghi-block>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog,.block-layout-builder>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog{position:relative;padding-left:1.5rem}.ghi-block>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog:before,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog:before,.block-layout-builder>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog:before,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a.link--download-dialog:before{position:absolute;top:calc(50% - 10px);left:0;padding:10px;content:"";background:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/download/default/20px.svg") no-repeat}.ghi-block>div.block-links>div.block-links--inner .block-download-links .download-item a:hover,.ghi-block>div.block-links>div.block-links--inner .block-download-links .download-item a:focus,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a:hover,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a:focus,.block-layout-builder>div.block-links>div.block-links--inner .block-download-links .download-item a:hover,.block-layout-builder>div.block-links>div.block-links--inner .block-download-links .download-item a:focus,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a:hover,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-download-links .download-item a:focus{color:var(--ghi-default-text-color)}.ghi-block>div.block-links>div.block-links--inner .block-admin-links,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links{display:flex;align-items:baseline;gap:.5rem}.ghi-block>div.block-links>div.block-links--inner .block-admin-links a,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links a,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links a,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links a{position:relative;top:2px;font-size:var(--cd-font-size--base)}.ghi-block>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover],.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover],.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover],.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]{position:relative;top:-1px;padding:0;transition:none;color:inherit;border:0;background-color:inherit}.ghi-block>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:hover,.ghi-block>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:focus,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:hover,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:focus,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:hover,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:focus,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:hover,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links button[data-toggle=popover]:focus{color:var(--cd-primary-color--dark);border:0;outline:0}.ghi-block>div.block-links>div.block-links--inner .block-admin-links .tippy-box .title,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links .tippy-box .title,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links .tippy-box .title,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links .tippy-box .title{padding-bottom:0}.ghi-block>div.block-links>div.block-links--inner .block-admin-links .tippy-box .block-configuration.content,.ghi-block.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links .tippy-box .block-configuration.content,.block-layout-builder>div.block-links>div.block-links--inner .block-admin-links .tippy-box .block-configuration.content,.block-layout-builder.ui-state-drop>div.block-links>div.block-links--inner .block-admin-links .tippy-box .block-configuration.content{padding-top:0}.ghi-block-document-chapter{position:relative}.ghi-block-document-chapter .block-content .chapter-summary{margin:2rem 0}.block-generic-document-link-button button{padding:.8rem 1.5rem .8rem 2.5rem}.block-generic-document-link-button button:before{left:1rem;padding:10px;content:"";background-image:url("https://fonts.gstatic.com/s/i/short-term/release/materialsymbolsoutlined/download/default/20px.svg");background-repeat:no-repeat}.ghi-block-generic-document-links .block-content ul{display:flex;flex-direction:column;-webkit-padding-start:0;padding-inline-start:0;gap:.5rem}.ghi-block-generic-document-links .block-content ul li{display:flex;margin:0;padding:0;list-style-type:none;vertical-align:top}.ghi-block-generic-document-links .block-content ul li .document-link-box{position:relative;width:100%;padding:2rem;background-color:var(--ghi-default-background-color)}.ghi-block-generic-document-links .block-content ul li .document-link-box .title-wrapper .title{display:inline-block;width:100%;margin:0;padding:0;font-size:var(--cd-font-size--medium);font-weight:bold}.ghi-block-generic-document-links .block-content ul li .document-link-box .buttons{position:relative;z-index:1;width:100%;margin-bottom:2rem}.ghi-block-generic-document-links .block-content ul li .document-link-box .buttons button{padding:0;text-transform:none;color:var(--ghi-default-text-color);background-color:rgba(0,0,0,0);font-size:var(--cd-font-size--default)}.ghi-block-generic-document-links .block-content ul li .document-link-box .buttons .cd-dropdown div a{font-size:var(--cd-font-size--tiny)}.ghi-block-generic-document-links .block-content ul li .document-link-box .meta{margin-top:1rem;font-size:var(--cd-font-size--tiny)}.ghi-block-generic-document-links .block-content ul li .document-link-box .meta:before{display:block;width:15%;padding-top:1.5rem;content:" ";border-top:4px solid var(--ghi-yellow)}@media(min-width: 768px){.ghi-block-generic-document-links .block-content ul li{flex:0 1 calc(50% - .25rem)}}@media(min-width: 768px){.ghi-block-generic-document-links .block-content ul{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;gap:.5rem}}.ghi-block-document-subheading{position:relative}.ghi-block-document-subheading a[name]{position:absolute;top:0;left:0}.ghi-block-plan-entity-types .item-list--entity-types{display:flex;flex-direction:column;gap:.5rem}.ghi-block-plan-entity-types .item-list--entity-types>div{display:flex;gap:2rem;padding:2rem 1rem;background-color:var(--ghi-default-background-color)}.ghi-block-plan-entity-types .item-list--entity-types>div p{align-self:center;margin:0;padding:0}.ghi-block-plan-entity-types .item-list--entity-types>div .label{white-space:nowrap;font-size:var(--cd-font-size--2xlarge);font-weight:bold}.ghi-block-plan-entity-types .item-list--entity-types>div .description{font-size:var(--cd-font-size--default)}.ghi-block-generic-external-widget.up-2 .block-content{display:flex;flex-wrap:wrap;justify-content:space-between}.ghi-block-generic-external-widget.up-2 .block-content .iframe-wrapper{width:100% !important}@media(min-width: 768px){.ghi-block-generic-external-widget.up-2 .block-content{display:flex;justify-content:space-between}.ghi-block-generic-external-widget.up-2 .block-content .iframe-wrapper{width:49% !important}}.ghi-block ul.plan-headline-figures{-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;padding:0}.ghi-block ul.plan-headline-figures li{padding:1rem 1.5rem}.hid-session-information>div>div>p{-webkit-margin-before:.5rem;margin-block-start:.5rem}.hid-session-information .info{margin-bottom:1rem}.ghi-block-global-key-figures.has-year-switcher .cd-block-title,.ghi-block-plan-headline-figures.has-year-switcher .cd-block-title{display:flex;gap:1rem}.ghi-block-global-key-figures.has-year-switcher .cd-block-title .section-switcher-wrapper,.ghi-block-plan-headline-figures.has-year-switcher .cd-block-title .section-switcher-wrapper{top:-0.35rem}.ghi-block-global-key-figures .tab-container-wrapper,.ghi-block-plan-headline-figures .tab-container-wrapper{margin-top:-2rem;padding-top:1rem}.ghi-block-global-key-figures .tab-navigation-wrapper,.ghi-block-plan-headline-figures .tab-navigation-wrapper{margin-top:1rem}.ghi-block-global-key-figures .tab-details .key-figures,.ghi-block-plan-headline-figures .tab-details .key-figures{display:flex;flex-wrap:wrap;row-gap:1rem;margin-bottom:0;margin-left:-1.5rem;padding-top:1rem;padding-bottom:0;padding-left:0;list-style:none;-webkit-clip-path:inset(0 0 0 1.5rem);clip-path:inset(0 0 0 1.5rem)}.ghi-block-global-key-figures .tab-details .key-figures li,.ghi-block-plan-headline-figures .tab-details .key-figures li{position:relative;flex-basis:auto;flex-grow:0;padding:0 1.5rem;border:0}.ghi-block-global-key-figures .tab-details .key-figures li:first-child,.ghi-block-plan-headline-figures .tab-details .key-figures li:first-child{padding-left:1.5rem}.ghi-block-global-key-figures .tab-details .key-figures li::before,.ghi-block-plan-headline-figures .tab-details .key-figures li::before{position:absolute;left:0;width:1px;height:90%;content:" ";background-color:var(--ghi-default-border-color)}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__label,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__label{font-weight:normal}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value{color:var(--ghi-default-text-color)}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value>div,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value>div{display:flex;gap:.5rem}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value>div a,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value>div a{text-decoration:none}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value i[data-toggle=tooltip],.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value i[data-toggle=tooltip]{vertical-align:top}.ghi-block-global-key-figures .tab-details .key-figures li .cd-figure-list__value .material-icon,.ghi-block-plan-headline-figures .tab-details .key-figures li .cd-figure-list__value .material-icon{font-size:var(--cd-font-size--large);font-weight:normal}.ghi-block-global-key-figures .tab-details>a.external,.ghi-block-plan-headline-figures .tab-details>a.external{margin-top:2rem}.ghi-block-global-key-figures .block-comment .block-comment-inner,.ghi-block-plan-headline-figures .block-comment .block-comment-inner{margin-top:2rem;padding-top:2rem;border-top:1px solid var(--cd-default-border-color)}.ghi-block-paragraph{position:relative}.ghi-block-paragraph .block-content.gho-text,.ghi-block-paragraph .block-content.gho-aside{margin-top:0}.ghi-block-paragraph .block-content>div>a.read-more{margin-top:2rem}.ghi-block-paragraph .block-content.gho-paragraph-promoted{background-color:rgba(0,0,0,0)}.ghi-block-paragraph.block-highlighted{padding-top:3rem !important}.ghi-block-paragraph.gho-paragraph-promoted{padding-top:3rem !important;background-color:var(--ghi-default-background-color)}.ghi-block-paragraph.gho-paragraph-promoted .block-content{padding-top:0;padding-bottom:3rem}.ghi-block-paragraph.gho-paragraph-promoted::before{position:absolute;left:0;height:100%;content:"";border-left:4px solid var(--cd-primary-color)}.block-plan-attachment-map .form-type-select{margin:0}.block-plan-attachment-map .form-type-select .selectric-wrapper{display:inline-block}.block-plan-attachment-map .form-type-select .selectric{display:inline-block;overflow:visible;white-space:nowrap;border:none;background-color:rgba(0,0,0,0)}.block-plan-attachment-map .form-type-select .selectric .label{display:inline-block;height:auto !important;margin:0;padding-right:24px;white-space:nowrap;color:var(--hpc-orange);background-color:rgba(0,0,0,0);font-size:var(--cd-font-size--base);font-weight:bold}.block-plan-attachment-map .form-type-select .selectric .label:after{display:none}.block-plan-attachment-map .form-type-select .selectric .icon{position:absolute;top:13px;right:6px;width:12px;height:12px;fill:var(--hpc-orange)}.block-plan-attachment-map .form-type-select .selectric-items{position:absolute;z-index:1;top:0;left:-19px;width:auto !important;border-radius:3px;background-color:var(--cd-white)}.block-plan-attachment-map .form-type-select .selectric-items ul li{padding:8px 18px;white-space:nowrap;border-top:none;border-bottom:none;font-size:var(--cd-font-size--base);font-weight:bold}.block-plan-attachment-map .form-type-select .selectric-items ul li.selected{color:var(--hpc-orange);background-color:rgba(0,0,0,0)}.block-plan-attachment-map .form-type-select .selectric-items ul.selectric-group li{padding-left:2rem;font-weight:normal}.block-plan-attachment-map .form-type-select .selectric-items ul.selectric-group li.selectric-group-label{padding-left:18px;font-weight:bold}.block-plan-attachment-map div.block-links .download-link-wrapper{top:-2rem;margin-top:0}.block-plan-attachment-map:not(.has-comment) div.block-links{border-top:0}.block-plan-attachment-map .plan-attachment-map-wrapper .map-tabs--inner{padding-left:1rem}.block-plan-attachment-map .plan-attachment-map-wrapper .map-container .leaflet-container{width:100%;height:100%}.block-plan-attachment-map.has-attachment-switcher .map-tabs,.block-plan-attachment-map.has-attachment-switcher .download-link-wrapper{top:.3rem;margin-top:0}.block-plan-attachment-map .modal.right:not(.visible),.block-plan-attachment-map .leaflet-sidebar.right:not(.visible){right:-600px}.block-plan-attachment-map .modal .modal-inner,.block-plan-attachment-map .leaflet-sidebar .modal-inner{overflow-y:auto;max-height:350px}.block-plan-attachment-map .modal .modal-inner .title,.block-plan-attachment-map .leaflet-sidebar .modal-inner .title{color:var(--hpc-orange);font-size:1.4rem}.block-plan-attachment-map .modal table.plan-attachment-modal-table,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table{margin-bottom:.5rem}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody{border-top:none}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody tr,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody tr{margin-bottom:8px;vertical-align:top;border-bottom:1px solid var(--cd-default-border-color)}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody tr:last-child,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody tr:last-child{border-bottom:0}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody tr td,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody tr td{padding:0;text-align:right;color:var(--hpc-brown);border:none;background:none;font-size:var(--cd-font-size--small);font-weight:600}.block-plan-attachment-map .modal table.plan-attachment-modal-table tbody tr td:first-child,.block-plan-attachment-map .leaflet-sidebar table.plan-attachment-modal-table tbody tr td:first-child{text-align:left;font-weight:400}.configuration-container .pane-plan-attachment-map .map-wrapper-outer{margin-top:4rem}.configuration-container .pane-plan-attachment-map .map-wrapper-outer .map-tabs{top:2rem;right:1rem;margin-right:0}.configuration-container .pane-plan-attachment-map .map-wrapper-outer.has-attachment-switcher{margin-top:0}.configuration-container .pane-plan-attachment-map .map-wrapper-outer.has-attachment-switcher .map-tabs{top:2.5rem}.ghi-block-plan-cluster-header .block-content{display:flex;justify-content:space-between}.ghi-block-plan-cluster-header .block-content .cluster-header-contacts{margin-top:-3rem;margin-bottom:2rem;margin-left:auto;padding:1rem 3rem}.ghi-block-plan-cluster-header .block-content .cluster-header-contacts h3{margin-top:0;font-size:var(--cd-font-size--medium)}.ghi-block-plan-cluster-header .block-content .cluster-header-contacts .cluster-header-contacts-item{font-size:var(--cd-font-size--default)}.block-plan-entity-attachments-table .select2-container{width:auto !important}.block-plan-entity-attachments-table td.group-name{font-weight:bold}.block-plan-operational-presence-map .pane-content{margin-top:.5rem}.block-plan-operational-presence-map .pane-content .pane-plan-operational-presence-map{display:flex;justify-content:space-between}.block-plan-operational-presence-map .pane-content .download-link-wrapper{top:-2rem;margin-top:0}.block-plan-operational-presence-map .pane-title{margin-bottom:0}.block-plan-operational-presence-map .pane-title .collapsed-text a.read-more{position:relative;top:-1rem}@media(min-width: 768px){.block-plan-operational-presence-map .pane-title{max-width:80%}}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container{position:relative;width:100%;min-height:400px;margin:0;padding:0;border:1px solid var(--hpc-border-color)}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend{position:absolute;z-index:90;top:10px;right:10px;font-size:var(--cd-font-size--small)}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend ul{display:flex;-webkit-margin-before:0;margin-block-start:0;-webkit-margin-after:0;margin-block-end:0;padding:5px;list-style-type:none;border:1px solid var(--hpc-border-color);border-radius:3px;background-color:#fff}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend ul li{margin-right:.5rem}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend ul li:last-child{margin-right:0}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .map-legend ul li .legend-marker{display:inline-block;width:10px;height:10px;margin-right:5px;border:1px solid var(--hpc-border-color);border-radius:50%}.block-plan-operational-presence-map .plan-operational-presence-map-wrapper .map-container .leaflet-container{width:100%;height:100%}.block-plan-operational-presence-map .leaflet-sidebar{width:350px !important}.block-plan-operational-presence-map .modal .modal-content,.block-plan-operational-presence-map .leaflet-sidebar .modal-content{max-width:350px}.block-plan-operational-presence-map .modal .modal-inner,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner{overflow-y:auto;max-height:350px}.block-plan-operational-presence-map .modal .modal-inner .title-heading,.block-plan-operational-presence-map .modal .map-plan-card-container .title-heading,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .title-heading,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .title-heading{text-transform:uppercase;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--tiny)}.block-plan-operational-presence-map .modal .modal-inner .title,.block-plan-operational-presence-map .modal .map-plan-card-container .title,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .title,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .title{color:var(--ghi-default-text-color);font-size:var(--cd-font-size--medium);font-weight:500}.block-plan-operational-presence-map .modal .modal-inner .content,.block-plan-operational-presence-map .modal .map-plan-card-container .content,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content{border-top:none !important}.block-plan-operational-presence-map .modal .modal-inner .content .title,.block-plan-operational-presence-map .modal .map-plan-card-container .content .title,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .title,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .title{text-transform:uppercase;font-size:var(--cd-font-size--small);font-weight:bold}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper{position:relative;margin-bottom:.5rem;font-size:var(--cd-font-size--small)}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .cluster-icon-wrapper,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .cluster-icon-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper{position:relative;top:3px;display:inline-block;width:26px;height:26px;margin-right:.5rem;border:1px solid #000;border-radius:50%}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon{display:inline-block;width:26px;height:26px}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon svg,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon svg,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon svg,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .cluster-icon-wrapper .cluster-icon svg{top:5%;left:20%;width:13px;height:13px}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper span.toggle,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper span.toggle,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper span.toggle,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper span.toggle{position:absolute;top:0;right:0;display:inline-block}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .organizations-wrapper,.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .projects-wrapper,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .organizations-wrapper,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .projects-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .organizations-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .projects-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .organizations-wrapper,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .projects-wrapper{display:none;padding-top:1rem;padding-left:2.2rem}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .organizations-wrapper .title,.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .projects-wrapper .title,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .organizations-wrapper .title,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .projects-wrapper .title,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .organizations-wrapper .title,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .projects-wrapper .title,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .organizations-wrapper .title,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .projects-wrapper .title{text-transform:uppercase;font-size:var(--cd-font-size--tiny);font-weight:bold}.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .organizations-wrapper ul,.block-plan-operational-presence-map .modal .modal-inner .content .cluster-wrapper .projects-wrapper ul,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .organizations-wrapper ul,.block-plan-operational-presence-map .modal .map-plan-card-container .content .cluster-wrapper .projects-wrapper ul,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .organizations-wrapper ul,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content .cluster-wrapper .projects-wrapper ul,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .organizations-wrapper ul,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content .cluster-wrapper .projects-wrapper ul{-webkit-padding-start:1rem;padding-inline-start:1rem;font-size:var(--cd-font-size--tiny)}.block-plan-operational-presence-map .modal .modal-inner .content a.fts-link,.block-plan-operational-presence-map .modal .map-plan-card-container .content a.fts-link,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content a.fts-link,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content a.fts-link{display:inline-block;margin-bottom:.5rem}.block-plan-operational-presence-map .modal .modal-inner .content a.fts-link img,.block-plan-operational-presence-map .modal .map-plan-card-container .content a.fts-link img,.block-plan-operational-presence-map .leaflet-sidebar .modal-inner .content a.fts-link img,.block-plan-operational-presence-map .leaflet-sidebar .map-plan-card-container .content a.fts-link img{position:relative;top:.5rem;left:.2rem;height:20px}.configuration-container .pane-plan-operational-presence-map{position:relative}.configuration-container .pane-plan-operational-presence-map .map-wrapper-outer.has-view-switcher,.configuration-container .pane-plan-operational-presence-map .map-wrapper-outer.has-object-switcher{margin-top:5rem}.ghi-block-plan-organizations-table tbody td.entity-name{white-space:unset !important}@media(min-width: 768px){.ghi-block-plan-organizations-table thead th.cd-table--name{min-width:200px}}.ghi-block-global-key-figures+.ghi-block-global-plan-overview-map{margin-top:0}.ghi-block-global-plan-overview-map{position:relative;clear:both}.ghi-block-global-plan-overview-map .overlay{position:absolute;top:0;bottom:0;width:100%;opacity:.25}.ghi-block-global-plan-overview-map .map-container{margin-bottom:1rem;padding:0 .5rem}.ghi-block-global-plan-overview-map .map-container .leaflet-container{position:relative;min-height:400px;border-width:1px;border-style:solid;border-color:var(--hpc-border-color)}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .leaflet-bottom{width:100%}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .leaflet-control-attribution{float:none;width:100%;margin-right:auto;margin-left:auto;padding:.5rem;text-align:center}@media(max-width: 575px){.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .leaflet-control-attribution{padding-bottom:.3rem}}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-header .title{margin-bottom:0;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--base);font-weight:bold}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-header .title a{color:var(--ghi-default-text-color)}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .modal-inner{padding:1.2rem 1.6rem .5rem 1.4rem;cursor:default}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content strong{font-weight:bold}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper{margin-bottom:1rem;padding-top:1rem;border-top:1px solid var(--ghi-default-border-color)}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row{display:flex;justify-content:space-between;width:100%}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .label{position:relative;display:inline;margin-bottom:3px;text-align:left;font-size:var(--cd-font-size--small);font-weight:normal}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .value{display:flex;gap:.3rem;font-size:var(--cd-font-size--small);font-weight:bold}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .value i.tooltip.info{position:relative;top:3px}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .value i.tooltip.monitoring-period{position:relative;top:1px}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .value .hpc-percent-progress-bar-wrapper{margin-top:2px;cursor:default}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row .note{font-size:var(--cd-font-size--tiny)}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row.section-row-plan-status{margin:4px 0 4px 4px}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row.section-row-plan-status .label{display:flex;gap:.5rem;font-weight:bold}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row.section-row-plan-status .value{text-transform:none}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-control-container .modal-content .section-wrapper .section-row.section-row-plan-status .value>div{display:flex;gap:.5rem}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-overlay-pane svg svg g path:nth-of-type(1){fill:var(--ghi-grey--medium) !important}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-overlay-pane svg svg[plan-type=hrp] g path:nth-of-type(1){fill:var(--cd-primary-color) !important}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-overlay-pane svg svg[plan-type=fa] g path:nth-of-type(1){fill:var(--ghi-widget-color--dark) !important}.ghi-block-global-plan-overview-map .map-container .leaflet-container .leaflet-overlay-pane text.donut-label{font-family:var(--cd-font--roboto);font-weight:500}@media(min-width: 768px){.ghi-block-global-plan-overview-map .map-container .leaflet-container{min-height:500px;border:0 none}}@media(min-width: 768px){.ghi-block-global-plan-overview-map .map-container{padding:0}}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend{top:unset;right:unset;bottom:3rem;left:1rem}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul{flex-direction:column;gap:.1rem}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item{margin:0;gap:.5rem}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon{width:1rem;height:1rem;margin-top:0}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon.legend-icon-hrp{background-color:var(--cd-primary-color) !important}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon.legend-icon-fa{background-color:var(--ghi-widget-color--dark) !important}.ghi-block-global-plan-overview-map .map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon.legend-icon-other{background-color:var(--ghi-grey--medium) !important}.ghi-block-global-plan-table .metadata{width:100%;margin-top:1.5rem;margin-bottom:-1.5rem;text-align:right;font-size:var(--cd-font-size--tiny)}.ghi-block-global-plan-table table tbody td[data-column=name]{display:flex;justify-content:space-between}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle]{width:auto !important;min-width:4rem;height:auto !important;max-height:1.5rem;text-align:center;color:var(--cd-white);background-color:#87cfad;font-size:var(--cd-font-size--small);font-weight:normal}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle].plan-type-hrp{background-color:#5090cd}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle].plan-type-fa{background-color:#8869ae}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle].plan-type-rrp{background-color:#e66751}.ghi-block-global-plan-table table tbody td[data-column=name] .tooltip.plan-type-icon[data-toggle].plan-type-non-hrp{padding:0 5px;background-color:#777}.ghi-block-global-plan-table table tbody td[data-column=status]>div{display:flex;justify-content:space-between}.ghi-block-global-plan-table table tbody td a{word-break:normal}.ghi-block-global-plan-table table tbody td a.fts-plan-link{text-decoration:none}.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table{position:relative;z-index:1;margin-top:-1rem;padding-bottom:0;background-color:var(--ghi-default-background-color)}.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-comment,.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-links{position:relative;z-index:1;border-top:0;border-bottom:0;background-color:var(--cd-white)}#layout-builder .ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-comment,#layout-builder .ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-links{background-color:inherit}.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-comment.block-comment,.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-links.block-comment{margin-top:2rem}.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-comment.block-comment:before,.ghi-block-global-plan-overview-map+.ghi-block-global-plan-table .block-links.block-comment:before{border-bottom:0}.ghi-block-plan-webcontent-text .block-content{padding-top:1rem}.ghi-block-section-collection .block-content>a.external{margin-top:2rem}.ghi-block-section-collection .section-collection{margin-top:2rem}.ghi-block-section-collection .section-collection .ghi-grid-item{padding:0}.ghi-block-section-collection .section-collection .ghi-grid-item .field--type-image{width:100%}.block-wrapper--sectionswitcher,.ghi-block.has-year-switcher{z-index:1}.block-wrapper--sectionswitcher .section-switcher-wrapper,.ghi-block.has-year-switcher .section-switcher-wrapper{position:relative;z-index:1}.block-wrapper--sectionswitcher .section-switcher-wrapper .section-switcher-single,.block-wrapper--sectionswitcher .section-switcher-wrapper button,.ghi-block.has-year-switcher .section-switcher-wrapper .section-switcher-single,.ghi-block.has-year-switcher .section-switcher-wrapper button{display:inline-block;padding:.5rem 1.2rem;text-transform:uppercase;color:var(--ghi-default-text-color);border:0;background-color:var(--ghi-primary-button-color);font-size:var(--cd-font-size--small);font-weight:bold}.block-wrapper--sectionswitcher .section-switcher-wrapper button,.ghi-block.has-year-switcher .section-switcher-wrapper button{transition:background-color .6s ease-out,color .6s ease-out}.block-wrapper--sectionswitcher .section-switcher-wrapper button:hover,.block-wrapper--sectionswitcher .section-switcher-wrapper button:focus,.ghi-block.has-year-switcher .section-switcher-wrapper button:hover,.ghi-block.has-year-switcher .section-switcher-wrapper button:focus{background-color:var(--ghi-primary-button-color-hover)}.block-wrapper--sectionswitcher .section-switcher-wrapper button svg,.ghi-block.has-year-switcher .section-switcher-wrapper button svg{fill:var(--ghi-default-text-color)}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown{position:absolute;left:0;min-width:5.25rem;background-color:var(--ghi-primary-background-color)}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul{margin:.5rem 0;padding:0}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li{padding:.5rem 1.2rem;list-style-type:none;white-space:nowrap;font-size:var(--cd-font-size--small);font-weight:bold}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li a,.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li a:hover,.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li a:focus,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li a,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li a:hover,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li a:focus{text-decoration:none;color:var(--ghi-default-text-color);font-weight:normal}.block-wrapper--sectionswitcher .section-switcher-wrapper .cd-dropdown ul li a:hover,.ghi-block.has-year-switcher .section-switcher-wrapper .cd-dropdown ul li a:hover{color:var(--ghi-primary-button-color-hover)}@media(min-width: 1024px){.block-wrapper--sectionswitcher .section-switcher-wrapper,.ghi-block.has-year-switcher .section-switcher-wrapper{top:.25rem}}.block-subpage-title{background-color:var(--ghi-default-background-color)}.block-subpage-title h2{margin:0 auto;padding-top:3rem;padding-bottom:3rem}.cluster-icon svg{position:relative;top:20%;left:20%}.cluster-icon svg *{fill:var(--hpc-brown)}.cluster-item.active .cluster-icon svg *{fill:var(--cd-white)}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas){border:1px solid var(--cd-default-border-color) !important;border-radius:5px !important}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) .ui-dialog-titlebar{height:3rem !important;padding:1rem !important;border-top-left-radius:inherit !important;border-top-right-radius:inherit !important;background-color:var(--ghi-default-background-color) !important}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) .ui-dialog-titlebar .ui-dialog-title{color:var(--ghi-default-text-color) !important}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) .ui-dialog-titlebar button.ui-dialog-titlebar-close{top:.5rem;right:.5rem;margin:0;transform:none;opacity:.8;border:none;background:none}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) .ui-dialog-titlebar button.ui-dialog-titlebar-close span.ui-button-icon{top:0;left:0;width:100%;height:100%;margin:0;transform:none;background-color:var(--ghi-default-text-color) !important;-webkit-mask-image:url("../../../contrib/gin/dist/media/sprite.svg#close-view");mask-image:url("../../../contrib/gin/dist/media/sprite.svg#close-view");-webkit-mask-size:24px 24px;mask-size:24px 24px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center center;mask-position:center center}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal{padding:1rem !important;color:var(--ghi-default-text-color) !important;border-bottom-right-radius:inherit;border-bottom-left-radius:inherit;background:var(--cd-white) !important}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal .hpc-download-dialog-wrapper{font-size:var(--cd-font-size--small)}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal .hpc-download-dialog-wrapper .hpc-download-dialog-content p{margin:0;line-height:1.2rem}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal .hpc-download-dialog-wrapper .hpc-download-dialog-content>div{display:flex;flex-direction:column;gap:1rem}.download-dialog.ui-dialog:not(.ui-dialog-off-canvas) #drupal-modal .hpc-download-dialog-wrapper .hpc-download-dialog-footer{margin-top:1rem;padding-top:1rem;border-top:1px solid gray;line-height:1.2rem}ul.links--entity-navigation{display:flex;align-items:center;margin:0;padding:0;gap:2rem}ul.links--entity-navigation>li>.link-wrapper,ul.links--entity-navigation>li>button{position:relative;display:flex;align-items:center;height:3.5rem}ul.links--entity-navigation>li.active>.link-wrapper::before,ul.links--entity-navigation>li.active>button::before,ul.links--entity-navigation>li>button[aria-expanded=true]::before{position:absolute;right:-1px;bottom:-1px;left:-1px;width:calc(100% + 2px);height:4px;content:"";transition:background .3s ease;border-bottom:4px solid var(--ghi-yellow)}ul.links--entity-navigation li{list-style-type:none}ul.links--entity-navigation li a{text-decoration:none;color:var(--hpc-dark-brown)}ul.links--entity-navigation li a.header-link{border-bottom:1px solid var(--ghi-default-border-color-background)}ul.links--entity-navigation li a.active{font-weight:bold}ul.links--entity-navigation li.expandable.dropdown{position:relative}ul.links--entity-navigation li.expandable.active>button[data-cd-toggler]{font-weight:bold}ul.links--entity-navigation li.expandable>button[data-cd-toggler]{padding:0;text-transform:none;border:0;background-color:rgba(0,0,0,0)}ul.links--entity-navigation li.expandable>button[data-cd-toggler] svg.cd-dropdown__icon{fill:var(--ghi-primary-button-color)}ul.links--entity-navigation li.expandable a{padding:.5rem 0;white-space:nowrap;font-size:var(--cd-font-size--default)}ul.links--entity-navigation li.expandable a:hover{color:var(--ghi-primary-button-color-hover)}ul.links--entity-navigation li.expandable.dropdown>div[data-cd-hidden=false]{position:absolute;z-index:201;top:3.5rem;left:-1.5rem;display:flex;flex-direction:column;padding:.5rem 1.5rem;background-color:var(--ghi-primary-background-color)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]{position:absolute;z-index:201;top:3.5rem;right:0;left:0;padding-top:1rem;padding-bottom:1rem;background-color:var(--ghi-primary-background-color)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer{max-width:calc(var(--content-width) + 24px);margin-right:auto;margin-left:auto;padding-right:var(--cd-container-padding);padding-left:var(--cd-container-padding)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-header{margin-bottom:1rem;padding-top:1rem;padding-bottom:1rem;border-bottom:1px solid var(--ghi-default-border-color-background)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-header h3{margin-bottom:0}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-header h3 a{font-size:var(--cd-font-size--2xbase)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-header .metadata{font-size:var(--cd-font-size--small)}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner{display:flex;gap:1rem;flex-direction:row}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper{display:inline-block;width:auto}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group{display:inline-block;width:auto}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group>p{display:inline-block;width:auto;font-weight:bold}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group ul{-webkit-padding-start:0;padding-inline-start:0}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group ul li{width:80%;padding:.5rem 0}ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer .megamenu-wrapper-inner .megamenu-group-wrapper .megamenu-group ul li a{white-space:unset}@media(min-width: 768px){ul.links--entity-navigation li.expandable.megamenu>div[data-cd-hidden=false]>div.megamenu-wrapper-outer{max-width:calc(var(--content-width) + 48px);padding-right:var(--cd-container-padding-xlarge);padding-left:var(--cd-container-padding-xlarge)}}.ghi-image-wrapper{position:relative}.ghi-image-wrapper div.image-caption-wrapper,.ghi-image-wrapper div.image-credit-wrapper{position:absolute;top:0;right:0;bottom:0;left:0;height:100%;text-align:right;opacity:.9}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper,.link-carousel-wrapper .ghi-image-wrapper div.image-credit-wrapper{max-height:568px}.ghi-image-wrapper div.image-caption-wrapper div.image-caption{position:absolute;right:1.9rem;bottom:2rem;display:inline-block;max-width:400px;padding:1rem 2rem;text-align:left;color:var(--ghi-default-text-color);background-color:var(--cd-white);font-size:var(--cd-font-size--tiny)}.ghi-image-wrapper div.image-caption-wrapper div.image-caption .location{margin:0 0 .5rem 0;font-size:var(--cd-font-size--tiny);font-weight:700}.ghi-image-wrapper div.image-caption-wrapper div.image-caption p{margin:0}.ghi-image-wrapper div.image-caption-wrapper div.image-caption .credits{font-style:italic}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption{position:absolute;right:calc(1.9rem + 2px);bottom:calc(2rem + 2px);display:inline-block;width:1.5rem;height:1.5rem;padding:0 !important;background-color:var(--cd-white);font-size:var(--cd-font-size--small);line-height:1.5rem}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption:focus,.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption:hover{background-color:var(--cd-primary-color)}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption:focus+.image-caption,.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption:hover+.image-caption{display:inline-block}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper a.expand-caption::after{display:block;content:"i";text-align:center;font-weight:700}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper div.image-caption:hover{display:inline-block}.link-carousel-wrapper .ghi-image-wrapper div.image-caption-wrapper div.image-caption{display:none}@media(max-width: 767px){.ghi-image-wrapper div.image-caption-wrapper a.expand-caption{position:absolute;right:calc(1.9rem + 2px);bottom:calc(2rem + 2px);display:inline-block;width:1.5rem;height:1.5rem;padding:0 !important;background-color:var(--cd-white);font-size:var(--cd-font-size--small);line-height:1.5rem}.ghi-image-wrapper div.image-caption-wrapper a.expand-caption:focus,.ghi-image-wrapper div.image-caption-wrapper a.expand-caption:hover{background-color:var(--cd-primary-color)}.ghi-image-wrapper div.image-caption-wrapper a.expand-caption:focus+.image-caption,.ghi-image-wrapper div.image-caption-wrapper a.expand-caption:hover+.image-caption{display:inline-block}.ghi-image-wrapper div.image-caption-wrapper a.expand-caption::after{display:block;content:"i";text-align:center;font-weight:700}.ghi-image-wrapper div.image-caption-wrapper div.image-caption:hover{display:inline-block}.ghi-image-wrapper div.image-caption-wrapper div.image-caption{display:none}}.ghi-image-wrapper div.image-credit-wrapper a.expand-caption{display:none}.ghi-image-wrapper div.image-credit-wrapper div.image-credit{position:absolute;right:1.9rem;bottom:2rem;display:inline-block;padding:.1rem .5rem;color:var(--cd-white);background-color:var(--cd-black);font-size:var(--cd-font-size--tiny)}.block-document-meta-data>ul,.block-section-meta-data>ul,article.node--type-article .node__meta .node__submitted>ul,article.node--type-document .node__meta .node__submitted>ul,.megamenu .megamenu-header>ul{display:flex;flex-wrap:wrap;row-gap:1rem;margin-top:0;margin-bottom:0;margin-left:-0.5rem;padding:0;list-style:none;-webkit-clip-path:inset(-3rem -3rem 0 0.5rem);clip-path:inset(-3rem -3rem 0 0.5rem)}.block-document-meta-data>ul>li,.block-section-meta-data>ul>li,article.node--type-article .node__meta .node__submitted>ul>li,article.node--type-document .node__meta .node__submitted>ul>li,.megamenu .megamenu-header>ul>li{position:relative;flex-basis:auto;flex-grow:0;padding:0 .5rem;border:0}.block-document-meta-data>ul>li:first-child,.block-section-meta-data>ul>li:first-child,article.node--type-article .node__meta .node__submitted>ul>li:first-child,article.node--type-document .node__meta .node__submitted>ul>li:first-child,.megamenu .megamenu-header>ul>li:first-child{padding-left:.5rem}.block-document-meta-data>ul>li::before,.block-section-meta-data>ul>li::before,article.node--type-article .node__meta .node__submitted>ul>li::before,article.node--type-document .node__meta .node__submitted>ul>li::before,.megamenu .megamenu-header>ul>li::before{position:absolute;left:0;width:1px;height:90%;content:" ";background-color:var(--ghi-default-border-color)}.modal-content table{width:100%}.leaflet-modal{z-index:10 !important}.leaflet-modal .overlay{background-color:rgba(0,0,0,0)}.leaflet-modal .modal{overflow:hidden;max-height:600px;padding:0 1.5rem}.leaflet-modal .modal-content{max-width:250px;padding:0;border:1px solid var(--hpc-border-color);border-radius:4px;background-color:var(--cd-white);font-size:var(--cd-font-size--base)}.leaflet-modal .modal-content .modal-inner{position:relative;padding:.5rem 1rem;line-height:24px}.leaflet-modal .modal-content .modal-inner i.close{position:absolute;top:-1rem;right:-1rem;opacity:1;color:var(--cd-primary-color);border-radius:50%;background-color:var(--cd-white);font-size:2rem}.leaflet-modal .modal-content .modal-inner div.title{margin-bottom:10px;font-weight:bold}.leaflet-modal .modal-content .modal-inner div.content{padding-top:.5rem;border-top:1px solid var(--hpc-border-color)}.leaflet-modal .modal-content .modal-inner div.monitoring-period{margin-top:5px;padding-top:5px;color:var(--ghi-default-text-color);border-top:1px solid var(--hpc-border-color);font-size:var(--cd-font-size--small)}.hpc-pie-chart-wrapper svg{width:20px;height:20px;transform:rotate(-90deg);border:1px solid var(--ghi-widget-color--dark);border-radius:50%;fill:var(--ghi-widget-color--light)}.hpc-pie-chart-wrapper svg circle{fill:var(--ghi-widget-color--light);stroke:var(--ghi-widget-color--dark);stroke-width:32;stroke-dasharray:100 100}.plan-entity-contribution-wrapper{display:flex;align-items:center;font-size:var(--cd-font-size--small)}.plan-entity-contribution-wrapper>span{font-weight:700}.plan-entity-contribution-wrapper ul{display:inline-flex;-webkit-padding-start:.5rem;padding-inline-start:.5rem;list-style-type:none;gap:.5rem}.plan-entity-contribution-wrapper ul li{display:flex;gap:3px}.plan-entity-contribution-wrapper ul li span.check-circle{color:var(--green)}.plan-status{width:1rem;height:1rem;border-radius:50%}.plan-status.plan-status-header-icon{background-color:var(--ghi-default-text-color)}.plan-status.unpublished{background-color:var(--ghi-status-color-unpublished)}.plan-status.published{background-color:var(--ghi-status-color-published)}.hpc-progress-bar-wrapper{display:inline-block;overflow:hidden;width:100%;height:14px;border:1px solid var(--ghi-widget-color--dark);background-color:var(--ghi-widget-color--light)}.hpc-progress-bar-wrapper .hpc-progress-bar-inner{height:100%;background-color:var(--ghi-widget-color--dark)}.project-data-popover table th{text-align:center}.project-data-popover table tr td{text-align:center}.project-data-popover table tr td:first-child{white-space:nowrap}.project-data-popover table tr td ul{-webkit-padding-start:unset;padding-inline-start:unset;list-style-type:none}.select-wrappers{position:absolute;top:-1.8rem;right:0;display:inline-block;margin:0}.select-wrappers>div.ajax-switcher-wrapper{display:inline-block}.select-wrappers>div.ajax-switcher-wrapper>form{display:inline-block;margin:0 0 0 1rem}div.ajax-switcher-wrapper>form{display:inline-block;margin:0 1rem 0 0}div.ajax-switcher-wrapper>form .form-item{display:inline-block}div.ajax-switcher-wrapper>form .select2,div.ajax-switcher-wrapper>form .select2-selection--single{display:inline-block;overflow:visible;width:auto !important;white-space:nowrap;border:none;background-color:rgba(0,0,0,0)}div.ajax-switcher-wrapper>form .select2 .select2-selection__rendered,div.ajax-switcher-wrapper>form .select2-selection--single .select2-selection__rendered{display:inline-block;height:auto !important;margin:0;padding-right:24px;padding-left:0;white-space:nowrap;color:var(--ghi-default-text-color);background-color:rgba(0,0,0,0);font-size:var(--cd-font-size--small);font-weight:bold}div.ajax-switcher-wrapper>form .select2 .select2-selection__rendered:after,div.ajax-switcher-wrapper>form .select2-selection--single .select2-selection__rendered:after{display:none}div.ajax-switcher-wrapper>form .select2 .icon,div.ajax-switcher-wrapper>form .select2-selection--single .icon{position:absolute;top:13px;right:6px;width:12px;height:12px;fill:var(--ghi-default-text-color)}.select2-dropdown.select2-dropdown--below{border-top:.5px solid}.select2-dropdown .select2-results{width:auto !important;border-radius:3px;background-color:var(--cd-white)}.select2-dropdown .select2-results ul li{padding:8px 18px;white-space:nowrap;border-top:none;border-bottom:none;font-size:var(--cd-font-size--small);font-weight:normal}.select2-dropdown .select2-results ul li.select2-results__option--highlighted{color:var(--cd-primary-color);background-color:rgba(0,0,0,0)}.select2-dropdown .select2-results ul.selectric-group li{padding-left:2rem;font-weight:normal}.select2-dropdown .select2-results ul.selectric-group li.selectric-group-label{padding-left:18px;font-weight:bold}#main-content .table-wrapper,.layout-builder-configure-block div[data-block-preview] .table-wrapper,.ghi-modal-dialog .table-wrapper{overflow-x:auto;max-width:calc(100vw - 1rem - 2*var(--cd-container-padding)) !important;margin-right:-5px}#main-content .table-wrapper table.ghi-table,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table,.ghi-modal-dialog .table-wrapper table.ghi-table{font-size:var(--cd-font-size--default)}#main-content .table-wrapper table.ghi-table.soft-limit,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.soft-limit,.ghi-modal-dialog .table-wrapper table.ghi-table.soft-limit{margin-bottom:2rem}#main-content .table-wrapper table.ghi-table.soft-limit+a.expand-table,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.soft-limit+a.expand-table,.ghi-modal-dialog .table-wrapper table.ghi-table.soft-limit+a.expand-table{display:block;margin-right:auto;margin-left:auto}.ghi-block #main-content .table-wrapper table.ghi-table,.ghi-block .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table,.ghi-block .ghi-modal-dialog .table-wrapper table.ghi-table{margin-bottom:0}#main-content .table-wrapper table.ghi-table th,#main-content .table-wrapper table.ghi-table td,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td,.ghi-modal-dialog .table-wrapper table.ghi-table th,.ghi-modal-dialog .table-wrapper table.ghi-table td{padding:1.5rem 2rem}body.path-frontpage #main-content .table-wrapper table.ghi-table th,body.path-overview #main-content .table-wrapper table.ghi-table th,body.path-frontpage #main-content .table-wrapper table.ghi-table td,body.path-overview #main-content .table-wrapper table.ghi-table td,body.path-frontpage .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th,body.path-overview .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th,body.path-frontpage .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td,body.path-overview .layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td,body.path-frontpage .ghi-modal-dialog .table-wrapper table.ghi-table th,body.path-overview .ghi-modal-dialog .table-wrapper table.ghi-table th,body.path-frontpage .ghi-modal-dialog .table-wrapper table.ghi-table td,body.path-overview .ghi-modal-dialog .table-wrapper table.ghi-table td{padding:1.5rem 1rem}#main-content .table-wrapper table.ghi-table th.entity-name,#main-content .table-wrapper table.ghi-table th.cd-table--amount,#main-content .table-wrapper table.ghi-table th.cd-table--currency,#main-content .table-wrapper table.ghi-table th.cd-table--percentage,#main-content .table-wrapper table.ghi-table td.entity-name,#main-content .table-wrapper table.ghi-table td.cd-table--amount,#main-content .table-wrapper table.ghi-table td.cd-table--currency,#main-content .table-wrapper table.ghi-table td.cd-table--percentage,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.entity-name,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.cd-table--amount,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.cd-table--currency,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.cd-table--percentage,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.entity-name,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.cd-table--amount,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.cd-table--currency,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.cd-table--percentage,.ghi-modal-dialog .table-wrapper table.ghi-table th.entity-name,.ghi-modal-dialog .table-wrapper table.ghi-table th.cd-table--amount,.ghi-modal-dialog .table-wrapper table.ghi-table th.cd-table--currency,.ghi-modal-dialog .table-wrapper table.ghi-table th.cd-table--percentage,.ghi-modal-dialog .table-wrapper table.ghi-table td.entity-name,.ghi-modal-dialog .table-wrapper table.ghi-table td.cd-table--amount,.ghi-modal-dialog .table-wrapper table.ghi-table td.cd-table--currency,.ghi-modal-dialog .table-wrapper table.ghi-table td.cd-table--percentage{text-align:left;white-space:nowrap}#main-content .table-wrapper table.ghi-table th.cd-table--chart,#main-content .table-wrapper table.ghi-table td.cd-table--chart,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.cd-table--chart,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.cd-table--chart,.ghi-modal-dialog .table-wrapper table.ghi-table th.cd-table--chart,.ghi-modal-dialog .table-wrapper table.ghi-table td.cd-table--chart{text-align:center}#main-content .table-wrapper table.ghi-table th.not-available,#main-content .table-wrapper table.ghi-table td.not-available,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th.not-available,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td.not-available,.ghi-modal-dialog .table-wrapper table.ghi-table th.not-available,.ghi-modal-dialog .table-wrapper table.ghi-table td.not-available{font-style:italic}#main-content .table-wrapper table.ghi-table th[data-formatting=numeric-full],#main-content .table-wrapper table.ghi-table td[data-formatting=numeric-full],.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th[data-formatting=numeric-full],.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td[data-formatting=numeric-full],.ghi-modal-dialog .table-wrapper table.ghi-table th[data-formatting=numeric-full],.ghi-modal-dialog .table-wrapper table.ghi-table td[data-formatting=numeric-full]{text-align:right}#main-content .table-wrapper table.ghi-table th:first-child,#main-content .table-wrapper table.ghi-table td:first-child,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th:first-child,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td:first-child,.ghi-modal-dialog .table-wrapper table.ghi-table th:first-child,.ghi-modal-dialog .table-wrapper table.ghi-table td:first-child{padding-left:0}#main-content .table-wrapper table.ghi-table th:last-child:not(.cd-table--chart),#main-content .table-wrapper table.ghi-table td:last-child:not(.cd-table--chart),.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table th:last-child:not(.cd-table--chart),.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table td:last-child:not(.cd-table--chart),.ghi-modal-dialog .table-wrapper table.ghi-table th:last-child:not(.cd-table--chart),.ghi-modal-dialog .table-wrapper table.ghi-table td:last-child:not(.cd-table--chart){padding-right:0}#main-content .table-wrapper table.ghi-table.cd-table--responsive td:before,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.cd-table--responsive td:before,.ghi-modal-dialog .table-wrapper table.ghi-table.cd-table--responsive td:before{top:1.5rem;font-size:inherit}#main-content .table-wrapper table.ghi-table thead th,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table thead th,.ghi-modal-dialog .table-wrapper table.ghi-table thead th{white-space:nowrap;text-transform:uppercase;color:var(--ghi-default-text-color);border-bottom:1px solid var(--cd-default-border-color);background:rgba(0,0,0,0);font-size:var(--cd-font-size--small)}#main-content .table-wrapper table.ghi-table.sortable th,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th{cursor:pointer}#main-content .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort),#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort),.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort),.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse{padding-right:5px}#main-content .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)>span,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted>span,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse>span,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)>span,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted>span,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse>span,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)>span,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted>span,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse>span{display:inline-block;width:2rem;color:var(--cd-primary-color)}#main-content .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)::after,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted::after,#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse::after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)::after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted::after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse::after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th:not(.sorttable-nosort)::after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted::after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse::after{position:relative;top:4px;left:5px;display:inline-block;width:11px;height:19px;content:" ";background-size:contain}#main-content .table-wrapper table.ghi-table.sortable th:not(.sorttable-sorted):not(.sorttable-sorted-reverse):not(.sorttable-nosort):after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th:not(.sorttable-sorted):not(.sorttable-sorted-reverse):not(.sorttable-nosort):after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th:not(.sorttable-sorted):not(.sorttable-sorted-reverse):not(.sorttable-nosort):after{background-image:url("../img/table/ghi_sorting.svg")}#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted:after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted:after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted:after{background-image:url("../img/table/ghi_sorting_up.svg")}#main-content .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse:after,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse:after,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-sorted-reverse:after{background-image:url("../img/table/ghi_sorting_down.svg")}#main-content .table-wrapper table.ghi-table.sortable th #sorttable-sortfwdind,#main-content .table-wrapper table.ghi-table.sortable th #sorttable-sortrevind,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th #sorttable-sortfwdind,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th #sorttable-sortrevind,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th #sorttable-sortfwdind,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th #sorttable-sortrevind{display:none}#main-content .table-wrapper table.ghi-table.sortable th.sorttable-nosort,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table.sortable th.sorttable-nosort,.ghi-modal-dialog .table-wrapper table.ghi-table.sortable th.sorttable-nosort{cursor:initial}#main-content .table-wrapper table.ghi-table tbody tr,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody tr,.ghi-modal-dialog .table-wrapper table.ghi-table tbody tr{border-bottom:1px solid var(--cd-default-border-color)}#main-content .table-wrapper table.ghi-table tbody tr:last-child,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody tr:last-child,.ghi-modal-dialog .table-wrapper table.ghi-table tbody tr:last-child{border-bottom:0}#main-content .table-wrapper table.ghi-table tbody td:first-child.subrow,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td:first-child.subrow,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td:first-child.subrow{padding-left:2rem}#main-content .table-wrapper table.ghi-table tbody td .tooltip,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td .tooltip,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td .tooltip{margin-left:.3rem}#main-content .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart{white-space:nowrap}#main-content .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart .hpc-pie-chart-wrapper,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart .hpc-pie-chart-wrapper,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.data-point--widget-pie-chart .hpc-pie-chart-wrapper{display:inline-flex;width:auto;height:100%;margin-left:5px;aspect-ratio:1/1;vertical-align:middle}#main-content .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar{white-space:nowrap}#main-content .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar .hpc-progress-bar-wrapper,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar .hpc-progress-bar-wrapper,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.data-point--widget-progressbar .hpc-progress-bar-wrapper{margin-left:5px}#main-content .table-wrapper table.ghi-table tbody td.spark-line-chart,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.spark-line-chart,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.spark-line-chart{width:10rem;padding:.5rem .75rem .5rem 0}#main-content .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline,.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline{display:inline-block;width:100%}#main-content .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline svg circle[r="2"],.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline svg circle[r="2"],.ghi-modal-dialog .table-wrapper table.ghi-table tbody td.spark-line-chart span.sparkline svg circle[r="2"]{r:4px;fill:#fed83d}#main-content .table-wrapper table.ghi-table tbody div.modal-link,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody div.modal-link,.ghi-modal-dialog .table-wrapper table.ghi-table tbody div.modal-link{display:inline-block;vertical-align:middle}#main-content .table-wrapper table.ghi-table tbody div.modal-link a,.layout-builder-configure-block div[data-block-preview] .table-wrapper table.ghi-table tbody div.modal-link a,.ghi-modal-dialog .table-wrapper table.ghi-table tbody div.modal-link a{text-decoration:none}@media(min-width: 768px){#main-content .table-wrapper,.layout-builder-configure-block div[data-block-preview] .table-wrapper,.ghi-modal-dialog .table-wrapper{max-width:calc(100vw - 1rem - 2*var(--cd-container-padding-xlarge)) !important}}.ghi-modal-dialog .table-wrapper table.ghi-table{margin-bottom:0}.ghi-modal-dialog .table-wrapper table.ghi-table th{white-space:nowrap;color:var(--ghi-default-text-color);background-color:inherit}.ghi-modal-dialog .table-wrapper table.ghi-table.has-totals-row th{border-bottom:0}.ghi-modal-dialog .table-wrapper table.ghi-table th,.ghi-modal-dialog .table-wrapper table.ghi-table td,.ghi-modal-dialog .table-wrapper table.ghi-table td a{color:var(--ghi-default-text-color);font-size:var(--cd-font-size--small)}.ghi-modal-dialog .table-wrapper table.ghi-table th,.ghi-modal-dialog .table-wrapper table.ghi-table td{padding:1.5rem .5rem 1.5rem 2rem}.ghi-modal-dialog .table-wrapper table.ghi-table th:first-child,.ghi-modal-dialog .table-wrapper table.ghi-table td:first-child{padding-left:.5rem}.ghi-modal-dialog .table-wrapper table.ghi-table th:last-child,.ghi-modal-dialog .table-wrapper table.ghi-table td:last-child{padding-right:.5rem}.ghi-modal-dialog .table-wrapper table.ghi-table tr.totals-row,.ghi-modal-dialog .table-wrapper table.ghi-table tfoot tr{border-bottom:0;background-color:var(--cd-default-background-color)}.ghi-modal-dialog .table-wrapper table.ghi-table tr.totals-row td,.ghi-modal-dialog .table-wrapper table.ghi-table tfoot tr td{font-weight:700}.ajax-progress-fullscreen{z-index:1052;top:0;left:0;width:100%;height:100%;pointer-events:unset;opacity:.7;background-color:var(--cd-tag--color)}.ui-dialog{z-index:301}.ui-dialog .ui-dialog-title{margin-top:0 !important;margin-bottom:0 !important}.ui-dialog .ui-dialog-title .cluster-icon{display:inline-block;width:1rem;margin-right:.5rem;color:#fff}.ui-dialog .ui-dialog-title .cluster-icon svg *{fill:var(--cd-white)}.ui-dialog .ui-dialog-content{position:static !important;color:inherit !important}.ui-dialog.download-dialog .ui-dialog-content{overflow:inherit !important}.ui-dialog.ajax-block-error .ui-dialog-content{margin-top:2rem;margin-bottom:2rem}.ui-dialog.ghi-modal-dialog{max-width:1280px;margin:1rem;border:0 none !important;border-radius:var(--ghi-ui-dialog-border-radius);background:var(--ghi-grey--background) !important}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar{padding:24px;border:1px solid var(--cd-default-border-color);border-top-left-radius:var(--ghi-ui-dialog-border-radius);border-top-right-radius:var(--ghi-ui-dialog-border-radius);background:var(--cd-white) !important;line-height:1.2}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close{top:20px;right:18px;box-sizing:border-box;width:2em;margin:0;transform:none;white-space:nowrap;text-indent:-9999px;opacity:.8;border:none;background:none}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close .ui-button-icon{top:0;left:0;width:100%;height:100%;margin:0;transform:none;background-color:var(--cd-primary-color) !important;-webkit-mask-image:url("/themes/contrib/gin/dist/media/sprite.svg#close-view");mask-image:url("/themes/contrib/gin/dist/media/sprite.svg#close-view");-webkit-mask-size:24px 24px;mask-size:24px 24px;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-position:center center;mask-position:center center;background-image:none}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-title{color:var(--ghi-default-text-color) !important}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-title .cluster-icon{display:inline-block;width:1rem;margin-right:1rem;color:#fff}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-title .cluster-icon svg *{fill:var(--ghi-default-text-color)}.ui-dialog.ghi-modal-dialog .ui-dialog-titlebar .ui-dialog-title .title-additional-info{float:right;margin-right:3rem}.ui-dialog.ghi-modal-dialog .ui-dialog-content{border-right:1px solid var(--cd-default-border-color);border-bottom:1px solid var(--cd-default-border-color);border-left:1px solid var(--cd-default-border-color);border-bottom-right-radius:var(--ghi-ui-dialog-border-radius);border-bottom-left-radius:var(--ghi-ui-dialog-border-radius);background:var(--cd-white) !important}.ui-dialog.ghi-modal-dialog .ui-dialog-content a{color:var(--ghi-default-text-color)}.ui-dialog.ghi-modal-dialog .ui-dialog-content a.fts-link{display:inline-block;margin:1rem}.ui-dialog.ghi-modal-dialog .ui-dialog-content a.fts-link img{height:20px;vertical-align:middle}.ui-dialog.ghi-modal-dialog .ui-dialog-content ul,.ui-dialog.ghi-modal-dialog .ui-dialog-content ol{-webkit-padding-start:2rem;padding-inline-start:2rem}.ui-dialog.ghi-modal-dialog .ui-dialog-content ul li,.ui-dialog.ghi-modal-dialog .ui-dialog-content ol li{padding:.5rem 0}.ghi-modal-dialog+.ui-widget-overlay{z-index:300;opacity:.9;background:var(--ghi-grey--background) !important}article.node--view-mode-grid{display:flex;flex-direction:column;height:100%;border:1px solid var(--cd-default-border-color)}article.node--view-mode-grid .cd-teaser__image{max-width:unset;margin-top:0;margin-bottom:0}article.node--view-mode-grid .cd-teaser__container{display:flex;flex-direction:column;justify-content:space-between;padding:0 1rem}article.node--view-mode-grid .cd-teaser__container a{text-decoration:none}article.node--view-mode-grid .cd-teaser__container .cd-teaser__title--wrapper{font-size:var(--cd-font-size--default)}article.node--view-mode-grid .cd-teaser__container .cd-teaser__description{min-height:7rem;padding-top:1rem;padding-bottom:1rem;line-height:1.2rem}article.node--view-mode-grid .cd-teaser__container .cd-teaser__description:before{display:block;width:12%;padding-top:1rem;content:" ";border-top:3px solid var(--ghi-yellow)}article.node--view-mode-grid .cd-teaser__container .cd-teaser__description .cd-teaser__date{font-size:var(--cd-font-size--small)}body.page-node-type-article .region-page-title .title-prefix,body.page-node-type-document .region-page-title .title-prefix{display:inline-block;margin-top:1rem;padding:.5rem 1rem;text-transform:uppercase;background-color:var(--ghi-primary-button-color);font-size:var(--cd-font-size--small);font-weight:700}body.page-node-type-article article.node--view-mode-full .document-summary,body.page-node-type-document article.node--view-mode-full .document-summary{margin-bottom:4.5rem}body.page-node-type-article article.node--view-mode-full footer.node__meta,body.page-node-type-document article.node--view-mode-full footer.node__meta{padding:1rem 0;border-top:1px solid var(--ghi-default-border-color);border-bottom:1px solid var(--ghi-default-border-color)}body.page-node-type-article article.node--view-mode-full footer.node__meta .node__submitted,body.page-node-type-document article.node--view-mode-full footer.node__meta .node__submitted{display:flex;gap:1rem;font-size:var(--cd-font-size--small)}body.page-node-type-article article.node--view-mode-full .content-wrapper,body.page-node-type-document article.node--view-mode-full .content-wrapper{margin-top:4.5rem}body.page-node-type-article article.node--view-mode-full .paragraph--type--text .gho-text__text a>.media--view-mode-thumbnail-medium.align-right,body.page-node-type-document article.node--view-mode-full .paragraph--type--text .gho-text__text a>.media--view-mode-thumbnail-medium.align-right{margin-bottom:1rem;margin-left:2rem;text-align:center;line-height:.7rem}body.page-node-type-article article.node--view-mode-full .paragraph--type--text .gho-text__text a>.media--view-mode-thumbnail-medium .field--name-field-credits,body.page-node-type-document article.node--view-mode-full .paragraph--type--text .gho-text__text a>.media--view-mode-thumbnail-medium .field--name-field-credits{width:auto;padding:.9rem .9rem;word-wrap:break-word;background-color:var(--ghi-yellow);font-size:var(--cd-font-size--small);font-weight:bold}body.path-overview #main-content,body.path-frontpage #main-content{padding-right:0;padding-left:0}body.path-overview #main-content .ghi-block:first-child,body.path-frontpage #main-content .ghi-block:first-child{margin-top:0;padding-top:0}.ghi-block-global-homepages>.cd-block-title{margin-bottom:.5rem;font-size:var(--cd-font-size--2xbase);font-weight:700}.ghi-block-global-homepages .ghi-block:first-child{margin-top:0;padding-top:0}.ghi-block-global-homepages .ghi-block:first-child .cd-block-title{font-size:var(--cd-font-size--2xbase);font-weight:400}body.page-node-type-homepage .ghi-block:first-child{margin-top:2rem}.snap-png-header{display:none}html.snap--pdf #toolbar-administration,html.snap--pdf .cd-global-header,html.snap--pdf .cd-site-header__actions,html.snap--pdf .layout-builder-ipe-actions,html.snap--pdf .block-wrapper--downloadbutton,html.snap--pdf .block-links{display:none}html.snap--pdf .table-wrapper table.soft-limit+a.expand-table{display:none !important}html.snap--pdf .table-wrapper table.soft-limit tr{display:table-row !important}html.snap--pdf .table-wrapper .modal-link{display:none !important}html.snap--pdf .dialog-off-canvas-main-canvas>.cd-page-layout-container{grid-template-rows:80px auto 1fr auto}.snap-png-header{display:none}html.snap--png .snap-png-header{position:relative;display:block;width:100%;color:var(--ghi-default-text-color);background-color:var(--cd-white)}html.snap--png .snap-png-header:before{position:absolute;z-index:-1;top:-1rem;right:calc(-7rem - 2px);bottom:0;left:calc(-7rem - 2px);height:calc(100% + 1rem);content:"";border-top:1px solid var(--cd-default-border-color);border-bottom:1px solid var(--cd-default-border-color);background-color:inherit}html.snap--png .block-links,html.snap--png .table-search-input-wrapper.empty,html.snap--png .cd-block-title{display:none !important}html.snap--png .header{width:100%}html.snap--png .caption-wrapper{float:left;width:70%}html.snap--png .caption{margin-top:2rem;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--2xbase);line-height:1.4rem}html.snap--png .link{text-decoration:none;color:var(--ghi-default-text-color) !important;font-size:var(--cd-font-size--tiny)}html.snap--png .logo{float:right;width:30%;padding-top:2rem;text-align:right}html.snap--png .title-wrapper{width:100%;margin-bottom:1rem;border-bottom:1px solid var(--cd-default-border-color);font-size:18px}html.snap--png .title{float:left;width:80%}html.snap--png .date{float:right;width:20%;text-align:right}html.snap--png .ghi-block{background-color:#fff}.leaflet-container{font:inherit}.leaflet-container .leaflet-pane{z-index:0}.leaflet-container .leaflet-pane .leaflet-tile-container img{mix-blend-mode:unset}.leaflet-control-container .leaflet-sidebar,.leaflet-control-container .leaflet-top,.leaflet-control-container .leaflet-bottom{z-index:100}.leaflet-control-container .leaflet-sidebar{height:93%;padding:1px}.leaflet-control-container .leaflet-control-attribution{font-size:11px}.leaflet-control-container .leaflet-top.leaflet-left{width:50%}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control{z-index:101;color:var(--ghi-default-text-color);border:1px solid var(--cd-default-border-color);border-radius:0;box-shadow:none;font-size:var(--cd-font-size--default)}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-zoom a{font-size:var(--cd-font-size--default);line-height:26px}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search{position:absolute;left:2.5rem;width:17rem;padding:4px 0}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search input.search-input{display:block !important;width:75%;margin:4px 1rem 4px 1rem;padding:0;border:1px solid var(--cd-default-border-color);border:none;font-size:var(--cd-font-size--small)}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search input.search-input:focus{outline:none}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search a.search-button,.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search a.search-button:hover{position:absolute;top:2px;right:0;margin:3px 0;background-color:rgba(0,0,0,0);background-image:url("../img/icons/search.svg");background-position:center center;background-size:12px 12px}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search .search-alert{padding:.5rem 1rem;color:inherit;border-top:1px solid var(--cd-blue-grey);border-radius:0;font-weight:normal}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search ul.search-tooltip{position:relative;width:100%;max-height:250px;margin-bottom:0;padding-top:4px;border-top:1px solid var(--cd-blue-grey);border-bottom-right-radius:4px;border-bottom-left-radius:4px;background-color:rgba(0,0,0,0);box-shadow:none}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search ul.search-tooltip .search-tip{margin:0;padding:.5rem 1rem;border-radius:0;background:var(--cd-white);font-size:var(--cd-font-size--small)}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search ul.search-tooltip .search-tip .subline{color:var(--cd-grey--mid);font-size:var(--cd-font-size--tiny)}.leaflet-control-container .leaflet-top.leaflet-left .leaflet-control-search ul.search-tooltip .search-tip.hover{background-color:var(--cd-blue-grey--light)}.leaflet-bar-horizontal a{float:left;border-right:1px solid #ccc;border-bottom-width:0}.leaflet-bar-horizontal a:hover{border-bottom-width:0}.leaflet-bar-horizontal a:first-child{border-top-left-radius:4px;border-top-right-radius:0;border-bottom-left-radius:4px}.leaflet-bar-horizontal a:last-child{border-right-width:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}.leaflet-bar-horizontal.admin-level-select a{background-color:var(--cd-grey--light)}.leaflet-bar-horizontal.admin-level-select a.active{background-color:var(--cd-white)}.map-wrapper-outer .leaflet-container.leaflet-map-disabled .leaflet-pane,.map-wrapper-outer .leaflet-container.leaflet-map-disabled .leaflet-top,.map-wrapper-outer .leaflet-container.leaflet-map-disabled .leaflet-bottom{opacity:.7}.map-wrapper-outer .leaflet-control-container .admin-level-select a.disabled{cursor:default;opacity:.2}.map-wrapper-outer .leaflet-control-container .leaflet-control.donut-control{top:.8rem;right:.1rem;border:none}.map-wrapper-outer .leaflet-control-container .leaflet-control.donut-control .donut-control-icon{cursor:pointer}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar{width:auto;font-size:var(--cd-font-size--base)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar a.close{z-index:800;width:auto;height:auto;margin:0;text-indent:0;opacity:1 !important;color:var(--cd-primary-color);background:none}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container{overflow:hidden;padding:0}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container{display:flex;flex-direction:column;height:100%;line-height:24px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .modal-header{height:auto;margin-bottom:.5rem;padding:1rem 1rem .5rem 1rem;color:var(--ghi-default-text-color);border:none;font:inherit}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.title,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .modal-header div.title{font-size:var(--cd-font-size--base);font-weight:bold;line-height:24px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .modal-content{overflow:auto;height:100%;padding:0 1rem;border:none;box-shadow:none;font-size:var(--cd-font-size--small)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container{width:375px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header .navigation{position:relative;left:-0.5rem;display:flex;color:var(--ghi-default-text-color);font-size:var(--cd-font-size--tiny);line-height:24px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header .navigation .link{cursor:pointer;color:var(--cd-primary-color);font-weight:bold}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header .navigation .link.disabled{cursor:default;color:var(--hpc-grey)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.title,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.admin-area{line-height:24px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.title{font-size:var(--cd-font-size--base);font-weight:700}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.tag-line{font-size:var(--cd-font-size--tiny);font-weight:400}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-header div.admin-area{padding-bottom:.5rem;text-transform:uppercase;border-bottom:1px solid #e1e1e1;font-size:var(--cd-font-size--extra-tiny);font-size:10px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content div.section-header{display:flex;gap:.5rem;align-items:center;margin-bottom:0;text-transform:uppercase;font-size:var(--cd-font-size--small);font-weight:700;line-height:16px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content div.section-header span{display:inline-block}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content div.monitoring-period{color:var(--ghi-default-text-color);font-size:var(--cd-font-size--small)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible{display:flex;justify-content:space-between}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper>div,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible>div{display:inline-block}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper .metric-color-code,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible .metric-color-code{position:relative;top:-0.1rem;display:inline-block;width:.5rem;height:.5rem;margin-top:0;margin-right:.4rem;border-radius:50%}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper .metric-label,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible .metric-label{margin-right:1rem}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .map-card-metric-wrapper .metric-value,.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .ratio-visible .metric-value{font-weight:bold}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .monitoring-period-wrapper{margin-top:1rem;padding:.5rem 0}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .monitoring-period-wrapper .measurement-bar-chart-container svg{pointer-events:all}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-container .modal-content .monitoring-period-wrapper .measurement-bar-chart-container svg g{pointer-events:all}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container{width:400px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item{display:flex}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item label.form-label{width:40%;margin-bottom:0;padding-top:3px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item>div{width:60%}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric{display:block;overflow:visible;padding:0;white-space:nowrap;border:none;background-color:rgba(0,0,0,0)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric .label{height:auto !important;height:30px;margin:0;padding:0 24px 0 9px;white-space:nowrap;color:var(--cd-primary-color);border-bottom:1px solid var(--hpc-orange);border-radius:0;background-color:rgba(0,0,0,0);font-size:var(--cd-font-size--small);font-size:inherit;font-weight:bold;line-height:30px}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric .label:after{display:none}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric .icon{position:absolute;top:12px;right:6px;width:10px;height:10px;fill:var(--hpc-orange)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric-items{position:absolute;z-index:1;top:0;border-radius:3px;background-color:var(--cd-white)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric-items ul li{padding:5px 8px;white-space:nowrap;border-top:none;border-bottom:none;font-size:var(--cd-font-size--small);font-weight:bold}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric-items ul li.selected{color:var(--cd-primary-color);background-color:rgba(0,0,0,0)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form .form-item .selectric-wrapper.selectric-open .label{border-bottom:none}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar .leaflet-sidebar-container .map-plan-card-settings-container .donut-control-form button.apply-donut-settings{margin-top:0;margin-bottom:.5rem;padding:6px 8px;color:var(--cd-white);background-color:var(--cd-primary-color)}.map-wrapper-outer .leaflet-control-container .leaflet-sidebar.visible~.leaflet-right{right:0 !important}.map-wrapper-outer .map-tabs{height:auto;background-color:var(--ghi-default-text-color)}.map-wrapper-outer .map-tabs ul{display:flex;height:100%;margin:0;padding:0;gap:2rem;list-style-type:none}.map-wrapper-outer .map-tabs ul li{position:relative;height:2.5rem;padding:.5rem 0;color:var(--cd-white);font-size:var(--cd-font-size--small)}.map-wrapper-outer .map-tabs ul li a{cursor:pointer;text-decoration:none;color:var(--cd-white) !important;font-size:inherit}.map-wrapper-outer .map-tabs ul li .ghi-dropdown__btn+div.cd-dropdown{position:absolute;z-index:101;top:2.5rem;left:-0.3rem;border-top:0}.map-wrapper-outer .map-tabs ul li .ghi-dropdown__btn+div.cd-dropdown div.ghi-dropdown--content{display:flex;flex-direction:column;padding:0;border-top:0;border-top-left-radius:0;border-top-right-radius:0}.map-wrapper-outer .map-tabs ul li .ghi-dropdown__btn+div.cd-dropdown div.ghi-dropdown--content a{display:inline-block;padding:.3rem;white-space:nowrap;color:var(--ghi-default-text-color) !important}.map-wrapper-outer .map-tabs ul li .ghi-dropdown__btn+div.cd-dropdown div.ghi-dropdown--content a:hover{cursor:pointer;background-color:var(--ghi-yellow)}.map-wrapper-outer .map-tabs ul li.active{border-bottom:4px solid var(--ghi-yellow)}.map-wrapper-outer .donut{margin-top:.5rem}.map-wrapper-outer .donut .map-legend{position:absolute;z-index:90;top:1rem;right:1rem;padding:.5rem;background:var(--cd-white)}.map-wrapper-outer .donut .map-legend .legend-caption{margin:0 0 .5rem 0;font-size:var(--cd-font-size--tiny)}.map-wrapper-outer .donut .map-legend ul{display:flex;margin:0;padding:0;border-radius:3px}.map-wrapper-outer .donut .map-legend ul li.legend-item{display:flex;margin:0 1rem 0 0;padding:2px}.map-wrapper-outer .donut .map-legend ul li.legend-item .legend-icon{width:.5rem;height:.5rem;margin-top:.3rem;margin-right:.4rem;border-radius:50%}.map-wrapper-outer .donut .map-legend ul li.legend-item .legend-label{color:var(--ghi-default-text-color);font-size:var(--cd-font-size--tiny)}.map-wrapper-outer .donut .map-legend ul li.legend-item:last-child{margin-right:0}.map-wrapper-outer .donut .has-donut-control .map-legend{right:3rem}.map-wrapper-outer .donut svg.donut .empty path{display:none}@media(max-width: 575px){.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs{position:relative;top:-1rem;margin-right:.5rem}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul{margin:0}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li{padding:0;background-color:rgba(0,0,0,0)}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li a.desktop{display:none}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li a.mobile{display:inline-block;width:3rem;height:3rem}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li a.mobile .icon{width:3rem;height:3rem;padding:.5rem;border-radius:3px;background-color:var(--cd-grey--light);fill:var(--cd-grey--mid)}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .item-list ul li.active a.mobile .icon{background-color:var(--cd-primary-color);fill:var(--cd-white)}.map-wrapper-outer body:not(.download-type-pdf) .donut .map-tabs .download-link-wrapper{margin-top:.7rem;margin-bottom:-0.7rem}}.map-wrapper-outer .map-container{position:relative;width:100%;min-height:500px;margin:0;padding:0;border:1px solid var(--hpc-border-color)}.map-wrapper-outer .map-container>.leaflet-container{min-height:500px}.map-wrapper-outer .map-container .download-link-wrapper{float:right;margin-left:1rem}@media(max-width: 575px){.map-wrapper-outer .map-container .download-link-wrapper{margin-left:.5rem}}.map-wrapper-outer .map-container .map-circle-tooltip,.map-wrapper-outer .map-container .measurement-bar-chart-tooltip{padding:5px 10px;color:var(--cd-white);border-radius:5px;background-color:var(--cd-black);font-size:12px;line-height:1.2rem}.map-wrapper-outer .map-container .map-circle-tooltip div,.map-wrapper-outer .map-container .measurement-bar-chart-tooltip div{display:flex;justify-content:space-between}.cd-page-title{border-bottom:0}.cd-tag{margin:0;padding:0;text-transform:unset;color:var(--ghi-default-text-color);background-color:unset;font-size:var(--cd-font-size--small)}@media(min-width: 1440px){.cd-teaser__image{max-width:100%}}footer.ghi-social-links--inline{width:auto;margin-top:2px}footer.ghi-social-links--fixed{position:fixed;top:50%;right:0;display:inline-block;width:auto}footer.ghi-social-links--fixed>.ghi-social-links__wrapper{display:inline-block;width:-moz-fit-content;width:fit-content;padding:0;background-color:var(--cd-black)}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul{display:inline-flex;flex-direction:column;gap:0;align-items:center}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li{margin-top:.3rem;margin-left:0 !important;padding:.3rem;border-bottom:1px solid var(--cd-white)}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a{display:inline-block;overflow:hidden;width:2rem;height:2rem;padding:0}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a svg{position:relative;display:block;width:100%;height:100%}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a svg path{fill:var(--cd-white);scale:2.3}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--twitter{position:relative;top:.6rem;left:.25rem}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--twitter svg path{scale:1.3}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--facebook svg{left:-4px}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--facebook svg,footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--linkedin svg{background-color:var(--cd-white)}footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--facebook svg path,footer.ghi-social-links--fixed>.ghi-social-links__wrapper ul li a.ghi-social-links__link--linkedin svg path{fill:var(--cd-black)}#main-content .gho-footnote-list__wrapper[data-visible]{width:calc(100% + 68px);padding:1rem 0 1rem 114px;transform:translateX(-114px)}#main-content [dir=rtl] .gho-footnote-list__wrapper[data-visible]{padding:1rem 114px 1rem 0;transform:translateX(114px)}@media screen and (max-width: 768px){#main-content .gho-footnote-list__wrapper[data-visible]{width:calc(100% + 102px)}}.ghi-block .gho-related-articles{margin:0;padding:0;border-top:0}@media screen and (min-width: 768px){.gho-related-article .field--name-field-image{width:calc(40% - 2.25rem);min-width:320px}}.preview-content.ghi-grid .paragraph--type--bottom-figure-row>*>*{zoom:inherit}.preview-content .paragraph.gho-bottom-figure-row{margin-top:0}.paragraph--gho-needs-and-requirements-paragraph+.paragraph--gho-bottom-figure-row{margin-top:0}.paragraph--gho-needs-and-requirements-paragraph+.paragraph--gho-bottom-figure-row .gho-bottom-figure-row::before{content:none}#layout-builder .contextual-region.layout-builder-block,#layout-builder .contextual-region.layout-builder-block.focus{margin-top:4.5rem;padding:2rem !important;border-radius:2px;outline-width:1px !important;outline-style:solid !important;outline-color:var(--colorGinFormElementBorder);outline-offset:0}#layout-builder .contextual-region.layout-builder-block.content-width,#layout-builder .contextual-region.layout-builder-block.focus.content-width{padding-right:2rem !important;padding-left:2rem !important}#layout-builder .contextual-region.layout-builder-block .contextual>button{display:none !important;clip:unset !important}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links{top:-2.5rem !important;right:2rem;display:flex;flex-direction:row-reverse;padding:.5em 0;background:none;background-color:rgba(0,0,0,0) !important;box-shadow:none !important}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li{position:relative;display:block;margin-left:.5rem}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a{padding:0 .25em 0 .25em;padding-left:20px;color:var(--colorGinFormElementBorder) !important;background-color:rgba(0,0,0,0) !important;font-size:.75em !important;line-height:19px}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:focus,#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:hover{color:var(--colorGinPrimary) !important;box-shadow:none}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:focus:after,#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:hover:after{z-index:-1;content:"";background-color:var(--colorGinPrimary) !important;background-repeat:no-repeat;background-position:center;background-size:17px 17px}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li a:after{position:absolute;top:0;left:0;width:17px;height:17px;content:"&";background-color:var(--colorGinFormElementBorder);-webkit-mask-size:17px 17px;mask-size:17px 17px;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-update a:after{-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3ccircle fill='none' stroke='currentColor' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' cx='12' cy='12' r='3'/%3e%3cpath fill='none' stroke='currentColor' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' d='M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3ccircle fill='none' stroke='currentColor' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' cx='12' cy='12' r='3'/%3e%3cpath fill='none' stroke='currentColor' stroke-width='2.25' stroke-linecap='round' stroke-linejoin='round' d='M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-2 2 2 2 0 01-2-2v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 01-2-2 2 2 0 012-2h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 012-2 2 2 0 012 2v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 012 2 2 2 0 01-2 2h-.09a1.65 1.65 0 00-1.51 1z'/%3e%3c/svg%3e")}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-remove a:after{-webkit-mask-image:url("data:image/svg+xml,%3Csvg width='17' height='17' viewBox='0 0 17 17' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.24996 13.4583C4.24996 14.2375 4.88746 14.875 5.66663 14.875H11.3333C12.1125 14.875 12.75 14.2375 12.75 13.4583V4.95833H4.24996V13.4583ZM5.66663 6.375H11.3333V13.4583H5.66663V6.375ZM10.9791 2.83333L10.2708 2.125H6.72913L6.02079 2.83333H3.54163V4.25H13.4583V2.83333H10.9791Z' fill='white'/%3E%3C/svg%3E%0A");mask-image:url("data:image/svg+xml,%3Csvg width='17' height='17' viewBox='0 0 17 17' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.24996 13.4583C4.24996 14.2375 4.88746 14.875 5.66663 14.875H11.3333C12.1125 14.875 12.75 14.2375 12.75 13.4583V4.95833H4.24996V13.4583ZM5.66663 6.375H11.3333V13.4583H5.66663V6.375ZM10.9791 2.83333L10.2708 2.125H6.72913L6.02079 2.83333H3.54163V4.25H13.4583V2.83333H10.9791Z' fill='white'/%3E%3C/svg%3E%0A")}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-show-config a:after{-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M8 6h13M8 12h13M8 18h13M3 6h.01M3 12h.01M3 18h.01'/%3e%3c/svg%3e")}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-hide a:after{-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24M1 1l22 22'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M17.94 17.94A10.07 10.07 0 0112 20c-7 0-11-8-11-8a18.45 18.45 0 015.06-5.94M9.9 4.24A9.12 9.12 0 0112 4c7 0 11 8 11 8a18.5 18.5 0 01-2.16 3.19m-6.72-1.07a3 3 0 11-4.24-4.24M1 1l22 22'/%3e%3c/svg%3e")}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-unhide{display:none}#layout-builder .contextual-region.layout-builder-block .contextual>ul.contextual-links li.layout-builder-block-unhide a:after{-webkit-mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'/%3e%3ccircle fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' cx='12' cy='12' r='3'/%3e%3c/svg%3e");mask-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3e%3cpath fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' d='M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z'/%3e%3ccircle fill='none' stroke='currentColor' stroke-width='3' stroke-linecap='round' stroke-linejoin='round' cx='12' cy='12' r='3'/%3e%3c/svg%3e")}#layout-builder .contextual-region.ghi-block--hidden .layout-builder-block-hide{display:none !important}#layout-builder .contextual-region.ghi-block--hidden .layout-builder-block-unhide{display:block !important}#layout-builder .contextual-region.layout-builder-block:focus,#layout-builder .contextual-region.layout-builder-block:hover{outline-width:2px !important;outline-color:var(--colorGinPrimary)}#layout-builder .contextual-region.layout-builder-block:focus ul.contextual-links,#layout-builder .contextual-region.layout-builder-block:hover ul.contextual-links{display:flex}#layout-builder .contextual-region.layout-builder-block:focus ul.contextual-links li:hover a,#layout-builder .contextual-region.layout-builder-block:hover ul.contextual-links li:hover a{color:var(--colorGinPrimary) !important}.ui-widget-content .layout-builder-configure-block div[data-block-preview] a{color:var(--ghi-default-text-color)}.ui-widget-content .layout-builder-configure-block div[data-block-preview][data-block-preview=plan_webcontent_file]{padding:0} diff --git a/html/themes/custom/common_design_subtheme/sass/cd/_cd-layout.scss b/html/themes/custom/common_design_subtheme/sass/cd/_cd-layout.scss index 97f6f5330..5a3de339b 100644 --- a/html/themes/custom/common_design_subtheme/sass/cd/_cd-layout.scss +++ b/html/themes/custom/common_design_subtheme/sass/cd/_cd-layout.scss @@ -1,4 +1,17 @@ -.cd-layout-container { +.dialog-off-canvas-main-canvas { + height: 100%; + min-height: 100vh; +} + +.cd-page-layout-container { + display: grid; + grid-template-areas: + "header" + "highlighted" + "main" + "soft-footer" + "footer"; + @supports (display: grid) { @include tablet { grid-template-rows: 115px auto 1fr auto; diff --git a/html/themes/custom/common_design_subtheme/sass/cd/_cd-variables.scss b/html/themes/custom/common_design_subtheme/sass/cd/_cd-variables.scss index 5e66c80ab..aaa8afff8 100644 --- a/html/themes/custom/common_design_subtheme/sass/cd/_cd-variables.scss +++ b/html/themes/custom/common_design_subtheme/sass/cd/_cd-variables.scss @@ -69,7 +69,7 @@ --cd-flow-space: 1rem; --cd-bumper-space: 1rem; - // Adjust this depending on number of rows in .cd-layout-container. + // Adjust this depending on number of rows in .cd-page-layout-container. // This ensures the footer is always the last element. --cd-footer-row-number: 5; diff --git a/html/themes/custom/common_design_subtheme/sass/cd/cd-header/_cd-header.scss b/html/themes/custom/common_design_subtheme/sass/cd/cd-header/_cd-header.scss index fe89afadf..8a1ad7cbd 100644 --- a/html/themes/custom/common_design_subtheme/sass/cd/cd-header/_cd-header.scss +++ b/html/themes/custom/common_design_subtheme/sass/cd/cd-header/_cd-header.scss @@ -56,6 +56,7 @@ } .cd-site-header__inner { + display: grid; height: $cd-site-header-height; @supports (display: grid) { diff --git a/html/themes/custom/common_design_subtheme/sass/cd/cd-header/_cd-nav.scss b/html/themes/custom/common_design_subtheme/sass/cd/cd-header/_cd-nav.scss index f4b69232b..9dc4f5fc5 100644 --- a/html/themes/custom/common_design_subtheme/sass/cd/cd-header/_cd-nav.scss +++ b/html/themes/custom/common_design_subtheme/sass/cd/cd-header/_cd-nav.scss @@ -1,7 +1,7 @@ //—————————————————————————————————————————————————————————————————————————————— // Common Design: Main Navigation //—————————————————————————————————————————————————————————————————————————————— -.cd-nav__btn { +.cd-nav-level-0__btn { height: $cd-site-header-height; white-space: nowrap; @@ -57,9 +57,9 @@ } // First level. - > .menu > .menu-item > a, - > .menu > .menu-item > span, - > .menu > .menu-item > button { + > .menu > .menu-item > button > a, + > .menu > .menu-item > button > span, + > .menu > .menu-item > button > button { text-transform: none; font-weight: 700; } @@ -70,6 +70,8 @@ a, span, button { + height: auto; + white-space: normal; font-weight: normal; } diff --git a/html/themes/custom/common_design_subtheme/sass/ghi/_ghi-menu.scss b/html/themes/custom/common_design_subtheme/sass/ghi/_ghi-menu.scss index 23df2a8ef..78e7b2fcb 100644 --- a/html/themes/custom/common_design_subtheme/sass/ghi/_ghi-menu.scss +++ b/html/themes/custom/common_design_subtheme/sass/ghi/_ghi-menu.scss @@ -17,7 +17,7 @@ } } - nav[role="navigation"] { + nav.cd-nav { & > ul > li { @@ -39,76 +39,91 @@ } } + ul.menu li.menu-item .menu-link-contentmain nav[role="navigation"] { + + ul { + padding: 0; + list-style: none; + + li > span { + font-weight: bold; + } + } + + @include max-width(lg) { + margin: 0; + padding: 0; + } + } + @include max-width(lg) { margin: 0; padding: 0; } @include desktop { - &.cd-nav { - position: unset; + position: unset; - ul.menu li.menu-item { + ul.menu li.menu-item { - &:not(:last-child).right-border { - border-right: 1px solid var(--ghi-default-border-color); - } + &:not(:last-child).right-border { + border-right: 1px solid var(--ghi-default-border-color); + } - .menu-link-contentmain { - position: absolute; - z-index: z-index(main-menu); - left: 0; - width: 100%; - background-color: var(--cd-default-background-color); + .menu-link-contentmain { + position: absolute; + z-index: z-index(main-menu); + left: 0; + width: 100%; + background-color: var(--cd-default-background-color); - nav[role="navigation"] > ul { - flex-direction: column; - max-height: 450px; - margin: 2rem 0; + nav[role="navigation"] > ul { + flex-direction: column; + max-height: 450px; + margin: 2rem 0; - & > li { - max-width: 180px; + & > li { + max-width: 180px; - & > span { - padding: 0; - } + & > span { + padding: 0; + } - & > ul { - margin: 0.5rem 0 2rem 0; + & > ul { + margin: 0.5rem 0 2rem 0; - a, - span { - display: inline-block; - margin-bottom: 3px; + a, + span { + display: inline-block; + margin-bottom: 3px; - &:focus, - &:hover { - color: inherit; - background: inherit; - } + &:focus, + &:hover { + color: inherit; + background: inherit; } + } - a:focus, - a:hover { - margin-bottom: 2px; - border-bottom: 1px solid var(--cd-primary-color); - } + a:focus, + a:hover { + margin-bottom: 2px; + border-bottom: 1px solid var(--cd-primary-color); } } } + } - .block-sections-by-term { + .block-sections-by-term { - &.label-visible h2 { - margin-top: 2rem; - } + &.label-visible h2 { + margin-top: 2rem; + } - nav[role="navigation"] > ul li { + nav[role="navigation"] > ul li { - span, - a { - padding: 0; - } + span, + a { + padding: 0; } } } diff --git a/html/themes/custom/common_design_subtheme/sass/ghi/downloads/_snap-pdf.scss b/html/themes/custom/common_design_subtheme/sass/ghi/downloads/_snap-pdf.scss index 990adf081..3c61c481c 100644 --- a/html/themes/custom/common_design_subtheme/sass/ghi/downloads/_snap-pdf.scss +++ b/html/themes/custom/common_design_subtheme/sass/ghi/downloads/_snap-pdf.scss @@ -28,7 +28,7 @@ html.snap--pdf { display: none !important; } - .dialog-off-canvas-main-canvas > .cd-layout-container { + .dialog-off-canvas-main-canvas > .cd-page-layout-container { grid-template-rows: 80px auto 1fr auto; } } diff --git a/html/themes/custom/common_design_subtheme/templates/layout/maintenance-page.html.twig b/html/themes/custom/common_design_subtheme/templates/layout/maintenance-page.html.twig index 376a9bcac..6240afa9f 100644 --- a/html/themes/custom/common_design_subtheme/templates/layout/maintenance-page.html.twig +++ b/html/themes/custom/common_design_subtheme/templates/layout/maintenance-page.html.twig @@ -9,7 +9,7 @@ * @see template_preprocess_maintenance_page() */ #} -
+
diff --git a/html/themes/custom/common_design_subtheme/templates/navigation/menu--extras--main.html.twig b/html/themes/custom/common_design_subtheme/templates/navigation/menu--extras--main.html.twig index 6cc456fb6..3cb6ad57c 100644 --- a/html/themes/custom/common_design_subtheme/templates/navigation/menu--extras--main.html.twig +++ b/html/themes/custom/common_design_subtheme/templates/navigation/menu--extras--main.html.twig @@ -28,20 +28,28 @@ {% macro menu_links(items, attributes, menu_level) %} {% import _self as menus %} {% if items %} + {# When outputting menu level as a class, use the "cosmetic" value so that + classnames begin with 1 instead of 0. #} + {% set menu_level_cosmetic = menu_level + 1 %} + {% set component = 'cd-nav-level-' ~ menu_level_cosmetic %} {% set menu_classes = [ 'menu', - menu_level > 0 ? 'cd-main-menu__dropdown', + 'cd-nav__menu--level-' ~ menu_level_cosmetic, + menu_level > 0 ? component ~ '__dropdown', ] %} - + {% set parent_id = attributes.id ?? (component ~ menu_level) %} + + {% for item in items %} {% set classes = [ 'menu-item', + 'cd-nav__menu-item--level-' ~ menu_level_cosmetic, item.is_expanded ? 'menu-item--expanded', item.is_collapsed ? 'menu-item--collapsed', item.in_active_trail ? 'menu-item--active-trail', @@ -49,17 +57,16 @@ %} {% set title = item.title == '%username%' ? username : item.title %} - {% set id = ('cd-main-menu-item-' ~ menu_level ~ '-' ~ loop.index)|clean_id %} + {% set id = (parent_id ~ '-item-' ~ loop.index)|clean_id %} - {# - Progressive enhancement: make sure there is always a menu entry. - If the menu item has children and javascript is enabled then this will - be replaced with a button to show the child menu. - #} + {# Progressive enhancement: make sure there is always a menu entry. + - If the menu item has children and javascript is enabled then this + will be replaced with a button to show the child menu. + - If the menu item has children, an id attribute / value is added. #} {% if item.url %} - {{ title }} + {{ title }} {% else %} {{ title }} {% endif %} @@ -72,12 +79,16 @@ set attributes = create_attribute({ 'data-cd-toggable': item.title, 'data-cd-icon': 'arrow-down', - 'data-cd-component': 'cd-main-menu', + 'data-cd-component': component, 'data-cd-replace': id, - 'id': ('cd-main-menu-' ~ menu_level ~ '-' ~ loop.index)|clean_id, + 'id': (component ~ '-' ~ menu_level_cosmetic ~ '-' ~ loop.index)|clean_id, }) %} + {# Adding 1 to menu_level here is NOT cosmetic, so the increment is + spelled out explicitly to avoid any accidental find/replace or + other developer change in the future. This increment powers the + recursive macro so that the menu renders its entire depth. #} {{ menus.menu_links(item.below, attributes, menu_level + 1) }} {% elseif item.mega_menu and menu_level < 1 %} diff --git a/html/themes/custom/common_design_subtheme/templates/region/region--page-image.html.twig b/html/themes/custom/common_design_subtheme/templates/region/region--page-image.html.twig index 3c2575929..3b377ff4b 100644 --- a/html/themes/custom/common_design_subtheme/templates/region/region--page-image.html.twig +++ b/html/themes/custom/common_design_subtheme/templates/region/region--page-image.html.twig @@ -21,7 +21,7 @@ {% if elements %} - {% for key, item in elements if key|first != '#' %} + {% for key, item in elements|filter((value, key) => key|first != '#') %} {% if item|render %}
diff --git a/html/themes/custom/common_design_subtheme/templates/region/region--page-navigation.html.twig b/html/themes/custom/common_design_subtheme/templates/region/region--page-navigation.html.twig index 3c2575929..3b377ff4b 100644 --- a/html/themes/custom/common_design_subtheme/templates/region/region--page-navigation.html.twig +++ b/html/themes/custom/common_design_subtheme/templates/region/region--page-navigation.html.twig @@ -21,7 +21,7 @@ {% if elements %} - {% for key, item in elements if key|first != '#' %} + {% for key, item in elements|filter((value, key) => key|first != '#') %} {% if item|render %}
diff --git a/html/themes/custom/common_design_subtheme/templates/region/region--page-subtitle.html.twig b/html/themes/custom/common_design_subtheme/templates/region/region--page-subtitle.html.twig index 46d2ea6e5..9dceea5ab 100644 --- a/html/themes/custom/common_design_subtheme/templates/region/region--page-subtitle.html.twig +++ b/html/themes/custom/common_design_subtheme/templates/region/region--page-subtitle.html.twig @@ -22,7 +22,7 @@ {% if elements %}
- {% for key, item in elements if key|first != '#' %} + {% for key, item in elements|filter((value, key) => key|first != '#') %} {% if item|render %}
diff --git a/html/themes/custom/common_design_subtheme/templates/region/region--page-title.html.twig b/html/themes/custom/common_design_subtheme/templates/region/region--page-title.html.twig index 511e6ed0a..281e79110 100644 --- a/html/themes/custom/common_design_subtheme/templates/region/region--page-title.html.twig +++ b/html/themes/custom/common_design_subtheme/templates/region/region--page-title.html.twig @@ -22,7 +22,7 @@ {% if elements %}
- {% for key, item in elements if key|first != '#' %} + {% for key, item in elements|filter((value, key) => key|first != '#') %} {% if item|render %}